From 77e9ebc456ebdf2dca518140c7f94b7b7b030b92 Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Wed, 15 May 2013 04:03:09 +0000 Subject: [PATCH] more resilent quest loader - handles situations like 'I took quest save from my friend who has all duel decks added to setdata.txt, and this quest fails to load on my machine dues to missing cards' --- src/main/java/forge/item/CardDb.java | 10 +++++++--- src/main/java/forge/quest/io/QuestDataIO.java | 5 +++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/forge/item/CardDb.java b/src/main/java/forge/item/CardDb.java index 6faa7e9df36..a6e35c7fed0 100644 --- a/src/main/java/forge/item/CardDb.java +++ b/src/main/java/forge/item/CardDb.java @@ -150,14 +150,18 @@ public final class CardDb { } public CardPrinted tryGetCard(final String cardName, String setName) { + return tryGetCard(cardName, setName, 0); + } + + public CardPrinted tryGetCard(final String cardName, String setName, int index) { // Set exists? - final Map cardsFromset = this.allCardsBySet.get(setName.toUpperCase()); + final Map cardsFromset = this.allCardsBySet.get(setName); if (cardsFromset == null) { return null; } // Card exists? - final CardPrinted[] cardCopies = cardsFromset.get(cardName.toLowerCase()); - return cardCopies != null ? cardCopies[0] : null; + final CardPrinted[] cardCopies = cardsFromset.get(cardName); + return cardCopies != null && index < cardCopies.length ? cardCopies[index] : null; } // Single fetch diff --git a/src/main/java/forge/quest/io/QuestDataIO.java b/src/main/java/forge/quest/io/QuestDataIO.java index 16ff1cdd8e3..d13d5eb6185 100644 --- a/src/main/java/forge/quest/io/QuestDataIO.java +++ b/src/main/java/forge/quest/io/QuestDataIO.java @@ -669,8 +669,9 @@ public class QuestDataIO { final String sIndex = reader.getAttribute("i"); final short index = StringUtils.isNumeric(sIndex) ? Short.parseShort(sIndex) : 0; final boolean foil = "1".equals(reader.getAttribute("foil")); - final CardPrinted card = CardDb.instance().getCard(name, set, index); - return foil ? CardPrinted.makeFoiled(card) : card; + CardPrinted c = CardDb.instance().tryGetCard(name, set, index); + if ( null == c ) c = CardDb.instance().getCard(name); + return foil ? CardPrinted.makeFoiled(c) : c; } } }