CNetPropManager::SearchDataMap
0x0074ae70 · 1297 bytes · __thiscall
_ZNK15CNetPropManager13SearchDataMapEP9datamap_tPKc
Decompiled
undefined (3 params)
/* CNetPropManager::SearchDataMap(datamap_t*, char const*) const */
int __thiscall
CNetPropManager::SearchDataMap(CNetPropManager *this,datamap_t *param_1,char *param_2)
{
char *pcVar1;
int *piVar2;
int *piVar3;
int *piVar4;
int *piVar5;
int *piVar6;
int *piVar7;
int *piVar8;
int *piVar9;
datamap_t *pdVar10;
int iVar11;
int iVar12;
int iVar13;
int local_58;
int local_54;
int local_50;
int local_4c;
int local_48;
int local_44;
int local_2c;
int local_24;
do {
if (param_1 == (datamap_t *)0x0) {
return 0;
}
if (0 < *(int *)(param_1 + 4)) {
local_44 = 0;
do {
iVar13 = local_44 * 0x40;
pcVar1 = *(char **)(*(int *)param_1 + 4 + iVar13);
if (pcVar1 != (char *)0x0) {
iVar11 = _V_strcmp(param_2,pcVar1);
if (iVar11 == 0) {
return *(int *)param_1 + iVar13;
}
for (piVar2 = *(int **)(*(int *)param_1 + 0x20 + iVar13); piVar2 != (int *)0x0;
piVar2 = (int *)piVar2[3]) {
if (0 < piVar2[1]) {
local_48 = 0;
do {
iVar13 = local_48 * 0x40;
pcVar1 = *(char **)(*piVar2 + 4 + iVar13);
if (pcVar1 != (char *)0x0) {
iVar11 = _V_strcmp(param_2,pcVar1);
if (iVar11 == 0) {
if (iVar13 + *piVar2 != 0) {
return iVar13 + *piVar2;
}
goto LAB_0074b2f7;
}
for (piVar3 = *(int **)(*piVar2 + 0x20 + iVar13); piVar3 != (int *)0x0;
piVar3 = (int *)piVar3[3]) {
if (0 < piVar3[1]) {
local_4c = 0;
do {
iVar13 = local_4c * 0x40;
pcVar1 = *(char **)(*piVar3 + 4 + iVar13);
if (pcVar1 != (char *)0x0) {
iVar11 = _V_strcmp(param_2,pcVar1);
if (iVar11 == 0) {
if (iVar13 + *piVar3 != 0) {
return iVar13 + *piVar3;
}
goto LAB_0074b353;
}
for (piVar4 = *(int **)(*piVar3 + 0x20 + iVar13); piVar4 != (int *)0x0;
piVar4 = (int *)piVar4[3]) {
if (0 < piVar4[1]) {
local_50 = 0;
do {
iVar13 = local_50 * 0x40;
pcVar1 = *(char **)(*piVar4 + 4 + iVar13);
if (pcVar1 != (char *)0x0) {
iVar11 = _V_strcmp(param_2,pcVar1);
if (iVar11 == 0) {
if (iVar13 + *piVar4 != 0) {
return iVar13 + *piVar4;
}
goto LAB_0074b32f;
}
for (piVar5 = *(int **)(*piVar4 + 0x20 + iVar13);
piVar5 != (int *)0x0; piVar5 = (int *)piVar5[3]) {
if (0 < piVar5[1]) {
local_54 = 0;
do {
iVar13 = local_54 * 0x40;
pcVar1 = *(char **)(*piVar5 + 4 + iVar13);
if (pcVar1 != (char *)0x0) {
iVar11 = _V_strcmp(param_2,pcVar1);
if (iVar11 == 0) {
if (iVar13 + *piVar5 != 0) {
return iVar13 + *piVar5;
}
goto LAB_0074b2b2;
}
for (piVar6 = *(int **)(*piVar5 + 0x20 + iVar13);
piVar6 != (int *)0x0; piVar6 = (int *)piVar6[3]) {
if (0 < piVar6[1]) {
local_58 = 0;
LAB_0074b04c:
iVar13 = local_58 * 0x40;
pcVar1 = *(char **)(*piVar6 + 4 + iVar13);
if (pcVar1 == (char *)0x0) goto LAB_0074b1f0;
iVar11 = _V_strcmp(param_2,pcVar1);
if (iVar11 != 0) goto code_r0x0074b07a;
if (iVar13 + *piVar6 != 0) {
return iVar13 + *piVar6;
}
break;
}
LAB_0074b203:
}
}
local_54 = local_54 + 1;
} while (local_54 < piVar5[1]);
}
}
}
LAB_0074b2b2:
local_50 = local_50 + 1;
} while (local_50 < piVar4[1]);
}
}
}
LAB_0074b32f:
local_4c = local_4c + 1;
} while (local_4c < piVar3[1]);
}
}
}
LAB_0074b353:
local_48 = local_48 + 1;
} while (local_48 < piVar2[1]);
}
}
}
LAB_0074b2f7:
local_44 = local_44 + 1;
} while (local_44 < *(int *)(param_1 + 4));
}
param_1 = *(datamap_t **)(param_1 + 0xc);
} while( true );
code_r0x0074b07a:
for (piVar7 = *(int **)(*piVar6 + 0x20 + iVar13); piVar7 != (int *)0x0; piVar7 = (int *)piVar7[3])
{
if (0 < piVar7[1]) {
local_2c = 0;
LAB_0074b0a3:
iVar13 = local_2c * 0x40;
pcVar1 = *(char **)(*piVar7 + 4 + iVar13);
if (pcVar1 == (char *)0x0) goto LAB_0074b1cc;
iVar11 = _V_strcmp(param_2,pcVar1);
if (iVar11 != 0) goto code_r0x0074b0d1;
if (iVar13 + *piVar7 != 0) {
return iVar13 + *piVar7;
}
local_58 = local_58 + 1;
if (piVar6[1] <= local_58) goto LAB_0074b203;
goto LAB_0074b04c;
}
LAB_0074b1df:
}
LAB_0074b1f0:
local_58 = local_58 + 1;
if (piVar6[1] <= local_58) goto LAB_0074b203;
goto LAB_0074b04c;
code_r0x0074b0d1:
for (piVar8 = *(int **)(*piVar7 + 0x20 + iVar13); piVar8 != (int *)0x0; piVar8 = (int *)piVar8[3])
{
if (0 < piVar8[1]) {
local_24 = 0;
do {
iVar13 = local_24 * 0x40;
pcVar1 = *(char **)(*piVar8 + 4 + iVar13);
if (pcVar1 != (char *)0x0) {
iVar11 = _V_strcmp(param_2,pcVar1);
if (iVar11 == 0) {
if (iVar13 + *piVar8 != 0) {
return iVar13 + *piVar8;
}
local_2c = local_2c + 1;
if (piVar7[1] <= local_2c) goto LAB_0074b1df;
goto LAB_0074b0a3;
}
for (piVar9 = *(int **)(*piVar8 + 0x20 + iVar13); piVar9 != (int *)0x0;
piVar9 = (int *)piVar9[3]) {
if (0 < piVar9[1]) {
iVar13 = 0;
do {
iVar11 = iVar13 * 0x40;
pcVar1 = *(char **)(*piVar9 + 4 + iVar11);
if (pcVar1 != (char *)0x0) {
iVar12 = _V_strcmp(param_2,pcVar1);
if (iVar12 == 0) {
if (iVar11 + *piVar9 != 0) {
return iVar11 + *piVar9;
}
goto LAB_0074b1a8;
}
pdVar10 = *(datamap_t **)(*piVar9 + 0x20 + iVar11);
if ((pdVar10 != (datamap_t *)0x0) &&
(iVar11 = SearchDataMap(this,pdVar10,param_2), iVar11 != 0)) {
return iVar11;
}
}
iVar13 = iVar13 + 1;
} while (iVar13 < piVar9[1]);
}
}
}
LAB_0074b1a8:
local_24 = local_24 + 1;
} while (local_24 < piVar8[1]);
}
}
LAB_0074b1cc:
local_2c = local_2c + 1;
if (piVar7[1] <= local_2c) goto LAB_0074b1df;
goto LAB_0074b0a3;
}
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.