- 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;
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<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;
}
}

View File

@@ -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<Card> blockers) {
// System.out.println(a.getName() + " got blocked by " + b.getName());
// Run triggers
final HashMap<String, Object> runParams = new HashMap<String, Object>();
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 (Card b : blockers) {
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 (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() {
}; // ability
final Command untilEOT = new Command() {
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());
private static final long serialVersionUID = 7662543891117427727L;
game.getStack().add(ability2);
Log.debug("Adding Flanking!");
@Override
public void run() {
if (blocker.isInPlay()) {
blocker.addTempAttackBoost(mag);
blocker.addTempDefenseBoost(mag);
}
}
}; // Command
} // flanking
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
b.addBlockedThisTurn(a);
a.addBlockedByThisTurn(b);
}
a.getDamageHistory().setCreatureGotBlockedThisCombat(true);
b.addBlockedThisTurn(a);
a.addBlockedByThisTurn(b);
}
/**

View File

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