diff --git a/core/src/com/unciv/models/ruleset/Building.kt b/core/src/com/unciv/models/ruleset/Building.kt index e71302915f..61ec84f3ca 100644 --- a/core/src/com/unciv/models/ruleset/Building.kt +++ b/core/src/com/unciv/models/ruleset/Building.kt @@ -37,6 +37,7 @@ class Building : RulesetStatsObject(), INonPerpetualConstruction { var isNationalWonder = false fun isAnyWonder() = isWonder || isNationalWonder var requiredBuilding: String? = null + @Deprecated("As of 3.18.15 - replace with RequiresBuildingInAllCities unique") var requiredBuildingInAllCities: String? = null /** A strategic resource that will be consumed by this building */ @@ -237,17 +238,12 @@ class Building : RulesetStatsObject(), INonPerpetualConstruction { textList += FormattedLine(stats.joinToString(", ", "{Cost}: ")) } - if (requiredTech != null || requiredBuilding != null || requiredBuildingInAllCities != null) - textList += FormattedLine() if (requiredTech != null) textList += FormattedLine("Required tech: [$requiredTech]", link="Technology/$requiredTech") if (requiredBuilding != null) textList += FormattedLine("Requires [$requiredBuilding] to be built in the city", link="Building/$requiredBuilding") - if (requiredBuildingInAllCities != null) - textList += FormattedLine("Requires [$requiredBuildingInAllCities] to be built in all cities", - link="Building/$requiredBuildingInAllCities") val resourceRequirements = getResourceRequirements() if (resourceRequirements.isNotEmpty()) { @@ -596,25 +592,11 @@ class Building : RulesetStatsObject(), INonPerpetualConstruction { if (civInfo.cities.any { it.cityConstructions.isBuilt(name) }) rejectionReasons.add(RejectionReason.NationalWonderAlreadyBuilt) - if (requiredBuildingInAllCities != null && civInfo.gameInfo.ruleSet.buildings[requiredBuildingInAllCities!!] == null) { - rejectionReasons.add(RejectionReason.InvalidRequiredBuilding) - } else { - if (requiredBuildingInAllCities != null - && civInfo.cities.any { - !it.isPuppet && !it.cityConstructions - .containsBuildingOrEquivalent(requiredBuildingInAllCities!!) - } - ) { - rejectionReasons.add(RejectionReason.RequiresBuildingInAllCities - .apply { errorMessage = "Requires a [${civInfo.getEquivalentBuilding(requiredBuildingInAllCities!!)}] in all cities"}) - } + if (civInfo.cities.any { it != cityConstructions.cityInfo && it.cityConstructions.isBeingConstructedOrEnqueued(name) }) + rejectionReasons.add(RejectionReason.NationalWonderBeingBuiltElsewhere) - if (civInfo.cities.any { it != cityConstructions.cityInfo && it.cityConstructions.isBeingConstructedOrEnqueued(name) }) - rejectionReasons.add(RejectionReason.NationalWonderBeingBuiltElsewhere) - - if (civInfo.isCityState()) - rejectionReasons.add(RejectionReason.CityStateNationalWonder) - } + if (civInfo.isCityState()) + rejectionReasons.add(RejectionReason.CityStateNationalWonder) } if (hasUnique(UniqueType.SpaceshipPart)) { diff --git a/core/src/com/unciv/models/ruleset/Ruleset.kt b/core/src/com/unciv/models/ruleset/Ruleset.kt index 2881e2b272..9fc2307872 100644 --- a/core/src/com/unciv/models/ruleset/Ruleset.kt +++ b/core/src/com/unciv/models/ruleset/Ruleset.kt @@ -22,6 +22,7 @@ import com.unciv.models.stats.INamed import com.unciv.models.stats.NamedStats import com.unciv.models.stats.Stat import com.unciv.models.stats.Stats +import com.unciv.models.translations.fillPlaceholders import com.unciv.models.translations.tr import com.unciv.ui.utils.colorFromRGB import kotlin.collections.set @@ -179,6 +180,9 @@ class Ruleset { val buildingsFile = folderHandle.child("Buildings.json") if (buildingsFile.exists()) buildings += createHashmap(jsonParser.getFromJson(Array::class.java, buildingsFile)) + for(building in buildings.values) + if(building.requiredBuildingInAllCities != null) + building.uniques.add(UniqueType.RequiresBuildingInAllCities.text.fillPlaceholders(building.requiredBuildingInAllCities!!)) val terrainsFile = folderHandle.child("Terrains.json") if (terrainsFile.exists()) { @@ -491,8 +495,9 @@ class Ruleset { lines += "${building.name} replaces ${building.replaces} which does not exist!" if (building.requiredBuilding != null && !buildings.containsKey(building.requiredBuilding!!)) lines += "${building.name} requires ${building.requiredBuilding} which does not exist!" - if (building.requiredBuildingInAllCities != null && !buildings.containsKey(building.requiredBuildingInAllCities!!)) - lines += "${building.name} requires ${building.requiredBuildingInAllCities} in all cities which does not exist!" + if (building.requiredBuildingInAllCities != null) + lines.add("${building.name} contains 'requiredBuildingInAllCities' - please convert to a \"" + + UniqueType.RequiresBuildingInAllCities.text.fillPlaceholders(building.requiredBuildingInAllCities!!)+"\" unique", RulesetErrorSeverity.Warning) for (unique in building.uniqueObjects) if (unique.placeholderText == "Creates a [] improvement on a specific tile" && !tileImprovements.containsKey(unique.params[0])) lines += "${building.name} creates a ${unique.params[0]} improvement which does not exist!"