forked from Mirrorlandia_minetest/minetest
Add support for directly starting a world by name from command line
This commit is contained in:
parent
04fbf47744
commit
99f565e8f2
59
src/main.cpp
59
src/main.cpp
@ -829,7 +829,7 @@ int main(int argc, char *argv[])
|
|||||||
/*
|
/*
|
||||||
Low-level initialization
|
Low-level initialization
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Quiet mode, print errors only
|
// Quiet mode, print errors only
|
||||||
if (cmd_args.getFlag("quiet")) {
|
if (cmd_args.getFlag("quiet")) {
|
||||||
log_remove_output(&main_stderr_log_out);
|
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())
|
commanded_world.substr(commanded_world.size() - worldmt.size())
|
||||||
== worldmt) {
|
== worldmt) {
|
||||||
dstream << _("Supplied world.mt file - stripping it off.") << std::endl;
|
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());
|
commanded_world.size() - worldmt.size());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1208,7 +1208,7 @@ int main(int argc, char *argv[])
|
|||||||
if (cmd_args.exists("migrate")) {
|
if (cmd_args.exists("migrate")) {
|
||||||
std::string migrate_to = cmd_args.get("migrate");
|
std::string migrate_to = cmd_args.get("migrate");
|
||||||
Settings world_mt;
|
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());
|
+ "world.mt").c_str());
|
||||||
if (!success) {
|
if (!success) {
|
||||||
errorstream << "Cannot read world.mt" << std::endl;
|
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);
|
new_db = new Database_Redis(&(ServerMap&)server.getMap(), world_path);
|
||||||
#endif
|
#endif
|
||||||
else {
|
else {
|
||||||
errorstream << "Migration to " << migrate_to
|
errorstream << "Migration to " << migrate_to
|
||||||
<< " is not supported" << std::endl;
|
<< " is not supported" << std::endl;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -1429,16 +1429,16 @@ int main(int argc, char *argv[])
|
|||||||
ELL_ERROR,
|
ELL_ERROR,
|
||||||
ELL_WARNING,
|
ELL_WARNING,
|
||||||
ELL_INFORMATION,
|
ELL_INFORMATION,
|
||||||
#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 8)
|
#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 8)
|
||||||
ELL_INFORMATION
|
ELL_INFORMATION
|
||||||
#else
|
#else
|
||||||
ELL_DEBUG
|
ELL_DEBUG
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
ILogger* irr_logger = device->getLogger();
|
ILogger* irr_logger = device->getLogger();
|
||||||
irr_logger->setLogLevel(irr_log_level[loglevel]);
|
irr_logger->setLogLevel(irr_log_level[loglevel]);
|
||||||
|
|
||||||
porting::initIrrlicht(device);
|
porting::initIrrlicht(device);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1633,15 +1633,14 @@ int main(int argc, char *argv[])
|
|||||||
std::vector<WorldSpec> worldspecs = getAvailableWorlds();
|
std::vector<WorldSpec> worldspecs = getAvailableWorlds();
|
||||||
|
|
||||||
// If a world was commanded, append and select it
|
// If a world was commanded, append and select it
|
||||||
if (commanded_world != "") {
|
if(commanded_world != "") {
|
||||||
|
worldspec.gameid = getWorldGameId(commanded_world, true);
|
||||||
std::string gameid = getWorldGameId(commanded_world, true);
|
worldspec.name = _("[--world parameter]");
|
||||||
std::string name = _("[--world parameter]");
|
if(worldspec.gameid == "") {
|
||||||
if (gameid == "") {
|
worldspec.gameid = g_settings->get("default_game");
|
||||||
gameid = g_settings->get("default_game");
|
worldspec.name += " [new]";
|
||||||
name += " [new]";
|
|
||||||
}
|
}
|
||||||
//TODO find within worldspecs and set config
|
worldspec.path = commanded_world;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (skip_main_menu == false) {
|
if (skip_main_menu == false) {
|
||||||
@ -1695,11 +1694,6 @@ int main(int argc, char *argv[])
|
|||||||
// Save settings
|
// Save settings
|
||||||
g_settings->set("name", playername);
|
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
|
// Break out of menu-game loop to shut down cleanly
|
||||||
if (device->run() == false || kill == true)
|
if (device->run() == false || kill == true)
|
||||||
break;
|
break;
|
||||||
@ -1724,22 +1718,35 @@ int main(int argc, char *argv[])
|
|||||||
ServerList::insert(server);
|
ServerList::insert(server);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set world path to selected one
|
if ((!skip_main_menu) &&
|
||||||
if ((menudata.selected_world >= 0) &&
|
(menudata.selected_world >= 0) &&
|
||||||
(menudata.selected_world < (int)worldspecs.size())) {
|
(menudata.selected_world < (int)worldspecs.size())) {
|
||||||
|
g_settings->set("selected_world_path",
|
||||||
|
worldspecs[menudata.selected_world].path);
|
||||||
worldspec = worldspecs[menudata.selected_world];
|
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 local game
|
||||||
if (current_address == "") {
|
if (current_address == "") {
|
||||||
if (menudata.selected_world == -1) {
|
if (worldspec.path == "") {
|
||||||
error_message = wgettext("No world selected and no address "
|
error_message = wgettext("No world selected and no address "
|
||||||
"provided. Nothing to do.");
|
"provided. Nothing to do.");
|
||||||
errorstream << wide_to_narrow(error_message) << std::endl;
|
errorstream << wide_to_narrow(error_message) << std::endl;
|
||||||
continue;
|
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
|
// Load gamespec for required game
|
||||||
gamespec = findWorldSubgame(worldspec.path);
|
gamespec = findWorldSubgame(worldspec.path);
|
||||||
if (!gamespec.isValid() && !commanded_gamespec.isValid()) {
|
if (!gamespec.isValid() && !commanded_gamespec.isValid()) {
|
||||||
|
Loading…
Reference in New Issue
Block a user