Skip to content

Commit d4eadb8

Browse files
committed
steamworks: debug a issue
CGet seems to cache something which might be the cause.
1 parent 1480f79 commit d4eadb8

File tree

3 files changed

+35
-2
lines changed

3 files changed

+35
-2
lines changed

source/modules/steamworks.cpp

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ static Symbols::SV_InitGameServerSteam func_SV_InitGameServerSteam;
2525

2626
static Detouring::Hook detour_CSteam3Server_OnLoggedOff;
2727
static 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

3838
static Detouring::Hook detour_CSteam3Server_OnLogonSuccess;
3939
static 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+
142161
void 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);

source/symbols.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,11 @@ namespace Symbols
560560
Symbol::FromSignature("\x55\x48\x89\xE5\x53\x48\x83\xEC\x08\x48\x8B\x1D********\x00\x00\x01"), // 55 48 89 E5 53 48 83 EC 08 48 8B 1D ?? ?? ?? ?? ?? ?? ?? ?? 00 00 01
561561
};
562562

563+
const std::vector<Symbol> CGet_SteamUGCSym = {
564+
Symbol::FromName("_ZN4CGet8SteamUGCEv"),
565+
NULL_SIGNATURE,
566+
};
567+
563568
//---------------------------------------------------------------------------------
564569
// Purpose: pas Symbols
565570
//---------------------------------------------------------------------------------

source/symbols.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,9 @@ namespace Symbols
429429
typedef void (*SV_InitGameServerSteam)();
430430
extern const std::vector<Symbol> SV_InitGameServerSteamSym;
431431

432+
typedef void* (*CGet_SteamUGC)(void*);
433+
extern const std::vector<Symbol> CGet_SteamUGCSym;
434+
432435
//---------------------------------------------------------------------------------
433436
// Purpose: pas Symbols
434437
//---------------------------------------------------------------------------------

0 commit comments

Comments
 (0)