diff --git a/core/src/com/unciv/logic/city/CityConstructions.kt b/core/src/com/unciv/logic/city/CityConstructions.kt index 8fd7275479..dc2f3fb5f8 100644 --- a/core/src/com/unciv/logic/city/CityConstructions.kt +++ b/core/src/com/unciv/logic/city/CityConstructions.kt @@ -534,19 +534,21 @@ class CityConstructions { if (!cityInfo.civInfo.gameInfo.gameParameters.godMode) { val construction = getConstruction(constructionName) if (construction is PerpetualConstruction) return false - val constructionCost = - (construction as INonPerpetualConstruction).getStatBuyCost(cityInfo, stat) + val constructionCost = (construction as INonPerpetualConstruction).getStatBuyCost(cityInfo, stat) if (constructionCost == null) return false // We should never end up here anyway, so things have already gone _way_ wrong cityInfo.addStat(stat, -1 * constructionCost) - if (cityInfo.civInfo.getMatchingUniques("May buy [] units for [] [] [] starting from the [] at an increasing price ([])") - .any { + val conditionalState = StateForConditionals(civInfo = cityInfo.civInfo, cityInfo = cityInfo) + + if (( + cityInfo.civInfo.getMatchingUniques(UniqueType.BuyUnitsIncreasingCost, conditionalState) + + cityInfo.civInfo.getMatchingUniques(UniqueType.BuyBuildingsIncreasingCost, conditionalState) + ).any { ( construction is BaseUnit && construction.matchesFilter(it.params[0]) || construction is Building && construction.matchesFilter(it.params[0]) ) && cityInfo.matchesFilter(it.params[3]) - && cityInfo.civInfo.getEraNumber() >= cityInfo.civInfo.gameInfo.ruleSet.eras[it.params[4]]!!.eraNumber && it.params[2] == stat.name } ) { diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index c216293c26..e1f69051ac 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -151,6 +151,7 @@ enum class UniqueType(val text:String, vararg targets: UniqueTarget) { FreeExtraAnyBeliefs("May choose [amount] additional belief(s) of any type when [foundingOrEnhancing] a religion", UniqueTarget.Global), BuyUnitsIncreasingCost("May buy [baseUnitFilter] units for [amount] [stat] [cityFilter] at an increasing price ([amount])", UniqueTarget.Global), + BuyBuildingsIncreasingCost("May buy [buildingFilter] buildings for [amount] [stat] [cityFilter] at an increasing price ([amount])", UniqueTarget.Global), @Deprecated("As of 3.17.9", ReplaceWith ("May buy [baseUnitFilter] units for [amount] [stat] [cityFilter] at an increasing price ([amount]) ")) BuyUnitsIncreasingCostEra("May buy [baseUnitFilter] units for [amount] [stat] [cityFilter] starting from the [era] at an increasing price ([amount])", UniqueTarget.Global), BuyUnitsByProductionCost("May buy [baseUnitFilter] units with [stat] for [amount] times their normal Production cost", UniqueTarget.FollowerBelief, UniqueTarget.Global), diff --git a/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt b/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt index e75439eb12..43a553a44d 100644 --- a/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt +++ b/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt @@ -319,9 +319,8 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction { ) } ) - + (cityInfo.getMatchingUniques( - UniqueType.BuyUnitsByProductionCost, conditionalState - ).filter { + + (cityInfo.getMatchingUniques(UniqueType.BuyUnitsByProductionCost, conditionalState) + .filter { it.params[1] == stat.name && matchesFilter(it.params[0]) }.map { @@ -481,7 +480,7 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction { if (unit.matchesFilter(unique.params[0])) XP += unique.params[1].toInt() } - unit.promotions.XP = XP + unit.promotions.XP = XP for (unique in cityConstructions.cityInfo.getMatchingUniques("All newly-trained [] units [] receive the [] promotion") .filter { cityConstructions.cityInfo.matchesFilter(it.params[1]) }) { @@ -490,13 +489,13 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction { if (unit.matchesFilter(filter) || ( - filter == "relevant" - && civInfo.gameInfo.ruleSet.unitPromotions.values - .any { - it.name == promotion - && unit.type.name in it.unitTypes - } - ) + filter == "relevant" + && civInfo.gameInfo.ruleSet.unitPromotions.values + .any { + it.name == promotion + && unit.type.name in it.unitTypes + } + ) ) { unit.promotions.addPromotion(promotion, isFree = true) }