mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 11:48:02 +00:00
@@ -3478,8 +3478,8 @@ public class AbilityUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (value.equals("OpponentsAttackedThisTurn")) {
|
if (value.equals("OpponentsAttackedThisTurn")) {
|
||||||
final List<Player> opps = player.getAttackedPlayersMyTurn();
|
final Iterable<Player> opps = player.getAttackedPlayersMyTurn();
|
||||||
return doXMath(opps == null ? 0 : opps.size(), m, source, ctb);
|
return doXMath(opps == null ? 0 : Iterables.size(opps), m, source, ctb);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value.equals("OpponentsAttackedThisCombat")) {
|
if (value.equals("OpponentsAttackedThisCombat")) {
|
||||||
|
|||||||
@@ -407,10 +407,7 @@ public class CombatUtil {
|
|||||||
|
|
||||||
c.getDamageHistory().setCreatureAttackedThisCombat(defender);
|
c.getDamageHistory().setCreatureAttackedThisCombat(defender);
|
||||||
c.getDamageHistory().clearNotAttackedSinceLastUpkeepOf();
|
c.getDamageHistory().clearNotAttackedSinceLastUpkeepOf();
|
||||||
c.getController().addCreaturesAttackedThisTurn(CardUtil.getLKICopy(c));
|
c.getController().addCreaturesAttackedThisTurn(CardUtil.getLKICopy(c), defender);
|
||||||
if (defender instanceof Player) {
|
|
||||||
c.getController().addAttackedPlayersMyTurn(combat.getDefenderPlayerByAttacker(c));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import java.util.Collection;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Deque;
|
import java.util.Deque;
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
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 Table<Long, Long, KeywordsChange> changedKeywords = TreeBasedTable.create();
|
||||||
private ManaPool manaPool = new ManaPool(this);
|
private ManaPool manaPool = new ManaPool(this);
|
||||||
private List<Card> creatureAttackedThisTurn = new ArrayList<>();
|
private Map<GameEntity, List<Card>> attackedThisTurn = new HashMap<>();
|
||||||
private List<Player> attackedPlayersThisTurn = new ArrayList<>();
|
private List<Player> attackedPlayersLastTurn = new ArrayList<>();
|
||||||
private List <Player> attackedPlayersLastTurn = new ArrayList<>();
|
|
||||||
private List<Player> attackedPlayersThisCombat = new ArrayList<>();
|
private List<Player> attackedPlayersThisCombat = new ArrayList<>();
|
||||||
|
|
||||||
private boolean activateLoyaltyAbilityThisTurn = false;
|
private boolean activateLoyaltyAbilityThisTurn = false;
|
||||||
@@ -1826,37 +1826,37 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public final List<Card> getCreaturesAttackedThisTurn() {
|
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) {
|
public final List<Card> getCreaturesAttackedThisTurn(final GameEntity e) {
|
||||||
creatureAttackedThisTurn.add(c);
|
return attackedThisTurn.getOrDefault(e, Lists.newArrayList());
|
||||||
}
|
}
|
||||||
public final void clearCreaturesAttackedThisTurn() {
|
public final void addCreaturesAttackedThisTurn(final Card c, final GameEntity e) {
|
||||||
creatureAttackedThisTurn.clear();
|
final List<Card> creatures = attackedThisTurn.getOrDefault(e, Lists.newArrayList());
|
||||||
}
|
creatures.add(c);
|
||||||
|
attackedThisTurn.putIfAbsent(e, creatures);
|
||||||
public final void addAttackedPlayersMyTurn(final Player p) {
|
if (e instanceof Player && !attackedPlayersThisCombat.contains(e)) {
|
||||||
if (!attackedPlayersThisTurn.contains(p)) {
|
attackedPlayersThisCombat.add((Player) e);
|
||||||
attackedPlayersThisCombat.add(p);
|
|
||||||
attackedPlayersThisTurn.add(p);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public final List<Player> getAttackedPlayersMyTurn() {
|
|
||||||
return attackedPlayersThisTurn;
|
public final Iterable<Player> getAttackedPlayersMyTurn() {
|
||||||
|
return Iterables.filter(attackedThisTurn.keySet(), Player.class);
|
||||||
}
|
}
|
||||||
public final List<Player> getAttackedPlayersMyLastTurn() {
|
public final List<Player> getAttackedPlayersMyLastTurn() {
|
||||||
return attackedPlayersLastTurn;
|
return attackedPlayersLastTurn;
|
||||||
}
|
}
|
||||||
public final void clearAttackedPlayersMyTurn() {
|
public final void clearAttackedMyTurn() {
|
||||||
attackedPlayersThisTurn.clear();
|
attackedThisTurn.clear();
|
||||||
}
|
}
|
||||||
public final void setAttackedPlayersMyLastTurn(List<Player> players) {
|
public final void setAttackedPlayersMyLastTurn(Iterable<Player> players) {
|
||||||
attackedPlayersLastTurn.clear();
|
attackedPlayersLastTurn.clear();
|
||||||
attackedPlayersLastTurn.addAll(players);
|
Iterables.addAll(attackedPlayersLastTurn, players);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final List<Player> getAttackedPlayersMyCombat() {
|
public final List<Player> getAttackedPlayersMyCombat() {
|
||||||
return attackedPlayersThisTurn;
|
return attackedPlayersThisCombat;
|
||||||
}
|
}
|
||||||
public final void clearAttackedPlayersMyCombat() {
|
public final void clearAttackedPlayersMyCombat() {
|
||||||
attackedPlayersThisCombat.clear();
|
attackedPlayersThisCombat.clear();
|
||||||
@@ -2390,7 +2390,6 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
resetNumForetoldThisTurn();
|
resetNumForetoldThisTurn();
|
||||||
resetNumTokenCreatedThisTurn();
|
resetNumTokenCreatedThisTurn();
|
||||||
setNumCardsInHandStartedThisTurnWith(getCardsIn(ZoneType.Hand).size());
|
setNumCardsInHandStartedThisTurnWith(getCardsIn(ZoneType.Hand).size());
|
||||||
clearCreaturesAttackedThisTurn();
|
|
||||||
setActivateLoyaltyAbilityThisTurn(false);
|
setActivateLoyaltyAbilityThisTurn(false);
|
||||||
setTappedLandForManaThisTurn(false);
|
setTappedLandForManaThisTurn(false);
|
||||||
setLandsPlayedLastTurn(getLandsPlayedThisTurn());
|
setLandsPlayedLastTurn(getLandsPlayedThisTurn());
|
||||||
@@ -2417,8 +2416,8 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
|
|
||||||
// set last turn nr
|
// set last turn nr
|
||||||
if (game.getPhaseHandler().isPlayerTurn(this)) {
|
if (game.getPhaseHandler().isPlayerTurn(this)) {
|
||||||
setAttackedPlayersMyLastTurn(attackedPlayersThisTurn);
|
setAttackedPlayersMyLastTurn(getAttackedPlayersMyTurn());
|
||||||
clearAttackedPlayersMyTurn();
|
clearAttackedMyTurn();
|
||||||
this.lastTurnNr = game.getPhaseHandler().getTurn();
|
this.lastTurnNr = game.getPhaseHandler().getTurn();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -381,6 +381,14 @@ public class PlayerProperty {
|
|||||||
if (player.getCreaturesAttackedThisTurn().isEmpty()) {
|
if (player.getCreaturesAttackedThisTurn().isEmpty()) {
|
||||||
return false;
|
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")) {
|
} else if (property.equals("attackedYouTheirLastTurn")) {
|
||||||
if (!player.getAttackedPlayersMyLastTurn().contains(sourceController)) {
|
if (!player.getAttackedPlayersMyLastTurn().contains(sourceController)) {
|
||||||
return false;
|
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