Resolved #10674 - added mod checker warning that movement uniques do not always work with conditionals

This commit is contained in:
Yair Morgenstern 2023-12-17 22:25:30 +02:00
parent 805f008af5
commit c0f837628b
2 changed files with 25 additions and 0 deletions

View File

@ -124,4 +124,25 @@ class MapUnitCache(private val mapUnit: MapUnit) {
.mapNotNull { mapUnit.civ.gameInfo.ruleset.tileImprovements[it.params[0]] }
.any { it.hasUnique(UniqueType.TakesOverAdjacentTiles) }
}
companion object {
val UnitMovementUniques = setOf(
UniqueType.AllTilesCost1Move,
UniqueType.CanPassImpassable,
UniqueType.IgnoresTerrainCost,
UniqueType.IgnoresZOC,
UniqueType.RoughTerrainPenalty,
UniqueType.CannotMove,
UniqueType.CanMoveOnWater,
UniqueType.DoubleMovementOnTerrain,
UniqueType.ReducedDisembarkCost,
UniqueType.ReducedEmbarkCost,
UniqueType.CanEnterIceTiles,
UniqueType.CanEnterForeignTiles,
UniqueType.CanEnterForeignTilesButLosesReligiousStrength,
// Special - applied in Nation and not here, wshould be moved to mapunitcache as well
UniqueType.ForestsAndJunglesAreRoads,
UniqueType.IgnoreHillMovementCost
)
}
}

View File

@ -1,5 +1,6 @@
package com.unciv.models.ruleset.validation
import com.unciv.logic.map.mapunit.MapUnitCache
import com.unciv.models.ruleset.IRulesetObject
import com.unciv.models.ruleset.Ruleset
import com.unciv.models.ruleset.RulesetCache
@ -83,6 +84,9 @@ class UniqueValidator(val ruleset: Ruleset) {
addConditionalErrors(conditional, rulesetErrors, prefix, unique, reportRulesetSpecificErrors)
}
if (unique.conditionals.any() && unique.type in MapUnitCache.UnitMovementUniques)
rulesetErrors.add("$prefix unique \"${unique.text}\" contains a conditional on a unit movement unique. " +
"Due to performance considerations, this conditional may not always apply.", RulesetErrorSeverity.WarningOptionsOnly)
if (reportRulesetSpecificErrors)
// If we don't filter these messages will be listed twice as this function is called twice on most objects