mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 12:18:00 +00:00
Add a toggle to reenable declaring combatant ordering (#6467)
* Add a toggle to reenable declaring combatant ordering * update translation --------- Co-authored-by: kevlahnota <anthonycalosa@gmail.com>
This commit is contained in:
@@ -6,6 +6,7 @@ import java.util.Set;
|
|||||||
public class GameRules {
|
public class GameRules {
|
||||||
private final GameType gameType;
|
private final GameType gameType;
|
||||||
private boolean manaBurn;
|
private boolean manaBurn;
|
||||||
|
private boolean orderCombatants;
|
||||||
private int poisonCountersToLose = 10; // is commonly 10, but turns into 15 for 2HG
|
private int poisonCountersToLose = 10; // is commonly 10, but turns into 15 for 2HG
|
||||||
private int gamesPerMatch = 3;
|
private int gamesPerMatch = 3;
|
||||||
private int gamesToWinMatch = 2;
|
private int gamesToWinMatch = 2;
|
||||||
@@ -37,6 +38,14 @@ public class GameRules {
|
|||||||
this.manaBurn = manaBurn;
|
this.manaBurn = manaBurn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean hasOrderCombatants() {
|
||||||
|
return orderCombatants;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOrderCombatants(final boolean ordered) {
|
||||||
|
this.orderCombatants = ordered;
|
||||||
|
}
|
||||||
|
|
||||||
public int getPoisonCountersToLose() {
|
public int getPoisonCountersToLose() {
|
||||||
return poisonCountersToLose;
|
return poisonCountersToLose;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ import java.util.Map.Entry;
|
|||||||
*/
|
*/
|
||||||
public class Combat {
|
public class Combat {
|
||||||
private final Player playerWhoAttacks;
|
private final Player playerWhoAttacks;
|
||||||
|
private boolean legacyOrderCombatants;
|
||||||
private AttackConstraints attackConstraints;
|
private AttackConstraints attackConstraints;
|
||||||
// Defenders, as they are attacked by hostile forces
|
// Defenders, as they are attacked by hostile forces
|
||||||
private final FCollection<GameEntity> attackableEntries = new FCollection<>();
|
private final FCollection<GameEntity> attackableEntries = new FCollection<>();
|
||||||
@@ -58,8 +59,8 @@ public class Combat {
|
|||||||
private final Multimap<GameEntity, AttackingBand> attackedByBands = Multimaps.synchronizedMultimap(ArrayListMultimap.create());
|
private final Multimap<GameEntity, AttackingBand> attackedByBands = Multimaps.synchronizedMultimap(ArrayListMultimap.create());
|
||||||
private final Multimap<AttackingBand, Card> blockedBands = Multimaps.synchronizedMultimap(ArrayListMultimap.create());
|
private final Multimap<AttackingBand, Card> blockedBands = Multimaps.synchronizedMultimap(ArrayListMultimap.create());
|
||||||
|
|
||||||
private Map<Card, CardCollection> attackersOrderedForDamageAssignment = Maps.newHashMap();
|
private final Map<Card, CardCollection> attackersOrderedForDamageAssignment = Maps.newHashMap();
|
||||||
private Map<Card, CardCollection> blockersOrderedForDamageAssignment = Maps.newHashMap();
|
private final Map<Card, CardCollection> blockersOrderedForDamageAssignment = Maps.newHashMap();
|
||||||
private CardCollection lkiCache = new CardCollection();
|
private CardCollection lkiCache = new CardCollection();
|
||||||
private CardDamageMap damageMap = new CardDamageMap();
|
private CardDamageMap damageMap = new CardDamageMap();
|
||||||
|
|
||||||
@@ -68,6 +69,7 @@ public class Combat {
|
|||||||
|
|
||||||
public Combat(final Player attacker) {
|
public Combat(final Player attacker) {
|
||||||
playerWhoAttacks = attacker;
|
playerWhoAttacks = attacker;
|
||||||
|
legacyOrderCombatants = playerWhoAttacks.getGame().getRules().hasOrderCombatants();
|
||||||
initConstraints();
|
initConstraints();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -481,7 +483,7 @@ public class Combat {
|
|||||||
|
|
||||||
/** If there are multiple blockers, the Attacker declares the Assignment Order */
|
/** If there are multiple blockers, the Attacker declares the Assignment Order */
|
||||||
public void orderBlockersForDamageAssignment(Card attacker, CardCollection blockers) { // this method performs controller's role
|
public void orderBlockersForDamageAssignment(Card attacker, CardCollection blockers) { // this method performs controller's role
|
||||||
if (blockers.size() <= 1) {
|
if (blockers.size() <= 1 || !this.legacyOrderCombatants) {
|
||||||
blockersOrderedForDamageAssignment.put(attacker, new CardCollection(blockers));
|
blockersOrderedForDamageAssignment.put(attacker, new CardCollection(blockers));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -518,10 +520,13 @@ public class Combat {
|
|||||||
final CardCollection oldBlockers = blockersOrderedForDamageAssignment.get(attacker);
|
final CardCollection oldBlockers = blockersOrderedForDamageAssignment.get(attacker);
|
||||||
if (oldBlockers == null || oldBlockers.isEmpty()) {
|
if (oldBlockers == null || oldBlockers.isEmpty()) {
|
||||||
blockersOrderedForDamageAssignment.put(attacker, new CardCollection(blocker));
|
blockersOrderedForDamageAssignment.put(attacker, new CardCollection(blocker));
|
||||||
} else {
|
} else if (this.legacyOrderCombatants) {
|
||||||
CardCollection orderedBlockers = playerWhoAttacks.getController().orderBlocker(attacker, blocker, oldBlockers);
|
CardCollection orderedBlockers = playerWhoAttacks.getController().orderBlocker(attacker, blocker, oldBlockers);
|
||||||
blockersOrderedForDamageAssignment.put(attacker, orderedBlockers);
|
blockersOrderedForDamageAssignment.put(attacker, orderedBlockers);
|
||||||
}
|
} else {
|
||||||
|
oldBlockers.add(blocker);
|
||||||
|
blockersOrderedForDamageAssignment.put(attacker, oldBlockers);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void orderAttackersForDamageAssignment() { // this method performs controller's role
|
public void orderAttackersForDamageAssignment() { // this method performs controller's role
|
||||||
@@ -536,7 +541,7 @@ public class Combat {
|
|||||||
// They need a reverse map here: Blocker => List<Attacker>
|
// They need a reverse map here: Blocker => List<Attacker>
|
||||||
|
|
||||||
Player blockerCtrl = blocker.getController();
|
Player blockerCtrl = blocker.getController();
|
||||||
CardCollection orderedAttacker = attackers.size() <= 1 ? attackers : blockerCtrl.getController().orderAttackers(blocker, attackers);
|
CardCollection orderedAttacker = attackers.size() <= 1 || !this.legacyOrderCombatants ? attackers : blockerCtrl.getController().orderAttackers(blocker, attackers);
|
||||||
|
|
||||||
// Damage Ordering needs to take cards like Melee into account, is that happening?
|
// Damage Ordering needs to take cards like Melee into account, is that happening?
|
||||||
attackersOrderedForDamageAssignment.put(blocker, orderedAttacker);
|
attackersOrderedForDamageAssignment.put(blocker, orderedAttacker);
|
||||||
@@ -858,7 +863,7 @@ public class Combat {
|
|||||||
} // No damage happens if blocked but no blockers left
|
} // No damage happens if blocked but no blockers left
|
||||||
} else {
|
} else {
|
||||||
Map<Card, Integer> map = assigningPlayer.getController().assignCombatDamage(attacker, orderedBlockers, attackers,
|
Map<Card, Integer> map = assigningPlayer.getController().assignCombatDamage(attacker, orderedBlockers, attackers,
|
||||||
damageDealt, defender, divideCombatDamageAsChoose || getAttackingPlayer() != assigningPlayer);
|
damageDealt, defender, divideCombatDamageAsChoose || getAttackingPlayer() != assigningPlayer || !this.legacyOrderCombatants);
|
||||||
|
|
||||||
attackers.remove(attacker);
|
attackers.remove(attacker);
|
||||||
// player wants to assign another first
|
// player wants to assign another first
|
||||||
|
|||||||
@@ -107,6 +107,7 @@ public enum CSubmenuPreferences implements ICDoc {
|
|||||||
lstControls.add(Pair.of(view.getCbAnte(), FPref.UI_ANTE));
|
lstControls.add(Pair.of(view.getCbAnte(), FPref.UI_ANTE));
|
||||||
lstControls.add(Pair.of(view.getCbAnteMatchRarity(), FPref.UI_ANTE_MATCH_RARITY));
|
lstControls.add(Pair.of(view.getCbAnteMatchRarity(), FPref.UI_ANTE_MATCH_RARITY));
|
||||||
lstControls.add(Pair.of(view.getCbManaBurn(), FPref.UI_MANABURN));
|
lstControls.add(Pair.of(view.getCbManaBurn(), FPref.UI_MANABURN));
|
||||||
|
lstControls.add(Pair.of(view.getCbOrderCombatants(), FPref.LEGACY_ORDER_COMBATANTS));
|
||||||
lstControls.add(Pair.of(view.getCbScaleLarger(), FPref.UI_SCALE_LARGER));
|
lstControls.add(Pair.of(view.getCbScaleLarger(), FPref.UI_SCALE_LARGER));
|
||||||
lstControls.add(Pair.of(view.getCbRenderBlackCardBorders(), FPref.UI_RENDER_BLACK_BORDERS));
|
lstControls.add(Pair.of(view.getCbRenderBlackCardBorders(), FPref.UI_RENDER_BLACK_BORDERS));
|
||||||
lstControls.add(Pair.of(view.getCbLargeCardViewers(), FPref.UI_LARGE_CARD_VIEWERS));
|
lstControls.add(Pair.of(view.getCbLargeCardViewers(), FPref.UI_LARGE_CARD_VIEWERS));
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ public enum VSubmenuPreferences implements IVSubmenu<CSubmenuPreferences> {
|
|||||||
private final JCheckBox cbAnteMatchRarity = new OptionsCheckBox(localizer.getMessage("cbAnteMatchRarity"));
|
private final JCheckBox cbAnteMatchRarity = new OptionsCheckBox(localizer.getMessage("cbAnteMatchRarity"));
|
||||||
private final JCheckBox cbEnableAICheats = new OptionsCheckBox(localizer.getMessage("cbEnableAICheats"));
|
private final JCheckBox cbEnableAICheats = new OptionsCheckBox(localizer.getMessage("cbEnableAICheats"));
|
||||||
private final JCheckBox cbManaBurn = new OptionsCheckBox(localizer.getMessage("cbManaBurn"));
|
private final JCheckBox cbManaBurn = new OptionsCheckBox(localizer.getMessage("cbManaBurn"));
|
||||||
|
private final JCheckBox cbOrderCombatants = new OptionsCheckBox(localizer.getMessage("cbOrderCombatants"));
|
||||||
private final JCheckBox cbManaLostPrompt = new OptionsCheckBox(localizer.getMessage("cbManaLostPrompt"));
|
private final JCheckBox cbManaLostPrompt = new OptionsCheckBox(localizer.getMessage("cbManaLostPrompt"));
|
||||||
private final JCheckBox cbDevMode = new OptionsCheckBox(localizer.getMessage("cbDevMode"));
|
private final JCheckBox cbDevMode = new OptionsCheckBox(localizer.getMessage("cbDevMode"));
|
||||||
private final JCheckBox cbLoadCardsLazily = new OptionsCheckBox(localizer.getMessage("cbLoadCardsLazily"));
|
private final JCheckBox cbLoadCardsLazily = new OptionsCheckBox(localizer.getMessage("cbLoadCardsLazily"));
|
||||||
@@ -220,6 +221,9 @@ public enum VSubmenuPreferences implements IVSubmenu<CSubmenuPreferences> {
|
|||||||
pnlPrefs.add(cbManaBurn, titleConstraints);
|
pnlPrefs.add(cbManaBurn, titleConstraints);
|
||||||
pnlPrefs.add(new NoteLabel(localizer.getMessage("nlManaBurn")), descriptionConstraints);
|
pnlPrefs.add(new NoteLabel(localizer.getMessage("nlManaBurn")), descriptionConstraints);
|
||||||
|
|
||||||
|
pnlPrefs.add(cbOrderCombatants, titleConstraints);
|
||||||
|
pnlPrefs.add(new NoteLabel(localizer.getMessage("nlOrderCombatants")), descriptionConstraints);
|
||||||
|
|
||||||
pnlPrefs.add(cbManaLostPrompt, titleConstraints);
|
pnlPrefs.add(cbManaLostPrompt, titleConstraints);
|
||||||
pnlPrefs.add(new NoteLabel(localizer.getMessage("nlManaLostPrompt")), descriptionConstraints);
|
pnlPrefs.add(new NoteLabel(localizer.getMessage("nlManaLostPrompt")), descriptionConstraints);
|
||||||
|
|
||||||
@@ -718,6 +722,10 @@ public enum VSubmenuPreferences implements IVSubmenu<CSubmenuPreferences> {
|
|||||||
return cbManaBurn;
|
return cbManaBurn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public JCheckBox getCbOrderCombatants() {
|
||||||
|
return cbOrderCombatants;
|
||||||
|
}
|
||||||
|
|
||||||
/** @return {@link javax.swing.JCheckBox} */
|
/** @return {@link javax.swing.JCheckBox} */
|
||||||
public JCheckBox getCbScaleLarger() {
|
public JCheckBox getCbScaleLarger() {
|
||||||
return cbScaleLarger;
|
return cbScaleLarger;
|
||||||
|
|||||||
@@ -1,19 +1,7 @@
|
|||||||
package forge.gamesimulationtests.util;
|
package forge.gamesimulationtests.util;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.game.Game;
|
import forge.game.*;
|
||||||
import forge.game.GameLog;
|
|
||||||
import forge.game.GameLogEntry;
|
|
||||||
import forge.game.GameLogEntryType;
|
|
||||||
import forge.game.GameRules;
|
|
||||||
import forge.game.GameStage;
|
|
||||||
import forge.game.GameType;
|
|
||||||
import forge.game.Match;
|
|
||||||
import forge.game.ability.AbilityKey;
|
import forge.game.ability.AbilityKey;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
import forge.game.event.GameEventGameFinished;
|
import forge.game.event.GameEventGameFinished;
|
||||||
@@ -34,6 +22,11 @@ import forge.item.PaperCard;
|
|||||||
import forge.localinstance.properties.ForgePreferences.FPref;
|
import forge.localinstance.properties.ForgePreferences.FPref;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class GameWrapper {
|
public class GameWrapper {
|
||||||
private final List<PlayerSpecification> players;
|
private final List<PlayerSpecification> players;
|
||||||
private final GameStateSpecification initialGameStateSpecification;
|
private final GameStateSpecification initialGameStateSpecification;
|
||||||
@@ -77,6 +70,7 @@ public class GameWrapper {
|
|||||||
rules.setPlayForAnte(FModel.getPreferences().getPrefBoolean(FPref.UI_ANTE));
|
rules.setPlayForAnte(FModel.getPreferences().getPrefBoolean(FPref.UI_ANTE));
|
||||||
rules.setMatchAnteRarity(FModel.getPreferences().getPrefBoolean(FPref.UI_ANTE_MATCH_RARITY));
|
rules.setMatchAnteRarity(FModel.getPreferences().getPrefBoolean(FPref.UI_ANTE_MATCH_RARITY));
|
||||||
rules.setManaBurn(FModel.getPreferences().getPrefBoolean(FPref.UI_MANABURN));
|
rules.setManaBurn(FModel.getPreferences().getPrefBoolean(FPref.UI_MANABURN));
|
||||||
|
rules.setOrderCombatants(FModel.getPreferences().getPrefBoolean(FPref.LEGACY_ORDER_COMBATANTS));
|
||||||
rules.setUseGrayText(FModel.getPreferences().getPrefBoolean(FPref.UI_GRAY_INACTIVE_TEXT));
|
rules.setUseGrayText(FModel.getPreferences().getPrefBoolean(FPref.UI_GRAY_INACTIVE_TEXT));
|
||||||
Match match = new Match(rules, registeredPlayers, "Test");
|
Match match = new Match(rules, registeredPlayers, "Test");
|
||||||
game = match.createGame();
|
game = match.createGame();
|
||||||
|
|||||||
@@ -214,6 +214,11 @@ public class SettingsPage extends TabPage<SettingsScreen> {
|
|||||||
Forge.getLocalizer().getMessage("cbManaBurn"),
|
Forge.getLocalizer().getMessage("cbManaBurn"),
|
||||||
Forge.getLocalizer().getMessage("nlManaBurn")),
|
Forge.getLocalizer().getMessage("nlManaBurn")),
|
||||||
1);
|
1);
|
||||||
|
lstSettings.addItem(new BooleanSetting(FPref.LEGACY_ORDER_COMBATANTS,
|
||||||
|
Forge.getLocalizer().getMessage("cbOrderCombatants"),
|
||||||
|
Forge.getLocalizer().getMessage("nlOrderCombatants")),
|
||||||
|
1);
|
||||||
|
|
||||||
lstSettings.addItem(new BooleanSetting(FPref.UI_MANA_LOST_PROMPT,
|
lstSettings.addItem(new BooleanSetting(FPref.UI_MANA_LOST_PROMPT,
|
||||||
Forge.getLocalizer().getMessage("cbManaLostPrompt"),
|
Forge.getLocalizer().getMessage("cbManaLostPrompt"),
|
||||||
Forge.getLocalizer().getMessage("nlManaLostPrompt")),
|
Forge.getLocalizer().getMessage("nlManaLostPrompt")),
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ cbAnte=Spiele um Ante
|
|||||||
cbAnteMatchRarity=Passe Ante-Seltenheit an
|
cbAnteMatchRarity=Passe Ante-Seltenheit an
|
||||||
cbEnableAICheats=KI darf betrügen
|
cbEnableAICheats=KI darf betrügen
|
||||||
cbManaBurn=Manabrand
|
cbManaBurn=Manabrand
|
||||||
|
cbOrderCombatants=Kombattanten bestellen
|
||||||
cbManaLostPrompt=Bestätige Leeren des Manapools
|
cbManaLostPrompt=Bestätige Leeren des Manapools
|
||||||
cbDevMode=Entwicklermodus
|
cbDevMode=Entwicklermodus
|
||||||
cbLoadCardsLazily=Lade Kartenskripte verzögert
|
cbLoadCardsLazily=Lade Kartenskripte verzögert
|
||||||
@@ -154,9 +155,10 @@ nlAnte=Entscheidet, ob um einen Einsatz (Ante) gespielt wird.
|
|||||||
nlAnteMatchRarity=Versucht den Spieleinsatz für alle Spieler ungefähr gleich zu halten.
|
nlAnteMatchRarity=Versucht den Spieleinsatz für alle Spieler ungefähr gleich zu halten.
|
||||||
nlEnableAICheats=Erlaubt es der KI zu betrügen um Vorteile zu erlangen. Sofern die spezielle KI dies im Skript unterstützt.
|
nlEnableAICheats=Erlaubt es der KI zu betrügen um Vorteile zu erlangen. Sofern die spezielle KI dies im Skript unterstützt.
|
||||||
nlManaBurn=Spiele mit Manabrand (wurde mit M10 aus den Regeln entfernt).
|
nlManaBurn=Spiele mit Manabrand (wurde mit M10 aus den Regeln entfernt).
|
||||||
|
nlOrderCombatants=Spielen Sie mit älteren kommandierenden Kämpfern (Regel von Magic 2010 bis vor Foundations).
|
||||||
nlManaLostPrompt=Aktiviere, um vor Leerung des Manapools eine Warnung zu erhalten.
|
nlManaLostPrompt=Aktiviere, um vor Leerung des Manapools eine Warnung zu erhalten.
|
||||||
nlEnforceDeckLegality=Erzwingt eine Deck-Konformität zum gewählten Format (minimale Deckgröße, Anzahl pro Karte im Deck, usw.).
|
nlEnforceDeckLegality=Erzwingt eine Deck-Konformität zum gewählten Format (minimale Deckgröße, Anzahl pro Karte im Deck, usw.).
|
||||||
nlpAiSideboardingMode=Choose the way the AI sideboards: Off (the AI doesn't sideboard), AI (the AI sideboards for itself, currently mostly random), Human For AI (the human player sideboards for the AI in Constructed formats).
|
nlpAiSideboardingMode=Wählen Sie die Art der KI-Sideboards: Aus (die KI tritt nicht ins Sideboard), KI (die KI-Sideboards für sich selbst, derzeit meist zufällig), Menschlich für KI (die menschlichen Spieler-Sideboards für die KI in Constructed-Formaten).
|
||||||
nlPerformanceMode=Schalten zusätzlich Prüfungen auf statische Fähigkeiten ab, um das Spiel zu beschleunigen. Warnung: Kann Probleme mit 'Aufblitzen' bei Karten von KI-Gegner verursachen!
|
nlPerformanceMode=Schalten zusätzlich Prüfungen auf statische Fähigkeiten ab, um das Spiel zu beschleunigen. Warnung: Kann Probleme mit 'Aufblitzen' bei Karten von KI-Gegner verursachen!
|
||||||
nlFilteredHands=Erzeugt zwei Starthände, und behält die, welche am nächsten an der durchschnittlichen Länderanzahl im Deck ist. (Erfordert Neustart)
|
nlFilteredHands=Erzeugt zwei Starthände, und behält die, welche am nächsten an der durchschnittlichen Länderanzahl im Deck ist. (Erfordert Neustart)
|
||||||
nlCloneImgSource=Zeige das originale Kartenbild des Klones statt der geklonten Karte.
|
nlCloneImgSource=Zeige das originale Kartenbild des Klones statt der geklonten Karte.
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ cbAnte=Play for Ante
|
|||||||
cbAnteMatchRarity=Match Ante Rarity
|
cbAnteMatchRarity=Match Ante Rarity
|
||||||
cbEnableAICheats=Allow AI Cheating
|
cbEnableAICheats=Allow AI Cheating
|
||||||
cbManaBurn=Mana Burn
|
cbManaBurn=Mana Burn
|
||||||
|
cbOrderCombatants=Order Combatants
|
||||||
cbManaLostPrompt=Prompt Mana Pool Emptying
|
cbManaLostPrompt=Prompt Mana Pool Emptying
|
||||||
cbDevMode=Developer Mode
|
cbDevMode=Developer Mode
|
||||||
cbLoadCardsLazily=Load Card Scripts Lazily
|
cbLoadCardsLazily=Load Card Scripts Lazily
|
||||||
@@ -155,6 +156,7 @@ nlAnte=Determines whether or not the game is played for ante.
|
|||||||
nlAnteMatchRarity=Attempts to make antes the same rarity for all players.
|
nlAnteMatchRarity=Attempts to make antes the same rarity for all players.
|
||||||
nlEnableAICheats=Allow the AI to cheat to gain advantage (for personalities that have cheat shuffling options set).
|
nlEnableAICheats=Allow the AI to cheat to gain advantage (for personalities that have cheat shuffling options set).
|
||||||
nlManaBurn=Play with mana burn (from pre-Magic 2010 rules).
|
nlManaBurn=Play with mana burn (from pre-Magic 2010 rules).
|
||||||
|
nlOrderCombatants=Play with legacy ordering combatants (rule from Magic 2010 to pre-Foundations).
|
||||||
nlManaLostPrompt=When enabled, you get a warning if passing priority would cause you to lose mana in your mana pool.
|
nlManaLostPrompt=When enabled, you get a warning if passing priority would cause you to lose mana in your mana pool.
|
||||||
nlEnforceDeckLegality=Enforces deck legality relevant to each environment (minimum deck sizes, max card count etc).
|
nlEnforceDeckLegality=Enforces deck legality relevant to each environment (minimum deck sizes, max card count etc).
|
||||||
nlpAiSideboardingMode=Choose the way the AI sideboards: Off (the AI doesn't sideboard), AI (the AI sideboards for itself, currently mostly random), Human For AI (the human player sideboards for the AI in Constructed formats).
|
nlpAiSideboardingMode=Choose the way the AI sideboards: Off (the AI doesn't sideboard), AI (the AI sideboards for itself, currently mostly random), Human For AI (the human player sideboards for the AI in Constructed formats).
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ cbAnte=Jugar con apuesta (Ante)
|
|||||||
cbAnteMatchRarity=Igualar rareza en apuesta (Ante)
|
cbAnteMatchRarity=Igualar rareza en apuesta (Ante)
|
||||||
cbEnableAICheats=Permitir engaños de la IA
|
cbEnableAICheats=Permitir engaños de la IA
|
||||||
cbManaBurn=Quemadura de maná
|
cbManaBurn=Quemadura de maná
|
||||||
|
cbOrderCombatants=Orden de combatientes
|
||||||
cbManaLostPrompt=Avisar antes de vaciar el maná en la reserva al pasar la fase
|
cbManaLostPrompt=Avisar antes de vaciar el maná en la reserva al pasar la fase
|
||||||
cbDevMode=Modo Desarrollador
|
cbDevMode=Modo Desarrollador
|
||||||
cbLoadCardsLazily=Cargar scripts de cartas modo perezoso
|
cbLoadCardsLazily=Cargar scripts de cartas modo perezoso
|
||||||
@@ -155,9 +156,10 @@ nlAnte=Determina si el juego se juega con apuesta o no.
|
|||||||
nlAnteMatchRarity=Intenta crear apuesta de la misma rareza para todos los jugadores.
|
nlAnteMatchRarity=Intenta crear apuesta de la misma rareza para todos los jugadores.
|
||||||
nlEnableAICheats=Permita que la IA haga trampa para obtener ventaja (para personalidades que tienen configuradas trampas al barajar).
|
nlEnableAICheats=Permita que la IA haga trampa para obtener ventaja (para personalidades que tienen configuradas trampas al barajar).
|
||||||
nlManaBurn=Jugar con quemadura de maná (reglas previas a Magic 2010).
|
nlManaBurn=Jugar con quemadura de maná (reglas previas a Magic 2010).
|
||||||
|
nlOrderCombatants=Juega con combatientes ordenados heredados (gobierna desde Magic 2010 hasta Pre-Foundations).
|
||||||
nlManaLostPrompt=Cuando está habilitado, recibes una advertencia si la prioridad de pase te haría perder maná en tu reserva de maná.
|
nlManaLostPrompt=Cuando está habilitado, recibes una advertencia si la prioridad de pase te haría perder maná en tu reserva de maná.
|
||||||
nlEnforceDeckLegality=Aplica la legalidad del mazo correspondiente a cada entorno (tamaño mínimo de mazo, número máximo de cartas, etc.).
|
nlEnforceDeckLegality=Aplica la legalidad del mazo correspondiente a cada entorno (tamaño mínimo de mazo, número máximo de cartas, etc.).
|
||||||
nlpAiSideboardingMode=Choose the way the AI sideboards: Off (the AI doesn't sideboard), AI (the AI sideboards for itself, currently mostly random), Human For AI (the human player sideboards for the AI in Constructed formats).
|
nlpAiSideboardingMode=Elige la forma en que se colocan los banquillos de la IA: Desactivado (la IA no se pone banquillo), IA (los banquillos de la IA para sí misma, actualmente en su mayoría aleatorios), Humanos para la IA (los banquillos del jugador humano para la IA en formatos Construidos).
|
||||||
nlExperimentalRestore=EXPERIMENTAL - Almacena una instantánea que se utilizará para deshacer hechizos o habilidades
|
nlExperimentalRestore=EXPERIMENTAL - Almacena una instantánea que se utilizará para deshacer hechizos o habilidades
|
||||||
nlPerformanceMode=Desactiva las comprobaciones de habilidades estáticas adicionales para acelerar el motor del juego. (Advertencia: rompe algunos escenarios ''como si tuviera flash'' cuando se lanzan cartas de propiedad de los oponentes).
|
nlPerformanceMode=Desactiva las comprobaciones de habilidades estáticas adicionales para acelerar el motor del juego. (Advertencia: rompe algunos escenarios ''como si tuviera flash'' cuando se lanzan cartas de propiedad de los oponentes).
|
||||||
nlFilteredHands=Genera dos manos iniciales y mantiene la que tiene el recuento de tierras más cercano al promedio del mazo (Requiere reinicio)
|
nlFilteredHands=Genera dos manos iniciales y mantiene la que tiene el recuento de tierras más cercano al promedio del mazo (Requiere reinicio)
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ cbAnte=Jouer pour l''ante
|
|||||||
cbAnteMatchRarity=Correspond à la rareté Ante
|
cbAnteMatchRarity=Correspond à la rareté Ante
|
||||||
cbEnableAICheats=Autoriser l''IA à tricher
|
cbEnableAICheats=Autoriser l''IA à tricher
|
||||||
cbManaBurn=Brûlure de mana
|
cbManaBurn=Brûlure de mana
|
||||||
|
cbOrderCombatants=Combattants de l''Ordre
|
||||||
cbManaLostPrompt=Inviter la vidange de la réserve de mana
|
cbManaLostPrompt=Inviter la vidange de la réserve de mana
|
||||||
cbDevMode=Mode développeur
|
cbDevMode=Mode développeur
|
||||||
cbLoadCardsLazily=Charger les scripts de carte paresseusement
|
cbLoadCardsLazily=Charger les scripts de carte paresseusement
|
||||||
@@ -154,9 +155,10 @@ nlAnte=Détermine si oui ou non le jeu est joué pour ante.
|
|||||||
nlAnteMatchRarity=Tente de donner aux antes la même rareté pour tous les joueurs.
|
nlAnteMatchRarity=Tente de donner aux antes la même rareté pour tous les joueurs.
|
||||||
nlEnableAICheats=Autoriser l''IA à tricher pour obtenir un avantage (pour les personnalités qui ont défini des options de mélange de triche).
|
nlEnableAICheats=Autoriser l''IA à tricher pour obtenir un avantage (pour les personnalités qui ont défini des options de mélange de triche).
|
||||||
nlManaBurn=Jouez avec la brûlure de mana (à partir des règles d''avant Magic 2010).
|
nlManaBurn=Jouez avec la brûlure de mana (à partir des règles d''avant Magic 2010).
|
||||||
|
nlOrderCombatants=Jouez avec des combattants de l'ordre hérité (règle de Magic 2010 jusqu'aux pré-Fondations).
|
||||||
nlManaLostPrompt=Lorsqu''il est activé, vous recevez un avertissement si le fait de passer la priorité vous ferait perdre du mana dans votre pool de mana.
|
nlManaLostPrompt=Lorsqu''il est activé, vous recevez un avertissement si le fait de passer la priorité vous ferait perdre du mana dans votre pool de mana.
|
||||||
nlEnforceDeckLegality=Applique la légalité du deck en fonction de chaque environnement (taille minimale du deck, nombre maximum de cartes, etc.).
|
nlEnforceDeckLegality=Applique la légalité du deck en fonction de chaque environnement (taille minimale du deck, nombre maximum de cartes, etc.).
|
||||||
nlpAiSideboardingMode=Choose the way the AI sideboards: Off (the AI doesn't sideboard), AI (the AI sideboards for itself, currently mostly random), Human For AI (the human player sideboards for the AI in Constructed formats).
|
nlpAiSideboardingMode=Choisissez la manière dont les buffets de l'IA sont désactivés (l'IA ne fait pas de buffet), AI (les buffets de l''IA pour elle-même, actuellement principalement aléatoires), Human For AI (les buffets du joueur humain pour l''IA dans les formats Construits).
|
||||||
nlPerformanceMode=Désactive les vérifications supplémentaires des capacités statiques pour accélérer le moteur de jeu. (Attention : casse certains scénarios ''comme si c''était flash'' lors du lancement de cartes appartenant à des adversaires).
|
nlPerformanceMode=Désactive les vérifications supplémentaires des capacités statiques pour accélérer le moteur de jeu. (Attention : casse certains scénarios ''comme si c''était flash'' lors du lancement de cartes appartenant à des adversaires).
|
||||||
nlFilteredHands=Génère deux mains de départ et conserve celle dont le nombre de terrains est le plus proche de la moyenne pour le deck. (NÉCESSITE UN REDÉMARRAGE)
|
nlFilteredHands=Génère deux mains de départ et conserve celle dont le nombre de terrains est le plus proche de la moyenne pour le deck. (NÉCESSITE UN REDÉMARRAGE)
|
||||||
nlCloneImgSource=Lorsqu''il est activé, les clones utiliseront leur art original au lieu de l''art de la carte clonée.
|
nlCloneImgSource=Lorsqu''il est activé, les clones utiliseront leur art original au lieu de l''art de la carte clonée.
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ cbAnte=Gioca con la posta
|
|||||||
cbAnteMatchRarity=Abbina la rarità della posta
|
cbAnteMatchRarity=Abbina la rarità della posta
|
||||||
cbEnableAICheats=Consenti all''IA di barare
|
cbEnableAICheats=Consenti all''IA di barare
|
||||||
cbManaBurn=Mana burn
|
cbManaBurn=Mana burn
|
||||||
|
cbOrderCombatants=Combattenti dell''Ordine
|
||||||
cbManaLostPrompt=Avviso svuotamento riserva di mana
|
cbManaLostPrompt=Avviso svuotamento riserva di mana
|
||||||
cbDevMode=Modalità sviluppatore
|
cbDevMode=Modalità sviluppatore
|
||||||
cbLoadCardsLazily=Carica gli script delle carte lentamente
|
cbLoadCardsLazily=Carica gli script delle carte lentamente
|
||||||
@@ -153,9 +154,10 @@ nlAnte=Determina se l''incontro è giocato o meno con la posta.
|
|||||||
nlAnteMatchRarity=Tenta di rendere la posta della stessa rarità per tutti i giocatori.
|
nlAnteMatchRarity=Tenta di rendere la posta della stessa rarità per tutti i giocatori.
|
||||||
nlEnableAICheats=Consentire all''intelligenza artificiale di imbrogliare per ottenere un vantaggio (per le personalità che hanno impostato le opzioni per barare mescolando le carte).
|
nlEnableAICheats=Consentire all''intelligenza artificiale di imbrogliare per ottenere un vantaggio (per le personalità che hanno impostato le opzioni per barare mescolando le carte).
|
||||||
nlManaBurn=Gioca con mana burn (dalle regole pre-Magic 2010).
|
nlManaBurn=Gioca con mana burn (dalle regole pre-Magic 2010).
|
||||||
|
nlOrderCombatants=Gioca con combattenti con ordini legacy (regola da Magic 2010 a pre-Foundations).
|
||||||
nlManaLostPrompt=Quando abilitato, viene visualizzato un avviso se passare la priorità potrebbe causare la perdita di mana nella riserva di mana.
|
nlManaLostPrompt=Quando abilitato, viene visualizzato un avviso se passare la priorità potrebbe causare la perdita di mana nella riserva di mana.
|
||||||
nlEnforceDeckLegality=Fa rispettare la legalità del mazzo relativa a ciascun ambiente (dimensioni minime del mazzo, numero massimo di carte ecc.).
|
nlEnforceDeckLegality=Fa rispettare la legalità del mazzo relativa a ciascun ambiente (dimensioni minime del mazzo, numero massimo di carte ecc.).
|
||||||
nlpAiSideboardingMode=Choose the way the AI sideboards: Off (the AI doesn't sideboard), AI (the AI sideboards for itself, currently mostly random), Human For AI (the human player sideboards for the AI in Constructed formats).
|
nlpAiSideboardingMode=Scegli il modo in cui i sideboard dell'IA: Off (l'IA non utilizza il sideboard), AI (i sideboard dell''IA per se stessa, attualmente per lo più casuali), Umano per AI (i sideboard del giocatore umano per l''IA nei formati Constructed).
|
||||||
nlPerformanceMode=Disabilita delle verifiche aggiuntive delle abilità statiche per velocizzare il motore di gioco. (Attenzione: non fa funzionare correttamente il giocare carte di proprietà di un avversario in contesti "come se avesse lampo").
|
nlPerformanceMode=Disabilita delle verifiche aggiuntive delle abilità statiche per velocizzare il motore di gioco. (Attenzione: non fa funzionare correttamente il giocare carte di proprietà di un avversario in contesti "come se avesse lampo").
|
||||||
nlFilteredHands=Genera due mani iniziali e mantiene quella con il numero di terre più vicino alla media del mazzo. (RIAVVIO NECESSARIO)
|
nlFilteredHands=Genera due mani iniziali e mantiene quella con il numero di terre più vicino alla media del mazzo. (RIAVVIO NECESSARIO)
|
||||||
nlCloneImgSource=Se abilitato, i cloni useranno la loro arte originale invece di quella della carta clonata.
|
nlCloneImgSource=Se abilitato, i cloni useranno la loro arte originale invece di quella della carta clonata.
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ cbAnte=アンティルールを使用する。
|
|||||||
cbAnteMatchRarity=アンティのレアリティを合わせる
|
cbAnteMatchRarity=アンティのレアリティを合わせる
|
||||||
cbEnableAICheats=AIチートを有効する
|
cbEnableAICheats=AIチートを有効する
|
||||||
cbManaBurn=マナバーン
|
cbManaBurn=マナバーン
|
||||||
|
cbOrderCombatants=戦闘員の命令
|
||||||
cbManaLostPrompt=マナプールが空になる場合に警告する
|
cbManaLostPrompt=マナプールが空になる場合に警告する
|
||||||
cbDevMode=開発者モード
|
cbDevMode=開発者モード
|
||||||
cbLoadCardsLazily=カードスクリプトを動的ロードする
|
cbLoadCardsLazily=カードスクリプトを動的ロードする
|
||||||
@@ -154,9 +155,10 @@ nlAnte=ゲームでアンティ(賭け)ルールを適用するか選択す
|
|||||||
nlAnteMatchRarity=すべてのプレイヤーに対してアンティを同じレアリティにしようとします。
|
nlAnteMatchRarity=すべてのプレイヤーに対してアンティを同じレアリティにしようとします。
|
||||||
nlEnableAICheats=AI がチートしてアドバンテージを獲得できるようにします。(チートシャッフルオプションが設定されている場合)
|
nlEnableAICheats=AI がチートしてアドバンテージを獲得できるようにします。(チートシャッフルオプションが設定されている場合)
|
||||||
nlManaBurn=マナバーンでプレイ。(基本セット2010 以前のマジックルール)
|
nlManaBurn=マナバーンでプレイ。(基本セット2010 以前のマジックルール)
|
||||||
|
nlOrderCombatants=レガシーの命令戦闘員でプレイしてください (マジック 2010 から財団以前までのルール)。
|
||||||
nlManaLostPrompt=有効にすると、優先権を放棄するとマナプールのマナが失われる場合に警告が表示されます。
|
nlManaLostPrompt=有効にすると、優先権を放棄するとマナプールのマナが失われる場合に警告が表示されます。
|
||||||
nlEnforceDeckLegality=各環境に使えるデッキの合法性を強制します。(最小デッキサイズ、最大カード数など)
|
nlEnforceDeckLegality=各環境に使えるデッキの合法性を強制します。(最小デッキサイズ、最大カード数など)
|
||||||
nlpAiSideboardingMode=Choose the way the AI sideboards: Off (the AI doesn't sideboard), AI (the AI sideboards for itself, currently mostly random), Human For AI (the human player sideboards for the AI in Constructed formats).
|
nlpAiSideboardingMode=AI のサイドボード方法を選択します: オフ (AI はサイドボードしない)、AI (AI 自体のサイドボード、現在はほとんどランダム)、Human For AI (構築フォーマットの AI の人間プレイヤーのサイドボード)。
|
||||||
nlPerformanceMode=常在型能力の追加チェックを無効にして、ゲームエンジンを高速化します。 (警告:対戦相手が所有するカードをキャストするときに、「あたかもフラッシュがあるかのように」の能力が無効になるかもしれません。)
|
nlPerformanceMode=常在型能力の追加チェックを無効にして、ゲームエンジンを高速化します。 (警告:対戦相手が所有するカードをキャストするときに、「あたかもフラッシュがあるかのように」の能力が無効になるかもしれません。)
|
||||||
nlFilteredHands=2つのハンドを生成し、デッキの平均土地数に最も近いハンドをキープします。
|
nlFilteredHands=2つのハンドを生成し、デッキの平均土地数に最も近いハンドをキープします。
|
||||||
nlCloneImgSource=有効にすると、クローンはクローン先のカードのアートの代わりに元のアートを使用します。
|
nlCloneImgSource=有効にすると、クローンはクローン先のカードのアートの代わりに元のアートを使用します。
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ cbAnte=Jogar por Aposta
|
|||||||
cbAnteMatchRarity=Igualar Raridade da Aposta
|
cbAnteMatchRarity=Igualar Raridade da Aposta
|
||||||
cbEnableAICheats=Permitir Trapaça IA
|
cbEnableAICheats=Permitir Trapaça IA
|
||||||
cbManaBurn=Queima de Mana
|
cbManaBurn=Queima de Mana
|
||||||
|
cbOrderCombatants=Ordem Combatentes
|
||||||
cbManaLostPrompt=Avisar esvaziamento de mana
|
cbManaLostPrompt=Avisar esvaziamento de mana
|
||||||
cbDevMode=Modo de Desenvolvedor
|
cbDevMode=Modo de Desenvolvedor
|
||||||
cbLoadCardsLazily=Carregar Scripts de Cartas sob Demanda
|
cbLoadCardsLazily=Carregar Scripts de Cartas sob Demanda
|
||||||
@@ -155,9 +156,10 @@ nlAnte=Determina se o jogo possui aposta.
|
|||||||
nlAnteMatchRarity=Tenta fazer as apostas com a mesma raridade para todos os jogadores.
|
nlAnteMatchRarity=Tenta fazer as apostas com a mesma raridade para todos os jogadores.
|
||||||
nlEnableAICheats=Permita que a trapaça IA obtenha vantagem (para personalidades que possuem opções de embaralhamento definidas).
|
nlEnableAICheats=Permita que a trapaça IA obtenha vantagem (para personalidades que possuem opções de embaralhamento definidas).
|
||||||
nlManaBurn=Jogar com queima de mana (das regras do Magic anteriores a 2010).
|
nlManaBurn=Jogar com queima de mana (das regras do Magic anteriores a 2010).
|
||||||
|
nlOrderCombatants=Jogue com combatentes ordenados legados (regra desde Magic 2010 até pré-Fundações).
|
||||||
nlManaLostPrompt=Quando ativado, você recebe um aviso se a prioridade de passar fizer com que você perca mana na reserva de mana.
|
nlManaLostPrompt=Quando ativado, você recebe um aviso se a prioridade de passar fizer com que você perca mana na reserva de mana.
|
||||||
nlEnforceDeckLegality=Força a legalidade do deck relevante para cada ambiente (tamanho mínimo, número máximo de cartas etc).
|
nlEnforceDeckLegality=Força a legalidade do deck relevante para cada ambiente (tamanho mínimo, número máximo de cartas etc).
|
||||||
nlpAiSideboardingMode=Choose the way the AI sideboards: Off (the AI doesn't sideboard), AI (the AI sideboards for itself, currently mostly random), Human For AI (the human player sideboards for the AI in Constructed formats).
|
nlpAiSideboardingMode=Escolha a forma como os sideboards de IA: Off (a IA não faz sideboard), AI (os sideboards de IA para si, atualmente em sua maioria aleatórios), Human For AI (os sideboards de jogadores humanos para a IA em formatos Construídos).
|
||||||
nlPerformanceMode=Desabilita verificações adicionais de habilidades estáticas para acelerar o jogo. (Aviso\: quebra alguns cenários 'como se tivesse lampejo' ao conjurar cartas pertencentes a adversários).
|
nlPerformanceMode=Desabilita verificações adicionais de habilidades estáticas para acelerar o jogo. (Aviso\: quebra alguns cenários 'como se tivesse lampejo' ao conjurar cartas pertencentes a adversários).
|
||||||
nlFilteredHands=Gera duas mãos iniciais e mantém a mão mais próxima da média da contagem de terreno do deck. (REQUER REINÍCIO)
|
nlFilteredHands=Gera duas mãos iniciais e mantém a mão mais próxima da média da contagem de terreno do deck. (REQUER REINÍCIO)
|
||||||
nlCloneImgSource=Quando ativado os clones usarão sua arte original em vez da arte da carta clonada.
|
nlCloneImgSource=Quando ativado os clones usarão sua arte original em vez da arte da carta clonada.
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ cbAnte=赌博模式
|
|||||||
cbAnteMatchRarity=赌注稀有度匹配
|
cbAnteMatchRarity=赌注稀有度匹配
|
||||||
cbEnableAICheats=允许AI作弊
|
cbEnableAICheats=允许AI作弊
|
||||||
cbManaBurn=法术力灼烧
|
cbManaBurn=法术力灼烧
|
||||||
|
cbOrderCombatants=秩序斗士
|
||||||
cbManaLostPrompt=提示法术力池将要清空
|
cbManaLostPrompt=提示法术力池将要清空
|
||||||
cbDevMode=开发人员模式
|
cbDevMode=开发人员模式
|
||||||
cbLoadCardsLazily=惰性加载卡牌脚本
|
cbLoadCardsLazily=惰性加载卡牌脚本
|
||||||
@@ -155,6 +156,7 @@ nlAnte=确定游戏是否使用赌注
|
|||||||
nlAnteMatchRarity=尝试为所有玩家生成同稀有度赌注
|
nlAnteMatchRarity=尝试为所有玩家生成同稀有度赌注
|
||||||
nlEnableAICheats=允许AI进行作弊以获得优势(对于已经设置了作弊洗牌的AI)。
|
nlEnableAICheats=允许AI进行作弊以获得优势(对于已经设置了作弊洗牌的AI)。
|
||||||
nlManaBurn=使用法术力灼烧(M10之前的规则)
|
nlManaBurn=使用法术力灼烧(M10之前的规则)
|
||||||
|
nlOrderCombatants=与传统的排序战斗者一起玩(规则从万智牌 2010 到基金会前期)。
|
||||||
nlManaLostPrompt=启用后,如果让过优先权会导致法术力池清空,你将收到一个警告提示。
|
nlManaLostPrompt=启用后,如果让过优先权会导致法术力池清空,你将收到一个警告提示。
|
||||||
nlEnforceDeckLegality=强制每个与环境相关的套牌合法性(最小单卡数,最大单卡数等)。
|
nlEnforceDeckLegality=强制每个与环境相关的套牌合法性(最小单卡数,最大单卡数等)。
|
||||||
nlpAiSideboardingMode=选择AI换备的方式:Off为AI不换备,AI为AI随机换备,Human For AI为人类为AI换备。.
|
nlpAiSideboardingMode=选择AI换备的方式:Off为AI不换备,AI为AI随机换备,Human For AI为人类为AI换备。.
|
||||||
|
|||||||
@@ -1,28 +1,13 @@
|
|||||||
package forge.gamemodes.match;
|
package forge.gamemodes.match;
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Map.Entry;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import forge.ai.AiProfileUtil;
|
|
||||||
import forge.gui.control.PlaybackSpeed;
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
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 com.google.common.eventbus.Subscribe;
|
import com.google.common.eventbus.Subscribe;
|
||||||
|
|
||||||
import forge.LobbyPlayer;
|
import forge.LobbyPlayer;
|
||||||
import forge.StaticData;
|
import forge.StaticData;
|
||||||
import forge.game.Game;
|
import forge.ai.AiProfileUtil;
|
||||||
import forge.game.GameRules;
|
import forge.game.*;
|
||||||
import forge.game.GameType;
|
|
||||||
import forge.game.GameView;
|
|
||||||
import forge.game.Match;
|
|
||||||
import forge.game.event.GameEvent;
|
import forge.game.event.GameEvent;
|
||||||
import forge.game.event.GameEventSubgameEnd;
|
import forge.game.event.GameEventSubgameEnd;
|
||||||
import forge.game.event.GameEventSubgameStart;
|
import forge.game.event.GameEventSubgameStart;
|
||||||
@@ -35,12 +20,9 @@ import forge.gui.FThreads;
|
|||||||
import forge.gui.GuiBase;
|
import forge.gui.GuiBase;
|
||||||
import forge.gui.control.FControlGameEventHandler;
|
import forge.gui.control.FControlGameEventHandler;
|
||||||
import forge.gui.control.FControlGamePlayback;
|
import forge.gui.control.FControlGamePlayback;
|
||||||
|
import forge.gui.control.PlaybackSpeed;
|
||||||
import forge.gui.control.WatchLocalGame;
|
import forge.gui.control.WatchLocalGame;
|
||||||
import forge.gui.events.IUiEventVisitor;
|
import forge.gui.events.*;
|
||||||
import forge.gui.events.UiEvent;
|
|
||||||
import forge.gui.events.UiEventAttackerDeclared;
|
|
||||||
import forge.gui.events.UiEventBlockerAssigned;
|
|
||||||
import forge.gui.events.UiEventNextGameDecision;
|
|
||||||
import forge.gui.interfaces.IGuiGame;
|
import forge.gui.interfaces.IGuiGame;
|
||||||
import forge.interfaces.IGameController;
|
import forge.interfaces.IGameController;
|
||||||
import forge.localinstance.properties.ForgeConstants;
|
import forge.localinstance.properties.ForgeConstants;
|
||||||
@@ -58,6 +40,10 @@ import forge.util.TextUtil;
|
|||||||
import forge.util.collect.FCollectionView;
|
import forge.util.collect.FCollectionView;
|
||||||
import forge.util.maps.HashMapOfLists;
|
import forge.util.maps.HashMapOfLists;
|
||||||
import forge.util.maps.MapOfLists;
|
import forge.util.maps.MapOfLists;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
public class HostedMatch {
|
public class HostedMatch {
|
||||||
private Match match;
|
private Match match;
|
||||||
@@ -88,6 +74,7 @@ public class HostedMatch {
|
|||||||
gameRules.setPlayForAnte(FModel.getPreferences().getPrefBoolean(FPref.UI_ANTE));
|
gameRules.setPlayForAnte(FModel.getPreferences().getPrefBoolean(FPref.UI_ANTE));
|
||||||
gameRules.setMatchAnteRarity(FModel.getPreferences().getPrefBoolean(FPref.UI_ANTE_MATCH_RARITY));
|
gameRules.setMatchAnteRarity(FModel.getPreferences().getPrefBoolean(FPref.UI_ANTE_MATCH_RARITY));
|
||||||
gameRules.setManaBurn(FModel.getPreferences().getPrefBoolean(FPref.UI_MANABURN));
|
gameRules.setManaBurn(FModel.getPreferences().getPrefBoolean(FPref.UI_MANABURN));
|
||||||
|
gameRules.setOrderCombatants(FModel.getPreferences().getPrefBoolean(FPref.LEGACY_ORDER_COMBATANTS));
|
||||||
gameRules.setUseGrayText(FModel.getPreferences().getPrefBoolean(FPref.UI_GRAY_INACTIVE_TEXT));
|
gameRules.setUseGrayText(FModel.getPreferences().getPrefBoolean(FPref.UI_GRAY_INACTIVE_TEXT));
|
||||||
gameRules.setGamesPerMatch(FModel.getPreferences().getPrefInt(FPref.UI_MATCHES_PER_GAME));
|
gameRules.setGamesPerMatch(FModel.getPreferences().getPrefInt(FPref.UI_MATCHES_PER_GAME));
|
||||||
// AI specific sideboarding rules
|
// AI specific sideboarding rules
|
||||||
|
|||||||
@@ -17,11 +17,6 @@
|
|||||||
*/
|
*/
|
||||||
package forge.gamemodes.planarconquest;
|
package forge.gamemodes.planarconquest;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import forge.LobbyPlayer;
|
import forge.LobbyPlayer;
|
||||||
import forge.card.CardType;
|
import forge.card.CardType;
|
||||||
import forge.deck.CardPool;
|
import forge.deck.CardPool;
|
||||||
@@ -51,6 +46,11 @@ import forge.util.FileUtil;
|
|||||||
import forge.util.storage.IStorage;
|
import forge.util.storage.IStorage;
|
||||||
import forge.util.storage.StorageImmediatelySerialized;
|
import forge.util.storage.StorageImmediatelySerialized;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
public class ConquestController {
|
public class ConquestController {
|
||||||
private ConquestData model;
|
private ConquestData model;
|
||||||
private IStorage<Deck> decks;
|
private IStorage<Deck> decks;
|
||||||
@@ -138,6 +138,7 @@ public class ConquestController {
|
|||||||
final GameRules rules = new GameRules(GameType.PlanarConquest);
|
final GameRules rules = new GameRules(GameType.PlanarConquest);
|
||||||
rules.setGamesPerMatch(battle.gamesPerMatch());
|
rules.setGamesPerMatch(battle.gamesPerMatch());
|
||||||
rules.setManaBurn(FModel.getPreferences().getPrefBoolean(FPref.UI_MANABURN));
|
rules.setManaBurn(FModel.getPreferences().getPrefBoolean(FPref.UI_MANABURN));
|
||||||
|
rules.setOrderCombatants(FModel.getPreferences().getPrefBoolean(FPref.LEGACY_ORDER_COMBATANTS));
|
||||||
final HostedMatch hostedMatch = GuiBase.getInterface().hostMatch();
|
final HostedMatch hostedMatch = GuiBase.getInterface().hostMatch();
|
||||||
FThreads.invokeInEdtNowOrLater(() -> hostedMatch.startMatch(rules, variants, starter, humanStart, gui));
|
FThreads.invokeInEdtNowOrLater(() -> hostedMatch.startMatch(rules, variants, starter, humanStart, gui));
|
||||||
activeBattle = battle;
|
activeBattle = battle;
|
||||||
|
|||||||
@@ -1,11 +1,6 @@
|
|||||||
package forge.gamemodes.quest;
|
package forge.gamemodes.quest;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.deck.DeckGroup;
|
import forge.deck.DeckGroup;
|
||||||
import forge.deck.DeckSection;
|
import forge.deck.DeckSection;
|
||||||
@@ -28,6 +23,10 @@ import forge.player.GamePlayerUtil;
|
|||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
import forge.util.storage.IStorage;
|
import forge.util.storage.IStorage;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class QuestDraftUtils {
|
public class QuestDraftUtils {
|
||||||
public static boolean TOURNAMENT_TOGGLE = false;
|
public static boolean TOURNAMENT_TOGGLE = false;
|
||||||
public static boolean AI_BACKGROUND = false;
|
public static boolean AI_BACKGROUND = false;
|
||||||
@@ -250,6 +249,7 @@ public class QuestDraftUtils {
|
|||||||
rules.setMatchAnteRarity(false);
|
rules.setMatchAnteRarity(false);
|
||||||
rules.setGamesPerMatch(3);
|
rules.setGamesPerMatch(3);
|
||||||
rules.setManaBurn(FModel.getPreferences().getPrefBoolean(FPref.UI_MANABURN));
|
rules.setManaBurn(FModel.getPreferences().getPrefBoolean(FPref.UI_MANABURN));
|
||||||
|
rules.setOrderCombatants(FModel.getPreferences().getPrefBoolean(FPref.LEGACY_ORDER_COMBATANTS));
|
||||||
rules.setUseGrayText(FModel.getPreferences().getPrefBoolean(FPref.UI_GRAY_INACTIVE_TEXT));
|
rules.setUseGrayText(FModel.getPreferences().getPrefBoolean(FPref.UI_GRAY_INACTIVE_TEXT));
|
||||||
return rules;
|
return rules;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -594,7 +594,7 @@ public class QuestUtil {
|
|||||||
rules.setPlayForAnte(useAnte);
|
rules.setPlayForAnte(useAnte);
|
||||||
rules.setMatchAnteRarity(matchAnteRarity);
|
rules.setMatchAnteRarity(matchAnteRarity);
|
||||||
rules.setGamesPerMatch(qData.getMatchLength());
|
rules.setGamesPerMatch(qData.getMatchLength());
|
||||||
rules.setManaBurn(FModel.getPreferences().getPrefBoolean(FPref.UI_MANABURN));
|
rules.setOrderCombatants(FModel.getPreferences().getPrefBoolean(FPref.LEGACY_ORDER_COMBATANTS));
|
||||||
rules.setUseGrayText(FModel.getPreferences().getPrefBoolean(FPref.UI_GRAY_INACTIVE_TEXT));
|
rules.setUseGrayText(FModel.getPreferences().getPrefBoolean(FPref.UI_GRAY_INACTIVE_TEXT));
|
||||||
|
|
||||||
final TreeSet<GameType> variant = new TreeSet<>();
|
final TreeSet<GameType> variant = new TreeSet<>();
|
||||||
|
|||||||
@@ -115,6 +115,7 @@ public class ForgePreferences extends PreferencesStore<ForgePreferences.FPref> {
|
|||||||
UI_ANTE ("false"),
|
UI_ANTE ("false"),
|
||||||
UI_ANTE_MATCH_RARITY ("false"),
|
UI_ANTE_MATCH_RARITY ("false"),
|
||||||
UI_MANABURN("false"),
|
UI_MANABURN("false"),
|
||||||
|
LEGACY_ORDER_COMBATANTS("false"),
|
||||||
UI_SKIN ("Default"),
|
UI_SKIN ("Default"),
|
||||||
UI_CJK_FONT (""),
|
UI_CJK_FONT (""),
|
||||||
UI_PREFERRED_AVATARS_ONLY ("false"),
|
UI_PREFERRED_AVATARS_ONLY ("false"),
|
||||||
|
|||||||
Reference in New Issue
Block a user