L L4D2node

CChoreoEvent::VerifyTagOrder

0x00ba93f0 · 650 bytes · __thiscall

_ZN12CChoreoEvent14VerifyTagOrderEv

Decompiled

undefined (1 param)

/* CChoreoEvent::VerifyTagOrder() */

undefined4 __thiscall CChoreoEvent::VerifyTagOrder(CChoreoEvent *this)

{
  CUtlString CVar1;
  CUtlString CVar2;
  bool bVar3;
  CUtlString *this_00;
  CUtlString *this_01;
  char *pcVar4;
  char *pcVar5;
  int iVar6;
  CUtlString *this_02;
  int iVar7;
  byte bVar8;
  byte bVar9;
  int iVar10;
  int iVar11;
  int local_4c;
  undefined4 local_40;
  CEventAbsoluteTag local_38 [16];
  undefined4 local_28;
  byte local_24;
  undefined4 local_20;
  
  CEventAbsoluteTag::CEventAbsoluteTag(local_38,(CChoreoEvent *)0x1,"",0.0);
  if (*(int *)(this + 0x104) < 1) {
    local_40 = 1;
  }
  else {
    local_4c = 1;
    iVar10 = 0;
    local_40 = 1;
    do {
      this_00 = (CUtlString *)(iVar10 + *(int *)(this + 0xf8));
      if (this_00 != (CUtlString *)0x0) {
        this_01 = (CUtlString *)(*(int *)(this + 0xe4) + iVar10);
                    /* try { // try from 00ba9478 to 00ba95cf has its CatchHandler @ 00ba968e */
        pcVar4 = (char *)CUtlString::Get(this_01);
        pcVar5 = (char *)CUtlString::Get(this_00);
        iVar6 = _V_stricmp(pcVar5,pcVar4);
        if (iVar6 != 0) {
          iVar6 = local_4c;
          iVar11 = iVar10;
          if (local_4c < *(int *)(this + 0xf0)) {
            do {
              this_02 = (CUtlString *)(*(int *)(this + 0xe4) + iVar11 + 0x1c);
              pcVar4 = (char *)CUtlString::Get(this_02);
              pcVar5 = (char *)CUtlString::Get(this_00);
              iVar7 = _V_stricmp(pcVar5,pcVar4);
              if (iVar7 == 0) {
                CUtlString::operator=((CUtlString *)local_38,this_01);
                local_28 = *(undefined4 *)(this_01 + 0x10);
                local_24 = local_24 & 0xf0 | (byte)this_01[0x14] & 1 | (byte)this_01[0x14] & 2 |
                           (byte)this_01[0x14] & 4 | (byte)this_01[0x14] & 8;
                local_20 = *(undefined4 *)(this_01 + 0x18);
                CUtlString::operator=(this_01,this_02);
                *(undefined4 *)(this_01 + 0x10) = *(undefined4 *)(this_02 + 0x10);
                CVar1 = this_01[0x14];
                bVar8 = (byte)this_02[0x14] & 1;
                this_01[0x14] = (CUtlString)((byte)CVar1 & 0xfe | bVar8);
                bVar9 = (byte)this_02[0x14] & 2;
                this_01[0x14] = (CUtlString)((byte)CVar1 & 0xfc | bVar8 | bVar9);
                CVar2 = this_02[0x14];
                this_01[0x14] = (CUtlString)((byte)CVar1 & 0xf8 | bVar8 | bVar9 | (byte)CVar2 & 4);
                this_01[0x14] =
                     (CUtlString)
                     ((byte)CVar1 & 0xf0 | bVar8 | bVar9 | (byte)CVar2 & 4 | (byte)this_02[0x14] & 8
                     );
                *(undefined4 *)(this_01 + 0x18) = *(undefined4 *)(this_02 + 0x18);
                CUtlString::operator=(this_02,(CUtlString *)local_38);
                local_40 = 0;
                CVar1 = this_02[0x14];
                *(undefined4 *)(this_02 + 0x10) = local_28;
                bVar8 = local_24 & 1;
                this_02[0x14] = (CUtlString)((byte)CVar1 & 0xfe | bVar8);
                bVar9 = local_24 & 2;
                this_02[0x14] = (CUtlString)((byte)CVar1 & 0xfc | bVar8 | bVar9);
                this_02[0x14] = (CUtlString)((byte)CVar1 & 0xf8 | bVar8 | bVar9 | local_24 & 4);
                this_02[0x14] =
                     (CUtlString)((byte)CVar1 & 0xf0 | bVar8 | bVar9 | local_24 & 4 | local_24 & 8);
                *(undefined4 *)(this_02 + 0x18) = local_20;
                iVar6 = *(int *)(this + 0x104);
                goto joined_r0x00ba9634;
              }
              iVar6 = iVar6 + 1;
              iVar11 = iVar11 + 0x1c;
            } while (iVar6 < *(int *)(this + 0xf0));
            local_40 = 0;
          }
          else {
            local_40 = 0;
          }
        }
      }
      iVar6 = *(int *)(this + 0x104);
joined_r0x00ba9634:
      bVar3 = local_4c < iVar6;
      local_4c = local_4c + 1;
      iVar10 = iVar10 + 0x1c;
    } while (bVar3);
  }
  CUtlMemory<unsigned_char,int>::Purge((CUtlMemory<unsigned_char,int> *)local_38);
  return local_40;
}

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)