Move Cvar_DirectSet to gamedata
This commit is contained in:
parent
af0042b71d
commit
0e8d876c5d
|
@ -116,41 +116,16 @@ void CvarManager::CreateCvarHook(void)
|
||||||
// Cvar_DirectSet(var, value); // <- We want to hook this.
|
// Cvar_DirectSet(var, value); // <- We want to hook this.
|
||||||
// }
|
// }
|
||||||
|
|
||||||
byte *baseAddress = (byte *)g_engfuncs.pfnCvar_DirectSet;
|
void *functionAddress = nullptr;
|
||||||
uintptr_t *functionAddress = nullptr;
|
|
||||||
|
|
||||||
#if defined(WIN32)
|
if (CommonConfig && CommonConfig->GetMemSig("Cvar_DirectSet", &functionAddress) && functionAddress)
|
||||||
// 55 push ebp
|
|
||||||
// 8B EC mov ebp, esp
|
|
||||||
// 8B 45 0C mov eax, [ebp+arg_4]
|
|
||||||
// 8B 4D 08 mov ecx, [ebp+arg_0]
|
|
||||||
// 50 push eax
|
|
||||||
// 51 push ecx
|
|
||||||
// E8 XX XX XX XX call Cvar_DirectSet
|
|
||||||
const byte opcodeJump = 0xE8;
|
|
||||||
#else
|
|
||||||
// E9 XX XX XX XX jmp Cvar_DirectSet
|
|
||||||
const byte opcodeJump = 0xE9;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const byte opcodeJumpSize = 5;
|
|
||||||
const byte opcodeJumpByteSize = 1;
|
|
||||||
|
|
||||||
const int maxBytesLimit = 20;
|
|
||||||
|
|
||||||
for (size_t i = 0; i < maxBytesLimit; ++i, ++baseAddress)
|
|
||||||
{
|
|
||||||
if (*baseAddress == opcodeJump)
|
|
||||||
{
|
|
||||||
functionAddress = (uintptr_t *)(&baseAddress[opcodeJumpSize] + *(uintptr_t *)&baseAddress[opcodeJumpByteSize]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (functionAddress)
|
|
||||||
{
|
{
|
||||||
// Disabled by default.
|
// Disabled by default.
|
||||||
m_HookDetour = DETOUR_CREATE_STATIC_FIXED(Cvar_DirectSet, (void *)functionAddress);
|
m_HookDetour = DETOUR_CREATE_STATIC_FIXED(Cvar_DirectSet, functionAddress);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AMXXLOG_Log("Binding/Hooking cvars have been disabled - check your gamedata files.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include <amtl/am-vector.h>
|
#include <amtl/am-vector.h>
|
||||||
#include <amtl/am-inlinelist.h>
|
#include <amtl/am-inlinelist.h>
|
||||||
#include <sm_namehashset.h>
|
#include <sm_namehashset.h>
|
||||||
|
#include "CGameConfigs.h"
|
||||||
|
|
||||||
class CDetour;
|
class CDetour;
|
||||||
|
|
||||||
|
|
|
@ -1572,10 +1572,10 @@ C_DLLEXPORT int Meta_Attach(PLUG_LOADTIME now, META_FUNCTIONS *pFunctionTable, m
|
||||||
|
|
||||||
FlagMan.SetFile("cmdaccess.ini");
|
FlagMan.SetFile("cmdaccess.ini");
|
||||||
|
|
||||||
g_CvarManager.CreateCvarHook();
|
|
||||||
|
|
||||||
ConfigManager.OnAmxxStartup();
|
ConfigManager.OnAmxxStartup();
|
||||||
|
|
||||||
|
g_CvarManager.CreateCvarHook();
|
||||||
|
|
||||||
void *address = nullptr;
|
void *address = nullptr;
|
||||||
|
|
||||||
if (CommonConfig && CommonConfig->GetMemSig("SV_DropClient", &address) && address)
|
if (CommonConfig && CommonConfig->GetMemSig("SV_DropClient", &address) && address)
|
||||||
|
|
|
@ -22,6 +22,13 @@
|
||||||
"linux" "@SV_DropClient"
|
"linux" "@SV_DropClient"
|
||||||
"mac" "@SV_DropClient"
|
"mac" "@SV_DropClient"
|
||||||
}
|
}
|
||||||
|
"Cvar_DirectSet" // void Cvar_DirectSet(struct cvar_s *var, char *value);
|
||||||
|
{
|
||||||
|
"library" "engine"
|
||||||
|
"windows" "\x55\x8B\x2A\x81\x2A\x2A\x2A\x2A\x2A\x56\x8B\x2A\x2A\x57\x8B\x2A\x2A\x85"
|
||||||
|
"linux" "@Cvar_DirectSet"
|
||||||
|
"mac" "@Cvar_DirectSet"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user