from trunk

This commit is contained in:
Maxmtg
2013-03-27 09:03:56 +00:00
39 changed files with 192 additions and 35 deletions

View File

@@ -6646,6 +6646,18 @@ public class Card extends GameEntity implements Comparable<Card> {
}
}
return false;
} else if (restriction.equals("EachTopLibrary")) {
final List<Card> list = new ArrayList<Card>();
for (Player p : Singletons.getModel().getGame().getPlayers()) {
final Card top = p.getCardsIn(ZoneType.Library).get(0);
list.add(top);
}
for (Card c : list) {
if (this.sharesCardTypeWith(c)) {
return true;
}
}
return false;
}
}
} else if (property.startsWith("sharesNameWith")) {

View File

@@ -1071,7 +1071,7 @@ public class ChangeZoneAi extends SpellAbilityAi {
if (tgt != null) {
if (!tgt.getTargetPlayers().isEmpty()) {
player = tgt.getTargetPlayers().get(0);
player = player != null ? player : tgt.getTargetPlayers().get(0);
if (!player.canBeTargetedBy(sa)) {
return;
}

View File

@@ -21,6 +21,7 @@ import forge.card.spellability.SpellAbilityStackInstance;
import forge.card.spellability.Target;
import forge.card.trigger.TriggerType;
import forge.game.ai.ComputerUtilCard;
import forge.game.player.AIPlayer;
import forge.game.player.Player;
import forge.game.zone.Zone;
import forge.game.zone.ZoneType;
@@ -523,7 +524,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
if (decider == null) {
decider = player;
}
if (decider.isComputer()) {
if (decider instanceof AIPlayer) {
ChangeZoneAi.hiddenOriginResolveAI(decider, sa, player);
} else {
changeHiddenOriginResolveHuman(sa, player);
@@ -547,11 +548,12 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
final Card card = sa.getSourceCard();
final List<Card> movedCards = new ArrayList<Card>();
final boolean defined = sa.hasParam("Defined");
final boolean optional = sa.hasParam("Optional");
final Target tgt = sa.getTarget();
if (tgt != null) {
final ArrayList<Player> players = tgt.getTargetPlayers();
player = players.get(0);
player = player != null ? player : players.get(0);
if (players.contains(player) && !player.canBeTargetedBy(sa)) {
return;
}
@@ -595,6 +597,10 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
int changeNum = sa.hasParam("ChangeNum") ? AbilityUtils.calculateAmount(card, sa.getParam("ChangeNum"),
sa) : 1;
if (optional && !GuiDialog.confirm(card, "Search " + origin + "?")) {
return;
}
List<Card> fetchList;
if (defined) {
fetchList = new ArrayList<Card>(AbilityUtils.getDefinedCards(card, sa.getParam("Defined"), sa));

View File

@@ -83,5 +83,6 @@ public class TriggerDrawn extends Trigger {
@Override
public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Card", this.getRunParams().get("Card"));
sa.setTriggeringObject("Player", this.getRunParams().get("Player"));
}
}

View File

@@ -486,7 +486,7 @@ public class GameState {
public String getOrdinalPosition(Player player, Player startingPlayer) {
int startPosition = roIngamePlayers.indexOf(startingPlayer);
int position = roIngamePlayers.indexOf(player) + startPosition + 1;
int position = (roIngamePlayers.indexOf(player) + startPosition) % roIngamePlayers.size() + 1;
String[] sufixes = new String[] { "th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th" };
switch (position % 100) {
case 11:

View File

@@ -1393,6 +1393,7 @@ public abstract class Player extends GameEntity implements Comparable<Player> {
final HashMap<String, Object> runParams = new HashMap<String, Object>();
runParams.put("Card", c);
runParams.put("Number", this.numDrawnThisTurn);
runParams.put("Player", this);
game.getTriggerHandler().runTrigger(TriggerType.Drawn, runParams, false);
}
// lose:
@@ -2490,7 +2491,7 @@ public abstract class Player extends GameEntity implements Comparable<Player> {
} else if (property.startsWith("withMore")) {
final String cardType = property.split("sThan")[0].substring(8);
final List<Card> oppList = CardLists.filter(this.getCardsIn(ZoneType.Battlefield), CardPredicates.isType(cardType));
final List<Card> yourList = CardLists.filter(source.getController().getCardsIn(ZoneType.Battlefield), CardPredicates.isType(cardType));
final List<Card> yourList = CardLists.filter(sourceController.getCardsIn(ZoneType.Battlefield), CardPredicates.isType(cardType));
if (oppList.size() <= yourList.size()) {
return false;
}

View File

@@ -404,7 +404,7 @@ public class CardDetailPanel extends FPanel {
if ((card.hasKeyword("Play with the top card of your library revealed.") || card
.hasKeyword("Players play with the top card of their libraries revealed."))
&& (card.getController() != null)
&& (card.isInZone(ZoneType.Battlefield) || (card.isType("Vanguard") && card.isInZone(ZoneType.Command)))
&& (card.isInZone(ZoneType.Battlefield) || ((card.isType("Vanguard") || card.isType("Plane")) && card.isInZone(ZoneType.Command)))
&& !card.getController().getZone(ZoneType.Library).isEmpty()) {
area.append("\r\nTop card of your library: ");
area.append(card.getController().getCardsIn(ZoneType.Library, 1));