RecvTable_Term(bool)::CPropVisitor::Visit_R
0x0014ed50 · 945 bytes · __regparm3
_ZZ14RecvTable_TermbEN12CPropVisitor7Visit_REP9RecvTable
Decompiled
undefined (1 param)
/* Visit_R(RecvTable*) */
void __regparm3 RecvTable_Term(bool)::CPropVisitor::Visit_R(RecvTable *param_1)
{
int *piVar1;
int *piVar2;
int *piVar3;
int *piVar4;
int *piVar5;
int *piVar6;
int *piVar7;
int *piVar8;
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 iVar23;
int iVar24;
int iVar25;
int iVar26;
int iVar27;
if (param_1[0x11] != (RecvTable)0x0) {
param_1[0x11] = (RecvTable)0x0;
*(undefined4 *)(param_1 + 8) = 0;
if (0 < *(int *)(param_1 + 4)) {
iVar10 = 0;
iVar15 = 0;
do {
while ((*(int *)(*(int *)param_1 + iVar10 + 4) != 6 ||
(piVar1 = *(int **)(*(int *)param_1 + iVar10 + 0x28),
*(char *)((int)piVar1 + 0x11) == '\0'))) {
LAB_0014ed88:
iVar15 = iVar15 + 1;
iVar10 = iVar10 + 0x3c;
if (*(int *)(param_1 + 4) <= iVar15) {
return;
}
}
*(undefined1 *)((int)piVar1 + 0x11) = 0;
piVar1[2] = 0;
if (piVar1[1] < 1) goto LAB_0014ed88;
iVar18 = 0;
iVar16 = 0;
do {
while ((*(int *)(*piVar1 + iVar16 + 4) != 6 ||
(piVar2 = *(int **)(*piVar1 + iVar16 + 0x28), *(char *)((int)piVar2 + 0x11) == '\0'
))) {
LAB_0014edd8:
iVar18 = iVar18 + 1;
iVar16 = iVar16 + 0x3c;
if (piVar1[1] <= iVar18) goto LAB_0014f100;
}
*(undefined1 *)((int)piVar2 + 0x11) = 0;
piVar2[2] = 0;
if (piVar2[1] < 1) goto LAB_0014edd8;
iVar17 = 0;
iVar19 = 0;
do {
while ((*(int *)(*piVar2 + iVar17 + 4) != 6 ||
(piVar3 = *(int **)(*piVar2 + iVar17 + 0x28),
*(char *)((int)piVar3 + 0x11) == '\0'))) {
LAB_0014ee28:
iVar19 = iVar19 + 1;
iVar17 = iVar17 + 0x3c;
if (piVar2[1] <= iVar19) goto LAB_0014f0e0;
}
*(undefined1 *)((int)piVar3 + 0x11) = 0;
piVar3[2] = 0;
if (piVar3[1] < 1) goto LAB_0014ee28;
iVar11 = 0;
iVar20 = 0;
do {
while ((*(int *)(*piVar3 + iVar20 + 4) != 6 ||
(piVar4 = *(int **)(*piVar3 + iVar20 + 0x28),
*(char *)((int)piVar4 + 0x11) == '\0'))) {
LAB_0014ee78:
iVar11 = iVar11 + 1;
iVar20 = iVar20 + 0x3c;
if (piVar3[1] <= iVar11) goto LAB_0014f0c0;
}
*(undefined1 *)((int)piVar4 + 0x11) = 0;
piVar4[2] = 0;
if (piVar4[1] < 1) goto LAB_0014ee78;
iVar12 = 0;
iVar21 = 0;
do {
while ((*(int *)(*piVar4 + iVar21 + 4) != 6 ||
(piVar5 = *(int **)(*piVar4 + iVar21 + 0x28),
*(char *)((int)piVar5 + 0x11) == '\0'))) {
LAB_0014eec8:
iVar12 = iVar12 + 1;
iVar21 = iVar21 + 0x3c;
if (piVar4[1] <= iVar12) goto LAB_0014f0a0;
}
*(undefined1 *)((int)piVar5 + 0x11) = 0;
piVar5[2] = 0;
if (piVar5[1] < 1) goto LAB_0014eec8;
iVar13 = 0;
iVar22 = 0;
do {
while ((*(int *)(*piVar5 + iVar22 + 4) != 6 ||
(piVar6 = *(int **)(*piVar5 + iVar22 + 0x28),
*(char *)((int)piVar6 + 0x11) == '\0'))) {
LAB_0014ef18:
iVar13 = iVar13 + 1;
iVar22 = iVar22 + 0x3c;
if (piVar5[1] <= iVar13) goto LAB_0014f080;
}
*(undefined1 *)((int)piVar6 + 0x11) = 0;
piVar6[2] = 0;
if (piVar6[1] < 1) goto LAB_0014ef18;
iVar26 = 0;
iVar14 = 0;
do {
while ((*(int *)(*piVar6 + iVar14 + 4) != 6 ||
(piVar7 = *(int **)(*piVar6 + iVar14 + 0x28),
*(char *)((int)piVar7 + 0x11) == '\0'))) {
LAB_0014ef68:
iVar26 = iVar26 + 1;
iVar14 = iVar14 + 0x3c;
if (piVar6[1] <= iVar26) goto LAB_0014f060;
}
*(undefined1 *)((int)piVar7 + 0x11) = 0;
piVar7[2] = 0;
if (piVar7[1] < 1) goto LAB_0014ef68;
iVar24 = 0;
iVar23 = 0;
do {
while ((*(int *)(*piVar7 + iVar24 + 4) != 6 ||
(piVar8 = *(int **)(*piVar7 + iVar24 + 0x28),
*(char *)((int)piVar8 + 0x11) == '\0'))) {
LAB_0014efb8:
iVar23 = iVar23 + 1;
iVar24 = iVar24 + 0x3c;
if (piVar7[1] <= iVar23) goto LAB_0014f048;
}
*(undefined1 *)((int)piVar8 + 0x11) = 0;
piVar8[2] = 0;
if (piVar8[1] < 1) goto LAB_0014efb8;
iVar27 = 0;
iVar25 = 0;
do {
while (iVar9 = *piVar8 + iVar25, *(int *)(iVar9 + 4) != 6) {
iVar27 = iVar27 + 1;
iVar25 = iVar25 + 0x3c;
if (piVar8[1] <= iVar27) goto LAB_0014f030;
}
iVar27 = iVar27 + 1;
iVar25 = iVar25 + 0x3c;
Visit_R(*(RecvTable **)(iVar9 + 0x28));
} while (iVar27 < piVar8[1]);
LAB_0014f030:
iVar23 = iVar23 + 1;
iVar24 = iVar24 + 0x3c;
} while (iVar23 < piVar7[1]);
LAB_0014f048:
iVar26 = iVar26 + 1;
iVar14 = iVar14 + 0x3c;
} while (iVar26 < piVar6[1]);
LAB_0014f060:
iVar13 = iVar13 + 1;
iVar22 = iVar22 + 0x3c;
} while (iVar13 < piVar5[1]);
LAB_0014f080:
iVar12 = iVar12 + 1;
iVar21 = iVar21 + 0x3c;
} while (iVar12 < piVar4[1]);
LAB_0014f0a0:
iVar11 = iVar11 + 1;
iVar20 = iVar20 + 0x3c;
} while (iVar11 < piVar3[1]);
LAB_0014f0c0:
iVar19 = iVar19 + 1;
iVar17 = iVar17 + 0x3c;
} while (iVar19 < piVar2[1]);
LAB_0014f0e0:
iVar18 = iVar18 + 1;
iVar16 = iVar16 + 0x3c;
} while (iVar18 < piVar1[1]);
LAB_0014f100:
iVar15 = iVar15 + 1;
iVar10 = iVar10 + 0x3c;
if (*(int *)(param_1 + 4) <= iVar15) {
return;
}
} while( true );
}
}
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.