mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 20:58:03 +00:00
- Converted Tangle Wire to script
This commit is contained in:
@@ -1,7 +1,10 @@
|
|||||||
Name:Tangle Wire
|
Name:Tangle Wire
|
||||||
ManaCost:3
|
ManaCost:3
|
||||||
Types:Artifact
|
Types:Artifact
|
||||||
Text:At the beginning of each player's upkeep, that player taps an untapped artifact, creature, or land he or she controls for each fade counter on CARDNAME.
|
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | TriggerZones$ Battlefield | Execute$ TrigChooseToTap | TriggerDescription$ At the beginning of each player's upkeep, that player taps an untapped artifact, creature, or land he or she controls for each fade counter on CARDNAME.
|
||||||
|
SVar:TrigChooseToTap:AB$ ChooseCard | Cost$ 0 | Defined$ TriggeredPlayer | Choices$ Artifact.ActivePlayerCtrl,Creature.ActivePlayerCtrl,Land.ActivePlayerCtrl | Amount$ X | References$ X | Mandatory$ True | AILogic$ TangleWire | SubAbility$ DBTap
|
||||||
|
SVar:DBTap:DB$ Tap | Defined$ ChosenCard
|
||||||
|
SVar:X:Count$CardCounters.FADE
|
||||||
K:Fading:4
|
K:Fading:4
|
||||||
SVar:RemRandomDeck:True
|
SVar:RemRandomDeck:True
|
||||||
SVar:NeedsToPlayVar:Y GE2
|
SVar:NeedsToPlayVar:Y GE2
|
||||||
|
|||||||
@@ -159,6 +159,27 @@ public class ChooseCardAi extends SpellAbilityAi {
|
|||||||
Collections.reverse(creats);
|
Collections.reverse(creats);
|
||||||
choice = creats.get(0);
|
choice = creats.get(0);
|
||||||
}
|
}
|
||||||
|
} else if ("TangleWire".equals(logic)) {
|
||||||
|
List<Card> betterList = CardLists.filter(options, new Predicate<Card>() {
|
||||||
|
@Override
|
||||||
|
public boolean apply(final Card c) {
|
||||||
|
if (c.isCreature()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (SpellAbility sa : c.getAllSpellAbilities()) {
|
||||||
|
if (sa.getPayCosts() != null && sa.getPayCosts().hasTapCost()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
System.out.println("Tangle Wire" + options + " - " + betterList);
|
||||||
|
if (!betterList.isEmpty()) {
|
||||||
|
choice = betterList.get(0);
|
||||||
|
} else {
|
||||||
|
choice = ComputerUtilCard.getWorstPermanentAI(options, false, false, false, false);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
choice = ComputerUtilCard.getBestAI(options);
|
choice = ComputerUtilCard.getBestAI(options);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,15 +17,12 @@
|
|||||||
*/
|
*/
|
||||||
package forge.game.phase;
|
package forge.game.phase;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import com.google.common.base.Predicate;
|
import com.google.common.base.Predicate;
|
||||||
|
|
||||||
import forge.Card;
|
import forge.Card;
|
||||||
import forge.CardLists;
|
import forge.CardLists;
|
||||||
import forge.CardPredicates;
|
|
||||||
import forge.Singletons;
|
|
||||||
import forge.CounterType;
|
import forge.CounterType;
|
||||||
import forge.card.ability.AbilityFactory;
|
import forge.card.ability.AbilityFactory;
|
||||||
import forge.card.cardfactory.CardFactoryUtil;
|
import forge.card.cardfactory.CardFactoryUtil;
|
||||||
@@ -35,12 +32,9 @@ import forge.card.spellability.Ability;
|
|||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.trigger.TriggerType;
|
import forge.card.trigger.TriggerType;
|
||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
import forge.game.ai.ComputerUtilCard;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.player.PlayerController.ManaPaymentPurpose;
|
import forge.game.player.PlayerController.ManaPaymentPurpose;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.input.InputSelectCards;
|
|
||||||
import forge.gui.input.InputSelectCardsFromList;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -79,8 +73,6 @@ public class Upkeep extends Phase {
|
|||||||
Upkeep.upkeepUpkeepCost(game); // sacrifice unless upkeep cost is paid
|
Upkeep.upkeepUpkeepCost(game); // sacrifice unless upkeep cost is paid
|
||||||
Upkeep.upkeepEcho(game);
|
Upkeep.upkeepEcho(game);
|
||||||
|
|
||||||
Upkeep.upkeepTangleWire(game);
|
|
||||||
|
|
||||||
game.getStack().unfreezeStack();
|
game.getStack().unfreezeStack();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,75 +180,4 @@ public class Upkeep extends Phase {
|
|||||||
|
|
||||||
} // for
|
} // for
|
||||||
} // upkeepCost
|
} // upkeepCost
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* upkeepTangleWire.
|
|
||||||
* </p>
|
|
||||||
*/
|
|
||||||
private static void upkeepTangleWire(final Game game) {
|
|
||||||
final Player player = game.getPhaseHandler().getPlayerTurn();
|
|
||||||
final List<Card> wires = CardLists.filter(game.getCardsIn(ZoneType.Battlefield), CardPredicates.nameEquals("Tangle Wire"));
|
|
||||||
|
|
||||||
for (final Card source : wires) {
|
|
||||||
final SpellAbility ability = new Ability(source, ManaCost.ZERO) {
|
|
||||||
@Override
|
|
||||||
public void resolve() {
|
|
||||||
final int num = source.getCounters(CounterType.FADE);
|
|
||||||
final List<Card> list = new ArrayList<Card>();
|
|
||||||
for( Card c : player.getCardsIn(ZoneType.Battlefield)) {
|
|
||||||
if ((c.isArtifact() || c.isLand() || c.isCreature()) && c.isUntapped())
|
|
||||||
list.add(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (player.isComputer()) {
|
|
||||||
for (int i = 0; i < num; i++) {
|
|
||||||
Card toTap = ComputerUtilCard.getWorstPermanentAI(list, false, false, false, false);
|
|
||||||
// try to find non creature cards without tap abilities
|
|
||||||
List<Card> betterList = CardLists.filter(list, new Predicate<Card>() {
|
|
||||||
@Override
|
|
||||||
public boolean apply(final Card c) {
|
|
||||||
if (c.isCreature()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
for (SpellAbility sa : c.getAllSpellAbilities()) {
|
|
||||||
if (sa.getPayCosts() != null && sa.getPayCosts().hasTapCost()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
System.out.println("Tangle Wire" + list + " - " + betterList);
|
|
||||||
if (!betterList.isEmpty()) {
|
|
||||||
toTap = betterList.get(0);
|
|
||||||
}
|
|
||||||
if (null != toTap) {
|
|
||||||
toTap.tap();
|
|
||||||
list.remove(toTap);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (list.size() > num){
|
|
||||||
InputSelectCards inp = new InputSelectCardsFromList(num, num, list);
|
|
||||||
inp.setMessage(source.getName() + " - Select %d untapped artifact(s), creature(s), or land(s) you control");
|
|
||||||
Singletons.getControl().getInputQueue().setInputAndWait(inp);
|
|
||||||
for(Card crd : inp.getSelected())
|
|
||||||
crd.tap();
|
|
||||||
} else {
|
|
||||||
for(Card crd : list)
|
|
||||||
crd.tap();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
String message = source.getName() + " - " + player + " taps X artifacts, creatures or lands he or she controls.";
|
|
||||||
ability.setStackDescription(message);
|
|
||||||
ability.setDescription(message);
|
|
||||||
ability.setActivatingPlayer(source.getController());
|
|
||||||
|
|
||||||
game.getStack().addSimultaneousStackEntry(ability);
|
|
||||||
|
|
||||||
} // foreach(wire)
|
|
||||||
} // upkeepTangleWire()
|
|
||||||
} // end class Upkeep
|
} // end class Upkeep
|
||||||
|
|||||||
Reference in New Issue
Block a user