- Fixed #4220 - card viewer raise error with alternative card numbers;

- Fixed potential error on getCardsByRarity;
- Added inner checks for wrong booster max card numbers settings;
This commit is contained in:
Oleg Agafonov 2017-12-07 06:05:04 +04:00
parent 6802ebc537
commit 66a70dd116
5 changed files with 62 additions and 5 deletions

View file

@ -32,6 +32,7 @@ import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import mage.constants.Rarity;
import mage.constants.SetType;
import mage.util.CardUtil;
import mage.util.RandomUtil;
import java.io.Serializable;
@ -82,6 +83,10 @@ public abstract class ExpansionSet implements Serializable {
return this.cardNumber;
}
public int getCardNumberAsInt(){
return CardUtil.parseCardNumberAsInt(this.cardNumber);
}
public Rarity getRarity() {
return this.rarity;
}
@ -388,9 +393,10 @@ public abstract class ExpansionSet implements Serializable {
criteria.doubleFaced(false);
}
savedCardsInfos = CardRepository.instance.findCards(criteria);
// Workaround after card number is numeric
// Workaround after card number is numeric (p.s. card number is not numeric for some cards)
// TODO: some sets have фывфывфывфывфыв
if (maxCardNumberInBooster != Integer.MAX_VALUE) {
savedCardsInfos.removeIf(next -> Integer.valueOf(next.getCardNumber()) > maxCardNumberInBooster && rarity != Rarity.LAND);
savedCardsInfos.removeIf(next -> next.getCardNumberAsInt() > maxCardNumberInBooster && rarity != Rarity.LAND);
}
savedCards.put(rarity, savedCardsInfos);
@ -431,4 +437,6 @@ public abstract class ExpansionSet implements Serializable {
savedCards.clear();
}
public int getMaxCardNumberInBooster() { return maxCardNumberInBooster; }
}

View file

@ -40,6 +40,7 @@ import mage.cards.*;
import mage.cards.mock.MockCard;
import mage.cards.mock.MockSplitCard;
import mage.constants.*;
import mage.util.CardUtil;
import mage.util.SubTypeList;
import org.apache.log4j.Logger;
@ -374,6 +375,10 @@ public class CardInfo {
return cardNumber;
}
public int getCardNumberAsInt() {
return CardUtil.parseCardNumberAsInt(cardNumber);
}
public boolean isSplitCard() {
return splitCard;
}

View file

@ -382,6 +382,25 @@ public final class CardUtil {
return true;
}
/**
* Parse card number as int (support base [123] and alternative numbers [123b]).
*
* @param cardNumber origin card number
* @return int
*/
public static int parseCardNumberAsInt(String cardNumber){
if (cardNumber.isEmpty()){ throw new IllegalArgumentException("Card number is empty.");}
if(Character.isDigit(cardNumber.charAt(cardNumber.length() - 1)))
{
return Integer.parseInt(cardNumber);
}else{
return Integer.parseInt(cardNumber.substring(0, cardNumber.length() - 1));
}
}
/**
* Creates and saves a (card + zoneChangeCounter) specific exileId.
*