L L4D2node

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 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)