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

View File

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

View File

@@ -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 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 void clearCreaturesAttackedThisTurn() {
creatureAttackedThisTurn.clear();
}
public final void addAttackedPlayersMyTurn(final Player p) {
if (!attackedPlayersThisTurn.contains(p)) {
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() {
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();
}
}

View File

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

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.