src/openttd.c
branchcustombridgeheads
changeset 5648 1608018c5ff2
parent 5643 3778051e8095
--- a/src/openttd.c	Wed Jan 03 20:00:29 2007 +0000
+++ b/src/openttd.c	Thu Jan 11 13:16:26 2007 +0000
@@ -158,14 +158,14 @@
 		"  -g [savegame]       = Start new/save game immediately\n"
 		"  -G seed             = Set random seed\n"
 		"  -n [ip:port#player] = Start networkgame\n"
-		"  -D                  = Start dedicated server\n"
+		"  -D [ip][:port]      = Start dedicated server\n"
 #if !defined(__MORPHOS__) && !defined(__AMIGA__) && !defined(WIN32)
 		"  -f                  = Fork into the background (dedicated only)\n"
 #endif
 		"  -i                  = Force to use the DOS palette\n"
 		"                          (use this if you see a lot of pink)\n"
 		"  -c config_file      = Use 'config_file' instead of 'openttd.cfg'\n"
-		"\n",
+		"  -x                  = Do not automatically save to config file on exit\n",
 		lastof(buf)
 	);
 
@@ -333,7 +333,10 @@
 	uint generation_seed = GENERATE_NEW_SEED;
 	bool dedicated = false;
 	bool network   = false;
+	bool save_config = true;
 	char *network_conn = NULL;
+	char *dedicated_host = NULL;
+	uint16 dedicated_port = 0;
 
 	musicdriver[0] = sounddriver[0] = videodriver[0] = 0;
 
@@ -347,7 +350,7 @@
 	//   a letter means: it accepts that param (e.g.: -h)
 	//   a ':' behind it means: it need a param (e.g.: -m<driver>)
 	//   a '::' behind it means: it can optional have a param (e.g.: -d<debug>)
-	optformat = "m:s:v:hDn::eit:d::r:g::G:c:"
+	optformat = "m:s:v:hD::n::eit:d::r:g::G:c:x"
 #if !defined(__MORPHOS__) && !defined(__AMIGA__) && !defined(WIN32)
 		"f"
 #endif
@@ -364,6 +367,16 @@
 			strcpy(sounddriver, "null");
 			strcpy(videodriver, "dedicated");
 			dedicated = true;
+			if (mgo.opt != NULL)
+			{
+				/* Use the existing method for parsing (openttd -n).
+				 * However, we do ignore the #player part. */
+				const char *temp = NULL;
+				const char *port = NULL;
+				ParseConnectionString(&temp, &port, mgo.opt);
+				if (*mgo.opt != '\0') dedicated_host = mgo.opt;
+				if (port != NULL) dedicated_port = atoi(port);
+			}
 			break;
 		case 'f': _dedicated_forks = true; break;
 		case 'n':
@@ -390,6 +403,7 @@
 			break;
 		case 'G': generation_seed = atoi(mgo.opt); break;
 		case 'c': _config_file = strdup(mgo.opt); break;
+		case 'x': save_config = false; break;
 		case -2:
 		case 'h':
 			showhelp();
@@ -418,6 +432,8 @@
 	if (startyear != INVALID_YEAR) _patches_newgame.starting_year = startyear;
 	if (generation_seed != GENERATE_NEW_SEED) _patches_newgame.generation_seed = generation_seed;
 
+	if (dedicated_host) snprintf(_network_server_bind_ip_host, NETWORK_HOSTNAME_LENGTH, "%s", dedicated_host);
+	if (dedicated_port) _network_server_port = dedicated_port;
 	if (_dedicated_forks && !dedicated) _dedicated_forks = false;
 
 	// enumerate language files
@@ -523,8 +539,11 @@
 	_music_driver->stop();
 	_sound_driver->stop();
 
-	SaveToConfig();
-	SaveToHighScore();
+	/* only save config if we have to */
+	if (save_config) {
+		SaveToConfig();
+		SaveToHighScore();
+	}
 
 	// uninitialize airport state machines
 	UnInitializeAirports();
@@ -727,10 +746,10 @@
 		if (_networking) {
 			if (_network_server && (new_mode == SM_LOAD || new_mode == SM_NEWGAME)) {
 				NetworkReboot();
-				NetworkUDPClose();
+				NetworkUDPStop();
 			} else {
 				NetworkDisconnect();
-				NetworkUDPClose();
+				NetworkUDPStop();
 			}
 		}