mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 20:28: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$ ");
|
||||
sb.append((o instanceof Card ? "Card.IsRemembered" : "Player.IsRemembered"));
|
||||
sb.append(" | PreventionEffect$ True | Description$ Prevent the next ").append(numDam).append(" damage.");
|
||||
String repeffstr = sb.toString();
|
||||
String effect = "DB$ ReplaceDamage | Amount$ ShieldAmount";
|
||||
|
||||
final Card eff = createEffect(sa, player, name, image);
|
||||
@@ -51,9 +50,13 @@ public abstract class DamagePreventEffectBase extends SpellAbilityEffect {
|
||||
}
|
||||
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);
|
||||
re.setOverridingAbility(replaceDamage);
|
||||
eff.addReplacementEffect(re);
|
||||
|
||||
@@ -50,6 +50,7 @@ public class ReplaceDamageEffect extends SpellAbilityEffect {
|
||||
game.getAction().exile(card, null);
|
||||
} else if (!StringUtils.isNumeric(varValue) && card.getSVar(varValue).startsWith("Number$")) {
|
||||
card.setSVar(varValue, "Number$" + prevent);
|
||||
card.updateAbilityTextForView();
|
||||
}
|
||||
// Set PreventedDamage SVar for PreventionSubAbility
|
||||
card.setSVar("PreventedDamage", "Number$" + n);
|
||||
|
||||
@@ -54,6 +54,7 @@ public class ReplaceSplitDamageEffect extends SpellAbilityEffect {
|
||||
game.getAction().exile(card, null);
|
||||
} else if (!StringUtils.isNumeric(varValue)) {
|
||||
sa.setSVar(varValue, "Number$" + prevent);
|
||||
card.updateAbilityTextForView();
|
||||
}
|
||||
|
||||
Card sourceLKI = (Card) sa.getReplacingObject(AbilityKey.Source);
|
||||
|
||||
@@ -21,11 +21,14 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.TriggerReplacementBase;
|
||||
import forge.game.ability.AbilityFactory;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.ApiType;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.phase.PhaseType;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
@@ -229,6 +232,30 @@ public abstract class ReplacementEffect extends TriggerReplacementBase {
|
||||
if (desc.contains("EFFECTSOURCE")) {
|
||||
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;
|
||||
} else {
|
||||
return "";
|
||||
|
||||
@@ -497,6 +497,7 @@ public class ReplacementHandler {
|
||||
&& re.getLayer() == ReplacementLayer.Other
|
||||
&& re.hasParam("Prevent") && re.getParam("Prevent").equals("True")
|
||||
&& re.hasParam("IsCombat") && re.getParam("IsCombat").equals("True")
|
||||
&& !re.hasParam("ValidSource") && !re.hasParam("ValidTarget")
|
||||
&& re.zonesCheck(game.getZoneOf(c))) {
|
||||
list.add(re);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user