L L4D2node

CGameRules::RadiusDamage

0x0045fc80 · 4657 bytes · __thiscall

_ZN10CGameRules12RadiusDamageERK15CTakeDamageInfoRK6VectorfiP11CBaseEntity

Decompiled

undefined (6 params)

/* CGameRules::RadiusDamage(CTakeDamageInfo const&, Vector const&, float, int, CBaseEntity*) */

void __thiscall
CGameRules::RadiusDamage
          (CGameRules *this,CTakeDamageInfo *param_1,Vector *param_2,float param_3,int param_4,
          CBaseEntity *param_5)

{
  uint uVar1;
  int *piVar2;
  int *piVar3;
  CBaseEntity *pCVar4;
  float fVar5;
  float fVar6;
  float fVar7;
  char cVar8;
  uint uVar9;
  CBaseEntity *pCVar10;
  int iVar11;
  char *pcVar12;
  undefined *puVar13;
  code *pcVar14;
  int *piVar15;
  longdouble lVar16;
  float fVar17;
  float fVar18;
  float fVar19;
  int aiStackY_974 [2];
  int local_95c;
  float local_958 [4];
  int local_948;
  int local_93c;
  float local_938;
  int local_934;
  int local_928;
  float local_914;
  float local_910;
  float local_90c;
  float local_908;
  float local_904;
  float local_900;
  float local_8fc;
  float local_8f8;
  float local_8f4;
  float local_8f0;
  float local_8ec;
  float local_8e8;
  undefined1 local_8e0 [12];
  float local_8d4;
  float local_8d0;
  float local_8cc;
  float local_8c8;
  float local_8c4;
  float local_8c0;
  float local_8b4;
  char local_8a9;
  CBaseEntity *local_894;
  float local_88c;
  float local_888;
  float local_884;
  float local_880;
  float local_87c;
  float local_878;
  float local_874;
  undefined4 local_870;
  undefined4 local_86c;
  undefined4 local_868;
  undefined4 local_864;
  undefined4 local_860;
  undefined4 local_85c;
  uint local_858;
  undefined4 local_854;
  float local_850;
  undefined4 local_84c;
  undefined4 local_848;
  uint local_844;
  undefined4 local_840;
  undefined4 local_83c;
  undefined4 local_838;
  float local_834;
  int local_830;
  int local_824 [517];
  
  local_914 = *(float *)param_2;
  local_910 = *(float *)(param_2 + 4);
  local_90c = *(float *)(param_2 + 8);
  if (param_3 == 0.0) {
    local_938 = 1.0;
  }
  else {
    local_938 = *(float *)(param_1 + 0x3c) / param_3;
  }
  uVar9 = (**(code **)*enginetrace)();
  local_90c = local_90c + 1.0;
  CEntitySphereQuery::CEntitySphereQuery
            ((CEntitySphereQuery *)local_824,(Vector *)&local_914,param_3,0);
  local_934 = 0;
  pCVar10 = (CBaseEntity *)CEntitySphereQuery::GetCurrentEntity((CEntitySphereQuery *)local_824);
  piVar3 = (int *)&stack0xfffff694;
  do {
    if (pCVar10 == (CBaseEntity *)0x0) {
      return;
    }
    piVar15 = piVar3;
    if ((pCVar10 != param_5) && (pCVar10[0x105] != (CBaseEntity)0x0)) {
      if (param_4 != 0) {
        iVar11 = *(int *)pCVar10;
        *piVar3 = (int)pCVar10;
        pcVar14 = *(code **)(iVar11 + 0x100);
        piVar3[-1] = 0x460533;
        iVar11 = (*pcVar14)();
        if (iVar11 == param_4) goto LAB_00460507;
      }
      if ((uVar9 & 0x4030) == 0) {
        if (pCVar10[0x253] != (CBaseEntity)0x3) goto LAB_0045fdcc;
      }
      else if (pCVar10[0x253] != (CBaseEntity)0x0) {
LAB_0045fdcc:
        iVar11 = *(int *)pCVar10;
        piVar3[3] = 0;
        piVar3[2] = (int)&local_914;
        *piVar3 = (int)&local_88c;
        piVar3[1] = (int)pCVar10;
        pcVar14 = *(code **)(iVar11 + 0x244);
        piVar3[-1] = 0x45fdf3;
        (*pcVar14)();
        fVar7 = local_884;
        fVar6 = local_888;
        fVar5 = local_88c;
        uVar1 = *(uint *)(param_1 + 0x30);
        local_93c = 0;
        if (((uVar1 != 0xffffffff) &&
            (puVar13 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar13 != (undefined *)0xfffffffc))
           && (*(uint *)(puVar13 + 8) == uVar1 >> 0xc)) {
          local_93c = *(int *)(puVar13 + 4);
        }
        piVar3[2] = 0;
        piVar3[1] = 0;
        local_88c = local_914;
        local_884 = local_90c;
        local_87c = fVar5 - local_914;
        local_854 = 0;
        local_874 = fVar7 - local_90c;
        local_858 = 0;
        local_888 = local_910;
        local_878 = fVar6 - local_910;
        local_85c = 0;
        *piVar3 = local_93c;
        piVar3[-1] = (int)&local_8f0;
        local_84c = 0;
        local_864 = 0;
        local_868 = 0;
        local_86c = 0;
        local_848._0_2_ =
             CONCAT11(local_87c * local_87c + local_874 * local_874 + local_878 * local_878 != 0.0,1
                     );
        piVar3[-2] = 0x45ff6a;
        CTraceFilterSimple::CTraceFilterSimple
                  ((CTraceFilterSimple *)piVar3[-1],(IHandleEntity *)*piVar3,piVar3[1],
                   (_func_bool_IHandleEntity_ptr_int *)piVar3[2]);
        iVar11 = *enginetrace;
        piVar3[3] = (int)local_8e0;
        piVar3[2] = (int)&local_8f0;
        piVar3[-1] = (int)enginetrace;
        piVar3[1] = 0x6004003;
        *piVar3 = (int)&local_88c;
        pcVar14 = *(code **)(iVar11 + 0x14);
        piVar3[-2] = 0x45ff9d;
        (*pcVar14)();
        if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
          piVar3[5] = -0x40800000;
          *piVar3 = (int)&local_8d4;
          piVar3[4] = 1;
          piVar3[3] = 0;
          piVar3[2] = 0;
          piVar3[1] = 0xff;
          piVar3[-1] = (int)local_8e0;
          piVar3[-2] = 0x45ffe9;
          DebugDrawLine((Vector *)piVar3[-1],(Vector *)*piVar3,piVar3[1],piVar3[2],piVar3[3],
                        SUB41(piVar3[4],0),(float)piVar3[5]);
        }
        if (*(int *)(old_radius_damage._28_4_ + 0x30) == 0) {
          if (local_8b4 == 1.0) {
LAB_0046000e:
            fVar19 = 0.0;
          }
          else {
            piVar3[-1] = (int)local_8e0;
            piVar3[-2] = 0x4605e1;
            cVar8 = IsExplosionTraceBlocked((CGameTrace *)piVar3[-1]);
            if (cVar8 != '\0') {
              iVar11 = *(int *)this;
              *piVar3 = (int)pCVar10;
              piVar3[-1] = (int)this;
              pcVar14 = *(code **)(iVar11 + 0x100);
              piVar3[-2] = 0x460927;
              cVar8 = (*pcVar14)();
              piVar15 = piVar3 + -1;
              if ((cVar8 == '\0') ||
                 (piVar15 = piVar3 + -1,
                 param_3 * 0.5 * param_3 * 0.5 <
                 (fVar6 - local_910) * (fVar6 - local_910) +
                 (fVar5 - local_914) * (fVar5 - local_914) +
                 (fVar7 - local_90c) * (fVar7 - local_90c))) goto LAB_00460507;
              piVar3[-1] = (int)&local_908;
              local_908 = fVar5 - local_8d4;
              local_904 = fVar6 - local_8d0;
              local_900 = fVar7 - local_8cc;
              piVar3[-2] = 0x4609d6;
              VectorNormalize((Vector *)piVar3[-1]);
              piVar3[-1] = (int)&local_8fc;
              fVar19 = local_8c0 * local_904 - local_8c4 * local_900;
              fVar18 = local_908 * local_8c4 - local_904 * local_8c8;
              fVar17 = local_900 * local_8c8 - local_908 * local_8c0;
              local_8fc = fVar18 * local_8c4 - fVar17 * local_8c0;
              local_8f8 = local_8c0 * fVar19 - fVar18 * local_8c8;
              local_8f4 = local_8c8 * fVar17 - local_8c4 * fVar19;
              piVar3[-2] = 0x460a85;
              VectorNormalize((Vector *)piVar3[-1]);
              local_93c = 0;
              uVar1 = *(uint *)(param_1 + 0x30);
              if ((uVar1 != 0xffffffff) &&
                 ((puVar13 = g_pEntityList + (uVar1 & 0xfff) * 0x10,
                  puVar13 != (undefined *)0xfffffffc && (*(uint *)(puVar13 + 8) == uVar1 >> 0xc))))
              {
                local_93c = *(int *)(puVar13 + 4);
              }
              piVar3[2] = 0;
              piVar3[1] = 0;
              local_854 = 0;
              local_87c = local_8fc * 16.0;
              local_858 = 0;
              local_878 = local_8f8 * 16.0;
              local_85c = 0;
              local_874 = local_8f4 * 16.0;
              local_84c = 0;
              *piVar3 = local_93c;
              piVar3[-1] = (int)&local_8f0;
              local_864 = 0;
              local_868 = 0;
              local_86c = 0;
              local_88c = local_8d4;
              local_848._0_2_ =
                   CONCAT11(local_878 * local_878 + local_87c * local_87c + local_874 * local_874 !=
                            0.0,1);
              local_888 = local_8d0;
              local_884 = local_8cc;
              piVar3[-2] = 0x460bc6;
              CTraceFilterSimple::CTraceFilterSimple
                        ((CTraceFilterSimple *)piVar3[-1],(IHandleEntity *)*piVar3,piVar3[1],
                         (_func_bool_IHandleEntity_ptr_int *)piVar3[2]);
              iVar11 = *enginetrace;
              piVar3[3] = (int)local_8e0;
              piVar3[2] = (int)&local_8f0;
              piVar3[-1] = (int)enginetrace;
              piVar3[1] = 0x6004003;
              *piVar3 = (int)&local_88c;
              pcVar14 = *(code **)(iVar11 + 0x14);
              piVar3[-2] = 0x460bf9;
              (*pcVar14)();
              if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
                piVar3[5] = -0x40800000;
                *piVar3 = (int)&local_8d4;
                piVar3[4] = 1;
                piVar3[3] = 0;
                piVar3[2] = 0;
                piVar3[1] = 0xff;
                piVar3[-1] = (int)local_8e0;
                piVar3[-2] = 0x460c45;
                DebugDrawLine((Vector *)piVar3[-1],(Vector *)*piVar3,piVar3[1],piVar3[2],piVar3[3],
                              SUB41(piVar3[4],0),(float)piVar3[5]);
              }
              local_93c = 0;
              uVar1 = *(uint *)(param_1 + 0x30);
              if (((uVar1 != 0xffffffff) &&
                  (puVar13 = g_pEntityList + (uVar1 & 0xfff) * 0x10,
                  puVar13 != (undefined *)0xfffffffc)) && (*(uint *)(puVar13 + 8) == uVar1 >> 0xc))
              {
                local_93c = *(int *)(puVar13 + 4);
              }
              piVar3[2] = 0;
              piVar3[1] = 0;
              local_88c = local_8d4;
              local_888 = local_8d0;
              local_87c = fVar5 - local_8d4;
              local_854 = 0;
              local_878 = fVar6 - local_8d0;
              local_858 = 0;
              local_884 = local_8cc;
              local_874 = fVar7 - local_8cc;
              local_85c = 0;
              *piVar3 = local_93c;
              piVar3[-1] = (int)&local_8f0;
              local_84c = 0;
              local_864 = 0;
              local_868 = 0;
              local_86c = 0;
              local_848._0_2_ =
                   CONCAT11(local_87c * local_87c + local_878 * local_878 + local_874 * local_874 !=
                            0.0,1);
              piVar3[-2] = 0x460d80;
              CTraceFilterSimple::CTraceFilterSimple
                        ((CTraceFilterSimple *)piVar3[-1],(IHandleEntity *)*piVar3,piVar3[1],
                         (_func_bool_IHandleEntity_ptr_int *)piVar3[2]);
              iVar11 = *enginetrace;
              piVar3[3] = (int)local_8e0;
              piVar3[2] = (int)&local_8f0;
              *piVar3 = (int)&local_88c;
              piVar3[-1] = (int)enginetrace;
              piVar3[1] = 0x6004003;
              pcVar14 = *(code **)(iVar11 + 0x14);
              piVar3[-2] = 0x460db3;
              (*pcVar14)();
              if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
                piVar3[5] = -0x40800000;
                *piVar3 = (int)&local_8d4;
                piVar3[4] = 1;
                piVar3[3] = 0;
                piVar3[2] = 0;
                piVar3[1] = 0xff;
                piVar3[-1] = (int)local_8e0;
                piVar3[-2] = 0x460dff;
                DebugDrawLine((Vector *)piVar3[-1],(Vector *)*piVar3,piVar3[1],piVar3[2],piVar3[3],
                              SUB41(piVar3[4],0),(float)piVar3[5]);
              }
              if (local_8b4 != 1.0) {
                piVar3[-1] = (int)local_8e0;
                piVar3[-2] = 0x460e22;
                cVar8 = CGameTrace::DidHitWorld((CGameTrace *)piVar3[-1]);
                piVar15 = piVar3 + -1;
                if (cVar8 != '\0') goto LAB_00460507;
              }
            }
            pCVar4 = local_894;
            if (((local_894 == (CBaseEntity *)0x0) || (pCVar10 == local_894)) ||
               (((uVar1 = *(uint *)(local_894 + 0x220), uVar1 != 0xffffffff &&
                 ((puVar13 = g_pEntityList + (uVar1 & 0xfff) * 0x10,
                  puVar13 != (undefined *)0xfffffffc && (*(uint *)(puVar13 + 8) == uVar1 >> 0xc))))
                && (pCVar10 == *(CBaseEntity **)(puVar13 + 4))))) goto LAB_0046000e;
            local_948 = 0;
            uVar1 = *(uint *)(param_1 + 0x30);
            if (((uVar1 != 0xffffffff) &&
                (puVar13 = g_pEntityList + (uVar1 & 0xfff) * 0x10,
                puVar13 != (undefined *)0xfffffffc)) && (*(uint *)(puVar13 + 8) == uVar1 >> 0xc)) {
              local_948 = *(int *)(puVar13 + 4);
            }
            piVar3[2] = 0;
            piVar3[1] = 0;
            local_88c = local_914;
            local_87c = fVar5 - local_914;
            local_884 = local_90c;
            local_874 = fVar7 - local_90c;
            local_854 = 0;
            local_888 = local_910;
            local_878 = fVar6 - local_910;
            local_858 = 0;
            *piVar3 = local_948;
            piVar3[-1] = (int)&local_8f0;
            local_85c = 0;
            local_84c = 0;
            local_864 = 0;
            local_868 = 0;
            local_86c = 0;
            local_848._0_2_ =
                 CONCAT11(local_87c * local_87c + local_874 * local_874 + local_878 * local_878 !=
                          0.0,1);
            piVar3[-2] = 0x4607a5;
            CTraceFilterSimple::CTraceFilterSimple
                      ((CTraceFilterSimple *)piVar3[-1],(IHandleEntity *)*piVar3,piVar3[1],
                       (_func_bool_IHandleEntity_ptr_int *)piVar3[2]);
            iVar11 = *enginetrace;
            piVar3[3] = (int)local_8e0;
            piVar3[2] = (int)&local_8f0;
            *piVar3 = (int)&local_88c;
            piVar3[-1] = (int)enginetrace;
            piVar3[1] = 1;
            pcVar14 = *(code **)(iVar11 + 0x14);
            piVar3[-2] = 0x4607d8;
            (*pcVar14)();
            if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
              piVar3[5] = -0x40800000;
              *piVar3 = (int)&local_8d4;
              piVar3[4] = 1;
              piVar3[3] = 0;
              piVar3[2] = 0;
              piVar3[1] = 0xff;
              piVar3[-1] = (int)local_8e0;
              piVar3[-2] = 0x46082a;
              DebugDrawLine((Vector *)piVar3[-1],(Vector *)*piVar3,piVar3[1],piVar3[2],piVar3[3],
                            SUB41(piVar3[4],0),(float)piVar3[5]);
            }
            piVar15 = piVar3 + -1;
            if (local_8b4 != 1.0) goto LAB_00460507;
            piVar15 = *(int **)(pCVar4 + 0x238);
            if (piVar15 == (int *)0x0) {
              fVar19 = 0.25;
            }
            else {
              iVar11 = *piVar15;
              piVar3[-1] = (int)piVar15;
              pcVar14 = *(code **)(iVar11 + 0x78);
              piVar3[-2] = 0x46085b;
              lVar16 = (longdouble)(*pcVar14)();
              fVar19 = (float)lVar16 * 0.0028571428;
              piVar15 = piVar3 + -1;
              if (1.0 <= fVar19) goto LAB_00460507;
            }
          }
          fVar17 = *(float *)(param_1 + 0x3c) -
                   SQRT((local_910 - local_8d0) * (local_910 - local_8d0) +
                        (local_914 - local_8d4) * (local_914 - local_8d4) +
                        (local_90c - local_8cc) * (local_90c - local_8cc)) * local_938;
          piVar15 = piVar3 + -1;
          if (0.0 < fVar17) {
            if (local_8a9 != '\0') {
              local_8d4 = local_914;
              local_8d0 = local_910;
              local_8cc = local_90c;
              local_8b4 = 0.0;
            }
            local_88c = *(float *)param_1;
            local_854 = *(undefined4 *)(param_1 + 0x38);
            local_84c = *(undefined4 *)(param_1 + 0x40);
            local_888 = *(float *)(param_1 + 4);
            local_848 = *(undefined4 *)(param_1 + 0x44);
            local_884 = *(float *)(param_1 + 8);
            local_880 = *(float *)(param_1 + 0xc);
            local_87c = *(float *)(param_1 + 0x10);
            local_878 = *(float *)(param_1 + 0x14);
            local_874 = *(float *)(param_1 + 0x18);
            local_870 = *(undefined4 *)(param_1 + 0x1c);
            local_86c = *(undefined4 *)(param_1 + 0x20);
            local_868 = *(undefined4 *)(param_1 + 0x24);
            local_864 = *(undefined4 *)(param_1 + 0x28);
            local_860 = *(undefined4 *)(param_1 + 0x2c);
            local_85c = *(undefined4 *)(param_1 + 0x30);
            local_858 = *(uint *)(param_1 + 0x34);
            local_844 = *(uint *)(param_1 + 0x48);
            local_840 = *(undefined4 *)(param_1 + 0x4c);
            local_834 = param_3;
            local_850 = (1.0 - fVar19) * fVar17;
            local_83c = *(undefined4 *)(param_1 + 0x50);
            local_838 = *(undefined4 *)(param_1 + 0x54);
            local_830 = *(int *)(param_1 + 0x5c);
            if (((local_858 != 0xffffffff) &&
                (puVar13 = g_pEntityList + (local_858 & 0xfff) * 0x10,
                puVar13 != (undefined *)0xfffffffc)) &&
               ((*(uint *)(puVar13 + 8) == local_858 >> 0xc &&
                (piVar15 = *(int **)(puVar13 + 4), piVar15 != (int *)0x0)))) {
              iVar11 = *piVar15;
              piVar3[-1] = (int)piVar15;
              pcVar14 = *(code **)(iVar11 + 0x16c);
              piVar3[-2] = 0x4608b7;
              cVar8 = (*pcVar14)();
              if (cVar8 != '\0') {
                iVar11 = *(int *)pCVar10;
                piVar3[-1] = (int)pCVar10;
                pcVar14 = *(code **)(iVar11 + 0x140);
                piVar3[-2] = 0x4608e3;
                cVar8 = (*pcVar14)();
                if (cVar8 != '\0') {
                  piVar3[-1] = (int)&local_88c;
                  piVar3[-2] = 0x4608f5;
                  CTakeDamageInfo::AdjustPlayerDamageInflictedForSkillLevel
                            ((CTakeDamageInfo *)piVar3[-1]);
                }
              }
            }
            piVar3[-1] = (int)&local_8f0;
            local_8f0 = fVar5 - local_914;
            local_8ec = fVar6 - local_910;
            local_8e8 = fVar7 - local_90c;
            piVar3[-2] = 0x460221;
            VectorNormalize((Vector *)piVar3[-1]);
            if ((((vec3_origin == local_880) && (local_87c == DAT_01053d4c)) &&
                (local_878 == DAT_01053d50)) ||
               (((vec3_origin == local_88c && (local_888 == DAT_01053d4c)) &&
                (local_884 == DAT_01053d50)))) {
              if ((local_844 & 0x800) == 0) {
                piVar3[2] = 0x3f800000;
                piVar3[1] = (int)&local_914;
                *piVar3 = (int)&local_8f0;
                piVar3[-1] = (int)&local_88c;
                piVar3[-2] = 0x46028d;
                CalculateExplosiveDamageForce
                          ((CTakeDamageInfo *)piVar3[-1],(Vector *)*piVar3,(Vector *)piVar3[1],
                           (float)piVar3[2]);
              }
            }
            else {
              local_88c = SQRT(local_888 * local_888 + local_88c * local_88c + local_884 * local_884
                              ) * local_938;
              local_888 = local_8ec * local_88c;
              local_884 = local_8e8 * local_88c;
              local_88c = local_88c * local_8f0;
              local_880 = local_914;
              local_87c = local_910;
              local_878 = local_90c;
            }
            iVar11 = local_934 + 1;
            local_830 = local_934;
            if ((local_8b4 == 1.0) || (pCVar10 != local_894)) {
              piVar3[-1] = (int)pCVar10;
              *piVar3 = (int)&local_88c;
              piVar3[-2] = 0x46039f;
              CBaseEntity::TakeDamage((CBaseEntity *)piVar3[-1],(CTakeDamageInfo *)*piVar3);
            }
            else {
              piVar3[-2] = 0x460e5e;
              ClearMultiDamage();
              piVar3[-1] = (int)pCVar10;
              piVar3[2] = (int)local_8e0;
              piVar3[1] = (int)&local_8f0;
              *piVar3 = (int)&local_88c;
              piVar3[-2] = 0x460e84;
              CBaseEntity::DispatchTraceAttack
                        ((CTakeDamageInfo *)piVar3[-1],(Vector *)*piVar3,(CGameTrace *)piVar3[1]);
              piVar3[-2] = 0x460e89;
              ApplyMultiDamage();
            }
            piVar3[-1] = (int)pCVar10;
            piVar3[3] = (int)&local_8f0;
            piVar3[2] = (int)&local_8d4;
            piVar3[1] = (int)&local_914;
            *piVar3 = (int)&local_88c;
            piVar3[-2] = 0x4603cf;
            CBaseEntity::TraceAttackToTriggers
                      ((CBaseEntity *)piVar3[-1],(CTakeDamageInfo *)*piVar3,(Vector *)piVar3[1],
                       (Vector *)piVar3[2],(Vector *)piVar3[3]);
            uVar1 = *(uint *)(param_1 + 0x34);
            piVar15 = piVar3 + -1;
            local_934 = iVar11;
            if (((uVar1 != 0xffffffff) &&
                (puVar13 = g_pEntityList + (uVar1 & 0xfff) * 0x10, piVar15 = piVar3 + -1,
                puVar13 != (undefined *)0xfffffffc)) &&
               ((piVar15 = piVar3 + -1, *(uint *)(puVar13 + 8) == uVar1 >> 0xc &&
                (piVar2 = *(int **)(puVar13 + 4), piVar15 = piVar3 + -1, piVar2 != (int *)0x0)))) {
              iVar11 = *piVar2;
              piVar3[-1] = (int)piVar2;
              pcVar14 = *(code **)(iVar11 + 0x16c);
              piVar3[-2] = 0x46041b;
              cVar8 = (*pcVar14)();
              piVar15 = piVar3 + -1;
              if ((cVar8 != '\0') && (piVar15 = piVar3 + -1, local_894 != (CBaseEntity *)0x0)) {
                iVar11 = *(int *)local_894;
                piVar3[-1] = (int)local_894;
                pcVar14 = *(code **)(iVar11 + 0x144);
                piVar3[-2] = 0x46043c;
                iVar11 = (*pcVar14)();
                piVar15 = piVar3 + -1;
                if (iVar11 != 0) {
                  uVar1 = *(uint *)(param_1 + 0x34);
                  if ((((uVar1 == 0xffffffff) ||
                       (puVar13 = g_pEntityList + (uVar1 & 0xfff) * 0x10,
                       puVar13 == (undefined *)0xfffffffc)) ||
                      (*(uint *)(puVar13 + 8) != uVar1 >> 0xc)) ||
                     (piVar15 = *(int **)(puVar13 + 4), piVar15 == (int *)0x0)) {
LAB_00460471:
                    piVar15 = (int *)0x0;
                  }
                  else {
                    iVar11 = *piVar15;
                    piVar3[-1] = (int)piVar15;
                    pcVar14 = *(code **)(iVar11 + 0x16c);
                    piVar3[-2] = 0x4605c6;
                    cVar8 = (*pcVar14)();
                    if (cVar8 == '\0') goto LAB_00460471;
                  }
                  piVar3[-1] = (int)piVar15;
                  piVar3[-2] = 0x46047b;
                  iVar11 = CBaseCombatCharacter::GetActiveWeapon((CBaseCombatCharacter *)piVar3[-1])
                  ;
                  if (iVar11 == 0) {
                    local_928 = 1;
                    pcVar14 = *(code **)(*(int *)gamestats + 0x78);
                    pcVar12 = "NULL";
                  }
                  else {
                    if (*(char **)(iVar11 + 0x7c) == "weapon_smg1") {
LAB_00460888:
                      local_928 = 0;
                      pcVar14 = *(code **)(*(int *)gamestats + 0x78);
                    }
                    else {
                      *piVar3 = (int)"weapon_smg1";
                      piVar3[-1] = iVar11;
                      piVar3[-2] = 0x4604a0;
                      cVar8 = CBaseEntity::ClassMatchesComplex
                                        ((CBaseEntity *)piVar3[-1],(char *)*piVar3);
                      if (cVar8 != '\0') goto LAB_00460888;
                      local_928 = 1;
                      pcVar14 = *(code **)(*(int *)gamestats + 0x78);
                    }
                    piVar3[-1] = (int)piVar15;
                    piVar3[-2] = 0x4604ca;
                    iVar11 = CBaseCombatCharacter::GetActiveWeapon
                                       ((CBaseCombatCharacter *)piVar3[-1]);
                    pcVar12 = *(char **)(iVar11 + 0x7c);
                    if (pcVar12 == (char *)0x0) {
                      pcVar12 = "";
                    }
                  }
                  piVar3[2] = (int)pcVar12;
                  piVar3[3] = (int)param_1;
                  *piVar3 = (int)piVar15;
                  piVar3[-1] = (int)gamestats;
                  piVar3[1] = local_928;
                  piVar3[-2] = 0x4604fc;
                  (*pcVar14)();
                  piVar15 = piVar3 + -1;
                }
              }
            }
          }
        }
        else if ((local_8b4 == 1.0) || (piVar15 = piVar3 + -1, pCVar10 == local_894))
        goto LAB_0046000e;
      }
    }
LAB_00460507:
    local_824[0] = local_824[0] + 1;
    *piVar15 = (int)local_824;
    piVar15[-1] = 0x46050f;
    pCVar10 = (CBaseEntity *)CEntitySphereQuery::GetCurrentEntity((CEntitySphereQuery *)*piVar15);
    piVar3 = piVar15;
  } while( 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)