L L4D2node

CTerrorPlayer::FindUseEntity

0x00519da0 · 9739 bytes · __thiscall

_ZN13CTerrorPlayer13FindUseEntityEfffPbb

Decompiled

undefined (6 params)

/* WARNING: Removing unreachable block (ram,0x0051b8fc) */
/* WARNING: Removing unreachable block (ram,0x0051b8af) */
/* WARNING: Removing unreachable block (ram,0x0051c47c) */
/* WARNING: Removing unreachable block (ram,0x0051c3d4) */
/* CTerrorPlayer::FindUseEntity(float, float, float, bool*, bool) */

CTerrorPlayer * __thiscall
CTerrorPlayer::FindUseEntity
          (CTerrorPlayer *this,float param_1,float param_2,float param_3,bool *param_4,bool param_5)

{
  CBaseEntity **ppCVar1;
  bool bVar2;
  CBaseEntity *pCVar3;
  code *pcVar4;
  IHandleEntity *pIVar5;
  bool bVar6;
  bool bVar7;
  undefined1 *puVar8;
  size_t sVar9;
  IHandleEntity **ppIVar10;
  char cVar11;
  undefined *puVar12;
  uint uVar13;
  int iVar14;
  int *piVar15;
  int iVar16;
  Vector *pVVar17;
  CTerrorPlayer *pCVar18;
  matrix3x4_t *pmVar19;
  Vector *pVVar20;
  Vector *pVVar21;
  int iVar22;
  float *pfVar23;
  undefined4 *puVar24;
  CBaseEntity **ppCVar25;
  uint uVar26;
  size_t sVar27;
  int *piVar28;
  int iVar29;
  int in_GS_OFFSET;
  bool bVar30;
  longdouble lVar31;
  float fVar32;
  float fVar33;
  float fVar34;
  CBaseEntity *local_13f0;
  float local_13ec;
  Vector *local_13d4;
  float local_13d0;
  CBaseEntity *local_13cc;
  bool local_13c3;
  int local_13bc;
  float local_13b8;
  CBaseEntity *local_1398;
  float local_1394;
  float local_1390;
  float local_138c;
  Vector local_1388 [12];
  float local_137c;
  float local_1378;
  float local_1374;
  float local_1370;
  float local_136c;
  float local_1368;
  undefined **local_1364;
  float local_1360;
  float local_135c;
  undefined **local_1358;
  float local_1354;
  float local_1350;
  Vector local_134c [12];
  float local_1340 [6];
  float local_1328;
  float local_131c;
  float local_1318;
  float local_1314;
  float local_1310;
  float local_130c;
  float local_1308;
  float local_1304;
  float local_1300;
  float local_12fc;
  undefined **local_12f8 [4];
  undefined4 local_12e8 [3];
  undefined4 local_12dc;
  undefined4 local_12d8;
  CTerrorPlayer *local_12d4;
  undefined4 local_12d0;
  undefined **local_12cc;
  float local_12c8;
  float local_12c4;
  float local_12bc;
  float local_12b8;
  float local_12b4;
  undefined4 local_12ac;
  undefined4 local_12a8;
  undefined4 local_12a4;
  undefined4 local_129c;
  undefined4 local_1298;
  undefined4 local_1294;
  undefined4 local_128c;
  undefined1 local_1288;
  undefined1 local_1287;
  undefined **local_127c;
  float local_1278;
  float local_1274;
  float local_126c;
  float local_1268;
  float local_1264;
  undefined4 local_125c;
  undefined4 local_1258;
  undefined4 local_1254;
  undefined4 local_124c;
  undefined4 local_1248;
  undefined4 local_1244;
  undefined4 local_123c;
  undefined1 local_1238;
  undefined1 local_1237;
  Vector local_1220 [12];
  Vector local_1214 [8];
  float local_120c;
  CBaseEntity *local_11d4;
  IHandleEntity *local_11cc;
  float local_11c8;
  float local_11c4;
  float local_11c0;
  float local_11bc;
  float local_11b8;
  float local_11b4;
  undefined4 local_11ac;
  undefined4 local_11a8;
  undefined4 local_11a4;
  undefined4 local_119c;
  undefined4 local_1198;
  undefined4 local_1194;
  undefined4 local_118c;
  undefined1 local_1188;
  undefined1 local_1187;
  undefined1 *local_116c;
  undefined4 local_1168;
  undefined4 local_1164;
  undefined4 local_1160;
  undefined1 local_115c [1024];
  size_t local_d5c;
  undefined1 *local_d58;
  IHandleEntity **local_d54;
  undefined4 local_d50;
  undefined4 local_d4c;
  undefined4 local_d48;
  IHandleEntity *local_d44 [256];
  size_t local_944;
  IHandleEntity **local_940;
  undefined **local_93c;
  float local_938;
  float local_934;
  Vector local_930 [4];
  float local_92c;
  float local_928;
  float local_924;
  undefined4 local_91c;
  undefined4 local_918;
  undefined4 local_914;
  float local_910;
  undefined4 local_90c;
  undefined4 local_908;
  undefined4 local_904;
  undefined4 local_8fc;
  undefined1 local_8f8;
  undefined1 local_8f7;
  CBaseEntity *local_8f0;
  CFmtStrN<256> local_12c [5];
  char local_127 [263];
  int local_20;
  
  piVar28 = (int *)&stack0xffffebe4;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  if ((param_1 < param_2) || (param_2 <= 0.0)) {
    param_2 = param_1;
  }
  if (param_3 <= 0.0) {
    piVar15 = (int *)GetActiveTerrorWeapon(this);
    if ((piVar15 == (int *)0x0) || (cVar11 = (**(code **)(*piVar15 + 0x690))(), cVar11 == '\0')) {
      param_3 = *(float *)(ZombieUseTolerance._28_4_ + 0x2c);
    }
    else {
      param_3 = 0.98;
    }
  }
  local_13d0 = 0.0;
  if (param_4 != (bool *)0x0) {
    *param_4 = false;
  }
  cVar11 = IsPerformingAction();
  if ((((cVar11 == '\0') && (this[0x186] != (CTerrorPlayer)0x9)) &&
      (cVar11 = IsDominatedBySpecialInfected(this), cVar11 == '\0')) &&
     ((cVar11 = IsGettingUp(this), cVar11 == '\0' &&
      (cVar11 = CTerrorPlayerAnimState::IsPounded(*(CTerrorPlayerAnimState **)(this + 0x2910)),
      cVar11 == '\0')))) {
    uVar26 = *(uint *)(this + 0x2e28);
    bVar30 = false;
    if (((uVar26 == 0xffffffff) ||
        ((puVar12 = g_pEntityList + (uVar26 & 0xfff) * 0x10, puVar12 == (undefined *)0xfffffffc ||
         (*(uint *)(puVar12 + 8) != uVar26 >> 0xc)))) || (*(int *)(puVar12 + 4) == 0)) {
      uVar13 = *(uint *)(this + 0x2e24);
      if ((((uVar13 != 0xffffffff) &&
           (puVar12 = g_pEntityList + (uVar13 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc))
          && (*(uint *)(puVar12 + 8) == uVar13 >> 0xc)) && (*(int *)(puVar12 + 4) != 0)) {
        if (param_4 != (bool *)0x0) {
          if ((uVar26 != 0xffffffff) &&
             (piVar15 = (int *)(g_pEntityList + (uVar26 & 0xfff) * 0x10 + 4), piVar15 != (int *)0x0)
             ) goto LAB_0051b203;
          goto LAB_0051b20b;
        }
        goto LAB_0051b226;
      }
      uVar26 = *(uint *)(this + 0x2d64);
      if (uVar26 != 0xffffffff) {
        uVar13 = uVar26 & 0xfff;
        puVar24 = (undefined4 *)(g_pEntityList + uVar13 * 0x10 + 4);
        if (((puVar24 != (undefined4 *)0x0) &&
            (*(uint *)(g_pEntityList + uVar13 * 0x10 + 8) == uVar26 >> 0xc)) &&
           (*(int *)(g_pEntityList + uVar13 * 0x10 + 4) != 0)) {
          if (param_4 != (bool *)0x0) {
            *param_4 = true;
            uVar26 = *(uint *)(this + 0x2d64);
            if (((uVar26 == 0xffffffff) ||
                (puVar24 = (undefined4 *)(g_pEntityList + (uVar26 & 0xfff) * 0x10 + 4),
                puVar24 == (undefined4 *)0x0)) || (puVar24[1] != uVar26 >> 0xc)) goto LAB_0051a260;
          }
          local_13cc = (CBaseEntity *)*puVar24;
          piVar28 = (int *)&stack0xffffebe4;
          goto LAB_0051a262;
        }
      }
      CBasePlayer::EyeVectors((CBasePlayer *)this,(Vector *)&local_1394,(Vector *)0x0,local_1388);
      local_1370 = param_2 * local_1394;
      local_137c = local_1394 * param_1;
      local_136c = param_2 * local_1390;
      local_1378 = local_1390 * param_1;
      local_1368 = param_2 * local_138c;
      local_1374 = local_138c * param_1;
      (**(code **)(*(int *)this + 0x234))();
      (**(code **)(*(int *)this + 0x234))();
      piVar28 = (int *)&stack0xffffebdc;
      local_1358 = local_93c;
      local_1354 = local_938;
      local_1350 = local_934;
      if (((byte)this[0x14d] & 8) != 0) {
        CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
      }
      local_1354 = *(float *)(this + 0x2e4);
      local_1358 = *(undefined ***)(this + 0x2e0);
      CTraceFilterSimpleList::CTraceFilterSimpleList((CTraceFilterSimpleList *)local_12f8,4);
      local_12f8[0] = &PTR_ShouldHitEntity_00c2d308;
      local_12d4 = this;
                    /* try { // try from 0051a05c to 0051a060 has its CatchHandler @ 0051c492 */
      local_12d0 = GetActiveTerrorWeapon(this);
                    /* try { // try from 0051a074 to 0051a200 has its CatchHandler @ 0051c486 */
      CTraceFilterSimpleList::AddEntityToIgnore
                ((CTraceFilterSimpleList *)local_12f8,(IHandleEntity *)this);
      local_8f8 = 1;
      local_904 = 0;
      local_92c = local_137c;
      local_928 = local_1378;
      local_908 = 0;
      local_924 = local_1374;
      local_90c = 0;
      local_8fc = 0;
      local_914 = 0;
      local_918 = 0;
      local_91c = 0;
      local_8f7 = local_1378 * local_1378 + local_137c * local_137c + local_1374 * local_1374 != 0.0
      ;
      local_93c = local_1364;
      local_938 = local_1360;
      local_934 = local_135c;
      (**(code **)(*enginetrace + 0x14))();
      if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
        DebugDrawLine(local_1220,local_1214,0xff,0,0,true,-1.0);
      }
      if (g_DebugFindUseEntity == '\0') {
LAB_0051a318:
        bVar30 = false;
      }
      else {
        if (*(int *)(this + 0x30) == 0) {
          iVar14 = 0;
        }
        else {
          iVar14 = *(int *)(this + 0x30) - *(int *)(gpGlobals + 0x58) >> 4;
        }
        if (*(int *)(sv_debug_player_use._28_4_ + 0x30) != iVar14) goto LAB_0051a318;
        Msg();
        bVar30 = true;
      }
      fVar33 = param_2 * param_2;
      local_1398 = local_11d4;
      if (local_11d4 == (CBaseEntity *)0x0) {
        local_13f0 = (CBaseEntity *)0x0;
LAB_0051a380:
        local_13bc = 0;
        local_13c3 = false;
        local_13ec = 0.0;
        local_13cc = (CBaseEntity *)0x0;
      }
      else {
                    /* try { // try from 0051a366 to 0051a36b has its CatchHandler @ 0051c486 */
        cVar11 = (**(code **)(*(int *)this + 0x6e4))();
        if (cVar11 == '\0') {
          local_13f0 = local_1398;
          goto LAB_0051a380;
        }
        if ((AllocTempVector()::s_vecTemp == '\0') && (iVar14 = __cxa_guard_acquire(), iVar14 != 0))
        {
          __cxa_guard_release();
        }
        if ((AllocTempVector()::s_nIndex == '\0') && (iVar14 = __cxa_guard_acquire(), iVar14 != 0))
        {
          AllocTempVector()::s_nIndex = 0;
          __cxa_guard_release();
        }
        AllocTempVector()::s_nIndex = AllocTempVector()::s_nIndex + 0x10001 & 0x7f;
        LOCK();
        UNLOCK();
        iVar14 = AllocTempVector()::s_nIndex * 0xc;
        if ((AllocTempVector()::s_vecTemp == '\0') && (iVar16 = __cxa_guard_acquire(), iVar16 != 0))
        {
          __cxa_guard_release();
        }
        if ((AllocTempVector()::s_nIndex == '\0') && (iVar16 = __cxa_guard_acquire(), iVar16 != 0))
        {
          AllocTempVector()::s_nIndex = 0;
          __cxa_guard_release();
        }
        AllocTempVector()::s_nIndex = AllocTempVector()::s_nIndex + 0x10001 & 0x7f;
        LOCK();
        UNLOCK();
        iVar16 = AllocTempVector()::s_nIndex * 0xc;
        *(float *)(AllocTempVector()::s_vecTemp + iVar16) =
             (*(float *)(this + 0x1a8) - *(float *)(this + 0x19c)) * 0.5 + *(float *)(this + 0x19c);
        *(float *)(AllocTempVector()::s_vecTemp + iVar16 + 4) =
             (*(float *)(this + 0x1ac) - *(float *)(this + 0x1a0)) * 0.5 + *(float *)(this + 0x1a0);
        *(float *)(AllocTempVector()::s_vecTemp + iVar16 + 8) =
             (*(float *)(this + 0x1b0) - *(float *)(this + 0x1a4)) * 0.5 + *(float *)(this + 0x1a4);
                    /* try { // try from 0051b9b3 to 0051bc2f has its CatchHandler @ 0051c486 */
        if (((((byte)this[0x1b4] & 0x40) == 0) && (((byte)this[0x1b6] & 0xfd) != 0)) &&
           ((pfVar23 = (float *)(**(code **)(*(int *)(this + 0x194) + 0x24))(),
            vec3_angle != *pfVar23 || ((DAT_01053d40 != pfVar23[1] || (DAT_01053d44 != pfVar23[2])))
            ))) {
          pmVar19 = (matrix3x4_t *)(**(code **)(*(int *)(this + 0x194) + 0x28))();
          VectorTransform((float *)(AllocTempVector()::s_vecTemp + iVar16),pmVar19,
                          (float *)(AllocTempVector()::s_vecTemp + iVar14));
          fVar34 = *(float *)(AllocTempVector()::s_vecTemp + iVar14 + 8);
        }
        else {
          pfVar23 = (float *)(**(code **)(*(int *)(this + 0x194) + 0x20))();
          *(float *)(AllocTempVector()::s_vecTemp + iVar14) =
               *pfVar23 + *(float *)(AllocTempVector()::s_vecTemp + iVar16);
          *(float *)(AllocTempVector()::s_vecTemp + iVar14 + 4) =
               pfVar23[1] + *(float *)(AllocTempVector()::s_vecTemp + iVar16 + 4);
          fVar34 = pfVar23[2] + *(float *)(AllocTempVector()::s_vecTemp + iVar16 + 8);
          *(float *)(AllocTempVector()::s_vecTemp + iVar14 + 8) = fVar34;
        }
        iVar14 = (**(code **)(*(int *)(this + 0x194) + 8))();
        fVar32 = *(float *)(iVar14 + 8);
        iVar14 = (**(code **)(*(int *)(this + 0x194) + 4))();
        IntervalDistance(local_120c,fVar34 + *(float *)(iVar14 + 8),fVar34 + fVar32);
        lVar31 = (longdouble)
                 CCollisionProperty::CalcSqrDistanceFromPoint
                           ((CCollisionProperty *)(local_1398 + 0x194),(Vector *)&local_1358);
        pCVar3 = local_1398;
        fVar34 = (float)lVar31;
        if (param_1 * param_1 <= fVar34) {
LAB_0051bdb9:
          local_13f0 = local_1398;
          local_13bc = 0;
          local_13ec = 0.0;
          local_13c3 = false;
          local_13cc = (CBaseEntity *)0x0;
        }
        else {
          fVar32 = fVar33;
          if ((local_1398 == (CBaseEntity *)0x0) ||
             (cVar11 = (**(code **)(*(int *)local_1398 + 0x16c))(), cVar11 == '\0')) {
            pCVar3 = (CBaseEntity *)0x0;
          }
          else {
            uVar26 = *(uint *)(pCVar3 + 0x3e68);
            if (((((((uVar26 != 0xffffffff) &&
                    (puVar12 = g_pEntityList + (uVar26 & 0xfff) * 0x10,
                    puVar12 != (undefined *)0xfffffffc)) &&
                   (*(uint *)(puVar12 + 8) == uVar26 >> 0xc)) && (*(int *)(puVar12 + 4) != 0)) ||
                 (((uVar26 = *(uint *)(pCVar3 + 0x3e48), uVar26 != 0xffffffff &&
                   (puVar12 = g_pEntityList + (uVar26 & 0xfff) * 0x10,
                   puVar12 != (undefined *)0xfffffffc)) &&
                  ((*(uint *)(puVar12 + 8) == uVar26 >> 0xc && (*(int *)(puVar12 + 4) != 0)))))) ||
                (((uVar26 = *(uint *)(pCVar3 + 0x33c4), uVar26 != 0xffffffff &&
                  (puVar12 = g_pEntityList + (uVar26 & 0xfff) * 0x10,
                  puVar12 != (undefined *)0xfffffffc)) &&
                 ((*(uint *)(puVar12 + 8) == uVar26 >> 0xc &&
                  ((*(int *)(puVar12 + 4) != 0 && (pCVar3[0x39f1] == (CBaseEntity)0x0)))))))) ||
               (cVar11 = (**(code **)(*(int *)pCVar3 + 0x7e8))(), cVar11 == '\0')) {
              if (param_1 == *(float *)(player_use_radius._28_4_ + 0x2c)) {
                if (9216.0 < fVar34) goto LAB_0051bdb9;
                fVar32 = 9216.0;
              }
              else {
                fVar32 = 9216.0;
              }
            }
          }
          if (bVar30) {
                    /* try { // try from 0051c304 to 0051c37c has its CatchHandler @ 0051c486 */
            NDebugOverlay::Line((Vector *)&local_1358,local_1214,0,0xff,0,true,0.5);
            NDebugOverlay::Cross3D(local_1214,16.0,0,0xff,0,true,0.5);
            if (local_1398 != (CBaseEntity *)0x0) {
              CBaseEntity::GetDebugName(local_1398);
            }
            Msg();
          }
          local_13cc = local_1398;
          if ((pCVar3 == (CBaseEntity *)0x0) || (local_13bc = 2, !param_5)) {
            local_13bc = (**(code **)(*(int *)local_1398 + 0xa8))();
          }
          local_13ec = 1.0;
          local_13c3 = fVar34 <= fVar32 || param_2 == param_1;
          local_13f0 = local_1398;
        }
      }
      local_13d4 = (Vector *)&local_1358;
      local_116c = local_115c;
      local_d54 = local_d44;
      local_1168 = 0x100;
      local_1164 = 0xffffffff;
      local_1160 = 0;
      local_d5c = 0;
      local_d50 = 0x100;
      local_d4c = 0xffffffff;
      local_d48 = 0;
      local_944 = 0;
      local_d58 = local_116c;
      local_940 = local_d54;
                    /* try { // try from 0051a471 to 0051a547 has its CatchHandler @ 0051c481 */
      CEntitySphereQuery::CEntitySphereQuery
                ((CEntitySphereQuery *)&local_93c,local_13d4,param_1 + 32.0,0);
      while( true ) {
        local_1398 = (CBaseEntity *)
                     CEntitySphereQuery::GetCurrentEntity((CEntitySphereQuery *)&local_93c);
        if (local_1398 == (CBaseEntity *)0x0) break;
        if (((this != (CTerrorPlayer *)local_1398) && (local_13cc != local_1398)) &&
           (cVar11 = (**(code **)(*(int *)this + 0x6e4))(), cVar11 != '\0')) {
          CUtlVector<CBaseEntity*,CUtlMemoryFixedGrowable<CBaseEntity*,256u,int>>::InsertBefore
                    ((CUtlVector<CBaseEntity*,CUtlMemoryFixedGrowable<CBaseEntity*,256u,int>> *)
                     &local_116c,local_d5c,&local_1398);
          iVar14 = (**(code **)(*(int *)local_1398 + 0xa8))();
          if (iVar14 != 2) {
            local_11cc = (IHandleEntity *)local_1398;
            CUtlVector<IHandleEntity*,CUtlMemoryFixedGrowable<IHandleEntity*,256u,int>>::
            InsertBefore((CUtlVector<IHandleEntity*,CUtlMemoryFixedGrowable<IHandleEntity*,256u,int>>
                          *)&local_d54,local_944,&local_11cc);
          }
        }
        local_93c = (undefined **)((int)local_93c + 1);
      }
      if (1 < (int)local_d5c) {
        if (local_116c == (undefined1 *)0x0) {
          iVar14 = local_d5c - 1;
          do {
            if (0 < iVar14) {
              iVar29 = 0;
              iVar16 = 1;
              do {
                while( true ) {
                  ppCVar1 = (CBaseEntity **)(local_116c + iVar16 * 4);
                  ppCVar25 = (CBaseEntity **)(local_116c + iVar29);
                  iVar22 = EntityEntindexCompare(ppCVar25,ppCVar1);
                  if (-1 < iVar22) break;
                  iVar16 = iVar16 + 1;
                  pCVar3 = *ppCVar25;
                  iVar29 = iVar29 + 4;
                  *ppCVar25 = *ppCVar1;
                  *ppCVar1 = pCVar3;
                  if (iVar14 + 1 == iVar16) goto LAB_0051bcfb;
                }
                iVar16 = iVar16 + 1;
                iVar29 = iVar29 + 4;
              } while (iVar14 + 1 != iVar16);
            }
LAB_0051bcfb:
            iVar14 = iVar14 + -1;
          } while (iVar14 != -1);
        }
        else {
                    /* try { // try from 0051a5b0 to 0051a60f has its CatchHandler @ 0051c481 */
          qsort(local_116c,local_d5c,4,EntityEntindexCompare);
        }
      }
      if (1 < (int)local_944) {
        if (local_d54 == (IHandleEntity **)0x0) {
          iVar14 = local_944 - 1;
          do {
            if (0 < iVar14) {
              iVar29 = 0;
              iVar16 = 1;
              do {
                    /* try { // try from 0051bd65 to 0051bd69 has its CatchHandler @ 0051c481 */
                while (iVar22 = IHandleEntityEntindexCompare
                                          ((IHandleEntity **)((int)local_d54 + iVar29),
                                           local_d54 + iVar16), iVar22 < 0) {
                  iVar22 = iVar16 + 1;
                  puVar24 = (undefined4 *)((int)local_d54 + iVar29);
                  iVar29 = iVar29 + 4;
                  pIVar5 = (IHandleEntity *)*puVar24;
                  *puVar24 = local_d54[iVar16];
                  local_d54[iVar16] = pIVar5;
                  iVar16 = iVar22;
                  if (iVar14 < iVar22) goto LAB_0051bda0;
                }
                iVar16 = iVar16 + 1;
                iVar29 = iVar29 + 4;
              } while (iVar16 <= iVar14);
            }
LAB_0051bda0:
            iVar14 = iVar14 + -1;
          } while (iVar14 != -1);
        }
        else {
          qsort(local_d54,local_944,4,IHandleEntityEntindexCompare);
        }
      }
      if (0 < (int)local_944) {
        CTraceFilterSimpleList::AddEntitiesToIgnore
                  ((CTraceFilterSimpleList *)local_12f8,local_944,local_d54);
      }
      sVar9 = local_d5c;
      if (0 < (int)local_d5c) {
        sVar27 = 0;
        do {
          local_1398 = *(CBaseEntity **)(local_116c + sVar27 * 4);
          if (bVar30) {
            if (((((byte)local_1398[0x14d] & 8) != 0) &&
                (CBaseEntity::CalcAbsolutePosition(local_1398), ((byte)local_1398[0x14d] & 8) != 0))
               && (CBaseEntity::CalcAbsolutePosition(local_1398), ((byte)local_1398[0x14d] & 8) != 0
                  )) {
              CBaseEntity::CalcAbsolutePosition(local_1398);
            }
                    /* try { // try from 0051a6c1 to 0051af8a has its CatchHandler @ 0051c3e0 */
            CBaseEntity::GetDebugName(local_1398);
            Msg();
          }
          cVar11 = (**(code **)(*(int *)local_1398 + 0x16c))();
          if ((cVar11 == '\0') || (!param_5)) {
            iVar14 = (**(code **)(*(int *)local_1398 + 0xa8))();
            if (local_13bc <= iVar14) goto LAB_0051a76c;
          }
          else {
            iVar14 = 2;
            if (local_13bc < 3) {
LAB_0051a76c:
              lVar31 = (longdouble)
                       CCollisionProperty::CalcSqrDistanceFromPoint
                                 ((CCollisionProperty *)(local_1398 + 0x194),local_13d4);
              fVar34 = (float)lVar31;
              if (bVar30) {
                CCollisionProperty::CalcNearestPoint
                          ((CCollisionProperty *)(local_1398 + 0x194),local_13d4,
                           (Vector *)&local_93c);
                CFmtStrN<256>::CFmtStrN(local_12c,"%d: %f");
                NDebugOverlay::Text((Vector *)&local_93c,local_127,true,0.5);
              }
              if (fVar34 <= param_1 * param_1) {
                bVar7 = fVar34 <= fVar33;
                bVar6 = param_2 == param_1;
                bVar2 = bVar7 || bVar6;
                if (((bVar7 || bVar6) || (local_13c3 == false)) &&
                   ((cVar11 = (**(code **)(*(int *)local_1398 + 0x16c))(), cVar11 == '\0' ||
                    ((param_1 != *(float *)(player_use_radius._28_4_ + 0x2c) || (fVar34 <= 9216.0)))
                    ))) {
                  CCollisionProperty::CollisionAABBToWorldAABB
                            ((CCollisionProperty *)(local_1398 + 0x194),
                             (Vector *)(local_1398 + 0x19c),(Vector *)(local_1398 + 0x1a8),
                             local_134c,(Vector *)local_1340);
                  (**(code **)(*(int *)(local_1398 + 0x194) + 0xc))();
                  fVar34 = local_1328 - local_1340[0];
                  pVVar17 = (Vector *)&local_137c;
                  if (bVar2) {
                    pVVar17 = (Vector *)&local_1370;
                  }
                  iVar16 = (**(code **)(*(int *)(local_1398 + 0x194) + 0x2c))();
                  if (iVar16 == 3) {
                    /* try { // try from 0051b7cb to 0051b875 has its CatchHandler @ 0051c3e0 */
                    pmVar19 = (matrix3x4_t *)(**(code **)(*(int *)(local_1398 + 0x194) + 0x28))();
                    pVVar20 = (Vector *)(**(code **)(*(int *)(local_1398 + 0x194) + 4))();
                    pVVar21 = (Vector *)(**(code **)(*(int *)(local_1398 + 0x194) + 8))();
                    cVar11 = IntersectRayWithOBB((Vector *)&local_1364,pVVar17,pmVar19,pVVar20,
                                                 pVVar21,0.0,(CBaseTrace *)&local_11cc);
                    if (cVar11 == '\0') goto LAB_0051a64b;
                    VectorTransform(&local_11c0,pmVar19,&local_1310);
                  }
                  else {
                    cVar11 = IntersectRayWithBox((Vector *)&local_1364,pVVar17,local_134c,
                                                 (Vector *)local_1340,1.0,(CBaseTrace *)&local_11cc,
                                                 (float *)0x0);
                    if (cVar11 == '\0') {
                      local_93c = (undefined **)(*(float *)pVVar17 * 0.5 + (float)local_1364);
                      local_938 = *(float *)(pVVar17 + 4) * 0.5 + local_1360;
                      local_934 = *(float *)(pVVar17 + 8) * 0.5 + local_135c;
                    /* try { // try from 0051b770 to 0051b7a3 has its CatchHandler @ 0051c3e0 */
                      pVVar17 = (Vector *)(**(code **)(*(int *)local_1398 + 0x288))();
                      CalcClosestPointOnLineSegment
                                (pVVar17,(Vector *)&local_1364,(Vector *)&local_93c,
                                 (Vector *)&local_1310,(float *)0x0);
                    }
                    else {
                      local_1310 = local_11c0;
                      local_130c = local_11bc;
                      local_1308 = local_11b8;
                    }
                  }
                  fVar32 = fVar34;
                  if (0.0 < fVar34) {
                    local_93c = (undefined **)((float)local_1364 - local_1310);
                    local_938 = local_1360 - local_130c;
                    local_934 = local_135c - local_1308;
                    lVar31 = (longdouble)VectorNormalize((Vector *)&local_93c);
                    fVar32 = (float)lVar31 - 1.0;
                    if (fVar34 <= (float)lVar31 - 1.0) {
                      fVar32 = fVar34;
                    }
                    if (0.0 < fVar32) {
                      fVar34 = local_934;
                      if (local_934 <= 0.0) {
                        fVar34 = 0.0;
                      }
                      local_130c = local_938 * fVar32 + local_130c;
                      local_1308 = fVar34 * fVar32 + local_1308;
                      local_1310 = fVar32 * (float)local_93c + local_1310;
                    }
                  }
                  CCollisionProperty::CalcNearestPoint
                            ((CCollisionProperty *)(local_1398 + 0x194),(Vector *)&local_1310,
                             (Vector *)&local_131c);
                  if (0.0 < fVar32) {
                    local_93c = (undefined **)((float)local_1364 - local_131c);
                    local_938 = local_1360 - local_1318;
                    local_934 = local_135c - local_1314;
                    lVar31 = (longdouble)VectorNormalize((Vector *)&local_93c);
                    fVar34 = (float)lVar31 - 1.0;
                    if (fVar32 <= (float)lVar31 - 1.0) {
                      fVar34 = fVar32;
                    }
                    if (0.0 < fVar34) {
                      fVar32 = local_13d0;
                      if (0.0 <= local_934) {
                        fVar32 = local_934;
                      }
                      local_1314 = fVar32 * fVar34 + local_1314;
                      local_1318 = local_938 * fVar34 + local_1318;
                      local_131c = fVar34 * (float)local_93c + local_131c;
                    }
                  }
                  if (bVar30) {
                    NDebugOverlay::Cross3D((Vector *)&local_1310,5.0,0,0xff,0,true,0.5);
                    NDebugOverlay::Cross3D((Vector *)&local_131c,5.0,0,0,0xff,true,0.5);
                  }
                  local_1304 = local_131c - (float)local_1364;
                  local_1300 = local_1318 - local_1360;
                  local_12fc = local_1314 - local_135c;
                  VectorNormalize((Vector *)&local_1304);
                  fVar34 = local_138c * local_12fc +
                           local_1394 * local_1304 + local_1390 * local_1300;
                  if ((param_3 <= fVar34) &&
                     ((((bVar7 || bVar6 && (local_13c3 == false)) || (local_13ec < fVar34)) ||
                      (local_13bc < iVar14)))) {
                    local_1288 = 1;
                    local_1294 = 0;
                    local_12cc = local_1364;
                    local_12c4 = local_135c;
                    local_12bc = local_131c - (float)local_1364;
                    local_1298 = 0;
                    local_12b4 = local_1314 - local_135c;
                    local_129c = 0;
                    local_128c = 0;
                    local_12b8 = local_1318 - local_1360;
                    local_12a4 = 0;
                    local_12a8 = 0;
                    local_12c8 = local_1360;
                    local_12ac = 0;
                    local_1287 = local_12bc * local_12bc + local_12b4 * local_12b4 +
                                 local_12b8 * local_12b8 != 0.0;
                    (**(code **)(*enginetrace + 0x14))();
                    if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
                      DebugDrawLine((Vector *)&local_93c,local_930,0xff,0,0,true,-1.0);
                    }
                    if ((local_910 == 1.0) || (local_8f0 == local_1398)) {
                      local_13cc = local_1398;
                      local_13ec = fVar34;
                      local_13c3 = bVar2;
                      local_13bc = iVar14;
                    }
                    else {
                    /* try { // try from 0051be2f to 0051bf84 has its CatchHandler @ 0051c3e0 */
                      pfVar23 = (float *)(**(code **)(*(int *)local_1398 + 0x288))();
                      local_126c = *pfVar23 - (float)local_1364;
                      local_1268 = pfVar23[1] - local_1360;
                      local_1238 = 1;
                      local_1244 = 0;
                      local_1264 = pfVar23[2] - local_135c;
                      local_1248 = 0;
                      local_124c = 0;
                      local_123c = 0;
                      local_1254 = 0;
                      local_1258 = 0;
                      local_125c = 0;
                      local_127c = local_1364;
                      local_1278 = local_1360;
                      local_1274 = local_135c;
                      local_1237 = local_1268 * local_1268 + local_126c * local_126c +
                                   local_1264 * local_1264 != 0.0;
                      (**(code **)(*enginetrace + 0x14))();
                      if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
                        DebugDrawLine((Vector *)&local_93c,local_930,0xff,0,0,true,-1.0);
                      }
                      if ((local_910 == 1.0) || (local_8f0 == local_1398)) {
                        local_13cc = local_1398;
                        local_13ec = fVar34;
                        local_13c3 = bVar2;
                        local_13bc = iVar14;
                      }
                    }
                  }
                }
              }
            }
          }
LAB_0051a64b:
          sVar27 = sVar27 + 1;
        } while (sVar27 != sVar9);
      }
      if (bVar30) {
        if (local_13cc == (CBaseEntity *)0x0) {
          NDebugOverlay::Line(local_13d4,local_1214,0xff,0,0,true,0.5);
          NDebugOverlay::Cross3D(local_1214,16.0,0xff,0,0,true,0.5);
          Msg();
LAB_0051b27b:
          cVar11 = (**(code **)(*engine + 0x1f8))();
          local_13b8 = 0.7;
          if (cVar11 == '\0') {
            local_13b8 = 0.85;
          }
          if (*(int *)(gpGlobals + 0x14) < 1) {
            local_13cc = (CBaseEntity *)0x0;
            piVar28 = (int *)&stack0xffffebdc;
          }
          else {
            local_13cc = (CBaseEntity *)0x0;
            iVar14 = 1;
            piVar28 = (int *)&stack0xffffebdc;
            do {
              *piVar28 = iVar14;
                    /* try { // try from 0051b2e4 to 0051b6d9 has its CatchHandler @ 0051c466 */
              piVar28[-1] = 0x51b2e9;
              pCVar18 = (CTerrorPlayer *)UTIL_PlayerByIndex(*piVar28);
              piVar15 = piVar28;
              if (pCVar18 != (CTerrorPlayer *)0x0) {
                iVar16 = *(int *)pCVar18;
                *piVar28 = (int)pCVar18;
                pcVar4 = *(code **)(iVar16 + 0x16c);
                piVar28[-1] = 0x51b2fa;
                cVar11 = (*pcVar4)();
                if (((((cVar11 != '\0') && (this != pCVar18)) &&
                     ((uVar26 = *(uint *)(pCVar18 + 0x3e68), uVar26 == 0xffffffff ||
                      (((puVar12 = g_pEntityList + (uVar26 & 0xfff) * 0x10,
                        puVar12 == (undefined *)0xfffffffc ||
                        (*(uint *)(puVar12 + 8) != uVar26 >> 0xc)) || (*(int *)(puVar12 + 4) == 0)))
                      ))) && (((uVar26 = *(uint *)(pCVar18 + 0x3e48), uVar26 == 0xffffffff ||
                               (puVar12 = g_pEntityList + (uVar26 & 0xfff) * 0x10,
                               puVar12 == (undefined *)0xfffffffc)) ||
                              ((*(uint *)(puVar12 + 8) != uVar26 >> 0xc ||
                               (*(int *)(puVar12 + 4) == 0)))))) &&
                   (((uVar26 = *(uint *)(pCVar18 + 0x33c4), uVar26 == 0xffffffff ||
                     (puVar12 = g_pEntityList + (uVar26 & 0xfff) * 0x10,
                     puVar12 == (undefined *)0xfffffffc)) ||
                    ((*(uint *)(puVar12 + 8) != uVar26 >> 0xc ||
                     ((*(int *)(puVar12 + 4) == 0 || (pCVar18[0x39f1] != (CTerrorPlayer)0x0))))))))
                {
                  iVar16 = *(int *)pCVar18;
                  *piVar28 = (int)pCVar18;
                  pcVar4 = *(code **)(iVar16 + 0x7e8);
                  piVar28[-1] = 0x51b3a2;
                  cVar11 = (*pcVar4)();
                  if (cVar11 != '\0') {
                    *piVar28 = (int)pCVar18;
                    piVar28[-1] = 0x51b3b2;
                    iVar16 = CBaseEntity::GetTeamNumber((CBaseEntity *)*piVar28);
                    *piVar28 = iVar16;
                    piVar28[-1] = 0x51b3ba;
                    cVar11 = IsASurvivorTeam(iVar16);
                    if (cVar11 != '\0') {
                      if (((byte)pCVar18[0x14d] & 8) != 0) {
                        *piVar28 = (int)pCVar18;
                    /* try { // try from 0051b7ac to 0051b7b0 has its CatchHandler @ 0051c466 */
                        piVar28[-1] = 0x51b7b1;
                        CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*piVar28);
                      }
                      pCVar3 = *(CBaseEntity **)(pCVar18 + 0x2e0);
                      fVar33 = *(float *)(pCVar18 + 0x2e4);
                      fVar34 = *(float *)(pCVar18 + 0x2e8);
                      if (pCVar18[0x39f1] != (CTerrorPlayer)0x0) {
                        if (((byte)this[0x14d] & 8) != 0) {
                          *piVar28 = (int)this;
                    /* try { // try from 0051bdf8 to 0051bdfc has its CatchHandler @ 0051c466 */
                          piVar28[-1] = 0x51bdfd;
                          CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*piVar28);
                        }
                        if (fVar34 < *(float *)(this + 0x2e8)) {
                          iVar16 = *g_pGameRules;
                          *piVar28 = (int)g_pGameRules;
                          pcVar4 = *(code **)(iVar16 + 0x7c);
                          piVar28[-1] = 0x51b434;
                          iVar16 = (*pcVar4)();
                          fVar34 = fVar34 + *(float *)(iVar16 + 8);
                        }
                      }
                      iVar16 = *(int *)this;
                      piVar28[1] = (int)this;
                      *piVar28 = (int)&local_1304;
                      pcVar4 = *(code **)(iVar16 + 0x234);
                      piVar28[-1] = 0x51b45e;
                      (*pcVar4)();
                      local_1310 = (float)pCVar3 - local_1304;
                      local_130c = fVar33 - local_1300;
                      local_1308 = fVar34 - local_12fc;
                      piVar15 = piVar28 + -1;
                      if (local_130c * local_130c + local_1310 * local_1310 +
                          local_1308 * local_1308 <
                          *(float *)(player_incap_use_radius._28_4_ + 0x2c) *
                          *(float *)(player_incap_use_radius._28_4_ + 0x2c)) {
                        piVar28[-1] = (int)&local_1310;
                        piVar28[-2] = 0x51b4e2;
                        VectorNormalize((Vector *)piVar28[-1]);
                        fVar32 = local_1308 * local_138c +
                                 local_1310 * local_1394 + local_130c * local_1390;
                        piVar15 = piVar28 + -1;
                        if (local_13b8 < fVar32) {
                          piVar28[2] = 0;
                          piVar28[1] = 0;
                          *piVar28 = 0;
                          piVar28[-1] = (int)&local_127c;
                          piVar28[-2] = 0x51b55e;
                          CTraceFilterSimple::CTraceFilterSimple
                                    ((CTraceFilterSimple *)piVar28[-1],(IHandleEntity *)*piVar28,
                                     piVar28[1],(_func_bool_IHandleEntity_ptr_int *)piVar28[2]);
                          iVar16 = *(int *)this;
                          local_127c = &PTR_ShouldHitEntity_00c54558;
                          *piVar28 = (int)this;
                          piVar28[-1] = (int)&local_12cc;
                          pcVar4 = *(code **)(iVar16 + 0x234);
                          piVar28[-2] = 0x51b57d;
                          (*pcVar4)();
                          local_1194 = 0;
                          local_1188 = 1;
                          local_11bc = (float)local_12cc - (float)pCVar3;
                          local_1198 = 0;
                          local_11b8 = local_12c8 - fVar33;
                          local_119c = 0;
                          local_118c = 0;
                          local_11b4 = local_12c4 - fVar34;
                          local_11a4 = 0;
                          local_11a8 = 0;
                          local_11ac = 0;
                          local_1187 = local_11bc * local_11bc + local_11b8 * local_11b8 +
                                       local_11b4 * local_11b4 != 0.0;
                          iVar16 = *enginetrace;
                          piVar28[2] = (int)&local_93c;
                          piVar28[1] = (int)&local_127c;
                          *piVar28 = 0x200608b;
                          piVar28[-1] = (int)&local_11cc;
                          piVar28[-2] = (int)enginetrace;
                          pcVar4 = *(code **)(iVar16 + 0x14);
                          piVar28[-3] = 0x51b68e;
                          local_11cc = (IHandleEntity *)pCVar3;
                          local_11c8 = fVar33;
                          local_11c4 = fVar34;
                          (*pcVar4)();
                          if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
                            piVar28[4] = -0x40800000;
                            piVar28[-1] = (int)local_930;
                            piVar28[3] = 1;
                            piVar28[2] = 0;
                            piVar28[1] = 0;
                            *piVar28 = 0xff;
                            piVar28[-2] = (int)&local_93c;
                            piVar28[-3] = 0x51b6da;
                            DebugDrawLine((Vector *)piVar28[-2],(Vector *)piVar28[-1],*piVar28,
                                          piVar28[1],piVar28[2],SUB41(piVar28[3],0),
                                          (float)piVar28[4]);
                          }
                          piVar15 = piVar28 + -2;
                          if (local_910 == 1.0) {
                            local_13c3 = true;
                            piVar15 = piVar28 + -2;
                            local_13cc = (CBaseEntity *)pCVar18;
                            local_13b8 = fVar32;
                          }
                        }
                      }
                    }
                  }
                }
              }
              iVar14 = iVar14 + 1;
              piVar28 = piVar15;
            } while (iVar14 <= *(int *)(gpGlobals + 0x14));
          }
        }
        else {
          if (local_13cc == local_13f0) {
            NDebugOverlay::Line(local_13d4,local_1214,0,0xff,0,true,0.5);
            NDebugOverlay::Cross3D(local_1214,16.0,0,0xff,0,true,0.5);
          }
          else {
            local_93c = (undefined **)0x41000000;
            local_938 = 8.0;
            local_934 = 8.0;
            local_11cc = (IHandleEntity *)0xc1000000;
            local_11c8 = -8.0;
            local_11c4 = -8.0;
                    /* try { // try from 0051b004 to 0051b28a has its CatchHandler @ 0051c481 */
            pVVar17 = (Vector *)(**(code **)(*(int *)local_13cc + 0x288))();
            NDebugOverlay::Box(pVVar17,(Vector *)&local_11cc,(Vector *)&local_93c,0,0xff,0,1,0.5);
          }
                    /* try { // try from 0051c0b0 to 0051c2c3 has its CatchHandler @ 0051c481 */
          if (((((byte)local_13cc[0x14d] & 8) != 0) &&
              (CBaseEntity::CalcAbsolutePosition(local_13cc), ((byte)local_13cc[0x14d] & 8) != 0))
             && (CBaseEntity::CalcAbsolutePosition(local_13cc), ((byte)local_13cc[0x14d] & 8) != 0))
          {
            CBaseEntity::CalcAbsolutePosition(local_13cc);
          }
          CBaseEntity::GetDebugName(local_13cc);
          Msg();
          piVar28 = (int *)&stack0xffffebdc;
        }
      }
      else if (local_13cc == (CBaseEntity *)0x0) goto LAB_0051b27b;
      if (param_4 != (bool *)0x0) {
        *param_4 = local_13c3;
      }
      local_944 = 0;
      *piVar28 = (int)&local_d54;
      piVar28[-1] = 0x51b13a;
      CUtlMemory<IHandleEntity*,int>::Purge((CUtlMemory<IHandleEntity*,int> *)*piVar28);
      ppIVar10 = local_d54;
      *piVar28 = (int)&local_d54;
      local_940 = ppIVar10;
      piVar28[-1] = 0x51b14e;
      CUtlMemory<IHandleEntity*,int>::Purge((CUtlMemory<IHandleEntity*,int> *)*piVar28);
      local_d5c = 0;
      *piVar28 = (int)&local_116c;
      piVar28[-1] = 0x51b166;
      CUtlMemory<CBaseEntity*,int>::Purge((CUtlMemory<CBaseEntity*,int> *)*piVar28);
      puVar8 = local_116c;
      *piVar28 = (int)&local_116c;
      local_d58 = puVar8;
      piVar28[-1] = 0x51b17a;
      CUtlMemory<CBaseEntity*,int>::Purge((CUtlMemory<CBaseEntity*,int> *)*piVar28);
      *piVar28 = (int)local_12e8;
      local_12f8[0] = &PTR_ShouldHitEntity_00c54590;
      local_12dc = 0;
      piVar28[-1] = 0x51b196;
      CUtlMemory<IHandleEntity*,int>::Purge((CUtlMemory<IHandleEntity*,int> *)*piVar28);
      *piVar28 = (int)local_12e8;
      local_12d8 = local_12e8[0];
      piVar28[-1] = 0x51b1aa;
      CUtlMemory<IHandleEntity*,int>::Purge((CUtlMemory<IHandleEntity*,int> *)*piVar28);
      goto LAB_0051a262;
    }
    if (param_4 == (bool *)0x0) {
      puVar24 = (undefined4 *)(g_pEntityList + (uVar26 & 0xfff) * 0x10 + 4);
    }
    else {
      piVar15 = (int *)(g_pEntityList + (uVar26 & 0xfff) * 0x10 + 4);
LAB_0051b203:
      if (piVar15[1] == uVar26 >> 0xc) {
        bVar30 = *piVar15 != 0;
      }
LAB_0051b20b:
      *param_4 = bVar30;
      uVar26 = *(uint *)(this + 0x2e28);
LAB_0051b226:
      if ((uVar26 == 0xffffffff) ||
         (puVar24 = (undefined4 *)(g_pEntityList + (uVar26 & 0xfff) * 0x10 + 4),
         puVar24 == (undefined4 *)0x0)) goto LAB_0051a260;
    }
    if (puVar24[1] == uVar26 >> 0xc) {
      local_13cc = (CBaseEntity *)*puVar24;
      goto LAB_0051a262;
    }
  }
LAB_0051a260:
  local_13cc = (CBaseEntity *)0x0;
  piVar28 = (int *)&stack0xffffebe4;
LAB_0051a262:
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    *(undefined4 *)((int)piVar28 + -4) = 0x51c3ca;
    __stack_chk_fail();
  }
  return (CTerrorPlayer *)local_13cc;
}

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)