- Further steps towards the player keyword "Spells and abilities your opponents control can't cause you to sacrifice permanents."

This commit is contained in:
Sloth
2012-04-29 10:48:00 +00:00
parent 8d6f8ed2d7
commit 15a4bc1304
3 changed files with 12 additions and 7 deletions

View File

@@ -497,7 +497,7 @@ public class AbilityFactorySacrifice {
final boolean destroy) { final boolean destroy) {
CardList battlefield = p.getCardsIn(ZoneType.Battlefield); CardList battlefield = p.getCardsIn(ZoneType.Battlefield);
CardList sacList = AbilityFactory.filterListByType(battlefield, valid, sa); CardList sacList = AbilityFactory.filterListByType(battlefield, valid, sa);
sacList = ComputerUtil.sacrificePermanents(amount, sacList, destroy); sacList = ComputerUtil.sacrificePermanents(amount, sacList, destroy, sa);
return sacList; return sacList;
} }
@@ -518,7 +518,7 @@ public class AbilityFactorySacrifice {
* @param message * @param message
* a {@link java.lang.String} object. * a {@link java.lang.String} object.
*/ */
private static CardList sacrificeHuman(final Player p, final int amount, final String valid, final SpellAbility sa, public static CardList sacrificeHuman(final Player p, final int amount, final String valid, final SpellAbility sa,
final boolean destroy, final boolean optional) { final boolean destroy, final boolean optional) {
CardList battlefield = p.getCardsIn(ZoneType.Battlefield); CardList battlefield = p.getCardsIn(ZoneType.Battlefield);
CardList list = AbilityFactory.filterListByType(battlefield, valid, sa); CardList list = AbilityFactory.filterListByType(battlefield, valid, sa);

View File

@@ -41,6 +41,7 @@ import forge.GameEntity;
import forge.Singletons; import forge.Singletons;
import forge.card.TriggerReplacementBase; import forge.card.TriggerReplacementBase;
import forge.card.abilityfactory.AbilityFactory; import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.AbilityFactorySacrifice;
import forge.card.cardfactory.CardFactoryUtil; import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.Ability; import forge.card.spellability.Ability;
import forge.card.staticability.StaticAbility; import forge.card.staticability.StaticAbility;
@@ -50,7 +51,6 @@ import forge.card.trigger.TriggerType;
import forge.control.input.InputPayManaCostAbility; import forge.control.input.InputPayManaCostAbility;
import forge.game.player.ComputerUtil; import forge.game.player.ComputerUtil;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.player.PlayerUtil;
import forge.game.zone.PlayerZone; import forge.game.zone.PlayerZone;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.gui.GuiUtils; import forge.gui.GuiUtils;
@@ -2548,9 +2548,10 @@ public class CombatUtil {
public void resolve() { public void resolve() {
if (crd.getController().isHuman()) { if (crd.getController().isHuman()) {
final CardList list = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield); final CardList list = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield);
ComputerUtil.sacrificePermanents(a, list, false); ComputerUtil.sacrificePermanents(a, list, false, this);
} else { } else {
AllZone.getInputControl().setInput(PlayerUtil.inputSacrificePermanents(a)); AbilityFactorySacrifice.sacrificeHuman(AllZone.getHumanPlayer(), a, "Permanent", this,
false, false);
} }
} }
@@ -2559,6 +2560,7 @@ public class CombatUtil {
sb.append("Annihilator - Defending player sacrifices ").append(a).append(" permanents."); sb.append("Annihilator - Defending player sacrifices ").append(a).append(" permanents.");
ability.setStackDescription(sb.toString()); ability.setStackDescription(sb.toString());
ability.setDescription(sb.toString()); ability.setDescription(sb.toString());
ability.setActivatingPlayer(c.getController());
AllZone.getStack().add(ability); AllZone.getStack().add(ability);
} // find } // find

View File

@@ -1713,9 +1713,12 @@ public class ComputerUtil {
* a {@link forge.CardList} object. * a {@link forge.CardList} object.
* @param destroy * @param destroy
* the destroy * the destroy
* @param source
* the source SpellAbility
* @return the card list * @return the card list
*/ */
public static CardList sacrificePermanents(final int amount, final CardList list, final boolean destroy) { public static CardList sacrificePermanents(final int amount, final CardList list, final boolean destroy,
SpellAbility source) {
final CardList sacList = new CardList(); final CardList sacList = new CardList();
// used in Annihilator and AF_Sacrifice // used in Annihilator and AF_Sacrifice
int max = list.size(); int max = list.size();
@@ -1762,7 +1765,7 @@ public class ComputerUtil {
continue; continue;
} }
} else { } else {
if (!Singletons.getModel().getGameAction().sacrifice(c, null)) { if (!Singletons.getModel().getGameAction().sacrifice(c, source)) {
continue; continue;
} }
} }