CVariantSaveDataOps::Save
0x0063eea0 · 551 bytes · __thiscall
_ZN19CVariantSaveDataOps4SaveERK22SaveRestoreFieldInfo_tP5ISave
Decompiled
undefined (3 params)
/* CVariantSaveDataOps::Save(SaveRestoreFieldInfo_t const&, ISave*) */
void __thiscall
CVariantSaveDataOps::Save(CVariantSaveDataOps *this,SaveRestoreFieldInfo_t *param_1,ISave *param_2)
{
int iVar1;
undefined4 *puVar2;
undefined1 *puVar3;
undefined4 local_2c;
undefined4 local_28;
undefined4 local_24;
undefined4 local_20;
puVar2 = *(undefined4 **)param_1;
local_2c = puVar2[4];
(**(code **)(*(int *)param_2 + 0x2c))(param_2,&local_2c,1);
iVar1 = puVar2[4];
switch(iVar1) {
case 0:
goto switchD_0063eeda_caseD_0;
case 1:
iVar1 = *(int *)param_2;
puVar3 = variant_t::m_SaveFloat;
break;
case 2:
iVar1 = *(int *)param_2;
puVar3 = variant_t::m_SaveString;
break;
case 3:
if ((iVar1 == 0xf) || (iVar1 == 3)) {
local_28 = *puVar2;
local_24 = puVar2[1];
local_20 = puVar2[2];
}
else {
local_28 = vec3_origin;
local_24 = DAT_01053d4c;
local_20 = DAT_01053d50;
}
iVar1 = *(int *)param_2;
puVar3 = variant_t::m_SaveVector;
goto LAB_0063ef78;
default:
Warning("Bad type %d in saved variant_t\n",iVar1);
return;
case 5:
iVar1 = *(int *)param_2;
puVar3 = variant_t::m_SaveInt;
break;
case 6:
iVar1 = *(int *)param_2;
puVar3 = variant_t::m_SaveBool;
break;
case 9:
iVar1 = *(int *)param_2;
puVar3 = variant_t::m_SaveColor;
break;
case 0xd:
iVar1 = *(int *)param_2;
puVar3 = variant_t::m_SaveEHandle;
break;
case 0xf:
if ((iVar1 == 0xf) || (iVar1 == 3)) {
local_28 = *puVar2;
local_24 = puVar2[1];
local_20 = puVar2[2];
}
else {
local_28 = vec3_origin;
local_24 = DAT_01053d4c;
local_20 = DAT_01053d50;
}
iVar1 = *(int *)param_2;
puVar3 = variant_t::m_SavePositionVector;
LAB_0063ef78:
puVar2 = &local_28;
}
(**(code **)(iVar1 + 0x18))(param_2,*(undefined4 *)(*(int *)(param_1 + 8) + 4),puVar2,0,puVar3,1);
switchD_0063eeda_caseD_0:
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.