diff options
-rw-r--r-- | src/game.cpp | 5 | ||||
-rw-r--r-- | src/game.h | 3 | ||||
-rw-r--r-- | src/main.cpp | 5 | ||||
-rw-r--r-- | src/server.cpp | 10 | ||||
-rw-r--r-- | src/server.h | 13 | ||||
-rw-r--r-- | src/servercommand.cpp | 12 | ||||
-rw-r--r-- | src/servermain.cpp | 2 |
7 files changed, 36 insertions, 14 deletions
diff --git a/src/game.cpp b/src/game.cpp index 74b8e5029..6c0474ee7 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -715,7 +715,8 @@ void the_game( std::string password, std::string address, u16 port, - std::wstring &error_message + std::wstring &error_message, + std::string configpath ) { video::IVideoDriver* driver = device->getVideoDriver(); @@ -755,7 +756,7 @@ void the_game( if(address == ""){ draw_load_screen(L"Creating server...", driver, font); std::cout<<DTIME<<"Creating server"<<std::endl; - server = new Server(map_dir); + server = new Server(map_dir, configpath); server->start(port); } diff --git a/src/game.h b/src/game.h index eb289b8f2..95623316a 100644 --- a/src/game.h +++ b/src/game.h @@ -70,7 +70,8 @@ void the_game( std::string password, std::string address, u16 port, - std::wstring &error_message + std::wstring &error_message, + std::string configpath ); #endif diff --git a/src/main.cpp b/src/main.cpp index 9a9b22f87..3cc748954 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1302,7 +1302,7 @@ int main(int argc, char *argv[]) g_timegetter = new SimpleTimeGetter(); // Create server - Server server(map_dir.c_str()); + Server server(map_dir.c_str(), configpath); server.start(port); // Run server @@ -1641,7 +1641,8 @@ int main(int argc, char *argv[]) password, address, port, - error_message + error_message, + configpath ); } //try diff --git a/src/server.cpp b/src/server.cpp index 0b312fbc3..96e64b314 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -1058,7 +1058,8 @@ u32 PIChecksum(core::list<PlayerInfo> &l) */ Server::Server( - std::string mapsavedir + std::string mapsavedir, + std::string configpath ): m_env(new ServerMap(mapsavedir), this), m_con(PROTOCOL_ID, 512, CONNECTION_TIMEOUT, this), @@ -1069,6 +1070,7 @@ Server::Server( m_time_of_day_send_timer(0), m_uptime(0), m_mapsavedir(mapsavedir), + m_configpath(configpath), m_shutdown_requested(false), m_ignore_map_edit_events(false), m_ignore_map_edit_events_peer_id(0) @@ -3198,7 +3200,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) message = message.substr(commandprefix.size()); WStrfnd f1(message); - f1.next(L" "); + f1.next(L" "); // Skip over /#whatever std::wstring paramstring = f1.next(L""); ServerCommandContext *ctx = new ServerCommandContext( @@ -4023,9 +4025,9 @@ std::wstring Server::getStatusString() } os<<L"}"; if(((ServerMap*)(&m_env.getMap()))->isSavingEnabled() == false) - os<<std::endl<<" WARNING: Map saving is disabled."; + os<<std::endl<<L"# Server: "<<" WARNING: Map saving is disabled."; if(g_settings.get("motd") != "") - os<<std::endl<<narrow_to_wide(g_settings.get("motd")); + os<<std::endl<<L"# Server: "<<narrow_to_wide(g_settings.get("motd")); return os.str(); } diff --git a/src/server.h b/src/server.h index 1da004da5..c300d40e6 100644 --- a/src/server.h +++ b/src/server.h @@ -364,7 +364,8 @@ public: */ Server( - std::string mapsavedir + std::string mapsavedir, + std::string configpath ); ~Server(); void start(unsigned short port); @@ -443,6 +444,13 @@ public: dstream<<"WARNING: Auth not found for "<<name<<std::endl; } } + + // Saves g_settings to configpath given at initialization + void saveConfig() + { + if(m_configpath != "") + g_settings.updateConfigFile(m_configpath.c_str()); + } private: @@ -606,6 +614,9 @@ private: // Map directory std::string m_mapsavedir; + // Configuration path ("" = no configuration file) + std::string m_configpath; + bool m_shutdown_requested; /* diff --git a/src/servercommand.cpp b/src/servercommand.cpp index a2001b0c5..7d6d7bb73 100644 --- a/src/servercommand.cpp +++ b/src/servercommand.cpp @@ -142,10 +142,16 @@ void cmd_setting(std::wostringstream &os, return; } - std::string confline = wide_to_narrow( - ctx->parms[1] + L" = " + ctx->paramstring); + /*std::string confline = wide_to_narrow( + ctx->parms[1] + L" = " + ctx->params[2]);*/ + + std::string confline = wide_to_narrow(ctx->paramstring); + g_settings.parseConfigLine(confline); - os<< L"-!- Setting changed."; + + ctx->server->saveConfig(); + + os<< L"-!- Setting changed and configuration saved."; } void cmd_teleport(std::wostringstream &os, diff --git a/src/servermain.cpp b/src/servermain.cpp index 146c548c5..91fd1d3a5 100644 --- a/src/servermain.cpp +++ b/src/servermain.cpp @@ -323,7 +323,7 @@ int main(int argc, char *argv[]) map_dir = g_settings.get("map-dir"); // Create server - Server server(map_dir.c_str()); + Server server(map_dir.c_str(), configpath); server.start(port); // Run server |