SteamWorksGSDetours::SteamWorksGSDetours() { const char *pLibSteamPath = g_SteamWorks.pSWGameServer->GetLibraryPath(); void *pSteamSafeInitAddress = NULL; void *pSteamShutdownAddress = NULL; const char *pInitSafeFuncName = "SteamGameServer_InitSafe"; const char *pShutdownFuncName = "SteamGameServer_Shutdown"; IGameConfig *pConfig = NULL; if (g_SteamWorks.pSWGameData) { pConfig = g_SteamWorks.pSWGameData->GetGameData(); if (pConfig != NULL) { pConfig->GetMemSig(pShutdownFuncName, &pSteamShutdownAddress); pConfig->GetMemSig(pInitSafeFuncName, &pSteamSafeInitAddress); } } ILibrary *pLibrary = libsys->OpenLibrary(pLibSteamPath, NULL, 0); if (pLibrary != NULL) { if (pSteamShutdownAddress == NULL) { pSteamShutdownAddress = pLibrary->GetSymbolAddress(pShutdownFuncName); } if (pSteamSafeInitAddress == NULL) { pSteamSafeInitAddress = pLibrary->GetSymbolAddress(pInitSafeFuncName); } pLibrary->CloseLibrary(); } CDetourManager::Init(g_pSM->GetScriptingEngine(), pConfig); if (pSteamShutdownAddress != NULL) { this->m_pShutdownDetour = DETOUR_CREATE_STATIC_FIXED(SteamAPIShutdown, pSteamShutdownAddress); this->m_pShutdownDetour->EnableDetour(); } else { this->m_pShutdownDetour = NULL; } if (pSteamSafeInitAddress != NULL) { this->m_pSafeInitDetour = DETOUR_CREATE_STATIC_FIXED(SteamGameServer_InitSafeDetour, pSteamSafeInitAddress); this->m_pSafeInitDetour->EnableDetour(); } else { this->m_pSafeInitDetour = NULL; } }
void InitLogicBridge() { serverGlobals.universalTime = g_pUniversalTime; serverGlobals.frametime = &gpGlobals->frametime; serverGlobals.interval_per_tick = &gpGlobals->interval_per_tick; core_bridge.engineFactory = (void *)g_SMAPI->GetEngineFactory(false); core_bridge.serverFactory = (void *)g_SMAPI->GetServerFactory(false); core_bridge.listeners = SMGlobalClass::head; ILibrary *mmlib; char path[PLATFORM_MAX_PATH]; g_LibSys.PathFormat(path, sizeof(path), "%s/bin/matchmaking_ds%s.%s", g_SMAPI->GetBaseDir(), MATCHMAKINGDS_SUFFIX, MATCHMAKINGDS_EXT); if ((mmlib = g_LibSys.OpenLibrary(path, NULL, 0))) { core_bridge.matchmakingDSFactory = mmlib->GetSymbolAddress("CreateInterface"); mmlib->CloseLibrary(); } logic_init_fn(&core_bridge, &logicore); /* Add SMGlobalClass instances */ SMGlobalClass* glob = SMGlobalClass::head; while (glob->m_pGlobalClassNext != NULL) { glob = glob->m_pGlobalClassNext; } assert(glob->m_pGlobalClassNext == NULL); glob->m_pGlobalClassNext = logicore.head; g_pThreader = logicore.threader; translator = logicore.translator; scripts = logicore.scripts; sharesys = logicore.sharesys; extsys = logicore.extsys; g_pCoreIdent = logicore.core_ident; handlesys = logicore.handlesys; forwardsys = logicore.forwardsys; adminsys = logicore.adminsys; logger = logicore.logger; }
void CHalfLife2::InitCommandLine() { char path[PLATFORM_MAX_PATH]; char error[256]; g_SourceMod.BuildPath(Path_Game, path, sizeof(path), "../bin/" TIER0_NAME); if (!g_LibSys.IsPathFile(path)) { g_Logger.LogError("Could not find path for: " TIER0_NAME); return; } ILibrary *lib = g_LibSys.OpenLibrary(path, error, sizeof(error)); m_pGetCommandLine = lib->GetSymbolAddress("CommandLine_Tier0"); /* '_Tier0' dropped on Alien Swarm version */ if (m_pGetCommandLine == NULL) { m_pGetCommandLine = lib->GetSymbolAddress("CommandLine"); } if (m_pGetCommandLine == NULL) { /* We probably have a Ship engine. */ lib->CloseLibrary(); g_SourceMod.BuildPath(Path_Game, path, sizeof(path), "../bin/" VSTDLIB_NAME); if (!g_LibSys.IsPathFile(path)) { g_Logger.LogError("Could not find path for: " VSTDLIB_NAME); return; } if ((lib = g_LibSys.OpenLibrary(path, error, sizeof(error))) == NULL) { g_Logger.LogError("Could not load %s: %s", path, error); return; } m_pGetCommandLine = lib->GetSymbolAddress("CommandLine"); if (m_pGetCommandLine == NULL) { g_Logger.LogError("Could not locate any command line functionality"); } lib->CloseLibrary(); } }