diff --git a/core/src/com/unciv/models/ruleset/validation/UniqueValidator.kt b/core/src/com/unciv/models/ruleset/validation/UniqueValidator.kt index 50c69b24bc..51fe3c0ca2 100644 --- a/core/src/com/unciv/models/ruleset/validation/UniqueValidator.kt +++ b/core/src/com/unciv/models/ruleset/validation/UniqueValidator.kt @@ -110,6 +110,12 @@ class UniqueValidator(val ruleset: Ruleset) { return rulesetErrors } + val resourceUniques = setOf(UniqueType.ProvidesResources, UniqueType.ConsumesResources, + UniqueType.DoubleResourceProduced, UniqueType.StrategicResourcesIncrease) + val resourceConditionals = setOf(UniqueType.ConditionalWithResource, UniqueType.ConditionalWithoutResource, + UniqueType.ConditionalWhenBetweenStatResource, UniqueType.ConditionalWhenAboveAmountStatResource, UniqueType.ConditionalWhenBelowAmountStatResource, + UniqueType.ConditionalWhenAboveAmountStatResourceSpeed, UniqueType.ConditionalWhenBelowAmountStatResourceSpeed, UniqueType.ConditionalWhenBetweenStatResourceSpeed) + private fun addConditionalErrors( conditional: Unique, rulesetErrors: RulesetErrorList, @@ -162,6 +168,14 @@ class UniqueValidator(val ruleset: Ruleset) { RulesetErrorSeverity.Warning, uniqueContainer, unique ) + if (unique.type in resourceUniques && conditional.type in resourceConditionals + && ruleset.tileResources[conditional.params.last()]?.let { it.hasUnique(UniqueType.CityResource) } == true) + rulesetErrors.add( + "$prefix contains the conditional \"${conditional.text}\"," + + " which references a citywide resource. This is not a valid conditional for a resource uniques, " + + "as it causes a recursive evaluation loop.", + RulesetErrorSeverity.Error, uniqueContainer, unique) + val conditionalComplianceErrors = getComplianceErrors(conditional)