Fixed a bug where buying units with faith would not increase in cost (#5546)

This commit is contained in:
Xander Lenstra 2021-10-24 19:44:03 +02:00 committed by GitHub
parent 6ac3547b8e
commit 074676c342
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 16 deletions

View File

@ -534,19 +534,21 @@ class CityConstructions {
if (!cityInfo.civInfo.gameInfo.gameParameters.godMode) { if (!cityInfo.civInfo.gameInfo.gameParameters.godMode) {
val construction = getConstruction(constructionName) val construction = getConstruction(constructionName)
if (construction is PerpetualConstruction) return false if (construction is PerpetualConstruction) return false
val constructionCost = val constructionCost = (construction as INonPerpetualConstruction).getStatBuyCost(cityInfo, stat)
(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 if (constructionCost == null) return false // We should never end up here anyway, so things have already gone _way_ wrong
cityInfo.addStat(stat, -1 * constructionCost) cityInfo.addStat(stat, -1 * constructionCost)
if (cityInfo.civInfo.getMatchingUniques("May buy [] units for [] [] [] starting from the [] at an increasing price ([])") val conditionalState = StateForConditionals(civInfo = cityInfo.civInfo, cityInfo = cityInfo)
.any {
if ((
cityInfo.civInfo.getMatchingUniques(UniqueType.BuyUnitsIncreasingCost, conditionalState) +
cityInfo.civInfo.getMatchingUniques(UniqueType.BuyBuildingsIncreasingCost, conditionalState)
).any {
( (
construction is BaseUnit && construction.matchesFilter(it.params[0]) || construction is BaseUnit && construction.matchesFilter(it.params[0]) ||
construction is Building && construction.matchesFilter(it.params[0]) construction is Building && construction.matchesFilter(it.params[0])
) )
&& cityInfo.matchesFilter(it.params[3]) && cityInfo.matchesFilter(it.params[3])
&& cityInfo.civInfo.getEraNumber() >= cityInfo.civInfo.gameInfo.ruleSet.eras[it.params[4]]!!.eraNumber
&& it.params[2] == stat.name && it.params[2] == stat.name
} }
) { ) {

View File

@ -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), 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), 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]) <starting from the [era]>")) @Deprecated("As of 3.17.9", ReplaceWith ("May buy [baseUnitFilter] units for [amount] [stat] [cityFilter] at an increasing price ([amount]) <starting from the [era]>"))
BuyUnitsIncreasingCostEra("May buy [baseUnitFilter] units for [amount] [stat] [cityFilter] starting from the [era] at an increasing price ([amount])", UniqueTarget.Global), 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), BuyUnitsByProductionCost("May buy [baseUnitFilter] units with [stat] for [amount] times their normal Production cost", UniqueTarget.FollowerBelief, UniqueTarget.Global),

View File

@ -319,9 +319,8 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction {
) )
} }
) )
+ (cityInfo.getMatchingUniques( + (cityInfo.getMatchingUniques(UniqueType.BuyUnitsByProductionCost, conditionalState)
UniqueType.BuyUnitsByProductionCost, conditionalState .filter {
).filter {
it.params[1] == stat.name it.params[1] == stat.name
&& matchesFilter(it.params[0]) && matchesFilter(it.params[0])
}.map { }.map {