CloneEffect: now with NewName and GainThisAbility

This commit is contained in:
Hanmac
2018-10-11 08:09:48 +02:00
committed by Agetian
parent 5589b4a70b
commit d76aa634c9
5 changed files with 50 additions and 9 deletions

View File

@@ -62,7 +62,7 @@ public abstract class CardTraitBase extends GameObject implements IHasCardView {
* Keys that should not changed
*/
private static final ImmutableList<String> noChangeKeys = ImmutableList.<String>builder()
.add("TokenScript", "LegacyImage", "TokenImage").build();
.add("TokenScript", "LegacyImage", "TokenImage", "NewName").build();
/**
* Sets the temporary.
*

View File

@@ -113,6 +113,7 @@ public class CloneEffect extends SpellAbilityEffect {
}
final boolean keepName = sa.hasParam("KeepName");
final String newName = sa.getParamOrDefault("NewName", null);
final String originalName = tgtCard.getName();
final boolean copyingSelf = (tgtCard == cardToCopy);
final boolean isTransformed = cardToCopy.getCurrentStateName() == CardStateName.Transformed || cardToCopy.getCurrentStateName() == CardStateName.Meld;
@@ -157,9 +158,13 @@ public class CloneEffect extends SpellAbilityEffect {
}
// restore name if it should be unchanged
// this should only be used for Sakashima the Impostor Avatar
if (keepName) {
tgtCard.setName(originalName);
}
if (newName != null) {
tgtCard.setName(newName);
}
// If target is a flip card, also set characteristics of the flipped
// state.
@@ -168,6 +173,9 @@ public class CloneEffect extends SpellAbilityEffect {
if (keepName) {
flippedState.setName(originalName);
}
if (newName != null) {
tgtCard.setName(newName);
}
//keep the Clone card image for the cloned card
flippedState.setImageKey(imageFileName);
}
@@ -350,6 +358,18 @@ public class CloneEffect extends SpellAbilityEffect {
tgtCard.setBasePower(4);
tgtCard.setBaseToughness(4);
}
if (sa.hasParam("GainThisAbility")) {
SpellAbility root = sa.getRootAbility();
if (root.isTrigger() && root.getTrigger() != null) {
tgtCard.addTrigger(root.getTrigger().copy(tgtCard, false));
} else if (root.isReplacementAbility()) {
tgtCard.addReplacementEffect(root.getReplacementEffect().copy(tgtCard, false));
} else {
tgtCard.addSpellAbility(root.copy(tgtCard, false));
}
}
}
}

View File

@@ -181,7 +181,7 @@ public class ReplacementHandler {
final String effectAbString = host.getSVar(effectSVar);
// TODO: the source of replacement effect should be the source of the original effect
effectSA = AbilityFactory.getAbility(effectAbString, host);
effectSA.setTrigger(true);
//effectSA.setTrigger(true);
SpellAbility tailend = effectSA;
do {
@@ -209,8 +209,9 @@ public class ReplacementHandler {
if (replacementEffect.isIntrinsic()) {
effectSA.setIntrinsic(true);
effectSA.changeText();
effectSA.setReplacementAbility(true);
}
effectSA.setReplacementAbility(true);
effectSA.setReplacementEffect(replacementEffect);
}
// Decider gets to choose whether or not to apply the replacement.

View File

@@ -38,7 +38,9 @@ import forge.game.cost.CostRemoveCounter;
import forge.game.keyword.Keyword;
import forge.game.mana.Mana;
import forge.game.player.Player;
import forge.game.replacement.ReplacementEffect;
import forge.game.staticability.StaticAbility;
import forge.game.trigger.Trigger;
import forge.game.trigger.TriggerType;
import forge.game.trigger.WrappedAbility;
import forge.util.Expressions;
@@ -87,8 +89,10 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
private boolean basicSpell = true;
private boolean trigger = false;
private Trigger triggerObj = null;
private boolean optionalTrigger = false;
private boolean replacementAbility = false;
private ReplacementEffect replacementEffect = null;
private int sourceTrigger = -1;
private List<Object> triggerRemembered = Lists.newArrayList();
@@ -913,6 +917,14 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
trigger = trigger0;
}
public Trigger getTrigger() {
return triggerObj;
}
public void setTrigger(final Trigger t) {
triggerObj = t;
}
public boolean isOptionalTrigger() {
return optionalTrigger;
}
@@ -934,6 +946,14 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
replacementAbility = replacement;
}
public ReplacementEffect getReplacementEffect() {
return replacementEffect;
}
public void setReplacementEffect(final ReplacementEffect re) {
this.replacementEffect = re;
}
public boolean isMandatory() {
return false;
}

View File

@@ -27,14 +27,13 @@ import com.google.common.collect.Lists;
public class WrappedAbility extends Ability {
private final SpellAbility sa;
private final Trigger regtrig;
private final Player decider;
boolean mandatory = false;
public WrappedAbility(final Trigger regtrig0, final SpellAbility sa0, final Player decider0) {
super(regtrig0.getHostCard(), ManaCost.ZERO, sa0.getView());
regtrig = regtrig0;
setTrigger(regtrig0);
sa = sa0;
decider = decider0;
sa.setDescription(this.getStackDescription());
@@ -49,10 +48,6 @@ public class WrappedAbility extends Ability {
return true;
}
public Trigger getTrigger() {
return regtrig;
}
public Player getDecider() {
return decider;
}
@@ -218,6 +213,7 @@ public class WrappedAbility extends Ability {
@Override
public String getStackDescription() {
final Trigger regtrig = getTrigger();
final StringBuilder sb = new StringBuilder(regtrig.replaceAbilityText(regtrig.toString(true), this));
if (usesTargeting()) {
sb.append(" (Targeting ");
@@ -445,6 +441,7 @@ public class WrappedAbility extends Ability {
@Override
public void resolve() {
final Game game = sa.getActivatingPlayer().getGame();
final Trigger regtrig = getTrigger();
Map<String, String> triggerParams = regtrig.getMapParams();
if (!(regtrig instanceof TriggerAlways) && !triggerParams.containsKey("NoResolvingCheck")) {
@@ -476,6 +473,9 @@ public class WrappedAbility extends Ability {
return;
}
// set Trigger
sa.setTrigger(regtrig);
if (!triggerParams.containsKey("NoTimestampCheck")) {
timestampCheck();
}