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 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.