diff --git a/core/src/com/unciv/logic/automation/NextTurnAutomation.kt b/core/src/com/unciv/logic/automation/NextTurnAutomation.kt index 26ce5b11ef..aebc99c513 100644 --- a/core/src/com/unciv/logic/automation/NextTurnAutomation.kt +++ b/core/src/com/unciv/logic/automation/NextTurnAutomation.kt @@ -5,9 +5,11 @@ import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.civilization.PlayerType import com.unciv.logic.map.MapUnit import com.unciv.logic.trade.TradeLogic +import com.unciv.logic.trade.TradeOffer import com.unciv.logic.trade.TradeType import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.tech.Technology +import com.unciv.models.gamebasics.tr import com.unciv.ui.utils.getRandom import kotlin.math.min @@ -26,20 +28,35 @@ class NextTurnAutomation{ } private fun exchangeTechs(civInfo: CivilizationInfo) { - for (otherCiv in civInfo.diplomacy.values.map { it.otherCiv() }.filter { it.playerType == PlayerType.AI }.sortedBy { it.tech.techsResearched.size }) { + val otherCivList = civInfo.diplomacy.values.map { it.otherCiv() }. + filter { it.playerType == PlayerType.AI && !it.isBarbarianCivilization() }. + sortedBy { it.tech.techsResearched.size } + + for (otherCiv in otherCivList) { val tradeLogic = TradeLogic(civInfo, otherCiv) + var ourGold = tradeLogic.ourAvailableOffers.first { it.type == TradeType.Gold }.amount val ourTradableTechs = tradeLogic.ourAvailableOffers .filter { it.type == TradeType.Technology } val theirTradableTechs = tradeLogic.theirAvailableOffers .filter { it.type == TradeType.Technology } - for (ourOffer in ourTradableTechs) { - val theirOfferList = theirTradableTechs.filter{ - tradeLogic.evaluateOffer(ourOffer, false) >= tradeLogic.evaluateOffer(it, false) - && !tradeLogic.currentTrade.theirOffers.contains(it) } - if (theirOfferList.isNotEmpty()) { - tradeLogic.currentTrade.ourOffers.add(ourOffer) - tradeLogic.currentTrade.theirOffers.add(theirOfferList.getRandom()) + for (theirOffer in theirTradableTechs) { + val theirValue = tradeLogic.evaluateOffer(theirOffer, false) + val ourOfferList = ourTradableTechs.filter{ + tradeLogic.evaluateOffer(it, false) == theirValue + && !tradeLogic.currentTrade.ourOffers.contains(it) } + + if (ourOfferList.isNotEmpty()) { + tradeLogic.currentTrade.ourOffers.add(ourOfferList.getRandom()) + tradeLogic.currentTrade.theirOffers.add(theirOffer) + } else { + //try to buy tech with money, not spending more than 1/3 of treasury + if (ourGold / 3 >= theirValue) + { + tradeLogic.currentTrade.ourOffers.add(TradeOffer("Gold".tr(), TradeType.Gold, 0, theirValue)) + tradeLogic.currentTrade.theirOffers.add(theirOffer) + ourGold -= theirValue + } } }