New Keyword: abTapDestroyTgt
Post MTG Forge Related Programming Questions Here
	Moderators: timmermac, Agetian, friarsol, Blacksmith, KrazyTheFox, CCGHQ Admins
			4 posts
			 • Page 1 of 1
		
	
New Keyword: abTapDestroyTgt
 by slapshot5 » 13 Sep 2010, 17:11
by slapshot5 » 13 Sep 2010, 17:11 
I've added a new keyword: abTapDestroyTgt
It takes all the same options as spDestroyTgt minus the Buyback stuff. (Code was copied from spDestroyTgt and modified.)
Here is the code in CardFactory.java:
			
		It takes all the same options as spDestroyTgt minus the Buyback stuff. (Code was copied from spDestroyTgt and modified.)
Here is the code in CardFactory.java:
- Code: Select all
- // Generic destroy target card ability
 // can probably be adapted for tap and non-tap abilities
 if(hasKeyword(card, "abTapDestroyTgt") != -1) {
 int n = hasKeyword(card, "abTapDestroyTgt");
 
 String parse = card.getKeyword().get(n).toString();
 card.removeIntrinsicKeyword(parse);
 
 String k[] = parse.split(":");
 String Targets = k[1]; // Artifact, Creature, Enchantment, Land, Permanent, White, Blue, Black, Red, Green, Colorless, MultiColor
 // non-Artifact, non-Creature, non-Enchantment, non-Land, non-Permanent,
 //non-White, non-Blue, non-Black, non-Red, non-Green, non-Colorless, non-MultiColor
 final String Tgts[] = Targets.split(",");
 String tmpDesc = card.getText().substring(20);
 int i = tmpDesc.indexOf(".");
 tmpDesc = tmpDesc.substring(0, i);
 final String Selec = "Select target " + tmpDesc + " to destroy.";
 
 final boolean NoRegen[] = {false};
 final String Drawback[] = {"none"};
 
 if (k.length > 2)
 {
 if (k[2].equals("NoRegen"))
 NoRegen[0] = true;
 
 else if (k[2].startsWith("Drawback$"))
 Drawback[0] = k[2];
 
 if (k.length > 3)
 {
 if (k[3].startsWith("Drawback$"))
 Drawback[0] = k[3];
 }
 
 if (!Drawback[0].equals("none"))
 {
 String kk[] = Drawback[0].split("\\$");
 Drawback[0] = kk[1];
 }
 }
 
 final Ability abDstryTgt = new Ability(card, "0") {
 private static final long serialVersionUID = -4414033187065934909L;
 @Override
 public boolean canPlayAI() {
 CardList results = new CardList();
 CardList choices = getTargets();
 
 choices = choices.filter(new CardListFilter(){
 public boolean addCard(Card c)
 {
 return !c.getKeyword().contains("Indestructible");
 }
 });
 
 
 if(choices.size() > 0) {
 for(int i = 0; i < Tgts.length; i++) {
 if(Tgts[i].startsWith("Artifact")) {
 if(CardFactoryUtil.AI_getBestArtifact(choices) != null) results.add(CardFactoryUtil.AI_getBestArtifact(choices));
 } else if(Tgts[i].startsWith("Creature")) {
 if(CardFactoryUtil.AI_getBestCreature(choices) != null) results.add(CardFactoryUtil.AI_getBestCreature(choices));
 } else if(Tgts[i].startsWith("Enchantment")) {
 if(CardFactoryUtil.AI_getBestEnchantment(choices, card, true) != null) results.add(CardFactoryUtil.AI_getBestEnchantment(
 choices, card, true));
 } else if(Tgts[i].startsWith("Land")) {
 if(CardFactoryUtil.AI_getBestLand(choices) != null) results.add(CardFactoryUtil.AI_getBestLand(choices));
 } else if(Tgts[i].startsWith("Permanent")) {
 if(CardFactoryUtil.AI_getMostExpensivePermanent(choices, card, true) != null) results.add(CardFactoryUtil.AI_getMostExpensivePermanent(
 choices, card, true));
 }
 }
 }
 
 if(results.size() > 0) {
 results.shuffle();
 setTargetCard(results.get(0));
 return true;
 }
 return false;
 }
 
 CardList getTargets() {
 CardList tmpList = new CardList();
 tmpList.addAll(AllZone.Human_Play.getCards());
 tmpList = tmpList.filter(new CardListFilter() {
 public boolean addCard(Card c) {
 return (CardFactoryUtil.canTarget(card, c));
 }
 });
 
 return tmpList.getValidCards(Tgts);
 }
 
 @Override
 public void resolve()
 {
 card.tap();
 Card tgtC = getTargetCard();
 if(AllZone.GameAction.isCardInPlay(tgtC) && CardFactoryUtil.canTarget(card, tgtC))
 {
 if(NoRegen[0])
 AllZone.GameAction.destroyNoRegeneration(tgtC);
 else
 AllZone.GameAction.destroy(tgtC);
 
 if (!Drawback[0].equals("none"))
 CardFactoryUtil.doDrawBack(Drawback[0], 0, card.getController(), AllZone.GameAction.getOpponent(card.getController()), tgtC.getController(), card, tgtC, this);
 }
 }
 }; //AbDstryTgt
 
 Input InGetTarget = CardFactoryUtil.input_targetValid(abDstryTgt, Tgts, Selec);
 
 abDstryTgt.setBeforePayMana(InGetTarget);
 
 abDstryTgt.setDescription(card.getSpellText());
 card.setText("");
 
 card.setSVar("PlayMain1", "TRUE");
 
 card.addSpellAbility(abDstryTgt);
 }//abTapDestroyTgt
