mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 11:18: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/TriggerPlaneswalkedFrom.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/TriggerScry.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.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.spellability.TargetRestrictions;
|
||||
import forge.game.trigger.TriggerType;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.Aggregates;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
public class RevealEffect extends SpellAbilityEffect {
|
||||
|
||||
@Override
|
||||
public void resolve(SpellAbility sa) {
|
||||
final Card host = sa.getHostCard();
|
||||
final Game game = host.getGame();
|
||||
final boolean anyNumber = sa.hasParam("AnyNumber");
|
||||
int cnt = sa.hasParam("NumCards") ? AbilityUtils.calculateAmount(host, sa.getParam("NumCards"), sa) : 1;
|
||||
|
||||
final TargetRestrictions tgt = sa.getTargetRestrictions();
|
||||
|
||||
for (final Player p : getTargetPlayers(sa)) {
|
||||
final Game game = p.getGame();
|
||||
if (tgt == null || p.canBeTargetedBy(sa)) {
|
||||
if (!sa.usesTargeting() || p.canBeTargetedBy(sa)) {
|
||||
final CardCollectionView cardsInHand = p.getZone(ZoneType.Hand).getCards();
|
||||
if (cardsInHand.isEmpty()) {
|
||||
continue;
|
||||
@@ -71,10 +72,15 @@ public class RevealEffect extends SpellAbilityEffect {
|
||||
}
|
||||
|
||||
game.getAction().reveal(revealed, p);
|
||||
|
||||
if (sa.hasParam("RememberRevealed")) {
|
||||
for (final Card rem : revealed) {
|
||||
host.addRemembered(rem);
|
||||
for (final Card c : revealed) {
|
||||
Map<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Card", c);
|
||||
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")) {
|
||||
final String[] k = keyword.split(":");
|
||||
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 "
|
||||
+ "| Static$ True | TriggerDescription$ CARDNAME - Miracle";
|
||||
final String trigStrDrawn = "Mode$ Drawn | ValidCard$ Card.Self | Miracle$ True | Secondary$ True"
|
||||
+ " | 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) {
|
||||
kws.addTrigger(cardTrigger);
|
||||
kws.addTrigger(cardTriggerDrawn);
|
||||
kws.addTrigger(cardTriggerRevealed);
|
||||
}
|
||||
} else if (keyword.startsWith("Modular")) {
|
||||
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),
|
||||
PlaneswalkedFrom(TriggerPlaneswalkedFrom.class),
|
||||
PlaneswalkedTo(TriggerPlaneswalkedTo.class),
|
||||
Revealed(TriggerRevealed.class),
|
||||
Sacrificed(TriggerSacrificed.class),
|
||||
Scry(TriggerScry.class),
|
||||
SearchedLibrary(TriggerSearchedLibrary.class),
|
||||
|
||||
Reference in New Issue
Block a user