From 6cb2bd953dbf1fc63ef2e15d198ee7c32779fd0b Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Sun, 10 Dec 2023 16:58:21 +0100 Subject: [PATCH] Core/Units: fixed a rounding issue that caused very low damage unintentionally being reduced to zero *also feed the AttackerStateUpdate SubDamage with the correct values --- src/server/game/Entities/Unit/Unit.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index b3bcc85bf9..16365ded11 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -1553,8 +1553,7 @@ static float GetArmorReduction(float armor, uint8 attackerLevel) } float armorReduction = 100.f - GetArmorReduction(armor, attacker ? attacker->getLevel() : attackerLevel); - - return std::max(CalculatePct(damage, armorReduction), 0); + return std::max(std::ceil(damage * armorReduction / 100.f), 0); } /*static*/ uint32 Unit::CalcSpellResistedDamage(Unit const* attacker, Unit* victim, uint32 damage, SpellSchoolMask schoolMask, SpellInfo const* spellInfo) @@ -5144,8 +5143,8 @@ void Unit::SendAttackStateUpdate(CalcDamageInfo* damageInfo) packet.SubDmg.emplace(); packet.SubDmg->SchoolMask = damageInfo->DamageSchoolMask; // School of sub damage - packet.SubDmg->FDamage = damageInfo->Damage; // sub damage - packet.SubDmg->Damage = damageInfo->Damage; // Sub Damage + packet.SubDmg->FDamage = damageInfo->CleanDamage; // sub damage + packet.SubDmg->Damage = damageInfo->CleanDamage; // Sub Damage packet.SubDmg->Absorbed = damageInfo->Absorb; packet.SubDmg->Resisted = damageInfo->Resist; @@ -7765,8 +7764,7 @@ int32 Unit::MeleeDamageBonusTaken(Unit* attacker, int32 pdamage, WeaponAttackTyp TakenTotalMod = 1.0f - damageReduction; } - float tmpDamage = float(pdamage + TakenFlatBenefit) * TakenTotalMod; - return int32(std::max(tmpDamage, 0.0f)); + return int32(std::max(std::ceil(static_cast(pdamage + TakenFlatBenefit) * TakenTotalMod), 0.0f)); } void Unit::ApplySpellImmune(uint32 spellId, uint32 op, uint32 type, bool apply)