diff --git a/src/main/java/forge/deck/Deck.java b/src/main/java/forge/deck/Deck.java index 375b0236e38..323aae97065 100644 --- a/src/main/java/forge/deck/Deck.java +++ b/src/main/java/forge/deck/Deck.java @@ -47,8 +47,10 @@ public final class Deck implements Comparable, Serializable { *

Constructor for Deck.

*/ public Deck() { - main = new CardPool(); - sideboard = new CardPool(); + main = new CardPool(); + sideboard = new CardPool(); + humanExtraCards = new CardPool(); + aiExtraCards = new CardPool(); } /** @@ -237,7 +239,7 @@ public final class Deck implements Comparable, Serializable { * * @param cardName a {@link java.lang.String} object. */ - public void addAIExtraCards(final String cardName) { addHumanExtraCards(CardDb.instance().getCard(cardName)); } + public void addAIExtraCards(final String cardName) { addAIExtraCards(CardDb.instance().getCard(cardName)); } public void addAIExtraCards(final CardPrinted card) { aiExtraCards.add(card); } public void addAIExtraCards(final CardPoolView list) { aiExtraCards.addAll(list); } public void removeAIExtraCards(final CardPrinted card) { aiExtraCards.remove(card); } diff --git a/src/main/java/forge/deck/DeckManager.java b/src/main/java/forge/deck/DeckManager.java index d66fe7a3863..2e88721a471 100644 --- a/src/main/java/forge/deck/DeckManager.java +++ b/src/main/java/forge/deck/DeckManager.java @@ -1,9 +1,11 @@ package forge.deck; +import forge.Card; import forge.Constant; import forge.card.CardPrinted; import forge.error.ErrorViewer; +import forge.quest.data.QuestUtil; import java.io.*; import java.util.*; @@ -359,19 +361,29 @@ public class DeckManager { } } + // readDeck human extras while (lineIterator.hasNext() && !(line = lineIterator.next()).equals("[ai_extra_cards]")) { Matcher m = p.matcher(line); m.matches(); String s = m.group(2); String cardName = m.group(3); if (StringUtils.isBlank(cardName)) { continue; } - + int count = s == null ? 1 : parseInt(s); for (int i = 0; i < count; i++) { - d.addHumanExtraCards(cardName); + if(cardName.substring(0,5).equals("TOKEN")) { + System.out.println("DeckManager: Token ignored ("+cardName+")"); + // Build token below, but of type Card, not CardPrinted, + // so can't be added to deck. + //Card c = QuestUtil.extraCardBuilder(cardName); + } + else { + d.addHumanExtraCards(cardName); + } } } + // readDeck AI extras while (lineIterator.hasNext()) { line = lineIterator.next(); Matcher m = p.matcher(line); @@ -382,7 +394,15 @@ public class DeckManager { int count = s == null ? 1 : parseInt(s); for (int i = 0; i < count; i++) { - d.addAIExtraCards(cardName); + if(cardName.substring(0,5).equals("TOKEN")) { + System.out.println("DeckManager: Token ignored ("+cardName+")"); + // Build token below, but of type Card, not CardPrinted, + // so can't be added to deck. + //Card c = QuestUtil.extraCardBuilder(cardName); + } + else { + d.addAIExtraCards(cardName); + } } } } diff --git a/src/main/java/forge/quest/data/QuestUtil.java b/src/main/java/forge/quest/data/QuestUtil.java index 7a885a75ce7..528e2547b25 100644 --- a/src/main/java/forge/quest/data/QuestUtil.java +++ b/src/main/java/forge/quest/data/QuestUtil.java @@ -1,12 +1,15 @@ package forge.quest.data; -import forge.*; -import forge.card.CardRarity; +import java.util.List; +import java.util.Map.Entry; -import java.util.ArrayList; +import forge.*; +import forge.card.CardPoolView; +import forge.card.CardPrinted; /** *

QuestUtil class.

