- Convert Scroll Rack to script

This commit is contained in:
Sol
2013-03-22 01:20:43 +00:00
parent 321282299f
commit 1567fa996d
2 changed files with 6 additions and 98 deletions

View File

@@ -1,6 +1,12 @@
Name:Scroll Rack Name:Scroll Rack
ManaCost:2 ManaCost:2
Types:Artifact Types:Artifact
A:AB$ ChangeZone | Cost$ 1 T | Origin$ Hand | Destination$ Exile | ChangeType$ Card | ChangeNum$ XFetch | References$ XFetch | RememberChanged$ True | SubAbility$ DBDig | SpellDescription$ Exile any number of cards from your hand face down. Put that many cards from the top of your library into your hand. Then look at the exiled cards and put them on top of your library in any order. | StackDescription$ SpellDescription
SVar:DBDig:DB$ Dig | DigNum$ X | Reveal$ True | ChangeNum$ All | ChangeValid$ Card | DestinationZone$ Hand | SubAbility$ DBReplace
SVar:DBReplace:DB$ ChangeZoneAll | Origin$ Exile | Destination$ Library | ChangeType$ Card.IsRemembered | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:XFetch:Count$InYourHand
SVar:X:Remembered$Amount
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/scroll_rack.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/scroll_rack.jpg
Oracle:{1}, {T}: Exile any number of cards from your hand face down. Put that many cards from the top of your library into your hand. Then look at the exiled cards and put them on top of your library in any order. Oracle:{1}, {T}: Exile any number of cards from your hand face down. Put that many cards from the top of your library into your hand. Then look at the exiled cards and put them on top of your library in any order.

View File

@@ -5,18 +5,11 @@ import java.util.List;
import forge.Card; import forge.Card;
import forge.Singletons;
import forge.card.cost.Cost; import forge.card.cost.Cost;
import forge.card.spellability.AbilityActivated; import forge.card.spellability.AbilityActivated;
import forge.card.spellability.Target; import forge.card.spellability.Target;
import forge.control.input.Input;
import forge.control.input.InputSelectManyCards;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.zone.PlayerZone;
import forge.game.zone.Zone;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
import forge.gui.match.CMatchUI;
/** /**
* TODO: Write javadoc for this type. * TODO: Write javadoc for this type.
@@ -102,96 +95,5 @@ class CardFactoryArtifacts {
ab1.setStackDescription(sb.toString()); ab1.setStackDescription(sb.toString());
card.addSpellAbility(ab1); card.addSpellAbility(ab1);
} // *************** END ************ END ************************** } // *************** END ************ END **************************
// *************** START *********** START **************************
else if (cardName.equals("Scroll Rack")) {
class AbilityScrollRack extends AbilityActivated {
public AbilityScrollRack(final Card ca, final Cost co, final Target t) {
super(ca, co, t);
}
@Override
public AbilityActivated getCopy() {
AbilityActivated res = new AbilityScrollRack(getSourceCard(),
getPayCosts(), getTarget() == null ? null : new Target(getTarget()));
CardFactory.copySpellAbility(this, res);
return res;
}
private static final long serialVersionUID = -5588587187720068547L;
@Override
public void resolve() {
// not implemented for compy
if (card.getController().isHuman()) {
InputSelectManyCards inp = new InputSelectManyCards(0, Integer.MAX_VALUE) {
private static final long serialVersionUID = 806464726820739922L;
@Override
protected boolean isValidChoice(Card c) {
Zone zone = Singletons.getModel().getGame().getZoneOf(c);
return zone.is(ZoneType.Hand) && c.getController() == card.getController();
}
/* (non-Javadoc)
* @see forge.control.input.InputSelectManyCards#onDone()
*/
@Override
protected Input onDone() {
for (final Card c : selected) {
Singletons.getModel().getGame().getAction().exile(c);
}
// Put that many cards from the top of your
// library into your hand.
// Ruling: This is not a draw...
final PlayerZone lib = card.getController().getZone(ZoneType.Library);
int numCards = 0;
while ((lib.size() > 0) && (numCards < selected.size())) {
Singletons.getModel().getGame().getAction().moveToHand(lib.get(0));
numCards++;
}
final StringBuilder sb = new StringBuilder();
sb.append(card.getName()).append(" - Returning cards to top of library.");
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
// Then look at the exiled cards and put them on
// top of your library in any order.
while (selected.size() > 0) {
final Card c1 = GuiChoose.one("Put a card on top of your library.", selected);
Singletons.getModel().getGame().getAction().moveToLibrary(c1);
selected.remove(c1);
}
return null; }
};
inp.setMessage(card.getName() + " - Exile cards from hand. Currently, %d selected. (Press OK when done.)");
Singletons.getModel().getMatch().getInput().setInput(inp);
}
}
@Override
public boolean canPlayAI() {
return false;
}
}
final Cost abCost = new Cost(card, "1 T", true);
final AbilityActivated ability = new AbilityScrollRack(card, abCost, null);
final StringBuilder sbDesc = new StringBuilder();
sbDesc.append(abCost);
sbDesc.append("Exile any number of cards from your hand face down. Put that many cards ");
sbDesc.append("from the top of your library into your hand. Then look at the exiled cards ");
sbDesc.append("and put them on top of your library in any order.");
ability.setDescription(sbDesc.toString());
final StringBuilder sbStack = new StringBuilder();
sbStack.append(cardName).append(" - exile any number of cards from your hand.");
ability.setStackDescription(sbStack.toString());
card.addSpellAbility(ability);
} // *************** END ************ END **************************
} }
} }