AI Sideboarding Mode toggle as a Preferences option (#5136)

* - Initial commit for the AI sideboarding mode toggle.

* - Tweak the parameter value to correspond to the enum.

* - Consistency.
This commit is contained in:
Agetian
2024-04-25 14:19:47 +03:00
committed by GitHub
parent c3a9ec062c
commit a9c97aac2c
20 changed files with 103 additions and 43 deletions

View File

@@ -47,6 +47,26 @@ public class AiProfileUtil {
public static final String AI_PROFILE_RANDOM_MATCH = "Random (Every Match)"; public static final String AI_PROFILE_RANDOM_MATCH = "Random (Every Match)";
public static final String AI_PROFILE_RANDOM_DUEL = "Random (Every Game)"; public static final String AI_PROFILE_RANDOM_DUEL = "Random (Every Game)";
public enum AISideboardingMode {
Off,
AI,
HumanForAI;
public static AISideboardingMode normalizedValueOf(String value) {
return valueOf(value.replace(" ", ""));
}
}
private static AISideboardingMode aiSideboardingMode = AISideboardingMode.Off;
public static AISideboardingMode getAISideboardingMode() {
return aiSideboardingMode;
}
public static void setAiSideboardingMode(AISideboardingMode mode) {
aiSideboardingMode = mode;
}
/** Builds an AI profile file name with full relative /** Builds an AI profile file name with full relative
* path based on the profile name. * path based on the profile name.
* @param profileName the name of the profile. * @param profileName the name of the profile.

View File

@@ -102,7 +102,7 @@ public class PlayerControllerAi extends PlayerController {
@Override @Override
public List<PaperCard> sideboard(Deck deck, GameType gameType, String message) { public List<PaperCard> sideboard(Deck deck, GameType gameType, String message) {
if (!getAi().getBooleanProperty(AiProps.SIDEBOARDING_ENABLE) if (!brains.getGame().getRules().getAISideboardingEnabled()
|| !deck.has(DeckSection.Sideboard)) { || !deck.has(DeckSection.Sideboard)) {
return null; return null;
} }

View File

@@ -11,6 +11,7 @@ public class GameRules {
private int gamesToWinMatch = 2; private int gamesToWinMatch = 2;
private boolean playForAnte = false; private boolean playForAnte = false;
private boolean matchAnteRarity = false; private boolean matchAnteRarity = false;
private boolean AISideboardingEnabled = false;
private boolean sideboardForAI = false; private boolean sideboardForAI = false;
private final Set<GameType> appliedVariants = EnumSet.noneOf(GameType.class); private final Set<GameType> appliedVariants = EnumSet.noneOf(GameType.class);
@@ -77,6 +78,14 @@ public class GameRules {
sideboardForAI = sideboard; sideboardForAI = sideboard;
} }
public boolean getAISideboardingEnabled() {
return AISideboardingEnabled;
}
public void setAISideboardingEnabled(final boolean aiSideboarding) {
AISideboardingEnabled = aiSideboarding;
}
public int getGamesToWinMatch() { public int getGamesToWinMatch() {
return gamesToWinMatch; return gamesToWinMatch;
} }

View File

@@ -21,7 +21,10 @@ import forge.screens.deckeditor.CDeckEditorUI;
import forge.screens.deckeditor.controllers.CEditorTokenViewer; import forge.screens.deckeditor.controllers.CEditorTokenViewer;
import forge.sound.MusicPlaylist; import forge.sound.MusicPlaylist;
import forge.sound.SoundSystem; import forge.sound.SoundSystem;
import forge.toolbox.*; import forge.toolbox.FComboBox;
import forge.toolbox.FComboBoxPanel;
import forge.toolbox.FLabel;
import forge.toolbox.FOptionPane;
import forge.util.Localizer; import forge.util.Localizer;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
@@ -123,8 +126,6 @@ public enum CSubmenuPreferences implements ICDoc {
lstControls.add(Pair.of(view.getCbRandomArtInPools(), FPref.UI_RANDOM_ART_IN_POOLS)); lstControls.add(Pair.of(view.getCbRandomArtInPools(), FPref.UI_RANDOM_ART_IN_POOLS));
lstControls.add(Pair.of(view.getCbEnforceDeckLegality(), FPref.ENFORCE_DECK_LEGALITY)); lstControls.add(Pair.of(view.getCbEnforceDeckLegality(), FPref.ENFORCE_DECK_LEGALITY));
lstControls.add(Pair.of(view.getCbPerformanceMode(), FPref.PERFORMANCE_MODE)); lstControls.add(Pair.of(view.getCbPerformanceMode(), FPref.PERFORMANCE_MODE));
lstControls.add(Pair.of(view.getCbSideboardForAI(), FPref.MATCH_SIDEBOARD_FOR_AI));
lstControls.add(Pair.of(view.getCbExperimentalRestore(), FPref.MATCH_EXPERIMENTAL_RESTORE));
lstControls.add(Pair.of(view.getCbFilteredHands(), FPref.FILTERED_HANDS)); lstControls.add(Pair.of(view.getCbFilteredHands(), FPref.FILTERED_HANDS));
lstControls.add(Pair.of(view.getCbCloneImgSource(), FPref.UI_CLONE_MODE_SOURCE)); lstControls.add(Pair.of(view.getCbCloneImgSource(), FPref.UI_CLONE_MODE_SOURCE));
lstControls.add(Pair.of(view.getCbRemoveSmall(), FPref.DECKGEN_NOSMALL)); lstControls.add(Pair.of(view.getCbRemoveSmall(), FPref.DECKGEN_NOSMALL));
@@ -267,6 +268,7 @@ public enum CSubmenuPreferences implements ICDoc {
initializeAutoUpdaterComboBox(); initializeAutoUpdaterComboBox();
initializeMulliganRuleComboBox(); initializeMulliganRuleComboBox();
initializeAiProfilesComboBox(); initializeAiProfilesComboBox();
initializeAiSideboardingModeComboBox();
initializeSoundSetsComboBox(); initializeSoundSetsComboBox();
initializeMusicSetsComboBox(); initializeMusicSetsComboBox();
initializeStackAdditionsComboBox(); initializeStackAdditionsComboBox();
@@ -474,6 +476,21 @@ public enum CSubmenuPreferences implements ICDoc {
panel.setComboBox(comboBox, selectedItem); panel.setComboBox(comboBox, selectedItem);
} }
private void initializeAiSideboardingModeComboBox() {
final FPref userSetting = FPref.MATCH_AI_SIDEBOARDING_MODE;
final FComboBoxPanel<String> panel = this.view.getAiSideboardingModeComboBoxPanel();
final FComboBox<String> comboBox = createComboBox(new String[] {"Off", "AI", "Human For AI"}, userSetting);
final String selectedItem = this.prefs.getPref(userSetting);
panel.setComboBox(comboBox, selectedItem);
comboBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
AiProfileUtil.setAiSideboardingMode(AiProfileUtil.AISideboardingMode.normalizedValueOf(comboBox.getSelectedItem()));
System.out.println(AiProfileUtil.getAISideboardingMode());
}
});
}
private void initializeSoundSetsComboBox() { private void initializeSoundSetsComboBox() {
final FPref userSetting = FPref.UI_CURRENT_SOUND_SET; final FPref userSetting = FPref.UI_CURRENT_SOUND_SET;
final FComboBoxPanel<String> panel = this.view.getSoundSetsComboBoxPanel(); final FComboBoxPanel<String> panel = this.view.getSoundSetsComboBoxPanel();

View File

@@ -75,7 +75,6 @@ public enum VSubmenuPreferences implements IVSubmenu<CSubmenuPreferences> {
private final JCheckBox cbLoadArchivedFormats = new OptionsCheckBox(localizer.getMessage("cbLoadArchivedFormats")); private final JCheckBox cbLoadArchivedFormats = new OptionsCheckBox(localizer.getMessage("cbLoadArchivedFormats"));
private final JCheckBox cbWorkshopSyntax = new OptionsCheckBox(localizer.getMessage("cbWorkshopSyntax")); private final JCheckBox cbWorkshopSyntax = new OptionsCheckBox(localizer.getMessage("cbWorkshopSyntax"));
private final JCheckBox cbEnforceDeckLegality = new OptionsCheckBox(localizer.getMessage("cbEnforceDeckLegality")); private final JCheckBox cbEnforceDeckLegality = new OptionsCheckBox(localizer.getMessage("cbEnforceDeckLegality"));
private final JCheckBox cbSideboardForAI = new OptionsCheckBox(localizer.getMessage("cbSideboardForAI"));
private final JCheckBox cbExperimentalRestore = new OptionsCheckBox(localizer.getMessage("cbExperimentalRestore")); private final JCheckBox cbExperimentalRestore = new OptionsCheckBox(localizer.getMessage("cbExperimentalRestore"));
private final JCheckBox cbPerformanceMode = new OptionsCheckBox(localizer.getMessage("cbPerformanceMode")); private final JCheckBox cbPerformanceMode = new OptionsCheckBox(localizer.getMessage("cbPerformanceMode"));
private final JCheckBox cbSROptimize = new OptionsCheckBox(localizer.getMessage("cbSROptimize")); private final JCheckBox cbSROptimize = new OptionsCheckBox(localizer.getMessage("cbSROptimize"));
@@ -133,6 +132,7 @@ public enum VSubmenuPreferences implements IVSubmenu<CSubmenuPreferences> {
private final FComboBoxPanel<String> cbpSoundSets = new FComboBoxPanel<>(localizer.getMessage("cbpSoundSets")+":"); private final FComboBoxPanel<String> cbpSoundSets = new FComboBoxPanel<>(localizer.getMessage("cbpSoundSets")+":");
private final FComboBoxPanel<String> cbpMusicSets = new FComboBoxPanel<>(localizer.getMessage("cbpMusicSets")+":"); private final FComboBoxPanel<String> cbpMusicSets = new FComboBoxPanel<>(localizer.getMessage("cbpMusicSets")+":");
private final FComboBoxPanel<String> cbpAiProfiles = new FComboBoxPanel<>(localizer.getMessage("cbpAiProfiles")+":"); private final FComboBoxPanel<String> cbpAiProfiles = new FComboBoxPanel<>(localizer.getMessage("cbpAiProfiles")+":");
private final FComboBoxPanel<String> cbpAiSideboardingMode = new FComboBoxPanel<>(localizer.getMessage("cbpAiSideboardingMode")+":");
private final FComboBoxPanel<String> cbpStackAdditions = new FComboBoxPanel<>(localizer.getMessage("cbpStackAdditions")+":"); private final FComboBoxPanel<String> cbpStackAdditions = new FComboBoxPanel<>(localizer.getMessage("cbpStackAdditions")+":");
private final FComboBoxPanel<String> cbpLandPlayed = new FComboBoxPanel<>(localizer.getMessage("cbpLandPlayed")+":"); private final FComboBoxPanel<String> cbpLandPlayed = new FComboBoxPanel<>(localizer.getMessage("cbpLandPlayed")+":");
private final FComboBoxPanel<String> cbpDisplayCurrentCardColors = new FComboBoxPanel<>(localizer.getMessage("cbpDisplayCurrentCardColors")+":"); private final FComboBoxPanel<String> cbpDisplayCurrentCardColors = new FComboBoxPanel<>(localizer.getMessage("cbpDisplayCurrentCardColors")+":");
@@ -231,8 +231,8 @@ public enum VSubmenuPreferences implements IVSubmenu<CSubmenuPreferences> {
pnlPrefs.add(cbPerformanceMode, titleConstraints); pnlPrefs.add(cbPerformanceMode, titleConstraints);
pnlPrefs.add(new NoteLabel(localizer.getMessage("nlPerformanceMode")), descriptionConstraints); pnlPrefs.add(new NoteLabel(localizer.getMessage("nlPerformanceMode")), descriptionConstraints);
pnlPrefs.add(cbSideboardForAI, titleConstraints); pnlPrefs.add(cbpAiSideboardingMode, titleConstraints);
pnlPrefs.add(new NoteLabel(localizer.getMessage("nlSideboardForAI")), descriptionConstraints); pnlPrefs.add(new NoteLabel(localizer.getMessage("nlpAiSideboardingMode")), descriptionConstraints);
pnlPrefs.add(cbExperimentalRestore, titleConstraints); pnlPrefs.add(cbExperimentalRestore, titleConstraints);
pnlPrefs.add(new NoteLabel(localizer.getMessage("nlExperimentalRestore")), descriptionConstraints); pnlPrefs.add(new NoteLabel(localizer.getMessage("nlExperimentalRestore")), descriptionConstraints);
@@ -769,6 +769,10 @@ public enum VSubmenuPreferences implements IVSubmenu<CSubmenuPreferences> {
return cbpAiProfiles; return cbpAiProfiles;
} }
public FComboBoxPanel<String> getAiSideboardingModeComboBoxPanel() {
return cbpAiSideboardingMode;
}
public FComboBoxPanel<String> getCbpStackAdditionsComboBoxPanel() { public FComboBoxPanel<String> getCbpStackAdditionsComboBoxPanel() {
return cbpStackAdditions; return cbpStackAdditions;
} }
@@ -841,10 +845,6 @@ public enum VSubmenuPreferences implements IVSubmenu<CSubmenuPreferences> {
return cbPerformanceMode; return cbPerformanceMode;
} }
public JCheckBox getCbSideboardForAI() {
return cbSideboardForAI;
}
public JCheckBox getCbExperimentalRestore() { public JCheckBox getCbExperimentalRestore() {
return cbExperimentalRestore; return cbExperimentalRestore;
} }

View File

@@ -1,6 +1,7 @@
package forge.screens.settings; package forge.screens.settings;
import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Align;
import com.google.common.collect.Lists;
import forge.Forge; import forge.Forge;
import forge.Graphics; import forge.Graphics;
import forge.MulliganDefs; import forge.MulliganDefs;
@@ -225,13 +226,19 @@ public class SettingsPage extends TabPage<SettingsScreen> {
Forge.getLocalizer().getMessage("cbPerformanceMode"), Forge.getLocalizer().getMessage("cbPerformanceMode"),
Forge.getLocalizer().getMessage("nlPerformanceMode")), Forge.getLocalizer().getMessage("nlPerformanceMode")),
1); 1);
lstSettings.addItem(new BooleanSetting(FPref.MATCH_SIDEBOARD_FOR_AI, lstSettings.addItem(new CustomSelectSetting(FPref.MATCH_AI_SIDEBOARDING_MODE, Forge.getLocalizer().getMessage("cbpAiSideboardingMode"),
Forge.getLocalizer().getMessage("cbSideboardForAI"), Forge.getLocalizer().getMessage("nlpAiSideboardingMode"),
Forge.getLocalizer().getMessage("nlSideboardForAI")), Lists.newArrayList("Off", "AI", "Human For AI")) {
1); @Override
public void valueChanged(String newValue) {
super.valueChanged(newValue);
AiProfileUtil.setAiSideboardingMode(AiProfileUtil.AISideboardingMode.normalizedValueOf(newValue));
System.out.println(AiProfileUtil.getAISideboardingMode());
}
}, 1);
lstSettings.addItem(new BooleanSetting(FPref.MATCH_EXPERIMENTAL_RESTORE, lstSettings.addItem(new BooleanSetting(FPref.MATCH_EXPERIMENTAL_RESTORE,
Forge.getLocalizer().getMessage("cbExperimentalRestore"), Forge.getLocalizer().getMessage("cbExperimentalRestore"),
Forge.getLocalizer().getMessage("nlExperimentalRestore")), Forge.getLocalizer().getMessage("nlExperimentalRestore")),
1); 1);
lstSettings.addItem(new BooleanSetting(FPref.FILTERED_HANDS, lstSettings.addItem(new BooleanSetting(FPref.FILTERED_HANDS,
Forge.getLocalizer().getMessage("cbFilteredHands"), Forge.getLocalizer().getMessage("cbFilteredHands"),

View File

@@ -313,8 +313,6 @@ SACRIFICE_DEFAULT_PREF_ALLOW_TOKENS=true
# A creature should evaluate to no more than this much to be considered for default SacCost preference # A creature should evaluate to no more than this much to be considered for default SacCost preference
SACRIFICE_DEFAULT_PREF_MAX_CREATURE_EVAL=135 SACRIFICE_DEFAULT_PREF_MAX_CREATURE_EVAL=135
# Master toggle enabling AI sideboarding
SIDEBOARDING_ENABLE=true
# Enable sideboarding in limited formats (e.g. Sealed, Draft) # Enable sideboarding in limited formats (e.g. Sealed, Draft)
SIDEBOARDING_IN_LIMITED_FORMATS=false SIDEBOARDING_IN_LIMITED_FORMATS=false
# Chance to proceed with sideboarding any given pair of cards in the devised sideboarding plan # Chance to proceed with sideboarding any given pair of cards in the devised sideboarding plan

View File

@@ -314,8 +314,6 @@ SACRIFICE_DEFAULT_PREF_ALLOW_TOKENS=true
# A creature should evaluate to no more than this much to be considered for default SacCost preference # A creature should evaluate to no more than this much to be considered for default SacCost preference
SACRIFICE_DEFAULT_PREF_MAX_CREATURE_EVAL=135 SACRIFICE_DEFAULT_PREF_MAX_CREATURE_EVAL=135
# Master toggle enabling AI sideboarding
SIDEBOARDING_ENABLE=true
# Enable sideboarding in limited formats (e.g. Sealed, Draft) # Enable sideboarding in limited formats (e.g. Sealed, Draft)
SIDEBOARDING_IN_LIMITED_FORMATS=false SIDEBOARDING_IN_LIMITED_FORMATS=false
# Chance to proceed with sideboarding any given pair of cards in the devised sideboarding plan # Chance to proceed with sideboarding any given pair of cards in the devised sideboarding plan

View File

@@ -314,8 +314,6 @@ SACRIFICE_DEFAULT_PREF_ALLOW_TOKENS=true
# A creature should evaluate to no more than this much to be considered for default SacCost preference # A creature should evaluate to no more than this much to be considered for default SacCost preference
SACRIFICE_DEFAULT_PREF_MAX_CREATURE_EVAL=135 SACRIFICE_DEFAULT_PREF_MAX_CREATURE_EVAL=135
# Master toggle enabling AI sideboarding
SIDEBOARDING_ENABLE=true
# Enable sideboarding in limited formats (e.g. Sealed, Draft) # Enable sideboarding in limited formats (e.g. Sealed, Draft)
SIDEBOARDING_IN_LIMITED_FORMATS=false SIDEBOARDING_IN_LIMITED_FORMATS=false
# Chance to proceed with sideboarding any given pair of cards in the devised sideboarding plan # Chance to proceed with sideboarding any given pair of cards in the devised sideboarding plan

View File

@@ -314,8 +314,6 @@ SACRIFICE_DEFAULT_PREF_ALLOW_TOKENS=true
# A creature should evaluate to no more than this much to be considered for default SacCost preference # A creature should evaluate to no more than this much to be considered for default SacCost preference
SACRIFICE_DEFAULT_PREF_MAX_CREATURE_EVAL=135 SACRIFICE_DEFAULT_PREF_MAX_CREATURE_EVAL=135
# Master toggle enabling AI sideboarding
SIDEBOARDING_ENABLE=true
# Enable sideboarding in limited formats (e.g. Sealed, Draft) # Enable sideboarding in limited formats (e.g. Sealed, Draft)
SIDEBOARDING_IN_LIMITED_FORMATS=false SIDEBOARDING_IN_LIMITED_FORMATS=false
# Chance to proceed with sideboarding any given pair of cards in the devised sideboarding plan # Chance to proceed with sideboarding any given pair of cards in the devised sideboarding plan

View File

@@ -70,7 +70,7 @@ cbLoadCardsLazily=Lade Kartenskripte verzögert
cbLoadArchivedFormats=Aktiviere archivierte Formate cbLoadArchivedFormats=Aktiviere archivierte Formate
cbWorkshopSyntax=Workshop Syntax-Checker cbWorkshopSyntax=Workshop Syntax-Checker
cbEnforceDeckLegality=Deckkonformität cbEnforceDeckLegality=Deckkonformität
cbSideboardForAI=Sideboard für Mensch/KI cbpAiSideboardingMode=AI Sideboarding Mode
cbPerformanceMode=Performance-Modus cbPerformanceMode=Performance-Modus
cbFilteredHands=Alternative Starthand cbFilteredHands=Alternative Starthand
cbImageFetcher=Lade automatisch fehlende Kartenbilder cbImageFetcher=Lade automatisch fehlende Kartenbilder
@@ -156,7 +156,7 @@ nlEnableAICheats=Erlaubt es der KI zu betrügen um Vorteile zu erlangen. Sofern
nlManaBurn=Spiele mit Manabrand (wurde mit M10 aus den Regeln entfernt). nlManaBurn=Spiele mit Manabrand (wurde mit M10 aus den Regeln entfernt).
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.).
nlSideboardForAI=Erlaubt Spielern das Nutzen des Sideboards von KI-Decks und in Constructed-Formaten. 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).
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.

View File

@@ -70,7 +70,7 @@ cbLoadCardsLazily=Load Card Scripts Lazily
cbLoadArchivedFormats=Load Archived Formats cbLoadArchivedFormats=Load Archived Formats
cbWorkshopSyntax=Workshop Syntax Checker cbWorkshopSyntax=Workshop Syntax Checker
cbEnforceDeckLegality=Deck Conformance cbEnforceDeckLegality=Deck Conformance
cbSideboardForAI=Human Sideboard for AI cbpAiSideboardingMode=AI Sideboarding Mode
cbExperimentalRestore=EXPERIMENTAL Undo restore cbExperimentalRestore=EXPERIMENTAL Undo restore
cbPerformanceMode=Performance Mode cbPerformanceMode=Performance Mode
cbFilteredHands=Filtered Hands cbFilteredHands=Filtered Hands
@@ -157,7 +157,7 @@ nlEnableAICheats=Allow the AI to cheat to gain advantage (for personalities that
nlManaBurn=Play with mana burn (from pre-Magic 2010 rules). nlManaBurn=Play with mana burn (from pre-Magic 2010 rules).
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).
nlSideboardForAI=Allows users to sideboard with the AIs deck and sideboard in constructed game 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).
nlExperimentalRestore=EXPERIMENTAL - Stores a snapshot to be used for undoing spells or abilities nlExperimentalRestore=EXPERIMENTAL - Stores a snapshot to be used for undoing spells or abilities
nlPerformanceMode=Disables additional static abilities checks to speed up the game engine. (Warning: breaks some ''as if had flash'' scenarios when casting cards owned by opponents). nlPerformanceMode=Disables additional static abilities checks to speed up the game engine. (Warning: breaks some ''as if had flash'' scenarios when casting cards owned by opponents).
nlFilteredHands=Generates two starting hands and keeps the one with the closest to average land count for the deck. (REQUIRES RESTART) nlFilteredHands=Generates two starting hands and keeps the one with the closest to average land count for the deck. (REQUIRES RESTART)

View File

@@ -70,7 +70,7 @@ cbLoadCardsLazily=Cargar scripts de cartas modo perezoso
cbLoadArchivedFormats=Load Archived Formats cbLoadArchivedFormats=Load Archived Formats
cbWorkshopSyntax=Verificador de sintaxis del Taller cbWorkshopSyntax=Verificador de sintaxis del Taller
cbEnforceDeckLegality=Conformidad del mazo cbEnforceDeckLegality=Conformidad del mazo
cbSideboardForAI=Banquillo humano para la IA cbpAiSideboardingMode=AI Sideboarding Mode
cbPerformanceMode=Modo de desempeño cbPerformanceMode=Modo de desempeño
cbFilteredHands=Manos filtradas cbFilteredHands=Manos filtradas
cbImageFetcher=Descargar automáticamente el arte de la carta si no existe cbImageFetcher=Descargar automáticamente el arte de la carta si no existe
@@ -156,7 +156,7 @@ nlEnableAICheats=Permita que la IA haga trampa para obtener ventaja (para person
nlManaBurn=Jugar con quemadura de maná (reglas previas a Magic 2010). nlManaBurn=Jugar con quemadura de maná (reglas previas a Magic 2010).
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.).
nlSideboardForAI=Permite a los usuarios sideboard con el mazo de la IA y el sideboard en formatos de juego construidos. 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).
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)
nlCloneImgSource=Cuando se habilita, los clones usarán su arte original en lugar del arte de la carta clonada. nlCloneImgSource=Cuando se habilita, los clones usarán su arte original en lugar del arte de la carta clonada.

View File

@@ -70,7 +70,7 @@ cbLoadCardsLazily=Charger les scripts de carte paresseusement
cbLoadArchivedFormats=Charger les formats archivés cbLoadArchivedFormats=Charger les formats archivés
cbWorkshopSyntax=Vérificateur de syntaxe de l''atelier cbWorkshopSyntax=Vérificateur de syntaxe de l''atelier
cbEnforceDeckLegality=Conformité du deck cbEnforceDeckLegality=Conformité du deck
cbSideboardForAI=Réserve humain pour l''IA cbpAiSideboardingMode=AI Sideboarding Mode
cbPerformanceMode=Mode Performances cbPerformanceMode=Mode Performances
cbFilteredHands=Mains filtrées cbFilteredHands=Mains filtrées
cbImageFetcher=Télécharger automatiquement l''illustration de la carte manquante cbImageFetcher=Télécharger automatiquement l''illustration de la carte manquante
@@ -156,7 +156,7 @@ nlEnableAICheats=Autoriser l''IA à tricher pour obtenir un avantage (pour les p
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).
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.).
nlSideboardForAI=Permet aux utilisateurs de se sideboarder avec le deck IA et le sideboard dans des formats de jeu construits. 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).
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.

View File

@@ -69,7 +69,7 @@ cbLoadCardsLazily=Carica gli script delle carte lentamente
cbLoadArchivedFormats=Load Archived Formats cbLoadArchivedFormats=Load Archived Formats
cbWorkshopSyntax=Controllo sintassi per Officina cbWorkshopSyntax=Controllo sintassi per Officina
cbEnforceDeckLegality=Conformità del mazzo cbEnforceDeckLegality=Conformità del mazzo
cbSideboardForAI=Sideboard umana per IA cbpAiSideboardingMode=AI Sideboarding Mode
cbPerformanceMode=Modalità alte prestazioni cbPerformanceMode=Modalità alte prestazioni
cbFilteredHands=Mani Filtrate cbFilteredHands=Mani Filtrate
cbImageFetcher=Scarica automaticamente l''arte delle carte mancanti cbImageFetcher=Scarica automaticamente l''arte delle carte mancanti
@@ -155,7 +155,7 @@ nlEnableAICheats=Consentire all''intelligenza artificiale di imbrogliare per ott
nlManaBurn=Gioca con mana burn (dalle regole pre-Magic 2010). nlManaBurn=Gioca con mana burn (dalle regole pre-Magic 2010).
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.).
nlSideboardForAI=Consente agli utenti di gestire la sideboard con il mazzo dell''IA e la propria nei formati di gioco constructed. 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).
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.

View File

@@ -70,7 +70,7 @@ cbLoadCardsLazily=カードスクリプトを動的ロードする
cbLoadArchivedFormats=Load Archived Formats cbLoadArchivedFormats=Load Archived Formats
cbWorkshopSyntax=ワークショップ構文チェッカー cbWorkshopSyntax=ワークショップ構文チェッカー
cbEnforceDeckLegality=デッキの適正チェック cbEnforceDeckLegality=デッキの適正チェック
cbSideboardForAI=人間が AI の代わりにサイドボードする cbpAiSideboardingMode=AI Sideboarding Mode
cbPerformanceMode=パフォーマンスモード cbPerformanceMode=パフォーマンスモード
cbFilteredHands=初期ハンド補正 cbFilteredHands=初期ハンド補正
cbImageFetcher=欠落したカード画像を自動的にダウンロードする cbImageFetcher=欠落したカード画像を自動的にダウンロードする
@@ -156,7 +156,7 @@ nlEnableAICheats=AI がチートしてアドバンテージを獲得できるよ
nlManaBurn=マナバーンでプレイ。基本セット2010 以前のマジックルール) nlManaBurn=マナバーンでプレイ。基本セット2010 以前のマジックルール)
nlManaLostPrompt=有効にすると、優先権を放棄するとマナプールのマナが失われる場合に警告が表示されます。 nlManaLostPrompt=有効にすると、優先権を放棄するとマナプールのマナが失われる場合に警告が表示されます。
nlEnforceDeckLegality=各環境に使えるデッキの合法性を強制します。(最小デッキサイズ、最大カード数など) nlEnforceDeckLegality=各環境に使えるデッキの合法性を強制します。(最小デッキサイズ、最大カード数など)
nlSideboardForAI=人間が構築戦の時、AI の替わりに AI のデッキのサイドボードをします。 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).
nlPerformanceMode=常在型能力の追加チェックを無効にして、ゲームエンジンを高速化します。 (警告:対戦相手が所有するカードをキャストするときに、「あたかもフラッシュがあるかのように」の能力が無効になるかもしれません。) nlPerformanceMode=常在型能力の追加チェックを無効にして、ゲームエンジンを高速化します。 (警告:対戦相手が所有するカードをキャストするときに、「あたかもフラッシュがあるかのように」の能力が無効になるかもしれません。)
nlFilteredHands=2つのハンドを生成し、デッキの平均土地数に最も近いハンドをキープします。 nlFilteredHands=2つのハンドを生成し、デッキの平均土地数に最も近いハンドをキープします。
nlCloneImgSource=有効にすると、クローンはクローン先のカードのアートの代わりに元のアートを使用します。 nlCloneImgSource=有効にすると、クローンはクローン先のカードのアートの代わりに元のアートを使用します。

View File

@@ -71,7 +71,7 @@ cbLoadCardsLazily=Carregar Scripts de Cartas sob Demanda
cbLoadArchivedFormats=Load Archived Formats cbLoadArchivedFormats=Load Archived Formats
cbWorkshopSyntax=Verificador de Sintaxe no Workshop cbWorkshopSyntax=Verificador de Sintaxe no Workshop
cbEnforceDeckLegality=Conformidade do Deck cbEnforceDeckLegality=Conformidade do Deck
cbSideboardForAI=Humano e a Reserva de IA cbpAiSideboardingMode=AI Sideboarding Mode
cbPerformanceMode=Modo de Desempenho cbPerformanceMode=Modo de Desempenho
cbFilteredHands=Mãos Filtradas cbFilteredHands=Mãos Filtradas
cbImageFetcher=Baixar Automaticamente a Arte de Cartas Ausentes cbImageFetcher=Baixar Automaticamente a Arte de Cartas Ausentes
@@ -157,7 +157,7 @@ nlEnableAICheats=Permita que a trapaça IA obtenha vantagem (para personalidades
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).
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).
nlSideboardForAI=Permite os usuários trocarem cartas com decks IA e a reserva em formatos de jogo construídos. 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).
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.

View File

@@ -70,7 +70,7 @@ cbLoadCardsLazily=惰性加载卡牌脚本
cbLoadArchivedFormats=加载旧赛制 cbLoadArchivedFormats=加载旧赛制
cbWorkshopSyntax=作坊语法检查 cbWorkshopSyntax=作坊语法检查
cbEnforceDeckLegality=套牌一致性 cbEnforceDeckLegality=套牌一致性
cbSideboardForAI=玩家为AI换备 cbpAiSideboardingMode=AI Sideboarding Mode
cbPerformanceMode=性能模式 cbPerformanceMode=性能模式
cbFilteredHands=手牌过滤 cbFilteredHands=手牌过滤
cbImageFetcher=自动下载缺失的图片 cbImageFetcher=自动下载缺失的图片
@@ -156,7 +156,7 @@ nlEnableAICheats=允许AI进行作弊以获得优势对于已经设置了作
nlManaBurn=使用法术力灼烧M10之前的规则 nlManaBurn=使用法术力灼烧M10之前的规则
nlManaLostPrompt=启用后,如果让过优先权会导致法术力池清空,你将收到一个警告提示。 nlManaLostPrompt=启用后,如果让过优先权会导致法术力池清空,你将收到一个警告提示。
nlEnforceDeckLegality=强制每个与环境相关的套牌合法性(最小单卡数,最大单卡数等)。 nlEnforceDeckLegality=强制每个与环境相关的套牌合法性(最小单卡数,最大单卡数等)。
nlSideboardForAI=允许用户在构筑赛制中为AI换备牌。 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).
nlPerformanceMode=禁止其他静态能力检查以加速游戏引擎(警告:对手手牌有闪现单卡能使用时可能会跳过)。 nlPerformanceMode=禁止其他静态能力检查以加速游戏引擎(警告:对手手牌有闪现单卡能使用时可能会跳过)。
nlFilteredHands=生成两个起手并发给你最接近套牌地比例的起手(需要重启) nlFilteredHands=生成两个起手并发给你最接近套牌地比例的起手(需要重启)
nlCloneImgSource=启用克隆的时候将使用原画而不是克隆牌的画 nlCloneImgSource=启用克隆的时候将使用原画而不是克隆牌的画

View File

@@ -9,6 +9,7 @@ import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import forge.ai.AiProfileUtil;
import forge.gui.control.PlaybackSpeed; import forge.gui.control.PlaybackSpeed;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@@ -89,9 +90,23 @@ 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.setSideboardForAI(FModel.getPreferences().getPrefBoolean(FPref.MATCH_SIDEBOARD_FOR_AI));
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
switch (AiProfileUtil.getAISideboardingMode()) {
case Off:
gameRules.setAISideboardingEnabled(false);
gameRules.setSideboardForAI(false);
break;
case AI:
gameRules.setAISideboardingEnabled(true);
gameRules.setSideboardForAI(false);
break;
case HumanForAI:
gameRules.setAISideboardingEnabled(true);
gameRules.setSideboardForAI(true);
break;
}
return gameRules; return gameRules;
} }

View File

@@ -205,7 +205,7 @@ public class ForgePreferences extends PreferencesStore<ForgePreferences.FPref> {
SUBMENU_SETTINGS ("false"), SUBMENU_SETTINGS ("false"),
SUBMENU_UTILITIES ("false"), SUBMENU_UTILITIES ("false"),
MATCH_SIDEBOARD_FOR_AI("true"), // TODO What do when AI knows how to SIdeboard? MATCH_AI_SIDEBOARDING_MODE("Human For AI"),
MATCH_EXPERIMENTAL_RESTORE("false"), MATCH_EXPERIMENTAL_RESTORE("false"),
ENFORCE_DECK_LEGALITY ("true"), ENFORCE_DECK_LEGALITY ("true"),
PERFORMANCE_MODE ("false"), PERFORMANCE_MODE ("false"),