NextBotManager::GetBotUnderCrosshair
0x0075a770 · 1744 bytes · __thiscall
_ZN14NextBotManager20GetBotUnderCrosshairEP11CBasePlayer
Decompiled
undefined (2 params)
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* NextBotManager::GetBotUnderCrosshair(CBasePlayer*) */
undefined4 __thiscall
NextBotManager::GetBotUnderCrosshair(NextBotManager *this,CBasePlayer *param_1)
{
int *piVar1;
code *pcVar2;
CBasePlayer *pCVar3;
undefined4 uVar4;
char cVar5;
QAngle *pQVar6;
uint uVar7;
int iVar8;
int iVar9;
undefined4 uVar10;
float *pfVar11;
float *pfVar12;
float fVar13;
float afStackY_128 [3];
float local_10c [9];
undefined4 *local_e8;
CBasePlayer *local_d0;
int local_cc;
int local_c8;
int local_c0;
int local_bc;
int local_b8;
float local_b4;
float local_b0;
float local_ac;
float local_a8;
float local_a4;
float local_a0;
float local_9c;
float local_98;
float local_94;
undefined1 local_90 [12];
float local_84;
float local_80;
float local_7c;
float local_78;
float local_74;
float local_70;
float local_6c;
float local_68;
float local_64;
undefined **local_60;
CBasePlayer *local_5c;
float local_58;
float local_54;
float local_50;
int local_4c;
float local_48;
float local_44;
float local_40;
float local_3c;
char local_38;
CBasePlayer *local_34;
undefined4 local_30;
undefined4 local_2c;
undefined4 local_28;
float local_24;
undefined4 local_20;
pfVar11 = (float *)&stack0xfffffee4;
if (param_1 == (CBasePlayer *)0x0) {
return 0;
}
local_60 = &PTR_operator___00c53020;
local_30 = 0;
local_2c = 0;
local_28 = 0;
local_24 = 0.0;
local_20 = 0;
local_5c = param_1;
/* try { // try from 0075a7b9 to 0075a7cd has its CatchHandler @ 0075ae58 */
pQVar6 = (QAngle *)(**(code **)(*(int *)param_1 + 0x238))();
AngleVectors(pQVar6,(Vector *)&local_58);
local_4c = -1;
local_48 = 0.7;
local_44 = 0.7;
local_40 = 4000.0;
uVar7 = (uint)*(ushort *)(this + 0x10);
local_34 = (CBasePlayer *)0x0;
local_3c = 50.0;
local_38 = '\0';
if (uVar7 != 0xffff) {
iVar9 = *(int *)(this + 4);
pfVar12 = (float *)&stack0xfffffee4;
do {
piVar1 = *(int **)(iVar9 + uVar7 * 8);
iVar9 = *piVar1;
*pfVar12 = (float)piVar1;
/* try { // try from 0075a9a2 to 0075a9a7 has its CatchHandler @ 0075ae9a */
pcVar2 = *(code **)(iVar9 + 0xb4);
pfVar12[-1] = 1.0805614e-38;
local_d0 = (CBasePlayer *)(*pcVar2)();
local_cc = 0;
local_c8 = 0;
if (___atan2f_finite == 0) {
local_b8 = 0;
}
else {
pfVar12[0xb] = (float)"TargetScan()";
pfVar12[10] = (float)"Unaccounted";
pfVar12[9] = (float)"(%s)%s";
pfVar12[8] = (float)&TargetScan<CBaseCombatCharacter>::operator()(CBaseCombatCharacter*)::
tm_fmt;
pfVar12[7] = 6.5861e-44;
pfVar12[6] = (float)"/data/src/game/shared/sharedfunctorutils.h";
pfVar12[5] = 0.0;
pfVar12[3] = 0.0;
pfVar12[4] = 0.0;
pfVar12[2] = 0.0;
pfVar12[1] = (float)&local_cc;
*pfVar12 = (float)___atan2f_finite;
/* try { // try from 0075a885 to 0075a887 has its CatchHandler @ 0075ae9a */
pcVar2 = *(code **)(___atan2f_finite + 0x50);
pfVar12[-1] = 1.080521e-38;
(*pcVar2)();
local_b8 = ___atan2f_finite;
}
iVar9 = _DAT_0105db00;
local_bc = local_c8;
local_c0 = local_cc;
if ((_DAT_0105d154 != 0) || (DAT_0105d158 == '\0')) {
/* try { // try from 0075a8c5 to 0075a8c9 has its CatchHandler @ 0075ae6d */
pfVar12[-1] = 1.0805303e-38;
iVar8 = ThreadGetCurrentId();
if (iVar9 == iVar8) {
if ((char *)*_DAT_0105d15c != "TargetScan()") {
pfVar12[4] = 0.0;
pfVar12[3] = (float)"Unaccounted";
pfVar12[2] = 1.4013e-45;
pfVar12[1] = (float)"TargetScan()";
*pfVar12 = (float)_DAT_0105d15c;
/* try { // try from 0075aa10 to 0075aa21 has its CatchHandler @ 0075ae6d */
pfVar12[-1] = 1.0805767e-38;
_DAT_0105d15c =
(int *)CVProfNode::GetSubNode
((char *)*pfVar12,(int)pfVar12[1],(char *)pfVar12[2],
(int)pfVar12[3]);
}
*pfVar12 = (float)_DAT_0105d15c;
pfVar12[-1] = 1.0805785e-38;
CVProfNode::EnterScope();
DAT_0105d158 = '\0';
}
}
pfVar11 = pfVar12;
if (local_5c != local_d0) {
iVar9 = *(int *)local_d0;
*pfVar12 = (float)local_d0;
/* try { // try from 0075a8e2 to 0075a903 has its CatchHandler @ 0075ae9e */
pcVar2 = *(code **)(iVar9 + 300);
pfVar12[-1] = 1.0805345e-38;
cVar5 = (*pcVar2)();
if (cVar5 != '\0') {
if (local_4c != -1) {
*pfVar12 = (float)local_d0;
pfVar12[-1] = 1.0805384e-38;
iVar9 = CBaseEntity::GetTeamNumber((CBaseEntity *)*pfVar12);
if (iVar9 != local_4c) goto LAB_0075a910;
}
iVar9 = *(int *)local_d0;
*pfVar12 = (float)local_d0;
/* try { // try from 0075aa6b to 0075adca has its CatchHandler @ 0075ae9e */
pcVar2 = *(code **)(iVar9 + 0x558);
pfVar12[-1] = 1.0805896e-38;
cVar5 = (*pcVar2)();
if (cVar5 == '\0') {
iVar9 = *(int *)local_5c;
pfVar12[1] = (float)local_5c;
*pfVar12 = (float)&local_a8;
pcVar2 = *(code **)(iVar9 + 0x234);
pfVar12[-1] = 1.0805941e-38;
(*pcVar2)();
local_98 = local_54 * local_3c + local_a4;
local_94 = local_50 * local_3c + local_a0;
local_9c = local_3c * local_58 + local_a8;
iVar9 = *(int *)local_d0;
pfVar12[-1] = (float)local_d0;
pcVar2 = *(code **)(iVar9 + 0x288);
pfVar12[-2] = 1.0806075e-38;
uVar10 = (*pcVar2)();
pfVar12[3] = 0.0;
pfVar12[2] = (float)local_90;
pfVar12[1] = (float)&local_9c;
*pfVar12 = (float)&local_a8;
pfVar12[-1] = (float)uVar10;
pfVar12[-2] = 1.080614e-38;
CalcClosestPointOnLineSegment
((Vector *)pfVar12[-1],(Vector *)*pfVar12,(Vector *)pfVar12[1],
(Vector *)pfVar12[2],(float *)pfVar12[3]);
pCVar3 = local_d0;
if (((byte)local_d0[0x14d] & 8) != 0) {
pfVar12[-1] = (float)local_d0;
pfVar12[-2] = 1.0806178e-38;
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)pfVar12[-1]);
}
iVar9 = *(int *)(local_d0 + 0x194);
local_a8 = *(float *)(pCVar3 + 0x2e0);
local_a4 = *(float *)(pCVar3 + 0x2e4);
local_a0 = *(float *)(pCVar3 + 0x2e8);
pfVar12[-1] = (float)(local_d0 + 0x194);
pcVar2 = *(code **)(iVar9 + 8);
pfVar12[-2] = 1.0806312e-38;
local_9c = local_a8;
local_98 = local_a4;
local_94 = local_a0;
iVar9 = (*pcVar2)();
fVar13 = *(float *)(iVar9 + 8);
pfVar12[2] = (float)&local_b4;
pfVar12[3] = 0.0;
pfVar12[1] = (float)&local_9c;
*pfVar12 = (float)&local_a8;
pfVar12[-1] = (float)local_90;
local_94 = local_94 + fVar13;
pfVar12[-2] = 1.0806398e-38;
CalcClosestPointOnLineSegment
((Vector *)pfVar12[-1],(Vector *)*pfVar12,(Vector *)pfVar12[1],
(Vector *)pfVar12[2],(float *)pfVar12[3]);
if (local_38 != '\0') {
pfVar12[5] = -1.0;
pfVar12[4] = 1.4013e-45;
pfVar12[3] = 3.57331e-43;
pfVar12[2] = 3.57331e-43;
pfVar12[1] = 3.57331e-43;
*pfVar12 = 1.0;
pfVar12[-1] = (float)&local_b4;
pfVar12[-2] = 1.0806484e-38;
NDebugOverlay::Cross3D
((Vector *)pfVar12[-1],*pfVar12,(int)pfVar12[1],(int)pfVar12[2],
(int)pfVar12[3],*(bool *)(pfVar12 + 4),pfVar12[5]);
pfVar12[5] = -1.0;
pfVar12[4] = 1.4013e-45;
pfVar12[3] = 0.0;
pfVar12[2] = 0.0;
pfVar12[1] = 3.57331e-43;
*pfVar12 = (float)&local_a8;
pfVar12[-1] = (float)&local_9c;
pfVar12[-2] = 1.0806566e-38;
NDebugOverlay::Line((Vector *)pfVar12[-1],(Vector *)*pfVar12,(int)pfVar12[1],
(int)pfVar12[2],(int)pfVar12[3],*(bool *)(pfVar12 + 4),pfVar12[5])
;
}
iVar9 = *(int *)local_5c;
*pfVar12 = (float)local_5c;
pfVar12[-1] = (float)&local_6c;
pcVar2 = *(code **)(iVar9 + 0x234);
pfVar12[-2] = 1.0806595e-38;
(*pcVar2)();
pfVar12[-2] = (float)&local_84;
local_84 = local_b4 - local_6c;
local_80 = local_b0 - local_68;
local_7c = local_ac - local_64;
pfVar12[-3] = 1.080669e-38;
VectorNormalize((Vector *)pfVar12[-2]);
pfVar12[-1] = (float)&local_b4;
*pfVar12 = (float)&local_78;
pfVar12[-2] = (float)(local_5c + 0x194);
pfVar12[-3] = 1.0806731e-38;
CCollisionProperty::CalcNearestPoint
((CCollisionProperty *)pfVar12[-2],(Vector *)pfVar12[-1],(Vector *)*pfVar12);
*pfVar12 = (float)&local_6c;
pfVar12[-1] = (float)&local_78;
pfVar12[-2] = (float)(local_d0 + 0x194);
pfVar12[-3] = 1.0806769e-38;
CCollisionProperty::CalcNearestPoint
((CCollisionProperty *)pfVar12[-2],(Vector *)pfVar12[-1],(Vector *)*pfVar12);
pfVar11 = pfVar12 + -2;
if ((SQRT((local_78 - local_6c) * (local_78 - local_6c) +
(local_74 - local_68) * (local_74 - local_68) +
(local_70 - local_64) * (local_70 - local_64)) <= local_40) &&
(fVar13 = local_7c * local_50 + local_84 * local_58 + local_80 * local_54,
pfVar11 = pfVar12 + -2, local_48 < fVar13)) {
*pfVar12 = 1.4013e-45;
pfVar12[-1] = (float)local_d0;
pfVar12[-2] = (float)local_5c;
pfVar12[-3] = 1.0807004e-38;
cVar5 = CBaseCombatCharacter::IsAbleToSee();
pfVar11 = pfVar12 + -2;
if (cVar5 != '\0') {
if (local_44 <= fVar13) {
local_44 = fVar13;
local_34 = local_d0;
}
*pfVar12 = (float)&local_d0;
pfVar12[-1] = local_24;
pfVar12[-2] = (float)&local_30;
pfVar12[-3] = 1.0807098e-38;
CUtlVector<CBaseCombatCharacter*,CUtlMemory<CBaseCombatCharacter*,int>>::
InsertBefore((CUtlVector<CBaseCombatCharacter*,CUtlMemory<CBaseCombatCharacter*,int>>
*)pfVar12[-2],(int)pfVar12[-1],(CBaseCombatCharacter **)*pfVar12);
pfVar11 = pfVar12 + -2;
}
}
}
}
}
LAB_0075a910:
iVar9 = _DAT_0105db00;
if ((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) {
pfVar11[-1] = 1.0805442e-38;
iVar8 = ThreadGetCurrentId();
if (iVar9 == iVar8) {
*pfVar11 = (float)_DAT_0105d15c;
pfVar11[-1] = 1.0805823e-38;
cVar5 = CVProfNode::ExitScope();
if (cVar5 != '\0') {
_DAT_0105d15c = (int *)_DAT_0105d15c[0x19];
}
DAT_0105d158 = _DAT_0105d15c == (int *)0x105d160;
}
}
if (local_b8 != 0) {
pfVar11[5] = 0.0;
pfVar11[4] = 0.0;
pfVar11[3] = 0.0;
*pfVar11 = (float)local_b8;
pfVar11[1] = (float)local_c0;
pfVar11[2] = (float)local_bc;
pcVar2 = *(code **)(local_b8 + 0x54);
pfVar11[-1] = 1.0805537e-38;
(*pcVar2)();
}
pCVar3 = local_34;
iVar9 = *(int *)(this + 4);
uVar7 = (uint)*(ushort *)(iVar9 + 6 + uVar7 * 8);
pfVar12 = pfVar11;
} while (uVar7 != 0xffff);
if (local_34 != (CBasePlayer *)0x0) {
iVar9 = *(int *)local_34;
*pfVar11 = (float)local_34;
/* try { // try from 0075adec to 0075ae00 has its CatchHandler @ 0075ae9a */
pcVar2 = *(code **)(iVar9 + 0x148);
pfVar11[-1] = 1.0807153e-38;
iVar9 = (*pcVar2)();
if (iVar9 != 0) {
iVar9 = *(int *)pCVar3;
*pfVar11 = (float)pCVar3;
pcVar2 = *(code **)(iVar9 + 0x148);
pfVar11[-1] = 1.0807174e-38;
uVar10 = (*pcVar2)();
goto LAB_0075ae01;
}
}
}
uVar10 = 0;
LAB_0075ae01:
local_e8 = &local_30;
local_60 = &PTR_operator___00c53020;
local_24 = 0.0;
*pfVar11 = (float)local_e8;
pfVar11[-1] = 1.0807222e-38;
CUtlMemory<CBaseCombatCharacter*,int>::Purge((CUtlMemory<CBaseCombatCharacter*,int> *)*pfVar11);
uVar4 = local_30;
*pfVar11 = (float)local_e8;
local_20 = uVar4;
pfVar11[-1] = 1.0807241e-38;
CUtlMemory<CBaseCombatCharacter*,int>::Purge((CUtlMemory<CBaseCombatCharacter*,int> *)*pfVar11);
return uVar10;
}
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.