From 98a79f8fb42e3f18edece886beb1242d0497a036 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Fri, 25 Sep 2020 13:42:13 +0300 Subject: [PATCH] Removed edge case option where the AI can trade you all of their cities --- core/src/com/unciv/logic/trade/TradeEvaluation.kt | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/core/src/com/unciv/logic/trade/TradeEvaluation.kt b/core/src/com/unciv/logic/trade/TradeEvaluation.kt index 714be5a348..62d8d3e6c2 100644 --- a/core/src/com/unciv/logic/trade/TradeEvaluation.kt +++ b/core/src/com/unciv/logic/trade/TradeEvaluation.kt @@ -43,19 +43,24 @@ class TradeEvaluation{ } fun isTradeAcceptable(trade: Trade, evaluator: CivilizationInfo, tradePartner: CivilizationInfo): Boolean { + // Edge case time! Guess what happens if you offer a peace agreement to the AI for all their cities except for the capital, + // and then capture their capital THAT SAME TURN? It can agree, leading to the civilization getting instantly destroyed! + if (trade.ourOffers.count { it.type == TradeType.City } == evaluator.cities.size) + return false + var sumOfTheirOffers = trade.theirOffers.asSequence() - .filter { it.type!= TradeType.Treaty } // since treaties should only be evaluated once for 2 sides - .map { evaluateBuyCost(it,evaluator,tradePartner) }.sum() + .filter { it.type != TradeType.Treaty } // since treaties should only be evaluated once for 2 sides + .map { evaluateBuyCost(it, evaluator, tradePartner) }.sum() // If we're making a peace treaty, don't try to up the bargain for people you don't like. // Leads to spartan behaviour where you demand more, the more you hate the enemy...unhelpful - if(trade.ourOffers.none { it.name==Constants.peaceTreaty || it.name==Constants.researchAgreement }) { + if (trade.ourOffers.none { it.name == Constants.peaceTreaty || it.name == Constants.researchAgreement }) { val relationshipLevel = evaluator.getDiplomacyManager(tradePartner).relationshipLevel() if (relationshipLevel == RelationshipLevel.Enemy) sumOfTheirOffers = (sumOfTheirOffers * 1.5).toInt() else if (relationshipLevel == RelationshipLevel.Unforgivable) sumOfTheirOffers *= 2 } - val sumOfOurOffers = trade.ourOffers.map { evaluateSellCost(it, evaluator, tradePartner)}.sum() + val sumOfOurOffers = trade.ourOffers.map { evaluateSellCost(it, evaluator, tradePartner) }.sum() return sumOfOurOffers <= sumOfTheirOffers }