Merge pull request #3962 from Northmoc/WHO-fixed

WHO: fixed_point_in_time.txt and support
This commit is contained in:
kevlahnota
2023-10-26 16:55:13 +08:00
committed by GitHub
5 changed files with 54 additions and 2 deletions

View File

@@ -1,22 +1,36 @@
package forge.game.ability.effects; package forge.game.ability.effects;
import forge.game.Game; import forge.game.Game;
import forge.game.ability.AbilityKey;
import forge.game.ability.AbilityUtils; import forge.game.ability.AbilityUtils;
import forge.game.ability.SpellAbilityEffect; import forge.game.ability.SpellAbilityEffect;
import forge.game.card.CardCollectionView; import forge.game.card.CardCollectionView;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.replacement.ReplacementResult;
import forge.game.replacement.ReplacementType;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.util.Localizer; import forge.util.Localizer;
import java.util.Map;
public class PlaneswalkEffect extends SpellAbilityEffect { public class PlaneswalkEffect extends SpellAbilityEffect {
@Override @Override
public void resolve(SpellAbility sa) { public void resolve(SpellAbility sa) {
Game game = sa.getActivatingPlayer().getGame(); Player activator = sa.getActivatingPlayer();
Game game = activator.getGame();
if (game.getActivePlanes() == null) { // not a planechase game, nothing happens if (game.getActivePlanes() == null) { // not a planechase game, nothing happens
return; return;
} }
final Map<AbilityKey, Object> repParams = AbilityKey.mapFromAffected(activator);
Object cause = sa.hasParam("Cause") ? sa.getParam("Cause") : sa;
repParams.put(AbilityKey.Cause, cause);
if (game.getReplacementHandler().run(ReplacementType.Planeswalk, repParams) == ReplacementResult.Replaced) {
return;
}
if (sa.hasParam("Optional") && !sa.getActivatingPlayer().getController().confirmAction(sa, null, if (sa.hasParam("Optional") && !sa.getActivatingPlayer().getController().confirmAction(sa, null,
Localizer.getInstance().getMessage("lblWouldYouLikeToPlaneswalk"), null)) { Localizer.getInstance().getMessage("lblWouldYouLikeToPlaneswalk"), null)) {
return; return;

View File

@@ -329,7 +329,7 @@ public class CardFactory {
String trigger = "Mode$ PlanarDice | Result$ Planeswalk | TriggerZones$ Command | Secondary$ True | " + String trigger = "Mode$ PlanarDice | Result$ Planeswalk | TriggerZones$ Command | Secondary$ True | " +
"TriggerDescription$ Whenever you roll the Planeswalker symbol on the planar die, planeswalk."; "TriggerDescription$ Whenever you roll the Planeswalker symbol on the planar die, planeswalk.";
String rolledWalk = "DB$ Planeswalk"; String rolledWalk = "DB$ Planeswalk | Cause$ PlanarDie";
Trigger planesWalkTrigger = TriggerHandler.parseTrigger(trigger, card, true); Trigger planesWalkTrigger = TriggerHandler.parseTrigger(trigger, card, true);
planesWalkTrigger.setOverridingAbility(AbilityFactory.getAbility(rolledWalk, card)); planesWalkTrigger.setOverridingAbility(AbilityFactory.getAbility(rolledWalk, card));

View File

@@ -0,0 +1,28 @@
package forge.game.replacement;
import forge.game.ability.AbilityKey;
import forge.game.card.Card;
import forge.game.spellability.SpellAbility;
import java.util.Map;
public class ReplacePlaneswalk extends ReplacementEffect {
public ReplacePlaneswalk(final Map<String, String> mapParams, final Card host, final boolean intrinsic) {
super(mapParams, host, intrinsic);
}
@Override
public boolean canReplace(Map<AbilityKey, Object> runParams) {
if (!matchesValidParam("ValidCause", runParams.get(AbilityKey.Cause))) {
return false;
}
return true;
}
@Override
public void setReplacingObjects(Map<AbilityKey, Object> runParams, SpellAbility sa) {
sa.setReplacingObject(AbilityKey.Cause, runParams.get(AbilityKey.Cause));
}
}

View File

@@ -35,6 +35,7 @@ public enum ReplacementType {
Moved(ReplaceMoved.class), Moved(ReplaceMoved.class),
PayLife(ReplacePayLife.class), PayLife(ReplacePayLife.class),
PlanarDiceResult(ReplacePlanarDiceResult.class), PlanarDiceResult(ReplacePlanarDiceResult.class),
Planeswalk(ReplacePlaneswalk.class),
ProduceMana(ReplaceProduceMana.class), ProduceMana(ReplaceProduceMana.class),
Proliferate(ReplaceProliferate.class), Proliferate(ReplaceProliferate.class),
RemoveCounter(ReplaceRemoveCounter.class), RemoveCounter(ReplaceRemoveCounter.class),

View File

@@ -0,0 +1,9 @@
Name:Fixed Point in Time
ManaCost:no cost
Types:Phenomenon
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ TrigEffect | TriggerDescription$ When you encounter CARDNAME, until your next turn, if a player would planeswalk as a result of rolling the planar die, chaos ensues instead. (Then planeswalk away from this phenomenon.)
SVar:TrigEffect:DB$ Effect | ReplacementEffects$ ReplacePlaneswalk | Duration$ UntilYourNextTurn | SubAbility$ PWAway
SVar:ReplacePlaneswalk:Event$ Planeswalk | ValidCause$ PlanarDie | ReplaceWith$ Chaos | Description$ If a player would planeswalk as a result of rolling the planar die, chaos ensues instead.
SVar:Chaos:DB$ ChaosEnsues
SVar:PWAway:DB$ Planeswalk
Oracle:When you encounter Fixed Point in Time, until your next turn, if a player would planeswalk as a result of rolling the planar die, chaos ensues instead. (Then planeswalk away from this phenomenon.)