From ae7ac6a063e49fe54b38e90cbfdcaad2420acf42 Mon Sep 17 00:00:00 2001 From: SeventhM <127357473+SeventhM@users.noreply.github.com> Date: Sun, 30 Jul 2023 07:38:00 -0700 Subject: [PATCH] Fix resources subtracting in an incorrect manner when they have the same source (#9858) --- core/src/com/unciv/logic/city/City.kt | 12 ++++++++---- .../civilization/transients/CivInfoTransientCache.kt | 9 +++------ 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/core/src/com/unciv/logic/city/City.kt b/core/src/com/unciv/logic/city/City.kt index 4730e2bc0a..12738f219d 100644 --- a/core/src/com/unciv/logic/city/City.kt +++ b/core/src/com/unciv/logic/city/City.kt @@ -202,10 +202,14 @@ class City : IsPartOfGameInfoSerialization { fun getCityResources(): ResourceSupplyList { val cityResources = ResourceSupplyList() + val resourceModifer = HashMap() + for (resource in civ.gameInfo.ruleset.tileResources.values) + resourceModifer[resource.name] = civ.getResourceModifier(resource) + for (tileInfo in getTiles().filter { it.resource != null }) { val resource = tileInfo.tileResource - val amount = getTileResourceAmount(tileInfo) - if (amount > 0) cityResources.add(resource, "Tiles", amount) + val amount = getTileResourceAmount(tileInfo) * resourceModifer[resource.name]!! + if (amount > 0) cityResources.add(resource, "Tiles", amount.toInt()) } for (tileInfo in getTiles()) { @@ -216,7 +220,7 @@ class City : IsPartOfGameInfoSerialization { val resource = getRuleset().tileResources[unique.params[1]] ?: continue cityResources.add( resource, "Improvements", - unique.params[0].toInt() + (unique.params[0].toFloat() * resourceModifer[resource.name]!!).toInt() ) } for (unique in tileImprovement.getMatchingUniques(UniqueType.ConsumesResources, stateForConditionals)) { @@ -240,7 +244,7 @@ class City : IsPartOfGameInfoSerialization { ?: continue cityResources.add( resource, "Buildings", - unique.params[0].toInt() + (unique.params[0].toFloat() * resourceModifer[resource.name]!!).toInt() ) } diff --git a/core/src/com/unciv/logic/civilization/transients/CivInfoTransientCache.kt b/core/src/com/unciv/logic/civilization/transients/CivInfoTransientCache.kt index 57725771c0..dd768801f0 100644 --- a/core/src/com/unciv/logic/civilization/transients/CivInfoTransientCache.kt +++ b/core/src/com/unciv/logic/civilization/transients/CivInfoTransientCache.kt @@ -284,10 +284,6 @@ class CivInfoTransientCache(val civInfo: Civilization) { val newDetailedCivResources = ResourceSupplyList() for (city in civInfo.cities) newDetailedCivResources.add(city.getCityResources()) - for (resourceSupply in newDetailedCivResources) - if (resourceSupply.amount > 0) - resourceSupply.amount = (resourceSupply.amount * civInfo.getResourceModifier(resourceSupply.resource)).toInt() - if (!civInfo.isCityState()) { // First we get all these resources of each city state separately val cityStateProvidedResources = ResourceSupplyList() @@ -306,10 +302,11 @@ class CivInfoTransientCache(val civInfo: Civilization) { for (unique in civInfo.getMatchingUniques(UniqueType.ProvidesResources)) { if (unique.sourceObjectType == UniqueTarget.Building || unique.sourceObjectType == UniqueTarget.Wonder) continue // already calculated in city + val resource = civInfo.gameInfo.ruleset.tileResources[unique.params[1]]!! newDetailedCivResources.add( - civInfo.gameInfo.ruleset.tileResources[unique.params[1]]!!, + resource, unique.sourceObjectType?.name ?: "", - unique.params[0].toInt() + (unique.params[0].toFloat() * civInfo.getResourceModifier(resource)).toInt() ) }