L L4D2node

RecvTable_Term

0x00151730 · 1377 bytes · __cdecl

_Z14RecvTable_Termb

Decompiled

undefined (1 param)

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* RecvTable_Term(bool) */

void RecvTable_Term(bool param_1)

{
  undefined4 *puVar1;
  ushort uVar2;
  int *piVar3;
  int *piVar4;
  int *piVar5;
  int *piVar6;
  int *piVar7;
  int *piVar8;
  int *piVar9;
  int *piVar10;
  int *piVar11;
  CClientSendTable *this;
  int iVar12;
  int *piVar13;
  int iVar14;
  int iVar15;
  int iVar16;
  int iVar17;
  int iVar18;
  int iVar19;
  int iVar20;
  int iVar21;
  int iVar22;
  int iVar23;
  int iVar24;
  int iVar25;
  int iVar26;
  int iVar27;
  int iVar28;
  int iVar29;
  int iVar30;
  int iVar31;
  int iVar32;
  uint uVar33;
  int iVar34;
  int iVar35;
  
  DTI_Term();
  iVar15 = g_RecvTables;
  uVar2 = DAT_0039f69c;
  while (uVar2 != 0xffff) {
    iVar12 = (uint)uVar2 * 8;
    piVar13 = (int *)(iVar12 + iVar15);
    piVar3 = (int *)*piVar13;
    if (*(char *)((int)piVar3 + 0x11) != '\0') {
      *(undefined1 *)((int)piVar3 + 0x11) = 0;
      piVar3[2] = 0;
      if (0 < piVar3[1]) {
        iVar15 = 0;
        iVar23 = 0;
LAB_001517b2:
        do {
          if ((*(int *)(*piVar3 + iVar23 + 4) == 6) &&
             (piVar13 = *(int **)(*piVar3 + iVar23 + 0x28), *(char *)((int)piVar13 + 0x11) != '\0'))
          {
            *(undefined1 *)((int)piVar13 + 0x11) = 0;
            piVar13[2] = 0;
            if (0 < piVar13[1]) {
              iVar16 = 0;
              iVar24 = 0;
LAB_00151802:
              do {
                if ((*(int *)(*piVar13 + iVar24 + 4) == 6) &&
                   (piVar4 = *(int **)(*piVar13 + iVar24 + 0x28),
                   *(char *)((int)piVar4 + 0x11) != '\0')) {
                  *(undefined1 *)((int)piVar4 + 0x11) = 0;
                  piVar4[2] = 0;
                  if (0 < piVar4[1]) {
                    iVar17 = 0;
                    iVar25 = 0;
LAB_00151852:
                    do {
                      if ((*(int *)(*piVar4 + iVar25 + 4) == 6) &&
                         (piVar5 = *(int **)(*piVar4 + iVar25 + 0x28),
                         *(char *)((int)piVar5 + 0x11) != '\0')) {
                        *(undefined1 *)((int)piVar5 + 0x11) = 0;
                        piVar5[2] = 0;
                        if (0 < piVar5[1]) {
                          iVar18 = 0;
                          iVar26 = 0;
LAB_001518a2:
                          do {
                            if ((*(int *)(*piVar5 + iVar26 + 4) == 6) &&
                               (piVar6 = *(int **)(*piVar5 + iVar26 + 0x28),
                               *(char *)((int)piVar6 + 0x11) != '\0')) {
                              *(undefined1 *)((int)piVar6 + 0x11) = 0;
                              piVar6[2] = 0;
                              if (0 < piVar6[1]) {
                                iVar19 = 0;
                                iVar27 = 0;
LAB_001518f2:
                                do {
                                  if ((*(int *)(*piVar6 + iVar27 + 4) == 6) &&
                                     (piVar7 = *(int **)(*piVar6 + iVar27 + 0x28),
                                     *(char *)((int)piVar7 + 0x11) != '\0')) {
                                    *(undefined1 *)((int)piVar7 + 0x11) = 0;
                                    piVar7[2] = 0;
                                    if (0 < piVar7[1]) {
                                      iVar20 = 0;
                                      iVar28 = 0;
LAB_00151942:
                                      do {
                                        if ((*(int *)(*piVar7 + iVar28 + 4) == 6) &&
                                           (piVar8 = *(int **)(*piVar7 + iVar28 + 0x28),
                                           *(char *)((int)piVar8 + 0x11) != '\0')) {
                                          *(undefined1 *)((int)piVar8 + 0x11) = 0;
                                          piVar8[2] = 0;
                                          if (0 < piVar8[1]) {
                                            iVar21 = 0;
                                            iVar29 = 0;
LAB_00151992:
                                            do {
                                              if ((*(int *)(*piVar8 + iVar29 + 4) == 6) &&
                                                 (piVar9 = *(int **)(*piVar8 + iVar29 + 0x28),
                                                 *(char *)((int)piVar9 + 0x11) != '\0')) {
                                                *(undefined1 *)((int)piVar9 + 0x11) = 0;
                                                piVar9[2] = 0;
                                                if (0 < piVar9[1]) {
                                                  iVar34 = 0;
                                                  iVar22 = 0;
LAB_001519e2:
                                                  do {
                                                    if ((*(int *)(*piVar9 + iVar22 + 4) == 6) &&
                                                       (piVar10 = *(int **)(*piVar9 + iVar22 + 0x28)
                                                       , *(char *)((int)piVar10 + 0x11) != '\0')) {
                                                      *(undefined1 *)((int)piVar10 + 0x11) = 0;
                                                      piVar10[2] = 0;
                                                      if (0 < piVar10[1]) {
                                                        iVar31 = 0;
                                                        iVar30 = 0;
LAB_00151a32:
                                                        do {
                                                          if ((*(int *)(*piVar10 + iVar31 + 4) == 6)
                                                             && (piVar11 = *(int **)(*piVar10 +
                                                                                     iVar31 + 0x28),
                                                                *(char *)((int)piVar11 + 0x11) !=
                                                                '\0')) {
                                                            *(undefined1 *)((int)piVar11 + 0x11) = 0
                                                            ;
                                                            piVar11[2] = 0;
                                                            if (0 < piVar11[1]) {
                                                              iVar35 = 0;
                                                              iVar32 = 0;
                                                              do {
                                                                while (iVar14 = *piVar11 + iVar35,
                                                                      *(int *)(iVar14 + 4) == 6) {
                                                                  iVar32 = iVar32 + 1;
                                                                  iVar35 = iVar35 + 0x3c;
                                                                  RecvTable_Term(bool)::CPropVisitor
                                                                  ::Visit_R(*(RecvTable **)
                                                                             (iVar14 + 0x28));
                                                                  if (piVar11[1] <= iVar32)
                                                                  goto LAB_00151aa0;
                                                                }
                                                                iVar32 = iVar32 + 1;
                                                                iVar35 = iVar35 + 0x3c;
                                                              } while (iVar32 < piVar11[1]);
LAB_00151aa0:
                                                              iVar30 = iVar30 + 1;
                                                              iVar31 = iVar31 + 0x3c;
                                                              if (piVar10[1] <= iVar30) break;
                                                              goto LAB_00151a32;
                                                            }
                                                          }
                                                          iVar30 = iVar30 + 1;
                                                          iVar31 = iVar31 + 0x3c;
                                                        } while (iVar30 < piVar10[1]);
                                                        iVar34 = iVar34 + 1;
                                                        iVar22 = iVar22 + 0x3c;
                                                        if (piVar9[1] <= iVar34) break;
                                                        goto LAB_001519e2;
                                                      }
                                                    }
                                                    iVar34 = iVar34 + 1;
                                                    iVar22 = iVar22 + 0x3c;
                                                  } while (iVar34 < piVar9[1]);
                                                  iVar21 = iVar21 + 1;
                                                  iVar29 = iVar29 + 0x3c;
                                                  if (piVar8[1] <= iVar21) break;
                                                  goto LAB_00151992;
                                                }
                                              }
                                              iVar21 = iVar21 + 1;
                                              iVar29 = iVar29 + 0x3c;
                                            } while (iVar21 < piVar8[1]);
                                            iVar20 = iVar20 + 1;
                                            iVar28 = iVar28 + 0x3c;
                                            if (piVar7[1] <= iVar20) break;
                                            goto LAB_00151942;
                                          }
                                        }
                                        iVar20 = iVar20 + 1;
                                        iVar28 = iVar28 + 0x3c;
                                      } while (iVar20 < piVar7[1]);
                                      iVar19 = iVar19 + 1;
                                      iVar27 = iVar27 + 0x3c;
                                      if (piVar6[1] <= iVar19) break;
                                      goto LAB_001518f2;
                                    }
                                  }
                                  iVar19 = iVar19 + 1;
                                  iVar27 = iVar27 + 0x3c;
                                } while (iVar19 < piVar6[1]);
                                iVar18 = iVar18 + 1;
                                iVar26 = iVar26 + 0x3c;
                                if (piVar5[1] <= iVar18) break;
                                goto LAB_001518a2;
                              }
                            }
                            iVar18 = iVar18 + 1;
                            iVar26 = iVar26 + 0x3c;
                          } while (iVar18 < piVar5[1]);
                          iVar17 = iVar17 + 1;
                          iVar25 = iVar25 + 0x3c;
                          if (piVar4[1] <= iVar17) break;
                          goto LAB_00151852;
                        }
                      }
                      iVar17 = iVar17 + 1;
                      iVar25 = iVar25 + 0x3c;
                    } while (iVar17 < piVar4[1]);
                    iVar16 = iVar16 + 1;
                    iVar24 = iVar24 + 0x3c;
                    if (piVar13[1] <= iVar16) break;
                    goto LAB_00151802;
                  }
                }
                iVar16 = iVar16 + 1;
                iVar24 = iVar24 + 0x3c;
              } while (iVar16 < piVar13[1]);
              iVar15 = iVar15 + 1;
              iVar23 = iVar23 + 0x3c;
              if (piVar3[1] <= iVar15) break;
              goto LAB_001517b2;
            }
          }
          iVar15 = iVar15 + 1;
          iVar23 = iVar23 + 0x3c;
        } while (iVar15 < piVar3[1]);
        piVar13 = (int *)(iVar12 + g_RecvTables);
        iVar15 = g_RecvTables;
      }
    }
    uVar2 = *(ushort *)((int)piVar13 + 6);
  }
  if (param_1) {
    CUtlLinkedList<RecvTable*,unsigned_short,false,unsigned_short,CUtlMemory<UtlLinkedListElem_t<RecvTable*,unsigned_short>,unsigned_short>>
    ::RemoveAll((CUtlLinkedList<RecvTable*,unsigned_short,false,unsigned_short,CUtlMemory<UtlLinkedListElem_t<RecvTable*,unsigned_short>,unsigned_short>>
                 *)&g_RecvTables);
    CUtlMemory<UtlLinkedListElem_t<RecvTable*,unsigned_short>,unsigned_short>::Purge
              ((CUtlMemory<UtlLinkedListElem_t<RecvTable*,unsigned_short>,unsigned_short> *)
               &g_RecvTables);
    _DAT_0039f6a0 = 0xffff;
    _DAT_0039f6a4 = 0;
    _DAT_0039f6a6 = 0xffff;
    _DAT_0039f6a8 = g_RecvTables;
  }
  CUtlLinkedList<CRecvDecoder*,unsigned_short,false,unsigned_short,CUtlMemory<UtlLinkedListElem_t<CRecvDecoder*,unsigned_short>,unsigned_short>>
  ::PurgeAndDeleteElements
            ((CUtlLinkedList<CRecvDecoder*,unsigned_short,false,unsigned_short,CUtlMemory<UtlLinkedListElem_t<CRecvDecoder*,unsigned_short>,unsigned_short>>
              *)&g_RecvDecoders);
  uVar33 = (uint)DAT_0039f664;
  while ((short)uVar33 != -1) {
    while( true ) {
      puVar1 = (undefined4 *)(g_ClientSendTables + uVar33 * 8);
      this = (CClientSendTable *)*puVar1;
      uVar2 = *(ushort *)((int)puVar1 + 6);
      uVar33 = (uint)uVar2;
      if (this == (CClientSendTable *)0x0) break;
      CClientSendTable::~CClientSendTable(this);
      operator_delete(this);
      if (uVar2 == 0xffff) goto LAB_00151c67;
    }
  }
LAB_00151c67:
  CUtlLinkedList<CClientSendTable*,unsigned_short,false,unsigned_short,CUtlMemory<UtlLinkedListElem_t<CClientSendTable*,unsigned_short>,unsigned_short>>
  ::RemoveAll((CUtlLinkedList<CClientSendTable*,unsigned_short,false,unsigned_short,CUtlMemory<UtlLinkedListElem_t<CClientSendTable*,unsigned_short>,unsigned_short>>
               *)&g_ClientSendTables);
  CUtlMemory<UtlLinkedListElem_t<CClientSendTable*,unsigned_short>,unsigned_short>::Purge
            ((CUtlMemory<UtlLinkedListElem_t<CClientSendTable*,unsigned_short>,unsigned_short> *)
             &g_ClientSendTables);
  _DAT_0039f668 = 0xffff;
  _DAT_0039f66c = 0;
  _DAT_0039f66e = 0xffff;
  _DAT_0039f670 = g_ClientSendTables;
  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)