- BNG: Added Fanati of Xenagos and Flame-Wreathed Phoenix

This commit is contained in:
swordshine
2014-01-20 06:59:51 +00:00
parent 80372f40b5
commit 7fc97562b2

View File

@@ -15,9 +15,9 @@ import forge.ai.ComputerUtilMana;
import forge.ai.SpellAbilityAi; import forge.ai.SpellAbilityAi;
import forge.game.ability.AbilityUtils; import forge.game.ability.AbilityUtils;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.card.CardFactoryUtil;
import forge.game.card.CardLists; import forge.game.card.CardLists;
import forge.game.card.CounterType; import forge.game.card.CounterType;
import forge.game.combat.CombatUtil;
import forge.game.cost.Cost; import forge.game.cost.Cost;
import forge.game.phase.PhaseType; import forge.game.phase.PhaseType;
import forge.game.player.Player; import forge.game.player.Player;
@@ -26,7 +26,6 @@ import forge.game.spellability.SpellAbility;
import forge.game.spellability.TargetRestrictions; import forge.game.spellability.TargetRestrictions;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.util.Aggregates; import forge.util.Aggregates;
import forge.util.Expressions;
import forge.util.MyRandom; import forge.util.MyRandom;
public class CountersPutAi extends SpellAbilityAi { public class CountersPutAi extends SpellAbilityAi {
@@ -355,22 +354,43 @@ public class CountersPutAi extends SpellAbilityAi {
@Override @Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) { public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
final Card source = sa.getSourceCard(); final Card source = sa.getSourceCard();
if (mode == PlayerActionConfirmMode.Tribute && source.hasSVar("TributeAILogic")) { if (mode == PlayerActionConfirmMode.Tribute) {
final String logic = source.getSVar("TributeAILogic"); // add counter if that opponent has a giant creature
for (final String tributeAI : logic.split(" & ")) { final List<Card> creats = player.getCreaturesInPlay();
String sVar = tributeAI.split(" ")[0]; final int tributeAmount = source.getKeywordMagnitude("Tribute");
String comparator = tributeAI.split(" ")[1]; List<Card> threatening = CardLists.filter(creats, new Predicate<Card>() {
String compareTo = comparator.substring(2); @Override
int x = CardFactoryUtil.xCount(source, sVar); public boolean apply(Card c) {
int y = CardFactoryUtil.xCount(source, compareTo); return CombatUtil.canBlock(source, c, true)
if (!Expressions.compare(x, comparator, y)) { && (c.getNetDefense() > source.getNetAttack() + tributeAmount || c.hasKeyword("DeathTouch"));
}
});
if (!threatening.isEmpty()) {
return true;
}
if (source.hasSVar("TributeAILogic")) {
final String logic = source.getSVar("TributeAILogic");
if (logic.equals("Always")) {
return true;
} else if (logic.equals("Never")) {
return false; return false;
} else if (logic.equals("CanBlockThisTurn")) {
// pump haste
List<Card> canBlock = CardLists.filter(creats, new Predicate<Card>() {
@Override
public boolean apply(Card c) {
return CombatUtil.canBlock(source, c) && (c.getNetDefense() > source.getNetAttack() || c.hasKeyword("DeathTouch"));
}
});
if (!canBlock.isEmpty()) {
return false;
}
} }
} }
} }
return true; return MyRandom.getRandom().nextBoolean();
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see forge.card.ability.SpellAbilityAi#chooseSinglePlayer(Player, SpellAbility, Collection<Player>) * @see forge.card.ability.SpellAbilityAi#chooseSinglePlayer(Player, SpellAbility, Collection<Player>)
*/ */