L L4D2node

CTerrorMeleeWeapon::TestMeleeSwingCollision

0x00569620 · 5232 bytes · __thiscall

_ZN18CTerrorMeleeWeapon23TestMeleeSwingCollisionERK6Vector

Decompiled

undefined (2 params)

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* CTerrorMeleeWeapon::TestMeleeSwingCollision(Vector const&) */

char __thiscall
CTerrorMeleeWeapon::TestMeleeSwingCollision(CTerrorMeleeWeapon *this,Vector *param_1)

{
  float fVar1;
  float fVar2;
  float fVar3;
  code *pcVar4;
  char cVar5;
  char cVar6;
  IHandleEntity *pIVar7;
  int iVar8;
  undefined4 *puVar9;
  Vector *pVVar10;
  int iVar11;
  int *piVar12;
  CBaseEntity *this_00;
  char *pcVar13;
  uint uVar14;
  undefined1 *puVar15;
  int *piVar16;
  longdouble lVar17;
  float fVar18;
  int iVar19;
  Vector *pVVar20;
  float local_214;
  undefined **local_210;
  float *local_20c;
  Vector *local_204;
  int *local_1f8;
  float local_1f4;
  float local_1f0;
  float local_1ec;
  float local_1e8;
  float local_1e4;
  float local_1e0;
  float local_1dc;
  float local_1d8;
  float local_1d4;
  float local_1d0;
  float local_1cc;
  float local_1c8;
  undefined4 local_1c4;
  undefined4 local_1c0;
  undefined4 local_1bc;
  float local_1b8;
  float local_1b4;
  float local_1b0;
  float local_1ac;
  float local_1a8;
  float local_1a4;
  float local_1a0;
  float local_19c;
  float local_198;
  float local_194;
  float local_190;
  float local_18c;
  float local_188;
  float local_184;
  float local_180;
  int local_17c;
  int local_178;
  int local_170;
  int local_16c;
  int local_168;
  undefined **local_150 [4];
  undefined4 local_140 [3];
  undefined4 local_134;
  undefined4 local_130;
  float local_12c;
  float local_128;
  float local_124;
  float local_11c;
  float local_118;
  float local_114;
  undefined4 local_10c;
  undefined4 local_108;
  undefined4 local_104;
  undefined4 local_fc;
  undefined4 local_f8;
  undefined4 local_f4;
  undefined4 local_ec;
  undefined1 local_e8;
  undefined1 local_e7;
  Vector local_d0 [12];
  undefined **local_c4;
  float local_c0;
  float local_bc;
  float local_a4;
  char local_9a;
  char local_99;
  int local_8c;
  CTakeDamageInfo *local_84;
  undefined **local_7c;
  float local_78;
  float local_74;
  float local_70;
  float local_6c;
  float local_68;
  int *local_64;
  float local_60;
  float local_5c;
  float local_58;
  float local_54;
  float local_50;
  float local_4c;
  float local_48;
  float local_44;
  int local_40;
  float local_3c;
  undefined4 local_38;
  uint local_34;
  undefined4 local_30;
  undefined4 local_2c;
  undefined4 local_28;
  undefined1 local_24;
  undefined1 local_23;
  
  pIVar7 = (IHandleEntity *)CTerrorWeapon::GetPlayerOwner((CTerrorWeapon *)this);
  if ((pIVar7 == (IHandleEntity *)0x0) ||
     (iVar8 = CMeleeWeaponInfoStore::GetMeleeWeaponInfo
                        ((CMeleeWeaponInfoStore *)g_MeleeWeaponInfoStore,*(int *)(this + 0x17e0)),
     iVar8 == 0)) {
    return '\0';
  }
  (**(code **)(*(int *)pIVar7 + 0x478))();
  fVar18 = *(float *)(melee_range._28_4_ + 0x2c);
  puVar9 = (undefined4 *)(**(code **)(*(int *)pIVar7 + 0x238))();
  local_1c4 = *puVar9;
  local_1c0 = puVar9[1];
  local_1bc = puVar9[2];
  AngleVectors((QAngle *)&local_1c4,(Vector *)&local_1e8,(Vector *)&local_1dc,(Vector *)&local_1d0);
  local_1b8 = *(float *)param_1 - local_1f4;
  local_1b4 = *(float *)(param_1 + 4) - local_1f0;
  local_1b0 = *(float *)(param_1 + 8) - local_1ec;
  VectorNormalize((Vector *)&local_1b8);
  local_1ac = *(float *)param_1;
  local_1a8 = *(float *)(param_1 + 4);
  local_1a4 = *(float *)(param_1 + 8);
  VectorNormalize((Vector *)&local_1ac);
  fVar1 = *(float *)(param_1 + 4);
  fVar2 = *(float *)param_1;
  fVar18 = (local_1a8 * local_1e4 + local_1ac * local_1e8 + local_1a4 * local_1e0) * fVar18;
  fVar3 = *(float *)(param_1 + 8);
  (**(code **)(*(int *)pIVar7 + 0x478))();
  puVar15 = &stack0xfffffdac;
  piVar16 = (int *)&stack0xfffffdac;
  local_1a0 = fVar2 * fVar18 + (float)local_7c;
  local_198 = fVar18 * fVar3 + local_74;
  local_19c = fVar1 * fVar18 + local_78;
  uVar14 = *(uint *)(*(int *)(this + 0x1824) + 0xc);
  if (((uVar14 < 8) &&
      ((uVar14 = 1 << ((byte)uVar14 & 0x1f), (uVar14 & 0x91) != 0 || ((uVar14 & 0x62) != 0)))) ||
     ((uVar14 = *(uint *)(*(int *)(this + 0x1824) + 0x10), uVar14 < 8 &&
      ((uVar14 = 1 << ((byte)uVar14 & 0x1f), (uVar14 & 0x91) != 0 || ((uVar14 & 0x62) != 0)))))) {
    local_194 = -16.0;
    local_188 = 16.0;
  }
  else {
    local_194 = -4.0;
    local_188 = 4.0;
  }
  local_190 = local_194;
  local_18c = local_194;
  local_184 = local_188;
  local_180 = local_188;
  CTraceFilterSimpleList::CTraceFilterSimpleList((CTraceFilterSimpleList *)local_150,0);
  local_150[0] = &PTR_ShouldHitEntity_00c2e780;
                    /* try { // try from 005698b5 to 00569f95 has its CatchHandler @ 0056aba8 */
  CTraceFilterSimpleList::AddEntityToIgnore((CTraceFilterSimpleList *)local_150,pIVar7);
  if (*(char *)(*(int *)(this + 0x1824) + 0x20) == '\0') {
    local_3c = 0.0;
    local_6c = local_1a0 - local_1f4;
    local_64 = (int *)(local_198 - local_1ec);
    local_68 = local_19c - local_1f0;
    local_48 = (local_184 - local_190) * 0.5;
    local_4c = (local_188 - local_194) * 0.5;
    local_5c = (local_188 + local_194) * 0.5;
    local_44 = (local_180 - local_18c) * 0.5;
    local_58 = (local_184 + local_190) * 0.5;
    local_54 = (local_180 + local_18c) * 0.5;
    local_7c = (undefined **)(local_1f4 + local_5c);
    local_74 = local_1ec + local_54;
    local_78 = local_1f0 + local_58;
    local_5c = -local_5c;
    local_58 = -local_58;
    local_54 = -local_54;
    local_38 = CONCAT31(CONCAT21(local_38._2_2_,
                                 (float)local_64 * (float)local_64 + local_6c * local_6c +
                                 local_68 * local_68 != 0.0),
                        local_44 * local_44 + local_48 * local_48 + local_4c * local_4c < 1e-06);
    (**(code **)(*enginetrace + 0x14))();
    if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
      iVar19 = 0xff;
      goto LAB_00569bfd;
    }
  }
  else {
    local_ec = 0;
    local_f4 = 0;
    local_f8 = 0;
    local_fc = 0;
    local_118 = local_19c - local_1f0;
    local_e8 = 1;
    local_114 = local_198 - local_1ec;
    local_104 = 0;
    local_108 = 0;
    local_11c = local_1a0 - local_1f4;
    local_10c = 0;
    local_12c = local_1f4;
    local_128 = local_1f0;
    local_124 = local_1ec;
    local_e7 = local_118 * local_118 + local_114 * local_114 + local_11c * local_11c != 0.0;
    (**(code **)(*enginetrace + 0x14))();
    if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
      iVar19 = 0;
LAB_00569bfd:
      local_204 = local_d0;
      DebugDrawLine(local_204,(Vector *)&local_c4,0xff,iVar19,0,true,-1.0);
    }
  }
  local_204 = local_d0;
  if (*(int *)(melee_show_swing._28_4_ + 0x30) != 0) {
    uVar14 = 0;
    if ((1.0 <= local_a4) && (local_9a == '\0')) {
      uVar14 = -(uint)(local_99 == '\0') & 0xff;
    }
    if (*(int *)(melee_show_swing._28_4_ + 0x30) < 2) {
      pVVar20 = (Vector *)&local_12c;
      pVVar10 = (Vector *)&local_7c;
      local_12c = 0.5;
      local_128 = 0.5;
      local_124 = 0.5;
      local_7c = (undefined **)0xbf000000;
      local_78 = -0.5;
      local_74 = -0.5;
    }
    else {
      pVVar20 = (Vector *)&local_188;
      pVVar10 = (Vector *)&local_194;
    }
    NDebugOverlay::SweptBox
              ((Vector *)&local_1f4,(Vector *)&local_1a0,pVVar10,pVVar20,(QAngle *)&vec3_angle,0xff,
               uVar14,0,0xff,3.0);
  }
  if ((*(byte *)(iVar8 + 0x124) & 4) != 0) {
    ClipTraceToTongue::ClipTraceToTongue
              ((ClipTraceToTongue *)&local_7c,local_204,(Vector *)&local_c4);
    ForEachTerrorPlayer<ClipTraceToTongue>((ClipTraceToTongue *)&local_7c);
    if ((local_7c != (undefined **)0x0) && (local_6c < *(float *)(TongueBulletRadius._28_4_ + 0x2c))
       ) {
      (**(code **)(*local_7c + 0x398))();
    }
  }
  if ((((1.0 <= local_a4) && (local_9a == '\0')) && (local_99 == '\0')) ||
     ((local_84 == (CTakeDamageInfo *)0x0 ||
      (cVar5 = ShouldHitEntity(this,(CBaseEntity *)local_84), cVar5 == '\0')))) {
    cVar5 = '\0';
    goto LAB_0056a20f;
  }
  if (*(char *)(*(int *)(this + 0x1824) + 0x20) == '\0') {
    iVar19 = *(int *)(this + 0x17f4);
    if (iVar19 < 1) {
LAB_00569d58:
      (**(code **)(*(int *)this + 0x6d8))();
      goto LAB_00569d7f;
    }
    piVar12 = *(int **)(this + 0x17e8);
    piVar16 = (int *)&stack0xfffffdac;
    if (local_84 != (CTakeDamageInfo *)*piVar12) {
      iVar11 = 0;
      do {
        iVar11 = iVar11 + 1;
        if (iVar11 == iVar19) goto LAB_00569d58;
      } while (local_84 != (CTakeDamageInfo *)piVar12[iVar11]);
      piVar16 = (int *)&stack0xfffffdac;
      if (iVar11 == -1) goto LAB_00569d58;
      goto LAB_00569d9d;
    }
  }
  else {
                    /* try { // try from 0056a5fa to 0056a8b4 has its CatchHandler @ 0056abb5 */
    lVar17 = (longdouble)GetDamageForVictim(this,(CBaseEntity *)local_84);
    iVar19 = *(int *)(iVar8 + 0x124);
    (**(code **)(*(int *)pIVar7 + 0x478))();
    puVar15 = &stack0xfffffda8;
    CTakeDamageInfo::CTakeDamageInfo
              ((CTakeDamageInfo *)&local_7c,(CBaseEntity *)this,(CBaseEntity *)pIVar7,
               (CBaseEntity *)this,(Vector *)&vec3_origin,(Vector *)&local_17c,(float)lVar17,iVar19,
               0,(Vector *)0x0);
    if (0 < *(int *)(this + 0x17f4)) {
      if (local_84 != (CTakeDamageInfo *)**(int **)(this + 0x17e8)) {
        iVar19 = 0;
        do {
          iVar19 = iVar19 + 1;
          if (iVar19 == *(int *)(this + 0x17f4)) goto LAB_0056a6b0;
        } while (local_84 != (CTakeDamageInfo *)(*(int **)(this + 0x17e8))[iVar19]);
        if (iVar19 == -1) goto LAB_0056a6b0;
      }
      local_40 = 0;
    }
LAB_0056a6b0:
    this_00 = (CBaseEntity *)__dynamic_cast();
    if ((this_00 != (CBaseEntity *)0x0) &&
       (iVar19 = CBaseEntity::GetTeamNumber(this_00), iVar19 == 3)) {
      local_e8 = 1;
      local_f4 = 0;
      local_12c = local_1f4;
      local_128 = local_1f0;
      local_118 = local_19c - local_1f0;
      local_f8 = 0;
      local_11c = local_1a0 - local_1f4;
      local_fc = 0;
      local_ec = 0;
      local_114 = local_198 - local_1ec;
      local_104 = 0;
      local_108 = 0;
      local_124 = local_1ec;
      local_10c = 0;
      local_e7 = local_11c * local_11c + local_118 * local_118 + local_114 * local_114 != 0.0;
      (**(code **)(*(int *)this_00 + 0x44))();
      if ((local_34 & 0x84) != 0) {
        uVar14 = local_34 >> 2 & 1;
        if (uVar14 != 0) {
          local_34 = local_34 | 0x80000000;
        }
        if (local_8c != 0) {
          CRecipientFilter::CRecipientFilter((CRecipientFilter *)&local_170);
                    /* try { // try from 0056aa78 to 0056aab9 has its CatchHandler @ 0056abb7 */
          CRecipientFilter::MakeReliable((CRecipientFilter *)&local_170);
          CRecipientFilter::AddRecipient((CRecipientFilter *)&local_170,(CBasePlayer *)pIVar7);
          pcVar13 = "MeleeSlashSplatter";
          if ((char)uVar14 == '\0') {
            pcVar13 = "MeleeClubSplatter";
          }
          UserMessageBegin((IRecipientFilter *)&local_170,pcVar13);
          MessageWriteByte(1);
          MessageEnd();
          CRecipientFilter::~CRecipientFilter((CRecipientFilter *)&local_170);
        }
      }
    }
    iVar19 = *(int *)(this + 0x1824);
    fVar18 = *(float *)(iVar19 + 0x2c);
    local_124 = *(float *)(iVar19 + 0x28);
    fVar1 = *(float *)(iVar19 + 0x24);
    local_12c = local_1dc * local_124;
    local_128 = local_1d8 * local_124;
    local_124 = local_124 * local_1d4;
    local_214 = *(float *)(melee_force_scalar._28_4_ + 0x2c);
    local_210 = (undefined **)((local_1e8 * fVar1 + local_1d0 * fVar18 + local_12c) * local_214);
    local_20c = (float *)((local_1cc * fVar18 + local_128 + local_1e4 * fVar1) * local_214);
    local_214 = local_214 * (fVar1 * local_1e0 + fVar18 * local_1c8 + local_124);
    local_58 = local_12c;
    local_54 = local_128;
    local_50 = local_124;
    iVar19 = (**(code **)(*(int *)local_84 + 0x144))();
    if (iVar19 != 0) {
      fVar18 = *(float *)(melee_force_scalar_combat_character._28_4_ + 0x2c);
      local_210 = (undefined **)((float)local_210 * fVar18);
      local_20c = (float *)((float)local_20c * fVar18);
      local_214 = fVar18 * local_214;
    }
    local_7c = local_210;
    local_78 = (float)local_20c;
    local_74 = local_214;
                    /* try { // try from 0056a913 to 0056aa74 has its CatchHandler @ 0056abb5 */
    if ((400.0 < *(float *)(local_84 + 0x23c)) ||
       ((cVar6 = CTerrorGameRules::IsCurrentRoundActive(g_pGameRules), cVar6 == '\0' &&
        (cVar6 = CTerrorGameRules::IsSurvivalMode(), cVar6 != '\0')))) {
      local_34 = local_34 | 0x800;
      local_7c = (undefined **)0x0;
      local_78 = 0.0;
      local_74 = 0.0;
    }
    ClearMultiDamage();
    CBaseEntity::DispatchTraceAttack(local_84,(Vector *)&local_7c,(CGameTrace *)&local_12c);
    ApplyMultiDamage();
LAB_00569d7f:
    iVar19 = *(int *)(this + 0x17f4);
    piVar16 = (int *)puVar15;
    if (iVar19 < 1) {
LAB_00569db8:
      if (*(char *)(*(int *)(this + 0x1824) + 0x20) != '\0') {
        iVar19 = *(int *)local_84;
        *piVar16 = (int)local_84;
        pcVar4 = *(code **)(iVar19 + 0x144);
        piVar16[-1] = 0x569dd6;
        iVar19 = (*pcVar4)();
        if (iVar19 == 0) {
          iVar8 = *(int *)this;
          piVar16[2] = 0;
          piVar16[1] = 10;
          *piVar16 = (int)this;
                    /* try { // try from 0056a900 to 0056a905 has its CatchHandler @ 0056aba8 */
          pcVar4 = *(code **)(iVar8 + 0x4b8);
          piVar16[-1] = 0x56a906;
          (*pcVar4)();
        }
        else {
          iVar19 = *(int *)this;
          piVar16[2] = 0;
          piVar16[1] = 9;
          *piVar16 = (int)this;
          pcVar4 = *(code **)(iVar19 + 0x4b8);
          piVar16[-1] = 0x569dff;
          (*pcVar4)();
          uVar14 = *(uint *)(iVar8 + 0x124) >> 2 & 1;
          cVar6 = (char)uVar14;
          if ((*(uint *)(iVar8 + 0x124) & 0x80) == 0) {
            if (cVar6 != '\0') goto LAB_00569e25;
          }
          else {
            if (cVar6 != '\0') {
LAB_00569e25:
              local_24 = 0;
              local_34 = local_34 & 0xffff0000;
              local_7c = local_c4;
              local_70 = 0.0;
              local_78 = local_c0;
              local_6c = 0.0;
              local_68 = 0.0;
              local_64 = (int *)0x0;
              local_60 = 0.0;
              local_5c = 0.0;
              local_58 = 0.0;
              local_54 = 0.0;
              local_50 = 0.0;
              local_4c = 0.0;
              local_44 = 1.0;
              local_38 = 0;
              local_40 = 0;
              local_3c = 0.0;
              local_30 = 0;
              local_2c = 0;
              local_28 = 0;
              local_23 = 0;
              local_74 = local_bc;
              if (*(int *)(this + 0x30) == 0) {
                local_48 = 0.0;
              }
              else {
                local_48 = (float)(*(int *)(this + 0x30) - *(int *)(gpGlobals + 0x58) >> 4);
              }
              piVar16[1] = (int)&local_7c;
              *piVar16 = (int)"bloodslash";
              piVar16[-1] = 0x569f01;
              DispatchEffect((char *)*piVar16,(CEffectData *)piVar16[1]);
            }
            *piVar16 = (int)local_84;
            piVar16[-1] = 0x569f09;
            iVar8 = CBaseEntity::GetTeamNumber((CBaseEntity *)*piVar16);
            if (iVar8 == 3) {
              iVar8 = *(int *)pIVar7;
              piVar16[2] = 0;
              piVar16[1] = 1;
              *piVar16 = (int)pIVar7;
              piVar16[3] = ((int)(uVar14 << 0x1f) >> 0x1f) + 2;
              pcVar4 = *(code **)(iVar8 + 0x8f0);
              piVar16[-1] = 0x569f36;
              (*pcVar4)();
              iVar8 = *(int *)local_84;
              *piVar16 = (int)local_84;
              pcVar4 = *(code **)(iVar8 + 0x14c);
              piVar16[-1] = 0x569f41;
              iVar8 = (*pcVar4)();
              if (iVar8 != 0) {
                *piVar16 = iVar8;
                piVar16[-1] = 0x569f4f;
                cVar6 = Infected::IsUncommonCommon((Infected *)*piVar16);
                if (cVar6 != '\0') {
                  *piVar16 = iVar8;
                    /* try { // try from 0056aad1 to 0056aaf4 has its CatchHandler @ 0056aba8 */
                  piVar16[-1] = 0x56aad6;
                  iVar19 = CBaseEntity::GetGender((CBaseEntity *)*piVar16);
                  if (iVar19 == 0xf) {
                    iVar19 = *(int *)(iVar8 + 0x1a3c);
                    piVar16[1] = (int)pIVar7;
                    *piVar16 = iVar8 + 0x1a3c;
                    pcVar4 = *(code **)(iVar19 + 0x74);
                    piVar16[-1] = 0x56aaf5;
                    (*pcVar4)();
                  }
                }
              }
            }
            iVar8 = *(int *)local_84;
            *piVar16 = (int)local_84;
            pcVar4 = *(code **)(iVar8 + 0x144);
            piVar16[-1] = 0x569f62;
            iVar8 = (*pcVar4)();
            if (iVar8 != 0) {
              fVar18 = *(float *)(melee_collateral_shove_count._28_4_ + 0x30);
              iVar8 = *(int *)local_84;
              *piVar16 = (int)local_84;
              pcVar4 = *(code **)(iVar8 + 0x144);
              piVar16[-1] = 0x569f83;
              piVar12 = (int *)(*pcVar4)();
              if (((byte)local_84[0x14d] & 8) != 0) {
                *piVar16 = (int)local_84;
                piVar16[-1] = 0x569f96;
                CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*piVar16);
              }
              local_7c = &PTR_operator___00c51378;
              local_60 = 0.0;
              local_5c = 0.0;
              local_58 = 0.0;
              local_54 = 0.0;
              local_50 = 0.0;
              local_4c = 0.0;
              local_48 = 0.0;
              local_44 = 0.0;
              local_40 = 0;
              local_3c = 0.0;
              local_78 = *(float *)(local_84 + 0x2e0);
              local_74 = *(float *)(local_84 + 0x2e4);
              local_70 = *(float *)(local_84 + 0x2e8);
              local_6c = 5184.0;
                    /* try { // try from 0056a02f to 0056a0cf has its CatchHandler @ 0056aba1 */
              piVar16[-1] = 0x56a034;
              local_68 = fVar18;
              local_64 = piVar12;
              iVar8 = TheNextBots();
              uVar14 = (uint)*(ushort *)(iVar8 + 0x10);
              if (uVar14 != 0xffff) {
                iVar19 = *(int *)(iVar8 + 4);
                do {
                  piVar12 = *(int **)(iVar19 + uVar14 * 8);
                  iVar19 = *piVar12;
                  *piVar16 = (int)piVar12;
                    /* try { // try from 0056a1c9 to 0056a1ce has its CatchHandler @ 0056aba1 */
                  pcVar4 = *(code **)(iVar19 + 0xb4);
                  piVar16[-1] = 0x56a1cf;
                  local_1f8 = (int *)(*pcVar4)();
                  local_17c = 0;
                  local_178 = 0;
                  if (___atan2f_finite == 0) {
                    local_168 = 0;
                  }
                  else {
                    piVar16[0xb] = (int)"CollectClosestCommonInfectedScan()";
                    piVar16[10] = (int)"Unaccounted";
                    piVar16[9] = (int)"(%s)%s";
                    piVar16[8] = (int)&CollectClosestCommonInfectedScan::
                                       operator()(CBaseCombatCharacter*)::tm_fmt;
                    piVar16[7] = 0x58b;
                    piVar16[6] = (int)"/data/src/game/server/terror/terrorfunctorutils.h";
                    piVar16[5] = 0;
                    piVar16[3] = 0;
                    piVar16[4] = 0;
                    piVar16[2] = 0;
                    piVar16[1] = (int)&local_17c;
                    *piVar16 = ___atan2f_finite;
                    pcVar4 = *(code **)(___atan2f_finite + 0x50);
                    piVar16[-1] = 0x56a0d0;
                    (*pcVar4)();
                    local_168 = ___atan2f_finite;
                  }
                  iVar19 = _DAT_0105db00;
                  local_170 = local_17c;
                  local_16c = local_178;
                  if ((_DAT_0105d154 != 0) || (DAT_0105d158 == '\0')) {
                    /* try { // try from 0056a10d to 0056a111 has its CatchHandler @ 0056abac */
                    piVar16[-1] = 0x56a112;
                    iVar11 = ThreadGetCurrentId();
                    if (iVar19 == iVar11) {
                      if ((char *)*_DAT_0105d15c != "CollectClosestCommonInfectedScan()") {
                        piVar16[4] = 0;
                        piVar16[3] = (int)"Unaccounted";
                        piVar16[2] = 1;
                        piVar16[1] = (int)"CollectClosestCommonInfectedScan()";
                        *piVar16 = (int)_DAT_0105d15c;
                    /* try { // try from 0056a5c0 to 0056a5d1 has its CatchHandler @ 0056abac */
                        piVar16[-1] = 0x56a5c5;
                        _DAT_0105d15c =
                             (int *)CVProfNode::GetSubNode
                                              ((char *)*piVar16,piVar16[1],(char *)piVar16[2],
                                               piVar16[3]);
                      }
                      *piVar16 = (int)_DAT_0105d15c;
                      piVar16[-1] = 0x56a5d2;
                      CVProfNode::EnterScope();
                      DAT_0105d158 = '\0';
                    }
                  }
                  iVar19 = *local_1f8;
                  *piVar16 = (int)local_1f8;
                    /* try { // try from 0056a125 to 0056a12a has its CatchHandler @ 0056aafa */
                  pcVar4 = *(code **)(iVar19 + 300);
                  piVar16[-1] = 0x56a12b;
                  cVar6 = (*pcVar4)();
                  piVar12 = local_1f8;
                  if (cVar6 != '\0') {
                    *piVar16 = (int)local_1f8;
                    /* try { // try from 0056a3b1 to 0056a497 has its CatchHandler @ 0056aafa */
                    piVar16[-1] = 0x56a3b6;
                    iVar19 = CBaseEntity::GetTeamNumber((CBaseEntity *)*piVar16);
                    if (iVar19 == 3) {
                      iVar19 = *piVar12;
                      *piVar16 = (int)piVar12;
                      pcVar4 = *(code **)(iVar19 + 0x544);
                      piVar16[-1] = 0x56a3ca;
                      iVar19 = (*pcVar4)();
                      piVar12 = local_1f8;
                      if ((iVar19 == 0) && (local_64 != local_1f8)) {
                        if ((*(byte *)((int)local_1f8 + 0x14d) & 8) != 0) {
                          *piVar16 = (int)local_1f8;
                          piVar16[-1] = 0x56a498;
                          CBaseEntity::CalcAbsolutePosition((CBaseEntity *)*piVar16);
                        }
                        local_12c = (local_78 - (float)piVar12[0xb8]) *
                                    (local_78 - (float)piVar12[0xb8]) +
                                    (local_70 - (float)piVar12[0xba]) *
                                    (local_70 - (float)piVar12[0xba]) +
                                    (local_74 - (float)piVar12[0xb9]) *
                                    (local_74 - (float)piVar12[0xb9]);
                        if ((local_12c <= local_6c) && ((int)local_54 < (int)local_68)) {
                          piVar16[1] = (int)local_54;
                          piVar16[2] = (int)&local_1f8;
                          *piVar16 = (int)&local_60;
                          piVar16[-1] = 0x56a463;
                          CUtlVector<CBaseCombatCharacter*,CUtlMemory<CBaseCombatCharacter*,int>>::
                          InsertBefore((CUtlVector<CBaseCombatCharacter*,CUtlMemory<CBaseCombatCharacter*,int>>
                                        *)*piVar16,piVar16[1],(CBaseCombatCharacter **)piVar16[2]);
                          piVar16[2] = (int)&local_12c;
                          piVar16[1] = local_40;
                          *piVar16 = (int)&local_4c;
                          piVar16[-1] = 0x56a482;
                          CUtlVector<float,CUtlMemory<float,int>>::InsertBefore
                                    ((CUtlVector<float,CUtlMemory<float,int>> *)*piVar16,piVar16[1],
                                     (float *)piVar16[2]);
                        }
                      }
                    }
                  }
                  iVar19 = _DAT_0105db00;
                  if ((DAT_0105d158 == '\0') || (_DAT_0105d154 != 0)) {
                    piVar16[-1] = 0x56a151;
                    iVar11 = ThreadGetCurrentId();
                    if (iVar19 == iVar11) {
                      *piVar16 = (int)_DAT_0105d15c;
                      piVar16[-1] = 0x56a565;
                      cVar6 = CVProfNode::ExitScope();
                      if (cVar6 != '\0') {
                        _DAT_0105d15c = (int *)_DAT_0105d15c[0x19];
                      }
                      DAT_0105d158 = _DAT_0105d15c == (int *)0x105d160;
                    }
                  }
                  if (local_168 != 0) {
                    piVar16[5] = 0;
                    piVar16[4] = 0;
                    piVar16[3] = 0;
                    *piVar16 = local_168;
                    piVar16[1] = local_170;
                    piVar16[2] = local_16c;
                    pcVar4 = *(code **)(local_168 + 0x54);
                    piVar16[-1] = 0x56a195;
                    (*pcVar4)();
                  }
                  iVar19 = *(int *)(iVar8 + 4);
                  uVar14 = (uint)*(ushort *)(iVar19 + 6 + uVar14 * 8);
                } while (uVar14 != 0xffff);
              }
              local_20c = &local_4c;
              local_210 = (undefined **)&local_60;
              if (0 < (int)local_54) {
                iVar8 = 0;
                do {
                  piVar12 = *(int **)((int)local_60 + iVar8 * 4);
                  if (piVar12 != (int *)0x0) {
                    iVar19 = *piVar12;
                    *piVar16 = (int)piVar12;
                    /* try { // try from 0056a4cf to 0056a4ee has its CatchHandler @ 0056aba1 */
                    pcVar4 = *(code **)(iVar19 + 0x14c);
                    piVar16[-1] = 0x56a4d5;
                    iVar19 = (*pcVar4)();
                    if (iVar19 != 0) {
                      iVar11 = *(int *)(iVar19 + 0x1a3c);
                      piVar16[1] = (int)pIVar7;
                      *piVar16 = iVar19 + 0x1a3c;
                      pcVar4 = *(code **)(iVar11 + 0x74);
                      piVar16[-1] = 0x56a4ef;
                      (*pcVar4)();
                    }
                  }
                  iVar8 = iVar8 + 1;
                } while (iVar8 < (int)local_54);
              }
              local_7c = &PTR_operator___00c51378;
              local_40 = 0;
              *piVar16 = (int)local_20c;
              piVar16[-1] = 0x56a513;
              CUtlMemory<float,int>::Purge((CUtlMemory<float,int> *)*piVar16);
              *piVar16 = (int)local_20c;
              local_3c = local_4c;
              piVar16[-1] = 0x56a521;
              CUtlMemory<float,int>::Purge((CUtlMemory<float,int> *)*piVar16);
              local_54 = 0.0;
              *piVar16 = (int)local_210;
              piVar16[-1] = 0x56a536;
              CUtlMemory<CBaseCombatCharacter*,int>::Purge
                        ((CUtlMemory<CBaseCombatCharacter*,int> *)*piVar16);
              *piVar16 = (int)local_210;
              local_50 = local_60;
              piVar16[-1] = 0x56a544;
              CUtlMemory<CBaseCombatCharacter*,int>::Purge
                        ((CUtlMemory<CBaseCombatCharacter*,int> *)*piVar16);
            }
          }
          *piVar16 = (int)this;
                    /* try { // try from 0056a54a to 0056a54e has its CatchHandler @ 0056aba8 */
          piVar16[-1] = 0x56a54f;
          CTerrorWeapon::BloodyWeapon_Increment((CTerrorWeapon *)*piVar16);
        }
      }
    }
    else {
      piVar12 = *(int **)(this + 0x17e8);
      if (local_84 != (CTakeDamageInfo *)*piVar12) {
LAB_00569d9d:
        iVar11 = 0;
        do {
          iVar11 = iVar11 + 1;
          if (iVar19 <= iVar11) goto LAB_00569db8;
        } while (local_84 != (CTakeDamageInfo *)piVar12[iVar11]);
        if (iVar11 == -1) goto LAB_00569db8;
      }
    }
  }
  piVar16[1] = (int)local_84;
  *piVar16 = (int)this;
                    /* try { // try from 0056a29b to 0056a321 has its CatchHandler @ 0056aba8 */
  piVar16[-1] = 0x56a2a0;
  RememberEntityAsHitThisSwing((CTerrorMeleeWeapon *)*piVar16,(IHandleEntity *)piVar16[1]);
LAB_0056a20f:
  local_150[0] = &PTR_ShouldHitEntity_00c54590;
  *piVar16 = (int)local_140;
  local_134 = 0;
  piVar16[-1] = 0x56a231;
  CUtlMemory<IHandleEntity*,int>::Purge((CUtlMemory<IHandleEntity*,int> *)*piVar16);
  *piVar16 = (int)local_140;
  local_130 = local_140[0];
  piVar16[-1] = 0x56a245;
  CUtlMemory<IHandleEntity*,int>::Purge((CUtlMemory<IHandleEntity*,int> *)*piVar16);
  return cVar5;
}

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)