From 59e9975e89977504e8163d46594771cfa6c4a953 Mon Sep 17 00:00:00 2001 From: Marko Lindqvist Date: Sun, 5 Feb 2023 09:26:08 +0200 Subject: [PATCH 31/31] player_limit_to_max_rates(): Adjust rates directly to player Stop passing entire economy structure as value. All callers were setting it to the same player structure anyway. If that's to change in the future, it will be easy to add economy pointer parameter. See osdn #45420 Signed-off-by: Marko Lindqvist --- server/edithand.c | 2 +- server/plrhand.c | 51 ++++++++++++++++++------------------- server/plrhand.h | 2 +- server/savegame/savegame2.c | 2 +- server/savegame/savegame3.c | 2 +- server/srv_main.c | 2 +- 6 files changed, 30 insertions(+), 31 deletions(-) diff --git a/server/edithand.c b/server/edithand.c index fb2a159d8f..62c648265a 100644 --- a/server/edithand.c +++ b/server/edithand.c @@ -949,7 +949,7 @@ void handle_edit_player_create(struct connection *pc, int tag) pplayer->server.got_first_city = FALSE; pplayer->economic.gold = 0; - pplayer->economic = player_limit_to_max_rates(pplayer); + player_limit_to_max_rates(pplayer); presearch = research_get(pplayer); init_tech(presearch, TRUE); diff --git a/server/plrhand.c b/server/plrhand.c index db2cfa5825..0b410d6e07 100644 --- a/server/plrhand.c +++ b/server/plrhand.c @@ -737,7 +737,7 @@ void check_player_max_rates(struct player *pplayer) { struct player_economic old_econ = pplayer->economic; - pplayer->economic = player_limit_to_max_rates(pplayer); + player_limit_to_max_rates(pplayer); if (old_econ.tax > pplayer->economic.tax) { notify_player(pplayer, NULL, E_NEW_GOVERNMENT, ftc_server, _("Tax rate exceeded the max rate; adjusted.")); @@ -1595,7 +1595,7 @@ void server_player_init(struct player *pplayer, bool initmap, * to always have one server_player_init() call with * needs_team TRUE. */ if (needs_team) { - pplayer->economic = player_limit_to_max_rates(pplayer); + player_limit_to_max_rates(pplayer); } adv_data_default(pplayer); @@ -2002,50 +2002,49 @@ void server_remove_player(struct player *pplayer) Returns actual max rate used. This function should be called after team information are defined. **************************************************************************/ -struct player_economic player_limit_to_max_rates(struct player *pplayer) +void player_limit_to_max_rates(struct player *pplayer) { int maxrate, surplus; - struct player_economic economic; + struct player_economic *economic; /* AI players allowed to cheat */ if (is_ai(pplayer) && !has_handicap(pplayer, H_RATES)) { - return pplayer->economic; + return; } - economic = pplayer->economic; + economic = &(pplayer->economic); maxrate = get_player_maxrate(pplayer); surplus = 0; - if (economic.luxury > maxrate) { - surplus += economic.luxury - maxrate; - economic.luxury = maxrate; + if (economic->luxury > maxrate) { + surplus += economic->luxury - maxrate; + economic->luxury = maxrate; } - if (economic.tax > maxrate) { - surplus += economic.tax - maxrate; - economic.tax = maxrate; + if (economic->tax > maxrate) { + surplus += economic->tax - maxrate; + economic->tax = maxrate; } - if (economic.science > maxrate) { - surplus += economic.science - maxrate; - economic.science = maxrate; + if (economic->science > maxrate) { + surplus += economic->science - maxrate; + economic->science = maxrate; } fc_assert(surplus % 10 == 0); + while (surplus > 0) { - if (economic.science < maxrate) { - economic.science += 10; - } else if (economic.tax < maxrate) { - economic.tax += 10; - } else if (economic.luxury < maxrate) { - economic.luxury += 10; + if (economic->science < maxrate) { + economic->science += 10; + } else if (economic->tax < maxrate) { + economic->tax += 10; + } else if (economic->luxury < maxrate) { + economic->luxury += 10; } else { fc_assert_msg(FALSE, "Failed to distribute the surplus. " "maxrate = %d.", maxrate); } surplus -= 10; } - - return economic; } /**********************************************************************//** @@ -2823,9 +2822,9 @@ static struct player *split_player(struct player *pplayer) } research_update(old_research); - pplayer->economic = player_limit_to_max_rates(pplayer); + player_limit_to_max_rates(pplayer); - /* copy the maps */ + /* Copy the maps */ give_map_from_player_to_player(pplayer, cplayer); @@ -2839,7 +2838,7 @@ static struct player *split_player(struct player *pplayer) CALL_PLR_AI_FUNC(split_by_civil_war, pplayer, pplayer, cplayer); CALL_PLR_AI_FUNC(created_by_civil_war, cplayer, pplayer, cplayer); - cplayer->economic = player_limit_to_max_rates(cplayer); + player_limit_to_max_rates(cplayer); return cplayer; } diff --git a/server/plrhand.h b/server/plrhand.h index a635839994..c64340965e 100644 --- a/server/plrhand.h +++ b/server/plrhand.h @@ -45,7 +45,7 @@ void player_loot_player(struct player *pvictor, struct player *pvictim); int revolution_length(struct government *gov, struct player *plr); void update_capital(struct player *pplayer); -struct player_economic player_limit_to_max_rates(struct player *pplayer); +void player_limit_to_max_rates(struct player *pplayer); void server_player_set_name(struct player *pplayer, const char *name); bool server_player_set_name_full(const struct connection *caller, diff --git a/server/savegame/savegame2.c b/server/savegame/savegame2.c index 89baa3c9f1..42245778df 100644 --- a/server/savegame/savegame2.c +++ b/server/savegame/savegame2.c @@ -5351,7 +5351,7 @@ static void sg_load_sanitycheck(struct loaddata *loading) /* Check max rates (rules may have changed since saving) */ players_iterate(pplayer) { - pplayer->economic = player_limit_to_max_rates(pplayer); + player_limit_to_max_rates(pplayer); } players_iterate_end; if (0 == strlen(server.game_identifier) diff --git a/server/savegame/savegame3.c b/server/savegame/savegame3.c index 13983f37ae..8ced397ee7 100644 --- a/server/savegame/savegame3.c +++ b/server/savegame/savegame3.c @@ -7854,7 +7854,7 @@ static void sg_load_sanitycheck(struct loaddata *loading) /* Check max rates (rules may have changed since saving) */ players_iterate(pplayer) { - pplayer->economic = player_limit_to_max_rates(pplayer); + player_limit_to_max_rates(pplayer); } players_iterate_end; if (0 == strlen(server.game_identifier) diff --git a/server/srv_main.c b/server/srv_main.c index 0ff7b7568e..14179a2f6f 100644 --- a/server/srv_main.c +++ b/server/srv_main.c @@ -3353,7 +3353,7 @@ static void srv_ready(void) players_iterate(pplayer) { player_map_init(pplayer); - pplayer->economic = player_limit_to_max_rates(pplayer); + player_limit_to_max_rates(pplayer); pplayer->economic.gold = game.info.gold; pplayer->economic.infra_points = game.info.infrapoints; } players_iterate_end; -- 2.39.1