aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Server')
-rw-r--r--src/server/game/Server/Packets/SpellPackets.cpp70
-rw-r--r--src/server/game/Server/Packets/SpellPackets.h76
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp12
-rw-r--r--src/server/game/Server/WorldSession.h8
4 files changed, 159 insertions, 7 deletions
diff --git a/src/server/game/Server/Packets/SpellPackets.cpp b/src/server/game/Server/Packets/SpellPackets.cpp
index 83ff89ef569..8be021086f5 100644
--- a/src/server/game/Server/Packets/SpellPackets.cpp
+++ b/src/server/game/Server/Packets/SpellPackets.cpp
@@ -851,6 +851,76 @@ WorldPacket const* SpellChannelUpdate::Write()
return &_worldPacket;
}
+WorldPacket const* SpellEmpowerStart::Write()
+{
+ _worldPacket << CastID;
+ _worldPacket << CasterGUID;
+ _worldPacket << uint32(Targets.size());
+ _worldPacket << int32(SpellID);
+ _worldPacket << Visual;
+ _worldPacket << EmpowerDuration;
+ _worldPacket << MinHoldTime;
+ _worldPacket << HoldAtMaxTime;
+ _worldPacket << uint32(StageDurations.size());
+
+ for (ObjectGuid const& target : Targets)
+ _worldPacket << target;
+
+ for (Duration<Milliseconds, uint32> stageDuration : StageDurations)
+ _worldPacket << stageDuration;
+
+ _worldPacket.WriteBit(InterruptImmunities.has_value());
+ _worldPacket.WriteBit(HealPrediction.has_value());
+ _worldPacket.FlushBits();
+
+ if (InterruptImmunities)
+ _worldPacket << *InterruptImmunities;
+
+ if (HealPrediction)
+ _worldPacket << *HealPrediction;
+
+ return &_worldPacket;
+}
+
+WorldPacket const* SpellEmpowerUpdate::Write()
+{
+ _worldPacket << CastID;
+ _worldPacket << CasterGUID;
+ _worldPacket << TimeRemaining;
+ _worldPacket << uint32(StageDurations.size());
+ _worldPacket << uint8(Status);
+ _worldPacket.FlushBits();
+
+ for (Duration<Milliseconds, uint32> stageDuration : StageDurations)
+ _worldPacket << stageDuration;
+
+ return &_worldPacket;
+}
+
+void SetEmpowerMinHoldStagePercent::Read()
+{
+ _worldPacket >> MinHoldStagePercent;
+}
+
+void SpellEmpowerRelease::Read()
+{
+ _worldPacket >> SpellID;
+}
+
+void SpellEmpowerRestart::Read()
+{
+ _worldPacket >> SpellID;
+}
+
+WorldPacket const* SpellEmpowerSetStage::Write()
+{
+ _worldPacket << CastID;
+ _worldPacket << CasterGUID;
+ _worldPacket << int32(Stage);
+
+ return &_worldPacket;
+}
+
WorldPacket const* ResurrectRequest::Write()
{
_worldPacket << ResurrectOffererGUID;
diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h
index f344eb53899..42c58e35772 100644
--- a/src/server/game/Server/Packets/SpellPackets.h
+++ b/src/server/game/Server/Packets/SpellPackets.h
@@ -830,6 +830,82 @@ namespace WorldPackets
int32 TimeRemaining = 0;
};
+ class SpellEmpowerStart final : public ServerPacket
+ {
+ public:
+ SpellEmpowerStart() : ServerPacket(SMSG_SPELL_EMPOWER_START, 16 + 16 + 4 + 8 + 4 + 4 + 4 + 1) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid CastID;
+ ObjectGuid CasterGUID;
+ int32 SpellID = 0;
+ SpellCastVisual Visual;
+ Duration<Milliseconds, uint32> EmpowerDuration;
+ Duration<Milliseconds, uint32> MinHoldTime;
+ Duration<Milliseconds, uint32> HoldAtMaxTime;
+ std::vector<ObjectGuid> Targets;
+ std::vector<Duration<Milliseconds, uint32>> StageDurations;
+ Optional<SpellChannelStartInterruptImmunities> InterruptImmunities;
+ Optional<SpellTargetedHealPrediction> HealPrediction;
+ };
+
+ class SpellEmpowerUpdate final : public ServerPacket
+ {
+ public:
+ SpellEmpowerUpdate() : ServerPacket(SMSG_SPELL_EMPOWER_UPDATE, 16 + 16 + 4 + 4 + 1) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid CastID;
+ ObjectGuid CasterGUID;
+ Duration<Milliseconds, int32> TimeRemaining;
+ std::vector<Duration<Milliseconds, uint32>> StageDurations;
+ uint8 Status = 0;
+ };
+
+ class SetEmpowerMinHoldStagePercent final : public ClientPacket
+ {
+ public:
+ SetEmpowerMinHoldStagePercent(WorldPacket&& packet) : ClientPacket(CMSG_SET_EMPOWER_MIN_HOLD_STAGE_PERCENT, std::move(packet)) { }
+
+ void Read() override;
+
+ float MinHoldStagePercent = 1.0f;
+ };
+
+ class SpellEmpowerRelease final : public ClientPacket
+ {
+ public:
+ SpellEmpowerRelease(WorldPacket&& packet) : ClientPacket(CMSG_SPELL_EMPOWER_RELEASE, std::move(packet)) { }
+
+ void Read() override;
+
+ int32 SpellID = 0;
+ };
+
+ class SpellEmpowerRestart final : public ClientPacket
+ {
+ public:
+ SpellEmpowerRestart(WorldPacket&& packet) : ClientPacket(CMSG_SPELL_EMPOWER_RESTART, std::move(packet)) { }
+
+ void Read() override;
+
+ int32 SpellID = 0;
+ };
+
+ class SpellEmpowerSetStage final : public ServerPacket
+ {
+ public:
+ SpellEmpowerSetStage() : ServerPacket(SMSG_SPELL_EMPOWER_SET_STAGE, 16 + 16 + 4) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid CastID;
+ ObjectGuid CasterGUID;
+ int32 Stage = 0;
+ };
+
class ResurrectRequest final : public ServerPacket
{
public:
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index e25b2ef6d74..054cf392d94 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -876,7 +876,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_SET_CURRENCY_FLAGS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_SET_DIFFICULTY_ID, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_SET_DUNGEON_DIFFICULTY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetDungeonDifficultyOpcode);
- DEFINE_HANDLER(CMSG_SET_EMPOWER_MIN_HOLD_STAGE_PERCENT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_SET_EMPOWER_MIN_HOLD_STAGE_PERCENT, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSetEmpowerMinHoldStagePercent);
DEFINE_HANDLER(CMSG_SET_EVERYONE_IS_ASSISTANT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetEveryoneIsAssistant);
DEFINE_HANDLER(CMSG_SET_EXCLUDED_CHAT_CENSOR_SOURCES, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_SET_FACTION_AT_WAR, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetFactionAtWar);
@@ -918,8 +918,8 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_SPECTATE_CHANGE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_SPAWN_TRACKING_UPDATE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_SPELL_CLICK, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSpellClick);
- DEFINE_HANDLER(CMSG_SPELL_EMPOWER_RELEASE, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_SPELL_EMPOWER_RESTART, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_SPELL_EMPOWER_RELEASE, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleSpellEmpowerRelease);
+ DEFINE_HANDLER(CMSG_SPELL_EMPOWER_RESTART, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleSpellEmpowerRestart);
DEFINE_HANDLER(CMSG_SPIRIT_HEALER_ACTIVATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSpiritHealerActivate);
DEFINE_HANDLER(CMSG_SPLIT_GUILD_BANK_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSplitGuildBankItem);
DEFINE_HANDLER(CMSG_SPLIT_GUILD_BANK_ITEM_TO_INVENTORY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSplitGuildBankItemToInventory);
@@ -2058,9 +2058,9 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_DAMAGE_SHIELD, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_DELAYED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_DISPELL_LOG, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_EMPOWER_SET_STAGE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_EMPOWER_START, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_EMPOWER_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_EMPOWER_SET_STAGE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_EMPOWER_START, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_EMPOWER_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_ENERGIZE_LOG, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_EXECUTE_LOG, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_FAILED_OTHER, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index fe569b4a7b2..214a04d4714 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -737,6 +737,9 @@ namespace WorldPackets
class UpdateMissileTrajectory;
class TradeSkillSetFavorite;
class KeyboundOverride;
+ class SetEmpowerMinHoldStagePercent;
+ class SpellEmpowerRelease;
+ class SpellEmpowerRestart;
}
namespace Talent
@@ -1488,7 +1491,6 @@ class TC_GAME_API WorldSession
void HandleItemTextQuery(WorldPackets::Query::ItemTextQuery& itemTextQuery);
void HandleMailCreateTextItem(WorldPackets::Mail::MailCreateTextItem& createTextItem);
void HandleQueryNextMailTime(WorldPackets::Mail::MailQueryNextMailTime& queryNextMailTime);
- void HandleCancelChanneling(WorldPackets::Spells::CancelChannelling& cancelChanneling);
void HandleSplitItemOpcode(WorldPackets::Item::SplitItem& splitItem);
void HandleSwapInvItemOpcode(WorldPackets::Item::SwapInvItem& swapInvItem);
@@ -1525,6 +1527,10 @@ class TC_GAME_API WorldSession
void HandleCancelModSpeedNoControlAuras(WorldPackets::Spells::CancelModSpeedNoControlAuras& cancelModSpeedNoControlAuras);
void HandleCancelAutoRepeatSpellOpcode(WorldPackets::Spells::CancelAutoRepeatSpell& cancelAutoRepeatSpell);
void HandleCancelQueuedSpellOpcode(WorldPackets::Spells::CancelQueuedSpell& cancelQueuedSpell);
+ void HandleCancelChanneling(WorldPackets::Spells::CancelChannelling& cancelChanneling);
+ void HandleSetEmpowerMinHoldStagePercent(WorldPackets::Spells::SetEmpowerMinHoldStagePercent const& setEmpowerMinHoldStagePercent);
+ void HandleSpellEmpowerRelease(WorldPackets::Spells::SpellEmpowerRelease const& spellEmpowerRelease);
+ void HandleSpellEmpowerRestart(WorldPackets::Spells::SpellEmpowerRestart const& spellEmpowerRestart);
void HandleMissileTrajectoryCollision(WorldPackets::Spells::MissileTrajectoryCollision& packet);
void HandleUpdateMissileTrajectory(WorldPackets::Spells::UpdateMissileTrajectory& packet);