From 99f565e8f2dcc58dfd0351d49ca42b022639488a Mon Sep 17 00:00:00 2001 From: sapier Date: Tue, 20 May 2014 19:04:57 +0200 Subject: [PATCH] Add support for directly starting a world by name from command line --- src/main.cpp | 59 +++++++++++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 52000dd1..4c6972b7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -829,7 +829,7 @@ int main(int argc, char *argv[]) /* Low-level initialization */ - + // Quiet mode, print errors only if (cmd_args.getFlag("quiet")) { log_remove_output(&main_stderr_log_out); @@ -1027,7 +1027,7 @@ int main(int argc, char *argv[]) commanded_world.substr(commanded_world.size() - worldmt.size()) == worldmt) { dstream << _("Supplied world.mt file - stripping it off.") << std::endl; - commanded_world = commanded_world.substr(0, + commanded_world = commanded_world.substr(0, commanded_world.size() - worldmt.size()); } } @@ -1208,7 +1208,7 @@ int main(int argc, char *argv[]) if (cmd_args.exists("migrate")) { std::string migrate_to = cmd_args.get("migrate"); Settings world_mt; - bool success = world_mt.readConfigFile((world_path + DIR_DELIM + bool success = world_mt.readConfigFile((world_path + DIR_DELIM + "world.mt").c_str()); if (!success) { errorstream << "Cannot read world.mt" << std::endl; @@ -1237,7 +1237,7 @@ int main(int argc, char *argv[]) new_db = new Database_Redis(&(ServerMap&)server.getMap(), world_path); #endif else { - errorstream << "Migration to " << migrate_to + errorstream << "Migration to " << migrate_to << " is not supported" << std::endl; return 1; } @@ -1429,16 +1429,16 @@ int main(int argc, char *argv[]) ELL_ERROR, ELL_WARNING, ELL_INFORMATION, -#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 8) +#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 8) ELL_INFORMATION #else ELL_DEBUG #endif }; - + ILogger* irr_logger = device->getLogger(); irr_logger->setLogLevel(irr_log_level[loglevel]); - + porting::initIrrlicht(device); /* @@ -1633,15 +1633,14 @@ int main(int argc, char *argv[]) std::vector worldspecs = getAvailableWorlds(); // If a world was commanded, append and select it - if (commanded_world != "") { - - std::string gameid = getWorldGameId(commanded_world, true); - std::string name = _("[--world parameter]"); - if (gameid == "") { - gameid = g_settings->get("default_game"); - name += " [new]"; + if(commanded_world != "") { + worldspec.gameid = getWorldGameId(commanded_world, true); + worldspec.name = _("[--world parameter]"); + if(worldspec.gameid == "") { + worldspec.gameid = g_settings->get("default_game"); + worldspec.name += " [new]"; } - //TODO find within worldspecs and set config + worldspec.path = commanded_world; } if (skip_main_menu == false) { @@ -1695,11 +1694,6 @@ int main(int argc, char *argv[]) // Save settings g_settings->set("name", playername); - if ((menudata.selected_world >= 0) && - (menudata.selected_world < (int)worldspecs.size())) - g_settings->set("selected_world_path", - worldspecs[menudata.selected_world].path); - // Break out of menu-game loop to shut down cleanly if (device->run() == false || kill == true) break; @@ -1724,22 +1718,35 @@ int main(int argc, char *argv[]) ServerList::insert(server); } - // Set world path to selected one - if ((menudata.selected_world >= 0) && - (menudata.selected_world < (int)worldspecs.size())) { + if ((!skip_main_menu) && + (menudata.selected_world >= 0) && + (menudata.selected_world < (int)worldspecs.size())) { + g_settings->set("selected_world_path", + worldspecs[menudata.selected_world].path); worldspec = worldspecs[menudata.selected_world]; - infostream<<"Selected world: "<