Tahngarth: fix attacking

This commit is contained in:
Bug Hunter
2021-03-12 18:24:02 +00:00
committed by Michael Kamensky
parent 578e499460
commit 0b4cc03300
3 changed files with 21 additions and 8 deletions

View File

@@ -35,7 +35,7 @@ import forge.game.zone.ZoneType;
import forge.util.CardTranslation; import forge.util.CardTranslation;
import forge.util.Lang; import forge.util.Lang;
import forge.util.Localizer; import forge.util.Localizer;
import forge.util.collect.FCollectionView; import forge.util.collect.FCollection;
/** /**
* <p> * <p>
@@ -561,14 +561,16 @@ public abstract class SpellAbilityEffect {
if (sa.hasParam(attackingParam) && combat.getAttackingPlayer().equals(controller)) { if (sa.hasParam(attackingParam) && combat.getAttackingPlayer().equals(controller)) {
String attacking = sa.getParam(attackingParam); String attacking = sa.getParam(attackingParam);
GameEntity defender = null; GameEntity defender = null;
FCollectionView<GameEntity> defs = null; FCollection<GameEntity> defs = null;
if ("True".equalsIgnoreCase(attacking)) { if ("True".equalsIgnoreCase(attacking)) {
defs = combat.getDefenders(); defs = (FCollection<GameEntity>) combat.getDefenders();
} else if (sa.hasParam("ChoosePlayerOrPlaneswalker")) { } else if (sa.hasParam("ChoosePlayerOrPlaneswalker")) {
Player defendingPlayer = Iterables.getFirst(AbilityUtils.getDefinedPlayers(host, attacking, sa), null); PlayerCollection defendingPlayers = AbilityUtils.getDefinedPlayers(host, attacking, sa);
if (defendingPlayer != null) { defs = new FCollection<>();
defs = game.getCombat().getDefendersControlledBy(defendingPlayer); for (Player p : defendingPlayers) {
defs.addAll(game.getCombat().getDefendersControlledBy(p));
} }
} else { } else {
defs = AbilityUtils.getDefinedEntities(host, attacking, sa); defs = AbilityUtils.getDefinedEntities(host, attacking, sa);
@@ -577,7 +579,14 @@ public abstract class SpellAbilityEffect {
if (defs != null) { if (defs != null) {
Map<String, Object> params = Maps.newHashMap(); Map<String, Object> params = Maps.newHashMap();
params.put("Attacker", c); params.put("Attacker", c);
defender = controller.getController().chooseSingleEntityForEffect(defs, sa, Player chooser;
if (sa.hasParam("Chooser")) {
chooser = Iterables.getFirst(AbilityUtils.getDefinedPlayers(host, sa.getParam("Chooser"), sa), null);
}
else {
chooser = controller;
}
defender = chooser.getController().chooseSingleEntityForEffect(defs, sa,
Localizer.getInstance().getMessage("lblChooseDefenderToAttackWithCard", CardTranslation.getTranslatedName(c.getName())), false, params); Localizer.getInstance().getMessage("lblChooseDefenderToAttackWithCard", CardTranslation.getTranslatedName(c.getName())), false, params);
} }

View File

@@ -169,6 +169,10 @@ public class PlayerProperty {
if (player.getAssignedDamage() == 0) { if (player.getAssignedDamage() == 0) {
return false; return false;
} }
} else if (property.equals("Defending")) {
if (!player.getGame().getCombat().getAttackersAndDefenders().values().contains(player)) {
return false;
}
} else if (property.equals("wasDealtCombatDamageThisTurn")) { } else if (property.equals("wasDealtCombatDamageThisTurn")) {
if (player.getAssignedCombatDamage() == 0) { if (player.getAssignedCombatDamage() == 0) {
return false; return false;

View File

@@ -4,6 +4,6 @@ Types:Legendary Creature Minotaur Warrior
PT:5/5 PT:5/5
K:CantBeBlockedByAmount GT1 K:CantBeBlockedByAmount GT1
T:Mode$ AttackersDeclared | AttackingPlayer$ Player.Opponent | Execute$ TrigGainControl | TriggerZones$ Battlefield | OptionalDecider$ You | IsPresent$ Card.Self+tapped | TriggerDescription$ Whenever an opponent attacks with one or more creatures, if CARDNAME is tapped, you may have that opponent gain control of CARDNAME until end of combat. If you do, choose a player or planeswalker that opponent is attacking. CARDNAME is attacking that player or planeswalker. T:Mode$ AttackersDeclared | AttackingPlayer$ Player.Opponent | Execute$ TrigGainControl | TriggerZones$ Battlefield | OptionalDecider$ You | IsPresent$ Card.Self+tapped | TriggerDescription$ Whenever an opponent attacks with one or more creatures, if CARDNAME is tapped, you may have that opponent gain control of CARDNAME until end of combat. If you do, choose a player or planeswalker that opponent is attacking. CARDNAME is attacking that player or planeswalker.
SVar:TrigGainControl:DB$ GainControl | Defined$ Self | NewController$ TriggeredAttackingPlayer | LoseControl$ EndOfCombat | Attacking$ True SVar:TrigGainControl:DB$ GainControl | Defined$ Self | NewController$ TriggeredAttackingPlayer | LoseControl$ EndOfCombat | Attacking$ Player.Defending | Chooser$ You | ChoosePlayerOrPlaneswalker$ True
AI:RemoveDeck:All AI:RemoveDeck:All
Oracle:Tahngarth, First Mate can't be blocked by more than one creature.\nWhenever an opponent attacks with one or more creatures, if Tahngarth is tapped, you may have that opponent gain control of Tahngarth until end of combat. If you do, choose a player or planeswalker that opponent is attacking. Tahngarth is attacking that player or planeswalker. Oracle:Tahngarth, First Mate can't be blocked by more than one creature.\nWhenever an opponent attacks with one or more creatures, if Tahngarth is tapped, you may have that opponent gain control of Tahngarth until end of combat. If you do, choose a player or planeswalker that opponent is attacking. Tahngarth is attacking that player or planeswalker.