diff --git a/core/src/com/unciv/logic/civilization/Civilization.kt b/core/src/com/unciv/logic/civilization/Civilization.kt index 45d68f493b..41e7871a61 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 @@ -576,6 +577,9 @@ class Civilization : IsPartOfGameInfoSerialization { return when (filter) { "Human player" -> isHuman() "AI player" -> isAI() + "Open Borders" -> state?.civInfo?.diplomacy[civName]?.hasOpenBorders ?: 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) } } diff --git a/core/src/com/unciv/models/ruleset/unique/Countables.kt b/core/src/com/unciv/models/ruleset/unique/Countables.kt index 64c7985578..e70acfb2eb 100644 --- a/core/src/com/unciv/models/ruleset/unique/Countables.kt +++ b/core/src/com/unciv/models/ruleset/unique/Countables.kt @@ -168,11 +168,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 5a8d9e3b17..d7fee06884 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueParameterType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueParameterType.kt @@ -216,7 +216,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", "Friendly", "Hostile") override fun getErrorSeverity(parameterText: String, ruleset: Ruleset) = getErrorSeverityForFilter(parameterText, ruleset)