Author: cazfi
Date: Mon May 15 20:53:26 2017
New Revision: 35602

URL: http://svn.gna.org/viewcvs/freeciv?rev=35602&view=rev
Log:
Add ruleset capabilities for !ruleset_locked scenarios to use

See hrm Feature #659482

Modified:
    branches/S3_0/common/game.c
    branches/S3_0/common/game.h
    branches/S3_0/data/alien/game.ruleset
    branches/S3_0/data/civ1/game.ruleset
    branches/S3_0/data/civ2/game.ruleset
    branches/S3_0/data/civ2civ3/game.ruleset
    branches/S3_0/data/classic/game.ruleset
    branches/S3_0/data/experimental/game.ruleset
    branches/S3_0/data/multiplayer/game.ruleset
    branches/S3_0/data/sandbox/game.ruleset
    branches/S3_0/data/stub/game.ruleset
    branches/S3_0/data/webperimental/game.ruleset
    branches/S3_0/server/ruleset.c
    branches/S3_0/server/savegame3.c
    branches/S3_0/tools/ruleutil/rulesave.c

Modified: branches/S3_0/common/game.c
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S3_0/common/game.c?rev=35602&r1=35601&r2=35602&view=diff
==============================================================================
--- branches/S3_0/common/game.c (original)
+++ branches/S3_0/common/game.c Mon May 15 20:53:26 2017
@@ -254,6 +254,7 @@
 
   game.ruleset_summary       = NULL;
   game.ruleset_description   = NULL;
+  game.ruleset_capabilities  = NULL;
 
   /* The info packet. */
   game.info.aifill           = GAME_DEFAULT_AIFILL;
@@ -650,6 +651,11 @@
     free(game.ruleset_description);
     game.ruleset_description = NULL;
   }
