diff --git a/core/src/com/unciv/models/ruleset/validation/RulesetValidator.kt b/core/src/com/unciv/models/ruleset/validation/RulesetValidator.kt index 840d4a422b914..f89b851df34d5 100644 --- a/core/src/com/unciv/models/ruleset/validation/RulesetValidator.kt +++ b/core/src/com/unciv/models/ruleset/validation/RulesetValidator.kt @@ -7,11 +7,7 @@ import com.unciv.json.fromJsonFile import com.unciv.json.json import com.unciv.logic.map.tile.RoadStatus import com.unciv.models.metadata.BaseRuleset -import com.unciv.models.ruleset.BeliefType -import com.unciv.models.ruleset.Building -import com.unciv.models.ruleset.IRulesetObject -import com.unciv.models.ruleset.Ruleset -import com.unciv.models.ruleset.RulesetCache +import com.unciv.models.ruleset.* import com.unciv.models.ruleset.nation.Nation import com.unciv.models.ruleset.nation.getContrastRatio import com.unciv.models.ruleset.nation.getRelativeLuminance @@ -58,8 +54,8 @@ class RulesetValidator(val ruleset: Ruleset) { // Tileset tests - e.g. json configs complete and parseable checkTilesetSanity(lines) // relies on textureNamesCache - checkCivilopediaText(lines) // relies on textureNamesCache + checkFiles(lines) return lines } @@ -104,10 +100,21 @@ class RulesetValidator(val ruleset: Ruleset) { } checkCivilopediaText(lines) + checkFiles(lines) return lines } + + private fun checkFiles(lines: RulesetErrorList) { + val folder = ruleset.folderLocation ?: return + for (child in folder.list()){ + if (child.name().endsWith("json")) + lines.add("File ${child.name()} is located in the root folder - it should be moved to a 'jsons' folder") + } + } + + private fun addModOptionsErrors(lines: RulesetErrorList, tryFixUnknownUniques: Boolean) { // Basic Unique validation (type, target, parameters) should always run. // Using reportRulesetSpecificErrors=true as ModOptions never should use Uniques depending on objects from a base ruleset anyway. @@ -192,12 +199,19 @@ class RulesetValidator(val ruleset: Ruleset) { "Victory type ${victoryType.name} requires adding the non-existant unit $requiredUnit to the capital to win!", RulesetErrorSeverity.Warning, sourceObject = null ) - for (milestone in victoryType.milestoneObjects) + for (milestone in victoryType.milestoneObjects) { if (milestone.type == null) lines.add( - "Victory type ${victoryType.name} has milestone ${milestone.uniqueDescription} that is of an unknown type!", + "Victory type ${victoryType.name} has milestone \"${milestone.uniqueDescription}\" that is of an unknown type!", RulesetErrorSeverity.Error, sourceObject = null ) + if (milestone.type in listOf(MilestoneType.BuiltBuilding, MilestoneType.BuildingBuiltGlobally) + && milestone.params[0] !in ruleset.buildings) + lines.add( + "Victory type ${victoryType.name} has milestone \"${milestone.uniqueDescription}\" that references an unknown building ${milestone.params[0]}!", + RulesetErrorSeverity.Error, + ) + } for (victory in ruleset.victories.values) if (victory.name != victoryType.name && victory.milestones == victoryType.milestones) lines.add( @@ -442,7 +456,7 @@ class RulesetValidator(val ruleset: Ruleset) { && !improvement.hasUnique(UniqueType.CanOnlyImproveResource) && !improvement.hasUnique(UniqueType.Unbuildable) && !improvement.name.startsWith(Constants.remove) - && improvement.name !in RoadStatus.values().map { it.removeAction } + && improvement.name !in RoadStatus.entries.map { it.removeAction } && improvement.name != Constants.cancelImprovementOrder ) { lines.add(