DeckManager updated to ignore tokens stored in Quest decks.

QuestUtil updated (poorly) for a quick fix on a couple of errors.
This commit is contained in:
Doublestrike
2011-09-04 01:30:34 +00:00
parent 1bdcc46719
commit 8eefc0cee1
3 changed files with 173 additions and 70 deletions

View File

@@ -49,6 +49,8 @@ public final class Deck implements Comparable<Deck>, Serializable {
public Deck() {
main = new CardPool();
sideboard = new CardPool();
humanExtraCards = new CardPool();
aiExtraCards = new CardPool();
}
/**
@@ -237,7 +239,7 @@ public final class Deck implements Comparable<Deck>, 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); }

View File

@@ -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,6 +361,7 @@ public class DeckManager {
}
}
// readDeck human extras
while (lineIterator.hasNext() && !(line = lineIterator.next()).equals("[ai_extra_cards]")) {
Matcher m = p.matcher(line);
m.matches();
@@ -368,10 +371,19 @@ public class DeckManager {
int count = s == null ? 1 : parseInt(s);
for (int i = 0; i < count; i++) {
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,10 +394,18 @@ public class DeckManager {
int count = s == null ? 1 : parseInt(s);
for (int i = 0; i < count; i++) {
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);
}
}
}
}
/**
* <p>deriveFileName.</p>

View File

@@ -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;
/**
* <p>QuestUtil class.</p>
* 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();
}
/**
* <p>getComputerCreatures.</p>
* 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<String> compCards = qa.getCompy();
for (String s : compCards) {
Card c = AllZone.getCardFactory().getCard(s, AllZone.getComputerPlayer());
c.setCurSetCode(c.getMostRecentSet());
c.setImageFilename(CardUtil.buildFilename(c));
if (sq != null) {
CardPoolView compCards = sq.getDeck().getAIExtraCards();
/*for (String s : compCards) {
Card c = extraCardBuilder(s);
if(c!=null) {
list.add(c);
}
}*/
}
return list;
}
/**
* <p>getHumanPlantAndPet.</p>
* 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 {
/**
* <p>getHumanPlantAndPet.</p>
* 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<Entry<CardPrinted, Integer>> humanCards =
sq.getDeck().getHumanExtraCards().getOrderedList();
for (String s : humanCards) {
Card c = extraCardBuilder(s);
if(c!=null) {
list.add(c);
}
}
}*/
return list;
}
/**
* <p>extraCardBuilder.</p>
* 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(i<tokenProps.length) {
c.addType(tokenProps[i++]);
}
// Example image name: G 0 1 sheep
c.setImageName(tokenProps[1]+" "+tokenProps[2]+" "+tokenProps[3]+" "+tokenProps[4]);
c.setToken(true);
c.addController(AllZone.getHumanPlayer());
c.setOwner(AllZone.getHumanPlayer());
}
}
else if(!s.equals("")) {
c = AllZone.getCardFactory().getCard(s, AllZone.getComputerPlayer());
c.setCurSetCode(c.getMostRecentSet());
c.setImageFilename(CardUtil.buildFilename(c));
}
return c;
}
// THIS INFORMATION WILL BE STORED IN THE DCK FILE.
/**
* <p>setupQuest.</p>
*
* @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<Card> 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