mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 20:28:00 +00:00
- Converted Tangle Wire to script
This commit is contained in:
@@ -1,7 +1,10 @@
|
||||
Name:Tangle Wire
|
||||
ManaCost:3
|
||||
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
|
||||
SVar:RemRandomDeck:True
|
||||
SVar:NeedsToPlayVar:Y GE2
|
||||
|
||||
@@ -159,6 +159,27 @@ public class ChooseCardAi extends SpellAbilityAi {
|
||||
Collections.reverse(creats);
|
||||
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 {
|
||||
choice = ComputerUtilCard.getBestAI(options);
|
||||
}
|
||||
|
||||
@@ -17,15 +17,12 @@
|
||||
*/
|
||||
package forge.game.phase;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import com.google.common.base.Predicate;
|
||||
|
||||
import forge.Card;
|
||||
import forge.CardLists;
|
||||
import forge.CardPredicates;
|
||||
import forge.Singletons;
|
||||
import forge.CounterType;
|
||||
import forge.card.ability.AbilityFactory;
|
||||
import forge.card.cardfactory.CardFactoryUtil;
|
||||
@@ -35,12 +32,9 @@ import forge.card.spellability.Ability;
|
||||
import forge.card.spellability.SpellAbility;
|
||||
import forge.card.trigger.TriggerType;
|
||||
import forge.game.Game;
|
||||
import forge.game.ai.ComputerUtilCard;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.player.PlayerController.ManaPaymentPurpose;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.gui.input.InputSelectCards;
|
||||
import forge.gui.input.InputSelectCardsFromList;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -79,8 +73,6 @@ public class Upkeep extends Phase {
|
||||
Upkeep.upkeepUpkeepCost(game); // sacrifice unless upkeep cost is paid
|
||||
Upkeep.upkeepEcho(game);
|
||||
|
||||
Upkeep.upkeepTangleWire(game);
|
||||
|
||||
game.getStack().unfreezeStack();
|
||||
}
|
||||
|
||||
@@ -188,75 +180,4 @@ public class Upkeep extends Phase {
|
||||
|
||||
} // for
|
||||
} // 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
|
||||
|
||||
Reference in New Issue
Block a user