TrinityCore
Loading...
Searching...
No Matches
ChatPackets.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "ChatPackets.h"
19#include "Creature.h"
20#include "PacketOperators.h"
21#include "Player.h"
22#include "World.h"
23
25{
27{
29 _worldPacket >> SizedString::BitsSize<11>(Text);
30 switch (GetOpcode())
31 {
37 _worldPacket >> Bits<1>(IsSecure);
38 break;
39 default:
40 break;
41 }
43}
44
46{
50
51 _worldPacket >> SizedCString::BitsSize<9>(Target);
52 _worldPacket >> SizedCString::BitsSize<11>(Text);
53
56}
57
59{
62 _worldPacket >> SizedString::BitsSize<9>(Target);
63 _worldPacket >> SizedString::BitsSize<11>(Text);
65 if (IsSecure)
66 _worldPacket >> Bits<1>(*IsSecure);
67
70}
71
73{
74 data >> SizedString::BitsSize<5>(params.Prefix);
75 data >> SizedString::BitsSize<8>(params.Text);
76 data >> Bits<1>(params.IsLogged);
77 data >> As<int32>(params.Type);
78 data >> SizedString::Data(params.Prefix);
79 data >> SizedString::Data<Strings::DontValidateUtf8>(params.Text);
80
81 return data;
82}
83
88
102
104{
105 _worldPacket >> SizedString::BitsSize<11>(Text);
106
108}
109
111{
112 _worldPacket >> SizedString::BitsSize<11>(Text);
113
115}
116
118{
119 _worldPacket >> SizedString::BitsSize<11>(Text);
120
122}
123
124Chat::Chat(Chat const& chat) : ServerPacket(SMSG_CHAT, chat._worldPacket.size()),
125 SlashCmd(chat.SlashCmd), _Language(chat._Language), SenderGUID(chat.SenderGUID),
126 SenderGuildGUID(chat.SenderGuildGUID), SenderWowAccount(chat.SenderWowAccount), TargetGUID(chat.TargetGUID),
127 SenderVirtualAddress(chat.SenderVirtualAddress), TargetVirtualAddress(chat.TargetVirtualAddress), SenderName(chat.SenderName), TargetName(chat.TargetName),
128 Prefix(chat.Prefix), _Channel(chat._Channel), ChatText(chat.ChatText), AchievementID(chat.AchievementID), _ChatFlags(chat._ChatFlags),
129 DisplayTime(chat.DisplayTime), SpellID(chat.SpellID), BroadcastTextID(chat.BroadcastTextID), HideChatLog(chat.HideChatLog), FakeSenderName(chat.FakeSenderName),
130 ChannelGUID(chat.ChannelGUID)
131{
132}
133
134void Chat::Initialize(ChatMsg chatType, Language language, WorldObject const* sender, WorldObject const* receiver, std::string_view message,
135 uint32 achievementId /*= 0*/, std::string_view channelName /*= ""*/, LocaleConstant locale /*= DEFAULT_LOCALE*/, std::string_view addonPrefix /*= ""*/)
136{
137 // Clear everything because same packet can be used multiple times
138 Clear();
139
144 SenderName.clear();
145 TargetName.clear();
147
148 SlashCmd = chatType;
149 _Language = language;
150
151 if (sender)
152 SetSender(sender, locale);
153
154 if (receiver)
155 SetReceiver(receiver, locale);
156
159 AchievementID = achievementId;
160 _Channel = channelName;
161 Prefix = addonPrefix;
162 ChatText = message;
163}
164
165void Chat::SetSender(WorldObject const* sender, LocaleConstant locale)
166{
167 SenderGUID = sender->GetGUID();
168
169 if (Creature const* creatureSender = sender->ToCreature())
170 SenderName = creatureSender->GetNameForLocaleIdx(locale);
171
172 if (Player const* playerSender = sender->ToPlayer())
173 {
174 SenderGuildGUID = playerSender->m_unitData->GuildGUID;
175 SenderWowAccount = playerSender->m_playerData->WowAccount;
176 _ChatFlags = playerSender->GetChatFlags();
177 }
178}
179
180void Chat::SetReceiver(WorldObject const* receiver, LocaleConstant locale)
181{
182 TargetGUID = receiver->GetGUID();
183 if (Creature const* creatureReceiver = receiver->ToCreature())
184 TargetName = creatureReceiver->GetNameForLocaleIdx(locale);
185}
186
188{
199 _worldPacket << float(DisplayTime);
201 _worldPacket << SizedString::BitsSize<11>(SenderName);
202 _worldPacket << SizedString::BitsSize<11>(TargetName);
203 _worldPacket << SizedString::BitsSize<5>(Prefix);
204 _worldPacket << SizedString::BitsSize<7>(_Channel);
205 _worldPacket << SizedString::BitsSize<12>(ChatText);
206 _worldPacket << Bits<1>(HideChatLog);
207 _worldPacket << Bits<1>(FakeSenderName);
212
218
219 if (BroadcastTextID)
221
222 if (ChannelGUID)
224
227
228 return &_worldPacket;
229}
230
232{
235 _worldPacket << Size<uint32>(SpellVisualKitIDs);
237 if (!SpellVisualKitIDs.empty())
239
240 return &_worldPacket;
241}
242
244{
248 _worldPacket >> Size<uint32>(SpellVisualKitIDs);
250 for (int32& spellVisualKitId : SpellVisualKitIDs)
251 _worldPacket >> spellVisualKitId;
252}
253
264
266{
267 _worldPacket << SizedString::BitsSize<12>(NotifyText);
269
271
272 return &_worldPacket;
273}
274
276{
277 _worldPacket << SizedString::BitsSize<9>(Name);
279
281
282 return &_worldPacket;
283}
284
286{
288
289 _worldPacket << SizedString::BitsSize<11>(StringParam);
291
293
294 return &_worldPacket;
295}
296
298{
299 _worldPacket >> Size<uint32>(Prefixes);
300 for (std::string& prefix : Prefixes)
301 {
302 _worldPacket >> SizedString::BitsSize<5>(prefix);
304 }
305}
306
308{
310 _worldPacket << SizedString::BitsSize<12>(MessageText);
312
314
315 return &_worldPacket;
316}
317
323
325{
326 _worldPacket << SizedString::BitsSize<9>(Name);
327
329
330 return &_worldPacket;
331}
332
334{
336
337 return &_worldPacket;
338}
339
344
352
354{
355 _worldPacket >> Bits<1>(ChatDisabled);
356}
357
359{
360 _worldPacket << Bits<1>(Success);
361 _worldPacket << Bits<1>(ChatDisabled);
363
364 return &_worldPacket;
365}
366}
LocaleConstant
Definition Common.h:51
uint8_t uint8
Definition Define.h:156
int32_t int32
Definition Define.h:150
uint16_t uint16
Definition Define.h:155
uint32_t uint32
Definition Define.h:154
std::unordered_set< uint32 > params[2]
@ SMSG_CHAT
Definition Opcodes.h:1313
@ CMSG_CHAT_MESSAGE_INSTANCE_CHAT
Definition Opcodes.h:221
@ CMSG_CHAT_MESSAGE_RAID_WARNING
Definition Opcodes.h:225
@ CMSG_CHAT_MESSAGE_SAY
Definition Opcodes.h:226
@ CMSG_CHAT_MESSAGE_RAID
Definition Opcodes.h:224
@ CMSG_CHAT_MESSAGE_PARTY
Definition Opcodes.h:223
Language
@ CHAT_FLAG_NONE
ChatMsg
ObjectGuid const & GetGUID() const
Definition BaseEntity.h:163
void append(T value)
Definition ByteBuffer.h:130
void FlushBits()
Definition ByteBuffer.h:141
void Clear()
Definition ObjectGuid.h:329
Player * ToPlayer()
Definition Object.h:126
Creature * ToCreature()
Definition Object.h:121
Array< int32, 2 > SpellVisualKitIDs
WorldPacket const * Write() override
WorldPacket const * Write() override
Array< std::string, MAX_PREFIXES > Prefixes
WorldPacket const * Write() override
WorldPacket const * Write() override
Optional< ObjectGuid > ChannelGUID
std::string Prefix
Addon Prefix.
void Initialize(ChatMsg chatType, Language language, WorldObject const *sender, WorldObject const *receiver, std::string_view message, uint32 achievementId=0, std::string_view channelName="", LocaleConstant locale=DEFAULT_LOCALE, std::string_view addonPrefix="")
Optional< uint32 > EncounterEventID
Optional< uint32 > BroadcastTextID
WorldPacket const * Write() override
void SetReceiver(WorldObject const *receiver, LocaleConstant locale)
void SetSender(WorldObject const *sender, LocaleConstant locale)
std::string _Channel
Channel Name.
WorldPacket const * Write() override
WorldPacket const * Write() override
std::vector< int32 > SpellVisualKitIDs
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
OpcodeClient GetOpcode() const
Definition Packet.h:68
WorldPacket _worldPacket
Definition Packet.h:43
uint32 GetVirtualRealmAddress()
Definition World.cpp:3526
ByteBuffer & operator>>(ByteBuffer &data, ChatAddonMessageParams &params)
DataWriter< Container > Data(Container const &value)
DataWriter< Container > Data(Container const &value)
OptionalInitWriter< T > OptionalInit(Optional< T > const &value)