mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-13 09:18:43 +07:00
Resolved #8899 - Modding: 'upon being defeated' now applies to destroyed civilians as well
This commit is contained in:
@ -158,12 +158,6 @@ object Battle {
|
|||||||
UniqueTriggerActivation.triggerUnitwideUnique(unique, ourUnit.unit)
|
UniqueTriggerActivation.triggerUnitwideUnique(unique, ourUnit.unit)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun triggerDefeatUniques(ourUnit: MapUnitCombatant, enemy: ICombatant){
|
|
||||||
val stateForConditionals = StateForConditionals(civInfo = ourUnit.getCivInfo(),
|
|
||||||
ourCombatant = ourUnit, theirCombatant=enemy, tile = attackedTile)
|
|
||||||
for (unique in ourUnit.unit.getTriggeredUniques(UniqueType.TriggerUponDefeat, stateForConditionals))
|
|
||||||
UniqueTriggerActivation.triggerUnitwideUnique(unique, ourUnit.unit)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add culture when defeating a barbarian when Honor policy is adopted, gold from enemy killed when honor is complete
|
// 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!)
|
// or any enemy military unit with Sacrificial captives unique (can be either attacker or defender!)
|
||||||
@ -172,14 +166,14 @@ object Battle {
|
|||||||
tryHealAfterKilling(attacker)
|
tryHealAfterKilling(attacker)
|
||||||
|
|
||||||
if (attacker is MapUnitCombatant) triggerVictoryUniques(attacker, defender)
|
if (attacker is MapUnitCombatant) triggerVictoryUniques(attacker, defender)
|
||||||
triggerDefeatUniques(defender, attacker)
|
triggerDefeatUniques(defender, attacker, attackedTile)
|
||||||
|
|
||||||
} else if (attacker.isDefeated() && attacker is MapUnitCombatant && !attacker.unit.isCivilian()) {
|
} else if (attacker.isDefeated() && attacker is MapUnitCombatant && !attacker.unit.isCivilian()) {
|
||||||
tryEarnFromKilling(defender, attacker)
|
tryEarnFromKilling(defender, attacker)
|
||||||
tryHealAfterKilling(defender)
|
tryHealAfterKilling(defender)
|
||||||
|
|
||||||
if (defender is MapUnitCombatant) triggerVictoryUniques(defender, attacker)
|
if (defender is MapUnitCombatant) triggerVictoryUniques(defender, attacker)
|
||||||
triggerDefeatUniques(attacker, defender)
|
triggerDefeatUniques(attacker, defender, attackedTile)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (attacker is MapUnitCombatant) {
|
if (attacker is MapUnitCombatant) {
|
||||||
@ -199,6 +193,13 @@ object Battle {
|
|||||||
if (!isAlreadyDefeatedCity) postBattleAddXp(attacker, defender)
|
if (!isAlreadyDefeatedCity) postBattleAddXp(attacker, defender)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun triggerDefeatUniques(ourUnit: MapUnitCombatant, enemy: ICombatant, attackedTile: Tile){
|
||||||
|
val stateForConditionals = StateForConditionals(civInfo = ourUnit.getCivInfo(),
|
||||||
|
ourCombatant = ourUnit, theirCombatant=enemy, tile = attackedTile)
|
||||||
|
for (unique in ourUnit.unit.getTriggeredUniques(UniqueType.TriggerUponDefeat, stateForConditionals))
|
||||||
|
UniqueTriggerActivation.triggerUnitwideUnique(unique, ourUnit.unit)
|
||||||
|
}
|
||||||
|
|
||||||
private fun tryEarnFromKilling(civUnit: ICombatant, defeatedUnit: MapUnitCombatant) {
|
private fun tryEarnFromKilling(civUnit: ICombatant, defeatedUnit: MapUnitCombatant) {
|
||||||
val unitStr = max(defeatedUnit.unit.baseUnit.strength, defeatedUnit.unit.baseUnit.rangedStrength)
|
val unitStr = max(defeatedUnit.unit.baseUnit.strength, defeatedUnit.unit.baseUnit.rangedStrength)
|
||||||
val unitCost = defeatedUnit.unit.baseUnit.cost
|
val unitCost = defeatedUnit.unit.baseUnit.cost
|
||||||
@ -654,18 +655,31 @@ object Battle {
|
|||||||
&& attacker.getCivInfo().playerType == PlayerType.Human // Only humans get the choice
|
&& attacker.getCivInfo().playerType == PlayerType.Human // Only humans get the choice
|
||||||
-> {
|
-> {
|
||||||
capturedUnit.capturedBy(attacker.getCivInfo())
|
capturedUnit.capturedBy(attacker.getCivInfo())
|
||||||
attacker.getCivInfo().popupAlerts.add(PopupAlert(AlertType.RecapturedCivilian, capturedUnitTile.position.toString()))
|
attacker.getCivInfo().popupAlerts.add(
|
||||||
|
PopupAlert(
|
||||||
|
AlertType.RecapturedCivilian,
|
||||||
|
capturedUnitTile.position.toString()
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> captureOrConvertToWorker(capturedUnit, attacker.getCivInfo())
|
else -> captureOrConvertToWorker(capturedUnit, attacker.getCivInfo())
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!wasDestroyedInstead)
|
if (!wasDestroyedInstead)
|
||||||
defenderCiv.addNotification("An enemy [" + attacker.getName() + "] has captured our [" + defender.getName() + "]",
|
defenderCiv.addNotification(
|
||||||
defender.getTile().position, NotificationCategory.War, attacker.getName(), NotificationIcon.War, defender.getName())
|
"An enemy [${attacker.getName()}] has captured our [${defender.getName()}]",
|
||||||
else
|
defender.getTile().position, NotificationCategory.War, attacker.getName(),
|
||||||
defenderCiv.addNotification("An enemy [" + attacker.getName() + "] has destroyed our [" + defender.getName() + "]",
|
NotificationIcon.War, defender.getName()
|
||||||
defender.getTile().position, NotificationCategory.War, attacker.getName(), NotificationIcon.War, defender.getName())
|
)
|
||||||
|
else {
|
||||||
|
defenderCiv.addNotification(
|
||||||
|
"An enemy [${attacker.getName()}] has destroyed our [${defender.getName()}]",
|
||||||
|
defender.getTile().position, NotificationCategory.War, attacker.getName(),
|
||||||
|
NotificationIcon.War, defender.getName()
|
||||||
|
)
|
||||||
|
triggerDefeatUniques(defender, attacker, capturedUnitTile)
|
||||||
|
}
|
||||||
|
|
||||||
if (checkDefeat)
|
if (checkDefeat)
|
||||||
destroyIfDefeated(defenderCiv, attacker.getCivInfo())
|
destroyIfDefeated(defenderCiv, attacker.getCivInfo())
|
||||||
|
Reference in New Issue
Block a user