Author: sveinung
Date: Fri Sep 11 10:47:24 2015
New Revision: 29857

URL: http://svn.gna.org/viewcvs/freeciv?rev=29857&view=rev
Log:
Add the new requirement type BuildingGenus

Limit it to the local range for now.

See patch #6341

Modified:
    trunk/ai/default/daieffects.c
    trunk/client/helpdata.c
    trunk/common/fc_types.h
    trunk/common/improvement.h
    trunk/common/requirements.c
    trunk/doc/README.effects
    trunk/fc_version
    trunk/server/cityturn.c
    trunk/server/rssanity.c

Modified: trunk/ai/default/daieffects.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/ai/default/daieffects.c?rev=29857&r1=29856&r2=29857&view=diff
==============================================================================
--- trunk/ai/default/daieffects.c       (original)
+++ trunk/ai/default/daieffects.c       Fri Sep 11 10:47:24 2015
@@ -719,6 +719,7 @@
 
   case VUT_OTYPE:
   case VUT_CITYTILE:
+  case VUT_IMPR_GENUS:
     /* Can always be achieved. */
     return TRUE;
 

Modified: trunk/client/helpdata.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/helpdata.c?rev=29857&r1=29856&r2=29857&view=diff
==============================================================================
--- trunk/client/helpdata.c     (original)
+++ trunk/client/helpdata.c     Fri Sep 11 10:47:24 2015
@@ -619,6 +619,25 @@
         cat_snprintf(buf, bufsz, _("Doesn't apply to the \"%s\""
                                    " action.\n"),
                      action_name_translation(preq->source.value.action));
+      }
+      return TRUE;
+    default:
+      /* Not supported. */
+      break;
+    }
+    break;
+
+  case VUT_IMPR_GENUS:
+    switch (preq->range) {
+    case REQ_RANGE_LOCAL:
+      if (preq->present) {
+        cat_snprintf(buf, bufsz, _("Applies to \"%s\" buildings.\n"),
+                     impr_genus_id_translated_name(
+                       preq->source.value.impr_genus));
+      } else {
+        cat_snprintf(buf, bufsz, _("Doesn't apply to \"%s\" buildings.\n"),
+                     impr_genus_id_translated_name(
+                       preq->source.value.impr_genus));
       }
       return TRUE;
     default:

Modified: trunk/common/fc_types.h
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/fc_types.h?rev=29857&r1=29856&r2=29857&view=diff
==============================================================================
--- trunk/common/fc_types.h     (original)
+++ trunk/common/fc_types.h     Fri Sep 11 10:47:24 2015
@@ -309,6 +309,18 @@
 #define SPECENUM_VALUE3NAME N_("Hex")
 #include "specenum_gen.h"
 
+/* Used in the network protocol. */
+#define SPECENUM_NAME impr_genus_id
+#define SPECENUM_VALUE0 IG_GREAT_WONDER
+#define SPECENUM_VALUE0NAME "GreatWonder"
+#define SPECENUM_VALUE1 IG_SMALL_WONDER
+#define SPECENUM_VALUE1NAME "SmallWonder"
+#define SPECENUM_VALUE2 IG_IMPROVEMENT
+#define SPECENUM_VALUE2NAME "Improvement"
+#define SPECENUM_VALUE3 IG_SPECIAL
+#define SPECENUM_VALUE3NAME "Special"
+#include "specenum_gen.h"
+
 /* Sometimes we don't know (or don't care) if some requirements for effect
  * are currently fulfilled or not. This enum tells lower level functions
  * how to handle uncertain requirements.
@@ -358,6 +370,7 @@
   int diplrel;                          /* enum diplstate_type or
                                            enum diplrel_other */
   enum ustate_prop unit_state;
+  enum impr_genus_id impr_genus;
   int minmoves;
   int max_tile_units;
   int minveteran;
@@ -449,8 +462,10 @@
 #define SPECENUM_VALUE35NAME "NationGroup"
 #define SPECENUM_VALUE36 VUT_TOPO
 #define SPECENUM_VALUE36NAME "Topology"
-#define SPECENUM_VALUE37 VUT_ACTION
-#define SPECENUM_VALUE37NAME "Action"
+#define SPECENUM_VALUE37 VUT_IMPR_GENUS
+#define SPECENUM_VALUE37NAME "BuildingGenus"
+#define SPECENUM_VALUE38 VUT_ACTION
+#define SPECENUM_VALUE38NAME "Action"
 /* Keep this last. */
 #define SPECENUM_COUNT VUT_COUNT
 #include "specenum_gen.h"

Modified: trunk/common/improvement.h
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/improvement.h?rev=29857&r1=29856&r2=29857&view=diff
==============================================================================
--- trunk/common/improvement.h  (original)
+++ trunk/common/improvement.h  Fri Sep 11 10:47:24 2015
@@ -62,18 +62,6 @@
 #include "specenum_gen.h"
 
 /* Used in the network protocol. */
-#define SPECENUM_NAME impr_genus_id
-#define SPECENUM_VALUE0 IG_GREAT_WONDER
-#define SPECENUM_VALUE0NAME "GreatWonder"
-#define SPECENUM_VALUE1 IG_SMALL_WONDER
-#define SPECENUM_VALUE1NAME "SmallWonder"
-#define SPECENUM_VALUE2 IG_IMPROVEMENT
-#define SPECENUM_VALUE2NAME "Improvement"
-#define SPECENUM_VALUE3 IG_SPECIAL
-#define SPECENUM_VALUE3NAME "Special"
-#include "specenum_gen.h"
-
-/* Used in the network protocol. */
 BV_DEFINE(bv_imprs, B_LAST);
 
 /* Type of improvement. (Read from buildings.ruleset file.) */

Modified: trunk/common/requirements.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/requirements.c?rev=29857&r1=29856&r2=29857&view=diff
==============================================================================
--- trunk/common/requirements.c (original)
+++ trunk/common/requirements.c Fri Sep 11 10:47:24 2015
@@ -106,6 +106,12 @@
       return source;
     }
     break;
