From d3305e680a0b8e221edff295d2fce765fe02040d Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Wed, 29 Mar 2023 10:17:20 +0300 Subject: [PATCH] Resolved #9058 - Mods that remove 'repair' improvement no longer cause crashes down the line --- .../src/com/unciv/logic/BackwardCompatibility.kt | 16 ++++++++++++++++ core/src/com/unciv/logic/map/tile/Tile.kt | 5 ++--- .../worldscreen/unit/actions/UnitActions.kt | 2 +- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/core/src/com/unciv/logic/BackwardCompatibility.kt b/core/src/com/unciv/logic/BackwardCompatibility.kt index f39c03789d..70e996e0ad 100644 --- a/core/src/com/unciv/logic/BackwardCompatibility.kt +++ b/core/src/com/unciv/logic/BackwardCompatibility.kt @@ -1,10 +1,12 @@ package com.unciv.logic +import com.unciv.Constants import com.unciv.logic.city.CityConstructions import com.unciv.logic.city.PerpetualConstruction import com.unciv.logic.civilization.diplomacy.DiplomacyFlags import com.unciv.logic.civilization.diplomacy.DiplomacyManager import com.unciv.logic.civilization.managers.TechManager +import com.unciv.logic.map.tile.RoadStatus import com.unciv.models.ruleset.ModOptions import com.unciv.models.ruleset.Ruleset @@ -35,6 +37,20 @@ object BackwardCompatibility { } } + // Mod decided you can't repair things anymore - get rid of old pillaged improvements + if (!ruleset.tileImprovements.containsKey(Constants.repair)) + for (tile in tileMap.values) { + if (tile.roadIsPillaged) { + tile.roadStatus = RoadStatus.None + tile.roadIsPillaged = false + } + if (tile.improvementIsPillaged){ + tile.improvement = null + tile.improvementIsPillaged = false + } + } + + for (city in civilizations.asSequence().flatMap { it.cities.asSequence() }) { changeBuildingNameIfNotInRuleset(ruleset, city.cityConstructions, "Hanse", "Bank") diff --git a/core/src/com/unciv/logic/map/tile/Tile.kt b/core/src/com/unciv/logic/map/tile/Tile.kt index d3e15586b6..5370207941 100644 --- a/core/src/com/unciv/logic/map/tile/Tile.kt +++ b/core/src/com/unciv/logic/map/tile/Tile.kt @@ -883,11 +883,10 @@ open class Tile : IsPartOfGameInfoSerialization { removeRoad() } else { // otherwise use pillage/repair systems - if (canPillageTileImprovement()) { + if (canPillageTileImprovement()) improvementIsPillaged = true - } else { + else roadIsPillaged = true - } } } diff --git a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt index 84b4db301a..4d9e77b417 100644 --- a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt +++ b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt @@ -412,7 +412,7 @@ object UnitActions { } private fun addRepairAction(unit: MapUnit, actionList: ArrayList) { - if (unit.currentTile.ruleset.tileImprovements[Constants.repair] == null) return + if (!unit.currentTile.ruleset.tileImprovements.containsKey(Constants.repair)) return if (!unit.cache.hasUniqueToBuildImprovements) return if (unit.isEmbarked()) return val tile = unit.getTile()