* Kabira Evangel - Fixed that if the triggered ability triggered multiple times during one turn, it did not work correctly for different colors.

This commit is contained in:
LevelX2 2016-01-28 23:48:55 +01:00
parent 9c3eb5d392
commit 35845448e1
3 changed files with 18 additions and 18 deletions

View file

@ -49,10 +49,10 @@ import mage.filter.predicate.mageobject.SubtypePredicate;
*/ */
public class KabiraEvangel extends CardImpl { public class KabiraEvangel extends CardImpl {
private static final FilterControlledCreaturePermanent filter1 = new FilterControlledCreaturePermanent(); private static final FilterControlledCreaturePermanent FILTER1 = new FilterControlledCreaturePermanent();
static { static {
filter1.add(new SubtypePredicate("Ally")); FILTER1.add(new SubtypePredicate("Ally"));
} }
public KabiraEvangel(UUID ownerId) { public KabiraEvangel(UUID ownerId) {
@ -69,7 +69,7 @@ public class KabiraEvangel extends CardImpl {
filter2.add(Predicates.or(new CardIdPredicate(this.getId()), new SubtypePredicate("Ally"))); filter2.add(Predicates.or(new CardIdPredicate(this.getId()), new SubtypePredicate("Ally")));
// Whenever Kabira Evangel or another Ally enters the battlefield under your control, you may choose a color. If you do, Allies you control gain protection from the chosen color until end of turn. // Whenever Kabira Evangel or another Ally enters the battlefield under your control, you may choose a color. If you do, Allies you control gain protection from the chosen color until end of turn.
Effect effect = new GainProtectionFromColorAllEffect(Duration.EndOfTurn, filter1); Effect effect = new GainProtectionFromColorAllEffect(Duration.EndOfTurn, FILTER1);
effect.setText("choose a color. If you do, Allies you control gain protection from the chosen color until end of turn."); effect.setText("choose a color. If you do, Allies you control gain protection from the chosen color until end of turn.");
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, effect, filter2, true)); this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, effect, filter2, true));
} }

View file

@ -75,7 +75,8 @@ public class GainAbilityAllEffect extends ContinuousEffectImpl {
public GainAbilityAllEffect(Ability ability, Duration duration, FilterPermanent filter, boolean excludeSource, Layer layer, SubLayer subLayer) { public GainAbilityAllEffect(Ability ability, Duration duration, FilterPermanent filter, boolean excludeSource, Layer layer, SubLayer subLayer) {
super(duration, layer, subLayer, Outcome.AddAbility); super(duration, layer, subLayer, Outcome.AddAbility);
this.ability = ability; this.ability = ability.copy();
this.ability.newId();
this.filter = filter; this.filter = filter;
this.excludeSource = excludeSource; this.excludeSource = excludeSource;
} }
@ -160,12 +161,10 @@ public class GainAbilityAllEffect extends ContinuousEffectImpl {
} else { } else {
sb.append(" have "); sb.append(" have ");
} }
} else if (filter.getMessage().toLowerCase().startsWith("each")) {
sb.append(" gains ");
} else { } else {
if (filter.getMessage().toLowerCase().startsWith("each")) { sb.append(" gain ");
sb.append(" gains ");
} else {
sb.append(" gain ");
}
} }
if (quotes) { if (quotes) {
sb.append("\""); sb.append("\"");

View file

@ -55,7 +55,7 @@ public class GainProtectionFromColorAllEffect extends GainAbilityAllEffect {
public GainProtectionFromColorAllEffect(final GainProtectionFromColorAllEffect effect) { public GainProtectionFromColorAllEffect(final GainProtectionFromColorAllEffect effect) {
super(effect); super(effect);
choice = effect.choice; this.choice = effect.choice.copy();
} }
@Override @Override
@ -65,10 +65,10 @@ public class GainProtectionFromColorAllEffect extends GainAbilityAllEffect {
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
FilterCard protectionFilter = (FilterCard)((ProtectionAbility)ability).getFilter(); FilterCard protectionFilter = (FilterCard) ((ProtectionAbility) ability).getFilter();
protectionFilter.add(new ColorPredicate(choice.getColor())); protectionFilter.add(new ColorPredicate(choice.getColor()));
protectionFilter.setMessage(choice.getChoice()); protectionFilter.setMessage(choice.getChoice());
((ProtectionAbility)ability).setFilter(protectionFilter); ((ProtectionAbility) ability).setFilter(protectionFilter);
return super.apply(game, source); return super.apply(game, source);
} }
@ -77,22 +77,23 @@ public class GainProtectionFromColorAllEffect extends GainAbilityAllEffect {
super.init(source, game); super.init(source, game);
MageObject sourceObject = game.getObject(source.getSourceId()); MageObject sourceObject = game.getObject(source.getSourceId());
Player controller = game.getPlayer(source.getControllerId()); Player controller = game.getPlayer(source.getControllerId());
if(sourceObject != null && controller != null) { if (sourceObject != null && controller != null) {
choice.clearChoice(); choice.clearChoice();
while(!choice.isChosen()) { while (!choice.isChosen()) {
controller.choose(Outcome.Protect, choice, game); controller.choose(Outcome.Protect, choice, game);
if(!controller.canRespond()) { if (!controller.canRespond()) {
return; return;
} }
} }
if(choice.isChosen() && !game.isSimulation()) { if (choice.isChosen() && !game.isSimulation()) {
game.informPlayers(sourceObject.getLogName() + ": " + controller.getLogName() + " has chosen protection from " + choice.getChoice()); } game.informPlayers(sourceObject.getLogName() + ": " + controller.getLogName() + " has chosen protection from " + choice.getChoice());
}
} }
} }
@Override @Override
public String getText(Mode mode) { public String getText(Mode mode) {
if(staticText != null && !staticText.isEmpty()) { if (staticText != null && !staticText.isEmpty()) {
return staticText; return staticText;
} }