From 834567170ea616bcbe8053026a3d0515a5d0ab90 Mon Sep 17 00:00:00 2001 From: yairm210 Date: Fri, 31 May 2024 18:40:50 +0300 Subject: [PATCH] Added ruleset check for resource uniques with resource conditionals --- .../models/ruleset/validation/UniqueValidator.kt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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)