Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
4
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Switch to GitLab Next
Sign in / Register
Toggle navigation
VeryVanilla
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
39
Issues
39
List
Boards
Labels
Service Desk
Milestones
Iterations
Merge Requests
2
Merge Requests
2
Requirements
Requirements
List
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Test Cases
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issue
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
RG Creators
VeryVanilla
Commits
78157f17
Commit
78157f17
authored
May 16, 2018
by
Red Bot
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
updated & ready for test. plugins: autologin, camera, fps, melee & moveutils updated
parent
1a7ad5d1
Changes
36
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
36 changed files
with
5987 additions
and
4108 deletions
+5987
-4108
MQ2Auth.exe
MQ2Auth.exe
+0
-0
MQ2AutoLogin/MQ2AutoLogin.cpp
MQ2AutoLogin/MQ2AutoLogin.cpp
+84
-77
MQ2Camera/MQ2Camera.cpp
MQ2Camera/MQ2Camera.cpp
+30
-133
MQ2Fps/MQ2Fps.cpp
MQ2Fps/MQ2Fps.cpp
+3
-2
MQ2HUD/MQ2HUD.cpp
MQ2HUD/MQ2HUD.cpp
+17
-2
MQ2Main/ArrayClass.h
MQ2Main/ArrayClass.h
+6
-1
MQ2Main/DataTypeList.h
MQ2Main/DataTypeList.h
+1
-0
MQ2Main/EQClasses.cpp
MQ2Main/EQClasses.cpp
+15
-1
MQ2Main/EQClasses.h
MQ2Main/EQClasses.h
+129
-37
MQ2Main/EQData(Test).h
MQ2Main/EQData(Test).h
+340
-327
MQ2Main/EQUIStructs(Test).h
MQ2Main/EQUIStructs(Test).h
+387
-387
MQ2Main/EqData(beta).h
MQ2Main/EqData(beta).h
+6
-1
MQ2Main/MQ2Data.cpp
MQ2Main/MQ2Data.cpp
+37
-6
MQ2Main/MQ2DataTypes.cpp
MQ2Main/MQ2DataTypes.cpp
+367
-36
MQ2Main/MQ2DataTypes.h
MQ2Main/MQ2DataTypes.h
+114
-5
MQ2Main/MQ2Globals.cpp
MQ2Main/MQ2Globals.cpp
+14
-5
MQ2Main/MQ2Globals.h
MQ2Main/MQ2Globals.h
+13
-4
MQ2Main/MQ2Internal.h
MQ2Main/MQ2Internal.h
+1
-1
MQ2Main/MQ2KeyBinds.cpp
MQ2Main/MQ2KeyBinds.cpp
+18
-10
MQ2Main/MQ2Main.cpp
MQ2Main/MQ2Main.cpp
+51
-22
MQ2Main/MQ2Main.h
MQ2Main/MQ2Main.h
+3
-1
MQ2Main/MQ2Main.rc
MQ2Main/MQ2Main.rc
+0
-0
MQ2Main/MQ2Utilities.cpp
MQ2Main/MQ2Utilities.cpp
+320
-11
MQ2Main/MQ2Windows.cpp
MQ2Main/MQ2Windows.cpp
+10
-2
MQ2Main/actordef.h
MQ2Main/actordef.h
+1
-0
MQ2Main/eqgame(Test).h
MQ2Main/eqgame(Test).h
+845
-829
MQ2Melee/Abilities.h
MQ2Melee/Abilities.h
+1
-1
MQ2Melee/MQ2Melee.cpp
MQ2Melee/MQ2Melee.cpp
+9
-7
MQ2MoveUtils/MQ2MoveUtils.cpp
MQ2MoveUtils/MQ2MoveUtils.cpp
+251
-195
Release/Changes.txt
Release/Changes.txt
+56
-4
Release/ItemDB.txt
Release/ItemDB.txt
+7
-0
Release/MQ2Ic.dll
Release/MQ2Ic.dll
+0
-0
Release/MacroQuest2.exe
Release/MacroQuest2.exe
+0
-0
Release/Macros/kissassist.mac
Release/Macros/kissassist.mac
+2536
-1861
Release/Macros/kissassist1004e15.mac
Release/Macros/kissassist1004e15.mac
+248
-140
Release/redchanges.txt
Release/redchanges.txt
+67
-0
No files found.
MQ2Auth.exe
View file @
78157f17
No preview for this file type
MQ2AutoLogin/MQ2AutoLogin.cpp
View file @
78157f17
...
...
@@ -256,6 +256,8 @@ char szPassword[64] = { 0 };
char
szHotkey
[
64
]
=
{
0
};
char
szServerName
[
32
]
=
{
0
};
char
szCharacterName
[
64
]
=
{
0
};
char
szCharClass
[
64
]
=
{
0
};
char
szCharLevel
[
64
]
=
{
0
};
char
szSelectCharacterName
[
64
]
=
{
0
};
char
szNewChar
[
0x40
]
=
{
0
};
char
szUserName
[
64
]
=
{
0
};
...
...
@@ -324,7 +326,7 @@ char xwmMask[] = "x????xx????";
//eqmain.dll
//Feb 16 2018 Test
//8B 35 ? ? ? ? 8a 86
#ifdef EMU
PBYTE
swmPattern
=
(
PBYTE
)
"
\xA1\x00\x00\x00\x00\x80\xB8\x00\x00\x00\x00\x00\x0F\x84\x00\x00\x00\x00\x8D\x88\x00\x00\x00\x00\x8B\x01\x3B\xC3\x74\x00\x89\x45\x00\x33\xDB\x8B\x45\x00\xF0\xFF\x00\x0F\x94\xC3\x89\x5D\x00
"
;
char
swmMask
[]
=
"x????xx?????xx????xx????xxxxx?xx?xxxx?xxxxxxxx?"
;
...
...
@@ -423,6 +425,82 @@ int StrToBlobA(LPCSTR szIn,DATA_BLOB *BlobOut)
delete
[]
szArg
;
return
BlobOut
->
cbData
;
}
char
*
gettok
(
char
*
_String
,
int
_Delimiter
)
{
static
char
theString
[
MAX_STRING
]
=
{
0
};
static
char
*
szString
=
theString
;
char
*
szToken
;
char
*
szRet
;
if
(
_String
!=
NULL
)
{
strcpy_s
(
theString
,
_String
);
szString
=
theString
;
}
if
(
szString
)
{
if
(
szToken
=
strchr
(
szString
,
_Delimiter
))
{
szToken
[
0
]
=
'\0'
;
szRet
=
szString
;
szString
=
++
szToken
;
}
else
{
szRet
=
szString
;
szString
=
NULL
;
}
return
szRet
;
}
else
{
return
NULL
;
}
}
template
<
unsigned
int
_BSize
,
unsigned
int
_SNSize
,
unsigned
int
_CNSize
,
unsigned
int
_PSize
,
unsigned
int
_HKSize
,
unsigned
int
_CCSize
,
unsigned
int
_CLSize
>
bool
ParseBlob
(
CHAR
(
&
szBlob
)[
_BSize
],
CHAR
(
&
szStationName
)[
_SNSize
],
CHAR
(
&
szCharacterName
)[
_CNSize
],
CHAR
(
&
szPassword
)[
_PSize
],
CHAR
(
&
szHotkey
)[
_HKSize
],
CHAR
(
&
szCharClass
)[
_CCSize
],
CHAR
(
&
szCharLevel
)[
_CLSize
])
{
DATA_BLOB
db
=
{
0
};
DATA_BLOB
dbout
=
{
0
};
if
(
szBlob
[
0
])
{
if
(
StrToBlobA
(
szBlob
,
&
db
))
{
if
(
DecryptData
(
&
db
,
&
dbout
))
{
if
(
PCHAR
thestring
=
(
PCHAR
)
dbout
.
pbData
)
{
CHAR
szTemp
[
MAX_STRING
]
=
{
0
};
strcpy_s
(
szTemp
,
thestring
);
LocalFree
(
db
.
pbData
);
//always remember to free this (MSDN)
LocalFree
(
dbout
.
pbData
);
//always remember to free this (MSDN)
INT
token
=
0
;
CHAR
*
pToken
=
gettok
(
szTemp
,
':'
);
while
(
pToken
)
{
token
++
;
switch
(
token
)
{
case
1
:
strcpy_s
(
szStationName
,
pToken
);
break
;
case
2
:
strcpy_s
(
szCharacterName
,
pToken
);
break
;
case
3
:
strcpy_s
(
szPassword
,
pToken
);
break
;
case
4
:
strcpy_s
(
szHotkey
,
pToken
);
break
;
case
5
:
strcpy_s
(
szCharClass
,
pToken
);
break
;
case
6
:
strcpy_s
(
szCharLevel
,
pToken
);
break
;
}
pToken
=
gettok
(
NULL
,
':'
);
}
return
true
;
}
}
}
}
return
false
;
}
class
CXMLDataManager2
{
public:
...
...
@@ -1578,48 +1656,11 @@ void HandleWindows()
pDest
[
0
]
=
'\0'
;
}
AutoLoginDebug
(
"HandleWindows() szBlob(%s)"
,
szBlob
);
DATA_BLOB
db
=
{
0
};
DATA_BLOB
dbout
=
{
0
};
if
(
StrToBlobA
(
szBlob
,
&
db
))
{
if
(
DecryptData
(
&
db
,
&
dbout
))
{
if
(
PCHAR
thestring
=
(
PCHAR
)
dbout
.
pbData
)
{
AutoLoginDebug
(
"HandleWindows() thestring(%s)"
,
thestring
);
//we should parse out Login, CharName, Pass, hotkey
CHAR
szTemp
[
MAX_STRING
]
=
{
0
};
strcpy_s
(
szTemp
,
thestring
);
LocalFree
(
db
.
pbData
);
//always remember to free this (MSDN)
LocalFree
(
dbout
.
pbData
);
//always remember to free this (MSDN)
if
(
PCHAR
pDest
=
strchr
(
szTemp
,
':'
))
{
pDest
[
0
]
=
'\0'
;
strcpy_s
(
szStationName
,
szTemp
);
AutoLoginDebug
(
"HandleWindows() szStationName(%s)"
,
szStationName
);
pDest
++
;
if
(
pDest
[
0
])
{
strcpy_s
(
szTemp
,
pDest
);
if
(
pDest
=
strchr
(
szTemp
,
':'
))
{
pDest
[
0
]
=
'\0'
;
strcpy_s
(
szCharacterName
,
szTemp
);
AutoLoginDebug
(
"HandleWindows() szCharacterName(%s)"
,
szCharacterName
);
pDest
++
;
strcpy_s
(
szPassword
,
pDest
);
if
(
pDest
[
0
])
{
strcpy_s
(
szTemp
,
pDest
);
if
(
pDest
=
strchr
(
szTemp
,
':'
))
{
pDest
[
0
]
=
'\0'
;
strcpy_s
(
szPassword
,
szTemp
);
pDest
++
;
strcpy_s
(
szHotkey
,
pDest
);
}
}
AutoLoginDebug
(
"HandleWindows() szProfile(%s), szStationName(%s), szServerName(%s), szCharacterName(%s)"
,
szProfile
,
szStationName
,
szServerName
,
szCharacterName
);
IC_LoaderSetLoaded
(
szProfile
,
szStationName
,
szServerName
,
szCharacterName
,
GetCurrentProcessId
());
}
}
}
}
}
if
(
ParseBlob
(
szBlob
,
szStationName
,
szCharacterName
,
szPassword
,
szHotkey
,
szCharClass
,
szCharLevel
))
{
IC_LoaderSetLoaded
(
szProfile
,
szStationName
,
szServerName
,
szCharacterName
,
GetCurrentProcessId
());
}
}
DWORD
oldscreenmode
=
ScreenMode
;
ScreenMode
=
3
;
SetCXStr
(
&
((
CEditWnd
*
)
pWnd
)
->
InputText
,
""
);
...
...
@@ -1651,42 +1692,8 @@ void HandleWindows()
if
(
pDest
=
strrchr
(
szBlob
,
'='
))
{
pDest
[
0
]
=
'\0'
;
}
DATA_BLOB
db
=
{
0
};
DATA_BLOB
dbout
=
{
0
};
if
(
StrToBlobA
(
szBlob
,
&
db
))
{
if
(
DecryptData
(
&
db
,
&
dbout
))
{
if
(
PCHAR
thestring
=
(
PCHAR
)
dbout
.
pbData
)
{
//we should parse out Login, CharName, Pass, Hotkey
CHAR
szTemp
[
MAX_STRING
]
=
{
0
};
strcpy_s
(
szTemp
,
thestring
);
LocalFree
(
db
.
pbData
);
//always remember to free this (MSDN)
LocalFree
(
dbout
.
pbData
);
//always remember to free this (MSDN)
if
(
PCHAR
pDest
=
strchr
(
szTemp
,
':'
))
{
pDest
[
0
]
=
'\0'
;
strcpy_s
(
szStationName
,
szTemp
);
pDest
++
;
if
(
pDest
[
0
])
{
strcpy_s
(
szTemp
,
pDest
);
if
(
pDest
=
strchr
(
szTemp
,
':'
))
{
pDest
[
0
]
=
'\0'
;
strcpy_s
(
szCharacterName
,
szTemp
);
pDest
++
;
strcpy_s
(
szPassword
,
pDest
);
if
(
pDest
[
0
])
{
strcpy_s
(
szTemp
,
pDest
);
if
(
pDest
=
strchr
(
szTemp
,
':'
))
{
pDest
[
0
]
=
'\0'
;
strcpy_s
(
szPassword
,
szTemp
);
pDest
++
;
strcpy_s
(
szHotkey
,
pDest
);
}
}
IC_LoaderSetLoaded
(
szProfile
,
szStationName
,
szServerName
,
szCharacterName
,
GetCurrentProcessId
());
}
}
}
}
}
if
(
ParseBlob
(
szBlob
,
szStationName
,
szCharacterName
,
szPassword
,
szHotkey
,
szCharClass
,
szCharLevel
))
{
IC_LoaderSetLoaded
(
szProfile
,
szStationName
,
szServerName
,
szCharacterName
,
GetCurrentProcessId
());
}
}
DWORD
oldscreenmode
=
ScreenMode
;
...
...
MQ2Camera/MQ2Camera.cpp
View file @
78157f17
...
...
@@ -3,16 +3,25 @@
// written by brainiac
// https://github.com/brainiac/MQ2Camera
//
// version information
//Version 1.10 Updated patterns - SwiftyMUSE Feb 21 2018
//Version 2.00 Removed patterns - SwiftyMUSE Apr 23 2018
#include "../MQ2Plugin.h"
#define PLUGIN_NAME "MQ2Camera" // Plugin Name
#define PLUGIN_DATE 20180423 // Plugin Date
#define PLUGIN_VERS 2.00 // Plugin Version
PreSetup
(
"MQ2Camera"
);
#ifndef PLUGIN_API
#include "../MQ2Plugin.h"
PreSetup
(
PLUGIN_NAME
);
PLUGIN_VERSION
(
PLUGIN_VERS
);
#endif PLUGIN_API
#define PLUGIN_MSG "\ag[MQ2Camera]\ax "
#include <algorithm>
using
namespace
std
;
namespace
{
float
s_origZoomCameraMaxDistance
=
0.0
;
...
...
@@ -20,130 +29,14 @@ namespace
bool
s_initialized
=
false
;
//.text:006646B1 loc_6646B1: ; CODE XREF: CEverQuest::MouseWheelScrolled(int)+4D?j
//.text:006646B1 mov eax, dword_F32A3C
//.text:006646B6 fld dword ptr [eax+34h]
//.text:006646B9 fstp [esp+20h+var_1C]
//.text:006646BD fld ds:flt_ABEFC4
//.text:006646C3 fstp [esp+20h+var_18]
//.text:006646C7 fld ds:float const g_fMaxZoomCameraDistance <--
//.text:006646CD fstp [esp+20h+var_14]
//.text:006646D1 call sub_6F7F50
//.text:006646D6 push dword ptr [eax+868h]
//.text:006646DC call sub_986DD0
//.text:006646E1 add esp, 4
//.text:006646E4 test al, al
//.text:006646E6 jz short loc_6646F2
//.text:006646E8 fld ds:flt_AD1D1C
//.text:006646EE fstp [esp+20h+var_14]
// 0x6646b1 02-21-2018
const
char
*
ZoomCameraMaxDistance_Mask
=
"x????xxxxxxxxx????xxxxxx????xxxxx????"
;
const
unsigned
char
*
ZoomCameraMaxDistance_Pattern
=
(
const
unsigned
char
*
)
"
\xA1\x00\x00\x00\x00\xD9\x40\x34\xD9\x5C\x24\x04\xD9\x05\x00\x00\x00\x00\xD9\x5C\x24\x08\xD9\x05\x00\x00\x00\x00\xD9\x5C\x24\x0C\xE8\x00\x00\x00\x00
"
;
const
int
ZoomCameraMaxDistance_Offset
=
(
0x6646C7
+
2
)
-
0x6646B1
;
float
*
ZoomCameraMaxDistance
=
0
;
//.text:008E8CB0 public: virtual void __thiscall EQChaseCamera::UpdateCamera(class PlayerClient *) proc near
//.text:008E8CB0 mov eax, CEverQuest * EverQuestObject
//.text:008E8CB5 sub esp, 2Ch
//.text:008E8CB8 cmp dword ptr [eax+5C8h], 5
//.text:008E8CBF push esi
//.text:008E8CC0 push edi
//.text:008E8CC1 mov edi, [esp+34h+arg_0]
//.text:008E8CC5 mov esi, ecx
//.text:008E8CC7 jnz short loc_8E8D0E
//.text:008E8CC9 fld ds:float const g_fMaxCameraDistance <--
//.text:008E8CCF fcom dword ptr [esi+34h]
//.text:008E8CD2 fnstsw ax
//.text:008E8CD4 test ah, 5
//.text:008E8CD7 jp short loc_8E8CDE
//.text:008E8CD9 fstp dword ptr [esi+34h]
//.text:008E8CDC jmp short loc_8E8CE0
// 0x8e8cb0 02-21-2018
const
char
*
UserCameraMaxDistance_Mask
=
"x????xxxxx?????xxxxxxxxxxxx????xxx"
;
const
unsigned
char
*
UserCameraMaxDistance_Pattern
=
(
const
unsigned
char
*
)
"
\xA1\x00\x00\x00\x00\x83\xEC\x2C\x83\xB8\x00\x00\x00\x00\x00\x56\x57\x8B\x7C\x24\x38\x8B\xF1\x75\x45\xD9\x05\x00\x00\x00\x00\xD8\x56\x34
"
;
const
int
UserCameraMaxDistance_Offset
=
(
0x8E8CC9
+
2
)
-
0x8E8CB0
;
float
*
UserCameraMaxDistance
=
0
;
//.text:005C5B20 public: void __thiscall CDisplay::SetViewActor(class CActorInterface *) proc near
//.text:005C5B20 sub esp, 18h
//.text:005C5B23 push esi
//.text:005C5B24 mov esi, ecx
//.text:005C5B26 mov ecx, CActorInterface * ViewActor
//.text:005C5B2C test ecx, ecx
//.text:005C5B2E jz short loc_5C5B37
//.text:005C5B30 mov eax, [ecx]
//.text:005C5B32 push 0
//.text:005C5B34 call dword ptr [eax+34h]
//.text:005C5B37
//.text:005C5B37 loc_5C5B37: ; CODE XREF: CDisplay::SetViewActor(CActorInterface *)+E?j
//.text:005C5B37 mov ecx, [esp+1Ch+arg_0]
//.text:005C5B3B mov CActorInterface * ViewActor, ecx
//.text:005C5B41 test ecx, ecx
//.text:005C5B43 jz short loc_5C5BB2
//.text:005C5B45 mov eax, [ecx]
//.text:005C5B47 lea edx, [esp+1Ch+var_18]
//.text:005C5B4B push edx
//.text:005C5B4C call dword ptr [eax+80h]
// 0x5c5b20 02-21-2018
const
char
*
SetViewActor_Mask
=
"xxxxxxxx????xxxxxxxxxxxxxxxxx????xxxxxxxxxx"
;
const
unsigned
char
*
SetViewActor_Pattern
=
(
const
unsigned
char
*
)
"
\x83\xEC\x18\x56\x8B\xF1\x8B\x0D\x00\x00\x00\x00\x85\xC9\x74\x07\x8B\x01\x6A\x00\xFF\x50\x34\x8B\x4C\x24\x20\x89\x0D\x00\x00\x00\x00\x85\xC9\x74\x6D\x8B\x01\x8D\x54\x24\x04
"
;
DWORD
CDisplay__SetViewActor_Offset
=
0
;
}
class
CActorInterface
;
class
CDisplay_MQ2Camera_Extension
:
public
CDisplay
{
public:
void
SetViewActor
(
CActorInterface
*
viewActor
);
};
FUNCTION_AT_ADDRESS
(
void
CDisplay_MQ2Camera_Extension
::
SetViewActor
(
CActorInterface
*
),
CDisplay__SetViewActor_Offset
);
template
<
typename
T
>
T
*
GetDataPtrAtOffset
(
DWORD
address
,
int
offset
)
{
if
(
address
)
{
__try
{
address
+=
offset
;
return
reinterpret_cast
<
T
*>
(
*
(
DWORD
*
)
address
);
}
__except
(
EXCEPTION_EXECUTE_HANDLER
)
{
}
}
return
0
;
}
bool
InitValues
()
{
DWORD
address
=
FindPattern
(
FixOffset
(
0x600000
),
0x100000
,
ZoomCameraMaxDistance_Pattern
,
ZoomCameraMaxDistance_Mask
);
ZoomCameraMaxDistance
=
GetDataPtrAtOffset
<
float
>
(
address
,
ZoomCameraMaxDistance_Offset
);
if
(
!
ZoomCameraMaxDistance
)
{
WriteChatf
(
PLUGIN_MSG
"
\a
rFailed to find [ZoomCameraMaxDistance]
\a
x"
);
return
false
;
}
address
=
FindPattern
(
FixOffset
(
0x800000
),
0x100000
,
UserCameraMaxDistance_Pattern
,
UserCameraMaxDistance_Mask
);
UserCameraMaxDistance
=
GetDataPtrAtOffset
<
float
>
(
address
,
UserCameraMaxDistance_Offset
);
if
(
!
UserCameraMaxDistance
)
{
WriteChatf
(
PLUGIN_MSG
"
\a
rFailed to find [UserCameraMaxDistance]
\a
x"
);
return
false
;
}
if
((
CDisplay__SetViewActor_Offset
=
FindPattern
(
FixOffset
(
0x500000
),
0x100000
,
SetViewActor_Pattern
,
SetViewActor_Mask
))
==
0
)
{
WriteChatf
(
PLUGIN_MSG
"
\a
rFailed to find [SetViewActor]
\a
x"
);
return
false
;
}
UserCameraMaxDistance
=
(
float
*
)
FixOffset
(
__gfMaxCameraDistance_x
);
ZoomCameraMaxDistance
=
(
float
*
)
FixOffset
(
__gfMaxZoomCameraDistance_x
);
s_origUserCameraMaxDistance
=
*
UserCameraMaxDistance
;
s_origZoomCameraMaxDistance
=
*
ZoomCameraMaxDistance
;
...
...
@@ -172,6 +65,9 @@ void SetCameraDistance(float distance)
{
if
(
s_initialized
)
{
#ifdef max
#undef max
#endif
float
zoomValue
=
std
::
max
(
distance
,
s_origZoomCameraMaxDistance
);
SetCameraValue
(
ZoomCameraMaxDistance
,
zoomValue
);
...
...
@@ -204,14 +100,14 @@ float LoadCameraDistance()
bool
s_attachedCamera
=
false
;
void
AttachCameraToSpawn
(
PSPAWNINFO
pSpawn
)
void
AttachCameraToSpawn
(
PSPAWNINFO
pSpawn
=
NULL
)
{
bool
attaching
=
true
;
if
(
pSpawn
==
nullptr
)
if
(
!
pSpawn
)
{
// if no spawn is provided, reset to the current player
pSpawn
=
GetCharInfo
()
?
GetCharInfo
()
->
pSpawn
:
nullptr
;
pSpawn
=
GetCharInfo
()
?
GetCharInfo
()
->
pSpawn
:
NULL
;
attaching
=
false
;
}
...
...
@@ -220,19 +116,17 @@ void AttachCameraToSpawn(PSPAWNINFO pSpawn)
// we need to get the actorinterface for the spawn. This is the pactorex
// field of ActorClient
CActorInterface
*
actor
=
(
CActorInterface
*
)
pSpawn
->
mActorClient
.
pcactorex
;
struct
T3D_tagACTORINSTANCE
*
actor
=
(
struct
T3D_tagACTORINSTANCE
*
)
pSpawn
->
mActorClient
.
pcactorex
;
if
(
actor
!=
nullptr
)
if
(
actor
)
{
CDisplay_MQ2Camera_Extension
*
pDisplayEx
=
(
CDisplay_MQ2Camera_Extension
*
)
pDisplay
;
pDisplayEx
->
SetViewActor
(
actor
);
pDisplay
->
SetViewActor
(
actor
);
s_attachedCamera
=
attaching
;
if
(
attaching
)
{
WriteChatf
(
PLUGIN_MSG
"Attaching camera to
\a
y%s"
,
pSpawn
->
Name
);
WriteChatf
(
PLUGIN_MSG
"Attaching camera to
\a
y%s"
,
pSpawn
->
Displayed
Name
);
}
}
}
...
...
@@ -310,14 +204,14 @@ VOID Cmd_Camera(PSPAWNINFO pChar, PCHAR szLine)
else
{
WriteChatf
(
PLUGIN_MSG
"Resetting camera"
);
AttachCameraToSpawn
(
nullptr
);
AttachCameraToSpawn
();
}
}
else
if
(
!
_stricmp
(
Command
,
"detach"
)
||
!
_stricmp
(
Command
,
"reset"
))
{
// reset the camera
WriteChatf
(
PLUGIN_MSG
"Resetting camera"
);
AttachCameraToSpawn
(
nullptr
);
AttachCameraToSpawn
();
}
else
{
...
...
@@ -331,13 +225,16 @@ VOID Cmd_Camera(PSPAWNINFO pChar, PCHAR szLine)
PLUGIN_API
VOID
InitializePlugin
(
VOID
)
{
WriteChatf
(
PLUGIN_MSG
"v
1.0 by brainiac (
\a
ohttps://github.com/brainiac/MQ2Camera
\a
x)
"
);
WriteChatf
(
PLUGIN_MSG
"v
2.00 by brainiac (
\a
ohttps://github.com/brainiac/MQ2Camera
\a
x) updated by SwiftyMUSE
"
);
if
(
!
InitValues
())
{
WriteChatf
(
PLUGIN_MSG
"
\a
rFailed to initialize offsets. Plugin will not function."
);
EzCommand
(
"/timed 1 /plugin mq2camera unload"
);
}
else
{
DebugSpewAlways
(
"%s::gfZoomCameraMaxDistance = 0x%x, 0x%x"
,
PLUGIN_NAME
,
ZoomCameraMaxDistance
,
FixOffset
(
__gfMaxZoomCameraDistance_x
));
DebugSpewAlways
(
"%s::gfUserCameraMaxDistance = 0x%x, 0x%x"
,
PLUGIN_NAME
,
UserCameraMaxDistance
,
FixOffset
(
__gfMaxCameraDistance_x
));
AddCommand
(
"/camera"
,
Cmd_Camera
);
AddDetour
((
DWORD
)
ZoomCameraMaxDistance
);
AddDetour
((
DWORD
)
UserCameraMaxDistance
);
...
...
MQ2Fps/MQ2Fps.cpp
View file @
78157f17
...
...
@@ -11,8 +11,9 @@
// 2.1 by Eqmule 2015-12-11 added support for eqgame.exe dated Dec 08 2015
// 2.2 by rswiders 2016-05-05 added support to set the FPS indicator color (/fpscolor)
// 2.3 - Eqmule 07-22-2016 - Added string safety.
// 2.4 - Eqmule 04-20-2018 - Fixed a ctd in pulse when pWndMgr was NULL
#define PLUGIN_VERS 2.
3
// Plugin Version
#define PLUGIN_VERS 2.
4
// Plugin Version
#pragma warning(disable:4786)
//#define DEBUG_TRY 1
#include "../MQ2Plugin.h"
...
...
@@ -364,7 +365,7 @@ PLUGIN_API VOID OnPulse(VOID)
}
else
{
if
(
InForeground
)
if
(
InForeground
&&
pWndMgr
)
{
// just switched to background, release ctrl/alt/shift
((
PCXWNDMGR
)
pWndMgr
)
->
KeyboardFlags
[
0
]
=
0
;
...
...
MQ2HUD/MQ2HUD.cpp
View file @
78157f17
...
...
@@ -4,7 +4,7 @@
// Updated Sep 09 2017 by eqmule to take undeclared macro variables into account
#include "../MQ2Plugin.h"
HANDLE
hHudLock
=
0
;
bool
bEQHasFocus
=
true
;
HMODULE
EQWhMod
=
0
;
// Module handle used to check for eqw
typedef
HWND
(
__stdcall
*
fEQW_GetDisplayWindow
)(
VOID
);
...
...
@@ -55,6 +55,7 @@ BOOL Stat(PCHAR Filename, struct _stat &Dest)
VOID
ClearElements
()
{
lockit
lk
(
hHudLock
,
"HudLock"
);
while
(
pHud
)
{
PHUDELEMENT
pNext
=
pHud
->
pNext
;
...
...
@@ -65,6 +66,7 @@ VOID ClearElements()
VOID
AddElement
(
PCHAR
IniString
)
{
lockit
lk
(
hHudLock
,
"HudLock"
);
LONG
X
;
LONG
Y
;
DWORD
Type
;
...
...
@@ -154,6 +156,7 @@ VOID AddElement(PCHAR IniString)
VOID
LoadElements
()
{
ClearElements
();
lockit
lk
(
hHudLock
,
"HudLock"
);
CHAR
ElementList
[
MAX_STRING
*
10
]
=
{
0
};
CHAR
szBuffer
[
MAX_STRING
],
CurrentHUD
[
MAX_STRING
]
=
{
0
};
CHAR
ClassDesc
[
MAX_STRING
],
ZoneName
[
MAX_STRING
]
=
{
0
};
...
...
@@ -213,6 +216,7 @@ template <unsigned int _Size>LPSTR SafeItoa(int _Value,char(&_Buffer)[_Size], in
}
VOID
HandleINI
()
{
lockit
lk
(
hHudLock
,
"HudLock"
);
CHAR
szBuffer
[
MAX_STRING
]
=
{
0
};
WritePrivateProfileString
(
HUDSection
,
"Last"
,
HUDNames
,
INIFileName
);
SkipParse
=
GetPrivateProfileInt
(
HUDSection
,
"SkipParse"
,
1
,
INIFileName
);
...
...
@@ -358,6 +362,8 @@ BOOL dataHUD(PCHAR szIndex, MQ2TYPEVAR &Ret)
// Called once, when the plugin is to initialize
PLUGIN_API
VOID
InitializePlugin
(
VOID
)
{
hHudLock
=
CreateMutex
(
NULL
,
FALSE
,
NULL
);
CHAR
szBuffer
[
MAX_STRING
]
=
{
0
};
// check for eqw running, and steal its function to check the foreground window if available
if
(
EQWhMod
=
GetModuleHandle
(
"eqw.dll"
))
...
...
@@ -383,13 +389,19 @@ PLUGIN_API VOID ShutdownPlugin(VOID)
{
DebugSpewAlways
(
"Shutting down MQ2HUD"
);
ClearElements
();
RemoveCommand
(
"/loadhud"
);
lockit
lk
(
hHudLock
,
"HudLock"
);
RemoveCommand
(
"/loadhud"
);
RemoveCommand
(
"/unloadhud"
);
RemoveCommand
(
"/defaulthud"
);
RemoveCommand
(
"/backgroundhud"
);
RemoveCommand
(
"/classhud"
);
RemoveCommand
(
"/zonehud"
);
RemoveMQ2Data
(
"HUD"
);
if
(
hHudLock
)
{
ReleaseMutex
(
hHudLock
);
CloseHandle
(
hHudLock
);
hHudLock
=
0
;
}
}
PLUGIN_API
VOID
SetGameState
(
DWORD
GameState
)
...
...
@@ -511,6 +523,9 @@ BOOL ParseMacroLine(PCHAR szOriginal, SIZE_T BufferSize,std::list<std::string>&o
// Called every frame that the "HUD" is drawn -- e.g. net status / packet loss bar
PLUGIN_API
VOID
OnDrawHUD
(
VOID
)
{
if
(
hHudLock
==
0
)
return
;
lockit
lk
(
hHudLock
,
"HudLock"
);
static
bool
bOkToCheck
=
true
;
static
int
N
=
0
;
CHAR
szBuffer
[
MAX_STRING
]
=
{
0
};
...
...
MQ2Main/ArrayClass.h
View file @
78157f17
...
...
@@ -421,7 +421,12 @@ public:
m_length
--
;
}
}
void
SetLength
(
int
size
)
{
AssureExact
(
size
);
if
(
this
->
m_array
)
this
->
m_length
=
size
;
}
private:
// this function will ensure that there is enough space allocated for the
// requested size. the underlying array is one contiguous block of memory.
...
...
MQ2Main/DataTypeList.h
View file @
78157f17
...
...
@@ -84,6 +84,7 @@ DATATYPE(MQ2ZoneType, pZoneType, nullptr, 0);
DATATYPE
(
MQ2KeyRingType
,
pKeyRingType
,
nullptr
,
0
);
DATATYPE
(
MQ2CharSelectListType
,
pCharSelectListType
,
nullptr
,
0
);
DATATYPE
(
MQ2WorldLocationType
,
pWorldLocationType
,
nullptr
,
0
);
DATATYPE
(
MQ2SolventType
,
pSolventType
,
nullptr
,
0
);
DATATYPE
(
MQ2AugType
,
pAugType
,
nullptr
,
0
);
DATATYPE
(
MQ2RangeType
,
pRangeType
,
nullptr
,
0
);
DATATYPE
(
MQ2AuraType
,
pAuraType
,
nullptr
,
0
);
...
...
MQ2Main/EQClasses.cpp
View file @
78157f17
...
...
@@ -1268,8 +1268,12 @@ FUNCTION_AT_ADDRESS(bool CCursorAttachment::IsOkToActivate(int),CCursorAttachme
FUNCTION_AT_ADDRESS
(
bool
CCursorAttachment
::
RemoveAttachment
(
void
),
CCursorAttachment__RemoveAttachment
);
#endif
#ifdef CCursorAttachment__AttachToCursor_x
#ifndef EMU
FUNCTION_AT_ADDRESS
(
void
CCursorAttachment
::
AttachToCursor
(
class
CTextureAnimation
*
overlay
,
class
CTextureAnimation
*
bg
,
int
type
,
int
index
,
EqItemGuid
&
itemGuid
,
int
itemID
,
char
const
*
assigned_name
,
char
const
*
name
,
int
qty
,
int
IconID
),
CCursorAttachment__AttachToCursor
);
#else
FUNCTION_AT_ADDRESS
(
void
CCursorAttachment
::
AttachToCursor
(
class
CTextureAnimation
*
overlay
,
class
CTextureAnimation
*
bg
,
int
type
,
int
index
,
EqItemGuid
&
itemGuid
,
int
itemID
,
char
const
*
name
,
int
qty
),
CCursorAttachment__AttachToCursor
);
#endif
#endif
#ifdef CCursorAttachment__Deactivate_x
FUNCTION_AT_ADDRESS
(
void
CCursorAttachment
::
Deactivate
(
void
),
CCursorAttachment__Deactivate
);
#endif
...
...
@@ -4088,7 +4092,11 @@ FUNCTION_AT_ADDRESS( EQ_Character::~EQ_Character(void),EQ_Character__dEQ_Charact
FUNCTION_AT_ADDRESS
(
void
EQ_Character
::
EQ_CharacterResetAllMembers
(
void
),
EQ_Character__EQ_CharacterResetAllMembers
);
#endif
#ifdef EQ_Character__ModifyCurHP_x
FUNCTION_AT_ADDRESS
(
void
EQ_Character
::
ModifyCurHP
(
int
,
class
EQPlayer
*
),
EQ_Character__ModifyCurHP
);
#ifdef EMU
FUNCTION_AT_ADDRESS
(
void
EQ_Character
::
ModifyCurHP
(
__int
modification
,
class
PlayerZoneClient
*
resposibleplayer
,
int
skilltype
),
EQ_Character__ModifyCurHP
);
#else
FUNCTION_AT_ADDRESS
(
void
EQ_Character
::
ModifyCurHP
(
__int64
modification
,
class
PlayerZoneClient
*
resposibleplayer
,
int
skilltype
),
EQ_Character__ModifyCurHP
);
#endif
#endif
#ifdef EQ_Character__normal_to_special_x
FUNCTION_AT_ADDRESS
(
int
__cdecl
EQ_Character
::
normal_to_special
(
int
),
EQ_Character__normal_to_special
);
...
...
@@ -6490,6 +6498,12 @@ FUNCTION_AT_ADDRESS(void __cdecl CResolutionHandler::ChangeToResolution(int,int,
#ifdef CResolutionHandler__UpdateWindowPosition_x
FUNCTION_AT_ADDRESS
(
void
__cdecl
CResolutionHandler
::
UpdateWindowPosition
(
void
),
CResolutionHandler__UpdateWindowPosition
);
#endif