(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)
This commit is contained in:
truelight 2004-12-23 17:37:26 +00:00
parent 3672ae1118
commit c9645885d0
6 changed files with 50 additions and 2 deletions

View File

@ -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>]");

8
misc.c
View File

@ -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) {

View File

@ -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 */

View File

@ -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();

View File

@ -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 */

View File

@ -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 */