From 3ea88f814a6be7487ef8a3d5c6237981d20f5063 Mon Sep 17 00:00:00 2001 From: ariel- Date: Tue, 3 Apr 2018 03:14:18 -0300 Subject: Core/Spells: all bleed effects should ignore armor Closes #21759 (cherry picked from commit 5dec0e491ba56c940833791d2cb4a2607c2b003f) --- src/server/game/Entities/Unit/Unit.cpp | 20 +++----------------- src/server/game/Entities/Unit/Unit.h | 2 +- src/server/game/Spells/Auras/SpellAuraEffects.cpp | 4 ++-- src/server/game/Spells/SpellMgr.cpp | 4 ++++ 4 files changed, 10 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 90e06ba69af..3fb1be9ca38 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -1494,27 +1494,13 @@ void Unit::HandleEmoteCommand(uint32 anim_id, Trinity::IteratorPairHasAttribute(SPELL_ATTR0_CU_IGNORE_ARMOR)) - return false; - // bleeding effects are not reduced by armor - if (spellEffectInfo) - { - if (spellEffectInfo->ApplyAuraName == SPELL_AURA_PERIODIC_DAMAGE || - spellEffectInfo->Effect == SPELL_EFFECT_SCHOOL_DAMAGE) - if (spellInfo->GetEffectMechanicMask(spellEffectInfo->EffectIndex) & (1 << MECHANIC_BLEED)) - return false; - } - } - return true; + return !spellInfo || !spellInfo->HasAttribute(SPELL_ATTR0_CU_IGNORE_ARMOR); } /*static*/ uint32 Unit::CalcArmorReducedDamage(Unit const* attacker, Unit* victim, uint32 damage, SpellInfo const* spellInfo, WeaponAttackType /*attackType*/ /*= MAX_ATTACK*/, uint8 attackerLevel /*= 0*/) @@ -7381,7 +7367,7 @@ uint32 Unit::MeleeDamageBonusTaken(Unit* attacker, uint32 pdamage, WeaponAttackT // Shred, Maul - "Effects which increase Bleed damage also increase Shred damage" if (spellProto->SpellFamilyName == SPELLFAMILY_DRUID && spellProto->SpellFamilyFlags[0] & 0x00008800) - mechanicMask |= (1<GetSchoolMask(), GetSpellInfo(), &GetSpellEffectInfo())) + if (Unit::IsDamageReducedByArmor(GetSpellInfo()->GetSchoolMask(), GetSpellInfo())) { uint32 damageReducedArmor = Unit::CalcArmorReducedDamage(caster, target, damage, GetSpellInfo(), GetSpellInfo()->GetAttackType(), GetBase()->GetCasterLevel()); cleanDamage.mitigated_damage += damage - damageReducedArmor; @@ -5319,7 +5319,7 @@ void AuraEffect::HandlePeriodicHealthLeechAuraTick(Unit* target, Unit* caster) c damage = Unit::SpellCriticalDamageBonus(caster, m_spellInfo, damage, target); // Calculate armor mitigation - if (Unit::IsDamageReducedByArmor(GetSpellInfo()->GetSchoolMask(), GetSpellInfo(), &GetSpellEffectInfo())) + if (Unit::IsDamageReducedByArmor(GetSpellInfo()->GetSchoolMask(), GetSpellInfo())) { uint32 damageReducedArmor = Unit::CalcArmorReducedDamage(caster, target, damage, GetSpellInfo(), GetSpellInfo()->GetAttackType(), GetBase()->GetCasterLevel()); cleanDamage.mitigated_damage += damage - damageReducedArmor; diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index aaa2369f6d7..bd2f23c1132 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -2949,6 +2949,10 @@ void SpellMgr::LoadSpellInfoCustomAttributes() SpellInfo* spellInfoMutable = const_cast(&spellInfo); for (SpellEffectInfo const& spellEffectInfo : spellInfoMutable->GetEffects()) { + // all bleed effects and spells ignore armor + if (spellInfo.GetEffectMechanicMask(spellEffectInfo.EffectIndex) & (1 << MECHANIC_BLEED)) + spellInfoMutable->AttributesCu |= SPELL_ATTR0_CU_IGNORE_ARMOR; + switch (spellEffectInfo.ApplyAuraName) { case SPELL_AURA_MOD_POSSESS: -- cgit v1.2.3