mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 12:48:00 +00:00
add "TapsForMana" trigger. converted Manabarbs to trigger. Add Elvish Guidance.
This commit is contained in:
2
.gitattributes
vendored
2
.gitattributes
vendored
@@ -1915,6 +1915,7 @@ res/cardsfolder/elvish_champion.txt -text svneol=native#text/plain
|
||||
res/cardsfolder/elvish_eulogist.txt -text svneol=native#text/plain
|
||||
res/cardsfolder/elvish_farmer.txt -text svneol=native#text/plain
|
||||
res/cardsfolder/elvish_fury.txt -text svneol=native#text/plain
|
||||
res/cardsfolder/elvish_guidance.txt -text svneol=native#text/plain
|
||||
res/cardsfolder/elvish_handservant.txt -text svneol=native#text/plain
|
||||
res/cardsfolder/elvish_harbinger.txt -text svneol=native#text/plain
|
||||
res/cardsfolder/elvish_herder.txt -text svneol=native#text/plain
|
||||
@@ -8258,6 +8259,7 @@ src/forge/card/trigger/Trigger_Sacrificed.java -text svneol=native#text/plain
|
||||
src/forge/card/trigger/Trigger_Shuffled.java -text svneol=native#text/plain
|
||||
src/forge/card/trigger/Trigger_SpellAbilityCast.java -text svneol=native#text/plain
|
||||
src/forge/card/trigger/Trigger_Taps.java -text svneol=native#text/plain
|
||||
src/forge/card/trigger/Trigger_TapsForMana.java -text svneol=native#text/plain
|
||||
src/forge/card/trigger/Trigger_TurnFaceUp.java -text svneol=native#text/plain
|
||||
src/forge/card/trigger/Trigger_Unequip.java -text svneol=native#text/plain
|
||||
src/forge/card/trigger/Trigger_Untaps.java -text svneol=native#text/plain
|
||||
|
||||
12
res/cardsfolder/elvish_guidance.txt
Normal file
12
res/cardsfolder/elvish_guidance.txt
Normal file
@@ -0,0 +1,12 @@
|
||||
Name:Elvish Guidance
|
||||
ManaCost:2 G
|
||||
Types:Enchantment Aura
|
||||
Text:no text
|
||||
K:Enchant Land
|
||||
T:Mode$ TapsForMana | ValidCard$ Card.AttachedBy | Execute$ TrigMana | TriggerDescription$ Whenever enchanted land is tapped for mana, its controller adds G to his or her mana pool for each Elf on the battlefield (in addition to the mana the land produces).
|
||||
SVar:TrigMana:AB$Mana | Cost$ 0 | Produced$ G | Amount$ X
|
||||
SVar:X:Count$Valid Elf
|
||||
SVar:RemAIDeck:True
|
||||
SVar:Rarity:Common
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/elvish_guidance.jpg
|
||||
End
|
||||
@@ -1,7 +1,9 @@
|
||||
Name:Manabarbs
|
||||
ManaCost:3 R
|
||||
Types:Enchantment
|
||||
Text:Whenever a player taps a land for mana, Manabarbs deals 1 damage to that player.
|
||||
Text:no text
|
||||
T:Mode$ TapsForMana | ValidCard$ Land | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ Whenever a player taps a land for mana, CARDNAME deals 1 damage to that player.
|
||||
SVar:TrigDamage:AB$DealDamage | Cost$ 0 | Defined$ TriggeredCardController | NumDmg$ 1
|
||||
SVar:RemAIDeck:True
|
||||
SVar:Rarity:Rare
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/manabarbs.jpg
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
|
||||
package forge;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
|
||||
import forge.card.abilityFactory.AbilityFactory;
|
||||
import forge.card.cardFactory.CardFactoryUtil;
|
||||
import forge.card.mana.ManaCost;
|
||||
import forge.card.spellability.Ability;
|
||||
import forge.card.spellability.Ability_Mana;
|
||||
import forge.card.spellability.Cost;
|
||||
import forge.card.spellability.Cost_Payment;
|
||||
@@ -531,31 +533,18 @@ public class ComputerUtil
|
||||
AllZone.Stack.add(CardFactoryUtil.getForbiddenOrchardAbility(sourceLand, AllZone.HumanPlayer));
|
||||
}
|
||||
|
||||
//Manabarbs code
|
||||
if(sourceLand.isLand()) { //&& this.isTapAbility()) {
|
||||
CardList barbs = AllZoneUtil.getCardsInPlay("Manabarbs");
|
||||
for(Card barb:barbs) {
|
||||
final Card manabarb = barb;
|
||||
SpellAbility ability = new Ability(manabarb, "") {
|
||||
@Override
|
||||
public void resolve() {
|
||||
sourceLand.getController().addDamage(1, manabarb);
|
||||
}
|
||||
};
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(manabarb.getName()).append(" - deal 1 damage to ").append(sourceLand.getController());
|
||||
ability.setStackDescription(sb.toString());
|
||||
|
||||
AllZone.Stack.add(ability);
|
||||
}
|
||||
}
|
||||
|
||||
if(sourceLand.getName().equals("Rainbow Vale")) {
|
||||
sourceLand.addExtrinsicKeyword("An opponent gains control of CARDNAME at the beginning of the next end step.");
|
||||
}
|
||||
|
||||
//System.out.println("just subtracted " + colors.get(j) + ", cost is now: " + cost.toString());
|
||||
//Run triggers
|
||||
HashMap<String,Object> runParams = new HashMap<String,Object>();
|
||||
|
||||
runParams.put("Card", sourceLand);
|
||||
runParams.put("Player", AllZone.ComputerPlayer);
|
||||
runParams.put("Produced", colors.get(j)); //can't tell what mana to computer just paid?
|
||||
AllZone.TriggerHandler.runTrigger("TapsForMana", runParams);
|
||||
|
||||
}
|
||||
if(cost.isPaid())
|
||||
@@ -569,6 +558,7 @@ public class ComputerUtil
|
||||
}
|
||||
if(!cost.isPaid())
|
||||
throw new RuntimeException("ComputerUtil : payManaCost() cost was not paid for " + sa.getSourceCard().getName());
|
||||
|
||||
}//payManaCost()
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package forge.card.spellability;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
import forge.AllZone;
|
||||
import forge.AllZoneUtil;
|
||||
@@ -97,26 +98,6 @@ abstract public class Ability_Mana extends Ability_Activated implements java.io.
|
||||
}
|
||||
}
|
||||
|
||||
if (source.isLand()){
|
||||
CardList manaBarbs = AllZoneUtil.getCardsInPlay("Manabarbs");
|
||||
|
||||
for(final Card c : manaBarbs){
|
||||
this.undoable = false;
|
||||
SpellAbility ability = new Ability(c, "") {
|
||||
@Override
|
||||
public void resolve() {
|
||||
source.getController().addDamage(1, c);
|
||||
}
|
||||
};
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(c.getName()).append(" - deal 1 damage to ").append(source.getController());
|
||||
ability.setStackDescription(sb.toString());
|
||||
|
||||
AllZone.Stack.add(ability);
|
||||
}
|
||||
}
|
||||
|
||||
if(source.getName().equals("Rainbow Vale")) {
|
||||
this.undoable = false;
|
||||
source.addExtrinsicKeyword("An opponent gains control of CARDNAME at the beginning of the next end step.");
|
||||
@@ -177,7 +158,17 @@ abstract public class Ability_Mana extends Ability_Activated implements java.io.
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//Run triggers
|
||||
HashMap<String,Object> runParams = new HashMap<String,Object>();
|
||||
|
||||
runParams.put("Card", source);
|
||||
runParams.put("Player", AllZone.HumanPlayer);
|
||||
runParams.put("Ability_Mana", this);
|
||||
runParams.put("Produced", produced);
|
||||
AllZone.TriggerHandler.runTrigger("TapsForMana", runParams);
|
||||
|
||||
}//end produceMana(String)
|
||||
|
||||
private boolean mirariCanAdd(String c, String produced) {
|
||||
return produced.contains(c);
|
||||
@@ -221,5 +212,6 @@ abstract public class Ability_Mana extends Ability_Activated implements java.io.
|
||||
//Mana abilities with same Descriptions are "equal"
|
||||
return o.toString().equals(this.toString());
|
||||
}
|
||||
}
|
||||
|
||||
}//end class Ability_Mana
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@ import forge.GameActionUtil;
|
||||
import forge.Player;
|
||||
import forge.card.abilityFactory.AbilityFactory;
|
||||
import forge.card.spellability.Ability;
|
||||
import forge.card.spellability.Ability_Mana;
|
||||
import forge.card.spellability.Ability_Sub;
|
||||
import forge.card.spellability.Cost;
|
||||
import forge.card.spellability.SpellAbility;
|
||||
@@ -130,6 +131,9 @@ public class TriggerHandler {
|
||||
{
|
||||
ret = new Trigger_Taps(mapParams,host);
|
||||
}
|
||||
else if(mode.equals("TapsForMana")) {
|
||||
ret = new Trigger_TapsForMana(mapParams, host);
|
||||
}
|
||||
else if(mode.equals("TurnFaceUp"))
|
||||
{
|
||||
ret = new Trigger_TurnFaceUp(mapParams,host);
|
||||
@@ -306,6 +310,11 @@ public class TriggerHandler {
|
||||
regtrig.setRunParams(runParams);
|
||||
|
||||
//All tests passed, execute ability.
|
||||
if(regtrig instanceof Trigger_TapsForMana) {
|
||||
Ability_Mana abMana = (Ability_Mana)runParams.get("Ability_Mana");
|
||||
abMana.setUndoable(false);
|
||||
}
|
||||
|
||||
AbilityFactory AF = new AbilityFactory();
|
||||
|
||||
final SpellAbility[] sa = new SpellAbility[1];
|
||||
|
||||
44
src/forge/card/trigger/Trigger_TapsForMana.java
Normal file
44
src/forge/card/trigger/Trigger_TapsForMana.java
Normal file
@@ -0,0 +1,44 @@
|
||||
package forge.card.trigger;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import forge.Card;
|
||||
|
||||
public class Trigger_TapsForMana extends Trigger {
|
||||
|
||||
public Trigger_TapsForMana(HashMap<String, String> params, Card host) {
|
||||
super(params, host);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean performTest(HashMap<String, Object> runParams) {
|
||||
Card tapper = (Card)runParams.get("Card");
|
||||
|
||||
if(mapParams.containsKey("ValidCard")) {
|
||||
if(!tapper.isValidCard(mapParams.get("ValidCard").split(","), hostCard.getController(), hostCard)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Trigger getCopy() {
|
||||
Trigger copy = new Trigger_TapsForMana(mapParams,hostCard);
|
||||
if(overridingAbility != null) {
|
||||
copy.setOverridingAbility(overridingAbility);
|
||||
}
|
||||
copy.setName(name);
|
||||
copy.setID(ID);
|
||||
|
||||
return copy;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTriggeringObjects(Card c) {
|
||||
c.setTriggeringObject("Card", runParams.get("Card"));
|
||||
c.setTriggeringObject("Player", runParams.get("Player"));
|
||||
c.setTriggeringObject("Produced", runParams.get("Produced"));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user