diff --git a/Source/Game/Entities/Unit/Unit.cs b/Source/Game/Entities/Unit/Unit.cs index fd5b0d5d7..4d7f7730a 100644 --- a/Source/Game/Entities/Unit/Unit.cs +++ b/Source/Game/Entities/Unit/Unit.cs @@ -2089,28 +2089,13 @@ namespace Game.Entities RemoveDynamicUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.ChannelObjects), index); } - public static bool IsDamageReducedByArmor(SpellSchoolMask schoolMask, SpellInfo spellInfo = null, SpellEffectInfo spellEffectInfo = null) + public static bool IsDamageReducedByArmor(SpellSchoolMask schoolMask, SpellInfo spellInfo = null) { // only physical spells damage gets reduced by armor if ((schoolMask & SpellSchoolMask.Normal) == 0) return false; - if (spellInfo != null) - { - // there are spells with no specific attribute but they have "ignores armor" in tooltip - if (spellInfo.HasAttribute(SpellCustomAttributes.IgnoreArmor)) - return false; - - // bleeding effects are not reduced by armor - if (spellEffectInfo != null) - { - if (spellEffectInfo.ApplyAuraName == AuraType.PeriodicDamage || spellEffectInfo.Effect == SpellEffectName.SchoolDamage) - if (spellInfo.GetEffectMechanicMask(spellEffectInfo.EffectIndex).HasAnyFlag((1u << (int)Mechanics.Bleed))) - return false; - } - } - - return true; + return spellInfo == null || !spellInfo.HasAttribute(SpellCustomAttributes.IgnoreArmor); } public override UpdateFieldFlag GetUpdateFieldFlagsFor(Player target) diff --git a/Source/Game/Spells/Auras/AuraEffect.cs b/Source/Game/Spells/Auras/AuraEffect.cs index 1600c7ae1..34af036f1 100644 --- a/Source/Game/Spells/Auras/AuraEffect.cs +++ b/Source/Game/Spells/Auras/AuraEffect.cs @@ -4967,7 +4967,7 @@ namespace Game.Spells damage = Unit.SpellCriticalDamageBonus(caster, m_spellInfo, damage, target); // Calculate armor mitigation - if (Unit.IsDamageReducedByArmor(GetSpellInfo().GetSchoolMask(), GetSpellInfo(), GetSpellEffectInfo())) + if (Unit.IsDamageReducedByArmor(GetSpellInfo().GetSchoolMask(), GetSpellInfo())) { uint damageReducedArmor = Unit.CalcArmorReducedDamage(caster, target, damage, GetSpellInfo(), GetSpellInfo().GetAttackType(), GetBase().GetCasterLevel()); cleanDamage.mitigated_damage += damage - damageReducedArmor; @@ -5049,7 +5049,7 @@ namespace Game.Spells damage = Unit.SpellCriticalDamageBonus(caster, m_spellInfo, damage, target); // Calculate armor mitigation - if (Unit.IsDamageReducedByArmor(GetSpellInfo().GetSchoolMask(), GetSpellInfo(), GetSpellEffectInfo())) + if (Unit.IsDamageReducedByArmor(GetSpellInfo().GetSchoolMask(), GetSpellInfo())) { uint damageReducedArmor = Unit.CalcArmorReducedDamage(caster, target, damage, GetSpellInfo(), GetSpellInfo().GetAttackType(), GetBase().GetCasterLevel()); cleanDamage.mitigated_damage += damage - damageReducedArmor; diff --git a/Source/Game/Spells/SpellManager.cs b/Source/Game/Spells/SpellManager.cs index 3198bc1a7..55d42c107 100644 --- a/Source/Game/Spells/SpellManager.cs +++ b/Source/Game/Spells/SpellManager.cs @@ -2630,6 +2630,10 @@ namespace Game.Entities { foreach (var spellEffectInfo in spellInfo.GetEffects()) { + // all bleed effects and spells ignore armor + if ((spellInfo.GetEffectMechanicMask(spellEffectInfo.EffectIndex) & (1 << (int)Mechanics.Bleed)) != 0) + spellInfo.AttributesCu |= SpellCustomAttributes.IgnoreArmor; + switch (spellEffectInfo.ApplyAuraName) { case AuraType.ModPossess: