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.

This commit is contained in:
RumbleBBU
2013-02-20 10:31:02 +00:00
parent cac8eab527
commit e61d3242c5
2 changed files with 33 additions and 3 deletions

View File

@@ -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<CardPrinted> boosterCards = new ArrayList<CardPrinted>();
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<CardPrinted> cardChoices = ((IQuestRewardCard) ii).getChoices();
final CardPrinted chosenCard = (null == cardChoices ? null : GuiChoose.one("Choose " + ((IQuestRewardCard) ii).getName() + ":", cardChoices));
if (null != chosenCard) {

View File

@@ -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);