* Added an option to auto order triggers with the same text. Added options to pass priority automatically after spell cast and ability activation. Fixed a problem of the tests with the new Scry mulligan.

This commit is contained in:
LevelX2 2015-09-04 00:25:23 +02:00
parent e16276a3cd
commit 707c1acf6b
10 changed files with 281 additions and 78 deletions

View file

@ -82,8 +82,8 @@
<EmptySpace max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/>
<Component id="main_card" min="-2" max="-2" attributes="0"/> <Component id="main_card" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/>
<Component id="main_game" max="32767" attributes="0"/> <Component id="main_game" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/> <EmptySpace type="unrelated" max="-2" attributes="0"/>
<Component id="main_gamelog" min="-2" max="-2" attributes="0"/> <Component id="main_gamelog" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/>
</Group> </Group>
@ -159,7 +159,7 @@
<Property name="toolTipText" type="java.lang.String" value=""/> <Property name="toolTipText" type="java.lang.String" value=""/>
<Property name="actionCommand" type="java.lang.String" value=""/> <Property name="actionCommand" type="java.lang.String" value=""/>
<Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
<Color id="Default Cursor"/> <Color id="Standardcursor"/>
</Property> </Property>
</Properties> </Properties>
<Events> <Events>
@ -173,7 +173,7 @@
<Property name="toolTipText" type="java.lang.String" value="Write the card&apos;s name on the card to make the card name more recognizable."/> <Property name="toolTipText" type="java.lang.String" value="Write the card&apos;s name on the card to make the card name more recognizable."/>
<Property name="actionCommand" type="java.lang.String" value=""/> <Property name="actionCommand" type="java.lang.String" value=""/>
<Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
<Color id="Default Cursor"/> <Color id="Standardcursor"/>
</Property> </Property>
</Properties> </Properties>
<Events> <Events>
@ -231,7 +231,7 @@
<Component id="cbConfirmEmptyManaPool" min="-2" max="-2" attributes="0"/> <Component id="cbConfirmEmptyManaPool" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/>
<Component id="cbAskMoveToGraveOrder" min="-2" max="-2" attributes="0"/> <Component id="cbAskMoveToGraveOrder" min="-2" max="-2" attributes="0"/>
<EmptySpace max="32767" attributes="0"/> <EmptySpace max="-2" attributes="0"/>
</Group> </Group>
</Group> </Group>
</DimensionLayout> </DimensionLayout>
@ -381,8 +381,8 @@
<Container class="javax.swing.JPanel" name="tabPhases"> <Container class="javax.swing.JPanel" name="tabPhases">
<Constraints> <Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout$JTabbedPaneConstraintsDescription"> <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout$JTabbedPaneConstraintsDescription">
<JTabbedPaneConstraints tabName="Phases"> <JTabbedPaneConstraints tabName="Phases &amp; Priority">
<Property name="tabTitle" type="java.lang.String" value="Phases"/> <Property name="tabTitle" type="java.lang.String" value="Phases &amp; Priority"/>
</JTabbedPaneConstraints> </JTabbedPaneConstraints>
</Constraint> </Constraint>
</Constraints> </Constraints>
@ -528,8 +528,8 @@
<Component id="checkBoxEndTurnOthers" min="-2" max="-2" attributes="0"/> <Component id="checkBoxEndTurnOthers" min="-2" max="-2" attributes="0"/>
</Group> </Group>
<EmptySpace type="unrelated" max="-2" attributes="0"/> <EmptySpace type="unrelated" max="-2" attributes="0"/>
<Component id="phases_stopSettings" min="-2" max="-2" attributes="0"/> <Component id="phases_stopSettings" max="32767" attributes="0"/>
<EmptySpace pref="45" max="32767" attributes="0"/> <EmptySpace max="-2" attributes="0"/>
</Group> </Group>
</Group> </Group>
</DimensionLayout> </DimensionLayout>
@ -537,7 +537,7 @@
<SubComponents> <SubComponents>
<Component class="javax.swing.JLabel" name="jLabelHeadLine"> <Component class="javax.swing.JLabel" name="jLabelHeadLine">
<Properties> <Properties>
<Property name="text" type="java.lang.String" value="Choose phases your game will stop on:"/> <Property name="text" type="java.lang.String" value="Choose phases your game will stop on if not skipped by a skip action (e.g. F6):"/>
</Properties> </Properties>
</Component> </Component>
<Component class="javax.swing.JLabel" name="jLabelYourTurn"> <Component class="javax.swing.JLabel" name="jLabelYourTurn">
@ -628,7 +628,7 @@
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout"> <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout">
<Property name="columns" type="int" value="1"/> <Property name="columns" type="int" value="1"/>
<Property name="rows" type="int" value="4"/> <Property name="rows" type="int" value="7"/>
</Layout> </Layout>
<SubComponents> <SubComponents>
<Component class="javax.swing.JCheckBox" name="cbStopAttack"> <Component class="javax.swing.JCheckBox" name="cbStopAttack">
@ -675,6 +675,45 @@
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="cbStopOnAllEndActionPerformed"/> <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="cbStopOnAllEndActionPerformed"/>
</Events> </Events>
</Component> </Component>
<Component class="javax.swing.JCheckBox" name="cbPassPriorityCast">
<Properties>
<Property name="text" type="java.lang.String" value="Pass priority automatically after you have put a spell on the stack"/>
<Property name="toolTipText" type="java.lang.String" value="If activated the system passes priority automatically for you if you have put a spell on the stack."/>
<Property name="actionCommand" type="java.lang.String" value=""/>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[300, 25]"/>
</Property>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="cbPassPriorityCastActionPerformed"/>
</Events>
</Component>
<Component class="javax.swing.JCheckBox" name="cbPassPriorityActivation">
<Properties>
<Property name="text" type="java.lang.String" value="Pass priority automatically after you have put an activated ability on the stack"/>
<Property name="toolTipText" type="java.lang.String" value="If activated the system passes priority for you automatically after you have put an activated ability on the stack."/>
<Property name="actionCommand" type="java.lang.String" value=""/>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[300, 25]"/>
</Property>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="cbPassPriorityActivationActionPerformed"/>
</Events>
</Component>
<Component class="javax.swing.JCheckBox" name="cbAutoOrderTrigger">
<Properties>
<Property name="text" type="java.lang.String" value="Set order for your triggers automatically if all have the same text"/>
<Property name="toolTipText" type="java.lang.String" value="&lt;HTML&gt;If activated the order to put on the stack your triggers that trigger at the same time&lt;br/&gt;&#xa;is set automatically if all have the same text."/>
<Property name="actionCommand" type="java.lang.String" value=""/>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[300, 25]"/>
</Property>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="cbAutoOrderTriggerActionPerformed"/>
</Events>
</Component>
</SubComponents> </SubComponents>
</Container> </Container>
</SubComponents> </SubComponents>

