* Combat - Creatures forced to attack can no longer be removed from attack by using the undo button (e.g. Bident of Thassa).

This commit is contained in:
LevelX2 2014-06-20 14:19:03 +02:00
parent e51213a72a
commit 7d2b1c076a
10 changed files with 24 additions and 20 deletions

View file

@ -232,16 +232,16 @@ public class Combat implements Serializable, Copyable<Combat> {
creaturesForcedToAttack.put(creature.getId(), defendersForcedToAttack);
if (defendersForcedToAttack.isEmpty()) {
if (defenders.size() == 1) {
player.declareAttacker(creature.getId(), defenders.iterator().next(), game);
player.declareAttacker(creature.getId(), defenders.iterator().next(), game, false);
} else {
TargetDefender target = new TargetDefender(defenders, creature.getId());
target.setRequired(true);
if (player.chooseTarget(Outcome.Damage, target, null, game)) {
player.declareAttacker(creature.getId(), target.getFirstTarget(), game);
player.declareAttacker(creature.getId(), target.getFirstTarget(), game, false);
}
}
} else {
player.declareAttacker(creature.getId(), defendersForcedToAttack.iterator().next(), game);
player.declareAttacker(creature.getId(), defendersForcedToAttack.iterator().next(), game, false);
}
}

View file

@ -325,7 +325,7 @@ public interface Player extends MageItem, Copyable<Player> {
void construct(Tournament tournament, Deck deck);
void pickCard(List<Card> cards, Deck deck, Draft draft);
void declareAttacker(UUID attackerId, UUID defenderId, Game game);
void declareAttacker(UUID attackerId, UUID defenderId, Game game, boolean allowUndo);
void declareBlocker(UUID defenderId, UUID blockerId, UUID attackerId, Game game);
List<Permanent> getAvailableAttackers(Game game);
List<Permanent> getAvailableBlockers(Game game);

View file

@ -1650,8 +1650,10 @@ public abstract class PlayerImpl implements Player, Serializable {
}
@Override
public void declareAttacker(UUID attackerId, UUID defenderId, Game game) {
setStoredBookmark(game.bookmarkState()); // makes it possible to UNDO a declared attacker with costs from e.g. Propaganda
public void declareAttacker(UUID attackerId, UUID defenderId, Game game, boolean allowUndo) {
if (allowUndo) {
setStoredBookmark(game.bookmarkState()); // makes it possible to UNDO a declared attacker with costs from e.g. Propaganda
}
Permanent attacker = game.getPermanent(attackerId);
if (attacker != null && attacker.canAttack(game) && attacker.getControllerId().equals(playerId)) {
if (!game.replaceEvent(GameEvent.getEvent(GameEvent.EventType.DECLARE_ATTACKER, defenderId, attackerId, playerId))) {