diff options
author | joschiwald <joschiwald.trinity@gmail.com> | 2018-04-21 16:15:21 +0200 |
---|---|---|
committer | joschiwald <joschiwald.trinity@gmail.com> | 2018-04-21 16:15:21 +0200 |
commit | 6faec45f8d67933265d2919f24472d251aba404f (patch) | |
tree | 3877ec71e37a6081019e9596b0e17363747c7dc8 /src | |
parent | 15d21268281e9821763228f9d826daa9db56e75e (diff) |
Core/Entities: Adapted changes from 584abe107e2524ae30449b87b19e335e9aa1b196
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 13 |
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)) |