L L4D2node

CVariantSaveDataOps::Restore

0x0063ebf0 · 449 bytes · __thiscall

_ZN19CVariantSaveDataOps7RestoreERK22SaveRestoreFieldInfo_tP8IRestore

Decompiled

undefined (3 params)

/* CVariantSaveDataOps::Restore(SaveRestoreFieldInfo_t const&, IRestore*) */

void __thiscall
CVariantSaveDataOps::Restore
          (CVariantSaveDataOps *this,SaveRestoreFieldInfo_t *param_1,IRestore *param_2)

{
  undefined4 *puVar1;
  undefined4 uVar2;
  int iVar3;
  undefined1 *puVar4;
  undefined4 local_28;
  undefined4 local_24;
  undefined4 local_20;
  
  puVar1 = *(undefined4 **)param_1;
  *puVar1 = 0;
  puVar1[3] = 0xffffffff;
  puVar1[4] = 0;
  uVar2 = (**(code **)(*(int *)param_2 + 0x3c))(param_2);
  puVar1[4] = uVar2;
  switch(uVar2) {
  case 0:
    goto switchD_0063ec29_caseD_0;
  case 1:
    iVar3 = *(int *)param_2;
    puVar4 = variant_t::m_SaveFloat;
    break;
  case 2:
    iVar3 = *(int *)param_2;
    puVar4 = variant_t::m_SaveString;
    break;
  case 3:
    (**(code **)(*(int *)param_2 + 0xc))
              (param_2,*(undefined4 *)(*(int *)(param_1 + 8) + 4),&local_28,0,
               variant_t::m_SaveVector,1);
    *puVar1 = local_28;
    puVar1[1] = local_24;
    puVar1[4] = 3;
    puVar1[2] = local_20;
    return;
  default:
    Warning("Bad type %d in saved variant_t\n",uVar2);
    return;
  case 5:
    iVar3 = *(int *)param_2;
    puVar4 = variant_t::m_SaveInt;
    break;
  case 6:
    iVar3 = *(int *)param_2;
    puVar4 = variant_t::m_SaveBool;
    break;
  case 9:
    iVar3 = *(int *)param_2;
    puVar4 = variant_t::m_SaveColor;
    break;
  case 0xd:
    iVar3 = *(int *)param_2;
    puVar4 = variant_t::m_SaveEHandle;
    break;
  case 0xf:
    (**(code **)(*(int *)param_2 + 0xc))
              (param_2,*(undefined4 *)(*(int *)(param_1 + 8) + 4),&local_28,0,
               variant_t::m_SavePositionVector,1);
    *puVar1 = local_28;
    puVar1[1] = local_24;
    puVar1[4] = 0xf;
    puVar1[2] = local_20;
    return;
  }
  (**(code **)(iVar3 + 0xc))(param_2,*(undefined4 *)(*(int *)(param_1 + 8) + 4),puVar1,0,puVar4,1);
switchD_0063ec29_caseD_0:
  return;
}

SourceMod gamedata

paste into addons/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.



        

        

          

Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.

Return-type handling cheatsheet (DHookReturn)