mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
- AF Discard AI will now also use discardNumTypeAI.
- Improved discardNumTypeAI.
This commit is contained in:
@@ -1373,8 +1373,9 @@ public class AbilityFactoryZoneAffecting {
|
||||
dPHand = AbilityFactoryReveal.getRevealedList(p, dPHand, amount);
|
||||
}
|
||||
CardList dPChHand = new CardList(dPHand);
|
||||
String[] dValid = null;
|
||||
if (params.containsKey("DiscardValid")) { // Restrict card choices
|
||||
final String[] dValid = params.get("DiscardValid").split(",");
|
||||
dValid = params.get("DiscardValid").split(",");
|
||||
dPChHand = dPHand.getValidCards(dValid, source.getController(), source);
|
||||
}
|
||||
Player chooser = p;
|
||||
@@ -1386,12 +1387,24 @@ public class AbilityFactoryZoneAffecting {
|
||||
|
||||
if (chooser.isComputer()) {
|
||||
// AI
|
||||
if (p.isComputer()) { // discard AI cards
|
||||
CardList list = ComputerUtil.discardNumTypeAI(numCards, dValid, sa);
|
||||
if (mode.startsWith("Reveal")) {
|
||||
GuiUtils.chooseOneOrNone("Computer has chosen", list.toArray());
|
||||
}
|
||||
discarded.addAll(list);
|
||||
for (Card card : list) {
|
||||
p.discard(card, sa);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
// discard human cards
|
||||
for (int i = 0; i < numCards; i++) {
|
||||
if (dPChHand.size() > 0) {
|
||||
final CardList dChoices = new CardList();
|
||||
if (params.containsKey("DiscardValid")) {
|
||||
final String dValid = params.get("DiscardValid");
|
||||
if (dValid.contains("Creature") && !dValid.contains("nonCreature")) {
|
||||
final String validString = params.get("DiscardValid");
|
||||
if (validString.contains("Creature") && !validString.contains("nonCreature")) {
|
||||
final Card c = CardFactoryUtil.getBestCreatureAI(dPChHand);
|
||||
if (c != null) {
|
||||
dChoices.add(CardFactoryUtil.getBestCreatureAI(dPChHand));
|
||||
|
||||
@@ -1536,23 +1536,31 @@ public class ComputerUtil {
|
||||
if (hand.size() <= 0) {
|
||||
continue;
|
||||
}
|
||||
final CardList lands = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield).getType("Land");
|
||||
final int numLandsInPlay = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield).getType("Land").size();
|
||||
final CardList landsInHand = hand.getType("Land");
|
||||
lands.addAll(landsInHand);
|
||||
if (lands.size() > 5) {
|
||||
if (landsInHand.size() > 0) { // discard lands
|
||||
discardList.add(landsInHand.get(0));
|
||||
hand.remove(landsInHand.get(0));
|
||||
} else { // discard low costed stuff
|
||||
CardListUtil.sortCMC(hand);
|
||||
hand.reverse();
|
||||
final int numLandsInHand = landsInHand.size();
|
||||
|
||||
// Discard a land
|
||||
if (numLandsInHand > 3 || (numLandsInHand > 2 && numLandsInPlay > 0)
|
||||
|| (numLandsInHand > 1 && numLandsInPlay > 2)
|
||||
|| (numLandsInHand > 0 && numLandsInPlay > 5)) {
|
||||
discardList.add(landsInHand.get(0));
|
||||
hand.remove(landsInHand.get(0));
|
||||
} else { // Discard other stuff
|
||||
CardListUtil.sortCMC(hand);
|
||||
int numLandsAvailable = numLandsInPlay;
|
||||
if (numLandsInHand > 0) {
|
||||
numLandsAvailable++;
|
||||
}
|
||||
//Discard unplayable card
|
||||
if (hand.get(0).getCMC() > numLandsAvailable) {
|
||||
discardList.add(hand.get(0));
|
||||
hand.remove(hand.get(0));
|
||||
} else { //Discard worst card
|
||||
Card worst = CardFactoryUtil.getWorstAI(hand);
|
||||
discardList.add(worst);
|
||||
hand.remove(worst);
|
||||
}
|
||||
} else { // discard high costed stuff
|
||||
CardListUtil.sortCMC(hand);
|
||||
discardList.add(hand.get(0));
|
||||
hand.remove(hand.get(0));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user