CTerrorPlayer::Event_Killed
0x009dfa70 · 13505 bytes · __thiscall
_ZN13CTerrorPlayer12Event_KilledERK15CTakeDamageInfo
Decompiled
undefined (2 params)
/* CTerrorPlayer::Event_Killed(CTakeDamageInfo const&) */
void __thiscall CTerrorPlayer::Event_Killed(CTerrorPlayer *this,CTakeDamageInfo *param_1)
{
float fVar1;
float fVar2;
float fVar3;
float fVar4;
float fVar5;
CTerrorPlayer CVar6;
uint uVar7;
CBaseEdict *pCVar8;
char cVar9;
char cVar10;
undefined1 uVar11;
int iVar12;
char *pcVar13;
CBaseCombatWeapon *this_00;
undefined4 uVar14;
undefined4 *puVar15;
int iVar16;
CBaseEntity *pCVar17;
QAngle *pQVar18;
Vector *pVVar19;
CTerrorPlayer *pCVar20;
uint *puVar21;
int iVar22;
CVomit *this_01;
float *pfVar23;
CInferno *pCVar24;
int *piVar25;
code *pcVar26;
undefined *puVar27;
int *piVar28;
uint uVar29;
float fVar30;
undefined *puVar31;
int in_GS_OFFSET;
bool bVar32;
byte bVar33;
longdouble lVar34;
float local_29c;
float local_284;
CBaseEntity *local_280;
undefined1 local_270 [12];
undefined4 local_264;
undefined4 local_260;
uint local_25c;
undefined4 local_258;
undefined4 local_254;
undefined4 local_250;
float local_24c;
float local_248;
CTerrorPlayer *local_244;
CTerrorPlayer *local_23c;
float local_238;
float local_234;
undefined4 local_230;
float local_22c;
float local_228;
float local_224;
undefined4 local_21c;
undefined4 local_218;
undefined4 local_214;
undefined4 local_20c;
undefined4 local_208;
undefined4 local_204;
undefined4 local_1fc;
undefined1 local_1f8;
undefined1 local_1f7;
undefined4 local_1ec;
undefined4 local_1e8;
uint local_1e4;
undefined4 local_1e0;
undefined4 local_1dc;
undefined4 local_1d8;
undefined4 local_1d4;
undefined4 local_1d0;
undefined4 local_1cc;
undefined4 local_1c8;
undefined4 local_1c4;
undefined4 local_1c0;
undefined4 local_1bc;
uint local_1b8;
undefined4 local_1b4;
undefined4 local_1b0;
undefined4 local_1ac;
undefined4 local_1a8;
uint local_1a4;
undefined4 local_1a0;
undefined4 local_19c;
undefined4 local_198;
undefined4 local_194;
undefined4 local_190;
CTerrorPlayer *local_180;
char *local_17c;
char *local_178;
float local_174;
float local_170;
CTerrorPlayer *local_16c;
undefined4 local_168;
uint local_164;
undefined4 local_160;
float local_154;
char local_149;
CBaseEntity *local_134;
char local_120 [4];
undefined4 local_11c [63];
int local_20;
bVar33 = 0;
local_20 = *(int *)(in_GS_OFFSET + 0x14);
cVar9 = (**(code **)(*(int *)this + 0x558))(this);
(**(code **)(*(int *)this + 0x234))(local_270,this);
*(undefined4 *)(this + 0x2d48) = *(undefined4 *)(gpGlobals + 0xc);
if (((byte)this[0x14d] & 8) != 0) {
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
}
*(undefined4 *)(this + 0x2d3c) = *(undefined4 *)(this + 0x2e0);
*(undefined4 *)(this + 0x2d40) = *(undefined4 *)(this + 0x2e4);
*(undefined4 *)(this + 0x2d44) = *(undefined4 *)(this + 0x2e8);
cVar10 = CTerrorGameRules::HasPlayerControlledZombies();
if ((((cVar10 != '\0') && (uVar7 = *(uint *)(param_1 + 0x34), uVar7 != 0xffffffff)) &&
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) &&
((*(uint *)(puVar27 + 8) == uVar7 >> 0xc &&
(pCVar17 = *(CBaseEntity **)(puVar27 + 4), pCVar17 != (CBaseEntity *)0x0)))) {
if ((*(char **)(pCVar17 + 0x7c) != "trigger_hurt") &&
(cVar10 = CBaseEntity::ClassMatchesComplex(pCVar17,"trigger_hurt"), cVar10 == '\0')) {
pCVar17 = (CBaseEntity *)0x0;
uVar7 = *(uint *)(param_1 + 0x34);
if (((uVar7 != 0xffffffff) &&
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar27 + 8) == uVar7 >> 0xc)) {
pCVar17 = *(CBaseEntity **)(puVar27 + 4);
}
if ((*(char **)(pCVar17 + 0x7c) != "trigger_hurt_ghost") &&
(cVar10 = CBaseEntity::ClassMatchesComplex(pCVar17,"trigger_hurt_ghost"), cVar10 == '\0'))
goto LAB_009dfb40;
}
uVar7 = *(uint *)(this + 0x2a4c);
if ((uVar7 == 0xffffffff) ||
(((puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 == (undefined *)0xfffffffc ||
(*(uint *)(puVar27 + 8) != uVar7 >> 0xc)) ||
(*(CTerrorPlayer **)(puVar27 + 4) == (CTerrorPlayer *)0x0)))) {
cVar10 = CTerrorPlayerAnimState::IsHitByCharger(*(CTerrorPlayerAnimState **)(this + 0x2910));
if (cVar10 == '\0') {
uVar7 = *(uint *)(this + 0x2a48);
if (((uVar7 != 0xffffffff) &&
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc))
&& ((*(uint *)(puVar27 + 8) == uVar7 >> 0xc && (*(int *)(puVar27 + 4) != 0)))) {
AddSurvivorDamage(this,300,0,*(undefined4 *)(*(int *)(puVar27 + 4) + 0x2ba0));
piVar28 = (int *)(**(code **)(*gameeventmanager + 0x1c))
(gameeventmanager,"charger_carry_kill",0,0);
if (piVar28 != (int *)0x0) {
pcVar26 = *(code **)(*piVar28 + 0x30);
uVar14 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)(this + 0x30));
(*pcVar26)(piVar28,"userid",uVar14);
iVar12 = 0;
local_280 = *(CBaseEntity **)(*piVar28 + 0x30);
uVar7 = *(uint *)(this + 0x2a48);
if (((uVar7 != 0xffffffff) &&
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10,
puVar27 != (undefined *)0xfffffffc)) && (*(uint *)(puVar27 + 8) == uVar7 >> 0xc)) {
iVar12 = *(int *)(puVar27 + 4);
}
uVar14 = *(undefined4 *)(iVar12 + 0x30);
iVar12 = *engine;
goto LAB_009e1647;
}
}
}
else {
pCVar20 = (CTerrorPlayer *)GetOtherResponsibleForMovement(this);
if ((pCVar20 != (CTerrorPlayer *)0x0) &&
(cVar10 = (**(code **)(*(int *)pCVar20 + 0x16c))(pCVar20), cVar10 != '\0')) {
AddSurvivorDamage(pCVar20,300,0,*(undefined4 *)(this + 0x2ba0));
}
}
}
else {
AddSurvivorDamage(*(CTerrorPlayer **)(puVar27 + 4),300,0,*(undefined4 *)(this + 0x2ba0));
piVar28 = (int *)(**(code **)(*gameeventmanager + 0x1c))
(gameeventmanager,"charger_carry_kill",0,0);
if (piVar28 != (int *)0x0) {
iVar12 = 0;
pcVar26 = *(code **)(*piVar28 + 0x30);
uVar7 = *(uint *)(this + 0x2a4c);
if (((uVar7 != 0xffffffff) &&
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc))
&& (*(uint *)(puVar27 + 8) == uVar7 >> 0xc)) {
iVar12 = *(int *)(puVar27 + 4);
}
uVar14 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)(iVar12 + 0x30));
(*pcVar26)(piVar28,"userid",uVar14);
uVar14 = *(undefined4 *)(this + 0x30);
local_280 = *(CBaseEntity **)(*piVar28 + 0x30);
iVar12 = *engine;
LAB_009e1647:
uVar14 = (**(code **)(iVar12 + 0x40))(engine,uVar14);
(*(code *)local_280)(piVar28,"victim",uVar14);
(**(code **)(*gameeventmanager + 0x20))(gameeventmanager,piVar28,0);
}
}
}
LAB_009dfb40:
iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
cVar10 = IsASurvivorTeam(iVar12);
if (cVar10 == '\0') {
*(undefined4 *)(this + 0x2d5c) = 0;
}
else {
iVar12 = *(int *)(this + 0x3974);
if (this[0x6c] == (CTerrorPlayer)0x0) {
pCVar8 = *(CBaseEdict **)(this + 0x30);
if (pCVar8 != (CBaseEdict *)0x0) {
*(uint *)pCVar8 = *(uint *)pCVar8 | 0x101;
iVar16 = CBaseEdict::GetChangeAccessor(pCVar8);
*(undefined2 *)(iVar16 + 2) = 0;
}
}
else {
this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
}
*(int *)(this + 0x3974) = iVar12 + 1;
uVar7 = *(uint *)(param_1 + 0x34);
if (((uVar7 != 0xffffffff) &&
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) &&
((*(uint *)(puVar27 + 8) == uVar7 >> 0xc &&
(((pCVar20 = *(CTerrorPlayer **)(puVar27 + 4), pCVar20 != (CTerrorPlayer *)0x0 &&
(cVar10 = (**(code **)(*(int *)pCVar20 + 0x16c))(pCVar20), cVar10 != '\0')) &&
(iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)pCVar20), iVar12 == 3)))))) {
OnKilledSurvivor(pCVar20,*(undefined4 *)(this + 0x2ba0));
}
if ((((byte)param_1[0x4a] & 0x10) != 0) || (this[0x33dc] != (CTerrorPlayer)0x0)) {
CBaseEntity::EmitSound((CBaseEntity *)this,"Player.NeckSnap",0.0,(float *)0x0);
}
local_23c = (CTerrorPlayer *)0xc61c3c00;
local_238 = 2.8026e-45;
local_234 = 0.0;
local_230 = 0;
local_22c = 0.0;
local_228 = 0.0;
ForEachTerrorPlayer<HighestFlowDistance>((HighestFlowDistance *)&local_23c);
*(CTerrorPlayer **)(this + 0x2d5c) = local_23c;
iVar12 = (**(code **)(*(int *)this + 0x52c))(this);
if ((iVar12 != 0) && (fVar30 = *(float *)(iVar12 + 0x154), 0.0 <= fVar30)) {
if (fVar30 <= *(float *)(this + 0x2d5c)) {
fVar30 = *(float *)(this + 0x2d5c);
}
*(float *)(this + 0x2d5c) = fVar30;
}
UpdateActiveSet(this,(CNavArea *)0x0,(CNavArea *)0x0);
(**(code **)(*(int *)(this + 0x3ab4) + 0x5c))(this + 0x3ab4,this[0x3e40]);
if (((byte)this[0x14d] & 0x10) != 0) {
CBaseEntity::CalcAbsoluteVelocity((CBaseEntity *)this);
}
if (*(float *)(this + 0x274) * *(float *)(this + 0x274) +
*(float *)(this + 0x278) * *(float *)(this + 0x278) < 100.0) {
if (((byte)this[0x14d] & 0x10) != 0) {
CBaseEntity::CalcAbsoluteVelocity((CBaseEntity *)this);
}
if (*(float *)(this + 0x27c) <= 10.0 && *(float *)(this + 0x27c) != 10.0) {
if (((byte)this[0x14d] & 8) != 0) {
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
}
local_264 = *(undefined4 *)(this + 0x2e0);
local_260 = *(undefined4 *)(this + 0x2e4);
local_25c = *(uint *)(this + 0x2e8);
iVar12 = (**(code **)(*g_pGameRules + 0x7c))(g_pGameRules);
cVar10 = UTIL_IsGroundLevel(48.0,(Vector *)&local_264,*(float *)(iVar12 + 0x38),0x400b,
(CBaseEntity *)this,false);
if (cVar10 != '\0') {
local_1ec = local_264;
local_1e8 = local_260;
local_1e4 = local_25c;
local_1dc = 0;
local_1d8 = 0;
local_1d4 = 0xc2960000;
local_1a8 = CONCAT22(local_1a8._2_2_,0x100);
local_1b4 = 0;
local_1b8 = 0;
local_1bc = 0;
local_1ac = 0;
local_1a8 = CONCAT31(local_1a8._1_3_,1);
local_1c4 = 0;
local_1c8 = 0;
local_1cc = 0;
CTraceFilterSimple::CTraceFilterSimple
((CTraceFilterSimple *)&local_24c,(IHandleEntity *)this,1,
(_func_bool_IHandleEntity_ptr_int *)0x0);
(**(code **)(*enginetrace + 0x14))
(enginetrace,(Vector *)&local_1ec,0x400b,(CTraceFilterSimple *)&local_24c,
(Vector *)&local_180);
if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
DebugDrawLine((Vector *)&local_180,(Vector *)&local_174,0xff,0,0,true,-1.0);
}
if ((((local_154 < 1.0) && (local_149 == '\0')) && (local_134 != (CBaseEntity *)0x0)) &&
((*(char **)(local_134 + 0x7c) != "prop_*" &&
(cVar10 = CBaseEntity::ClassMatchesComplex(local_134,"prop_*"), cVar10 == '\0')))) {
local_1e4 = local_164 ^ 0x80000000;
local_24c = local_174;
local_1ec = local_168;
local_1e8 = local_160;
local_248 = local_170;
local_244 = local_16c;
VectorAngles((Vector *)&local_1ec,(QAngle *)&local_258);
for (iVar12 = IPredictionSystem::g_pPredictionSystems; iVar12 != 0;
iVar12 = *(int *)(iVar12 + 4)) {
*(int *)(iVar12 + 0x10) = *(int *)(iVar12 + 0x10) + 1;
}
/* try { // try from 009e06d2 to 009e06d6 has its CatchHandler @ 009e3088 */
DispatchParticleEffect
("blood_bleedout",local_24c,local_248,local_244,local_258,local_254,local_250,
this,0,0xffffffff);
for (iVar12 = IPredictionSystem::g_pPredictionSystems; iVar12 != 0;
iVar12 = *(int *)(iVar12 + 4)) {
*(int *)(iVar12 + 0x10) = *(int *)(iVar12 + 0x10) + -1;
}
}
}
}
}
}
local_280 = (CBaseEntity *)&local_1ec;
iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
if ((iVar12 == 3) && (iVar12 = (**(code **)(*(int *)this + 0x544))(this), iVar12 == 8)) {
if (*(int *)(this + 0x3088) != 0) {
if (this[0x6c] == (CTerrorPlayer)0x0) {
pCVar8 = *(CBaseEdict **)(this + 0x30);
if (pCVar8 != (CBaseEdict *)0x0) {
*(uint *)pCVar8 = *(uint *)pCVar8 | 0x101;
iVar12 = CBaseEdict::GetChangeAccessor(pCVar8);
*(undefined2 *)(iVar12 + 2) = 0;
}
}
else {
this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
}
*(undefined4 *)(this + 0x3088) = 0;
}
}
else {
iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
if ((iVar12 == 3) && (iVar12 = (**(code **)(*(int *)this + 0x544))(this), iVar12 == 4)) {
piVar28 = (int *)(**(code **)(*gameeventmanager + 0x1c))
(gameeventmanager,"spitter_killed",0,0);
if (piVar28 != (int *)0x0) {
uVar7 = *(uint *)(param_1 + 0x34);
if ((((uVar7 == 0xffffffff) ||
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 == (undefined *)0xfffffffc))
|| (*(uint *)(puVar27 + 8) != uVar7 >> 0xc)) ||
((piVar25 = *(int **)(puVar27 + 4), piVar25 == (int *)0x0 ||
(cVar10 = (**(code **)(*piVar25 + 0x16c))(piVar25), cVar10 == '\0')))) {
pcVar26 = *(code **)(*piVar28 + 0x30);
uVar14 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)(this + 0x30));
(*pcVar26)(piVar28,"userid",uVar14);
pcVar26 = *(code **)(*piVar28 + 0x30);
uVar14 = 0;
}
else {
pcVar26 = *(code **)(*piVar28 + 0x30);
uVar14 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)(this + 0x30));
(*pcVar26)(piVar28,"userid",uVar14);
pcVar26 = *(code **)(*piVar28 + 0x30);
uVar14 = (**(code **)(*engine + 0x40))(engine,piVar25[0xc]);
}
(*pcVar26)(piVar28,"attacker",uVar14);
(**(code **)(*gameeventmanager + 0x20))(gameeventmanager,piVar28,0);
}
}
else {
iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
if ((iVar12 == 3) && (iVar12 = (**(code **)(*(int *)this + 0x544))(this), iVar12 == 2)) {
uVar7 = *(uint *)(this + 0x30bc);
if ((((uVar7 != 0xffffffff) &&
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc))
&& ((*(uint *)(puVar27 + 8) == uVar7 >> 0xc &&
((*(int *)(puVar27 + 4) != 0 &&
(this_01 = (CVomit *)
__dynamic_cast(*(int *)(puVar27 + 4),&CBaseAbility::typeinfo,
&CVomit::typeinfo,0), this_01 != (CVomit *)0x0)))))) &&
(cVar10 = (**(code **)(*(int *)this_01 + 0x354))(this_01), cVar10 != '\0')) {
CVomit::StopVomitEffect(this_01);
}
VisibilityMonitor_RemoveEntity((CBaseEntity *)this);
}
else {
iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
if ((iVar12 == 3) &&
((pCVar20 = this, iVar12 = (**(code **)(*(int *)this + 0x544))(), iVar12 == 6 &&
(uVar7 = *(uint *)(this + 0x3e4c), uVar7 != 0xffffffff)))) {
uVar29 = uVar7 & 0xfff;
puVar15 = (undefined4 *)(g_pEntityList + uVar29 * 0x10 + 4);
if ((puVar15 != (undefined4 *)0x0) &&
((*(uint *)(g_pEntityList + uVar29 * 0x10 + 8) == uVar7 >> 0xc &&
(*(int *)(g_pEntityList + uVar29 * 0x10 + 4) != 0)))) {
if ((&DAT_000039f1)[*(int *)(g_pEntityList + uVar29 * 0x10 + 4)] == '\0') {
WarpToValidPositionIfStuck(pCVar20);
uVar7 = *(uint *)(this + 0x3e4c);
pCVar17 = (CBaseEntity *)0x0;
if (((uVar7 != 0xffffffff) &&
(puVar15 = (undefined4 *)(g_pEntityList + (uVar7 & 0xfff) * 0x10 + 4),
puVar15 != (undefined4 *)0x0)) && (puVar15[1] == uVar7 >> 0xc)) goto LAB_009e27ed;
}
else {
LAB_009e27ed:
pCVar17 = (CBaseEntity *)*puVar15;
}
CBaseEntity::SetMoveType(pCVar17,2,0);
uVar7 = *(uint *)(this + 0x3e4c);
piVar28 = (int *)0x0;
if (((uVar7 != 0xffffffff) &&
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10,
puVar27 != (undefined *)0xfffffffc)) && (*(uint *)(puVar27 + 8) == uVar7 >> 0xc)) {
piVar28 = *(int **)(puVar27 + 4);
}
(**(code **)(*piVar28 + 0x98))(piVar28,0,0xffffffff);
puVar27 = g_pEntityList;
uVar7 = *(uint *)(this + 0x3e4c);
local_29c = 0.0;
if (((uVar7 != 0xffffffff) &&
(puVar31 = g_pEntityList + (uVar7 & 0xfff) * 0x10,
puVar31 != (undefined *)0xfffffffc)) && (*(uint *)(puVar31 + 8) == uVar7 >> 0xc)) {
local_29c = *(float *)(puVar31 + 4);
}
bVar32 = g_pEntityList == (undefined *)0xfffffffc;
*(undefined4 *)((int)local_29c + 0x3e54) = 0xffffffff;
if ((bVar32) || (*(int *)(puVar27 + 8) != 0)) {
iVar12 = 0;
}
else {
iVar12 = *(int *)(puVar27 + 4);
}
uVar7 = *(uint *)(this + 0x3e4c);
if (((uVar7 == 0xffffffff) ||
(puVar27 = puVar27 + (uVar7 & 0xfff) * 0x10, puVar27 == (undefined *)0xfffffffc)) ||
(*(uint *)(puVar27 + 8) != uVar7 >> 0xc)) {
iVar16 = 0;
}
else {
iVar16 = *(int *)(puVar27 + 4);
}
if (iVar12 != iVar16) {
if (this[0x6c] == (CTerrorPlayer)0x0) {
pCVar8 = *(CBaseEdict **)(this + 0x30);
if (pCVar8 != (CBaseEdict *)0x0) {
*(uint *)pCVar8 = *(uint *)pCVar8 | 0x101;
iVar12 = CBaseEdict::GetChangeAccessor(pCVar8);
*(undefined2 *)(iVar12 + 2) = 0;
}
}
else {
this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
}
*(undefined4 *)(this + 0x3e4c) = 0;
}
}
}
}
}
}
local_1ec = *(undefined4 *)param_1;
local_1b4 = *(undefined4 *)(param_1 + 0x38);
local_1b0 = *(undefined4 *)(param_1 + 0x3c);
local_1e8 = *(undefined4 *)(param_1 + 4);
local_1ac = *(undefined4 *)(param_1 + 0x40);
local_1e4 = *(uint *)(param_1 + 8);
local_1e0 = *(undefined4 *)(param_1 + 0xc);
local_1dc = *(undefined4 *)(param_1 + 0x10);
local_1d8 = *(undefined4 *)(param_1 + 0x14);
local_1d4 = *(undefined4 *)(param_1 + 0x18);
local_1d0 = *(undefined4 *)(param_1 + 0x1c);
local_1cc = *(undefined4 *)(param_1 + 0x20);
local_1c8 = *(undefined4 *)(param_1 + 0x24);
local_1c4 = *(undefined4 *)(param_1 + 0x28);
local_1c0 = *(undefined4 *)(param_1 + 0x2c);
local_1bc = *(undefined4 *)(param_1 + 0x30);
local_1b8 = *(uint *)(param_1 + 0x34);
local_1a0 = *(undefined4 *)(param_1 + 0x4c);
local_1a4 = *(uint *)(param_1 + 0x48);
local_1a8 = *(undefined4 *)(param_1 + 0x44);
local_19c = *(undefined4 *)(param_1 + 0x50);
local_194 = *(undefined4 *)(param_1 + 0x58);
local_198 = *(undefined4 *)(param_1 + 0x54);
local_190 = *(undefined4 *)(param_1 + 0x5c);
if ((local_1a4 & 0x20) != 0) {
piVar28 = (int *)0x0;
if (((local_1b8 != 0xffffffff) &&
(puVar27 = g_pEntityList + (local_1b8 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc))
&& (*(uint *)(puVar27 + 8) == local_1b8 >> 0xc)) {
piVar28 = *(int **)(puVar27 + 4);
}
cVar10 = (**(code **)(*piVar28 + 0x16c))(piVar28);
if ((((cVar10 == '\0') && (uVar7 = *(uint *)(this + 0x31e0), uVar7 != 0xffffffff)) &&
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) &&
((*(uint *)(puVar27 + 8) == uVar7 >> 0xc &&
(piVar28 = *(int **)(puVar27 + 4), piVar28 != (int *)0x0)))) {
puVar21 = (uint *)(**(code **)(*piVar28 + 0xc))(piVar28);
local_1b8 = *puVar21;
}
if ((*(uint *)(param_1 + 0x48) & 0x20) != 0) {
uVar7 = *(uint *)(param_1 + 0x34);
piVar28 = (int *)0x0;
if (((uVar7 != 0xffffffff) &&
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar27 + 8) == uVar7 >> 0xc)) {
piVar28 = *(int **)(puVar27 + 4);
}
cVar10 = (**(code **)(*piVar28 + 0x16c))(piVar28);
if ((((cVar10 == '\0') && (uVar7 = *(uint *)(this + 0x3250), uVar7 != 0xffffffff)) &&
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) &&
((*(uint *)(puVar27 + 8) == uVar7 >> 0xc &&
(piVar28 = *(int **)(puVar27 + 4), piVar28 != (int *)0x0)))) {
puVar21 = (uint *)(**(code **)(*piVar28 + 0xc))(piVar28);
local_1b8 = *puVar21;
}
}
}
CL4DGameStats::Event_ActorKilled
((CL4DGameStats *)CL4D_GameStats,(CBaseCombatCharacter *)this,
(CTakeDamageInfo *)local_280);
if (*(int *)(mp_logdetail._28_4_ + 0x30) == 3) {
LogDamage(this,local_280,2);
}
uVar7 = *(uint *)(this + 0x33c0);
if (((uVar7 != 0xffffffff) &&
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) &&
((*(uint *)(puVar27 + 8) == uVar7 >> 0xc &&
(*(CTerrorPlayer **)(puVar27 + 4) != (CTerrorPlayer *)0x0)))) {
AbilityDebug(this,*(CTerrorPlayer **)(puVar27 + 4),"Tongue letting go on death.");
}
ReleaseTongueVictim(this,false);
uVar7 = *(uint *)(this + 0x33c4);
if ((((uVar7 != 0xffffffff) &&
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar27 + 8) == uVar7 >> 0xc)) &&
(*(CTerrorPlayer **)(puVar27 + 4) != (CTerrorPlayer *)0x0)) {
ReleaseTongueVictim(*(CTerrorPlayer **)(puVar27 + 4),false);
}
uVar7 = *(uint *)(this + 0x3ee0);
if (((uVar7 != 0xffffffff) &&
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) &&
((*(uint *)(puVar27 + 8) == uVar7 >> 0xc &&
(*(CTerrorPlayer **)(puVar27 + 4) != (CTerrorPlayer *)0x0)))) {
OnRideEnded(*(CTerrorPlayer **)(puVar27 + 4),(CTerrorPlayer *)0x0);
}
uVar7 = *(uint *)(this + 0x3edc);
if (((uVar7 != 0xffffffff) &&
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) &&
((*(uint *)(puVar27 + 8) == uVar7 >> 0xc && (*(int *)(puVar27 + 4) != 0)))) {
uVar7 = *(uint *)(param_1 + 0x34);
if ((((uVar7 == 0xffffffff) ||
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 == (undefined *)0xfffffffc)) ||
(*(uint *)(puVar27 + 8) != uVar7 >> 0xc)) ||
((pCVar20 = *(CTerrorPlayer **)(puVar27 + 4), pCVar20 == (CTerrorPlayer *)0x0 ||
(cVar10 = (**(code **)(*(int *)pCVar20 + 0x16c))(pCVar20), cVar10 == '\0')))) {
pCVar20 = (CTerrorPlayer *)0x0;
}
OnRideEnded(this,pCVar20);
}
uVar7 = *(uint *)(this + 0x2a4c);
if (((uVar7 != 0xffffffff) &&
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) &&
((*(uint *)(puVar27 + 8) == uVar7 >> 0xc &&
(*(CTerrorPlayer **)(puVar27 + 4) != (CTerrorPlayer *)0x0)))) {
OnCarryEnded(*(CTerrorPlayer **)(puVar27 + 4),true,false,false);
}
uVar7 = *(uint *)(this + 0x2a48);
if ((((uVar7 != 0xffffffff) &&
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) &&
(*(uint *)(puVar27 + 8) == uVar7 >> 0xc)) && (*(int *)(puVar27 + 4) != 0)) {
OnCarryEnded(this,true,false,false);
}
uVar7 = *(uint *)(param_1 + 0x34);
if (((uVar7 == 0xffffffff) ||
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 == (undefined *)0xfffffffc)) ||
((((*(uint *)(puVar27 + 8) != uVar7 >> 0xc ||
((*(int *)(puVar27 + 4) == 0 ||
(iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this), iVar12 != 3)))) ||
(uVar7 = *(uint *)(param_1 + 0x34), uVar7 == 0xffffffff)) ||
((((puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 == (undefined *)0xfffffffc ||
(*(uint *)(puVar27 + 8) != uVar7 >> 0xc)) ||
(piVar28 = *(int **)(puVar27 + 4), piVar28 == (int *)0x0)) ||
(cVar10 = (**(code **)(*piVar28 + 0x16c))(piVar28), cVar10 == '\0')))))) {
iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
cVar10 = IsASurvivorTeam(iVar12);
if (cVar10 != '\0') {
if ((*(int *)(param_1 + 0x48) != 0x1000) || (*(float *)(param_1 + 0x3c) != 0.0)) {
puVar15 = local_11c;
for (iVar12 = 0x3f; iVar12 != 0; iVar12 = iVar12 + -1) {
*puVar15 = 0;
puVar15 = puVar15 + (uint)bVar33 * -2 + 1;
}
local_120[0] = '\0';
local_120[1] = '\0';
local_120[2] = '\0';
local_120[3] = '\0';
V_strncat(local_120,"DeadCharacter:",0x100,-1);
pcVar13 = (char *)SurvivorCharacterName(*(undefined4 *)(this + 0x2ba0));
V_strncat(local_120,pcVar13,0x100,-1);
uVar7 = *(uint *)(param_1 + 0x34);
if (((uVar7 != 0xffffffff) &&
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc))
&& ((*(uint *)(puVar27 + 8) == uVar7 >> 0xc &&
((pCVar17 = *(CBaseEntity **)(puVar27 + 4), pCVar17 != (CBaseEntity *)0x0 &&
(cVar10 = (**(code **)(*(int *)pCVar17 + 0x16c))(pCVar17), cVar10 != '\0')))))) {
iVar12 = CBaseEntity::GetTeamNumber(pCVar17);
if (iVar12 == 3) {
V_strncat(local_120,",SubjectIsA:",0x100,-1);
uVar14 = (**(code **)(*(int *)pCVar17 + 0x544))(pCVar17);
pcVar13 = (char *)ZombieClassName(uVar14);
V_strncat(local_120,pcVar13,0x100,-1);
}
else {
V_strncat(local_120,",SubjectTeam:Survivor",0x100,-1);
}
}
local_17c = "SurvivorDied";
local_180 = this;
local_178 = local_120;
ForEachTerrorPlayer<DispatchResponseToSurvivorsWithVisibility>
((DispatchResponseToSurvivorsWithVisibility *)&local_180);
}
*(undefined4 *)(this + 0x3f90) = 0;
this_00 = (CBaseCombatWeapon *)(**(code **)(*(int *)this + 0x484))(this,0);
if (this_00 != (CBaseCombatWeapon *)0x0) {
uVar14 = (**(code **)(*(int *)this_00 + 0x638))(this_00);
*(undefined4 *)(this + 0x3f90) = uVar14;
iVar12 = (**(code **)(*(int *)this_00 + 0x55c))(this_00);
puVar15 = (undefined4 *)GetAmmoDef();
iVar16 = (**(code **)*puVar15)(puVar15,iVar12,this);
cVar10 = CBaseCombatWeapon::UsesPrimaryAmmo(this_00);
if (cVar10 == '\0') {
*(undefined4 *)(this + 0x3f94) = 0;
}
else {
iVar22 = CBaseCombatCharacter::GetAmmoCount((CBaseCombatCharacter *)this,iVar12);
if (iVar22 + *(int *)(this_00 + 0x1420) < iVar16) {
iVar16 = CBaseCombatCharacter::GetAmmoCount((CBaseCombatCharacter *)this,iVar12);
iVar16 = *(int *)(this_00 + 0x1420) + iVar16;
}
*(int *)(this + 0x3f94) = iVar16;
}
}
*(undefined4 *)(this + 0x3f98) = 0;
pCVar17 = (CBaseEntity *)(**(code **)(*(int *)this + 0x484))(this,1);
if (pCVar17 != (CBaseEntity *)0x0) {
uVar14 = (**(code **)(*(int *)pCVar17 + 0x638))(pCVar17);
*(undefined4 *)(this + 0x3f98) = uVar14;
cVar10 = (**(code **)(*(int *)pCVar17 + 0x674))(pCVar17);
if (cVar10 != '\0') {
this[0x3f9c] = (CTerrorPlayer)0x1;
}
if (*(int *)(this + 0x3f98) != 1) {
(**(code **)(*(int *)pCVar17 + 0x428))(pCVar17,0);
CBaseCombatCharacter::Weapon_Detach
((CBaseCombatCharacter *)this,(CBaseCombatWeapon *)pCVar17);
CBaseEntity::AddEffects(pCVar17,0x20);
puVar15 = (undefined4 *)(**(code **)(*(int *)pCVar17 + 0xc))(pCVar17);
*(undefined4 *)(this + 0x3fa0) = *puVar15;
}
}
}
}
else {
uVar7 = *(uint *)(param_1 + 0x34);
if ((((uVar7 == 0xffffffff) ||
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 == (undefined *)0xfffffffc)) ||
(*(uint *)(puVar27 + 8) != uVar7 >> 0xc)) ||
((pCVar17 = *(CBaseEntity **)(puVar27 + 4), pCVar17 == (CBaseEntity *)0x0 ||
(cVar10 = (**(code **)(*(int *)pCVar17 + 0x16c))(pCVar17), cVar10 == '\0')))) {
pCVar17 = (CBaseEntity *)0x0;
}
CVar6 = this[0x14d];
local_120[0] = '\0';
local_120[1] = '\0';
local_120[2] = '\0';
local_120[3] = '\0';
puVar15 = local_11c;
for (iVar12 = 0x3f; iVar12 != 0; iVar12 = iVar12 + -1) {
*puVar15 = 0;
puVar15 = puVar15 + (uint)bVar33 * -2 + 1;
}
if (((byte)CVar6 & 8) != 0) {
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
}
if (((byte)pCVar17[0x14d] & 8) != 0) {
CBaseEntity::CalcAbsolutePosition(pCVar17);
}
fVar30 = *(float *)(pCVar17 + 0x2e4);
fVar4 = *(float *)(pCVar17 + 0x2e8);
fVar5 = *(float *)(this + 0x2e4);
fVar1 = *(float *)(this + 0x2e8);
fVar2 = *(float *)(pCVar17 + 0x2e0);
fVar3 = *(float *)(this + 0x2e0);
uVar14 = (**(code **)(*(int *)this + 0x544))(this);
uVar14 = ZombieClassName(uVar14);
V_snprintf(local_120,0x100,"SubjectIsA:%s,Distance:%f",uVar14,
(double)SQRT((fVar30 - fVar5) * (fVar30 - fVar5) + (fVar4 - fVar1) * (fVar4 - fVar1)
+ (fVar2 - fVar3) * (fVar2 - fVar3)));
pcVar26 = *(code **)(*(int *)pCVar17 + 0x7b4);
CAI_Concept::CAI_Concept((CAI_Concept *)&local_180,"KilledZombie");
(*pcVar26)(pCVar17,(CAI_Concept *)&local_180,1,local_120,0,0,0);
}
iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
if ((((iVar12 == 3) && (iVar12 = (**(code **)(*(int *)this + 0x544))(this), iVar12 == 3)) &&
((uVar7 = *(uint *)(param_1 + 0x34), uVar7 != 0xffffffff &&
(((puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc &&
(*(uint *)(puVar27 + 8) == uVar7 >> 0xc)) &&
(piVar28 = *(int **)(puVar27 + 4), piVar28 != (int *)0x0)))))) &&
(cVar10 = (**(code **)(*piVar28 + 0x16c))(piVar28), cVar10 != '\0')) {
uVar7 = *(uint *)(this + 0x3e64);
if (((uVar7 == 0xffffffff) ||
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 == (undefined *)0xfffffffc)) ||
((*(uint *)(puVar27 + 8) != uVar7 >> 0xc || (*(int *)(puVar27 + 4) == 0)))) {
if ((this[0x3e78] != (CTerrorPlayer)0x0) &&
(piVar25 = (int *)(**(code **)(*gameeventmanager + 0x1c))
(gameeventmanager,"pounce_attempt_stopped",0,0),
piVar25 != (int *)0x0)) {
pcVar26 = *(code **)(*piVar25 + 0x30);
uVar14 = (**(code **)(*engine + 0x40))(engine,piVar28[0xc]);
(*pcVar26)(piVar25,"userid",uVar14);
uVar7 = *(uint *)(param_1 + 0x38);
if ((uVar7 != 0xffffffff) &&
((((puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc
&& (*(uint *)(puVar27 + 8) == uVar7 >> 0xc)) &&
(piVar28 = *(int **)(puVar27 + 4), piVar28 != (int *)0x0)) &&
(piVar28 = (int *)(**(code **)(*piVar28 + 0x188))(piVar28), piVar28 != (int *)0x0)))) {
pcVar26 = *(code **)(*piVar25 + 0x30);
uVar14 = (**(code **)(*piVar28 + 0x638))(piVar28);
(*pcVar26)(piVar25,"weaponid",uVar14);
}
goto LAB_009e0d82;
}
}
else {
piVar25 = (int *)(**(code **)(*gameeventmanager + 0x1c))
(gameeventmanager,"pounce_stopped",0,0);
if (piVar25 != (int *)0x0) {
pcVar26 = *(code **)(*piVar25 + 0x30);
uVar14 = (**(code **)(*engine + 0x40))(engine,piVar28[0xc]);
(*pcVar26)(piVar25,"userid",uVar14);
local_29c = 0.0;
pcVar26 = *(code **)(*piVar25 + 0x30);
uVar7 = *(uint *)(this + 0x3e64);
if (((uVar7 != 0xffffffff) &&
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc))
&& (*(uint *)(puVar27 + 8) == uVar7 >> 0xc)) {
local_29c = *(float *)(puVar27 + 4);
}
uVar14 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)((int)local_29c + 0x30));
(*pcVar26)(piVar25,"victim",uVar14);
LAB_009e0d82:
(**(code **)(*gameeventmanager + 0x20))(gameeventmanager,piVar25,0);
}
}
}
iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
if (iVar12 == 3) {
local_238 = (float)(**(code **)(*(int *)this + 0x544))(this);
local_23c = this;
ForEachPlayer<ZombieDeath>((ZombieDeath *)&local_23c);
CDirector::OnZombieRemoved(TheDirector,this);
SetClassState(this,0);
cVar10 = CTerrorGameRules::HasPlayerControlledZombies();
if (cVar10 != '\0') {
uVar7 = *(uint *)(param_1 + 0x34);
if (((uVar7 == 0xffffffff) ||
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 == (undefined *)0xfffffffc)) ||
((*(uint *)(puVar27 + 8) != uVar7 >> 0xc ||
(piVar28 = *(int **)(puVar27 + 4), piVar28 == (int *)0x0)))) {
pfVar23 = (float *)(**(code **)(*(int *)this + 0x288))(this);
}
else {
pfVar23 = (float *)(**(code **)(*piVar28 + 0x288))(piVar28);
}
local_180 = (CTerrorPlayer *)*pfVar23;
local_17c = (char *)pfVar23[1];
local_178 = (char *)pfVar23[2];
local_170 = 0.0;
local_16c = this;
local_174 = 60000.0;
ForEachPlayerZombie<NearestPlayer>((NearestPlayer *)&local_180);
if (local_170 != 0.0) {
(**(code **)(*(int *)this + 0x64c))(this,local_170);
}
}
if (((((*(int *)(param_1 + 0x4c) == 3) &&
(uVar7 = *(uint *)(param_1 + 0x34), uVar7 != 0xffffffff)) &&
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) &&
((*(uint *)(puVar27 + 8) == uVar7 >> 0xc &&
(piVar28 = *(int **)(puVar27 + 4), piVar28 != (int *)0x0)))) &&
((cVar10 = (**(code **)(*piVar28 + 0x16c))(piVar28), cVar10 != '\0' &&
(piVar25 = (int *)(**(code **)(*gameeventmanager + 0x1c))
(gameeventmanager,"infected_explosive_barrel_kill",0,0),
piVar25 != (int *)0x0)))) {
pcVar26 = *(code **)(*piVar25 + 0x30);
uVar14 = (**(code **)(*engine + 0x40))(engine,piVar28[0xc]);
(*pcVar26)(piVar25,"userid",uVar14);
(**(code **)(*gameeventmanager + 0x20))(gameeventmanager,piVar25,0);
}
}
else {
iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
cVar10 = IsASurvivorTeam(iVar12);
if (((cVar10 != '\0') && (uVar7 = *(uint *)(param_1 + 0x34), uVar7 != 0xffffffff)) &&
((puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc &&
(((*(uint *)(puVar27 + 8) == uVar7 >> 0xc &&
(piVar28 = *(int **)(puVar27 + 4), piVar28 != (int *)0x0)) &&
(cVar10 = (**(code **)(*piVar28 + 0x16c))(piVar28), cVar10 != '\0')))))) {
uVar7 = *(uint *)(param_1 + 0x34);
pCVar17 = (CBaseEntity *)0x0;
if ((uVar7 != 0xffffffff) &&
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 != (undefined *)0xfffffffc)) {
if (*(uint *)(puVar27 + 8) == uVar7 >> 0xc) {
pCVar17 = *(CBaseEntity **)(puVar27 + 4);
}
else {
pCVar17 = (CBaseEntity *)0x0;
}
}
iVar12 = CBaseEntity::GetTeamNumber(pCVar17);
if (iVar12 == 3) {
*(int *)(pCVar17 + 0x307c) = *(int *)(pCVar17 + 0x307c) + 1;
}
}
}
uVar11 = IsCustomAbilityActive(this);
CCSPlayer::Event_Killed((CCSPlayer *)this,(CTakeDamageInfo *)local_280);
iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
if (((iVar12 != 3) || (this[0x3375] != (CTerrorPlayer)0x0)) || (cVar9 != '\0')) goto LAB_009e019d;
iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
if ((iVar12 == 3) && (iVar12 = (**(code **)(*(int *)this + 0x544))(this), iVar12 == 2)) {
local_258 = 2;
ForEachSurvivor<BossKilledMusic>((BossKilledMusic *)&local_258);
if (*(int *)(this + 0x4018) == 1) {
(**(code **)(*(int *)this + 0x24c))(this,&local_24c,0,0);
local_180 = (CTerrorPlayer *)0x0;
local_17c = (char *)0x0;
local_178 = (char *)0x0;
if (((byte)this[0x14d] & 8) != 0) {
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
}
pCVar24 = (CInferno *)
CBaseEntity::Create("inferno",(Vector *)(this + 0x2e0),(QAngle *)&local_180,
(CBaseEntity *)this);
local_23c = (CTerrorPlayer *)0x0;
local_238 = 0.0;
local_234 = 1.0;
local_180 = (CTerrorPlayer *)(local_24c * 128.0);
local_17c = (char *)(local_248 * 128.0);
local_178 = (char *)((float)local_244 * 128.0);
if (((byte)this[0x14d] & 8) != 0) {
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
}
CInferno::StartBurning
(pCVar24,(Vector *)(this + 0x2e0),(Vector *)&local_23c,(Vector *)&local_180,0);
*(undefined4 *)(pCVar24 + 0xba4) = 2;
}
uVar7 = *(uint *)(param_1 + 0x34);
if ((((uVar7 == 0xffffffff) ||
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 == (undefined *)0xfffffffc)) ||
(*(uint *)(puVar27 + 8) != uVar7 >> 0xc)) ||
((local_280 = *(CBaseEntity **)(puVar27 + 4), local_280 == (CBaseEntity *)0x0 ||
(cVar9 = (**(code **)(*(int *)local_280 + 0x16c))(local_280), cVar9 == '\0')))) {
local_280 = (CBaseEntity *)0x0;
}
local_29c = *(float *)(ZombieExplodingInnerRadius._28_4_ + 0x2c);
local_284 = *(float *)(ZombieExplodingOuterRadius._28_4_ + 0x2c);
iVar12 = GetDifficulty();
if (iVar12 < 0) {
LAB_009e16e8:
fVar30 = 100.0;
}
else if (iVar12 < 2) {
fVar30 = 30.0;
local_29c = *(float *)(ZombieExplodingOuterRadius._28_4_ + 0x2c) * 0.9;
}
else {
if (iVar12 != 2) goto LAB_009e16e8;
fVar30 = 49.0;
local_29c = *(float *)(ZombieExplodingOuterRadius._28_4_ + 0x2c) * 0.9;
}
if (*(int *)(param_1 + 0x48) == 0x20) {
local_29c = *(float *)(ZombieExplodingSplatRadius._28_4_ + 0x2c);
local_284 = local_29c;
}
cVar9 = CTerrorGameRules::HasPlayerControlledZombies();
if (((cVar9 == '\0') || (uVar7 = *(uint *)(param_1 + 0x34), uVar7 == 0xffffffff)) ||
((puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10, puVar27 == (undefined *)0xfffffffc ||
((*(uint *)(puVar27 + 8) != uVar7 >> 0xc ||
(iVar12 = IPredictionSystem::g_pPredictionSystems, this != *(CTerrorPlayer **)(puVar27 + 4)
)))))) {
iVar12 = IPredictionSystem::g_pPredictionSystems;
if (*(int *)(this + 0x4018) == 1) {
for (; iVar12 != 0; iVar12 = *(int *)(iVar12 + 4)) {
*(int *)(iVar12 + 0x10) = *(int *)(iVar12 + 0x10) + 1;
}
local_180 = (CTerrorPlayer *)0x0;
local_17c = (char *)0x0;
local_178 = (char *)0x3f800000;
if (((byte)this[0x14d] & 8) != 0) {
/* try { // try from 009e1c83 to 009e1c87 has its CatchHandler @ 009e305a */
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
}
/* try { // try from 009e1341 to 009e1403 has its CatchHandler @ 009e305a */
DispatchParticleEffect
("boomer_explode",*(undefined4 *)(this + 0x2e0),*(undefined4 *)(this + 0x2e4),
*(undefined4 *)(this + 0x2e8),local_180,local_17c,local_178,0,0,0xffffffff);
CBaseEntity::EmitSound((CBaseEntity *)this,"BoomerZombie.Detonate",0.0,(float *)0x0);
pVVar19 = (Vector *)(**(code **)(*(int *)this + 0x288))(this);
local_234 = *(float *)(ZombieExplodingForce._28_4_ + 0x2c);
local_23c = (CTerrorPlayer *)0x0;
local_238 = 0.0;
CTakeDamageInfo::CTakeDamageInfo
((CTakeDamageInfo *)&local_180,(CBaseEntity *)this,(CBaseEntity *)this,
(Vector *)&local_23c,pVVar19,fVar30,0x40,0,(Vector *)0x0);
CreateExplosion((CTakeDamageInfo *)&local_180,local_29c,local_284,1);
for (iVar12 = IPredictionSystem::g_pPredictionSystems; iVar12 != 0;
iVar12 = *(int *)(iVar12 + 4)) {
*(int *)(iVar12 + 0x10) = *(int *)(iVar12 + 0x10) + -1;
}
}
else {
pVVar19 = (Vector *)(**(code **)(*(int *)this + 0x288))(this);
local_234 = *(float *)(ZombieExplodingForce._28_4_ + 0x2c);
pCVar20 = (CTerrorPlayer *)local_280;
if (local_280 == (CBaseEntity *)0x0) {
pCVar20 = this;
}
local_23c = (CTerrorPlayer *)0x0;
local_238 = 0.0;
CTakeDamageInfo::CTakeDamageInfo
((CTakeDamageInfo *)&local_180,(CBaseEntity *)this,(CBaseEntity *)pCVar20,
(Vector *)&local_23c,pVVar19,fVar30,0x8000040,0,(Vector *)0x0);
CreateExplosion((CTakeDamageInfo *)&local_180,local_29c,local_284,2);
}
}
else {
for (; iVar12 != 0; iVar12 = *(int *)(iVar12 + 4)) {
*(int *)(iVar12 + 0x10) = *(int *)(iVar12 + 0x10) + 1;
}
local_180 = (CTerrorPlayer *)0x0;
local_17c = (char *)0x0;
local_178 = (char *)0x3f800000;
if (((byte)this[0x14d] & 8) != 0) {
/* try { // try from 009e24bd to 009e2541 has its CatchHandler @ 009e3047 */
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
}
DispatchParticleEffect
("boomer_explode",*(undefined4 *)(this + 0x2e0),*(undefined4 *)(this + 0x2e4),
*(undefined4 *)(this + 0x2e8),local_180,local_17c,local_178,0,0,0xffffffff);
CBaseEntity::EmitSound((CBaseEntity *)this,"BoomerZombie.Detonate",0.0,(float *)0x0);
for (iVar12 = IPredictionSystem::g_pPredictionSystems; iVar12 != 0;
iVar12 = *(int *)(iVar12 + 4)) {
*(int *)(iVar12 + 0x10) = *(int *)(iVar12 + 0x10) + -1;
}
}
local_180 = (CTerrorPlayer *)0x0;
ForEachSurvivor<ITCounter>((ITCounter *)&local_180);
piVar28 = (int *)(**(code **)(*gameeventmanager + 0x1c))(gameeventmanager,"boomer_exploded",0,0)
;
if (piVar28 != (int *)0x0) {
pcVar26 = *(code **)(*piVar28 + 0x30);
uVar14 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)(this + 0x30));
(*pcVar26)(piVar28,"userid",uVar14);
pcVar26 = *(code **)(*piVar28 + 0x30);
uVar14 = 0;
if (local_280 != (CBaseEntity *)0x0) {
uVar14 = (**(code **)(*engine + 0x40))(engine,*(int *)(local_280 + 0x30));
}
(*pcVar26)(piVar28,"attacker",uVar14);
(**(code **)(*piVar28 + 0x2c))(piVar28,"splashedbile",0 < (int)local_180);
(**(code **)(*gameeventmanager + 0x20))(gameeventmanager,piVar28,0);
}
}
else {
iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
if ((iVar12 == 3) && (iVar12 = (**(code **)(*(int *)this + 0x544))(this), iVar12 == 8)) {
local_180 = (CTerrorPlayer *)0x8;
ForEachTerrorPlayer<BossKilledMusic>((BossKilledMusic *)&local_180);
}
else {
iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
if ((iVar12 == 3) && (iVar12 = (**(code **)(*(int *)this + 0x544))(this), iVar12 == 1)) {
CBaseEntity::EmitSound((CBaseEntity *)this,"SmokerZombie.Death",0.0,(float *)0x0);
CBaseEntity::EmitSound((CBaseEntity *)this,"SmokerZombie.Explode",0.0,(float *)0x0);
local_23c = (CTerrorPlayer *)0x1;
ForEachSurvivor<BossKilledMusic>((BossKilledMusic *)&local_23c);
for (iVar12 = IPredictionSystem::g_pPredictionSystems; iVar12 != 0;
iVar12 = *(int *)(iVar12 + 4)) {
*(int *)(iVar12 + 0x10) = *(int *)(iVar12 + 0x10) + 1;
}
if ((((byte)this[0x14d] & 8) != 0) &&
(CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this), ((byte)this[0x14d] & 8) != 0)) {
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
}
/* try { // try from 009e2323 to 009e242f has its CatchHandler @ 009e3075 */
DispatchParticleEffect
("smoker_smokecloud",*(undefined4 *)(this + 0x2e0),*(undefined4 *)(this + 0x2e4),
*(undefined4 *)(this + 0x2e8),*(undefined4 *)(this + 0x37c),
*(undefined4 *)(this + 0x380),*(undefined4 *)(this + 900),this,0,0xffffffff);
if (((byte)this[0x14d] & 8) == 0) {
local_180 = *(CTerrorPlayer **)(this + 0x2e0);
local_17c = *(char **)(this + 0x2e4);
local_178 = (char *)(*(float *)(this + 0x2e8) + 24.0);
}
else {
/* try { // try from 009e262b to 009e26aa has its CatchHandler @ 009e3075 */
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
local_180 = *(CTerrorPlayer **)(this + 0x2e0);
local_17c = *(char **)(this + 0x2e4);
local_178 = (char *)(*(float *)(this + 0x2e8) + 24.0);
if ((*(uint *)(this + 0x14c) & 0x800) != 0) {
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
}
}
DispatchParticleEffect
("smoker_smokecloud_camera",*(undefined4 *)(this + 0x2e0),
*(undefined4 *)(this + 0x2e4),*(undefined4 *)(this + 0x2e8),local_180,local_17c,
local_178,vec3_angle,DAT_01053d40,DAT_01053d44,0,0,0xffffffff);
iVar12 = CBaseAnimating::FindBodygroupByName((CBaseAnimating *)this,"tongue");
CBaseAnimating::SetBodygroup((CBaseAnimating *)this,iVar12,1);
iVar12 = CBaseAnimating::FindBodygroupByName((CBaseAnimating *)this,"mulletTongue");
CBaseAnimating::SetBodygroup((CBaseAnimating *)this,iVar12,1);
for (iVar12 = IPredictionSystem::g_pPredictionSystems; iVar12 != 0;
iVar12 = *(int *)(iVar12 + 4)) {
*(int *)(iVar12 + 0x10) = *(int *)(iVar12 + 0x10) + -1;
}
}
else {
iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
if ((iVar12 == 3) && (iVar12 = (**(code **)(*(int *)this + 0x544))(this), iVar12 == 3)) {
local_180 = (CTerrorPlayer *)0x3;
ForEachSurvivor<BossKilledMusic>((BossKilledMusic *)&local_180);
CBaseEntity::EmitSound((CBaseEntity *)this,"HunterZombie.Death",0.0,(float *)0x0);
}
else {
iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
if ((iVar12 == 3) && (iVar12 = (**(code **)(*(int *)this + 0x544))(this), iVar12 == 6)) {
uVar7 = *(uint *)(param_1 + 0x34);
if ((((uVar7 == 0xffffffff) ||
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10,
puVar27 == (undefined *)0xfffffffc)) || (*(uint *)(puVar27 + 8) != uVar7 >> 0xc))
|| ((pCVar20 = *(CTerrorPlayer **)(puVar27 + 4), pCVar20 == (CTerrorPlayer *)0x0 ||
(cVar9 = (**(code **)(*(int *)pCVar20 + 0x16c))(pCVar20), cVar9 == '\0')))) {
pCVar20 = (CTerrorPlayer *)0x0;
}
OnPummelEnded(this,true,pCVar20);
local_180 = (CTerrorPlayer *)0x6;
ForEachSurvivor<BossKilledMusic>((BossKilledMusic *)&local_180);
piVar28 = (int *)(**(code **)(*gameeventmanager + 0x1c))
(gameeventmanager,"charger_killed",0,0);
if (piVar28 != (int *)0x0) {
uVar7 = *(uint *)(param_1 + 0x34);
if (((uVar7 == 0xffffffff) ||
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10,
puVar27 == (undefined *)0xfffffffc)) ||
((*(uint *)(puVar27 + 8) != uVar7 >> 0xc ||
((piVar25 = *(int **)(puVar27 + 4), piVar25 == (int *)0x0 ||
(cVar9 = (**(code **)(*piVar25 + 0x16c))(piVar25), cVar9 == '\0')))))) {
pcVar26 = *(code **)(*piVar28 + 0x30);
uVar14 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)(this + 0x30));
(*pcVar26)(piVar28,"userid",uVar14);
pcVar26 = *(code **)(*piVar28 + 0x30);
uVar14 = 0;
}
else {
pcVar26 = *(code **)(*piVar28 + 0x30);
uVar14 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)(this + 0x30));
(*pcVar26)(piVar28,"userid",uVar14);
pcVar26 = *(code **)(*piVar28 + 0x30);
uVar14 = (**(code **)(*engine + 0x40))(engine,piVar25[0xc]);
}
(*pcVar26)(piVar28,"attacker",uVar14);
uVar7 = *(uint *)(param_1 + 0x38);
if ((((uVar7 == 0xffffffff) ||
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10,
puVar27 == (undefined *)0xfffffffc)) || (*(uint *)(puVar27 + 8) != uVar7 >> 0xc))
|| (((piVar25 = *(int **)(puVar27 + 4), piVar25 == (int *)0x0 ||
(piVar25 = (int *)(**(code **)(*piVar25 + 0x188))(piVar25),
piVar25 == (int *)0x0)) ||
(iVar12 = (**(code **)(*piVar25 + 0x638))(piVar25), iVar12 != 0x13)))) {
(**(code **)(*piVar28 + 0x2c))(piVar28,"melee",0);
}
else {
(**(code **)(*piVar28 + 0x2c))(piVar28,"melee",1);
}
(**(code **)(*piVar28 + 0x2c))(piVar28,"charging",uVar11);
(**(code **)(*gameeventmanager + 0x20))(gameeventmanager,piVar28,0);
}
CBaseEntity::EmitSound((CBaseEntity *)this,"ChargerZombie.Death",0.0,(float *)0x0);
if (*(float *)(this + 0x468) != 0.0) {
if (this[0x6c] == (CTerrorPlayer)0x0) {
pCVar8 = *(CBaseEdict **)(this + 0x30);
if (pCVar8 != (CBaseEdict *)0x0) {
*(uint *)pCVar8 = *(uint *)pCVar8 | 0x101;
iVar12 = CBaseEdict::GetChangeAccessor(pCVar8);
*(undefined2 *)(iVar12 + 2) = 0;
}
}
else {
this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
}
*(undefined4 *)(this + 0x468) = 0;
}
}
else {
iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
if ((iVar12 == 3) && (iVar12 = (**(code **)(*(int *)this + 0x544))(this), iVar12 == 4))
{
pfVar23 = (float *)(**(code **)(*(int *)this + 0x288))(this);
fVar30 = pfVar23[2];
fVar4 = *pfVar23;
fVar5 = pfVar23[1];
pfVar23 = (float *)(**(code **)(*(int *)this + 0x288))(this);
local_22c = fVar4 - *pfVar23;
local_228 = fVar5 - pfVar23[1];
local_224 = (fVar30 - 240.0) - pfVar23[2];
local_1f8 = 1;
local_1fc = 0;
local_204 = 0;
local_208 = 0;
local_20c = 0;
local_1f7 = local_22c * local_22c + local_228 * local_228 + local_224 * local_224 !=
0.0;
local_214 = 0;
local_218 = 0;
local_21c = 0;
local_23c = (CTerrorPlayer *)*pfVar23;
local_238 = pfVar23[1];
local_234 = pfVar23[2];
CTraceFilterSimple::CTraceFilterSimple
((CTraceFilterSimple *)&local_24c,(IHandleEntity *)this,0,
(_func_bool_IHandleEntity_ptr_int *)0x0);
(**(code **)(*enginetrace + 0x14))
(enginetrace,&local_23c,0x46004003,(CTraceFilterSimple *)&local_24c,
(Vector *)&local_180);
if (*(int *)(r_visualizetraces._28_4_ + 0x30) != 0) {
DebugDrawLine((Vector *)&local_180,(Vector *)&local_174,0xff,0,0,true,-1.0);
}
local_23c = (CTerrorPlayer *)0x0;
local_238 = 0.0;
local_234 = 0.0;
pCVar24 = (CInferno *)
CBaseEntity::Create("insect_swarm",(Vector *)&local_174,(QAngle *)&local_23c
,(CBaseEntity *)this);
iVar12 = CBaseEntity::GetGroundEntity((CBaseEntity *)this);
if ((iVar12 != 0) &&
(iVar12 = CBaseEntity::GetGroundEntity((CBaseEntity *)this),
iVar12 != g_WorldEntity)) {
pcVar26 = *(code **)(*(int *)pCVar24 + 0x98);
uVar14 = CBaseEntity::GetGroundEntity((CBaseEntity *)this);
(*pcVar26)(pCVar24,uVar14,0xffffffff);
}
*(undefined4 *)(pCVar24 + 0xba4) = 2;
local_23c = (CTerrorPlayer *)0x0;
local_238 = 0.0;
local_234 = 1.0;
CInferno::StartBurning
(pCVar24,(Vector *)&local_174,(Vector *)&local_23c,(Vector *)&vec3_origin,0)
;
CBaseEntity::EmitSound((CBaseEntity *)this,"SpitterZombie.Death",0.0,(float *)0x0);
}
else {
iVar12 = CBaseEntity::GetTeamNumber((CBaseEntity *)this);
if ((iVar12 != 3) || (iVar12 = (**(code **)(*(int *)this + 0x544))(this), iVar12 != 5)
) {
CBaseEntity::EmitSound((CBaseEntity *)this,"Zombie.Die",0.0,(float *)0x0);
goto LAB_009e019d;
}
piVar28 = (int *)(**(code **)(*gameeventmanager + 0x1c))
(gameeventmanager,"jockey_killed",0,0);
if (piVar28 != (int *)0x0) {
uVar7 = *(uint *)(param_1 + 0x34);
if ((((uVar7 == 0xffffffff) ||
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10,
puVar27 == (undefined *)0xfffffffc)) ||
(*(uint *)(puVar27 + 8) != uVar7 >> 0xc)) ||
((piVar25 = *(int **)(puVar27 + 4), piVar25 == (int *)0x0 ||
(cVar9 = (**(code **)(*piVar25 + 0x16c))(piVar25), cVar9 == '\0')))) {
pcVar26 = *(code **)(*piVar28 + 0x30);
uVar14 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)(this + 0x30));
(*pcVar26)(piVar28,"userid",uVar14);
pcVar26 = *(code **)(*piVar28 + 0x30);
uVar14 = 0;
}
else {
pcVar26 = *(code **)(*piVar28 + 0x30);
uVar14 = (**(code **)(*engine + 0x40))(engine,*(undefined4 *)(this + 0x30));
(*pcVar26)(piVar28,"userid",uVar14);
pcVar26 = *(code **)(*piVar28 + 0x30);
uVar14 = (**(code **)(*engine + 0x40))(engine,piVar25[0xc]);
}
(*pcVar26)(piVar28,"attacker",uVar14);
uVar7 = *(uint *)(param_1 + 0x38);
if (((uVar7 != 0xffffffff) &&
(puVar27 = g_pEntityList + (uVar7 & 0xfff) * 0x10,
puVar27 != (undefined *)0xfffffffc)) &&
((*(uint *)(puVar27 + 8) == uVar7 >> 0xc &&
((piVar25 = *(int **)(puVar27 + 4), piVar25 != (int *)0x0 &&
(piVar25 = (int *)(**(code **)(*piVar25 + 0x188))(piVar25),
piVar25 != (int *)0x0)))))) {
pcVar26 = *(code **)(*piVar28 + 0x3c);
uVar14 = (**(code **)(*piVar25 + 0x6c8))(piVar25);
(*pcVar26)(piVar28,"weapon",uVar14);
}
(**(code **)(*gameeventmanager + 0x20))(gameeventmanager,piVar28,0);
}
CBaseEntity::EmitSound((CBaseEntity *)this,"JockeyZombie.Death",0.0,(float *)0x0);
}
}
}
}
}
}
CDirector::OnInfectedKilled(TheDirector,(CBaseCombatCharacter *)this,param_1);
if ((((char)g_pGameRules[0x37e] != '\0') &&
(cVar9 = CTerrorGameRules::IsVersusMode(), cVar9 != '\0')) &&
(cVar9 = (**(code **)(*engine + 0x1f8))(engine), cVar9 == '\0')) {
iVar12 = *(int *)(gpGlobals + 0x54);
if ((iVar12 != s_LastServerCount) &&
(s_LastServerCount = iVar12, (float)s_GiftDropTimer._8_4_ != -1.0)) {
s_GiftDropTimer._8_4_ = 0xbf800000;
}
lVar34 = (longdouble)CountdownTimer::Now();
if (((float)s_GiftDropTimer._8_4_ <= (float)lVar34) &&
(lVar34 = (longdouble)RandomFloat(0,0x3f800000),
(float)lVar34 < *(float *)(z_holiday_gift_drop_chance._28_4_ + 0x2c))) {
pQVar18 = (QAngle *)(**(code **)(*(int *)this + 0x238))(this);
AngleVectors(pQVar18,(Vector *)&local_258,(Vector *)&local_24c,(Vector *)&local_23c);
if (((byte)this[0x14d] & 0x10) != 0) {
CBaseEntity::CalcAbsoluteVelocity((CBaseEntity *)this);
}
pQVar18 = (QAngle *)(**(code **)(*(int *)this + 0x238))(this);
if (((byte)this[0x14d] & 8) != 0) {
CBaseEntity::CalcAbsolutePosition((CBaseEntity *)this);
}
pVVar19 = (Vector *)(**(code **)(*(int *)this + 0x288))(this);
CHolidayGift::Create
(pVVar19,(QAngle *)(this + 0x37c),pQVar18,(Vector *)(this + 0x274),
(CBaseCombatCharacter *)this);
lVar34 = (longdouble)RandomFloat(0x42340000,0x42960000);
fVar30 = (float)lVar34;
lVar34 = (longdouble)CountdownTimer::Now();
if ((float)lVar34 + fVar30 != (float)s_GiftDropTimer._8_4_) {
s_GiftDropTimer._8_4_ = (float)lVar34 + fVar30;
}
if (fVar30 != (float)s_GiftDropTimer._4_4_) {
s_GiftDropTimer._4_4_ = fVar30;
}
}
}
LAB_009e019d:
(**(code **)(*(int *)this + 0x38c))(this);
if (this[0x2d94] != (CTerrorPlayer)0x0) {
if (this[0x6c] == (CTerrorPlayer)0x0) {
pCVar8 = *(CBaseEdict **)(this + 0x30);
if (pCVar8 != (CBaseEdict *)0x0) {
*(uint *)pCVar8 = *(uint *)pCVar8 | 0x101;
iVar12 = CBaseEdict::GetChangeAccessor(pCVar8);
*(undefined2 *)(iVar12 + 2) = 0;
}
}
else {
this[0x70] = (CTerrorPlayer)((byte)this[0x70] | 1);
}
this[0x2d94] = (CTerrorPlayer)0x0;
}
*(undefined4 *)(this + 0x2da8) = 0xffffffff;
if (*(float *)(this + 0x2db0) != -1.0) {
(**(code **)(*(int *)(this + 0x2dac) + 4))(this + 0x2dac,this + 0x2db0);
*(undefined4 *)(this + 0x2db0) = 0xbf800000;
}
if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
return;
}
/* WARNING: Subroutine does not return */
__stack_chk_fail();
}
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.