diff --git a/res/cardsfolder/h/horde_of_notions.txt b/res/cardsfolder/h/horde_of_notions.txt
index e5683fe57a0..32bbcc009f3 100644
--- a/res/cardsfolder/h/horde_of_notions.txt
+++ b/res/cardsfolder/h/horde_of_notions.txt
@@ -6,6 +6,7 @@ PT:5/5
K:Vigilance
K:Trample
K:Haste
+A:AB$ Play | Cost$ W U B R G | TgtZone$ Graveyard | WithoutManaCost$ True | ValidTgts$ Elemental.YouCtrl | TgtPrompt$ Choose target Elemental card from your graveyard | SpellDescription$ You may play target Elemental card from your graveyard without paying its mana cost.
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/horde_of_notions.jpg
SetInfo:LRW|Rare|http://magiccards.info/scans/en/lw/249.jpg
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryPlay.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryPlay.java
index a0acbdfdb56..b168ab465aa 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryPlay.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryPlay.java
@@ -20,19 +20,26 @@ package forge.card.abilityfactory;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.Random;
import forge.AllZone;
+import forge.AllZoneUtil;
import forge.Card;
+import forge.CardList;
import forge.ComputerUtil;
import forge.Player;
+import forge.Constant.Zone;
+import forge.card.cardfactory.CardFactoryUtil;
import forge.card.cost.Cost;
import forge.card.cost.CostMana;
import forge.card.cost.CostPart;
+import forge.card.cost.CostUtil;
import forge.card.spellability.AbilityActivated;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
+import forge.util.MyRandom;
/**
*
* AbilityFactory_Copy class.
@@ -225,7 +232,57 @@ public final class AbilityFactoryPlay {
* @return a boolean.
*/
private static boolean PlayCanPlayAI(final AbilityFactory af, final SpellAbility sa) {
- return false;
+ final Cost abCost = af.getAbCost();
+ final Card source = af.getHostCard();
+ final HashMap params = af.getMapParams();
+ final Random r = MyRandom.getRandom();
+
+ if (abCost != null) {
+ // AI currently disabled for these costs
+ if (!CostUtil.checkSacrificeCost(abCost, source)) {
+ return false;
+ }
+
+ if (!CostUtil.checkLifeCost(abCost, source, 4)) {
+ return false;
+ }
+
+ if (!CostUtil.checkDiscardCost(abCost, source)) {
+ return false;
+ }
+
+ if (!CostUtil.checkRemoveCounterCost(abCost, source)) {
+ return false;
+ }
+ }
+
+ // don't use this as a response
+ if (AllZone.getStack().size() != 0) {
+ return false;
+ }
+
+ // prevent run-away activations - first time will always return true
+ boolean chance = r.nextFloat() <= Math.pow(.6667, sa.getRestrictions().getNumberTurnActivations());
+
+ CardList cards;
+ final Target tgt = sa.getTarget();
+ if (tgt != null) {
+ Zone zone = tgt.getZone().get(0);
+ cards = AllZoneUtil.getCardsIn(zone);
+ cards = cards.getValidCards(tgt.getValidTgts(), AllZone.getComputerPlayer(), source);
+ if (cards.isEmpty()) {
+ return false;
+ }
+ tgt.addTarget(CardFactoryUtil.getBestAI(cards));
+ } else {
+ cards = new CardList(AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa));
+ if (cards.isEmpty()) {
+ return false;
+ }
+ }
+
+
+ return chance;
}
/**
@@ -277,14 +334,19 @@ public final class AbilityFactoryPlay {
if (tgtCards.isEmpty()) {
return;
}
+
Card tgtCard = tgtCards.get(0);
+ if (tgtCard.isLand()) {
+ controller.playLand(tgtCard);
+ return;
+ }
ArrayList sas = tgtCard.getBasicSpells();
if (sas.isEmpty()) {
return;
}
SpellAbility tgtSA = sas.get(0);
-
+
if (params.containsKey("WithoutManaCost")) {
if (controller.isHuman()) {
final SpellAbility newSA = tgtSA.copy();
diff --git a/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java b/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java
index ab6c5a835f4..8e6c503779c 100644
--- a/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java
+++ b/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java
@@ -729,7 +729,7 @@ public class CardFactoryCreatures {
} // *************** END ************ END **************************
// *************** START *********** START **************************
- else if (cardName.equals("Horde of Notions")) {
+ /*else if (cardName.equals("Horde of Notions")) {
final Ability ability = new Ability(card, "W U B R G") {
@Override
public void resolve() {
@@ -782,7 +782,7 @@ public class CardFactoryCreatures {
sbStack.append("graveyard without paying its mana cost.");
ability.setStackDescription(sbStack.toString());
ability.setBeforePayMana(new InputPayManaCost(ability));
- } // *************** END ************ END **************************
+ }*/ // *************** END ************ END **************************
// *************** START *********** START **************************
else if (cardName.equals("Rhys the Redeemed")) {