Resolved #13477 - Can no longer repair unbuildable improvements in neutral territory for pillage/repair exploit loop

This commit is contained in:
yairm210 2025-09-18 16:09:00 +03:00
parent 07ce66c77a
commit d51ef24c20
2 changed files with 12 additions and 6 deletions

View File

@ -51,12 +51,13 @@ object ImprovementFunctions {
yield(ImprovementBuildingProblem.MissingResources)
if (tile != null) {
if (tile.getOwner() != civInfo && !improvement.hasUnique(UniqueType.CanBuildOutsideBorders, gameContext)) {
if (!improvement.hasUnique(UniqueType.CanBuildJustOutsideBorders, gameContext))
yield(ImprovementBuildingProblem.OutsideBorders)
else if (tile.neighbors.none { it.getOwner() == civInfo })
yield(ImprovementBuildingProblem.NotJustOutsideBorders)
}
if (tile.getOwner() != civInfo
&& !improvement.hasUnique(UniqueType.CanBuildOutsideBorders, gameContext)
&& (!improvement.hasUnique(UniqueType.CanBuildJustOutsideBorders, gameContext)
|| tile.neighbors.none { it.getOwner() == civInfo })
)
yield(ImprovementBuildingProblem.OutsideBorders)
val knownFeatureRemovals = tile.ruleset.nonRoadTileRemovals
.filter { rulesetImprovement ->
rulesetImprovement.techRequired == null || civInfo.tech.isResearched(rulesetImprovement.techRequired!!)

View File

@ -6,7 +6,9 @@ import com.unciv.UncivGame
import com.unciv.logic.civilization.Civilization
import com.unciv.logic.civilization.PlayerType
import com.unciv.logic.civilization.diplomacy.DiplomacyFlags
import com.unciv.logic.civilization.managers.ImprovementFunctions
import com.unciv.logic.map.mapunit.MapUnit
import com.unciv.logic.map.tile.ImprovementBuildingProblem
import com.unciv.logic.map.tile.RoadStatus
import com.unciv.logic.map.tile.Tile
import com.unciv.models.Counter
@ -512,6 +514,9 @@ object UnitActionsFromUniques {
val couldConstruct = unit.hasMovement()
&& !tile.isCityCenter() && tile.improvementInProgress != Constants.repair
&& !tile.isEnemyTerritory(unit.civ)
// Are there any other improvement building problems that should block repair?
&& ImprovementFunctions.getImprovementBuildingProblems(unit.currentTile.getImprovementToRepair()!!, GameContext(civInfo = unit.civ, unit = unit, tile = tile))
.none { it == ImprovementBuildingProblem.OutsideBorders }
val turnsToBuild = getRepairTurns(unit)