aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjoschiwald <joschiwald.trinity@gmail.com>2018-04-21 16:15:21 +0200
committerjoschiwald <joschiwald.trinity@gmail.com>2018-04-21 16:15:21 +0200
commit6faec45f8d67933265d2919f24472d251aba404f (patch)
tree3877ec71e37a6081019e9596b0e17363747c7dc8 /src
parent15d21268281e9821763228f9d826daa9db56e75e (diff)
Core/Entities: Adapted changes from 584abe107e2524ae30449b87b19e335e9aa1b196
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index f0af80b721e..94cfa7d68b6 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -1599,18 +1599,21 @@ uint32 Unit::CalcArmorReducedDamage(Unit* attacker, Unit* victim, const uint32 d
// Apply Player CR_ARMOR_PENETRATION rating
if (GetTypeId() == TYPEID_PLAYER)
{
- float maxArmorPen = 0;
+ float arpPct = ToPlayer()->GetRatingBonusValue(CR_ARMOR_PENETRATION);
+
+ // no more than 100%
+ RoundToInterval(arpPct, 0.f, 100.f);
+
+ float maxArmorPen = 0.f;
if (victim->GetLevelForTarget(attacker) < 60)
maxArmorPen = float(400 + 85 * victim->GetLevelForTarget(attacker));
else
maxArmorPen = 400 + 85 * victim->GetLevelForTarget(attacker) + 4.5f * 85 * (victim->GetLevelForTarget(attacker) - 59);
// Cap armor penetration to this number
- maxArmorPen = std::min((armor + maxArmorPen) / 3, armor);
+ maxArmorPen = std::min((armor + maxArmorPen) / 3.f, armor);
// Figure out how much armor do we ignore
- float armorPen = CalculatePct(maxArmorPen, ToPlayer()->GetRatingBonusValue(CR_ARMOR_PENETRATION));
- // Got the value, apply it
- armor -= std::min(armorPen, maxArmorPen);
+ armor -= CalculatePct(maxArmorPen, arpPct);
}
if (G3D::fuzzyLe(armor, 0.0f))