aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeaven31415 <heaven31415@gmail.com>2019-02-16 13:29:22 +0100
committerGiacomo Pozzoni <giacomopoz@gmail.com>2019-02-16 13:29:22 +0100
commit9db50f05cb7d225f3bd7b2a209509a072f915fd3 (patch)
tree24d82847778ac1723c2ad74476ca2e2d80bc9b92
parentf0f4d0280daf81a841c30332f608f7acdfb1f374 (diff)
Refactor SendSysMessage, SendGlobalSysMessage, SendGlobalGMSysMessage (#23029)
-rw-r--r--src/server/game/Chat/Chat.cpp57
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)