VOX_LookupRangeHeadingOrGrid
0x000f13a0 · 1355 bytes · __cdecl
_Z28VOX_LookupRangeHeadingOrGridiPcP9channel_tiPS_S2_S2_Pib
Decompiled
undefined (9 params)
/* VOX_LookupRangeHeadingOrGrid(int, char*, channel_t*, int, char**, char**, char**, int*, bool) */
void VOX_LookupRangeHeadingOrGrid
(int param_1,char *param_2,channel_t *param_3,int param_4,char **param_5,
char **param_6,char **param_7,int *param_8,bool param_9)
{
float fVar1;
bool bVar2;
char *pcVar3;
char *pcVar4;
int iVar5;
int iVar6;
int iVar7;
bool bVar8;
bool bVar9;
int iVar10;
char *local_40;
float local_34;
float local_30;
float local_2c;
undefined4 local_28;
float local_24;
undefined4 local_20;
local_34 = listener_origin - *(float *)(param_3 + 0xdc);
local_30 = DAT_003882f0 - *(float *)(param_3 + 0xe0);
local_2c = DAT_003882f4 - *(float *)(param_3 + 0xe4);
if (param_1 == 0) {
iVar5 = (int)(SQRT(local_2c * local_2c + local_34 * local_34 + local_30 * local_30) * 0.0254);
if (iVar5 < 0) {
iVar5 = 0;
}
iVar7 = 900;
if (iVar5 < 0x385) {
iVar7 = iVar5;
}
if (iVar7 < 0) {
iVar7 = 0;
}
iVar5 = iVar7 / 100;
iVar6 = (iVar7 % 100) / 10;
iVar7 = (iVar7 % 100) % 10;
LAB_000f148d:
if (!param_9) goto LAB_000f1495;
LAB_000f1539:
pcVar3 = (char *)VOX_LookupNumber(param_2,iVar7);
if (iVar6 != 0 || iVar5 != 0) {
pcVar4 = (char *)VOX_LookupNumber(param_2,iVar6);
if (iVar5 != 0) {
local_40 = (char *)VOX_LookupNumber(param_2,iVar5);
*param_8 = 3;
goto LAB_000f166e;
}
bVar8 = pcVar4 != (char *)0x0;
local_40 = (char *)0x0;
*param_8 = 2;
bVar9 = pcVar3 != (char *)0x0;
bVar2 = bVar8 && bVar9;
goto LAB_000f176e;
}
pcVar4 = (char *)0x0;
local_40 = (char *)0x0;
*param_8 = 1;
}
else {
if (param_1 == 1) {
local_28 = 0;
local_24 = 0.0;
local_20 = 0;
VectorAngles((Vector *)&local_34,(QAngle *)&local_28);
iVar5 = (int)local_24;
if (iVar5 < 1000) {
iVar7 = 0;
if (-1 < iVar5) {
iVar7 = iVar5;
}
iVar5 = iVar7 / 100;
iVar6 = (iVar7 % 100) / 10;
iVar7 = (iVar7 % 100) % 10;
}
else {
iVar7 = 9;
iVar6 = 9;
iVar5 = 9;
}
goto LAB_000f148d;
}
fVar1 = listener_origin;
if ((param_1 == 2) || (fVar1 = DAT_003882f0, param_1 == 3)) {
iVar7 = (int)((fVar1 + 16384.0) * 0.00254) % 0x14;
if (iVar7 < 0) {
iVar7 = 0;
}
iVar6 = iVar7 / 10;
iVar7 = iVar7 % 10;
iVar5 = 0;
goto LAB_000f148d;
}
iVar7 = 0;
iVar6 = 0;
iVar5 = 0;
if (param_9) goto LAB_000f1539;
LAB_000f1495:
iVar10 = iVar5;
if (iVar6 == 0) {
if (iVar5 != 0) {
if (iVar7 != 0) {
if (iVar5 < 4) {
iVar10 = iVar5 + 0x1b;
}
goto LAB_000f14b4;
}
if (iVar5 < 4) {
pcVar3 = (char *)VOX_LookupNumber(param_2,iVar5 + 0x1b);
*param_8 = 1;
goto LAB_000f156e;
}
local_40 = (char *)VOX_LookupNumber(param_2,iVar5);
pcVar4 = (char *)VOX_LookupNumber(param_2,0);
pcVar3 = (char *)VOX_LookupNumber(param_2,0);
bVar8 = pcVar4 != (char *)0x0;
bVar9 = pcVar3 != (char *)0x0;
bVar2 = bVar8 && bVar9;
LAB_000f183e:
*param_8 = 2;
goto LAB_000f176e;
}
LAB_000f1584:
iVar5 = 0;
local_40 = (char *)0x0;
if (iVar6 < 2) goto LAB_000f14dd;
LAB_000f1598:
pcVar3 = (char *)0x0;
if (iVar7 != 0) {
iVar5 = iVar5 + 1;
pcVar3 = (char *)VOX_LookupNumber(param_2,iVar7);
}
iVar5 = iVar5 + 1;
pcVar4 = (char *)VOX_LookupNumber(param_2,iVar6 + 0x12);
}
else {
if (iVar5 == 0) goto LAB_000f1584;
LAB_000f14b4:
local_40 = (char *)VOX_LookupNumber(param_2,iVar10);
if ((iVar7 != 0) && (iVar6 == 0)) {
pcVar3 = (char *)VOX_LookupNumber(param_2,iVar7);
if (3 < iVar5) {
pcVar4 = (char *)VOX_LookupNumber(param_2,0);
*param_8 = 3;
goto LAB_000f166e;
}
bVar9 = pcVar3 != (char *)0x0;
bVar2 = false;
bVar8 = false;
pcVar4 = (char *)0x0;
goto LAB_000f183e;
}
iVar5 = 1;
if (1 < iVar6) goto LAB_000f1598;
LAB_000f14dd:
pcVar3 = (char *)0x0;
pcVar4 = (char *)0x0;
if (iVar7 != 0 || iVar6 != 0) {
iVar5 = iVar5 + 1;
pcVar3 = (char *)VOX_LookupNumber(param_2,iVar7 + iVar6 * 10);
pcVar4 = (char *)0x0;
}
}
*param_8 = iVar5;
if (iVar5 == 2) {
bVar8 = pcVar4 != (char *)0x0;
bVar9 = pcVar3 != (char *)0x0;
bVar2 = bVar8 && bVar9;
LAB_000f176e:
if (bVar2) {
*param_5 = pcVar4;
*param_6 = pcVar3;
}
else if (local_40 != (char *)0x0) {
if (bVar9) {
*param_5 = local_40;
*param_6 = pcVar3;
}
else if (bVar8) {
*param_5 = local_40;
*param_6 = pcVar4;
}
}
return;
}
if (iVar5 == 3) {
LAB_000f166e:
*param_5 = local_40;
*param_6 = pcVar4;
*param_7 = pcVar3;
return;
}
if (iVar5 != 1) {
*param_5 = (char *)0x0;
return;
}
}
if ((pcVar3 == (char *)0x0) && (pcVar3 = local_40, pcVar4 != (char *)0x0)) {
pcVar3 = pcVar4;
}
LAB_000f156e:
*param_5 = pcVar3;
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.