From f8411ec2203c97fba9936c0244433df2e0172fe8 Mon Sep 17 00:00:00 2001 From: PLynx Date: Mon, 2 Jun 2025 22:11:20 +0200 Subject: [PATCH] Add buildingFilter to building maintenance unique (second attempt) (#13334) * Added buildingFilter to building maintenance unique * Restored the old unique * Replaced the unique to new version in rulesets * Changed buildingFilter parameter to lowercase * Fixed building maintenance calculation * Un-deprecated the old unique * Re-added Deprecated annotation * Removed the old unique from list again * Update core/src/com/unciv/models/ruleset/unique/UniqueType.kt --------- Co-authored-by: Yair Morgenstern --- .../assets/jsons/Civ V - Gods & Kings/Policies.json | 2 +- android/assets/jsons/Civ V - Vanilla/Policies.json | 2 +- core/src/com/unciv/logic/city/CityStats.kt | 11 ++++++++++- .../src/com/unciv/models/ruleset/unique/UniqueType.kt | 4 +++- docs/Modders/uniques.md | 8 ++++---- 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/android/assets/jsons/Civ V - Gods & Kings/Policies.json b/android/assets/jsons/Civ V - Gods & Kings/Policies.json index 2a1e83eab2..27422f5908 100644 --- a/android/assets/jsons/Civ V - Gods & Kings/Policies.json +++ b/android/assets/jsons/Civ V - Gods & Kings/Policies.json @@ -656,7 +656,7 @@ "name": "Socialism", "requires": ["Planned Economy"], "uniques": [ - "[-15]% maintenance cost for buildings [in all cities]" + "[-15]% maintenance cost for [all] buildings [in all cities]" ], "row": 2, "column": 3 diff --git a/android/assets/jsons/Civ V - Vanilla/Policies.json b/android/assets/jsons/Civ V - Vanilla/Policies.json index 5aa499714a..058d0c29e1 100644 --- a/android/assets/jsons/Civ V - Vanilla/Policies.json +++ b/android/assets/jsons/Civ V - Vanilla/Policies.json @@ -647,7 +647,7 @@ "name": "Socialism", "requires": ["Planned Economy"], "uniques": [ - "[-15]% maintenance cost for buildings [in all cities]" + "[-15]% maintenance cost for [all] buildings [in all cities]" ], "row": 2, "column": 3 diff --git a/core/src/com/unciv/logic/city/CityStats.kt b/core/src/com/unciv/logic/city/CityStats.kt index 30de243f93..59d6bcf9e5 100644 --- a/core/src/com/unciv/logic/city/CityStats.kt +++ b/core/src/com/unciv/logic/city/CityStats.kt @@ -16,6 +16,7 @@ import com.unciv.models.stats.Stats import com.unciv.ui.components.extensions.toPercent import com.unciv.utils.DebugUtils import kotlin.math.min +import kotlin.math.roundToInt class StatTreeNode { @@ -334,9 +335,17 @@ class CityStats(val city: City) { buildingsMaintenance *= city.civ.gameInfo.getDifficulty().aiBuildingMaintenanceModifier } - for (unique in city.getMatchingUniques(UniqueType.BuildingMaintenance)) { + for (unique in city.getMatchingUniques(UniqueType.BuildingMaintenanceOld)) { buildingsMaintenance *= unique.params[0].toPercent() } + + for (unique in city.getMatchingUniques(UniqueType.BuildingMaintenance)) { + city.cityConstructions.getBuiltBuildings().filter { + it.matchesFilter(unique.params[1]) + }.forEach { + it.maintenance = (it.maintenance * unique.params[0].toPercent()).roundToInt() + } + } return buildingsMaintenance } diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index 2fe27b5786..230f2a21fc 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -141,7 +141,9 @@ enum class UniqueType( /// Building Maintenance GainFreeBuildings("Gain a free [buildingName] [cityFilter]", UniqueTarget.Global, UniqueTarget.Triggerable, docDescription = "Free buildings CANNOT be self-removing - this leads to an endless loop of trying to add the building"), - BuildingMaintenance("[relativeAmount]% maintenance cost for buildings [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), + BuildingMaintenance("[relativeAmount]% maintenance cost for [buildingFilter] buildings [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), + @Deprecated(message = "as of 4.6.13", ReplaceWith("[relativeAmount]% maintenance cost for [all] buildings [cityFilter]"), level = DeprecationLevel.WARNING) + BuildingMaintenanceOld("[relativeAmount]% maintenance cost for buildings [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), RemoveBuilding("Remove [buildingFilter] [cityFilter]", UniqueTarget.Global, UniqueTarget.Triggerable), OneTimeSellBuilding("Sell [buildingFilter] buildings [cityFilter]", UniqueTarget.Global, UniqueTarget.Triggerable), diff --git a/docs/Modders/uniques.md b/docs/Modders/uniques.md index 5cf54cf818..d2f784fc2e 100644 --- a/docs/Modders/uniques.md +++ b/docs/Modders/uniques.md @@ -609,8 +609,8 @@ Simple unique parameters are explained by mouseover. Complex parameters are expl Applicable to: Triggerable, Global -??? example "[relativeAmount]% maintenance cost for buildings [cityFilter]" - Example: "[+20]% maintenance cost for buildings [in all cities]" +??? example "[relativeAmount]% maintenance cost for [buildingFilter] buildings [cityFilter]" + Example: "[+20]% maintenance cost for [Culture] buildings [in all cities]" Applicable to: Global, FollowerBelief @@ -1366,8 +1366,8 @@ Simple unique parameters are explained by mouseover. Complex parameters are expl Applicable to: Global, FollowerBelief -??? example "[relativeAmount]% maintenance cost for buildings [cityFilter]" - Example: "[+20]% maintenance cost for buildings [in all cities]" +??? example "[relativeAmount]% maintenance cost for [buildingFilter] buildings [cityFilter]" + Example: "[+20]% maintenance cost for [Culture] buildings [in all cities]" Applicable to: Global, FollowerBelief