@Override public String getRule() { return "Whenever a creature you control becomes monstrous, " + super.getRule(); } }
public TriggeredAbilityImpl(Zone zone, Effect effect, boolean optional) { super(AbilityType.TRIGGERED, zone); setLeavesTheBattlefieldTrigger(false); if (effect != null) { addEffect(effect); } this.optional = optional; }
@Override public boolean resolve(Game game) { if (isOptional()) { MageObject object = game.getObject(getSourceId()); Player player = game.getPlayer(this.getControllerId()); if (player != null && object != null) { if (!player.chooseUse(getEffects().isEmpty() ? Outcome.Detriment : getEffects().get(0).getOutcome(), this.getRule(object.getLogName()), this, game)) { return false; } } else { return false; } } //20091005 - 603.4 if (checkInterveningIfClause(game)) { return super.resolve(game); } return false; }
@Override public String getGameLogMessage(Game game) { MageObject object = game.getObject(sourceId); StringBuilder sb = new StringBuilder(); if (object != null) { sb.append("Ability triggers: ").append(object.getLogName()).append(" - ").append(this.getRule(object.getLogName())); } else { sb.append("Ability triggers: ").append(this.getRule()); } String targetText = getTargetDescriptionForLog(getTargets(), game); if (!targetText.isEmpty()) { sb.append(" - ").append(targetText); } return sb.toString(); }
if (event != null && event.getTargetId() != null && event.getTargetId().equals(getSourceId())) { switch (event.getType()) { case ZONE_CHANGE: case DESTROYED_PERMANENT: if (isLeavesTheBattlefieldTrigger()) { if (event.getType() == EventType.DESTROYED_PERMANENT) { source = game.getLastKnownInformation(getSourceId(), Zone.BATTLEFIELD); } else if (((ZoneChangeEvent) event).getTarget() != null) { source = ((ZoneChangeEvent) event).getTarget(); } else { source = game.getLastKnownInformation(getSourceId(), ((ZoneChangeEvent) event).getZone()); if (this.zone == Zone.ALL || game.getLastKnownInformation(getSourceId(), zone) != null) { return this.hasSourceObjectAbility(game, source, event);
@Override public boolean checkTrigger(GameEvent event, Game game) { Permanent quest = game.getPermanent(super.getSourceId()); return quest != null && quest.getCounters(game).getCount(CounterType.QUEST) >= 3; }
@Override public boolean resolve(Game game) { boolean value = super.resolve(game); if (value == true) { game.getState().setValue(this.originalId.toString() + "addMana", Boolean.TRUE); } return value; }
@Override public void trigger(Game game, UUID controllerId) { //20091005 - 603.4 if (checkInterveningIfClause(game)) { game.addTriggeredAbility(this); } }
if (!superRule.isEmpty()) { String ruleLow = superRule.toLowerCase(Locale.ENGLISH); if (isOptional()) { if (ruleLow.startsWith("you ")) { if (!ruleLow.startsWith("you may")) { superRule = newRule.toString(); } else if (this.getTargets().isEmpty() || ruleLow.startsWith("exile") || ruleLow.startsWith("destroy")
@Override public boolean checkTrigger(GameEvent event, Game game) { if (event.getZone() == Zone.LIBRARY) { Spell spell = game.getStack().getSpell(event.getTargetId()); if (spell != null && spell.isOwnedBy(super.getControllerId()) && (spell.isInstant() || spell.isSorcery())) { for (Effect effect : this.getEffects()) { effect.setTargetPointer(new FixedTarget(event.getTargetId())); } return true; } } return false; }
@Override public void addWatcher(Watcher watcher) { super.addWatcher(watcher); for (TriggeredAbility ability : triggeredAbilities) { ability.addWatcher(watcher); } }
@Override public boolean checkTrigger(GameEvent event, Game game) { Permanent archmage = game.getPermanent(super.getSourceId()); CardsAmountDrawnThisTurnWatcher watcher = game.getState().getWatcher(CardsAmountDrawnThisTurnWatcher.class); return archmage != null && watcher != null && watcher.getAmountCardsDrawn(this.getControllerId()) >= 2; }
@Override public boolean resolve(Game game) { //20100716 - 603.8 boolean result = super.resolve(game); game.getState().setValue(this.getSourceId().toString() + "triggered", Boolean.FALSE); return result; }
@Override public boolean checkInterveningIfClause(Game game) { Player controller = game.getPlayer(getControllerId()); if (controller != null && controller.getGraveyard().contains(getSourceId())) { return super.checkInterveningIfClause(game); } return false; }
@Override public String getRule() { return "Whenever {this} deals combat damage to one or more blockers, " + super.getRule(); } }
@Override public boolean checkTrigger(GameEvent event, Game game) { Permanent quest = game.getPermanent(super.getSourceId()); if (quest == null) { Permanent questLKI = (Permanent) game.getLastKnownInformation(super.getSourceId(), Zone.BATTLEFIELD); quest = questLKI; } if (game.getOpponents(controllerId).contains(event.getPlayerId())) { Player opponent = game.getPlayer(event.getPlayerId()); if (opponent != null && opponent.getHand().isEmpty() && quest.getCounters(game).getCount(CounterType.QUEST) >= 2) { for (Effect effect : this.getEffects()) { effect.setTargetPointer(new FixedTarget(opponent.getId())); return true; } } } return false; }
@Override public boolean resolve(Game game) { if (!super.resolve(game)) { Card card = game.getCard(getSourceId()); if (card != null) { Player owner = game.getPlayer(card.getOwnerId()); if (owner != null) { // if cast was not successfull, the card is moved to graveyard owner.moveCards(card, Zone.GRAVEYARD, this, game); } } return false; } return true; }
@Override public String getRule() { return "When a player other than {this}'s owner controls it, " + super.getRule(); } }
@Override public boolean checkTrigger(GameEvent event, Game game) { MageObject lastKnown = game.getLastKnownInformation(event.getTargetId(), Zone.BATTLEFIELD); if (lastKnown == null) { return false; } ZoneChangeEvent zEvent = (ZoneChangeEvent) event; Permanent permanent = zEvent.getTarget(); if (permanent == null) { return false; } if (super.getSourceId().equals(event.getTargetId()) || permanent.getPower().getValue() > 4 && permanent.isControlledBy(controllerId)) { Zone after = game.getState().getZone(event.getTargetId()); return after != null && Zone.GRAVEYARD.match(after); } return false; }
@Override public String getRule() { return "Whenever equipped creature is dealt damage, " + super.getRule(); } }