+
+  if (game.ruleset_capabilities != NULL) {
+    free(game.ruleset_capabilities);
+    game.ruleset_capabilities = NULL;
+  }
 }
 
 /***************************************************************

Modified: branches/S3_0/common/game.h
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S3_0/common/game.h?rev=35602&r1=35601&r2=35602&view=diff
==============================================================================
--- branches/S3_0/common/game.h (original)
+++ branches/S3_0/common/game.h Mon May 15 20:53:26 2017
@@ -82,6 +82,7 @@
   struct packet_ruleset_control control;
   char *ruleset_summary;
   char *ruleset_description;
+  char *ruleset_capabilities;
   struct packet_scenario_info scenario;
   struct packet_scenario_description scenario_desc;
   struct packet_game_info info;

Modified: branches/S3_0/data/alien/game.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S3_0/data/alien/game.ruleset?rev=35602&r1=35601&r2=35602&view=diff
==============================================================================
--- branches/S3_0/data/alien/game.ruleset       (original)
+++ branches/S3_0/data/alien/game.ruleset       Mon May 15 20:53:26 2017
@@ -42,6 +42,9 @@
 ; Detailed description
 ; When updating this, update also desciption_file in [ruledit] section to match
 description = *alien/README.alien*
+
+; What capabilities ruleset provides for the scenarios.
+capabilities = ""
 
 [options]
 global_init_techs=""

Modified: branches/S3_0/data/civ1/game.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S3_0/data/civ1/game.ruleset?rev=35602&r1=35601&r2=35602&view=diff
==============================================================================
--- branches/S3_0/data/civ1/game.ruleset        (original)
+++ branches/S3_0/data/civ1/game.ruleset        Mon May 15 20:53:26 2017
@@ -42,6 +42,9 @@
 ; Detailed description
 ; When updating this, update also desciption_file in [ruledit] section to match
 ; description = ""
+
+; What capabilities ruleset provides for the scenarios.
+capabilities = ""
 
 [options]
 global_init_techs=""

Modified: branches/S3_0/data/civ2/game.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S3_0/data/civ2/game.ruleset?rev=35602&r1=35601&r2=35602&view=diff
==============================================================================
--- branches/S3_0/data/civ2/game.ruleset        (original)
+++ branches/S3_0/data/civ2/game.ruleset        Mon May 15 20:53:26 2017
@@ -38,6 +38,10 @@
 ; Detailed description
 ; When updating this, update also desciption_file in [ruledit] section to match
 ; description = ""
+
+; What capabilities ruleset provides for the scenarios.
+; mimimum-default-sets - Default units, terrains, buildings, etc
+capabilities = "minimum-default-sets"
 
 [options]
 global_init_techs=""

Modified: branches/S3_0/data/civ2civ3/game.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S3_0/data/civ2civ3/game.ruleset?rev=35602&r1=35601&r2=35602&view=diff
==============================================================================
--- branches/S3_0/data/civ2civ3/game.ruleset    (original)
+++ branches/S3_0/data/civ2civ3/game.ruleset    Mon May 15 20:53:26 2017
@@ -44,6 +44,10 @@
 ; Detailed description
 ; When updating this, update also desciption_file in [ruledit] section to match
 description = *civ2civ3/README.civ2civ3*
+
+; What capabilities ruleset provides for the scenarios.
+; mimimum-default-sets - Default units, terrains, buildings, etc
+capabilities = "minimum-default-sets"
 
 [options]
 global_init_techs=""

Modified: branches/S3_0/data/classic/game.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S3_0/data/classic/game.ruleset?rev=35602&r1=35601&r2=35602&view=diff
==============================================================================
--- branches/S3_0/data/classic/game.ruleset     (original)
+++ branches/S3_0/data/classic/game.ruleset     Mon May 15 20:53:26 2017
@@ -37,6 +37,10 @@
 ; Detailed description
 ; When updating this, update also desciption_file in [ruledit] section to match
 description = *classic/README.classic*
+
+; What capabilities ruleset provides for the scenarios.
+; mimimum-default-sets - Default units, terrains, buildings, etc
+capabilities = "minimum-default-sets"
 
 [options]
 global_init_techs=""

Modified: branches/S3_0/data/experimental/game.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S3_0/data/experimental/game.ruleset?rev=35602&r1=35601&r2=35602&view=diff
==============================================================================
--- branches/S3_0/data/experimental/game.ruleset        (original)
+++ branches/S3_0/data/experimental/game.ruleset        Mon May 15 20:53:26 2017
@@ -42,6 +42,10 @@
 ; Detailed description
 ; When updating this, update also desciption_file in [ruledit] section to match
 description = *experimental/README.experimental*
+
+; What capabilities ruleset provides for the scenarios.
+; mimimum-default-sets - Default units, terrains, buildings, etc
+capabilities = "minimum-default-sets"
 
 [options]
 global_init_techs=""

Modified: branches/S3_0/data/multiplayer/game.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S3_0/data/multiplayer/game.ruleset?rev=35602&r1=35601&r2=35602&view=diff
==============================================================================
--- branches/S3_0/data/multiplayer/game.ruleset (original)
+++ branches/S3_0/data/multiplayer/game.ruleset Mon May 15 20:53:26 2017
@@ -40,6 +40,10 @@
 ; Detailed description
 ; When updating this, update also desciption_file in [ruledit] section to match
 description = *multiplayer/README.multiplayer*
+
+; What capabilities ruleset provides for the scenarios.
+; mimimum-default-sets - Default units, terrains, buildings, etc
+capabilities = "minimum-default-sets"
 
 [options]
 global_init_techs=""

Modified: branches/S3_0/data/sandbox/game.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S3_0/data/sandbox/game.ruleset?rev=35602&r1=35601&r2=35602&view=diff
==============================================================================
--- branches/S3_0/data/sandbox/game.ruleset     (original)
+++ branches/S3_0/data/sandbox/game.ruleset     Mon May 15 20:53:26 2017
@@ -41,6 +41,10 @@
 ; Detailed description
 ; When updating this, update also desciption_file in [ruledit] section to match
 description = *sandbox/README.sandbox*
+
+; What capabilities ruleset provides for the scenarios.
+; mimimum-default-sets - Default units, terrains, buildings, etc
+capabilities = "minimum-default-sets"
 
 [options]
 global_init_techs=""

Modified: branches/S3_0/data/stub/game.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S3_0/data/stub/game.ruleset?rev=35602&r1=35601&r2=35602&view=diff
==============================================================================
--- branches/S3_0/data/stub/game.ruleset        (original)
+++ branches/S3_0/data/stub/game.ruleset        Mon May 15 20:53:26 2017
@@ -29,6 +29,9 @@
 ; Detailed description
 ; When updating this, update also desciption_file in [ruledit] section to match
 ; description = ""
+
+; What capabilities ruleset provides for the scenarios.
+capabilities = ""
 
 [options]
 global_init_techs=""

Modified: branches/S3_0/data/webperimental/game.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S3_0/data/webperimental/game.ruleset?rev=35602&r1=35601&r2=35602&view=diff
==============================================================================
--- branches/S3_0/data/webperimental/game.ruleset       (original)
+++ branches/S3_0/data/webperimental/game.ruleset       Mon May 15 20:53:26 2017
@@ -109,6 +109,10 @@
 ; When updating this, update also desciption_file in [ruledit] section to match
 ; description = ""
 
+; What capabilities ruleset provides for the scenarios.
+; mimimum-default-sets - Default units, terrains, buildings, etc
+capabilities = "minimum-default-sets"
+
 [options]
 global_init_techs=""
 global_init_buildings="Palace"

Modified: branches/S3_0/server/ruleset.c
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S3_0/server/ruleset.c?rev=35602&r1=35601&r2=35602&view=diff
==============================================================================
--- branches/S3_0/server/ruleset.c      (original)
+++ branches/S3_0/server/ruleset.c      Mon May 15 20:53:26 2017
@@ -5594,6 +5594,17 @@
       game.ruleset_description = NULL;
     }
     game.control.desc_length = 0;
+  }
+
+  pref_text = secfile_lookup_str_default(file, "", "about.capabilities");
+  if (pref_text[0] != '\0') {
+    int len = strlen(pref_text);
+
+    game.ruleset_capabilities = fc_malloc(len + 1);
+    fc_strlcpy(game.ruleset_capabilities, pref_text, len +1);
+  } else {
+    game.ruleset_capabilities = fc_malloc(1);
+    game.ruleset_capabilities[0] = '\0';
   }
 
   /* section: options */

