diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Handlers/SpellHandler.cpp | 7 | ||||
-rw-r--r-- | src/server/game/Server/Packets/SpellPackets.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Server/Packets/SpellPackets.h | 11 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 3 |
5 files changed, 22 insertions, 7 deletions
diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp index 97ae3d8a0e3..1860e4667be 100644 --- a/src/server/game/Handlers/SpellHandler.cpp +++ b/src/server/game/Handlers/SpellHandler.cpp @@ -484,13 +484,10 @@ void WorldSession::HandleSelfResOpcode(WorldPackets::Spells::SelfRes& /*packet*/ } } -void WorldSession::HandleSpellClick(WorldPacket& recvData) +void WorldSession::HandleSpellClick(WorldPackets::Spells::SpellClick& packet) { - ObjectGuid guid; - recvData >> guid; - // this will get something not in world. crash - Creature* unit = ObjectAccessor::GetCreatureOrPetOrVehicle(*_player, guid); + Creature* unit = ObjectAccessor::GetCreatureOrPetOrVehicle(*_player, packet.SpellClickUnitGuid); if (!unit) return; diff --git a/src/server/game/Server/Packets/SpellPackets.cpp b/src/server/game/Server/Packets/SpellPackets.cpp index 5f4cf7a3981..00ce2593287 100644 --- a/src/server/game/Server/Packets/SpellPackets.cpp +++ b/src/server/game/Server/Packets/SpellPackets.cpp @@ -739,3 +739,9 @@ WorldPacket const* WorldPackets::Spells::MirrorImageCreatureData::Write() return &_worldPacket; } + +void WorldPackets::Spells::SpellClick::Read() +{ + _worldPacket >> SpellClickUnitGuid; + TryAutoDismount = _worldPacket.ReadBit(); +} diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h index f5eb4408567..b9388c02116 100644 --- a/src/server/game/Server/Packets/SpellPackets.h +++ b/src/server/game/Server/Packets/SpellPackets.h @@ -738,6 +738,17 @@ namespace WorldPackets ObjectGuid UnitGUID; uint32 DisplayID = 0; }; + + class SpellClick final : public ClientPacket + { + public: + SpellClick(WorldPacket&& packet) : ClientPacket(CMSG_SPELL_CLICK, std::move(packet)) { } + + void Read() override; + + ObjectGuid SpellClickUnitGuid; + bool TryAutoDismount = false; + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index a511c668c62..cd4a382042e 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -755,7 +755,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_SORT_BAGS, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SORT_BANK_BAGS, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SORT_REAGENT_BANK_BAGS, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL); - DEFINE_OPCODE_HANDLER_OLD(CMSG_SPELL_CLICK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSpellClick ); + DEFINE_HANDLER(CMSG_SPELL_CLICK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Spells::SpellClick, &WorldSession::HandleSpellClick); DEFINE_HANDLER(CMSG_SPIRIT_HEALER_ACTIVATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::NPC::SpiritHealerActivate, &WorldSession::HandleSpiritHealerActivate); DEFINE_HANDLER(CMSG_SPLIT_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Item::SplitItem, &WorldSession::HandleSplitItemOpcode); DEFINE_HANDLER(CMSG_STAND_STATE_CHANGE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Misc::StandStateChange, &WorldSession::HandleStandStateChangeOpcode); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index e8627f1ed22..d2db5378e65 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -500,6 +500,7 @@ namespace WorldPackets class UnlearnSkill; class SelfRes; class GetMirrorImageData; + class SpellClick; } namespace Talent @@ -1487,7 +1488,7 @@ class WorldSession void HandleTransmogrifyItems(WorldPacket& recvData); // Miscellaneous - void HandleSpellClick(WorldPacket& recvData); + void HandleSpellClick(WorldPackets::Spells::SpellClick& packet); void HandleMirrorImageDataRequest(WorldPackets::Spells::GetMirrorImageData& packet); void HandleRemoveGlyph(WorldPacket& recvData); void HandleGuildSetFocusedAchievement(WorldPackets::Achievement::GuildSetFocusedAchievement& setFocusedAchievement); |