Author: sveinung
Date: Sun Aug  2 01:05:07 2015
New Revision: 29292

URL: http://svn.gna.org/viewcvs/freeciv?rev=29292&view=rev
Log:
Don't unit_add_or_build_city_test() units that can't found or join cities

See bug #23729

Modified:
    trunk/common/unit.c
    trunk/server/unithand.c

Modified: trunk/common/unit.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/unit.c?rev=29292&r1=29291&r2=29292&view=diff
==============================================================================
--- trunk/common/unit.c (original)
+++ trunk/common/unit.c Sun Aug  2 01:05:07 2015
@@ -353,7 +353,8 @@
 ****************************************************************************/
 bool unit_can_add_to_city(const struct unit *punit)
 {
-  return (UAB_ADD_OK == unit_add_or_build_city_test(punit));
+  return (unit_can_do_action(punit, ACTION_JOIN_CITY)
+          && (UAB_ADD_OK == unit_add_or_build_city_test(punit)));
 }
 
 /****************************************************************************
@@ -362,7 +363,8 @@
 ****************************************************************************/
 bool unit_can_build_city(const struct unit *punit)
 {
-  return (UAB_BUILD_OK == unit_add_or_build_city_test(punit));
+  return (unit_can_do_action(punit, ACTION_FOUND_CITY)
+          && (UAB_BUILD_OK == unit_add_or_build_city_test(punit)));
 }
 
 /****************************************************************************
@@ -371,7 +373,16 @@
 ****************************************************************************/
 bool unit_can_add_or_build_city(const struct unit *punit)
 {
-  enum unit_add_build_city_result res = unit_add_or_build_city_test(punit);
+  enum unit_add_build_city_result res;
+
+  if (!unit_can_do_action(punit, ACTION_FOUND_CITY)
+      && !unit_can_do_action(punit, ACTION_JOIN_CITY)) {
+    /* The unit can't ever do any of the actions. The current conditions
+     * don't matter. */
+    return FALSE;
+  }
+
+  res = unit_add_or_build_city_test(punit);
 
   return (UAB_BUILD_OK == res || UAB_ADD_OK == res);
 }

Modified: trunk/server/unithand.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/unithand.c?rev=29292&r1=29291&r2=29292&view=diff
==============================================================================
--- trunk/server/unithand.c     (original)
+++ trunk/server/unithand.c     Sun Aug  2 01:05:07 2015
@@ -1505,7 +1505,8 @@
         ACTION_STARTED_UNIT_CITY(action_type, actor_unit, pcity);
 
         city_add_unit(pplayer, actor_unit);
-      } else if (!unit_can_add_to_city(actor_unit)) {
+      } else if (unit_can_do_action(actor_unit, ACTION_JOIN_CITY)
+                 && !unit_can_add_to_city(actor_unit)) {
         /* Keep the rules like they was before action enabler control:
          *  - detailed explanation of why something is illegal. */
         /* TODO: improve explanation about why an action failed. */
@@ -1550,7 +1551,8 @@
         ACTION_STARTED_UNIT_TILE(action_type, actor_unit, target_tile);
 
         city_build(pplayer, actor_unit, name);
-      } else if (!unit_can_build_city(actor_unit)) {
+      } else if (unit_can_do_action(actor_unit, ACTION_FOUND_CITY)
+                 && !unit_can_build_city(actor_unit)) {
         /* Keep the rules like they was before action enabler control:
          *  - detailed explanation of why something is illegal. */
         /* TODO: improve explanation about why an action failed. */


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

Reply via email to