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