diff --git a/forge-ai/src/main/java/forge/ai/AiCostDecision.java b/forge-ai/src/main/java/forge/ai/AiCostDecision.java index c23d24e7299..fa708e1b5f7 100644 --- a/forge-ai/src/main/java/forge/ai/AiCostDecision.java +++ b/forge-ai/src/main/java/forge/ai/AiCostDecision.java @@ -1,30 +1,14 @@ package forge.ai; -import static forge.ai.ComputerUtilCard.getBestCreatureAI; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import forge.card.MagicColor; -import forge.game.cost.*; -import org.apache.commons.lang3.ObjectUtils; - import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.Lists; - import forge.card.CardType; +import forge.card.MagicColor; import forge.game.Game; import forge.game.GameEntityCounterTable; -import forge.game.card.Card; -import forge.game.card.CardCollection; -import forge.game.card.CardCollectionView; -import forge.game.card.CardLists; -import forge.game.card.CardPredicates; -import forge.game.card.CounterEnumType; -import forge.game.card.CounterType; +import forge.game.card.*; +import forge.game.cost.*; import forge.game.keyword.Keyword; import forge.game.player.Player; import forge.game.spellability.SpellAbility; @@ -33,6 +17,11 @@ import forge.game.zone.ZoneType; import forge.util.Aggregates; import forge.util.TextUtil; import forge.util.collect.FCollectionView; +import org.apache.commons.lang3.ObjectUtils; + +import java.util.*; + +import static forge.ai.ComputerUtilCard.getBestCreatureAI; public class AiCostDecision extends CostDecisionMakerBase { private final CardCollection discarded; @@ -481,6 +470,18 @@ public class AiCostDecision extends CostDecisionMakerBase { return PaymentDecision.card(hand); } + if (cost.getRevealFrom().size() == 2 && cost.getRevealFrom().containsAll(Arrays.asList(ZoneType.Hand, ZoneType.Battlefield))) { // RevealOrChoose + String aiLogic = ability.getParamOrDefault("AILogic", ""); + hand = CardLists.getValidCards(hand, type.split(";"), player, source, ability); + + if (aiLogic.startsWith("PowerAtLeast.")) { + int minPower = Integer.parseInt(aiLogic.substring(aiLogic.indexOf(".") + 1)); + hand = CardLists.filterPower(hand, minPower); + } + + return hand.isEmpty() ? null : PaymentDecision.card(getBestCreatureAI(hand)); + } + if (cost.getType().equals("SameColor")) { return null; } diff --git a/forge-gui/res/cardsfolder/d/dragons_fire.txt b/forge-gui/res/cardsfolder/d/dragons_fire.txt index bb01c2684ea..49ed1de448d 100644 --- a/forge-gui/res/cardsfolder/d/dragons_fire.txt +++ b/forge-gui/res/cardsfolder/d/dragons_fire.txt @@ -2,7 +2,7 @@ Name:Dragon's Fire ManaCost:1 R Types:Instant K:Kicker:RevealOrChoose<1/Dragon>:Generic -A:SP$ DealDamage | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | NumDmg$ Y | SpellDescription$ CARDNAME deals 3 damage to target creature or planeswalker. If you revealed a Dragon card or chose a Dragon as you cast this spell, CARDNAME deals damage equal to the power of that card or creature instead. +A:SP$ DealDamage | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | NumDmg$ Y | AILogic$ PowerAtLeast.4 | SpellDescription$ CARDNAME deals 3 damage to target creature or planeswalker. If you revealed a Dragon card or chose a Dragon as you cast this spell, CARDNAME deals damage equal to the power of that card or creature instead. SVar:Y:Count$OptionalGenericCostPaid.X.3 SVar:X:Revealed$CardPower Oracle:As an additional cost to cast this spell, you may reveal a Dragon card from your hand or choose a Dragon you control.\nDragon's Fire deals 3 damage to target creature or planeswalker. If you revealed a Dragon card or chose a Dragon as you cast this spell, Dragon's Fire deals damage equal to the power of that card or creature instead.