diff options
| author | Shauren <shauren.trinity@gmail.com> | 2015-06-15 00:25:18 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2015-06-15 00:25:18 +0200 |
| commit | 66d8ccde7f81675be418dfe49025260d9be24dae (patch) | |
| tree | 06958193a851a3d653d448daa0ce409fff98db14 /src/server/game/Server | |
| parent | ee01fad0d2af0be7b66cb49d9e23867996792b00 (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.h | 1 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/ChatPackets.cpp | 69 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/ChatPackets.h | 15 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 |
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); |
