aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsapier <Sapier at GMX dot net>2014-05-20 19:04:57 +0200
committersapier <Sapier at GMX dot net>2014-06-19 14:34:43 +0200
commit99f565e8f2dcc58dfd0351d49ca42b022639488a (patch)
tree2d53e4480eaf8829871679105986ce618f314018
parent04fbf47744a71d885aaeaf356f2529628d74555b (diff)
downloadminetest-99f565e8f2dcc58dfd0351d49ca42b022639488a.tar.gz
minetest-99f565e8f2dcc58dfd0351d49ca42b022639488a.tar.bz2
minetest-99f565e8f2dcc58dfd0351d49ca42b022639488a.zip
Add support for directly starting a world by name from command line
-rw-r--r--src/main.cpp59
1 files changed, 33 insertions, 26 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 52000dd1f..4c6972b76 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<WorldSpec> 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: "<<worldspec.name
- <<" ["<<worldspec.path<<"]"<<std::endl;
+
}
+ infostream <<"Selected world: " << worldspec.name
+ << " ["<<worldspec.path<<"]" <<std::endl;
+
+
// If local game
if (current_address == "") {
- if (menudata.selected_world == -1) {
+ if (worldspec.path == "") {
error_message = wgettext("No world selected and no address "
"provided. Nothing to do.");
errorstream << wide_to_narrow(error_message) << std::endl;
continue;
}
+
+ if (!fs::PathExists(worldspec.path)) {
+ error_message = wgettext("Provided world path doesn't exist: ")
+ + narrow_to_wide(worldspec.path);
+ errorstream << wide_to_narrow(error_message) << std::endl;
+ continue;
+ }
+
// Load gamespec for required game
gamespec = findWorldSubgame(worldspec.path);
if (!gamespec.isValid() && !commanded_gamespec.isValid()) {