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 <yairm210@hotmail.com>
This commit is contained in:
PLynx 2025-06-02 22:11:20 +02:00 committed by GitHub
parent b67429d5cb
commit f8411ec220
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 19 additions and 8 deletions

View File

@ -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

View File

@ -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

View File

@ -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,10 +335,18 @@ 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
}

View File

@ -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),

View File

@ -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