diff --git a/core/src/com/unciv/logic/automation/unit/CityLocationTileRanker.kt b/core/src/com/unciv/logic/automation/unit/CityLocationTileRanker.kt index 2618faf28b..7fd5a08b93 100644 --- a/core/src/com/unciv/logic/automation/unit/CityLocationTileRanker.kt +++ b/core/src/com/unciv/logic/automation/unit/CityLocationTileRanker.kt @@ -11,6 +11,7 @@ import com.unciv.models.ruleset.tile.ResourceType import com.unciv.models.ruleset.unique.LocalUniqueCache import com.unciv.models.ruleset.unique.GameContext import com.unciv.models.ruleset.unique.UniqueType +import com.unciv.ui.screens.worldscreen.unit.actions.UnitActionModifiers object CityLocationTileRanker { @@ -66,8 +67,9 @@ object CityLocationTileRanker { private fun canSettleTile(tile: Tile, unit: MapUnit, nearbyCities: Sequence): Boolean { val civ = unit.civ val unitCanFoundUnique = unit.getMatchingUniques(UniqueType.ConditionalInTiles).firstOrNull() + println(unitCanFoundUnique) val modConstants = civ.gameInfo.ruleset.modOptions.constants - if ( (!tile.isLand || tile.isImpassible())) return false + if (unitCanFoundUnique == null && (!tile.isLand || tile.isImpassible())) return false if (tile.getOwner() != null && tile.getOwner() != civ) return false for (city in nearbyCities) { var addedDistanceBeweenContinents: Int diff --git a/core/src/com/unciv/logic/map/tile/Tile.kt b/core/src/com/unciv/logic/map/tile/Tile.kt index e4190440fe..ea93c98b14 100644 --- a/core/src/com/unciv/logic/map/tile/Tile.kt +++ b/core/src/com/unciv/logic/map/tile/Tile.kt @@ -638,8 +638,7 @@ class Tile : IsPartOfGameInfoSerialization, Json.Serializable { var addedDistanceBeweenContinents: Int var canSettleInTileWithUnique = false if (unitCanFoundUnique != null) { - canSettleInTileWithUnique = (isWater || isImpassible()) && - unitCanFoundUnique.getModifiers(UniqueType.ConditionalInTiles).none{ + canSettleInTileWithUnique = !unitCanFoundUnique.getModifiers(UniqueType.ConditionalInTiles).none{ matchesFilter(it.params[0]) } } @@ -647,6 +646,7 @@ class Tile : IsPartOfGameInfoSerialization, Json.Serializable { Putting the ! to make sure the player/Ai doesn't place cities too near each other. Because when .none return False when one element has a match. */ + println(canSettleInTileWithUnique) addedDistanceBeweenContinents = if (!canSettleInTileWithUnique) 1 else 0 @@ -658,7 +658,7 @@ class Tile : IsPartOfGameInfoSerialization, Json.Serializable { Because this can crash the game in automateSettlerActions in SpecificUnitAutomation.kt. */ if (unitCanFoundUnique != null) addedDistanceBeweenContinents else 0) - .any { it.isCityCenter() && it.getContinent() != getContinent() } -> false + .any { it.isCityCenter() && it.getContinent() != getContinent() && unitCanFoundUnique != null } -> false getTilesInDistance(modConstants.minimalCityDistance) .any { it.isCityCenter() && it.getContinent() == getContinent() } -> false else -> true diff --git a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionsFromUniques.kt b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionsFromUniques.kt index 96227fc70e..0ee9c1ebcb 100644 --- a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionsFromUniques.kt +++ b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionsFromUniques.kt @@ -46,7 +46,8 @@ object UnitActionsFromUniques { UnitActionModifiers.getUsableUnitActionUniques(unit, UniqueType.FoundPuppetCity).firstOrNull() ?: return null - val uniqueModifier = unit.getMatchingUniques(UniqueType.ConditionalInTiles).firstOrNull() + val uniqueModifier = unique.getModifiers(UniqueType.ConditionalInTiles).firstOrNull() + println(uniqueModifier) // do this check like that settler unique that don't have ConditionalInTiles does not show the grayed out button on water/moutain if (!unique.hasModifier(UniqueType.ConditionalInTiles) && (tile.isWater || tile.isImpassible())) return null