+ * General utility class for quest tasks. * * @author Forge * @version $Id$ @@ -19,41 +22,43 @@ public class QuestUtil { * @param qd a {@link forge.quest.data.QuestData} object. * @return a {@link forge.CardList} object. */ - public static CardList getComputerCreatures(final QuestData qd) { + public static CardList getAIExtraCards(QuestData qd) { return new CardList(); } - + /** *

getComputerCreatures.

+ * Assembles extra cards computer will have in play. * * @param qd a {@link forge.quest.data.QuestData} object. * @param qa a {@link forge.Quest_Assignment} object. * @return a {@link forge.CardList} object. */ - public static CardList getComputerCreatures(final QuestData qd, Quest_Assignment qa) { + public static CardList getAIExtraCards(QuestData qd, DeckSingleQuest sq) { CardList list = new CardList(); - if (qa != null) { - ArrayList compCards = qa.getCompy(); + if (sq != null) { + CardPoolView compCards = sq.getDeck().getAIExtraCards(); - for (String s : compCards) { - Card c = AllZone.getCardFactory().getCard(s, AllZone.getComputerPlayer()); - - c.setCurSetCode(c.getMostRecentSet()); - c.setImageFilename(CardUtil.buildFilename(c)); - - list.add(c); - } + /*for (String s : compCards) { + Card c = extraCardBuilder(s); + if(c!=null) { + list.add(c); + } + }*/ } return list; } - + /** *

getHumanPlantAndPet.

+ * Starts up empty list of extra cards for human. + * Adds plant and pet as appropriate. * * @param qd a {@link forge.quest.data.QuestData} object. * @return a {@link forge.CardList} object. */ - public static CardList getHumanPlantAndPet(final QuestData qd) { + public static CardList getHumanExtraCards(QuestData qd) { + System.out.println("LOOKATME"); CardList list = new CardList(); if (qd.getPetManager().shouldPetBeUsed()) { @@ -69,38 +74,115 @@ public class QuestUtil { /** *

getHumanPlantAndPet.

+ * Checks for plant and pet, then adds extra cards for human from quest deck. + * Assembles extra cards human will have in play. * * @param qd a {@link forge.quest.data.QuestData} object. - * @param qa a {@link forge.Quest_Assignment} object. + * @param qq a DeckSingleQuest object. * @return a {@link forge.CardList} object. */ - public static CardList getHumanPlantAndPet(final QuestData qd, Quest_Assignment qa) { - CardList list = getHumanPlantAndPet(qd); + public static CardList getHumanExtraCards(QuestData qd, DeckSingleQuest sq) { + CardList list = getHumanExtraCards(qd); - if (qa != null) { - list.addAll(qa.getHuman()); - } + /*if (sq != null) { + List> humanCards = + sq.getDeck().getHumanExtraCards().getOrderedList(); + for (String s : humanCards) { + Card c = extraCardBuilder(s); + if(c!=null) { + list.add(c); + } + } + }*/ return list; } + + /** + *

extraCardBuilder.

+ * Assembles card objects for extra cards and tokens for AI and human. + * + * @param String card name + * @return Card object. + */ + public static Card extraCardBuilder(String s) { + Card c = null; + int i; + + if(s.substring(0,5).equals("TOKEN")) { + String[] tokenProps = s.split("\\|"); + + if(tokenProps.length < 6) { + System.err.println("QuestUtil > extraCardBuilder() reports an " + + "incomplete token in the current deck.\n"+ + "Token should follow the form:\n"+ + "TOKEN|color|attack|defense|name|type|type...\n"+ + "For example: TOKEN|G|0|1|sheep|Creature"); + return c; + } + else { + c = new Card(); + + c.setManaCost("0"); + c.addColor(tokenProps[1]); + c.setBaseAttack(Integer.parseInt(tokenProps[2])); + c.setBaseDefense(Integer.parseInt(tokenProps[3])); + + // Uppercase each word in name + StringBuilder name = new StringBuilder(tokenProps[4]); + i = 0; + do { + name.replace(i, i + 1, name.substring(i,i + 1).toUpperCase()); + i = name.indexOf(" ", i) + 1; + } while (i > 0 && i < name.length()); + c.setName(name.toString()); + + i = 4; + while(isetupQuest.

* * @param qa a {@link forge.Quest_Assignment} object. */ + + /* public static void setupQuest(Quest_Assignment qa) { QuestBoosterPack pack = new QuestBoosterPack(); qa.clearCompy(); int id = qa.getId(); + Generator cards = YieldUtils.toGenerator(AllZone.getCardFactory()); + if (id == 1) //White Dungeon { qa.addCompy("Divine Presence"); - qa.setCardRewardList(pack.generateCards(3, CardRarity.Rare, Constant.Color.White)); + qa.setCardRewardList(pack.generateCards(cards, 3, Constant.Rarity.Rare, Constant.Color.White)); } else if (id == 2) //Blue Dungeon { CardList humanList = new CardList(); @@ -115,17 +197,17 @@ public class QuestUtil { qa.addCompy("Forced Fruition"); - qa.setCardRewardList(pack.generateCards(3, CardRarity.Rare, Constant.Color.Blue)); + qa.setCardRewardList(pack.generateCards(cards, 3, Constant.Rarity.Rare, Constant.Color.Blue)); } else if (id == 3) //Black Dungeon { qa.addCompy("Infernal Genesis"); - qa.setCardRewardList(pack.generateCards(3, CardRarity.Rare, Constant.Color.Black)); + qa.setCardRewardList(pack.generateCards(cards, 3, Constant.Rarity.Rare, Constant.Color.Black)); } else if (id == 4) //Red Dungeon { qa.addCompy("Furnace of Rath"); - qa.setCardRewardList(pack.generateCards(3, CardRarity.Rare, Constant.Color.Red)); + qa.setCardRewardList(pack.generateCards(cards, 3, Constant.Rarity.Rare, Constant.Color.Red)); } else if (id == 5) //Green Dungeon { CardList humanList = new CardList(); @@ -141,17 +223,17 @@ public class QuestUtil { qa.addCompy("Eladamri's Vineyard"); qa.addCompy("Upwelling"); - qa.setCardRewardList(pack.generateCards(3, CardRarity.Rare, Constant.Color.Green)); + qa.setCardRewardList(pack.generateCards(cards, 3, Constant.Rarity.Rare, Constant.Color.Green)); } else if (id == 6) //Colorless Dungeon { for (int i = 0; i < 3; i++) qa.addCompy("Eon Hub"); - qa.setCardRewardList(pack.generateCards(3, CardRarity.Rare, Constant.Color.Colorless)); + qa.setCardRewardList(pack.generateCards(cards, 3, Constant.Rarity.Rare, Constant.Color.Colorless)); } else if (id == 7) //Gold Dungeon { qa.addCompy("Darksteel Ingot"); - qa.setCardRewardList(pack.generateCards(3, CardRarity.Rare, "Multicolor")); + qa.setCardRewardList(pack.generateCards(cards, 3, Constant.Rarity.Rare, "Multicolor")); } else if (id == 8) { CardList humanList = new CardList(); for (int i = 0; i < 3; i++) { @@ -176,7 +258,7 @@ public class QuestUtil { humanList.add(c); } qa.setHuman(humanList); - qa.setCardRewardList(pack.generateCards(3, CardRarity.Rare, null)); + qa.setCardRewardList(pack.generateCards(cards, 3, Constant.Rarity.Rare, null)); } else if (id == 9) { CardList humanList = new CardList(); Card c = AllZone.getCardFactory().getCard("Trusty Machete", AllZone.getHumanPlayer()); @@ -191,7 +273,7 @@ public class QuestUtil { for (int i = 0; i < 3; i++) qa.addCompy("Wall of Wood"); - qa.setCardRewardList(pack.generateCards(4, CardRarity.Rare, Constant.Color.Green)); + qa.setCardRewardList(pack.generateCards(cards, 4, Constant.Rarity.Rare, Constant.Color.Green)); } else if (id == 10) { CardList humanList = new CardList(); @@ -229,7 +311,7 @@ public class QuestUtil { qa.addCompy("Scathe Zombies"); qa.addCompy("Mass of Ghouls"); - qa.setCardRewardList(pack.generateCards(4, CardRarity.Rare, Constant.Color.Black)); + qa.setCardRewardList(pack.generateCards(cards, 4, Constant.Rarity.Rare, Constant.Color.Black)); } else if (id == 11) // The King's Contest { CardList humanList = new CardList(); @@ -244,7 +326,7 @@ public class QuestUtil { qa.addCompy("Loyal Retainers"); - qa.setCardRewardList(pack.generateCards(3, CardRarity.Rare, null)); + qa.setCardRewardList(pack.generateCards(cards, 3, Constant.Rarity.Rare, null)); } else if (id == 12) // Barroom Brawl { CardList humanList = new CardList(); @@ -275,7 +357,7 @@ public class QuestUtil { qa.addCompy("Lowland Giant"); - qa.setCardRewardList(pack.generateCards(4, CardRarity.Rare, null)); + qa.setCardRewardList(pack.generateCards(cards, 4, Constant.Rarity.Rare, null)); } else if (id == 13) // The Court Jester { CardList humanList = new CardList(); @@ -290,7 +372,7 @@ public class QuestUtil { qa.addCompy("Teferi's Puzzle Box"); - qa.setCardRewardList(pack.generateCards(4, CardRarity.Rare, "Multicolor")); + qa.setCardRewardList(pack.generateCards(cards, 4, Constant.Rarity.Rare, "Multicolor")); } else if (id == 14) // Ancient Battlefield { CardList humanList = new CardList(); @@ -312,7 +394,7 @@ public class QuestUtil { qa.addCompy(compySetupCards[i]); } - qa.setCardRewardList(pack.generateCards(4, CardRarity.Rare, null)); + qa.setCardRewardList(pack.generateCards(cards, 4, Constant.Rarity.Rare, null)); } else if (id == 15) // Don't Play With Matches { CardList humanList = new CardList(); @@ -334,11 +416,11 @@ public class QuestUtil { qa.addCompy(compySetupCards[i]); } - qa.setCardRewardList(pack.generateCards(4, CardRarity.Rare, Constant.Color.Red)); + qa.setCardRewardList(pack.generateCards(cards, 4, Constant.Rarity.Rare, Constant.Color.Red)); } else if (id == 16) // Mines of Kazum Durl { CardList humanList = new CardList(); - String[] humanSetupCards = {"Dwarven Demolition Team", "Dwarven Pony", "Dwarven Trader"}; + String humanSetupCards[] = {"Dwarven Demolition Team", "Dwarven Pony", "Dwarven Trader"}; for (int i = 0; i < 3; i++) { Card c = AllZone.getCardFactory().getCard(humanSetupCards[i], AllZone.getHumanPlayer()); @@ -350,18 +432,18 @@ public class QuestUtil { } qa.setHuman(humanList); - String[] compySetupCards = + String compySetupCards[] = {"Wall of Earth", "Wall of Air", "Wall of Ice", "Wall of Light", "Carrion Wall", "Steel Wall"}; for (int i = 0; i < 6; i++) { qa.addCompy(compySetupCards[i]); } - qa.setCardRewardList(pack.generateCards(4, CardRarity.Rare, Constant.Color.Green)); + qa.setCardRewardList(pack.generateCards(cards, 4, Constant.Rarity.Rare, Constant.Color.Green)); } else if (id == 17) // House Party { CardList humanList = new CardList(); - String[] humanSetupCards = {"Hopping Automaton", "Honden of Life's Web", "Forbidden Orchard"}; + String humanSetupCards[] = {"Hopping Automaton", "Honden of Life's Web", "Forbidden Orchard"}; for (int i = 0; i < 3; i++) { Card c = AllZone.getCardFactory().getCard(humanSetupCards[i], AllZone.getHumanPlayer()); @@ -373,17 +455,17 @@ public class QuestUtil { } qa.setHuman(humanList); - String[] compySetupCards = {"Honden of Infinite Rage", "Mikokoro, Center of the Sea", "Tidehollow Strix"}; + String compySetupCards[] = {"Honden of Infinite Rage", "Mikokoro, Center of the Sea", "Tidehollow Strix"}; for (int i = 0; i < 3; i++) { qa.addCompy(compySetupCards[i]); } - qa.setCardRewardList(pack.generateCards(4, CardRarity.Rare, Constant.Color.Colorless)); + qa.setCardRewardList(pack.generateCards(cards, 4, Constant.Rarity.Rare, Constant.Color.Colorless)); } else if (id == 18) // Crows in the Field { CardList humanList = new CardList(); - String[] humanSetupCards = {"Straw Soldiers", "Femeref Archers", "Moonglove Extract"}; + String humanSetupCards[] = {"Straw Soldiers", "Femeref Archers", "Moonglove Extract"}; for (int i = 0; i < 3; i++) { Card c = AllZone.getCardFactory().getCard(humanSetupCards[i], AllZone.getHumanPlayer()); @@ -395,17 +477,17 @@ public class QuestUtil { } qa.setHuman(humanList); - String[] compySetupCards = {"Defiant Falcon", "Soulcatcher", "Storm Crow", "Hypnotic Specter"}; + String compySetupCards[] = {"Defiant Falcon", "Soulcatcher", "Storm Crow", "Hypnotic Specter"}; for (int i = 0; i < 4; i++) { qa.addCompy(compySetupCards[i]); } - qa.setCardRewardList(pack.generateCards(5, CardRarity.Rare, null)); + qa.setCardRewardList(pack.generateCards(cards, 5, Constant.Rarity.Rare, null)); } else if (id == 19) // The Desert Caravan { CardList humanList = new CardList(); - String[] humanSetupCards = {"Spidersilk Net", "Dromad Purebred"}; + String humanSetupCards[] = {"Spidersilk Net", "Dromad Purebred"}; for (int i = 0; i < 2; i++) { Card c = AllZone.getCardFactory().getCard(humanSetupCards[i], AllZone.getHumanPlayer()); @@ -417,17 +499,17 @@ public class QuestUtil { } qa.setHuman(humanList); - String[] compySetupCards = {"Ambush Party", "Ambush Party", "Gnat Alley Creeper", "Ambush Party", "Ambush Party"}; + String compySetupCards[] = {"Ambush Party", "Ambush Party", "Gnat Alley Creeper", "Ambush Party", "Ambush Party"}; for (int i = 0; i < 5; i++) { qa.addCompy(compySetupCards[i]); } - qa.setCardRewardList(pack.generateCards(5, CardRarity.Rare, null)); + qa.setCardRewardList(pack.generateCards(cards, 5, Constant.Rarity.Rare, null)); } else if (id == 20) // Blood Oath { CardList humanList = new CardList(); - String[] humanSetupCards = {"Counterbalance", "Hatching Plans", "Ley Druid"}; + String humanSetupCards[] = {"Counterbalance", "Hatching Plans", "Ley Druid"}; for (int i = 0; i < 3; i++) { Card c = AllZone.getCardFactory().getCard(humanSetupCards[i], AllZone.getHumanPlayer()); @@ -439,13 +521,13 @@ public class QuestUtil { } qa.setHuman(humanList); - String[] compySetupCards = {"Ior Ruin Expedition", "Oversold Cemetery", "Trapjaw Kelpie"}; + String compySetupCards[] = {"Ior Ruin Expedition", "Oversold Cemetery", "Trapjaw Kelpie"}; for (int i = 0; i < 3; i++) { qa.addCompy(compySetupCards[i]); } - qa.setCardRewardList(pack.generateCards(5, CardRarity.Rare, Constant.Color.Colorless)); + qa.setCardRewardList(pack.generateCards(cards, 5, Constant.Rarity.Rare, Constant.Color.Colorless)); } else if (id == 21) // Private Domain { CardList humanList = new CardList(); @@ -459,17 +541,16 @@ public class QuestUtil { qa.setHuman(humanList); - String[] compySetupCards = {"Plains", "Island", "Swamp", "Mountain", "Forest"}; + String compySetupCards[] = {"Plains", "Island", "Swamp", "Mountain", "Forest"}; - for (int i = 0; i < 5; i++) { + for (int i = 0; i < 5; i++) qa.addCompy(compySetupCards[i]); - } - qa.setCardRewardList(pack.generateCards(6, CardRarity.Rare, null)); + qa.setCardRewardList(pack.generateCards(cards, 6, Constant.Rarity.Rare, null)); } else if (id == 22) // Pied Piper { CardList humanList = new CardList(); - String[] humanSetupCards = {"Volunteer Militia", "Land Tax", "Elvish Farmer", "An-Havva Township"}; + String humanSetupCards[] = {"Volunteer Militia", "Land Tax", "Elvish Farmer", "An-Havva Township"}; for (int i = 0; i < 4; i++) { Card c = AllZone.getCardFactory().getCard(humanSetupCards[i], AllZone.getHumanPlayer()); @@ -481,15 +562,15 @@ public class QuestUtil { } qa.setHuman(humanList); - String[] compySetupCards = {"Darksteel Citadel", "Relentless Rats"}; + String compySetupCards[] = {"Darksteel Citadel", "Relentless Rats"}; - for (int i = 0; i < 2; i++) { + for (int i = 0; i < 2; i++) qa.addCompy(compySetupCards[i]); - } - qa.setCardRewardList(pack.generateCards(3, CardRarity.Rare, null)); + qa.setCardRewardList(pack.generateCards(cards, 3, Constant.Rarity.Rare, null)); } } + */ -} //QuestUtil +}//QuestUtil