L L4D2node

CVProfRecorder::UpdateAverages_R

0x002370a0 · 1411 bytes · __thiscall

_ZN14CVProfRecorder16UpdateAverages_RER10CUtlVectorINS_12CNodeAverageE10CUtlMemoryIS1_iEEP10CVProfNode

Decompiled

undefined (3 params)

/* CVProfRecorder::UpdateAverages_R(CUtlVector<CVProfRecorder::CNodeAverage,
   CUtlMemory<CVProfRecorder::CNodeAverage, int> >&, CVProfNode*) */

void __thiscall
CVProfRecorder::UpdateAverages_R(CVProfRecorder *this,CUtlVector *param_1,CVProfNode *param_2)

{
  uint *puVar1;
  uint uVar2;
  uint uVar3;
  CVProfNode *pCVar4;
  int iVar5;
  int *piVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  int iVar11;
  int iVar12;
  int iVar13;
  int iVar14;
  int iVar15;
  
  iVar5 = *(int *)(param_1 + 0xc);
  if (iVar5 < 1) {
LAB_002370d4:
    iVar5 = CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>::
            InsertBefore((CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
                          *)param_1,iVar5);
    piVar6 = (int *)(*(int *)param_1 + iVar5 * 0x14);
    piVar6[1] = 0;
    piVar6[2] = 0;
    piVar6[3] = 0;
    piVar6[4] = 0;
    *piVar6 = (int)param_2;
  }
  else {
    piVar6 = *(int **)param_1;
    if (param_2 != (CVProfNode *)*piVar6) {
      iVar15 = 0;
      do {
        piVar6 = piVar6 + 5;
        iVar15 = iVar15 + 1;
        if (iVar15 == iVar5) goto LAB_002370d4;
      } while (param_2 != (CVProfNode *)*piVar6);
    }
  }
  uVar3 = *(uint *)(param_2 + 0x3c);
  iVar5 = *(int *)(param_2 + 0x40);
  puVar1 = (uint *)(piVar6 + 1);
  uVar2 = *puVar1;
  *puVar1 = *puVar1 + uVar3;
  piVar6[2] = piVar6[2] + iVar5 + (uint)CARRY4(uVar2,uVar3);
  iVar5 = *(int *)(param_2 + 0x38);
  piVar6[4] = piVar6[4] + 1;
  piVar6[3] = piVar6[3] + iVar5;
  iVar5 = *(int *)(param_2 + 0x68);
  do {
    if (iVar5 == 0) {
      return;
    }
    iVar15 = *(int *)(param_1 + 0xc);
    if (iVar15 < 1) {
LAB_00237584:
      iVar15 = CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
               ::InsertBefore((CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
                               *)param_1,iVar15);
      piVar6 = (int *)(*(int *)param_1 + iVar15 * 0x14);
      piVar6[1] = 0;
      piVar6[2] = 0;
      piVar6[3] = 0;
      piVar6[4] = 0;
      *piVar6 = iVar5;
    }
    else {
      piVar6 = *(int **)param_1;
      if (iVar5 != *piVar6) {
        iVar10 = 0;
        do {
          piVar6 = piVar6 + 5;
          iVar10 = iVar10 + 1;
          if (iVar10 == iVar15) goto LAB_00237584;
        } while (iVar5 != *piVar6);
      }
    }
    uVar3 = *(uint *)(iVar5 + 0x3c);
    iVar15 = *(int *)(iVar5 + 0x40);
    puVar1 = (uint *)(piVar6 + 1);
    uVar2 = *puVar1;
    *puVar1 = *puVar1 + uVar3;
    piVar6[2] = piVar6[2] + iVar15 + (uint)CARRY4(uVar2,uVar3);
    iVar15 = *(int *)(iVar5 + 0x38);
    piVar6[4] = piVar6[4] + 1;
    piVar6[3] = piVar6[3] + iVar15;
    for (iVar15 = *(int *)(iVar5 + 0x68); iVar15 != 0; iVar15 = *(int *)(iVar15 + 0x6c)) {
      iVar10 = *(int *)(param_1 + 0xc);
      if (iVar10 < 1) {
LAB_002375be:
        iVar10 = CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
                 ::InsertBefore((CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
                                 *)param_1,iVar10);
        piVar6 = (int *)(*(int *)param_1 + iVar10 * 0x14);
        piVar6[1] = 0;
        piVar6[2] = 0;
        piVar6[3] = 0;
        piVar6[4] = 0;
        *piVar6 = iVar15;
      }
      else {
        piVar6 = *(int **)param_1;
        if (iVar15 != *piVar6) {
          iVar11 = 0;
          do {
            piVar6 = piVar6 + 5;
            iVar11 = iVar11 + 1;
            if (iVar11 == iVar10) goto LAB_002375be;
          } while (iVar15 != *piVar6);
        }
      }
      uVar3 = *(uint *)(iVar15 + 0x3c);
      iVar10 = *(int *)(iVar15 + 0x40);
      puVar1 = (uint *)(piVar6 + 1);
      uVar2 = *puVar1;
      *puVar1 = *puVar1 + uVar3;
      piVar6[2] = piVar6[2] + iVar10 + (uint)CARRY4(uVar2,uVar3);
      iVar10 = *(int *)(iVar15 + 0x38);
      piVar6[4] = piVar6[4] + 1;
      piVar6[3] = piVar6[3] + iVar10;
      for (iVar10 = *(int *)(iVar15 + 0x68); iVar10 != 0; iVar10 = *(int *)(iVar10 + 0x6c)) {
        iVar11 = *(int *)(param_1 + 0xc);
        if (iVar11 < 1) {
LAB_002375f8:
          iVar11 = CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
                   ::InsertBefore((CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
                                   *)param_1,iVar11);
          piVar6 = (int *)(*(int *)param_1 + iVar11 * 0x14);
          piVar6[1] = 0;
          piVar6[2] = 0;
          piVar6[3] = 0;
          piVar6[4] = 0;
          *piVar6 = iVar10;
        }
        else {
          piVar6 = *(int **)param_1;
          if (iVar10 != *piVar6) {
            iVar12 = 0;
            do {
              piVar6 = piVar6 + 5;
              iVar12 = iVar12 + 1;
              if (iVar12 == iVar11) goto LAB_002375f8;
            } while (iVar10 != *piVar6);
          }
        }
        uVar3 = *(uint *)(iVar10 + 0x3c);
        iVar11 = *(int *)(iVar10 + 0x40);
        puVar1 = (uint *)(piVar6 + 1);
        uVar2 = *puVar1;
        *puVar1 = *puVar1 + uVar3;
        piVar6[2] = piVar6[2] + iVar11 + (uint)CARRY4(uVar2,uVar3);
        iVar11 = *(int *)(iVar10 + 0x38);
        piVar6[4] = piVar6[4] + 1;
        piVar6[3] = piVar6[3] + iVar11;
        for (iVar11 = *(int *)(iVar10 + 0x68); iVar11 != 0; iVar11 = *(int *)(iVar11 + 0x6c)) {
          iVar12 = *(int *)(param_1 + 0xc);
          if (iVar12 < 1) {
LAB_00237264:
            iVar12 = CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
                     ::InsertBefore((CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
                                     *)param_1,iVar12);
            piVar6 = (int *)(*(int *)param_1 + iVar12 * 0x14);
            piVar6[1] = 0;
            piVar6[2] = 0;
            piVar6[3] = 0;
            piVar6[4] = 0;
            *piVar6 = iVar11;
          }
          else {
            piVar6 = *(int **)param_1;
            if (iVar11 != *piVar6) {
              iVar13 = 0;
              do {
                piVar6 = piVar6 + 5;
                iVar13 = iVar13 + 1;
                if (iVar13 == iVar12) goto LAB_00237264;
              } while (iVar11 != *piVar6);
            }
          }
          uVar3 = *(uint *)(iVar11 + 0x3c);
          iVar12 = *(int *)(iVar11 + 0x40);
          puVar1 = (uint *)(piVar6 + 1);
          uVar2 = *puVar1;
          *puVar1 = *puVar1 + uVar3;
          piVar6[2] = piVar6[2] + iVar12 + (uint)CARRY4(uVar2,uVar3);
          iVar12 = *(int *)(iVar11 + 0x38);
          piVar6[4] = piVar6[4] + 1;
          piVar6[3] = piVar6[3] + iVar12;
          for (iVar12 = *(int *)(iVar11 + 0x68); iVar12 != 0; iVar12 = *(int *)(iVar12 + 0x6c)) {
            iVar13 = *(int *)(param_1 + 0xc);
            if (iVar13 < 1) {
LAB_002372ed:
              iVar13 = CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
                       ::InsertBefore((CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
                                       *)param_1,iVar13);
              piVar6 = (int *)(*(int *)param_1 + iVar13 * 0x14);
              piVar6[1] = 0;
              piVar6[2] = 0;
              piVar6[3] = 0;
              piVar6[4] = 0;
              *piVar6 = iVar12;
            }
            else {
              piVar6 = *(int **)param_1;
              if (iVar12 != *piVar6) {
                iVar14 = 0;
                do {
                  piVar6 = piVar6 + 5;
                  iVar14 = iVar14 + 1;
                  if (iVar14 == iVar13) goto LAB_002372ed;
                } while (iVar12 != *piVar6);
              }
            }
            uVar3 = *(uint *)(iVar12 + 0x3c);
            iVar13 = *(int *)(iVar12 + 0x40);
            puVar1 = (uint *)(piVar6 + 1);
            uVar2 = *puVar1;
            *puVar1 = *puVar1 + uVar3;
            piVar6[2] = piVar6[2] + iVar13 + (uint)CARRY4(uVar2,uVar3);
            iVar13 = *(int *)(iVar12 + 0x38);
            piVar6[4] = piVar6[4] + 1;
            piVar6[3] = piVar6[3] + iVar13;
            for (iVar13 = *(int *)(iVar12 + 0x68); iVar13 != 0; iVar13 = *(int *)(iVar13 + 0x6c)) {
              iVar14 = *(int *)(param_1 + 0xc);
              if (iVar14 < 1) {
LAB_00237373:
                iVar14 = CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
                         ::InsertBefore((CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
                                         *)param_1,iVar14);
                piVar6 = (int *)(*(int *)param_1 + iVar14 * 0x14);
                piVar6[1] = 0;
                piVar6[2] = 0;
                piVar6[3] = 0;
                piVar6[4] = 0;
                *piVar6 = iVar13;
              }
              else {
                piVar6 = *(int **)param_1;
                if (iVar13 != *piVar6) {
                  iVar7 = 0;
                  do {
                    piVar6 = piVar6 + 5;
                    iVar7 = iVar7 + 1;
                    if (iVar7 == iVar14) goto LAB_00237373;
                  } while (iVar13 != *piVar6);
                }
              }
              uVar3 = *(uint *)(iVar13 + 0x3c);
              iVar14 = *(int *)(iVar13 + 0x40);
              puVar1 = (uint *)(piVar6 + 1);
              uVar2 = *puVar1;
              *puVar1 = *puVar1 + uVar3;
              piVar6[2] = piVar6[2] + iVar14 + (uint)CARRY4(uVar2,uVar3);
              iVar14 = *(int *)(iVar13 + 0x38);
              piVar6[4] = piVar6[4] + 1;
              piVar6[3] = piVar6[3] + iVar14;
              for (iVar14 = *(int *)(iVar13 + 0x68); iVar14 != 0; iVar14 = *(int *)(iVar14 + 0x6c))
              {
                iVar7 = *(int *)(param_1 + 0xc);
                if (iVar7 < 1) {
LAB_00237401:
                  iVar7 = CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
                          ::InsertBefore((CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
                                          *)param_1,iVar7);
                  piVar6 = (int *)(*(int *)param_1 + iVar7 * 0x14);
                  piVar6[1] = 0;
                  piVar6[2] = 0;
                  piVar6[3] = 0;
                  piVar6[4] = 0;
                  *piVar6 = iVar14;
                }
                else {
                  piVar6 = *(int **)param_1;
                  if (iVar14 != *piVar6) {
                    iVar8 = 0;
                    do {
                      piVar6 = piVar6 + 5;
                      iVar8 = iVar8 + 1;
                      if (iVar8 == iVar7) goto LAB_00237401;
                    } while (iVar14 != *piVar6);
                  }
                }
                uVar3 = *(uint *)(iVar14 + 0x3c);
                iVar7 = *(int *)(iVar14 + 0x40);
                puVar1 = (uint *)(piVar6 + 1);
                uVar2 = *puVar1;
                *puVar1 = *puVar1 + uVar3;
                piVar6[2] = piVar6[2] + iVar7 + (uint)CARRY4(uVar2,uVar3);
                iVar7 = *(int *)(iVar14 + 0x38);
                piVar6[4] = piVar6[4] + 1;
                piVar6[3] = piVar6[3] + iVar7;
                for (iVar7 = *(int *)(iVar14 + 0x68); iVar7 != 0; iVar7 = *(int *)(iVar7 + 0x6c)) {
                  iVar8 = *(int *)(param_1 + 0xc);
                  if (iVar8 < 1) {
LAB_00237489:
                    iVar8 = CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
                            ::InsertBefore((CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
                                            *)param_1,iVar8);
                    piVar6 = (int *)(*(int *)param_1 + iVar8 * 0x14);
                    piVar6[1] = 0;
                    piVar6[2] = 0;
                    piVar6[3] = 0;
                    piVar6[4] = 0;
                    *piVar6 = iVar7;
                  }
                  else {
                    piVar6 = *(int **)param_1;
                    if (iVar7 != *piVar6) {
                      iVar9 = 0;
                      do {
                        piVar6 = piVar6 + 5;
                        iVar9 = iVar9 + 1;
                        if (iVar9 == iVar8) goto LAB_00237489;
                      } while (iVar7 != *piVar6);
                    }
                  }
                  uVar3 = *(uint *)(iVar7 + 0x3c);
                  iVar8 = *(int *)(iVar7 + 0x40);
                  puVar1 = (uint *)(piVar6 + 1);
                  uVar2 = *puVar1;
                  *puVar1 = *puVar1 + uVar3;
                  piVar6[2] = piVar6[2] + iVar8 + (uint)CARRY4(uVar2,uVar3);
                  iVar8 = *(int *)(iVar7 + 0x38);
                  piVar6[4] = piVar6[4] + 1;
                  piVar6[3] = piVar6[3] + iVar8;
                  for (pCVar4 = *(CVProfNode **)(iVar7 + 0x68); pCVar4 != (CVProfNode *)0x0;
                      pCVar4 = *(CVProfNode **)(pCVar4 + 0x6c)) {
                    UpdateAverages_R(this,param_1,pCVar4);
                  }
                }
              }
            }
          }
        }
      }
    }
    iVar5 = *(int *)(iVar5 + 0x6c);
  } while( true );
}

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)