- Fixed Wall of Tears when it's not the first blocker.

This commit is contained in:
Sloth
2013-05-26 11:28:56 +00:00
parent 3c891dea5e
commit 21e17a5fd6
3 changed files with 65 additions and 59 deletions

View File

@@ -17,6 +17,7 @@
*/ */
package forge.card.trigger; package forge.card.trigger;
import java.util.List;
import java.util.Map; import java.util.Map;
import forge.Card; import forge.Card;
@@ -58,8 +59,16 @@ public class TriggerAttackerBlocked extends Trigger {
} }
} }
if (this.mapParams.containsKey("ValidBlocker")) { if (this.mapParams.containsKey("ValidBlocker")) {
if (!matchesValid(runParams2.get("Blocker"), this.mapParams.get("ValidBlocker").split(","), boolean valid = false;
this.getHostCard())) { @SuppressWarnings("unchecked")
List<Card> list = (List<Card>) runParams2.get("Blockers");
for (Card b : list) {
if (matchesValid(b, this.mapParams.get("ValidBlocker").split(","), this.getHostCard())) {
valid = true;
break;
}
}
if (!valid) {
return false; return false;
} }
} }

View File

@@ -1179,20 +1179,18 @@ public class CombatUtil {
* @param b * @param b
* a {@link forge.Card} object. * 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<Card> blockers) {
// System.out.println(a.getName() + " got blocked by " + b.getName()); // System.out.println(a.getName() + " got blocked by " + b.getName());
// Run triggers // Run triggers
final HashMap<String, Object> runParams = new HashMap<String, Object>(); final HashMap<String, Object> runParams = new HashMap<String, Object>();
runParams.put("Attacker", a); 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); //game.getTriggerHandler().runTrigger(TriggerType.Blocks, runParams, false);
if (!a.getDamageHistory().getCreatureGotBlockedThisCombat()) { if (!a.getDamageHistory().getCreatureGotBlockedThisCombat()) {
final int blockers = game.getCombat().getBlockers(a).size();
runParams.put("NumBlockers", blockers);
game.getTriggerHandler().runTrigger(TriggerType.AttackerBlocked, runParams, false);
// Bushido // Bushido
for (final Ability ab : CardFactoryUtil.getBushidoEffects(a)) { for (final Ability ab : CardFactoryUtil.getBushidoEffects(a)) {
game.getStack().add(ab); game.getStack().add(ab);
@@ -1215,6 +1213,7 @@ public class CombatUtil {
} // end Rampage } // end Rampage
} }
for (Card b : blockers) {
if (a.hasKeyword("Flanking") && !b.hasKeyword("Flanking")) { if (a.hasKeyword("Flanking") && !b.hasKeyword("Flanking")) {
int flankingMagnitude = 0; int flankingMagnitude = 0;
@@ -1260,14 +1259,15 @@ public class CombatUtil {
game.getStack().add(ability2); game.getStack().add(ability2);
Log.debug("Adding Flanking!"); Log.debug("Adding Flanking!");
} // flanking } // flanking
a.getDamageHistory().setCreatureGotBlockedThisCombat(true);
b.addBlockedThisTurn(a); b.addBlockedThisTurn(a);
a.addBlockedByThisTurn(b); a.addBlockedByThisTurn(b);
} }
a.getDamageHistory().setCreatureGotBlockedThisCombat(true);
}
/** /**
* <p> * <p>
* executeExaltedAbility. * executeExaltedAbility.

View File

@@ -263,10 +263,7 @@ public class PhaseUtil {
CombatUtil.checkDeclareBlockers(game, list); CombatUtil.checkDeclareBlockers(game, list);
for (final Card a : attList) { for (final Card a : attList) {
final List<Card> blockList = combat.getBlockers(a); CombatUtil.checkBlockedAttackers(game, a, combat.getBlockers(a));
for (final Card b : blockList) {
CombatUtil.checkBlockedAttackers(game, a, b);
}
} }
game.getStack().unfreezeStack(); game.getStack().unfreezeStack();