Fix RememberCostMana

This commit is contained in:
tool4EvEr
2021-12-11 15:24:54 +01:00
parent bd30cc3559
commit 4be2d9eaac
5 changed files with 39 additions and 11 deletions

View File

@@ -1627,7 +1627,25 @@ public class AbilityUtils {
if (sa.hasParam("RememberCostMana")) { if (sa.hasParam("RememberCostMana")) {
host.clearRemembered(); host.clearRemembered();
host.addRemembered(sa.getPayingMana()); ManaCostBeingPaid activationMana = new ManaCostBeingPaid(sa.getPayCosts().getTotalMana());
if (sa.getXManaCostPaid() != null) {
activationMana.setXManaCostPaid(sa.getXManaCostPaid(), null);
}
int activationShards = activationMana.getConvertedManaCost();
List<Mana> payingMana = sa.getPayingMana();
// even if the cost was raised, we only care about mana from activation part
// let's just assume the first shards spent are that for easy handling
List<Mana> activationPaid = payingMana.subList(payingMana.size() - activationShards, payingMana.size());
StringBuilder sb = new StringBuilder();
int nMana = 0;
for (Mana m : activationPaid) {
if (nMana > 0) {
sb.append(" ");
}
sb.append(m.toString());
nMana++;
}
host.addRemembered(sb.toString());
} }
if (sa.hasParam("RememberCostCards") && !sa.getPaidHash().isEmpty()) { if (sa.hasParam("RememberCostCards") && !sa.getPaidHash().isEmpty()) {

View File

@@ -18,7 +18,6 @@ import forge.game.ability.SpellAbilityEffect;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.card.CardCollection; import forge.game.card.CardCollection;
import forge.game.card.CardLists; import forge.game.card.CardLists;
import forge.game.mana.Mana;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.spellability.AbilityManaPart; import forge.game.spellability.AbilityManaPart;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -170,10 +169,7 @@ public class ManaEffect extends SpellAbilityEffect {
final StringBuilder sb = new StringBuilder(); final StringBuilder sb = new StringBuilder();
int nMana = 0; int nMana = 0;
for (Object o : card.getRemembered()) { for (Object o : card.getRemembered()) {
if (o instanceof Mana) { if (o instanceof String) {
if (nMana > 0) {
sb.append(" ");
}
sb.append(o.toString()); sb.append(o.toString());
nMana++; nMana++;
} }

View File

@@ -22,6 +22,7 @@ import forge.game.player.Player;
import forge.game.spellability.OptionalCost; import forge.game.spellability.OptionalCost;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.game.spellability.SpellAbilityPredicates; import forge.game.spellability.SpellAbilityPredicates;
import forge.game.spellability.SpellAbilityStackInstance;
import forge.game.trigger.Trigger; import forge.game.trigger.Trigger;
import forge.game.zone.Zone; import forge.game.zone.Zone;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
@@ -714,11 +715,14 @@ public class CardProperty {
} }
break; break;
case "ActivationColor": case "ActivationColor":
SpellAbility castSA = source.getCastSA(); SpellAbilityStackInstance castSA = game.getStack().getInstanceFromSpellAbility((SpellAbility) spellAbility);
if (castSA == null) { if (castSA == null) {
return false; return false;
} }
if (!card.getColor().hasAnyColor(castSA.getPayingColors().getColor())) { List<Mana> payingMana = castSA.getPayingMana();
// even if the cost was raised, we only care about mana from activation part
// since this can only be 1 currently with Protective Sphere, let's just assume it's the first shard spent for easy handling
if (!card.getColor().hasAnyColor(payingMana.get(payingMana.size() - 1).getColor())) {
return false; return false;
} }
break; break;

View File

@@ -594,6 +594,9 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
public List<Mana> getPayingMana() { public List<Mana> getPayingMana() {
return payingMana; return payingMana;
} }
public void setPayingMana(List<Mana> paying) {
payingMana = Lists.newArrayList(paying);
}
public final void clearManaPaid() { public final void clearManaPaid() {
payingMana.clear(); payingMana.clear();
} }

View File

@@ -24,6 +24,7 @@ import java.util.Set;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
@@ -35,6 +36,7 @@ import forge.game.card.Card;
import forge.game.card.CardCollection; import forge.game.card.CardCollection;
import forge.game.card.CardView; import forge.game.card.CardView;
import forge.game.card.IHasCardView; import forge.game.card.IHasCardView;
import forge.game.mana.Mana;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.trigger.TriggerType; import forge.game.trigger.TriggerType;
import forge.game.trigger.WrappedAbility; import forge.game.trigger.WrappedAbility;
@@ -78,9 +80,8 @@ public class SpellAbilityStackInstance implements IIdentifiable, IHasCardView {
// private String adjustedManaCost = ""; // private String adjustedManaCost = "";
// Paid Mana Cost // Paid Mana Cost
// private ArrayList<Mana> payingMana = new ArrayList<Mana>(); private List<Mana> payingMana;
// private ArrayList<AbilityMana> paidAbilities = new // private ArrayList<AbilityMana> paidAbilities = new ArrayList<AbilityMana>();
// ArrayList<AbilityMana>();
private Integer xManaPaid = null; private Integer xManaPaid = null;
// Other Paid things // Other Paid things
@@ -112,6 +113,7 @@ public class SpellAbilityStackInstance implements IIdentifiable, IHasCardView {
splicedCards = sa.getSplicedCards(); splicedCards = sa.getSplicedCards();
xManaPaid = sa.getXManaCostPaid(); xManaPaid = sa.getXManaCostPaid();
payingMana = Lists.newArrayList(sa.getPayingMana());
// Triggering info // Triggering info
triggeringObjects = sa.getTriggeringObjects(); triggeringObjects = sa.getTriggeringObjects();
@@ -181,6 +183,7 @@ public class SpellAbilityStackInstance implements IIdentifiable, IHasCardView {
ability.setPaidHash(paidHash); ability.setPaidHash(paidHash);
ability.setSplicedCards(splicedCards); ability.setSplicedCards(splicedCards);
ability.setXManaCostPaid(xManaPaid); ability.setXManaCostPaid(xManaPaid);
ability.setPayingMana(payingMana);
// Triggered // Triggered
ability.setTriggeringObjects(triggeringObjects); ability.setTriggeringObjects(triggeringObjects);
@@ -345,6 +348,10 @@ public class SpellAbilityStackInstance implements IIdentifiable, IHasCardView {
view.updateActivatingPlayer(this); view.updateActivatingPlayer(this);
} }
public List<Mana> getPayingMana() {
return payingMana;
}
@Override @Override
public String toString() { public String toString() {
return TextUtil.concatNoSpace(getSourceCard().toString(), "->", getStackDescription()); return TextUtil.concatNoSpace(getSourceCard().toString(), "->", getStackDescription());