mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 12:18:00 +00:00
Fix commander damage record and view, also other bugs
This commit is contained in:
@@ -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,6 +315,7 @@ public class GameAction {
|
||||
java.util.Collections.reverse(cards);
|
||||
}
|
||||
mergedCards = cards;
|
||||
if (cause != null) {
|
||||
final SpellAbility saTargeting = cause.getSATargetingCard();
|
||||
if (saTargeting != null) {
|
||||
saTargeting.getTargets().replaceTargetCard(c, cards);
|
||||
@@ -326,6 +327,7 @@ public class GameAction {
|
||||
hostCard.addRemembered(cards);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (suppress) {
|
||||
game.getTriggerHandler().suppressMode(TriggerType.ChangesZone);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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?
|
||||
|
||||
@@ -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?
|
||||
|
||||
@@ -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?
|
||||
|
||||
@@ -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?
|
||||
|
||||
@@ -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=向其他玩家展示牌?
|
||||
|
||||
Reference in New Issue
Block a user