From 03ddd3c410d85ac5ef7315ac618e0565b5e5ecef Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Mon, 28 Dec 2020 22:23:20 +0200 Subject: [PATCH] Resolved #3331 - resources for city-state quests are taken from resources on the map, to avoid unfinishable quests --- .../src/com/unciv/logic/civilization/CivilizationInfo.kt | 4 ---- core/src/com/unciv/logic/civilization/QuestManager.kt | 9 ++++++--- core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt | 2 +- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt index 5046048507..4287b45575 100644 --- a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt +++ b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt @@ -190,10 +190,6 @@ class CivilizationInfo { return newResourceSupplyList } - fun getViewableResources(): List = - gameInfo.ruleSet.tileResources.values - .filter { it.revealedBy == null || tech.isResearched(it.revealedBy!!) } - fun isCapitalConnectedToCity(city: CityInfo): Boolean = citiesConnectedToCapitalToMediums.keys.contains(city) diff --git a/core/src/com/unciv/logic/civilization/QuestManager.kt b/core/src/com/unciv/logic/civilization/QuestManager.kt index 942768f3c2..3ddca6535e 100644 --- a/core/src/com/unciv/logic/civilization/QuestManager.kt +++ b/core/src/com/unciv/logic/civilization/QuestManager.kt @@ -12,7 +12,6 @@ import com.unciv.models.ruleset.QuestName import com.unciv.models.ruleset.tile.ResourceType import com.unciv.models.ruleset.tile.TileResource import com.unciv.models.ruleset.unit.BaseUnit -import com.unciv.models.translations.equalsPlaceholderText import com.unciv.models.translations.fillPlaceholders import com.unciv.ui.utils.randomWeighted import kotlin.math.max @@ -453,11 +452,15 @@ class QuestManager { val ownedByCityStateResources = civInfo.detailedCivResources.map { it.resource } val ownedByMajorResources = challenger.detailedCivResources.map { it.resource } - val notOwnedResources = challenger.getViewableResources().filter { + val resourcesOnMap = civInfo.gameInfo.tileMap.values.asSequence().mapNotNull { it.resource }.distinct() + val viewableResourcesForChallenger = resourcesOnMap.map { civInfo.gameInfo.ruleSet.tileResources[it]!! } + .filter { it.revealedBy == null || challenger.tech.isResearched(it.revealedBy!!) } + + val notOwnedResources = viewableResourcesForChallenger.filter { it.resourceType != ResourceType.Bonus && !ownedByCityStateResources.contains(it) && !ownedByMajorResources.contains(it) - } + }.toList() if (notOwnedResources.isNotEmpty()) return notOwnedResources.random() diff --git a/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt b/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt index e2c8e765f8..ae0e570731 100644 --- a/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt +++ b/core/src/com/unciv/ui/worldscreen/unit/UnitActions.kt @@ -279,7 +279,7 @@ object UnitActions { val canConstruct = !tile.isCityCenter() && unit.civInfo.gameInfo.ruleSet.tileImprovements.values - .any { tile.canBuildImprovement(it, unit.civInfo) } + .any { tile.canBuildImprovement(it, unit.civInfo) } actionList += UnitAction( type = UnitActionType.ConstructImprovement, isCurrentAction = unit.currentTile.hasImprovementInProgress(),