/** * Return a list of all players ignoring the range of visible players * * @return */ @Override public PlayerList getPlayerList() { return state.getPlayerList(); }
@Override public boolean apply(Game game, Ability source) { for (UUID playerId : game.getState().getPlayerList(source.getControllerId())) { Player player = game.getPlayer(playerId); if (player != null) { player.addCounters(CounterType.POISON.createInstance(), game); } } return true; }
switch (game.getAttackOption()) { case LEFT: players = game.getState().getPlayerList(attackingPlayerId); while (attackingPlayer.isInGame()) { Player opponent = players.getNext(game); players = game.getState().getPlayerList(attackingPlayerId); while (attackingPlayer.isInGame()) { Player opponent = players.getPrevious(game);
@Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { Map<UUID, Integer> destroyedCreatures = new HashMap<>(); for (Permanent permanent : game.getBattlefield().getActivePermanents(StaticFilters.FILTER_PERMANENT_CREATURE, source.getControllerId(), source.getSourceId(), game)) { if (permanent.destroy(source.getSourceId(), game, false)) { int count = destroyedCreatures.getOrDefault(permanent.getControllerId(), 0); destroyedCreatures.put(permanent.getControllerId(), count + 1); } } for (UUID playerId : game.getState().getPlayerList(source.getControllerId())) { int count = destroyedCreatures.getOrDefault(playerId, 0); if (count > 0) { Player player = game.getPlayer(playerId); if (player != null) { player.loseLife(count, game, false); } } } return true; } return false; } }
@Override public boolean apply(Game game, Ability source) { PlayerLostLifeWatcher watcher = game.getState().getWatcher(PlayerLostLifeWatcher.class); PlayerList playerList = game.getState().getPlayerList().copy(); Player currentPlayer; UUID sourcePlayerId = source.getControllerId(); Player firstPlayer; if (playerList == null) { return false; } firstPlayer = playerList.getCurrent(game); currentPlayer = playerList.getNext(game); while (watcher != null && currentPlayer != null) { if (!Objects.equals(currentPlayer.getId(), sourcePlayerId) && watcher.getLifeLost(currentPlayer.getId()) > 0) { return true; } if (Objects.equals(currentPlayer, firstPlayer)) { return false; } currentPlayer = playerList.getNext(game); } return false; }
@Override public boolean apply(Game game, Ability source) { Spell spell = game.getSpellOrLKIStack(this.getTargetPointer().getFirst(game, source)); Player player = game.getPlayer(source.getControllerId()); if (spell != null && player != null) { PlayerList range = game.getState().getPlayersInRange(player.getId(), game); for (UUID playerId : game.getState().getPlayerList(spell.getControllerId())) { if (!playerId.equals(spell.getControllerId()) && range.contains(playerId)) { spell.createCopyOnStack(game, source, playerId, true); } } return true; } return false; } }
@Override public boolean checkTrigger(GameEvent event, Game game) { if (!game.getCombat().getAttackers().contains(this.getSourceId())) { return false; } this.getTargets().clear(); for (UUID playerId : game.getState().getPlayerList(this.getControllerId())) { Player player = game.getPlayer(playerId); if (player == null) { continue; } FilterPermanent filter = new FilterPermanent("permanent controlled by " + player.getName()); filter.add(new ControllerIdPredicate(playerId)); TargetPermanent target = new TargetPermanent(filter); this.addTarget(target); } return true; }
protected int simulateCounterAttack(Game game, SimulationNode node, int alpha, int beta) { if (Thread.interrupted()) { Thread.currentThread().interrupt(); logger.debug(indent(node.depth) + "interrupted"); return GameStateEvaluator.evaluate(playerId, game); } Integer val = null; if (!game.checkIfGameIsOver()) { logger.debug(indent(node.depth) + "simulating -- ending turn"); simulateToEnd(game); game.getState().setActivePlayerId(game.getState().getPlayerList(game.getActivePlayerId()).getNext()); logger.debug(indent(node.depth) + "simulating -- counter attack for player " + game.getPlayer(game.getActivePlayerId()).getName()); game.getTurn().setPhase(new BeginningPhase()); if (game.getPhase().beginPhase(game, game.getActivePlayerId())) { simulateStep(game, new UntapStep()); simulateStep(game, new UpkeepStep()); simulateStep(game, new DrawStep()); game.getPhase().endPhase(game, game.getActivePlayerId()); } //TODO: calculate opponent actions before combat val = simulateCombat(game, node, alpha, beta, true); if (logger.isDebugEnabled()) logger.debug(indent(node.depth) + "returning -- counter attack score: " + val + " depth:" + node.depth + " for player:" + game.getPlayer(node.getPlayerId()).getName()); } if (val == null) val = GameStateEvaluator.evaluate(playerId, game); return val; }
@Override public boolean apply(Game game, Ability source) { Permanent permanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); if (permanent == null) { return false; } boolean costPaid = false; for (UUID playerId : game.getState().getPlayerList(source.getControllerId())) { Player player = game.getPlayer(playerId); if (player == null) { continue; } if (player.chooseUse(Outcome.UnboostCreature, "Have " + permanent.getName() + " deal 4 damage to you?", source, game)) { player.damage(4, permanent.getId(), game, false, true); costPaid = true; } } if (!costPaid) { return new BoostSourceEffect(2, 2, Duration.EndOfTurn).apply(game, source); } return true; } }
@Override protected void init(UUID choosingPlayerId) { Ability ability = new SimpleStaticAbility(Zone.COMMAND, new InfoEffect("Vanguard effects")); for (UUID playerId : state.getPlayerList(startingPlayerId)) { Player player = getPlayer(playerId); if (player != null) { CardInfo cardInfo = CardRepository.instance.findCard("Momir Vig, Simic Visionary"); addEmblem(new MomirEmblem(), cardInfo.getCard(), playerId); } } getState().addAbility(ability, null); super.init(choosingPlayerId); state.getTurnMods().add(new TurnMod(startingPlayerId, PhaseStep.DRAW)); }
@Override protected void init(UUID choosingPlayerId) { Ability ability = new SimpleStaticAbility(Zone.COMMAND, new InfoEffect("Vanguard effects")); for (UUID playerId : state.getPlayerList(startingPlayerId)) { Player player = getPlayer(playerId); if (player != null) { CardInfo cardInfo = CardRepository.instance.findCard("Momir Vig, Simic Visionary"); addEmblem(new MomirEmblem(), cardInfo.getCard(), playerId); } } getState().addAbility(ability, null); super.init(choosingPlayerId); state.getTurnMods().add(new TurnMod(startingPlayerId, PhaseStep.DRAW)); }
@Override public boolean apply(Game game, Ability source) { MageObject sourceObject = source.getSourceObject(game); if (sourceObject != null) { for (UUID playerId : game.getState().getPlayerList(source.getControllerId())) { Player player = game.getPlayer(playerId); if (player != null && player.chooseUse(outcome, "Pay half your life, rounded up to counter " + sourceObject.getIdName() + '?', source, game)) { int amount = (int) Math.ceil(player.getLife() / 2f); player.loseLife(amount, game, false); game.informPlayers(player.getLogName() + " pays half their life, rounded up to counter " + sourceObject.getIdName() + '.'); Spell spell = game.getStack().getSpell(source.getSourceId()); if (spell != null) { game.getStack().counter(spell.getId(), source.getSourceId(), game); } } } return true; } return false; }
@Override public boolean apply(Game game, Ability source) { Iterator<Permanent> permanents = game.getBattlefield().getActivePermanents(source.getControllerId(), game).iterator(); while (permanents.hasNext()) { boolean paidLife = false; Permanent p = permanents.next(); if (p.isLand()) { game.informPlayers("Any player may pay 1 life to prevent the destruction of " + p.getLogName() + " controlled by " + game.getPlayer(p.getControllerId()).getLogName() + "."); PayLifeCost cost = new PayLifeCost(1); for (UUID playerId : game.getState().getPlayerList(source.getControllerId())) { Player player = game.getPlayer(playerId); if(player != null) { cost.clearPaid(); if (cost.canPay(source, source.getSourceId(), player.getId(), game) && player.chooseUse(outcome, "Pay 1 life to prevent this?", source, game)) { if (cost.pay(source, game, source.getSourceId(), player.getId(), false, null)) { game.informPlayers(player.getLogName() + " pays 1 life to prevent the destruction of " + p.getLogName()); paidLife = true; } } } } if (!paidLife) { p.destroy(source.getSourceId(), game, false); } } } return true; }
game.informPlayers(sourceObject.getLogName() + " - All permanents returned to owners' hands"); for (UUID playerId : game.getState().getPlayerList(controller.getId())) { Player player = game.getPlayer(playerId); if (player != null) {
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new InfoEffect("Commander effects")); for (UUID playerId : state.getPlayerList(startingPlayerId)) { Player player = getPlayer(playerId); if (player != null) {
@Override public void resume() { playerList = state.getPlayerList(state.getActivePlayerId()); Player player = getPlayer(playerList.get()); boolean wasPaused = state.isPaused(); state.resume(); if (!checkIfGameIsOver()) { fireInformEvent("Turn " + state.getTurnNum()); if (checkStopOnTurnOption()) { return; } state.getTurn().resumePlay(this, wasPaused); if (!isPaused() && !checkIfGameIsOver()) { endOfTurn(); player = playerList.getNext(this); state.setTurnNum(state.getTurnNum() + 1); } } play(player.getId()); }
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new InfoEffect("Commander effects")); for (UUID playerId : state.getPlayerList(startingPlayerId)) { Player player = getPlayer(playerId); if (player != null) {
@Override public boolean apply(Game game, Ability source) { MageObject sourceObject = source.getSourceObject(game); if (sourceObject != null) { PayLifeCost cost = new PayLifeCost(5); for (UUID playerId : game.getState().getPlayerList(source.getControllerId())) { Player player = game.getPlayer(playerId); if(player != null) { cost.clearPaid(); if (cost.canPay(source, source.getSourceId(), player.getId(), game) && player.chooseUse(outcome, "Pay 5 life to counter " + sourceObject.getIdName() + '?', source, game)) { if (cost.pay(source, game, source.getSourceId(), player.getId(), false, null)) { game.informPlayers(player.getLogName() + " pays 5 life to counter " + sourceObject.getIdName() + '.'); Spell spell = game.getStack().getSpell(source.getSourceId()); if (spell != null) { game.getStack().counter(spell.getId(), source.getSourceId(), game); } } } } } return true; } return false; }
@Override public boolean apply(Game game, Ability source) { MageObject sourceObject = source.getSourceObject(game); if (sourceObject != null) { SacrificeTargetCost cost = new SacrificeTargetCost(new TargetControlledCreaturePermanent(FILTER_CONTROLLED_CREATURE_SHORT_TEXT)); for (UUID playerId : game.getState().getPlayerList(source.getControllerId())) { cost.clearPaid(); Player player = game.getPlayer(playerId); if (player != null && cost.canPay(source, source.getSourceId(), player.getId(), game) && player.chooseUse(outcome, "Sacrifice a creature to counter " + sourceObject.getIdName() + '?', source, game)) { if (cost.pay(source, game, source.getSourceId(), player.getId(), false, null)) { game.informPlayers(player.getLogName() + " sacrifices a creature to counter " + sourceObject.getIdName() + '.'); Spell spell = game.getStack().getSpell(source.getSourceId()); if (spell != null) { game.getStack().counter(spell.getId(), source.getSourceId(), game); } } } } return true; } return false; } }
@Override public boolean apply(Game game, Ability source) { MageObject sourceObject = source.getSourceObject(game); if (sourceObject != null) { DiscardTargetCost cost = new DiscardTargetCost(new TargetCardInHand(3, 3, new FilterCard())); for (UUID playerId : game.getState().getPlayerList(source.getControllerId())) { Player player = game.getPlayer(playerId); cost.clearPaid(); if (player != null && cost.canPay(source, source.getSourceId(), player.getId(), game) && player.chooseUse(outcome, "Discard three cards to counter " + sourceObject.getIdName() + '?', source, game)) { if (cost.pay(source, game, source.getSourceId(), playerId, false, null)) { game.informPlayers(player.getLogName() + " discards 3 cards to counter " + sourceObject.getIdName() + '.'); Spell spell = game.getStack().getSpell(source.getSourceId()); if (spell != null) { game.getStack().counter(spell.getId(), source.getSourceId(), game); } } } } return true; } return false; }