Added "upon damaging a [mapUnitFilter] unit" which can trigger a unique on the *enemy* unit!

This commit is contained in:
yairm210 2024-08-22 10:28:48 +03:00
parent f6efdd105f
commit 072c3786c4
4 changed files with 30 additions and 0 deletions

View File

@ -183,6 +183,22 @@ object Battle {
UniqueTriggerActivation.triggerUnique(unique, ourUnit.unit, triggerNotificationText = "due to our [${ourUnit.getName()}] defeating a [${enemy.getName()}]")
}
fun triggerDamageUniquesForUnit(triggeringUnit: MapUnitCombatant, enemy: MapUnitCombatant, combatAction: CombatAction){
val stateForConditionals = StateForConditionals(civInfo = triggeringUnit.getCivInfo(),
ourCombatant = triggeringUnit, theirCombatant = enemy, tile = attackedTile, combatAction = combatAction)
for (unique in triggeringUnit.unit.getTriggeredUniques(UniqueType.TriggerUponDamagingUnit, stateForConditionals)){
if (unique.getModifiers(UniqueType.TriggerUponDamagingUnit).none { enemy.matchesFilter(it.params[0]) })
continue
if (unique.params[0] == Constants.targetUnit){
UniqueTriggerActivation.triggerUnique(unique, enemy.unit, triggerNotificationText = "due to our [${enemy.getName()}] being damaged by a [${triggeringUnit.getName()}]")
} else {
UniqueTriggerActivation.triggerUnique(unique, triggeringUnit.unit, triggerNotificationText = "due to our [${triggeringUnit.getName()}] damaging a [${enemy.getName()}]")
}
}
}
// Add culture when defeating a barbarian when Honor policy is adopted, gold from enemy killed when honor is complete
// or any enemy military unit with Sacrificial captives unique (can be either attacker or defender!)
if (defender.isDefeated() && defender is MapUnitCombatant && !defender.unit.isCivilian()) {
@ -199,6 +215,11 @@ object Battle {
if (defender is MapUnitCombatant) triggerVictoryUniques(defender, attacker)
triggerDefeatUniques(attacker, defender, attackedTile)
}
if (attacker is MapUnitCombatant && defender is MapUnitCombatant){
triggerDamageUniquesForUnit(attacker, defender, CombatAction.Attack)
if (!attacker.isRanged()) triggerDamageUniquesForUnit(defender, attacker, CombatAction.Defend)
}
if (attacker is MapUnitCombatant) {
if (attacker.unit.hasUnique(UniqueType.SelfDestructs))

View File

@ -1039,6 +1039,7 @@ class MapUnit : IsPartOfGameInfoSerialization {
status.turnsLeft = turns
status.setTransients(this)
statuses.add(status)
updateUniques()
}

View File

@ -918,6 +918,8 @@ enum class UniqueType(
///////////////////////////////////////// region 11 UNIT TRIGGERS /////////////////////////////////////////
TriggerUponDamagingUnit("upon damaging a [mapUnitFilter] unit", UniqueTarget.UnitTriggerCondition,
docDescription = "Can apply triggers to to damaged unit by setting the first parameter to 'Target Unit'"),
TriggerUponDefeatingUnit("upon defeating a [mapUnitFilter] unit", UniqueTarget.UnitTriggerCondition),
TriggerUponExpendingUnit("upon expending a [mapUnitFilter] unit", UniqueTarget.UnitTriggerCondition),
TriggerUponDefeat("upon being defeated", UniqueTarget.UnitTriggerCondition),

View File

@ -3202,6 +3202,12 @@ If your mod renames Coast or Lakes, do not use this with one of these as paramet
Applicable to: TriggerCondition, UnitTriggerCondition
??? example "<upon damaging a [mapUnitFilter] unit>"
Can apply triggers to to damaged unit by setting the first parameter to 'Target Unit'
Example: "<upon damaging a [Wounded] unit>"
Applicable to: UnitTriggerCondition
??? example "<upon defeating a [mapUnitFilter] unit>"
Example: "<upon defeating a [Wounded] unit>"