<URL: http://bugs.freeciv.org/Ticket/Display.html?id=37321 >

On 3/3/07, Per I. Mathisen <[EMAIL PROTECTED]> wrote:
> So, anyone care to make a patch? ;-)

 Untested.

 Normal upgrade already kept veteran levels and autoupgrade had
ruleset option. This patch simply adds ruleset option for normal
upgrade also.


 - ML

diff -Nurd -X.diff_ignore freeciv/common/packets.def freeciv/common/packets.def
--- freeciv/common/packets.def	2007-03-03 23:02:08.000000000 +0200
+++ freeciv/common/packets.def	2007-03-04 00:10:49.000000000 +0200
@@ -438,6 +438,7 @@
   UINT8 tech_leakage;
   YEAR tech_cost_double_year;
   BOOL killstack;
+  UINT8 upgrade_veteran_loss;
   UINT8 autoupgrade_veteran_loss;
   UINT16 incite_improvement_factor;
   UINT16 incite_unit_factor;
diff -Nurd -X.diff_ignore freeciv/data/civ1/game.ruleset freeciv/data/civ1/game.ruleset
--- freeciv/data/civ1/game.ruleset	2006-07-17 23:56:23.000000000 +0300
+++ freeciv/data/civ1/game.ruleset	2007-03-04 00:14:11.000000000 +0200
@@ -23,6 +23,8 @@
 min_city_center_shield	= 0
 min_city_center_trade	= 0
 
+; Number of veteran levels lost when upgrading a unit
+upgrade_veteran_loss     = 255
 ; Number of veteran levels lost when auto-upgrading a unit
 autoupgrade_veteran_loss = 255
 
diff -Nurd -X.diff_ignore freeciv/data/civ2/game.ruleset freeciv/data/civ2/game.ruleset
--- freeciv/data/civ2/game.ruleset	2006-07-17 23:56:23.000000000 +0300
+++ freeciv/data/civ2/game.ruleset	2007-03-04 00:14:28.000000000 +0200
@@ -23,6 +23,8 @@
 min_city_center_shield	= 1
 min_city_center_trade	= 0
 
+; Number of veteran levels lost when upgrading a unit
+upgrade_veteran_loss     = 255
 ; Number of veteran levels lost when auto-upgrading a unit
 autoupgrade_veteran_loss = 255
 
diff -Nurd -X.diff_ignore freeciv/data/default/game.ruleset freeciv/data/default/game.ruleset
--- freeciv/data/default/game.ruleset	2006-07-17 23:56:23.000000000 +0300
+++ freeciv/data/default/game.ruleset	2007-03-04 00:11:56.000000000 +0200
@@ -42,6 +42,8 @@
 min_city_center_shield	= 1
 min_city_center_trade	= 0
 
+; Number of veteran levels lost when upgrading a unit
+upgrade_veteran_loss     = 0
 ; Number of veteran levels lost when auto-upgrading a unit
 autoupgrade_veteran_loss = 0
 
diff -Nurd -X.diff_ignore freeciv/server/ruleset.c freeciv/server/ruleset.c
--- freeciv/server/ruleset.c	2007-03-03 23:02:08.000000000 +0200
+++ freeciv/server/ruleset.c	2007-03-04 00:11:43.000000000 +0200
@@ -2724,6 +2724,9 @@
   game.info.tech_cost_double_year = 
       secfile_lookup_int_default(&file, 1, "civstyle.tech_cost_double_year");
 
+  game.info.upgrade_veteran_loss
+    = secfile_lookup_int(&file, "civstyle.upgrade_veteran_loss");
+
   game.info.autoupgrade_veteran_loss
     = secfile_lookup_int(&file, "civstyle.autoupgrade_veteran_loss");
 
diff -Nurd -X.diff_ignore freeciv/server/unittools.c freeciv/server/unittools.c
--- freeciv/server/unittools.c	2007-02-28 23:02:37.000000000 +0200
+++ freeciv/server/unittools.c	2007-03-04 00:09:36.000000000 +0200
@@ -259,17 +259,6 @@
 		  unit_type(punit)->name,
 		  upgrade_type->name,
 		  get_location_str_in(pplayer, punit->tile));
-
-    /* For historical reasons some veteran status may be lost while
-     * upgrading.  Note that the upgraded unit may have the NoVeteran
-     * flag set. */
-    if (unit_type_flag(upgrade_type, F_NO_VETERAN)) {
-      punit->veteran = 0;
-    } else {
-      punit->veteran = MAX(punit->veteran
-			   - game.info.autoupgrade_veteran_loss, 0);
-    }
-    assert(test_unit_upgrade(punit, TRUE) == UR_OK);
     upgrade_unit(punit, upgrade_type, TRUE);
     unit_list_unlink(candidates, punit);
     upgrades--;
@@ -1267,6 +1256,16 @@
   punit->hp = MAX(punit->hp * unit_type(punit)->hp / old_hp, 1);
   punit->moves_left = punit->moves_left * unit_move_rate(punit) / old_mr;
 
+  if (unit_type_flag(to_unit, F_NO_VETERAN)) {
+    punit->veteran = 0;
+  } else if (is_free) {
+    punit->veteran = MAX(punit->veteran
+                         - game.info.autoupgrade_veteran_loss, 0);
+  } else {
+    punit->veteran = MAX(punit->veteran
+                         - game.info.upgrade_veteran_loss, 0);
+  }
+
   conn_list_do_buffer(pplayer->connections);
 
   unit_refresh_vision(punit);
diff -Nurd -X.diff_ignore freeciv/version.in freeciv/version.in
--- freeciv/version.in	2007-03-03 23:02:09.000000000 +0200
+++ freeciv/version.in	2007-03-04 00:11:04.000000000 +0200
@@ -24,4 +24,4 @@
 #   - Avoid adding a new manditory capbility to the development branch for
 #     as long as possible.  We want to maintain network compatibility with
 #     the stable branch for as long as possible.
-FREECIV_NETWORK_CAPSTRING("+Freeciv.Devel.2007.Mar.03")
+FREECIV_NETWORK_CAPSTRING("+Freeciv.Devel.2007.Mar.04")
_______________________________________________
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev

Reply via email to