Author: cazfi Date: Thu Jun 11 23:38:20 2015 New Revision: 29163 URL: http://svn.gna.org/viewcvs/freeciv?rev=29163&view=rev Log: Fixed loading of trait values from 2.6+ savegames. Conversion from older savegames is still broken.
Reported by Jacob Nevins <jtn> See bug #23564 Modified: trunk/server/savegame2.c trunk/server/savegame3.c Modified: trunk/server/savegame2.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/server/savegame2.c?rev=29163&r1=29162&r2=29163&view=diff ============================================================================== --- trunk/server/savegame2.c (original) +++ trunk/server/savegame2.c Thu Jun 11 23:38:20 2015 @@ -2431,9 +2431,9 @@ /* TRANS: Minor error message: <Leader> ... <Poles>. */ log_sg(_("%s had invalid nation; changing to %s."), player_name(pplayer), nation_plural_for_player(pplayer)); - } - - ai_traits_init(pplayer); + + ai_traits_init(pplayer); + } } players_iterate_end; /* Sanity check alliances, prevent allied-with-ally-of-enemy. */ @@ -2554,6 +2554,9 @@ /* Nation */ string = secfile_lookup_str(loading->file, "player%d.nation", plrno); player_set_nation(plr, nation_by_rule_name(string)); + if (plr->nation != NULL) { + ai_traits_init(plr); + } /* Government */ string = secfile_lookup_str(loading->file, "player%d.government_name", @@ -2731,22 +2734,22 @@ "player%d.research.bulbs_last_turn", plrno); /* Traits */ - { + if (plr->nation) { for (i = 0; i < loading->trait.size; i++) { enum trait tr = trait_by_name(loading->trait.order[i], fc_strcasecmp); if (trait_is_valid(tr)) { - int val = secfile_lookup_int_default(loading->file, -1, "plr%d.trait%d.val", + int val = secfile_lookup_int_default(loading->file, -1, "player%d.trait%d.val", plrno, i); if (val != -1) { plr->ai_common.traits[tr].val = val; } - if (secfile_lookup_int(loading->file, &val, - "plr%d.trait%d.mod", plrno, i)) { - plr->ai_common.traits[tr].mod = val; - } + sg_failure_ret(secfile_lookup_int(loading->file, &val, + "player%d.trait%d.mod", plrno, i), + "%s", secfile_error()); + plr->ai_common.traits[tr].mod = val; } } } Modified: trunk/server/savegame3.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/server/savegame3.c?rev=29163&r1=29162&r2=29163&view=diff ============================================================================== --- trunk/server/savegame3.c (original) +++ trunk/server/savegame3.c Thu Jun 11 23:38:20 2015 @@ -3257,9 +3257,9 @@ /* TRANS: Minor error message: <Leader> ... <Poles>. */ log_sg(_("%s had invalid nation; changing to %s."), player_name(pplayer), nation_plural_for_player(pplayer)); - } - - ai_traits_init(pplayer); + + ai_traits_init(pplayer); + } } players_iterate_end; /* Sanity check alliances, prevent allied-with-ally-of-enemy. */ @@ -3441,6 +3441,9 @@ /* Nation */ string = secfile_lookup_str(loading->file, "player%d.nation", plrno); player_set_nation(plr, nation_by_rule_name(string)); + if (plr->nation != NULL) { + ai_traits_init(plr); + } /* Government */ string = secfile_lookup_str(loading->file, "player%d.government_name", @@ -3610,22 +3613,22 @@ "player%d.research.bulbs_last_turn", plrno); /* Traits */ - { + if (plr->nation) { for (i = 0; i < loading->trait.size; i++) { enum trait tr = trait_by_name(loading->trait.order[i], fc_strcasecmp); if (trait_is_valid(tr)) { - int val = secfile_lookup_int_default(loading->file, -1, "plr%d.trait%d.val", - plrno, i); - - if (val != -1) { - plr->ai_common.traits[tr].val = val; - } - - if (secfile_lookup_int(loading->file, &val, - "plr%d.trait%d.mod", plrno, i)) { - plr->ai_common.traits[tr].mod = val; - } + int val; + + sg_failure_ret(secfile_lookup_int(loading->file, &val, "player%d.trait%d.val", + plrno, i), + "%s", secfile_error()); + plr->ai_common.traits[tr].val = val; + + sg_failure_ret(secfile_lookup_int(loading->file, &val, + "player%d.trait%d.mod", plrno, i), + "%s", secfile_error()); + plr->ai_common.traits[tr].mod = val; } } } _______________________________________________ Freeciv-commits mailing list Freeciv-commits@gna.org https://mail.gna.org/listinfo/freeciv-commits