Improved the AI for Rathi Assassin, Stalking Assassin and Ethersworn Adjudicator.

This commit is contained in:
jendave
2011-08-06 05:32:21 +00:00
parent 23aabf0301
commit e503ca915c

View File

@@ -6451,7 +6451,10 @@ public class CardFactory_Creatures {
@Override
public boolean canPlay() {
return AllZone.GameAction.isCardInPlay(card) && !card.isTapped() && !card.hasSickness() && super.canPlay();
return AllZone.GameAction.isCardInPlay(card)
&& !card.isTapped()
&& !card.hasSickness()
&& super.canPlay();
}
@Override
@@ -6461,7 +6464,10 @@ public class CardFactory_Creatures {
public boolean addCard(Card c) {
//slapshot5 - rule 202.2c tells me this needs to use getColors()
//return c.isTapped() && !CardUtil.getColor(c).equals(Constant.Color.Black);
return c.isTapped() && !CardUtil.getColors(c).contains(Constant.Color.Black);
return c.isTapped()
&& !CardUtil.getColors(c).contains(Constant.Color.Black)
&& CardFactoryUtil.canTarget(card, c)
&& !c.getKeyword().contains("Indestructible");
}
});
@@ -6477,7 +6483,9 @@ public class CardFactory_Creatures {
public void resolve() {
Card c = getTargetCard();
if(AllZone.GameAction.isCardInPlay(c) && c.isTapped() && CardFactoryUtil.canTarget(card, c)
if(AllZone.GameAction.isCardInPlay(c)
&& c.isTapped()
&& CardFactoryUtil.canTarget(card, c)
&& !CardUtil.getColors(c).contains(Constant.Color.Black)) {
//&& !CardUtil.getColor(c).equals(Constant.Color.Black)) {
AllZone.GameAction.destroy(c);
@@ -6496,7 +6504,10 @@ public class CardFactory_Creatures {
public boolean addCard(Card c) {
PlayerZone zone = AllZone.getZone(c);
return c.isCreature() && zone.is(Constant.Zone.Play) && c.isTapped()
return c.isCreature()
&& zone.is(Constant.Zone.Play)
&& CardFactoryUtil.canTarget(card, c)
&& c.isTapped()
&& !CardUtil.getColors(c).contains(Constant.Color.Black);
//&& !CardUtil.getColor(c).equals(Constant.Color.Black);
}
@@ -6917,9 +6928,11 @@ public class CardFactory_Creatures {
if (sa.getSourceCard().equals(card)) return false;
}
if(AllZone.GameAction.isCardInPlay(card) && !card.hasSickness() && !card.isTapped() && super.canPlay()) return true;
if (AllZone.GameAction.isCardInPlay(card)
&& !card.hasSickness()
&& !card.isTapped()
&& super.canPlay()) return true;
else return false;
}
@Override
@@ -6933,17 +6946,32 @@ public class CardFactory_Creatures {
@Override
public void chooseTargetAI() {
CardList creature = CardFactoryUtil.AI_getHumanCreature(card, true);
creature = creature.filter(new CardListFilter() {
public boolean addCard(Card c) {
return CardFactoryUtil.canTarget(card, c)
&& !c.getKeyword().contains("Indestructible");
}
});
if (creature.size() > 0) {
Card target = CardFactoryUtil.AI_getBestCreature(creature);
setTargetCard(target);
} else {
CardList enchantment = CardFactoryUtil.AI_getHumanEnchantment(card, true);
enchantment = enchantment.filter(new CardListFilter() {
public boolean addCard(Card c) {
return CardFactoryUtil.canTarget(card, c)
&& !c.getKeyword().contains("Indestructible");
}
});
if (enchantment.size() > 0) {
Card target = CardFactoryUtil.AI_getBestEnchantment(enchantment, card, true);
setTargetCard(target);
}
}
}
}//chooseTargetAI()
@Override
public void resolve() {
@@ -6953,11 +6981,10 @@ public class CardFactory_Creatures {
}
}//resolve()
};//SpellAbility
card.addSpellAbility(ability);
ability.setDescription("tap, 1 W B: Destroy target creature or enchantment.");
//ability.setBeforePayMana(CardFactoryUtil.input_targetCreature(ability));
Input runtime = new Input() {
private static final long serialVersionUID = -8099713981623158814L;
@@ -6968,18 +6995,19 @@ public class CardFactory_Creatures {
all.addAll(AllZone.Computer_Play.getCards());
all = all.filter(new CardListFilter() {
public boolean addCard(Card c) {
return (c.isEnchantment() || c.isCreature()) && CardFactoryUtil.canTarget(card, c);
return (c.isEnchantment() || c.isCreature())
&& CardFactoryUtil.canTarget(card, c);
}
});
stopSetNext(CardFactoryUtil.input_targetSpecific(ability, all,
"Choose target creature or enchantment.", true, false));
}
};
};//Input runtime
ability.setBeforePayMana(runtime);
}//*************** END ************ END **************************
//*************** START *********** START **************************
else if(cardName.equals("Wojek Embermage")) {
final Ability_Tap ability = new Ability_Tap(card) {
@@ -10193,7 +10221,9 @@ public class CardFactory_Creatures {
CardList human = CardFactoryUtil.AI_getHumanCreature(card, true);
human = human.filter(new CardListFilter() {
public boolean addCard(Card c) {
return c.isTapped() && CardFactoryUtil.canTarget(card, c);
return c.isTapped()
&& CardFactoryUtil.canTarget(card, c)
&& !c.getKeyword().contains("Indestructible");
}
});
@@ -10204,13 +10234,15 @@ public class CardFactory_Creatures {
}
return 0 < human.size();
}
}//canPlayAI()
@Override
public void resolve() {
Card c = getTargetCard();
if(AllZone.GameAction.isCardInPlay(c) && c.isTapped() && CardFactoryUtil.canTarget(card, c)) {
if (AllZone.GameAction.isCardInPlay(c)
&& c.isTapped()
&& CardFactoryUtil.canTarget(card, c)) {
AllZone.GameAction.destroy(c);
}
}//resolve()
@@ -10234,7 +10266,9 @@ public class CardFactory_Creatures {
public void selectCard(Card c, PlayerZone zone) {
if (!CardFactoryUtil.canTarget(card, c)) {
AllZone.Display.showMessage("Cannot target this card (Shroud? Protection?).");
} else if (c.isCreature() && zone.is(Constant.Zone.Play) && c.isTapped()) {
} else if (c.isCreature()
&& zone.is(Constant.Zone.Play)
&& c.isTapped()) {
//tap ability
card.tap();
@@ -10259,7 +10293,8 @@ public class CardFactory_Creatures {
CardList human = CardFactoryUtil.AI_getHumanCreature(card, true);
human = human.filter(new CardListFilter() {
public boolean addCard(Card c) {
return c.isUntapped() && CardFactoryUtil.canTarget(card, c);
return c.isUntapped()
&& CardFactoryUtil.canTarget(card, c);
}
});
@@ -10285,8 +10320,10 @@ public class CardFactory_Creatures {
Combat attackers = ComputerUtil.getAttackers();
CardList list = new CardList(attackers.getAttackers());
return (AllZone.Phase.getPhase().equals(Constant.Phase.Main1) && AllZone.Phase.getActivePlayer().equals(card.getController()) &&
human.size() > 0 && (assassins.size() > 0 || !list.contains(card)));
return (AllZone.Phase.getPhase().equals(Constant.Phase.Main1)
&& AllZone.Phase.getActivePlayer().equals(card.getController())
&& human.size() > 0
&& (assassins.size() > 0 || !list.contains(card)));
}//canPlayAI
};//SpellAbility
@@ -20212,7 +20249,7 @@ public class CardFactory_Creatures {
//*************** START *********** START ************************
if(cardName.equals("Lord of the Undead")) {
else if(cardName.equals("Lord of the Undead")) {
final Ability_Tap ability = new Ability_Tap(card, "1 B") {
private static final long serialVersionUID = -4287216165943846367L;