L L4D2node

RecvTable_Init

0x00150ae0 · 1644 bytes · __cdecl

_Z14RecvTable_InitPP9RecvTablei

Decompiled

undefined (2 params)

/* RecvTable_Init(RecvTable**, int) */

undefined4 RecvTable_Init(RecvTable **param_1,int param_2)

{
  RecvTable *pRVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  int iVar10;
  int iVar11;
  int iVar12;
  int iVar13;
  int iVar14;
  int iVar15;
  int iVar16;
  int iVar17;
  int iVar18;
  int iVar19;
  int iVar20;
  int iVar21;
  int iVar22;
  int local_50;
  RecvTable *local_44;
  RecvTable *local_40;
  RecvTable *local_3c;
  RecvTable *local_38;
  RecvTable *local_34;
  RecvTable *local_30;
  RecvTable *local_2c;
  RecvTable *local_28;
  RecvTable *local_24;
  RecvTable *local_20 [4];
  
  local_50 = 0;
  if (0 < param_2) {
    do {
      local_44 = param_1[local_50];
      if (local_44[0x11] == (RecvTable)0x0) {
        if (*(int *)(local_44 + 8) != 0) {
          Error("RecvTable_Init: table \'%s\' has a decoder already.",*(int *)(local_44 + 0xc));
        }
        local_44[0x11] = (RecvTable)0x1;
        CUtlLinkedList<RecvTable*,unsigned_short,false,unsigned_short,CUtlMemory<UtlLinkedListElem_t<RecvTable*,unsigned_short>,unsigned_short>>
        ::InsertBefore((CUtlLinkedList<RecvTable*,unsigned_short,false,unsigned_short,CUtlMemory<UtlLinkedListElem_t<RecvTable*,unsigned_short>,unsigned_short>>
                        *)&g_RecvTables,0xffff,&local_44);
        if (0 < *(int *)(local_44 + 4)) {
          iVar3 = 0;
          iVar14 = 0;
          pRVar1 = local_44;
          do {
            while ((*(int *)(*(int *)pRVar1 + iVar3 + 4) != 6 ||
                   (local_40 = *(RecvTable **)(*(int *)pRVar1 + iVar3 + 0x28),
                   local_40[0x11] != (RecvTable)0x0))) {
              iVar14 = iVar14 + 1;
              iVar3 = iVar3 + 0x3c;
              if (*(int *)(pRVar1 + 4) <= iVar14) goto LAB_00151150;
            }
            if (*(int *)(local_40 + 8) != 0) {
              Error("RecvTable_Init: table \'%s\' has a decoder already.",*(int *)(local_40 + 0xc));
            }
            local_40[0x11] = (RecvTable)0x1;
            CUtlLinkedList<RecvTable*,unsigned_short,false,unsigned_short,CUtlMemory<UtlLinkedListElem_t<RecvTable*,unsigned_short>,unsigned_short>>
            ::InsertBefore((CUtlLinkedList<RecvTable*,unsigned_short,false,unsigned_short,CUtlMemory<UtlLinkedListElem_t<RecvTable*,unsigned_short>,unsigned_short>>
                            *)&g_RecvTables,0xffff,&local_40);
            if (0 < *(int *)(local_40 + 4)) {
              iVar15 = 0;
              iVar4 = 0;
              pRVar1 = local_40;
              do {
                while ((*(int *)(*(int *)pRVar1 + iVar4 + 4) != 6 ||
                       (local_3c = *(RecvTable **)(*(int *)pRVar1 + iVar4 + 0x28),
                       local_3c[0x11] != (RecvTable)0x0))) {
                  iVar15 = iVar15 + 1;
                  iVar4 = iVar4 + 0x3c;
                  if (*(int *)(pRVar1 + 4) <= iVar15) goto LAB_00151136;
                }
                if (*(int *)(local_3c + 8) != 0) {
                  Error("RecvTable_Init: table \'%s\' has a decoder already.",
                        *(int *)(local_3c + 0xc));
                }
                local_3c[0x11] = (RecvTable)0x1;
                CUtlLinkedList<RecvTable*,unsigned_short,false,unsigned_short,CUtlMemory<UtlLinkedListElem_t<RecvTable*,unsigned_short>,unsigned_short>>
                ::InsertBefore((CUtlLinkedList<RecvTable*,unsigned_short,false,unsigned_short,CUtlMemory<UtlLinkedListElem_t<RecvTable*,unsigned_short>,unsigned_short>>
                                *)&g_RecvTables,0xffff,&local_3c);
                if (0 < *(int *)(local_3c + 4)) {
                  iVar16 = 0;
                  iVar5 = 0;
                  pRVar1 = local_3c;
                  do {
                    while ((*(int *)(*(int *)pRVar1 + iVar5 + 4) != 6 ||
                           (local_38 = *(RecvTable **)(*(int *)pRVar1 + iVar5 + 0x28),
                           local_38[0x11] != (RecvTable)0x0))) {
                      iVar16 = iVar16 + 1;
                      iVar5 = iVar5 + 0x3c;
                      if (*(int *)(pRVar1 + 4) <= iVar16) goto LAB_00151116;
                    }
                    if (*(int *)(local_38 + 8) != 0) {
                      Error("RecvTable_Init: table \'%s\' has a decoder already.",
                            *(int *)(local_38 + 0xc));
                    }
                    local_38[0x11] = (RecvTable)0x1;
                    CUtlLinkedList<RecvTable*,unsigned_short,false,unsigned_short,CUtlMemory<UtlLinkedListElem_t<RecvTable*,unsigned_short>,unsigned_short>>
                    ::InsertBefore((CUtlLinkedList<RecvTable*,unsigned_short,false,unsigned_short,CUtlMemory<UtlLinkedListElem_t<RecvTable*,unsigned_short>,unsigned_short>>
                                    *)&g_RecvTables,0xffff,&local_38);
                    if (0 < *(int *)(local_38 + 4)) {
                      iVar17 = 0;
                      iVar6 = 0;
                      pRVar1 = local_38;
                      do {
                        while ((*(int *)(*(int *)pRVar1 + iVar6 + 4) != 6 ||
                               (local_34 = *(RecvTable **)(*(int *)pRVar1 + iVar6 + 0x28),
                               local_34[0x11] != (RecvTable)0x0))) {
                          iVar17 = iVar17 + 1;
                          iVar6 = iVar6 + 0x3c;
                          if (*(int *)(pRVar1 + 4) <= iVar17) goto LAB_001510f6;
                        }
                        if (*(int *)(local_34 + 8) != 0) {
                          Error("RecvTable_Init: table \'%s\' has a decoder already.",
                                *(int *)(local_34 + 0xc));
                        }
                        local_34[0x11] = (RecvTable)0x1;
                        CUtlLinkedList<RecvTable*,unsigned_short,false,unsigned_short,CUtlMemory<UtlLinkedListElem_t<RecvTable*,unsigned_short>,unsigned_short>>
                        ::InsertBefore((CUtlLinkedList<RecvTable*,unsigned_short,false,unsigned_short,CUtlMemory<UtlLinkedListElem_t<RecvTable*,unsigned_short>,unsigned_short>>
                                        *)&g_RecvTables,0xffff,&local_34);
                        if (0 < *(int *)(local_34 + 4)) {
                          iVar18 = 0;
                          iVar7 = 0;
                          pRVar1 = local_34;
                          do {
                            while ((*(int *)(*(int *)pRVar1 + iVar7 + 4) != 6 ||
                                   (local_30 = *(RecvTable **)(*(int *)pRVar1 + iVar7 + 0x28),
                                   local_30[0x11] != (RecvTable)0x0))) {
                              iVar18 = iVar18 + 1;
                              iVar7 = iVar7 + 0x3c;
                              if (*(int *)(pRVar1 + 4) <= iVar18) goto LAB_001510d6;
                            }
                            if (*(int *)(local_30 + 8) != 0) {
                              Error("RecvTable_Init: table \'%s\' has a decoder already.",
                                    *(int *)(local_30 + 0xc));
                            }
                            local_30[0x11] = (RecvTable)0x1;
                            CUtlLinkedList<RecvTable*,unsigned_short,false,unsigned_short,CUtlMemory<UtlLinkedListElem_t<RecvTable*,unsigned_short>,unsigned_short>>
                            ::InsertBefore((CUtlLinkedList<RecvTable*,unsigned_short,false,unsigned_short,CUtlMemory<UtlLinkedListElem_t<RecvTable*,unsigned_short>,unsigned_short>>
                                            *)&g_RecvTables,0xffff,&local_30);
                            if (0 < *(int *)(local_30 + 4)) {
                              iVar19 = 0;
                              iVar8 = 0;
                              pRVar1 = local_30;
                              do {
                                while ((*(int *)(*(int *)pRVar1 + iVar8 + 4) != 6 ||
                                       (local_2c = *(RecvTable **)(*(int *)pRVar1 + iVar8 + 0x28),
                                       local_2c[0x11] != (RecvTable)0x0))) {
                                  iVar19 = iVar19 + 1;
                                  iVar8 = iVar8 + 0x3c;
                                  if (*(int *)(pRVar1 + 4) <= iVar19) goto LAB_001510b6;
                                }
                                if (*(int *)(local_2c + 8) != 0) {
                                  Error("RecvTable_Init: table \'%s\' has a decoder already.",
                                        *(int *)(local_2c + 0xc));
                                }
                                local_2c[0x11] = (RecvTable)0x1;
                                CUtlLinkedList<RecvTable*,unsigned_short,false,unsigned_short,CUtlMemory<UtlLinkedListElem_t<RecvTable*,unsigned_short>,unsigned_short>>
                                ::InsertBefore((CUtlLinkedList<RecvTable*,unsigned_short,false,unsigned_short,CUtlMemory<UtlLinkedListElem_t<RecvTable*,unsigned_short>,unsigned_short>>
                                                *)&g_RecvTables,0xffff,&local_2c);
                                if (0 < *(int *)(local_2c + 4)) {
                                  iVar20 = 0;
                                  iVar9 = 0;
                                  pRVar1 = local_2c;
                                  do {
                                    while ((*(int *)(*(int *)pRVar1 + iVar20 + 4) != 6 ||
                                           (local_28 = *(RecvTable **)
                                                        (*(int *)pRVar1 + iVar20 + 0x28),
                                           local_28[0x11] != (RecvTable)0x0))) {
                                      iVar9 = iVar9 + 1;
                                      iVar20 = iVar20 + 0x3c;
                                      if (*(int *)(pRVar1 + 4) <= iVar9) goto LAB_00151096;
                                    }
                                    if (*(int *)(local_28 + 8) != 0) {
                                      Error("RecvTable_Init: table \'%s\' has a decoder already.",
                                            *(int *)(local_28 + 0xc));
                                    }
                                    local_28[0x11] = (RecvTable)0x1;
                                    CUtlLinkedList<RecvTable*,unsigned_short,false,unsigned_short,CUtlMemory<UtlLinkedListElem_t<RecvTable*,unsigned_short>,unsigned_short>>
                                    ::InsertBefore((
                                                  CUtlLinkedList<RecvTable*,unsigned_short,false,unsigned_short,CUtlMemory<UtlLinkedListElem_t<RecvTable*,unsigned_short>,unsigned_short>>
                                                  *)&g_RecvTables,0xffff,&local_28);
                                    if (0 < *(int *)(local_28 + 4)) {
                                      iVar21 = 0;
                                      iVar10 = 0;
                                      pRVar1 = local_28;
                                      do {
                                        while ((*(int *)(*(int *)pRVar1 + iVar21 + 4) != 6 ||
                                               (local_24 = *(RecvTable **)
                                                            (*(int *)pRVar1 + iVar21 + 0x28),
                                               local_24[0x11] != (RecvTable)0x0))) {
                                          iVar10 = iVar10 + 1;
                                          iVar21 = iVar21 + 0x3c;
                                          if (*(int *)(pRVar1 + 4) <= iVar10) goto LAB_00151079;
                                        }
                                        if (*(int *)(local_24 + 8) != 0) {
                                          Error("RecvTable_Init: table \'%s\' has a decoder already."
                                                ,*(int *)(local_24 + 0xc));
                                        }
                                        local_24[0x11] = (RecvTable)0x1;
                                        CUtlLinkedList<RecvTable*,unsigned_short,false,unsigned_short,CUtlMemory<UtlLinkedListElem_t<RecvTable*,unsigned_short>,unsigned_short>>
                                        ::InsertBefore((
                                                  CUtlLinkedList<RecvTable*,unsigned_short,false,unsigned_short,CUtlMemory<UtlLinkedListElem_t<RecvTable*,unsigned_short>,unsigned_short>>
                                                  *)&g_RecvTables,0xffff,&local_24);
                                        if (0 < *(int *)(local_24 + 4)) {
                                          iVar13 = 0;
                                          iVar11 = 0;
                                          pRVar1 = local_24;
                                          do {
                                            while ((*(int *)(*(int *)pRVar1 + iVar13 + 4) != 6 ||
                                                   (local_20[0] = *(RecvTable **)
                                                                   (*(int *)pRVar1 + iVar13 + 0x28),
                                                   local_20[0][0x11] != (RecvTable)0x0))) {
                                              iVar11 = iVar11 + 1;
                                              iVar13 = iVar13 + 0x3c;
                                              if (*(int *)(pRVar1 + 4) <= iVar11) goto LAB_0015105c;
                                            }
                                            if (*(int *)(local_20[0] + 8) != 0) {
                                              Error(
                                                  "RecvTable_Init: table \'%s\' has a decoder already."
                                                  ,*(int *)(local_20[0] + 0xc));
                                            }
                                            local_20[0][0x11] = (RecvTable)0x1;
                                            CUtlLinkedList<RecvTable*,unsigned_short,false,unsigned_short,CUtlMemory<UtlLinkedListElem_t<RecvTable*,unsigned_short>,unsigned_short>>
                                            ::InsertBefore((
                                                  CUtlLinkedList<RecvTable*,unsigned_short,false,unsigned_short,CUtlMemory<UtlLinkedListElem_t<RecvTable*,unsigned_short>,unsigned_short>>
                                                  *)&g_RecvTables,0xffff,local_20);
                                            if (0 < *(int *)(local_20[0] + 4)) {
                                              iVar22 = 0;
                                              iVar12 = 0;
                                              pRVar1 = local_20[0];
                                              do {
                                                while (iVar2 = *(int *)pRVar1 + iVar22,
                                                      *(int *)(iVar2 + 4) != 6) {
                                                  iVar12 = iVar12 + 1;
                                                  iVar22 = iVar22 + 0x3c;
                                                  if (*(int *)(pRVar1 + 4) <= iVar12)
                                                  goto LAB_00151036;
                                                }
                                                iVar12 = iVar12 + 1;
                                                iVar22 = iVar22 + 0x3c;
                                                RecvTable_Init(RecvTable**,int)::CPropVisitor::
                                                Visit_R(*(RecvTable **)(iVar2 + 0x28));
                                                pRVar1 = local_20[0];
                                              } while (iVar12 < *(int *)(local_20[0] + 4));
                                            }
LAB_00151036:
                                            iVar11 = iVar11 + 1;
                                            iVar13 = iVar13 + 0x3c;
                                            pRVar1 = local_24;
                                          } while (iVar11 < *(int *)(local_24 + 4));
                                        }
LAB_0015105c:
                                        iVar10 = iVar10 + 1;
                                        iVar21 = iVar21 + 0x3c;
                                        pRVar1 = local_28;
                                      } while (iVar10 < *(int *)(local_28 + 4));
                                    }
LAB_00151079:
                                    iVar9 = iVar9 + 1;
                                    iVar20 = iVar20 + 0x3c;
                                    pRVar1 = local_2c;
                                  } while (iVar9 < *(int *)(local_2c + 4));
                                }
LAB_00151096:
                                iVar19 = iVar19 + 1;
                                iVar8 = iVar8 + 0x3c;
                                pRVar1 = local_30;
                              } while (iVar19 < *(int *)(local_30 + 4));
                            }
LAB_001510b6:
                            iVar18 = iVar18 + 1;
                            iVar7 = iVar7 + 0x3c;
                            pRVar1 = local_34;
                          } while (iVar18 < *(int *)(local_34 + 4));
                        }
LAB_001510d6:
                        iVar17 = iVar17 + 1;
                        iVar6 = iVar6 + 0x3c;
                        pRVar1 = local_38;
                      } while (iVar17 < *(int *)(local_38 + 4));
                    }
LAB_001510f6:
                    iVar16 = iVar16 + 1;
                    iVar5 = iVar5 + 0x3c;
                    pRVar1 = local_3c;
                  } while (iVar16 < *(int *)(local_3c + 4));
                }
LAB_00151116:
                iVar15 = iVar15 + 1;
                iVar4 = iVar4 + 0x3c;
                pRVar1 = local_40;
              } while (iVar15 < *(int *)(local_40 + 4));
            }
LAB_00151136:
            iVar14 = iVar14 + 1;
            iVar3 = iVar3 + 0x3c;
            pRVar1 = local_44;
          } while (iVar14 < *(int *)(local_44 + 4));
        }
      }
LAB_00151150:
      local_50 = local_50 + 1;
    } while (local_50 != param_2);
  }
  return 1;
}

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)