SV_WriteClassInfos
0x00207300 · 454 bytes · __cdecl
_Z18SV_WriteClassInfosP11ServerClassR8bf_write
Decompiled
undefined (2 params)
/* SV_WriteClassInfos(ServerClass*, bf_write&) */
void SV_WriteClassInfos(ServerClass *param_1,bf_write *param_2)
{
int in_GS_OFFSET;
undefined **local_28c;
undefined1 local_288;
undefined4 local_284;
undefined4 local_280;
undefined4 local_27c;
undefined8 local_278;
undefined4 local_270;
undefined4 local_26c;
undefined8 local_268;
undefined4 local_260;
undefined4 local_25c;
undefined1 local_258;
undefined8 local_254;
undefined4 local_24c;
undefined4 local_248;
undefined1 local_240;
undefined4 local_23c;
undefined4 local_238;
undefined4 local_234;
int local_230;
undefined4 local_22c;
undefined4 local_224;
char local_220 [256];
char local_120 [256];
int local_20;
local_278 = 0;
local_280 = 0;
local_27c = 0;
local_270 = 0;
local_26c = 0;
local_20 = *(int *)(in_GS_OFFSET + 0x14);
local_268 = 0;
local_260 = 0;
local_25c = 0;
local_258 = 0;
local_254 = 0;
local_24c = 0;
local_248 = 0;
local_288 = 1;
local_284 = 0;
local_28c = &PTR__SVC_ClassInfo_002a1ee8;
local_23c = 0;
local_238 = 0;
local_234 = 0;
local_230 = 0;
local_22c = 0;
local_240 = 0;
for (; param_1 != (ServerClass *)0x0; param_1 = *(ServerClass **)(param_1 + 8)) {
local_224 = *(undefined4 *)(param_1 + 0xc);
/* try { // try from 00207424 to 00207479 has its CatchHandler @ 002074c1 */
V_strncpy(local_220,*(char **)(*(int *)(param_1 + 4) + 8),0x100);
V_strncpy(local_120,*(char **)param_1,0x100);
CUtlVector<SVC_ClassInfo::class_s,CUtlMemory<SVC_ClassInfo::class_s,int>>::InsertBefore
((CUtlVector<SVC_ClassInfo::class_s,CUtlMemory<SVC_ClassInfo::class_s,int>> *)
&local_23c,local_230,(class_s *)&local_224);
}
SVC_ClassInfo::WriteToBuffer((SVC_ClassInfo *)&local_28c,param_2);
local_28c = &PTR__SVC_ClassInfo_002a1ee8;
local_230 = 0;
CUtlMemory<SVC_ClassInfo::class_s,int>::Purge
((CUtlMemory<SVC_ClassInfo::class_s,int> *)&local_23c);
local_22c = local_23c;
CUtlMemory<SVC_ClassInfo::class_s,int>::Purge
((CUtlMemory<SVC_ClassInfo::class_s,int> *)&local_23c);
if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
/* WARNING: Subroutine does not return */
__stack_chk_fail();
}
return;
}
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.