L L4D2node

CTerrorPlayer::UpdateIncapacitatedAndRevival

0x009feaf0 · 5092 bytes · __thiscall

_ZN13CTerrorPlayer29UpdateIncapacitatedAndRevivalEv

Decompiled

undefined (1 param)

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* CTerrorPlayer::UpdateIncapacitatedAndRevival() */

void __thiscall CTerrorPlayer::UpdateIncapacitatedAndRevival(CTerrorPlayer *this)

{
  uint uVar1;
  code *pcVar2;
  byte *pbVar3;
  char cVar4;
  int *piVar5;
  int iVar6;
  float *pfVar7;
  undefined4 uVar8;
  undefined *puVar9;
  undefined4 *puVar10;
  undefined4 *puVar11;
  CBaseEntity *pCVar12;
  longdouble lVar13;
  float fVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  float fVar18;
  float fVar19;
  float fVar20;
  undefined4 uStackY_140;
  float local_100;
  undefined4 local_f4;
  undefined4 local_f0;
  undefined4 local_ec;
  int local_e8 [3];
  int local_dc;
  undefined4 local_d8;
  undefined4 local_d4;
  undefined4 local_cc;
  int local_c8;
  uint local_c4;
  undefined4 local_bc;
  undefined4 local_b8;
  undefined4 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;
  float local_7c;
  float local_78;
  float local_74;
  int local_70;
  undefined4 local_6c;
  undefined4 local_68;
  undefined4 local_64;
  uint local_60;
  undefined4 local_5c;
  float local_50;
  char local_45;
  CBaseEntity *local_30;
  
  puVar11 = (undefined4 *)&stack0xfffffec4;
  uStackY_140 = 0x9feb0a;
  cVar4 = (**(code **)(*(int *)this + 0x7e8))();
  if (cVar4 != '\0') {
    uStackY_140 = 0x9feb5e;
    lVar13 = (longdouble)CountdownTimer::Now();
    if ((*(float *)(this + 0x3f80) <= (float)lVar13) &&
       ((((uVar1 = *(uint *)(this + 0x2e24), uVar1 == 0xffffffff ||
          (puVar9 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar9 == (undefined *)0xfffffffc)) ||
         (*(uint *)(puVar9 + 8) != uVar1 >> 0xc)) || (*(int *)(puVar9 + 4) == 0)))) {
      uStackY_140 = 0x9febbe;
      lVar13 = (longdouble)RandomFloat();
      fVar19 = (float)lVar13;
      uStackY_140 = 0x9febcc;
      lVar13 = (longdouble)CountdownTimer::Now();
      if ((float)lVar13 + fVar19 != *(float *)(this + 0x3f80)) {
        uStackY_140 = 0x9ff78e;
        (**(code **)(*(int *)(this + 0x3f78) + 4))();
        *(float *)(this + 0x3f80) = (float)lVar13 + fVar19;
      }
      if (fVar19 != *(float *)(this + 0x3f7c)) {
        uStackY_140 = 0x9fec16;
        (**(code **)(*(int *)(this + 0x3f78) + 4))();
        *(float *)(this + 0x3f7c) = fVar19;
      }
      pcVar2 = *(code **)(*(int *)this + 0x7b4);
      uStackY_140 = 0x9fec41;
      CAI_Concept::CAI_Concept((CAI_Concept *)&local_7c,"PlayerHelp");
      uStackY_140 = 0x9fec72;
      (*pcVar2)();
    }
    if (0.0 < *(float *)(this + 0x3e3c)) {
      uStackY_140 = 0x9fec8c;
      lVar13 = (longdouble)CountdownTimer::Now();
      if (*(float *)(this + 0x3e3c) <= (float)lVar13) {
        if (*(float *)(this + 0x3e3c) != -1.0) {
          uStackY_140 = 0x9fecc6;
          (**(code **)(*(int *)(this + 0x3e34) + 4))();
          *(undefined4 *)(this + 0x3e3c) = 0xbf800000;
        }
        uStackY_140 = 0x9fece5;
        (**(code **)(*(int *)(this + 0x3ab4) + 0x138))();
      }
    }
    uStackY_140 = 0x9fecf3;
    lVar13 = (longdouble)CountdownTimer::Now();
    if (*(float *)(this + 0x2da4) <= (float)lVar13) {
      uStackY_140 = 0x9ff305;
      cVar4 = CDirector::IsFinaleWon(TheDirector);
      if (((cVar4 == '\0') &&
          (((uVar1 = *(uint *)(this + 0x2e24), uVar1 == 0xffffffff ||
            (puVar9 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar9 == (undefined *)0xfffffffc)) ||
           ((*(uint *)(puVar9 + 8) != uVar1 >> 0xc || (*(int *)(puVar9 + 4) == 0)))))) &&
         ((((uVar1 = *(uint *)(this + 0x3e68), uVar1 == 0xffffffff ||
            (puVar9 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar9 == (undefined *)0xfffffffc)) ||
           (*(uint *)(puVar9 + 8) != uVar1 >> 0xc)) || (*(int *)(puVar9 + 4) == 0)))) {
        local_100 = *(float *)(SurvivorIncapacitatedDecayRate._28_4_ + 0x2c);
        local_cc = 1;
        local_c8 = 0;
        uStackY_140 = 0x9ff39d;
        ForEachPlayer<LiveSurvivorCounter>((LiveSurvivorCounter *)&local_cc);
        if (local_c8 == 0) {
          local_100 = *(float *)(SurvivorIncapacitatedHopelessDecayRate._28_4_ + 0x2c);
        }
        else {
          uVar1 = *(uint *)(this + 0x33c4);
          if ((((uVar1 != 0xffffffff) &&
               (puVar9 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar9 != (undefined *)0xfffffffc))
              && (*(uint *)(puVar9 + 8) == uVar1 >> 0xc)) && (*(int *)(puVar9 + 4) != 0)) {
            local_100 = *(float *)(SurvivorIncapacitatedTonguedDecayRate._28_4_ + 0x2c);
          }
        }
        uStackY_140 = 0x9ff3dd;
        TransitionedPlayerCount(local_e8,&local_dc,2);
        pbVar3 = *(byte **)(gpGlobals + 0x58);
        if (((pbVar3 == (byte *)0x0) || ((*pbVar3 & 2) != 0)) ||
           (*(int **)(pbVar3 + 0xc) == (int *)0x0)) {
          pCVar12 = (CBaseEntity *)0x0;
        }
        else {
          uStackY_140 = 0x9ff415;
          pCVar12 = (CBaseEntity *)(**(code **)(**(int **)(pbVar3 + 0xc) + 0x18))();
        }
        if (local_e8[0] == local_dc || local_e8[0] - local_dc < 0) {
          uStackY_140 = 0x9ff811;
          CTakeDamageInfo::CTakeDamageInfo
                    ((CTakeDamageInfo *)&local_7c,pCVar12,pCVar12,local_100,0x20000,0);
          uStackY_140 = 0x9ff81d;
          CBaseEntity::TakeDamage((CBaseEntity *)this,(CTakeDamageInfo *)&local_7c);
        }
        uVar1 = *(uint *)(this + 0x33c4);
        if (((uVar1 != 0xffffffff) &&
            (puVar9 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar9 != (undefined *)0xfffffffc)) &&
           ((*(uint *)(puVar9 + 8) == uVar1 >> 0xc && (*(int *)(puVar9 + 4) != 0)))) {
          uStackY_140 = 0x9ffa05;
          AddSurvivorDamage();
        }
        uStackY_140 = 0x9ff456;
        lVar13 = (longdouble)CountdownTimer::Now();
        if ((float)lVar13 + 1.0 != *(float *)(this + 0x2da4)) {
          uStackY_140 = 0x9ff7c6;
          (**(code **)(*(int *)(this + 0x2d9c) + 4))();
          *(float *)(this + 0x2da4) = (float)lVar13 + 1.0;
        }
        if (*(float *)(this + 0x2da0) != 1.0) {
          uStackY_140 = 0x9ff4a0;
          (**(code **)(*(int *)(this + 0x2d9c) + 4))();
          *(undefined4 *)(this + 0x2da0) = 0x3f800000;
        }
        fVar19 = *(float *)(this + 0x2ef8);
        uStackY_140 = 0x9ff4c8;
        lVar13 = (longdouble)CountdownTimer::Now();
        if (fVar19 - (float)lVar13 < 1.0) {
          uStackY_140 = 0x9ff4fb;
          lVar13 = (longdouble)CountdownTimer::Now();
          if ((float)lVar13 + 1.0 != *(float *)(this + 0x2ef8)) {
            uStackY_140 = 0x9ffa28;
            (**(code **)(*(int *)(this + 0x2ef0) + 4))();
            *(float *)(this + 0x2ef8) = (float)lVar13 + 1.0;
          }
          if (*(float *)(this + 0x2ef4) != 1.0) {
            uStackY_140 = 0x9ff549;
            (**(code **)(*(int *)(this + 0x2ef0) + 4))();
            *(undefined4 *)(this + 0x2ef4) = 0x3f800000;
          }
        }
      }
    }
    uStackY_140 = 0x9fed19;
    cVar4 = (**(code **)(*(int *)this + 300))();
    if (((cVar4 != '\0') && (this[0x3e40] == (CTerrorPlayer)0x0)) &&
       ((float)*(int *)(this + 0x100) <
        *(float *)(SurvivorIncapacitatedDecayRate._28_4_ + 0x2c) * 10.0)) {
      this[0x3e40] = (CTerrorPlayer)0x1;
      if (this[0x39f1] == (CTerrorPlayer)0x0) {
        uStackY_140 = 0x9ff69d;
        (**(code **)(*(int *)(this + 0x3ab4) + 0x13c))();
      }
      else {
        uStackY_140 = 0x9fed6e;
        (**(code **)(*(int *)(this + 0x3ab4) + 0x11c))();
      }
    }
    uVar1 = *(uint *)(this + 0x2e28);
    if (((uVar1 != 0xffffffff) &&
        (puVar9 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar9 != (undefined *)0xfffffffc)) &&
       ((*(uint *)(puVar9 + 8) == uVar1 >> 0xc && (this == *(CTerrorPlayer **)(puVar9 + 4))))) {
      uStackY_140 = 0x9ff5e7;
      lVar13 = (longdouble)CountdownTimer::Now();
      if (*(float *)(this + 0x2e34) <= (float)lVar13) {
        uStackY_140 = 0x9ff60d;
        (**(code **)(*(int *)this + 0x924))();
      }
    }
    if (this[0x3a74] != (CTerrorPlayer)0x0) {
      return;
    }
    if (0.0 < *(float *)(this + 0x2db0)) {
      uStackY_140 = 0x9fedc8;
      lVar13 = (longdouble)IntervalTimer::Now();
      if ((float)lVar13 - *(float *)(this + 0x2db0) <= 1.5) {
        return;
      }
    }
    if (((byte)this[0x14d] & 0x10) != 0) {
      uStackY_140 = 0x9fee01;
      CBaseEntity::CalcAbsoluteVelocity((CBaseEntity *)this);
    }
    if (100.0 <= *(float *)(this + 0x27c) * *(float *)(this + 0x27c) +
                 *(float *)(this + 0x274) * *(float *)(this + 0x274) +
                 *(float *)(this + 0x278) * *(float *)(this + 0x278)) {
      return;
    }
    this[0x3a74] = (CTerrorPlayer)0x1;
    if (((byte)this[0x14d] & 8) != 0) {
      uStackY_140 = 0x9ff750;
      CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
    }
    local_f4 = *(undefined4 *)(this + 0x2e0);
    local_f0 = *(undefined4 *)(this + 0x2e4);
    local_ec = *(undefined4 *)(this + 0x2e8);
    uStackY_140 = 0x9fee83;
    iVar6 = (**(code **)(*g_pGameRules + 0x7c))();
    uStackY_140 = 0x9feeb8;
    cVar4 = UTIL_IsGroundLevel(48.0,(Vector *)&local_f4,*(float *)(iVar6 + 0x38),0x400b,
                               (CBaseEntity *)this,false);
    if (cVar4 == '\0') {
      return;
    }
    local_cc = local_f4;
    local_c8 = local_f0;
    local_c4 = local_ec;
    local_bc = 0;
    local_b8 = 0;
    local_b4 = 0xc2960000;
    local_87 = 1;
    local_94 = 0;
    local_98 = 0;
    local_9c = 0;
    local_8c = 0;
    local_88 = 1;
    local_a4 = 0;
    local_a8 = 0;
    local_ac = 0;
    uStackY_140 = 0x9fef87;
    CTraceFilterSimple::CTraceFilterSimple
              ((CTraceFilterSimple *)&local_dc,(IHandleEntity *)this,1,
               (_func_bool_IHandleEntity_ptr_int *)0x0);
    uStackY_140 = 0x9fefae;
    (**(code **)(*enginetrace + 0x14))();
    if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
      uStackY_140 = 0x9feff1;
      DebugDrawLine((Vector *)&local_7c,(Vector *)&local_70,0xff,0,0,true,-1.0);
    }
    if (1.0 <= local_50) {
      return;
    }
    if (local_45 != '\0') {
      return;
    }
    if (local_30 == (CBaseEntity *)0x0) {
      return;
    }
    if (*(char **)(local_30 + 0x7c) == "prop_*") {
      return;
    }
    uStackY_140 = 0x9ff035;
    cVar4 = CBaseEntity::ClassMatchesComplex(local_30,"prop_*");
    if (cVar4 != '\0') {
      return;
    }
    local_c4 = local_60 ^ 0x80000000;
    local_dc = local_70;
    local_cc = local_64;
    local_c8 = local_5c;
    local_d8 = local_6c;
    local_d4 = local_68;
    uStackY_140 = 0x9ff09c;
    VectorAngles((Vector *)&local_cc,(QAngle *)local_e8);
    for (iVar6 = IPredictionSystem::g_pPredictionSystems; iVar6 != 0; iVar6 = *(int *)(iVar6 + 4)) {
      *(int *)(iVar6 + 0x10) = *(int *)(iVar6 + 0x10) + 1;
    }
                    /* try { // try from 009ff10a to 009ff10e has its CatchHandler @ 009fff45 */
    uStackY_140 = 0x9ff10f;
    DispatchParticleEffect();
    for (iVar6 = IPredictionSystem::g_pPredictionSystems; iVar6 != 0; iVar6 = *(int *)(iVar6 + 4)) {
      *(int *)(iVar6 + 0x10) = *(int *)(iVar6 + 0x10) + -1;
    }
    return;
  }
  uVar1 = *(uint *)(this + 0x2e28);
  if (uVar1 == 0xffffffff) {
    return;
  }
  puVar9 = g_pEntityList + (uVar1 & 0xfff) * 0x10;
  if (puVar9 == (undefined *)0xfffffffc) {
    return;
  }
  if (*(uint *)(puVar9 + 8) != uVar1 >> 0xc) {
    return;
  }
  if (*(int *)(puVar9 + 4) == 0) {
    return;
  }
  uStackY_140 = 0x9ff149;
  lVar13 = (longdouble)CountdownTimer::Now();
  if (*(float *)(this + 0x2e34) <= (float)lVar13) {
    uVar1 = *(uint *)(this + 0x2e28);
    if (((uVar1 == 0xffffffff) ||
        (puVar9 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar9 == (undefined *)0xfffffffc)) ||
       (*(uint *)(puVar9 + 8) != uVar1 >> 0xc)) {
      piVar5 = (int *)0x0;
    }
    else {
      piVar5 = *(int **)(puVar9 + 4);
    }
    uStackY_140 = 0x9ff19a;
    (**(code **)(*piVar5 + 0x924))();
    return;
  }
  uStackY_140 = 0x9ff1d2;
  CBasePlayer::EyeVectors((CBasePlayer *)this,(Vector *)&local_cc,(Vector *)0x0,(Vector *)0x0);
  fVar19 = *(float *)(sb_revive_friend_distance._28_4_ + 0x2c) *
           *(float *)(sb_revive_friend_distance._28_4_ + 0x2c);
  uStackY_140 = 0x9ff1f0;
  iVar6 = CBasePlayer::GetElevator((CBasePlayer *)this);
  if (iVar6 != 0) {
    if (((byte)this[0x14d] & 8) != 0) {
      uStackY_140 = 0x9ff718;
      CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
    }
    uVar1 = *(uint *)(this + 0x2e28);
    pCVar12 = (CBaseEntity *)0x0;
    if (((uVar1 != 0xffffffff) &&
        (puVar9 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar9 != (undefined *)0xfffffffc)) &&
       (*(uint *)(puVar9 + 8) == uVar1 >> 0xc)) {
      pCVar12 = *(CBaseEntity **)(puVar9 + 4);
    }
    if (((byte)pCVar12[0x14d] & 8) != 0) {
      uStackY_140 = 0x9ff738;
      CBaseEntity::CalcAbsolutePosition(pCVar12);
    }
    puVar10 = (undefined4 *)&stack0xfffffec4;
    if ((fVar19 < (*(float *)(pCVar12 + 0x2e0) - *(float *)(this + 0x2e0)) *
                  (*(float *)(pCVar12 + 0x2e0) - *(float *)(this + 0x2e0)) +
                  (*(float *)(pCVar12 + 0x2e4) - *(float *)(this + 0x2e4)) *
                  (*(float *)(pCVar12 + 0x2e4) - *(float *)(this + 0x2e4))) &&
       (puVar10 = (undefined4 *)&stack0xfffffec4, ((byte)this[0x150] & 0x20) == 0))
    goto LAB_009ff56d;
    goto LAB_009ff282;
  }
  uVar1 = *(uint *)(this + 0x2e28);
  if ((uVar1 == 0xffffffff) ||
     (puVar9 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar9 == (undefined *)0xfffffffc)) {
    if (DAT_000039f1 == '\0') {
LAB_009ff87e:
      piVar5 = (int *)0x0;
      goto LAB_009ff880;
    }
LAB_009ffa4d:
    iVar6 = 0;
    fVar16 = _DAT_00003a24;
LAB_009ffa57:
    fVar15 = *(float *)(iVar6 + 0x3a20);
    uStackY_140 = 0x9ffa94;
    pfVar7 = (float *)(**(code **)(*g_pGameRules + 0x7c))();
    uVar1 = *(uint *)(this + 0x2e28);
    iVar6 = 0;
    if (((uVar1 != 0xffffffff) &&
        (puVar9 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar9 != (undefined *)0xfffffffc)) &&
       (*(uint *)(puVar9 + 8) == uVar1 >> 0xc)) {
      iVar6 = *(int *)(puVar9 + 4);
    }
    fVar15 = (*pfVar7 + *(float *)(iVar6 + 0x3a08)) - fVar15 * 32.0;
    fVar14 = pfVar7[2] + *(float *)(iVar6 + 0x3a10);
    fVar18 = (pfVar7[1] + *(float *)(iVar6 + 0x3a0c)) - fVar16 * 32.0;
    if (((byte)this[0x14d] & 8) != 0) {
      uStackY_140 = 0x9ffcd2;
      CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
    }
    fVar16 = *(float *)(this + 0x2e0) - fVar15;
    fVar20 = *(float *)(this + 0x2e8) - fVar14;
    fVar17 = *(float *)(this + 0x2e4) - fVar18;
    puVar10 = (undefined4 *)&stack0xfffffec4;
    if (fVar16 * fVar16 + fVar20 * fVar20 + fVar17 * fVar17 <= fVar19) goto LAB_009ff282;
    uStackY_140 = 0x9ffb85;
    (**(code **)(*(int *)this + 0x234))();
    fVar15 = local_7c - fVar15;
    fVar18 = local_78 - fVar18;
    local_7c = local_74 - fVar14;
  }
  else {
    if (*(uint *)(puVar9 + 8) == uVar1 >> 0xc) {
      iVar6 = *(int *)(puVar9 + 4);
    }
    else {
      iVar6 = 0;
    }
    if ((&DAT_000039f1)[iVar6] != '\0') {
      if ((puVar9 == (undefined *)0xfffffffc) || (*(uint *)(puVar9 + 8) != uVar1 >> 0xc))
      goto LAB_009ffa4d;
      iVar6 = *(int *)(puVar9 + 4);
      fVar16 = *(float *)(&DAT_00003a24 + iVar6);
      goto LAB_009ffa57;
    }
    if (*(uint *)(puVar9 + 8) != uVar1 >> 0xc) goto LAB_009ff87e;
    piVar5 = *(int **)(puVar9 + 4);
LAB_009ff880:
    uStackY_140 = 0x9ff893;
    pfVar7 = (float *)(**(code **)(*piVar5 + 0x288))();
    fVar16 = *pfVar7;
    fVar15 = pfVar7[1];
    fVar18 = pfVar7[2];
    if (((byte)this[0x14d] & 8) != 0) {
      uStackY_140 = 0x9ffc85;
      CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
    }
    fVar20 = *(float *)(this + 0x2e0) - fVar16;
    fVar14 = *(float *)(this + 0x2e4) - fVar15;
    fVar17 = *(float *)(this + 0x2e8) - fVar18;
    puVar10 = (undefined4 *)&stack0xfffffec4;
    if (fVar14 * fVar14 + fVar20 * fVar20 + fVar17 * fVar17 <= fVar19) goto LAB_009ff282;
    uStackY_140 = 0x9ff929;
    (**(code **)(*(int *)this + 0x234))();
    local_7c = local_7c - fVar16;
    fVar15 = local_78 - fVar15;
    fVar18 = local_74 - fVar18;
  }
  puVar11 = &uStackY_140;
  puVar10 = &uStackY_140;
  if ((fVar19 < fVar15 * fVar15 + local_7c * local_7c + fVar18 * fVar18) &&
     (puVar10 = &uStackY_140, (((byte)(*(uint *)(this + 0x150) >> 5) ^ 1) & 1) != 0)) {
LAB_009ff56d:
    uVar1 = *(uint *)(this + 0x2e28);
    uVar8 = 0;
    if ((uVar1 != 0xffffffff) &&
       ((puVar9 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar9 != (undefined *)0xfffffffc &&
        (*(uint *)(puVar9 + 8) == uVar1 >> 0xc)))) {
      uVar8 = *(undefined4 *)(puVar9 + 4);
    }
    puVar11[2] = uVar8;
    puVar11[1] = this;
    *puVar11 = "%s was moved and stops reviving %s";
    puVar11[-1] = 0x9ff5b3;
    IncapLog((char *)*puVar11,(CTerrorPlayer *)puVar11[1],(CTerrorPlayer *)puVar11[2]);
    *puVar11 = this;
    puVar11[1] = 1;
    puVar11[-1] = 0x9ff5c3;
    StopRevivingSomeone((CTerrorPlayer *)*puVar11,*(bool *)(puVar11 + 1));
    return;
  }
