mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 03:38:01 +00:00
DamageMap: use cause for Lifelink part
This commit is contained in:
@@ -120,7 +120,7 @@ public class DamageAllEffect extends DamageBaseEffect {
|
||||
|
||||
if (!usedDamageMap) {
|
||||
preventMap.triggerPreventDamage(false);
|
||||
damageMap.triggerDamageDoneOnce(false);
|
||||
damageMap.triggerDamageDoneOnce(false, sa);
|
||||
}
|
||||
|
||||
replaceDying(sa);
|
||||
|
||||
@@ -162,7 +162,7 @@ public class DamageDealEffect extends DamageBaseEffect {
|
||||
if (!usedDamageMap) {
|
||||
preventMap.triggerPreventDamage(false);
|
||||
// non combat damage cause lifegain there
|
||||
damageMap.triggerDamageDoneOnce(false);
|
||||
damageMap.triggerDamageDoneOnce(false, sa);
|
||||
}
|
||||
replaceDying(sa);
|
||||
return;
|
||||
@@ -201,7 +201,7 @@ public class DamageDealEffect extends DamageBaseEffect {
|
||||
if (!usedDamageMap) {
|
||||
preventMap.triggerPreventDamage(false);
|
||||
// non combat damage cause lifegain there
|
||||
damageMap.triggerDamageDoneOnce(false);
|
||||
damageMap.triggerDamageDoneOnce(false, sa);
|
||||
}
|
||||
replaceDying(sa);
|
||||
}
|
||||
|
||||
@@ -131,7 +131,7 @@ public class DamageEachEffect extends DamageBaseEffect {
|
||||
|
||||
if (!usedDamageMap) {
|
||||
preventMap.triggerPreventDamage(false);
|
||||
damageMap.triggerDamageDoneOnce(false);
|
||||
damageMap.triggerDamageDoneOnce(false, sa);
|
||||
}
|
||||
|
||||
replaceDying(sa);
|
||||
|
||||
@@ -24,7 +24,7 @@ public class DamageResolveEffect extends SpellAbilityEffect {
|
||||
}
|
||||
// non combat damage cause lifegain there
|
||||
if (damageMap != null) {
|
||||
damageMap.triggerDamageDoneOnce(false);
|
||||
damageMap.triggerDamageDoneOnce(false, sa);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ public class FightEffect extends DamageBaseEffect {
|
||||
dealDamage(fighters.get(1), fighters.get(0), dmg2, damageMap, preventMap, sa);
|
||||
|
||||
preventMap.triggerPreventDamage(false);
|
||||
damageMap.triggerDamageDoneOnce(false);
|
||||
damageMap.triggerDamageDoneOnce(false, sa);
|
||||
|
||||
replaceDying(sa);
|
||||
|
||||
|
||||
@@ -213,7 +213,7 @@ public class RepeatEachEffect extends SpellAbilityEffect {
|
||||
sa.getPreventMap().triggerPreventDamage(false);
|
||||
sa.setPreventMap(null);
|
||||
// non combat damage cause lifegain there
|
||||
sa.getDamageMap().triggerDamageDoneOnce(false);
|
||||
sa.getDamageMap().triggerDamageDoneOnce(false, sa);
|
||||
sa.setDamageMap(null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import com.google.common.collect.Sets;
|
||||
import com.google.common.collect.Table;
|
||||
|
||||
import forge.game.GameEntity;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.trigger.TriggerType;
|
||||
|
||||
public class CardDamageMap extends ForwardingTable<Card, GameEntity, Integer> {
|
||||
@@ -35,7 +36,7 @@ public class CardDamageMap extends ForwardingTable<Card, GameEntity, Integer> {
|
||||
}
|
||||
}
|
||||
|
||||
public void triggerDamageDoneOnce(boolean isCombat) {
|
||||
public void triggerDamageDoneOnce(boolean isCombat, final SpellAbility sa) {
|
||||
// Source -> Targets
|
||||
for (Map.Entry<Card, Map<GameEntity, Integer>> e : this.rowMap().entrySet()) {
|
||||
final Card sourceLKI = e.getKey();
|
||||
@@ -53,8 +54,7 @@ public class CardDamageMap extends ForwardingTable<Card, GameEntity, Integer> {
|
||||
sourceLKI.getGame().getTriggerHandler().runTrigger(TriggerType.DamageDealtOnce, runParams, false);
|
||||
|
||||
if (sourceLKI.hasKeyword("Lifelink")) {
|
||||
// FIXME: add sourceSA to fix Firesong and Sunspeaker
|
||||
sourceLKI.getController().gainLife(sum, sourceLKI);
|
||||
sourceLKI.getController().gainLife(sum, sourceLKI, sa);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -809,7 +809,7 @@ public class Combat {
|
||||
|
||||
// Run the trigger to deal combat damage once
|
||||
// LifeLink for Combat Damage at this place
|
||||
dealtDamageTo.triggerDamageDoneOnce(true);
|
||||
dealtDamageTo.triggerDamageDoneOnce(true, null);
|
||||
dealtDamageTo.clear();
|
||||
}
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ public class CostDamage extends CostPart {
|
||||
payer.addDamage(decision.c, source, damageMap, preventMap, null);
|
||||
|
||||
preventMap.triggerPreventDamage(false);
|
||||
damageMap.triggerDamageDoneOnce(false);
|
||||
damageMap.triggerDamageDoneOnce(false, null);
|
||||
|
||||
return decision.c > 0;
|
||||
}
|
||||
|
||||
@@ -427,7 +427,7 @@ public class HumanPlay {
|
||||
p.addDamage(amount, source, damageMap, preventMap, null);
|
||||
|
||||
preventMap.triggerPreventDamage(false);
|
||||
damageMap.triggerDamageDoneOnce(false);
|
||||
damageMap.triggerDamageDoneOnce(false, null);
|
||||
}
|
||||
else if (part instanceof CostPutCounter) {
|
||||
CounterType counterType = ((CostPutCounter) part).getCounter();
|
||||
|
||||
Reference in New Issue
Block a user