CTerrorWeapon::OnHit
0x0056e6e0 · 7971 bytes · __regparm3
_ZN13CTerrorWeapon5OnHitER10CGameTraceRK6Vectorb.part.111
Decompiled
undefined (3 params)
/* CTerrorWeapon::OnHit(CGameTrace&, Vector const&, bool) [clone .part.111] */
undefined4 __regparm3 CTerrorWeapon::OnHit(CGameTrace *param_1,Vector *param_2,bool param_3)
{
float fVar1;
code *pcVar2;
uint uVar3;
bool bVar4;
char cVar5;
CBaseEntity *this;
int iVar6;
int *piVar7;
int *piVar8;
CBaseEntity *pCVar9;
undefined *puVar10;
uint uVar11;
int iVar12;
CBaseEntity *pCVar13;
undefined3 in_register_00000005;
Vector *pVVar14;
undefined *puVar15;
bool bVar16;
longdouble lVar17;
longdouble lVar18;
int local_d4;
int local_cc;
Vector *local_c8;
CTerrorPlayer *local_c0;
float local_b8;
float local_b4;
float local_b0;
float local_ac;
float local_a8;
float local_a4;
undefined4 local_a0;
undefined4 local_9c;
undefined4 local_98;
float local_94;
float local_90;
float local_8c;
float local_88;
float local_84;
float local_80;
undefined4 local_7c;
undefined4 local_78;
undefined4 local_74;
float local_40;
uint local_34;
pVVar14 = (Vector *)CONCAT31(in_register_00000005,param_3);
pCVar13 = *(CBaseEntity **)(param_2 + 0x4c);
if (pCVar13 == (CBaseEntity *)0x0) {
return 0;
}
this = (CBaseEntity *)GetPlayerOwner((CTerrorWeapon *)param_1);
if (this == (CBaseEntity *)0x0) {
return 0;
}
cVar5 = (**(code **)(*(int *)pCVar13 + 0x16c))();
if (cVar5 == '\0') {
local_d4 = CDirectorChallengeMode::ScriptAllowBash
(*(CDirectorChallengeMode **)(TheDirector + 0x648),this,pCVar13);
if (local_d4 == 2) {
return 0;
}
local_c0 = (CTerrorPlayer *)0x0;
}
else {
local_d4 = CDirectorChallengeMode::ScriptAllowBash
(*(CDirectorChallengeMode **)(TheDirector + 0x648),this,pCVar13);
if (local_d4 == 2) {
return 0;
}
iVar6 = CBaseEntity::GetTeamNumber(this);
cVar5 = IsASurvivorTeam(iVar6);
local_c0 = (CTerrorPlayer *)pCVar13;
if (cVar5 != '\0') {
iVar6 = CBaseEntity::GetTeamNumber(this);
iVar12 = CBaseEntity::GetTeamNumber(pCVar13);
if (iVar6 == iVar12) {
uVar11 = *(uint *)(pCVar13 + 0x33c4);
if ((((uVar11 == 0xffffffff) ||
(puVar15 = g_pEntityList + (uVar11 & 0xfff) * 0x10, puVar15 == (undefined *)0xfffffffc)
) || (*(uint *)(puVar15 + 8) != uVar11 >> 0xc)) || (*(int *)(puVar15 + 4) == 0)) {
uVar11 = *(uint *)(pCVar13 + 0x3e68);
if ((((uVar11 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar11 & 0xfff) * 0x10,
puVar15 != (undefined *)0xfffffffc)) &&
((*(uint *)(puVar15 + 8) == uVar11 >> 0xc &&
(pCVar9 = *(CBaseEntity **)(puVar15 + 4), pCVar9 != (CBaseEntity *)0x0)))) ||
(((uVar11 = *(uint *)(pCVar13 + 0x3e48), uVar11 != 0xffffffff &&
(puVar15 = g_pEntityList + (uVar11 & 0xfff) * 0x10,
puVar15 != (undefined *)0xfffffffc)) &&
((*(uint *)(puVar15 + 8) == uVar11 >> 0xc &&
(pCVar9 = *(CBaseEntity **)(puVar15 + 4), pCVar9 != (CBaseEntity *)0x0)))))) {
MarkAsHit((CTerrorWeapon *)param_1,pCVar9);
*(CBaseEntity **)(param_2 + 0x4c) = pCVar9;
(**(code **)(*(int *)param_1 + 0x6d8))();
*(CBaseEntity **)(param_2 + 0x4c) = pCVar13;
}
}
else {
cVar5 = CTerrorGameRules::HasPlayerControlledZombies();
if ((cVar5 == '\0') && (cVar5 = CTerrorGameRules::IsSurvivalMode(), cVar5 == '\0')) {
LAB_0056f28d:
if (pCVar13[0x33dc] == (CBaseEntity)0x0) {
piVar7 = (int *)(**(code **)(*gameeventmanager + 0x1c))();
if (piVar7 != (int *)0x0) {
pcVar2 = *(code **)(*piVar7 + 0x30);
(**(code **)(*engine + 0x40))();
(*pcVar2)();
pcVar2 = *(code **)(*piVar7 + 0x30);
(**(code **)(*engine + 0x40))();
(*pcVar2)();
pcVar2 = *(code **)(*piVar7 + 0x30);
(**(code **)(*engine + 0x40))();
(*pcVar2)();
iVar6 = *piVar7;
LAB_0056f160:
(**(code **)(iVar6 + 0x30))();
(**(code **)(*gameeventmanager + 0x20))();
}
}
else {
LAB_0056f010:
piVar7 = (int *)(**(code **)(*gameeventmanager + 0x1c))();
if (piVar7 != (int *)0x0) {
pcVar2 = *(code **)(*piVar7 + 0x30);
(**(code **)(*engine + 0x40))();
(*pcVar2)();
pcVar2 = *(code **)(*piVar7 + 0x30);
(**(code **)(*engine + 0x40))();
(*pcVar2)();
pcVar2 = *(code **)(*piVar7 + 0x30);
(**(code **)(*engine + 0x40))();
(*pcVar2)();
iVar6 = *piVar7;
goto LAB_0056f160;
}
}
puVar15 = g_pEntityList;
local_cc = 0;
uVar11 = *(uint *)(pCVar13 + 0x33c4);
if (((uVar11 != 0xffffffff) &&
(puVar10 = g_pEntityList + (uVar11 & 0xfff) * 0x10,
puVar10 != (undefined *)0xfffffffc)) && (*(uint *)(puVar10 + 8) == uVar11 >> 0xc)) {
local_cc = *(int *)(puVar10 + 4);
}
uVar3 = *(uint *)(local_cc + 0x30bc);
if (((uVar3 != 0xffffffff) &&
(puVar10 = g_pEntityList + (uVar3 & 0xfff) * 0x10,
puVar10 != (undefined *)0xfffffffc)) &&
((*(uint *)(puVar10 + 8) == uVar3 >> 0xc &&
((*(int *)(puVar10 + 4) != 0 &&
(piVar7 = (int *)__dynamic_cast(), piVar7 != (int *)0x0)))))) {
(**(code **)(*piVar7 + 0x394))();
uVar11 = *(uint *)(pCVar13 + 0x33c4);
puVar15 = g_pEntityList;
}
local_c0 = (CTerrorPlayer *)0x0;
if (((uVar11 != 0xffffffff) &&
(puVar15 = puVar15 + (uVar11 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc))
&& (*(uint *)(puVar15 + 8) == uVar11 >> 0xc)) {
local_c0 = *(CTerrorPlayer **)(puVar15 + 4);
}
CTerrorPlayer::ReleaseTongueVictim(local_c0,false);
local_c0 = (CTerrorPlayer *)pCVar13;
}
else {
uVar11 = *(uint *)(pCVar13 + 0x33c4);
if ((uVar11 != 0xffffffff) &&
(((puVar15 = g_pEntityList + (uVar11 & 0xfff) * 0x10,
puVar15 != (undefined *)0xfffffffc && (*(uint *)(puVar15 + 8) == uVar11 >> 0xc)) &&
(*(int *)(puVar15 + 4) != 0)))) {
if (pCVar13[0x33dc] != (CBaseEntity)0x0) goto LAB_0056f010;
lVar17 = (longdouble)IntervalTimer::Now();
if (1.0 < (float)lVar17 - *(float *)(pCVar13 + 0x33cc)) goto LAB_0056f28d;
}
if (pCVar13[0x33dc] != (CBaseEntity)0x0) goto LAB_0056f010;
}
}
}
}
}
if ((*(int *)(ZombieGunSurvivorFriendPush._28_4_ + 0x30) == 0) &&
(iVar6 = CBaseEntity::GetTeamNumber(this), iVar6 == 2)) {
iVar6 = CBaseEntity::GetTeamNumber(this);
iVar12 = CBaseEntity::GetTeamNumber(pCVar13);
if (iVar6 == iVar12) {
return 0;
}
}
if (local_c0 != (CTerrorPlayer *)0x0) {
cVar5 = CTerrorPlayer::IsInvulnerable(local_c0);
if (cVar5 != '\0') {
return 0;
}
cVar5 = CTerrorPlayer::IsPerformingAction();
if (cVar5 != '\0') {
return 0;
}
uVar11 = *(uint *)(local_c0 + 0x2e28);
if (((uVar11 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar11 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)) &&
((*(uint *)(puVar15 + 8) == uVar11 >> 0xc && (*(int *)(puVar15 + 4) != 0)))) {
return 0;
}
}
cVar5 = CTerrorGameRules::HasPlayerControlledZombies();
if (cVar5 != '\0') {
iVar6 = CBaseEntity::GetTeamNumber(this);
cVar5 = IsASurvivorTeam(iVar6);
if ((((cVar5 != '\0') && (local_c0 != (CTerrorPlayer *)0x0)) &&
(iVar6 = CBaseEntity::GetTeamNumber((CBaseEntity *)local_c0), iVar6 == 3)) &&
(iVar6 = (**(code **)(*(int *)local_c0 + 0x544))(), iVar6 == 3)) {
if (local_c0[0x3e78] == (CTerrorPlayer)0x0) {
pcVar2 = *(code **)(*(int *)this + 0x420);
cosf(*(float *)(versus_shove_hunter_fov._28_4_ + 0x2c) * 0.008726646);
(**(code **)(*(int *)local_c0 + 0x288))();
cVar5 = (*pcVar2)();
}
else {
cosf(*(float *)(versus_shove_hunter_fov_pouncing._28_4_ + 0x2c) * 0.008726646);
cVar5 = (**(code **)(*(int *)this + 0x41c))();
}
if (cVar5 == '\0') {
return 0;
}
}
}
bVar16 = local_d4 == 1;
local_b0 = 0.1;
if (0.1 <= *(float *)(pVVar14 + 8)) {
local_b0 = *(float *)(pVVar14 + 8);
}
local_b4 = *(float *)(pVVar14 + 4);
local_b8 = *(float *)pVVar14;
VectorNormalize((Vector *)&local_b8);
local_a4 = *(float *)(ZombieGunForce._28_4_ + 0x2c);
local_ac = local_b8 * local_a4;
local_a8 = local_b4 * local_a4;
local_a4 = local_a4 * local_b0;
if (local_c0 == (CTerrorPlayer *)0x0) {
piVar7 = (int *)(**(code **)(*gameeventmanager + 0x1c))();
if (piVar7 != (int *)0x0) {
(**(code **)(*piVar7 + 0x30))();
pcVar2 = *(code **)(*piVar7 + 0x30);
(**(code **)(*engine + 0x40))();
(*pcVar2)();
(**(code **)(*gameeventmanager + 0x20))();
}
local_a0 = *(undefined4 *)(param_2 + 0xc);
local_9c = *(undefined4 *)(param_2 + 0x10);
local_98 = *(undefined4 *)(param_2 + 0x14);
piVar7 = (int *)__dynamic_cast();
if (piVar7 != (int *)0x0) {
iVar6 = (**(code **)(*(int *)pCVar13 + 0x14c))();
if (iVar6 == 0) {
(**(code **)(*piVar7 + 0x74))();
}
else {
*(bool *)(iVar6 + 0x1d90) = bVar16;
(**(code **)(*piVar7 + 0x74))();
*(undefined1 *)(iVar6 + 0x1d90) = 0;
}
lVar17 = (longdouble)CountdownTimer::Now();
if ((float)lVar17 < *(float *)(param_1 + 0x17d8)) {
return 0;
}
pCVar13 = (CBaseEntity *)(**(code **)(*piVar7 + 0xb4))();
iVar6 = CBaseEntity::GetGender(pCVar13);
if (iVar6 == 0x10) {
CBaseEntity::EmitSound(this,"Weapon.HitClown",0.0,(float *)0x0);
piVar7 = (int *)(**(code **)(*gameeventmanager + 0x1c))();
if (piVar7 != (int *)0x0) {
pcVar2 = *(code **)(*piVar7 + 0x30);
(**(code **)(*engine + 0x40))();
(*pcVar2)();
(**(code **)(*gameeventmanager + 0x20))();
}
}
else {
CBaseEntity::EmitSound(this,"Weapon.HitInfected",0.0,(float *)0x0);
}
fVar1 = *(float *)(SurvivorMeleeHitSoundIntervalTimer._28_4_ + 0x2c);
lVar17 = (longdouble)CountdownTimer::Now();
if ((float)lVar17 + fVar1 != *(float *)(param_1 + 0x17d8)) {
(**(code **)(*(int *)(param_1 + 0x17d0) + 4))();
*(float *)(param_1 + 0x17d8) = (float)lVar17 + fVar1;
}
if (fVar1 == *(float *)(param_1 + 0x17d4)) {
return 0;
}
(**(code **)(*(int *)(param_1 + 0x17d0) + 4))();
*(float *)(param_1 + 0x17d4) = fVar1;
return 0;
}
local_88 = local_ac * 3.0;
local_84 = local_a8 * 3.0;
local_80 = local_a4 * 3.0;
CTakeDamageInfo::CTakeDamageInfo
((CTakeDamageInfo *)&local_7c,this,this,(Vector *)&local_88,(Vector *)&local_a0,
*(float *)(ZombieGunDamage._28_4_ + 0x2c),0x80,0,(Vector *)0x0);
(**(code **)(*(int *)this + 0x478))();
CalculateMeleeDamageForce((CTakeDamageInfo *)&local_7c,pVVar14,(Vector *)&local_88,1.0);
if (pCVar13 == g_WorldEntity) {
lVar17 = (longdouble)CountdownTimer::Now();
if ((float)lVar17 < *(float *)(param_1 + 0x17d8)) {
return 0;
}
CBaseEntity::EmitSound(this,"Weapon.HitWorld",0.0,(float *)0x0);
CountdownTimer::Start
((CountdownTimer *)(param_1 + 0x17d0),
*(float *)(SurvivorMeleeHitSoundIntervalTimer._28_4_ + 0x2c));
return 0;
}
if ((400.0 < *(float *)(pCVar13 + 0x23c)) ||
((cVar5 = CTerrorGameRules::IsCurrentRoundActive(g_pGameRules), cVar5 == '\0' &&
(cVar5 = CTerrorGameRules::IsSurvivalMode(), cVar5 != '\0')))) {
local_34 = local_34 | 0x800;
local_7c = 0;
local_78 = 0;
local_74 = 0;
local_b8 = 0.0;
local_b4 = 0.0;
local_b0 = 0.0;
}
if (!bVar16) {
ClearMultiDamage();
CBaseEntity::DispatchTraceAttack
((CTakeDamageInfo *)pCVar13,(Vector *)&local_7c,(CGameTrace *)pVVar14);
ApplyMultiDamage();
}
if (pCVar13[0x186] == (CBaseEntity)0x7) {
return 0;
}
if (pCVar13[0x186] == (CBaseEntity)0x0) {
return 0;
}
if (*(char **)(pCVar13 + 0x7c) == "func_*") {
return 0;
}
cVar5 = CBaseEntity::ClassMatchesComplex(pCVar13,"func_*");
if (cVar5 != '\0') {
return 0;
}
if (*(char **)(pCVar13 + 0x7c) == "prop_door*") {
return 0;
}
cVar5 = CBaseEntity::ClassMatchesComplex(pCVar13,"prop_door*");
if (cVar5 != '\0') {
return 0;
}
local_ac = *(float *)(ZombieGunPhysicsForce._28_4_ + 0x2c);
local_a8 = local_b4 * local_ac;
local_a4 = local_b0 * local_ac;
local_ac = local_ac * local_b8;
CBaseEntity::ApplyAbsVelocityImpulse(pCVar13,(Vector *)&local_ac);
return 0;
}
iVar6 = CBaseEntity::GetTeamNumber((CBaseEntity *)local_c0);
if ((iVar6 == 3) &&
(((iVar6 = CBaseEntity::GetTeamNumber((CBaseEntity *)local_c0), iVar6 == 3 &&
(iVar6 = (**(code **)(*(int *)local_c0 + 0x544))(), iVar6 == 8)) ||
(((iVar6 = CBaseEntity::GetTeamNumber((CBaseEntity *)local_c0), iVar6 == 3 &&
(iVar6 = (**(code **)(*(int *)local_c0 + 0x544))(), iVar6 == 7)) ||
(cVar5 = (**(code **)(*(int *)local_c0 + 0x900))(), cVar5 == '\0')))))) {
local_ac = vec3_origin;
bVar4 = false;
local_a8 = DAT_01053d4c;
local_a4 = DAT_01053d50;
}
else {
bVar4 = true;
}
piVar7 = (int *)(**(code **)(*gameeventmanager + 0x1c))();
if (piVar7 != (int *)0x0) {
pcVar2 = *(code **)(*piVar7 + 0x30);
(**(code **)(*engine + 0x40))();
(*pcVar2)();
pcVar2 = *(code **)(*piVar7 + 0x30);
(**(code **)(*engine + 0x40))();
(*pcVar2)();
(**(code **)(*gameeventmanager + 0x20))();
}
local_a0 = *(undefined4 *)(param_2 + 0xc);
local_9c = *(undefined4 *)(param_2 + 0x10);
local_98 = *(undefined4 *)(param_2 + 0x14);
iVar6 = CTerrorPlayer::GetStaggerDir(local_c0);
if (iVar6 == 0) {
CBaseEntity::SetAbsVelocity(pCVar13,(Vector *)&vec3_origin);
}
local_94 = *(float *)pVVar14;
local_90 = *(float *)(pVVar14 + 4);
local_8c = *(float *)(pVVar14 + 8);
iVar6 = CBaseEntity::GetTeamNumber(this);
cVar5 = IsASurvivorTeam(iVar6);
if (cVar5 != '\0') {
iVar6 = CBaseEntity::GetTeamNumber(pCVar13);
cVar5 = IsASurvivorTeam(iVar6);
if (cVar5 != '\0') {
CBasePlayer::EyeVectors((CBasePlayer *)this,(Vector *)&local_94,(Vector *)0x0,(Vector *)0x0);
VectorNormalize((Vector *)&local_94);
local_a4 = 0.1;
if (0.1 <= local_8c) {
local_a4 = local_8c;
}
local_ac = *(float *)(ZombieGunSurvivorForce._28_4_ + 0x2c);
local_a4 = local_a4 * local_ac;
local_a8 = local_90 * local_ac;
local_ac = local_ac * local_94;
lVar17 = (longdouble)CountdownTimer::Now();
if (*(float *)(param_1 + 0x17d8) <= (float)lVar17) {
CBaseEntity::EmitSound(this,"Weapon.HitSurvivor",0.0,(float *)0x0);
fVar1 = *(float *)(SurvivorMeleeHitSoundIntervalTimer._28_4_ + 0x2c);
lVar17 = (longdouble)CountdownTimer::Now();
if ((float)lVar17 + fVar1 != *(float *)(param_1 + 0x17d8)) {
(**(code **)(*(int *)(param_1 + 0x17d0) + 4))();
*(float *)(param_1 + 0x17d8) = (float)lVar17 + fVar1;
}
if (fVar1 != *(float *)(param_1 + 0x17d4)) {
(**(code **)(*(int *)(param_1 + 0x17d0) + 4))();
*(float *)(param_1 + 0x17d4) = fVar1;
}
}
goto LAB_0056ea64;
}
}
iVar6 = CBaseEntity::GetTeamNumber(this);
cVar5 = IsASurvivorTeam(iVar6);
if (((cVar5 == '\0') || (iVar6 = CBaseEntity::GetTeamNumber((CBaseEntity *)local_c0), iVar6 != 3))
|| (iVar6 = (**(code **)(*(int *)local_c0 + 0x544))(), iVar6 != 2)) {
lVar17 = (longdouble)CountdownTimer::Now();
if (*(float *)(param_1 + 0x17d8) <= (float)lVar17) {
CBaseEntity::EmitSound(this,"Weapon.HitInfected",0.0,(float *)0x0);
fVar1 = *(float *)(SurvivorMeleeHitSoundIntervalTimer._28_4_ + 0x2c);
lVar17 = (longdouble)CountdownTimer::Now();
if ((float)lVar17 + fVar1 != *(float *)(param_1 + 0x17d8)) {
(**(code **)(*(int *)(param_1 + 0x17d0) + 4))();
*(float *)(param_1 + 0x17d8) = (float)lVar17 + fVar1;
}
if (fVar1 != *(float *)(param_1 + 0x17d4)) {
(**(code **)(*(int *)(param_1 + 0x17d0) + 4))();
*(float *)(param_1 + 0x17d4) = fVar1;
}
}
}
else {
CBasePlayer::EyeVectors((CBasePlayer *)this,(Vector *)&local_94,(Vector *)0x0,(Vector *)0x0);
VectorNormalize((Vector *)&local_94);
local_a4 = 0.1;
if (0.1 <= local_8c) {
local_a4 = local_8c;
}
local_ac = *(float *)(ZombieGunForce._28_4_ + 0x2c);
local_a4 = local_a4 * local_ac;
local_a8 = local_90 * local_ac;
local_ac = local_ac * local_94;
lVar17 = (longdouble)CountdownTimer::Now();
if (*(float *)(param_1 + 0x17d8) <= (float)lVar17) {
CBaseEntity::EmitSound(this,"Weapon.HitBoomer",0.0,(float *)0x0);
fVar1 = *(float *)(SurvivorMeleeHitSoundIntervalTimer._28_4_ + 0x2c);
lVar17 = (longdouble)CountdownTimer::Now();
if ((float)lVar17 + fVar1 != *(float *)(param_1 + 0x17d8)) {
(**(code **)(*(int *)(param_1 + 0x17d0) + 4))();
*(float *)(param_1 + 0x17d8) = (float)lVar17 + fVar1;
}
if (fVar1 != *(float *)(param_1 + 0x17d4)) {
(**(code **)(*(int *)(param_1 + 0x17d0) + 4))();
*(float *)(param_1 + 0x17d4) = fVar1;
}
}
}
LAB_0056ea64:
local_c8 = (Vector *)&local_94;
local_88 = local_ac * 3.0;
local_84 = local_a8 * 3.0;
local_80 = local_a4 * 3.0;
CTakeDamageInfo::CTakeDamageInfo
((CTakeDamageInfo *)&local_7c,this,this,(Vector *)&local_88,(Vector *)&local_a0,0.0,0x80
,0,(Vector *)0x0);
(**(code **)(*(int *)this + 0x478))();
CalculateMeleeDamageForce((CTakeDamageInfo *)&local_7c,local_c8,(Vector *)&local_88,1.0);
piVar7 = (int *)&stack0xfffffef0;
if (bVar4) {
iVar6 = CBaseEntity::GetTeamNumber(this);
iVar12 = CBaseEntity::GetTeamNumber(pCVar13);
piVar7 = (int *)&stack0xfffffef0;
if (iVar6 != iVar12) {
iVar6 = CBaseEntity::GetTeamNumber((CBaseEntity *)local_c0);
if ((((iVar6 == 3) && (iVar6 = (**(code **)(*(int *)local_c0 + 0x544))(), iVar6 == 3)) &&
((uVar11 = *(uint *)(local_c0 + 0x3e64), uVar11 != 0xffffffff &&
((puVar15 = g_pEntityList + (uVar11 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc
&& (*(uint *)(puVar15 + 8) == uVar11 >> 0xc)))))) && (*(int *)(puVar15 + 4) != 0)) {
piVar7 = (int *)(**(code **)(*gameeventmanager + 0x1c))();
if (piVar7 != (int *)0x0) {
pcVar2 = *(code **)(*piVar7 + 0x30);
(**(code **)(*engine + 0x40))();
(*pcVar2)();
pcVar2 = *(code **)(*piVar7 + 0x30);
(**(code **)(*engine + 0x40))();
(*pcVar2)();
(**(code **)(*gameeventmanager + 0x20))();
}
piVar7 = (int *)&stack0xfffffef0;
if (*(int *)(ZombieKnockOffDeath._28_4_ + 0x30) != 0) {
local_40 = 500.0;
(**(code **)(*(int *)this + 0x478))();
piVar7 = (int *)&stack0xfffffeec;
CalculateMeleeDamageForce((CTakeDamageInfo *)&local_7c,local_c8,(Vector *)&local_88,1.0);
}
}
else {
uVar11 = *(uint *)(local_c0 + 0x33c0);
if ((((uVar11 != 0xffffffff) &&
(puVar15 = g_pEntityList + (uVar11 & 0xfff) * 0x10, puVar15 != (undefined *)0xfffffffc)
) && (*(uint *)(puVar15 + 8) == uVar11 >> 0xc)) &&
((*(int *)(puVar15 + 4) != 0 &&
(piVar7 = (int *)(**(code **)(*gameeventmanager + 0x1c))(), piVar7 != (int *)0x0)))) {
pcVar2 = *(code **)(*piVar7 + 0x30);
(**(code **)(*engine + 0x40))();
(*pcVar2)();
pcVar2 = *(code **)(*piVar7 + 0x30);
(**(code **)(*engine + 0x40))();
(*pcVar2)();
pcVar2 = *(code **)(*piVar7 + 0x30);
(**(code **)(*engine + 0x40))();
(*pcVar2)();
(**(code **)(*piVar7 + 0x30))();
(**(code **)(*gameeventmanager + 0x20))();
}
CTerrorPlayer::OnStunned(local_c0,*(float *)(ZombieGunStunDuration._28_4_ + 0x2c));
piVar7 = (int *)&stack0xfffffef0;
}
}
}
if ((1.0 <= local_40) && (!bVar16)) {
piVar7[-1] = 0x56eb56;
ClearMultiDamage();
piVar7[3] = (int)param_2;
*piVar7 = (int)pCVar13;
piVar7[2] = (int)local_c8;
piVar7[1] = (int)&local_7c;
piVar7[-1] = 0x56eb76;
CBaseEntity::DispatchTraceAttack
((CTakeDamageInfo *)*piVar7,(Vector *)piVar7[1],(CGameTrace *)piVar7[2]);
piVar7[-1] = 0x56eb7b;
ApplyMultiDamage();
}
if (((((local_ac <= -0.01) || (0.01 <= local_ac)) || (local_a8 <= -0.01)) ||
((0.01 <= local_a8 || (local_a4 <= -0.01)))) || (0.01 <= local_a4)) {
*piVar7 = (int)local_c0;
piVar7[-1] = 0x56ecc6;
iVar6 = CBaseEntity::GetTeamNumber((CBaseEntity *)*piVar7);
if (iVar6 == 3) {
piVar7[1] = (int)this;
piVar7[2] = (int)&local_ac;
*piVar7 = (int)local_c0;
piVar7[-1] = 0x5702f6;
CTerrorPlayer::OnShovedBySurvivor
((CTerrorPlayer *)*piVar7,(CTerrorPlayer *)piVar7[1],(Vector *)piVar7[2]);
}
else {
uVar11 = *(uint *)(local_c0 + 0x3e68);
if ((((uVar11 == 0xffffffff) ||
(puVar15 = g_pEntityList + (uVar11 & 0xfff) * 0x10, puVar15 == (undefined *)0xfffffffc))
|| ((*(uint *)(puVar15 + 8) != uVar11 >> 0xc || (*(int *)(puVar15 + 4) == 0)))) &&
((((uVar11 = *(uint *)(local_c0 + 0x3e48), uVar11 == 0xffffffff ||
(puVar15 = g_pEntityList + (uVar11 & 0xfff) * 0x10, puVar15 == (undefined *)0xfffffffc))
|| (*(uint *)(puVar15 + 8) != uVar11 >> 0xc)) || (*(int *)(puVar15 + 4) == 0)))) {
*piVar7 = (int)local_c0;
piVar7[-1] = 0x56ed45;
cVar5 = CTerrorPlayer::IsInvulnerable((CTerrorPlayer *)*piVar7);
if (cVar5 == '\0') {
*piVar7 = (int)local_c0;
piVar7[-1] = 0x56ed5b;
cVar5 = CTerrorPlayer::IsIncapacitatedRevivable((CTerrorPlayer *)*piVar7);
if (cVar5 == '\0') {
*piVar7 = (int)local_c0;
piVar7[-1] = 0x56ed71;
cVar5 = CTerrorPlayer::IsGettingUp((CTerrorPlayer *)*piVar7);
if (cVar5 == '\0') {
uVar11 = *(uint *)(local_c0 + 0x3ee0);
if (((uVar11 == 0xffffffff) ||
(puVar15 = g_pEntityList + (uVar11 & 0xfff) * 0x10,
puVar15 == (undefined *)0xfffffffc)) ||
((*(uint *)(puVar15 + 8) != uVar11 >> 0xc ||
(iVar6 = *(int *)(puVar15 + 4), iVar6 == 0)))) {
piVar7[1] = *(int *)(SurvivorTeamHitPitchMax._28_4_ + 0x2c);
*piVar7 = *(undefined4 *)(SurvivorTeamHitPitchMin._28_4_ + 0x2c);
piVar7[-1] = 0x56edd3;
lVar17 = (longdouble)RandomFloat();
piVar7[1] = *(int *)(SurvivorTeamHitYawMax._28_4_ + 0x2c);
*piVar7 = *(undefined4 *)(SurvivorTeamHitYawMin._28_4_ + 0x2c);
piVar7[-1] = 0x56ee03;
lVar18 = (longdouble)RandomFloat();
local_84 = (float)lVar18;
piVar7[1] = (int)&local_88;
local_80 = 0.0;
*piVar7 = (int)local_c0;
piVar7[-1] = 0x56ee3b;
local_88 = (float)lVar17;
CBasePlayer::SetPunchAngle((CBasePlayer *)*piVar7,(QAngle *)piVar7[1]);
pcVar2 = *(code **)(*(int *)local_c0 + 0x7fc);
*piVar7 = (int)local_c0;
piVar7[1] = (int)&local_7c;
piVar7[-1] = 0x56ee5d;
iVar6 = CTerrorPlayer::GetFlinchEvent
((CTerrorPlayer *)*piVar7,(CTakeDamageInfo *)piVar7[1]);
piVar7[2] = 0;
piVar7[1] = iVar6;
*piVar7 = (int)local_c0;
piVar7[-1] = 0x56ee74;
(*pcVar2)();
if (*(int *)(SurvivorShoveTeammates._28_4_ + 0x30) != 0) {
piVar7[1] = (int)&local_ac;
*piVar7 = (int)local_c0;
piVar7[-1] = 0x56ee9c;
CTerrorPlayer::SetShoveForce((CTerrorPlayer *)*piVar7,(Vector *)piVar7[1]);
piVar7[1] = (int)this;
*piVar7 = (int)local_c0;
piVar7[-1] = 0x56eea8;
CTerrorPlayer::SetResponsibleForAirMovement
((CTerrorPlayer *)*piVar7,(CBaseCombatCharacter *)piVar7[1]);
}
}
else {
piVar7[1] = (int)this;
piVar7[2] = (int)&local_ac;
*piVar7 = iVar6;
piVar7[-1] = 0x5704e1;
CTerrorPlayer::OnShovedBySurvivor
((CTerrorPlayer *)*piVar7,(CTerrorPlayer *)piVar7[1],(Vector *)piVar7[2]);
}
}
}
}
}
}
}
piVar7[3] = -2;
piVar7[2] = (int)&INextBot::typeinfo;
piVar7[1] = (int)&CBaseEntity::typeinfo;
*piVar7 = (int)pCVar13;
piVar7[-1] = 0x56ec00;
piVar8 = (int *)__dynamic_cast();
if (piVar8 != (int *)0x0) {
iVar6 = *piVar8;
piVar7[1] = (int)this;
*piVar7 = (int)piVar8;
pcVar2 = *(code **)(iVar6 + 0x74);
piVar7[-1] = 0x56ec10;
(*pcVar2)();
}
return 0;
}
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.