diff --git a/forge-ai/src/main/java/forge/ai/ability/EffectAi.java b/forge-ai/src/main/java/forge/ai/ability/EffectAi.java index 566746434aa..16999292f12 100644 --- a/forge-ai/src/main/java/forge/ai/ability/EffectAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/EffectAi.java @@ -1,11 +1,8 @@ package forge.ai.ability; -import java.util.List; - import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.Iterables; - import forge.ai.*; import forge.game.Game; import forge.game.ability.ApiType; @@ -21,6 +18,8 @@ import forge.game.spellability.TargetRestrictions; import forge.game.zone.ZoneType; import forge.util.MyRandom; +import java.util.List; + public class EffectAi extends SpellAbilityAi { @Override protected boolean canPlayAI(final Player ai,final SpellAbility sa) { @@ -102,11 +101,15 @@ public class EffectAi extends SpellAbilityAi { } randomReturn = true; } else if (logic.equals("ChainVeil")) { - if (!phase.isPlayerTurn(ai) || !phase.getPhase().equals(PhaseType.MAIN2) - || CardLists.getType(ai.getCardsIn(ZoneType.Battlefield), "Planeswalker").isEmpty()) { + if (!phase.isPlayerTurn(ai) || !phase.getPhase().equals(PhaseType.MAIN2) + || CardLists.getType(ai.getCardsIn(ZoneType.Battlefield), "Planeswalker").isEmpty()) { return false; } randomReturn = true; + } else if (logic.equals("WillCastCreature") && ai.isAI()) { + AiController aic = ((PlayerControllerAi)ai.getController()).getAi(); + SpellAbility saCreature = aic.predictSpellToCastInMain2(ApiType.PermanentCreature); + randomReturn = saCreature != null && ComputerUtilMana.canPayManaCost(saCreature, ai, 0); } else if (logic.equals("Always")) { randomReturn = true; } else if (logic.equals("Main1")) { diff --git a/forge-gui/res/cardsfolder/v/vivien_monsters_advocate.txt b/forge-gui/res/cardsfolder/v/vivien_monsters_advocate.txt index d6f28a156f9..1b45749c192 100755 --- a/forge-gui/res/cardsfolder/v/vivien_monsters_advocate.txt +++ b/forge-gui/res/cardsfolder/v/vivien_monsters_advocate.txt @@ -11,7 +11,7 @@ SVar:Reach:DB$ PutCounter | Choices$ Card.IsRemembered | ChoiceTitle$ Choose a t SVar:Trample:DB$ PutCounter | Choices$ Card.IsRemembered | ChoiceTitle$ Choose a token to put a trample counter on | CounterType$ Trample | CounterNum$ 1 | SubAbility$ DBCleanup | SpellDescription$ Trample SVar:Vigilance:DB$ PutCounter | Choices$ Card.IsRemembered | ChoiceTitle$ Choose a token to put a vigilance counter on | CounterType$ Vigilance | CounterNum$ 1 | SubAbility$ DBCleanup | SpellDescription$ Vigilance SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -A:AB$ Effect | Cost$ SubCounter<2/LOYALTY> | Planeswalker$ True | Ultimate$ True | Triggers$ TrigSearch | SVars$ DBSearch,X | AILogic$ Main1 | SpellDescription$ When you cast your next creature spell this turn, search your library for a creature card with lesser converted mana cost, put it onto the battlefield, then shuffle your library. +A:AB$ Effect | Cost$ SubCounter<2/LOYALTY> | Planeswalker$ True | Ultimate$ True | Triggers$ TrigSearch | SVars$ DBSearch,X | AILogic$ WillCastCreature | SpellDescription$ When you cast your next creature spell this turn, search your library for a creature card with lesser converted mana cost, put it onto the battlefield, then shuffle your library. SVar:TrigSearch:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ You | OneOff$ True | TriggerZones$ Command | Execute$ DBSearch | TriggerDescription$ When you cast your next creature spell this turn, search your library for a creature card with lesser converted mana cost, put it onto the battlefield, then shuffle your library. SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Creature.cmcLTX | References$ X | ChangeNum$ 1 SVar:X:TriggerCount$CastSACMC