diff options
author | Ovahlord <dreadkiller@gmx.de> | 2024-08-31 21:45:15 +0200 |
---|---|---|
committer | Ovahlord <dreadkiller@gmx.de> | 2024-08-31 21:45:15 +0200 |
commit | db6d60b712f8c3237cd0a3c6eade33aab1c54a21 (patch) | |
tree | 6c5f271ece4d7765ae1302ebfb308cda55bfd530 | |
parent | ef5627c2ce3bd25d26dcedd9ed98c62a7f4acae4 (diff) |
Core/Packets: updated packet structures of CMSG_CHAT_ADDON_MESSAGE_TARGETED and CMSG_CHAT_MESSAGE_WHISPER
-rw-r--r-- | src/server/game/Server/Packets/ChatPackets.cpp | 46 | ||||
-rw-r--r-- | src/server/game/Server/Packets/ChatPackets.h | 12 |
2 files changed, 44 insertions, 14 deletions
diff --git a/src/server/game/Server/Packets/ChatPackets.cpp b/src/server/game/Server/Packets/ChatPackets.cpp index e347f3bc150..0ba94718a9e 100644 --- a/src/server/game/Server/Packets/ChatPackets.cpp +++ b/src/server/game/Server/Packets/ChatPackets.cpp @@ -44,10 +44,23 @@ void WorldPackets::Chat::ChatMessage::Read() void WorldPackets::Chat::ChatMessageWhisper::Read() { _worldPacket >> Language; - uint32 targetLen = _worldPacket.ReadBits(9); + _worldPacket >> TargetGUID; + _worldPacket >> TargetVirtualRealmAddress; + + uint32 targetLen = _worldPacket.ReadBits(6); uint32 textLen = _worldPacket.ReadBits(11); - Target = _worldPacket.ReadString(targetLen); - Text = _worldPacket.ReadString(textLen); + + if (targetLen > 1) + { + Target = _worldPacket.ReadString(targetLen - 1); + _worldPacket.read_skip<uint8>(); // null terminator + } + + if (textLen > 1) + { + Text = _worldPacket.ReadString(textLen - 1); + _worldPacket.read_skip<uint8>(); // null terminator + } } void WorldPackets::Chat::ChatMessageChannel::Read() @@ -82,12 +95,25 @@ void WorldPackets::Chat::ChatAddonMessage::Read() void WorldPackets::Chat::ChatAddonMessageTargeted::Read() { - uint32 targetLen = _worldPacket.ReadBits(9); - _worldPacket.ResetBitPos(); - _worldPacket >> Params; - _worldPacket >> *ChannelGUID; - Target = _worldPacket.ReadString(targetLen); + _worldPacket >> ChannelGUID; + _worldPacket >> PlayerGUID; + _worldPacket >> PlayerVirtualRealmAddress; + + uint32 playerNameLength = _worldPacket.ReadBits(6); + uint32 channelNameLength = _worldPacket.ReadBits(6); + + if (playerNameLength > 1) + { + PlayerName = _worldPacket.ReadString(playerNameLength - 1); + _worldPacket.read_skip<uint8>(); // null terminator + } + + if (channelNameLength > 1) + { + ChannelName = _worldPacket.ReadString(channelNameLength - 1); + _worldPacket.read_skip<uint8>(); // null terminator + } } void WorldPackets::Chat::ChatMessageDND::Read() @@ -143,8 +169,8 @@ void WorldPackets::Chat::Chat::Initialize(ChatMsg chatType, Language language, W SenderVirtualAddress = GetVirtualRealmAddress(); TargetVirtualAddress = GetVirtualRealmAddress(); AchievementID = achievementId; - _Channel = std::move(channelName); - Prefix = std::move(addonPrefix); + _Channel = channelName; + Prefix = addonPrefix; ChatText = message; } diff --git a/src/server/game/Server/Packets/ChatPackets.h b/src/server/game/Server/Packets/ChatPackets.h index ca54636921d..dc61634eb3c 100644 --- a/src/server/game/Server/Packets/ChatPackets.h +++ b/src/server/game/Server/Packets/ChatPackets.h @@ -61,8 +61,10 @@ namespace WorldPackets void Read() override; int32 Language = LANG_UNIVERSAL; - std::string Text; + ObjectGuid TargetGUID; + uint32 TargetVirtualRealmAddress = 0; std::string Target; + std::string Text; }; // CMSG_CHAT_MESSAGE_CHANNEL @@ -105,14 +107,16 @@ namespace WorldPackets public: ChatAddonMessageTargeted(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_ADDON_MESSAGE_TARGETED, std::move(packet)) { - ChannelGUID.emplace(); } void Read() override; - std::string Target; ChatAddonMessageParams Params; - Optional<ObjectGuid> ChannelGUID; // not optional in the packet. Optional for api reasons + std::string PlayerName; + ObjectGuid PlayerGUID; + uint32 PlayerVirtualRealmAddress = 0; + std::string ChannelName; + ObjectGuid ChannelGUID; }; class ChatMessageDND final : public ClientPacket |