Author: jtn Date: Thu Aug 20 01:41:27 2015 New Revision: 29603 URL: http://svn.gna.org/viewcvs/freeciv?rev=29603&view=rev Log: When loading savegame, recalculate city illness only after loading all trade partners. This ensures the client's display of illness is up to date.
See gna bug #23786. Modified: branches/S2_6/server/savegame.c branches/S2_6/server/savegame2.c Modified: branches/S2_6/server/savegame.c URL: http://svn.gna.org/viewcvs/freeciv/branches/S2_6/server/savegame.c?rev=29603&r1=29602&r2=29603&view=diff ============================================================================== --- branches/S2_6/server/savegame.c (original) +++ branches/S2_6/server/savegame.c Thu Aug 20 01:41:27 2015 @@ -2331,12 +2331,6 @@ pcity->turn_plague = secfile_lookup_int_default(file, 0, "player%d.c%d.turn_plague", plrno,i); - if (game.info.illness_on) { - /* recalculate city illness */ - pcity->server.illness - = city_illness_calc(pcity, NULL, NULL, &(pcity->illness_trade), NULL); - } - fc_assert_exit_msg(secfile_lookup_int(file, &pcity->anarchy, "player%d.c%d.anarchy", plrno, i), "%s", secfile_error()); @@ -3970,6 +3964,16 @@ } unit_list_iterate_end; /* Load transporter status. */ player_load_units_transporter(pplayer, file); + /* Update cached city illness. This can depend on trade routes, + * so can't be calculated until all players have been loaded. */ + if (game.info.illness_on) { + city_list_iterate(pplayer->cities, pcity) { + pcity->server.illness + = city_illness_calc(pcity, NULL, NULL, + &(pcity->illness_trade), NULL); + } city_list_iterate_end; + } + } players_iterate_end; /* Free worked tiles map */ Modified: branches/S2_6/server/savegame2.c URL: http://svn.gna.org/viewcvs/freeciv/branches/S2_6/server/savegame2.c?rev=29603&r1=29602&r2=29603&view=diff ============================================================================== --- branches/S2_6/server/savegame2.c (original) +++ branches/S2_6/server/savegame2.c Thu Aug 20 01:41:27 2015 @@ -3682,6 +3682,16 @@ } players_iterate_alive_end; } players_iterate_alive_end; + /* Update cached city illness. This can depend on trade routes, + * so can't be calculated until all players have been loaded. */ + if (game.info.illness_on) { + cities_iterate(pcity) { + pcity->server.illness + = city_illness_calc(pcity, NULL, NULL, + &(pcity->illness_trade), NULL); + } cities_iterate_end; + } + /* Update all city information. This must come after all cities are * loaded (in player_load) but before player (dumb) cities are loaded * in player_load_vision(). */ @@ -4612,11 +4622,6 @@ pcity->turn_plague = secfile_lookup_int_default(loading->file, 0, "%s.turn_plague", citystr); - if (game.info.illness_on) { - /* recalculate city illness */ - pcity->server.illness = city_illness_calc(pcity, NULL, NULL, - &(pcity->illness_trade), NULL); - } sg_warn_ret_val(secfile_lookup_int(loading->file, &pcity->anarchy, "%s.anarchy", citystr), _______________________________________________ Freeciv-commits mailing list Freeciv-commits@gna.org https://mail.gna.org/listinfo/freeciv-commits