mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 03:08:02 +00:00
- Fixed Armor of Thorns' trigger firing even if cast at sorcery speed or given instant speed casting by something like Vedalken Orrey (10/1/2009 Ruling: The sacrifice occur only if you cast it using its own ability. If you cast it using some other effect (for instance, if it gained flash from Vedalken Orrery), then it won't be sacrificed. )
This commit is contained in:
@@ -4,7 +4,7 @@ Types:Enchantment Aura
|
|||||||
Text:no text
|
Text:no text
|
||||||
K:You may cast CARDNAME as though it had flash. If you cast it any time a sorcery couldn't have been cast, the controller of the permanent it becomes sacrifices it at the beginning of the next cleanup step.
|
K:You may cast CARDNAME as though it had flash. If you cast it any time a sorcery couldn't have been cast, the controller of the permanent it becomes sacrifices it at the beginning of the next cleanup step.
|
||||||
K:Enchant nonblack creature
|
K:Enchant nonblack creature
|
||||||
T:Mode$ SpellCast | ValidCard$ Card.Self | Execute$ TrigDelayedSac | Static$ True | Secondary$ True | TriggerDescription$ If you cast it any time a sorcery couldn't have been cast, the controller of the permanent it becomes sacrifices it at the beginning of the next cleanup step.
|
T:Mode$ SpellCast | ValidCard$ Card.Self | Execute$ TrigDelayedSac | Static$ True | Secondary$ True | SpellSpeed$ NotSorcerySpeed | TriggerDescription$ If you cast it any time a sorcery couldn't have been cast, the controller of the permanent it becomes sacrifices it at the beginning of the next cleanup step.
|
||||||
SVar:TrigDelayedSac:AB$ Animate | Cost$ 0 | Defined$ Self | Triggers$ CleanupTrig | sVars$ Sac | Permanent$ True
|
SVar:TrigDelayedSac:AB$ Animate | Cost$ 0 | Defined$ Self | Triggers$ CleanupTrig | sVars$ Sac | Permanent$ True
|
||||||
SVar:CleanupTrig:Mode$ Phase | Phase$ Cleanup | TriggerZones$ Battlefield | Execute$ Sac | TriggerDescription$ At the beginning of the next cleanup step, sacrifice CARDNAME.
|
SVar:CleanupTrig:Mode$ Phase | Phase$ Cleanup | TriggerZones$ Battlefield | Execute$ Sac | TriggerDescription$ At the beginning of the next cleanup step, sacrifice CARDNAME.
|
||||||
SVar:Sac:AB$ Sacrifice | Cost$ 0 | Defined$ Self
|
SVar:Sac:AB$ Sacrifice | Cost$ 0 | Defined$ Self
|
||||||
|
|||||||
@@ -166,17 +166,22 @@ public class TriggerSpellAbilityCast extends Trigger {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (this.getMapParams().containsKey("SpellSpeed")) {
|
if (this.getMapParams().containsKey("SpellSpeed")) {
|
||||||
if (this.getHostCard().hasKeyword("You may cast CARDNAME as though it had flash. If you cast it any time "
|
if (this.getMapParams().get("SpellSpeed").equals("NotSorcerySpeed")) {
|
||||||
+ "a sorcery couldn't have been cast, the controller of the permanent it becomes sacrifices it "
|
boolean notSorcerySpeed = true;
|
||||||
+ "at the beginning of the next cleanup step.")
|
if (PhaseHandler.couldCastSorcery(this.getHostCard().getController(), spellAbility)) {
|
||||||
&& (this.getHostCard().hasKeyword("Flash") || this.getHostCard().hasKeyword("HIDDEN Flash")
|
notSorcerySpeed = false;
|
||||||
|| this.getHostCard().getController().hasKeyword("You may cast nonland cards as though they had flash."))) {
|
} else if (this.getHostCard().hasKeyword("You may cast CARDNAME as though it had flash. If you cast it any time a "
|
||||||
|
+ "sorcery couldn't have been cast, the controller of the permanent it becomes sacrifices it at the beginning"
|
||||||
|
+ " of the next cleanup step.") && !PhaseHandler.couldCastSorcery(this.getHostCard().getController(), spellAbility)) {
|
||||||
|
boolean instantmentCast = true;
|
||||||
// for these cards the trigger must only fire if using their own ability to cast at instant speed
|
// for these cards the trigger must only fire if using their own ability to cast at instant speed
|
||||||
return false;
|
if (this.getHostCard().hasKeyword("Flash") || this.getHostCard().hasKeyword("HIDDEN Flash")
|
||||||
}
|
|| this.getHostCard().getController().hasKeyword("You may cast nonland cards as though they had flash.")) {
|
||||||
else if (this.getMapParams().get("SpellSpeed").equals("NotSorcerySpeed")
|
instantmentCast = false;
|
||||||
&& PhaseHandler.couldCastSorcery(this.getHostCard().getController(), spellAbility)) {
|
}
|
||||||
return false;
|
notSorcerySpeed = instantmentCast;
|
||||||
|
}
|
||||||
|
return notSorcerySpeed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -997,14 +997,19 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable {
|
|||||||
public static boolean couldCastSorcery(final Player player, final SpellAbility sa) {
|
public static boolean couldCastSorcery(final Player player, final SpellAbility sa) {
|
||||||
PhaseHandler now = Singletons.getModel().getGameState().getPhaseHandler();
|
PhaseHandler now = Singletons.getModel().getGameState().getPhaseHandler();
|
||||||
final Card source = sa.getRootSpellAbility().getSourceCard();
|
final Card source = sa.getRootSpellAbility().getSourceCard();
|
||||||
|
boolean onlyThis = true;
|
||||||
if (AllZone.getStack().size() != 0) {
|
if (AllZone.getStack().size() != 0) {
|
||||||
for (final Card card : AllZoneUtil.getCardsIn(ZoneType.Stack)) {
|
for (final Card card : AllZoneUtil.getCardsIn(ZoneType.Stack)) {
|
||||||
if (card != source) {
|
if (card != source) {
|
||||||
return false;
|
onlyThis = false;
|
||||||
|
//System.out.println("StackCard: " + card + " vs SourceCard: " + source);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return now.isPlayerTurn(player) && now.getPhase().isMain();
|
//System.out.println("now.isPlayerTurn(player) - " + now.isPlayerTurn(player));
|
||||||
|
//System.out.println("now.getPhase().isMain() - " + now.getPhase().isMain());
|
||||||
|
//System.out.println("onlyThis - " + onlyThis);
|
||||||
|
return now.isPlayerTurn(player) && now.getPhase().isMain() && onlyThis;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user