Fix commander damage record and view, also other bugs

This commit is contained in:
Lyu Zong-Hong
2021-02-12 22:25:47 +09:00
parent 8128aba4f8
commit 58f27c4466
11 changed files with 60 additions and 14 deletions

View File

@@ -239,7 +239,7 @@ public class GameAction {
CardCollectionView comCards = c.getOwner().getCardsIn(ZoneType.Command);
for (final Card effCard : comCards) {
for (final ReplacementEffect re : effCard.getReplacementEffects()) {
if (re.getMode() == ReplacementType.Moved && "Card.EffectSource+YouOwn".equals(re.getParam("ValidCard"))) {
if (re.hasSVar("CommanderMoveReplacement")) {
commanderEffect = effCard;
break;
}
@@ -315,15 +315,17 @@ public class GameAction {
java.util.Collections.reverse(cards);
}
mergedCards = cards;
final SpellAbility saTargeting = cause.getSATargetingCard();
if (saTargeting != null) {
saTargeting.getTargets().replaceTargetCard(c, cards);
}
// Replace host rememberd cards
Card hostCard = cause.getHostCard();
if (hostCard.isRemembered(c)) {
hostCard.removeRemembered(c);
hostCard.addRemembered(cards);
if (cause != null) {
final SpellAbility saTargeting = cause.getSATargetingCard();
if (saTargeting != null) {
saTargeting.getTargets().replaceTargetCard(c, cards);
}
// Replace host rememberd cards
Card hostCard = cause.getHostCard();
if (hostCard.isRemembered(c)) {
hostCard.removeRemembered(c);
hostCard.addRemembered(cards);
}
}
}

View File

@@ -1286,6 +1286,12 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
source.addRemembered(meld);
}
}
if (c.hasMergedCard()) {
for (final Card card : c.getMergedCards()) {
if (card == c) continue;
source.addRemembered(card);
}
}
}
if (forget) {
source.removeRemembered(movedCard);

View File

@@ -14,6 +14,7 @@ import forge.game.player.Player;
import forge.game.spellability.SpellAbility;
import forge.game.trigger.TriggerType;
import forge.game.zone.ZoneType;
import forge.util.Localizer;
public class MutateEffect extends SpellAbilityEffect {
@@ -37,7 +38,7 @@ public class MutateEffect extends SpellAbilityEffect {
final Card topCard = host.getController().getController().chooseSingleEntityForEffect(
view,
sa,
"Choose which creature to be on top",
Localizer.getInstance().getMessage("lblChooseCreatureToBeTop"),
false,
new HashMap<>()
);
@@ -81,8 +82,8 @@ public class MutateEffect extends SpellAbilityEffect {
target.setTimesMutated(target.getTimesMutated() + 1);
target.updateTokenView();
if (host.isCommander()) {
host.getOwner().updateMergedCommanderInfo(target, host);
target.updateCommanderView();
host.getOwner().updateMergedCommanderCast(target, host);
}
game.getTriggerHandler().runTrigger(TriggerType.Mutates, AbilityKey.mapFromCard(target), false);

View File

@@ -6257,6 +6257,17 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
public void updateCommanderView() {
view.updateCommander(this);
}
public Card getRealCommander() {
if (isCommander)
return this;
if (this.getMeldedWith() != null && this.getMeldedWith().isCommander())
return this.getMeldedWith();
if (isInZone(ZoneType.Battlefield) && hasMergedCard()) {
for (final Card c : getMergedCards())
if (c.isCommander) return c;
}
return null;
}
public boolean canMoveToCommandZone() {
return canMoveToCommandZone;

View File

@@ -610,8 +610,14 @@ public class Player extends GameEntity implements Comparable<Player> {
&& !this.getGame().getRules().hasAppliedVariant(GameType.Oathbreaker)
&& !this.getGame().getRules().hasAppliedVariant(GameType.TinyLeaders)
&& !this.getGame().getRules().hasAppliedVariant(GameType.Brawl)) {
commanderDamage.put(source, getCommanderDamage(source) + amount);
// In case that commander is merged permanent, get the real commander card
final Card realCommander = source.getRealCommander();
int damage = getCommanderDamage(realCommander) + amount;
commanderDamage.put(realCommander, damage);
view.updateCommanderDamage(this);
if (realCommander != source) {
view.updateMergedCommanderDamage(source, realCommander);
}
}
int old = assignedDamage.containsKey(source) ? assignedDamage.get(source) : 0;
@@ -2886,8 +2892,9 @@ public class Player extends GameEntity implements Comparable<Player> {
getGame().fireEvent(new GameEventPlayerStatsChanged(this, false));
}
public void updateMergedCommanderCast(Card target, Card commander) {
public void updateMergedCommanderInfo(Card target, Card commander) {
getView().updateMergedCommanderCast(this, target, commander);
getView().updateMergedCommanderDamage(target, commander);
}
public int getTotalCommanderCast() {

View File

@@ -334,6 +334,15 @@ public class PlayerView extends GameEntityView {
}
set(TrackableProperty.CommanderDamage, map);
}
void updateMergedCommanderDamage(Card card, Card commander) {
// Add commander damage to top card for card view panel info
for (final PlayerView p : Iterables.concat(Collections.singleton(this), getOpponents())) {
Map<Integer, Integer> map = p.get(TrackableProperty.CommanderDamage);
if (map == null) continue;
Integer damage = map.get(commander.getId());
map.put(card.getId(), damage);
}
}
public int getCommanderCast(CardView commander) {
Map<Integer, Integer> map = get(TrackableProperty.CommanderCast);

View File

@@ -1863,6 +1863,8 @@ lblChooseCardToMeld=Wähle Karte zum Verschmelzen mit
lblDoYouWantPutLibraryCardsTo=Lege Karte(n) von der Bibliothek nach
#MultiplePilesEffect.java
lblChooseCardsInTargetPile=Wähle Karten in Stapel {0}?
#MutateEffect.java
lblChooseCreatureToBeTop=Choose which creature to be the top
#PeekAndRevealEffect.java
lblRevealingCardFrom=Zeige Karten von
lblRevealCardToOtherPlayers=Zeige die Karten den anderen Spielern?

View File

@@ -1863,6 +1863,8 @@ lblChooseCardToMeld=Choose card to meld with
lblDoYouWantPutLibraryCardsTo=Do you want to put card(s) from library to {0}?
#MultiplePilesEffect.java
lblChooseCardsInTargetPile=Choose cards in Pile {0}?
#MutateEffect.java
lblChooseCreatureToBeTop=Choose which creature to be the top
#PeekAndRevealEffect.java
lblRevealingCardFrom=Revealing cards from
lblRevealCardToOtherPlayers=Reveal cards to other players?

View File

@@ -1863,6 +1863,8 @@ lblChooseCardToMeld=Elige una carta para fundirla con
lblDoYouWantPutLibraryCardsTo=¿Quieres poner la(s) carta(s) de la biblioteca a {0}?
#MultiplePilesEffect.java
lblChooseCardsInTargetPile=¿Elegir las cartas en la Pila {0}?
#MutateEffect.java
lblChooseCreatureToBeTop=Choose which creature to be the top
#PeekAndRevealEffect.java
lblRevealingCardFrom=Mostrando las cartas de
lblRevealCardToOtherPlayers=¿Mostrar las cartas a otros jugadores?

View File

@@ -1863,6 +1863,8 @@ lblChooseCardToMeld=Choose card to meld with
lblDoYouWantPutLibraryCardsTo=Do you want to put card(s) from library to {0}?
#MultiplePilesEffect.java
lblChooseCardsInTargetPile=Choose cards in Pile {0}?
#MutateEffect.java
lblChooseCreatureToBeTop=Choose which creature to be the top
#PeekAndRevealEffect.java
lblRevealingCardFrom=Revealing cards from
lblRevealCardToOtherPlayers=Reveal cards to other players?

View File

@@ -1863,6 +1863,8 @@ lblChooseCardToMeld=选择要融合的牌
lblDoYouWantPutLibraryCardsTo=你想要从牌库中把牌放入{0}吗?
#MultiplePilesEffect.java
lblChooseCardsInTargetPile=选择堆{0}中的牌?
#MutateEffect.java
lblChooseCreatureToBeTop=Choose which creature to be the top
#PeekAndRevealEffect.java
lblRevealingCardFrom=展示牌自
lblRevealCardToOtherPlayers=向其他玩家展示牌?