From 2c06e7fcdab677df4e5908f69b9655577e08fe69 Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 19 Aug 2024 12:30:37 +0200 Subject: Core/Spells: Implemented SpellAuraInterruptFlags2::ReleaseEmpower --- src/server/game/Spells/Spell.cpp | 6 +++--- src/server/game/Spells/SpellDefines.h | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) (limited to 'src/server') 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); -- cgit v1.2.3