diff options
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Entities/Unit/Unit.cpp | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 7af71cf7144..6510d60101e 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -1573,7 +1573,7 @@ uint32 Unit::CalcArmorReducedDamage(Unit* victim, const uint32 damage, SpellInfo return (newdamage > 1) ? newdamage : 1; } -void Unit::CalcAbsorbResist(Unit* victim, SpellSchoolMask schoolMask, DamageEffectType damagetype, const uint32 damage, uint32 *absorb, uint32 *resist, SpellInfo const* spellInfo) +void Unit::CalcAbsorbResist(Unit* victim, SpellSchoolMask schoolMask, DamageEffectType damagetype, uint32 const damage, uint32 *absorb, uint32 *resist, SpellInfo const* spellInfo) { if (!victim || !victim->isAlive() || !damage) return; @@ -1583,14 +1583,18 @@ void Unit::CalcAbsorbResist(Unit* victim, SpellSchoolMask schoolMask, DamageEffe // Magic damage, check for resists if ((schoolMask & SPELL_SCHOOL_MASK_NORMAL) == 0) { - float baseVictimResistance = float(victim->GetResistance(GetFirstSchoolInMask(schoolMask))); - float ignoredResistance = float(GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_TARGET_RESISTANCE, schoolMask)); + float victimResistance = float(victim->GetResistance(GetFirstSchoolInMask(schoolMask))); + victimResistance += float(GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_TARGET_RESISTANCE, schoolMask)); + if (Player* player = ToPlayer()) - ignoredResistance += float(player->GetSpellPenetrationItemMod()); - float victimResistance = baseVictimResistance + ignoredResistance; + victimResistance -= float(player->GetSpellPenetrationItemMod()); + + // Resistance can't be lower then 0. + if (victimResistance < 0.0f) + victimResistance = 0.0f; - static const uint32 BOSS_LEVEL = 83; - static const float BOSS_RESISTANCE_CONSTANT = 510.0; + static uint32 const BOSS_LEVEL = 83; + static float const BOSS_RESISTANCE_CONSTANT = 510.0f; uint32 level = getLevel(); float resistanceConstant = 0.0f; |