- 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) {
CardList battlefield = p.getCardsIn(ZoneType.Battlefield);
CardList sacList = AbilityFactory.filterListByType(battlefield, valid, sa);
sacList = ComputerUtil.sacrificePermanents(amount, sacList, destroy);
sacList = ComputerUtil.sacrificePermanents(amount, sacList, destroy, sa);
return sacList;
}
@@ -518,7 +518,7 @@ public class AbilityFactorySacrifice {
* @param message
* 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) {
CardList battlefield = p.getCardsIn(ZoneType.Battlefield);
CardList list = AbilityFactory.filterListByType(battlefield, valid, sa);

View File

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

View File

@@ -1713,9 +1713,12 @@ public class ComputerUtil {
* a {@link forge.CardList} object.
* @param destroy
* the destroy
* @param source
* the source SpellAbility
* @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();
// used in Annihilator and AF_Sacrifice
int max = list.size();
@@ -1762,7 +1765,7 @@ public class ComputerUtil {
continue;
}
} else {
if (!Singletons.getModel().getGameAction().sacrifice(c, null)) {
if (!Singletons.getModel().getGameAction().sacrifice(c, source)) {
continue;
}
}