diff options
-rw-r--r-- | src/defaultsettings.cpp | 1 | ||||
-rw-r--r-- | src/server.cpp | 9 | ||||
-rw-r--r-- | src/servercommand.cpp | 3 | ||||
-rw-r--r-- | src/servercommand.h | 5 | ||||
-rw-r--r-- | src/strfnd.h | 50 |
5 files changed, 65 insertions, 3 deletions
diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 947892d12..c1104eff0 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -77,6 +77,7 @@ void set_default_settings() g_settings.setDefault("screenshot_path", "."); // Server stuff + g_settings.setDefault("motd", "<Message of the day (motd) not set>"); g_settings.setDefault("enable_experimental", "false"); g_settings.setDefault("creative_mode", "false"); g_settings.setDefault("enable_damage", "true"); diff --git a/src/server.cpp b/src/server.cpp index b0c087d09..0b312fbc3 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -3196,9 +3196,14 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) line += L"Server: "; message = message.substr(commandprefix.size()); + + WStrfnd f1(message); + f1.next(L" "); + std::wstring paramstring = f1.next(L""); ServerCommandContext *ctx = new ServerCommandContext( str_split(message, L' '), + paramstring, this, &m_env, player, @@ -4018,7 +4023,9 @@ std::wstring Server::getStatusString() } os<<L"}"; if(((ServerMap*)(&m_env.getMap()))->isSavingEnabled() == false) - os<<" WARNING: Map saving is disabled."<<std::endl; + os<<std::endl<<" WARNING: Map saving is disabled."; + if(g_settings.get("motd") != "") + os<<std::endl<<narrow_to_wide(g_settings.get("motd")); return os.str(); } diff --git a/src/servercommand.cpp b/src/servercommand.cpp index 333e29084..a2001b0c5 100644 --- a/src/servercommand.cpp +++ b/src/servercommand.cpp @@ -142,7 +142,8 @@ void cmd_setting(std::wostringstream &os, return; } - std::string confline = wide_to_narrow(ctx->parms[1] + L" = " + ctx->parms[2]); + std::string confline = wide_to_narrow( + ctx->parms[1] + L" = " + ctx->paramstring); g_settings.parseConfigLine(confline); os<< L"-!- Setting changed."; } diff --git a/src/servercommand.h b/src/servercommand.h index 9013bc2a6..cee4976b1 100644 --- a/src/servercommand.h +++ b/src/servercommand.h @@ -29,6 +29,7 @@ struct ServerCommandContext { std::vector<std::wstring> parms; + std::wstring paramstring; Server* server; ServerEnvironment *env; Player* player; @@ -39,11 +40,13 @@ struct ServerCommandContext ServerCommandContext( std::vector<std::wstring> parms, + std::wstring paramstring, Server* server, ServerEnvironment *env, Player* player, u64 privs) - : parms(parms), server(server), env(env), player(player), privs(privs) + : parms(parms), paramstring(paramstring), + server(server), env(env), player(player), privs(privs) { } diff --git a/src/strfnd.h b/src/strfnd.h index 2be92d43b..e3d380e37 100644 --- a/src/strfnd.h +++ b/src/strfnd.h @@ -74,6 +74,56 @@ public: } }; +class WStrfnd{ + std::wstring tek; + unsigned int p; +public: + void start(std::wstring niinq){ + tek = niinq; + p=0; + } + unsigned int where(){ + return p; + } + void to(unsigned int i){ + p = i; + } + std::wstring what(){ + return tek; + } + std::wstring next(std::wstring plop){ + //std::cout<<"tek=\""<<tek<<"\" plop=\""<<plop<<"\""<<std::endl; + size_t n; + std::wstring palautus; + if (p < tek.size()) + { + //std::cout<<"\tp<tek.size()"<<std::endl; + if ((n = tek.find(plop, p)) == std::wstring::npos || plop == L"") + { + //std::cout<<"\t\tn == string::npos || plop == \"\""<<std::endl; + n = tek.size(); + } + else + { + //std::cout<<"\t\tn != string::npos"<<std::endl; + } + palautus = tek.substr(p, n-p); + p = n + plop.length(); + } + //else + //std::cout<<"\tp>=tek.size()"<<std::endl; + //std::cout<<"palautus=\""<<palautus<<"\""<<std::endl; + return palautus; + } + bool atend(){ + if(p>=tek.size()) return true; + return false; + } + WStrfnd(std::wstring s){ + start(s); + } +}; + inline std::string trim(const std::string &s) { std::string str = s; |