L L4D2node

ForEachActor<FriendThreatenedScan>

0x00a0b8d0 · 2346 bytes · __cdecl

_Z12ForEachActorI20FriendThreatenedScanEbRT_

Decompiled

bool (1 param)

/* bool ForEachActor<FriendThreatenedScan>(FriendThreatenedScan&) */

bool ForEachActor<FriendThreatenedScan>(FriendThreatenedScan *param_1)

{
  code *pcVar1;
  char cVar2;
  int *piVar3;
  int iVar4;
  uint uVar5;
  float *pfVar6;
  int iVar7;
  int *piVar8;
  int *piVar9;
  longdouble lVar10;
  undefined1 *puVar11;
  undefined1 *puVar12;
  int iStack_144;
  float local_140;
  int local_13c [3];
  float local_130;
  int local_12c;
  float local_128 [3];
  float *local_11c;
  undefined1 *local_118;
  undefined1 *local_114;
  float local_110;
  float local_100;
  float local_fc;
  float local_f8;
  float local_f4;
  float local_f0;
  float local_ec;
  float local_e8;
  float local_e4;
  float local_e0;
  undefined **local_dc [4];
  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;
  char local_3a;
  char local_39;
  
  iVar7 = 1;
  piVar8 = local_13c;
  piVar9 = local_13c;
  if (0 < *(int *)(gpGlobals + 0x14)) {
    do {
      *piVar9 = iVar7;
      piVar9[-1] = 0xa0b8f8;
      piVar3 = (int *)UTIL_PlayerByIndex(*piVar9);
      piVar8 = piVar9;
      if (((piVar3 != (int *)0x0) && (piVar3[0xc] != 0)) &&
         (piVar3[0xc] - *(int *)(gpGlobals + 0x58) >> 4 != 0)) {
        iVar4 = *piVar3;
        *piVar9 = (int)piVar3;
        pcVar1 = *(code **)(iVar4 + 0x16c);
        piVar9[-1] = 0xa0b920;
        cVar2 = (*pcVar1)();
        if ((cVar2 != '\0') && (piVar3[0x7db] != 2)) {
          iVar4 = *piVar3;
          *piVar9 = (int)piVar3;
          pcVar1 = *(code **)(iVar4 + 0x148);
          piVar9[-1] = 0xa0b938;
          iVar4 = (*pcVar1)();
          if (iVar4 == 0) {
            iVar4 = *piVar3;
            *piVar9 = (int)piVar3;
            pcVar1 = *(code **)(iVar4 + 300);
            piVar9[-1] = 0xa0be00;
            cVar2 = (*pcVar1)();
            if (cVar2 != '\0') {
              *piVar9 = (int)piVar3;
              piVar9[-1] = 0xa0be10;
              iVar4 = CBaseEntity::GetTeamNumber((CBaseEntity *)*piVar9);
              if (iVar4 == 3) {
                iVar4 = *piVar3;
                *piVar9 = (int)piVar3;
                pcVar1 = *(code **)(iVar4 + 0x16c);
                piVar9[-1] = 0xa0be24;
                cVar2 = (*pcVar1)();
                if (cVar2 != '\0') {
                  iVar4 = *piVar3;
                  *piVar9 = (int)piVar3;
                  pcVar1 = *(code **)(iVar4 + 0x558);
                  piVar9[-1] = 0xa0c1f3;
                  cVar2 = (*pcVar1)();
                  if (cVar2 != '\0') goto LAB_00a0b946;
                }
                if ((*(byte *)((int)piVar3 + 0x14d) & 8) != 0) {
                  *piVar9 = (int)piVar3;
                  piVar9[-1] = 0xa0be3d;
                  CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*piVar9);
                }
                iVar4 = *(int *)(param_1 + 4);
                if ((*(byte *)(iVar4 + 0x14d) & 8) != 0) {
                  *piVar9 = iVar4;
                  piVar9[-1] = 0xa0c208;
                  CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*piVar9);
                }
                local_100 = *(float *)(iVar4 + 0x2e0) - (float)piVar3[0xb8];
                local_fc = *(float *)(iVar4 + 0x2e4) - (float)piVar3[0xb9];
                local_f8 = *(float *)(iVar4 + 0x2e8) - (float)piVar3[0xba];
                *piVar9 = (int)&local_100;
                piVar9[-1] = 0xa0bea6;
                lVar10 = (longdouble)VectorNormalize((Vector *)*piVar9);
                local_110 = (float)lVar10;
                if ((local_110 < *(float *)(ThreatRange._28_4_ + 0x2c) ||
                     local_110 == *(float *)(ThreatRange._28_4_ + 0x2c)) &&
                   (local_110 < *(float *)(param_1 + 0xc) || local_110 == *(float *)(param_1 + 0xc))
                   ) {
                  if ((*(byte *)((int)piVar3 + 0x14d) & 0x10) != 0) {
                    *piVar9 = (int)piVar3;
                    piVar9[-1] = 0xa0bee1;
                    CBaseEntity::CalcAbsoluteVelocity((CBaseEntity *)*piVar9);
                  }
                  local_f4 = (float)piVar3[0x9d];
                  local_f0 = (float)piVar3[0x9e];
                  local_ec = (float)piVar3[0x9f];
                  *piVar9 = (int)&local_f4;
                  piVar9[-1] = 0xa0bf13;
                  lVar10 = (longdouble)VectorNormalize((Vector *)*piVar9);
                  local_114 = (undefined1 *)(float)lVar10;
                  if ((75.0 < (float)local_114) &&
                     (0.7071 < local_f0 * local_fc + local_f4 * local_100 + local_ec * local_f8)) {
                    piVar9[3] = 0;
                    piVar9[2] = 0;
                    piVar9[1] = *(int *)param_1;
                    *piVar9 = (int)local_dc;
                    piVar9[-1] = 0xa0bf9a;
                    CTraceFilterSimple::CTraceFilterSimple
                              ((CTraceFilterSimple *)*piVar9,(IHandleEntity *)piVar9[1],piVar9[2],
                               (_func_bool_IHandleEntity_ptr_int *)piVar9[3]);
                    local_dc[0] = &PTR_ShouldHitEntity_00c54558;
                    iVar4 = *piVar3;
                    *piVar9 = (int)piVar3;
                    pcVar1 = *(code **)(iVar4 + 0x288);
                    piVar9[-1] = 0xa0bfaf;
                    pfVar6 = (float *)(*pcVar1)();
                    iVar4 = **(int **)param_1;
                    piVar9[1] = (int)*(int **)param_1;
                    *piVar9 = (int)&local_e8;
                    pcVar1 = *(code **)(iVar4 + 0x234);
                    piVar9[-1] = 0xa0bfcb;
                    (*pcVar1)();
                    local_114 = local_70;
                    local_bc = *pfVar6 - local_e8;
                    local_b8 = pfVar6[1] - local_e4;
                    local_88 = 1;
                    local_8c = 0;
                    local_b4 = pfVar6[2] - local_e0;
                    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_a4 = 0;
                    local_a8 = 0;
                    local_ac = 0;
                    local_118 = (undefined1 *)0x0;
                    iVar4 = *enginetrace;
                    piVar9[3] = (int)local_114;
                    piVar9[2] = (int)local_dc;
                    piVar9[1] = 0x2006041;
                    *piVar9 = (int)&local_cc;
                    piVar9[-1] = (int)enginetrace;
                    pcVar1 = *(code **)(iVar4 + 0x14);
                    piVar9[-2] = 0xa0c0d1;
                    (*pcVar1)();
                    puVar11 = local_118;
                    if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
                      piVar9[5] = -0x40800000;
                      piVar9[4] = 1;
                      piVar9[3] = 0;
                      piVar9[2] = 0;
                      piVar9[1] = 0xff;
                      *piVar9 = (int)local_64;
                      piVar9[-1] = (int)local_114;
                      local_114 = local_118;
                      piVar9[-2] = 0xa0c12b;
                      DebugDrawLine((Vector *)piVar9[-1],(Vector *)*piVar9,piVar9[1],piVar9[2],
                                    piVar9[3],SUB41(piVar9[4],0),(float)piVar9[5]);
                      puVar11 = local_114;
                    }
                    piVar8 = piVar9 + -1;
                    if (((1.0 <= local_44) && (piVar8 = piVar9 + -1, local_3a == '\0')) &&
                       (piVar8 = piVar9 + -1, local_39 == '\0')) {
                      *(int **)(param_1 + 8) = piVar3;
                      *(float *)(param_1 + 0xc) = local_110;
                      piVar9[2] = 0;
                      piVar9[1] = 0;
                      *piVar9 = (int)&local_cc;
                      piVar9[-1] = *(undefined4 *)(param_1 + 4);
                      piVar9[-2] = 0xa0c193;
                      local_114 = puVar11;
                      CBasePlayer::EyeVectors
                                ((CBasePlayer *)piVar9[-1],(Vector *)*piVar9,(Vector *)piVar9[1],
                                 (Vector *)piVar9[2]);
                      param_1[0x10] =
                           (FriendThreatenedScan)
                           ((float)local_114 <
                           local_c8 * local_fc + local_cc * local_100 + local_c4 * local_f8);
                      piVar8 = piVar9 + -1;
                    }
                  }
                }
              }
            }
          }
        }
      }
