(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)
--- 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 */