Author: cazfi Date: Sun Oct 25 09:06:23 2015 New Revision: 30206 URL: http://svn.gna.org/viewcvs/freeciv?rev=30206&view=rev Log: Added requirement type MinTechs
See patch #6460 Modified: trunk/ai/default/daieffects.c trunk/client/helpdata.c trunk/common/fc_types.h trunk/common/game.c trunk/common/packets.def trunk/common/requirements.c trunk/common/research.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=30206&r1=30205&r2=30206&view=diff ============================================================================== --- trunk/ai/default/daieffects.c (original) +++ trunk/ai/default/daieffects.c Sun Oct 25 09:06:23 2015 @@ -704,6 +704,7 @@ case VUT_TECHFLAG: case VUT_ACHIEVEMENT: case VUT_MINCULTURE: + case VUT_MINTECHS: /* No way to remove once present. */ return preq->present; Modified: trunk/client/helpdata.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/client/helpdata.c?rev=30206&r1=30205&r2=30206&view=diff ============================================================================== --- trunk/client/helpdata.c (original) +++ trunk/client/helpdata.c Sun Oct 25 09:06:23 2015 @@ -2566,6 +2566,44 @@ } return TRUE; + case VUT_MINTECHS: + switch (preq->range) { + case REQ_RANGE_WORLD: + if (preq->present) { + cat_snprintf(buf, bufsz, + _("Requires %d techs to be known in the world.\n"), + preq->source.value.min_techs); + } else { + cat_snprintf(buf, bufsz, + _("Prevented when %d techs are known in the world.\n"), + preq->source.value.min_techs); + } + return TRUE; + case REQ_RANGE_PLAYER: + if (preq->present) { + cat_snprintf(buf, bufsz, + _("Requires player to knoe %d techs.\n"), + preq->source.value.min_techs); + } else { + cat_snprintf(buf, bufsz, + _("Prevented when player knows %d techs.\n"), + preq->source.value.min_techs); + } + return TRUE; + case REQ_RANGE_LOCAL: + case REQ_RANGE_CADJACENT: + case REQ_RANGE_ADJACENT: + case REQ_RANGE_CITY: + case REQ_RANGE_TRADEROUTE: + case REQ_RANGE_CONTINENT: + case REQ_RANGE_TEAM: + case REQ_RANGE_ALLIANCE: + case REQ_RANGE_COUNT: + /* Not supported. */ + break; + } + break; + case VUT_TERRAINALTER: switch (preq->range) { case REQ_RANGE_LOCAL: Modified: trunk/common/fc_types.h URL: http://svn.gna.org/viewcvs/freeciv/trunk/common/fc_types.h?rev=30206&r1=30205&r2=30206&view=diff ============================================================================== --- trunk/common/fc_types.h (original) +++ trunk/common/fc_types.h Sun Oct 25 09:06:23 2015 @@ -381,6 +381,7 @@ int minveteran; int min_hit_points; int age; + int min_techs; enum topo_flag topo_property; } universals_u; @@ -471,6 +472,8 @@ #define SPECENUM_VALUE37NAME "BuildingGenus" #define SPECENUM_VALUE38 VUT_ACTION #define SPECENUM_VALUE38NAME "Action" +#define SPECENUM_VALUE39 VUT_MINTECHS +#define SPECENUM_VALUE39NAME "MinTechs" /* Keep this last. */ #define SPECENUM_COUNT VUT_COUNT #include "specenum_gen.h" Modified: trunk/common/game.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/common/game.c?rev=30206&r1=30205&r2=30206&view=diff ============================================================================== --- trunk/common/game.c (original) +++ trunk/common/game.c Sun Oct 25 09:06:23 2015 @@ -290,6 +290,7 @@ game.info.fogofwar = GAME_DEFAULT_FOGOFWAR; game.info.foodbox = GAME_DEFAULT_FOODBOX; game.info.fulltradesize = GAME_DEFAULT_FULLTRADESIZE; + game.info.global_advance_count = 0; for (i = 0; i < A_LAST; i++) { /* game.num_tech_types = 0 here */ game.info.global_advances[i] = FALSE; Modified: trunk/common/packets.def URL: http://svn.gna.org/viewcvs/freeciv/trunk/common/packets.def?rev=30206&r1=30205&r2=30206&view=diff ============================================================================== --- trunk/common/packets.def (original) +++ trunk/common/packets.def Sun Oct 25 09:06:23 2015 @@ -464,6 +464,7 @@ UINT8 forced_science; UINT8 fulltradesize; /* True if at least one civilization has researched a tech */ + UINT16 global_advance_count; BOOL global_advances[A_LAST]; diff BOOL global_warming; UINT32 globalwarming; Modified: trunk/common/requirements.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/common/requirements.c?rev=30206&r1=30205&r2=30206&view=diff ============================================================================== --- trunk/common/requirements.c (original) +++ trunk/common/requirements.c Sun Oct 25 09:06:23 2015 @@ -216,6 +216,11 @@ return source; } break; + case VUT_MINTECHS: + source.value.min_techs = atoi(value); + if (source.value.min_techs > 0) { + return source; + } case VUT_ACTION: source.value.action = action_by_rule_name(value); if (source.value.action != NULL) { @@ -435,6 +440,9 @@ return source; case VUT_AGE: source.value.age = value; + return source; + case VUT_MINTECHS: + source.value.min_techs = value; return source; case VUT_ACTION: source.value.action = action_by_number(value); @@ -560,6 +568,8 @@ return source->value.min_hit_points; case VUT_AGE: return source->value.age; + case VUT_MINTECHS: + return source->value.min_techs; case VUT_ACTION: return action_number(source->value.action); case VUT_OTYPE: @@ -686,6 +696,7 @@ break; case VUT_MINYEAR: case VUT_TOPO: + case VUT_MINTECHS: req.range = REQ_RANGE_WORLD; break; } @@ -716,6 +727,7 @@ case VUT_ADVANCE: case VUT_TECHFLAG: case VUT_ACHIEVEMENT: + case VUT_MINTECHS: invalid = (req.range < REQ_RANGE_PLAYER); break; case VUT_GOVERNMENT: @@ -847,6 +859,7 @@ case VUT_STYLE: case VUT_DIPLREL: case VUT_MAXTILEUNITS: + case VUT_MINTECHS: /* Most requirements don't support 'survives'. */ invalid = survives; break; @@ -2767,6 +2780,24 @@ default: eval = TRI_MAYBE; break; + } + break; + case VUT_MINTECHS: + switch (req->range) { + case REQ_RANGE_WORLD: + /* "None" does not count */ + eval = ((game.info.global_advance_count - 1) >= req->source.value.min_techs); + break; + case REQ_RANGE_PLAYER: + if (target_player == NULL) { + eval = TRI_MAYBE; + } else { + /* "None" does not count */ + eval = ((research_get(target_player)->techs_researched - 1) >= req->source.value.min_techs); + } + break; + default: + eval = TRI_MAYBE; } break; case VUT_ACTION: @@ -2950,6 +2981,7 @@ case VUT_IMPR_GENUS: case VUT_MINSIZE: case VUT_MINCULTURE: + case VUT_MINTECHS: case VUT_NATIONALITY: case VUT_DIPLREL: case VUT_MAXTILEUNITS: @@ -3063,6 +3095,8 @@ return psource1->value.min_hit_points == psource2->value.min_hit_points; case VUT_AGE: return psource1->value.age == psource2->value.age; + case VUT_MINTECHS: + return psource1->value.min_techs == psource2->value.min_techs; case VUT_ACTION: return (action_number(psource1->value.action) == action_number(psource2->value.action)); @@ -3175,6 +3209,10 @@ fc_snprintf(buffer, sizeof(buffer), "%d", psource->value.age); return buffer; + case VUT_MINTECHS: + fc_snprintf(buffer, sizeof(buffer), "%d", psource->value.min_techs); + + return buffer; case VUT_ACTION: return action_rule_name(psource->value.action); case VUT_OTYPE: @@ -3348,6 +3386,10 @@ cat_snprintf(buf, bufsz, _("Age %d"), psource->value.age); return buf; + case VUT_MINTECHS: + cat_snprintf(buf, bufsz, _("%d Techs"), + psource->value.min_techs); + return buf; case VUT_ACTION: fc_strlcat(buf, action_name_translation(psource->value.action), bufsz); Modified: trunk/common/research.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/common/research.c?rev=30206&r1=30205&r2=30206&view=diff ============================================================================== --- trunk/common/research.c (original) +++ trunk/common/research.c Sun Oct 25 09:06:23 2015 @@ -641,8 +641,12 @@ presearch->inventions[tech].state = value; if (value == TECH_KNOWN) { - game.info.global_advances[tech] = TRUE; - } + if (!game.info.global_advances[tech]) { + game.info.global_advances[tech] = TRUE; + game.info.global_advance_count++; + } + } + return old; } Modified: trunk/doc/README.effects URL: http://svn.gna.org/viewcvs/freeciv/trunk/doc/README.effects?rev=30206&r1=30205&r2=30206&view=diff ============================================================================== --- trunk/doc/README.effects (original) +++ trunk/doc/README.effects Sun Oct 25 09:06:23 2015 @@ -46,6 +46,7 @@ Tech: World, Alliance, Team, Player TechFlag: World, Alliance, Team, Player +MinTechs: World, Player Achievement: World, Alliance, Team, Player Gov: Player Building: World, Alliance, Team, Player, Continent, Traderoute, City, Local Modified: trunk/fc_version URL: http://svn.gna.org/viewcvs/freeciv/trunk/fc_version?rev=30206&r1=30205&r2=30206&view=diff ============================================================================== --- trunk/fc_version (original) +++ trunk/fc_version Sun Oct 25 09:06:23 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.Oct.14" +NETWORK_CAPSTRING_MANDATORY="+Freeciv.Devel-3.0-2015.Oct.25" NETWORK_CAPSTRING_OPTIONAL="" FREECIV_DISTRIBUTOR="" Modified: trunk/server/cityturn.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/server/cityturn.c?rev=30206&r1=30205&r2=30206&view=diff ============================================================================== --- trunk/server/cityturn.c (original) +++ trunk/server/cityturn.c Sun Oct 25 09:06:23 2015 @@ -1563,6 +1563,23 @@ success = FALSE; } break; + case VUT_MINTECHS: + if (preq->present) { + notify_player(pplayer, city_tile(pcity), + E_CITY_CANTBUILD, ftc_server, + _("%s can't build %s from the worklist; " + "%d techs must be known. Postponing..."), + city_link(pcity), + city_improvement_name_translation(pcity, ptarget), + preq->source.value.min_techs); + script_server_signal_emit("building_cant_be_built", 3, + API_TYPE_BUILDING_TYPE, ptarget, + API_TYPE_CITY, pcity, + API_TYPE_STRING, "need_mintechs"); + } else { + success = FALSE; + } + break; case VUT_MAXTILEUNITS: if (preq->present) { notify_player(pplayer, city_tile(pcity), Modified: trunk/server/rssanity.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/server/rssanity.c?rev=30206&r1=30205&r2=30206&view=diff ============================================================================== --- trunk/server/rssanity.c (original) +++ trunk/server/rssanity.c Sun Oct 25 09:06:23 2015 @@ -215,6 +215,16 @@ case VUT_AGE: /* There can be age of the city, unit, and player */ if (rc > 3) { + log_error("%s: Requirement list has more %s requirements than " + "can ever be fullfilled.", list_for, + universal_type_rule_name(&preq->source)); + return FALSE; + } + break; + + case VUT_MINTECHS: + /* At ranges 'Player' and 'World' */ + if (rc > 2) { log_error("%s: Requirement list has more %s requirements than " "can ever be fullfilled.", list_for, universal_type_rule_name(&preq->source)); _______________________________________________ Freeciv-commits mailing list Freeciv-commits@gna.org https://mail.gna.org/listinfo/freeciv-commits