- Improved TriggerCombatDamageDoneOnce to propagate the amount of damage dealt to targets.

- Corrected Armadillo Cloak and Fungusaur as implementation examples for simultaneous combat damage (simultaneous noncombat damage like Aura Barbs is still impossible as of yet, feel free to improve if you know how).
This commit is contained in:
Agetian
2017-09-15 05:12:55 +00:00
parent 093b5451c3
commit 6a74bd841a
4 changed files with 21 additions and 23 deletions

View File

@@ -17,26 +17,9 @@
*/
package forge.game.combat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import forge.game.Game;
import forge.game.spellability.SpellAbilityStackInstance;
import org.apache.commons.lang3.tuple.Pair;
import com.google.common.base.Function;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
import com.google.common.collect.Multimaps;
import com.google.common.collect.Table;
import com.google.common.collect.*;
import forge.game.Game;
import forge.game.GameEntity;
import forge.game.GameLogEntryType;
import forge.game.GameObjectMap;
@@ -45,9 +28,14 @@ import forge.game.card.CardCollection;
import forge.game.card.CardCollectionView;
import forge.game.card.CardDamageMap;
import forge.game.player.Player;
import forge.game.spellability.SpellAbilityStackInstance;
import forge.game.trigger.TriggerType;
import forge.util.collect.FCollection;
import forge.util.collect.FCollectionView;
import org.apache.commons.lang3.tuple.Pair;
import java.util.*;
import java.util.Map.Entry;
/**
* <p>
@@ -818,8 +806,14 @@ public class Combat {
// Run triggers
for (final GameEntity ge : dealtDamageTo.columnKeySet()) {
int totalDmg = 0;
for (Integer dmgEntry : dealtDamageTo.column(ge).values()) {
totalDmg += dmgEntry;
}
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("DamageSources", dealtDamageTo.column(ge).keySet());
runParams.put("DamageAmount", totalDmg);
runParams.put("DamageTarget", ge);
ge.getGame().getTriggerHandler().runTrigger(TriggerType.CombatDamageDoneOnce, runParams, false);
}

View File

@@ -82,13 +82,15 @@ public class TriggerCombatDamageDoneOnce extends Trigger {
public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Sources", this.getRunParams().get("DamageSources"));
sa.setTriggeringObject("Target", this.getRunParams().get("DamageTarget"));
sa.setTriggeringObject("DamageAmount", this.getRunParams().get("DamageAmount"));
}
@Override
public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder();
sb.append("Sources: ").append(sa.getTriggeringObject("Sources")).append(", ");
//sb.append("Sources: ").append(sa.getTriggeringObject("Sources")).append(", "); // FIXME: why does this end up empty at all times?
sb.append("Target: ").append(sa.getTriggeringObject("Target"));
sb.append("Damage: ").append(sa.getTriggeringObject("DamageAmount"));
return sb.toString();
}
}

View File

@@ -4,7 +4,8 @@ Types:Enchantment Aura
K:Enchant creature
A:SP$ Attach | Cost$ 1 G W | ValidTgts$ Creature | AILogic$ Pump
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 2 | AddToughness$ 2 | AddKeyword$ Trample | Description$ Enchanted creature gets +2/+2 and has trample.
T:Mode$ DamageDone | ValidSource$ Card.AttachedBy | Execute$ TrigGain | TriggerZones$ Battlefield | TriggerDescription$ Whenever enchanted creature deals damage, you gain that much life.
T:Mode$ DamageDone | CombatDamage$ False | ValidSource$ Card.AttachedBy | Execute$ TrigGain | TriggerZones$ Battlefield | TriggerDescription$ Whenever enchanted creature deals damage, you gain that much life.
T:Mode$ DealtCombatDamageOnce | Secondary$ True | ValidSource$ Card.AttachedBy | Execute$ TrigGain | TriggerZones$ Battlefield | TriggerDescription$ Whenever enchanted creature deals damage, you gain that much life.
SVar:TrigGain:AB$GainLife | Cost$ 0 | Defined$ You | LifeAmount$ X | References$ X
SVar:X:TriggerCount$DamageAmount
SVar:Picture:http://www.wizards.com/global/images/magic/general/armadillo_cloak.jpg

View File

@@ -2,7 +2,8 @@ Name:Fungusaur
ManaCost:3 G
Types:Creature Fungus Dinosaur
PT:2/2
T:Mode$ DamageDone | ValidTarget$ Card.Self | Execute$ TrigPutCounter | TriggerDescription$ Whenever CARDNAME is dealt damage, put a +1/+1 counter on it.
T:Mode$ DamageDone | CombatDamage$ False | ValidTarget$ Card.Self | Execute$ TrigPutCounter | TriggerDescription$ Whenever CARDNAME is dealt damage, put a +1/+1 counter on it.
T:Mode$ CombatDamageDoneOnce | Secondary$ True | ValidTarget$ Card.Self | Execute$ TrigPutCounter | TriggerDescription$ Whenever CARDNAME is dealt damage, put a +1/+1 counter on it.
SVar:TrigPutCounter:DB$PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1
SVar:HasCombatEffect:TRUE
SVar:Picture:http://www.wizards.com/global/images/magic/general/fungusaur.jpg