CServerGameDLL::DLLInit
0x006c7070 · 2891 bytes · __thiscall
_ZN14CServerGameDLL7DLLInitEPFPvPKcPiES5_S5_P11CGlobalVars
Decompiled
undefined (5 params)
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* CServerGameDLL::DLLInit(void* (*)(char const*, int*), void* (*)(char const*, int*), void*
(*)(char const*, int*), CGlobalVars*) */
undefined4 __thiscall
CServerGameDLL::DLLInit
(CServerGameDLL *this,_func_void_ptr_char_ptr_int_ptr *param_1,
_func_void_ptr_char_ptr_int_ptr *param_2,_func_void_ptr_char_ptr_int_ptr *param_3,
CGlobalVars *param_4)
{
pthread_mutexattr_t *__attr;
code *pcVar1;
char cVar2;
byte bVar3;
int *piVar4;
undefined4 *puVar5;
int iVar6;
undefined4 uVar7;
longdouble lVar8;
_func_void_ptr_char_ptr_int_ptr *p_Var9;
char *pcVar10;
float local_30;
_func_void_ptr_char_ptr_int_ptr *local_28;
_func_void_ptr_char_ptr_int_ptr *local_24;
_func_void_ptr_char_ptr_int_ptr *local_20;
COM_TimestampedLog("ConnectTier1/2/3Libraries - Start");
ConnectTier1Libraries((_func_void_ptr_char_ptr_int_ptr *)¶m_1,1);
ConnectTier2Libraries((_func_void_ptr_char_ptr_int_ptr *)¶m_1,1);
ConnectTier3Libraries((_func_void_ptr_char_ptr_int_ptr *)¶m_1,1);
COM_TimestampedLog("ConnectTier1/2/3Libraries - Finish");
if (cvar != 0) {
SteamAPI_Init();
piVar4 = (int *)SteamInternal_ContextInit(SteamClient()::s_CallbackCounterAndContext);
s_SteamAPIContext = *piVar4;
if (s_SteamAPIContext != 0) {
piVar4 = (int *)SteamInternal_ContextInit(SteamUser()::s_CallbackCounterAndContext);
DAT_00fe3444 = *piVar4;
if (DAT_00fe3444 != 0) {
piVar4 = (int *)SteamInternal_ContextInit(SteamFriends()::s_CallbackCounterAndContext);
_DAT_00fe3448 = *piVar4;
if (_DAT_00fe3448 != 0) {
piVar4 = (int *)SteamInternal_ContextInit(SteamUtils()::s_CallbackCounterAndContext);
_DAT_00fe344c = *piVar4;
if (_DAT_00fe344c != 0) {
piVar4 = (int *)SteamInternal_ContextInit
(SteamMatchmaking()::s_CallbackCounterAndContext);
_DAT_00fe3450 = *piVar4;
if (_DAT_00fe3450 != 0) {
piVar4 = (int *)SteamInternal_ContextInit
(SteamGameSearch()::s_CallbackCounterAndContext);
_DAT_00fe3454 = *piVar4;
if (_DAT_00fe3454 != 0) {
piVar4 = (int *)SteamInternal_ContextInit
(SteamMatchmakingServers()::s_CallbackCounterAndContext);
_DAT_00fe3460 = *piVar4;
if (_DAT_00fe3460 != 0) {
piVar4 = (int *)SteamInternal_ContextInit
(SteamUserStats()::s_CallbackCounterAndContext);
_DAT_00fe3458 = *piVar4;
if (_DAT_00fe3458 != 0) {
piVar4 = (int *)SteamInternal_ContextInit
(SteamApps()::s_CallbackCounterAndContext);
_DAT_00fe345c = *piVar4;
if (_DAT_00fe345c != 0) {
piVar4 = (int *)SteamInternal_ContextInit
(SteamNetworking()::s_CallbackCounterAndContext);
_DAT_00fe3464 = *piVar4;
if (_DAT_00fe3464 != 0) {
piVar4 = (int *)SteamInternal_ContextInit
(SteamRemoteStorage()::s_CallbackCounterAndContext
);
_DAT_00fe3468 = *piVar4;
if (_DAT_00fe3468 != 0) {
piVar4 = (int *)SteamInternal_ContextInit
(SteamScreenshots()::s_CallbackCounterAndContext
);
_DAT_00fe346c = *piVar4;
if (_DAT_00fe346c != 0) {
piVar4 = (int *)SteamInternal_ContextInit
(SteamHTTP()::s_CallbackCounterAndContext);
_DAT_00fe3470 = *piVar4;
if (_DAT_00fe3470 != 0) {
piVar4 = (int *)SteamInternal_ContextInit
(SteamController()::
s_CallbackCounterAndContext);
_DAT_00fe3474 = *piVar4;
if (_DAT_00fe3474 != 0) {
piVar4 = (int *)SteamInternal_ContextInit
(SteamUGC()::s_CallbackCounterAndContext);
_DAT_00fe3478 = *piVar4;
if (_DAT_00fe3478 != 0) {
piVar4 = (int *)SteamInternal_ContextInit
(SteamAppList()::
s_CallbackCounterAndContext);
_DAT_00fe347c = *piVar4;
if (_DAT_00fe347c != 0) {
piVar4 = (int *)SteamInternal_ContextInit
(SteamMusic()::
s_CallbackCounterAndContext);
_DAT_00fe3480 = *piVar4;
if (_DAT_00fe3480 != 0) {
piVar4 = (int *)SteamInternal_ContextInit
(SteamMusicRemote()::
s_CallbackCounterAndContext);
_DAT_00fe3484 = *piVar4;
if (_DAT_00fe3484 != 0) {
piVar4 = (int *)SteamInternal_ContextInit
(SteamHTMLSurface()::
s_CallbackCounterAndContext);
_DAT_00fe3488 = *piVar4;
if (_DAT_00fe3488 != 0) {
piVar4 = (int *)SteamInternal_ContextInit
(SteamInventory()::
s_CallbackCounterAndContext);
_DAT_00fe348c = *piVar4;
if (_DAT_00fe348c != 0) {
piVar4 = (int *)SteamInternal_ContextInit
(SteamVideo()::
s_CallbackCounterAndContext);
_DAT_00fe3490 = *piVar4;
if (_DAT_00fe3490 != 0) {
piVar4 = (int *)SteamInternal_ContextInit
(SteamParentalSettings()::
s_CallbackCounterAndContext
);
_DAT_00fe3494 = *piVar4;
if (_DAT_00fe3494 != 0) {
puVar5 = (undefined4 *)
SteamInternal_ContextInit
(SteamInput()::
s_CallbackCounterAndContext);
_DAT_00fe3498 = *puVar5;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
piVar4 = (int *)SteamInternal_ContextInit(SteamClient()::s_CallbackCounterAndContext);
s_SteamGameServerAPIContext = *piVar4;
if (s_SteamGameServerAPIContext != 0) {
puVar5 = (undefined4 *)
SteamInternal_ContextInit(SteamGameServer()::s_CallbackCounterAndContext);
DAT_00fe3424 = *puVar5;
puVar5 = (undefined4 *)
SteamInternal_ContextInit(SteamGameServerUtils()::s_CallbackCounterAndContext);
_DAT_00fe3428 = *puVar5;
puVar5 = (undefined4 *)
SteamInternal_ContextInit(SteamGameServerNetworking()::s_CallbackCounterAndContext);
_DAT_00fe342c = *puVar5;
puVar5 = (undefined4 *)
SteamInternal_ContextInit(SteamGameServerStats()::s_CallbackCounterAndContext);
_DAT_00fe3430 = *puVar5;
puVar5 = (undefined4 *)
SteamInternal_ContextInit(SteamGameServerHTTP()::s_CallbackCounterAndContext);
_DAT_00fe3434 = *puVar5;
puVar5 = (undefined4 *)
SteamInternal_ContextInit(SteamGameServerInventory()::s_CallbackCounterAndContext);
_DAT_00fe3438 = *puVar5;
puVar5 = (undefined4 *)
SteamInternal_ContextInit(SteamGameServerUGC()::s_CallbackCounterAndContext);
_DAT_00fe343c = *puVar5;
}
COM_TimestampedLog("Factories - Start");
engine = (*param_1)("VEngineServer022",(int *)0x0);
if ((((((((engine != (int *)0x0) &&
(g_pVoiceServer = (*param_1)("VoiceServer002",(int *)0x0),
g_pVoiceServer != (void *)0x0)) &&
(networkstringtable = (*param_1)("VEngineServerStringTable001",(int *)0x0),
networkstringtable != (void *)0x0)) &&
((staticpropmgr = (*param_1)("StaticPropMgrServer002",(int *)0x0),
staticpropmgr != (void *)0x0 &&
(random_valve = (*param_1)("VEngineRandom001",(int *)0x0), random_valve != (void *)0x0))
)) && (enginesound = (*param_1)("IEngineSoundServer003",(int *)0x0),
enginesound != (void *)0x0)) &&
(((partition = (*param_1)("SpatialPartition001",(int *)0x0), partition != (void *)0x0 &&
(modelinfo = (*param_1)("VModelInfoServer002",(int *)0x0), modelinfo != (void *)0x0)) &&
((enginetrace = (*param_1)("EngineTraceServer003",(int *)0x0), enginetrace != (void *)0x0
&& (((filesystem = (*param_3)("VFileSystem018",(int *)0x0), filesystem != (void *)0x0 &&
(gameeventmanager = (*param_1)("GAMEEVENTSMANAGER002",(int *)0x0),
gameeventmanager != (int *)0x0)) &&
(datacache = (*param_1)("VDataCache003",(int *)0x0), datacache != (void *)0x0))))))))
&& ((soundemitterbase = (*param_1)("VSoundEmitter003",(int *)0x0),
soundemitterbase != (undefined4 *)0x0 &&
(gamestatsuploader = (*param_1)("ServerUploadGameStats001",(int *)0x0),
gamestatsuploader != (void *)0x0)))) &&
((mdlcache != 0 &&
(((serverpluginhelpers = (*param_1)("ISERVERPLUGINHELPERS001",(int *)0x0),
serverpluginhelpers != (void *)0x0 &&
(scenefilecache = (*param_1)("SceneFileCache002",(int *)0x0),
scenefilecache != (void *)0x0)) &&
((blackboxrecorder = (*param_1)("BlackBoxVersion001",(int *)0x0),
blackboxrecorder != (void *)0x0 &&
(((xboxsystem = (*param_1)("XboxSystemInterface001",(int *)0x0), xboxsystem != (void *)0x0
&& (pINetSupport = (*param_1)("INETSUPPORT_001",(int *)0x0), pINetSupport != (void *)0x0
)) && (workshop = (*param_1)("VWorkshop001",(int *)0x0), workshop != (void *)0x0)))))
))))) {
piVar4 = (int *)CommandLine_Tier0();
iVar6 = (**(code **)(*piVar4 + 0xc))(piVar4,"-noscripting",0);
if (iVar6 == 0) {
scriptmanager = (*param_1)("VScriptManager010",(int *)0x0);
}
g_pMatchExtL4D = (*param_1)("IMATCHEXT_L4D_INTERFACE_001",(int *)0x0);
if ((g_pMatchExtL4D != (void *)0x0) && (g_pMatchFramework != (int *)0x0)) {
puVar5 = (undefined4 *)(**(code **)(*g_pMatchFramework + 0x18))(g_pMatchFramework);
if (puVar5 != (undefined4 *)0x0) {
(**(code **)*puVar5)(puVar5,"ServerGameDLL005",this);
}
COM_TimestampedLog("Factories - Finish");
COM_TimestampedLog("soundemitterbase->Connect");
cVar2 = (**(code **)*soundemitterbase)(soundemitterbase,param_1);
if (cVar2 != '\0') {
piVar4 = (int *)CommandLine_Tier0();
iVar6 = (**(code **)(*piVar4 + 0x28))(piVar4,"-headtracking");
if (iVar6 != 0) {
g_bHeadTrackingEnabled = 1;
}
piVar4 = (int *)CommandLine_Tier0();
iVar6 = (**(code **)(*piVar4 + 0x28))(piVar4,"-pressdemo");
if (iVar6 != 0) {
g_bPressDemoMode = 1;
}
gpGlobals = param_4;
g_pSharedChangeInfo = (**(code **)(*engine + 0x178))(engine);
COM_TimestampedLog("MathLib_Init");
MathLib_Init(2.2,2.2,0.0,2,true,true,true,true);
local_28 = param_1;
local_20 = param_3;
local_24 = param_2;
FactoryList_Store((factorylist_t *)&local_28);
COM_TimestampedLog("gameeventmanager->LoadEventsFromFile");
(**(code **)(*gameeventmanager + 8))(gameeventmanager,"resource/gameevents.res");
COM_TimestampedLog("InitializeCvars");
InitializeCvars();
COM_TimestampedLog("g_pParticleSystemMgr->Init");
bVar3 = (**(code **)(*engine + 500))(engine);
cVar2 = CParticleSystemMgr::Init
((CParticleSystemMgr *)g_pParticleSystemMgr,
(IParticleSystemQuery *)g_pParticleSystemQuery,(bool)(bVar3 ^ 1));
if ((cVar2 != '\0') &&
(sv_cheats = (**(code **)(*g_pCVar + 0x30))(g_pCVar,"sv_cheats"), sv_cheats != 0)) {
g_pcv_commentary = (**(code **)(*g_pCVar + 0x30))(g_pCVar,"commentary");
g_pcv_ThreadMode = (**(code **)(*g_pCVar + 0x30))(g_pCVar,"host_thread_mode");
sv_maxreplay = (**(code **)(*g_pCVar + 0x30))(g_pCVar,"sv_maxreplay");
COM_TimestampedLog("g_pGameSaveRestoreBlockSet");
pcVar1 = *(code **)(*(int *)g_pGameSaveRestoreBlockSet + 0x24);
uVar7 = GetEntitySaveRestoreBlockHandler();
(*pcVar1)(g_pGameSaveRestoreBlockSet,uVar7);
pcVar1 = *(code **)(*(int *)g_pGameSaveRestoreBlockSet + 0x24);
uVar7 = GetPhysSaveRestoreBlockHandler();
(*pcVar1)(g_pGameSaveRestoreBlockSet,uVar7);
pcVar1 = *(code **)(*(int *)g_pGameSaveRestoreBlockSet + 0x24);
uVar7 = GetTemplateSaveRestoreBlockHandler();
(*pcVar1)(g_pGameSaveRestoreBlockSet,uVar7);
pcVar1 = *(code **)(*(int *)g_pGameSaveRestoreBlockSet + 0x24);
uVar7 = GetDefaultResponseSystemSaveRestoreBlockHandler();
(*pcVar1)(g_pGameSaveRestoreBlockSet,uVar7);
pcVar1 = *(code **)(*(int *)g_pGameSaveRestoreBlockSet + 0x24);
uVar7 = GetCommentarySaveRestoreBlockHandler();
(*pcVar1)(g_pGameSaveRestoreBlockSet,uVar7);
pcVar1 = *(code **)(*(int *)g_pGameSaveRestoreBlockSet + 0x24);
uVar7 = GetEventQueueSaveRestoreBlockHandler();
(*pcVar1)(g_pGameSaveRestoreBlockSet,uVar7);
pcVar1 = *(code **)(*(int *)g_pGameSaveRestoreBlockSet + 0x24);
uVar7 = GetAchievementSaveRestoreBlockHandler();
(*pcVar1)(g_pGameSaveRestoreBlockSet,uVar7);
pcVar1 = *(code **)(*(int *)g_pGameSaveRestoreBlockSet + 0x24);
uVar7 = GetVScriptSaveRestoreBlockHandler();
(*pcVar1)(g_pGameSaveRestoreBlockSet,uVar7);
if (*(int *)(sv_threaded_init._28_4_ + 0x30) == 0) {
COM_TimestampedLog("ParseParticleEffects");
ParseParticleEffects(false);
pcVar10 = "InitGameSystems - Start";
COM_TimestampedLog();
uVar7 = InitGameSystems((_func_void_ptr_char_ptr_int_ptr *)pcVar10);
COM_TimestampedLog("InitGameSystems - Finish");
}
else {
puVar5 = ::operator_new(0x18);
puVar5[3] = 1;
*puVar5 = &PTR_AddRef_00c91ca8;
puVar5[2] = &DAT_00c91cc4;
puVar5[4] = ParseParticleEffects;
*(undefined1 *)(puVar5 + 5) = 0;
piVar4 = ::operator_new(0xcc);
piVar4[2] = 1;
__attr = (pthread_mutexattr_t *)(piVar4 + 0xb);
*piVar4 = (int)&PTR_AddRef_00c91aa8;
piVar4[1] = (int)&DAT_00c91ad4;
piVar4[3] = 4;
piVar4[4] = 1;
pthread_mutexattr_init(__attr);
pthread_mutexattr_settype(__attr,1);
pthread_mutex_init((pthread_mutex_t *)(piVar4 + 5),__attr);
*(undefined1 *)(piVar4 + 0xe) = 0;
*(undefined1 *)((int)piVar4 + 0x39) = 0xff;
piVar4[0xf] = -1;
piVar4[0x10] = 0;
/* try { // try from 006c7a5f to 006c7a63 has its CatchHandler @ 006c7bb7 */
CThreadEvent::CThreadEvent((CThreadEvent *)(piVar4 + 0x11),true);
*(undefined1 *)(piVar4 + 0x26) = 0;
*piVar4 = (int)&PTR_AddRef_00c91ae8;
piVar4[1] = (int)&DAT_00c91b14;
piVar4[0x2e] = (int)puVar5;
/* try { // try from 006c7a97 to 006c7a9b has its CatchHandler @ 006c7bef */
V_strncpy((char *)(piVar4 + 0x2f),"ParseParticleEffects",0x10);
p_Var9 = _g_pThreadPool;
(**(code **)(*(int *)_g_pThreadPool + 0x38))(_g_pThreadPool,piVar4);
uVar7 = InitGameSystems(p_Var9);
if ((piVar4[3] - 1U < 2) || (piVar4[3] == 4)) {
local_30 = -1.0;
do {
lVar8 = (longdouble)Plat_FloatTime();
if (0.06 < (float)lVar8 - local_30) {
(**(code **)(*engine + 0x214))(engine);
local_30 = (float)lVar8;
}
ThreadSleep(0);
} while ((piVar4[3] - 1U < 2) || (piVar4[3] == 4));
}
(**(code **)(*piVar4 + 4))(piVar4);
}
debugoverlay = (*param_1)("VDebugOverlay003",(int *)0x0);
return uVar7;
}
}
}
}
}
return 0;
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
used as the SourceMod key — change to fit your plugin's convention
SourceMod library name (server / engine / matchmaking)
Just a Signatures{} block, ready to drop into a gamedata
file. Wire it up in your plugin however you like - SDKCall, DHooks,
raw memory ops, or anything else.
Signatures + Functions block. The plugin uses
DHookCreateFromConf - DHooks reads return type, this-type,
calling convention, and argument types straight from the gamedata. Less
boilerplate in the plugin, types travel with the gamedata.
Gamedata KeyValues
DHooks plugin example
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.