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 intoaddons/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.
Signatures + Functions block. The plugin uses
DHookCreateFromConf - DHooks reads return type, this-type,
calling convention, and argument types straight from the gamedata. Less
boilerplate in the plugin, types travel with the gamedata.
Gamedata KeyValues
DHooks plugin example
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.