Author: sveinung
Date: Mon Dec 21 02:58:49 2015
New Revision: 31127
URL: http://svn.gna.org/viewcvs/freeciv?rev=31127&view=rev
Log:
Action not enabled explain city size limits
Explain when an action can't be performed because it would make a city grow
beyond its city size limits. Use it to replace UAB_NO_SPACE.
See patch #6696
Modified:
trunk/common/actions.c
trunk/common/unit.c
trunk/common/unit.h
trunk/server/cityhand.c
trunk/server/unithand.c
Modified: trunk/common/actions.c
URL:
http://svn.gna.org/viewcvs/freeciv/trunk/common/actions.c?rev=31127&r1=31126&r2=31127&view=diff
==============================================================================
--- trunk/common/actions.c (original)
+++ trunk/common/actions.c Mon Dec 21 02:58:49 2015
@@ -1212,6 +1212,16 @@
return TRI_NO;
}
+ if (!city_can_grow_to(target_city, new_pop)) {
+ /* Reason: respect city size limits. */
+ /* Info leak: when it is legal to join a foreign city is legal and
+ * the EFT_SIZE_UNLIMIT effect or the EFT_SIZE_ADJ effect depends on
+ * something the actor player don't have access to.
+ * Example: depends on a building (like Aqueduct) that isn't
+ * VisibleByOthers. */
+ return TRI_NO;
+ }
+
/* TODO: Move more individual requirements to the action enabler. */
if (!unit_can_add_to_city(actor_unit, target_city)) {
return TRI_NO;
Modified: trunk/common/unit.c
URL:
http://svn.gna.org/viewcvs/freeciv/trunk/common/unit.c?rev=31127&r1=31126&r2=31127&view=diff
==============================================================================
--- trunk/common/unit.c (original)
+++ trunk/common/unit.c Mon Dec 21 02:58:49 2015
@@ -405,8 +405,6 @@
enum unit_add_build_city_result
unit_join_city_test(const struct unit *punit, const struct city *pcity)
{
- int new_pop;
-
/* Test if we can build. */
if (NULL == pcity) {
/* No city to join. */
@@ -414,11 +412,7 @@
}
fc_assert(unit_pop_value(punit) > 0);
- new_pop = city_size_get(pcity) + unit_pop_value(punit);
-
- if (!city_can_grow_to(pcity, new_pop)) {
- return UAB_NO_SPACE;
- }
+
return UAB_ADD_OK;
}
Modified: trunk/common/unit.h
URL:
http://svn.gna.org/viewcvs/freeciv/trunk/common/unit.h?rev=31127&r1=31126&r2=31127&view=diff
==============================================================================
--- trunk/common/unit.h (original)
+++ trunk/common/unit.h Mon Dec 21 02:58:49 2015
@@ -61,7 +61,6 @@
UAB_BAD_UNIT_TERRAIN, /* Equivalent to 'CB_BAD_UNIT_TERRAIN'. */
UAB_BAD_BORDERS, /* Equivalent to 'CB_BAD_BORDERS'. */
UAB_NO_MIN_DIST, /* Equivalent to 'CB_NO_MIN_DIST'. */
- UAB_NO_SPACE /* Adding takes city past limit. */
};
enum unit_upgrade_result {
Modified: trunk/server/cityhand.c
URL:
http://svn.gna.org/viewcvs/freeciv/trunk/server/cityhand.c?rev=31127&r1=31126&r2=31127&view=diff
==============================================================================
--- trunk/server/cityhand.c (original)
+++ trunk/server/cityhand.c Mon Dec 21 02:58:49 2015
@@ -89,7 +89,6 @@
break;
case UAB_ADD_OK:
- case UAB_NO_SPACE:
log_verbose("handle_city_name_suggest_req(unit_pos (%d, %d)): "
"there is already a city there.", TILE_XY(unit_tile(punit)));
/* Ignoring. */
Modified: trunk/server/unithand.c
URL:
http://svn.gna.org/viewcvs/freeciv/trunk/server/unithand.c?rev=31127&r1=31126&r2=31127&view=diff
==============================================================================
--- trunk/server/unithand.c (original)
+++ trunk/server/unithand.c Mon Dec 21 02:58:49 2015
@@ -102,6 +102,8 @@
ANEK_SCENARIO_DISABLED,
/* Explanation: the target city is too big. */
ANEK_CITY_TOO_BIG,
+ /* Explanation: the target city's population limit banned the action. */
+ ANEK_CITY_POP_LIMIT,
/* Explanation: the action is blocked by another action. */
ANEK_ACTION_BLOCKS,
/* Explanation not detected. */
@@ -773,6 +775,14 @@
/* TODO: Check max city size requirements from action enabler target
* vectors. */
expl->kind = ANEK_CITY_TOO_BIG;
+ } else if (target_city
+ && (action_id == ACTION_JOIN_CITY
+ && action_actor_utype_hard_reqs_ok(ACTION_JOIN_CITY,
+ unit_type_get(punit))
+ && (!city_can_grow_to(target_city,
+ city_size_get(target_city)
+ + unit_pop_value(punit))))) {
+ expl->kind = ANEK_CITY_POP_LIMIT;
} else if ((game.scenario.prevent_new_cities
&& utype_can_do_action(unit_type_get(punit), ACTION_FOUND_CITY))
&& (action_id == ACTION_FOUND_CITY
@@ -876,6 +886,14 @@
_("%s can't do anything to %s. It is too big."),
unit_name_translation(punit),
city_name(target_city));
+ break;
+ case ANEK_CITY_POP_LIMIT:
+ notify_player(pplayer, unit_tile(punit), E_BAD_COMMAND, ftc_server,
+ /* TRANS: London ... Settlers */
+ _("%s needs an improvement to grow, so "
+ "%s cannot do anything to it."),
+ city_name(target_city),
+ unit_name_translation(punit));
break;
case ANEK_ACTION_BLOCKS:
/* If an action blocked another action the blocking action must be
@@ -1203,6 +1221,16 @@
gen_action_translated_name(stopped_action),
city_name(target_city));
break;
+ case ANEK_CITY_POP_LIMIT:
+ notify_player(pplayer, unit_tile(actor),
+ event, ftc_server,
+ /* TRANS: London ... Settlers ... Join City */
+ _("%s needs an improvement to grow, so "
+ "%s cannot do %s."),
+ city_name(target_city),
+ unit_name_translation(actor),
+ gen_action_translated_name(stopped_action));
+ break;
case ANEK_ACTION_BLOCKS:
notify_player(pplayer, unit_tile(actor),
event, ftc_server,
@@ -2093,12 +2121,6 @@
notify_player(pplayer, ptile, E_BAD_COMMAND, ftc_server,
_("Can't place a city there because another city is too "
"close."));
- break;
- case UAB_NO_SPACE:
- notify_player(pplayer, ptile, E_BAD_COMMAND, ftc_server,
- _("%s needs an improvement to grow, so "
- "you cannot add %s."),
- city_link(pcity), unit_link(punit));
break;
case UAB_BUILD_OK:
/* No action enabler allowed building the city. Happens when called
_______________________________________________
Freeciv-commits mailing list
[email protected]
https://mail.gna.org/listinfo/freeciv-commits