Feature #219 ยป 0035-Keep-track-of-world-peace-start-turn.patch
common/game.c | ||
---|---|---|
game.info.trading_gold = GAME_DEFAULT_TRADING_GOLD;
|
||
game.info.trading_tech = GAME_DEFAULT_TRADING_TECH;
|
||
game.info.turn = 0;
|
||
game.info.warminglevel = 0; /* set later */
|
||
game.info.warminglevel = 0; /* Set later */
|
||
game.info.year_0_hack = FALSE;
|
||
game.info.year = GAME_DEFAULT_START_YEAR;
|
||
game.info.top_cities_count = GAME_DEFAULT_TOP_CITIES_COUNT;
|
||
... | ... | |
game.server.unitwaittime = GAME_DEFAULT_UNITWAITTIME;
|
||
game.server.plr_colors = NULL;
|
||
game.server.random_move_time = NULL;
|
||
game.server.world_peace_start = 0;
|
||
} else {
|
||
/* Client side takes care of itself in client_main() */
|
||
}
|
common/game.h | ||
---|---|---|
* the server we need to remember the old setting */
|
||
bool last_updated_year; /* last_updated is still counted as year in this
|
||
* game. */
|
||
int world_peace_start;
|
||
char rulesetdir[MAX_LEN_NAME];
|
||
char demography[MAX_LEN_DEMOGRAPHY];
|
||
char allow_take[MAX_LEN_ALLOW_TAKE];
|
server/savegame/savecompat.c | ||
---|---|---|
secfile_insert_bool(loading->file, FALSE, "map.altitude");
|
||
/* World Peace has never started in the old savegame. */
|
||
game.info.turn = secfile_lookup_int_default(loading->file, 0, "game.turn");
|
||
secfile_insert_int(loading->file, game.info.turn, "game.world_peace_start");
|
||
{
|
||
int ssa_count;
|
||
... | ... | |
secfile_insert_bool(loading->file, FALSE, "map.altitude");
|
||
/* World Peace has never started in the old savegame. */
|
||
game.info.turn
|
||
= secfile_lookup_int_default(loading->file, 0, "game.turn");
|
||
game.server.world_peace_start
|
||
= secfile_lookup_int_default(loading->file, game.info.turn,
|
||
"game.world_peace_start");
|
||
secfile_replace_int(loading->file, game.server.world_peace_start,
|
||
"game.world_peace_start");
|
||
/* Add actions for unit activities */
|
||
loading->activities.size
|
||
= secfile_lookup_int_default(loading->file, 0,
|
server/savegame/savegame2.c | ||
---|---|---|
= secfile_lookup_int_default(loading->file, 0, "game.turn");
|
||
sg_failure_ret(secfile_lookup_int(loading->file, &game.info.year,
|
||
"game.year"), "%s", secfile_error());
|
||
game.server.world_peace_start = game.info.turn;
|
||
game.info.year_0_hack
|
||
= secfile_lookup_bool_default(loading->file, FALSE, "game.year_0_hack");
|
||
server/savegame/savegame3.c | ||
---|---|---|
= secfile_lookup_int_default(loading->file, 0, "game.turn");
|
||
sg_failure_ret(secfile_lookup_int(loading->file, &game.info.year,
|
||
"game.year"), "%s", secfile_error());
|
||
sg_failure_ret(secfile_lookup_int(loading->file, &game.server.world_peace_start,
|
||
"game.world_peace_start"), "%s", secfile_error());
|
||
game.info.year_0_hack
|
||
= secfile_lookup_bool_default(loading->file, FALSE, "game.year_0_hack");
|
||
... | ... | |
secfile_insert_int(saving->file, game.info.turn, "game.turn");
|
||
secfile_insert_int(saving->file, game.info.year, "game.year");
|
||
secfile_insert_int(saving->file, game.server.world_peace_start, "game.world_peace_start");
|
||
secfile_insert_bool(saving->file, game.info.year_0_hack,
|
||
"game.year_0_hack");
|
||
server/srv_main.c | ||
---|---|---|
static void handle_observer_ready(struct connection *pconn);
|
||
static void world_peace_update(void);
|
||
/* command-line arguments to server */
|
||
struct server_arguments srvarg;
|
||
... | ... | |
} whole_map_iterate_end;
|
||
} extra_type_by_cause_iterate_end;
|
||
world_peace_update();
|
||
update_diplomatics();
|
||
make_history_report();
|
||
settings_turn();
|
||
... | ... | |
}
|
||
while (server_sniff_all_input() == S_E_OTHERWISE) {
|
||
/* nothing */
|
||
/* Nothing */
|
||
}
|
||
between_turns = timer_renew(between_turns, TIMER_USER, TIMER_ACTIVE,
|
||
... | ... | |
/* endturn was reached - rank users based on team scores */
|
||
rank_users(TRUE);
|
||
} else {
|
||
/* game ended for victory conditions - rank users based on survival */
|
||
/* Game ended for victory conditions - rank users based on survival */
|
||
rank_users(FALSE);
|
||
}
|
||
} else if (S_S_OVER == server_state()) {
|
||
/* game terminated by /endgame command - calculate team scores */
|
||
/* Game terminated by /endgame command - calculate team scores */
|
||
rank_users(TRUE);
|
||
}
|
||
}
|
||
... | ... | |
}
|
||
}
|
||
}
|
||
/**********************************************************************//**
|
||
Does this turn count as world peace turn?
|
||
**************************************************************************/
|
||
static bool world_peace_turn(void)
|
||
{
|
||
players_iterate_alive(pplayer) {
|
||
bool contact = FALSE;
|
||
players_iterate_alive(other) {
|
||
if (pplayer != other) {
|
||
struct player_diplstate *dstate = player_diplstate_get(pplayer, other);
|
||
if (dstate->type == DS_WAR) {
|
||
return FALSE;
|
||
}
|
||
if (dstate->type != DS_NO_CONTACT) {
|
||
contact = TRUE;
|
||
}
|
||
}
|
||
} players_iterate_alive_end;
|
||
if (!contact) {
|
||
/* Peace only because there's nobody to show aggression against does not count. */
|
||
return FALSE;
|
||
}
|
||
} players_iterate_alive_end;
|
||
return TRUE;
|
||
}
|
||
/**********************************************************************//**
|
||
Update world peace data.
|
||
**************************************************************************/
|
||
static void world_peace_update(void)
|
||
{
|
||
if (!world_peace_turn()) {
|
||
/* Consecutive world peace turns begin *earliest* after this turn, overwrite older claims. */
|
||
game.server.world_peace_start = game.info.turn;
|
||
}
|
||
}
|