mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 12:48:00 +00:00
Merge branch 'show_remaining_shield' into 'master'
Show remaining shields amount for damage prevention and redirection effect See merge request core-developers/forge!4684
This commit is contained in:
@@ -28,7 +28,6 @@ public abstract class DamagePreventEffectBase extends SpellAbilityEffect {
|
|||||||
StringBuilder sb = new StringBuilder("Event$ DamageDone | ActiveZones$ Command | ValidTarget$ ");
|
StringBuilder sb = new StringBuilder("Event$ DamageDone | ActiveZones$ Command | ValidTarget$ ");
|
||||||
sb.append((o instanceof Card ? "Card.IsRemembered" : "Player.IsRemembered"));
|
sb.append((o instanceof Card ? "Card.IsRemembered" : "Player.IsRemembered"));
|
||||||
sb.append(" | PreventionEffect$ True | Description$ Prevent the next ").append(numDam).append(" damage.");
|
sb.append(" | PreventionEffect$ True | Description$ Prevent the next ").append(numDam).append(" damage.");
|
||||||
String repeffstr = sb.toString();
|
|
||||||
String effect = "DB$ ReplaceDamage | Amount$ ShieldAmount";
|
String effect = "DB$ ReplaceDamage | Amount$ ShieldAmount";
|
||||||
|
|
||||||
final Card eff = createEffect(sa, player, name, image);
|
final Card eff = createEffect(sa, player, name, image);
|
||||||
@@ -51,9 +50,13 @@ public abstract class DamagePreventEffectBase extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
subAbString = TextUtil.fastReplace(subAbString, "ShieldEffectTarget", effTgtString);
|
subAbString = TextUtil.fastReplace(subAbString, "ShieldEffectTarget", effTgtString);
|
||||||
}
|
}
|
||||||
replaceDamage.setSubAbility((AbilitySub) AbilityFactory.getAbility(subAbString, eff));
|
AbilitySub subSA = (AbilitySub) AbilityFactory.getAbility(subAbString, eff);
|
||||||
|
replaceDamage.setSubAbility(subSA);
|
||||||
|
// Add SpellDescription of PreventionSubAbility to effect description
|
||||||
|
sb.append(" ").append(subSA.getParam("SpellDescription"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String repeffstr = sb.toString();
|
||||||
ReplacementEffect re = ReplacementHandler.parseReplacement(repeffstr, eff, true);
|
ReplacementEffect re = ReplacementHandler.parseReplacement(repeffstr, eff, true);
|
||||||
re.setOverridingAbility(replaceDamage);
|
re.setOverridingAbility(replaceDamage);
|
||||||
eff.addReplacementEffect(re);
|
eff.addReplacementEffect(re);
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ public class ReplaceDamageEffect extends SpellAbilityEffect {
|
|||||||
game.getAction().exile(card, null);
|
game.getAction().exile(card, null);
|
||||||
} else if (!StringUtils.isNumeric(varValue) && card.getSVar(varValue).startsWith("Number$")) {
|
} else if (!StringUtils.isNumeric(varValue) && card.getSVar(varValue).startsWith("Number$")) {
|
||||||
card.setSVar(varValue, "Number$" + prevent);
|
card.setSVar(varValue, "Number$" + prevent);
|
||||||
|
card.updateAbilityTextForView();
|
||||||
}
|
}
|
||||||
// Set PreventedDamage SVar for PreventionSubAbility
|
// Set PreventedDamage SVar for PreventionSubAbility
|
||||||
card.setSVar("PreventedDamage", "Number$" + n);
|
card.setSVar("PreventedDamage", "Number$" + n);
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ public class ReplaceSplitDamageEffect extends SpellAbilityEffect {
|
|||||||
game.getAction().exile(card, null);
|
game.getAction().exile(card, null);
|
||||||
} else if (!StringUtils.isNumeric(varValue)) {
|
} else if (!StringUtils.isNumeric(varValue)) {
|
||||||
sa.setSVar(varValue, "Number$" + prevent);
|
sa.setSVar(varValue, "Number$" + prevent);
|
||||||
|
card.updateAbilityTextForView();
|
||||||
}
|
}
|
||||||
|
|
||||||
Card sourceLKI = (Card) sa.getReplacingObject(AbilityKey.Source);
|
Card sourceLKI = (Card) sa.getReplacingObject(AbilityKey.Source);
|
||||||
|
|||||||
@@ -21,11 +21,14 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
import forge.game.TriggerReplacementBase;
|
import forge.game.TriggerReplacementBase;
|
||||||
import forge.game.ability.AbilityFactory;
|
import forge.game.ability.AbilityFactory;
|
||||||
import forge.game.ability.AbilityKey;
|
import forge.game.ability.AbilityKey;
|
||||||
import forge.game.ability.AbilityUtils;
|
import forge.game.ability.AbilityUtils;
|
||||||
|
import forge.game.ability.ApiType;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.spellability.SpellAbility;
|
import forge.game.spellability.SpellAbility;
|
||||||
@@ -229,6 +232,30 @@ public abstract class ReplacementEffect extends TriggerReplacementBase {
|
|||||||
if (desc.contains("EFFECTSOURCE")) {
|
if (desc.contains("EFFECTSOURCE")) {
|
||||||
desc = TextUtil.fastReplace(desc, "EFFECTSOURCE", getHostCard().getEffectSource().toString());
|
desc = TextUtil.fastReplace(desc, "EFFECTSOURCE", getHostCard().getEffectSource().toString());
|
||||||
}
|
}
|
||||||
|
// Add remaining shield amount
|
||||||
|
if (mode == ReplacementType.DamageDone) {
|
||||||
|
SpellAbility repSA = getOverridingAbility();
|
||||||
|
if (repSA != null && repSA.getApi() == ApiType.ReplaceDamage && repSA.hasParam("Amount")) {
|
||||||
|
String varValue = repSA.getParam("Amount");
|
||||||
|
if (!StringUtils.isNumeric(varValue)) {
|
||||||
|
varValue = repSA.getSVar(varValue);
|
||||||
|
if (varValue.startsWith("Number$")) {
|
||||||
|
desc += " \nShields remain: " + varValue.substring(7);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (repSA != null && repSA.getApi() == ApiType.ReplaceSplitDamage) {
|
||||||
|
String varValue = repSA.getParamOrDefault("VarName", "1");
|
||||||
|
if (varValue.equals("1")) {
|
||||||
|
desc += " \nShields remain: 1";
|
||||||
|
} else if (!StringUtils.isNumeric(varValue)) {
|
||||||
|
varValue = repSA.getSVar(varValue);
|
||||||
|
if (varValue.startsWith("Number$")) {
|
||||||
|
desc += " \nShields remain: " + varValue.substring(7);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return desc;
|
return desc;
|
||||||
} else {
|
} else {
|
||||||
return "";
|
return "";
|
||||||
|
|||||||
@@ -497,6 +497,7 @@ public class ReplacementHandler {
|
|||||||
&& re.getLayer() == ReplacementLayer.Other
|
&& re.getLayer() == ReplacementLayer.Other
|
||||||
&& re.hasParam("Prevent") && re.getParam("Prevent").equals("True")
|
&& re.hasParam("Prevent") && re.getParam("Prevent").equals("True")
|
||||||
&& re.hasParam("IsCombat") && re.getParam("IsCombat").equals("True")
|
&& re.hasParam("IsCombat") && re.getParam("IsCombat").equals("True")
|
||||||
|
&& !re.hasParam("ValidSource") && !re.hasParam("ValidTarget")
|
||||||
&& re.zonesCheck(game.getZoneOf(c))) {
|
&& re.zonesCheck(game.getZoneOf(c))) {
|
||||||
list.add(re);
|
list.add(re);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user