diff --git a/core/src/com/unciv/logic/battle/Battle.kt b/core/src/com/unciv/logic/battle/Battle.kt index 1ec18ebb73..d0010ed988 100644 --- a/core/src/com/unciv/logic/battle/Battle.kt +++ b/core/src/com/unciv/logic/battle/Battle.kt @@ -557,7 +557,7 @@ object Battle { for (airUnit in airUnits.toList()) airUnit.destroy() } - val stateForConditionals = StateForConditionals(civInfo = attackerCiv, unit = attacker.unit, ourCombatant = attacker, attackedTile = city.getCenterTile()) + val stateForConditionals = StateForConditionals(civInfo = attackerCiv, city=city, unit = attacker.unit, ourCombatant = attacker, attackedTile = city.getCenterTile()) for (unique in attacker.getMatchingUniques(UniqueType.CaptureCityPlunder, stateForConditionals, true)) { attackerCiv.addStat( Stat.valueOf(unique.params[2]), @@ -584,9 +584,8 @@ object Battle { if (attackerCiv.isCurrentPlayer()) UncivGame.Current.settings.addCompletedTutorialTask("Conquer a city") - for (unique in attackerCiv.getTriggeredUniques(UniqueType.TriggerUponConqueringCity, - StateForConditionals(attackerCiv, city, attacker.unit, attackedTile = city.getCenterTile() ) - )) + for (unique in attackerCiv.getTriggeredUniques(UniqueType.TriggerUponConqueringCity, stateForConditionals) + + attacker.unit.getTriggeredUniques(UniqueType.TriggerUponConqueringCity, stateForConditionals)) UniqueTriggerActivation.triggerCivwideUnique(unique, attackerCiv, city) } diff --git a/core/src/com/unciv/logic/map/mapunit/UnitPromotions.kt b/core/src/com/unciv/logic/map/mapunit/UnitPromotions.kt index 6dc2c87777..ac57bbdf83 100644 --- a/core/src/com/unciv/logic/map/mapunit/UnitPromotions.kt +++ b/core/src/com/unciv/logic/map/mapunit/UnitPromotions.kt @@ -64,6 +64,9 @@ class UnitPromotions : IsPartOfGameInfoSerialization { if (!isFree) { XP -= xpForNextPromotion() numberOfPromotions++ + + for (unique in unit.getTriggeredUniques(UniqueType.TriggerUponPromotion)) + UniqueTriggerActivation.triggerUnitwideUnique(unique, unit) } val ruleset = unit.civ.gameInfo.ruleset diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index a43e55642a..5562f4599c 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -714,7 +714,8 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: TriggerUponDeclaringWar("upon declaring war with a major Civilization", UniqueTarget.TriggerCondition), TriggerUponDeclaringFriendship("upon declaring friendship", UniqueTarget.TriggerCondition), TriggerUponEnteringGoldenAge("upon entering a Golden Age", UniqueTarget.TriggerCondition), - TriggerUponConqueringCity("upon conquering a city", UniqueTarget.TriggerCondition), + /** Can be placed upon both units and as global */ + TriggerUponConqueringCity("upon conquering a city", UniqueTarget.TriggerCondition, UniqueTarget.UnitTriggerable), TriggerUponFoundingCity("upon founding a city", UniqueTarget.TriggerCondition), TriggerUponDiscoveringNaturalWonder("upon discovering a Natural Wonder", UniqueTarget.TriggerCondition), TriggerUponConstructingBuilding("upon constructing [buildingFilter]", UniqueTarget.TriggerCondition), @@ -732,7 +733,8 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: ///////////////////////////////////////// region UNIT TRIGGERS ///////////////////////////////////////// TriggerUponDefeatingUnit("upon defeating a [mapUnitFilter] unit", UniqueTarget.UnitTriggerCondition), - TriggerUponDefeat("upon defeat", UniqueTarget.UnitTriggerCondition), + TriggerUponDefeat("upon being defeated", UniqueTarget.UnitTriggerCondition), + TriggerUponPromotion("upon being promoted", UniqueTarget.UnitTriggerCondition), //endregion