(svn r1252) -Add: [Network] With 'set restart_game_date' you can set the date for in
authortruelight
Thu, 23 Dec 2004 17:37:26 +0000
changeset 785 e9ca2bcc9c8f
parent 784 f7081b6256f4
child 786 aa75e1682d39
(svn r1252) -Add: [Network] With 'set restart_game_date' you can set the date for in
which year the server must restart hisself. (0 = disabled, default value)
console_cmds.c
misc.c
network.h
network_server.c
network_server.h
settings.c
--- a/console_cmds.c	Thu Dec 23 17:12:30 2004 +0000
+++ b/console_cmds.c	Thu Dec 23 17:37:26 2004 +0000
@@ -837,6 +837,23 @@
 		return NULL;
 	}
 
+	// setting the server auto restart date
+	if (strcmp(argv[1],"restart_game_date") == 0) {
+		if (!_network_server) {
+			IConsolePrintF(_iconsole_color_error, "You are not the server");
+			return NULL;
+		}
+		if (argc == 3) {
+			_network_restart_game_date = atoi(argv[2]);
+			IConsolePrintF(_iconsole_color_warning, "Restart Game Date changed to '%d'", _network_restart_game_date);
+		} else {
+			IConsolePrintF(_iconsole_color_default, "Current Restart Game Date is '%d'", _network_restart_game_date);
+			IConsolePrint(_iconsole_color_warning, "Usage: set restart_game_date <year>. '0' means disabled.");
+			IConsolePrint(_iconsole_color_warning, " Auto-restart the server when 1 jan of this year is reached (e.g.: 2030).");
+		}
+		return NULL;
+	}
+
 #endif /* ENABLE_NETWORK */
 
 	// Patch-options
@@ -868,6 +885,7 @@
 	IConsolePrint(_iconsole_color_error, " - server_bind_ip <ip>");
 	IConsolePrint(_iconsole_color_error, " - server_port <port>");
 	IConsolePrint(_iconsole_color_error, " - server_pw \"<password>\"");
+	IConsolePrint(_iconsole_color_error, " - restart_game_date \"<year>\"");
 #endif /* ENABLE_NETWORK */
 	IConsolePrint(_iconsole_color_error, " - patch <patch_name> [<value>]");
 
--- a/misc.c	Thu Dec 23 17:12:30 2004 +0000
+++ b/misc.c	Thu Dec 23 17:37:26 2004 +0000
@@ -129,7 +129,7 @@
 		#ifdef __BEOS__
 			snooze(milliseconds * 1000);
 		#endif
-		#if defined(__AMIGA__) 
+		#if defined(__AMIGA__)
 		{
 			ULONG signals;
 			ULONG TimerSigBit = 1 << TimerPort->mp_SigBit;
@@ -145,7 +145,7 @@
 			}
 			WaitIO((struct IORequest *)TimerRequest);
 		}
-		#endif // __AMIGA__ 
+		#endif // __AMIGA__
 	#endif
 }
 
@@ -690,6 +690,10 @@
 	RoadVehiclesYearlyLoop();
 	AircraftYearlyLoop();
 	ShipsYearlyLoop();
+#ifdef ENABLE_NETWORK
+	if (_network_server)
+		NetworkServerYearlyLoop();
+#endif /* ENABLE_NETWORK */
 
 	/* check if we reached 2090, that's the maximum year. */
 	if (_cur_year == 171) {
--- a/network.h	Thu Dec 23 17:12:30 2004 +0000
+++ b/network.h	Thu Dec 23 17:37:26 2004 +0000
@@ -184,6 +184,8 @@
 VARDEF uint8 _network_autoclean_unprotected; // Remove a company after X months
 VARDEF uint8 _network_autoclean_protected;   // Unprotect a company after X months
 
+VARDEF uint16 _network_restart_game_date;    // If this year is reached, the server automaticly restarts
+
 NetworkGameList *NetworkQueryServer(const byte* host, unsigned short port, bool game_info);
 
 #endif /* ENABLE_NETWORK */
--- a/network_server.c	Thu Dec 23 17:12:30 2004 +0000
+++ b/network_server.c	Thu Dec 23 17:37:26 2004 +0000
@@ -1259,6 +1259,23 @@
 	}
 }
 
+extern void SwitchMode(int new_mode);
+
+/* Check if we want to restart the map */
+static void NetworkCheckRestartMap()
+{
+	if (_network_restart_game_date != 0 && _cur_year + 1920 >= _network_restart_game_date) {
+		_docommand_recursive = 0;
+
+		DEBUG(net, 0)("Auto-restarting map. Year %d reached.", _cur_year + 1920);
+
+		_random_seeds[0][0] = Random();
+		_random_seeds[0][1] = InteractiveRandom();
+
+		SwitchMode(SM_NEWGAME);
+	}
+}
+
 /* Check if the server has autoclean_companies activated
     Two things happen:
       1) If a company is not protected, it is closed after 1 year (for example)
@@ -1477,6 +1494,11 @@
 	NetworkUDPAdvertise();
 }
 
+void NetworkServerYearlyLoop(void)
+{
+	NetworkCheckRestartMap();
+}
+
 void NetworkServerMonthlyLoop(void)
 {
 	NetworkAutoCleanCompanies();
--- a/network_server.h	Thu Dec 23 17:12:30 2004 +0000
+++ b/network_server.h	Thu Dec 23 17:37:26 2004 +0000
@@ -15,6 +15,7 @@
 bool NetworkServer_ReadPackets(NetworkClientState *cs);
 void NetworkServer_Tick(void);
 void NetworkServerMonthlyLoop(void);
+void NetworkServerYearlyLoop(void);
 
 #endif /* ENABLE_NETWORK */
 
--- a/settings.c	Thu Dec 23 17:12:30 2004 +0000
+++ b/settings.c	Thu Dec 23 17:37:26 2004 +0000
@@ -766,6 +766,7 @@
 	{"autoclean_companies", SDT_BOOL, (void*)false, &_network_autoclean_companies, NULL},
 	{"autoclean_unprotected", SDT_UINT8, (void*)12, &_network_autoclean_unprotected, NULL},
 	{"autoclean_protected", SDT_UINT8, (void*)36, &_network_autoclean_protected, NULL},
+	{"restart_game_date", SDT_UINT16, (void*)0, &_network_restart_game_date, NULL},
 	{NULL,							0,											NULL,					NULL,										NULL}
 };
 #endif /* ENABLE_NETWORK */