From e510bf4929eb2cff989ac420fd3e80b29d0a3c94 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Mon, 1 Aug 2022 19:42:59 +0300 Subject: [PATCH] Resolved error where missionary cost was determined by Capital, and not by cities it could actually be constructed in --- buildSrc/src/main/kotlin/BuildConfig.kt | 2 +- .../automation/civilization/ReligionAutomation.kt | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/buildSrc/src/main/kotlin/BuildConfig.kt b/buildSrc/src/main/kotlin/BuildConfig.kt index 1d23df7709..6f517cf9c2 100644 --- a/buildSrc/src/main/kotlin/BuildConfig.kt +++ b/buildSrc/src/main/kotlin/BuildConfig.kt @@ -4,7 +4,7 @@ object BuildConfig { const val kotlinVersion = "1.7.0" const val appName = "Unciv" const val appCodeNumber = 743 - const val appVersion = "4.1.22" + const val appVersion = "4.2.0" const val gdxVersion = "1.11.0" const val roboVMVersion = "2.3.1" diff --git a/core/src/com/unciv/logic/automation/civilization/ReligionAutomation.kt b/core/src/com/unciv/logic/automation/civilization/ReligionAutomation.kt index 19559162bf..f6984923d0 100644 --- a/core/src/com/unciv/logic/automation/civilization/ReligionAutomation.kt +++ b/core/src/com/unciv/logic/automation/civilization/ReligionAutomation.kt @@ -105,12 +105,15 @@ object ReligionAutomation { if (civInfo.religionManager.religionState < ReligionState.Religion) return var missionaries = civInfo.gameInfo.ruleSet.units.values.filter { unit -> unit.getMatchingUniques(UniqueType.CanActionSeveralTimes).filter { it.params[0] == Constants.spreadReligion }.any() - }.map { it.name } - missionaries = missionaries.map { civInfo.getEquivalentUnit(it).name } + } + missionaries = missionaries.map { civInfo.getEquivalentUnit(it) } + val missionaryConstruction = missionaries - .map { civInfo.cities.first().cityConstructions.getConstruction(it) as INonPerpetualConstruction } - .filter { unit -> civInfo.cities.any { unit.isPurchasable(it.cityConstructions) && unit.canBePurchasedWithStat(it, Stat.Faith) } } - .minByOrNull { it.getStatBuyCost(civInfo.getCapital()!!, Stat.Faith)!! } + // Get list of cities it can be built in + .associateBy({unit -> unit}) { unit -> civInfo.cities.filter { unit.isPurchasable(it.cityConstructions) && unit.canBePurchasedWithStat(it, Stat.Faith) } } + .filter { it.value.isNotEmpty() } + // And from that list determine the cheapest price + .minByOrNull { it.value.minOf { city -> it.key.getStatBuyCost(city, Stat.Faith)!! }}?.key ?: return