UTIL_CheckTeamVisibility
0x0042e170 · 641 bytes · __cdecl
_Z24UTIL_CheckTeamVisibilityRK6Vectorif
Decompiled
undefined (3 params)
/* UTIL_CheckTeamVisibility(Vector const&, int, float) */
int * UTIL_CheckTeamVisibility(Vector *param_1,int param_2,float param_3)
{
code *pcVar1;
char cVar2;
int *piVar3;
int iVar4;
int iVar5;
int *piVar6;
int *piVar7;
float fVar8;
float fVar9;
int iStack_124;
float local_120;
int local_11c [2];
float local_114;
int local_110;
int local_10c;
float local_108 [5];
undefined1 *local_f4;
float local_f0;
float local_e8;
float local_e4;
float local_e0;
undefined1 local_dc [16];
float local_cc;
float local_c8;
float local_c4;
float local_bc;
float local_b8;
float local_b4;
undefined4 local_ac;
undefined4 local_a8;
undefined4 local_a4;
undefined4 local_9c;
undefined4 local_98;
undefined4 local_94;
undefined4 local_8c;
undefined1 local_88;
undefined1 local_87;
undefined1 local_70 [12];
undefined1 local_64 [32];
float local_44;
if (0 < *(int *)(gpGlobals + 0x14)) {
iVar5 = 1;
local_f0 = param_3 * param_3;
piVar7 = local_11c;
do {
*piVar7 = iVar5;
piVar7[-1] = 0x42e1c9;
piVar3 = (int *)UTIL_PlayerByIndex(*piVar7);
piVar6 = piVar7;
if (piVar3 != (int *)0x0) {
iVar4 = *piVar3;
*piVar7 = (int)piVar3;
pcVar1 = *(code **)(iVar4 + 300);
piVar7[-1] = 0x42e1da;
cVar2 = (*pcVar1)();
if (cVar2 != '\0') {
*piVar7 = (int)piVar3;
piVar7[-1] = 0x42e1e6;
iVar4 = CBaseEntity::GetTeamNumber((CBaseEntity *)*piVar7);
if (iVar4 == param_2) {
iVar4 = *piVar3;
piVar7[1] = (int)piVar3;
*piVar7 = (int)&local_e8;
pcVar1 = *(code **)(iVar4 + 0x234);
piVar7[-1] = 0x42e1ff;
(*pcVar1)();
if (param_3 <= 0.0) {
local_f4 = *(undefined1 **)param_1;
fVar8 = *(float *)(param_1 + 4);
fVar9 = *(float *)(param_1 + 8);
}
else {
local_f4 = *(undefined1 **)param_1;
fVar8 = *(float *)(param_1 + 4);
fVar9 = *(float *)(param_1 + 8);
piVar6 = piVar7 + -1;
if (local_f0 <
(local_e0 - fVar9) * (local_e0 - fVar9) + (local_e4 - fVar8) * (local_e4 - fVar8)
+ (local_e8 - (float)local_f4) * (local_e8 - (float)local_f4)) goto LAB_0042e1b0;
}
local_bc = (float)local_f4 - local_e8;
local_f4 = local_dc;
*piVar7 = (int)piVar3;
local_b8 = fVar8 - local_e4;
piVar7[-1] = (int)local_f4;
local_b4 = fVar9 - local_e0;
piVar7[2] = 0;
piVar7[1] = 0;
local_cc = local_e8;
local_c8 = local_e4;
local_c4 = local_e0;
local_94 = 0;
local_98 = 0;
local_9c = 0;
local_87 = local_b8 * local_b8 + local_bc * local_bc + local_b4 * local_b4 != 0.0;
local_88 = 1;
local_8c = 0;
local_a4 = 0;
local_a8 = 0;
local_ac = 0;
piVar7[-2] = 0x42e36a;
CTraceFilterSimple::CTraceFilterSimple
((CTraceFilterSimple *)piVar7[-1],(IHandleEntity *)*piVar7,piVar7[1],
(_func_bool_IHandleEntity_ptr_int *)piVar7[2]);
iVar4 = *enginetrace;
piVar7[3] = (int)local_70;
piVar7[1] = 0x4081;
piVar7[-1] = (int)enginetrace;
piVar7[2] = (int)local_f4;
*piVar7 = (int)&local_cc;
pcVar1 = *(code **)(iVar4 + 0x14);
piVar7[-2] = 0x42e39b;
(*pcVar1)();
if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
piVar7[5] = -0x40800000;
*piVar7 = (int)local_64;
piVar7[4] = 1;
piVar7[3] = 0;
piVar7[2] = 0;
piVar7[1] = 0xff;
piVar7[-1] = (int)local_70;
piVar7[-2] = 0x42e3e1;
DebugDrawLine((Vector *)piVar7[-1],(Vector *)*piVar7,piVar7[1],piVar7[2],piVar7[3],
SUB41(piVar7[4],0),(float)piVar7[5]);
}
piVar6 = piVar7 + -1;
if (local_44 == 1.0) {
return piVar3;
}
}
}
}
LAB_0042e1b0:
iVar5 = iVar5 + 1;
piVar7 = piVar6;
} while (iVar5 <= *(int *)(gpGlobals + 0x14));
}
return (int *)0x0;
}
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.