+  case VUT_IMPR_GENUS:
+    source.value.impr_genus = impr_genus_id_by_name(value, fc_strcasecmp);
+    if (impr_genus_id_is_valid(source.value.impr_genus)) {
+      return source;
+    }
+    break;
   case VUT_EXTRA:
     source.value.extra = extra_type_by_rule_name(value);
     if (source.value.extra != NULL) {
@@ -352,6 +358,9 @@
       return source;
     }
     break;
+  case VUT_IMPR_GENUS:
+    source.value.impr_genus = value;
+    return source;
   case VUT_EXTRA:
     source.value.extra = extra_by_number(value);
     return source;
@@ -515,6 +524,8 @@
     return style_number(source->value.style);
   case VUT_IMPROVEMENT:
     return improvement_number(source->value.building);
+  case VUT_IMPR_GENUS:
+    return source->value.impr_genus;
   case VUT_EXTRA:
     return extra_number(source->value.extra);
   case VUT_TERRAIN:
@@ -632,6 +643,7 @@
     case VUT_COUNT:
       break;
     case VUT_IMPROVEMENT:
+    case VUT_IMPR_GENUS:
     case VUT_EXTRA:
     case VUT_TERRAIN:
     case VUT_TERRFLAG:
@@ -771,6 +783,10 @@
                && req.range != REQ_RANGE_CITY
                && req.range != REQ_RANGE_PLAYER);
     break;
