1919#include " AccountMgr.h"
2020#include " CellImpl.h"
2121#include " CharacterCache.h"
22+ #include " ChatPackets.h"
2223#include " GridNotifiersImpl.h"
2324#include " Language.h"
2425#include " ObjectAccessor.h"
@@ -114,31 +115,31 @@ void ChatHandler::SendSysMessage(std::string_view str, bool escapeCharacters)
114115 msg = stream.str ();
115116 }
116117
117- WorldPacket data ;
118+ WorldPackets::Chat::Chat packet ;
118119 for (std::string_view line : Trinity::Tokenize (str, ' \n ' , true ))
119120 {
120- BuildChatPacket (data, CHAT_MSG_SYSTEM , LANG_UNIVERSAL , nullptr , nullptr , line);
121- m_session->SendPacket (&data );
121+ packet. Initialize ( CHAT_MSG_SYSTEM , LANG_UNIVERSAL , nullptr , nullptr , line);
122+ m_session->SendPacket (packet. Write () );
122123 }
123124}
124125
125126void ChatHandler::SendGlobalSysMessage (const char *str)
126127{
127- WorldPacket data ;
128+ WorldPackets::Chat::Chat packet ;
128129 for (std::string_view line : Trinity::Tokenize (str, ' \n ' , true ))
129130 {
130- BuildChatPacket (data, CHAT_MSG_SYSTEM , LANG_UNIVERSAL , nullptr , nullptr , line);
131- sWorld ->SendGlobalMessage (&data );
131+ packet. Initialize ( CHAT_MSG_SYSTEM , LANG_UNIVERSAL , nullptr , nullptr , line);
132+ sWorld ->SendGlobalMessage (packet. Write () );
132133 }
133134}
134135
135136void ChatHandler::SendGlobalGMSysMessage (const char *str)
136137{
137- WorldPacket data ;
138+ WorldPackets::Chat::Chat packet ;
138139 for (std::string_view line : Trinity::Tokenize (str, ' \n ' , true ))
139140 {
140- BuildChatPacket (data, CHAT_MSG_SYSTEM , LANG_UNIVERSAL , nullptr , nullptr , line);
141- sWorld ->SendGlobalGMMessage (&data );
141+ packet. Initialize ( CHAT_MSG_SYSTEM , LANG_UNIVERSAL , nullptr , nullptr , line);
142+ sWorld ->SendGlobalGMMessage (packet. Write () );
142143 }
143144}
144145
@@ -190,115 +191,6 @@ bool ChatHandler::ParseCommands(std::string_view text)
190191 return _ParseCommands (text.substr (1 ));
191192}
192193
193- size_t ChatHandler::BuildChatPacket (WorldPacket& data, ChatMsg chatType, Language language, ObjectGuid senderGUID, ObjectGuid receiverGUID, std::string_view message, uint8 chatTag,
194- std::string const & senderName /* = ""*/ , std::string const & receiverName /* = ""*/ ,
195- uint32 achievementId /* = 0*/ , bool gmMessage /* = false*/ , std::string const & channelName /* = ""*/ )
196- {
197- size_t receiverGUIDPos = 0 ;
198- data.Initialize (!gmMessage ? SMSG_MESSAGECHAT : SMSG_GM_MESSAGECHAT );
199- data << uint8 (chatType);
200- data << int32 (language);
201- data << senderGUID;
202- data << uint32 (0 ); // some flags
203- switch (chatType)
204- {
205- case CHAT_MSG_MONSTER_SAY :
206- case CHAT_MSG_MONSTER_PARTY :
207- case CHAT_MSG_MONSTER_YELL :
208- case CHAT_MSG_MONSTER_WHISPER :
209- case CHAT_MSG_MONSTER_EMOTE :
210- case CHAT_MSG_RAID_BOSS_EMOTE :
211- case CHAT_MSG_RAID_BOSS_WHISPER :
212- case CHAT_MSG_BATTLENET :
213- data << uint32 (senderName.length () + 1 );
214- data << senderName;
215- receiverGUIDPos = data.wpos ();
216- data << receiverGUID;
217- if (!receiverGUID.IsEmpty () && !receiverGUID.IsPlayer () && !receiverGUID.IsPet ())
218- {
219- data << uint32 (receiverName.length () + 1 );
220- data << receiverName;
221- }
222- break ;
223- case CHAT_MSG_WHISPER_FOREIGN :
224- data << uint32 (senderName.length () + 1 );
225- data << senderName;
226- receiverGUIDPos = data.wpos ();
227- data << receiverGUID;
228- break ;
229- case CHAT_MSG_BG_SYSTEM_NEUTRAL :
230- case CHAT_MSG_BG_SYSTEM_ALLIANCE :
231- case CHAT_MSG_BG_SYSTEM_HORDE :
232- receiverGUIDPos = data.wpos ();
233- data << receiverGUID;
234- if (!receiverGUID.IsEmpty () && !receiverGUID.IsPlayer ())
235- {
236- data << uint32 (receiverName.length () + 1 );
237- data << receiverName;
238- }
239- break ;
240- case CHAT_MSG_ACHIEVEMENT :
241- case CHAT_MSG_GUILD_ACHIEVEMENT :
242- receiverGUIDPos = data.wpos ();
243- data << receiverGUID;
244- break ;
245- default :
246- if (gmMessage)
247- {
248- data << uint32 (senderName.length () + 1 );
249- data << senderName;
250- }
251-
252- if (chatType == CHAT_MSG_CHANNEL )
253- {
254- ASSERT (channelName.length () > 0 );
255- data << channelName;
256- }
257-
258- receiverGUIDPos = data.wpos ();
259- data << receiverGUID;
260- break ;
261- }
262-
263- data << uint32 (message.length () + 1 );
264- data << message;
265- data << uint8 (chatTag);
266-
267- if (chatType == CHAT_MSG_ACHIEVEMENT || chatType == CHAT_MSG_GUILD_ACHIEVEMENT )
268- data << uint32 (achievementId);
269-
270- return receiverGUIDPos;
271- }
272-
273- size_t ChatHandler::BuildChatPacket (WorldPacket& data, ChatMsg chatType, Language language, WorldObject const * sender, WorldObject const * receiver, std::string_view message,
274- uint32 achievementId /* = 0*/ , std::string const & channelName /* = ""*/ , LocaleConstant locale /* = DEFAULT_LOCALE*/ )
275- {
276- ObjectGuid senderGUID;
277- std::string senderName = " " ;
278- uint8 chatTag = 0 ;
279- bool gmMessage = false ;
280- ObjectGuid receiverGUID;
281- std::string receiverName = " " ;
282- if (sender)
283- {
284- senderGUID = sender->GetGUID ();
285- senderName = sender->GetNameForLocaleIdx (locale);
286- if (Player const * playerSender = sender->ToPlayer ())
287- {
288- chatTag = playerSender->GetChatTag ();
289- gmMessage = playerSender->GetSession ()->HasPermission (rbac::RBAC_PERM_COMMAND_GM_CHAT );
290- }
291- }
292-
293- if (receiver)
294- {
295- receiverGUID = receiver->GetGUID ();
296- receiverName = receiver->GetNameForLocaleIdx (locale);
297- }
298-
299- return BuildChatPacket (data, chatType, language, senderGUID, receiverGUID, message, chatTag, senderName, receiverName, achievementId, gmMessage, channelName);
300- }
301-
302194Player* ChatHandler::getSelectedPlayer ()
303195{
304196 if (!m_session)
@@ -789,6 +681,8 @@ int CliHandler::GetSessionDbLocaleIndex() const
789681 return sObjectMgr ->GetDBCLocaleIndex ();
790682}
791683
684+ std::string_view const AddonChannelCommandHandler::PREFIX = " TrinityCore" ;
685+
792686bool AddonChannelCommandHandler::ParseCommands (std::string_view str)
793687{
794688 if (str.length () < 17 )
@@ -831,39 +725,36 @@ bool AddonChannelCommandHandler::ParseCommands(std::string_view str)
831725 }
832726}
833727
834- void AddonChannelCommandHandler::Send (std::string const & msg)
728+ void AddonChannelCommandHandler::Send (std::string_view msg)
835729{
836- WorldPacket data ;
837- ChatHandler::BuildChatPacket (data, CHAT_MSG_WHISPER , LANG_ADDON , GetSession ()->GetPlayer (), GetSession ()->GetPlayer (), msg);
838- GetSession ()->SendPacket (&data );
730+ WorldPackets::Chat::Chat chat ;
731+ chat. Initialize ( CHAT_MSG_WHISPER , LANG_ADDON , GetSession ()->GetPlayer (), GetSession ()->GetPlayer (), msg, 0 , " " , LOCALE_enUS, PREFIX );
732+ GetSession ()->SendPacket (chat. Write () );
839733}
840734
841735void AddonChannelCommandHandler::SendAck () // a Command acknowledged, no body
842736{
843737 ASSERT (echo);
844- char ack[18 ] = " TrinityCore\t a" ;
845- memcpy (ack+13 , echo, 4 );
846- ack[17 ] = ' \0 ' ;
847- Send (ack);
738+ char ack[5 ] = " a" ;
739+ memcpy (ack + 1 , echo, 4 );
740+ Send (std::string_view (ack, 5 ));
848741 hadAck = true ;
849742}
850743
851744void AddonChannelCommandHandler::SendOK () // o Command OK, no body
852745{
853746 ASSERT (echo);
854- char ok[18 ] = " TrinityCore\t o" ;
855- memcpy (ok+13 , echo, 4 );
856- ok[17 ] = ' \0 ' ;
857- Send (ok);
747+ char ok[5 ] = " o" ;
748+ memcpy (ok + 1 , echo, 4 );
749+ Send (std::string_view (ok, 5 ));
858750}
859751
860752void AddonChannelCommandHandler::SendFailed () // f Command failed, no body
861753{
862754 ASSERT (echo);
863- char fail[18 ] = " TrinityCore\t f" ;
864- memcpy (fail + 13 , echo, 4 );
865- fail[17 ] = ' \0 ' ;
866- Send (fail);
755+ char fail[5 ] = " f" ;
756+ memcpy (fail + 1 , echo, 4 );
757+ Send (std::string_view (fail, 5 ));
867758}
868759
869760// m Command message, message in body
@@ -873,7 +764,7 @@ void AddonChannelCommandHandler::SendSysMessage(std::string_view str, bool escap
873764 if (!hadAck)
874765 SendAck ();
875766
876- std::string msg = " TrinityCore \t m " ;
767+ std::string msg = " m " ;
877768 msg.append (echo, 4 );
878769 std::string body (str);
879770 if (escapeCharacters)
0 commit comments