From b21e22f75a3cd036eadad75c479ef3d4890fa7f0 Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Mon, 14 Jan 2013 05:26:29 +0000 Subject: [PATCH] Commander: SB is 0 or 10 cards Quest: sold cards should be correctly removed from sideboard --- src/main/java/forge/deck/DeckFormat.java | 14 +++++++------- src/main/java/forge/quest/QuestUtilCards.java | 14 +++++++++++++- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/main/java/forge/deck/DeckFormat.java b/src/main/java/forge/deck/DeckFormat.java index 5e8ffeeba84..b8e8dc25dfd 100644 --- a/src/main/java/forge/deck/DeckFormat.java +++ b/src/main/java/forge/deck/DeckFormat.java @@ -33,13 +33,13 @@ import forge.util.Aggregates; */ public enum DeckFormat { - // Main board: allowed size SB: restriction Max distinct non basic cards - Constructed ( new IntRange(60, Integer.MAX_VALUE), new IntRange(15), 4), - Limited ( new IntRange(40, Integer.MAX_VALUE), null, Integer.MAX_VALUE), - Commander ( new IntRange(99), new IntRange(0, 10), 1), - Vanguard ( new IntRange(60, Integer.MAX_VALUE), new IntRange(0), 4), - Planechase ( new IntRange(60, Integer.MAX_VALUE), new IntRange(0), 4), - Archenemy ( new IntRange(60, Integer.MAX_VALUE), new IntRange(0), 4); + // Main board: allowed size SB: restriction Max distinct non basic cards + Constructed ( new IntRange(60, Integer.MAX_VALUE), new IntRange(15), 4), + Limited ( new IntRange(40, Integer.MAX_VALUE), null, Integer.MAX_VALUE), + Commander ( new IntRange(99), new IntRange(10), 1), + Vanguard ( new IntRange(60, Integer.MAX_VALUE), new IntRange(0), 4), + Planechase ( new IntRange(60, Integer.MAX_VALUE), new IntRange(0), 4), + Archenemy ( new IntRange(60, Integer.MAX_VALUE), new IntRange(0), 4); private final IntRange mainRange; private final IntRange sideRange; // null => no check diff --git a/src/main/java/forge/quest/QuestUtilCards.java b/src/main/java/forge/quest/QuestUtilCards.java index 65b78433c5c..4681b3f1789 100644 --- a/src/main/java/forge/quest/QuestUtilCards.java +++ b/src/main/java/forge/quest/QuestUtilCards.java @@ -336,7 +336,19 @@ public final class QuestUtilCards { final int leftInPool = this.qa.getCardPool().count(card); // remove sold cards from all decks: for (final Deck deck : this.qc.getMyDecks()) { - deck.getMain().remove(card, deck.getMain().count(card) - leftInPool); + int cntInMain = deck.getMain().count(card); + int cntInSb = deck.getSideboard().count(card); + int nToRemoveFromThisDeck = cntInMain + cntInSb - leftInPool; + if ( nToRemoveFromThisDeck <= 0 ) continue; // this is not the deck you are looking for + + int nToRemoveFromSb = cntInSb - nToRemoveFromThisDeck; + if( nToRemoveFromSb > 0 ) { + deck.getSideboard().remove(card, nToRemoveFromSb); + nToRemoveFromThisDeck -= cntInSb; // actual removed count should be, but I take upper bound here + if ( nToRemoveFromThisDeck <= 0 ) continue; // done here + } + + deck.getMain().remove(card, nToRemoveFromThisDeck); } }