diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactorySacrifice.java b/src/main/java/forge/card/abilityfactory/AbilityFactorySacrifice.java index da3388716b2..e561c74e4b2 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactorySacrifice.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactorySacrifice.java @@ -25,6 +25,7 @@ import forge.AllZone; import forge.AllZoneUtil; import forge.Card; import forge.CardList; +import forge.CardUtil; import forge.Singletons; import forge.card.cardfactory.CardFactoryUtil; import forge.card.cost.Cost; @@ -460,7 +461,9 @@ public class AbilityFactorySacrifice { else { CardList sacList = null; for (final Player p : tgts) { - if (p.isComputer()) { + if (params.containsKey("Random")) { + sacList = AbilityFactorySacrifice.sacrificeRandom(p, amount, valid, sa, destroy); + } else if (p.isComputer()) { if (params.containsKey("Optional") && sa.getActivatingPlayer().isHuman()) { continue; } @@ -556,6 +559,42 @@ public class AbilityFactorySacrifice { return sacList; } + /** + *
+ * sacrificeRandom. + *
+ * + * @param p + * a {@link forge.game.player.Player} object. + * @param amount + * a int. + * @param valid + * a {@link java.lang.String} object. + * @param sa + * a {@link forge.card.spellability.SpellAbility} object. + */ + private static CardList sacrificeRandom(final Player p, final int amount, final String valid, final SpellAbility sa, + final boolean destroy) { + CardList sacList = new CardList(); + for (int i = 0; i < amount; i++) { + CardList battlefield = p.getCardsIn(ZoneType.Battlefield); + CardList list = AbilityFactory.filterListByType(battlefield, valid, sa); + if (list.size() != 0) { + final Card sac = CardUtil.getRandom(list.toArray()); + if (destroy) { + if (Singletons.getModel().getGameAction().destroy(sac)) { + sacList.add(sac); + } + } else { + if (Singletons.getModel().getGameAction().sacrifice(sac, sa)) { + sacList.add(sac); + } + } + } + } + return sacList; + } + // ************************************************************** // *********************** SacrificeAll ************************* // **************************************************************