aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Handlers/SpellHandler.cpp7
-rw-r--r--src/server/game/Server/Packets/SpellPackets.cpp6
-rw-r--r--src/server/game/Server/Packets/SpellPackets.h11
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
-rw-r--r--src/server/game/Server/WorldSession.h3
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);