From 21e17a5fd6bcba39df6eec2f11882d2b29fb4d84 Mon Sep 17 00:00:00 2001 From: Sloth Date: Sun, 26 May 2013 11:28:56 +0000 Subject: [PATCH] - Fixed Wall of Tears when it's not the first blocker. --- .../card/trigger/TriggerAttackerBlocked.java | 13 ++- .../java/forge/game/phase/CombatUtil.java | 106 +++++++++--------- src/main/java/forge/game/phase/PhaseUtil.java | 5 +- 3 files changed, 65 insertions(+), 59 deletions(-) diff --git a/src/main/java/forge/card/trigger/TriggerAttackerBlocked.java b/src/main/java/forge/card/trigger/TriggerAttackerBlocked.java index ee5f4525aa8..dea204b5b61 100644 --- a/src/main/java/forge/card/trigger/TriggerAttackerBlocked.java +++ b/src/main/java/forge/card/trigger/TriggerAttackerBlocked.java @@ -17,6 +17,7 @@ */ package forge.card.trigger; +import java.util.List; import java.util.Map; import forge.Card; @@ -58,8 +59,16 @@ public class TriggerAttackerBlocked extends Trigger { } } if (this.mapParams.containsKey("ValidBlocker")) { - if (!matchesValid(runParams2.get("Blocker"), this.mapParams.get("ValidBlocker").split(","), - this.getHostCard())) { + boolean valid = false; + @SuppressWarnings("unchecked") + List list = (List) runParams2.get("Blockers"); + for (Card b : list) { + if (matchesValid(b, this.mapParams.get("ValidBlocker").split(","), this.getHostCard())) { + valid = true; + break; + } + } + if (!valid) { return false; } } diff --git a/src/main/java/forge/game/phase/CombatUtil.java b/src/main/java/forge/game/phase/CombatUtil.java index dc96137416b..9f42845eabd 100644 --- a/src/main/java/forge/game/phase/CombatUtil.java +++ b/src/main/java/forge/game/phase/CombatUtil.java @@ -1179,20 +1179,18 @@ public class CombatUtil { * @param b * a {@link forge.Card} object. */ - public static void checkBlockedAttackers(final GameState game, final Card a, final Card b) { + public static void checkBlockedAttackers(final GameState game, final Card a, final List blockers) { // System.out.println(a.getName() + " got blocked by " + b.getName()); // Run triggers final HashMap runParams = new HashMap(); runParams.put("Attacker", a); - runParams.put("Blocker", b); + runParams.put("Blockers", blockers); + runParams.put("NumBlockers", blockers.size()); + game.getTriggerHandler().runTrigger(TriggerType.AttackerBlocked, runParams, false); //game.getTriggerHandler().runTrigger(TriggerType.Blocks, runParams, false); if (!a.getDamageHistory().getCreatureGotBlockedThisCombat()) { - final int blockers = game.getCombat().getBlockers(a).size(); - runParams.put("NumBlockers", blockers); - game.getTriggerHandler().runTrigger(TriggerType.AttackerBlocked, runParams, false); - // Bushido for (final Ability ab : CardFactoryUtil.getBushidoEffects(a)) { game.getStack().add(ab); @@ -1215,57 +1213,59 @@ public class CombatUtil { } // end Rampage } - if (a.hasKeyword("Flanking") && !b.hasKeyword("Flanking")) { - int flankingMagnitude = 0; - - for (String kw : a.getKeyword()) { - if (kw.equals("Flanking")) { - flankingMagnitude++; - } - } - final int mag = flankingMagnitude; - final Card blocker = b; - final Ability ability2 = new Ability(b, ManaCost.ZERO) { - @Override - public void resolve() { - - final Command untilEOT = new Command() { - - private static final long serialVersionUID = 7662543891117427727L; - - @Override - public void run() { - if (blocker.isInPlay()) { - blocker.addTempAttackBoost(mag); - blocker.addTempDefenseBoost(mag); - } - } - }; // Command - - if (blocker.isInPlay()) { - blocker.addTempAttackBoost(-mag); - blocker.addTempDefenseBoost(-mag); - - game.getEndOfTurn().addUntil(untilEOT); - System.out.println("Flanking!"); + for (Card b : blockers) { + if (a.hasKeyword("Flanking") && !b.hasKeyword("Flanking")) { + int flankingMagnitude = 0; + + for (String kw : a.getKeyword()) { + if (kw.equals("Flanking")) { + flankingMagnitude++; } - } // resolve + } + final int mag = flankingMagnitude; + final Card blocker = b; + final Ability ability2 = new Ability(b, ManaCost.ZERO) { + @Override + public void resolve() { + + final Command untilEOT = new Command() { + + private static final long serialVersionUID = 7662543891117427727L; + + @Override + public void run() { + if (blocker.isInPlay()) { + blocker.addTempAttackBoost(mag); + blocker.addTempDefenseBoost(mag); + } + } + }; // Command + + if (blocker.isInPlay()) { + blocker.addTempAttackBoost(-mag); + blocker.addTempDefenseBoost(-mag); + + game.getEndOfTurn().addUntil(untilEOT); + System.out.println("Flanking!"); + } + } // resolve + + }; // ability + + final StringBuilder sb2 = new StringBuilder(); + sb2.append(b.getName()).append(" - gets -").append(mag).append("/-").append(mag).append(" until EOT."); + ability2.setStackDescription(sb2.toString()); + ability2.setDescription(sb2.toString()); + + game.getStack().add(ability2); + Log.debug("Adding Flanking!"); + } // flanking - }; // ability - - final StringBuilder sb2 = new StringBuilder(); - sb2.append(b.getName()).append(" - gets -").append(mag).append("/-").append(mag).append(" until EOT."); - ability2.setStackDescription(sb2.toString()); - ability2.setDescription(sb2.toString()); - - game.getStack().add(ability2); - Log.debug("Adding Flanking!"); - - } // flanking + b.addBlockedThisTurn(a); + a.addBlockedByThisTurn(b); + } a.getDamageHistory().setCreatureGotBlockedThisCombat(true); - b.addBlockedThisTurn(a); - a.addBlockedByThisTurn(b); } /** diff --git a/src/main/java/forge/game/phase/PhaseUtil.java b/src/main/java/forge/game/phase/PhaseUtil.java index 19af9e62224..10080d0b9c3 100644 --- a/src/main/java/forge/game/phase/PhaseUtil.java +++ b/src/main/java/forge/game/phase/PhaseUtil.java @@ -263,10 +263,7 @@ public class PhaseUtil { CombatUtil.checkDeclareBlockers(game, list); for (final Card a : attList) { - final List blockList = combat.getBlockers(a); - for (final Card b : blockList) { - CombatUtil.checkBlockedAttackers(game, a, b); - } + CombatUtil.checkBlockedAttackers(game, a, combat.getBlockers(a)); } game.getStack().unfreezeStack();