mirror of
https://github.com/magefree/mage.git
synced 2026-01-24 12:19:59 -08:00
Issue #1311: Cards with 'another target creature or player'
AnotherTargetPredicate: Use MageItem instead of MageObject so it will now also work with Player objects. TargetCreatureOrPlayer: Add constructor specifying a filter object, modify methods to actually use the creature and player filters. Arc Trail and Cone of Flame: Use AnotherTargetPredicate to specify multiple different targets
This commit is contained in:
parent
fa5a098a14
commit
5155f9024e
4 changed files with 70 additions and 28 deletions
|
|
@ -34,9 +34,12 @@ import mage.cards.CardImpl;
|
|||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Rarity;
|
||||
import mage.filter.common.FilterCreatureOrPlayer;
|
||||
import mage.filter.predicate.mageobject.AnotherTargetPredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
import mage.target.Target;
|
||||
import mage.target.common.TargetCreatureOrPlayer;
|
||||
|
||||
/**
|
||||
|
|
@ -51,8 +54,28 @@ public class ConeOfFlame extends CardImpl {
|
|||
|
||||
|
||||
// Cone of Flame deals 1 damage to target creature or player, 2 damage to another target creature or player, and 3 damage to a third target creature or player.
|
||||
FilterCreatureOrPlayer filter1 = new FilterCreatureOrPlayer("creature or player to deal 1 damage");
|
||||
TargetCreatureOrPlayer target1 = new TargetCreatureOrPlayer(1, 1, filter1);
|
||||
target1.setTargetTag(1);
|
||||
this.getSpellAbility().addTarget(target1);
|
||||
|
||||
FilterCreatureOrPlayer filter2 = new FilterCreatureOrPlayer("another creature or player to deal 2 damage");
|
||||
AnotherTargetPredicate predicate2 = new AnotherTargetPredicate(2);
|
||||
filter2.getCreatureFilter().add(predicate2);
|
||||
filter2.getPlayerFilter().add(predicate2);
|
||||
TargetCreatureOrPlayer target2 = new TargetCreatureOrPlayer(1, 1, filter2);
|
||||
target2.setTargetTag(2);
|
||||
this.getSpellAbility().addTarget(target2);
|
||||
|
||||
FilterCreatureOrPlayer filter3 = new FilterCreatureOrPlayer("another creature or player to deal 3 damage");
|
||||
AnotherTargetPredicate predicate3 = new AnotherTargetPredicate(3);
|
||||
filter3.getCreatureFilter().add(predicate3);
|
||||
filter3.getPlayerFilter().add(predicate3);
|
||||
TargetCreatureOrPlayer target3 = new TargetCreatureOrPlayer(1, 1, filter3);
|
||||
target3.setTargetTag(3);
|
||||
this.getSpellAbility().addTarget(target3);
|
||||
|
||||
this.getSpellAbility().addEffect(new ConeOfFlameEffect());
|
||||
this.getSpellAbility().addTarget(new TargetCreatureOrPlayer(3));
|
||||
}
|
||||
|
||||
public ConeOfFlame(final ConeOfFlame card) {
|
||||
|
|
@ -85,12 +108,12 @@ class ConeOfFlameEffect extends OneShotEffect {
|
|||
public boolean apply(Game game, Ability source) {
|
||||
boolean applied = false;
|
||||
int damage = 1;
|
||||
for (UUID targetId : targetPointer.getTargets(game, source)) {
|
||||
Permanent permanent = game.getPermanent(targetId);
|
||||
for (Target target : source.getTargets()) {
|
||||
Permanent permanent = game.getPermanent(target.getFirstTarget());
|
||||
if (permanent != null) {
|
||||
applied |= (permanent.damage(damage, source.getSourceId(), game, false, true) > 0);
|
||||
}
|
||||
Player player = game.getPlayer(targetId);
|
||||
Player player = game.getPlayer(target.getFirstTarget());
|
||||
if (player != null) {
|
||||
applied |= (player.damage(damage, source.getSourceId(), game, false, true) > 0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,6 +37,8 @@ import mage.abilities.Ability;
|
|||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.filter.common.FilterCreatureOrPlayer;
|
||||
import mage.filter.predicate.mageobject.AnotherTargetPredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
|
|
@ -53,9 +55,20 @@ public class ArcTrail extends CardImpl {
|
|||
super(ownerId, 81, "Arc Trail", Rarity.UNCOMMON, new CardType[] { CardType.SORCERY }, "{1}{R}");
|
||||
this.expansionSetCode = "SOM";
|
||||
|
||||
|
||||
Target target = new TargetCreatureOrPlayer(2);
|
||||
this.getSpellAbility().addTarget(target);
|
||||
// Arc Trail deals 2 damage to target creature or player and 1 damage to another target creature or player
|
||||
FilterCreatureOrPlayer filter1 = new FilterCreatureOrPlayer("creature or player to deal 2 damage");
|
||||
TargetCreatureOrPlayer target1 = new TargetCreatureOrPlayer(1, 1, filter1);
|
||||
target1.setTargetTag(1);
|
||||
this.getSpellAbility().addTarget(target1);
|
||||
|
||||
FilterCreatureOrPlayer filter2 = new FilterCreatureOrPlayer("another creature or player to deal 1 damage");
|
||||
AnotherTargetPredicate predicate = new AnotherTargetPredicate(2);
|
||||
filter2.getCreatureFilter().add(predicate);
|
||||
filter2.getPlayerFilter().add(predicate);
|
||||
TargetCreatureOrPlayer target2 = new TargetCreatureOrPlayer(1, 1, filter2);
|
||||
target2.setTargetTag(2);
|
||||
this.getSpellAbility().addTarget(target2);
|
||||
|
||||
this.getSpellAbility().addEffect(ArcTrailEffect.getInstance());
|
||||
}
|
||||
|
||||
|
|
@ -94,8 +107,8 @@ class ArcTrailEffect extends OneShotEffect {
|
|||
boolean twoDamageDone = false;
|
||||
int damage = 2;
|
||||
|
||||
for ( UUID target : targetPointer.getTargets(game, source) ) {
|
||||
Permanent permanent = game.getPermanent(target);
|
||||
for ( Target target : source.getTargets() ) {
|
||||
Permanent permanent = game.getPermanent(target.getFirstTarget());
|
||||
|
||||
if ( twoDamageDone ) {
|
||||
damage = 1;
|
||||
|
|
@ -104,7 +117,7 @@ class ArcTrailEffect extends OneShotEffect {
|
|||
if (permanent != null) {
|
||||
applied |= (permanent.damage( damage, source.getSourceId(), game, false, true ) > 0);
|
||||
}
|
||||
Player player = game.getPlayer(target);
|
||||
Player player = game.getPlayer(target.getFirstTarget());
|
||||
if (player != null) {
|
||||
applied |= (player.damage( damage, source.getSourceId(), game, false, true ) > 0);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue