mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-07 00:41:39 +07:00
* Can no longer receive negative gold offers from AI * Function over field * Correct checking for tradable offers in AI counteroffer
This commit is contained in:
@ -7,7 +7,13 @@ import com.unciv.logic.battle.MapUnitCombatant
|
||||
import com.unciv.logic.city.CityInfo
|
||||
import com.unciv.logic.city.INonPerpetualConstruction
|
||||
import com.unciv.logic.city.PerpetualConstruction
|
||||
import com.unciv.logic.civilization.*
|
||||
import com.unciv.logic.civilization.AlertType
|
||||
import com.unciv.logic.civilization.CityStateType
|
||||
import com.unciv.logic.civilization.CivilizationInfo
|
||||
import com.unciv.logic.civilization.NotificationIcon
|
||||
import com.unciv.logic.civilization.PlayerType
|
||||
import com.unciv.logic.civilization.PopupAlert
|
||||
import com.unciv.logic.civilization.ReligionState
|
||||
import com.unciv.logic.civilization.diplomacy.DiplomacyFlags
|
||||
import com.unciv.logic.civilization.diplomacy.DiplomaticModifiers
|
||||
import com.unciv.logic.civilization.diplomacy.DiplomaticStatus
|
||||
@ -15,9 +21,20 @@ import com.unciv.logic.civilization.diplomacy.RelationshipLevel
|
||||
import com.unciv.logic.map.BFS
|
||||
import com.unciv.logic.map.MapUnit
|
||||
import com.unciv.logic.map.TileInfo
|
||||
import com.unciv.logic.trade.*
|
||||
import com.unciv.logic.trade.Trade
|
||||
import com.unciv.logic.trade.TradeEvaluation
|
||||
import com.unciv.logic.trade.TradeLogic
|
||||
import com.unciv.logic.trade.TradeOffer
|
||||
import com.unciv.logic.trade.TradeRequest
|
||||
import com.unciv.logic.trade.TradeType
|
||||
import com.unciv.models.Counter
|
||||
import com.unciv.models.ruleset.*
|
||||
import com.unciv.models.ruleset.Belief
|
||||
import com.unciv.models.ruleset.BeliefType
|
||||
import com.unciv.models.ruleset.MilestoneType
|
||||
import com.unciv.models.ruleset.ModOptionsConstants
|
||||
import com.unciv.models.ruleset.Policy
|
||||
import com.unciv.models.ruleset.PolicyBranch
|
||||
import com.unciv.models.ruleset.Victory
|
||||
import com.unciv.models.ruleset.tech.Technology
|
||||
import com.unciv.models.ruleset.tile.ResourceType
|
||||
import com.unciv.models.ruleset.unique.UniqueType
|
||||
@ -135,10 +152,10 @@ object NextTurnAutomation {
|
||||
val counterofferGifts = ArrayList<TradeOffer>()
|
||||
|
||||
for (offer in tradeLogic.theirAvailableOffers) {
|
||||
if (offer.type == TradeType.Gold && tradeRequest.trade.ourOffers.any { it.type == TradeType.Gold } ||
|
||||
offer.type == TradeType.Gold_Per_Turn && tradeRequest.trade.ourOffers.any { it.type == TradeType.Gold_Per_Turn })
|
||||
if ((offer.type == TradeType.Gold || offer.type == TradeType.Gold_Per_Turn)
|
||||
&& tradeRequest.trade.ourOffers.any { it.type == offer.type })
|
||||
continue // Don't want to counteroffer straight gold for gold, that's silly
|
||||
if (offer.amount == 0)
|
||||
if (!offer.isTradable())
|
||||
continue // For example resources gained by trade or CS
|
||||
if (offer.type == TradeType.City)
|
||||
continue // Players generally don't want to give up their cities, and they might misclick
|
||||
@ -203,7 +220,7 @@ object NextTurnAutomation {
|
||||
delta = (delta * 2) / 3 // Only compensate some of it though, they're the ones asking us
|
||||
// First give some GPT, then lump sum - but only if they're not already offering the same
|
||||
for (ourGold in tradeLogic.ourAvailableOffers
|
||||
.filter { it.type == TradeType.Gold || it.type == TradeType.Gold_Per_Turn }
|
||||
.filter { it.isTradable() && (it.type == TradeType.Gold || it.type == TradeType.Gold_Per_Turn) }
|
||||
.sortedByDescending { it.type.ordinal }) {
|
||||
if (tradeLogic.currentTrade.theirOffers.none { it.type == ourGold.type } &&
|
||||
counterofferAsks.keys.none { it.type == ourGold.type } ) {
|
||||
|
@ -3,10 +3,10 @@ package com.unciv.logic.trade
|
||||
import com.unciv.Constants
|
||||
import com.unciv.UncivGame
|
||||
import com.unciv.logic.IsPartOfGameInfoSerialization
|
||||
import com.unciv.logic.trade.TradeType.TradeTypeNumberType
|
||||
import com.unciv.models.ruleset.Speed
|
||||
import com.unciv.models.translations.tr
|
||||
import com.unciv.ui.utils.Fonts
|
||||
import com.unciv.logic.trade.TradeType.TradeTypeNumberType
|
||||
|
||||
data class TradeOffer(val name: String, val type: TradeType, var amount: Int = 1, var duration: Int) : IsPartOfGameInfoSerialization {
|
||||
|
||||
@ -32,6 +32,8 @@ data class TradeOffer(val name: String, val type: TradeType, var amount: Int = 1
|
||||
&& offer.amount == amount
|
||||
}
|
||||
|
||||
fun isTradable() = amount > 0
|
||||
|
||||
fun getOfferText(untradable: Int = 0): String {
|
||||
var offerText = when(type){
|
||||
TradeType.WarDeclaration -> "Declare war on [$name]"
|
||||
|
@ -104,7 +104,8 @@ class OffersListScroll(
|
||||
val amountPerClick =
|
||||
if (offer.type == Gold) 50
|
||||
else 1
|
||||
if (offer.amount > 0 && offer.name != Constants.peaceTreaty && // can't disable peace treaty!
|
||||
|
||||
if (offer.isTradable() && offer.name != Constants.peaceTreaty && // can't disable peace treaty!
|
||||
offer.name != Constants.researchAgreement) {
|
||||
|
||||
// highlight unique suggestions
|
||||
|
Reference in New Issue
Block a user