Resolved #13810 - Fixed city state alliance valuation

This commit is contained in:
yairm210 2025-08-15 09:59:20 +03:00
parent 9585cd8b44
commit ca44be05d5
4 changed files with 18 additions and 17 deletions

View File

@ -143,8 +143,7 @@ object NextTurnAutomation {
var value = 0
val civPersonality = civInfo.getPersonality()
val bonuses = cityState.cityStateFunctions
.getCityStateBonuses(civInfo.cityStateType, RelationshipLevel.Ally).toList()
val bonuses = CityStateFunctions.getCityStateBonuses(cityState.cityStateType, RelationshipLevel.Ally).toList()
// Optimized version of canProvideStat so we don't need to fetch bonuses multiple times
@Readonly fun canProvideStat(stat: Stat) = bonuses.any { it.stats[stat] > 0 }

View File

@ -815,15 +815,20 @@ class CityStateFunctions(val civInfo: Civilization) {
.flatMap { it.getMultiplied(gameContext) }
}
@Readonly
fun getCityStateBonuses(cityStateType: CityStateType, relationshipLevel: RelationshipLevel, uniqueType: UniqueType? = null): Sequence<Unique> {
val cityStateUniqueMap = when (relationshipLevel) {
RelationshipLevel.Ally -> cityStateType.allyBonusUniqueMap
RelationshipLevel.Friend -> cityStateType.friendBonusUniqueMap
else -> return emptySequence()
companion object {
@Readonly
fun getCityStateBonuses(
cityStateType: CityStateType,
relationshipLevel: RelationshipLevel,
uniqueType: UniqueType? = null
): Sequence<Unique> {
val cityStateUniqueMap = when (relationshipLevel) {
RelationshipLevel.Ally -> cityStateType.allyBonusUniqueMap
RelationshipLevel.Friend -> cityStateType.friendBonusUniqueMap
else -> return emptySequence()
}
return if (uniqueType == null) cityStateUniqueMap.getAllUniques()
else cityStateUniqueMap.getUniques(uniqueType)
}
return if (uniqueType == null) cityStateUniqueMap.getAllUniques()
else cityStateUniqueMap.getUniques(uniqueType)
}
}

View File

@ -340,7 +340,7 @@ object DiplomacyTurnManager {
val variance = listOf(-1, 0, 1).random()
val provideMilitaryUnitUniques = civInfo.cityStateFunctions
val provideMilitaryUnitUniques = CityStateFunctions
.getCityStateBonuses(otherCiv().cityStateType, relationshipIgnoreAfraid(), UniqueType.CityStateMilitaryUnits)
.filter { it.conditionalsApply(civInfo.state) }.toList()
if (provideMilitaryUnitUniques.isEmpty()) removeFlag(DiplomacyFlags.ProvideMilitaryUnit)

View File

@ -10,10 +10,7 @@ import com.unciv.UncivGame
import com.unciv.logic.civilization.AlertType
import com.unciv.logic.civilization.Civilization
import com.unciv.logic.civilization.PopupAlert
import com.unciv.logic.civilization.diplomacy.DiplomacyFlags
import com.unciv.logic.civilization.diplomacy.DiplomacyManager
import com.unciv.logic.civilization.diplomacy.DiplomaticStatus
import com.unciv.logic.civilization.diplomacy.RelationshipLevel
import com.unciv.logic.civilization.diplomacy.*
import com.unciv.logic.civilization.managers.AssignedQuest
import com.unciv.logic.trade.TradeLogic
import com.unciv.logic.trade.TradeOffer
@ -177,7 +174,7 @@ class CityStateDiplomacyTable(private val diplomacyScreen: DiplomacyScreen) {
fun addBonusLabels(header: String, bonusLevel: RelationshipLevel, currentRelationLevel: RelationshipLevel) {
val bonuses = viewingCiv.cityStateFunctions
val bonuses = CityStateFunctions
.getCityStateBonuses(otherCiv.cityStateType, bonusLevel)
.filterNot { it.isHiddenToUsers() }
if (bonuses.none()) return