* Browbeat - Fixed player list handling.

This commit is contained in:
LevelX2 2015-06-23 01:09:31 +02:00
parent 67e9ee1fa9
commit c7184a6055
2 changed files with 31 additions and 18 deletions

View file

@ -28,22 +28,17 @@
package mage.sets.judgment; package mage.sets.judgment;
import java.util.UUID; import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.Mode;
import mage.abilities.costs.common.DiscardTargetCost;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.Rarity; import mage.constants.Rarity;
import mage.filter.FilterCard;
import mage.game.Game; import mage.game.Game;
import mage.game.stack.Spell; import mage.game.stack.Spell;
import mage.game.stack.StackObject; import mage.game.stack.StackObject;
import mage.players.Player; import mage.players.Player;
import mage.target.TargetPlayer; import mage.target.TargetPlayer;
import mage.target.common.TargetCardInHand;
/** /**
* *
@ -55,7 +50,6 @@ public class Browbeat extends CardImpl {
super(ownerId, 82, "Browbeat", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{2}{R}"); super(ownerId, 82, "Browbeat", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{2}{R}");
this.expansionSetCode = "JUD"; this.expansionSetCode = "JUD";
// Any player may have Browbeat deal 5 damage to him or her. If no one does, target player draws three cards. // Any player may have Browbeat deal 5 damage to him or her. If no one does, target player draws three cards.
this.getSpellAbility().addEffect(new BrowbeatDrawEffect()); this.getSpellAbility().addEffect(new BrowbeatDrawEffect());
this.getSpellAbility().addTarget(new TargetPlayer()); this.getSpellAbility().addTarget(new TargetPlayer());
@ -75,6 +69,7 @@ class BrowbeatDrawEffect extends OneShotEffect {
public BrowbeatDrawEffect() { public BrowbeatDrawEffect() {
super(Outcome.DrawCard); super(Outcome.DrawCard);
staticText = "Any player may have {source} deal 5 damage to him or her. If no one does, target player draws three cards.";
} }
public BrowbeatDrawEffect(final BrowbeatDrawEffect effect) { public BrowbeatDrawEffect(final BrowbeatDrawEffect effect) {
@ -88,6 +83,10 @@ class BrowbeatDrawEffect extends OneShotEffect {
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller == null) {
return false;
}
StackObject spell = null; StackObject spell = null;
for(StackObject object : game.getStack()){ for(StackObject object : game.getStack()){
if(object instanceof Spell && object.getSourceId().equals(source.getSourceId())){ if(object instanceof Spell && object.getSourceId().equals(source.getSourceId())){
@ -96,12 +95,12 @@ class BrowbeatDrawEffect extends OneShotEffect {
} }
if(spell != null){ if(spell != null){
boolean drawCards = true; boolean drawCards = true;
for(UUID uuid : game.getPlayerList()){ for(UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)){
Player player = game.getPlayer(uuid); Player player = game.getPlayer(playerId);
if(player != null && player.chooseUse(Outcome.Detriment, "Have " + spell.getName() + " deal 5 damage to you?", game)){ if (player != null && player.chooseUse(Outcome.Detriment, "Have " + spell.getLogName() + " deal 5 damage to you?", game)){
drawCards = false; drawCards = false;
player.damage(5, source.getSourceId(), game, false, true); player.damage(5, source.getSourceId(), game, false, true);
game.informPlayers(player.getLogName() + " has " + spell.getName() + " deal 5 to him or her"); game.informPlayers(player.getLogName() + " has " + spell.getLogName() + " deal 5 to him or her");
} }
} }
if (drawCards) { if (drawCards) {
@ -116,11 +115,4 @@ class BrowbeatDrawEffect extends OneShotEffect {
return false; return false;
} }
@Override
public String getText(Mode mode) {
if (staticText != null && !staticText.isEmpty()) {
return staticText;
}
return "Any player may have {source} deal 5 damage to him or her. If no one does, target player draws three cards.";
}
} }

View file

@ -585,6 +585,27 @@ public class GameState implements Serializable, Copyable<GameState> {
newPlayerList.setCurrent(playerId); newPlayerList.setCurrent(playerId);
return newPlayerList; return newPlayerList;
} }
/**
* Returns a list of all active players of the game in range of playerId,
* also setting the playerId to the current player of the list.
*
* @param playerId
* @param game
* @return playerList
*/
public PlayerList getPlayersInRange(UUID playerId, Game game) {
PlayerList newPlayerList = new PlayerList();
Player currentPlayer = game.getPlayer(playerId);
if (currentPlayer != null) {
for (Player player: players.values()) {
if (!player.hasLeft()&& !player.hasLost() && currentPlayer.getInRange().contains(player.getId())) {
newPlayerList.add(player.getId());
}
}
newPlayerList.setCurrent(playerId);
}
return newPlayerList;
}
public Permanent getPermanent(UUID permanentId) { public Permanent getPermanent(UUID permanentId) {
if (permanentId != null && battlefield.containsPermanent(permanentId)) { if (permanentId != null && battlefield.containsPermanent(permanentId)) {