aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2015-06-15 00:25:18 +0200
committerShauren <shauren.trinity@gmail.com>2015-06-15 00:25:18 +0200
commit66d8ccde7f81675be418dfe49025260d9be24dae (patch)
tree06958193a851a3d653d448daa0ce409fff98db14 /src/server/game/Server
parentee01fad0d2af0be7b66cb49d9e23867996792b00 (diff)
Core/PacketIO: Fixed chat packet building in CreatureTextMgr
Closes #14871
Diffstat (limited to 'src/server/game/Server')
-rw-r--r--src/server/game/Server/Packet.h1
-rw-r--r--src/server/game/Server/Packets/ChatPackets.cpp69
-rw-r--r--src/server/game/Server/Packets/ChatPackets.h15
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
4 files changed, 64 insertions, 23 deletions
diff --git a/src/server/game/Server/Packet.h b/src/server/game/Server/Packet.h
index 85d65e967be..89435db31e3 100644
--- a/src/server/game/Server/Packet.h
+++ b/src/server/game/Server/Packet.h
@@ -35,6 +35,7 @@ namespace WorldPackets
virtual WorldPacket const* Write() = 0;
virtual void Read() = 0;
+ WorldPacket const* GetRawPacket() const { return &_worldPacket; }
size_t GetSize() const { return _worldPacket.size(); }
ConnectionType GetConnection() const { return _worldPacket.GetConnection(); }
diff --git a/src/server/game/Server/Packets/ChatPackets.cpp b/src/server/game/Server/Packets/ChatPackets.cpp
index 4204278d514..726e1b87cc6 100644
--- a/src/server/game/Server/Packets/ChatPackets.cpp
+++ b/src/server/game/Server/Packets/ChatPackets.cpp
@@ -92,6 +92,15 @@ void WorldPackets::Chat::ChatMessageEmote::Read()
Text = _worldPacket.ReadString(len);
}
+WorldPackets::Chat::Chat::Chat(Chat const& chat) : ServerPacket(SMSG_CHAT, chat._worldPacket.size()),
+ SlashCmd(chat.SlashCmd), _Language(chat._Language), SenderGUID(chat.SenderGUID),
+ SenderGuildGUID(chat.SenderGuildGUID), SenderAccountGUID(chat.SenderAccountGUID), TargetGUID(chat.TargetGUID), PartyGUID(chat.PartyGUID),
+ SenderVirtualAddress(chat.SenderVirtualAddress), TargetVirtualAddress(chat.TargetVirtualAddress), SenderName(chat.SenderName), TargetName(chat.TargetName),
+ Prefix(chat.Prefix), _Channel(chat._Channel), ChatText(chat.ChatText), AchievementID(chat.AchievementID), _ChatFlags(chat._ChatFlags),
+ DisplayTime(chat.DisplayTime), HideChatLog(chat.HideChatLog), FakeSenderName(chat.FakeSenderName)
+{
+}
+
void WorldPackets::Chat::Chat::Initialize(ChatMsg chatType, Language language, WorldObject const* sender, WorldObject const* receiver, std::string message,
uint32 achievementId /*= 0*/, std::string channelName /*= ""*/, LocaleConstant locale /*= DEFAULT_LOCALE*/, std::string addonPrefix /*= ""*/)
{
@@ -111,30 +120,10 @@ void WorldPackets::Chat::Chat::Initialize(ChatMsg chatType, Language language, W
_Language = language;
if (sender)
- {
- SenderGUID = sender->GetGUID();
-
- if (Creature const* creatureSender = sender->ToCreature())
- SenderName = creatureSender->GetNameForLocaleIdx(locale);
-
- if (Player const* playerSender = sender->ToPlayer())
- {
- SenderAccountGUID = playerSender->GetSession()->GetAccountGUID();
- _ChatFlags = playerSender->GetChatFlags();
-
- SenderGuildGUID = ObjectGuid::Create<HighGuid::Guild>(playerSender->GetGuildId());
-
- if (Group const* group = playerSender->GetGroup())
- PartyGUID = group->GetGUID();
- }
- }
+ SetSender(sender, locale);
if (receiver)
- {
- TargetGUID = receiver->GetGUID();
- if (Creature const* creatureReceiver = receiver->ToCreature())
- TargetName = creatureReceiver->GetNameForLocaleIdx(locale);
- }
+ SetReceiver(receiver, locale);
SenderVirtualAddress = GetVirtualRealmAddress();
TargetVirtualAddress = GetVirtualRealmAddress();
@@ -144,6 +133,32 @@ void WorldPackets::Chat::Chat::Initialize(ChatMsg chatType, Language language, W
ChatText = std::move(message);
}
+void WorldPackets::Chat::Chat::SetSender(WorldObject const* sender, LocaleConstant locale)
+{
+ SenderGUID = sender->GetGUID();
+
+ if (Creature const* creatureSender = sender->ToCreature())
+ SenderName = creatureSender->GetNameForLocaleIdx(locale);
+
+ if (Player const* playerSender = sender->ToPlayer())
+ {
+ SenderAccountGUID = playerSender->GetSession()->GetAccountGUID();
+ _ChatFlags = playerSender->GetChatFlags();
+
+ SenderGuildGUID = ObjectGuid::Create<HighGuid::Guild>(playerSender->GetGuildId());
+
+ if (Group const* group = playerSender->GetGroup())
+ PartyGUID = group->GetGUID();
+ }
+}
+
+void WorldPackets::Chat::Chat::SetReceiver(WorldObject const* receiver, LocaleConstant locale)
+{
+ TargetGUID = receiver->GetGUID();
+ if (Creature const* creatureReceiver = receiver->ToCreature())
+ TargetName = creatureReceiver->GetNameForLocaleIdx(locale);
+}
+
WorldPacket const* WorldPackets::Chat::Chat::Write()
{
_worldPacket << SlashCmd;
@@ -245,3 +260,13 @@ void WorldPackets::Chat::ChatRegisterAddonPrefixes::Read()
Prefixes.push_back(_worldPacket.ReadString(lenghts));
}
}
+
+WorldPacket const* WorldPackets::Chat::DefenseMessage::Write()
+{
+ _worldPacket << int32(ZoneID);
+ _worldPacket.WriteBits(MessageText.length(), 12);
+ _worldPacket.FlushBits();
+ _worldPacket.WriteString(MessageText);
+
+ return &_worldPacket;
+}
diff --git a/src/server/game/Server/Packets/ChatPackets.h b/src/server/game/Server/Packets/ChatPackets.h
index c8bb038ce19..0686fe63c00 100644
--- a/src/server/game/Server/Packets/ChatPackets.h
+++ b/src/server/game/Server/Packets/ChatPackets.h
@@ -150,8 +150,12 @@ namespace WorldPackets
{
public:
Chat() : ServerPacket(SMSG_CHAT, 100) { }
+ Chat(Chat const& chat);
void Initialize(ChatMsg chatType, Language language, WorldObject const* sender, WorldObject const* receiver, std::string message, uint32 achievementId = 0, std::string channelName = "", LocaleConstant locale = DEFAULT_LOCALE, std::string addonPrefix = "");
+ void SetSender(WorldObject const* sender, LocaleConstant locale);
+ void SetReceiver(WorldObject const* receiver, LocaleConstant locale);
+
WorldPacket const* Write() override;
uint8 SlashCmd = 0; ///< @see enum ChatMsg
@@ -268,6 +272,17 @@ namespace WorldPackets
void Read() override { }
};
+
+ class DefenseMessage final : public ServerPacket
+ {
+ public:
+ DefenseMessage() : ServerPacket(SMSG_DEFENSE_MESSAGE) { }
+
+ WorldPacket const* Write() override;
+
+ int32 ZoneID = 0;
+ std::string MessageText;
+ };
}
}
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 45071d14cd4..39d3f002a94 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -1055,7 +1055,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_DANCE_STUDIO_CREATE_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_DB_REPLY, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_DEATH_RELEASE_LOC, STATUS_NEVER, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_DEFENSE_MESSAGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_DEFENSE_MESSAGE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_DELETE_CHAR, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_DESTROY_ARENA_UNIT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_DESTRUCTIBLE_BUILDING_DAMAGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);