+  case VUT_IMPR_GENUS:
+    /* TODO: Support other ranges too. */
+    invalid = req.range != REQ_RANGE_LOCAL;
+    break;
   case VUT_IMPROVEMENT:
     /* Valid ranges depend on the building genus (wonder/improvement),
      * which might not have been loaded from the ruleset yet.
@@ -796,6 +812,7 @@
     case VUT_ADVANCE:
       invalid = survives && req.range != REQ_RANGE_WORLD;
       break;
+    case VUT_IMPR_GENUS:
     case VUT_GOVERNMENT:
     case VUT_TERRAIN:
     case VUT_UTYPE:
@@ -2564,6 +2581,12 @@
                                 req->range, req->survives,
                                 req->source.value.building);
     break;
+  case VUT_IMPR_GENUS:
+    eval = (target_building ? BOOL_TO_TRISTATE(
+                                target_building->genus
+                                == req->source.value.impr_genus)
+                            : TRI_MAYBE);
+    break;
   case VUT_EXTRA:
     eval = is_extra_type_in_range(target_tile, target_city,
                                   req->range, req->survives,
@@ -2876,6 +2899,7 @@
   case VUT_GOVERNMENT:
   case VUT_ACHIEVEMENT:
   case VUT_IMPROVEMENT:
+  case VUT_IMPR_GENUS:
   case VUT_MINSIZE:
   case VUT_MINCULTURE:
   case VUT_NATIONALITY:
@@ -2955,6 +2979,8 @@
     return psource1->value.style == psource2->value.style;
   case VUT_IMPROVEMENT:
     return psource1->value.building == psource2->value.building;
+  case VUT_IMPR_GENUS:
+    return psource1->value.impr_genus == psource2->value.impr_genus;
   case VUT_EXTRA:
     return psource1->value.extra == psource2->value.extra;
   case VUT_TERRAIN:
@@ -3057,6 +3083,8 @@
     return style_rule_name(psource->value.style);
   case VUT_IMPROVEMENT:
     return improvement_rule_name(psource->value.building);
+  case VUT_IMPR_GENUS:
+    return impr_genus_id_name(psource->value.impr_genus);
   case VUT_EXTRA:
     return extra_rule_name(psource->value.extra);
   case VUT_TERRAIN:
@@ -3175,6 +3203,11 @@
     fc_strlcat(buf, improvement_name_translation(psource->value.building),
                bufsz);
     return buf;
+  case VUT_IMPR_GENUS:
+    fc_strlcat(buf,
+               impr_genus_id_translated_name(psource->value.impr_genus),
+               bufsz);
+    return buf;
   case VUT_EXTRA:
     fc_strlcat(buf, extra_name_translation(psource->value.extra), bufsz);
     return buf;

Modified: trunk/doc/README.effects
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/doc/README.effects?rev=29857&r1=29856&r2=29857&view=diff
==============================================================================
--- trunk/doc/README.effects    (original)
+++ trunk/doc/README.effects    Fri Sep 11 10:47:24 2015
@@ -49,6 +49,7 @@
 Achievement:   World, Alliance, Team, Player
 Gov:           Player
 Building:      World, Alliance, Team, Player, Continent, Traderoute, City, 
Local
+BuildingGenus: Local
 Extra:         Local, Adjacent, CAdjacent, Traderoute, City
 BaseFlag:      Local, Adjacent, CAdjacent, Traderoute, City
 RoadFlag:      Local, Adjacent, CAdjacent, Traderoute, City

Modified: trunk/fc_version
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/fc_version?rev=29857&r1=29856&r2=29857&view=diff
==============================================================================
--- trunk/fc_version    (original)
+++ trunk/fc_version    Fri Sep 11 10:47:24 2015
@@ -54,7 +54,7 @@
 #   - Avoid adding a new mandatory capability to the development branch for
 #     as long as possible.  We want to maintain network compatibility with
 #     the stable branch for as long as possible.
-NETWORK_CAPSTRING_MANDATORY="+Freeciv.Devel-3.0-2015.Sep.10"
+NETWORK_CAPSTRING_MANDATORY="+Freeciv.Devel-3.0-2015.Sep.11"
 NETWORK_CAPSTRING_OPTIONAL=""
 
 FREECIV_DISTRIBUTOR=""

Modified: trunk/server/cityturn.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/cityturn.c?rev=29857&r1=29856&r2=29857&view=diff
==============================================================================
--- trunk/server/cityturn.c     (original)
+++ trunk/server/cityturn.c     Fri Sep 11 10:47:24 2015
@@ -1205,7 +1205,36 @@
                                           API_TYPE_STRING, "have_building");
               }
              break;
-           case VUT_GOVERNMENT:
+            case VUT_IMPR_GENUS:
+              if (preq->present) {
+                notify_player(pplayer, city_tile(pcity),
+                              E_CITY_CANTBUILD, ftc_server,
+                              _("%s can't build %s from the worklist; "
+                                "need to have %s first. Postponing..."),
+                              city_link(pcity),
+                              city_improvement_name_translation(pcity, 
ptarget),
+                              impr_genus_id_translated_name(
+                                preq->source.value.impr_genus));
+                script_server_signal_emit("building_cant_be_built", 3,
+                                          API_TYPE_BUILDING_TYPE, ptarget,
+                                          API_TYPE_CITY, pcity,
+                                          API_TYPE_STRING, 
"need_building_genus");
+              } else {
+                notify_player(pplayer, city_tile(pcity),
+                              E_CITY_CANTBUILD, ftc_server,
+                              _("%s can't build %s from the worklist; "
+                                "need to not have %s. Postponing..."),
+                              city_link(pcity),
+                              city_improvement_name_translation(pcity, 
ptarget),
+                              impr_genus_id_translated_name(
+                                preq->source.value.impr_genus));
+                script_server_signal_emit("building_cant_be_built", 3,
+                                          API_TYPE_BUILDING_TYPE, ptarget,
+                                          API_TYPE_CITY, pcity,
+                                          API_TYPE_STRING, 
"have_building_genus");
+              }
+              break;
+            case VUT_GOVERNMENT:
               if (preq->present) {
                 notify_player(pplayer, city_tile(pcity),
                               E_CITY_CANTBUILD, ftc_server,

Modified: trunk/server/rssanity.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/rssanity.c?rev=29857&r1=29856&r2=29857&view=diff
==============================================================================
--- trunk/server/rssanity.c     (original)
+++ trunk/server/rssanity.c     Fri Sep 11 10:47:24 2015
@@ -165,6 +165,7 @@
      case VUT_TERRAINALTER: /* Local range only */
      case VUT_CITYTILE:
      case VUT_STYLE:
+     case VUT_IMPR_GENUS:
        /* There can be only one requirement of these types (with current
         * range limitations)
         * Requirements might be identical, but we consider multiple


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

Reply via email to