From 7d4800a91e406fdc069b330f7220a234b7c7c955 Mon Sep 17 00:00:00 2001 From: Sloth Date: Wed, 31 Aug 2011 10:03:43 +0000 Subject: [PATCH] - Added an AI cost preference for discard costs, the SVar is called "DiscardMe". Squee, Goblin Nabob is an example. --- res/cardsfolder/s/squee_goblin_nabob.txt | 1 + src/main/java/forge/ComputerUtil.java | 16 ++++++++++++++++ src/main/java/forge/card/cost/CostUtil.java | 11 +++++++++-- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/res/cardsfolder/s/squee_goblin_nabob.txt b/res/cardsfolder/s/squee_goblin_nabob.txt index 776ac932d7a..7d61c9b319a 100644 --- a/res/cardsfolder/s/squee_goblin_nabob.txt +++ b/res/cardsfolder/s/squee_goblin_nabob.txt @@ -6,6 +6,7 @@ PT:1/1 T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Graveyard | OptionalDecider$ You | Execute$ TrigChange | TriggerDescription$ At the beginning of your upkeep, you may return CARDNAME from your graveyard to your hand. SVar:TrigChange:AB$ChangeZone | Cost$ 0 | Origin$ Graveyard | Destination$ Hand | Defined$ Self SVar:SacMe:2 +SVar:DiscardMe:2 SVar:Rarity:Rare SVar:Picture:http://www.wizards.com/global/images/magic/general/squee_goblin_nabob.jpg SetInfo:MMQ|Rare|http://magiccards.info/scans/en/mm/214.jpg diff --git a/src/main/java/forge/ComputerUtil.java b/src/main/java/forge/ComputerUtil.java index 317b2cb27e2..96a2648d474 100644 --- a/src/main/java/forge/ComputerUtil.java +++ b/src/main/java/forge/ComputerUtil.java @@ -867,6 +867,22 @@ public class ComputerUtil { } } } + + if (pref.contains("DiscardCost")) { // search for permanents with DiscardMe + for (int ip = 0; ip < 9; ip++) { // priority 0 is the lowest, priority 5 the highest + final int priority = 9 - ip; + CardList SacMeList = typeList.filter(new CardListFilter() { + public boolean addCard(Card c) { + return (!c.getSVar("DiscardMe").equals("") && Integer.parseInt(c.getSVar("DiscardMe")) == priority); + } + }); + if (SacMeList.size() != 0) { + SacMeList.shuffle(); + return SacMeList.get(0); + } + } + } + return null; } diff --git a/src/main/java/forge/card/cost/CostUtil.java b/src/main/java/forge/card/cost/CostUtil.java index 2d08ddb5f74..6b300f267a0 100644 --- a/src/main/java/forge/card/cost/CostUtil.java +++ b/src/main/java/forge/card/cost/CostUtil.java @@ -61,8 +61,15 @@ public class CostUtil { static public boolean checkDiscardCost(Cost cost, Card source){ for(CostPart part : cost.getCostParts()){ - if (part instanceof CostDiscard) - return false; + if (part instanceof CostDiscard) { + CostDiscard disc = (CostDiscard)part; + + String type = disc.getType(); + CardList typeList = AllZoneUtil.getPlayerHand(AllZone.getComputerPlayer()); + typeList = typeList.getValidCards(type.split(","), source.getController(), source); + if (ComputerUtil.getCardPreference(source, "DiscardCost", typeList) == null) + return false; + } } return true; }