- Code: Select all
- King Suleiman
 1 W
 Creature Human
 tap: Destroy target Djinn or Efreet.
 1/1
 abTapDestroyTgt:Creature.Djinn,Creature.Efreet
 SVars:Rarity:Rare
 SVars:Picture:http://www.wizards.com/global/images/magic/general/king_suleiman.jpg
- slapshot5
- Programmer
- Posts: 1391
- Joined: 03 Jan 2010, 17:47
- Location: Mac OS X
- Has thanked: 25 times
- Been thanked: 68 times
Re: New Keyword: abTapDestroyTgt
 by Rob Cashwalker » 13 Sep 2010, 18:12
by Rob Cashwalker » 13 Sep 2010, 18:12 
I have already done this keyword, and it takes any cost provided by Ability_Cost. It hasn't been committed yet, as I was waiting for friarsol to  revise the Ability_Cost taking-over the targeting of the ability itself.
			The Force will be with you, Always.
		- 
				 
 Rob Cashwalker
- Programmer
- Posts: 2167
- Joined: 09 Sep 2008, 15:09
- Location: New York
- Has thanked: 5 times
- Been thanked: 40 times
Re: New Keyword: abTapDestroyTgt
 by Sloth » 14 Sep 2010, 07:28
by Sloth » 14 Sep 2010, 07:28 
I'm sure slapshot5 won't mind you updating this keyword once Ability_Cost has been revised, Rob.Rob Cashwalker wrote:I have already done this keyword, and it takes any cost provided by Ability_Cost. It hasn't been committed yet, as I was waiting for friarsol to revise the Ability_Cost taking-over the targeting of the ability itself.
I would also remove the "Tap" from the keyword name, since there are some cards that can destroy permanents without tapping.
abTapDestroyTgt => abDestroyTgt T
This should be future compatible with Ability_Cost.
- 
				 
 Sloth
- Programmer
- Posts: 3498
- Joined: 23 Jun 2009, 19:40
- Has thanked: 125 times
- Been thanked: 507 times
Re: New Keyword: abTapDestroyTgt
 by slapshot5 » 16 Sep 2010, 18:48
by slapshot5 » 16 Sep 2010, 18:48 
Sounds good.  Thanks guys.
-slapshot5
			
		-slapshot5
- slapshot5
- Programmer
- Posts: 1391
- Joined: 03 Jan 2010, 17:47
- Location: Mac OS X
- Has thanked: 25 times
- Been thanked: 68 times
			4 posts
			 • Page 1 of 1
		
	
Who is online
Users browsing this forum: No registered users and 15 guests
