mirror of
https://github.com/magefree/mage.git
synced 2025-12-26 21:42:07 -08:00
Merge branch 'master' into Network_Upgrade
Conflicts: Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java Mage.Client/src/main/java/mage/client/game/FeedbackPanel.java Mage.Client/src/main/java/mage/client/game/GamePanel.java Mage.Server/src/main/java/mage/server/game/GameSessionPlayer.java
This commit is contained in:
commit
49558e091d
687 changed files with 32892 additions and 4564 deletions
|
|
@ -6,7 +6,7 @@
|
|||
<parent>
|
||||
<groupId>org.mage</groupId>
|
||||
<artifactId>mage-root</artifactId>
|
||||
<version>1.4.3</version>
|
||||
<version>1.4.4</version>
|
||||
</parent>
|
||||
|
||||
<groupId>org.mage</groupId>
|
||||
|
|
|
|||
|
|
@ -396,7 +396,8 @@ public class DeckGenerator {
|
|||
private static Card getBasicLand(ColoredManaSymbol color, Map<String, List<CardInfo>> basicLands) {
|
||||
Random random = new Random();
|
||||
String landName = DeckGeneratorPool.getBasicLandName(color.toString());
|
||||
return basicLands.get(landName).get(random.nextInt(basicLands.size() - 1)).getMockCard().copy();
|
||||
List<CardInfo> basicLandsInfo = basicLands.get(landName);
|
||||
return basicLandsInfo.get(random.nextInt(basicLandsInfo.size() - 1)).getMockCard().copy();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -385,6 +385,12 @@ public class DeckGeneratorPool
|
|||
if(spellSize < nonLandSize) {
|
||||
|
||||
int spellsNeeded = nonLandSize-spellSize;
|
||||
|
||||
// If we haven't got enough spells in reserve to fulfil the amount we need, we can't continue.
|
||||
if(reserveSpells.size() < spellsNeeded) {
|
||||
throw new IllegalStateException("Not enough cards found to generate deck. Please try again");
|
||||
}
|
||||
|
||||
List<Card> spellsToAdd = new ArrayList<>(spellsNeeded);
|
||||
|
||||
// Initial reservoir
|
||||
|
|
@ -401,7 +407,6 @@ public class DeckGeneratorPool
|
|||
// Add randomly selected spells needed
|
||||
deckCards.addAll(spellsToAdd);
|
||||
}
|
||||
|
||||
// More spells than needed
|
||||
else if(spellSize > (deckSize - landCount)) {
|
||||
|
||||
|
|
@ -410,8 +415,11 @@ public class DeckGeneratorPool
|
|||
deckCards.remove(random.nextInt(deckCards.size()));
|
||||
}
|
||||
}
|
||||
if(deckCards.size() != nonLandSize)
|
||||
|
||||
// Not strictly necessary as we check when adding cards, but worth double checking anyway.
|
||||
if(deckCards.size() != nonLandSize) {
|
||||
throw new IllegalStateException("Not enough cards found to generate deck. Please try again");
|
||||
}
|
||||
|
||||
// Return the fixed amount
|
||||
return deckCards;
|
||||
|
|
|
|||
|
|
@ -31,16 +31,9 @@
|
|||
*
|
||||
* Created on 20-Jan-2010, 9:37:07 PM
|
||||
*/
|
||||
|
||||
package mage.client.dialog;
|
||||
|
||||
import mage.client.MageFrame;
|
||||
import mage.client.util.Config;
|
||||
import mage.remote.Connection;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.Cursor;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.io.BufferedReader;
|
||||
|
|
@ -63,10 +56,17 @@ import java.util.concurrent.CancellationException;
|
|||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.SwingWorker;
|
||||
import mage.client.MageFrame;
|
||||
import static mage.client.dialog.PreferencesDialog.KEY_CONNECTION_URL_SERVER_LIST;
|
||||
import static mage.client.dialog.PreferencesDialog.KEY_CONNECT_AUTO_CONNECT;
|
||||
import static mage.client.dialog.PreferencesDialog.KEY_CONNECT_FLAG;
|
||||
import mage.client.util.Config;
|
||||
import mage.client.util.gui.countryBox.CountryItemEditor;
|
||||
import mage.remote.Connection;
|
||||
import mage.remote.Connection.ProxyType;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
|
|
@ -125,10 +125,9 @@ public class ConnectDialog extends MageDialog {
|
|||
}
|
||||
|
||||
/**
|
||||
* This method is called from within the constructor to
|
||||
* initialize the form.
|
||||
* WARNING: Do NOT modify this code. The content of this method is
|
||||
* always regenerated by the Form Editor.
|
||||
* This method is called from within the constructor to initialize the form.
|
||||
* WARNING: Do NOT modify this code. The content of this method is always
|
||||
* regenerated by the Form Editor.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||
|
|
@ -414,7 +413,6 @@ public class ConnectDialog extends MageDialog {
|
|||
this.hideDialog();
|
||||
}
|
||||
|
||||
|
||||
private void keyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_keyTyped
|
||||
char c = evt.getKeyChar();
|
||||
if (!Character.isDigit(c)) {
|
||||
|
|
@ -430,9 +428,13 @@ public class ConnectDialog extends MageDialog {
|
|||
private void findPublicServerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
|
||||
BufferedReader in = null;
|
||||
try {
|
||||
String serverUrl = PreferencesDialog.getCachedValue(KEY_CONNECTION_URL_SERVER_LIST, "http://xmage.de/files/server-list.txt");
|
||||
if (serverUrl.contains("xmage.info/files/")) {
|
||||
serverUrl = serverUrl.replace("xmage.info/files/", "xmage.de/files/"); // replace old URL if still saved
|
||||
PreferencesDialog.saveValue(KEY_CONNECTION_URL_SERVER_LIST, serverUrl);
|
||||
}
|
||||
URL serverListURL = new URL(serverUrl);
|
||||
|
||||
URL serverListURL = new URL(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CONNECTION_URL_SERVER_LIST, "http://xmage.de/files/server-list.txt"));
|
||||
|
||||
Connection.ProxyType configProxyType = Connection.ProxyType.valueByText(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_PROXY_TYPE, "None"));
|
||||
Proxy p = null;
|
||||
Proxy.Type type = Proxy.Type.DIRECT;
|
||||
|
|
@ -541,7 +543,6 @@ public class ConnectDialog extends MageDialog {
|
|||
// TODO add your handling code here:
|
||||
}//GEN-LAST:event_chkForceUpdateDBActionPerformed
|
||||
|
||||
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
private javax.swing.JButton btnCancel;
|
||||
private javax.swing.JButton btnConnect;
|
||||
|
|
|
|||
|
|
@ -82,8 +82,8 @@
|
|||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="main_card" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="main_game" max="32767" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="main_game" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||
<Component id="main_gamelog" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
</Group>
|
||||
|
|
@ -159,7 +159,7 @@
|
|||
<Property name="toolTipText" 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">
|
||||
<Color id="Default Cursor"/>
|
||||
<Color id="Standardcursor"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Events>
|
||||
|
|
@ -173,7 +173,7 @@
|
|||
<Property name="toolTipText" type="java.lang.String" value="Write the card's name on the card to make the card name more recognizable."/>
|
||||
<Property name="actionCommand" type="java.lang.String" value=""/>
|
||||
<Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
|
||||
<Color id="Default Cursor"/>
|
||||
<Color id="Standardcursor"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Events>
|
||||
|
|
@ -231,7 +231,7 @@
|
|||
<Component id="cbConfirmEmptyManaPool" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace 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>
|
||||
</DimensionLayout>
|
||||
|
|
@ -381,8 +381,8 @@
|
|||
<Container class="javax.swing.JPanel" name="tabPhases">
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout$JTabbedPaneConstraintsDescription">
|
||||
<JTabbedPaneConstraints tabName="Phases">
|
||||
<Property name="tabTitle" type="java.lang.String" value="Phases"/>
|
||||
<JTabbedPaneConstraints tabName="Phases & Priority">
|
||||
<Property name="tabTitle" type="java.lang.String" value="Phases & Priority"/>
|
||||
</JTabbedPaneConstraints>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
|
@ -528,8 +528,8 @@
|
|||
<Component id="checkBoxEndTurnOthers" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||
<Component id="phases_stopSettings" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace pref="45" max="32767" attributes="0"/>
|
||||
<Component id="phases_stopSettings" max="32767" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
|
|
@ -537,7 +537,7 @@
|
|||
<SubComponents>
|
||||
<Component class="javax.swing.JLabel" name="jLabelHeadLine">
|
||||
<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>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="jLabelYourTurn">
|
||||
|
|
@ -628,7 +628,7 @@
|
|||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout">
|
||||
<Property name="columns" type="int" value="1"/>
|
||||
<Property name="rows" type="int" value="4"/>
|
||||
<Property name="rows" type="int" value="7"/>
|
||||
</Layout>
|
||||
<SubComponents>
|
||||
<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"/>
|
||||
</Events>
|
||||
</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="<HTML>If activated the order to put on the stack your triggers that trigger at the same time<br/>
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>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
|
|
|
|||
|
|
@ -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_ALL_MAIN_PHASES = "stopOnAllMainPhases";
|
||||
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
|
||||
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();
|
||||
cbStopOnAllMain = 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();
|
||||
panelCardImages = new javax.swing.JPanel();
|
||||
cbUseDefaultImageFolder = new javax.swing.JCheckBox();
|
||||
|
|
@ -629,7 +635,7 @@ public class PreferencesDialog extends javax.swing.JDialog {
|
|||
.addComponent(cbConfirmEmptyManaPool)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(cbAskMoveToGraveOrder)
|
||||
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||
.addContainerGap())
|
||||
);
|
||||
|
||||
nonLandPermanentsInOnePile.getAccessibleContext().setAccessibleName("nonLandPermanentsInOnePile");
|
||||
|
|
@ -691,8 +697,8 @@ public class PreferencesDialog extends javax.swing.JDialog {
|
|||
.addContainerGap()
|
||||
.addComponent(main_card, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(main_game, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(main_game, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||
.addComponent(main_gamelog, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addContainerGap())
|
||||
);
|
||||
|
|
@ -701,7 +707,7 @@ public class PreferencesDialog extends javax.swing.JDialog {
|
|||
|
||||
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");
|
||||
|
||||
|
|
@ -722,7 +728,7 @@ public class PreferencesDialog extends javax.swing.JDialog {
|
|||
jLabelEndOfTurn.setText("End of turn:");
|
||||
|
||||
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.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);
|
||||
|
||||
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);
|
||||
tabPhases.setLayout(tabPhasesLayout);
|
||||
tabPhasesLayout.setHorizontalGroup(
|
||||
|
|
@ -876,11 +915,11 @@ public class PreferencesDialog extends javax.swing.JDialog {
|
|||
.addComponent(jLabelEndOfTurn)
|
||||
.addComponent(checkBoxEndTurnOthers))
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||
.addComponent(phases_stopSettings, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addContainerGap(45, Short.MAX_VALUE))
|
||||
.addComponent(phases_stopSettings, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, 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:"));
|
||||
|
||||
|
|
@ -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.cbDraftLogAutoSave, KEY_DRAFT_LOG_AUTO_SAVE, "true", "false", UPDATE_CACHE_POLICY);
|
||||
|
||||
// Phases
|
||||
// Phases & Priority
|
||||
save(prefs, dialog.checkBoxUpkeepYou, UPKEEP_YOU);
|
||||
save(prefs, dialog.checkBoxDrawYou, DRAW_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.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.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
|
||||
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:
|
||||
}//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() {
|
||||
if (cbProxyType.getSelectedItem() == Connection.ProxyType.SOCKS) {
|
||||
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.cbStopOnAllMain, KEY_STOP_ALL_MAIN_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"),
|
||||
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_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.JCheckBox cbAllowRequestToShowHandCards;
|
||||
private javax.swing.JCheckBox cbAskMoveToGraveOrder;
|
||||
private javax.swing.JCheckBox cbAutoOrderTrigger;
|
||||
private javax.swing.JCheckBox cbCheckForNewImages;
|
||||
private javax.swing.JCheckBox cbConfirmEmptyManaPool;
|
||||
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 cbEnableSkipButtonsSounds;
|
||||
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<ProxyType> cbProxyType;
|
||||
private javax.swing.JCheckBox cbSaveToZipFiles;
|
||||
|
|
|
|||
|
|
@ -47,7 +47,9 @@ import mage.client.components.MageTextArea;
|
|||
import mage.client.dialog.MageDialog;
|
||||
import mage.client.util.audio.AudioManager;
|
||||
import mage.client.util.gui.ArrowBuilder;
|
||||
import mage.constants.Constants;
|
||||
import static mage.constants.Constants.Option.ORIGINAL_ID;
|
||||
import static mage.constants.Constants.Option.SECOND_MESSAGE;
|
||||
import static mage.constants.Constants.Option.SPECIAL_BUTTON;
|
||||
import mage.constants.PlayerAction;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
|
|
@ -82,64 +84,46 @@ public class FeedbackPanel extends javax.swing.JPanel {
|
|||
|
||||
public void init(UUID gameId) {
|
||||
this.gameId = gameId;
|
||||
helper.init(gameId);
|
||||
}
|
||||
|
||||
public void getFeedback(FeedbackMode mode, String message, boolean special, Map<String, Serializable> options) {
|
||||
|
||||
this.lblMessage.setText(message);
|
||||
this.helper.setMessage(message);
|
||||
this.helper.setBasicMessage(message);
|
||||
this.helper.setOriginalId(null); // reference to the feedback causing ability
|
||||
String lblText = addAdditionalText(message, options);
|
||||
this.helper.setTextArea(lblText);
|
||||
this.lblMessage.setText(lblText);
|
||||
this.mode = mode;
|
||||
switch (this.mode) {
|
||||
case INFORM:
|
||||
this.btnLeft.setVisible(false);
|
||||
this.btnRight.setVisible(false);
|
||||
this.helper.setState("", false, "", false);
|
||||
setButtonState("", "", mode);
|
||||
break;
|
||||
case QUESTION:
|
||||
this.btnLeft.setVisible(true);
|
||||
this.btnLeft.setText("Yes");
|
||||
this.btnRight.setVisible(true);
|
||||
this.btnRight.setText("No");
|
||||
this.helper.setState("Yes", true, "No", true);
|
||||
setButtonState("Yes", "No", mode);
|
||||
if (options != null && options.containsKey(ORIGINAL_ID)) {
|
||||
this.helper.setOriginalId((UUID) options.get(ORIGINAL_ID));
|
||||
}
|
||||
break;
|
||||
case CONFIRM:
|
||||
this.btnLeft.setVisible(true);
|
||||
this.btnLeft.setText("OK");
|
||||
this.btnRight.setVisible(true);
|
||||
this.btnRight.setText("Cancel");
|
||||
this.helper.setState("Ok", true, "Cancel", true);
|
||||
setButtonState("OK", "Cancel", mode);
|
||||
break;
|
||||
case CANCEL:
|
||||
this.btnLeft.setVisible(false);
|
||||
this.btnRight.setVisible(true);
|
||||
this.btnRight.setText("Cancel");
|
||||
this.helper.setState("", false, "Cancel", true);
|
||||
setButtonState("", "Cancel", mode);
|
||||
this.helper.setUndoEnabled(false);
|
||||
break;
|
||||
case SELECT:
|
||||
this.btnLeft.setVisible(false);
|
||||
this.btnRight.setVisible(true);
|
||||
this.btnRight.setText("Done");
|
||||
this.helper.setState("", false, "Done", true);
|
||||
setButtonState("", "Done", mode);
|
||||
break;
|
||||
case END:
|
||||
this.btnLeft.setVisible(false);
|
||||
this.btnRight.setVisible(true);
|
||||
this.btnRight.setText("Close game");
|
||||
this.helper.setState("", false, "Close game", true);
|
||||
setButtonState("", "Close game", mode);
|
||||
ArrowBuilder.getBuilder().removeAllArrows(gameId);
|
||||
endWithTimeout();
|
||||
break;
|
||||
}
|
||||
if (options != null && options.containsKey(Constants.Option.SPECIAL_BUTTON)) {
|
||||
String specialText = (String) options.get(Constants.Option.SPECIAL_BUTTON);
|
||||
this.btnSpecial.setVisible(true);
|
||||
this.btnSpecial.setText(specialText);
|
||||
this.helper.setSpecial(specialText, true);
|
||||
if (options != null && options.containsKey(SPECIAL_BUTTON)) {
|
||||
this.setSpecial((String) options.get(SPECIAL_BUTTON), true);
|
||||
} else {
|
||||
this.btnSpecial.setVisible(special);
|
||||
this.btnSpecial.setText("Special");
|
||||
this.helper.setSpecial("Special", special);
|
||||
this.setSpecial("Special", special);
|
||||
}
|
||||
|
||||
requestFocusIfPossible();
|
||||
|
|
@ -152,6 +136,32 @@ public class FeedbackPanel extends javax.swing.JPanel {
|
|||
this.helper.setVisible(true);
|
||||
}
|
||||
|
||||
private void setButtonState(String leftText, String rightText, FeedbackMode mode) {
|
||||
btnLeft.setVisible(!leftText.isEmpty());
|
||||
btnLeft.setText(leftText);
|
||||
btnRight.setVisible(!rightText.isEmpty());
|
||||
btnRight.setText(rightText);
|
||||
this.helper.setState(leftText, !leftText.isEmpty(), rightText, !rightText.isEmpty(), mode);
|
||||
}
|
||||
|
||||
private String addAdditionalText(String message, Map<String, Serializable> options) {
|
||||
if (options != null && options.containsKey(SECOND_MESSAGE)) {
|
||||
return message + getSmallText((String) options.get(SECOND_MESSAGE));
|
||||
} else {
|
||||
return message;
|
||||
}
|
||||
}
|
||||
|
||||
protected String getSmallText(String text) {
|
||||
return "<div style='font-size:11pt'>" + text + "</div>";
|
||||
}
|
||||
|
||||
private void setSpecial(String text, boolean visible) {
|
||||
this.btnSpecial.setText(text);
|
||||
this.btnSpecial.setVisible(visible);
|
||||
this.helper.setSpecial(text, visible);
|
||||
}
|
||||
|
||||
/**
|
||||
* Close game window by pressing OK button after 8 seconds
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1997,7 +1997,7 @@ public final class GamePanel extends javax.swing.JPanel {
|
|||
}
|
||||
}
|
||||
if (event.getEventName().equals("action-consumed")) {
|
||||
dialog.hideDialog();
|
||||
dialog.removeDialog();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
@ -2016,24 +2016,31 @@ public final class GamePanel extends javax.swing.JPanel {
|
|||
switch (e.getActionCommand()) {
|
||||
case CMD_AUTO_ORDER_FIRST:
|
||||
MageFrame.getClient().sendPlayerAction(TRIGGER_AUTO_ORDER_ABILITY_FIRST, gameId, abilityId);
|
||||
MageFrame.getClient().sendPlayerUUID(gameId, abilityId);
|
||||
break;
|
||||
case CMD_AUTO_ORDER_LAST:
|
||||
MageFrame.getClient().sendPlayerAction(TRIGGER_AUTO_ORDER_ABILITY_LAST, gameId, abilityId);
|
||||
MageFrame.getClient().sendPlayerUUID(gameId, null); // Don't use this but refresh the displayed abilities
|
||||
break;
|
||||
case CMD_AUTO_ORDER_NAME_FIRST:
|
||||
if (abilityRuleText != null) {
|
||||
MageFrame.getClient().sendPlayerAction(TRIGGER_AUTO_ORDER_NAME_FIRST, gameId, abilityRuleText);
|
||||
MageFrame.getClient().sendPlayerUUID(gameId, abilityId);
|
||||
}
|
||||
break;
|
||||
case CMD_AUTO_ORDER_NAME_LAST:
|
||||
if (abilityRuleText != null) {
|
||||
MageFrame.getClient().sendPlayerAction(TRIGGER_AUTO_ORDER_NAME_LAST, gameId, abilityRuleText);
|
||||
MageFrame.getClient().sendPlayerUUID(gameId, null); // Don't use this but refresh the displayed abilities
|
||||
}
|
||||
break;
|
||||
case CMD_AUTO_ORDER_RESET_ALL:
|
||||
MageFrame.getClient().sendPlayerAction(TRIGGER_AUTO_ORDER_RESET_ALL, gameId, null);
|
||||
break;
|
||||
}
|
||||
for (ShowCardsDialog dialog : pickTarget) {
|
||||
dialog.removeDialog();
|
||||
}
|
||||
}
|
||||
|
||||
private void initPopupMenuTriggerOrder() {
|
||||
|
|
|
|||
|
|
@ -28,17 +28,33 @@
|
|||
package mage.client.game;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.GridBagLayout;
|
||||
import java.awt.Point;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseListener;
|
||||
import java.util.UUID;
|
||||
import javax.swing.BoxLayout;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JMenuItem;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JPopupMenu;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.ToolTipManager;
|
||||
import javax.swing.UIManager;
|
||||
import mage.client.MageFrame;
|
||||
import mage.client.components.MageTextArea;
|
||||
import mage.client.game.FeedbackPanel.FeedbackMode;
|
||||
import static mage.client.game.FeedbackPanel.FeedbackMode.QUESTION;
|
||||
import static mage.constants.PlayerAction.REQUEST_AUTO_ANSWER_ID_NO;
|
||||
import static mage.constants.PlayerAction.REQUEST_AUTO_ANSWER_ID_YES;
|
||||
import static mage.constants.PlayerAction.REQUEST_AUTO_ANSWER_RESET_ALL;
|
||||
import static mage.constants.PlayerAction.REQUEST_AUTO_ANSWER_TEXT_NO;
|
||||
import static mage.constants.PlayerAction.REQUEST_AUTO_ANSWER_TEXT_YES;
|
||||
|
||||
/**
|
||||
* Panel with buttons that copy the state of feedback panel.
|
||||
|
|
@ -64,12 +80,32 @@ public class HelperPanel extends JPanel {
|
|||
private final int defaultDismissTimeout = ToolTipManager.sharedInstance().getDismissDelay();
|
||||
private final Object tooltipBackground = UIManager.get("info");
|
||||
|
||||
private static final String CMD_AUTO_ANSWER_ID_YES = "cmdAutoAnswerIdYes";
|
||||
private static final String CMD_AUTO_ANSWER_ID_NO = "cmdAutoAnswerIdNo";
|
||||
private static final String CMD_AUTO_ANSWER_NAME_YES = "cmdAutoAnswerNameYes";
|
||||
private static final String CMD_AUTO_ANSWER_NAME_NO = "cmdAutoAnswerNameNo";
|
||||
private static final String CMD_AUTO_ANSWER_RESET_ALL = "cmdAutoAnswerResetAll";
|
||||
|
||||
// popup menu for set automatic answers
|
||||
private JPopupMenu popupMenuAskYes;
|
||||
private JPopupMenu popupMenuAskNo;
|
||||
|
||||
// originalId of feedback causing ability
|
||||
private UUID originalId;
|
||||
private String message;
|
||||
|
||||
private UUID gameId;
|
||||
|
||||
public HelperPanel() {
|
||||
initComponents();
|
||||
}
|
||||
|
||||
private void initComponents() {
|
||||
public void init(UUID gameId) {
|
||||
this.gameId = gameId;
|
||||
}
|
||||
|
||||
private void initComponents() {
|
||||
initPopupMenuTriggerOrder();
|
||||
setBackground(new Color(0, 0, 0, 100));
|
||||
//setLayout(new GridBagLayout());
|
||||
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
|
||||
|
|
@ -108,72 +144,44 @@ public class HelperPanel extends JPanel {
|
|||
btnUndo.setVisible(false);
|
||||
container.add(btnUndo);
|
||||
|
||||
btnLeft.addActionListener(new java.awt.event.ActionListener() {
|
||||
MouseListener checkPopupAdapter = new MouseAdapter() {
|
||||
@Override
|
||||
public void mousePressed(MouseEvent me) {
|
||||
checkPopupMenu(me);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent me) {
|
||||
checkPopupMenu(me);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
btnLeft.addMouseListener(checkPopupAdapter);
|
||||
btnLeft.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||
if (linkLeft != null) {
|
||||
{
|
||||
Thread worker = new Thread() {
|
||||
@Override
|
||||
public void run() {
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
setState("", false, "", false);
|
||||
setSpecial("", false);
|
||||
linkLeft.doClick();
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
worker.start();
|
||||
}
|
||||
clickButton(linkLeft);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
btnRight.addActionListener(new java.awt.event.ActionListener() {
|
||||
btnRight.addMouseListener(checkPopupAdapter);
|
||||
btnRight.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||
if (linkRight != null) {
|
||||
Thread worker = new Thread() {
|
||||
@Override
|
||||
public void run() {
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
setState("", false, "", false);
|
||||
setSpecial("", false);
|
||||
linkRight.doClick();
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
worker.start();
|
||||
clickButton(linkRight);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
btnSpecial.addActionListener(new java.awt.event.ActionListener() {
|
||||
btnSpecial.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||
if (linkSpecial != null) {
|
||||
{
|
||||
Thread worker = new Thread() {
|
||||
@Override
|
||||
public void run() {
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
setState("", false, "", false);
|
||||
setSpecial("", false);
|
||||
linkSpecial.doClick();
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
worker.start();
|
||||
}
|
||||
clickButton(linkSpecial);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
@ -200,7 +208,7 @@ public class HelperPanel extends JPanel {
|
|||
}
|
||||
});
|
||||
|
||||
// sets a darker background and higher simiss time fpr tooltip in the feedback / helper panel
|
||||
// sets a darker background and higher simiss time fur tooltip in the feedback / helper panel
|
||||
textArea.addMouseListener(new MouseAdapter() {
|
||||
|
||||
@Override
|
||||
|
|
@ -217,15 +225,50 @@ public class HelperPanel extends JPanel {
|
|||
});
|
||||
}
|
||||
|
||||
public void setState(String txtLeft, boolean leftVisible, String txtRight, boolean rightVisible) {
|
||||
private void checkPopupMenu(MouseEvent me) {
|
||||
if (me.isPopupTrigger()
|
||||
&& originalId != null) { // only Yes/No requests from abilities can be automated
|
||||
JButton source = (JButton) me.getSource();
|
||||
if (source.getActionCommand().startsWith(QUESTION.toString())) {
|
||||
showPopupMenu(me.getComponent(), source.getActionCommand());
|
||||
me.consume();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void clickButton(final JButton button) {
|
||||
Thread worker = new Thread() {
|
||||
@Override
|
||||
public void run() {
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
setState("", false, "", false, null);
|
||||
setSpecial("", false);
|
||||
button.doClick();
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
worker.start();
|
||||
}
|
||||
|
||||
public void setState(String txtLeft, boolean leftVisible, String txtRight, boolean rightVisible, FeedbackMode mode) {
|
||||
this.btnLeft.setVisible(leftVisible);
|
||||
if (!txtLeft.isEmpty()) {
|
||||
this.btnLeft.setText(txtLeft);
|
||||
if (mode != null) {
|
||||
this.btnLeft.setActionCommand(mode.toString() + txtLeft);
|
||||
}
|
||||
}
|
||||
this.btnRight.setVisible(rightVisible);
|
||||
if (!txtRight.isEmpty()) {
|
||||
this.btnRight.setText(txtRight);
|
||||
if (mode != null) {
|
||||
this.btnRight.setActionCommand(mode.toString() + txtRight);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void setSpecial(String txtSpecial, boolean specialVisible) {
|
||||
|
|
@ -251,25 +294,116 @@ public class HelperPanel extends JPanel {
|
|||
this.linkUndo = undo;
|
||||
}
|
||||
|
||||
public void setMessage(String message) {
|
||||
// if (message.startsWith("Use alternative cost")) {
|
||||
// message = "Use alternative cost?";
|
||||
// } else if (message.contains("Use ")) {
|
||||
// if (message.length() < this.getWidth() / 10) {
|
||||
// message = getSmallText(message);
|
||||
// } else {
|
||||
// message = "Use ability?" + getSmallText(message.substring(0, this.getWidth() / 10));
|
||||
// }
|
||||
// }
|
||||
textArea.setText(message, this.getWidth());
|
||||
public void setOriginalId(UUID originalId) {
|
||||
this.originalId = originalId;
|
||||
}
|
||||
|
||||
protected String getSmallText(String text) {
|
||||
return "<div style='font-size:11pt'>" + text + "</div>";
|
||||
public void setBasicMessage(String message) {
|
||||
this.message = message;
|
||||
this.textArea.setText(message, this.getWidth());
|
||||
}
|
||||
|
||||
public void setTextArea(String message) {
|
||||
this.textArea.setText(message, this.getWidth());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void requestFocus() {
|
||||
this.btnRight.requestFocus();
|
||||
}
|
||||
|
||||
private void initPopupMenuTriggerOrder() {
|
||||
|
||||
ActionListener actionListener = new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
handleAutoAnswerPopupMenuEvent(e);
|
||||
}
|
||||
};
|
||||
|
||||
popupMenuAskYes = new JPopupMenu();
|
||||
popupMenuAskNo = new JPopupMenu();
|
||||
|
||||
// String tooltipText = "";
|
||||
JMenuItem menuItem;
|
||||
menuItem = new JMenuItem("Always Yes for the same text and ability");
|
||||
menuItem.setActionCommand(CMD_AUTO_ANSWER_ID_YES);
|
||||
menuItem.addActionListener(actionListener);
|
||||
menuItem.setToolTipText("<HTML>If the same question from the same ability would<br/>be asked again, it's automatically answered with <b>Yes</b>.");
|
||||
popupMenuAskYes.add(menuItem);
|
||||
|
||||
menuItem = new JMenuItem("Always No for the same text and ability");
|
||||
menuItem.setActionCommand(CMD_AUTO_ANSWER_ID_NO);
|
||||
menuItem.setToolTipText("<HTML>If the same question from the same ability would<br/>be asked again, it's automatically answered with <b>No</b>.");
|
||||
menuItem.addActionListener(actionListener);
|
||||
popupMenuAskNo.add(menuItem);
|
||||
|
||||
menuItem = new JMenuItem("Always Yes for the same text");
|
||||
menuItem.setActionCommand(CMD_AUTO_ANSWER_NAME_YES);
|
||||
menuItem.setToolTipText("<HTML>If the same question would be asked again (regardless from which source),<br/> it's automatically answered with <b>Yes</b>.");
|
||||
menuItem.addActionListener(actionListener);
|
||||
popupMenuAskYes.add(menuItem);
|
||||
|
||||
menuItem = new JMenuItem("Always No for the same text");
|
||||
menuItem.setActionCommand(CMD_AUTO_ANSWER_NAME_NO);
|
||||
menuItem.setToolTipText("<HTML>If the same question would be asked again (regardless from which source),<br/> it's automatically answered with <b>No</b>.");
|
||||
menuItem.addActionListener(actionListener);
|
||||
popupMenuAskNo.add(menuItem);
|
||||
|
||||
menuItem = new JMenuItem("Delete all automatic Yes/No settings");
|
||||
menuItem.setActionCommand(CMD_AUTO_ANSWER_RESET_ALL);
|
||||
menuItem.addActionListener(actionListener);
|
||||
popupMenuAskYes.add(menuItem);
|
||||
|
||||
menuItem = new JMenuItem("Delete all automatic Yes/No settings");
|
||||
menuItem.setActionCommand(CMD_AUTO_ANSWER_RESET_ALL);
|
||||
menuItem.addActionListener(actionListener);
|
||||
popupMenuAskNo.add(menuItem);
|
||||
}
|
||||
|
||||
public void handleAutoAnswerPopupMenuEvent(ActionEvent e) {
|
||||
switch (e.getActionCommand()) {
|
||||
case CMD_AUTO_ANSWER_ID_YES:
|
||||
MageFrame.getClient().sendPlayerAction(REQUEST_AUTO_ANSWER_ID_YES, gameId, originalId.toString() + "#" + message);
|
||||
clickButton(btnLeft);
|
||||
break;
|
||||
case CMD_AUTO_ANSWER_ID_NO:
|
||||
MageFrame.getClient().sendPlayerAction(REQUEST_AUTO_ANSWER_ID_NO, gameId, originalId.toString() + "#" + message);
|
||||
clickButton(btnRight);
|
||||
break;
|
||||
case CMD_AUTO_ANSWER_NAME_YES:
|
||||
MageFrame.getClient().sendPlayerAction(REQUEST_AUTO_ANSWER_TEXT_YES, gameId, message);
|
||||
clickButton(btnLeft);
|
||||
break;
|
||||
case CMD_AUTO_ANSWER_NAME_NO:
|
||||
MageFrame.getClient().sendPlayerAction(REQUEST_AUTO_ANSWER_TEXT_NO, gameId, message);
|
||||
clickButton(btnRight);
|
||||
break;
|
||||
case CMD_AUTO_ANSWER_RESET_ALL:
|
||||
MageFrame.getClient().sendPlayerAction(REQUEST_AUTO_ANSWER_RESET_ALL, gameId, null);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void showPopupMenu(Component callingComponent, String actionCommand) {
|
||||
// Get the location of the point 'on the screen'
|
||||
Point p = callingComponent.getLocationOnScreen();
|
||||
// Show the JPopupMenu via program
|
||||
// Parameter desc
|
||||
// ----------------
|
||||
// this - represents current frame
|
||||
// 0,0 is the co ordinate where the popup
|
||||
// is shown
|
||||
JPopupMenu menu;
|
||||
if (actionCommand.endsWith("Yes")) {
|
||||
menu = popupMenuAskYes;
|
||||
} else {
|
||||
menu = popupMenuAskNo;
|
||||
}
|
||||
menu.show(this, 0, 0);
|
||||
|
||||
// Now set the location of the JPopupMenu
|
||||
// This location is relative to the screen
|
||||
menu.setLocation(p.x, p.y + callingComponent.getHeight());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -290,6 +290,18 @@ public class PlayAreaPanel extends javax.swing.JPanel {
|
|||
}
|
||||
});
|
||||
|
||||
menuItem = new JMenuItem("Use requests - reset automatic answers");
|
||||
menuItem.setMnemonic(KeyEvent.VK_T);
|
||||
menuItem.setToolTipText("Deletes all defined automatic answers for Yes/No usage requests.");
|
||||
automaticConfirmsMenu.add(menuItem);
|
||||
// Reset the replacement effcts that were auto selected for the game
|
||||
menuItem.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
MageFrame.getClient().sendPlayerAction(PlayerAction.REQUEST_AUTO_ANSWER_RESET_ALL, gameId, null);
|
||||
}
|
||||
});
|
||||
|
||||
JMenu handCardsMenu = new JMenu("Cards on hand");
|
||||
handCardsMenu.setMnemonic(KeyEvent.VK_H);
|
||||
popupMenu.add(handCardsMenu);
|
||||
|
|
|
|||
|
|
@ -131,10 +131,10 @@ public class MageActionCallback implements ActionCallback {
|
|||
ArrowUtil.drawArrowsForPairedCards(data, parentPoint);
|
||||
ArrowUtil.drawArrowsForEnchantPlayers(data, parentPoint);
|
||||
|
||||
showPopup(data, parentComponent, parentPoint);
|
||||
showTooltipPopup(data, parentComponent, parentPoint);
|
||||
}
|
||||
|
||||
private void showPopup(final TransferData data, final Component parentComponent, final Point parentPoint) {
|
||||
private void showTooltipPopup(final TransferData data, final Component parentComponent, final Point parentPoint) {
|
||||
if (data.component != null) {
|
||||
String showTooltips = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_SHOW_TOOLTIPS_ANY_ZONE, "true");
|
||||
if (showTooltips.equals("false")) {
|
||||
|
|
|
|||
|
|
@ -11,11 +11,11 @@ import java.awt.event.MouseEvent;
|
|||
import java.awt.event.MouseMotionListener;
|
||||
import java.awt.geom.Area;
|
||||
import java.awt.geom.GeneralPath;
|
||||
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JPanel;
|
||||
|
||||
public class Arrow extends JPanel {
|
||||
|
||||
private static final long serialVersionUID = -4631054277822828303L;
|
||||
|
||||
private int startX;
|
||||
|
|
@ -27,21 +27,25 @@ public class Arrow extends JPanel {
|
|||
private Composite composite;
|
||||
private Color color = Color.red;
|
||||
|
||||
public Arrow () {
|
||||
public Arrow() {
|
||||
setOpaque(false);
|
||||
setOpacity(0.6f);
|
||||
}
|
||||
|
||||
protected void paintComponent (Graphics g) {
|
||||
protected void paintComponent(Graphics g) {
|
||||
super.paintComponent(g);
|
||||
float ex = endX - startX;
|
||||
float ey = endY - startY;
|
||||
if (ex == 0 && ey == 0) return;
|
||||
float length = (float)Math.sqrt(ex * ex + ey * ey);
|
||||
float bendPercent = (float)Math.asin(ey / length);
|
||||
if (endX > startX) bendPercent = -bendPercent;
|
||||
if (ex == 0 && ey == 0) {
|
||||
return;
|
||||
}
|
||||
float length = (float) Math.sqrt(ex * ex + ey * ey);
|
||||
float bendPercent = (float) Math.asin(ey / length);
|
||||
if (endX > startX) {
|
||||
bendPercent = -bendPercent;
|
||||
}
|
||||
Area arrow = getArrow(length, bendPercent);
|
||||
Graphics2D g2d = (Graphics2D)g;
|
||||
Graphics2D g2d = (Graphics2D) g;
|
||||
g2d.translate(startX, startY);
|
||||
g2d.rotate(Math.atan2(ey, ex));
|
||||
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
||||
|
|
@ -52,16 +56,16 @@ public class Arrow extends JPanel {
|
|||
g2d.draw(arrow);
|
||||
}
|
||||
|
||||
private Area getArrow (float length, float bendPercent) {
|
||||
private Area getArrow(float length, float bendPercent) {
|
||||
float p1x = 0, p1y = 0;
|
||||
float p2x = length, p2y = 0;
|
||||
float cx = length / 2, cy = length / 8f * bendPercent;
|
||||
|
||||
float adjSize, ex, ey, abs_e;
|
||||
adjSize = (float)(bodyWidth / 2 / Math.sqrt(2));
|
||||
adjSize = (float) (bodyWidth / 2 / Math.sqrt(2));
|
||||
ex = p2x - cx;
|
||||
ey = p2y - cy;
|
||||
abs_e = (float)Math.sqrt(ex * ex + ey * ey);
|
||||
abs_e = (float) Math.sqrt(ex * ex + ey * ey);
|
||||
ex /= abs_e;
|
||||
ey /= abs_e;
|
||||
GeneralPath bodyPath = new GeneralPath();
|
||||
|
|
@ -71,10 +75,10 @@ public class Arrow extends JPanel {
|
|||
bodyPath.quadTo(cx, cy, p2x - (ey + ex) * adjSize, p2y + (ex - ey) * adjSize);
|
||||
bodyPath.closePath();
|
||||
|
||||
adjSize = (float)(headSize / Math.sqrt(2));
|
||||
adjSize = (float) (headSize / Math.sqrt(2));
|
||||
ex = p2x - cx;
|
||||
ey = p2y - cy;
|
||||
abs_e = (float)Math.sqrt(ex * ex + ey * ey);
|
||||
abs_e = (float) Math.sqrt(ex * ex + ey * ey);
|
||||
ex /= abs_e;
|
||||
ey /= abs_e;
|
||||
GeneralPath headPath = new GeneralPath();
|
||||
|
|
@ -88,23 +92,23 @@ public class Arrow extends JPanel {
|
|||
return area;
|
||||
}
|
||||
|
||||
public int getBodyWidth () {
|
||||
public int getBodyWidth() {
|
||||
return bodyWidth;
|
||||
}
|
||||
|
||||
public void setBodyWidth (int bodyWidth) {
|
||||
public void setBodyWidth(int bodyWidth) {
|
||||
this.bodyWidth = bodyWidth;
|
||||
}
|
||||
|
||||
public float getHeadSize () {
|
||||
public float getHeadSize() {
|
||||
return headSize;
|
||||
}
|
||||
|
||||
public void setHeadSize (float headSize) {
|
||||
public void setHeadSize(float headSize) {
|
||||
this.headSize = headSize;
|
||||
}
|
||||
|
||||
public void setArrowLocation (int startX, int startY, int endX, int endY) {
|
||||
public void setArrowLocation(int startX, int startY, int endX, int endY) {
|
||||
this.startX = startX;
|
||||
this.startY = startY;
|
||||
this.endX = endX;
|
||||
|
|
@ -112,7 +116,7 @@ public class Arrow extends JPanel {
|
|||
repaint();
|
||||
}
|
||||
|
||||
public void setOpacity (float opacity) {
|
||||
public void setOpacity(float opacity) {
|
||||
composite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, opacity);
|
||||
}
|
||||
|
||||
|
|
@ -120,7 +124,7 @@ public class Arrow extends JPanel {
|
|||
this.color = color;
|
||||
}
|
||||
|
||||
public static void main (String[] args) {
|
||||
public static void main(String[] args) {
|
||||
final JFrame frame = new JFrame();
|
||||
frame.setLayout(new BorderLayout());
|
||||
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
||||
|
|
@ -130,11 +134,13 @@ public class Arrow extends JPanel {
|
|||
frame.setResizable(false);
|
||||
frame.setVisible(true);
|
||||
frame.getContentPane().addMouseMotionListener(new MouseMotionListener() {
|
||||
public void mouseMoved (MouseEvent e) {
|
||||
@Override
|
||||
public void mouseMoved(MouseEvent e) {
|
||||
arrow.setArrowLocation(320, 240, e.getX(), e.getY());
|
||||
}
|
||||
|
||||
public void mouseDragged (MouseEvent e) {
|
||||
@Override
|
||||
public void mouseDragged(MouseEvent e) {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ import org.mage.plugins.card.utils.CardImageUtils;
|
|||
public class MagicCardsImageSource implements CardImageSource {
|
||||
|
||||
private static CardImageSource instance = new MagicCardsImageSource();
|
||||
|
||||
|
||||
private static final Map<String, String> setNameTokenReplacement = new HashMap<String, String>() {
|
||||
{
|
||||
put("BFZ", "battle-for-zendikar");
|
||||
|
|
@ -31,8 +31,8 @@ public class MagicCardsImageSource implements CardImageSource {
|
|||
put("MM2", "modern-masters-2015");
|
||||
put("PTC", "prerelease-events");
|
||||
put("DTK", "dragons-of-tarkir");
|
||||
put("GRC","wpngateway");
|
||||
put("MBP","media-inserts");
|
||||
put("GRC", "wpngateway");
|
||||
put("MBP", "media-inserts");
|
||||
put("MLP", "launch-party");
|
||||
put("WMCQ", "world-magic-cup-qualifier");
|
||||
put("GPX", "grand-prix");
|
||||
|
|
@ -40,7 +40,7 @@ public class MagicCardsImageSource implements CardImageSource {
|
|||
put("MGDC", "magic-game-day-cards");
|
||||
put("FNMP", "friday-night-magic");
|
||||
put("FRF", "fate-reforged");
|
||||
put("C14", "commander-2014-edition");
|
||||
put("C14", "commander-2014");
|
||||
put("KTK", "khans-of-tarkir");
|
||||
put("VMA", "vintage-masters");
|
||||
put("CNS", "conspiracy");
|
||||
|
|
@ -130,7 +130,7 @@ public class MagicCardsImageSource implements CardImageSource {
|
|||
String set = CardImageUtils.updateSet(cardSet, true);
|
||||
|
||||
String preferedLanguage = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_PREF_LANGUAGE, "en");
|
||||
|
||||
|
||||
StringBuilder url = new StringBuilder("http://magiccards.info/scans/").append(preferedLanguage).append("/");
|
||||
url.append(set.toLowerCase()).append("/").append(collectorId);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,6 @@
|
|||
#Generate|TOK:BFZ|Eldrazi Scion|
|
||||
#Generate|TOK:BFZ|Elemental|
|
||||
|
||||
#Generate|TOK:DDP|Eldrazi Spawn 1|
|
||||
#Generate|TOK:DDP|Eldrazi Spawn 2|
|
||||
#Generate|TOK:DDP|Eldrazi Spawn 3|
|
||||
|
|
@ -58,14 +61,19 @@
|
|||
#|Generate|TOK:PTC|Wolf|
|
||||
#|Generate|TOK:PTC|Wurm|
|
||||
|
||||
#|Generate|TOK:DTK|Djinn Monk|
|
||||
#|Generate|TOK:DTK|Dragon|
|
||||
#|Generate|TOK:DTK|Goblin|
|
||||
#|Generate|TOK:DTK|Morph|
|
||||
#|Generate|TOK:DTK|Warrior|
|
||||
#|Generate|TOK:DTK|Zombie|
|
||||
#|Generate|TOK:DTK|Zombie Horror|
|
||||
#|Generate|EMBLEM!:DTK|Emblem Narset Transcendent|
|
||||
|Generate|TOK:DTK|Djinn Monk|
|
||||
|Generate|TOK:DTK|Dragon|
|
||||
|Generate|TOK:DTK|Goblin|
|
||||
|Generate|TOK:DTK|Morph|
|
||||
|Generate|TOK:DTK|Warrior|
|
||||
|Generate|TOK:DTK|Zombie|
|
||||
|Generate|TOK:DTK|Zombie Horror|
|
||||
|Generate|EMBLEM!:DTK|Emblem Narset|
|
||||
|
||||
|Generate|TOK:FRF|Monk|
|
||||
|Generate|TOK:FRF|Spirit|
|
||||
|Generate|TOK:FRF|Warrior|
|
||||
|Generate|TOK:FRF|Manifest|
|
||||
|
||||
#|Generate|TOK:GRC|Bird|
|
||||
#|Generate|TOK:GRC|Golem|
|
||||
|
|
@ -102,21 +110,59 @@
|
|||
|Generate|TOK:FNMP|Wolf|
|
||||
#|Generate|TOK:FNMP|Wurm|
|
||||
|
||||
|Generate|TOK:C14|Angel|
|
||||
|Generate|TOK:C14|Cat|
|
||||
|Generate|TOK:C14|Goat|
|
||||
|Generate|TOK:C14|Kor Soldier|
|
||||
|Generate|TOK:C14|Pegasus|
|
||||
|Generate|TOK:C14|Soldier|
|
||||
|Generate|TOK:C14|Spirit|
|
||||
|Generate|TOK:C14|Fish|
|
||||
|Generate|TOK:C14|Kraken|
|
||||
|Generate|TOK:C14|Whale|
|
||||
|Generate|TOK:C14|Zombie 1|
|
||||
|Generate|TOK:C14|Demon 1|
|
||||
|Generate|TOK:C14|Demon 2|
|
||||
|Generate|TOK:C14|Germ|
|
||||
|Generate|TOK:C14|Horror|
|
||||
|Generate|TOK:C14|Zombie 2|
|
||||
|Generate|TOK:C14|Goblin|
|
||||
|Generate|TOK:C14|Ape|
|
||||
|Generate|TOK:C14|Beast 1|
|
||||
|Generate|TOK:C14|Beast 2|
|
||||
|Generate|TOK:C14|Elemental|
|
||||
|Generate|TOK:C14|Elephant|
|
||||
|Generate|TOK:C14|Elf Druid|
|
||||
|Generate|TOK:C14|Elf Warrior|
|
||||
|Generate|TOK:C14|Treefolk|
|
||||
|Generate|TOK:C14|Wolf|
|
||||
|Generate|TOK:C14|Gargoyle|
|
||||
|Generate|TOK:C14|Myr|
|
||||
|Generate|TOK:C14|Pentavite|
|
||||
|Generate|TOK:C14|Stoneforged Blade|
|
||||
|Generate|TOK:C14|Tuktuk the Returned|
|
||||
|Generate|TOK:C14|Wurm 1|
|
||||
|Generate|TOK:C14|Wurm 2|
|
||||
|Generate|EMBLEM!:C14|Emblem Teferi
|
||||
|Generate|EMBLEM!:C14|Emblem Nixilis
|
||||
|Generate|EMBLEM!:C14|Emblem Daretti
|
||||
|
||||
|
||||
|Generate|TOK:DDN|Goblin|
|
||||
|
||||
#|Generate|TOK:KTK|Bear|
|
||||
#|Generate|TOK:KTK|Bird|
|
||||
#|Generate|TOK:KTK|Goblin|
|
||||
#|Generate|TOK:KTK|Morph|
|
||||
#|Generate|TOK:KTK|Snake|
|
||||
#|Generate|TOK:KTK|Spirit Warrior|
|
||||
#|Generate|TOK:KTK|Spirit|
|
||||
#|Generate|TOK:KTK|Vampire|
|
||||
#|Generate|TOK:KTK|Warrior 1|
|
||||
#|Generate|TOK:KTK|Warrior 2|
|
||||
#|Generate|TOK:KTK|Zombie|
|
||||
#|Generate|EMBLEM!:KTK|Emblem Sarkhan, the Dragonspeaker|
|
||||
#|Generate|EMBLEM!:KTK|Emblem Sorin, Solemn Visitor|
|
||||
|Generate|TOK:KTK|Bear|
|
||||
|Generate|TOK:KTK|Bird|
|
||||
|Generate|TOK:KTK|Goblin|
|
||||
|Generate|TOK:KTK|Morph|
|
||||
|Generate|TOK:KTK|Snake|
|
||||
|Generate|TOK:KTK|Spirit Warrior|
|
||||
|Generate|TOK:KTK|Spirit|
|
||||
|Generate|TOK:KTK|Vampire|
|
||||
|Generate|TOK:KTK|Warrior 1|
|
||||
|Generate|TOK:KTK|Warrior 2|
|
||||
|Generate|TOK:KTK|Zombie|
|
||||
|Generate|EMBLEM!:KTK|Emblem Sarkhan|
|
||||
|Generate|EMBLEM!:KTK|Emblem Sorin|
|
||||
|
||||
|Generate|TOK:M15|Sliver|
|
||||
|Generate|TOK:M15|Soldier|
|
||||
|
|
@ -445,4 +491,4 @@
|
|||
|
||||
|Generate|TOK:CSP|Marit Lage|
|
||||
|
||||
|Generate|TOK:CHK|Spirit|
|
||||
#|Generate|TOK:CHK|Spirit|
|
||||
|
|
@ -64,6 +64,6 @@ ddd=gvl
|
|||
unh=uh
|
||||
dde=pvc
|
||||
# Remove setname as soon as the images can be downloaded
|
||||
ignore.urls=TOK,MM2,V15,BFZ,DDP
|
||||
ignore.urls=TOK,V15,DDP
|
||||
# sets ordered by release time (newest goes first)
|
||||
token.lookup.order=DDP,BFZ,FVD,FVE,FVL,FVR,V12,V13,V14,V15,TPR,MPRP,DD3,DDO,ORI,MM2,PTC,DTK,FRF,KTK,M15,VMA,CNS,JOU,BNG,THS,DDL,M14,MMA,DGM,GTC,RTR,M13,AVR,DDI,DKA,ISD,M12,NPH,MBS,SOM,M11,ROE,DDE,WWK,ZEN,M10,GVL,ARB,DVD,CFX,JVC,ALA,EVE,SHM,EVG,MOR,LRW,10E,CLS,CHK,GRC
|
||||
Loading…
Add table
Add a link
Reference in a new issue