diff options
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Spells/SpellDefines.h | 1 |
2 files changed, 4 insertions, 3 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 40c604c9c71..31d5757cd93 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -4347,7 +4347,7 @@ void Spell::update(uint32 difftime) if (IsEmpowerSpell()) { - auto getCompletedEmpowerStages = [&]() -> int32 + int32 completedStages = [&]() -> int32 { Milliseconds passed(m_channeledDuration - m_timer); for (std::size_t i = 0; i < m_empower->StageDurations.size(); ++i) @@ -4358,9 +4358,8 @@ void Spell::update(uint32 difftime) } return m_empower->StageDurations.size(); - }; + }(); - int32 completedStages = getCompletedEmpowerStages(); if (completedStages != m_empower->CompletedStages) { WorldPackets::Spells::SpellEmpowerSetStage empowerSetStage; @@ -4380,6 +4379,7 @@ void Spell::update(uint32 difftime) m_empower->IsReleased = true; m_timer = 0; CallScriptEmpowerCompletedHandlers(m_empower->CompletedStages); + m_caster->ToUnit()->RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2::ReleaseEmpower, m_spellInfo); } } diff --git a/src/server/game/Spells/SpellDefines.h b/src/server/game/Spells/SpellDefines.h index 9fd45a0b200..c7d914d31f9 100644 --- a/src/server/game/Spells/SpellDefines.h +++ b/src/server/game/Spells/SpellDefines.h @@ -143,6 +143,7 @@ enum class SpellAuraInterruptFlags2 : uint32 ChallengeModeStart = 0x00400000, // Implemented in Unit::AtStartOfEncounter StartOfEncounter = 0x00800000, // Implemented in Unit::AtStartOfEncounter EndOfEncounter = 0x01000000, // Implemented in Unit::AtEndOfEncounter + ReleaseEmpower = 0x02000000, // Implemented in Spell::update }; DEFINE_ENUM_FLAG(SpellAuraInterruptFlags2); |