From 05cb449cb97adc9c84b8cee98853fa247077afbe Mon Sep 17 00:00:00 2001 From: elcnesh Date: Mon, 28 Jul 2014 14:35:57 +0000 Subject: [PATCH] Remove some references to Player.getOpponent (fixing cards for multiplayer games). --- .../main/java/forge/game/CardTraitBase.java | 15 +++----- forge-game/src/main/java/forge/game/Game.java | 38 ------------------- .../main/java/forge/game/player/Player.java | 9 +++++ .../forge/game/trigger/TriggerAttacks.java | 6 +++ .../res/cardsfolder/l/lurking_jackals.txt | 4 +- forge-gui/res/cardsfolder/s/septic_rats.txt | 2 +- 6 files changed, 23 insertions(+), 51 deletions(-) diff --git a/forge-game/src/main/java/forge/game/CardTraitBase.java b/forge-game/src/main/java/forge/game/CardTraitBase.java index 401161dc378..37b2d5508e9 100644 --- a/forge-game/src/main/java/forge/game/CardTraitBase.java +++ b/forge-game/src/main/java/forge/game/CardTraitBase.java @@ -168,14 +168,6 @@ public abstract class CardTraitBase extends GameObject { if ("True".equalsIgnoreCase(params.get("Bloodthirst")) && !hostController.hasBloodthirst()) return false; if ("True".equalsIgnoreCase(params.get("FatefulHour")) && hostController.getLife() > 5) return false; - if ("You".equalsIgnoreCase(params.get("PlayersPoisoned")) && hostController.getPoisonCounters() == 0) return false; - if ("Opponent".equalsIgnoreCase(params.get("PlayersPoisoned")) && hostController.getOpponent().getPoisonCounters() == 0) return false; - if ("Each".equalsIgnoreCase(params.get("PlayersPoisoned"))) { - for( Player p : game.getPlayers()) - if( p.getPoisonCounters() == 0 ) - return false; - } - if (params.containsKey("LifeTotal")) { final String player = params.get("LifeTotal"); String lifeCompare = "GE1"; @@ -184,8 +176,11 @@ public abstract class CardTraitBase extends GameObject { if (player.equals("You")) { life = hostController.getLife(); } - if (player.equals("Opponent")) { - life = hostController.getOpponent().getLife(); + if (player.equals("OpponentSmallest")) { + life = hostController.getOpponentsSmallestLifeTotal(); + } + if (player.equals("OpponentGreatest")) { + life = hostController.getOpponentsGreatestLifeTotal(); } if (player.equals("ActivePlayer")) { life = game.getPhaseHandler().getPlayerTurn().getLife(); diff --git a/forge-game/src/main/java/forge/game/Game.java b/forge-game/src/main/java/forge/game/Game.java index 5844c507c80..141725d26c8 100644 --- a/forge-game/src/main/java/forge/game/Game.java +++ b/forge-game/src/main/java/forge/game/Game.java @@ -461,44 +461,6 @@ public class Game { return card; } - /** - *

- * compareTypeAmountInPlay. - *

- * - * @param player - * a {@link forge.game.player.Player} object. - * @param type - * a {@link java.lang.String} object. - * @return a int. - */ - public static int compareTypeAmountInPlay(final Player player, final String type) { - // returns the difference between player's - final Player opponent = player.getOpponent(); - final List playerList = CardLists.getType(player.getCardsIn(ZoneType.Battlefield), type); - final List opponentList = CardLists.getType(opponent.getCardsIn(ZoneType.Battlefield), type); - return (playerList.size() - opponentList.size()); - } - - /** - *

- * compareTypeAmountInGraveyard. - *

- * - * @param player - * a {@link forge.game.player.Player} object. - * @param type - * a {@link java.lang.String} object. - * @return a int. - */ - public static int compareTypeAmountInGraveyard(final Player player, final String type) { - // returns the difference between player's - final Player opponent = player.getOpponent(); - final List playerList = CardLists.getType(player.getCardsIn(ZoneType.Graveyard), type); - final List opponentList = CardLists.getType(opponent.getCardsIn(ZoneType.Graveyard), type); - return (playerList.size() - opponentList.size()); - } - public List getCardsInGame() { final List all = new ArrayList(); for (final Player player : getPlayers()) { diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index 2cd77b28627..c561d7ef6fa 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -308,6 +308,15 @@ public class Player extends GameEntity implements Comparable { return result; } + /** + * Find the smallest life total amongst this player's opponents. + * + * @return the life total of the opponent with the least life. + */ + public final int getOpponentsSmallestLifeTotal() { + return Aggregates.min(this.getOpponents(), Accessors.FN_GET_LIFE_TOTAL); + } + /** * Find the greatest life total amongst this player's opponents. * diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerAttacks.java b/forge-game/src/main/java/forge/game/trigger/TriggerAttacks.java index c8eba13fe3e..d43e375aa50 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerAttacks.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerAttacks.java @@ -93,6 +93,12 @@ public class TriggerAttacks extends Trigger { } } + if (this.mapParams.containsKey("DefendingPlayerPoisoned")) { + if (((Player) runParams2.get("Attacked")).getPoisonCounters() == 0) { + return false; + } + } + return true; } diff --git a/forge-gui/res/cardsfolder/l/lurking_jackals.txt b/forge-gui/res/cardsfolder/l/lurking_jackals.txt index 05e08793605..a020794f4b9 100644 --- a/forge-gui/res/cardsfolder/l/lurking_jackals.txt +++ b/forge-gui/res/cardsfolder/l/lurking_jackals.txt @@ -1,7 +1,7 @@ Name:Lurking Jackals ManaCost:B Types:Enchantment -T:Mode$ Always | LifeTotal$ Opponent | LifeAmount$ LE10 | TriggerZones$ Battlefield | Execute$ TrigLurkingJackalsAnimate | IsPresent$ Card.Self+Enchantment | ResolvingCheck$ IsPresent | TriggerDescription$ When an opponent has 10 or less life, if CARDNAME is an enchantment, CARDNAME becomes a 3/2 Hound creature. +T:Mode$ Always | LifeTotal$ OpponentSmallest | LifeAmount$ LE10 | TriggerZones$ Battlefield | Execute$ TrigLurkingJackalsAnimate | IsPresent$ Card.Self+Enchantment | ResolvingCheck$ IsPresent | TriggerDescription$ When an opponent has 10 or less life, if CARDNAME is an enchantment, CARDNAME becomes a 3/2 Hound creature. SVar:TrigLurkingJackalsAnimate:AB$ Animate | Cost$ 0 | Types$ Creature,Hound | Power$ 3 | Toughness$ 2 | OverwriteTypes$ True | Permanent$ True SVar:Picture:http://www.wizards.com/global/images/magic/general/lurking_jackals.jpg -Oracle:When an opponent has 10 or less life, if Lurking Jackals is an enchantment, it becomes a 3/2 Hound creature. +Oracle:When an opponent has 10 or less life, if Lurking Jackals is an enchantment, it becomes a 3/2 Hound creature. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/s/septic_rats.txt b/forge-gui/res/cardsfolder/s/septic_rats.txt index f2efe3bac08..f11f978e8df 100644 --- a/forge-gui/res/cardsfolder/s/septic_rats.txt +++ b/forge-gui/res/cardsfolder/s/septic_rats.txt @@ -3,7 +3,7 @@ ManaCost:1 B B Types:Creature Rat PT:2/2 K:Infect -T:Mode$ Attacks | ValidCard$ Creature.Self | TriggerZones$ Battlefield | PlayersPoisoned$ Opponent | Execute$ TrigPump | TriggerDescription$ When CARDNAME attacks, if defending player is poisoned, it gets +1/+1 until end of turn. +T:Mode$ Attacks | ValidCard$ Creature.Self | TriggerZones$ Battlefield | DefendingPlayerPoisoned$ True | Execute$ TrigPump | TriggerDescription$ When CARDNAME attacks, if defending player is poisoned, it gets +1/+1 until end of turn. SVar:TrigPump:AB$Pump | Cost$ 0 | NumAtt$ 1 | NumDef$ 1 | Defined$ Self SVar:Picture:http://www.wizards.com/global/images/magic/general/septic_rats.jpg Oracle:Infect (This creature deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.)\nWhenever Septic Rats attacks, if defending player is poisoned, it gets +1/+1 until end of turn.