From e43cd0ae6b1919fcaa5fbd1129477e04b1ad3e54 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Thu, 8 Nov 2018 22:39:28 +0200 Subject: [PATCH] AI won't pay in trade for strategic resources it can't use or doesn't need --- core/src/com/unciv/logic/trade/TradeLogic.kt | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/core/src/com/unciv/logic/trade/TradeLogic.kt b/core/src/com/unciv/logic/trade/TradeLogic.kt index 81a6fd7e5f..4d98f793e3 100644 --- a/core/src/com/unciv/logic/trade/TradeLogic.kt +++ b/core/src/com/unciv/logic/trade/TradeLogic.kt @@ -45,7 +45,8 @@ class TradeLogic(val ourCivilization:CivilizationInfo, val otherCivilization: Ci fun isTradeAcceptable(): Boolean { - val sumOfTheirOffers = currentTrade.theirOffers.filter { it.type!= TradeType.Treaty } // since treaties should only be evaluated once for 2 sides + val sumOfTheirOffers = currentTrade.theirOffers.asSequence() + .filter { it.type!= TradeType.Treaty } // since treaties should only be evaluated once for 2 sides .map { evaluateOffer(it,false) }.sum() val sumOfOurOffers = currentTrade.ourOffers.map { evaluateOffer(it,true)}.sum() return sumOfOurOffers >= sumOfTheirOffers @@ -71,7 +72,21 @@ class TradeLogic(val ourCivilization:CivilizationInfo, val otherCivilization: Ci } TradeType.Technology -> return sqrt(GameBasics.Technologies[offer.name]!!.cost.toDouble()).toInt()*10 - TradeType.Strategic_Resource -> return 50 * offer.amount + TradeType.Strategic_Resource -> { + if(otherCivIsRecieving) { + val resources = ourCivilization.getCivResources() + val stringmap = HashMap() + for (entry in resources) stringmap.put(entry.key.name, entry.value) + if (stringmap.containsKey(offer.name) && stringmap[offer.name]!! >= 2) return 0 // we already have enough. + val canUseForBuildings = ourCivilization.cities + .any { city-> city.cityConstructions.getBuildableBuildings().any { it.requiredResource==offer.name } } + val canUseForUnits = ourCivilization.cities + .any { city-> city.cityConstructions.getConstructableUnits().any { it.requiredResource==offer.name } } + if(!canUseForBuildings && !canUseForUnits) return 0 + return 50 * offer.amount + } + else return 50 * offer.amount + } TradeType.City -> { val civ = if(otherCivIsRecieving) ourCivilization else otherCivilization val city = civ.cities.first { it.name==offer.name }