LAB_00a0b946:
      iVar7 = iVar7 + 1;
      piVar9 = piVar8;
    } while (iVar7 <= *(int *)(gpGlobals + 0x14));
  }
  *(undefined4 *)((int)piVar8 + -4) = 0xa0b953;
  local_110 = (float)TheNextBots();
  uVar5 = (uint)*(ushort *)((int)local_110 + 0x10);
  if (uVar5 != 0xffff) {
    iVar7 = *(int *)((int)local_110 + 4);
    do {
      piVar9 = *(int **)(iVar7 + uVar5 * 8);
      iVar7 = *piVar9;
      *piVar8 = (int)piVar9;
      pcVar1 = *(code **)(iVar7 + 0xb4);
      piVar8[-1] = 0xa0b9a6;
      piVar3 = (int *)(*pcVar1)();
      iVar7 = *piVar3;
      *piVar8 = (int)piVar3;
      pcVar1 = *(code **)(iVar7 + 300);
      piVar8[-1] = 0xa0b9b3;
      cVar2 = (*pcVar1)();
      piVar9 = piVar8;
      if (cVar2 != '\0') {
        *piVar8 = (int)piVar3;
        piVar8[-1] = 0xa0b9bf;
        iVar7 = CBaseEntity::GetTeamNumber((CBaseEntity *)*piVar8);
        if (iVar7 == 3) {
          iVar7 = *piVar3;
          *piVar8 = (int)piVar3;
          pcVar1 = *(code **)(iVar7 + 0x16c);
          piVar8[-1] = 0xa0b9cf;
          cVar2 = (*pcVar1)();
          if (cVar2 != '\0') {
            iVar7 = *piVar3;
            *piVar8 = (int)piVar3;
            pcVar1 = *(code **)(iVar7 + 0x558);
            piVar8[-1] = 0xa0b9de;
            cVar2 = (*pcVar1)();
            if (cVar2 != '\0') goto LAB_00a0b978;
          }
          if ((*(byte *)((int)piVar3 + 0x14d) & 8) != 0) {
            *piVar8 = (int)piVar3;
            piVar8[-1] = 0xa0b9f3;
            CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*piVar8);
          }
          iVar7 = *(int *)(param_1 + 4);
          if ((*(byte *)(iVar7 + 0x14d) & 8) != 0) {
            *piVar8 = iVar7;
            piVar8[-1] = 0xa0bdd8;
            CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*piVar8);
          }
          local_100 = *(float *)(iVar7 + 0x2e0) - (float)piVar3[0xb8];
          local_fc = *(float *)(iVar7 + 0x2e4) - (float)piVar3[0xb9];
          local_f8 = *(float *)(iVar7 + 0x2e8) - (float)piVar3[0xba];
          *piVar8 = (int)&local_100;
          piVar8[-1] = 0xa0ba5c;
          lVar10 = (longdouble)VectorNormalize((Vector *)*piVar8);
          local_114 = (undefined1 *)(float)lVar10;
          if (((float)local_114 < *(float *)(ThreatRange._28_4_ + 0x2c) ||
               (float)local_114 == *(float *)(ThreatRange._28_4_ + 0x2c)) &&
             ((float)local_114 < *(float *)(param_1 + 0xc) ||
              (float)local_114 == *(float *)(param_1 + 0xc))) {
            if ((*(byte *)((int)piVar3 + 0x14d) & 0x10) != 0) {
              *piVar8 = (int)piVar3;
              piVar8[-1] = 0xa0bde8;
              CBaseEntity::CalcAbsoluteVelocity((CBaseEntity *)*piVar8);
            }
            local_f4 = (float)piVar3[0x9d];
            local_f0 = (float)piVar3[0x9e];
            local_ec = (float)piVar3[0x9f];
            *piVar8 = (int)&local_f4;
            piVar8[-1] = 0xa0bacd;
            local_118 = local_114;
            lVar10 = (longdouble)VectorNormalize((Vector *)*piVar8);
            local_114 = (undefined1 *)(float)lVar10;
            if ((75.0 < (float)local_114) &&
               (0.7071 < local_f0 * local_fc + local_f4 * local_100 + local_ec * local_f8)) {
              piVar8[3] = 0;
              piVar8[2] = 0;
              piVar8[1] = *(int *)param_1;
              *piVar8 = (int)local_dc;
              piVar8[-1] = 0xa0bb64;
              CTraceFilterSimple::CTraceFilterSimple
                        ((CTraceFilterSimple *)*piVar8,(IHandleEntity *)piVar8[1],piVar8[2],
                         (_func_bool_IHandleEntity_ptr_int *)piVar8[3]);
              local_dc[0] = &PTR_ShouldHitEntity_00c54558;
              iVar7 = *piVar3;
              *piVar8 = (int)piVar3;
              pcVar1 = *(code **)(iVar7 + 0x288);
              piVar8[-1] = 0xa0bb79;
              pfVar6 = (float *)(*pcVar1)();
              iVar7 = **(int **)param_1;
              piVar8[1] = (int)*(int **)param_1;
              *piVar8 = (int)&local_e8;
              pcVar1 = *(code **)(iVar7 + 0x234);
              piVar8[-1] = 0xa0bb95;
              (*pcVar1)();
              local_bc = *pfVar6 - local_e8;
              local_b8 = pfVar6[1] - local_e4;
              local_88 = 1;
              local_8c = 0;
              local_b4 = pfVar6[2] - local_e0;
              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_a4 = 0;
              local_a8 = 0;
              local_ac = 0;
              local_114 = (undefined1 *)0x0;
              iVar7 = *enginetrace;
              piVar8[2] = (int)local_dc;
              local_11c = &local_cc;
              piVar8[3] = (int)local_70;
              piVar8[1] = 0x2006041;
              *piVar8 = (int)local_11c;
              piVar8[-1] = (int)enginetrace;
              pcVar1 = *(code **)(iVar7 + 0x14);
              piVar8[-2] = 0xa0bc9b;
              (*pcVar1)();
              puVar11 = local_118;
              puVar12 = local_114;
              if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
                piVar8[5] = -0x40800000;
                piVar8[4] = 1;
                piVar8[3] = 0;
                piVar8[2] = 0;
                piVar8[1] = 0xff;
                *piVar8 = (int)local_64;
                piVar8[-1] = (int)local_70;
                local_118 = local_114;
                local_114 = puVar11;
                piVar8[-2] = 0xa0bcfe;
                DebugDrawLine((Vector *)piVar8[-1],(Vector *)*piVar8,piVar8[1],piVar8[2],piVar8[3],
                              SUB41(piVar8[4],0),(float)piVar8[5]);
                puVar11 = local_114;
                puVar12 = local_118;
              }
              piVar9 = piVar8 + -1;
              if (((1.0 <= local_44) && (piVar9 = piVar8 + -1, local_3a == '\0')) &&
                 (piVar9 = piVar8 + -1, local_39 == '\0')) {
                *(undefined1 **)(param_1 + 0xc) = puVar11;
                *(int **)(param_1 + 8) = piVar3;
                piVar8[2] = 0;
                piVar8[1] = 0;
                *piVar8 = (int)local_11c;
                piVar8[-1] = *(undefined4 *)(param_1 + 4);
                piVar8[-2] = 0xa0bd6f;
                local_114 = puVar12;
                CBasePlayer::EyeVectors
                          ((CBasePlayer *)piVar8[-1],(Vector *)*piVar8,(Vector *)piVar8[1],
                           (Vector *)piVar8[2]);
                param_1[0x10] =
                     (FriendThreatenedScan)
                     ((float)local_114 <
                     local_c8 * local_fc + local_cc * local_100 + local_c4 * local_f8);
                piVar9 = piVar8 + -1;
              }
            }
          }
        }
      }
LAB_00a0b978:
      iVar7 = *(int *)((int)local_110 + 4);
      uVar5 = (uint)*(ushort *)(iVar7 + 6 + uVar5 * 8);
      piVar8 = piVar9;
    } while (uVar5 != 0xffff);
  }
  return true;
}

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)