MakeCardEffect.resolve allow for multiple "DefinedName"

This commit is contained in:
Northmoc
2022-08-19 16:24:43 -04:00
parent b2593f2d84
commit e3258b5890

View File

@@ -1,10 +1,11 @@
package forge.game.ability.effects; package forge.game.ability.effects;
import java.util.List;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
import java.util.Map; import java.util.Map;
import com.google.common.collect.Lists;
import forge.StaticData; import forge.StaticData;
import forge.card.ICardFace; import forge.card.ICardFace;
import forge.game.Game; import forge.game.Game;
@@ -34,18 +35,23 @@ public class MakeCardEffect extends SpellAbilityEffect {
for (final Player player : players) { for (final Player player : players) {
final Game game = player.getGame(); final Game game = player.getGame();
String name = sa.getParamOrDefault("Name", ""); List<String> names = Lists.newArrayList();
if (name.equals("ChosenName")) { if (sa.hasParam("Name")) {
if (sa.getHostCard().hasChosenName()) { final String n = sa.getParam("Name");
name = sa.getHostCard().getChosenName(); if (n.equals("ChosenName")) {
} else { if (source.hasChosenName()) {
continue; names.add(source.getChosenName());
} else {
names.add(n);
}
} }
} }
if (sa.hasParam("DefinedName")) { if (sa.hasParam("DefinedName")) {
final CardCollection def = AbilityUtils.getDefinedCards(source, sa.getParam("DefinedName"), sa); final CardCollection def = AbilityUtils.getDefinedCards(source, sa.getParam("DefinedName"), sa);
if (def.size() > 0) { if (def.size() > 0) {
name = def.getFirst().getName(); for (final Card c : def) {
names.add(c.getName());
}
} }
} else if (sa.hasParam("Spellbook")) { } else if (sa.hasParam("Spellbook")) {
List<String> spellbook = Arrays.asList(sa.getParam("Spellbook").split(",")); List<String> spellbook = Arrays.asList(sa.getParam("Spellbook").split(","));
@@ -56,45 +62,50 @@ public class MakeCardEffect extends SpellAbilityEffect {
faces.add(StaticData.instance().getCommonCards().getFaceByName(s)); faces.add(StaticData.instance().getCommonCards().getFaceByName(s));
} }
if (sa.hasParam("AtRandom")) { if (sa.hasParam("AtRandom")) {
name = Aggregates.random(faces).getName(); names.add(Aggregates.random(faces).getName());
} else { } else {
name = player.getController().chooseCardName(sa, faces, names.add(player.getController().chooseCardName(sa, faces,
Localizer.getInstance().getMessage("lblChooseFromSpellbook", CardTranslation.getTranslatedName(source.getName()))); Localizer.getInstance().getMessage("lblChooseFromSpellbook",
CardTranslation.getTranslatedName(source.getName()))));
} }
} }
final ZoneType zone = ZoneType.smartValueOf(sa.getParamOrDefault("Zone", "Library")); final ZoneType zone = ZoneType.smartValueOf(sa.getParamOrDefault("Zone", "Library"));
int amount = sa.hasParam("Amount") ? final int amount = sa.hasParam("Amount") ?
AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("Amount"), sa) : 1; AbilityUtils.calculateAmount(source, sa.getParam("Amount"), sa) : 1;
CardCollection cards = new CardCollection(); CardCollection cards = new CardCollection();
if (!name.equals("")) { for (final String name : names) {
while (amount > 0) { int toMake = amount;
Card card = Card.fromPaperCard(StaticData.instance().getCommonCards().getUniqueByName(name), player); if (!name.equals("")) {
if (sa.hasParam("TokenCard")) { while (toMake > 0) {
card.setTokenCard(true); Card card = Card.fromPaperCard(StaticData.instance().getCommonCards().getUniqueByName(name),
player);
if (sa.hasParam("TokenCard")) {
card.setTokenCard(true);
}
game.getAction().moveTo(ZoneType.None, card, sa, moveParams);
cards.add(card);
toMake--;
} }
game.getAction().moveTo(ZoneType.None, card, sa, moveParams);
cards.add(card);
amount--;
} }
}
final CardZoneTable triggerList = new CardZoneTable(); final CardZoneTable triggerList = new CardZoneTable();
for (final Card c : cards) { for (final Card c : cards) {
Card made = game.getAction().moveTo(zone, c, sa, moveParams); Card made = game.getAction().moveTo(zone, c, sa, moveParams);
triggerList.put(ZoneType.None, made.getZone().getZoneType(), made); triggerList.put(ZoneType.None, made.getZone().getZoneType(), made);
if (sa.hasParam("RememberMade")) { if (sa.hasParam("RememberMade")) {
sa.getHostCard().addRemembered(made); source.addRemembered(made);
}
if (sa.hasParam("ImprintMade")) {
sa.getHostCard().addImprintedCard(made);
}
} }
triggerList.triggerChangesZoneAll(game, sa); if (sa.hasParam("ImprintMade")) {
if (zone.equals(ZoneType.Library)) { source.addImprintedCard(made);
player.shuffle(sa);
} }
} }
triggerList.triggerChangesZoneAll(game, sa);
if (zone.equals(ZoneType.Library)) {
player.shuffle(sa);
}
} }
} }
} }