L L4D2node

CVPROFToCSVConverter::WriteNodeDataToDict

0x00239770 · 1579 bytes · __thiscall

_ZN20CVPROFToCSVConverter19WriteNodeDataToDictEP10CVProfNodeP7CUtlMapIPcdtE

Decompiled

undefined (3 params)

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* CVPROFToCSVConverter::WriteNodeDataToDict(CVProfNode*, CUtlMap<char*, double, unsigned short>*)
    */

void __thiscall
CVPROFToCSVConverter::WriteNodeDataToDict
          (CVPROFToCSVConverter *this,CVProfNode *param_1,CUtlMap *param_2)

{
  longlong lVar1;
  undefined4 *puVar2;
  undefined4 *puVar3;
  char cVar4;
  int iVar5;
  int iVar6;
  ushort uVar7;
  char *local_30;
  char *local_2c;
  char *local_28;
  double local_24;
  
  local_30 = *(char **)param_1;
  iVar5 = _V_strcmp(local_30,"Root");
  if (iVar5 != 0) {
    puVar2 = *(undefined4 **)(this + 0x2c);
    if ((puVar2 == (undefined4 *)0x0) || (*(short *)((int)puVar2 + 0x12) == 0)) {
LAB_002397b1:
      iVar5 = *(int *)(this + 0xc);
      if (iVar5 < 1) {
LAB_002397e0:
        CUtlVector<char*,CUtlMemory<char*,int>>::InsertBefore
                  ((CUtlVector<char*,CUtlMemory<char*,int>> *)this,iVar5,&local_30);
LAB_002397f9:
        lVar1 = *(longlong *)(param_1 + 0x3c);
        iVar5 = *(int *)(param_1 + 0x40);
      }
      else {
        if ((char *)**(undefined4 **)this == local_30) goto LAB_002397f9;
        iVar6 = 0;
        do {
          iVar6 = iVar6 + 1;
          if (iVar6 == iVar5) goto LAB_002397e0;
        } while ((char *)(*(undefined4 **)this)[iVar6] != local_30);
        if (iVar6 == -1) goto LAB_002397e0;
        lVar1 = *(longlong *)(param_1 + 0x3c);
        iVar5 = *(int *)(param_1 + 0x40);
      }
      local_24 = (double)lVar1;
      if (iVar5 < 0) {
        local_24 = local_24 + 1.8446744073709552e+19;
      }
      local_24 = local_24 * _g_ClockSpeedMillisecondsMultiplier;
      local_28 = local_30;
      CUtlRBTree<CUtlMap<char*,double,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,double,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,double,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
      ::Insert((CUtlRBTree<CUtlMap<char*,double,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,double,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,double,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
                *)param_2,(Node_t *)&local_28);
    }
    else {
      local_28 = local_30;
      uVar7 = *(ushort *)(puVar2 + 4);
      if (uVar7 != 0xffff) {
        iVar5 = puVar2[1];
        do {
          iVar6 = (uint)uVar7 * 0x10;
          cVar4 = (*(code *)*puVar2)((Node_t *)&local_28,iVar5 + 8 + iVar6);
          if (cVar4 == '\0') {
            cVar4 = (*(code *)*puVar2)(puVar2[1] + iVar6 + 8,(Node_t *)&local_28);
            if (cVar4 == '\0') goto LAB_002397b1;
            if ((CUtlRBTree<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,int,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
                 ::Links(unsigned_short)::s_Sentinel == '\0') &&
               (iVar5 = __cxa_guard_acquire(&CUtlRBTree<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,int,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
                                             ::Links(unsigned_short)::s_Sentinel), iVar5 != 0)) {
              CUtlRBTree<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,int,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
              ::Links(unsigned_short)::s_Sentinel = 0xffff;
              DAT_00341aca = 0xffff;
              DAT_00341acc = 0xffff;
              __cxa_guard_release(&CUtlRBTree<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,int,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
                                   ::Links(unsigned_short)::s_Sentinel);
            }
            iVar5 = puVar2[1];
            uVar7 = *(ushort *)(iVar5 + 2 + iVar6);
          }
          else {
            if ((CUtlRBTree<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,int,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
                 ::Links(unsigned_short)::s_Sentinel == '\0') &&
               (iVar5 = __cxa_guard_acquire(&CUtlRBTree<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,int,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
                                             ::Links(unsigned_short)::s_Sentinel), iVar5 != 0)) {
              DAT_00341aca = 0xffff;
              CUtlRBTree<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,int,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
              ::Links(unsigned_short)::s_Sentinel = 0xffff;
              DAT_00341acc = 0xffff;
              __cxa_guard_release(&CUtlRBTree<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,int,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
                                   ::Links(unsigned_short)::s_Sentinel);
            }
            iVar5 = puVar2[1];
            uVar7 = *(ushort *)(iVar5 + iVar6);
          }
        } while (uVar7 != 0xffff);
      }
    }
  }
  puVar2 = *(undefined4 **)(param_1 + 0x6c);
  if (puVar2 != (undefined4 *)0x0) {
    local_2c = (char *)*puVar2;
    iVar5 = _V_strcmp(local_2c,"Root");
    if (iVar5 != 0) {
      puVar3 = *(undefined4 **)(this + 0x2c);
      if ((puVar3 == (undefined4 *)0x0) || (*(short *)((int)puVar3 + 0x12) == 0)) {
LAB_00239874:
        iVar5 = *(int *)(this + 0xc);
        if (iVar5 < 1) {
LAB_002398a0:
          CUtlVector<char*,CUtlMemory<char*,int>>::InsertBefore
                    ((CUtlVector<char*,CUtlMemory<char*,int>> *)this,iVar5,&local_2c);
        }
        else if ((char *)**(undefined4 **)this != local_2c) {
          iVar6 = 0;
          do {
            iVar6 = iVar6 + 1;
            if (iVar6 == iVar5) goto LAB_002398a0;
          } while (local_2c != (char *)(*(undefined4 **)this)[iVar6]);
          if (iVar6 == -1) goto LAB_002398a0;
        }
        local_24 = (double)*(longlong *)(puVar2 + 0xf);
        if ((int)puVar2[0x10] < 0) {
          local_24 = local_24 + 1.8446744073709552e+19;
        }
        local_24 = local_24 * _g_ClockSpeedMillisecondsMultiplier;
        local_28 = local_2c;
        CUtlRBTree<CUtlMap<char*,double,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,double,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,double,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
        ::Insert((CUtlRBTree<CUtlMap<char*,double,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,double,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,double,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
                  *)param_2,(Node_t *)&local_28);
      }
      else {
        local_28 = local_2c;
        uVar7 = *(ushort *)(puVar3 + 4);
        if (uVar7 != 0xffff) {
          iVar5 = puVar3[1];
          do {
            iVar6 = (uint)uVar7 * 0x10;
            cVar4 = (*(code *)*puVar3)((Node_t *)&local_28,iVar5 + 8 + iVar6);
            if (cVar4 == '\0') {
              cVar4 = (*(code *)*puVar3)(puVar3[1] + iVar6 + 8,(Node_t *)&local_28);
              if (cVar4 == '\0') goto LAB_00239874;
              if ((CUtlRBTree<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,int,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
                   ::Links(unsigned_short)::s_Sentinel == '\0') &&
                 (iVar5 = __cxa_guard_acquire(&CUtlRBTree<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,int,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
                                               ::Links(unsigned_short)::s_Sentinel), iVar5 != 0)) {
                CUtlRBTree<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,int,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
                ::Links(unsigned_short)::s_Sentinel = 0xffff;
                DAT_00341aca = 0xffff;
                DAT_00341acc = 0xffff;
                __cxa_guard_release(&CUtlRBTree<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,int,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
                                     ::Links(unsigned_short)::s_Sentinel);
              }
              iVar5 = puVar3[1];
              uVar7 = *(ushort *)(iVar5 + 2 + iVar6);
            }
            else {
              if ((CUtlRBTree<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,int,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
                   ::Links(unsigned_short)::s_Sentinel == '\0') &&
                 (iVar5 = __cxa_guard_acquire(&CUtlRBTree<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,int,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
                                               ::Links(unsigned_short)::s_Sentinel), iVar5 != 0)) {
                CUtlRBTree<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,int,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
                ::Links(unsigned_short)::s_Sentinel = 0xffff;
                DAT_00341aca = 0xffff;
                DAT_00341acc = 0xffff;
                __cxa_guard_release(&CUtlRBTree<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,int,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
                                     ::Links(unsigned_short)::s_Sentinel);
              }
              iVar5 = puVar3[1];
              uVar7 = *(ushort *)(iVar5 + iVar6);
            }
          } while (uVar7 != 0xffff);
        }
      }
    }
    if ((CVProfNode *)puVar2[0x1b] != (CVProfNode *)0x0) {
      WriteNodeDataToDict(this,(CVProfNode *)puVar2[0x1b],param_2);
    }
    if ((CVProfNode *)puVar2[0x1a] != (CVProfNode *)0x0) {
      WriteNodeDataToDict(this,(CVProfNode *)puVar2[0x1a],param_2);
    }
  }
  puVar2 = *(undefined4 **)(param_1 + 0x68);
  if (puVar2 == (undefined4 *)0x0) {
    return;
  }
  local_2c = (char *)*puVar2;
  iVar5 = _V_strcmp(local_2c,"Root");
  if (iVar5 == 0) goto LAB_002399e6;
  puVar3 = *(undefined4 **)(this + 0x2c);
  if ((puVar3 != (undefined4 *)0x0) && (*(short *)((int)puVar3 + 0x12) != 0)) {
    local_28 = local_2c;
    uVar7 = *(ushort *)(puVar3 + 4);
    if (uVar7 != 0xffff) {
      iVar5 = puVar3[1];
      do {
        iVar6 = (uint)uVar7 * 0x10;
        cVar4 = (*(code *)*puVar3)((Node_t *)&local_28,iVar5 + 8 + iVar6);
        if (cVar4 == '\0') {
          cVar4 = (*(code *)*puVar3)(puVar3[1] + iVar6 + 8,(Node_t *)&local_28);
          if (cVar4 == '\0') goto LAB_0023996b;
          if ((CUtlRBTree<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,int,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
               ::Links(unsigned_short)::s_Sentinel == '\0') &&
             (iVar5 = __cxa_guard_acquire(&CUtlRBTree<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,int,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
                                           ::Links(unsigned_short)::s_Sentinel), iVar5 != 0)) {
            CUtlRBTree<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,int,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
            ::Links(unsigned_short)::s_Sentinel = 0xffff;
            DAT_00341aca = 0xffff;
            DAT_00341acc = 0xffff;
            __cxa_guard_release(&CUtlRBTree<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,int,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
                                 ::Links(unsigned_short)::s_Sentinel);
          }
          iVar5 = puVar3[1];
          uVar7 = *(ushort *)(iVar5 + 2 + iVar6);
        }
        else {
          if ((CUtlRBTree<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,int,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
               ::Links(unsigned_short)::s_Sentinel == '\0') &&
             (iVar5 = __cxa_guard_acquire(&CUtlRBTree<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,int,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
                                           ::Links(unsigned_short)::s_Sentinel), iVar5 != 0)) {
            CUtlRBTree<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,int,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
            ::Links(unsigned_short)::s_Sentinel = 0xffff;
            DAT_00341aca = 0xffff;
            DAT_00341acc = 0xffff;
            __cxa_guard_release(&CUtlRBTree<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,int,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,int,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
                                 ::Links(unsigned_short)::s_Sentinel);
          }
          iVar5 = puVar3[1];
          uVar7 = *(ushort *)(iVar5 + iVar6);
        }
      } while (uVar7 != 0xffff);
    }
    goto LAB_002399e6;
  }
LAB_0023996b:
  iVar5 = *(int *)(this + 0xc);
  if (iVar5 < 1) {
LAB_00239998:
    CUtlVector<char*,CUtlMemory<char*,int>>::InsertBefore
              ((CUtlVector<char*,CUtlMemory<char*,int>> *)this,iVar5,&local_2c);
  }
  else if ((char *)**(undefined4 **)this != local_2c) {
    iVar6 = 0;
    do {
      iVar6 = iVar6 + 1;
      if (iVar6 == iVar5) goto LAB_00239998;
    } while ((char *)(*(undefined4 **)this)[iVar6] != local_2c);
    if (iVar6 == -1) goto LAB_00239998;
  }
  local_24 = (double)*(longlong *)(puVar2 + 0xf);
  if ((int)puVar2[0x10] < 0) {
    local_24 = local_24 + 1.8446744073709552e+19;
  }
  local_24 = local_24 * _g_ClockSpeedMillisecondsMultiplier;
  local_28 = local_2c;
  CUtlRBTree<CUtlMap<char*,double,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,double,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,double,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
  ::Insert((CUtlRBTree<CUtlMap<char*,double,unsigned_short>::Node_t,unsigned_short,CUtlMap<char*,double,unsigned_short>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<char*,double,unsigned_short>::Node_t,unsigned_short>,unsigned_short>>
            *)param_2,(Node_t *)&local_28);
LAB_002399e6:
  if ((CVProfNode *)puVar2[0x1b] != (CVProfNode *)0x0) {
    WriteNodeDataToDict(this,(CVProfNode *)puVar2[0x1b],param_2);
  }
  if ((CVProfNode *)puVar2[0x1a] != (CVProfNode *)0x0) {
    WriteNodeDataToDict(this,(CVProfNode *)puVar2[0x1a],param_2);
  }
  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)