mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 03:38:01 +00:00
@@ -3478,8 +3478,8 @@ public class AbilityUtils {
|
||||
}
|
||||
|
||||
if (value.equals("OpponentsAttackedThisTurn")) {
|
||||
final List<Player> opps = player.getAttackedPlayersMyTurn();
|
||||
return doXMath(opps == null ? 0 : opps.size(), m, source, ctb);
|
||||
final Iterable<Player> opps = player.getAttackedPlayersMyTurn();
|
||||
return doXMath(opps == null ? 0 : Iterables.size(opps), m, source, ctb);
|
||||
}
|
||||
|
||||
if (value.equals("OpponentsAttackedThisCombat")) {
|
||||
|
||||
@@ -407,10 +407,7 @@ public class CombatUtil {
|
||||
|
||||
c.getDamageHistory().setCreatureAttackedThisCombat(defender);
|
||||
c.getDamageHistory().clearNotAttackedSinceLastUpkeepOf();
|
||||
c.getController().addCreaturesAttackedThisTurn(CardUtil.getLKICopy(c));
|
||||
if (defender instanceof Player) {
|
||||
c.getController().addAttackedPlayersMyTurn(combat.getDefenderPlayerByAttacker(c));
|
||||
}
|
||||
c.getController().addCreaturesAttackedThisTurn(CardUtil.getLKICopy(c), defender);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -24,6 +24,7 @@ import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Deque;
|
||||
import java.util.EnumSet;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -202,9 +203,8 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
|
||||
private Table<Long, Long, KeywordsChange> changedKeywords = TreeBasedTable.create();
|
||||
private ManaPool manaPool = new ManaPool(this);
|
||||
private List<Card> creatureAttackedThisTurn = new ArrayList<>();
|
||||
private List<Player> attackedPlayersThisTurn = new ArrayList<>();
|
||||
private List <Player> attackedPlayersLastTurn = new ArrayList<>();
|
||||
private Map<GameEntity, List<Card>> attackedThisTurn = new HashMap<>();
|
||||
private List<Player> attackedPlayersLastTurn = new ArrayList<>();
|
||||
private List<Player> attackedPlayersThisCombat = new ArrayList<>();
|
||||
|
||||
private boolean activateLoyaltyAbilityThisTurn = false;
|
||||
@@ -1826,37 +1826,37 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
}
|
||||
|
||||
public final List<Card> getCreaturesAttackedThisTurn() {
|
||||
return creatureAttackedThisTurn;
|
||||
List<Card> result = Lists.newArrayList(Iterables.concat(attackedThisTurn.values()));
|
||||
return result;
|
||||
}
|
||||
public final void addCreaturesAttackedThisTurn(final Card c) {
|
||||
creatureAttackedThisTurn.add(c);
|
||||
public final List<Card> getCreaturesAttackedThisTurn(final GameEntity e) {
|
||||
return attackedThisTurn.getOrDefault(e, Lists.newArrayList());
|
||||
}
|
||||
public final void clearCreaturesAttackedThisTurn() {
|
||||
creatureAttackedThisTurn.clear();
|
||||
}
|
||||
|
||||
public final void addAttackedPlayersMyTurn(final Player p) {
|
||||
if (!attackedPlayersThisTurn.contains(p)) {
|
||||
attackedPlayersThisCombat.add(p);
|
||||
attackedPlayersThisTurn.add(p);
|
||||
public final void addCreaturesAttackedThisTurn(final Card c, final GameEntity e) {
|
||||
final List<Card> creatures = attackedThisTurn.getOrDefault(e, Lists.newArrayList());
|
||||
creatures.add(c);
|
||||
attackedThisTurn.putIfAbsent(e, creatures);
|
||||
if (e instanceof Player && !attackedPlayersThisCombat.contains(e)) {
|
||||
attackedPlayersThisCombat.add((Player) e);
|
||||
}
|
||||
}
|
||||
public final List<Player> getAttackedPlayersMyTurn() {
|
||||
return attackedPlayersThisTurn;
|
||||
|
||||
public final Iterable<Player> getAttackedPlayersMyTurn() {
|
||||
return Iterables.filter(attackedThisTurn.keySet(), Player.class);
|
||||
}
|
||||
public final List<Player> getAttackedPlayersMyLastTurn() {
|
||||
return attackedPlayersLastTurn;
|
||||
}
|
||||
public final void clearAttackedPlayersMyTurn() {
|
||||
attackedPlayersThisTurn.clear();
|
||||
public final void clearAttackedMyTurn() {
|
||||
attackedThisTurn.clear();
|
||||
}
|
||||
public final void setAttackedPlayersMyLastTurn(List<Player> players) {
|
||||
public final void setAttackedPlayersMyLastTurn(Iterable<Player> players) {
|
||||
attackedPlayersLastTurn.clear();
|
||||
attackedPlayersLastTurn.addAll(players);
|
||||
Iterables.addAll(attackedPlayersLastTurn, players);
|
||||
}
|
||||
|
||||
public final List<Player> getAttackedPlayersMyCombat() {
|
||||
return attackedPlayersThisTurn;
|
||||
return attackedPlayersThisCombat;
|
||||
}
|
||||
public final void clearAttackedPlayersMyCombat() {
|
||||
attackedPlayersThisCombat.clear();
|
||||
@@ -2390,7 +2390,6 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
resetNumForetoldThisTurn();
|
||||
resetNumTokenCreatedThisTurn();
|
||||
setNumCardsInHandStartedThisTurnWith(getCardsIn(ZoneType.Hand).size());
|
||||
clearCreaturesAttackedThisTurn();
|
||||
setActivateLoyaltyAbilityThisTurn(false);
|
||||
setTappedLandForManaThisTurn(false);
|
||||
setLandsPlayedLastTurn(getLandsPlayedThisTurn());
|
||||
@@ -2417,8 +2416,8 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
|
||||
// set last turn nr
|
||||
if (game.getPhaseHandler().isPlayerTurn(this)) {
|
||||
setAttackedPlayersMyLastTurn(attackedPlayersThisTurn);
|
||||
clearAttackedPlayersMyTurn();
|
||||
setAttackedPlayersMyLastTurn(getAttackedPlayersMyTurn());
|
||||
clearAttackedMyTurn();
|
||||
this.lastTurnNr = game.getPhaseHandler().getTurn();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -381,6 +381,14 @@ public class PlayerProperty {
|
||||
if (player.getCreaturesAttackedThisTurn().isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
} else if (property.startsWith("wasAttackedThisTurnBy")) {
|
||||
String restriction = property.split(" ")[1];
|
||||
for (Card c : sourceController.getCreaturesAttackedThisTurn(player)) {
|
||||
if (c.isValid(restriction, sourceController, source, spellAbility)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
} else if (property.equals("attackedYouTheirLastTurn")) {
|
||||
if (!player.getAttackedPlayersMyLastTurn().contains(sourceController)) {
|
||||
return false;
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
Name:Ramses, Assassin Lord
|
||||
ManaCost:2 B U
|
||||
Types:Legendary Creature Human Assassin
|
||||
PT:4/4
|
||||
K:Deathtouch
|
||||
S:Mode$ Continuous | Affected$ Assassin.Other+YouCtrl | AddPower$ 1 | AddToughness$ 1 | Description$ Other Assassin's you control get +1/+1.
|
||||
T:Mode$ LosesGame | ValidPlayer$ Player.Other+wasAttackedThisTurnBy Assassin.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigWinGame | TriggerDescription$ Whenever a player loses the game, if they were attacked this turn by an Assassin you controlled, you win the game.
|
||||
SVar:TrigWinGame:DB$ WinsGame | Defined$ You
|
||||
Oracle:Other Assassin's you control get +1/+1.\nWhenever a player loses the game, if they were attacked this turn by an Assassin you controlled, you win the game.
|
||||
Reference in New Issue
Block a user