CParticleSystemDictionary::~CParticleSystemDictionary
0x00bd1250 · 1538 bytes · __thiscall
_ZN25CParticleSystemDictionaryD1Ev
Decompiled
undefined (1 param)
/* CParticleSystemDictionary::~CParticleSystemDictionary() */
void __thiscall
CParticleSystemDictionary::~CParticleSystemDictionary(CParticleSystemDictionary *this)
{
CUtlMemory<CParticleOperatorInstance*,int> *this_00;
CUtlMemory<CParticleOperatorInstance*,int> *this_01;
CUtlMemory<CParticleOperatorInstance*,int> *this_02;
CUtlMemory<CParticleOperatorInstance*,int> *this_03;
CUtlMemory<CParticleOperatorInstance*,int> *this_04;
CUtlMemory<CParticleOperatorInstance*,int> *this_05;
int iVar1;
undefined4 *puVar2;
int *piVar3;
undefined4 *puVar4;
undefined4 *puVar5;
int iVar6;
int local_20;
local_20 = 0;
iVar1 = *(int *)(this + 0x58);
if (0 < iVar1) {
do {
puVar2 = *(undefined4 **)(*(int *)(this + 0x4c) + local_20 * 4);
if (puVar2 != (undefined4 *)0x0) {
while ((CParticleCollection *)puVar2[0x56] != (CParticleCollection *)0x0) {
CParticleCollection::UnlinkFromDefList((CParticleCollection *)puVar2[0x56]);
}
iVar6 = 0;
if (0 < (int)puVar2[0xc5]) {
do {
piVar3 = *(int **)(puVar2[0xc2] + iVar6 * 4);
if (piVar3 != (int *)0x0) {
(**(code **)(*piVar3 + 0x80))(piVar3);
}
iVar6 = iVar6 + 1;
} while (iVar6 < (int)puVar2[0xc5]);
}
this_00 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar2 + 0xc2);
puVar2[0xc5] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(this_00);
puVar2[0xc6] = puVar2[0xc2];
if (0 < (int)puVar2[0xca]) {
iVar6 = 0;
do {
piVar3 = *(int **)(puVar2[199] + iVar6 * 4);
if (piVar3 != (int *)0x0) {
(**(code **)(*piVar3 + 0x80))(piVar3);
}
iVar6 = iVar6 + 1;
} while (iVar6 < (int)puVar2[0xca]);
}
this_01 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar2 + 199);
puVar2[0xca] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(this_01);
puVar2[0xcb] = puVar2[199];
if (0 < (int)puVar2[0xcf]) {
iVar6 = 0;
do {
piVar3 = *(int **)(puVar2[0xcc] + iVar6 * 4);
if (piVar3 != (int *)0x0) {
(**(code **)(*piVar3 + 0x80))(piVar3);
}
iVar6 = iVar6 + 1;
} while (iVar6 < (int)puVar2[0xcf]);
}
this_02 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar2 + 0xcc);
puVar2[0xcf] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(this_02);
puVar2[0xd0] = puVar2[0xcc];
if (0 < (int)puVar2[0xd4]) {
iVar6 = 0;
do {
piVar3 = *(int **)(puVar2[0xd1] + iVar6 * 4);
if (piVar3 != (int *)0x0) {
(**(code **)(*piVar3 + 0x80))(piVar3);
}
iVar6 = iVar6 + 1;
} while (iVar6 < (int)puVar2[0xd4]);
}
this_03 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar2 + 0xd1);
puVar2[0xd4] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(this_03);
puVar2[0xd5] = puVar2[0xd1];
if (0 < (int)puVar2[0xd9]) {
iVar6 = 0;
do {
piVar3 = *(int **)(puVar2[0xd6] + iVar6 * 4);
if (piVar3 != (int *)0x0) {
(**(code **)(*piVar3 + 0x80))(piVar3);
}
iVar6 = iVar6 + 1;
} while (iVar6 < (int)puVar2[0xd9]);
}
this_04 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar2 + 0xd6);
puVar2[0xd9] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(this_04);
puVar2[0xda] = puVar2[0xd6];
if (0 < (int)puVar2[0xde]) {
iVar6 = 0;
do {
piVar3 = *(int **)(puVar2[0xdb] + iVar6 * 4);
if (piVar3 != (int *)0x0) {
(**(code **)(*piVar3 + 0x80))(piVar3);
}
iVar6 = iVar6 + 1;
} while (iVar6 < (int)puVar2[0xde]);
}
puVar2[0xde] = 0;
this_05 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar2 + 0xdb);
CUtlMemory<CParticleOperatorInstance*,int>::Purge(this_05);
puVar2[0x101] = 0;
puVar2[0xdf] = puVar2[0xdb];
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar2 + 0xfe));
puVar2[0x102] = puVar2[0xfe];
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar2 + 0xfe));
puVar2[0xfc] = 0;
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar2 + 0xf9));
puVar2[0xfd] = puVar2[0xf9];
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar2 + 0xf9));
puVar2[0xf7] = 0;
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar2 + 0xf4));
puVar2[0xf8] = puVar2[0xf4];
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar2 + 0xf4));
puVar2[0xf2] = 0;
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar2 + 0xef));
puVar2[0xf3] = puVar2[0xef];
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar2 + 0xef));
puVar2[0xed] = 0;
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar2 + 0xea));
puVar2[0xee] = puVar2[0xea];
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar2 + 0xea));
puVar2[0xe8] = 0;
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar2 + 0xe5));
puVar2[0xe9] = puVar2[0xe5];
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar2 + 0xe5));
puVar2[0xe3] = 0;
CUtlMemory<ParticleChildrenInfo_t,int>::Purge
((CUtlMemory<ParticleChildrenInfo_t,int> *)(puVar2 + 0xe0));
puVar2[0xe4] = puVar2[0xe0];
CUtlMemory<ParticleChildrenInfo_t,int>::Purge
((CUtlMemory<ParticleChildrenInfo_t,int> *)(puVar2 + 0xe0));
puVar2[0xde] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(this_05);
puVar2[0xdf] = puVar2[0xdb];
CUtlMemory<CParticleOperatorInstance*,int>::Purge(this_05);
puVar2[0xd9] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(this_04);
puVar2[0xda] = puVar2[0xd6];
CUtlMemory<CParticleOperatorInstance*,int>::Purge(this_04);
puVar2[0xd4] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(this_03);
puVar2[0xd5] = puVar2[0xd1];
CUtlMemory<CParticleOperatorInstance*,int>::Purge(this_03);
puVar2[0xcf] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(this_02);
puVar2[0xd0] = puVar2[0xcc];
CUtlMemory<CParticleOperatorInstance*,int>::Purge(this_02);
puVar2[0xca] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(this_01);
puVar2[0xcb] = puVar2[199];
CUtlMemory<CParticleOperatorInstance*,int>::Purge(this_01);
puVar2[0xc5] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(this_00);
puVar2[0xc6] = puVar2[0xc2];
CUtlMemory<CParticleOperatorInstance*,int>::Purge(this_00);
CUtlMemory<unsigned_char,int>::Purge((CUtlMemory<unsigned_char,int> *)(puVar2 + 0xbe));
piVar3 = (int *)puVar2[0xa0];
if (piVar3 != (int *)0x0) {
if ((undefined4 *)puVar2[0x9f] == (undefined4 *)0x0) {
if ((undefined4 *)*piVar3 == puVar2 + 0x9e) {
iVar6 = puVar2[0x9e];
*piVar3 = iVar6;
if (iVar6 != 0) {
*(undefined4 *)(iVar6 + 4) = 0;
}
}
}
else {
*(undefined4 *)puVar2[0x9f] = puVar2[0x9e];
if (puVar2[0x9e] != 0) {
*(undefined4 *)(puVar2[0x9e] + 4) = puVar2[0x9f];
}
}
puVar2[0x9f] = 0;
puVar2[0x9e] = 0;
puVar2[0xa0] = 0;
}
CMaterialReference::~CMaterialReference((CMaterialReference *)(puVar2 + 0x51));
puVar5 = (undefined4 *)*puVar2;
while (puVar5 != (undefined4 *)0x0) {
puVar4 = (undefined4 *)*puVar5;
puVar5[1] = 0;
*puVar5 = 0;
puVar5[2] = 0;
puVar5 = puVar4;
}
*puVar2 = 0;
operator_delete(puVar2);
}
local_20 = local_20 + 1;
} while (local_20 != iVar1);
}
*(undefined4 *)(this + 0x58) = 0;
CUtlMemory<CParticleSystemDefinition*,int>::Purge
((CUtlMemory<CParticleSystemDefinition*,int> *)(this + 0x4c));
*(undefined4 *)(this + 0x5c) = *(undefined4 *)(this + 0x4c);
CUtlMemory<CParticleSystemDefinition*,int>::Purge
((CUtlMemory<CParticleSystemDefinition*,int> *)(this + 0x4c));
CUtlSymbolTable::~CUtlSymbolTable((CUtlSymbolTable *)(this + 0x14));
*(undefined4 *)(this + 0xc) = 0;
CUtlMemory<CParticleSystemDefinition*,int>::Purge
((CUtlMemory<CParticleSystemDefinition*,int> *)this);
*(undefined4 *)(this + 0x10) = *(undefined4 *)this;
CUtlMemory<CParticleSystemDefinition*,int>::Purge
((CUtlMemory<CParticleSystemDefinition*,int> *)this);
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.