From 84ea133ec54acf708b3aef954866ea9005e1b479 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sat, 4 Sep 2021 17:15:51 +0400 Subject: [PATCH] * Commander storm abilities - fixed rollback error on card usage in non commander games; --- Mage.Sets/src/mage/cards/c/CaptainVargusWrath.java | 2 +- Mage.Sets/src/mage/cards/c/CommandersInsight.java | 1 - Mage.Sets/src/mage/cards/c/CommandersInsignia.java | 3 +-- Mage.Sets/src/mage/cards/j/JeskaThriceReborn.java | 2 +- Mage.Sets/src/mage/cards/m/MythUnbound.java | 2 +- Mage/src/main/java/mage/game/GameCommanderImpl.java | 4 ++-- Mage/src/main/java/mage/game/GameImpl.java | 2 ++ Mage/src/main/java/mage/game/GameTinyLeadersImpl.java | 4 ++-- .../mage/watchers/common/CommanderPlaysCountWatcher.java | 5 ++--- 9 files changed, 12 insertions(+), 13 deletions(-) diff --git a/Mage.Sets/src/mage/cards/c/CaptainVargusWrath.java b/Mage.Sets/src/mage/cards/c/CaptainVargusWrath.java index 519ccd40639..b543f1434d6 100644 --- a/Mage.Sets/src/mage/cards/c/CaptainVargusWrath.java +++ b/Mage.Sets/src/mage/cards/c/CaptainVargusWrath.java @@ -40,7 +40,7 @@ public final class CaptainVargusWrath extends CardImpl { Duration.EndOfTurn, filter, false, true ), false, "Whenever {this} attacks, Pirates you control get +1/+1 until end of turn " + "for each time you've cast a commander from the command zone this game." - ).addHint(CaptainVargusWrathValue.getHint()), new CommanderPlaysCountWatcher()); + ).addHint(CaptainVargusWrathValue.getHint())); } private CaptainVargusWrath(final CaptainVargusWrath card) { diff --git a/Mage.Sets/src/mage/cards/c/CommandersInsight.java b/Mage.Sets/src/mage/cards/c/CommandersInsight.java index 3a33d50b93e..574ac38d687 100644 --- a/Mage.Sets/src/mage/cards/c/CommandersInsight.java +++ b/Mage.Sets/src/mage/cards/c/CommandersInsight.java @@ -25,7 +25,6 @@ public final class CommandersInsight extends CardImpl { // Target player draws X cards plus an additional card for each time they've cast a commander from the command zone this game. this.getSpellAbility().addEffect(new CommandersInsightEffect()); this.getSpellAbility().addTarget(new TargetPlayer()); - this.getSpellAbility().addWatcher(new CommanderPlaysCountWatcher()); } private CommandersInsight(final CommandersInsight card) { diff --git a/Mage.Sets/src/mage/cards/c/CommandersInsignia.java b/Mage.Sets/src/mage/cards/c/CommandersInsignia.java index f58dc3240c4..7548bf88d6f 100644 --- a/Mage.Sets/src/mage/cards/c/CommandersInsignia.java +++ b/Mage.Sets/src/mage/cards/c/CommandersInsignia.java @@ -27,8 +27,7 @@ public final class CommandersInsignia extends CardImpl { // Creatures you control get +1/+1 for each time you've cast your commander from the command zone this game. this.addAbility(new SimpleStaticAbility(new BoostControlledEffect( CommandersInsigniaValue.instance, CommandersInsigniaValue.instance, Duration.WhileOnBattlefield - ).setText("Creatures you control get +1/+1 for each time you've cast your commander from the command zone this game.")), - new CommanderPlaysCountWatcher()); + ).setText("Creatures you control get +1/+1 for each time you've cast your commander from the command zone this game."))); } private CommandersInsignia(final CommandersInsignia card) { diff --git a/Mage.Sets/src/mage/cards/j/JeskaThriceReborn.java b/Mage.Sets/src/mage/cards/j/JeskaThriceReborn.java index c97829776c9..34aba889bd8 100644 --- a/Mage.Sets/src/mage/cards/j/JeskaThriceReborn.java +++ b/Mage.Sets/src/mage/cards/j/JeskaThriceReborn.java @@ -44,7 +44,7 @@ public final class JeskaThriceReborn extends CardImpl { CounterType.LOYALTY.createInstance(0), JeskaThriceRebornValue.instance, false ), "with a loyalty counter on her for each time " + "you've cast a commander from the command zone this game" - ).addHint(JeskaThriceRebornValue.getHint()), new CommanderPlaysCountWatcher()); + ).addHint(JeskaThriceRebornValue.getHint())); // +0: Choose target creature. Until your next turn, if that creature would deal combat damage to one of your opponents, it deals triple that damage to that player instead. Ability ability = new LoyaltyAbility(new JeskaThriceRebornEffect(), 0); diff --git a/Mage.Sets/src/mage/cards/m/MythUnbound.java b/Mage.Sets/src/mage/cards/m/MythUnbound.java index 14404f3f026..b04e0ee4267 100644 --- a/Mage.Sets/src/mage/cards/m/MythUnbound.java +++ b/Mage.Sets/src/mage/cards/m/MythUnbound.java @@ -38,7 +38,7 @@ public final class MythUnbound extends CardImpl { this.addAbility(new SimpleStaticAbility( Zone.BATTLEFIELD, new MythUnboundCostReductionEffect() - ), new CommanderPlaysCountWatcher()); + )); // Whenever your commander is put into the command zone from anywhere, draw a card. this.addAbility(new ZoneChangeAllTriggeredAbility( diff --git a/Mage/src/main/java/mage/game/GameCommanderImpl.java b/Mage/src/main/java/mage/game/GameCommanderImpl.java index da0c0ebfe04..4457b139721 100644 --- a/Mage/src/main/java/mage/game/GameCommanderImpl.java +++ b/Mage/src/main/java/mage/game/GameCommanderImpl.java @@ -44,8 +44,8 @@ public abstract class GameCommanderImpl extends GameImpl { protected void init(UUID choosingPlayerId) { // Karn Liberated calls it to restart game, all data and commanders must be re-initialized - // plays watcher - state.addWatcher(new CommanderPlaysCountWatcher()); + // add game mode specific watchers here + //state.addWatcher(new CommanderPlaysCountWatcher()); // move commanders to command zone for (UUID playerId : state.getPlayerList(startingPlayerId)) { diff --git a/Mage/src/main/java/mage/game/GameImpl.java b/Mage/src/main/java/mage/game/GameImpl.java index 4af90431cc2..6ee75983ffd 100644 --- a/Mage/src/main/java/mage/game/GameImpl.java +++ b/Mage/src/main/java/mage/game/GameImpl.java @@ -161,6 +161,7 @@ public abstract class GameImpl implements Game { this.startingLife = startingLife; this.executingRollback = false; this.startingHandSize = startingHandSize; + initGameDefaultWatchers(); } @@ -1266,6 +1267,7 @@ public abstract class GameImpl implements Game { newWatchers.add(new CardsDrawnThisTurnWatcher()); newWatchers.add(new ManaSpentToCastWatcher()); newWatchers.add(new ManaPaidSourceWatcher()); + newWatchers.add(new CommanderPlaysCountWatcher()); // commander plays count uses in non commander games by some cards // runtime check - allows only GAME scope (one watcher per game) newWatchers.forEach(watcher -> { diff --git a/Mage/src/main/java/mage/game/GameTinyLeadersImpl.java b/Mage/src/main/java/mage/game/GameTinyLeadersImpl.java index b95fda30b6f..39aca940b81 100644 --- a/Mage/src/main/java/mage/game/GameTinyLeadersImpl.java +++ b/Mage/src/main/java/mage/game/GameTinyLeadersImpl.java @@ -44,8 +44,8 @@ public abstract class GameTinyLeadersImpl extends GameImpl { @Override protected void init(UUID choosingPlayerId) { - // plays watcher - state.addWatcher(new CommanderPlaysCountWatcher()); + // add game mode specific watchers here + //state.addWatcher(new CommanderPlaysCountWatcher()); // move tiny leader to command zone for (UUID playerId : state.getPlayerList(startingPlayerId)) { diff --git a/Mage/src/main/java/mage/watchers/common/CommanderPlaysCountWatcher.java b/Mage/src/main/java/mage/watchers/common/CommanderPlaysCountWatcher.java index 5fe89dc3ff7..56a67a53b81 100644 --- a/Mage/src/main/java/mage/watchers/common/CommanderPlaysCountWatcher.java +++ b/Mage/src/main/java/mage/watchers/common/CommanderPlaysCountWatcher.java @@ -12,11 +12,10 @@ import mage.watchers.Watcher; import java.util.*; /** + * Default game watcher, no need to add it with abilities + *

* Calcs commanders play count only from command zone (spell or land) * Cards like Remand can put command to hand and cast it without commander tax increase - *

- * Warning, if your code can be called in non commander games then you must watcher in your ability - * (example: you are using watcher in trigger, hint or effect, but do not checking another things like commander source or cost) * * @author JayDi85 */