summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortruelight <truelight@openttd.org>2004-12-23 17:37:26 +0000
committertruelight <truelight@openttd.org>2004-12-23 17:37:26 +0000
commitc9645885d085706aab46c593fab1fd2c1d560c17 (patch)
tree58714b88a827433fe0f108fda19afc593185fdea
parent3672ae111857e7dffff55737a50d06f5d44114a5 (diff)
downloadopenttd-c9645885d085706aab46c593fab1fd2c1d560c17.tar.xz
(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)
-rw-r--r--console_cmds.c18
-rw-r--r--misc.c8
-rw-r--r--network.h2
-rw-r--r--network_server.c22
-rw-r--r--network_server.h1
-rw-r--r--settings.c1
6 files changed, 50 insertions, 2 deletions
diff --git a/console_cmds.c b/console_cmds.c
index 36be8248f..b929cf013 100644
--- a/console_cmds.c
+++ b/console_cmds.c
@@ -837,6 +837,23 @@ DEF_CONSOLE_CMD(ConSet) {
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 @@ DEF_CONSOLE_CMD(ConSet) {
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>]");
diff --git a/misc.c b/misc.c
index dcb18656d..34ad3bfac 100644
--- a/misc.c
+++ b/misc.c
@@ -129,7 +129,7 @@ void CSleep(int milliseconds)
#ifdef __BEOS__
snooze(milliseconds * 1000);
#endif
- #if defined(__AMIGA__)
+ #if defined(__AMIGA__)
{
ULONG signals;
ULONG TimerSigBit = 1 << TimerPort->mp_SigBit;
@@ -145,7 +145,7 @@ void CSleep(int milliseconds)
}
WaitIO((struct IORequest *)TimerRequest);
}
- #endif // __AMIGA__
+ #endif // __AMIGA__
#endif
}
@@ -690,6 +690,10 @@ void IncreaseDate()
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) {
diff --git a/network.h b/network.h
index 0a13665ef..a02ee5446 100644
--- a/network.h
+++ b/network.h
@@ -184,6 +184,8 @@ VARDEF bool _network_autoclean_companies;
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 */
diff --git a/network_server.c b/network_server.c
index 91ff13e1c..9e54bfd34 100644
--- a/network_server.c
+++ b/network_server.c
@@ -1259,6 +1259,23 @@ void NetworkUpdateClientInfo(uint16 client_index)
}
}
+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 @@ void NetworkServer_Tick(void)
NetworkUDPAdvertise();
}
+void NetworkServerYearlyLoop(void)
+{
+ NetworkCheckRestartMap();
+}
+
void NetworkServerMonthlyLoop(void)
{
NetworkAutoCleanCompanies();
diff --git a/network_server.h b/network_server.h
index 1cfa59702..c2ea3dba3 100644
--- a/network_server.h
+++ b/network_server.h
@@ -15,6 +15,7 @@ void NetworkServer_HandleChat(NetworkAction action, DestType desttype, int dest,
bool NetworkServer_ReadPackets(NetworkClientState *cs);
void NetworkServer_Tick(void);
void NetworkServerMonthlyLoop(void);
+void NetworkServerYearlyLoop(void);
#endif /* ENABLE_NETWORK */
diff --git a/settings.c b/settings.c
index 2f9ea63f4..3a4342a23 100644
--- a/settings.c
+++ b/settings.c
@@ -766,6 +766,7 @@ static const SettingDesc network_settings[] = {
{"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 */