update translation text to use have placeholder string

This commit is contained in:
CCTV-1
2019-12-27 15:22:01 +08:00
parent cd1d744e1f
commit 92e6c303ad
40 changed files with 115 additions and 148 deletions

View File

@@ -24,7 +24,7 @@ public class AbandonEffect extends SpellAbilityEffect {
Player controller = source.getController(); Player controller = source.getController();
boolean isOptional = sa.hasParam("Optional"); boolean isOptional = sa.hasParam("Optional");
if (isOptional && !controller.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblWouldYoulikeAbandon") + " " + source + "?")) { if (isOptional && !controller.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblWouldYoulikeAbandonConfirm", source.toString()))) {
return; return;
} }

View File

@@ -62,7 +62,7 @@ public class AddTurnEffect extends SpellAbilityEffect {
extra.setCantSetSchemesInMotion(true); extra.setCantSetSchemesInMotion(true);
} }
if (sa.hasParam("ShowMessage")) { if (sa.hasParam("ShowMessage")) {
p.getGame().getAction().nofityOfValue(sa, p, p + " " + Localizer.getInstance().getMessage("lblTakesExtraTurn"), null); p.getGame().getAction().nofityOfValue(sa, p, Localizer.getInstance().getMessage("lblPlayerTakesExtraTurn", p.toString()), null);
} }
} }
} }

View File

