L L4D2node

CTerrorPlayer::OnTakeDamageInternal

0x009bb0e0 · 7608 bytes · __thiscall

_ZN13CTerrorPlayer20OnTakeDamageInternalER15CTakeDamageInfo.part.781

Decompiled

undefined (2 params)

/* CTerrorPlayer::OnTakeDamageInternal(CTakeDamageInfo&) [clone .part.781] */

void __thiscall CTerrorPlayer::OnTakeDamageInternal(CTerrorPlayer *this,CTakeDamageInfo *param_1)

{
  uint uVar1;
  code *pcVar2;
  CBaseEdict *pCVar3;
  bool bVar4;
  CTerrorPlayer *pCVar5;
  char cVar6;
  CTerrorPlayer *in_EAX;
  int iVar7;
  CBaseEntity *pCVar8;
  undefined4 uVar9;
  int *piVar10;
  undefined4 uVar11;
  undefined *puVar12;
  undefined4 *puVar13;
  CTakeDamageInfo *in_EDX;
  uint uVar14;
  int *piVar15;
  CTerrorPlayer *pCVar16;
  bool bVar17;
  bool bVar18;
  longdouble lVar19;
  float fVar20;
  float fVar21;
  CTerrorPlayer *local_a0;
  CTerrorPlayer *local_9c;
  CTerrorPlayer *local_98;
  CTerrorPlayer *local_94;
  CTerrorPlayer *local_90;
  CTerrorPlayer *local_88;
  int *local_84;
  CTerrorPlayer *local_80;
  undefined4 local_7c;
  undefined4 local_78;
  CTerrorPlayer *local_74;
  CTerrorPlayer *local_70;
  undefined4 local_6c;
  uint local_68;
  undefined4 local_64;
  undefined4 local_60;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined4 local_50;
  undefined4 local_4c;
  undefined4 local_48;
  undefined4 local_44;
  float local_40;
  undefined4 local_3c;
  undefined4 local_38;
  undefined4 local_34;
  undefined4 local_30;
  undefined4 local_2c;
  undefined4 local_28;
  undefined4 local_24;
  undefined4 local_20;
  
  uVar1 = *(uint *)(in_EDX + 0x34);
  if ((((uVar1 != 0xffffffff) &&
       (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) &&
      (*(uint *)(puVar12 + 8) == uVar1 >> 0xc)) &&
     (*(CBaseEntity **)(puVar12 + 4) != (CBaseEntity *)0x0)) {
    iVar7 = CBaseEntity::GetTeamNumber(*(CBaseEntity **)(puVar12 + 4));
    cVar6 = IsASurvivorTeam(iVar7);
    if ((((cVar6 != '\0') &&
         (iVar7 = *(int *)(in_EAX + 0x100), fVar21 = *(float *)(in_EDX + 0x3c),
         lVar19 = (longdouble)(**(code **)(*(int *)in_EAX + 0x7e4))(),
         fVar21 < (float)lVar19 + (float)iVar7)) &&
        ((((byte)in_EDX[0x48] & 0x40) != 0 &&
         (cVar6 = (**(code **)(*(int *)in_EAX + 0x7e8))(), cVar6 == '\0')))) &&
       (((((byte)in_EDX[0x4a] & 0x80) == 0 ||
         (iVar7 = CBaseEntity::GetTeamNumber((CBaseEntity *)in_EAX), iVar7 != 3)) ||
        (iVar7 = (**(code **)(*(int *)in_EAX + 0x544))(), iVar7 != 8)))) {
      fVar21 = *(float *)(in_EDX + 0x3c) / (*(float *)(in_EDX + 0x40) + 0.001);
      if (*(int *)(in_EDX + 0x4c) == 1) {
        iVar7 = CBaseEntity::GetTeamNumber((CBaseEntity *)in_EAX);
        if (((iVar7 == 3) && (iVar7 = (**(code **)(*(int *)in_EAX + 0x544))(), iVar7 == 8)) ||
           ((iVar7 = CBaseEntity::GetTeamNumber((CBaseEntity *)in_EAX), iVar7 == 3 &&
            (iVar7 = (**(code **)(*(int *)in_EAX + 0x544))(), iVar7 == 6)))) {
          fVar21 = 0.0;
        }
        iVar7 = CBaseEntity::GetTeamNumber((CBaseEntity *)in_EAX);
        cVar6 = IsASurvivorTeam(iVar7);
        if ((cVar6 != '\0') &&
           ((((uVar1 = *(uint *)(in_EDX + 0x34), uVar1 == 0xffffffff ||
              (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 == (undefined *)0xfffffffc)
              ) || (*(uint *)(puVar12 + 8) != uVar1 >> 0xc)) ||
            (*(CTerrorPlayer **)(puVar12 + 4) != in_EAX)))) goto LAB_009bb120;
      }
      if (0.5 < fVar21) {
        local_7c = *(undefined4 *)(in_EDX + 0xc);
        pCVar8 = (CBaseEntity *)0x0;
        local_78 = *(undefined4 *)(in_EDX + 0x10);
        local_74 = *(CTerrorPlayer **)(in_EDX + 0x14);
        uVar1 = *(uint *)(in_EDX + 0x34);
        if (((uVar1 != 0xffffffff) &&
            (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc))
           && (*(uint *)(puVar12 + 8) == uVar1 >> 0xc)) {
          pCVar8 = *(CBaseEntity **)(puVar12 + 4);
        }
        OnStaggered(in_EAX,pCVar8,(Vector *)&local_7c);
      }
    }
  }
LAB_009bb120:
  uVar1 = *(uint *)(in_EDX + 0x30);
  if ((((uVar1 == 0xffffffff) ||
       (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 == (undefined *)0xfffffffc)) ||
      ((*(uint *)(puVar12 + 8) != uVar1 >> 0xc ||
       ((piVar10 = *(int **)(puVar12 + 4), piVar10 == (int *)0x0 ||
        (pCVar8 = (CBaseEntity *)(**(code **)(*piVar10 + 0x14c))(piVar10),
        pCVar8 == (CBaseEntity *)0x0)))))) ||
     ((iVar7 = CBaseEntity::GetTeamNumber(pCVar8), iVar7 == 3 &&
      (iVar7 = (**(code **)(*(int *)pCVar8 + 0x544))(pCVar8), iVar7 != 0)))) {
    if (*(float *)(in_EAX + 0x2854) != 1.0) {
      if (in_EAX[0x6c] == (CTerrorPlayer)0x0) {
        pCVar3 = *(CBaseEdict **)(in_EAX + 0x30);
        if (pCVar3 != (CBaseEdict *)0x0) {
          *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
          iVar7 = CBaseEdict::GetChangeAccessor(pCVar3);
          *(undefined2 *)(iVar7 + 2) = 0;
        }
      }
      else {
        in_EAX[0x70] = (CTerrorPlayer)((byte)in_EAX[0x70] | 1);
      }
      *(undefined4 *)(in_EAX + 0x2854) = 0x3f800000;
    }
  }
  else {
    iVar7 = CBaseEntity::GetTeamNumber((CBaseEntity *)in_EAX);
    if (iVar7 == 3) {
      cVar6 = (**(code **)(*(int *)in_EAX + 0x550))();
      if (cVar6 != '\0') goto LAB_009bbb36;
    }
    else if (((iVar7 != 4) && (iVar7 != 2)) ||
            ((cVar6 = IsAdrenalineActive(in_EAX), cVar6 == '\0' &&
             (((((uVar1 = *(uint *)(in_EAX + 0x3ee0), uVar1 == 0xffffffff ||
                 (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10,
                 puVar12 == (undefined *)0xfffffffc)) || (*(uint *)(puVar12 + 8) != uVar1 >> 0xc))
               || (*(int *)(puVar12 + 4) == 0)) &&
              ((cVar6 = (**(code **)(*(int *)in_EAX + 0x778))(), cVar6 == '\0' ||
               (**(int **)(TheDirector + 0x638) != 1)))))))) {
LAB_009bbb36:
      fVar21 = *(float *)(SurvivorDamageSpeedFactor._28_4_ + 0x2c);
      if (fVar21 != *(float *)(in_EAX + 0x2854)) {
        if (in_EAX[0x6c] == (CTerrorPlayer)0x0) {
          pCVar3 = *(CBaseEdict **)(in_EAX + 0x30);
          if (pCVar3 != (CBaseEdict *)0x0) {
            *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
            iVar7 = CBaseEdict::GetChangeAccessor(pCVar3);
            *(undefined2 *)(iVar7 + 2) = 0;
          }
        }
        else {
          in_EAX[0x70] = (CTerrorPlayer)((byte)in_EAX[0x70] | 1);
        }
        *(float *)(in_EAX + 0x2854) = fVar21;
      }
    }
  }
  ProcessDamageForTankPhysicsProjectile(in_EAX,in_EDX);
  iVar7 = CBaseEntity::GetTeamNumber((CBaseEntity *)in_EAX);
  if (iVar7 == 3) {
    if (((byte)in_EDX[0x48] & 8) != 0) {
      cVar6 = CTerrorGameRules::HasPlayerControlledZombies();
      fVar21 = 1.0;
      if (cVar6 == '\0') {
        fVar21 = 0.8;
      }
      if (fVar21 < *(float *)(in_EAX + 0x2854)) {
        if (in_EAX[0x6c] == (CTerrorPlayer)0x0) {
          pCVar3 = *(CBaseEdict **)(in_EAX + 0x30);
          if (pCVar3 != (CBaseEdict *)0x0) {
            *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
            iVar7 = CBaseEdict::GetChangeAccessor(pCVar3);
            *(undefined2 *)(iVar7 + 2) = 0;
          }
        }
        else {
          in_EAX[0x70] = (CTerrorPlayer)((byte)in_EAX[0x70] | 1);
        }
        *(float *)(in_EAX + 0x2854) = fVar21;
      }
      goto LAB_009bb838;
    }
    iVar7 = CBaseEntity::GetTeamNumber((CBaseEntity *)in_EAX);
    if (((iVar7 == 3) && (iVar7 = (**(code **)(*(int *)in_EAX + 0x544))(), iVar7 == 8)) &&
       (uVar1 = *(uint *)(in_EDX + 0x30), uVar1 != 0xffffffff)) {
      uVar14 = uVar1 & 0xfff;
      puVar13 = (undefined4 *)(g_pEntityList + uVar14 * 0x10 + 4);
      if ((((puVar13 != (undefined4 *)0x0) &&
           (*(uint *)(g_pEntityList + uVar14 * 0x10 + 8) == uVar1 >> 0xc)) &&
          (*(int *)(g_pEntityList + uVar14 * 0x10 + 4) != 0)) && (((byte)in_EAX[0x150] & 2) == 0)) {
        if (*(int *)(in_EDX + 0x54) == minigunBulletType) {
          if (0.5 < *(float *)(in_EAX + 0x2854)) {
            if (in_EAX[0x6c] == (CTerrorPlayer)0x0) {
              pCVar3 = *(CBaseEdict **)(in_EAX + 0x30);
              if (pCVar3 != (CBaseEdict *)0x0) {
                *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
                iVar7 = CBaseEdict::GetChangeAccessor(pCVar3);
                *(undefined2 *)(iVar7 + 2) = 0;
              }
            }
            else {
              in_EAX[0x70] = (CTerrorPlayer)((byte)in_EAX[0x70] | 1);
            }
            *(undefined4 *)(in_EAX + 0x2854) = 0x3f000000;
            pcVar2 = *(code **)(*(int *)in_EAX + 0x7fc);
            GetFlinchEvent(in_EAX,in_EDX);
            (*pcVar2)();
          }
          piVar10 = (int *)(**(code **)(*(int *)in_EAX + 0x148))();
          if (piVar10 != (int *)0x0) {
            local_80 = (CTerrorPlayer *)0x0;
            uVar1 = *(uint *)(in_EDX + 0x34);
            if (((uVar1 != 0xffffffff) &&
                (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10,
                puVar12 != (undefined *)0xfffffffc)) && (*(uint *)(puVar12 + 8) == uVar1 >> 0xc)) {
              local_80 = *(CTerrorPlayer **)(puVar12 + 4);
            }
            (**(code **)(*piVar10 + 0x84))(piVar10,local_80);
          }
          goto LAB_009bb838;
        }
        if (((byte)in_EAX[0x14d] & 8) == 0) {
LAB_009bc9a5:
          pCVar8 = (CBaseEntity *)*puVar13;
        }
        else {
          pCVar8 = (CBaseEntity *)0x0;
          CBaseEntity::CalcAbsolutePosition((CBaseEntity *)in_EAX);
          uVar1 = *(uint *)(in_EDX + 0x30);
          if (((uVar1 != 0xffffffff) &&
              (puVar13 = (undefined4 *)(g_pEntityList + (uVar1 & 0xfff) * 0x10 + 4),
              puVar13 != (undefined4 *)0x0)) && (puVar13[1] == uVar1 >> 0xc)) goto LAB_009bc9a5;
        }
        if (((byte)pCVar8[0x14d] & 8) != 0) {
          CBaseEntity::CalcAbsolutePosition(pCVar8);
        }
        fVar21 = *(float *)(ZombieHulkDamageSlowMinRange._28_4_ + 0x2c);
        fVar20 = SQRT((*(float *)(pCVar8 + 0x2e4) - *(float *)(in_EAX + 0x2e4)) *
                      (*(float *)(pCVar8 + 0x2e4) - *(float *)(in_EAX + 0x2e4)) +
                      (*(float *)(pCVar8 + 0x2e8) - *(float *)(in_EAX + 0x2e8)) *
                      (*(float *)(pCVar8 + 0x2e8) - *(float *)(in_EAX + 0x2e8)) +
                      (*(float *)(pCVar8 + 0x2e0) - *(float *)(in_EAX + 0x2e0)) *
                      (*(float *)(pCVar8 + 0x2e0) - *(float *)(in_EAX + 0x2e0)));
        if (fVar20 <= *(float *)(ZombieHulkDamageSlowMaxRange._28_4_ + 0x2c)) {
          if ((fVar20 <= fVar21) ||
             (fVar21 = (fVar20 - fVar21) /
                       (fVar21 - *(float *)(ZombieHulkDamageSlowMaxRange._28_4_ + 0x2c)) + 1.0,
             1.0 <= fVar21)) {
            if (0.7 < *(float *)(in_EAX + 0x2854)) {
              if (in_EAX[0x6c] == (CTerrorPlayer)0x0) {
                pCVar3 = *(CBaseEdict **)(in_EAX + 0x30);
                if (pCVar3 != (CBaseEdict *)0x0) {
                  *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
                  iVar7 = CBaseEdict::GetChangeAccessor(pCVar3);
                  *(undefined2 *)(iVar7 + 2) = 0;
                }
              }
              else {
                in_EAX[0x70] = (CTerrorPlayer)((byte)in_EAX[0x70] | 1);
              }
              *(undefined4 *)(in_EAX + 0x2854) = 0x3f333333;
            }
          }
          else if ((0.0 < fVar21) &&
                  (fVar21 = (1.0 - fVar21) * 0.3 + 0.7, fVar21 < *(float *)(in_EAX + 0x2854))) {
            if (in_EAX[0x6c] == (CTerrorPlayer)0x0) {
              pCVar3 = *(CBaseEdict **)(in_EAX + 0x30);
              if (pCVar3 != (CBaseEdict *)0x0) {
                *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
                iVar7 = CBaseEdict::GetChangeAccessor(pCVar3);
                *(undefined2 *)(iVar7 + 2) = 0;
              }
            }
            else {
              in_EAX[0x70] = (CTerrorPlayer)((byte)in_EAX[0x70] | 1);
            }
            *(float *)(in_EAX + 0x2854) = fVar21;
          }
        }
        goto LAB_009bb838;
      }
    }
    iVar7 = CBaseEntity::GetTeamNumber((CBaseEntity *)in_EAX);
    if ((iVar7 != 3) || (iVar7 = (**(code **)(*(int *)in_EAX + 0x544))(), iVar7 != 6)) {
      uVar1 = *(uint *)(in_EDX + 0x34);
      pCVar8 = (CBaseEntity *)0x0;
      if ((uVar1 != 0xffffffff) &&
         ((puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc &&
          (*(uint *)(puVar12 + 8) == uVar1 >> 0xc)))) {
        pCVar8 = *(CBaseEntity **)(puVar12 + 4);
      }
      cVar6 = CCSPlayer::ShouldDoLargeFlinch((CCSPlayer *)in_EAX,*(int *)(in_EAX + 0x1838),pCVar8);
      if (cVar6 == '\0') {
        if (*(float *)(in_EAX + 0x2854) != 0.5) {
          if (in_EAX[0x6c] == (CTerrorPlayer)0x0) {
            pCVar3 = *(CBaseEdict **)(in_EAX + 0x30);
            if (pCVar3 != (CBaseEdict *)0x0) {
              *(uint *)pCVar3 = *(uint *)pCVar3 | 0x101;
              iVar7 = CBaseEdict::GetChangeAccessor(pCVar3);
              *(undefined2 *)(iVar7 + 2) = 0;
            }
          }
          else {
            in_EAX[0x70] = (CTerrorPlayer)((byte)in_EAX[0x70] | 1);
          }
          *(undefined4 *)(in_EAX + 0x2854) = 0x3f000000;
        }
      }
      else {
        if (((byte)in_EAX[0x14d] & 0x10) != 0) {
          CBaseEntity::CalcAbsoluteVelocity((CBaseEntity *)in_EAX);
        }
        if ((SQRT(*(float *)(in_EAX + 0x274) * *(float *)(in_EAX + 0x274) +
                  *(float *)(in_EAX + 0x278) * *(float *)(in_EAX + 0x278) +
                  *(float *)(in_EAX + 0x27c) * *(float *)(in_EAX + 0x27c)) < 300.0) &&
           (*(float *)(in_EAX + 0x2854) != 0.65)) {
          CServerNetworkProperty::NetworkStateChanged((short)in_EAX + 0x24);
          *(undefined4 *)(in_EAX + 0x2854) = 0x3f266666;
        }
      }
    }
LAB_009bb838:
    iVar7 = CBaseEntity::GetTeamNumber((CBaseEntity *)in_EAX);
    if (iVar7 != 3) {
      return;
    }
    iVar7 = (**(code **)(*(int *)in_EAX + 0x544))();
    if (iVar7 != 3) {
      return;
    }
    iVar7 = (**(code **)(*(int *)in_EAX + 0x148))();
    if (iVar7 != 0) {
      return;
    }
    if (in_EAX[0x3e78] == (CTerrorPlayer)0x0) {
      uVar1 = *(uint *)(in_EAX + 0x3e64);
      if ((((uVar1 == 0xffffffff) ||
           (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 == (undefined *)0xfffffffc))
          || (*(uint *)(puVar12 + 8) != uVar1 >> 0xc)) || (*(int *)(puVar12 + 4) == 0)) {
        cVar6 = IsLunging(in_EAX);
        if (cVar6 == '\0') {
          return;
        }
        uVar11 = *(undefined4 *)(in_EAX + 0x3e7c);
        fVar21 = *(float *)(in_EDX + 0x3c);
        uVar9 = (**(code **)(*(int *)in_EAX + 0xb8))();
        UTIL_LogPrintf("%s took %d/%d damage while lunging\n",uVar9,(int)fVar21,uVar11);
        iVar7 = *(int *)(in_EAX + 0x3e7c);
        fVar21 = *(float *)(in_EDX + 0x3c);
        *(int *)(in_EAX + 0x3e7c) = (int)((float)iVar7 - fVar21);
        if (0 < (int)((float)iVar7 - fVar21)) {
          return;
        }
        OnStunned(in_EAX,0.5);
        return;
      }
      uVar11 = *(undefined4 *)(in_EAX + 0x3e7c);
      fVar21 = *(float *)(in_EDX + 0x3c);
      uVar9 = (**(code **)(*(int *)in_EAX + 0xb8))();
      UTIL_LogPrintf("%s took %d/%d damage while pounced\n",uVar9,(int)fVar21,uVar11);
    }
    else {
      uVar11 = *(undefined4 *)(in_EAX + 0x3e7c);
      fVar21 = *(float *)(in_EDX + 0x3c);
      uVar9 = (**(code **)(*(int *)in_EAX + 0xb8))();
      UTIL_LogPrintf("%s took %d/%d damage while trying to pounce\n",uVar9,(int)fVar21,uVar11);
    }
    iVar7 = *(int *)(in_EAX + 0x3e7c);
    fVar21 = *(float *)(in_EDX + 0x3c);
    *(int *)(in_EAX + 0x3e7c) = (int)((float)iVar7 - fVar21);
    if (0 < (int)((float)iVar7 - fVar21)) {
      return;
    }
    piVar10 = (int *)(**(code **)(*gameeventmanager + 0x1c))(gameeventmanager,"pounce_stopped",0,0);
    if (piVar10 != (int *)0x0) {
      uVar1 = *(uint *)(in_EDX + 0x34);
      local_80 = (CTerrorPlayer *)g_pEntityList;
      if (((uVar1 != 0xffffffff) &&
          (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) &&
         ((*(uint *)(puVar12 + 8) == uVar1 >> 0xc &&
          (piVar15 = *(int **)(puVar12 + 4), piVar15 != (int *)0x0)))) {
        cVar6 = (**(code **)(*piVar15 + 0x16c))(piVar15);
        if (cVar6 != '\0') {
          uVar1 = *(uint *)(in_EDX + 0x34);
          pcVar2 = *(code **)(*piVar10 + 0x30);
          if (((uVar1 == 0xffffffff) ||
              (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 == (undefined *)0xfffffffc)
              ) || ((*(uint *)(puVar12 + 8) != uVar1 >> 0xc ||
                    ((piVar15 = *(int **)(puVar12 + 4), piVar15 == (int *)0x0 ||
                     (cVar6 = (**(code **)(*piVar15 + 0x16c))(piVar15), cVar6 == '\0')))))) {
            piVar15 = (int *)0x0;
          }
          uVar11 = (**(code **)(*engine + 0x40))(engine,piVar15[0xc]);
          (*pcVar2)(piVar10,"userid",uVar11);
        }
        local_80 = (CTerrorPlayer *)g_pEntityList;
      }
      uVar1 = *(uint *)(in_EAX + 0x3e64);
      g_pEntityList = local_80;
      if ((((uVar1 == 0xffffffff) ||
           (puVar12 = local_80 + (uVar1 & 0xfff) * 0x10, puVar12 == (undefined *)0xfffffffc)) ||
          (*(uint *)(puVar12 + 8) != uVar1 >> 0xc)) || (*(int *)(puVar12 + 4) == 0)) {
        (**(code **)(*piVar10 + 0x30))(piVar10,"victim",0);
      }
      else {
        pcVar2 = *(code **)(*piVar10 + 0x30);
        uVar11 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)(*(int *)(puVar12 + 4) + 0x30))
        ;
        (*pcVar2)(piVar10,"victim",uVar11);
      }
      (**(code **)(*gameeventmanager + 0x20))(gameeventmanager,piVar10,0);
    }
    CBaseEntity::EmitSound((CBaseEntity *)in_EAX,"HunterZombie.Pounce.Cancel",0.0,(float *)0x0);
    OnPounceEnded(in_EAX);
    local_7c = *(undefined4 *)in_EDX;
    local_3c = *(undefined4 *)(in_EDX + 0x40);
    local_38 = *(undefined4 *)(in_EDX + 0x44);
    local_78 = *(undefined4 *)(in_EDX + 4);
    local_74 = *(CTerrorPlayer **)(in_EDX + 8);
    local_70 = *(CTerrorPlayer **)(in_EDX + 0xc);
    local_6c = *(undefined4 *)(in_EDX + 0x10);
    local_68 = *(uint *)(in_EDX + 0x14);
    local_64 = *(undefined4 *)(in_EDX + 0x18);
    local_60 = *(undefined4 *)(in_EDX + 0x1c);
    local_5c = *(undefined4 *)(in_EDX + 0x20);
    local_58 = *(undefined4 *)(in_EDX + 0x24);
    local_54 = *(undefined4 *)(in_EDX + 0x28);
    local_50 = *(undefined4 *)(in_EDX + 0x2c);
    local_4c = *(undefined4 *)(in_EDX + 0x30);
    local_48 = *(undefined4 *)(in_EDX + 0x34);
    local_44 = *(undefined4 *)(in_EDX + 0x38);
    local_34 = *(undefined4 *)(in_EDX + 0x48);
    local_24 = *(undefined4 *)(in_EDX + 0x58);
    local_30 = *(undefined4 *)(in_EDX + 0x4c);
    local_40 = (float)*(int *)(in_EAX + 0x100) + *(float *)(in_EDX + 0x3c);
    local_2c = *(undefined4 *)(in_EDX + 0x50);
    local_28 = *(undefined4 *)(in_EDX + 0x54);
    local_20 = *(undefined4 *)(in_EDX + 0x5c);
    CBaseEntity::TakeDamage((CBaseEntity *)in_EAX,(CTakeDamageInfo *)&local_7c);
    return;
  }
  uVar1 = *(uint *)(in_EDX + 0x34);
  local_80 = (CTerrorPlayer *)0x0;
  if (((uVar1 != 0xffffffff) &&
      (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) &&
     (*(uint *)(puVar12 + 8) == uVar1 >> 0xc)) {
    local_80 = *(CTerrorPlayer **)(puVar12 + 4);
  }
  uVar1 = *(uint *)(in_EDX + 0x30);
  pCVar16 = local_80;
  if (((uVar1 != 0xffffffff) &&
      (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) &&
     ((*(uint *)(puVar12 + 8) == uVar1 >> 0xc &&
      ((piVar10 = *(int **)(puVar12 + 4), piVar10 != (int *)0x0 &&
       (cVar6 = (**(code **)(*piVar10 + 0x16c))(piVar10), cVar6 != '\0')))))) {
    uVar1 = *(uint *)(in_EDX + 0x30);
    if ((uVar1 == 0xffffffff) ||
       ((((puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 == (undefined *)0xfffffffc ||
          (*(uint *)(puVar12 + 8) != uVar1 >> 0xc)) ||
         (pCVar8 = *(CBaseEntity **)(puVar12 + 4), pCVar8 == (CBaseEntity *)0x0)) ||
        (cVar6 = (**(code **)(*(int *)pCVar8 + 0x16c))(pCVar8), cVar6 == '\0')))) {
      pCVar8 = (CBaseEntity *)0x0;
    }
    iVar7 = CBaseEntity::GetTeamNumber(pCVar8);
    if ((iVar7 == 3) &&
       (iVar7 = (**(code **)(*(int *)pCVar8 + 0x544))(pCVar8), pCVar16 = (CTerrorPlayer *)pCVar8,
       iVar7 != 2)) {
      pCVar16 = local_80;
    }
  }
  local_80 = pCVar16;
  fVar21 = *(float *)(in_EAX + 0x31ec);
  pCVar16 = in_EAX + 0x31e4;
  uVar1 = *(uint *)(in_EDX + 0x48);
  lVar19 = (longdouble)CountdownTimer::Now();
  bVar4 = fVar21 - (float)lVar19 <= 0.0;
  bVar17 = (*(uint *)(in_EDX + 0x48) & 0x20000) != 0;
  uVar14 = *(uint *)(in_EAX + 0x31e0);
  if (((uVar14 == 0xffffffff) ||
      (puVar12 = g_pEntityList + (uVar14 & 0xfff) * 0x10, puVar12 == (undefined *)0xfffffffc)) ||
     ((*(uint *)(puVar12 + 8) != uVar14 >> 0xc ||
      ((piVar10 = *(int **)(puVar12 + 4), piVar10 == (int *)0x0 ||
       (cVar6 = (**(code **)(*piVar10 + 0x16c))(piVar10), cVar6 == '\0')))))) {
LAB_009bb26d:
    local_94 = (CTerrorPlayer *)0x0;
  }
  else {
    local_94 = (CTerrorPlayer *)0x0;
    uVar14 = *(uint *)(in_EAX + 0x31e0);
    if ((uVar14 != 0xffffffff) &&
       ((puVar12 = g_pEntityList + (uVar14 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc &&
        (*(uint *)(puVar12 + 8) == uVar14 >> 0xc)))) {
      local_94 = *(CTerrorPlayer **)(puVar12 + 4);
    }
    if ((((bVar17 || (!bVar4 || (uVar1 & 0x28) == 0)) ||
         (fVar21 = *(float *)(in_EAX + 0x31dc), lVar19 = (longdouble)CountdownTimer::Now(),
         fVar21 - (float)lVar19 <= 0.0)) || (local_94 == (CTerrorPlayer *)0x0)) ||
       (cVar6 = (**(code **)(*(int *)local_94 + 0x778))(local_94), cVar6 != '\0'))
    goto LAB_009bb26d;
    AddSurvivorDamage(local_94,(int)*(float *)(in_EDX + 0x3c),1,*(undefined4 *)(in_EAX + 0x2ba0));
    if (((byte)in_EDX[0x48] & 8) != 0) {
      fVar21 = *(float *)(in_EAX + 0x31dc);
      lVar19 = (longdouble)CountdownTimer::Now();
      fVar21 = fVar21 - (float)lVar19;
      lVar19 = (longdouble)CountdownTimer::Now();
      if ((float)lVar19 + fVar21 != *(float *)(in_EAX + 0x31ec)) {
        (**(code **)(*(int *)(in_EAX + 0x31e4) + 4))(pCVar16,in_EAX + 0x31ec);
        *(float *)(in_EAX + 0x31ec) = (float)lVar19 + fVar21;
      }
      if (fVar21 != *(float *)(in_EAX + 0x31e8)) {
        (**(code **)(*(int *)(in_EAX + 0x31e4) + 4))(pCVar16,in_EAX + 0x31e8);
        *(float *)(in_EAX + 0x31e8) = fVar21;
      }
    }
  }
  iVar7 = CheckAttackFrequency(in_EAX,in_EDX,false);
  uVar1 = *(uint *)(in_EAX + 0x3288);
  local_98 = (CTerrorPlayer *)0x0;
  bVar18 = iVar7 == 0;
  if (((uVar1 != 0xffffffff) &&
      (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) &&
     (*(uint *)(puVar12 + 8) == uVar1 >> 0xc)) {
    local_98 = *(CTerrorPlayer **)(puVar12 + 4);
  }
  local_88 = (CTerrorPlayer *)0x0;
  uVar1 = *(uint *)(in_EAX + 0x3250);
  if (((uVar1 != 0xffffffff) &&
      (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) &&
     (*(uint *)(puVar12 + 8) == uVar1 >> 0xc)) {
    local_88 = *(CTerrorPlayer **)(puVar12 + 4);
  }
  local_90 = (CTerrorPlayer *)0x0;
  uVar1 = *(uint *)(in_EAX + 0x33c4);
  if (((uVar1 != 0xffffffff) &&
      (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) &&
     (*(uint *)(puVar12 + 8) == uVar1 >> 0xc)) {
    local_90 = *(CTerrorPlayer **)(puVar12 + 4);
  }
  local_9c = (CTerrorPlayer *)0x0;
  uVar1 = *(uint *)(in_EAX + 0x3e68);
  if (((uVar1 != 0xffffffff) &&
      (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) &&
     (*(uint *)(puVar12 + 8) == uVar1 >> 0xc)) {
    local_9c = *(CTerrorPlayer **)(puVar12 + 4);
  }
  local_a0 = (CTerrorPlayer *)0x0;
  uVar1 = *(uint *)(in_EAX + 0x3ee0);
  if (((uVar1 == 0xffffffff) ||
      (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 == (undefined *)0xfffffffc)) ||
     (*(uint *)(puVar12 + 8) != uVar1 >> 0xc)) {
    if (!bVar18) goto LAB_009bb500;
LAB_009bb3af:
    if (!bVar17 && bVar4) {
      local_90 = (CTerrorPlayer *)0x0;
      goto LAB_009bb600;
    }
LAB_009bb3b9:
    local_88 = (CTerrorPlayer *)0x0;
LAB_009bb3c3:
    if ((((local_80 == (CTerrorPlayer *)0x0) ||
         (fVar21 = *(float *)(in_EAX + 0x3260), lVar19 = (longdouble)CountdownTimer::Now(),
         fVar21 - (float)lVar19 <= 0.0)) ||
        (uVar1 = *(uint *)(in_EAX + 0x3264), uVar1 == 0xffffffff)) ||
       (((puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 == (undefined *)0xfffffffc ||
         (*(uint *)(puVar12 + 8) != uVar1 >> 0xc)) ||
        ((piVar10 = *(int **)(puVar12 + 4), piVar10 == (int *)0x0 ||
         (cVar6 = (**(code **)(*piVar10 + 0x778))(piVar10), cVar6 != '\0')))))) goto LAB_009bb430;
    uVar1 = *(uint *)(in_EDX + 0x34);
    piVar10 = (int *)0x0;
    if (((uVar1 != 0xffffffff) &&
        (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) &&
       (*(uint *)(puVar12 + 8) == uVar1 >> 0xc)) {
      piVar10 = *(int **)(puVar12 + 4);
    }
    cVar6 = (**(code **)(*piVar10 + 0x16c))(piVar10);
    if (cVar6 != '\0') goto LAB_009bb430;
    iVar7 = *(int *)(in_EAX + 0x100);
    fVar21 = *(float *)(in_EDX + 0x3c);
    lVar19 = (longdouble)(**(code **)(*(int *)in_EAX + 0x7e4))();
    if (((float)lVar19 + (float)iVar7 <= fVar21) &&
       (piVar10 = (int *)(**(code **)(*gameeventmanager + 0x1c))(gameeventmanager,"fatal_vomit",0,0)
       , piVar10 != (int *)0x0)) {
      local_84 = (int *)0x0;
      pcVar2 = *(code **)(*piVar10 + 0x30);
      uVar1 = *(uint *)(in_EAX + 0x3264);
      if ((uVar1 != 0xffffffff) &&
         ((puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc &&
          (*(uint *)(puVar12 + 8) == uVar1 >> 0xc)))) {
        local_84 = *(int **)(puVar12 + 4);
      }
      uVar11 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)((int)local_84 + 0x30));
      (*pcVar2)(piVar10,"userid",uVar11);
      pcVar2 = *(code **)(*piVar10 + 0x30);
      uVar11 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)(in_EAX + 0x30));
      (*pcVar2)(piVar10,"victim",uVar11);
      (**(code **)(*gameeventmanager + 0x20))(gameeventmanager,piVar10,0);
    }
    uVar1 = *(uint *)(in_EAX + 0x3264);
    pCVar16 = (CTerrorPlayer *)0x0;
    if (((uVar1 != 0xffffffff) &&
        (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) &&
       (*(uint *)(puVar12 + 8) == uVar1 >> 0xc)) {
      pCVar16 = *(CTerrorPlayer **)(puVar12 + 4);
    }
    if (bVar18) {
      return;
    }
    AddSurvivorDamage(pCVar16,(int)*(float *)(in_EDX + 0x3c),1,*(undefined4 *)(in_EAX + 0x2ba0));
LAB_009bb44a:
    cVar6 = (**(code **)(*(int *)local_80 + 0x16c))(local_80);
    if (cVar6 == '\0') {
      pCVar8 = (CBaseEntity *)(**(code **)(*(int *)local_80 + 0x144))(local_80);
      if (pCVar8 != (CBaseEntity *)0x0) {
LAB_009bb7b0:
        CBaseEntity::GetTeamNumber(pCVar8);
        goto LAB_009bb7b8;
      }
      goto LAB_009bc3f0;
    }
    pCVar8 = (CBaseEntity *)(**(code **)(*(int *)local_80 + 0x144))();
    if (pCVar8 == (CBaseEntity *)0x0) goto LAB_009bc3f0;
    if ((local_80 == (CTerrorPlayer *)0x0) ||
       (cVar6 = (**(code **)(*(int *)local_80 + 0x778))(local_80), cVar6 != '\0'))
    goto LAB_009bb7b0;
    iVar7 = CBaseEntity::GetTeamNumber(pCVar8);
    if (iVar7 == 3) {
      AddSurvivorDamage(local_80,(int)*(float *)(in_EDX + 0x3c),0,*(undefined4 *)(in_EAX + 0x2ba0));
      if ((local_88 == (CTerrorPlayer *)0x0) &&
         ((local_80 == pCVar16 || (local_88 = pCVar16, pCVar16 == (CTerrorPlayer *)0x0)))) {
        local_74 = local_80;
        local_70 = (CTerrorPlayer *)0x0;
        local_7c = 9;
      }
      else {
        local_7c = 8;
        local_74 = local_80;
        local_70 = local_88;
      }
      goto LAB_009bb7e0;
    }
LAB_009bb7b8:
    local_74 = local_88;
    if ((local_88 == (CTerrorPlayer *)0x0) &&
       (local_74 = pCVar16, pCVar5 = local_94, pCVar16 == (CTerrorPlayer *)0x0))
    goto joined_r0x009bc558;
  }
  else {
    local_a0 = *(CTerrorPlayer **)(puVar12 + 4);
    if (bVar18) goto LAB_009bb3af;
LAB_009bb500:
    if (bVar17 || !bVar4) goto LAB_009bb3b9;
    uVar1 = *(uint *)(in_EDX + 0x34);
    piVar10 = (int *)0x0;
    if (((uVar1 != 0xffffffff) &&
        (puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc)) &&
       (*(uint *)(puVar12 + 8) == uVar1 >> 0xc)) {
      piVar10 = *(int **)(puVar12 + 4);
    }
    cVar6 = (**(code **)(*piVar10 + 0x16c))(piVar10);
    if (cVar6 != '\0') goto LAB_009bb3af;
    if (((local_90 == (CTerrorPlayer *)0x0) ||
        (cVar6 = (**(code **)(*(int *)local_90 + 0x778))(local_90), cVar6 != '\0')) ||
       ((local_90 == local_80 || (local_90 == local_94)))) {
      local_90 = (CTerrorPlayer *)0x0;
    }
    else {
      AddSurvivorDamage(local_90,(int)*(float *)(in_EDX + 0x3c),1,*(undefined4 *)(in_EAX + 0x2ba0));
    }
    if (((local_9c != (CTerrorPlayer *)0x0) &&
        (cVar6 = (**(code **)(*(int *)local_9c + 0x778))(local_9c), cVar6 == '\0')) &&
       ((local_80 != local_9c && (local_94 != local_9c)))) {
      local_90 = local_9c;
      AddSurvivorDamage(local_9c,(int)*(float *)(in_EDX + 0x3c),1,*(undefined4 *)(in_EAX + 0x2ba0));
    }
    if ((((local_a0 != (CTerrorPlayer *)0x0) &&
         (cVar6 = (**(code **)(*(int *)local_a0 + 0x778))(local_a0), cVar6 == '\0')) &&
        (local_80 != local_a0)) && (local_94 != local_a0)) {
      local_90 = local_a0;
      AddSurvivorDamage(local_a0,(int)*(float *)(in_EDX + 0x3c),1,*(undefined4 *)(in_EAX + 0x2ba0));
    }
LAB_009bb600:
    fVar21 = *(float *)(in_EAX + 0x3284);
    lVar19 = (longdouble)CountdownTimer::Now();
    if (((fVar21 - (float)lVar19 <= 0.0) || (local_98 == (CTerrorPlayer *)0x0)) ||
       ((cVar6 = (**(code **)(*(int *)local_98 + 0x778))(local_98), cVar6 != '\0' ||
        ((local_80 == local_98 || (local_94 == local_98)))))) {
LAB_009bc040:
      local_98 = local_90;
    }
    else {
      local_84 = (int *)0x0;
      uVar1 = *(uint *)(in_EDX + 0x34);
      if ((uVar1 != 0xffffffff) &&
         ((puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc &&
          (*(uint *)(puVar12 + 8) == uVar1 >> 0xc)))) {
        local_84 = *(int **)(puVar12 + 4);
      }
      cVar6 = (**(code **)(*local_84 + 0x16c))(local_84);
      if (cVar6 != '\0') goto LAB_009bc040;
      if (!bVar18) {
        AddSurvivorDamage(local_98,(int)*(float *)(in_EDX + 0x3c),1,*(undefined4 *)(in_EAX + 0x2ba0)
                         );
      }
      if (((byte)in_EDX[0x48] & 8) != 0) {
        fVar21 = *(float *)(in_EAX + 0x3284);
        lVar19 = (longdouble)CountdownTimer::Now();
        fVar21 = fVar21 - (float)lVar19;
        lVar19 = (longdouble)CountdownTimer::Now();
        if ((float)lVar19 + fVar21 != *(float *)(in_EAX + 0x31ec)) {
          (**(code **)(*(int *)(in_EAX + 0x31e4) + 4))(pCVar16,in_EAX + 0x31ec);
          *(float *)(in_EAX + 0x31ec) = (float)lVar19 + fVar21;
        }
        if (fVar21 != *(float *)(in_EAX + 0x31e8)) {
          (**(code **)(*(int *)(in_EAX + 0x31e4) + 4))(pCVar16,in_EAX + 0x31e8);
          *(float *)(in_EAX + 0x31e8) = fVar21;
        }
      }
    }
    fVar21 = *(float *)(in_EAX + 0x324c);
    lVar19 = (longdouble)CountdownTimer::Now();
    if ((((fVar21 - (float)lVar19 <= 0.0) || (local_88 == (CTerrorPlayer *)0x0)) ||
        (cVar6 = (**(code **)(*(int *)local_88 + 0x778))(local_88), cVar6 != '\0')) ||
       ((local_80 == local_88 || (local_94 == local_88)))) {
LAB_009bc220:
      local_88 = local_98;
      goto LAB_009bb3c3;
    }
    uVar1 = *(uint *)(in_EDX + 0x34);
    piVar10 = (int *)0x0;
    if ((uVar1 != 0xffffffff) &&
       ((puVar12 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar12 != (undefined *)0xfffffffc &&
        (*(uint *)(puVar12 + 8) == uVar1 >> 0xc)))) {
      piVar10 = *(int **)(puVar12 + 4);
    }
    cVar6 = (**(code **)(*piVar10 + 0x16c))(piVar10);
    if (cVar6 != '\0') goto LAB_009bc220;
    if (!bVar18) {
      AddSurvivorDamage(local_88,(int)*(float *)(in_EDX + 0x3c),1,*(undefined4 *)(in_EAX + 0x2ba0));
    }
    iVar7 = *(int *)(in_EAX + 0x100);
    fVar21 = *(float *)(in_EDX + 0x3c);
    lVar19 = (longdouble)(**(code **)(*(int *)in_EAX + 0x7e4))();
    if (((float)lVar19 + (float)iVar7 <= fVar21) &&
       (piVar10 = (int *)(**(code **)(*gameeventmanager + 0x1c))(gameeventmanager,"fatal_vomit",0,0)
       , piVar10 != (int *)0x0)) {
      pcVar2 = *(code **)(*piVar10 + 0x30);
      uVar11 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)(local_88 + 0x30));
      (*pcVar2)(piVar10,"userid",uVar11);
      pcVar2 = *(code **)(*piVar10 + 0x30);
      uVar11 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)(in_EAX + 0x30));
      (*pcVar2)(piVar10,"victim",uVar11);
      (**(code **)(*gameeventmanager + 0x20))(gameeventmanager,piVar10,0);
    }
    if (((byte)in_EDX[0x48] & 8) != 0) {
      fVar21 = *(float *)(in_EAX + 0x324c);
      lVar19 = (longdouble)CountdownTimer::Now();
      fVar21 = fVar21 - (float)lVar19;
      lVar19 = (longdouble)CountdownTimer::Now();
      if ((float)lVar19 + fVar21 != *(float *)(in_EAX + 0x31ec)) {
        (**(code **)(*(int *)(in_EAX + 0x31e4) + 4))(pCVar16,in_EAX + 0x31ec);
        *(float *)(in_EAX + 0x31ec) = (float)lVar19 + fVar21;
      }
      if (fVar21 != *(float *)(in_EAX + 0x31e8)) {
        (**(code **)(*(int *)(in_EAX + 0x31e4) + 4))(pCVar16,in_EAX + 0x31e8);
        *(float *)(in_EAX + 0x31e8) = fVar21;
      }
    }
LAB_009bb430:
    if (bVar18) {
      return;
    }
    if (local_80 != (CTerrorPlayer *)0x0) {
      pCVar16 = (CTerrorPlayer *)0x0;
      goto LAB_009bb44a;
    }
LAB_009bc3f0:
    if (((byte)in_EDX[0x48] & 0x20) == 0) {
      return;
    }
    pCVar5 = local_88;
    if (local_94 != (CTerrorPlayer *)0x0) {
      if (local_88 == (CTerrorPlayer *)0x0) {
        local_70 = (CTerrorPlayer *)0x0;
        local_7c = 0xb;
        local_74 = local_94;
      }
      else {
        local_74 = local_94;
        local_70 = local_88;
        local_7c = 10;
      }
      goto LAB_009bb7e0;
    }
joined_r0x009bc558:
    local_74 = pCVar5;
    if (local_74 == (CTerrorPlayer *)0x0) {
      return;
    }
  }
  local_70 = (CTerrorPlayer *)0x0;
  local_7c = 7;
LAB_009bb7e0:
  local_68 = local_68 & 0xffffff00;
  local_6c = 0;
  ForEachTerrorPlayer<HitAnnouncement>((HitAnnouncement *)&local_7c);
  return;
}

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)