120 lines
4.0 KiB
C++
120 lines
4.0 KiB
C++
#include "pch.h"
|
|
#include "convar.h"
|
|
#include "gameutils.h"
|
|
|
|
// memory
|
|
IMemAlloc* g_pMemAllocSingleton;
|
|
typedef IMemAlloc* (*CreateGlobalMemAllocType)();
|
|
CreateGlobalMemAllocType CreateGlobalMemAlloc;
|
|
|
|
// cmd.h
|
|
Cbuf_GetCurrentPlayerType Cbuf_GetCurrentPlayer;
|
|
Cbuf_AddTextType Cbuf_AddText;
|
|
Cbuf_ExecuteType Cbuf_Execute;
|
|
|
|
// hoststate stuff
|
|
CHostState* g_pHostState;
|
|
|
|
// cengine stuff
|
|
CEngine* g_pEngine;
|
|
server_state_t* sv_m_State;
|
|
|
|
// network stuff
|
|
ConVar* Cvar_hostport;
|
|
|
|
// playlist stuff
|
|
GetCurrentPlaylistType GetCurrentPlaylistName;
|
|
SetCurrentPlaylistType SetCurrentPlaylist;
|
|
SetPlaylistVarOverrideType SetPlaylistVarOverride;
|
|
GetCurrentPlaylistVarType GetCurrentPlaylistVar;
|
|
|
|
// server entity stuff
|
|
Server_GetEntityByIndexType Server_GetEntityByIndex;
|
|
|
|
// auth
|
|
char* g_LocalPlayerUserID;
|
|
char* g_LocalPlayerOriginToken;
|
|
|
|
// misc stuff
|
|
ErrorType Error;
|
|
CommandLineType CommandLine;
|
|
Plat_FloatTimeType Plat_FloatTime;
|
|
ThreadInServerFrameThreadType ThreadInServerFrameThread;
|
|
GetBaseLocalClientType GetBaseLocalClient;
|
|
|
|
void InitialiseEngineGameUtilFunctions(HMODULE baseAddress)
|
|
{
|
|
Cbuf_GetCurrentPlayer = (Cbuf_GetCurrentPlayerType)((char*)baseAddress + 0x120630);
|
|
Cbuf_AddText = (Cbuf_AddTextType)((char*)baseAddress + 0x1203B0);
|
|
Cbuf_Execute = (Cbuf_ExecuteType)((char*)baseAddress + 0x1204B0);
|
|
|
|
g_pHostState = (CHostState*)((char*)baseAddress + 0x7CF180);
|
|
g_pEngine = *(CEngine**)((char*)baseAddress + 0x7D70C8);
|
|
sv_m_State = (server_state_t*)((char*)baseAddress + 0x12A53D48);
|
|
|
|
GetCurrentPlaylistName = (GetCurrentPlaylistType)((char*)baseAddress + 0x18C640);
|
|
SetCurrentPlaylist = (SetCurrentPlaylistType)((char*)baseAddress + 0x18EB20);
|
|
SetPlaylistVarOverride = (SetPlaylistVarOverrideType)((char*)baseAddress + 0x18ED00);
|
|
GetCurrentPlaylistVar = (GetCurrentPlaylistVarType)((char*)baseAddress + 0x18C680);
|
|
|
|
g_LocalPlayerUserID = (char*)baseAddress + 0x13F8E688;
|
|
g_LocalPlayerOriginToken = (char*)baseAddress + 0x13979C80;
|
|
|
|
GetBaseLocalClient = (GetBaseLocalClientType)((char*)baseAddress + 0x78200);
|
|
|
|
/* NOTE:
|
|
g_pCVar->FindVar("convar_name") now works. These are no longer needed.
|
|
You can also itterate over every ConVar using CCVarIteratorInternal
|
|
dump the pointers to a vector and access them from there.
|
|
Example:
|
|
std::vector<ConVar*> g_pAllConVars;
|
|
for (auto& map : g_pCVar->DumpToMap())
|
|
{
|
|
ConVar* pConVar = g_pCVar->FindVar(map.first.c_str());
|
|
if (pConVar)
|
|
{
|
|
g_pAllConVars.push_back(pConVar);
|
|
}
|
|
}*/
|
|
|
|
Cvar_hostport = (ConVar*)((char*)baseAddress + 0x13FA6070);
|
|
}
|
|
|
|
void InitialiseServerGameUtilFunctions(HMODULE baseAddress)
|
|
{
|
|
Server_GetEntityByIndex = (Server_GetEntityByIndexType)((char*)baseAddress + 0xFB820);
|
|
}
|
|
|
|
void InitialiseTier0GameUtilFunctions(HMODULE baseAddress)
|
|
{
|
|
if (!baseAddress)
|
|
{
|
|
spdlog::critical("tier0 base address is null, but it should be already loaded");
|
|
throw "tier0 base address is null, but it should be already loaded";
|
|
}
|
|
if (g_pMemAllocSingleton)
|
|
return; // seems this function was already called
|
|
CreateGlobalMemAlloc = reinterpret_cast<CreateGlobalMemAllocType>(GetProcAddress(baseAddress, "CreateGlobalMemAlloc"));
|
|
IMemAlloc** ppMemAllocSingleton = reinterpret_cast<IMemAlloc**>(GetProcAddress(baseAddress, "g_pMemAllocSingleton"));
|
|
if (!ppMemAllocSingleton)
|
|
{
|
|
spdlog::critical("Address of g_pMemAllocSingleton is a null pointer, this should never happen");
|
|
throw "Address of g_pMemAllocSingleton is a null pointer, this should never happen";
|
|
}
|
|
if (!*ppMemAllocSingleton)
|
|
{
|
|
g_pMemAllocSingleton = CreateGlobalMemAlloc();
|
|
*ppMemAllocSingleton = g_pMemAllocSingleton;
|
|
spdlog::info("Created new g_pMemAllocSingleton");
|
|
}
|
|
else
|
|
{
|
|
g_pMemAllocSingleton = *ppMemAllocSingleton;
|
|
}
|
|
|
|
Error = reinterpret_cast<ErrorType>(GetProcAddress(baseAddress, "Error"));
|
|
CommandLine = reinterpret_cast<CommandLineType>(GetProcAddress(baseAddress, "CommandLine"));
|
|
Plat_FloatTime = reinterpret_cast<Plat_FloatTimeType>(GetProcAddress(baseAddress, "Plat_FloatTime"));
|
|
ThreadInServerFrameThread = reinterpret_cast<ThreadInServerFrameThreadType>(GetProcAddress(baseAddress, "ThreadInServerFrameThread"));
|
|
}
|