Fix exploding commander costs (and damage)

This commit is contained in:
Chris H
2024-07-24 12:01:44 -04:00
parent 3a8b5117e5
commit 0fddf0e22f

View File

@@ -1,11 +1,9 @@
package forge.game; package forge.game;
import java.util.*;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import forge.game.card.Card;
import forge.game.card.*; import forge.game.card.CardCopyService;
import forge.game.combat.Combat; import forge.game.combat.Combat;
import forge.game.mana.Mana; import forge.game.mana.Mana;
import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseHandler;
@@ -17,6 +15,10 @@ import forge.game.trigger.TriggerType;
import forge.game.zone.PlayerZoneBattlefield; import forge.game.zone.PlayerZoneBattlefield;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class GameSnapshot { public class GameSnapshot {
private final Game origGame; private final Game origGame;
private Game newGame = null; private Game newGame = null;
@@ -80,19 +82,23 @@ public class GameSnapshot {
Player toPlayer = findBy(toGame, p); Player toPlayer = findBy(toGame, p);
List<Card> commanders = Lists.newArrayList(); List<Card> commanders = Lists.newArrayList();
// Commander cast times are stored in the player, not the card
toPlayer.resetCommanderStats();
for (final Card c : p.getCommanders()) { for (final Card c : p.getCommanders()) {
Card newCommander = findBy(toGame, c); Card newCommander = findBy(toGame, c);
commanders.add(newCommander); commanders.add(newCommander);
int castTimes = p.getCommanderCast(c); int castTimes = p.getCommanderCast(c);
for (int i = 0; i < castTimes; i++) { for (int i = 0; i < castTimes; i++) {
toPlayer.incCommanderCast(c); toPlayer.incCommanderCast(newCommander);
} }
} }
for (Map.Entry<Card, Integer> entry : p.getCommanderDamage()) {
Card commander = findBy(toGame, entry.getKey());
int damage = entry.getValue();
toPlayer.addCommanderDamage(commander, damage);
}
toPlayer.setCommanders(commanders); toPlayer.setCommanders(commanders);
for (Map.Entry<Card, Integer> entry : p.getCommanderDamage()) {
toPlayer.addCommanderDamage(findBy(toGame, entry.getKey()), entry.getValue());
}
((PlayerZoneBattlefield) toPlayer.getZone(ZoneType.Battlefield)).setTriggers(true); ((PlayerZoneBattlefield) toPlayer.getZone(ZoneType.Battlefield)).setTriggers(true);
} }
toGame.getTriggerHandler().clearSuppression(TriggerType.ChangesZone); toGame.getTriggerHandler().clearSuppression(TriggerType.ChangesZone);