L L4D2node

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 *)&param_1,1);
  ConnectTier2Libraries((_func_void_ptr_char_ptr_int_ptr *)&param_1,1);
  ConnectTier3Libraries((_func_void_ptr_char_ptr_int_ptr *)&param_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 into addons/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.



        

        

          

Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.

Return-type handling cheatsheet (DHookReturn)