diff options
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/Packets/SpellPackets.cpp | 70 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/SpellPackets.h | 76 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 12 | ||||
| -rw-r--r-- | src/server/game/Server/WorldSession.h | 8 |
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); |
