mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 12:48:00 +00:00
Panglacial Wurm: support altcosts (#5243)
This commit is contained in:
@@ -12,8 +12,8 @@ import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.*;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.player.PlayerCollection;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.trigger.TriggerType;
|
||||
import forge.game.zone.Zone;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.Lang;
|
||||
@@ -45,56 +45,14 @@ public class ChangeZoneAllEffect extends SpellAbilityEffect {
|
||||
final List<ZoneType> origin = ZoneType.listValueOf(sa.getParam("Origin"));
|
||||
|
||||
CardCollection cards;
|
||||
List<Player> tgtPlayers = getTargetPlayers(sa);
|
||||
PlayerCollection tgtPlayers = getTargetPlayers(sa);
|
||||
final Game game = sa.getActivatingPlayer().getGame();
|
||||
|
||||
if ((!sa.usesTargeting() && !sa.hasParam("Defined")) || sa.hasParam("UseAllOriginZones")) {
|
||||
cards = new CardCollection(game.getCardsIn(origin));
|
||||
tgtPlayers = game.getPlayers();
|
||||
} else {
|
||||
cards = new CardCollection();
|
||||
for (final Player p : tgtPlayers) {
|
||||
cards.addAll(p.getCardsIn(origin));
|
||||
|
||||
if (origin.contains(ZoneType.Library) && sa.hasParam("Search") && !sa.getActivatingPlayer().canSearchLibraryWith(sa, p)) {
|
||||
cards.removeAll(p.getCardsIn(ZoneType.Library));
|
||||
}
|
||||
}
|
||||
if (origin.contains(ZoneType.Library) && sa.hasParam("Search")) {
|
||||
// Search library using changezoneall effect need a param "Search"
|
||||
if (sa.getActivatingPlayer().hasKeyword("LimitSearchLibrary")) {
|
||||
for (final Player p : tgtPlayers) {
|
||||
cards.removeAll(p.getCardsIn(ZoneType.Library));
|
||||
int fetchNum = Math.min(p.getCardsIn(ZoneType.Library).size(), 4);
|
||||
cards.addAll(p.getCardsIn(ZoneType.Library, fetchNum));
|
||||
}
|
||||
}
|
||||
if (!sa.getActivatingPlayer().canSearchLibraryWith(sa, null)) {
|
||||
// all these cards have "then that player shuffles", mandatory shuffle
|
||||
cards.removeAll(game.getCardsIn(ZoneType.Library));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (origin.contains(ZoneType.Library) && sa.hasParam("Search") && sa.getActivatingPlayer().canSearchLibraryWith(sa, null)) {
|
||||
CardCollection libCards = CardLists.getValidCards(cards, "Card.inZoneLibrary", sa.getActivatingPlayer(), source, sa);
|
||||
CardCollection libCardsYouOwn = CardLists.filterControlledBy(libCards, sa.getActivatingPlayer());
|
||||
if (!libCardsYouOwn.isEmpty()) { // Only searching one's own library would fire Archive Trap's altcost
|
||||
sa.getActivatingPlayer().incLibrarySearched();
|
||||
}
|
||||
if (!libCards.isEmpty()) {
|
||||
sa.getActivatingPlayer().getController().reveal(libCards, ZoneType.Library, libCards.get(0).getOwner());
|
||||
}
|
||||
final Map<AbilityKey, Object> runParams = AbilityKey.mapFromPlayer(sa.getActivatingPlayer());
|
||||
runParams.put(AbilityKey.Target, tgtPlayers);
|
||||
game.getTriggerHandler().runTrigger(TriggerType.SearchedLibrary, runParams, false);
|
||||
}
|
||||
if (origin.contains(ZoneType.Hand) && sa.hasParam("Search")) {
|
||||
CardCollection handCards = CardLists.filterControlledBy(CardLists.getValidCards(cards, "Card.inZoneHand", sa.getActivatingPlayer(), source, sa),
|
||||
sa.getActivatingPlayer().getOpponents());
|
||||
if (!handCards.isEmpty()) {
|
||||
sa.getActivatingPlayer().getController().reveal(handCards, ZoneType.Hand, handCards.get(0).getOwner());
|
||||
}
|
||||
cards = tgtPlayers.getCardsIn(origin);
|
||||
}
|
||||
|
||||
if (sa.hasParam("Optional")) {
|
||||
|
||||
@@ -4,6 +4,8 @@ import com.google.common.base.Predicates;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import forge.card.CardStateName;
|
||||
import forge.card.CardType;
|
||||
import forge.game.*;
|
||||
import forge.game.ability.AbilityKey;
|
||||
@@ -877,14 +879,9 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
|
||||
Player chooser = null;
|
||||
if (sa.hasParam("Chooser")) {
|
||||
final String choose = sa.getParam("Chooser");
|
||||
if (choose.equals("Targeted") && sa.getTargets().isTargetingAnyPlayer()) {
|
||||
chooser = sa.getTargets().getFirstTargetedPlayer();
|
||||
} else {
|
||||
final FCollectionView<Player> choosers = AbilityUtils.getDefinedPlayers(sa.getHostCard(), sa.getParam("Chooser"), sa);
|
||||
if (!choosers.isEmpty()) {
|
||||
chooser = sa.getActivatingPlayer().getController().chooseSingleEntityForEffect(choosers, null, sa, Localizer.getInstance().getMessage("lblChooser") + ":", false, null, null);
|
||||
}
|
||||
final FCollectionView<Player> choosers = AbilityUtils.getDefinedPlayers(sa.getHostCard(), sa.getParam("Chooser"), sa);
|
||||
if (!choosers.isEmpty()) {
|
||||
chooser = sa.getActivatingPlayer().getController().chooseSingleEntityForEffect(choosers, null, sa, Localizer.getInstance().getMessage("lblChooser") + ":", false, null, null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1052,7 +1049,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
"While you're searching your library, you may cast CARDNAME from your library.");
|
||||
decider.getController().tempShowCards(canCastWhileSearching);
|
||||
for (final Card tgtCard : canCastWhileSearching) {
|
||||
List<SpellAbility> sas = AbilityUtils.getBasicSpellsFromPlayEffect(tgtCard, decider);
|
||||
List<SpellAbility> sas = AbilityUtils.getSpellsFromPlayEffect(tgtCard, decider, CardStateName.Original, true);
|
||||
if (sas.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -1594,7 +1594,7 @@ public class CardFactoryUtil {
|
||||
|
||||
final String effect = "DB$ ChangeZone | ValidTgts$ Player | TgtPrompt$ Select target player" +
|
||||
" | Origin$ Library | Destination$ Hand | ChangeType$ Card.named" + k[1] +
|
||||
" | Hidden$ True | Chooser$ Targeted | Optional$ Targeted";
|
||||
" | Hidden$ True | Chooser$ Targeted | Optional$ True";
|
||||
|
||||
final Trigger trigger = TriggerHandler.parseTrigger(trigStr, card, intrinsic);
|
||||
trigger.setOverridingAbility(AbilityFactory.getAbility(effect, card));
|
||||
|
||||
Reference in New Issue
Block a user