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