@@ -50,7 +50,7 @@ public class AssignGroupEffect extends SpellAbilityEffect {
Multimap<SpellAbility, GameObject> result = ArrayListMultimap.create(); Multimap<SpellAbility, GameObject> result = ArrayListMultimap.create();
for (GameObject g : defined) { for (GameObject g : defined) {
final String title = Localizer.getInstance().getMessage("lblChooseAbilityFor") + " " + g.toString(); final String title = Localizer.getInstance().getMessage("lblChooseAbilityForObject", g.toString());
Map<String, Object> params = Maps.newHashMap(); Map<String, Object> params = Maps.newHashMap();
params.put("Affected", g); params.put("Affected", g);

View File

@@ -61,7 +61,7 @@ public class AttachEffect extends SpellAbilityEffect {
// If Cast Targets will be checked on the Stack // If Cast Targets will be checked on the Stack
for (final Card attachment : attachments) { for (final Card attachment : attachments) {
String message = Localizer.getInstance().getMessage("lblDoYouWantAttach") + " " + attachment + " " + Localizer.getInstance().getMessage("lblTo") + " " + attachTo + "?"; String message = Localizer.getInstance().getMessage("lblDoYouWantAttachSourceToTarget", attachment.toString(), attachTo.toString());
if ( sa.hasParam("Optional") && !p.getController().confirmAction(sa, null, message) ) if ( sa.hasParam("Optional") && !p.getController().confirmAction(sa, null, message) )
continue; continue;
handleAttachment(attachment, attachTo, sa); handleAttachment(attachment, attachTo, sa);
@@ -174,7 +174,7 @@ public class AttachEffect extends SpellAbilityEffect {
players.add(player); players.add(player);
} }
} }
final Player pa = p.getController().chooseSingleEntityForEffect(players, aura, source + " - " + Localizer.getInstance().getMessage("lblSelectAPlayerAttachTo")); final Player pa = p.getController().chooseSingleEntityForEffect(players, aura, Localizer.getInstance().getMessage("lblSelectAPlayerAttachSourceTo", source.toString()));
if (pa != null) { if (pa != null) {
handleAura(source, pa); handleAura(source, pa);
return true; return true;
@@ -187,7 +187,7 @@ public class AttachEffect extends SpellAbilityEffect {
return false; return false;
} }
final Card o = p.getController().chooseSingleEntityForEffect(list, aura, source + " - " + Localizer.getInstance().getMessage("lblSelectACardAttachTo")); final Card o = p.getController().chooseSingleEntityForEffect(list, aura, Localizer.getInstance().getMessage("lblSelectACardAttachSourceTo", source.toString()));
if (o != null) { if (o != null) {
handleAura(source, o); handleAura(source, o);
//source.enchantEntity((Card) o); //source.enchantEntity((Card) o);

View File

@@ -60,7 +60,7 @@ public class BidLifeEffect extends SpellAbilityEffect {
if (result) { // a different choose number if (result) { // a different choose number
bid += p.getController().chooseNumber(sa, Localizer.getInstance().getMessage("lblBidLife") + ":", 1, 9); bid += p.getController().chooseNumber(sa, Localizer.getInstance().getMessage("lblBidLife") + ":", 1, 9);
winner = p; winner = p;
host.getGame().getAction().nofityOfValue(sa, p, Localizer.getInstance().getMessage("lblTopBidWith") + " " + bid + " " + Localizer.getInstance().getMessage("lbllife"), p); host.getGame().getAction().nofityOfValue(sa, p, Localizer.getInstance().getMessage("lblTopBidWithValueLife", String.valueOf(bid)), p);
} }
} }
} }

View File

@@ -45,7 +45,7 @@ public class ChangeCombatantsEffect extends SpellAbilityEffect {
final GameEntity originalDefender = combat.getDefenderByAttacker(c); final GameEntity originalDefender = combat.getDefenderByAttacker(c);
final FCollectionView<GameEntity> defs = combat.getDefenders(); final FCollectionView<GameEntity> defs = combat.getDefenders();
final GameEntity defender = sa.getActivatingPlayer().getController().chooseSingleEntityForEffect(defs, sa, final GameEntity defender = sa.getActivatingPlayer().getController().chooseSingleEntityForEffect(defs, sa,
Localizer.getInstance().getMessage("lblChooseDefenderToAttackWith") + " " + c, false); Localizer.getInstance().getMessage("lblChooseDefenderToAttackWithCard", c.toString()), false);
if (originalDefender != null && !originalDefender.equals(defender)) { if (originalDefender != null && !originalDefender.equals(defender)) {
AttackingBand ab = combat.getBandOfAttacker(c); AttackingBand ab = combat.getBandOfAttacker(c);
if (ab != null) { if (ab != null) {

View File

@@ -51,8 +51,8 @@ public class ChangeTargetsEffect extends SpellAbilityEffect {
// Redirect rules read 'you MAY choose new targets' ... okay! // Redirect rules read 'you MAY choose new targets' ... okay!
// TODO: Don't even ask to change targets, if the SA and subs don't actually have targets // TODO: Don't even ask to change targets, if the SA and subs don't actually have targets
boolean isOptional = sa.hasParam("Optional"); boolean isOptional = sa.hasParam("Optional");
if (isOptional && !chooser.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWantChangeTargets") + " " + tgtSA.getHostCard() + "?")) { if (isOptional && !chooser.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWantChangeAbilityTargets", tgtSA.getHostCard().toString()))) {
continue; continue;
} }
if (changesOneTarget) { if (changesOneTarget) {
// 1. choose a target of target spell // 1. choose a target of target spell

View File

@@ -99,19 +99,9 @@ public class ChangeZoneAllEffect extends SpellAbilityEffect {
final String targets = Lang.joinHomogenous(cards); final String targets = Lang.joinHomogenous(cards);
final String message; final String message;
if (sa.hasParam("OptionQuestion")) { if (sa.hasParam("OptionQuestion")) {
message = TextUtil.fastReplace(sa.getParam("OptionQuestion"), "TARGETS", targets); message = TextUtil.fastReplace(sa.getParam("OptionQuestion"), "TARGETS", targets);
} else { } else {
final StringBuilder sb = new StringBuilder(); message = Localizer.getInstance().getMessage("lblMoveTargetFromOriginToDestination", targets, Lang.joinHomogenous(origin), destination.toString());
sb.append(Localizer.getInstance().getMessage("lblMove") + " ");
sb.append(targets);
sb.append(" " + Localizer.getInstance().getMessage("lblFrom") + " ");
sb.append(Lang.joinHomogenous(origin));
sb.append(" " + Localizer.getInstance().getMessage("lblTo") + " ");
sb.append(destination);
sb.append("?");
message = sb.toString();
} }
if (!sa.getActivatingPlayer().getController().confirmAction(sa, null, message)) { if (!sa.getActivatingPlayer().getController().confirmAction(sa, null, message)) {

View File

@@ -440,7 +440,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
hostCard.addRemembered(CardUtil.getLKICopy(tgtC)); hostCard.addRemembered(CardUtil.getLKICopy(tgtC));
} }
final String prompt = TextUtil.concatWithSpace(Localizer.getInstance().getMessage("lblDoYouWantMove"), tgtC.toString(), Localizer.getInstance().getMessage("lblFrom"), origin.toString(), Localizer.getInstance().getMessage("lblTo"), TextUtil.addSuffix(destination.toString(),"?")); final String prompt = TextUtil.concatWithSpace(Localizer.getInstance().getMessage("lblDoYouWantMoveTargetFromOriToDest", tgtC.toString(), origin.toString(), destination.toString()));
if (optional && !player.getController().confirmAction(sa, null, prompt) ) if (optional && !player.getController().confirmAction(sa, null, prompt) )
continue; continue;
@@ -504,7 +504,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
list = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), sa.getParam("AttachedTo"), tgtC.getController(), tgtC); list = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), sa.getParam("AttachedTo"), tgtC.getController(), tgtC);
} }
if (!list.isEmpty()) { if (!list.isEmpty()) {
Card attachedTo = player.getController().chooseSingleEntityForEffect(list, sa, tgtC + " - " + Localizer.getInstance().getMessage("lblSelectACardAttachTo")); Card attachedTo = player.getController().chooseSingleEntityForEffect(list, sa, Localizer.getInstance().getMessage("lblSelectACardAttachSourceTo", tgtC.toString()));
tgtC.attachToEntity(attachedTo); tgtC.attachToEntity(attachedTo);
} else { // When it should enter the battlefield attached to an illegal permanent it fails } else { // When it should enter the battlefield attached to an illegal permanent it fails
continue; continue;
@@ -514,7 +514,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
if (sa.hasParam("AttachedToPlayer")) { if (sa.hasParam("AttachedToPlayer")) {
FCollectionView<Player> list = AbilityUtils.getDefinedPlayers(hostCard, sa.getParam("AttachedToPlayer"), sa); FCollectionView<Player> list = AbilityUtils.getDefinedPlayers(hostCard, sa.getParam("AttachedToPlayer"), sa);
if (!list.isEmpty()) { if (!list.isEmpty()) {
Player attachedTo = player.getController().chooseSingleEntityForEffect(list, sa, tgtC + " - " + Localizer.getInstance().getMessage("lblSelectAPlayerAttachTo")); Player attachedTo = player.getController().chooseSingleEntityForEffect(list, sa, Localizer.getInstance().getMessage("lblSelectAPlayerAttachSourceTo", tgtC.toString()));
tgtC.attachToEntity(attachedTo); tgtC.attachToEntity(attachedTo);
} }
else { // When it should enter the battlefield attached to an illegal player it fails else { // When it should enter the battlefield attached to an illegal player it fails
@@ -561,7 +561,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
} }
} }
} else { } else {
defender = player.getController().chooseSingleEntityForEffect(e, sa, Localizer.getInstance().getMessage("lblDeclareDefenderFor") + " " + movedCard ); defender = player.getController().chooseSingleEntityForEffect(e, sa, Localizer.getInstance().getMessage("lblDeclareDefenderForCard", movedCard.toString()));
} }
if (defender != null) { if (defender != null) {
combat.addAttacker(movedCard, defender); combat.addAttacker(movedCard, defender);
@@ -750,7 +750,14 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
final boolean optional = sa.hasParam("Optional"); final boolean optional = sa.hasParam("Optional");
if (optional) { if (optional) {
String message = MessageUtil.formatMessage(defined ? Localizer.getInstance().getMessage("lblPutThatCardFrom") + " {player's} " + Lang.joinHomogenous(origin).toLowerCase() + " " + Localizer.getInstance().getMessage("lblTo") + " " + destination.name().toLowerCase() : Localizer.getInstance().getMessage("lblSearch") + " {player's} " + Lang.joinHomogenous(origin).toLowerCase() + "?", decider, player); String prompt;
if (defined) {
prompt = Localizer.getInstance().getMessage("lblPutThatCardFromPlayerOriginToDestination", "{player's}", Lang.joinHomogenous(origin).toLowerCase(), destination.name().toLowerCase());
}
else {
prompt = Localizer.getInstance().getMessage("lblSearchPlayerZoneConfirm", "{player's}", Lang.joinHomogenous(origin).toLowerCase());
}
String message = MessageUtil.formatMessage(prompt , decider, player);
if (!decider.getController().confirmAction(sa, PlayerActionConfirmMode.ChangeZoneGeneral, message)) { if (!decider.getController().confirmAction(sa, PlayerActionConfirmMode.ChangeZoneGeneral, message)) {
return; return;
} }
@@ -822,7 +829,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
continue; continue;
} }
SpellAbility tgtSA = decider.getController().getAbilityToPlay(tgtCard, sas); SpellAbility tgtSA = decider.getController().getAbilityToPlay(tgtCard, sas);
if (!decider.getController().confirmAction(tgtSA, null, Localizer.getInstance().getMessage("lblDoYouWantPlay") + " " + tgtCard + "?")) { if (!decider.getController().confirmAction(tgtSA, null, Localizer.getInstance().getMessage("lblDoYouWantPlayCard", tgtCard.toString()))) {
continue; continue;
} }
// if played, that card cannot be found // if played, that card cannot be found
@@ -854,7 +861,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
final boolean champion = sa.hasParam("Champion"); final boolean champion = sa.hasParam("Champion");
final boolean forget = sa.hasParam("ForgetChanged"); final boolean forget = sa.hasParam("ForgetChanged");
final boolean imprint = sa.hasParam("Imprint"); final boolean imprint = sa.hasParam("Imprint");
String selectPrompt = sa.hasParam("SelectPrompt") ? sa.getParam("SelectPrompt") : MessageUtil.formatMessage(Localizer.getInstance().getMessage("lblSelectCardFrom") + " {player's} " + Lang.joinHomogenous(origin).toLowerCase(), decider, player); String selectPrompt = sa.hasParam("SelectPrompt") ? sa.getParam("SelectPrompt") : MessageUtil.formatMessage(Localizer.getInstance().getMessage("lblSelectCardFromPlayerZone", "{player's}", Lang.joinHomogenous(origin).toLowerCase()), decider, player);
final String totalcmc = sa.getParam("WithTotalCMC"); final String totalcmc = sa.getParam("WithTotalCMC");
int totcmc = AbilityUtils.calculateAmount(source, totalcmc, sa); int totcmc = AbilityUtils.calculateAmount(source, totalcmc, sa);
@@ -867,9 +874,10 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
if (! sa.hasParam("SelectPrompt")) { if (! sa.hasParam("SelectPrompt")) {
// new default messaging for multi select // new default messaging for multi select
if (fetchList.size() > changeNum) { if (fetchList.size() > changeNum) {
selectPrompt = MessageUtil.formatMessage(Localizer.getInstance().getMessage("lblSelectUpTo") + " " + changeNum + " " + Localizer.getInstance().getMessage("lblCardsFrom") + " {player's} " + Lang.joinHomogenous(origin).toLowerCase(), decider, player); //Select up to %changeNum cards from %players %origin
selectPrompt = MessageUtil.formatMessage(Localizer.getInstance().getMessage("lblSelectUpToNumCardFromPlayerZone", String.valueOf(changeNum), "{player's}", Lang.joinHomogenous(origin).toLowerCase()), decider, player);
} else { } else {
selectPrompt = MessageUtil.formatMessage(Localizer.getInstance().getMessage("lblSelectCardsFrom") + " {player's} " + Lang.joinHomogenous(origin).toLowerCase(), decider, player); selectPrompt = MessageUtil.formatMessage(Localizer.getInstance().getMessage("lblSelectCardsFromPlayerZone", "{player's}", Lang.joinHomogenous(origin).toLowerCase()), decider, player);
} }
} }
// ensure that selection is within maximum allowed changeNum // ensure that selection is within maximum allowed changeNum
@@ -931,7 +939,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
if (c == null) { if (c == null) {
final int num = Math.min(fetchList.size(), changeNum - i); final int num = Math.min(fetchList.size(), changeNum - i);
String message = Localizer.getInstance().getMessage("lblCancelSearchUpTo") + " " + num + " " + Localizer.getInstance().getMessage("lblMoreCard") + (num != 1 ? "s" : "") + " " + Localizer.getInstance().getMessage("lblCanBeSelected"); String message = Localizer.getInstance().getMessage("lblCancelSearchUpToSelectNumCards", String.valueOf(num));
if (fetchList.isEmpty() || decider.getController().confirmAction(sa, PlayerActionConfirmMode.ChangeZoneGeneral, message)) { if (fetchList.isEmpty() || decider.getController().confirmAction(sa, PlayerActionConfirmMode.ChangeZoneGeneral, message)) {
break; break;
@@ -1002,7 +1010,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
if (!list.isEmpty()) { if (!list.isEmpty()) {
Card attachedTo = null; Card attachedTo = null;
if (list.size() > 1) { if (list.size() > 1) {
attachedTo = decider.getController().chooseSingleEntityForEffect(list, sa, c + " - " + Localizer.getInstance().getMessage("lblSelectACardAttachTo")); attachedTo = decider.getController().chooseSingleEntityForEffect(list, sa, Localizer.getInstance().getMessage("lblSelectACardAttachSourceTo", c.toString()));
} }
else { else {
attachedTo = list.get(0); attachedTo = list.get(0);
@@ -1020,7 +1028,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
if (sa.hasParam("AttachedToPlayer")) { if (sa.hasParam("AttachedToPlayer")) {
FCollectionView<Player> list = AbilityUtils.getDefinedPlayers(source, sa.getParam("AttachedToPlayer"), sa); FCollectionView<Player> list = AbilityUtils.getDefinedPlayers(source, sa.getParam("AttachedToPlayer"), sa);
if (!list.isEmpty()) { if (!list.isEmpty()) {
Player attachedTo = player.getController().chooseSingleEntityForEffect(list, sa, c + " - " + Localizer.getInstance().getMessage("lblSelectAPlayerAttachTo")); Player attachedTo = player.getController().chooseSingleEntityForEffect(list, sa, Localizer.getInstance().getMessage("lblSelectACardAttachSourceTo", c.toString()));
c.attachToEntity(attachedTo); c.attachToEntity(attachedTo);
} }
else { // When it should enter the battlefield attached to an illegal permanent it fails else { // When it should enter the battlefield attached to an illegal permanent it fails
@@ -1043,7 +1051,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
} }
} }
} else { } else {
defender = player.getController().chooseSingleEntityForEffect(e, sa, Localizer.getInstance().getMessage("lblDeclareDefenderFor") + " " + c ); defender = player.getController().chooseSingleEntityForEffect(e, sa, Localizer.getInstance().getMessage("lblDeclareDefenderForCard", c.toString()));
} }
if (defender != null) { if (defender != null) {
combat.addAttacker(c, defender); combat.addAttacker(c, defender);

View File

@@ -83,7 +83,7 @@ public class ChooseCardEffect extends SpellAbilityEffect {
for (final String type : CardType.getBasicTypes()) { for (final String type : CardType.getBasicTypes()) {
final CardCollectionView cl = CardLists.getType(land, type); final CardCollectionView cl = CardLists.getType(land, type);
if (!cl.isEmpty()) { if (!cl.isEmpty()) {
final String prompt = "Choose " + Lang.nounWithAmount(1, type); final String prompt = Localizer.getInstance().getMessage("lblChoose") + " " + Lang.nounWithAmount(1, type);
Card c = p.getController().chooseSingleEntityForEffect(cl, sa, prompt, false); Card c = p.getController().chooseSingleEntityForEffect(cl, sa, prompt, false);
if (c != null) { if (c != null) {
chosen.add(c); chosen.add(c);
@@ -99,8 +99,8 @@ public class ChooseCardEffect extends SpellAbilityEffect {
int chosenP = 0; int chosenP = 0;
while (!creature.isEmpty()) { while (!creature.isEmpty()) {
Card c = p.getController().chooseSingleEntityForEffect(creature, sa, Card c = p.getController().chooseSingleEntityForEffect(creature, sa,
Localizer.getInstance().getMessage("lblSelectCreatureWithTotalPowerLessOrEqualTo") + " " + (totP - chosenP - negativeNum) Localizer.getInstance().getMessage("lblSelectCreatureWithTotalPowerLessOrEqualToNum", (totP - chosenP - negativeNum))
+ "\r\n(" + Localizer.getInstance().getMessage("lblSelected") + ":" + chosenPool + ")\r\n(" + Localizer.getInstance().getMessage("lblTotalPower") + ": " + chosenP + ")", chosenP <= totP); + "\r\n(" + Localizer.getInstance().getMessage("lblSelected") + ":" + chosenPool + ")\r\n(" + Localizer.getInstance().getMessage("lblTotalPowerNum", chosenP) + ")", chosenP <= totP);
if (c == null) { if (c == null) {
if (p.getController().confirmAction(sa, PlayerActionConfirmMode.OptionalChoose, Localizer.getInstance().getMessage("lblCancelChooseConfirm"))) { if (p.getController().confirmAction(sa, PlayerActionConfirmMode.OptionalChoose, Localizer.getInstance().getMessage("lblCancelChooseConfirm"))) {
break; break;

View File

@@ -104,7 +104,7 @@ public class ChooseCardNameEffect extends SpellAbilityEffect {
} else { } else {
// use CardFace because you might name a alternate name // use CardFace because you might name a alternate name
//"name a card" in mtg card oracle text is "choose a card name",change text //"name a card" in mtg card oracle text is "choose a card name",change text
final String message = validDesc.equals("card") ? Localizer.getInstance().getMessage("lblChooseACardName") : Localizer.getInstance().getMessage("lblChooseA") + validDesc + Localizer.getInstance().getMessage("lblCardName") + "."; final String message = validDesc.equals("card") ? Localizer.getInstance().getMessage("lblChooseACardName") : Localizer.getInstance().getMessage("lblChooseASpecificCard", validDesc);
Predicate<ICardFace> cpp = Predicates.alwaysTrue(); Predicate<ICardFace> cpp = Predicates.alwaysTrue();
if (sa.hasParam("ValidCards")) { if (sa.hasParam("ValidCards")) {
@@ -116,7 +116,7 @@ public class ChooseCardNameEffect extends SpellAbilityEffect {
host.setNamedCard(chosen); host.setNamedCard(chosen);
if(!randomChoice) { if(!randomChoice) {
p.getGame().getAction().nofityOfValue(sa, host, p.getName() + " " + Localizer.getInstance().getMessage("lblPicked") + " " + chosen, p); p.getGame().getAction().nofityOfValue(sa, host, Localizer.getInstance().getMessage("lblPlayerPickedChosen", p.getName(), chosen), p);
p.setNamedCard(chosen); p.setNamedCard(chosen);
} }
} }

View File

@@ -50,27 +50,25 @@ public class ChooseColorEffect extends SpellAbilityEffect {
List<String> chosenColors; List<String> chosenColors;
int cntMin = sa.hasParam("TwoColors") ? 2 : 1; int cntMin = sa.hasParam("TwoColors") ? 2 : 1;
int cntMax = sa.hasParam("TwoColors") ? 2 : sa.hasParam("OrColors") ? colorChoices.size() : 1; int cntMax = sa.hasParam("TwoColors") ? 2 : sa.hasParam("OrColors") ? colorChoices.size() : 1;
String prompt; String prompt = null;
if (cntMax == 1) { if (cntMax == 1) {
prompt = Localizer.getInstance().getMessage("lblChooseAColor"); prompt = Localizer.getInstance().getMessage("lblChooseAColor");
} }
else { else {
prompt = Localizer.getInstance().getMessage("lblChoose") + " " + Lang.getNumeral(cntMin);
if (cntMax > cntMin) { if (cntMax > cntMin) {
if (cntMax >= MagicColor.NUMBER_OR_COLORS) { if (cntMax >= MagicColor.NUMBER_OR_COLORS) {
prompt += " " + Localizer.getInstance().getMessage("lblOrMore"); prompt = Localizer.getInstance().getMessage("lblAtLastChooseNumColors", Lang.getNumeral(cntMin));
} else { } else {
prompt += " " + Localizer.getInstance().getMessage("lblTo") + " " + Lang.getNumeral(cntMax); prompt = Localizer.getInstance().getMessage("lblChooseSpecifiedRangeColors", Lang.getNumeral(cntMin), Lang.getNumeral(cntMax));
} }
} }
prompt += " " + Localizer.getInstance().getMessage("lblColors");
} }
chosenColors = p.getController().chooseColors(prompt, sa, cntMin, cntMax, colorChoices); chosenColors = p.getController().chooseColors(prompt, sa, cntMin, cntMax, colorChoices);
if (chosenColors.isEmpty()) { if (chosenColors.isEmpty()) {
return; return;
} }
card.setChosenColors(chosenColors); card.setChosenColors(chosenColors);
p.getGame().getAction().nofityOfValue(sa, card, p.getName() + " " + Localizer.getInstance().getMessage("lblPicked") + " " + Lang.joinHomogenous(chosenColors), p); p.getGame().getAction().nofityOfValue(sa, card, Localizer.getInstance().getMessage("lblPlayerPickedChosen", p.getName(), Lang.joinHomogenous(chosenColors)), p);
} }
} }
} }

View File

@@ -73,7 +73,7 @@ public class ChooseNumberEffect extends SpellAbilityEffect {
card.setChosenNumber(chosen); card.setChosenNumber(chosen);
} }
if (sa.hasParam("Notify")) { if (sa.hasParam("Notify")) {
p.getGame().getAction().nofityOfValue(sa, card, p.getName() + " " + Localizer.getInstance().getMessage("lblPicked") + " " + chosen, p); p.getGame().getAction().nofityOfValue(sa, card, Localizer.getInstance().getMessage("lblPlayerPickedChosen", p.getName(), chosen), p);
} }
} }
} }
@@ -86,7 +86,7 @@ public class ChooseNumberEffect extends SpellAbilityEffect {
for (Entry<Player, Integer> ev : chooseMap.entrySet()) { for (Entry<Player, Integer> ev : chooseMap.entrySet()) {
int num = ev.getValue(); int num = ev.getValue();
Player player = ev.getKey(); Player player = ev.getKey();
sb.append(player).append(" " + Localizer.getInstance().getMessage("lblChose") + " ").append(num); sb.append(Localizer.getInstance().getMessage("lblPlayerChoseNum", player.getName(), String.valueOf(num)));
sb.append("\r\n"); sb.append("\r\n");
if (num > highest) { if (num > highest) {
highestNum.clear(); highestNum.clear();

View File

@@ -94,7 +94,7 @@ public class CloneEffect extends SpellAbilityEffect {
} }
final boolean optional = sa.hasParam("Optional"); final boolean optional = sa.hasParam("Optional");
if (optional && !host.getController().getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWantCopy") + " " + cardToCopy + "?")) { if (optional && !host.getController().getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWantCopyCard", cardToCopy))) {
return; return;
} }

View File

@@ -228,7 +228,7 @@ public class ControlGainEffect extends SpellAbilityEffect {
final FCollectionView<GameEntity> e = combat.getDefenders(); final FCollectionView<GameEntity> e = combat.getDefenders();
final GameEntity defender = sa.getActivatingPlayer().getController().chooseSingleEntityForEffect(e, sa, final GameEntity defender = sa.getActivatingPlayer().getController().chooseSingleEntityForEffect(e, sa,
Localizer.getInstance().getMessage("lblDeclareDefenderFor") + " " + tgtC); Localizer.getInstance().getMessage("lblDeclareDefenderForCard", tgtC.toString()));
if (defender != null) { if (defender != null) {
combat.addAttacker(tgtC, defender); combat.addAttacker(tgtC, defender);

View File

@@ -207,12 +207,12 @@ public class CopyPermanentEffect extends SpellAbilityEffect {
GameEntity defender; GameEntity defender;
if ("True".equals(attacked)) { if ("True".equals(attacked)) {
FCollectionView<GameEntity> defs = game.getCombat().getDefenders(); FCollectionView<GameEntity> defs = game.getCombat().getDefenders();
defender = c.getController().getController().chooseSingleEntityForEffect(defs, sa, Localizer.getInstance().getMessage("lblChooseDefenderToAttackWith") + " " + c, false); defender = c.getController().getController().chooseSingleEntityForEffect(defs, sa, Localizer.getInstance().getMessage("lblChooseDefenderToAttackWithCard", c.toString()), false);
} else { } else {
defender = AbilityUtils.getDefinedPlayers(host, sa.getParam("CopyAttacking"), sa).get(0); defender = AbilityUtils.getDefinedPlayers(host, sa.getParam("CopyAttacking"), sa).get(0);
if (sa.hasParam("ChoosePlayerOrPlaneswalker") && defender != null) { if (sa.hasParam("ChoosePlayerOrPlaneswalker") && defender != null) {
FCollectionView<GameEntity> defs = game.getCombat().getDefendersControlledBy((Player) defender); FCollectionView<GameEntity> defs = game.getCombat().getDefendersControlledBy((Player) defender);
defender = c.getController().getController().chooseSingleEntityForEffect(defs, sa, Localizer.getInstance().getMessage("lblChooseDefenderToAttackWith") + " " + c + " {" + Localizer.getInstance().getMessage("lblDefender") + ": " + defender + "}", false); defender = c.getController().getController().chooseSingleEntityForEffect(defs, sa, Localizer.getInstance().getMessage("lblChooseDefenderToAttackWithCard", c.toString()) + " {" + Localizer.getInstance().getMessage("lblDefender") + ": " + defender + "}", false);
} }
} }
game.getCombat().addAttacker(copyInPlay, defender); game.getCombat().addAttacker(copyInPlay, defender);
@@ -244,7 +244,7 @@ public class CopyPermanentEffect extends SpellAbilityEffect {
list = CardLists.getValidCards(list, sa.getParam("AttachedTo"), copyInPlay.getController(), copyInPlay); list = CardLists.getValidCards(list, sa.getParam("AttachedTo"), copyInPlay.getController(), copyInPlay);
} }
if (!list.isEmpty()) { if (!list.isEmpty()) {
Card attachedTo = activator.getController().chooseSingleEntityForEffect(list, sa, copyInPlay + " - " + Localizer.getInstance().getMessage("lblSelectACardAttachTo")); Card attachedTo = activator.getController().chooseSingleEntityForEffect(list, sa, Localizer.getInstance().getMessage("lblSelectACardAttachSourceTo", copyInPlay.toString()));
copyInPlay.attachToEntity(attachedTo); copyInPlay.attachToEntity(attachedTo);
} else { } else {

View File

@@ -67,7 +67,7 @@ public class CopySpellAbilityEffect extends SpellAbilityEffect {
} }
boolean isOptional = sa.hasParam("Optional"); boolean isOptional = sa.hasParam("Optional");
if (isOptional && !controller.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoyouWantCopyTheSpell") + " " + card + "?")) { if (isOptional && !controller.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoyouWantCopyTheSpell", card.toString()))) {
return; return;
} }
@@ -85,7 +85,7 @@ public class CopySpellAbilityEffect extends SpellAbilityEffect {
final int spellCount = Integer.parseInt(sa.getParam("CopyMultipleSpells")); final int spellCount = Integer.parseInt(sa.getParam("CopyMultipleSpells"));
for (int multi = 0; multi < spellCount && !tgtSpells.isEmpty(); multi++) { for (int multi = 0; multi < spellCount && !tgtSpells.isEmpty(); multi++) {
String prompt = Localizer.getInstance().getMessage("lblSelectMultiSpellCopyToStack").replace("%d", Lang.getOrdinal(multi + 1)); String prompt = Localizer.getInstance().getMessage("lblSelectMultiSpellCopyToStack", Lang.getOrdinal(multi + 1));
SpellAbility chosen = controller.getController().chooseSingleSpellForEffect(tgtSpells, sa, prompt, SpellAbility chosen = controller.getController().chooseSingleSpellForEffect(tgtSpells, sa, prompt,
ImmutableMap.of()); ImmutableMap.of());
SpellAbility copiedSpell = CardFactory.copySpellAbilityAndPossiblyHost(card, chosen.getHostCard(), chosen, true); SpellAbility copiedSpell = CardFactory.copySpellAbilityAndPossiblyHost(card, chosen.getHostCard(), chosen, true);

View File

@@ -110,11 +110,7 @@ public class CountersMoveEffect extends SpellAbilityEffect {
// only select cards if the counterNum is any // only select cards if the counterNum is any
if (counterNum.equals("Any")) { if (counterNum.equals("Any")) {
StringBuilder sb = new StringBuilder(); srcCards = player.getController().chooseCardsForEffect(srcCards, sa, Localizer.getInstance().getMessage("lblChooseTakeCountersCard", cType.getName()), 0, srcCards.size(), true);
sb.append(Localizer.getInstance().getMessage("lblChooseTakeCountersCard").replace("%s", cType.getName()));
srcCards = player.getController().chooseCardsForEffect(srcCards, sa, sb.toString(), 0, srcCards.size(), true);
} }
for (Card src : srcCards) { for (Card src : srcCards) {
@@ -136,10 +132,7 @@ public class CountersMoveEffect extends SpellAbilityEffect {
params.put("CounterType", cType); params.put("CounterType", cType);
params.put("Source", src); params.put("Source", src);
params.put("Target", dest); params.put("Target", dest);
StringBuilder sb = new StringBuilder(); cnum = player.getController().chooseNumber(sa, Localizer.getInstance().getMessage("lblTakeHowManyTargetCounterFromCard", cType.getName(), src.toString()), 0, cmax, params);
sb.append(Localizer.getInstance().getMessage("lblTakeHowMany") + " ").append(cType.getName());
sb.append(" " + Localizer.getInstance().getMessage("lblCountersFrom") + " ").append(src).append("?");
cnum = player.getController().chooseNumber(sa, sb.toString(), 0, cmax, params);
} else { } else {
cnum = AbilityUtils.calculateAmount(host, counterNum, sa); cnum = AbilityUtils.calculateAmount(host, counterNum, sa);
} }
@@ -173,12 +166,8 @@ public class CountersMoveEffect extends SpellAbilityEffect {
tgtCards = CardLists.getValidCards(tgtCards, sa.getParam("ValidDefined"), player, host, sa); tgtCards = CardLists.getValidCards(tgtCards, sa.getParam("ValidDefined"), player, host, sa);
if (counterNum.equals("Any")) { if (counterNum.equals("Any")) {
StringBuilder sb = new StringBuilder(); tgtCards = player.getController().chooseCardsForEffect(tgtCards, sa,
sb.append(Localizer.getInstance().getMessage("lblChooseCardToGet") + " ").append(cType.getName()); Localizer.getInstance().getMessage("lblChooseCardToGetCountersFrom", cType.getName(), source.toString()), 0, tgtCards.size(), true);
sb.append(" " + Localizer.getInstance().getMessage("lblCountersFrom") + " ").append(source).append(".");
tgtCards = player.getController().chooseCardsForEffect(
tgtCards, sa, sb.toString(), 0, tgtCards.size(), true);
} }
boolean updateSource = false; boolean updateSource = false;
@@ -202,9 +191,7 @@ public class CountersMoveEffect extends SpellAbilityEffect {
params.put("CounterType", cType); params.put("CounterType", cType);
params.put("Source", source); params.put("Source", source);
params.put("Target", cur); params.put("Target", cur);
StringBuilder sb = new StringBuilder(); int cnum = player.getController().chooseNumber(sa, Localizer.getInstance().getMessage("lblPutHowManyTargetCounterOnCard", cType.getName(), cur.toString()), 0, source.getCounters(cType), params);
sb.append(Localizer.getInstance().getMessage("lblPutHowMany") + " ").append(cType.getName()).append(" " + Localizer.getInstance().getMessage("lblCountersOn") + " ").append(cur).append("?");
int cnum = player.getController().chooseNumber(sa, sb.toString(), 0, source.getCounters(cType), params);
if (cnum > 0) { if (cnum > 0) {
source.subtractCounter(cType, cnum); source.subtractCounter(cType, cnum);
@@ -262,10 +249,7 @@ public class CountersMoveEffect extends SpellAbilityEffect {
params.put("CounterType", cType); params.put("CounterType", cType);
params.put("Source", source); params.put("Source", source);
params.put("Target", cur); params.put("Target", cur);
StringBuilder sb = new StringBuilder(); cntToMove = pc.chooseNumber(sa, Localizer.getInstance().getMessage("lblTakeHowManyTargetCounterFromCard", cType.getName(), source.toString()), 0, cntToMove, params);
sb.append(Localizer.getInstance().getMessage("lblTakeHowMany") + " ").append(cType.getName());
sb.append(" " + Localizer.getInstance().getMessage("lblCountersFrom") + " ").append(source).append("?");
cntToMove = pc.chooseNumber(sa, sb.toString(), 0, cntToMove, params);
} }
if (source.getCounters(cType) >= cntToMove) { if (source.getCounters(cType) >= cntToMove) {
@@ -298,10 +282,8 @@ public class CountersMoveEffect extends SpellAbilityEffect {
params.put("CounterType", chosenType); params.put("CounterType", chosenType);
params.put("Source", source); params.put("Source", source);
params.put("Target", dest); params.put("Target", dest);
StringBuilder sb = new StringBuilder(); int chosenAmount = pc.chooseNumber(sa, Localizer.getInstance().getMessage("lblTakeHowManyTargetCounters", chosenType.getName()),
sb.append(Localizer.getInstance().getMessage("lblTakeHowMany") + " ").append(chosenType.getName()).append(" " + Localizer.getInstance().getMessage("lblCounters") + "?"); 0, Math.min(tgtCounters.get(chosenType), cntToMove), params);
int chosenAmount = pc.chooseNumber(
sa, sb.toString(), 0, Math.min(tgtCounters.get(chosenType), cntToMove), params);
if (chosenAmount > 0) { if (chosenAmount > 0) {
dest.addCounter(chosenType, chosenAmount, player, true, table); dest.addCounter(chosenType, chosenAmount, player, true, table);

View File

@@ -236,7 +236,7 @@ public class CountersPutEffect extends SpellAbilityEffect {
continue; continue;
} }
String message = Localizer.getInstance().getMessage("lblDoYouWantPutTargetP1P1CountersOn").replace("%d", String.valueOf(counterAmount)) + " " + gameCard + " ?"; String message = Localizer.getInstance().getMessage("lblDoYouWantPutTargetP1P1CountersOnCard", String.valueOf(counterAmount), gameCard.toString());
Player chooser = pc.chooseSingleEntityForEffect(activator.getOpponents(), sa, Localizer.getInstance().getMessage("lblChooseAnOpponent")); Player chooser = pc.chooseSingleEntityForEffect(activator.getOpponents(), sa, Localizer.getInstance().getMessage("lblChooseAnOpponent"));
if (chooser.getController().confirmAction(sa, PlayerActionConfirmMode.Tribute, message)) { if (chooser.getController().confirmAction(sa, PlayerActionConfirmMode.Tribute, message)) {

View File

@@ -102,7 +102,7 @@ public class CountersPutOrRemoveEffect extends SpellAbilityEffect {
CounterType chosenType = pc.chooseCounterType(list, sa, prompt, params); CounterType chosenType = pc.chooseCounterType(list, sa, prompt, params);
params.put("CounterType", chosenType); params.put("CounterType", chosenType);
prompt = Localizer.getInstance().getMessage("lblWhatToDoWithTargetCounter").replace("%s", chosenType.getName()) + " "; prompt = Localizer.getInstance().getMessage("lblWhatToDoWithTargetCounter", chosenType.getName()) + " ";
Boolean putCounter = pc.chooseBinary(sa, prompt, BinaryChoiceType.AddOrRemove, params); Boolean putCounter = pc.chooseBinary(sa, prompt, BinaryChoiceType.AddOrRemove, params);
if (putCounter) { if (putCounter) {

View File

@@ -130,10 +130,7 @@ public class CountersRemoveEffect extends SpellAbilityEffect {
srcCards = game.getCardsIn(ZoneType.Battlefield); srcCards = game.getCardsIn(ZoneType.Battlefield);
srcCards = CardLists.getValidCards(srcCards, sa.getParam("ValidSource"), player, card, sa); srcCards = CardLists.getValidCards(srcCards, sa.getParam("ValidSource"), player, card, sa);
if (num.equals("Any")) { if (num.equals("Any")) {
StringBuilder sb = new StringBuilder(); srcCards = player.getController().chooseCardsForEffect(srcCards, sa, Localizer.getInstance().getMessage("lblChooseCardsToTakeTargetCounters", counterType.getName()), 0, srcCards.size(), true);
sb.append(Localizer.getInstance().getMessage("lblChooseCardtoTakeTargetCounters").replace("%s", counterType.getName()));
srcCards = player.getController().chooseCardsForEffect(srcCards, sa, sb.toString(), 0, srcCards.size(), true);
} }
} else { } else {
srcCards = getTargetCards(sa); srcCards = getTargetCards(sa);
@@ -173,7 +170,7 @@ public class CountersRemoveEffect extends SpellAbilityEffect {
Map<String, Object> params = Maps.newHashMap(); Map<String, Object> params = Maps.newHashMap();
params.put("Target", gameCard); params.put("Target", gameCard);
params.put("CounterType", type); params.put("CounterType", type);
String title = Localizer.getInstance().getMessage("lblSelectRemoveCountersNumberOfTarget").replace("%s", type); String title = Localizer.getInstance().getMessage("lblSelectRemoveCountersNumberOfTarget", type);
cntToRemove = pc.chooseNumber(sa, title, 0, cntToRemove, params); cntToRemove = pc.chooseNumber(sa, title, 0, cntToRemove, params);
} }
@@ -217,7 +214,7 @@ public class CountersRemoveEffect extends SpellAbilityEffect {
String prompt = Localizer.getInstance().getMessage("lblSelectCountersTypeToRemove"); String prompt = Localizer.getInstance().getMessage("lblSelectCountersTypeToRemove");
CounterType chosenType = pc.chooseCounterType( CounterType chosenType = pc.chooseCounterType(
ImmutableList.copyOf(tgtCounters.keySet()), sa, prompt, params); ImmutableList.copyOf(tgtCounters.keySet()), sa, prompt, params);
prompt = Localizer.getInstance().getMessage("lblSelectRemoveCountersNumberOfTarget").replace("%s", chosenType.getName()); prompt = Localizer.getInstance().getMessage("lblSelectRemoveCountersNumberOfTarget", chosenType.getName());
int max = Math.min(cntToRemove, tgtCounters.get(chosenType)); int max = Math.min(cntToRemove, tgtCounters.get(chosenType));
params = Maps.newHashMap(); params = Maps.newHashMap();
params.put("Target", entity); params.put("Target", entity);

View File

@@ -84,7 +84,7 @@ public class DamageDealEffect extends DamageBaseEffect {
List<GameObject> tgts = getTargets(sa); List<GameObject> tgts = getTargets(sa);
if (sa.hasParam("OptionalDecider")) { if (sa.hasParam("OptionalDecider")) {
Player decider = Iterables.getFirst(AbilityUtils.getDefinedPlayers(hostCard, sa.getParam("OptionalDecider"), sa), null); Player decider = Iterables.getFirst(AbilityUtils.getDefinedPlayers(hostCard, sa.getParam("OptionalDecider"), sa), null);
if (decider != null && !decider.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoyouWantDealTargetDamageTo").replace("%d", String.valueOf(dmg)) + " " + tgts + " ?")) { if (decider != null && !decider.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoyouWantDealTargetDamageToTarget", String.valueOf(dmg), tgts.toString()))) {
return; return;
} }
} }

View File

@@ -222,17 +222,17 @@ public class DigEffect extends SpellAbilityEffect {
} }
chooser.getController().endTempShowCards(); chooser.getController().endTempShowCards();
if (!movedCards.isEmpty()) { if (!movedCards.isEmpty()) {
game.getAction().reveal(movedCards, chooser, true, chooser + " " + Localizer.getInstance().getMessage("lblPicked") + " "); game.getAction().reveal(movedCards, chooser, true, Localizer.getInstance().getMessage("lblPlayerPickedChosen", chooser.getName(), ""));
} }
} }
else if (allButOne) { else if (allButOne) {
movedCards = new CardCollection(valid); movedCards = new CardCollection(valid);
String prompt; String prompt;
if (destZone2.equals(ZoneType.Library) && libraryPosition2 == 0) { if (destZone2.equals(ZoneType.Library) && libraryPosition2 == 0) {
prompt = Localizer.getInstance().getMessage("lblChooseACardToLeaveTargetLibraryTop").replace("%s", "{player's}"); prompt = Localizer.getInstance().getMessage("lblChooseACardToLeaveTargetLibraryTop", "{player's}");
} }
else { else {
prompt = Localizer.getInstance().getMessage("lblChooseACardLeaveTarget").replace("%s", "{player's}") + " " + destZone2.name(); prompt = Localizer.getInstance().getMessage("lblChooseACardLeaveTargetZone", "{player's}", destZone2.name());
} }
Card chosen = chooser.getController().chooseSingleEntityForEffect(valid, delayedReveal, sa, prompt, false, p); Card chosen = chooser.getController().chooseSingleEntityForEffect(valid, delayedReveal, sa, prompt, false, p);
@@ -246,12 +246,12 @@ public class DigEffect extends SpellAbilityEffect {
if (sa.hasParam("PrimaryPrompt")) { if (sa.hasParam("PrimaryPrompt")) {
prompt = sa.getParam("PrimaryPrompt"); prompt = sa.getParam("PrimaryPrompt");
} else { } else {
prompt = Localizer.getInstance().getMessage("lblChooseCardsPutInto") + " " + destZone1.name(); prompt = Localizer.getInstance().getMessage("lblChooseCardsPutIntoZone", destZone1.name());
if (destZone1.equals(ZoneType.Library)) { if (destZone1.equals(ZoneType.Library)) {
if (libraryPosition == -1) { if (libraryPosition == -1) {
prompt = Localizer.getInstance().getMessage("lblChooseCardPutOnTargetLibarayBottom").replace("%s", "{player's}"); prompt = Localizer.getInstance().getMessage("lblChooseCardPutOnTargetLibarayBottom", "{player's}");
} else if (libraryPosition == 0) { } else if (libraryPosition == 0) {
prompt = Localizer.getInstance().getMessage("lblChooseCardPutOnTargetLibarayTop").replace("%s", "{player's}"); prompt = Localizer.getInstance().getMessage("lblChooseCardPutOnTargetLibarayTop", "{player's}");
} }
} }
} }
@@ -276,10 +276,7 @@ public class DigEffect extends SpellAbilityEffect {
} }
if (!changeValid.isEmpty() && !sa.hasParam("ExileFaceDown") && !sa.hasParam("NoReveal")) { if (!changeValid.isEmpty() && !sa.hasParam("ExileFaceDown") && !sa.hasParam("NoReveal")) {
game.getAction().reveal(movedCards, chooser, true, game.getAction().reveal(movedCards, chooser, true, Localizer.getInstance().getMessage("lblPlayerPickedCardFrom", chooser.getName()));
chooser + " " + Localizer.getInstance().getMessage("lblPicked") + " " +
(movedCards.size() == 1 ? Localizer.getInstance().getMessage("lblThisCard") : Localizer.getInstance().getMessage("lblTheseCards")) +
" " + Localizer.getInstance().getMessage("lblFrom") + " ");
} }
} }
if (sa.hasParam("ForgetOtherRemembered")) { if (sa.hasParam("ForgetOtherRemembered")) {

View File

@@ -82,8 +82,7 @@ public class DigMultipleEffect extends SpellAbilityEffect {
CardCollection chosen = chooser.getController().chooseCardsForEffectMultiple(validMap, sa, Localizer.getInstance().getMessage("lblChooseCards")); CardCollection chosen = chooser.getController().chooseCardsForEffectMultiple(validMap, sa, Localizer.getInstance().getMessage("lblChooseCards"));
if (!chosen.isEmpty()) { if (!chosen.isEmpty()) {
game.getAction().reveal(chosen, chooser, true, game.getAction().reveal(chosen, chooser, true, Localizer.getInstance().getMessage("lblPlayerPickedCardFrom", chooser.getName()));
chooser + " " + Localizer.getInstance().getMessage("lblPicked") + " " + (chosen.size() == 1 ? Localizer.getInstance().getMessage("lblThisCard") : Localizer.getInstance().getMessage("lblTheseCards")) + " " + Localizer.getInstance().getMessage("lblFrom") + " ");
} }
for (Card c : chosen) { for (Card c : chosen) {

View File

@@ -160,7 +160,7 @@ public class DigUntilEffect extends SpellAbilityEffect {
final Card c = itr.next(); final Card c = itr.next();
final ZoneType origin = c.getZone().getZoneType(); final ZoneType origin = c.getZone().getZoneType();
if (optionalFound && !p.getController().confirmAction(sa, null, if (optionalFound && !p.getController().confirmAction(sa, null,
Localizer.getInstance().getMessage("lblDoYouWantPutCardTo") + " " + foundDest.name() + "?")) { Localizer.getInstance().getMessage("lblDoYouWantPutCardToZone", foundDest.name()))) {
continue; continue;
} else { } else {
Card m = null; Card m = null;

View File

@@ -206,7 +206,7 @@ public class DiscardEffect extends SpellAbilityEffect {
if (!p.canDiscardBy(sa)) { if (!p.canDiscardBy(sa)) {
continue; continue;
} }
String message = Localizer.getInstance().getMessage("lblWouldYouLikeRandomDiscardTargetCard").replace("%d", String.valueOf(numCards)); String message = Localizer.getInstance().getMessage("lblWouldYouLikeRandomDiscardTargetCard", String.valueOf(numCards));
boolean runDiscard = !sa.hasParam("Optional") || p.getController().confirmAction(sa, PlayerActionConfirmMode.Random, message); boolean runDiscard = !sa.hasParam("Optional") || p.getController().confirmAction(sa, PlayerActionConfirmMode.Random, message);
if (runDiscard) { if (runDiscard) {
@@ -326,8 +326,7 @@ public class DiscardEffect extends SpellAbilityEffect {
} }
if (mode.startsWith("Reveal") ) { if (mode.startsWith("Reveal") ) {
p.getController().reveal(toBeDiscarded, ZoneType.Hand, p, p.getController().reveal(toBeDiscarded, ZoneType.Hand, p, Localizer.getInstance().getMessage("lblPlayerHasChosenCardsFrom", chooser.getName()));
chooser + " " + Localizer.getInstance().getMessage("lblHasChosen") + " " + (toBeDiscarded.size() == 1 ? Localizer.getInstance().getMessage("lblThisCard") : Localizer.getInstance().getMessage("lblTheseCards")) + " " + Localizer.getInstance().getMessage("lblFrom") + " ");
} }
for (Card card : toBeDiscarded) { for (Card card : toBeDiscarded) {
if (card == null) { continue; } if (card == null) { continue; }

View File

@@ -50,7 +50,7 @@ public class DrawEffect extends SpellAbilityEffect {
for (final Player p : getDefinedPlayersOrTargeted(sa)) { for (final Player p : getDefinedPlayersOrTargeted(sa)) {
if ((tgt == null) || p.canBeTargetedBy(sa)) if ((tgt == null) || p.canBeTargetedBy(sa))
if (optional && !p.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWantDraw") + " " + Lang.nounWithAmount(numCards, " card") + "?")) if (optional && !p.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWantDrawCards", Lang.nounWithAmount(numCards, " card"))))
continue; continue;
int actualNum = numCards; int actualNum = numCards;

View File

@@ -45,9 +45,7 @@ public class EncodeEffect extends SpellAbilityEffect {
// Handle choice of whether or not to encoded // Handle choice of whether or not to encoded
final StringBuilder sb = new StringBuilder(); if (!player.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWantExileCardAndEncodeOntoYouCreature", host.toString()))) {
sb.append(Localizer.getInstance().getMessage("lblDoYouWantExile") + " ").append(host).append(" " + Localizer.getInstance().getMessage("lblAndEncodeOntoAYouControlCreature"));
if (!player.getController().confirmAction(sa, null, sb.toString())) {
return; return;
} }
@@ -58,11 +56,11 @@ public class EncodeEffect extends SpellAbilityEffect {
Card choice = player.getController().chooseSingleEntityForEffect(choices, sa, Localizer.getInstance().getMessage("lblChooseACreatureYouControlToEncode") + " ", true); Card choice = player.getController().chooseSingleEntityForEffect(choices, sa, Localizer.getInstance().getMessage("lblChooseACreatureYouControlToEncode") + " ", true);
if (choice == null) { if (choice == null) {
return; return;
} }
StringBuilder codeLog = new StringBuilder(); StringBuilder codeLog = new StringBuilder();
codeLog.append(Localizer.getInstance().getMessage("lblEncoding") + " ").append(host.toString()).append(" " + Localizer.getInstance().getMessage("lblTo") + " ").append(choice.toString()); codeLog.append("Encoding ").append(host.toString()).append(" to ").append(choice.toString());
game.getGameLog().add(GameLogEntryType.STACK_RESOLVE, codeLog.toString()); game.getGameLog().add(GameLogEntryType.STACK_RESOLVE, codeLog.toString());
// store hostcard in encoded array // store hostcard in encoded array

View File

@@ -112,7 +112,7 @@ public class ManaEffect extends SpellAbilityEffect {
return; return;
} }
game.action.nofityOfValue(sa, card, activator + " " + Localizer.getInstance().getMessage("lblPicked") + " " + choiceString, activator); game.action.nofityOfValue(sa, card, Localizer.getInstance().getMessage("lblPlayerPickedChosen", activator.getName(), choiceString), activator);
abMana.setExpressChoice(choiceString.toString()); abMana.setExpressChoice(choiceString.toString());
} }
} }
@@ -142,7 +142,7 @@ public class ManaEffect extends SpellAbilityEffect {
} }
choice = MagicColor.toShortString(val); choice = MagicColor.toShortString(val);
game.action.nofityOfValue(sa, card, act + " " + Localizer.getInstance().getMessage("lblPicked") + " " + choice, act); game.action.nofityOfValue(sa, card, Localizer.getInstance().getMessage("lblPlayerPickedChosen", act.getName(), choice), act);
abMana.setExpressChoice(choice); abMana.setExpressChoice(choice);
} }
} }
@@ -173,7 +173,7 @@ public class ManaEffect extends SpellAbilityEffect {
if (cs.isMonoColor()) if (cs.isMonoColor())
sb.append(MagicColor.toShortString(s.getColorMask())); sb.append(MagicColor.toShortString(s.getColorMask()));
else /* (cs.isMulticolor()) */ { else /* (cs.isMulticolor()) */ {
byte chosenColor = sa.getActivatingPlayer().getController().chooseColor(Localizer.getInstance().getMessage("lblChooseSingleColorFrom") + " " + s.toString(), sa, cs); byte chosenColor = sa.getActivatingPlayer().getController().chooseColor(Localizer.getInstance().getMessage("lblChooseSingleColorFromTarget", s.toString()), sa, cs);
sb.append(MagicColor.toShortString(chosenColor)); sb.append(MagicColor.toShortString(chosenColor));
} }
} }

View File

@@ -40,7 +40,7 @@ public class MillEffect extends SpellAbilityEffect {
for (final Player p : getTargetPlayers(sa)) { for (final Player p : getTargetPlayers(sa)) {
if (!sa.usesTargeting() || p.canBeTargetedBy(sa)) { if (!sa.usesTargeting() || p.canBeTargetedBy(sa)) {
if (sa.hasParam("Optional")) { if (sa.hasParam("Optional")) {
final String prompt = TextUtil.concatWithSpace(Localizer.getInstance().getMessage("lblDoYouWantPutLibraryCardsTo"), TextUtil.addSuffix(destination.toString(),"?")); final String prompt = TextUtil.concatWithSpace(Localizer.getInstance().getMessage("lblDoYouWantPutLibraryCardsTo", destination.toString()));
if (!p.getController().confirmAction(sa, null, prompt)) { if (!p.getController().confirmAction(sa, null, prompt)) {
continue; continue;
} }

View File

@@ -86,7 +86,7 @@ public class MultiplePilesEffect extends SpellAbilityEffect {
for (int i = 1; i < piles; i++) { for (int i = 1; i < piles; i++) {
int size = pool.size(); int size = pool.size();
CardCollectionView pile = p.getController().chooseCardsForEffect(pool, sa, Localizer.getInstance().getMessage("lblChooseCardsInPile") + " " + i, 0, size, false); CardCollectionView pile = p.getController().chooseCardsForEffect(pool, sa, Localizer.getInstance().getMessage("lblChooseCardsInTargetPile", String.valueOf(i)), 0, size, false);
pileList.add(pile); pileList.add(pile);
pool.removeAll(pile); pool.removeAll(pile);
} }

View File

@@ -3,7 +3,6 @@ package forge.game.ability.effects;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import forge.util.TextUtil;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
@@ -163,7 +162,7 @@ public class PlayEffect extends SpellAbilityEffect {
game.getAction().revealTo(tgtCard, activator); game.getAction().revealTo(tgtCard, activator);
} }
if (optional && !controller.getController().confirmAction(sa, null, TextUtil.concatWithSpace(Localizer.getInstance().getMessage("lblDoYouWantPlay"), TextUtil.addSuffix(tgtCard.toString(),"?")))) { if (optional && !controller.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWantPlayCard", tgtCard.toString()))) {
if (wasFaceDown) { if (wasFaceDown) {
tgtCard.turnFaceDownNoUpdate(); tgtCard.turnFaceDownNoUpdate();
} }

View File

@@ -328,7 +328,7 @@ public class PumpEffect extends SpellAbilityEffect {
final String targets = Lang.joinHomogenous(tgtCards); final String targets = Lang.joinHomogenous(tgtCards);
final String message = sa.hasParam("OptionQuestion") final String message = sa.hasParam("OptionQuestion")
? TextUtil.fastReplace(sa.getParam("OptionQuestion"), "TARGETS", targets) ? TextUtil.fastReplace(sa.getParam("OptionQuestion"), "TARGETS", targets)
: TextUtil.concatNoSpace(Localizer.getInstance().getMessage("lblApplyPumpTo") + " ", targets, "?"); : Localizer.getInstance().getMessage("lblApplyPumpToTarget", targets);
if (!sa.getActivatingPlayer().getController().confirmAction(sa, null, message)) { if (!sa.getActivatingPlayer().getController().confirmAction(sa, null, message)) {
return; return;

View File

@@ -26,7 +26,7 @@ public class RollPlanarDiceEffect extends SpellAbilityEffect {
game.getPhaseHandler().incPlanarDiceRolledthisTurn(); game.getPhaseHandler().incPlanarDiceRolledthisTurn();
} }
PlanarDice result = PlanarDice.roll(activator, null); PlanarDice result = PlanarDice.roll(activator, null);
String message = activator.getName() + " " + Localizer.getInstance().getMessage("lblRolled") + " " + result.toString(); String message = Localizer.getInstance().getMessage("lblPlayerRolledResult", activator.getName(), result.toString());
game.getAction().nofityOfValue(sa, activator, message, null); game.getAction().nofityOfValue(sa, activator, message, null);
} }

View File

@@ -18,14 +18,14 @@ public class RunSVarAbilityEffect extends SpellAbilityEffect {
String sVars = sa.getParam("SVars"); String sVars = sa.getParam("SVars");
List<Card> cards = getTargetCards(sa); List<Card> cards = getTargetCards(sa);
if (sVars == null || cards.isEmpty()) { if (sVars == null || cards.isEmpty()) {
return; return;
} }
List<SpellAbility> validSA = new ArrayList<>(); List<SpellAbility> validSA = new ArrayList<>();
final boolean isTrigger = sa.hasParam("IsTrigger"); final boolean isTrigger = sa.hasParam("IsTrigger");
for (final Card tgtC : cards) { for (final Card tgtC : cards) {
if (!tgtC.hasSVar(sVars)) { if (!tgtC.hasSVar(sVars)) {
continue; continue;
} }
final SpellAbility actualSA = AbilityFactory.getAbility(tgtC.getSVar(sVars), tgtC); final SpellAbility actualSA = AbilityFactory.getAbility(tgtC.getSVar(sVars), tgtC);
actualSA.setTrigger(isTrigger); actualSA.setTrigger(isTrigger);
actualSA.setActivatingPlayer(sa.getActivatingPlayer()); actualSA.setActivatingPlayer(sa.getActivatingPlayer());

View File

@@ -157,21 +157,21 @@ public class SacrificeEffect extends SpellAbilityEffect {
game.getTriggerHandler().runTrigger(TriggerType.Exploited, runParams, false); game.getTriggerHandler().runTrigger(TriggerType.Exploited, runParams, false);
} }
if (wasDestroyed || wasSacrificed) { if (wasDestroyed || wasSacrificed) {
countSacrificed++; countSacrificed++;
if (remSacrificed) { if (remSacrificed) {
card.addRemembered(lKICopy); card.addRemembered(lKICopy);
} }
} }
} }
} }
if (remSVar != null) { if (remSVar != null) {
card.setSVar(remSVar, String.valueOf(countSacrificed)); card.setSVar(remSVar, String.valueOf(countSacrificed));
SpellAbility root = sa; SpellAbility root = sa;
do { do {
root.setSVar(remSVar, String.valueOf(countSacrificed)); root.setSVar(remSVar, String.valueOf(countSacrificed));
root = root.getSubAbility(); root = root.getSubAbility();
} while (root != null); } while (root != null);
} }
} }
@@ -194,10 +194,10 @@ public class SacrificeEffect extends SpellAbilityEffect {
final int amount = AbilityUtils.calculateAmount(sa.getHostCard(), num, sa); final int amount = AbilityUtils.calculateAmount(sa.getHostCard(), num, sa);
if (valid.equals("Self")) { if (valid.equals("Self")) {
sb.append(Localizer.getInstance().getMessage("lblSacrifice") + " ").append(sa.getHostCard().toString()); sb.append("Sacrifices ").append(sa.getHostCard().toString());
} else if (valid.equals("Card.AttachedBy")) { } else if (valid.equals("Card.AttachedBy")) {
final Card toSac = sa.getHostCard().getEnchantingCard(); final Card toSac = sa.getHostCard().getEnchantingCard();
sb.append(toSac.getController()).append(" " + Localizer.getInstance().getMessage("lblSacrifice") + " ").append(toSac).append("."); sb.append(toSac.getController()).append(" Sacrifices ").append(toSac).append(".");
} else { } else {
for (final Player p : tgts) { for (final Player p : tgts) {
sb.append(p.getName()).append(" "); sb.append(p.getName()).append(" ");
@@ -209,9 +209,9 @@ public class SacrificeEffect extends SpellAbilityEffect {
} }
if (sa.hasParam("Destroy")) { if (sa.hasParam("Destroy")) {
sb.append(Localizer.getInstance().getMessage("lblDestroys") + " "); sb.append("Destroys ");
} else { } else {
sb.append(Localizer.getInstance().getMessage("lblSacrifice") + " "); sb.append("Sacrifices ");
} }
sb.append(amount).append(" ").append(msg).append("."); sb.append(amount).append(" ").append(msg).append(".");
} }

View File

@@ -42,10 +42,10 @@ public class ScryEffect extends SpellAbilityEffect {
// Optional here for spells that have optional multi-player scrying // Optional here for spells that have optional multi-player scrying
for (final Player p : getTargetPlayers(sa)) { for (final Player p : getTargetPlayers(sa)) {
if ( (!sa.usesTargeting() || p.canBeTargetedBy(sa)) && if ( (!sa.usesTargeting() || p.canBeTargetedBy(sa)) &&
(!isOptional || p.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWanttoScry"))) ) { (!isOptional || p.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWanttoScry"))) ) {
players.add(p); players.add(p);
} }
} }
sa.getActivatingPlayer().getGame().getAction().scry(players, num, sa); sa.getActivatingPlayer().getGame().getAction().scry(players, num, sa);
} }

View File

@@ -21,7 +21,7 @@ public class ShuffleEffect extends SpellAbilityEffect {
for (final Player p : tgtPlayers) { for (final Player p : tgtPlayers) {
if ((tgt == null) || p.canBeTargetedBy(sa)) { if ((tgt == null) || p.canBeTargetedBy(sa)) {
boolean mustShuffle = !optional || sa.getActivatingPlayer().getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblHaveTargetShuffle").replace("%s", p + "")); boolean mustShuffle = !optional || sa.getActivatingPlayer().getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblHaveTargetShuffle", p.getName()));
if (mustShuffle) if (mustShuffle)
p.shuffle(sa); p.shuffle(sa);
} }

View File

@@ -39,7 +39,7 @@ public class TapOrUntapEffect extends SpellAbilityEffect {
for (final Card tgtC : tgtCards) { for (final Card tgtC : tgtCards) {
if (tgtC.isInPlay() && ((tgt == null) || tgtC.canBeTargetedBy(sa))) { if (tgtC.isInPlay() && ((tgt == null) || tgtC.canBeTargetedBy(sa))) {
// If the effected card is controlled by the same controller of the SA, default to untap. // If the effected card is controlled by the same controller of the SA, default to untap.
boolean tap = pc.chooseBinary(sa, Localizer.getInstance().getMessage("lblTapOrUntap") + " " + tgtC + "?", PlayerController.BinaryChoiceType.TapOrUntap, boolean tap = pc.chooseBinary(sa, Localizer.getInstance().getMessage("lblTapOrUntapTarget", tgtC), PlayerController.BinaryChoiceType.TapOrUntap,
!tgtC.getController().equals(sa.getActivatingPlayer()) ); !tgtC.getController().equals(sa.getActivatingPlayer()) );
if (tap) { if (tap) {

View File

@@ -480,7 +480,7 @@ public class TokenEffect extends SpellAbilityEffect {
// into battlefield attacking only should work if you are the attacking player // into battlefield attacking only should work if you are the attacking player
if (combat.getAttackingPlayer().equals(controller)) { if (combat.getAttackingPlayer().equals(controller)) {
final FCollectionView<GameEntity> defs = combat.getDefenders(); final FCollectionView<GameEntity> defs = combat.getDefenders();
final GameEntity defender = controller.getController().chooseSingleEntityForEffect(defs, sa, Localizer.getInstance().getMessage("lblChooseDefenderToAttackWith") + " " + c, false); final GameEntity defender = controller.getController().chooseSingleEntityForEffect(defs, sa, Localizer.getInstance().getMessage("lblChooseDefenderToAttackWithCard", c.toString()), false);
combat.addAttacker(c, defender); combat.addAttacker(c, defender);
combatChanged = true; combatChanged = true;
} }