mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 12:18:00 +00:00
- Improved AI using cards with Flash.
This commit is contained in:
@@ -685,11 +685,12 @@ public class AiController {
|
||||
|
||||
// save cards with flash for surprise blocking
|
||||
if (card.hasKeyword("Flash")
|
||||
&& (player.isUnlimitedHandSize() || player.getCardsIn(ZoneType.Hand).size() <= player.getMaxHandSize())
|
||||
&& (player.isUnlimitedHandSize() || player.getCardsIn(ZoneType.Hand).size() <= player.getMaxHandSize()
|
||||
|| game.getPhaseHandler().getPhase().isBefore(PhaseType.END_OF_TURN))
|
||||
&& player.getManaPool().totalMana() <= 0
|
||||
&& (game.getPhaseHandler().isPlayerTurn(player)
|
||||
|| game.getPhaseHandler().getPhase().isBefore(PhaseType.COMBAT_DECLARE_ATTACKERS))
|
||||
&& (!card.hasETBTrigger() || card.hasSVar("AmbushAI"))
|
||||
&& (!card.hasETBTrigger(true) || card.hasSVar("AmbushAI"))
|
||||
&& !ComputerUtil.castPermanentInMain1(player, sa)) {
|
||||
return AiPlayDecision.AnotherTime;
|
||||
}
|
||||
@@ -1070,8 +1071,8 @@ public class AiController {
|
||||
}
|
||||
}
|
||||
|
||||
if (card.isCreature() && (card.getNetToughness() <= 0) && !card.hasStartOfKeyword("etbCounter")
|
||||
&& mana.countX() == 0 && !card.hasETBTrigger()
|
||||
if (card.isCreature() && card.getNetToughness() <= 0 && !card.hasStartOfKeyword("etbCounter")
|
||||
&& mana.countX() == 0 && !card.hasETBTrigger(false)
|
||||
&& !card.hasETBReplacement()
|
||||
&& !card.hasSVar("NoZeroToughnessAI")) {
|
||||
return AiPlayDecision.WouldBecomeZeroToughnessCreature;
|
||||
|
||||
@@ -6254,7 +6254,7 @@ public class Card extends GameEntity implements Comparable<Card> {
|
||||
clearBlockedThisTurn();
|
||||
}
|
||||
|
||||
public boolean hasETBTrigger() {
|
||||
public boolean hasETBTrigger(final boolean drawbackOnly) {
|
||||
for (final Trigger tr : getTriggers()) {
|
||||
final Map<String, String> params = tr.getMapParams();
|
||||
if (tr.getMode() != TriggerType.ChangesZone) {
|
||||
@@ -6268,6 +6268,12 @@ public class Card extends GameEntity implements Comparable<Card> {
|
||||
if (params.containsKey("ValidCard") && !params.get("ValidCard").contains("Self")) {
|
||||
continue;
|
||||
}
|
||||
if (drawbackOnly && params.containsKey("Execute")){
|
||||
String exec = this.getSVar(params.get("Execute"));
|
||||
if (exec.contains("AB$")) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
@@ -3,6 +3,6 @@ ManaCost:1 B B
|
||||
Types:Enchantment
|
||||
T:Mode$ SpellCast | ValidCard$ Card | TriggerZones$ Battlefield | Execute$ TrigDiscard | TriggerDescription$ Whenever a player casts a spell, that player discards a card.
|
||||
SVar:TrigDiscard:AB$Discard | Cost$ 0 | Defined$ TriggeredActivator | NumCards$ 1 | Mode$ TgtChoose
|
||||
SVar:RemAIDeck:True
|
||||
SVar:RemRandomDeck:True
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/oppression.jpg
|
||||
Oracle:Whenever a player casts a spell, that player discards a card.
|
||||
|
||||
@@ -11,7 +11,7 @@ Deck Type=constructed
|
||||
1 Servant of the Scale
|
||||
2 High Sentinels of Arashin
|
||||
1 Anafenza, Kin-Tree Spirit
|
||||
2 Avatar of the Resolute
|
||||
1 Avatar of the Resolute
|
||||
1 Elite Scaleguard
|
||||
1 Tuskguard Captain
|
||||
1 Longshot Squad
|
||||
@@ -28,6 +28,7 @@ Deck Type=constructed
|
||||
1 Forgotten Ancient
|
||||
2 Juniper Order Ranger
|
||||
1 Daghatar the Adamant
|
||||
1 Kalonian Hydra
|
||||
1 Dromoka, the Eternal
|
||||
1 Spike Hatcher
|
||||
1 Borborygmos
|
||||
|
||||
Reference in New Issue
Block a user