aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/SpellHandler.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-05-01 22:26:53 +0200
committerShauren <shauren.trinity@gmail.com>2024-05-01 22:26:53 +0200
commita39d0db9ec64f6bf38716abaade5b7835f2db338 (patch)
tree1e18f96b3600ab02d9cb8fc6288ac0cded23b6ce /src/server/game/Handlers/SpellHandler.cpp
parentcdc6719b8368907292f090978f6bdd6b8c73834d (diff)
Core/Spells: Implemented evoker empower spell mechanic
Diffstat (limited to 'src/server/game/Handlers/SpellHandler.cpp')
-rw-r--r--src/server/game/Handlers/SpellHandler.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp
index aaf74f89acc..2515320fc4b 100644
--- a/src/server/game/Handlers/SpellHandler.cpp
+++ b/src/server/game/Handlers/SpellHandler.cpp
@@ -393,6 +393,39 @@ void WorldSession::HandleCancelChanneling(WorldPackets::Spells::CancelChannellin
mover->InterruptSpell(CURRENT_CHANNELED_SPELL);
}
+void WorldSession::HandleSetEmpowerMinHoldStagePercent(WorldPackets::Spells::SetEmpowerMinHoldStagePercent const& setEmpowerMinHoldStagePercent)
+{
+ _player->SetEmpowerMinHoldStagePercent(setEmpowerMinHoldStagePercent.MinHoldStagePercent);
+}
+
+void WorldSession::HandleSpellEmpowerRelease(WorldPackets::Spells::SpellEmpowerRelease const& spellEmpowerRelease)
+{
+ // ignore for remote control state (for player case)
+ Unit* mover = _player->GetUnitBeingMoved();
+ if (mover != _player && mover->GetTypeId() == TYPEID_PLAYER)
+ return;
+
+ Spell* spell = mover->GetCurrentSpell(CURRENT_CHANNELED_SPELL);
+ if (!spell || spell->GetSpellInfo()->Id != uint32(spellEmpowerRelease.SpellID) || !spell->IsEmpowerSpell())
+ return;
+
+ spell->SetEmpowerReleasedByClient(true);
+}
+
+void WorldSession::HandleSpellEmpowerRestart(WorldPackets::Spells::SpellEmpowerRestart const& spellEmpowerRestart)
+{
+ // ignore for remote control state (for player case)
+ Unit* mover = _player->GetUnitBeingMoved();
+ if (mover != _player && mover->GetTypeId() == TYPEID_PLAYER)
+ return;
+
+ Spell* spell = mover->GetCurrentSpell(CURRENT_CHANNELED_SPELL);
+ if (!spell || spell->GetSpellInfo()->Id != uint32(spellEmpowerRestart.SpellID) || !spell->IsEmpowerSpell())
+ return;
+
+ spell->SetEmpowerReleasedByClient(false);
+}
+
void WorldSession::HandleTotemDestroyed(WorldPackets::Totem::TotemDestroyed& totemDestroyed)
{
// ignore for remote control state