LAB_009ff282:
  iVar6 = *(int *)this;
  *puVar10 = this;
  pcVar2 = *(code **)(iVar6 + 0x7e8);
  puVar10[-1] = 0x9ff28d;
  cVar4 = (*pcVar2)();
  if (cVar4 == '\0') {
    *puVar10 = this;
    puVar10[-1] = 0x9ff620;
    cVar4 = IsFiringWeapon((CTerrorPlayer *)*puVar10);
    if (cVar4 == '\0') {
      *puVar10 = this;
      puVar10[-1] = 0x9ffbed;
      iVar6 = CBaseCombatCharacter::GetActiveWeapon((CBaseCombatCharacter *)*puVar10);
      if ((iVar6 == 0) || (*(char *)(iVar6 + 0x1459) == '\0')) {
        *puVar10 = this;
        puVar10[-1] = 0x9ffd38;
        cVar4 = IsShoving((CTerrorPlayer *)*puVar10);
        if (cVar4 == '\0') {
          uVar1 = *(uint *)(this + 0x33c4);
          if ((((uVar1 == 0xffffffff) ||
               (puVar9 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar9 == (undefined *)0xfffffffc))
              || (*(uint *)(puVar9 + 8) != uVar1 >> 0xc)) || (*(int *)(puVar9 + 4) == 0)) {
            uVar1 = *(uint *)(this + 0x3e68);
            if (((uVar1 == 0xffffffff) ||
                (puVar9 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar9 == (undefined *)0xfffffffc)
                ) || ((*(uint *)(puVar9 + 8) != uVar1 >> 0xc || (*(int *)(puVar9 + 4) == 0)))) {
              if ((*(int *)(SurvivorReviveContinuousFire._28_4_ + 0x30) != 0) &&
                 ((*(uint *)(this + 0x1cb0) & 0x21) != *(uint *)(this + 0x2e50))) {
                uVar1 = *(uint *)(this + 0x2e28);
                if ((uVar1 == 0xffffffff) ||
                   ((puVar9 = g_pEntityList + (uVar1 & 0xfff) * 0x10,
                    puVar9 == (undefined *)0xfffffffc || (*(uint *)(puVar9 + 8) != uVar1 >> 0xc))))
                {
                  uVar8 = 0;
                }
                else {
                  uVar8 = *(undefined4 *)(puVar9 + 4);
                }
                puVar10[2] = uVar8;
                puVar10[1] = this;
                *puVar10 = "%s stopped holding revive key and stops reviving %s";
                puVar10[-1] = 0x9ffe59;
                IncapLog((char *)*puVar10,(CTerrorPlayer *)puVar10[1],(CTerrorPlayer *)puVar10[2]);
                puVar10[1] = 1;
                *puVar10 = this;
                puVar10[-1] = 0x9ffe69;
                StopRevivingSomeone((CTerrorPlayer *)*puVar10,*(bool *)(puVar10 + 1));
              }
            }
            else {
              uVar1 = *(uint *)(this + 0x2e28);
              if (((uVar1 == 0xffffffff) ||
                  (puVar9 = g_pEntityList + (uVar1 & 0xfff) * 0x10,
                  puVar9 == (undefined *)0xfffffffc)) || (*(uint *)(puVar9 + 8) != uVar1 >> 0xc)) {
                uVar8 = 0;
              }
              else {
                uVar8 = *(undefined4 *)(puVar9 + 4);
              }
              puVar10[2] = uVar8;
              puVar10[1] = this;
              *puVar10 = "%s was pounced and stops reviving %s";
              puVar10[-1] = 0x9fff1e;
              IncapLog((char *)*puVar10,(CTerrorPlayer *)puVar10[1],(CTerrorPlayer *)puVar10[2]);
              puVar10[1] = 1;
              *puVar10 = this;
              puVar10[-1] = 0x9fff2e;
              StopRevivingSomeone((CTerrorPlayer *)*puVar10,*(bool *)(puVar10 + 1));
            }
          }
          else {
            uVar1 = *(uint *)(this + 0x2e28);
            if (((uVar1 == 0xffffffff) ||
                (puVar9 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar9 == (undefined *)0xfffffffc)
                ) || (*(uint *)(puVar9 + 8) != uVar1 >> 0xc)) {
              uVar8 = 0;
            }
            else {
              uVar8 = *(undefined4 *)(puVar9 + 4);
            }
            puVar10[2] = uVar8;
            puVar10[1] = this;
            *puVar10 = "%s got pulled and stops reviving %s";
            puVar10[-1] = 0x9ffebd;
            IncapLog((char *)*puVar10,(CTerrorPlayer *)puVar10[1],(CTerrorPlayer *)puVar10[2]);
            puVar10[1] = 1;
            *puVar10 = this;
            puVar10[-1] = 0x9ffecd;
            StopRevivingSomeone((CTerrorPlayer *)*puVar10,*(bool *)(puVar10 + 1));
          }
        }
        else {
          uVar1 = *(uint *)(this + 0x2e28);
          if (((uVar1 == 0xffffffff) ||
              (puVar9 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar9 == (undefined *)0xfffffffc))
             || (*(uint *)(puVar9 + 8) != uVar1 >> 0xc)) {
            uVar8 = 0;
          }
          else {
            uVar8 = *(undefined4 *)(puVar9 + 4);
          }
          puVar10[2] = uVar8;
          puVar10[1] = this;
          *puVar10 = "%s shoved and stops reviving %s";
          puVar10[-1] = 0x9ffd7e;
          IncapLog((char *)*puVar10,(CTerrorPlayer *)puVar10[1],(CTerrorPlayer *)puVar10[2]);
          puVar10[1] = 1;
          *puVar10 = this;
          puVar10[-1] = 0x9ffd8e;
          StopRevivingSomeone((CTerrorPlayer *)*puVar10,*(bool *)(puVar10 + 1));
        }
      }
      else {
        uVar1 = *(uint *)(this + 0x2e28);
        uVar8 = 0;
        if (((uVar1 != 0xffffffff) &&
            (puVar9 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar9 != (undefined *)0xfffffffc)) &&
           (*(uint *)(puVar9 + 8) == uVar1 >> 0xc)) {
          uVar8 = *(undefined4 *)(puVar9 + 4);
        }
        puVar10[2] = uVar8;
        puVar10[1] = this;
        *puVar10 = "%s reloads and stops reviving %s";
        puVar10[-1] = 0x9ffc48;
        IncapLog((char *)*puVar10,(CTerrorPlayer *)puVar10[1],(CTerrorPlayer *)puVar10[2]);
        puVar10[1] = 1;
        *puVar10 = this;
        puVar10[-1] = 0x9ffc58;
        StopRevivingSomeone((CTerrorPlayer *)*puVar10,*(bool *)(puVar10 + 1));
      }
    }
    else {
      uVar1 = *(uint *)(this + 0x2e28);
      uVar8 = 0;
      if (((uVar1 != 0xffffffff) &&
          (puVar9 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar9 != (undefined *)0xfffffffc)) &&
         (*(uint *)(puVar9 + 8) == uVar1 >> 0xc)) {
        uVar8 = *(undefined4 *)(puVar9 + 4);
      }
      puVar10[2] = uVar8;
      puVar10[1] = this;
      *puVar10 = "%s attacked and stops reviving %s";
      puVar10[-1] = 0x9ff66f;
      IncapLog((char *)*puVar10,(CTerrorPlayer *)puVar10[1],(CTerrorPlayer *)puVar10[2]);
      puVar10[1] = 1;
      *puVar10 = this;
      puVar10[-1] = 0x9ff67f;
      StopRevivingSomeone((CTerrorPlayer *)*puVar10,*(bool *)(puVar10 + 1));
    }
  }
  else {
    uVar1 = *(uint *)(this + 0x2e28);
    uVar8 = 0;
    if (((uVar1 != 0xffffffff) &&
        (puVar9 = g_pEntityList + (uVar1 & 0xfff) * 0x10, puVar9 != (undefined *)0xfffffffc)) &&
       (*(uint *)(puVar9 + 8) == uVar1 >> 0xc)) {
      uVar8 = *(undefined4 *)(puVar9 + 4);
    }
    puVar10[2] = uVar8;
    puVar10[1] = this;
    *puVar10 = "%s was incapacitated and stops reviving %s";
    puVar10[-1] = 0x9ff2dc;
    IncapLog((char *)*puVar10,(CTerrorPlayer *)puVar10[1],(CTerrorPlayer *)puVar10[2]);
    puVar10[1] = 1;
    *puVar10 = this;
    puVar10[-1] = 0x9ff2ec;
    StopRevivingSomeone((CTerrorPlayer *)*puVar10,*(bool *)(puVar10 + 1));
  }
  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)