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