L L4D2node

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 into addons/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.



        

        

          

Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.

Return-type handling cheatsheet (DHookReturn)