Added filter to AttacksCreatureYourControlTrigger ability, dynamic value DiscardCostCardConvertedMana added, some small fixes ti rule text generation.

This commit is contained in:
LevelX2 2012-10-14 23:49:12 +02:00
parent cf88bb5ac3
commit 333c5017c3
4 changed files with 72 additions and 7 deletions

View file

@ -31,6 +31,7 @@ package mage.abilities.common;
import mage.Constants.Zone; import mage.Constants.Zone;
import mage.abilities.TriggeredAbilityImpl; import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.effects.Effect; import mage.abilities.effects.Effect;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
@ -41,23 +42,31 @@ import mage.game.permanent.Permanent;
*/ */
public class AttacksCreatureYourControlTriggeredAbility extends TriggeredAbilityImpl<AttacksCreatureYourControlTriggeredAbility> { public class AttacksCreatureYourControlTriggeredAbility extends TriggeredAbilityImpl<AttacksCreatureYourControlTriggeredAbility> {
protected FilterControlledCreaturePermanent filter;
public AttacksCreatureYourControlTriggeredAbility(Effect effect) { public AttacksCreatureYourControlTriggeredAbility(Effect effect) {
this(effect, false); this(effect, false);
} }
public AttacksCreatureYourControlTriggeredAbility(Effect effect, boolean optional) { public AttacksCreatureYourControlTriggeredAbility(Effect effect, boolean optional) {
this(effect, optional, new FilterControlledCreaturePermanent());
}
public AttacksCreatureYourControlTriggeredAbility(Effect effect, boolean optional, FilterControlledCreaturePermanent filter) {
super(Zone.BATTLEFIELD, effect, optional); super(Zone.BATTLEFIELD, effect, optional);
this.filter = filter;
} }
public AttacksCreatureYourControlTriggeredAbility(AttacksCreatureYourControlTriggeredAbility ability) { public AttacksCreatureYourControlTriggeredAbility(AttacksCreatureYourControlTriggeredAbility ability) {
super(ability); super(ability);
this.filter = ability.filter;
} }
@Override @Override
public boolean checkTrigger(GameEvent event, Game game) { public boolean checkTrigger(GameEvent event, Game game) {
if (event.getType() == GameEvent.EventType.ATTACKER_DECLARED) { if (event.getType() == GameEvent.EventType.ATTACKER_DECLARED) {
Permanent source = game.getPermanent(event.getSourceId()); Permanent sourcePermanent = game.getPermanent(event.getSourceId());
if (source != null && source.getControllerId().equals(controllerId)) { if (sourcePermanent != null && filter.match(sourcePermanent, sourceId, controllerId, game)) {
return true; return true;
} }
} }
@ -71,7 +80,7 @@ public class AttacksCreatureYourControlTriggeredAbility extends TriggeredAbility
@Override @Override
public String getRule() { public String getRule() {
return "Whenever a creature you control attacks, " + super.getRule(); return "Whenever a " + filter.getMessage() + " attacks, " + super.getRule();
} }
} }

View file

@ -0,0 +1,45 @@
package mage.abilities.dynamicvalue.common;
import mage.abilities.Ability;
import mage.abilities.costs.Cost;
import mage.abilities.costs.common.DiscardCardCost;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.cards.Card;
import mage.game.Game;
/**
* @author LevelX2
*/
public class DiscardCostCardConvertedMana implements DynamicValue {
@Override
public int calculate(Game game, Ability sourceAbility) {
for (Cost cost: sourceAbility.getCosts()) {
if (cost instanceof DiscardCardCost) {
DiscardCardCost discardCost = (DiscardCardCost) cost;
int cmc = 0;
for (Card card :discardCost.getCards()) {
cmc += card.getManaCost().convertedManaCost();
}
return cmc;
}
}
return 0;
}
@Override
public DynamicValue clone() {
return new DiscardCostCardConvertedMana();
}
@Override
public String toString() {
return "";
}
@Override
public String getMessage() {
return "the discarded card's converted mana cost";
}
}

View file

@ -11,6 +11,7 @@ import mage.game.permanent.Permanent;
* @author LevelX2 * @author LevelX2
*/ */
public class SacrificeCostCreaturesToughness implements DynamicValue { public class SacrificeCostCreaturesToughness implements DynamicValue {
@Override @Override
public int calculate(Game game, Ability sourceAbility) { public int calculate(Game game, Ability sourceAbility) {
for (Cost cost: sourceAbility.getCosts()) { for (Cost cost: sourceAbility.getCosts()) {
@ -33,7 +34,7 @@ public class SacrificeCostCreaturesToughness implements DynamicValue {
@Override @Override
public String toString() { public String toString() {
return "X"; return "";
} }

View file

@ -124,12 +124,22 @@ public class DamageTargetEffect extends OneShotEffect<DamageTargetEffect> {
sb.append(amount); sb.append(amount);
} }
sb.append(" damage to "); sb.append(" damage to ");
if (targetDescription.length() > 0) if (targetDescription.length() > 0) {
sb.append(targetDescription); sb.append(targetDescription);
else }
else {
sb.append("target ").append(mode.getTargets().get(0).getTargetName()); sb.append("target ").append(mode.getTargets().get(0).getTargetName());
}
if (message.length() > 0) { if (message.length() > 0) {
sb.append(message.equals("1") ? " equal to the number of " : " for each "); if (message.equals("1")) {
sb.append(" equal to the number of ");
} else {
if (message.startsWith("the")) {
sb.append(" equal to ");
} else {
sb.append(" for each ");
}
}
sb.append(message); sb.append(message);
} }
if (!preventable) { if (!preventable) {