diff options
author | Heaven31415 <heaven31415@gmail.com> | 2019-02-16 13:29:22 +0100 |
---|---|---|
committer | Giacomo Pozzoni <giacomopoz@gmail.com> | 2019-02-16 13:29:22 +0100 |
commit | 9db50f05cb7d225f3bd7b2a209509a072f915fd3 (patch) | |
tree | 24d82847778ac1723c2ad74476ca2e2d80bc9b92 | |
parent | f0f4d0280daf81a841c30332f608f7acdfb1f374 (diff) |
Refactor SendSysMessage, SendGlobalSysMessage, SendGlobalGMSysMessage (#23029)
-rw-r--r-- | src/server/game/Chat/Chat.cpp | 57 |
1 files changed, 14 insertions, 43 deletions
diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp index 7b90de1f38b..10e9a6f6cfe 100644 --- a/src/server/game/Chat/Chat.cpp +++ b/src/server/game/Chat/Chat.cpp @@ -168,75 +168,46 @@ bool ChatHandler::hasStringAbbr(char const* name, char const* part) 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; + std::string msg{ str }; - if (escapeCharacters && strchr(str, '|')) + // Replace every "|" with "||" in msg + if (escapeCharacters && msg.find('|') != std::string::npos) { - size_t startPos = 0; - std::ostringstream o; - while (char const* 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); - } + Tokenizer tokens{msg, '|'}; + std::ostringstream stream; + for (size_t i = 0; i < tokens.size() - 1; ++i) + stream << tokens[i] << "||"; + stream << tokens[tokens.size() - 1]; - pos = buf; + msg = stream.str(); + } - while (char* line = LineFromMessage(pos)) + WorldPacket data; + for (const auto& line : Tokenizer{msg, '\n'}) { BuildChatPacket(data, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, line); m_session->SendPacket(&data); } - - free(buf); } void ChatHandler::SendGlobalSysMessage(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)) + for (const auto& line : Tokenizer{str, '\n'}) { BuildChatPacket(data, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, line); sWorld->SendGlobalMessage(&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)) + for (const auto& line : Tokenizer{str, '\n'}) { BuildChatPacket(data, CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, line); sWorld->SendGlobalGMMessage(&data); } - - free(buf); } void ChatHandler::SendSysMessage(uint32 entry) |