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 intoaddons/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.
Signatures + Functions block. The plugin uses
DHookCreateFromConf - DHooks reads return type, this-type,
calling convention, and argument types straight from the gamedata. Less
boilerplate in the plugin, types travel with the gamedata.
Gamedata KeyValues
DHooks plugin example
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.