mirror of
https://github.com/correl/mage.git
synced 2025-04-05 17:00:10 -09:00
Fixed #8286.
This commit is contained in:
parent
b756fd0e72
commit
77845bd1df
3 changed files with 74 additions and 10 deletions
Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai
Mage.Sets/src/mage/cards/a
Mage/src/main/java/mage/target
|
@ -113,7 +113,7 @@ public class ComputerPlayer extends PlayerImpl implements Player {
|
|||
if (hand.size() < 6
|
||||
|| isTestsMode() // ignore mulligan in tests
|
||||
|| game.getClass().getName().contains("Momir") // ignore mulligan in Momir games
|
||||
) {
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
Set<Card> lands = hand.getCards(new FilterLandCard(), game);
|
||||
|
@ -540,6 +540,58 @@ public class ComputerPlayer extends PlayerImpl implements Player {
|
|||
return setTargetPlayer(outcome, target, source, sourceId, abilityControllerId, randomOpponentId, game, required);
|
||||
}
|
||||
|
||||
// Angel of Serenity trigger
|
||||
if (target.getOriginalTarget() instanceof TargetCardInGraveyardOrBattlefield) {
|
||||
Cards cards = new CardsImpl(possibleTargets);
|
||||
List<Card> possibleCards = new ArrayList<>(cards.getCards(game));
|
||||
for (Card card : possibleCards) {
|
||||
// check permanents first; they have more intrinsic worth
|
||||
if (card instanceof Permanent) {
|
||||
Permanent p = ((Permanent) card);
|
||||
if (outcome.isGood()
|
||||
&& p.isControlledBy(abilityControllerId)) {
|
||||
if (target.canTarget(abilityControllerId, p.getId(), source, game)) {
|
||||
if (target.getTargets().size() >= target.getMaxNumberOfTargets()) {
|
||||
break;
|
||||
}
|
||||
target.addTarget(p.getId(), source, game);
|
||||
}
|
||||
}
|
||||
if (!outcome.isGood()
|
||||
&& !p.isControlledBy(abilityControllerId)) {
|
||||
if (target.canTarget(abilityControllerId, p.getId(), source, game)) {
|
||||
if (target.getTargets().size() >= target.getMaxNumberOfTargets()) {
|
||||
break;
|
||||
}
|
||||
target.addTarget(p.getId(), source, game);
|
||||
}
|
||||
}
|
||||
}
|
||||
// check the graveyards last
|
||||
if (game.getState().getZone(card.getId()) == Zone.GRAVEYARD) {
|
||||
if (outcome.isGood()
|
||||
&& card.isOwnedBy(abilityControllerId)) {
|
||||
if (target.canTarget(abilityControllerId, card.getId(), source, game)) {
|
||||
if (target.getTargets().size() >= target.getMaxNumberOfTargets()) {
|
||||
break;
|
||||
}
|
||||
target.addTarget(card.getId(), source, game);
|
||||
}
|
||||
}
|
||||
if (!outcome.isGood()
|
||||
&& !card.isOwnedBy(abilityControllerId)) {
|
||||
if (target.canTarget(abilityControllerId, card.getId(), source, game)) {
|
||||
if (target.getTargets().size() >= target.getMaxNumberOfTargets()) {
|
||||
break;
|
||||
}
|
||||
target.addTarget(card.getId(), source, game);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return target.isChosen();
|
||||
}
|
||||
|
||||
if (target.getOriginalTarget() instanceof TargetDiscard
|
||||
|| target.getOriginalTarget() instanceof TargetCardInHand) {
|
||||
if (outcome.isGood()) {
|
||||
|
@ -2659,7 +2711,7 @@ public class ComputerPlayer extends PlayerImpl implements Player {
|
|||
}
|
||||
|
||||
protected void findBestPermanentTargets(Outcome outcome, UUID abilityControllerId, UUID sourceId, FilterPermanent filter, Game game, Target target,
|
||||
List<Permanent> goodList, List<Permanent> badList, List<Permanent> allList) {
|
||||
List<Permanent> goodList, List<Permanent> badList, List<Permanent> allList) {
|
||||
// searching for most valuable/powerfull permanents
|
||||
goodList.clear();
|
||||
badList.clear();
|
||||
|
|
|
@ -12,13 +12,12 @@ import mage.cards.CardSetInfo;
|
|||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.filter.predicate.mageobject.AnotherPredicate;
|
||||
import mage.target.common.TargetCardInGraveyardOrBattlefield;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.filter.common.FilterCreatureCard;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
|
||||
/**
|
||||
* @author LevelX2
|
||||
|
@ -27,10 +26,13 @@ public final class AngelOfSerenity extends CardImpl {
|
|||
|
||||
private static final String rule = "you may exile up to three other target creatures " +
|
||||
"from the battlefield and/or creature cards from graveyards.";
|
||||
private static final FilterPermanent filter = new FilterCreaturePermanent("other target creatures");
|
||||
|
||||
|
||||
private static final FilterCreatureCard filterCreatureCard = new FilterCreatureCard("creature card in a graveyard");
|
||||
|
||||
private static final FilterCreaturePermanent filterCreaturePermanent = new FilterCreaturePermanent("other target creature");
|
||||
|
||||
static {
|
||||
filter.add(AnotherPredicate.instance);
|
||||
filterCreaturePermanent.add(AnotherPredicate.instance);
|
||||
}
|
||||
|
||||
public AngelOfSerenity(UUID ownerId, CardSetInfo setInfo) {
|
||||
|
@ -48,7 +50,7 @@ public final class AngelOfSerenity extends CardImpl {
|
|||
new ExileTargetForSourceEffect().setText(rule), true
|
||||
);
|
||||
ability.addTarget(new TargetCardInGraveyardOrBattlefield(
|
||||
0, 3, StaticFilters.FILTER_CARD_CREATURE, filter
|
||||
0, 3, filterCreatureCard, filterCreaturePermanent
|
||||
));
|
||||
this.addAbility(ability);
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@ import mage.util.CardUtil;
|
|||
import mage.util.RandomUtil;
|
||||
|
||||
import java.util.*;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
||||
/**
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
|
@ -332,7 +333,16 @@ public abstract class TargetImpl implements Target {
|
|||
for (UUID targetId : targets.keySet()) {
|
||||
Card card = game.getCard(targetId);
|
||||
if (card != null) {
|
||||
if (zoneChangeCounters.containsKey(targetId) && zoneChangeCounters.get(targetId) != card.getZoneChangeCounter(game)) {
|
||||
// if a permanent, verify it is phased in, otherwise it is illegal
|
||||
Permanent p = game.getPermanent(targetId);
|
||||
if (p != null
|
||||
&& !p.isPhasedIn()) {
|
||||
illegalTargets.add(targetId);
|
||||
continue; // it's not legal so continue to have a look at other targeted objects
|
||||
}
|
||||
// check if the card moved to another zone
|
||||
if (zoneChangeCounters.containsKey(targetId)
|
||||
&& zoneChangeCounters.get(targetId) != card.getZoneChangeCounter(game)) {
|
||||
illegalTargets.add(targetId);
|
||||
continue; // it's not legal so continue to have a look at other targeted objects
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue