From d4713356a095f0f1c26f33252ed698b2ee910c80 Mon Sep 17 00:00:00 2001 From: Benjamin Jackson <38561765+heyitsbench@users.noreply.github.com> Date: Tue, 19 Aug 2025 15:51:06 -0400 Subject: [PATCH] refactor(Core/Packets): Rewrite `MSG_MINIMAP_PING` to modern packet class. (#22696) --- src/server/game/Groups/Group.cpp | 11 +++++++++ src/server/game/Groups/Group.h | 2 ++ src/server/game/Handlers/GroupHandler.cpp | 20 ++++++---------- .../game/Server/Packets/MiscPackets.cpp | 15 ++++++++++++ src/server/game/Server/Packets/MiscPackets.h | 23 +++++++++++++++++++ src/server/game/Server/WorldSession.h | 3 ++- 6 files changed, 60 insertions(+), 14 deletions(-) diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 3fede6ffc..b4b2331e1 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -28,6 +28,7 @@ #include "LFGMgr.h" #include "Log.h" #include "MapMgr.h" +#include "MiscPackets.h" #include "ObjectMgr.h" #include "Opcodes.h" #include "Player.h" @@ -2059,6 +2060,16 @@ GroupJoinBattlegroundResult Group::CanJoinBattlegroundQueue(Battleground const* return GroupJoinBattlegroundResult(bgTemplate->GetBgTypeID()); } +void Group::DoMinimapPing(ObjectGuid sourceGuid, float mapX, float mapY) +{ + WorldPackets::Misc::MinimapPing minimapPing; + minimapPing.SourceGuid = sourceGuid; + minimapPing.MapX = mapX; + minimapPing.MapY = mapY; + + BroadcastPacket(minimapPing.Write(), true, -1, sourceGuid); +} + //=================================================== //============== Roll =============================== //=================================================== diff --git a/src/server/game/Groups/Group.h b/src/server/game/Groups/Group.h index f4afabf6f..acf6fc0e1 100644 --- a/src/server/game/Groups/Group.h +++ b/src/server/game/Groups/Group.h @@ -255,6 +255,8 @@ public: void SetBattlefieldGroup(Battlefield* bf); GroupJoinBattlegroundResult CanJoinBattlegroundQueue(Battleground const* bgTemplate, BattlegroundQueueTypeId bgQueueTypeId, uint32 MinPlayerCount, uint32 MaxPlayerCount, bool isRated, uint32 arenaSlot); + void DoMinimapPing(ObjectGuid sourceGuid, float mapX, float mapY); + void ChangeMembersGroup(ObjectGuid guid, uint8 group); void SetTargetIcon(uint8 id, ObjectGuid whoGuid, ObjectGuid targetGuid); void SetGroupMemberFlag(ObjectGuid guid, bool apply, GroupMemberFlags flag); diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp index ee4e0676a..85a9f0888 100644 --- a/src/server/game/Handlers/GroupHandler.cpp +++ b/src/server/game/Handlers/GroupHandler.cpp @@ -22,6 +22,7 @@ #include "LFGMgr.h" #include "Language.h" #include "Log.h" +#include "MapMgr.h" #include "MiscPackets.h" #include "ObjectMgr.h" #include "Opcodes.h" @@ -522,24 +523,17 @@ void WorldSession::HandleLootRoll(WorldPacket& recvData) } } -void WorldSession::HandleMinimapPingOpcode(WorldPacket& recvData) +void WorldSession::HandleMinimapPingOpcode(WorldPackets::Misc::MinimapPingClient& packet) { - if (!GetPlayer()->GetGroup()) + if (!sMapMgr->IsValidMapCoord(GetPlayer()->GetMap()->GetId(), packet.MapX, packet.MapY)) return; - float x, y; - recvData >> x; - recvData >> y; + Group* group = GetPlayer()->GetGroup(); - /** error handling **/ - /********************/ + if (!group) + return; - // everything's fine, do it - WorldPacket data(MSG_MINIMAP_PING, (8 + 4 + 4)); - data << GetPlayer()->GetGUID(); - data << float(x); - data << float(y); - GetPlayer()->GetGroup()->BroadcastPacket(&data, true, -1, GetPlayer()->GetGUID()); + group->DoMinimapPing(GetPlayer()->GetGUID(), packet.MapX, packet.MapY); } void WorldSession::HandleRandomRollOpcode(WorldPackets::Misc::RandomRollClient& packet) diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp index a418a517e..109845381 100644 --- a/src/server/game/Server/Packets/MiscPackets.cpp +++ b/src/server/game/Server/Packets/MiscPackets.cpp @@ -67,6 +67,21 @@ WorldPacket const* WorldPackets::Misc::Playsound::Write() return &_worldPacket; } +void WorldPackets::Misc::MinimapPingClient::Read() +{ + _worldPacket >> MapX; + _worldPacket >> MapY; +} + +WorldPacket const* WorldPackets::Misc::MinimapPing::Write() +{ + _worldPacket << SourceGuid; + _worldPacket << float(MapX); + _worldPacket << float(MapY); + + return &_worldPacket; +} + void WorldPackets::Misc::RandomRollClient::Read() { _worldPacket >> Min; diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h index 6f991293f..7453ad7fc 100644 --- a/src/server/game/Server/Packets/MiscPackets.h +++ b/src/server/game/Server/Packets/MiscPackets.h @@ -93,6 +93,29 @@ namespace WorldPackets uint32 SoundKitID = 0; }; + class MinimapPingClient final : public ClientPacket + { + public: + MinimapPingClient(WorldPacket&& packet) : ClientPacket(MSG_MINIMAP_PING, std::move(packet)) {} + + void Read() override; + + float MapX = 0.0f; // Raw position coordinates + float MapY = 0.0f; + }; + + class MinimapPing final : public ServerPacket + { + public: + MinimapPing() : ServerPacket(MSG_MINIMAP_PING, 8 + 4 + 4) { } + + WorldPacket const* Write() override; + + ObjectGuid SourceGuid; + float MapX = 0.0f; + float MapY = 0.0f; + }; + class RandomRollClient final : public ClientPacket { public: diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 02948d249..9e570f9b0 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -148,6 +148,7 @@ namespace WorldPackets namespace Misc { + class MinimapPingClient; class RandomRollClient; } @@ -933,7 +934,7 @@ public: // opcodes handlers void HandleWardenDataOpcode(WorldPacket& recvData); void HandleWorldTeleportOpcode(WorldPacket& recvData); - void HandleMinimapPingOpcode(WorldPacket& recvData); + void HandleMinimapPingOpcode(WorldPackets::Misc::MinimapPingClient& packet); void HandleRandomRollOpcode(WorldPackets::Misc::RandomRollClient& packet); void HandleFarSightOpcode(WorldPacket& recvData); void HandleSetDungeonDifficultyOpcode(WorldPacket& recvData);