diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 091573323..1de14ccc5 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -8748,16 +8748,22 @@ void SpellAuraHolder::RefreshHolder() SendAuraUpdate(false); } -bool SpellAuraHolder::HasAuraAndMechanicEffect(uint32 mechanic) const +bool SpellAuraHolder::HasMechanic(uint32 mechanic) const { + if (mechanic == m_spellProto->Mechanic) + return true; + for (int32 i = 0; i < MAX_EFFECT_INDEX; ++i) if (m_auras[i] && m_spellProto->EffectMechanic[i] == mechanic) return true; return false; } -bool SpellAuraHolder::HasAuraAndMechanicEffectMask(uint32 mechanicMask) const +bool SpellAuraHolder::HasMechanicMask(uint32 mechanicMask) const { + if (mechanicMask & (1 << (m_spellProto->Mechanic - 1))) + return true; + for (int32 i = 0; i < MAX_EFFECT_INDEX; ++i) if (m_auras[i] && m_spellProto->EffectMechanic[i] & mechanicMask) return true; diff --git a/src/game/SpellAuras.h b/src/game/SpellAuras.h index 203497f47..4ee01f9bb 100644 --- a/src/game/SpellAuras.h +++ b/src/game/SpellAuras.h @@ -153,8 +153,8 @@ class MANGOS_DLL_SPEC SpellAuraHolder m_stackAmount = stackAmount; } - bool HasAuraAndMechanicEffect(uint32 mechanic) const; - bool HasAuraAndMechanicEffectMask(uint32 mechanicMask) const; + bool HasMechanic(uint32 mechanic) const; + bool HasMechanicMask(uint32 mechanicMask) const; ~SpellAuraHolder(); private: diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 757400e9f..d08d24b25 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -7362,7 +7362,7 @@ void Spell::EffectDispelMechanic(SpellEffectIndex eff_idx) next = iter; ++next; SpellEntry const *spell = iter->second->GetSpellProto(); - if (spell->Mechanic == mechanic || iter->second->HasAuraAndMechanicEffect(mechanic)) + if (spell->Mechanic == mechanic || iter->second->HasMechanic(mechanic)) { unitTarget->RemoveAurasDueToSpell(spell->Id); if (Auras.empty()) diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index cc1c35997..4b1f7b400 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -10180,7 +10180,7 @@ void Unit::RemoveAurasAtMechanicImmunity(uint32 mechMask, uint32 exceptSpellId, ++iter; else if (spell->Attributes & SPELL_ATTR_UNAFFECTED_BY_INVULNERABILITY) ++iter; - else if (iter->second->HasAuraAndMechanicEffectMask(mechMask)) + else if (iter->second->HasMechanicMask(mechMask)) { RemoveAurasDueToSpell(spell->Id); diff --git a/src/game/UnitAuraProcHandler.cpp b/src/game/UnitAuraProcHandler.cpp index d54214adf..9a7f56344 100644 --- a/src/game/UnitAuraProcHandler.cpp +++ b/src/game/UnitAuraProcHandler.cpp @@ -717,7 +717,7 @@ SpellAuraProcResult Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura SpellEntry const *spell = iter->second->GetSpellProto(); if( spell->Mechanic == MECHANIC_STUN || - iter->second->HasAuraAndMechanicEffect(MECHANIC_STUN)) + iter->second->HasMechanic(MECHANIC_STUN)) { pVictim->RemoveAurasDueToSpell(spell->Id); iter = Auras.begin(); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 40b5cfcbd..a7db78b2b 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "10231" + #define REVISION_NR "10232" #endif // __REVISION_NR_H__