SendTable_BuildHierarchy_IterateProps
0x00142460 · 451 bytes · __cdecl
_Z37SendTable_BuildHierarchy_IteratePropsP9CSendNodePK9SendTableP21CBuildHierarchyStructPPK8SendPropRi
Decompiled
undefined (5 params)
/* SendTable_BuildHierarchy_IterateProps(CSendNode*, SendTable const*, CBuildHierarchyStruct*,
SendProp const**, int&) */
void SendTable_BuildHierarchy_IterateProps
(CSendNode *param_1,SendTable *param_2,CBuildHierarchyStruct *param_3,
SendProp **param_4,int *param_5)
{
int iVar1;
uint uVar2;
SendProp *pSVar3;
int iVar4;
CSendNode *local_20 [4];
iVar4 = 0;
if (*(int *)(param_2 + 4) < 1) {
return;
}
do {
while ((pSVar3 = (SendProp *)(iVar4 * 0x54 + *(int *)param_2),
(*(uint *)(pSVar3 + 0x3c) & 0x140) != 0 ||
(iVar1 = FindExcludeProp(*(char **)(param_2 + 8),*(char **)(pSVar3 + 0x30),
*(ExcludeProp **)param_3,*(int *)(param_3 + 4)), iVar1 != 0))) {
LAB_00142480:
iVar4 = iVar4 + 1;
if (*(int *)(param_2 + 4) <= iVar4) {
return;
}
}
if (*(int *)(pSVar3 + 8) == 6) {
if (((byte)pSVar3[0x3d] & 8) == 0) {
local_20[0] = operator_new(0x24);
*(undefined2 *)(local_20[0] + 0x1e) = 0;
*(undefined2 *)(local_20[0] + 0x20) = 0xfe;
*(undefined2 *)(local_20[0] + 0x14) = 0xffff;
*(undefined4 *)local_20[0] = 0;
*(undefined2 *)(local_20[0] + 0x1c) = 0;
*(undefined4 *)(local_20[0] + 4) = 0;
*(undefined4 *)(local_20[0] + 8) = 0;
*(undefined4 *)(local_20[0] + 0xc) = 0;
*(undefined4 *)(local_20[0] + 0x10) = 0;
*(undefined4 *)(local_20[0] + 0x18) = 0;
uVar2 = *(uint *)(param_3 + 0x4004);
if (0xffe < uVar2) {
Error("Overflowed datatable prop list in SendTable \'%s\'.",*(undefined4 *)(param_2 + 8));
uVar2 = *(uint *)(param_3 + 0x4004);
}
*(SendProp **)(param_3 + uVar2 * 4 + 8) = pSVar3;
*(short *)(local_20[0] + 0x14) = (short)uVar2;
*(int *)(param_3 + 0x4004) = *(int *)(param_3 + 0x4004) + 1;
CUtlVector<CSendNode*,CUtlMemory<CSendNode*,int>>::InsertBefore
((CUtlVector<CSendNode*,CUtlMemory<CSendNode*,int>> *)param_1,
*(int *)(param_1 + 0xc),local_20);
SendTable_BuildHierarchy(local_20[0],*(SendTable **)(pSVar3 + 0x48),param_3);
}
else {
SendTable_BuildHierarchy_IterateProps
(param_1,*(SendTable **)(pSVar3 + 0x48),param_3,param_4,param_5);
}
goto LAB_00142480;
}
iVar1 = *param_5;
if (0xffe < iVar1) {
Error("SendTable_BuildHierarchy: overflowed non-datatable props with \'%s\'.",
*(undefined4 *)(pSVar3 + 0x30));
iVar1 = *param_5;
}
iVar4 = iVar4 + 1;
param_4[iVar1] = pSVar3;
*param_5 = *param_5 + 1;
if (*(int *)(param_2 + 4) <= iVar4) {
return;
}
} while( true );
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
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.
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.