mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-14 17:58:01 +00:00
Fix Fatal Lore (#4488)
Co-authored-by: tool4EvEr <tool4EvEr@192.168.0.59>
This commit is contained in:
@@ -916,6 +916,7 @@ public final class GameActionUtil {
|
||||
if (ability.getApi() == ApiType.Charm) {
|
||||
// reset chain
|
||||
ability.setSubAbility(null);
|
||||
ability.setChosenList(null);
|
||||
}
|
||||
|
||||
ability.clearTargets();
|
||||
|
||||
@@ -1050,7 +1050,7 @@ public class AbilityUtils {
|
||||
addPlayer(card.getRemembered(), defined, players);
|
||||
}
|
||||
else if (defined.startsWith("Imprinted")) {
|
||||
addPlayer(Lists.newArrayList(card.getImprintedCards()), defined, players);
|
||||
addPlayer(card.getImprintedCards(), defined, players);
|
||||
}
|
||||
else if (defined.startsWith("EffectSource")) {
|
||||
Card root = findEffectRoot(card);
|
||||
@@ -1093,9 +1093,9 @@ public class AbilityUtils {
|
||||
o = ((SpellAbility) c).getActivatingPlayer();
|
||||
} else if (c instanceof Iterable<?>) { // For merged permanent
|
||||
if (orCont) {
|
||||
addPlayer(ImmutableList.copyOf(Iterables.filter((Iterable<Object>)c, Player.class)), "", players);
|
||||
addPlayer(Iterables.filter((Iterable<Object>)c, Player.class), "", players);
|
||||
}
|
||||
addPlayer(ImmutableList.copyOf(Iterables.filter((Iterable<Object>)c, Card.class)), "Controller", players);
|
||||
addPlayer(Iterables.filter((Iterable<Object>)c, Card.class), "Controller", players);
|
||||
}
|
||||
}
|
||||
else if (defParsed.endsWith("Opponent")) {
|
||||
@@ -1205,6 +1205,9 @@ public class AbilityUtils {
|
||||
else if (defined.equals("DefendingPlayer")) {
|
||||
players.add(game.getCombat().getDefendingPlayerRelatedTo(card));
|
||||
}
|
||||
else if (defined.equals("ChoosingPlayer")) {
|
||||
players.add(((SpellAbility) sa).getRootAbility().getChoosingPlayer());
|
||||
}
|
||||
else if (defined.equals("ChosenPlayer")) {
|
||||
final Player p = card.getChosenPlayer();
|
||||
if (p != null) {
|
||||
@@ -1212,7 +1215,7 @@ public class AbilityUtils {
|
||||
}
|
||||
}
|
||||
else if (defined.startsWith("ChosenCard")) {
|
||||
addPlayer(Lists.newArrayList(card.getChosenCards()), defined, players);
|
||||
addPlayer(card.getChosenCards(), defined, players);
|
||||
}
|
||||
else if (defined.equals("SourceController")) {
|
||||
players.add(sa.getHostCard().getController());
|
||||
@@ -3053,11 +3056,11 @@ public class AbilityUtils {
|
||||
return applyAbilityTextChangeEffects(val, ability);
|
||||
}
|
||||
|
||||
private static void addPlayer(Iterable<Object> objects, final String def, FCollection<Player> players) {
|
||||
private static void addPlayer(Iterable<?> objects, final String def, FCollection<Player> players) {
|
||||
addPlayer(objects, def, players, false);
|
||||
}
|
||||
|
||||
private static void addPlayer(Iterable<Object> objects, final String def, FCollection<Player> players, boolean skipRemembered) {
|
||||
private static void addPlayer(Iterable<?> objects, final String def, FCollection<Player> players, boolean skipRemembered) {
|
||||
for (Object o : objects) {
|
||||
if (o instanceof Player) {
|
||||
final Player p = (Player) o;
|
||||
|
||||
@@ -224,7 +224,7 @@ public class CharmEffect extends SpellAbilityEffect {
|
||||
//String choosers = sa.getParam("Chooser");
|
||||
FCollection<Player> opponents = activator.getOpponents(); // all cards have Choser$ Opponent, so it's hardcoded here
|
||||
chooser = activator.getController().chooseSingleEntityForEffect(opponents, sa, "Choose an opponent", null);
|
||||
source.setChosenPlayer(chooser);
|
||||
sa.setChoosingPlayer(chooser);
|
||||
}
|
||||
|
||||
List<AbilitySub> chosen = chooser.getController().chooseModeForAbility(sa, choices, min, num, canRepeat);
|
||||
|
||||
@@ -83,7 +83,7 @@ public class CardFactory {
|
||||
out = assignNewId ? getCard(in.getPaperCard(), in.getOwner(), in.getGame())
|
||||
: getCard(in.getPaperCard(), in.getOwner(), in.getId(), in.getGame());
|
||||
} else { // token
|
||||
out = CardFactory.copyStats(in, in.getController(), assignNewId);
|
||||
out = copyStats(in, in.getController(), assignNewId);
|
||||
out.setToken(true);
|
||||
|
||||
// need to copy this values for the tokens
|
||||
@@ -128,7 +128,7 @@ public class CardFactory {
|
||||
int id = game.nextCardId();
|
||||
|
||||
// need to create a physical card first, i need the original card faces
|
||||
final Card copy = CardFactory.getCard(original.getPaperCard(), controller, id, game);
|
||||
final Card copy = getCard(original.getPaperCard(), controller, id, game);
|
||||
|
||||
if (original.isTransformable()) {
|
||||
// 707.8a If an effect creates a token that is a copy of a transforming permanent or a transforming double-faced card not on the battlefield,
|
||||
@@ -530,7 +530,7 @@ public class CardFactory {
|
||||
c.setSetCode(in.getSetCode());
|
||||
|
||||
for (final CardStateName state : in.getStates()) {
|
||||
CardFactory.copyState(in, state, c, state);
|
||||
copyState(in, state, c, state);
|
||||
}
|
||||
|
||||
c.setState(in.getCurrentStateName(), false);
|
||||
|
||||
@@ -103,11 +103,14 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
|
||||
// choices for constructor isPermanent argument
|
||||
private String originalDescription = "", description = "";
|
||||
private String originalStackDescription = "", stackDescription = "";
|
||||
private ManaCost multiKickerManaCost;
|
||||
|
||||
private Player activatingPlayer;
|
||||
private Player targetingPlayer;
|
||||
private Player choosingPlayer;
|
||||
private Pair<Long, Player> controlledByPlayer;
|
||||
|
||||
private ManaCostBeingPaid manaCostBeingPaid;
|
||||
private ManaCost multiKickerManaCost;
|
||||
private int spentPhyrexian = 0;
|
||||
private int paidLifeAmount = 0;
|
||||
|
||||
@@ -147,7 +150,6 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
|
||||
private TreeBasedTable<String, Boolean, CardCollection> paidLists = TreeBasedTable.create();
|
||||
|
||||
private EnumMap<AbilityKey, Object> triggeringObjects = AbilityKey.newMap();
|
||||
|
||||
private EnumMap<AbilityKey, Object> replacingObjects = AbilityKey.newMap();
|
||||
|
||||
private final List<String> pipsToReduce = new ArrayList<>();
|
||||
@@ -481,6 +483,13 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
|
||||
targetingPlayer = targetingPlayer0;
|
||||
}
|
||||
|
||||
public Player getChoosingPlayer() {
|
||||
return choosingPlayer;
|
||||
}
|
||||
public void setChoosingPlayer(Player choosingPlayer0) {
|
||||
choosingPlayer = choosingPlayer0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return returns who controls the controller of this sa when it is resolving (for Word of Command effect). Null means not being controlled by other
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user