mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 03:38:01 +00:00
Merge branch 'master' into 'master'
Brawl deck generation fixes See merge request core-developers/forge!436
This commit is contained in:
@@ -5,6 +5,7 @@ import com.google.common.base.Predicates;
|
|||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
import forge.StaticData;
|
||||||
import forge.card.CardDb;
|
import forge.card.CardDb;
|
||||||
import forge.card.CardRules;
|
import forge.card.CardRules;
|
||||||
import forge.card.CardRulesPredicates;
|
import forge.card.CardRulesPredicates;
|
||||||
@@ -540,7 +541,7 @@ public class DeckgenUtil {
|
|||||||
|
|
||||||
if(partners.size()>0&&commander.getRules().canBePartnerCommander()){
|
if(partners.size()>0&&commander.getRules().canBePartnerCommander()){
|
||||||
selectedPartner=partners.get(MyRandom.getRandom().nextInt(partners.size()));
|
selectedPartner=partners.get(MyRandom.getRandom().nextInt(partners.size()));
|
||||||
preSelectedCards.remove(selectedPartner);
|
preSelectedCards.removeAll(StaticData.instance().getCommonCards().getAllCards(selectedPartner.getName()));
|
||||||
}
|
}
|
||||||
//randomly remove cards
|
//randomly remove cards
|
||||||
int removeCount=0;
|
int removeCount=0;
|
||||||
@@ -562,6 +563,7 @@ public class DeckgenUtil {
|
|||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
preSelectedCards.removeAll(toRemove);
|
preSelectedCards.removeAll(toRemove);
|
||||||
|
preSelectedCards.removeAll(StaticData.instance().getCommonCards().getAllCards(commander.getName()));
|
||||||
gen = new CardThemedCommanderDeckBuilder(commander, selectedPartner,preSelectedCards,forAi,format);
|
gen = new CardThemedCommanderDeckBuilder(commander, selectedPartner,preSelectedCards,forAi,format);
|
||||||
}else{
|
}else{
|
||||||
cardDb = FModel.getMagicDb().getCommonCards();
|
cardDb = FModel.getMagicDb().getCommonCards();
|
||||||
@@ -582,6 +584,7 @@ public class DeckgenUtil {
|
|||||||
}
|
}
|
||||||
List<PaperCard> shortList = cardList.subList(1, shortlistlength);
|
List<PaperCard> shortList = cardList.subList(1, shortlistlength);
|
||||||
shortList.remove(commander);
|
shortList.remove(commander);
|
||||||
|
shortList.removeAll(StaticData.instance().getCommonCards().getAllCards(commander.getName()));
|
||||||
gen = new CardThemedCommanderDeckBuilder(commander, selectedPartner,shortList,forAi,format);
|
gen = new CardThemedCommanderDeckBuilder(commander, selectedPartner,shortList,forAi,format);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.google.common.base.Predicate;
|
|||||||
import com.google.common.base.Predicates;
|
import com.google.common.base.Predicates;
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
import forge.StaticData;
|
||||||
import forge.card.*;
|
import forge.card.*;
|
||||||
import forge.card.mana.ManaCost;
|
import forge.card.mana.ManaCost;
|
||||||
import forge.card.mana.ManaCostShard;
|
import forge.card.mana.ManaCostShard;
|
||||||
@@ -478,6 +479,14 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Set<String> getDeckListNames(){
|
||||||
|
Set<String> deckListNames = new HashSet<>();
|
||||||
|
for(PaperCard card:deckList){
|
||||||
|
deckListNames.add(card.getName());
|
||||||
|
}
|
||||||
|
return deckListNames;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If the deck does not have 40 cards, fix it. This method should not be
|
* If the deck does not have 40 cards, fix it. This method should not be
|
||||||
* called if the stuff above it is working correctly.
|
* called if the stuff above it is working correctly.
|
||||||
@@ -500,20 +509,27 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Predicate<PaperCard> possibleFromFullPool = new Predicate<PaperCard>() {
|
Predicate<PaperCard> possibleFromFullPool = new Predicate<PaperCard>() {
|
||||||
|
Set deckListNames = getDeckListNames();
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(PaperCard card) {
|
public boolean apply(PaperCard card) {
|
||||||
return format.isLegalCard(card)
|
return format.isLegalCard(card)
|
||||||
&&!card.getRules().getManaCost().isPureGeneric()
|
&& !card.getRules().getManaCost().isPureGeneric()
|
||||||
&& colors.containsAllColorsFrom(card.getRules().getColorIdentity().getColor())
|
&& colors.containsAllColorsFrom(card.getRules().getColorIdentity().getColor())
|
||||||
&& !deckList.contains(card)
|
&& !deckListNames.contains(card.getName())
|
||||||
&& (keyCard == null || !keyCard.equals(card))
|
&& !card.getRules().getAiHints().getRemAIDecks()
|
||||||
&& (secondKeyCard==null || !secondKeyCard.equals(card))
|
&& !card.getRules().getAiHints().getRemRandomDecks()
|
||||||
&&!card.getRules().getAiHints().getRemAIDecks()
|
&& !card.getRules().getMainPart().getType().isLand();
|
||||||
&&!card.getRules().getAiHints().getRemRandomDecks()
|
|
||||||
&&!card.getRules().getMainPart().getType().isLand();
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
List<PaperCard> randomPool = Lists.newArrayList(pool.getAllCards(possibleFromFullPool));
|
List<PaperCard> possibleList = Lists.newArrayList(pool.getAllCards(possibleFromFullPool));
|
||||||
|
//ensure we do not add more keycards in case they are commanders
|
||||||
|
if (keyCard != null) {
|
||||||
|
possibleList.removeAll(StaticData.instance().getCommonCards().getAllCards(keyCard.getName()));
|
||||||
|
}
|
||||||
|
if (secondKeyCard != null) {
|
||||||
|
possibleList.removeAll(StaticData.instance().getCommonCards().getAllCards(secondKeyCard.getName()));
|
||||||
|
}
|
||||||
|
List<PaperCard> randomPool = CardRanker.rankCardsInDeck(possibleList).subList(0,new Float(possibleList.size()*0.25).intValue());
|
||||||
Collections.shuffle(randomPool, MyRandom.getRandom());
|
Collections.shuffle(randomPool, MyRandom.getRandom());
|
||||||
Iterator<PaperCard> iRandomPool=randomPool.iterator();
|
Iterator<PaperCard> iRandomPool=randomPool.iterator();
|
||||||
while (deckList.size() < targetSize) {
|
while (deckList.size() < targetSize) {
|
||||||
@@ -728,20 +744,29 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase {
|
|||||||
* number to add
|
* number to add
|
||||||
*/
|
*/
|
||||||
private void addRandomCards(int num) {
|
private void addRandomCards(int num) {
|
||||||
|
Set deckListNames = getDeckListNames();
|
||||||
Predicate<PaperCard> possibleFromFullPool = new Predicate<PaperCard>() {
|
Predicate<PaperCard> possibleFromFullPool = new Predicate<PaperCard>() {
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(PaperCard card) {
|
public boolean apply(PaperCard card) {
|
||||||
return format.isLegalCard(card)
|
return format.isLegalCard(card)
|
||||||
&&!card.getRules().getManaCost().isPureGeneric()
|
&&!card.getRules().getManaCost().isPureGeneric()
|
||||||
&& colors.containsAllColorsFrom(card.getRules().getColorIdentity().getColor())
|
&& colors.containsAllColorsFrom(card.getRules().getColorIdentity().getColor())
|
||||||
&& !deckList.contains(card)
|
&& !deckListNames.contains(card.getName())
|
||||||
&&!card.getRules().getAiHints().getRemAIDecks()
|
&&!card.getRules().getAiHints().getRemAIDecks()
|
||||||
&&!card.getRules().getAiHints().getRemRandomDecks()
|
&&!card.getRules().getAiHints().getRemRandomDecks()
|
||||||
&&!card.getRules().getMainPart().getType().isLand();
|
&&!card.getRules().getMainPart().getType().isLand();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
List<PaperCard> randomPool = Lists.newArrayList(pool.getAllCards(possibleFromFullPool));
|
List<PaperCard> possibleList = Lists.newArrayList(pool.getAllCards(possibleFromFullPool));
|
||||||
Collections.shuffle(randomPool, MyRandom.getRandom());
|
//ensure we do not add more keycards in case they are commanders
|
||||||
|
if (keyCard != null) {
|
||||||
|
possibleList.removeAll(StaticData.instance().getCommonCards().getAllCards(keyCard.getName()));
|
||||||
|
}
|
||||||
|
if (secondKeyCard != null) {
|
||||||
|
possibleList.removeAll(StaticData.instance().getCommonCards().getAllCards(secondKeyCard.getName()));
|
||||||
|
}
|
||||||
|
List<PaperCard> randomPool = CardRanker.rankCardsInDeck(possibleList).subList(0,new Float(possibleList.size()*0.25).intValue());
|
||||||
|
Collections.shuffle(randomPool);
|
||||||
Iterator<PaperCard> iRandomPool=randomPool.iterator();
|
Iterator<PaperCard> iRandomPool=randomPool.iterator();
|
||||||
for(int i=0;i<num;++i){
|
for(int i=0;i<num;++i){
|
||||||
PaperCard randomCard=iRandomPool.next();
|
PaperCard randomCard=iRandomPool.next();
|
||||||
|
|||||||
Reference in New Issue
Block a user