From 640ce4a6de834556a1a3ddcd0db28e9e1b656934 Mon Sep 17 00:00:00 2001 From: swordshine Date: Tue, 23 Jun 2015 12:33:40 +0000 Subject: [PATCH] =?UTF-8?q?-=20ORI=EF=BC=9AAdded=20Alhammaret,=20High=20Ar?= =?UTF-8?q?biter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/forge/ai/ability/ChooseCardNameAi.java | 8 ++++++++ .../game/ability/effects/ChooseCardNameEffect.java | 11 ++++++++++- .../res/cardsfolder/c/council_of_the_absolute.txt | 2 +- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ability/ChooseCardNameAi.java b/forge-ai/src/main/java/forge/ai/ability/ChooseCardNameAi.java index c310c356bd4..160db71bdeb 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChooseCardNameAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChooseCardNameAi.java @@ -1,6 +1,7 @@ package forge.ai.ability; import forge.ai.ComputerUtil; +import forge.ai.ComputerUtilCard; import forge.ai.ComputerUtilMana; import forge.ai.SpellAbilityAi; import forge.game.card.Card; @@ -59,5 +60,12 @@ public class ChooseCardNameAi extends SpellAbilityAi { // TODO - there is no AILogic implemented yet return false; } + /* (non-Javadoc) + * @see forge.card.ability.SpellAbilityAi#chooseSingleCard(forge.card.spellability.SpellAbility, java.util.List, boolean) + */ + @Override + public Card chooseSingleCard(final Player ai, SpellAbility sa, Iterable options, boolean isOptional, Player targetedPlayer) { + return ComputerUtilCard.getBestAI(options); + } } diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChooseCardNameEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChooseCardNameEffect.java index 1247e3777c4..e678d9da06a 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChooseCardNameEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChooseCardNameEffect.java @@ -4,18 +4,22 @@ import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; + import forge.StaticData; import forge.card.CardRules; import forge.card.CardRulesPredicates; import forge.game.ability.AbilityUtils; import forge.game.ability.SpellAbilityEffect; import forge.game.card.Card; +import forge.game.card.CardCollection; +import forge.game.card.CardLists; import forge.game.player.Player; import forge.game.spellability.SpellAbility; import forge.game.spellability.TargetRestrictions; import forge.item.PaperCard; import forge.util.Aggregates; import forge.util.ComparableOp; + import org.apache.commons.lang3.StringUtils; import java.util.List; @@ -49,6 +53,7 @@ public class ChooseCardNameEffect extends SpellAbilityEffect { } boolean randomChoice = sa.hasParam("AtRandom"); + boolean chooseFromDefined = sa.hasParam("ChooseFromDefinedCards"); for (final Player p : tgtPlayers) { if ((tgt == null) || p.canBeTargetedBy(sa)) { String chosen = ""; @@ -72,7 +77,11 @@ public class ChooseCardNameEffect extends SpellAbilityEffect { } else { chosen = ""; } - + } else if (chooseFromDefined) { + CardCollection choices = AbilityUtils.getDefinedCards(host, sa.getParam("ChooseFromDefinedCards"), sa); + choices = CardLists.getValidCards(choices, valid, host.getController(), host); + Card c = p.getController().chooseSingleEntityForEffect(choices, sa, "Choose a card name"); + chosen = c != null ? c.getName() : ""; } else { final String message = validDesc.equals("card") ? "Name a card" : "Name a " + validDesc + " card."; diff --git a/forge-gui/res/cardsfolder/c/council_of_the_absolute.txt b/forge-gui/res/cardsfolder/c/council_of_the_absolute.txt index 1d9821a0e38..69e99404bce 100644 --- a/forge-gui/res/cardsfolder/c/council_of_the_absolute.txt +++ b/forge-gui/res/cardsfolder/c/council_of_the_absolute.txt @@ -4,7 +4,7 @@ Types:Creature Human Advisor PT:2/4 K:ETBReplacement:Other:DBNameCard SVar:DBNameCard:DB$ NameCard | Defined$ You | ValidCards$ Card.nonLand+nonCreature | ValidDesc$ card other than a creature or a land card. | SpellDescription$ As CARDNAME enters the battlefield, name a card other than a creature or a land card. -S:Mode$ CantBeCast | ValidCard$ Card.NamedCard | Caster$ Player.Opponent | Description$ Your opponents can't cast the chosen card. +S:Mode$ CantBeCast | ValidCard$ Card.NamedCard | Caster$ Player.Opponent | Description$ Your opponents can't cast cards with the chosen name. S:Mode$ ReduceCost | ValidCard$ Card.NamedCard | Type$ Spell | Activator$ You | Amount$ 2 | Description$ Spells with the chosen name cost 2 less for you to cast. SVar:RemRandomDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/council_of_the_absolute.jpg