CParticleSystemDictionary::DestroyExistingElement
0x00bd26f0 · 3235 bytes · __thiscall
_ZN25CParticleSystemDictionary22DestroyExistingElementEP11CDmxElement
Decompiled
undefined (2 params)
/* CParticleSystemDictionary::DestroyExistingElement(CDmxElement*) */
void __thiscall
CParticleSystemDictionary::DestroyExistingElement
(CParticleSystemDictionary *this,CDmxElement *param_1)
{
CUtlMemory<CParticleOperatorInstance*,int> *pCVar1;
CUtlMemory<CParticleOperatorInstance*,int> *pCVar2;
CUtlMemory<CParticleOperatorInstance*,int> *pCVar3;
CUtlMemory<CParticleOperatorInstance*,int> *pCVar4;
CUtlMemory<CParticleOperatorInstance*,int> *pCVar5;
CUtlMemory<CParticleOperatorInstance*,int> *pCVar6;
undefined4 *puVar7;
undefined4 *puVar8;
CParticleCollection *this_00;
char cVar9;
undefined4 uVar10;
int *piVar11;
CParticleSystemDictionary *pCVar12;
UniqueId_t *pUVar13;
uint uVar14;
int iVar15;
int iVar16;
undefined4 *puVar17;
ushort local_1e [7];
uVar10 = CDmxElement::GetName(param_1);
piVar11 = (int *)CDmxElement::GetAttribute(param_1,"preventNameBasedLookup");
if (piVar11 == (int *)0x0) {
CDmxElement::GetValue<bool>(char_const*)::defaultValue = 0;
}
else if (*piVar11 == 4) {
if (*(char *)piVar11[2] != '\0') {
iVar16 = *(int *)(this + 0x58);
pUVar13 = (UniqueId_t *)CDmxElement::GetId(param_1);
if (iVar16 < 1) {
return;
}
iVar15 = 0;
while( true ) {
cVar9 = IsUniqueIdEqual((UniqueId_t *)(*(int *)(*(int *)(this + 0x4c) + iVar15 * 4) + 0x2c8)
,pUVar13);
if (cVar9 != '\0') break;
iVar15 = iVar15 + 1;
if (iVar15 == iVar16) {
return;
}
}
puVar17 = (undefined4 *)(iVar15 * 4 + *(int *)(this + 0x4c));
puVar7 = (undefined4 *)*puVar17;
if (0 < *(int *)(this + 0x58)) {
iVar16 = *(int *)(this + 0x58) + -1;
if (iVar16 != iVar15) {
*puVar17 = *(undefined4 *)(*(int *)(this + 0x4c) + iVar16 * 4);
iVar16 = *(int *)(this + 0x58) + -1;
}
*(int *)(this + 0x58) = iVar16;
}
if (puVar7 == (undefined4 *)0x0) {
return;
}
this_00 = (CParticleCollection *)puVar7[0x56];
while (this_00 != (CParticleCollection *)0x0) {
CParticleCollection::UnlinkFromDefList(this_00);
this_00 = (CParticleCollection *)puVar7[0x56];
}
if (0 < (int)puVar7[0xc5]) {
iVar16 = 0;
do {
piVar11 = *(int **)(puVar7[0xc2] + iVar16 * 4);
if (piVar11 != (int *)0x0) {
(**(code **)(*piVar11 + 0x80))(piVar11);
}
iVar16 = iVar16 + 1;
} while (iVar16 < (int)puVar7[0xc5]);
}
pCVar1 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar7 + 0xc2);
puVar7[0xc5] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar1);
puVar7[0xc6] = puVar7[0xc2];
if (0 < (int)puVar7[0xca]) {
iVar16 = 0;
do {
piVar11 = *(int **)(puVar7[199] + iVar16 * 4);
if (piVar11 != (int *)0x0) {
(**(code **)(*piVar11 + 0x80))(piVar11);
}
iVar16 = iVar16 + 1;
} while (iVar16 < (int)puVar7[0xca]);
}
pCVar2 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar7 + 199);
puVar7[0xca] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar2);
puVar7[0xcb] = puVar7[199];
if (0 < (int)puVar7[0xcf]) {
iVar16 = 0;
do {
piVar11 = *(int **)(puVar7[0xcc] + iVar16 * 4);
if (piVar11 != (int *)0x0) {
(**(code **)(*piVar11 + 0x80))(piVar11);
}
iVar16 = iVar16 + 1;
} while (iVar16 < (int)puVar7[0xcf]);
}
pCVar3 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar7 + 0xcc);
puVar7[0xcf] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar3);
puVar7[0xd0] = puVar7[0xcc];
if (0 < (int)puVar7[0xd4]) {
iVar16 = 0;
do {
piVar11 = *(int **)(puVar7[0xd1] + iVar16 * 4);
if (piVar11 != (int *)0x0) {
(**(code **)(*piVar11 + 0x80))(piVar11);
}
iVar16 = iVar16 + 1;
} while (iVar16 < (int)puVar7[0xd4]);
}
pCVar4 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar7 + 0xd1);
puVar7[0xd4] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar4);
puVar7[0xd5] = puVar7[0xd1];
if (0 < (int)puVar7[0xd9]) {
iVar16 = 0;
do {
piVar11 = *(int **)(puVar7[0xd6] + iVar16 * 4);
if (piVar11 != (int *)0x0) {
(**(code **)(*piVar11 + 0x80))(piVar11);
}
iVar16 = iVar16 + 1;
} while (iVar16 < (int)puVar7[0xd9]);
}
pCVar5 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar7 + 0xd6);
puVar7[0xd9] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar5);
puVar7[0xda] = puVar7[0xd6];
if (0 < (int)puVar7[0xde]) {
iVar16 = 0;
do {
piVar11 = *(int **)(puVar7[0xdb] + iVar16 * 4);
if (piVar11 != (int *)0x0) {
(**(code **)(*piVar11 + 0x80))(piVar11);
}
iVar16 = iVar16 + 1;
} while (iVar16 < (int)puVar7[0xde]);
}
puVar7[0xde] = 0;
pCVar6 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar7 + 0xdb);
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar6);
puVar7[0x101] = 0;
puVar7[0xdf] = puVar7[0xdb];
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xfe));
puVar7[0x102] = puVar7[0xfe];
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xfe));
puVar7[0xfc] = 0;
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xf9));
puVar7[0xfd] = puVar7[0xf9];
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xf9));
puVar7[0xf7] = 0;
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xf4));
puVar7[0xf8] = puVar7[0xf4];
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xf4));
puVar7[0xf2] = 0;
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xef));
puVar7[0xf3] = puVar7[0xef];
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xef));
puVar7[0xed] = 0;
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xea));
puVar7[0xee] = puVar7[0xea];
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xea));
puVar7[0xe8] = 0;
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xe5));
puVar7[0xe9] = puVar7[0xe5];
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xe5));
puVar7[0xe3] = 0;
CUtlMemory<ParticleChildrenInfo_t,int>::Purge
((CUtlMemory<ParticleChildrenInfo_t,int> *)(puVar7 + 0xe0));
puVar7[0xe4] = puVar7[0xe0];
CUtlMemory<ParticleChildrenInfo_t,int>::Purge
((CUtlMemory<ParticleChildrenInfo_t,int> *)(puVar7 + 0xe0));
puVar7[0xde] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar6);
puVar7[0xdf] = puVar7[0xdb];
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar6);
puVar7[0xd9] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar5);
puVar7[0xda] = puVar7[0xd6];
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar5);
puVar7[0xd4] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar4);
puVar7[0xd5] = puVar7[0xd1];
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar4);
puVar7[0xcf] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar3);
puVar7[0xd0] = puVar7[0xcc];
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar3);
puVar7[0xca] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar2);
puVar7[0xcb] = puVar7[199];
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar2);
puVar7[0xc5] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar1);
puVar7[0xc6] = puVar7[0xc2];
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar1);
CUtlMemory<unsigned_char,int>::Purge((CUtlMemory<unsigned_char,int> *)(puVar7 + 0xbe));
piVar11 = (int *)puVar7[0xa0];
if (piVar11 != (int *)0x0) {
if ((undefined4 *)puVar7[0x9f] == (undefined4 *)0x0) {
if ((undefined4 *)*piVar11 == puVar7 + 0x9e) {
iVar16 = puVar7[0x9e];
*piVar11 = iVar16;
if (iVar16 != 0) {
*(undefined4 *)(iVar16 + 4) = 0;
}
}
}
else {
*(undefined4 *)puVar7[0x9f] = puVar7[0x9e];
if (puVar7[0x9e] != 0) {
*(undefined4 *)(puVar7[0x9e] + 4) = puVar7[0x9f];
}
}
puVar7[0x9f] = 0;
puVar7[0x9e] = 0;
puVar7[0xa0] = 0;
}
CMaterialReference::~CMaterialReference((CMaterialReference *)(puVar7 + 0x51));
puVar17 = (undefined4 *)*puVar7;
while (puVar17 != (undefined4 *)0x0) {
puVar8 = (undefined4 *)*puVar17;
puVar17[1] = 0;
*puVar17 = 0;
puVar17[2] = 0;
puVar17 = puVar8;
}
*puVar7 = 0;
operator_delete(puVar7);
return;
}
}
else {
CDmxAttribute::GetValue<bool>()::defaultValue = 0;
}
pCVar12 = this + 0x14;
CUtlSymbolTable::Find((char *)local_1e);
if (local_1e[0] != 0xffff) {
CUtlSymbolTable::AddString((char *)local_1e);
uVar14 = (uint)local_1e[0];
if (*(int *)(this + 0xc) <= (int)uVar14) {
pCVar12 = (CParticleSystemDictionary *)(uVar14 + 1);
CUtlVector<CParticleSystemDefinition*,CUtlMemory<CParticleSystemDefinition*,int>>::EnsureCount
((CUtlVector<CParticleSystemDefinition*,CUtlMemory<CParticleSystemDefinition*,int>>
*)this,(int)pCVar12);
}
puVar7 = *(undefined4 **)(*(int *)this + uVar14 * 4);
if (puVar7 != (undefined4 *)0x0) {
while ((CParticleCollection *)puVar7[0x56] != (CParticleCollection *)0x0) {
CParticleCollection::UnlinkFromDefList((CParticleCollection *)puVar7[0x56]);
}
if (0 < (int)puVar7[0xc5]) {
iVar16 = 0;
do {
piVar11 = *(int **)(puVar7[0xc2] + iVar16 * 4);
if (piVar11 != (int *)0x0) {
(**(code **)(*piVar11 + 0x80))(piVar11,pCVar12,uVar10);
}
iVar16 = iVar16 + 1;
} while (iVar16 < (int)puVar7[0xc5]);
}
pCVar1 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar7 + 0xc2);
puVar7[0xc5] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar1);
puVar7[0xc6] = puVar7[0xc2];
if (0 < (int)puVar7[0xca]) {
iVar16 = 0;
do {
piVar11 = *(int **)(puVar7[199] + iVar16 * 4);
if (piVar11 != (int *)0x0) {
(**(code **)(*piVar11 + 0x80))(piVar11);
}
iVar16 = iVar16 + 1;
} while (iVar16 < (int)puVar7[0xca]);
}
pCVar2 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar7 + 199);
puVar7[0xca] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar2);
puVar7[0xcb] = puVar7[199];
if (0 < (int)puVar7[0xcf]) {
iVar16 = 0;
do {
piVar11 = *(int **)(puVar7[0xcc] + iVar16 * 4);
if (piVar11 != (int *)0x0) {
(**(code **)(*piVar11 + 0x80))(piVar11);
}
iVar16 = iVar16 + 1;
} while (iVar16 < (int)puVar7[0xcf]);
}
pCVar3 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar7 + 0xcc);
puVar7[0xcf] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar3);
puVar7[0xd0] = puVar7[0xcc];
if (0 < (int)puVar7[0xd4]) {
iVar16 = 0;
do {
piVar11 = *(int **)(puVar7[0xd1] + iVar16 * 4);
if (piVar11 != (int *)0x0) {
(**(code **)(*piVar11 + 0x80))(piVar11);
}
iVar16 = iVar16 + 1;
} while (iVar16 < (int)puVar7[0xd4]);
}
pCVar4 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar7 + 0xd1);
puVar7[0xd4] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar4);
puVar7[0xd5] = puVar7[0xd1];
if (0 < (int)puVar7[0xd9]) {
iVar16 = 0;
do {
piVar11 = *(int **)(puVar7[0xd6] + iVar16 * 4);
if (piVar11 != (int *)0x0) {
(**(code **)(*piVar11 + 0x80))(piVar11);
}
iVar16 = iVar16 + 1;
} while (iVar16 < (int)puVar7[0xd9]);
}
pCVar5 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar7 + 0xd6);
puVar7[0xd9] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar5);
puVar7[0xda] = puVar7[0xd6];
if (0 < (int)puVar7[0xde]) {
iVar16 = 0;
do {
piVar11 = *(int **)(puVar7[0xdb] + iVar16 * 4);
if (piVar11 != (int *)0x0) {
(**(code **)(*piVar11 + 0x80))(piVar11);
}
iVar16 = iVar16 + 1;
} while (iVar16 < (int)puVar7[0xde]);
}
puVar7[0xde] = 0;
pCVar6 = (CUtlMemory<CParticleOperatorInstance*,int> *)(puVar7 + 0xdb);
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar6);
puVar7[0x101] = 0;
puVar7[0xdf] = puVar7[0xdb];
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xfe));
puVar7[0x102] = puVar7[0xfe];
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xfe));
puVar7[0xfc] = 0;
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xf9));
puVar7[0xfd] = puVar7[0xf9];
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xf9));
puVar7[0xf7] = 0;
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xf4));
puVar7[0xf8] = puVar7[0xf4];
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xf4));
puVar7[0xf2] = 0;
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xef));
puVar7[0xf3] = puVar7[0xef];
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xef));
puVar7[0xed] = 0;
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xea));
puVar7[0xee] = puVar7[0xea];
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xea));
puVar7[0xe8] = 0;
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xe5));
puVar7[0xe9] = puVar7[0xe5];
CUtlMemory<unsigned_int,int>::Purge((CUtlMemory<unsigned_int,int> *)(puVar7 + 0xe5));
puVar7[0xe3] = 0;
CUtlMemory<ParticleChildrenInfo_t,int>::Purge
((CUtlMemory<ParticleChildrenInfo_t,int> *)(puVar7 + 0xe0));
puVar7[0xe4] = puVar7[0xe0];
CUtlMemory<ParticleChildrenInfo_t,int>::Purge
((CUtlMemory<ParticleChildrenInfo_t,int> *)(puVar7 + 0xe0));
puVar7[0xde] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar6);
puVar7[0xdf] = puVar7[0xdb];
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar6);
puVar7[0xd9] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar5);
puVar7[0xda] = puVar7[0xd6];
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar5);
puVar7[0xd4] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar4);
puVar7[0xd5] = puVar7[0xd1];
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar4);
puVar7[0xcf] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar3);
puVar7[0xd0] = puVar7[0xcc];
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar3);
puVar7[0xca] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar2);
puVar7[0xcb] = puVar7[199];
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar2);
puVar7[0xc5] = 0;
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar1);
puVar7[0xc6] = puVar7[0xc2];
CUtlMemory<CParticleOperatorInstance*,int>::Purge(pCVar1);
CUtlMemory<unsigned_char,int>::Purge((CUtlMemory<unsigned_char,int> *)(puVar7 + 0xbe));
piVar11 = (int *)puVar7[0xa0];
if (piVar11 != (int *)0x0) {
if ((undefined4 *)puVar7[0x9f] == (undefined4 *)0x0) {
if ((undefined4 *)*piVar11 == puVar7 + 0x9e) {
iVar16 = puVar7[0x9e];
*piVar11 = iVar16;
if (iVar16 != 0) {
*(undefined4 *)(iVar16 + 4) = 0;
}
}
}
else {
*(undefined4 *)puVar7[0x9f] = puVar7[0x9e];
if (puVar7[0x9e] != 0) {
*(undefined4 *)(puVar7[0x9e] + 4) = puVar7[0x9f];
}
}
puVar7[0x9f] = 0;
puVar7[0x9e] = 0;
puVar7[0xa0] = 0;
}
CMaterialReference::~CMaterialReference((CMaterialReference *)(puVar7 + 0x51));
puVar17 = (undefined4 *)*puVar7;
while (puVar17 != (undefined4 *)0x0) {
puVar8 = (undefined4 *)*puVar17;
puVar17[1] = 0;
*puVar17 = 0;
puVar17[2] = 0;
puVar17 = puVar8;
}
*puVar7 = 0;
operator_delete(puVar7);
}
CUtlSymbolTable::AddString((char *)local_1e);
uVar14 = (uint)local_1e[0];
if ((int)uVar14 < *(int *)(this + 0xc)) {
*(undefined4 *)(*(int *)this + uVar14 * 4) = 0;
}
else {
CUtlVector<CParticleSystemDefinition*,CUtlMemory<CParticleSystemDefinition*,int>>::EnsureCount
((CUtlVector<CParticleSystemDefinition*,CUtlMemory<CParticleSystemDefinition*,int>>
*)this,uVar14 + 1);
*(undefined4 *)(*(int *)this + uVar14 * 4) = 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.