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")) {
if (source.hasChosenName()) {
names.add(source.getChosenName());
} else { } else {
continue; 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,27 +62,33 @@ 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();
for (final String name : names) {
int toMake = amount;
if (!name.equals("")) { if (!name.equals("")) {
while (amount > 0) { while (toMake > 0) {
Card card = Card.fromPaperCard(StaticData.instance().getCommonCards().getUniqueByName(name), player); Card card = Card.fromPaperCard(StaticData.instance().getCommonCards().getUniqueByName(name),
player);
if (sa.hasParam("TokenCard")) { if (sa.hasParam("TokenCard")) {
card.setTokenCard(true); card.setTokenCard(true);
} }
game.getAction().moveTo(ZoneType.None, card, sa, moveParams); game.getAction().moveTo(ZoneType.None, card, sa, moveParams);
cards.add(card); cards.add(card);
amount--; toMake--;
}
}
} }
final CardZoneTable triggerList = new CardZoneTable(); final CardZoneTable triggerList = new CardZoneTable();
@@ -84,10 +96,10 @@ public class MakeCardEffect extends SpellAbilityEffect {
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")) { if (sa.hasParam("ImprintMade")) {
sa.getHostCard().addImprintedCard(made); source.addImprintedCard(made);
} }
} }
triggerList.triggerChangesZoneAll(game, sa); triggerList.triggerChangesZoneAll(game, sa);
@@ -96,5 +108,4 @@ public class MakeCardEffect extends SpellAbilityEffect {
} }
} }
} }
}
} }