aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Motd/ServerMotd.cpp
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2017-03-20 23:55:57 -0300
committerariel- <ariel-@users.noreply.github.com>2017-03-21 00:51:13 -0300
commit8be85a54088855b64738e1f1e2bd96b28ccad6b4 (patch)
treefc05e3af19a03af2b25af0bfdf117c2ca73c85cb /src/server/game/Motd/ServerMotd.cpp
parent2a462e93093d177a0e0bedf3e94ac2cf4e66a3c3 (diff)
Core/Misc: cache server MOTD and properly format it for RA and when issuing .server motd
Diffstat (limited to 'src/server/game/Motd/ServerMotd.cpp')
-rw-r--r--src/server/game/Motd/ServerMotd.cpp69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/server/game/Motd/ServerMotd.cpp b/src/server/game/Motd/ServerMotd.cpp
new file mode 100644
index 00000000000..dc7746a5210
--- /dev/null
+++ b/src/server/game/Motd/ServerMotd.cpp
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2008-2017 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "Common.h"
+#include "WorldPacket.h"
+#include "ServerMotd.h"
+
+#include "ScriptMgr.h"
+
+namespace
+{
+ WorldPacket MotdPacket;
+ std::string FormattedMotd;
+
+ std::string const EndLine = []() -> std::string
+ {
+ std::ostringstream oss;
+ oss << std::endl;
+ return oss.str();
+ }();
+}
+
+void Motd::SetMotd(std::string motd)
+{
+ // scripts may change motd
+ sScriptMgr->OnMotdChange(motd);
+
+ WorldPacket data(SMSG_MOTD); // new in 2.0.1
+
+ Tokenizer motdTokens(motd, '@');
+ data << uint32(motdTokens.size()); // line count
+
+ for (Tokenizer::const_reference token : motdTokens)
+ data << token;
+
+ MotdPacket = data;
+
+ if (!motdTokens.size())
+ return;
+
+ std::ostringstream oss;
+ std::copy(motdTokens.begin(), motdTokens.end() - 1, std::ostream_iterator<char const*>(oss, EndLine.c_str()));
+ oss << *(motdTokens.end() - 1); // copy back element
+ FormattedMotd = oss.str();
+}
+
+char const* Motd::GetMotd()
+{
+ return FormattedMotd.c_str();
+}
+
+WorldPacket const* Motd::GetMotdPacket()
+{
+ return &MotdPacket;
+}