Ramses, Assassin Lord and support (#1382)

Co-authored-by: TRT <>
This commit is contained in:
tool4ever
2022-08-21 21:25:26 +02:00
committed by GitHub
parent e80ecf4e24
commit f9a1485b45
5 changed files with 43 additions and 30 deletions

View File

@@ -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")) {

View File

@@ -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));
}
} }
/** /**

View File

@@ -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();
} }
} }

View File

@@ -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;

View File

@@ -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.