From e61d3242c56520413fbb44ab039893686648a5a2 Mon Sep 17 00:00:00 2001 From: RumbleBBU Date: Wed, 20 Feb 2013 10:31:02 +0000 Subject: [PATCH] Added support for specific extra boosters and even tournament packs as challenge rewards. Needless to say, caution should be exercised before handing out such generous rewards, especially tournament packs. --- .../java/forge/gui/match/QuestWinLose.java | 22 ++++++++++++++++++- src/main/java/forge/quest/BoosterUtils.java | 14 ++++++++++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/main/java/forge/gui/match/QuestWinLose.java b/src/main/java/forge/gui/match/QuestWinLose.java index 996c6429fe6..0c6c59ec5ee 100644 --- a/src/main/java/forge/gui/match/QuestWinLose.java +++ b/src/main/java/forge/gui/match/QuestWinLose.java @@ -40,9 +40,12 @@ import forge.gui.SOverlayUtils; import forge.gui.home.quest.CSubmenuChallenges; import forge.gui.home.quest.CSubmenuDuels; import forge.gui.toolbox.FSkin; +import forge.item.BoosterPack; import forge.item.CardDb; import forge.item.CardPrinted; import forge.item.InventoryItem; +import forge.item.OpenablePack; +import forge.item.TournamentPack; import forge.properties.ForgePreferences.FPref; import forge.quest.QuestEventChallenge; import forge.quest.QuestController; @@ -694,7 +697,24 @@ public class QuestWinLose extends ControlWinLose { for (InventoryItem ii : itemsWon) { if (ii instanceof CardPrinted) { cardsWon.add((CardPrinted) ii); - } else if (ii instanceof IQuestRewardCard) { + } else if (ii instanceof TournamentPack || ii instanceof BoosterPack) { + List boosterCards = new ArrayList(); + OpenablePack booster = null; + if (ii instanceof BoosterPack) { + booster = (BoosterPack) ((BoosterPack) ii).clone(); + boosterCards.addAll(booster.getCards()); + } else if (ii instanceof TournamentPack) { + booster = (TournamentPack) ((TournamentPack) ii).clone(); + boosterCards.addAll(booster.getCards()); + } + if (!boosterCards.isEmpty()) { + qData.getCards().addAllCards(boosterCards); + final QuestWinLoseCardViewer cv = new QuestWinLoseCardViewer(boosterCards); + this.view.getPnlCustom().add(new TitleLabel("Extra " + ii.getName() + "!"), QuestWinLose.CONSTRAINTS_TITLE); + this.view.getPnlCustom().add(cv, QuestWinLose.CONSTRAINTS_CARDS); + } + } + else if (ii instanceof IQuestRewardCard) { final List cardChoices = ((IQuestRewardCard) ii).getChoices(); final CardPrinted chosenCard = (null == cardChoices ? null : GuiChoose.one("Choose " + ((IQuestRewardCard) ii).getName() + ":", cardChoices)); if (null != chosenCard) { diff --git a/src/main/java/forge/quest/BoosterUtils.java b/src/main/java/forge/quest/BoosterUtils.java index 9ab41f3b4d8..1845cbc926d 100644 --- a/src/main/java/forge/quest/BoosterUtils.java +++ b/src/main/java/forge/quest/BoosterUtils.java @@ -18,6 +18,7 @@ package forge.quest; import java.util.ArrayList; + import java.util.Collections; import java.util.List; @@ -34,9 +35,11 @@ import forge.card.BoosterGenerator; import forge.card.CardRulesPredicates; import forge.card.CardRules; import forge.card.UnOpenedProduct; +import forge.item.BoosterPack; import forge.item.CardDb; import forge.item.CardPrinted; import forge.item.InventoryItem; +import forge.item.TournamentPack; import forge.util.Aggregates; import forge.util.MyRandom; @@ -304,8 +307,15 @@ public final class BoosterUtils { } else if (temp.length >= 2 && temp[0].equalsIgnoreCase("chosen") && temp[1].equalsIgnoreCase("card")) { // Type 3: a duplicate card of the players choice rewards.add(new QuestRewardCardFiltered(temp)); - } else if (temp.length > 0) { - // Type 4: assume we are asking for a single copy of a specific card + } else if (temp.length >= 3 && temp[0].equalsIgnoreCase("booster") && temp[1].equalsIgnoreCase("pack")) { + // Type 4: a predetermined extra booster pack + rewards.add(BoosterPack.FN_FROM_SET.apply(Singletons.getModel().getEditions().get(temp[2]))); + } else if (temp.length >= 3 && temp[0].equalsIgnoreCase("tournament") && temp[1].equalsIgnoreCase("pack")) { + // Type 5: a predetermined extra tournament ("starter") pack + rewards.add(TournamentPack.FN_FROM_SET.apply(Singletons.getModel().getEditions().get(temp[2]))); + } + else if (temp.length > 0) { + // default: assume we are asking for a single copy of a specific card final CardPrinted specific = CardDb.instance().getCard(s); if (specific != null) { rewards.add(specific);