mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-11-04 09:15:29 +01:00 
			
		
		
		
	Allow directly supplying world as a parameter, including world.mt
This commit is contained in:
		
							
								
								
									
										25
									
								
								src/main.cpp
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								src/main.cpp
									
									
									
									
									
								
							@@ -806,7 +806,7 @@ int main(int argc, char *argv[])
 | 
			
		||||
	
 | 
			
		||||
	bool ret = cmd_args.parseCommandLine(argc, argv, allowed_options);
 | 
			
		||||
 | 
			
		||||
	if(ret == false || cmd_args.getFlag("help"))
 | 
			
		||||
	if(ret == false || cmd_args.getFlag("help") || cmd_args.exists("nonopt1"))
 | 
			
		||||
	{
 | 
			
		||||
		dstream<<"Allowed options:"<<std::endl;
 | 
			
		||||
		for(core::map<std::string, ValueSpec>::Iterator
 | 
			
		||||
@@ -979,9 +979,23 @@ int main(int argc, char *argv[])
 | 
			
		||||
		commanded_world = cmd_args.get("world");
 | 
			
		||||
	else if(cmd_args.exists("map-dir"))
 | 
			
		||||
		commanded_world = cmd_args.get("map-dir");
 | 
			
		||||
	else if(cmd_args.exists("nonopt0"))
 | 
			
		||||
		commanded_world = cmd_args.get("nonopt0");
 | 
			
		||||
	else if(g_settings->exists("map-dir"))
 | 
			
		||||
		commanded_world = g_settings->get("map-dir");
 | 
			
		||||
	
 | 
			
		||||
	// Strip world.mt from commanded_world
 | 
			
		||||
	{
 | 
			
		||||
		std::string worldmt = "world.mt";
 | 
			
		||||
		if(commanded_world.size() > worldmt.size() &&
 | 
			
		||||
				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.size()-worldmt.size());
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// Gamespec
 | 
			
		||||
	SubgameSpec commanded_gamespec;
 | 
			
		||||
	if(cmd_args.exists("gameid")){
 | 
			
		||||
@@ -1065,7 +1079,9 @@ int main(int argc, char *argv[])
 | 
			
		||||
	*/
 | 
			
		||||
	
 | 
			
		||||
	std::string address = g_settings->get("address");
 | 
			
		||||
	if(cmd_args.exists("address"))
 | 
			
		||||
	if(commanded_world != "")
 | 
			
		||||
		address = "";
 | 
			
		||||
	else if(cmd_args.exists("address"))
 | 
			
		||||
		address = cmd_args.get("address");
 | 
			
		||||
	else if(cmd_args.exists("world"))
 | 
			
		||||
		address = "";
 | 
			
		||||
@@ -1294,9 +1310,10 @@ int main(int argc, char *argv[])
 | 
			
		||||
					std::string gameid = getWorldGameId(commanded_world, true);
 | 
			
		||||
					if(gameid == "")
 | 
			
		||||
						gameid = g_settings->get("default_game");
 | 
			
		||||
					WorldSpec spec(commanded_world, "--world", gameid);
 | 
			
		||||
					WorldSpec spec(commanded_world, "[--world parameter]",
 | 
			
		||||
							gameid);
 | 
			
		||||
					worldspecs.push_back(spec);
 | 
			
		||||
					menudata.selected_world = menudata.worlds.size()-1;
 | 
			
		||||
					menudata.selected_world = worldspecs.size()-1;
 | 
			
		||||
				}
 | 
			
		||||
				// Copy worldspecs to menu
 | 
			
		||||
				menudata.worlds = worldspecs;
 | 
			
		||||
 
 | 
			
		||||
@@ -330,6 +330,7 @@ public:
 | 
			
		||||
	bool parseCommandLine(int argc, char *argv[],
 | 
			
		||||
			core::map<std::string, ValueSpec> &allowed_options)
 | 
			
		||||
	{
 | 
			
		||||
		int nonopt_index = 0;
 | 
			
		||||
		int i=1;
 | 
			
		||||
		for(;;)
 | 
			
		||||
		{
 | 
			
		||||
@@ -338,6 +339,15 @@ public:
 | 
			
		||||
			std::string argname = argv[i];
 | 
			
		||||
			if(argname.substr(0, 2) != "--")
 | 
			
		||||
			{
 | 
			
		||||
				// If option doesn't start with -, read it in as nonoptX
 | 
			
		||||
				if(argname[0] != '-'){
 | 
			
		||||
					std::string name = "nonopt";
 | 
			
		||||
					name += itos(nonopt_index);
 | 
			
		||||
					set(name, argname);
 | 
			
		||||
					nonopt_index++;
 | 
			
		||||
					i++;
 | 
			
		||||
					continue;
 | 
			
		||||
				}
 | 
			
		||||
				errorstream<<"Invalid command-line parameter \""
 | 
			
		||||
						<<argname<<"\": --<option> expected."<<std::endl;
 | 
			
		||||
				return false;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user