From e7d091197f1a1643619eaad551d0bca3f9ee69aa Mon Sep 17 00:00:00 2001 From: MioBestWaifu <117694699+MioBestWaifu@users.noreply.github.com> Date: Tue, 11 Apr 2023 01:55:15 -0300 Subject: [PATCH] Fix issue #7792 (#9164) The issue was caused by Latin-Civs Mixed Militias being considered workers in ConstructionAutomation.addWorkerChoice() but not beign counted as one in ConstructionAutomation.workers. Now, any unit that can build improvements counts as a worker in it. In addition, the AI simulates military units that can found city, build improvements or are religious as civilians in peacetime and as soldiers in wartime. --- .../unciv/logic/automation/city/ConstructionAutomation.kt | 2 +- .../src/com/unciv/logic/automation/unit/UnitAutomation.kt | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/core/src/com/unciv/logic/automation/city/ConstructionAutomation.kt b/core/src/com/unciv/logic/automation/city/ConstructionAutomation.kt index ee43d4602a..859e7fe7a6 100644 --- a/core/src/com/unciv/logic/automation/city/ConstructionAutomation.kt +++ b/core/src/com/unciv/logic/automation/city/ConstructionAutomation.kt @@ -38,7 +38,7 @@ class ConstructionAutomation(val cityConstructions: CityConstructions){ private val civUnits = civInfo.units.getCivUnits() private val militaryUnits = civUnits.count { it.baseUnit.isMilitary() } - private val workers = civUnits.count { it.cache.hasUniqueToBuildImprovements && it.isCivilian() }.toFloat() + private val workers = civUnits.count { it.cache.hasUniqueToBuildImprovements}.toFloat() private val cities = civInfo.cities.size private val allTechsAreResearched = civInfo.gameInfo.ruleset.technologies.values .all { civInfo.tech.isResearched(it.name) || !civInfo.tech.canBeResearched(it.name)} diff --git a/core/src/com/unciv/logic/automation/unit/UnitAutomation.kt b/core/src/com/unciv/logic/automation/unit/UnitAutomation.kt index 3d436d3bc4..f3ae04d7dd 100644 --- a/core/src/com/unciv/logic/automation/unit/UnitAutomation.kt +++ b/core/src/com/unciv/logic/automation/unit/UnitAutomation.kt @@ -152,6 +152,14 @@ object UnitAutomation { unit.promotions.addPromotion(availablePromotions.toList().random().name) } + //This allows for military units with certain civilian abilities to behave as civilians in peace and soldiers in war + if ((unit.hasUnique(UniqueType.BuildImprovements) || unit.hasUnique(UniqueType.FoundCity) || + unit.hasUnique(UniqueType.ReligiousUnit) || unit.hasUnique(UniqueType.CreateWaterImprovements)) + && !unit.civ.isAtWar()){ + automateCivilianUnit(unit) + return + } + if (unit.baseUnit.isAirUnit() && unit.canIntercept()) return SpecificUnitAutomation.automateFighter(unit)