SurvivorAttack::SelectTarget
0x00918cb0 · 1505 bytes · __thiscall
_ZN14SurvivorAttack12SelectTargetEP11SurvivorBot
Decompiled
undefined (2 params)
/* SurvivorAttack::SelectTarget(SurvivorBot*) */
undefined4 __thiscall SurvivorAttack::SelectTarget(SurvivorAttack *this,SurvivorBot *param_1)
{
int iVar1;
code *pcVar2;
int iVar3;
int *piVar4;
uint uVar5;
char cVar6;
int iVar7;
uint *puVar8;
undefined4 uVar9;
int *piVar10;
int *piVar11;
int *piVar12;
uint uVar13;
uint uVar14;
undefined *puVar15;
undefined *puVar16;
int iVar17;
uint *puVar18;
uint *puVar19;
int in_GS_OFFSET;
float fVar20;
int aiStack_1a8 [3];
float local_16c;
float local_168;
float local_164;
float local_160;
float local_15c;
float local_154;
float local_150;
uint local_14c;
SurvivorBot *local_148;
float local_144;
float local_140;
float local_13c;
int *local_138;
float local_134;
int *local_130;
undefined **local_12c;
undefined1 local_128;
undefined1 local_127;
undefined4 local_24;
int local_20;
puVar18 = (uint *)&stack0xfffffe64;
puVar19 = (uint *)&stack0xfffffe64;
puVar8 = (uint *)&stack0xfffffe64;
local_20 = *(int *)(in_GS_OFFSET + 0x14);
cVar6 = IsBlindedByVomit(this,param_1);
if (cVar6 != '\0') {
LAB_00918ea8:
uVar9 = 0;
goto LAB_00918eaa;
}
if (*(int *)(gpGlobals + 4) == *(int *)(this + 0x50)) {
uVar14 = *(uint *)(this + 0x4c);
if (((uVar14 == 0xffffffff) ||
(puVar16 = g_pEntityList + (uVar14 & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc)) ||
(*(uint *)(puVar16 + 8) != uVar14 >> 0xc)) goto LAB_00918ea8;
}
else {
local_148 = param_1;
CBasePlayer::EyeVectors((CBasePlayer *)param_1,(Vector *)&local_144,(Vector *)0x0,(Vector *)0x0)
;
local_138 = (int *)0x0;
iVar17 = 0;
local_134 = 3.4028235e+38;
local_130 = (int *)0x0;
iVar7 = (**(code **)(*(int *)param_1 + 0x9a8))();
puVar16 = g_pEntityList;
piVar12 = (int *)&stack0xfffffe64;
if (0 < *(int *)(iVar7 + 0x70)) {
do {
while (((uVar14 = *(uint *)(iVar17 * 0x2c + *(int *)(iVar7 + 100)), uVar14 == 0xffffffff ||
(puVar15 = puVar16 + (uVar14 & 0xfff) * 0x10, puVar15 == (undefined *)0xfffffffc))
|| ((*(uint *)(puVar15 + 8) != uVar14 >> 0xc ||
(piVar4 = *(int **)(puVar15 + 4), piVar4 == (int *)0x0))))) {
iVar17 = iVar17 + 1;
puVar18 = (uint *)piVar12;
if (*(int *)(iVar7 + 0x70) <= iVar17) goto LAB_00918dd0;
}
iVar1 = *piVar4;
*piVar12 = (int)piVar4;
pcVar2 = *(code **)(iVar1 + 300);
piVar12[-1] = 0x918dba;
cVar6 = (*pcVar2)();
piVar11 = piVar12;
if (cVar6 != '\0') {
iVar3 = *(int *)(local_148 + 0x4028);
iVar1 = *(int *)(SurvivorBotCloseThreatRange._28_4_ + 0x2c);
piVar12[1] = (int)piVar4;
*piVar12 = (int)(local_148 + 0x4028);
piVar12[2] = iVar1;
pcVar2 = *(code **)(iVar3 + 0x114);
piVar12[-1] = 0x918ef8;
cVar6 = (*pcVar2)();
if (cVar6 == '\0') {
if (local_130 == (int *)0x0) {
iVar1 = *(int *)local_148;
*piVar12 = (int)local_148;
pcVar2 = *(code **)(iVar1 + 0x9ac);
piVar12[-1] = 0x918f1b;
piVar10 = (int *)(*pcVar2)();
iVar1 = *piVar10;
piVar12[2] = 0;
piVar12[1] = (int)piVar4;
*piVar12 = (int)piVar10;
pcVar2 = *(code **)(iVar1 + 0xf8);
piVar12[-1] = 0x918f32;
cVar6 = (*pcVar2)();
if (cVar6 != '\0') {
local_130 = piVar4;
}
}
}
else {
iVar1 = *(int *)local_148;
piVar12[1] = (int)local_148;
*piVar12 = (int)&local_154;
pcVar2 = *(code **)(iVar1 + 0x234);
piVar12[-1] = 0x918f63;
(*pcVar2)();
iVar1 = *piVar4;
piVar12[-1] = (int)&local_160;
*piVar12 = (int)piVar4;
pcVar2 = *(code **)(iVar1 + 0x234);
piVar12[-2] = 0x918f7b;
(*pcVar2)();
local_164 = 0.0;
piVar12[-2] = (int)&local_16c;
local_16c = local_160 - local_154;
local_168 = local_15c - local_150;
piVar12[-3] = 0x918fc6;
VectorNormalize((Vector *)piVar12[-2]);
fVar20 = 1.0 - (local_16c * local_144 + local_168 * local_140 + 1.0 +
local_164 * local_13c) * 0.5;
piVar11 = piVar12 + -2;
if (fVar20 < local_134) {
iVar1 = *(int *)local_148;
piVar12[-2] = (int)local_148;
pcVar2 = *(code **)(iVar1 + 0x9ac);
piVar12[-3] = 0x91903e;
piVar11 = (int *)(*pcVar2)();
iVar1 = *piVar11;
*piVar12 = 0;
piVar12[-1] = (int)piVar4;
piVar12[-2] = (int)piVar11;
pcVar2 = *(code **)(iVar1 + 0xf8);
piVar12[-3] = 0x919055;
cVar6 = (*pcVar2)();
piVar11 = piVar12 + -2;
if (cVar6 != '\0') {
piVar11 = piVar12 + -2;
local_138 = piVar4;
local_134 = fVar20;
}
}
}
}
iVar17 = iVar17 + 1;
puVar16 = g_pEntityList;
piVar12 = piVar11;
puVar18 = (uint *)piVar11;
} while (iVar17 < *(int *)(iVar7 + 0x70));
}
LAB_00918dd0:
iVar7 = 0;
uVar14 = *(uint *)(this + 0x4c);
if (((uVar14 != 0xffffffff) &&
(puVar15 = puVar16 + (uVar14 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar15 + 8) == uVar14 >> 0xc)) {
iVar7 = *(int *)(puVar15 + 4);
}
piVar12 = local_138;
puVar19 = puVar18;
if ((local_138 == (int *)0x0) && (piVar12 = local_130, local_130 == (int *)0x0)) {
*(undefined4 *)(this + 0x4c) = 0xffffffff;
if (this[0x80] == (SurvivorAttack)0x0) {
*(undefined4 *)(this + 0x50) = *(undefined4 *)(gpGlobals + 4);
uVar9 = 0;
puVar8 = puVar18;
goto LAB_00918eaa;
}
uVar14 = 0xffffffff;
iVar17 = 0;
LAB_009190b0:
if (iVar7 != iVar17) {
iVar7 = *(int *)param_1;
*puVar18 = (uint)param_1;
pcVar2 = *(code **)(iVar7 + 0x9a8);
puVar18[-1] = 0x9190c9;
piVar12 = (int *)(*pcVar2)();
iVar7 = piVar12[0x18];
if (iVar7 < 1) {
iVar7 = *piVar12;
*puVar18 = (uint)piVar12;
pcVar2 = *(code **)(iVar7 + 0xb0);
puVar18[-1] = 0x919279;
piVar12 = (int *)(*pcVar2)();
iVar7 = *piVar12;
*puVar18 = (uint)piVar12;
pcVar2 = *(code **)(iVar7 + 0x13c);
puVar18[-1] = 0x919284;
uVar14 = (*pcVar2)();
puVar18[3] = uVar14;
fVar20 = *(float *)(gpGlobals + 0xc);
*puVar18 = (uint)"%3.2f: %s: PopLegsStack: Underflow\n";
*(double *)(puVar18 + 1) = (double)fVar20;
puVar18[-1] = 0x9192a7;
DevMsg((char *)*puVar18);
}
else {
iVar17 = iVar7 + -1;
piVar12[0x18] = iVar17;
piVar4 = (int *)piVar12[iVar7 + 8];
if (piVar4 != (int *)0x0) {
iVar7 = *piVar4;
*puVar18 = (uint)piVar4;
pcVar2 = *(code **)(iVar7 + 4);
puVar18[-1] = 0x9190ec;
(*pcVar2)();
iVar17 = piVar12[0x18];
}
uVar14 = piVar12[iVar17 + 8];
if (((uVar14 != 0) && (uVar5 = piVar12[6], uVar5 != 0)) &&
(piVar12 = *(int **)(uVar14 + 8), piVar12 != (int *)0x0)) {
iVar7 = *piVar12;
puVar18[1] = (uint)piVar12;
*puVar18 = (uint)&local_154;
puVar18[3] = 0;
puVar18[2] = uVar5;
pcVar2 = *(code **)(iVar7 + 0xc0);
puVar18[-1] = 0x919132;
(*pcVar2)();
puVar18[1] = uVar14;
*puVar18 = uVar5;
puVar18[2] = (uint)local_154;
puVar18[3] = (uint)local_150;
puVar18[4] = local_14c;
puVar18[-1] = *(undefined4 *)(uVar14 + 8);
puVar18[-2] = 0x919166;
iVar7 = Action<SurvivorBot>::ApplyResult();
*(int *)(uVar14 + 8) = iVar7;
puVar19 = puVar18 + -1;
if (iVar7 != 0) {
*puVar18 = 1;
puVar18[-1] = uVar5 + 0x4028;
puVar18[-2] = 0x919187;
cVar6 = INextBot::IsDebugging((INextBot *)puVar18[-1],*puVar18);
puVar19 = puVar18 + -1;
if (cVar6 != '\0') {
local_127 = 0;
local_24 = 0;
local_12c = &PTR_InitQuietTruncation_00c08ee8;
local_128 = 1;
pcVar2 = *(code **)(*(int *)(uVar5 + 0x4028) + 0x144);
puVar18[-1] = *(undefined4 *)(uVar14 + 8);
puVar18[-2] = 0x9191c4;
uVar13 = Action<SurvivorBot>::DebugString((Action<SurvivorBot> *)puVar18[-1]);
puVar18[1] = uVar14 + 0x11;
puVar18[2] = uVar13;
*puVar18 = (uint)"%s: %s";
puVar18[-1] = (uint)&local_12c;
puVar18[-2] = 0x9191e2;
uVar9 = CFmtStrN<256>::sprintf((CFmtStrN<256> *)puVar18[-1],(char *)*puVar18);
puVar18[-1] = uVar5 + 0x4028;
*puVar18 = uVar9;
puVar18[-2] = 0x9191eb;
(*pcVar2)();
puVar19 = puVar18 + -1;
}
}
}
}
puVar16 = g_pEntityList;
this[0x80] = (SurvivorAttack)0x0;
uVar14 = *(uint *)(this + 0x4c);
}
}
else {
iVar17 = *piVar12;
*puVar18 = (uint)piVar12;
pcVar2 = *(code **)(iVar17 + 0xc);
puVar18[-1] = 0x918e16;
puVar8 = (uint *)(*pcVar2)();
puVar16 = g_pEntityList;
uVar14 = *puVar8;
*(uint *)(this + 0x4c) = uVar14;
if (this[0x80] != (SurvivorAttack)0x0) {
iVar17 = 0;
if (((uVar14 != 0xffffffff) &&
(puVar15 = puVar16 + (uVar14 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar15 + 8) == uVar14 >> 0xc)) {
iVar17 = *(int *)(puVar15 + 4);
}
goto LAB_009190b0;
}
}
*(undefined4 *)(this + 0x50) = *(undefined4 *)(gpGlobals + 4);
uVar9 = 0;
puVar8 = puVar19;
if (((uVar14 == 0xffffffff) ||
(puVar16 = puVar16 + (uVar14 & 0xfff) * 0x10, puVar16 == (undefined *)0xfffffffc)) ||
(*(uint *)(puVar16 + 8) != uVar14 >> 0xc)) goto LAB_00918eaa;
}
uVar9 = *(undefined4 *)(puVar16 + 4);
puVar8 = puVar19;
LAB_00918eaa:
if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
/* WARNING: Subroutine does not return */
*(undefined **)((int)puVar8 + -4) = &UNK_009192bd;
__stack_chk_fail();
}
return uVar9;
}
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.