size_t ChatHandler::BuildChatPacket(WorldPacket& data, ChatMsg chatType, Language language, WorldObject const* sender, WorldObject const* receiver, std::string const& message, uint32 achievementId /*= 0*/, std::string const& channelName /*= ""*/, LocaleConstant locale /*= DEFAULT_LOCALE*/) { ObjectGuid senderGUID; std::string senderName = ""; uint8 chatTag = 0; bool gmMessage = false; ObjectGuid receiverGUID; std::string receiverName = ""; if (sender) { senderGUID = sender->GetGUID(); senderName = sender->GetNameForLocaleIdx(locale); if (Player const* playerSender = sender->ToPlayer()) { chatTag = playerSender->GetChatTag(); gmMessage = playerSender->GetSession()->HasPermission(rbac::RBAC_PERM_COMMAND_GM_CHAT); } } if (receiver) { receiverGUID = receiver->GetGUID(); receiverName = receiver->GetNameForLocaleIdx(locale); } return BuildChatPacket(data, chatType, language, senderGUID, receiverGUID, message, chatTag, senderName, receiverName, achievementId, gmMessage, channelName); }
void ChatHandler::SendSysMessage(const char *str) { WorldPacket data; // need copy to prevent corruption by strtok call in LineFromMessage original string char* buf = strdup(str); char* pos = buf; while (char* line = LineFromMessage(pos)) { BuildChatPacket(data, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, NULL, NULL, line); m_session->SendPacket(&data); } free(buf); }
void ChatHandler::SendGlobalGMSysMessage(const char *str) { // Chat output WorldPacket data; // need copy to prevent corruption by strtok call in LineFromMessage original string char* buf = strdup(str); char* pos = buf; while (char* line = LineFromMessage(pos)) { BuildChatPacket(data, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, line); sWorld->SendGlobalGMMessage(&data); } free(buf); }
void ChatHandler::SendSysMessage(const char *str, bool escapeCharacters) { WorldPacket data; // need copy to prevent corruption by strtok call in LineFromMessage original string char* buf; char* pos; if (escapeCharacters && strchr(str, '|')) { size_t startPos = 0; std::ostringstream o; while (const char* charPos = strchr(str + startPos, '|')) { o.write(str + startPos, charPos - str - startPos); o << "||"; startPos = charPos - str + 1; } o.write(str + startPos, strlen(str) - startPos); buf = strdup(o.str().c_str()); } else { buf = strdup(str); } pos = buf; while (char* line = LineFromMessage(pos)) { BuildChatPacket(data, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, NULL, NULL, line); m_session->SendPacket(&data); } free(buf); }