Fixed promise not to settle (#10488)

* Settlers now account for the AgreedToNotSettleNearUs

* If the two Civs are at war the AI no longer cares about AgreedToNotSettleNearUs
This commit is contained in:
Oskar Niesen 2023-11-13 14:12:23 -06:00 committed by GitHub
parent cfeed82800
commit 32639f1ff5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -3,6 +3,7 @@ package com.unciv.logic.automation.unit
import com.unciv.logic.automation.Automation
import com.unciv.logic.city.City
import com.unciv.logic.civilization.Civilization
import com.unciv.logic.civilization.diplomacy.DiplomacyFlags
import com.unciv.logic.map.mapunit.MapUnit
import com.unciv.logic.map.tile.Tile
import com.unciv.models.ruleset.tile.ResourceType
@ -51,6 +52,13 @@ object CityLocationTileRanker {
if (tile.getOwner() != null && tile.getOwner() != civ) return false
for (city in nearbyCities) {
val distance = city.getCenterTile().aerialDistanceTo(tile)
// todo: AgreedToNotSettleNearUs is hardcoded for now but it may be better to softcode it below in getDistanceToCityModifier
if (distance <= 6 && civ.knows(city.civ)
&& !civ.isAtWarWith(city.civ)
// If the CITY OWNER knows that the UNIT OWNER agreed not to settle near them
&& city.civ.getDiplomacyManager(civ)
.hasFlag(DiplomacyFlags.AgreedToNotSettleNearUs))
return false
if (tile.getContinent() == city.getCenterTile().getContinent()) {
if (distance <= modConstants.minimalCityDistance) return false
} else {