CDmxAttribute::Unserialize
0x00be1120 · 1207 bytes · __thiscall
_ZN13CDmxAttribute11UnserializeE17DmAttributeType_tR10CUtlBuffer
Decompiled
undefined (3 params)
/* CDmxAttribute::Unserialize(DmAttributeType_t, CUtlBuffer&) */
bool __thiscall
CDmxAttribute::Unserialize(CDmxAttribute *param_1,undefined4 param_2,CUtlBuffer *param_3)
{
undefined4 *puVar1;
bool bVar2;
undefined1 uVar3;
CUtlVector *pCVar4;
Color *pCVar5;
DmeTime_t *pDVar6;
CUtlBinaryBlock *pCVar7;
CUtlString *pCVar8;
AllocateDataMemory(param_1,param_2);
switch(param_2) {
default:
return false;
case 2:
uVar3 = ::Unserialize(param_3,*(int **)(param_1 + 8));
return (bool)uVar3;
case 3:
uVar3 = ::Unserialize(param_3,*(float **)(param_1 + 8));
return (bool)uVar3;
case 4:
uVar3 = ::Unserialize(param_3,*(bool **)(param_1 + 8));
return (bool)uVar3;
case 5:
pCVar8 = (CUtlString *)0x0;
if (*(CUtlString **)(param_1 + 8) != (CUtlString *)0x0) {
CUtlString::CUtlString(*(CUtlString **)(param_1 + 8));
pCVar8 = *(CUtlString **)(param_1 + 8);
}
uVar3 = ::Unserialize(param_3,pCVar8);
return (bool)uVar3;
case 6:
pCVar7 = (CUtlBinaryBlock *)0x0;
if (*(CUtlBinaryBlock **)(param_1 + 8) != (CUtlBinaryBlock *)0x0) {
CUtlBinaryBlock::CUtlBinaryBlock(*(CUtlBinaryBlock **)(param_1 + 8),0,0);
pCVar7 = *(CUtlBinaryBlock **)(param_1 + 8);
}
uVar3 = ::Unserialize(param_3,pCVar7);
return (bool)uVar3;
case 7:
pDVar6 = (DmeTime_t *)0x0;
if (*(undefined4 **)(param_1 + 8) != (undefined4 *)0x0) {
**(undefined4 **)(param_1 + 8) = 0x80000000;
pDVar6 = *(DmeTime_t **)(param_1 + 8);
}
uVar3 = ::Unserialize(param_3,pDVar6);
return (bool)uVar3;
case 8:
pCVar5 = (Color *)0x0;
if (*(undefined4 **)(param_1 + 8) != (undefined4 *)0x0) {
**(undefined4 **)(param_1 + 8) = 0;
pCVar5 = *(Color **)(param_1 + 8);
}
uVar3 = ::Unserialize(param_3,pCVar5);
return (bool)uVar3;
case 9:
uVar3 = ::Unserialize(param_3,*(Vector2D **)(param_1 + 8));
return (bool)uVar3;
case 10:
uVar3 = ::Unserialize(param_3,*(Vector **)(param_1 + 8));
return (bool)uVar3;
case 0xb:
uVar3 = ::Unserialize(param_3,*(Vector4D **)(param_1 + 8));
return (bool)uVar3;
case 0xc:
uVar3 = ::Unserialize(param_3,*(QAngle **)(param_1 + 8));
return (bool)uVar3;
case 0xd:
uVar3 = ::Unserialize(param_3,*(Quaternion **)(param_1 + 8));
return (bool)uVar3;
case 0xe:
uVar3 = ::Unserialize(param_3,*(VMatrix **)(param_1 + 8));
return (bool)uVar3;
case 0x10:
puVar1 = *(undefined4 **)(param_1 + 8);
pCVar4 = (CUtlVector *)0x0;
if (puVar1 != (undefined4 *)0x0) {
*puVar1 = 0;
puVar1[1] = 0;
puVar1[2] = 0;
puVar1[3] = 0;
puVar1[4] = 0;
pCVar4 = *(CUtlVector **)(param_1 + 8);
}
bVar2 = Unserialize<int>(param_3,pCVar4);
return bVar2;
case 0x11:
puVar1 = *(undefined4 **)(param_1 + 8);
pCVar4 = (CUtlVector *)0x0;
if (puVar1 != (undefined4 *)0x0) {
*puVar1 = 0;
puVar1[1] = 0;
puVar1[2] = 0;
puVar1[3] = 0;
puVar1[4] = 0;
pCVar4 = *(CUtlVector **)(param_1 + 8);
}
break;
case 0x12:
puVar1 = *(undefined4 **)(param_1 + 8);
pCVar4 = (CUtlVector *)0x0;
if (puVar1 != (undefined4 *)0x0) {
*puVar1 = 0;
puVar1[1] = 0;
puVar1[2] = 0;
puVar1[3] = 0;
puVar1[4] = 0;
pCVar4 = *(CUtlVector **)(param_1 + 8);
}
bVar2 = Unserialize<bool>(param_3,pCVar4);
return bVar2;
case 0x13:
puVar1 = *(undefined4 **)(param_1 + 8);
pCVar4 = (CUtlVector *)0x0;
if (puVar1 != (undefined4 *)0x0) {
*puVar1 = 0;
puVar1[1] = 0;
puVar1[2] = 0;
puVar1[3] = 0;
puVar1[4] = 0;
pCVar4 = *(CUtlVector **)(param_1 + 8);
}
bVar2 = Unserialize<CUtlString>(param_3,pCVar4);
return bVar2;
case 0x14:
puVar1 = *(undefined4 **)(param_1 + 8);
pCVar4 = (CUtlVector *)0x0;
if (puVar1 != (undefined4 *)0x0) {
*puVar1 = 0;
puVar1[1] = 0;
puVar1[2] = 0;
puVar1[3] = 0;
puVar1[4] = 0;
pCVar4 = *(CUtlVector **)(param_1 + 8);
}
bVar2 = Unserialize<CUtlBinaryBlock>(param_3,pCVar4);
return bVar2;
case 0x15:
puVar1 = *(undefined4 **)(param_1 + 8);
pCVar4 = (CUtlVector *)0x0;
if (puVar1 != (undefined4 *)0x0) {
*puVar1 = 0;
puVar1[1] = 0;
puVar1[2] = 0;
puVar1[3] = 0;
puVar1[4] = 0;
pCVar4 = *(CUtlVector **)(param_1 + 8);
}
bVar2 = Unserialize<DmeTime_t>(param_3,pCVar4);
return bVar2;
case 0x16:
puVar1 = *(undefined4 **)(param_1 + 8);
pCVar4 = (CUtlVector *)0x0;
if (puVar1 != (undefined4 *)0x0) {
*puVar1 = 0;
puVar1[1] = 0;
puVar1[2] = 0;
puVar1[3] = 0;
puVar1[4] = 0;
pCVar4 = *(CUtlVector **)(param_1 + 8);
}
bVar2 = Unserialize<Color>(param_3,pCVar4);
return bVar2;
case 0x17:
puVar1 = *(undefined4 **)(param_1 + 8);
pCVar4 = (CUtlVector *)0x0;
if (puVar1 != (undefined4 *)0x0) {
*puVar1 = 0;
puVar1[1] = 0;
puVar1[2] = 0;
puVar1[3] = 0;
puVar1[4] = 0;
pCVar4 = *(CUtlVector **)(param_1 + 8);
}
bVar2 = Unserialize<Vector2D>(param_3,pCVar4);
return bVar2;
case 0x18:
puVar1 = *(undefined4 **)(param_1 + 8);
pCVar4 = (CUtlVector *)0x0;
if (puVar1 != (undefined4 *)0x0) {
*puVar1 = 0;
puVar1[1] = 0;
puVar1[2] = 0;
puVar1[3] = 0;
puVar1[4] = 0;
pCVar4 = *(CUtlVector **)(param_1 + 8);
}
bVar2 = Unserialize<Vector>(param_3,pCVar4);
return bVar2;
case 0x19:
puVar1 = *(undefined4 **)(param_1 + 8);
pCVar4 = (CUtlVector *)0x0;
if (puVar1 != (undefined4 *)0x0) {
*puVar1 = 0;
puVar1[1] = 0;
puVar1[2] = 0;
puVar1[3] = 0;
puVar1[4] = 0;
pCVar4 = *(CUtlVector **)(param_1 + 8);
}
bVar2 = Unserialize<Vector4D>(param_3,pCVar4);
return bVar2;
case 0x1a:
puVar1 = *(undefined4 **)(param_1 + 8);
pCVar4 = (CUtlVector *)0x0;
if (puVar1 != (undefined4 *)0x0) {
*puVar1 = 0;
puVar1[1] = 0;
puVar1[2] = 0;
puVar1[3] = 0;
puVar1[4] = 0;
pCVar4 = *(CUtlVector **)(param_1 + 8);
}
bVar2 = Unserialize<QAngle>(param_3,pCVar4);
return bVar2;
case 0x1b:
puVar1 = *(undefined4 **)(param_1 + 8);
pCVar4 = (CUtlVector *)0x0;
if (puVar1 != (undefined4 *)0x0) {
*puVar1 = 0;
puVar1[1] = 0;
puVar1[2] = 0;
puVar1[3] = 0;
puVar1[4] = 0;
pCVar4 = *(CUtlVector **)(param_1 + 8);
}
bVar2 = Unserialize<Quaternion>(param_3,pCVar4);
return bVar2;
case 0x1c:
puVar1 = *(undefined4 **)(param_1 + 8);
pCVar4 = (CUtlVector *)0x0;
if (puVar1 != (undefined4 *)0x0) {
*puVar1 = 0;
puVar1[1] = 0;
puVar1[2] = 0;
puVar1[3] = 0;
puVar1[4] = 0;
pCVar4 = *(CUtlVector **)(param_1 + 8);
}
bVar2 = Unserialize<VMatrix>(param_3,pCVar4);
return bVar2;
}
bVar2 = Unserialize<float>(param_3,pCVar4);
return bVar2;
}
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.