-
Автор темы
- #1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Который нормально будет выбивать дамаг с двух пуль
Код:
void autowall::scale_damage(player_t* e, CGameTrace& enterTrace, weapon_info_t* weaponData, float& currentDamage)
{
if (!e->is_player())
return;
auto IsArmored = [&]()->bool
{
switch (enterTrace.hitgroup)
{
case HITGROUP_HEAD:
return e->m_bHasHelmet();
case HITGROUP_GENERIC:
case HITGROUP_CHEST:
case HITGROUP_STOMACH:
case HITGROUP_LEFTARM:
case HITGROUP_RIGHTARM:
return true;
default:
return false;
}
};
auto HasHeavyArmor = e->m_bHasHeavyArmor();
switch (enterTrace.hitgroup)
{
case HITGROUP_HEAD:
currentDamage *= HasHeavyArmor ? 2.0f : 4.0f;
break;
case HITGROUP_STOMACH:
currentDamage *= 1.25f;
break;
case HITGROUP_LEFTLEG:
case HITGROUP_RIGHTLEG:
currentDamage *= 0.75f;
break;
}
auto ArmorValue = e->m_ArmorValue();
if (ArmorValue > 0 && IsArmored())
{
auto armorBonusRatio = 0.5f;
auto armorRatio = weaponData->flArmorRatio / 2.0f;
auto bonusValue = 1.0f;
if (HasHeavyArmor)
{
armorBonusRatio = 0.33f;
armorRatio *= 0.5f;
bonusValue = 0.33f;
}
auto NewDamage = currentDamage * armorRatio;
if (HasHeavyArmor)
NewDamage *= 0.85f;
if ((currentDamage - currentDamage * armorRatio) * bonusValue * armorBonusRatio > ArmorValue)
NewDamage = currentDamage - ArmorValue / armorBonusRatio;
currentDamage = NewDamage;
}
}