@@ -25,7 +25,7 @@ static Symbols::SV_InitGameServerSteam func_SV_InitGameServerSteam;
2525
2626static Detouring::Hook detour_CSteam3Server_OnLoggedOff;
2727static void hook_CSteam3Server_OnLoggedOff (CSteam3Server* srv, SteamServersDisconnected_t* info)
28- {
28+ {
2929 detour_CSteam3Server_OnLoggedOff.GetTrampoline <Symbols::CSteam3Server_OnLoggedOff>()(srv, info);
3030
3131 if (Lua::PushHook (" HolyLib:OnSteamDisconnect" ))
@@ -37,7 +37,7 @@ static void hook_CSteam3Server_OnLoggedOff(CSteam3Server* srv, SteamServersDisco
3737
3838static Detouring::Hook detour_CSteam3Server_OnLogonSuccess;
3939static void hook_CSteam3Server_OnLogonSuccess (CSteam3Server* srv, SteamServersConnected_t* info)
40- {
40+ {
4141 detour_CSteam3Server_OnLogonSuccess.GetTrampoline <Symbols::CSteam3Server_OnLogonSuccess>()(srv, info);
4242
4343 if (Lua::PushHook (" HolyLib:OnSteamConnect" ))
@@ -139,6 +139,25 @@ void CSteamWorksModule::LuaShutdown()
139139 }
140140}
141141
142+ static Detouring::Hook detour_CGet_SteamUGC;
143+ static void * hook_CGet_SteamUGC (IGet* pGet)
144+ {
145+ void * pRet = detour_CGet_SteamUGC.GetTrampoline <Symbols::CGet_SteamUGC>()(pGet);
146+ if (func_Steam3Server)
147+ {
148+ CSteam3Server& server = func_Steam3Server ();
149+
150+ // pRet normally matches the SteamUGC but when the server was cleared like when it was Shutdown
151+ // it gets apparent that CGet caches the value, which now is invalid.
152+ Msg (" holylib - Called CGet::SteamUGC %p - %p\n " , pRet, server.SteamUGC ());
153+
154+ if (!server.SteamUGC ()) // If this is NULL then return NULL, most likely the CSteam3Server was cleared.
155+ return NULL ;
156+ }
157+
158+ return pRet;
159+ }
160+
142161void CSteamWorksModule::InitDetour (bool bPreServer)
143162{
144163 if ( bPreServer ) { return ; }
@@ -156,6 +175,12 @@ void CSteamWorksModule::InitDetour(bool bPreServer)
156175 (void *)hook_CSteam3Server_OnLogonSuccess, m_pID
157176 );
158177
178+ Detour::Create (
179+ &detour_CGet_SteamUGC, " CGet::SteamUGC" ,
180+ engine_loader.GetModule (), Symbols::CGet_SteamUGCSym,
181+ (void *)hook_CGet_SteamUGC, m_pID
182+ );
183+
159184 func_Steam3Server = (Symbols::Steam3ServerT)Detour::GetFunction (engine_loader.GetModule (), Symbols::Steam3ServerSym);
160185 func_CSteam3Server_Shutdown = (Symbols::CSteam3Server_Shutdown)Detour::GetFunction (engine_loader.GetModule (), Symbols::CSteam3Server_ShutdownSym);
161186 func_CSteam3Server_Activate = (Symbols::CSteam3Server_Activate)Detour::GetFunction (engine_loader.GetModule (), Symbols::CSteam3Server_ActivateSym);
0 commit comments