From c0b6eae0e1b4ccce0a22829ecae40bc2792601ed Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Thu, 22 Aug 2024 15:09:43 -0300 Subject: [PATCH] fix(Core/Spells): Fix movement impairment auras not being removed (#19684) --- src/server/game/Entities/Unit/Unit.cpp | 7 +------ src/server/game/Spells/SpellInfo.cpp | 9 +++++++++ src/server/game/Spells/SpellInfo.h | 1 + 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 7f8c1649a..5fbd0a7d8 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -5185,17 +5185,12 @@ void Unit::RemoveMovementImpairingAuras(bool withRoot) for (AuraApplicationMap::iterator iter = m_appliedAuras.begin(); iter != m_appliedAuras.end();) { Aura const* aura = iter->second->GetBase(); - if (aura->GetSpellInfo()->Mechanic == MECHANIC_SNARE) + if (aura->GetSpellInfo()->Mechanic == MECHANIC_SNARE || aura->GetSpellInfo()->HasEffectMechanic(MECHANIC_SNARE)) { RemoveAura(iter); continue; } - // Xinef: turn off snare auras by setting amount to 0 :) - for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) - if (((1 << i) & iter->second->GetEffectMask()) && aura->GetSpellInfo()->Effects[i].Mechanic == MECHANIC_SNARE) - aura->GetEffect(i)->ChangeAmount(0); - ++iter; } } diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 5c30b040d..444817c23 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -880,6 +880,15 @@ bool SpellInfo::HasEffect(SpellEffects effect) const return false; } +bool SpellInfo::HasEffectMechanic(Mechanics mechanic) const +{ + for (auto const& effect : Effects) + if (effect.Mechanic == mechanic) + return true; + + return false; +} + bool SpellInfo::HasAura(AuraType aura) const { for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h index 3d6493029..534ad254a 100644 --- a/src/server/game/Spells/SpellInfo.h +++ b/src/server/game/Spells/SpellInfo.h @@ -407,6 +407,7 @@ public: uint32 GetCategory() const; bool HasEffect(SpellEffects effect) const; + bool HasEffectMechanic(Mechanics mechanic) const; bool HasAura(AuraType aura) const; bool HasAnyAura() const; bool HasAreaAuraEffect() const;