Author: cazfi
Date: Sun Nov  1 22:12:12 2015
New Revision: 30367

URL: http://svn.gna.org/viewcvs/freeciv?rev=30367&view=rev
Log:
Load beginning-of-the-turn score information saved to the savegame instead of 
calculating
current score at the current point of the turn.

See bug #22710

Modified:
    branches/S2_6/server/savegame2.c

Modified: branches/S2_6/server/savegame2.c
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_6/server/savegame2.c?rev=30367&r1=30366&r2=30367&view=diff
==============================================================================
--- branches/S2_6/server/savegame2.c    (original)
+++ branches/S2_6/server/savegame2.c    Sun Nov  1 22:12:12 2015
@@ -4241,7 +4241,71 @@
     }
   }
 
-  /* Unit statistics. */
+  /* Player score. */
+  plr->score.happy =
+    secfile_lookup_int_default(loading->file, 0,
+                               "score%d.happy", plrno);
+  plr->score.content =
+    secfile_lookup_int_default(loading->file, 0,
+                               "score%d.content", plrno);
+  plr->score.unhappy =
+    secfile_lookup_int_default(loading->file, 0,
+                               "score%d.unhappy", plrno);
+  plr->score.angry =
+    secfile_lookup_int_default(loading->file, 0,
+                               "score%d.angry", plrno);
+
+  /* Make sure that the score about specialists in current ruleset that
+   * were not present at saving time are set to zero. */
+  specialist_type_iterate(sp) {
+    plr->score.specialists[sp] = 0;
+  } specialist_type_iterate_end;
+
+  for (i = 0; i < loading->specialist.size; i++) {
+    plr->score.specialists[specialist_index(loading->specialist.order[i])]
+      = secfile_lookup_int_default(loading->file, 0,
+                                   "score%d.specialist%d", plrno, i);
+  }
+
+  plr->score.wonders =
+    secfile_lookup_int_default(loading->file, 0,
+                               "score%d.wonders", plrno);
+  plr->score.techs =
+    secfile_lookup_int_default(loading->file, 0,
+                               "score%d.techs", plrno);
+  plr->score.techout =
+    secfile_lookup_int_default(loading->file, 0,
+                               "score%d.techout", plrno);
+  plr->score.landarea =
+    secfile_lookup_int_default(loading->file, 0,
+                               "score%d.landarea", plrno);
+  plr->score.settledarea =
+    secfile_lookup_int_default(loading->file, 0,
+                               "score%d.settledarea", plrno);
+  plr->score.population =
+    secfile_lookup_int_default(loading->file, 0,
+                               "score%d.population", plrno);
+  plr->score.cities =
+    secfile_lookup_int_default(loading->file, 0,
+                               "score%d.cities", plrno);
+  plr->score.units =
+    secfile_lookup_int_default(loading->file, 0,
+                               "score%d.units", plrno);
+  plr->score.pollution =
+    secfile_lookup_int_default(loading->file, 0,
+                               "score%d.pollution", plrno);
+  plr->score.literacy =
+    secfile_lookup_int_default(loading->file, 0,
+                               "score%d.literacy", plrno);
+  plr->score.bnp =
+    secfile_lookup_int_default(loading->file, 0,
+                               "score%d.bnp", plrno);
+  plr->score.mfg =
+    secfile_lookup_int_default(loading->file, 0,
+                               "score%d.mfg", plrno);
+  plr->score.spaceship =
+    secfile_lookup_int_default(loading->file, 0,
+                               "score%d.spaceship", plrno);
   plr->score.units_built =
       secfile_lookup_int_default(loading->file, 0,
                                  "score%d.units_built", plrno);
@@ -4251,6 +4315,12 @@
   plr->score.units_lost =
       secfile_lookup_int_default(loading->file, 0,
                                  "score%d.units_lost", plrno);
+  plr->score.culture =
+    secfile_lookup_int_default(loading->file, 0,
+                               "score%d.culture", plrno);
+  plr->score.game =
+    secfile_lookup_int_default(loading->file, 0,
+                               "score%d.total", plrno);
 
   /* Load space ship data. */
   {
@@ -7212,10 +7282,13 @@
   if (!game.info.is_new_game) {
     fc_rand_set_state(loading->rstate);
 
-    /* Recalculate scores. */
-    players_iterate(pplayer) {
-      calc_civ_score(pplayer);
-    } players_iterate_end;
+    if (loading->version < 30) {
+      /* For older savegames we have to recalculate the score with current 
data,
+       * instead of using beginning-of-turn saved scores. */
+      players_iterate(pplayer) {
+        calc_civ_score(pplayer);
+      } players_iterate_end;
+    }
   }
 
   /* At the end do the default sanity checks. */


_______________________________________________
Freeciv-commits mailing list
Freeciv-commits@gna.org
https://mail.gna.org/listinfo/freeciv-commits

Reply via email to