mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 03:38:01 +00:00
- Fixed Wall of Tears when it's not the first blocker.
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,57 +1213,59 @@ public class CombatUtil {
|
|||||||
} // end Rampage
|
} // end Rampage
|
||||||
}
|
}
|
||||||
|
|
||||||
if (a.hasKeyword("Flanking") && !b.hasKeyword("Flanking")) {
|
for (Card b : blockers) {
|
||||||
int flankingMagnitude = 0;
|
if (a.hasKeyword("Flanking") && !b.hasKeyword("Flanking")) {
|
||||||
|
int flankingMagnitude = 0;
|
||||||
for (String kw : a.getKeyword()) {
|
|
||||||
if (kw.equals("Flanking")) {
|
for (String kw : a.getKeyword()) {
|
||||||
flankingMagnitude++;
|
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!");
|
|
||||||
}
|
}
|
||||||
} // 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
|
b.addBlockedThisTurn(a);
|
||||||
|
a.addBlockedByThisTurn(b);
|
||||||
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
|
|
||||||
|
|
||||||
a.getDamageHistory().setCreatureGotBlockedThisCombat(true);
|
a.getDamageHistory().setCreatureGotBlockedThisCombat(true);
|
||||||
b.addBlockedThisTurn(a);
|
|
||||||
a.addBlockedByThisTurn(b);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user