diff --git a/android/assets/jsons/Civ V - Gods & Kings/Events.json b/android/assets/jsons/Civ V - Gods & Kings/Events.json index 3a23e19b0c..8c62bae283 100644 --- a/android/assets/jsons/Civ V - Gods & Kings/Events.json +++ b/android/assets/jsons/Civ V - Gods & Kings/Events.json @@ -170,7 +170,7 @@ {"text":"Select an air unit → Select another city within range → Move the unit to the other city."}, ], "uniques": [ - "Only available ", + "Only available ", "Unavailable " ] }, diff --git a/core/src/com/unciv/models/ruleset/unique/Countables.kt b/core/src/com/unciv/models/ruleset/unique/Countables.kt index 7440239c31..4e79f24c6e 100644 --- a/core/src/com/unciv/models/ruleset/unique/Countables.kt +++ b/core/src/com/unciv/models/ruleset/unique/Countables.kt @@ -1,6 +1,8 @@ package com.unciv.models.ruleset.unique import com.unciv.models.stats.Stat +import com.unciv.models.translations.equalsPlaceholderText +import com.unciv.models.translations.getPlaceholderParameters object Countables { @@ -18,22 +20,22 @@ object Countables { val civInfo = stateForConditionals.relevantCiv ?: return null if (countable == "Cities") return civInfo.cities.size + + val placeholderParameters = countable.getPlaceholderParameters() + if (countable.equalsPlaceholderText("[] Cities")) + return civInfo.cities.count { it.matchesFilter(placeholderParameters[0]) } + if (countable == "Units") return civInfo.units.getCivUnitsSize() - if (countable == "Air units") return civInfo.units.getCivUnits().count { it.baseUnit.movesLikeAirUnits() } + if (countable.equalsPlaceholderText("[] Units")) + return civInfo.units.getCivUnits().count { it.matchesFilter(placeholderParameters[0]) } + + if (countable.equalsPlaceholderText("[] Buildings")) + return civInfo.cities.sumOf { it.cityConstructions.getBuiltBuildings() + .count { it.matchesFilter(placeholderParameters[0]) } } if (gameInfo.ruleset.tileResources.containsKey(countable)) return stateForConditionals.getResourceAmount(countable) - val unitTypeName = countable.removeSuffix(" units").removeSurrounding("[", "]") - if (unitTypeName in gameInfo.ruleset.unitTypes) - return civInfo.units.getCivUnits().count { it.type.name == unitTypeName } - - if (countable in gameInfo.ruleset.units) - return civInfo.units.getCivUnits().count { it.name == countable } - - if (countable in gameInfo.ruleset.buildings) - return civInfo.cities.count { it.cityConstructions.containsBuildingOrEquivalent(countable) } - return null } } diff --git a/docs/Modders/Unique-parameters.md b/docs/Modders/Unique-parameters.md index df2d04479f..7f60503634 100644 --- a/docs/Modders/Unique-parameters.md +++ b/docs/Modders/Unique-parameters.md @@ -287,11 +287,11 @@ Allowed values are: Indicates *something that can be counted*, used both for comparisons and for multiplying uniques Allowed values: + - `year`, `turns` -- `Cities`, `Units`, `Air units` - these count your total number -- Unit name (counts your existing units) -- ` units` (e.g. `Mounted units`) - counts your units by their type (this is not a filter, use the unitType verbatim) -- Building name (counts your existing buildings) +- `Cities`, `[cityFilter] Cities` +- `Units`, `[mapUnitFilter] Units` +- `[buildingFilter] Buildings` - Stat name - gets the stat *reserve*, not the amount per turn (can be city stats or civilization stats, depending on where the unique is used) - Resource name (can be city stats or civilization stats, depending on where the unique is used)