void CAutoWall::ScaleDamage(IBasePlayer* player, CCSWeaponInfo* weapon_info, int hitgroup, float& damage)
{
if (!player)
return;
auto new_damage = damage;
const auto is_zeus = csgo->weapon->GetItemDefinitionIndex() == weapon_taser;
static auto is_armored = [](IBasePlayer* player, int armor, int hitgroup) {
if (player && player->GetArmor() > 0)
{
if (player->HasHelmet() && hitgroup == HITGROUP_HEAD || (hitgroup >= HITGROUP_CHEST && hitgroup <= HITGROUP_RIGHTARM))
return true;
}
return false;
};
if (!is_zeus) {
switch (hitgroup)
{
case HITGROUP_HEAD:
new_damage *= 4.f;
break;
case HITGROUP_STOMACH:
new_damage *= 1.25f;
break;
case HITGROUP_LEFTLEG:
case HITGROUP_RIGHTLEG:
new_damage *= .75f;
break;
default:
break;
/*4.0; 1
1.0; 2
1.25; 3
1.0; 4
1.0; 5
0.75; 6
0.75; 7
1.0; 8*/
}
}
else
new_damage *= 0.92f;
auto weaponData = csgo->weapon->GetCSWpnData();
if (!weaponData)
return;
if (is_armored(player, player->GetArmor(), hitgroup))
{
float flHeavyRatio = 1.0f;
float flBonusRatio = 0.5f;
float flRatio = weaponData->flArmorRatio * 0.5f;
float flNewDamage;
if (!player->HeavyArmor())
{
flNewDamage = new_damage * flRatio;
}
else
{
flBonusRatio = 0.33f;
flRatio = weaponData->flArmorRatio * 0.5f;
flHeavyRatio = 0.33f;
flNewDamage = (new_damage * (flRatio * 0.5)) * 0.85f;
}
int iArmor = player->GetArmor();
if (((new_damage - flNewDamage) * (flBonusRatio * flHeavyRatio)) > iArmor)
flNewDamage = new_damage - (iArmor / flBonusRatio);
new_damage = flNewDamage;
}
damage = new_damage;
}