View file

@ -135,6 +135,9 @@ public class PreferencesDialog extends javax.swing.JDialog {
public static final String KEY_STOP_BLOCK = "stopDeclareBlockersStep"; public static final String KEY_STOP_BLOCK = "stopDeclareBlockersStep";
public static final String KEY_STOP_ALL_MAIN_PHASES = "stopOnAllMainPhases"; public static final String KEY_STOP_ALL_MAIN_PHASES = "stopOnAllMainPhases";
public static final String KEY_STOP_ALL_END_PHASES = "stopOnAllEndPhases"; public static final String KEY_STOP_ALL_END_PHASES = "stopOnAllEndPhases";
public static final String KEY_PASS_PRIORITY_CAST = "passPriorityCast";
public static final String KEY_PASS_PRIORITY_ACTIVATION = "passPriorityActivation";
public static final String KEY_AUTO_ORDER_TRIGGER = "autoOrderTrigger";
// mana auto payment // mana auto payment
public static final String KEY_GAME_MANA_AUTOPAYMENT = "gameManaAutopayment"; public static final String KEY_GAME_MANA_AUTOPAYMENT = "gameManaAutopayment";
@ -394,6 +397,9 @@ public class PreferencesDialog extends javax.swing.JDialog {
cbStopBlock = new javax.swing.JCheckBox(); cbStopBlock = new javax.swing.JCheckBox();
cbStopOnAllMain = new javax.swing.JCheckBox(); cbStopOnAllMain = new javax.swing.JCheckBox();
cbStopOnAllEnd = new javax.swing.JCheckBox(); cbStopOnAllEnd = new javax.swing.JCheckBox();
cbPassPriorityCast = new javax.swing.JCheckBox();
cbPassPriorityActivation = new javax.swing.JCheckBox();
cbAutoOrderTrigger = new javax.swing.JCheckBox();
tabImages = new javax.swing.JPanel(); tabImages = new javax.swing.JPanel();
panelCardImages = new javax.swing.JPanel(); panelCardImages = new javax.swing.JPanel();
cbUseDefaultImageFolder = new javax.swing.JCheckBox(); cbUseDefaultImageFolder = new javax.swing.JCheckBox();
@ -629,7 +635,7 @@ public class PreferencesDialog extends javax.swing.JDialog {
.addComponent(cbConfirmEmptyManaPool) .addComponent(cbConfirmEmptyManaPool)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cbAskMoveToGraveOrder) .addComponent(cbAskMoveToGraveOrder)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap())
); );
nonLandPermanentsInOnePile.getAccessibleContext().setAccessibleName("nonLandPermanentsInOnePile"); nonLandPermanentsInOnePile.getAccessibleContext().setAccessibleName("nonLandPermanentsInOnePile");
@ -691,8 +697,8 @@ public class PreferencesDialog extends javax.swing.JDialog {
.addContainerGap() .addContainerGap()
.addComponent(main_card, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(main_card, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(main_game, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(main_game, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(main_gamelog, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(main_gamelog, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap()) .addContainerGap())
); );
@ -701,7 +707,7 @@ public class PreferencesDialog extends javax.swing.JDialog {
tabsPanel.addTab("Main", tabMain); tabsPanel.addTab("Main", tabMain);
jLabelHeadLine.setText("Choose phases your game will stop on:"); jLabelHeadLine.setText("Choose phases your game will stop on if not skipped by a skip action (e.g. F6):");
jLabelYourTurn.setText("Your turn"); jLabelYourTurn.setText("Your turn");
@ -722,7 +728,7 @@ public class PreferencesDialog extends javax.swing.JDialog {
jLabelEndOfTurn.setText("End of turn:"); jLabelEndOfTurn.setText("End of turn:");
phases_stopSettings.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Stop settings")); phases_stopSettings.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Stop settings"));
phases_stopSettings.setLayout(new java.awt.GridLayout(4, 1)); phases_stopSettings.setLayout(new java.awt.GridLayout(7, 1));
cbStopAttack.setSelected(true); cbStopAttack.setSelected(true);
cbStopAttack.setText("Stop on declare attackers step if you skip steps (F4/F5/F7) and attackers are available"); cbStopAttack.setText("Stop on declare attackers step if you skip steps (F4/F5/F7) and attackers are available");
@ -766,6 +772,39 @@ public class PreferencesDialog extends javax.swing.JDialog {
}); });
phases_stopSettings.add(cbStopOnAllEnd); phases_stopSettings.add(cbStopOnAllEnd);
cbPassPriorityCast.setText("Pass priority automatically after you have put a spell on the stack");
cbPassPriorityCast.setToolTipText("If activated the system passes priority automatically for you if you have put a spell on the stack.");
cbPassPriorityCast.setActionCommand("");
cbPassPriorityCast.setPreferredSize(new java.awt.Dimension(300, 25));
cbPassPriorityCast.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cbPassPriorityCastActionPerformed(evt);
}
});
phases_stopSettings.add(cbPassPriorityCast);
cbPassPriorityActivation.setText("Pass priority automatically after you have put an activated ability on the stack");
cbPassPriorityActivation.setToolTipText("If activated the system passes priority for you automatically after you have put an activated ability on the stack.");
cbPassPriorityActivation.setActionCommand("");
cbPassPriorityActivation.setPreferredSize(new java.awt.Dimension(300, 25));
cbPassPriorityActivation.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cbPassPriorityActivationActionPerformed(evt);
}
});
phases_stopSettings.add(cbPassPriorityActivation);
cbAutoOrderTrigger.setText("Set order for your triggers automatically if all have the same text");
cbAutoOrderTrigger.setToolTipText("<HTML>If activated the order to put on the stack your triggers that trigger at the same time<br/>\nis set automatically if all have the same text.");
cbAutoOrderTrigger.setActionCommand("");
cbAutoOrderTrigger.setPreferredSize(new java.awt.Dimension(300, 25));
cbAutoOrderTrigger.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cbAutoOrderTriggerActionPerformed(evt);
}
});
phases_stopSettings.add(cbAutoOrderTrigger);
javax.swing.GroupLayout tabPhasesLayout = new javax.swing.GroupLayout(tabPhases); javax.swing.GroupLayout tabPhasesLayout = new javax.swing.GroupLayout(tabPhases);
tabPhases.setLayout(tabPhasesLayout); tabPhases.setLayout(tabPhasesLayout);
tabPhasesLayout.setHorizontalGroup( tabPhasesLayout.setHorizontalGroup(
@ -876,11 +915,11 @@ public class PreferencesDialog extends javax.swing.JDialog {
.addComponent(jLabelEndOfTurn) .addComponent(jLabelEndOfTurn)
.addComponent(checkBoxEndTurnOthers)) .addComponent(checkBoxEndTurnOthers))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(phases_stopSettings, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(phases_stopSettings, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap(45, Short.MAX_VALUE)) .addContainerGap())
); );
tabsPanel.addTab("Phases", tabPhases); tabsPanel.addTab("Phases & Priority", tabPhases);
panelCardImages.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Card images:")); panelCardImages.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Card images:"));
@ -1699,7 +1738,7 @@ public class PreferencesDialog extends javax.swing.JDialog {
save(prefs, dialog.cbGameLogAutoSave, KEY_GAME_LOG_AUTO_SAVE, "true", "false", UPDATE_CACHE_POLICY); save(prefs, dialog.cbGameLogAutoSave, KEY_GAME_LOG_AUTO_SAVE, "true", "false", UPDATE_CACHE_POLICY);
save(prefs, dialog.cbDraftLogAutoSave, KEY_DRAFT_LOG_AUTO_SAVE, "true", "false", UPDATE_CACHE_POLICY); save(prefs, dialog.cbDraftLogAutoSave, KEY_DRAFT_LOG_AUTO_SAVE, "true", "false", UPDATE_CACHE_POLICY);
// Phases // Phases & Priority
save(prefs, dialog.checkBoxUpkeepYou, UPKEEP_YOU); save(prefs, dialog.checkBoxUpkeepYou, UPKEEP_YOU);
save(prefs, dialog.checkBoxDrawYou, DRAW_YOU); save(prefs, dialog.checkBoxDrawYou, DRAW_YOU);
save(prefs, dialog.checkBoxMainYou, MAIN_YOU); save(prefs, dialog.checkBoxMainYou, MAIN_YOU);
@ -1720,6 +1759,9 @@ public class PreferencesDialog extends javax.swing.JDialog {
save(prefs, dialog.cbStopBlock, KEY_STOP_BLOCK, "true", "false", UPDATE_CACHE_POLICY); save(prefs, dialog.cbStopBlock, KEY_STOP_BLOCK, "true", "false", UPDATE_CACHE_POLICY);
save(prefs, dialog.cbStopOnAllMain, KEY_STOP_ALL_MAIN_PHASES, "true", "false", UPDATE_CACHE_POLICY); save(prefs, dialog.cbStopOnAllMain, KEY_STOP_ALL_MAIN_PHASES, "true", "false", UPDATE_CACHE_POLICY);
save(prefs, dialog.cbStopOnAllEnd, KEY_STOP_ALL_END_PHASES, "true", "false", UPDATE_CACHE_POLICY); save(prefs, dialog.cbStopOnAllEnd, KEY_STOP_ALL_END_PHASES, "true", "false", UPDATE_CACHE_POLICY);
save(prefs, dialog.cbPassPriorityCast, KEY_PASS_PRIORITY_CAST, "true", "false", UPDATE_CACHE_POLICY);
save(prefs, dialog.cbPassPriorityActivation, KEY_PASS_PRIORITY_ACTIVATION, "true", "false", UPDATE_CACHE_POLICY);
save(prefs, dialog.cbAutoOrderTrigger, KEY_AUTO_ORDER_TRIGGER, "true", "false", UPDATE_CACHE_POLICY);
// images // images
save(prefs, dialog.cbUseDefaultImageFolder, KEY_CARD_IMAGES_USE_DEFAULT, "true", "false", UPDATE_CACHE_POLICY); save(prefs, dialog.cbUseDefaultImageFolder, KEY_CARD_IMAGES_USE_DEFAULT, "true", "false", UPDATE_CACHE_POLICY);
@ -2022,6 +2064,18 @@ public class PreferencesDialog extends javax.swing.JDialog {
// TODO add your handling code here: // TODO add your handling code here:
}//GEN-LAST:event_cbDraftLogAutoSaveActionPerformed }//GEN-LAST:event_cbDraftLogAutoSaveActionPerformed
private void cbPassPriorityCastActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbPassPriorityCastActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_cbPassPriorityCastActionPerformed
private void cbPassPriorityActivationActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbPassPriorityActivationActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_cbPassPriorityActivationActionPerformed
private void cbAutoOrderTriggerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbAutoOrderTriggerActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_cbAutoOrderTriggerActionPerformed
private void showProxySettings() { private void showProxySettings() {
if (cbProxyType.getSelectedItem() == Connection.ProxyType.SOCKS) { if (cbProxyType.getSelectedItem() == Connection.ProxyType.SOCKS) {
this.pnlProxy.setVisible(true); this.pnlProxy.setVisible(true);
@ -2122,6 +2176,9 @@ public class PreferencesDialog extends javax.swing.JDialog {
load(prefs, dialog.cbStopBlock, KEY_STOP_BLOCK, "true", "true"); load(prefs, dialog.cbStopBlock, KEY_STOP_BLOCK, "true", "true");
load(prefs, dialog.cbStopOnAllMain, KEY_STOP_ALL_MAIN_PHASES, "true", "false"); load(prefs, dialog.cbStopOnAllMain, KEY_STOP_ALL_MAIN_PHASES, "true", "false");
load(prefs, dialog.cbStopOnAllEnd, KEY_STOP_ALL_END_PHASES, "true", "false"); load(prefs, dialog.cbStopOnAllEnd, KEY_STOP_ALL_END_PHASES, "true", "false");
load(prefs, dialog.cbPassPriorityCast, KEY_PASS_PRIORITY_CAST, "true", "false");
load(prefs, dialog.cbPassPriorityActivation, KEY_PASS_PRIORITY_ACTIVATION, "true", "false");
load(prefs, dialog.cbAutoOrderTrigger, KEY_AUTO_ORDER_TRIGGER, "true", "true");
} }
@ -2456,7 +2513,10 @@ public class PreferencesDialog extends javax.swing.JDialog {
MageFrame.getPreferences().get(KEY_CONNECT_FLAG, "world"), MageFrame.getPreferences().get(KEY_CONNECT_FLAG, "world"),
PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GAME_ASK_MOVE_TO_GRAVE_ORDER, "true").equals("true"), PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GAME_ASK_MOVE_TO_GRAVE_ORDER, "true").equals("true"),
PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GAME_MANA_AUTOPAYMENT, "true").equals("true"), PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GAME_MANA_AUTOPAYMENT, "true").equals("true"),
PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GAME_MANA_AUTOPAYMENT_ONLY_ONE, "true").equals("true") PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GAME_MANA_AUTOPAYMENT_ONLY_ONE, "true").equals("true"),
PreferencesDialog.getCachedValue(PreferencesDialog.KEY_PASS_PRIORITY_CAST, "true").equals("true"),
PreferencesDialog.getCachedValue(PreferencesDialog.KEY_PASS_PRIORITY_ACTIVATION, "true").equals("true"),
PreferencesDialog.getCachedValue(PreferencesDialog.KEY_AUTO_ORDER_TRIGGER, "true").equals("true")
); );
} }
@ -2469,6 +2529,7 @@ public class PreferencesDialog extends javax.swing.JDialog {
private javax.swing.JButton btnBrowseImageLocation; private javax.swing.JButton btnBrowseImageLocation;
private javax.swing.JCheckBox cbAllowRequestToShowHandCards; private javax.swing.JCheckBox cbAllowRequestToShowHandCards;
private javax.swing.JCheckBox cbAskMoveToGraveOrder; private javax.swing.JCheckBox cbAskMoveToGraveOrder;
private javax.swing.JCheckBox cbAutoOrderTrigger;
private javax.swing.JCheckBox cbCheckForNewImages; private javax.swing.JCheckBox cbCheckForNewImages;
private javax.swing.JCheckBox cbConfirmEmptyManaPool; private javax.swing.JCheckBox cbConfirmEmptyManaPool;
private javax.swing.JCheckBox cbDraftLogAutoSave; private javax.swing.JCheckBox cbDraftLogAutoSave;
@ -2478,6 +2539,8 @@ public class PreferencesDialog extends javax.swing.JDialog {
private javax.swing.JCheckBox cbEnableOtherSounds; private javax.swing.JCheckBox cbEnableOtherSounds;
private javax.swing.JCheckBox cbEnableSkipButtonsSounds; private javax.swing.JCheckBox cbEnableSkipButtonsSounds;
private javax.swing.JCheckBox cbGameLogAutoSave; private javax.swing.JCheckBox cbGameLogAutoSave;
private javax.swing.JCheckBox cbPassPriorityActivation;
private javax.swing.JCheckBox cbPassPriorityCast;
private javax.swing.JComboBox<String> cbPreferedImageLanguage; private javax.swing.JComboBox<String> cbPreferedImageLanguage;
private javax.swing.JComboBox<ProxyType> cbProxyType; private javax.swing.JComboBox<ProxyType> cbProxyType;
private javax.swing.JCheckBox cbSaveToZipFiles; private javax.swing.JCheckBox cbSaveToZipFiles;

View file

@ -562,6 +562,18 @@ public class HumanPlayer extends PlayerImpl {
public boolean priority(Game game) { public boolean priority(Game game) {
passed = false; passed = false;
if (!abort) { if (!abort) {
if (getJustActivatedType() != null) {
if (userData.isPassPriorityCast() && getJustActivatedType().equals(AbilityType.SPELL)) {
setJustActivatedType(null);
pass(game);
return false;
}
if (userData.isPassPriorityActivation() && getJustActivatedType().equals(AbilityType.ACTIVATED)) {
setJustActivatedType(null);
pass(game);
return false;
}
}
if (passedAllTurns) { if (passedAllTurns) {
if (passWithManaPoolCheck(game)) { if (passWithManaPoolCheck(game)) {
return false; return false;
@ -693,6 +705,8 @@ public class HumanPlayer extends PlayerImpl {
@Override @Override
public TriggeredAbility chooseTriggeredAbility(List<TriggeredAbility> abilities, Game game) { public TriggeredAbility chooseTriggeredAbility(List<TriggeredAbility> abilities, Game game) {
String autoOrderRuleText = null;
boolean autoOrderUse = getUserData().isAutoOrderTrigger();
while (!abort) { while (!abort) {
// try to set trigger auto order // try to set trigger auto order
List<TriggeredAbility> abilitiesWithNoOrderSet = new ArrayList<>(); List<TriggeredAbility> abilitiesWithNoOrderSet = new ArrayList<>();
@ -712,12 +726,19 @@ public class HumanPlayer extends PlayerImpl {
abilityOrderLast = ability; abilityOrderLast = ability;
continue; continue;
} }
if (autoOrderUse) {
if (autoOrderRuleText == null) {
autoOrderRuleText = ability.getRule();
} else if (!ability.getRule().equals(autoOrderRuleText)) {
autoOrderUse = false;
}
}
abilitiesWithNoOrderSet.add(ability); abilitiesWithNoOrderSet.add(ability);
} }
if (abilitiesWithNoOrderSet.isEmpty()) { if (abilitiesWithNoOrderSet.isEmpty()) {
return abilityOrderLast; return abilityOrderLast;
} }
if (abilitiesWithNoOrderSet.size() == 1) { if (abilitiesWithNoOrderSet.size() == 1 || autoOrderUse) {
return abilitiesWithNoOrderSet.iterator().next(); return abilitiesWithNoOrderSet.iterator().next();
} }
updateGameStatePriority("chooseTriggeredAbility", game); updateGameStatePriority("chooseTriggeredAbility", game);

View file

@ -27,7 +27,6 @@
*/ */
package org.mage.test.cards.abilities.keywords; package org.mage.test.cards.abilities.keywords;
import mage.cards.Card; import mage.cards.Card;
import mage.constants.PhaseStep; import mage.constants.PhaseStep;
import mage.constants.Zone; import mage.constants.Zone;
@ -39,7 +38,6 @@ import org.mage.test.serverside.base.CardTestPlayerBase;
* *
* @author LevelX2 * @author LevelX2
*/ */
public class ManifestTest extends CardTestPlayerBase { public class ManifestTest extends CardTestPlayerBase {
/** /**
@ -73,7 +71,8 @@ public class ManifestTest extends CardTestPlayerBase {
} }
/** /**
* If Doomwake Giant gets manifested, it's Constellation trigger may not trigger * If Doomwake Giant gets manifested, it's Constellation trigger may not
* trigger
*/ */
@Test @Test
public void testETBTriggeredAbilities2() { public void testETBTriggeredAbilities2() {
@ -103,8 +102,10 @@ public class ManifestTest extends CardTestPlayerBase {
assertPermanentCount(playerB, "Silvercoat Lion", 1); assertPermanentCount(playerB, "Silvercoat Lion", 1);
assertPowerToughness(playerB, "Silvercoat Lion", 2, 2); assertPowerToughness(playerB, "Silvercoat Lion", 2, 2);
} }
/** /**
* If Doomwake Giant gets manifested, it's Constellation trigger may not trigger * If Doomwake Giant gets manifested, it's Constellation trigger may not
* trigger
*/ */
@Test @Test
public void testETBTriggeredAbilities3() { public void testETBTriggeredAbilities3() {
@ -138,8 +139,10 @@ public class ManifestTest extends CardTestPlayerBase {
assertPermanentCount(playerB, "Pillarfield Ox", 1); assertPermanentCount(playerB, "Pillarfield Ox", 1);
assertPowerToughness(playerB, "Pillarfield Ox", 2, 4); assertPowerToughness(playerB, "Pillarfield Ox", 2, 4);
} }
/** /**
* If Doomwake Giant gets manifested, it's Constellation trigger may not trigger * If Doomwake Giant gets manifested, it's Constellation trigger may not
* trigger
*/ */
@Test @Test
public void testNylea() { public void testNylea() {
@ -210,6 +213,7 @@ public class ManifestTest extends CardTestPlayerBase {
/* /*
I casted a Silence the Believers on a manifested card. It moved to the exile zone face-down. I casted a Silence the Believers on a manifested card. It moved to the exile zone face-down.
*/ */
@Test @Test
public void testCardGetsExiledFaceUp() { public void testCardGetsExiledFaceUp() {
addCard(Zone.BATTLEFIELD, playerB, "Island", 2); addCard(Zone.BATTLEFIELD, playerB, "Island", 2);
@ -255,7 +259,6 @@ public class ManifestTest extends CardTestPlayerBase {
// Qarsi High Priest went to manifest Illusory Gains, // Qarsi High Priest went to manifest Illusory Gains,
// but it made me choose a target for gains, then enchanted the card to that creature. // but it made me choose a target for gains, then enchanted the card to that creature.
@Test @Test
public void testManifestAura() { public void testManifestAura() {
@ -282,15 +285,13 @@ public class ManifestTest extends CardTestPlayerBase {
assertGraveyardCount(playerB, "Illusory Gains", 0); assertGraveyardCount(playerB, "Illusory Gains", 0);
assertGraveyardCount(playerB, "Silvercoat Lion", 1); assertGraveyardCount(playerB, "Silvercoat Lion", 1);
// a facedown creature is on the battlefield // a facedown creature is on the battlefield
assertPermanentCount(playerB, "", 1); assertPermanentCount(playerB, "", 1);
} }
// Check if a Megamorph card is manifested and truned by their megamorph ability // Check if a Megamorph card is manifested and turned face up by their megamorph ability
// it gets the +1/+1 counter. // it gets the +1/+1 counter.
@Test @Test
public void testManifestMegamorph() { public void testManifestMegamorph() {
@ -300,6 +301,8 @@ public class ManifestTest extends CardTestPlayerBase {
addCard(Zone.BATTLEFIELD, playerB, "Qarsi High Priest", 1); addCard(Zone.BATTLEFIELD, playerB, "Qarsi High Priest", 1);
addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1); addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1);
// Reach (This creature can block creatures with flying.)
// Megamorph {5}{G}
addCard(Zone.LIBRARY, playerB, "Aerie Bowmasters", 1); addCard(Zone.LIBRARY, playerB, "Aerie Bowmasters", 1);
addCard(Zone.LIBRARY, playerB, "Mountain", 1); addCard(Zone.LIBRARY, playerB, "Mountain", 1);
@ -326,7 +329,8 @@ public class ManifestTest extends CardTestPlayerBase {
} }
/** /**
* When a Forest came manifested into play my Courser of Kruphix gained me a life. * When a Forest came manifested into play my Courser of Kruphix gained me a
* life.
* *
*/ */
@Test @Test
@ -349,7 +353,6 @@ public class ManifestTest extends CardTestPlayerBase {
activateAbility(2, PhaseStep.PRECOMBAT_MAIN, playerB, "{1}{B},{T}, Sacrifice another creature"); activateAbility(2, PhaseStep.PRECOMBAT_MAIN, playerB, "{1}{B},{T}, Sacrifice another creature");
addTarget(playerB, "Silvercoat Lion"); addTarget(playerB, "Silvercoat Lion");
setStopAt(2, PhaseStep.END_TURN); setStopAt(2, PhaseStep.END_TURN);
execute(); execute();
@ -379,7 +382,6 @@ public class ManifestTest extends CardTestPlayerBase {
addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 2); addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 2);
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Sacrifice"); activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Sacrifice");
castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Seismic Rupture"); castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Seismic Rupture");

View file

@ -88,7 +88,8 @@ public class SoulbondKeywordTest extends CardTestPlayerBase {
} }
/** /**
* Tests Soulbond effect disabling whenever Soulbond creature changes its controller * Tests Soulbond effect disabling whenever Soulbond creature changes its
* controller
*/ */
@Test @Test
public void testChangeControllerForSoulbondCreature() { public void testChangeControllerForSoulbondCreature() {
@ -115,7 +116,8 @@ public class SoulbondKeywordTest extends CardTestPlayerBase {
} }
/** /**
* Tests Soulbond effect disabling when paired creture changes its controller * Tests Soulbond effect disabling when paired creture changes its
* controller
*/ */
@Test @Test
public void testChangeControllerForAnotherCreature() { public void testChangeControllerForAnotherCreature() {
@ -141,8 +143,8 @@ public class SoulbondKeywordTest extends CardTestPlayerBase {
} }
/** /**
* Tests Soulbond effect disabling when Soulbond creature changes its controller and then returns back. * Tests Soulbond effect disabling when Soulbond creature changes its
* Effect should not be restored. * controller and then returns back. Effect should not be restored.
*/ */
@Test @Test
public void testChangeControllerAndGettingBack() { public void testChangeControllerAndGettingBack() {
@ -166,7 +168,8 @@ public class SoulbondKeywordTest extends CardTestPlayerBase {
} }
/** /**
* Tests that stealing creature will allow to use Soulbond ability on controller's creature * Tests that stealing creature will allow to use Soulbond ability on
* controller's creature
*/ */
@Test @Test
public void testSoulbondWorksOnControllerSide() { public void testSoulbondWorksOnControllerSide() {
@ -243,7 +246,8 @@ public class SoulbondKeywordTest extends CardTestPlayerBase {
} }
/** /**
* Tests that it is possible to animate land and pair it on next coming Soulbond creature * Tests that it is possible to animate land and pair it on next coming
* Soulbond creature
*/ */
@Test @Test
public void testPairOnAnimatedLand() { public void testPairOnAnimatedLand() {
@ -263,7 +267,8 @@ public class SoulbondKeywordTest extends CardTestPlayerBase {
} }
/** /**
* Tests no effect whether land was animated after Soulbond creature has entered the battlefield * Tests no effect whether land was animated after Soulbond creature has
* entered the battlefield
*/ */
@Test @Test
public void testPairOnPostAnimatedLand() { public void testPairOnPostAnimatedLand() {
@ -302,7 +307,8 @@ public class SoulbondKeywordTest extends CardTestPlayerBase {
} }
/** /**
* Tests that after loosing first pair it is possible to pair creature with another one * Tests that after loosing first pair it is possible to pair creature with
* another one
*/ */
@Test @Test
public void testRebondOnNextCreature() { public void testRebondOnNextCreature() {
@ -357,6 +363,8 @@ public class SoulbondKeywordTest extends CardTestPlayerBase {
public void testExileAndReturnBack() { public void testExileAndReturnBack() {
addCard(Zone.HAND, playerA, "Elite Vanguard"); addCard(Zone.HAND, playerA, "Elite Vanguard");
addCard(Zone.HAND, playerA, "Cloudshift"); addCard(Zone.HAND, playerA, "Cloudshift");
// Soulbond (You may pair this creature with another unpaired creature when either enters the battlefield. They remain paired for as long as you control both of them.)
// As long as Trusted Forcemage is paired with another creature, each of those creatures gets +1/+1.
addCard(Zone.BATTLEFIELD, playerA, "Trusted Forcemage"); addCard(Zone.BATTLEFIELD, playerA, "Trusted Forcemage");
addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); addCard(Zone.BATTLEFIELD, playerA, "Plains", 2);

View file

@ -53,6 +53,7 @@ import mage.cards.Card;
import mage.cards.Cards; import mage.cards.Cards;
import mage.cards.decks.Deck; import mage.cards.decks.Deck;
import mage.choices.Choice; import mage.choices.Choice;
import mage.constants.AbilityType;
import mage.constants.ManaType; import mage.constants.ManaType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.PhaseStep; import mage.constants.PhaseStep;
@ -803,6 +804,9 @@ public class TestPlayer implements Player {
@Override @Override
public boolean chooseUse(Outcome outcome, MessageToClient message, Ability source, Game game) { public boolean chooseUse(Outcome outcome, MessageToClient message, Ability source, Game game) {
if (message.getMessage().equals("Scry 1?")) {
return false;
}
if (!choices.isEmpty()) { if (!choices.isEmpty()) {
if (choices.get(0).equals("No")) { if (choices.get(0).equals("No")) {
choices.remove(0); choices.remove(0);
@ -813,7 +817,7 @@ public class TestPlayer implements Player {
return true; return true;
} }
} }
return true; return computerPlayer.chooseUse(outcome, message, source, game);
} }
@Override @Override
@ -1822,6 +1826,16 @@ public class TestPlayer implements Player {
return computerPlayer.getMatchPlayer(); return computerPlayer.getMatchPlayer();
} }
@Override
public AbilityType getJustActivatedType() {
return computerPlayer.getJustActivatedType();
}
@Override
public void setJustActivatedType(AbilityType justActivatedType) {
computerPlayer.setJustActivatedType(justActivatedType);
}
@Override @Override
public void cleanUpOnMatchEnd() { public void cleanUpOnMatchEnd() {
computerPlayer.cleanUpOnMatchEnd(); computerPlayer.cleanUpOnMatchEnd();

View file

@ -52,6 +52,7 @@ import mage.cards.Card;
import mage.cards.Cards; import mage.cards.Cards;
import mage.cards.decks.Deck; import mage.cards.decks.Deck;
import mage.choices.Choice; import mage.choices.Choice;
import mage.constants.AbilityType;
import mage.constants.ManaType; import mage.constants.ManaType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.PlayerAction; import mage.constants.PlayerAction;
@ -192,6 +193,10 @@ public interface Player extends MageItem, Copyable<Player> {
boolean getPassedAllTurns(); boolean getPassedAllTurns();
AbilityType getJustActivatedType();
void setJustActivatedType(AbilityType abilityType);
boolean hasLost(); boolean hasLost();
boolean hasWon(); boolean hasWon();

View file

@ -176,6 +176,7 @@ public abstract class PlayerImpl implements Player, Serializable {
* and abilities in the stack and will pass them as well. * and abilities in the stack and will pass them as well.
*/ */
protected boolean passedAllTurns; // F9 protected boolean passedAllTurns; // F9
protected AbilityType justActivatedType; // used to check if priority can be passed automatically
protected int turns; protected int turns;
protected int storedBookmark = -1; protected int storedBookmark = -1;
@ -317,6 +318,7 @@ public abstract class PlayerImpl implements Player, Serializable {
this.passedUntilStackResolved = player.passedUntilStackResolved; this.passedUntilStackResolved = player.passedUntilStackResolved;
this.dateLastAddedToStack = player.dateLastAddedToStack; this.dateLastAddedToStack = player.dateLastAddedToStack;
this.passedAllTurns = player.passedAllTurns; this.passedAllTurns = player.passedAllTurns;
this.justActivatedType = player.justActivatedType;
this.priorityTimeLeft = player.getPriorityTimeLeft(); this.priorityTimeLeft = player.getPriorityTimeLeft();
this.reachedNextTurnAfterLeaving = player.reachedNextTurnAfterLeaving; this.reachedNextTurnAfterLeaving = player.reachedNextTurnAfterLeaving;
@ -440,6 +442,7 @@ public abstract class PlayerImpl implements Player, Serializable {
this.skippedAtLeastOnce = false; this.skippedAtLeastOnce = false;
this.passedUntilStackResolved = false; this.passedUntilStackResolved = false;
this.passedAllTurns = false; this.passedAllTurns = false;
this.justActivatedType = null;
this.canGainLife = true; this.canGainLife = true;
this.canLoseLife = true; this.canLoseLife = true;
this.topCardRevealed = false; this.topCardRevealed = false;
@ -1130,7 +1133,11 @@ public abstract class PlayerImpl implements Player, Serializable {
} }
//if player has taken an action then reset all player passed flags //if player has taken an action then reset all player passed flags
justActivatedType = null;
if (result) { if (result) {
if (isHuman() && (ability.getAbilityType().equals(AbilityType.SPELL) || ability.getAbilityType().equals(AbilityType.ACTIVATED))) {
setJustActivatedType(ability.getAbilityType());
}
game.getPlayers().resetPassed(); game.getPlayers().resetPassed();
} }
return result; return result;
@ -3246,6 +3253,16 @@ public abstract class PlayerImpl implements Player, Serializable {
return passedUntilStackResolved; return passedUntilStackResolved;
} }
@Override
public AbilityType getJustActivatedType() {
return justActivatedType;
}
@Override
public void setJustActivatedType(AbilityType justActivatedType) {
this.justActivatedType = justActivatedType;
}
@Override @Override
public void revokePermissionToSeeHandCards() { public void revokePermissionToSeeHandCards() {
usersAllowedToSeeHandCards.clear(); usersAllowedToSeeHandCards.clear();

View file

@ -19,10 +19,14 @@ public class UserData implements Serializable {
protected boolean askMoveToGraveOrder; protected boolean askMoveToGraveOrder;
protected boolean manaPoolAutomatic; protected boolean manaPoolAutomatic;
protected boolean manaPoolAutomaticRestricted; protected boolean manaPoolAutomaticRestricted;
protected boolean passPriorityCast;
protected boolean passPriorityActivation;
protected boolean autoOrderTrigger;
public UserData(UserGroup userGroup, int avatarId, boolean showAbilityPickerForced, public UserData(UserGroup userGroup, int avatarId, boolean showAbilityPickerForced,
boolean allowRequestShowHandCards, boolean confirmEmptyManaPool, UserSkipPrioritySteps userSkipPrioritySteps, boolean allowRequestShowHandCards, boolean confirmEmptyManaPool, UserSkipPrioritySteps userSkipPrioritySteps,
String flagName, boolean askMoveToGraveOrder, boolean manaPoolAutomatic, boolean manaPoolAutomaticRestricted) { String flagName, boolean askMoveToGraveOrder, boolean manaPoolAutomatic, boolean manaPoolAutomaticRestricted,
boolean passPriorityCast, boolean passPriorityActivation, boolean autoOrderTrigger) {
this.groupId = userGroup.getGroupId(); this.groupId = userGroup.getGroupId();
this.avatarId = avatarId; this.avatarId = avatarId;
this.showAbilityPickerForced = showAbilityPickerForced; this.showAbilityPickerForced = showAbilityPickerForced;
@ -33,6 +37,9 @@ public class UserData implements Serializable {
this.askMoveToGraveOrder = askMoveToGraveOrder; this.askMoveToGraveOrder = askMoveToGraveOrder;
this.manaPoolAutomatic = manaPoolAutomatic; this.manaPoolAutomatic = manaPoolAutomatic;
this.manaPoolAutomaticRestricted = manaPoolAutomaticRestricted; this.manaPoolAutomaticRestricted = manaPoolAutomaticRestricted;
this.passPriorityCast = passPriorityCast;
this.passPriorityActivation = passPriorityActivation;
this.autoOrderTrigger = autoOrderTrigger;
} }
public void update(UserData userData) { public void update(UserData userData) {
@ -46,10 +53,13 @@ public class UserData implements Serializable {
this.askMoveToGraveOrder = userData.askMoveToGraveOrder; this.askMoveToGraveOrder = userData.askMoveToGraveOrder;
this.manaPoolAutomatic = userData.manaPoolAutomatic; this.manaPoolAutomatic = userData.manaPoolAutomatic;
this.manaPoolAutomaticRestricted = userData.manaPoolAutomaticRestricted; this.manaPoolAutomaticRestricted = userData.manaPoolAutomaticRestricted;
this.passPriorityCast = userData.passPriorityCast;
this.passPriorityActivation = userData.passPriorityActivation;
this.autoOrderTrigger = userData.autoOrderTrigger;
} }
public static UserData getDefaultUserDataView() { public static UserData getDefaultUserDataView() {
return new UserData(UserGroup.DEFAULT, 0, false, false, true, null, "world.png", false, true, true); return new UserData(UserGroup.DEFAULT, 0, false, false, true, null, "world.png", false, true, true, false, false, false);
} }
public void setGroupId(int groupId) { public void setGroupId(int groupId) {
@ -132,4 +142,28 @@ public class UserData implements Serializable {
this.manaPoolAutomaticRestricted = manaPoolAutomaticRestricted; this.manaPoolAutomaticRestricted = manaPoolAutomaticRestricted;
} }
public boolean isPassPriorityCast() {
return passPriorityCast;
}
public void setPassPriorityCast(boolean passPriorityCast) {
this.passPriorityCast = passPriorityCast;
}
public boolean isPassPriorityActivation() {
return passPriorityActivation;
}
public void setPassPriorityActivation(boolean passPriorityActivation) {
this.passPriorityActivation = passPriorityActivation;
}
public boolean isAutoOrderTrigger() {
return autoOrderTrigger;
}
public void setAutoOrderTrigger(boolean autoOrderTrigger) {
this.autoOrderTrigger = autoOrderTrigger;
}
} }

View file

@ -109,7 +109,7 @@ public class SoulbondWatcher extends Watcher {
Cards cards = new CardsImpl(); Cards cards = new CardsImpl();
cards.add(chosen); cards.add(chosen);
controller.lookAtCards("Soulbond", cards, game); controller.lookAtCards("Soulbond", cards, game);
if (controller.chooseUse(Outcome.Benefit, "Use Soulbond for recent " + permanent.getLogName() + "?", null, game)) { if (controller.chooseUse(Outcome.Benefit, "Use Soulbond for recent " + permanent.getLogName() + "?", SoulbondAbility.getInstance(), game)) {
chosen.setPairedCard(permanent.getId()); chosen.setPairedCard(permanent.getId());
permanent.setPairedCard(chosen.getId()); permanent.setPairedCard(chosen.getId());
if (!game.isSimulation()) { if (!game.isSimulation()) {