CSteamWorksGameStatsUploader::GetInterface
0x004c5dd0 · 257 bytes · __thiscall
_ZN28CSteamWorksGameStatsUploader12GetInterfaceEv
Decompiled
undefined (1 param)
/* CSteamWorksGameStatsUploader::GetInterface() */
undefined4 __thiscall CSteamWorksGameStatsUploader::GetInterface(CSteamWorksGameStatsUploader *this)
{
code *pcVar1;
char cVar2;
int iVar3;
undefined4 uVar4;
undefined4 uVar5;
int *piVar6;
undefined4 *puVar7;
int **ppiVar8;
int *local_30;
undefined4 *local_2c;
int *local_28;
undefined4 local_14;
undefined4 local_10;
ppiVar8 = &local_2c;
local_30 = (int *)0x4c5de0;
iVar3 = Steam3Server();
if (*(int *)(iVar3 + 4) == 0) {
LAB_004c5ed0:
uVar5 = 0;
uVar4 = 0;
}
else {
local_30 = (int *)0x4c5df0;
iVar3 = Steam3Server();
if (*(int *)(iVar3 + 8) == 0) goto LAB_004c5ed0;
local_30 = (int *)0x4c5e00;
iVar3 = Steam3Server();
local_2c = &local_14;
local_28 = *(int **)(iVar3 + 4);
local_30 = (int *)0x4c5e12;
(**(code **)(*local_28 + 0x28))();
ppiVar8 = &local_30;
*(undefined4 *)(this + 0x54) = local_10;
*(undefined4 *)(this + 0x50) = local_14;
iVar3 = Steam3Server();
local_30 = *(int **)(iVar3 + 8);
uVar4 = (**(code **)(*local_30 + 0x24))();
*(undefined4 *)(this + 0x58) = uVar4;
uVar4 = SteamGameServer_GetHSteamUser();
uVar5 = SteamGameServer_GetHSteamPipe();
}
*ppiVar8 = (int *)SteamClient()::s_CallbackCounterAndContext;
ppiVar8[-1] = (int *)0x4c5e4e;
piVar6 = (int *)SteamInternal_ContextInit();
if ((*piVar6 != 0) && (engine != (int *)0x0)) {
iVar3 = *engine;
*ppiVar8 = engine;
pcVar1 = *(code **)(iVar3 + 0x1f8);
ppiVar8[-1] = (int *)0x4c5e69;
cVar2 = (*pcVar1)();
if (cVar2 != '\0') goto LAB_004c5e6d;
iVar3 = *engine;
*ppiVar8 = engine;
pcVar1 = *(code **)(iVar3 + 8);
ppiVar8[-1] = (int *)0x4c5ead;
cVar2 = (*pcVar1)();
if (cVar2 != '\0') goto LAB_004c5e6d;
}
*ppiVar8 = (int *)SteamClient()::s_CallbackCounterAndContext;
ppiVar8[-1] = (int *)0x4c5ec4;
piVar6 = (int *)SteamInternal_ContextInit();
if (*piVar6 == 0) {
return 0;
}
LAB_004c5e6d:
*ppiVar8 = (int *)SteamClient()::s_CallbackCounterAndContext;
ppiVar8[-1] = (int *)0x4c5e79;
puVar7 = (undefined4 *)SteamInternal_ContextInit();
piVar6 = (int *)*puVar7;
iVar3 = *piVar6;
ppiVar8[3] = (int *)"SteamGameStats001";
ppiVar8[2] = (int *)uVar5;
ppiVar8[1] = (int *)uVar4;
*ppiVar8 = piVar6;
pcVar1 = *(code **)(iVar3 + 0x30);
ppiVar8[-1] = (int *)0x4c5e93;
uVar4 = (*pcVar1)();
return uVar4;
}
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.