mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
add new TriggerRevealed to use it for Miracle
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -721,6 +721,7 @@ forge-game/src/main/java/forge/game/trigger/TriggerPhaseOut.java -text
|
|||||||
forge-game/src/main/java/forge/game/trigger/TriggerPlanarDice.java -text
|
forge-game/src/main/java/forge/game/trigger/TriggerPlanarDice.java -text
|
||||||
forge-game/src/main/java/forge/game/trigger/TriggerPlaneswalkedFrom.java -text
|
forge-game/src/main/java/forge/game/trigger/TriggerPlaneswalkedFrom.java -text
|
||||||
forge-game/src/main/java/forge/game/trigger/TriggerPlaneswalkedTo.java -text
|
forge-game/src/main/java/forge/game/trigger/TriggerPlaneswalkedTo.java -text
|
||||||
|
forge-game/src/main/java/forge/game/trigger/TriggerRevealed.java -text svneol=unset#text/plain
|
||||||
forge-game/src/main/java/forge/game/trigger/TriggerSacrificed.java svneol=native#text/plain
|
forge-game/src/main/java/forge/game/trigger/TriggerSacrificed.java svneol=native#text/plain
|
||||||
forge-game/src/main/java/forge/game/trigger/TriggerScry.java -text
|
forge-game/src/main/java/forge/game/trigger/TriggerScry.java -text
|
||||||
forge-game/src/main/java/forge/game/trigger/TriggerSearchedLibrary.java -text
|
forge-game/src/main/java/forge/game/trigger/TriggerSearchedLibrary.java -text
|
||||||
|
|||||||
@@ -9,25 +9,26 @@ import forge.game.card.CardCollectionView;
|
|||||||
import forge.game.card.CardLists;
|
import forge.game.card.CardLists;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.spellability.SpellAbility;
|
import forge.game.spellability.SpellAbility;
|
||||||
import forge.game.spellability.TargetRestrictions;
|
import forge.game.trigger.TriggerType;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.util.Aggregates;
|
import forge.util.Aggregates;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import com.google.common.collect.Maps;
|
||||||
|
|
||||||
public class RevealEffect extends SpellAbilityEffect {
|
public class RevealEffect extends SpellAbilityEffect {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void resolve(SpellAbility sa) {
|
public void resolve(SpellAbility sa) {
|
||||||
final Card host = sa.getHostCard();
|
final Card host = sa.getHostCard();
|
||||||
|
final Game game = host.getGame();
|
||||||
final boolean anyNumber = sa.hasParam("AnyNumber");
|
final boolean anyNumber = sa.hasParam("AnyNumber");
|
||||||
int cnt = sa.hasParam("NumCards") ? AbilityUtils.calculateAmount(host, sa.getParam("NumCards"), sa) : 1;
|
int cnt = sa.hasParam("NumCards") ? AbilityUtils.calculateAmount(host, sa.getParam("NumCards"), sa) : 1;
|
||||||
|
|
||||||
final TargetRestrictions tgt = sa.getTargetRestrictions();
|
|
||||||
|
|
||||||
for (final Player p : getTargetPlayers(sa)) {
|
for (final Player p : getTargetPlayers(sa)) {
|
||||||
final Game game = p.getGame();
|
if (!sa.usesTargeting() || p.canBeTargetedBy(sa)) {
|
||||||
if (tgt == null || p.canBeTargetedBy(sa)) {
|
|
||||||
final CardCollectionView cardsInHand = p.getZone(ZoneType.Hand).getCards();
|
final CardCollectionView cardsInHand = p.getZone(ZoneType.Hand).getCards();
|
||||||
if (cardsInHand.isEmpty()) {
|
if (cardsInHand.isEmpty()) {
|
||||||
continue;
|
continue;
|
||||||
@@ -71,10 +72,15 @@ public class RevealEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
|
|
||||||
game.getAction().reveal(revealed, p);
|
game.getAction().reveal(revealed, p);
|
||||||
|
for (final Card c : revealed) {
|
||||||
if (sa.hasParam("RememberRevealed")) {
|
Map<String, Object> runParams = Maps.newHashMap();
|
||||||
for (final Card rem : revealed) {
|
runParams.put("Card", c);
|
||||||
host.addRemembered(rem);
|
if (sa.hasParam("MiracleCost")) {
|
||||||
|
runParams.put("Miracle", true);
|
||||||
|
}
|
||||||
|
game.getTriggerHandler().runTrigger(TriggerType.Revealed, runParams, false);
|
||||||
|
if (sa.hasParam("RememberRevealed")) {
|
||||||
|
host.addRemembered(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3027,18 +3027,29 @@ public class CardFactoryUtil {
|
|||||||
} else if (keyword.startsWith("Miracle")) {
|
} else if (keyword.startsWith("Miracle")) {
|
||||||
final String[] k = keyword.split(":");
|
final String[] k = keyword.split(":");
|
||||||
final String manacost = k[1];
|
final String manacost = k[1];
|
||||||
final String abStr = "DB$ Play | Defined$ Self | PlayCost$ " + manacost;
|
final String abStrReveal = "DB$ Reveal | Defined$ You | RevealDefined$ Self | MiracleCost$ " + manacost;
|
||||||
|
final String abStrPlay = "DB$ Play | Defined$ Self | PlayCost$ " + manacost;
|
||||||
|
|
||||||
final String trigStr = "Mode$ Drawn | ValidCard$ Card.Self | Miracle$ True | Secondary$ True "
|
final String trigStrDrawn = "Mode$ Drawn | ValidCard$ Card.Self | Miracle$ True | Secondary$ True"
|
||||||
+ "| Static$ True | TriggerDescription$ CARDNAME - Miracle";
|
+ " | OptionalDecider$ You | Static$ True | TriggerDescription$ CARDNAME - Miracle";
|
||||||
|
|
||||||
final Trigger trigger = TriggerHandler.parseTrigger(trigStr, card, intrinsic);
|
final String trigStrRevealed = "Mode$ Revealed | ValidCard$ Card.Self | Miracle$ True"
|
||||||
|
+ " | IsPresent$ Card.Self | PresentZone$ Hand | Secondary$ True"
|
||||||
|
+ " | TriggerDescription$ CARDNAME - Miracle";
|
||||||
|
|
||||||
trigger.setOverridingAbility(AbilityFactory.getAbility(abStr, card));
|
final Trigger triggerDrawn = TriggerHandler.parseTrigger(trigStrDrawn, card, intrinsic);
|
||||||
|
|
||||||
final Trigger cardTrigger = card.addTrigger(trigger);
|
triggerDrawn.setOverridingAbility(AbilityFactory.getAbility(abStrReveal, card));
|
||||||
|
|
||||||
|
final Trigger triggerRevealed = TriggerHandler.parseTrigger(trigStrRevealed, card, intrinsic);
|
||||||
|
|
||||||
|
triggerRevealed.setOverridingAbility(AbilityFactory.getAbility(abStrPlay, card));
|
||||||
|
|
||||||
|
final Trigger cardTriggerDrawn = card.addTrigger(triggerDrawn);
|
||||||
|
final Trigger cardTriggerRevealed = card.addTrigger(triggerRevealed);
|
||||||
if (!intrinsic) {
|
if (!intrinsic) {
|
||||||
kws.addTrigger(cardTrigger);
|
kws.addTrigger(cardTriggerDrawn);
|
||||||
|
kws.addTrigger(cardTriggerRevealed);
|
||||||
}
|
}
|
||||||
} else if (keyword.startsWith("Modular")) {
|
} else if (keyword.startsWith("Modular")) {
|
||||||
final String abStr = "AB$ PutCounter | Cost$ 0 | ValidTgts$ Artifact.Creature | " +
|
final String abStr = "AB$ PutCounter | Cost$ 0 | ValidTgts$ Artifact.Creature | " +
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
package forge.game.trigger;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import forge.game.card.Card;
|
||||||
|
import forge.game.spellability.SpellAbility;
|
||||||
|
|
||||||
|
public class TriggerRevealed extends Trigger {
|
||||||
|
|
||||||
|
public TriggerRevealed(Map<String, String> params, Card host, boolean intrinsic) {
|
||||||
|
super(params, host, intrinsic);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean performTest(Map<String, Object> runParams2) {
|
||||||
|
if (this.mapParams.containsKey("ValidCard")) {
|
||||||
|
final Card moved = (Card) runParams2.get("Card");
|
||||||
|
if (!moved.isValid(this.mapParams.get("ValidCard").split(","), this.getHostCard().getController(),
|
||||||
|
this.getHostCard(), null)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this.mapParams.containsKey("Miracle")) {
|
||||||
|
Boolean madness = (Boolean) runParams2.get("Miracle");
|
||||||
|
if (this.mapParams.get("Miracle").equals("True") ^ madness) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setTriggeringObjects(SpellAbility sa) {
|
||||||
|
sa.setTriggeringObject("Card", this.getRunParams().get("Card"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getImportantStackObjects(SpellAbility sa) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append("Revealed: ").append(sa.getTriggeringObject("Card"));
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -62,6 +62,7 @@ public enum TriggerType {
|
|||||||
PlanarDice(TriggerPlanarDice.class),
|
PlanarDice(TriggerPlanarDice.class),
|
||||||
PlaneswalkedFrom(TriggerPlaneswalkedFrom.class),
|
PlaneswalkedFrom(TriggerPlaneswalkedFrom.class),
|
||||||
PlaneswalkedTo(TriggerPlaneswalkedTo.class),
|
PlaneswalkedTo(TriggerPlaneswalkedTo.class),
|
||||||
|
Revealed(TriggerRevealed.class),
|
||||||
Sacrificed(TriggerSacrificed.class),
|
Sacrificed(TriggerSacrificed.class),
|
||||||
Scry(TriggerScry.class),
|
Scry(TriggerScry.class),
|
||||||
SearchedLibrary(TriggerSearchedLibrary.class),
|
SearchedLibrary(TriggerSearchedLibrary.class),
|
||||||
|
|||||||
Reference in New Issue
Block a user