From dfd37d14f0c29ac727b9a17d03654af2da8b570d Mon Sep 17 00:00:00 2001 From: Sol Date: Fri, 8 Feb 2013 04:02:22 +0000 Subject: [PATCH] - Convert Painter's Servant to Script --- res/cardsfolder/p/painters_servant.txt | 5 +- .../effects/ChooseColorEffect.java | 14 +++++ .../cardfactory/CardFactoryCreatures.java | 58 +------------------ .../StaticAbilityContinuous.java | 7 ++- 4 files changed, 25 insertions(+), 59 deletions(-) diff --git a/res/cardsfolder/p/painters_servant.txt b/res/cardsfolder/p/painters_servant.txt index 801442b73da..80ded450e09 100644 --- a/res/cardsfolder/p/painters_servant.txt +++ b/res/cardsfolder/p/painters_servant.txt @@ -1,8 +1,11 @@ Name:Painter's Servant ManaCost:2 Types:Artifact Creature Scarecrow -Text:As Painter's Servant enters the battlefield, choose a color.\r\nAll cards that aren't on the battlefield, spells, and permanents are the chosen color in addition to their other colors. +Text:no text PT:1/3 +K:ETBReplacement:Other:ChooseColor +SVar:ChooseColor:DB$ ChooseColor | Defined$ You | SpellDescription$ As CARDNAME enters the battlefield, choose a color. | AILogic$ MostProminentKeywordInComputerDeck +S:Mode$ Continuous| Affected$ Card | AddColor$ ChosenColor | AffectedZone$ Battlefield,Hand,Library,Graveyard,Exile,Stack | Description$ All cards that aren't on the battlefield, spells, and permanents are the chosen color in addition to their other colors. SVar:Rarity:Rare SVar:Picture:http://www.wizards.com/global/images/magic/general/painters_servant.jpg SetInfo:SHM|Rare|http://magiccards.info/scans/en/shm/257.jpg diff --git a/src/main/java/forge/card/abilityfactory/effects/ChooseColorEffect.java b/src/main/java/forge/card/abilityfactory/effects/ChooseColorEffect.java index 386ea0e49a6..0a6fc440909 100644 --- a/src/main/java/forge/card/abilityfactory/effects/ChooseColorEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/ChooseColorEffect.java @@ -101,6 +101,20 @@ public class ChooseColorEffect extends SpellEffect { chosen.add(CardFactoryUtil.getMostProminentColor(Singletons.getModel().getGame().getCombat() .getAttackerList())); } + else if (logic.equals("MostProminentKeywordInComputerDeck")) { + List list = ai.getAllCards(); + int max = 0; + String chosenColor = Constant.Color.WHITE; + + for (final String c : Constant.Color.ONLY_COLORS) { + final int cmp = CardLists.filter(list, CardPredicates.containsKeyword(c)).size(); + if (cmp > max) { + max = cmp; + chosenColor = c; + } + } + chosen.add(chosenColor); + } } if (chosen.size() == 0) { chosen.add(Constant.Color.GREEN); diff --git a/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java b/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java index 416bdea0fb4..9b366f8997c 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java @@ -68,60 +68,6 @@ import forge.util.Aggregates; * @version $Id$ */ public class CardFactoryCreatures { - private static void getCard_PainterServant(final Card card) { - final long[] timeStamp = new long[1]; - final String[] color = new String[1]; - - final Command comesIntoPlay = new Command() { - private static final long serialVersionUID = 333134223161L; - - @Override - public void execute() { - if (card.getController().isHuman()) { - color[0] = GuiChoose.one("Choose color", Constant.Color.ONLY_COLORS); - } else { - // AI chooses the color that appears in the keywords of - // the most cards in its deck, hand and on battlefield - final List list = new ArrayList(); - list.addAll(card.getController().getCardsIn(ZoneType.Library)); - list.addAll(card.getController().getCardsIn(ZoneType.Hand)); - list.addAll(card.getController().getCardsIn(ZoneType.Battlefield)); - - color[0] = Constant.Color.WHITE; - int max = 0; - CardLists.filter(list, CardPredicates.containsKeyword(color[0])).size(); - - for (final String c : Constant.Color.ONLY_COLORS) { - final int cmp = CardLists.filter(list, CardPredicates.containsKeyword(c)).size(); - if (cmp > max) { - max = cmp; - color[0] = c; - } - } - } - final ArrayList colors = new ArrayList(); - colors.add(color[0]); - card.setChosenColor(colors); - final String s = CardUtil.getShortColor(color[0]); - - timeStamp[0] = Singletons.getModel().getGame().getColorChanger().addColorChanges(s, card, true, true); - } - }; // Command - - final Command leavesBattlefield = new Command() { - private static final long serialVersionUID = 2559212590399132459L; - - @Override - public void execute() { - final String s = CardUtil.getShortColor(color[0]); - Singletons.getModel().getGame().getColorChanger().removeColorChanges(s, card, true, timeStamp[0]); - } - }; - - card.addComesIntoPlayCommand(comesIntoPlay); - card.addLeavesPlayCommand(leavesBattlefield); - } - private static void getCard_Stangg(final Card card) { final Ability ability = new Ability(card, SpellManaCost.ZERO) { @@ -803,9 +749,7 @@ public class CardFactoryCreatures { public static void buildCard(final Card card, final String cardName) { - if (cardName.equals("Painter's Servant")) { - getCard_PainterServant(card); - } else if (cardName.equals("Stangg")) { + if (cardName.equals("Stangg")) { getCard_Stangg(card); } else if (cardName.equals("Sphinx of Jwar Isle")) { getCard_SphinxJwar(card); diff --git a/src/main/java/forge/card/staticability/StaticAbilityContinuous.java b/src/main/java/forge/card/staticability/StaticAbilityContinuous.java index 84a6aef436d..f41876f8d19 100644 --- a/src/main/java/forge/card/staticability/StaticAbilityContinuous.java +++ b/src/main/java/forge/card/staticability/StaticAbilityContinuous.java @@ -223,8 +223,13 @@ public class StaticAbilityContinuous { } if (params.containsKey("AddColor")) { - addColors = CardUtil.getShortColorsString(new ArrayList(Arrays.asList(params.get("AddColor").split( + final String colors = params.get("AddColor"); + if (colors.equals("ChosenColor")) { + addColors = CardUtil.getShortColorsString(hostCard.getChosenColor()); + } else { + addColors = CardUtil.getShortColorsString(new ArrayList(Arrays.asList(colors.split( " & ")))); + } } if (params.containsKey("SetColor")) {