From b9fd1c501a28468f1765bf70785708cd65c5ee27 Mon Sep 17 00:00:00 2001 From: yairm210 Date: Mon, 27 May 2024 17:55:09 +0300 Subject: [PATCH] AI no longer trusts you on resource trades if you cut deals short --- .../unciv/logic/civilization/diplomacy/DiplomacyManager.kt | 1 + .../logic/civilization/diplomacy/DiplomacyTurnManager.kt | 2 ++ core/src/com/unciv/logic/trade/TradeEvaluation.kt | 7 +++++++ 3 files changed, 10 insertions(+) diff --git a/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt b/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt index f24f30c0e0..68e9f192e4 100644 --- a/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt +++ b/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyManager.kt @@ -65,6 +65,7 @@ enum class DiplomacyFlags { WaryOf, Bullied, RecentlyAttacked, + ResourceTradesCutShort, } enum class DiplomaticModifiers(val text: String) { diff --git a/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyTurnManager.kt b/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyTurnManager.kt index 316764e31e..c6d970560a 100644 --- a/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyTurnManager.kt +++ b/core/src/com/unciv/logic/civilization/diplomacy/DiplomacyTurnManager.kt @@ -52,6 +52,8 @@ object DiplomacyTurnManager { otherCiv().addNotification("One of our trades with [${civInfo.civName}] has been cut short", DiplomacyAction(civInfo.civName, true), NotificationCategory.Trade, NotificationIcon.Trade, civInfo.civName) + // If you cut a trade short, we're not going to trust you with per-turn trades for a while + otherCivDiplomacy().setFlag(DiplomacyFlags.ResourceTradesCutShort, civInfo.gameInfo.speed.dealDuration * 2) civInfo.cache.updateCivResources() } } diff --git a/core/src/com/unciv/logic/trade/TradeEvaluation.kt b/core/src/com/unciv/logic/trade/TradeEvaluation.kt index 54c815eceb..87b2020c96 100644 --- a/core/src/com/unciv/logic/trade/TradeEvaluation.kt +++ b/core/src/com/unciv/logic/trade/TradeEvaluation.kt @@ -6,6 +6,7 @@ import com.unciv.logic.automation.ThreatLevel import com.unciv.logic.automation.civilization.DiplomacyAutomation import com.unciv.logic.city.City import com.unciv.logic.civilization.Civilization +import com.unciv.logic.civilization.diplomacy.DiplomacyFlags import com.unciv.logic.civilization.diplomacy.RelationshipLevel import com.unciv.logic.map.tile.Tile import com.unciv.models.ruleset.Ruleset @@ -115,6 +116,9 @@ class TradeEvaluation { } TradeType.Luxury_Resource -> { + if (civInfo.getDiplomacyManager(tradePartner).hasFlag(DiplomacyFlags.ResourceTradesCutShort)) + return 0 // We don't trust you for resources + val weLoveTheKingPotential = civInfo.cities.count { it.demandedResource == offer.name } * 50 return if(!civInfo.hasResource(offer.name)) { // we can't trade on resources, so we are only interested in 1 copy for ourselves weLoveTheKingPotential + when { // We're a lot more interested in luxury if low on happiness (AI is never low on happiness though) @@ -127,6 +131,9 @@ class TradeEvaluation { } TradeType.Strategic_Resource -> { + if (civInfo.getDiplomacyManager(tradePartner).hasFlag(DiplomacyFlags.ResourceTradesCutShort)) + return 0 // We don't trust you for resources + val amountWillingToBuy = 2 - civInfo.getResourceAmount(offer.name) if (amountWillingToBuy <= 0) return 0 // we already have enough. val amountToBuyInOffer = min(amountWillingToBuy, offer.amount)