Can now disable diplomatic relationship changes in a mod

This commit is contained in:
Yair Morgenstern
2020-08-20 16:38:14 +03:00
parent acf803de28
commit 42b5b3f16c
4 changed files with 45 additions and 27 deletions

View File

@ -11,6 +11,8 @@ import com.unciv.logic.civilization.diplomacy.RelationshipLevel
import com.unciv.logic.map.BFS import com.unciv.logic.map.BFS
import com.unciv.logic.map.MapUnit import com.unciv.logic.map.MapUnit
import com.unciv.logic.trade.* import com.unciv.logic.trade.*
import com.unciv.models.ruleset.ModOptions
import com.unciv.models.ruleset.ModOptionsConstants
import com.unciv.models.ruleset.VictoryType import com.unciv.models.ruleset.VictoryType
import com.unciv.models.ruleset.tech.Technology import com.unciv.models.ruleset.tech.Technology
import com.unciv.models.translations.tr import com.unciv.models.translations.tr
@ -26,9 +28,11 @@ object NextTurnAutomation{
respondToTradeRequests(civInfo) respondToTradeRequests(civInfo)
if(civInfo.isMajorCiv()) { if(civInfo.isMajorCiv()) {
declareWar(civInfo) if(!civInfo.gameInfo.ruleSet.modOptions.uniques.contains(ModOptionsConstants.diplomaticRelationshipsCannotChange)) {
declareWar(civInfo)
// offerDeclarationOfFriendship(civInfo) // offerDeclarationOfFriendship(civInfo)
offerPeaceTreaty(civInfo) offerPeaceTreaty(civInfo)
}
offerResearchAgreement(civInfo) offerResearchAgreement(civInfo)
exchangeLuxuries(civInfo) exchangeLuxuries(civInfo)
issueRequests(civInfo) issueRequests(civInfo)

View File

@ -4,6 +4,7 @@ import com.unciv.Constants
import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.logic.civilization.diplomacy.DiplomacyFlags import com.unciv.logic.civilization.diplomacy.DiplomacyFlags
import com.unciv.logic.civilization.diplomacy.DiplomaticStatus import com.unciv.logic.civilization.diplomacy.DiplomaticStatus
import com.unciv.models.ruleset.ModOptionsConstants
import com.unciv.models.ruleset.tile.ResourceType import com.unciv.models.ruleset.tile.ResourceType
import com.unciv.models.translations.tr import com.unciv.models.translations.tr
@ -52,7 +53,8 @@ class TradeLogic(val ourCivilization:CivilizationInfo, val otherCivilization: Ci
offers.add(TradeOffer(thirdCiv.civName, TradeType.Introduction)) offers.add(TradeOffer(thirdCiv.civName, TradeType.Introduction))
} }
if (!civInfo.isCityState() && !otherCivilization.isCityState()) { if (!civInfo.isCityState() && !otherCivilization.isCityState()
&& !civInfo.gameInfo.ruleSet.modOptions.uniques.contains(ModOptionsConstants.diplomaticRelationshipsCannotChange)) {
val civsWeBothKnow = otherCivsWeKnow val civsWeBothKnow = otherCivsWeKnow
.filter { otherCivilization.diplomacy.containsKey(it.civName) } .filter { otherCivilization.diplomacy.containsKey(it.civName) }
val civsWeArentAtWarWith = civsWeBothKnow val civsWeArentAtWarWith = civsWeBothKnow

View File

@ -19,11 +19,16 @@ import com.unciv.models.ruleset.unit.Promotion
import com.unciv.models.stats.INamed import com.unciv.models.stats.INamed
import kotlin.collections.set import kotlin.collections.set
object ModOptionsConstants {
const val diplomaticRelationshipsCannotChange = "Diplomatic relationships cannot change"
}
class ModOptions { class ModOptions {
var isBaseRuleset = false var isBaseRuleset = false
var techsToRemove = HashSet<String>() var techsToRemove = HashSet<String>()
var buildingsToRemove = HashSet<String>() var buildingsToRemove = HashSet<String>()
var unitsToRemove = HashSet<String>() var unitsToRemove = HashSet<String>()
var uniques = HashSet<String>()
} }
class Ruleset { class Ruleset {

View File

@ -17,6 +17,7 @@ import com.unciv.logic.civilization.diplomacy.RelationshipLevel
import com.unciv.logic.trade.TradeLogic import com.unciv.logic.trade.TradeLogic
import com.unciv.logic.trade.TradeOffer import com.unciv.logic.trade.TradeOffer
import com.unciv.logic.trade.TradeType import com.unciv.logic.trade.TradeType
import com.unciv.models.ruleset.ModOptionsConstants
import com.unciv.models.translations.tr import com.unciv.models.translations.tr
import com.unciv.ui.utils.* import com.unciv.ui.utils.*
import kotlin.math.roundToInt import kotlin.math.roundToInt
@ -146,26 +147,28 @@ class DiplomacyScreen(val viewingCiv:CivilizationInfo):CameraStageBaseScreen() {
val diplomacyManager = viewingCiv.getDiplomacyManager(otherCiv) val diplomacyManager = viewingCiv.getDiplomacyManager(otherCiv)
if (viewingCiv.isAtWarWith(otherCiv)) { if(!viewingCiv.gameInfo.ruleSet.modOptions.uniques.contains(ModOptionsConstants.diplomaticRelationshipsCannotChange)) {
val peaceButton = "Negotiate Peace".toTextButton() if (viewingCiv.isAtWarWith(otherCiv)) {
peaceButton.onClick { val peaceButton = "Negotiate Peace".toTextButton()
YesNoPopup("Peace with [${otherCiv.civName}]?".tr(), { peaceButton.onClick {
val tradeLogic = TradeLogic(viewingCiv, otherCiv) YesNoPopup("Peace with [${otherCiv.civName}]?".tr(), {
tradeLogic.currentTrade.ourOffers.add(TradeOffer(Constants.peaceTreaty, TradeType.Treaty)) val tradeLogic = TradeLogic(viewingCiv, otherCiv)
tradeLogic.currentTrade.theirOffers.add(TradeOffer(Constants.peaceTreaty, TradeType.Treaty)) tradeLogic.currentTrade.ourOffers.add(TradeOffer(Constants.peaceTreaty, TradeType.Treaty))
tradeLogic.acceptTrade() tradeLogic.currentTrade.theirOffers.add(TradeOffer(Constants.peaceTreaty, TradeType.Treaty))
updateLeftSideTable() tradeLogic.acceptTrade()
updateRightSide(otherCiv) updateLeftSideTable()
}, this).open() updateRightSide(otherCiv)
}, this).open()
}
diplomacyTable.add(peaceButton).row()
val cityStatesAlly = otherCiv.getAllyCiv()
val atWarWithItsAlly = viewingCiv.getKnownCivs().any { it.civName == cityStatesAlly && it.isAtWarWith(viewingCiv) }
if (isNotPlayersTurn() || atWarWithItsAlly) peaceButton.disable()
} else {
val declareWarButton = getDeclareWarButton(diplomacyManager, otherCiv)
if (isNotPlayersTurn()) declareWarButton.disable()
diplomacyTable.add(declareWarButton).row()
} }
diplomacyTable.add(peaceButton).row()
val cityStatesAlly = otherCiv.getAllyCiv()
val atWarWithItsAlly = viewingCiv.getKnownCivs().any { it.civName == cityStatesAlly && it.isAtWarWith(viewingCiv) }
if (isNotPlayersTurn() || atWarWithItsAlly) peaceButton.disable()
} else {
val declareWarButton = getDeclareWarButton(diplomacyManager, otherCiv)
if (isNotPlayersTurn()) declareWarButton.disable()
diplomacyTable.add(declareWarButton).row()
} }
return diplomacyTable return diplomacyTable
@ -184,6 +187,8 @@ class DiplomacyScreen(val viewingCiv:CivilizationInfo):CameraStageBaseScreen() {
diplomacyTable.add(otherCiv.nation.neutralHello.toLabel()).row() diplomacyTable.add(otherCiv.nation.neutralHello.toLabel()).row()
diplomacyTable.addSeparator() diplomacyTable.addSeparator()
val diplomaticRelationshipsCanChange = !viewingCiv.gameInfo.ruleSet.modOptions.uniques.contains(ModOptionsConstants.diplomaticRelationshipsCannotChange)
if (!viewingCiv.isAtWarWith(otherCiv)) { if (!viewingCiv.isAtWarWith(otherCiv)) {
val tradeButton = "Trade".toTextButton() val tradeButton = "Trade".toTextButton()
tradeButton.onClick { tradeButton.onClick {
@ -195,7 +200,7 @@ class DiplomacyScreen(val viewingCiv:CivilizationInfo):CameraStageBaseScreen() {
} }
diplomacyTable.add(tradeButton).row() diplomacyTable.add(tradeButton).row()
if (isNotPlayersTurn()) tradeButton.disable() if (isNotPlayersTurn()) tradeButton.disable()
} else { } else if(diplomaticRelationshipsCanChange) {
val negotiatePeaceButton = "Negotiate Peace".toTextButton() val negotiatePeaceButton = "Negotiate Peace".toTextButton()
negotiatePeaceButton.onClick { negotiatePeaceButton.onClick {
val tradeTable = setTrade(otherCiv) val tradeTable = setTrade(otherCiv)
@ -213,7 +218,7 @@ class DiplomacyScreen(val viewingCiv:CivilizationInfo):CameraStageBaseScreen() {
val diplomacyManager = viewingCiv.getDiplomacyManager(otherCiv) val diplomacyManager = viewingCiv.getDiplomacyManager(otherCiv)
if (!viewingCiv.isAtWarWith(otherCiv)) { if (!viewingCiv.isAtWarWith(otherCiv)) {
if(!diplomacyManager.hasFlag(DiplomacyFlags.DeclarationOfFriendship)) { if (!diplomacyManager.hasFlag(DiplomacyFlags.DeclarationOfFriendship)) {
val declareFriendshipButton = "Offer Declaration of Friendship ([30] turns)".toTextButton() val declareFriendshipButton = "Offer Declaration of Friendship ([30] turns)".toTextButton()
declareFriendshipButton.onClick { declareFriendshipButton.onClick {
otherCiv.popupAlerts.add(PopupAlert(AlertType.DeclarationOfFriendship, viewingCiv.civName)) otherCiv.popupAlerts.add(PopupAlert(AlertType.DeclarationOfFriendship, viewingCiv.civName))
@ -260,9 +265,11 @@ class DiplomacyScreen(val viewingCiv:CivilizationInfo):CameraStageBaseScreen() {
if (isNotPlayersTurn()) denounceButton.disable() if (isNotPlayersTurn()) denounceButton.disable()
} }
val declareWarButton = getDeclareWarButton(diplomacyManager, otherCiv) if (diplomaticRelationshipsCanChange) {
diplomacyTable.add(declareWarButton).row() val declareWarButton = getDeclareWarButton(diplomacyManager, otherCiv)
if (isNotPlayersTurn()) declareWarButton.disable() diplomacyTable.add(declareWarButton).row()
if (isNotPlayersTurn()) declareWarButton.disable()
}
} }
val demandsButton = "Demands".toTextButton() val demandsButton = "Demands".toTextButton()