aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Server/Packets/ChatPackets.cpp46
-rw-r--r--src/server/game/Server/Packets/ChatPackets.h12
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