diff options
| author | ariel- <ariel-@users.noreply.github.com> | 2017-03-20 23:55:57 -0300 |
|---|---|---|
| committer | ariel- <ariel-@users.noreply.github.com> | 2017-03-21 00:51:13 -0300 |
| commit | 8be85a54088855b64738e1f1e2bd96b28ccad6b4 (patch) | |
| tree | fc05e3af19a03af2b25af0bfdf117c2ca73c85cb /src/server/game/Motd/ServerMotd.cpp | |
| parent | 2a462e93093d177a0e0bedf3e94ac2cf4e66a3c3 (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.cpp | 69 |
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; +} |
