mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 10:48:00 +00:00
- Fixed the AI not using ETB counters.
This commit is contained in:
@@ -10,6 +10,8 @@ SVar:DBBodySnatcherCleanup:DB$ Cleanup | ClearRemembered$ True
|
|||||||
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigBodySnatcherExileMe | TriggerDescription$ When CARDNAME dies, exile CARDNAME and return target creature card from your graveyard to the battlefield.
|
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigBodySnatcherExileMe | TriggerDescription$ When CARDNAME dies, exile CARDNAME and return target creature card from your graveyard to the battlefield.
|
||||||
SVar:TrigBodySnatcherExileMe:AB$ ChangeZone | Cost$ 0 | Defined$ Self | Origin$ Graveyard | Destination$ Exile | SubAbility$ DBBodySnatcherReturnCreature
|
SVar:TrigBodySnatcherExileMe:AB$ ChangeZone | Cost$ 0 | Defined$ Self | Origin$ Graveyard | Destination$ Exile | SubAbility$ DBBodySnatcherReturnCreature
|
||||||
SVar:DBBodySnatcherReturnCreature:DB$ ChangeZone | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature from your graveyard | Origin$ Graveyard | Destination$ Battlefield
|
SVar:DBBodySnatcherReturnCreature:DB$ ChangeZone | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature from your graveyard | Origin$ Graveyard | Destination$ Battlefield
|
||||||
|
SVar:NeedsToPlayVar:Y GE2
|
||||||
|
SVar:Y:Count$TypeInYourHand.Creature
|
||||||
SVar:Rarity:Rare
|
SVar:Rarity:Rare
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/body_snatcher.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/body_snatcher.jpg
|
||||||
End
|
End
|
||||||
@@ -8,6 +8,7 @@ T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ Opponent | CheckSVar$ OppCast
|
|||||||
SVar:TrigDamageOpp:AB$ DealDamage | Cost$ 0 | Defined$ Opponent | NumDmg$ 2
|
SVar:TrigDamageOpp:AB$ DealDamage | Cost$ 0 | Defined$ Opponent | NumDmg$ 2
|
||||||
SVar:YouCast:Count$ThisTurnCast_Card.YouCtrl
|
SVar:YouCast:Count$ThisTurnCast_Card.YouCtrl
|
||||||
SVar:OppCast:Count$ThisTurnCast_Card.YouDontCtrl
|
SVar:OppCast:Count$ThisTurnCast_Card.YouDontCtrl
|
||||||
|
SVar:RemRandomDeck:True
|
||||||
SVar:Rarity:Rare
|
SVar:Rarity:Rare
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/impatience.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/impatience.jpg
|
||||||
End
|
End
|
||||||
@@ -5,8 +5,7 @@ Text:no text
|
|||||||
PT:2/2
|
PT:2/2
|
||||||
K:Flash
|
K:Flash
|
||||||
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigCounter | TriggerDescription$ When CARDNAME enters the battlefield, counter target spell.
|
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigCounter | TriggerDescription$ When CARDNAME enters the battlefield, counter target spell.
|
||||||
SVar:TrigCounter:AB$Counter | Cost$ 0 | TargetType$ Spell | ValidTgts$ Card | TgtPrompt$ Select target spell
|
SVar:TrigCounter:DB$Counter | Cost$ 0 | TargetType$ Spell | ValidTgts$ Card | TgtPrompt$ Select target spell
|
||||||
SVar:RemAIDeck:True
|
|
||||||
SVar:Rarity:Rare
|
SVar:Rarity:Rare
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/mystic_snake.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/mystic_snake.jpg
|
||||||
SetInfo:APC|Rare|http://magiccards.info/scans/en/ap/112.jpg
|
SetInfo:APC|Rare|http://magiccards.info/scans/en/ap/112.jpg
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ SVar:DBScentOfNightshadePump:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select
|
|||||||
SVar:DBScentOfNightshadeCleanup:DB$ Cleanup | ClearRemembered$ True
|
SVar:DBScentOfNightshadeCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
SVar:ScentOfNightshadeX:Remembered$Amount.Negative
|
SVar:ScentOfNightshadeX:Remembered$Amount.Negative
|
||||||
SVar:RemAIDeck:True
|
SVar:RemAIDeck:True
|
||||||
SVar:RemRandomDeck:True
|
|
||||||
SVar:Rarity:Common
|
SVar:Rarity:Common
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/scent_of_nightshade.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/scent_of_nightshade.jpg
|
||||||
End
|
End
|
||||||
@@ -6,7 +6,7 @@ PT:2/2
|
|||||||
K:Flash
|
K:Flash
|
||||||
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigCounter | TriggerDescription$ When CARDNAME enters the battlefield, counter target activated ability.
|
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigCounter | TriggerDescription$ When CARDNAME enters the battlefield, counter target activated ability.
|
||||||
T:Mode$ SpellCast | ValidCard$ Card.YouCtrl | Execute$ TrigBounce | TriggerZones$ Battlefield | OptionalDecider$ You | TriggerDescription$ Whenever you cast a spell, you may return CARDNAME to its owner's hand.
|
T:Mode$ SpellCast | ValidCard$ Card.YouCtrl | Execute$ TrigBounce | TriggerZones$ Battlefield | OptionalDecider$ You | TriggerDescription$ Whenever you cast a spell, you may return CARDNAME to its owner's hand.
|
||||||
SVar:TrigCounter:AB$Counter | Cost$ 0 | TargetType$ Activated | TgtPrompt$ Select target ability | ValidTgts$ Permanent
|
SVar:TrigCounter:DB$Counter | Cost$ 0 | TargetType$ Activated | TgtPrompt$ Select target ability | ValidTgts$ Permanent
|
||||||
SVar:TrigBounce:AB$ChangeZone | Cost$ 0 | Origin$ Battlefield | Destination$ Hand
|
SVar:TrigBounce:AB$ChangeZone | Cost$ 0 | Origin$ Battlefield | Destination$ Hand
|
||||||
SVar:Rarity:Uncommon
|
SVar:Rarity:Uncommon
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/voidmage_husher.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/voidmage_husher.jpg
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import forge.card.abilityfactory.AbilityFactory;
|
|||||||
import forge.card.cardfactory.CardFactoryUtil;
|
import forge.card.cardfactory.CardFactoryUtil;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.card.spellability.SpellPermanent;
|
import forge.card.spellability.SpellPermanent;
|
||||||
|
import forge.card.trigger.Trigger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -110,7 +111,7 @@ public class ComputerAIGeneral implements Computer {
|
|||||||
|
|
||||||
final boolean hasACardGivingHaste = this.hasACardGivingHaste();
|
final boolean hasACardGivingHaste = this.hasACardGivingHaste();
|
||||||
|
|
||||||
// Why is the computer checking if their mana pool is empty?
|
// If mana pool is not empty try to play anything
|
||||||
if (AllZone.getComputerPlayer().getManaPool().isEmpty()) {
|
if (AllZone.getComputerPlayer().getManaPool().isEmpty()) {
|
||||||
hand = hand.filter(new CardListFilter() {
|
hand = hand.filter(new CardListFilter() {
|
||||||
@Override
|
@Override
|
||||||
@@ -299,6 +300,7 @@ public class ComputerAIGeneral implements Computer {
|
|||||||
public boolean addCard(final Card c) {
|
public boolean addCard(final Card c) {
|
||||||
if (c.isPermanent()
|
if (c.isPermanent()
|
||||||
&& c.hasKeyword("Flash")
|
&& c.hasKeyword("Flash")
|
||||||
|
&& !hasETBTrigger(c)
|
||||||
&& (AllZone.getPhaseHandler().isPlayerTurn(AllZone.getComputerPlayer()) || AllZone.getPhaseHandler()
|
&& (AllZone.getPhaseHandler().isPlayerTurn(AllZone.getComputerPlayer()) || AllZone.getPhaseHandler()
|
||||||
.isBefore(Constant.Phase.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY))) {
|
.isBefore(Constant.Phase.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY))) {
|
||||||
return false;
|
return false;
|
||||||
@@ -320,6 +322,35 @@ public class ComputerAIGeneral implements Computer {
|
|||||||
return all;
|
return all;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* hasETBTrigger.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @param card
|
||||||
|
* a {@link forge.Card} object.
|
||||||
|
* @return a boolean.
|
||||||
|
*/
|
||||||
|
public boolean hasETBTrigger(final Card card) {
|
||||||
|
final ArrayList<Trigger> triggers = card.getTriggers();
|
||||||
|
for (final Trigger tr : triggers) {
|
||||||
|
final HashMap<String, String> params = tr.getMapParams();
|
||||||
|
if (!params.get("Mode").equals("ChangesZone")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!params.get("Destination").equals("Battlefield")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (params.containsKey("ValidCard") && !params.get("ValidCard").contains("Self")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
* getOtherPhases.
|
* getOtherPhases.
|
||||||
|
|||||||
Reference in New Issue
Block a user