Modified: branches/S3_0/server/savegame3.c
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S3_0/server/savegame3.c?rev=35602&r1=35601&r2=35602&view=diff
==============================================================================
--- branches/S3_0/server/savegame3.c    (original)
+++ branches/S3_0/server/savegame3.c    Mon May 15 20:53:26 2017
@@ -1317,6 +1317,21 @@
     sg_failure_ret(FALSE, "Failed to load ruleset");
   }
 
+  if (game.scenario.is_scenario && !game.scenario.ruleset_locked) {
+    const char *req_caps;
+    req_caps = secfile_lookup_str_default(loading->file, "",
+                                          "scenario.ruleset_caps");
+
+    if (!has_capabilities(req_caps, game.ruleset_capabilities)) {
+      /* Current ruleset lacks required capabilities. */
+      log_normal(_("Scenario requires ruleset capabilities: %s"), req_caps);
+      log_normal(_("Ruleset has capabilities: %s"), game.ruleset_capabilities);
+      log_error(_("Current ruleset not compatible with the scenario."));
+      sg_success = FALSE;
+      return;
+    }
+  }
+
   /* This is in the savegame only if the game has been started before 
savegame3.c time,
    * and in that case it's TRUE. If it's missing, it's to be considered FALSE. 
*/
   game.server.last_updated_year = secfile_lookup_bool_default(loading->file, 
FALSE,

Modified: branches/S3_0/tools/ruleutil/rulesave.c
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S3_0/tools/ruleutil/rulesave.c?rev=35602&r1=35601&r2=35602&view=diff
==============================================================================
--- branches/S3_0/tools/ruleutil/rulesave.c     (original)
+++ branches/S3_0/tools/ruleutil/rulesave.c     Mon May 15 20:53:26 2017
@@ -857,6 +857,13 @@
       secfile_insert_filereference(sfile, game.server.ruledit.description_file,
                                    "about.description");
     }
+  }
+
+  if (game.ruleset_capabilities != NULL) {
+    secfile_insert_str(sfile, game.ruleset_capabilities,
+                       "about.capabilities");
+  } else {
+    secfile_insert_str(sfile, "", "about.capabilities");
   }
 
   save_tech_list(sfile, game.rgame.global_init_techs,


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

Reply via email to