From 3afe7af4312f25c09673b5e3c50f1fb2ac85f1ec Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Sat, 31 Jul 2021 23:17:57 +0300 Subject: [PATCH] Solved crash where city states would try to gift great people without cities --- changelog.md | 4 ---- .../com/unciv/logic/civilization/CivilizationInfo.kt | 11 +++++++---- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/changelog.md b/changelog.md index 20f65e149c..d3d82403f5 100644 --- a/changelog.md +++ b/changelog.md @@ -10,10 +10,6 @@ AI accepts research agreement offers Buildings from era are applied before buildings from policies -Translations update - -Updated Hungarian Translates - By JurDan775 - By SomeTroglodyte: - Civilopedia phase 8 - Nations and Promotions - UnitActionType now knows keys, sounds and most icons diff --git a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt index 76bf6f3394..f316c33774 100644 --- a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt +++ b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt @@ -608,11 +608,14 @@ class CivilizationInfo { for (flag in flagsCountdown.keys.toList()) { if (flag == CivFlags.cityStateGreatPersonGift.name) { - val cityStateAllies = getKnownCivs().filter { it.isCityState() && it.getAllyCiv() == civName }.count() + val cityStateAllies = + getKnownCivs().filter { it.isCityState() && it.getAllyCiv() == civName } - if (cityStateAllies >= 1) flagsCountdown[flag] = flagsCountdown[flag]!! - 1 + if (cityStateAllies.any()) flagsCountdown[flag] = flagsCountdown[flag]!! - 1 - if (flagsCountdown[flag]!! < min(cityStateAllies, 10)) { + if (flagsCountdown[flag]!! < min(cityStateAllies.count(), 10) && cities.isNotEmpty() + && cityStateAllies.any { it.cities.isNotEmpty() } + ) { gainGreatPersonFromCityState() flagsCountdown[flag] = turnsForGreatPersonFromCityState() } @@ -779,7 +782,7 @@ class CivilizationInfo { /** Gain a random great person from a random city state */ private fun gainGreatPersonFromCityState() { - val givingCityState = getKnownCivs().filter { it.isCityState() && it.getAllyCiv() == civName}.random() + val givingCityState = getKnownCivs().filter { it.isCityState() && it.getAllyCiv() == civName && it.cities.isNotEmpty()}.random() var giftableUnits = gameInfo.ruleSet.units.values.filter { it.isGreatPerson() } if (!gameInfo.hasReligionEnabled()) giftableUnits = giftableUnits.filterNot { it.uniques.contains("Great Person - [Faith]")} if (giftableUnits.isEmpty()) // For badly defined mods that don't have great people but do have the policy that makes city states grant them