From 0ae7fd8d9d7fe90db8fef761b36b9b9c5fa2b82a Mon Sep 17 00:00:00 2001 From: swordshine Date: Tue, 3 Mar 2015 10:11:09 +0000 Subject: [PATCH] =?UTF-8?q?-=20DTK=EF=BC=9AAdded=20Sidisi,=20Undead=20Vizi?= =?UTF-8?q?er?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitattributes | 1 + .../game/ability/effects/SacrificeEffect.java | 7 ++ .../java/forge/game/card/CardFactoryUtil.java | 13 ++++ .../forge/game/trigger/TriggerExploited.java | 77 +++++++++++++++++++ .../java/forge/game/trigger/TriggerType.java | 1 + 5 files changed, 99 insertions(+) create mode 100644 forge-game/src/main/java/forge/game/trigger/TriggerExploited.java diff --git a/.gitattributes b/.gitattributes index 59d870bd255..ec64a80469f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -672,6 +672,7 @@ forge-game/src/main/java/forge/game/trigger/TriggerDevoured.java -text forge-game/src/main/java/forge/game/trigger/TriggerDiscarded.java svneol=native#text/plain forge-game/src/main/java/forge/game/trigger/TriggerDrawn.java svneol=native#text/plain forge-game/src/main/java/forge/game/trigger/TriggerEvolved.java -text +forge-game/src/main/java/forge/game/trigger/TriggerExploited.java -text forge-game/src/main/java/forge/game/trigger/TriggerFlippedCoin.java -text forge-game/src/main/java/forge/game/trigger/TriggerHandler.java svneol=native#text/plain forge-game/src/main/java/forge/game/trigger/TriggerLandPlayed.java svneol=native#text/plain diff --git a/forge-game/src/main/java/forge/game/ability/effects/SacrificeEffect.java b/forge-game/src/main/java/forge/game/ability/effects/SacrificeEffect.java index 9341f57c9f9..a13c4ca15e1 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/SacrificeEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/SacrificeEffect.java @@ -50,6 +50,7 @@ public class SacrificeEffect extends SpellAbilityEffect { final int amount = AbilityUtils.calculateAmount(card, num, sa); final List tgts = getTargetPlayers(sa); final boolean devour = sa.hasParam("Devour"); + final boolean exploit = sa.hasParam("Exploit"); String valid = sa.getParam("SacValid"); if (valid == null) { @@ -106,6 +107,12 @@ public class SacrificeEffect extends SpellAbilityEffect { runParams.put("Devoured", sac); game.getTriggerHandler().runTrigger(TriggerType.Devoured, runParams, false); } + if (exploit) { + final HashMap runParams = new HashMap(); + runParams.put("Exploited", lKICopy); + runParams.put("Card", card); + game.getTriggerHandler().runTrigger(TriggerType.Exploited, runParams, false); + } if (wasDestroyed || wasSacrificed) { countSacrificed++; if (remSacrificed) { diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index 9ae851bb307..6efa411c958 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -3239,6 +3239,7 @@ public class CardFactoryUtil { card.addTrigger(myTrigger); } } // Modular + /* * WARNING: must keep this keyword processing before etbCounter keyword @@ -3402,6 +3403,18 @@ public class CardFactoryUtil { card.addTrigger(prowessTrigger); card.setSVar("BuffedBy", "Card.nonCreature+nonLand"); // for the AI } // Prowess + final int exploit = card.getAmountOfKeyword("Exploit"); + card.removeIntrinsicKeyword("Exploit"); + final StringBuilder trigExploit = new StringBuilder( + "Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield" + + " | Execute$ ExploitSac | TriggerDescription$ Exploit (When this creature enters" + + " the battlefield, you may sacrifice a creature.)"); + final String abStringExploit = "DB$ Sacrifice | SacValid$ Creature | Exploit$ True | Optional$ True"; + card.setSVar("ExploitSac", abStringExploit); + final Trigger exploitTrigger = TriggerHandler.parseTrigger(trigExploit.toString(), card, true); + for (int i = 0; i < exploit; i++) { + card.addTrigger(exploitTrigger); + } // Exploit } public final static void refreshTotemArmor(Card c) { diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerExploited.java b/forge-game/src/main/java/forge/game/trigger/TriggerExploited.java new file mode 100644 index 00000000000..edd6de43c29 --- /dev/null +++ b/forge-game/src/main/java/forge/game/trigger/TriggerExploited.java @@ -0,0 +1,77 @@ +/* + * Forge: Play Magic: the Gathering. + * Copyright (C) 2011 Forge Team + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package forge.game.trigger; + +import forge.game.card.Card; +import forge.game.spellability.SpellAbility; + +/** + *

+ * Trigger_Championed class. + *

+ * + * @author Forge + * @version $Id: TriggerChampioned.java 24762 2014-02-09 10:18:46Z swordshine $ + * @since 1.0.15 + */ +public class TriggerExploited extends Trigger { + + /** + *

+ * Constructor for Trigger_Exploited. + *

+ * + * @param params + * a {@link java.util.HashMap} object. + * @param host + * a {@link forge.game.card.Card} object. + * @param intrinsic + * the intrinsic + */ + public TriggerExploited(final java.util.Map params, final Card host, final boolean intrinsic) { + super(params, host, intrinsic); + } + + /** {@inheritDoc} */ + @Override + public final boolean performTest(final java.util.Map runParams2) { + final Card exploited = (Card) runParams2.get("Exploited"); + final Card source = (Card) runParams2.get("Card"); + + if (this.mapParams.containsKey("ValidCard")) { + if (!exploited.isValid(this.mapParams.get("ValidCard").split(","), + this.getHostCard().getController(), this.getHostCard())) { + return false; + } + } + if (this.mapParams.containsKey("ValidSource")) { + if (!source.isValid(this.mapParams.get("ValidSource").split(","), + this.getHostCard().getController(), this.getHostCard())) { + return false; + } + } + return true; + } + + /** {@inheritDoc} */ + @Override + public final void setTriggeringObjects(final SpellAbility sa) { + sa.setTriggeringObject("Exploited", this.getRunParams().get("Exploited")); + sa.setTriggeringObject("Card", this.getRunParams().get("Card")); + } +} diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerType.java b/forge-game/src/main/java/forge/game/trigger/TriggerType.java index 6107d35bfec..38563fd4cfc 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerType.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerType.java @@ -40,6 +40,7 @@ public enum TriggerType { Discarded(TriggerDiscarded.class), Drawn(TriggerDrawn.class), Evolved(TriggerEvolved.class), + Exploited(TriggerExploited.class), FlippedCoin(TriggerFlippedCoin.class), LandPlayed(TriggerLandPlayed.class), LifeGained(TriggerLifeGained.class),