From f42a73296022243fb6a89a3d8a5a577fdab89e67 Mon Sep 17 00:00:00 2001 From: Rob Loach Date: Sat, 30 Aug 2025 02:59:43 -0400 Subject: [PATCH 1/3] Add diplomacy status to civFilter --- core/src/com/unciv/logic/civilization/Civilization.kt | 3 +++ core/src/com/unciv/models/ruleset/unique/Countables.kt | 6 ++++-- .../com/unciv/models/ruleset/unique/UniqueParameterType.kt | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/core/src/com/unciv/logic/civilization/Civilization.kt b/core/src/com/unciv/logic/civilization/Civilization.kt index dc17b213fd..5d37502d1f 100644 --- a/core/src/com/unciv/logic/civilization/Civilization.kt +++ b/core/src/com/unciv/logic/civilization/Civilization.kt @@ -573,6 +573,9 @@ class Civilization : IsPartOfGameInfoSerialization { return when (filter) { "Human player" -> isHuman() "AI player" -> isAI() + "Open Borders" -> state?.civInfo?.diplomacy[civName]?.hasOpenBorders ?: false + "Peace" -> state?.civInfo?.let { !diplomacyFunctions.isAtWarWith(it) } ?: false + "War" -> state?.civInfo?.let { diplomacyFunctions.isAtWarWith(it) } ?: false else -> nation.matchesFilter(filter, state, false) } } diff --git a/core/src/com/unciv/models/ruleset/unique/Countables.kt b/core/src/com/unciv/models/ruleset/unique/Countables.kt index 6c278ab4f2..504246f489 100644 --- a/core/src/com/unciv/models/ruleset/unique/Countables.kt +++ b/core/src/com/unciv/models/ruleset/unique/Countables.kt @@ -153,11 +153,13 @@ enum class Countables( override fun eval(parameterText: String, gameContext: GameContext): Int? { val filter = parameterText.getPlaceholderParameters()[0] val civilizations = gameContext.gameInfo?.civilizations ?: return null - return civilizations.count { it.isAlive() && it.matchesFilter(filter) } + return civilizations.count { it.isAlive() && it.matchesFilter(filter, gameContext) } } override fun getErrorSeverity(parameterText: String, ruleset: Ruleset): UniqueType.UniqueParameterErrorSeverity? = UniqueParameterType.CivFilter.getTranslatedErrorSeverity(parameterText, ruleset) - override fun getKnownValuesForAutocomplete(ruleset: Ruleset) = setOf() + override fun getKnownValuesForAutocomplete(ruleset: Ruleset): Set = + UniqueParameterType.CivFilter.getKnownValuesForAutocomplete(ruleset) + .map { text.fillPlaceholders(it) }.toSet() }, OwnedTiles("Owned [tileFilter] Tiles") { override fun eval(parameterText: String, gameContext: GameContext): Int? { diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueParameterType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueParameterType.kt index 70ba5580b5..24cee00cab 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueParameterType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueParameterType.kt @@ -215,7 +215,7 @@ enum class UniqueParameterType( /** Implemented by [Civ.matchesFilter][com.unciv.logic.civilization.Civilization.matchesFilter] */ CivFilter("civFilter", Constants.cityStates) { - override val staticKnownValues = setOf("AI player", "Human player") + override val staticKnownValues = setOf("AI player", "Human player", "Open Borders", "Peace", "War") override fun getErrorSeverity(parameterText: String, ruleset: Ruleset) = getErrorSeverityForFilter(parameterText, ruleset) From 6fc69b0087917892db56396bf8b212830ce38869 Mon Sep 17 00:00:00 2001 From: Rob Loach Date: Mon, 1 Sep 2025 15:33:19 -0400 Subject: [PATCH 2/3] Switch language for civFilter diplomacy --- core/src/com/unciv/logic/civilization/Civilization.kt | 5 +++-- .../com/unciv/models/ruleset/unique/UniqueParameterType.kt | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/core/src/com/unciv/logic/civilization/Civilization.kt b/core/src/com/unciv/logic/civilization/Civilization.kt index 5d37502d1f..802ebbfb41 100644 --- a/core/src/com/unciv/logic/civilization/Civilization.kt +++ b/core/src/com/unciv/logic/civilization/Civilization.kt @@ -16,6 +16,7 @@ import com.unciv.logic.civilization.diplomacy.CityStatePersonality import com.unciv.logic.civilization.diplomacy.DiplomacyFunctions 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.managers.EspionageManager import com.unciv.logic.civilization.managers.GoldenAgeManager import com.unciv.logic.civilization.managers.GreatPersonManager @@ -574,8 +575,8 @@ class Civilization : IsPartOfGameInfoSerialization { "Human player" -> isHuman() "AI player" -> isAI() "Open Borders" -> state?.civInfo?.diplomacy[civName]?.hasOpenBorders ?: false - "Peace" -> state?.civInfo?.let { !diplomacyFunctions.isAtWarWith(it) } ?: false - "War" -> state?.civInfo?.let { diplomacyFunctions.isAtWarWith(it) } ?: false + "Friendly" -> state?.civInfo?.diplomacy[civName]?.isRelationshipLevelGE(RelationshipLevel.Friend) ?: false + "Hostile" -> state?.civInfo?.let { isAtWarWith(it) } ?: false else -> nation.matchesFilter(filter, state, false) } } diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueParameterType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueParameterType.kt index 24cee00cab..f95b68e2c8 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueParameterType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueParameterType.kt @@ -215,7 +215,7 @@ enum class UniqueParameterType( /** Implemented by [Civ.matchesFilter][com.unciv.logic.civilization.Civilization.matchesFilter] */ CivFilter("civFilter", Constants.cityStates) { - override val staticKnownValues = setOf("AI player", "Human player", "Open Borders", "Peace", "War") + override val staticKnownValues = setOf("AI player", "Human player", "Open Borders", "Friendly", "Hostile") override fun getErrorSeverity(parameterText: String, ruleset: Ruleset) = getErrorSeverityForFilter(parameterText, ruleset) From 20e9c2b66b857dfea2a1816727d7d6652eadaf1e Mon Sep 17 00:00:00 2001 From: Rob Loach Date: Sat, 13 Sep 2025 12:42:07 -0400 Subject: [PATCH 3/3] Civs should be Friendly with themselves --- core/src/com/unciv/logic/civilization/Civilization.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/com/unciv/logic/civilization/Civilization.kt b/core/src/com/unciv/logic/civilization/Civilization.kt index 802ebbfb41..1fab9e0d77 100644 --- a/core/src/com/unciv/logic/civilization/Civilization.kt +++ b/core/src/com/unciv/logic/civilization/Civilization.kt @@ -575,7 +575,7 @@ class Civilization : IsPartOfGameInfoSerialization { "Human player" -> isHuman() "AI player" -> isAI() "Open Borders" -> state?.civInfo?.diplomacy[civName]?.hasOpenBorders ?: false - "Friendly" -> state?.civInfo?.diplomacy[civName]?.isRelationshipLevelGE(RelationshipLevel.Friend) ?: false + "Friendly" -> state?.civInfo?.let { it.civName == civName || (it.diplomacy[civName]?.isRelationshipLevelGE(RelationshipLevel.Friend) == true) } ?: false "Hostile" -> state?.civInfo?.let { isAtWarWith(it) } ?: false else -> nation.matchesFilter(filter, state, false) }