From 817764ec38bfcec10bc378603c1bda9626ba8e8f Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Thu, 4 May 2023 09:20:00 +0300 Subject: [PATCH] Probably resolved #9320 - AI 'found religion' crash --- .../logic/automation/civilization/NextTurnAutomation.kt | 8 ++++++-- .../unciv/logic/civilization/managers/ReligionManager.kt | 6 ++---- .../screens/pickerscreens/ReligiousBeliefsPickerScreen.kt | 3 ++- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/core/src/com/unciv/logic/automation/civilization/NextTurnAutomation.kt b/core/src/com/unciv/logic/automation/civilization/NextTurnAutomation.kt index 34313e1054..18abc8e122 100644 --- a/core/src/com/unciv/logic/automation/civilization/NextTurnAutomation.kt +++ b/core/src/com/unciv/logic/automation/civilization/NextTurnAutomation.kt @@ -652,12 +652,16 @@ object NextTurnAutomation { if (civInfo.religionManager.religionState != ReligionState.FoundingReligion) return val availableReligionIcons = civInfo.gameInfo.ruleset.religions .filterNot { civInfo.gameInfo.religions.values.map { religion -> religion.name }.contains(it) } + val favoredReligion = civInfo.nation.favoredReligion val religionIcon = - if (civInfo.nation.favoredReligion in availableReligionIcons) civInfo.nation.favoredReligion + if (favoredReligion != null && favoredReligion in availableReligionIcons) favoredReligion else availableReligionIcons.randomOrNull() ?: return // Wait what? How did we pass the checking when using a great prophet but not this? + + civInfo.religionManager.foundReligion(religionIcon, religionIcon) + val chosenBeliefs = chooseBeliefs(civInfo, civInfo.religionManager.getBeliefsToChooseAtFounding()).toList() - civInfo.religionManager.chooseBeliefs(chosenBeliefs, religionIcon, religionIcon) + civInfo.religionManager.chooseBeliefs(chosenBeliefs) } private fun enhanceReligion(civInfo: Civilization) { diff --git a/core/src/com/unciv/logic/civilization/managers/ReligionManager.kt b/core/src/com/unciv/logic/civilization/managers/ReligionManager.kt index f5ef989c1c..a514827c23 100644 --- a/core/src/com/unciv/logic/civilization/managers/ReligionManager.kt +++ b/core/src/com/unciv/logic/civilization/managers/ReligionManager.kt @@ -340,10 +340,8 @@ class ReligionManager : IsPartOfGameInfoSerialization { fun getBeliefsToChooseAtFounding(): Counter = getBeliefsToChooseAtProphetUse(false) fun getBeliefsToChooseAtEnhancing(): Counter = getBeliefsToChooseAtProphetUse(true) - fun chooseBeliefs(beliefs: List, iconName: String? = null, religionName: String? = null, useFreeBeliefs: Boolean = false) { + fun chooseBeliefs(beliefs: List, useFreeBeliefs: Boolean = false) { when (religionState) { - ReligionState.FoundingReligion -> - foundReligion(iconName!!, religionName!!) ReligionState.EnhancingReligion -> { religionState = ReligionState.EnhancedReligion for (unique in civInfo.getTriggeredUniques(UniqueType.TriggerUponEnhancingReligion)) @@ -381,7 +379,7 @@ class ReligionManager : IsPartOfGameInfoSerialization { } - private fun foundReligion(displayName: String, name: String) { + internal fun foundReligion(displayName: String, name: String) { val newReligion = Religion(name, civInfo.gameInfo, civInfo.civName) newReligion.displayName = displayName if (religion != null) { diff --git a/core/src/com/unciv/ui/screens/pickerscreens/ReligiousBeliefsPickerScreen.kt b/core/src/com/unciv/ui/screens/pickerscreens/ReligiousBeliefsPickerScreen.kt index 07f519a9c7..6263f21b84 100644 --- a/core/src/com/unciv/ui/screens/pickerscreens/ReligiousBeliefsPickerScreen.kt +++ b/core/src/com/unciv/ui/screens/pickerscreens/ReligiousBeliefsPickerScreen.kt @@ -75,7 +75,8 @@ class ReligiousBeliefsPickerScreen ( if (pickIconAndName) "Choose a Religion" else "Enhance [${currentReligion.getReligionDisplayName()}]" ) { - chooseBeliefs(beliefsToChoose.map { it.belief!! }, displayName, religionName, usingFreeBeliefs()) + civInfo.religionManager.foundReligion(displayName!!, religionName!!) + chooseBeliefs(beliefsToChoose.map { it.belief!! }, usingFreeBeliefs()) } }