Compare commits

..

2 Commits

Author SHA1 Message Date
Zukero
547f76de33 Merge branch 'master' into git_integration
Conflicts:
	.classpath
	src/com/gpl/rpg/atcontentstudio/ATContentStudio.java
2018-09-28 09:48:36 +02:00
Zukero
6701d9784d Added JGit libs and deps in classpath. Update to Java 8 needed. 2017-10-20 17:22:25 +02:00
41 changed files with 3053 additions and 3332 deletions

View File

@@ -1,19 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<classpath> <classpath>
<classpathentry kind="src" path="src"/> <classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="res"/> <classpathentry kind="src" path="res"/>
<classpathentry kind="src" path="hacked-libtiled"/> <classpathentry kind="src" path="hacked-libtiled"/>
<classpathentry kind="src" path="siphash-zackehh/src/main/java"/> <classpathentry kind="src" path="siphash-zackehh/src/main/java"/>
<classpathentry kind="src" path="minify"/> <classpathentry kind="src" path="minify"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.8.0_152"/>
<classpathentry kind="lib" path="lib/jide-oss.jar"/> <classpathentry kind="lib" path="lib/jide-oss.jar"/>
<classpathentry kind="lib" path="lib/json_simple-1.1.jar"/> <classpathentry kind="lib" path="lib/json_simple-1.1.jar"/>
<classpathentry kind="lib" path="lib/junit-4.10.jar"/> <classpathentry kind="lib" path="lib/junit-4.10.jar"/>
<classpathentry kind="lib" path="lib/prefuse.jar"/> <classpathentry kind="lib" path="lib/prefuse.jar"/>
<classpathentry kind="lib" path="lib/rsyntaxtextarea.jar"/> <classpathentry kind="lib" path="lib/rsyntaxtextarea.jar"/>
<classpathentry kind="lib" path="lib/ui.jar"/> <classpathentry kind="lib" path="lib/ui.jar"/>
<classpathentry kind="lib" path="lib/bsh-2.0b4.jar"/> <classpathentry kind="lib" path="lib/bsh-2.0b4.jar"/>
<classpathentry kind="lib" path="lib/jsoup-1.10.2.jar" sourcepath="lib/jsoup-1.10.2-sources.jar"/> <classpathentry kind="lib" path="lib/jsoup-1.10.2.jar" sourcepath="lib/jsoup-1.10.2-sources.jar"/>
<classpathentry kind="lib" path="lib/AndorsTrainer_v0.1.5.jar"/> <classpathentry kind="lib" path="lib/AndorsTrainer_v0.1.4.jar"/>
<classpathentry kind="output" path="bin"/> <classpathentry kind="lib" path="lib/JGit/commons-codec-1.6.jar"/>
</classpath> <classpathentry kind="lib" path="lib/JGit/commons-logging-1.1.3.jar"/>
<classpathentry kind="lib" path="lib/JGit/httpclient-4.3.6.jar"/>
<classpathentry kind="lib" path="lib/JGit/httpcore-4.3.3.jar"/>
<classpathentry kind="lib" path="lib/JGit/JavaEWAH-1.1.6.jar"/>
<classpathentry kind="lib" path="lib/JGit/jsch-0.1.54.jar"/>
<classpathentry kind="lib" path="lib/JGit/jzlib-1.0.7.jar"/>
<classpathentry kind="lib" path="lib/JGit/org.eclipse.jgit-4.9.0.201710071750-r.jar">
<attributes>
<attribute name="javadoc_location" value="jar:platform:/resource/ATContentStudio/lib/JGit/org.eclipse.jgit-4.9.0.201710071750-r-javadoc.jar!/"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="lib/JGit/slf4j-api-1.7.2.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View File

@@ -1,11 +1,12 @@
eclipse.preferences.version=1 eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.6 org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.6 org.eclipse.jdt.core.compiler.source=1.8

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<jardesc> <jardesc>
<jar path="ATContentStudio/ATCS_v0.6.19.jar"/> <jar path="ATContentStudio/ATCS_v0.6.14.jar"/>
<options buildIfNeeded="true" compress="true" descriptionLocation="/ATContentStudio/ATCS_JAR.jardesc" exportErrors="true" exportWarnings="true" includeDirectoryEntries="false" overwrite="false" saveDescription="true" storeRefactorings="false" useSourceFolders="false"/> <options buildIfNeeded="true" compress="true" descriptionLocation="/ATContentStudio/ATCS_JAR.jardesc" exportErrors="true" exportWarnings="true" includeDirectoryEntries="false" overwrite="false" saveDescription="true" storeRefactorings="false" useSourceFolders="false"/>
<storedRefactorings deprecationInfo="true" structuralOnly="false"/> <storedRefactorings deprecationInfo="true" structuralOnly="false"/>
<selectedProjects/> <selectedProjects/>

View File

@@ -913,8 +913,7 @@ public class TMXMapReader
private class MapEntityResolver implements EntityResolver private class MapEntityResolver implements EntityResolver
{ {
public InputSource resolveEntity(String publicId, String systemId) { public InputSource resolveEntity(String publicId, String systemId) {
if (systemId.equals("http://mapeditor.org/dtd/1.0/map.dtd") || if (systemId.equals("http://mapeditor.org/dtd/1.0/map.dtd")) {
systemId.equals("https://mapeditor.org/dtd/1.0/map.dtd")) {
return new InputSource(TMXMapReader.class.getResourceAsStream( return new InputSource(TMXMapReader.class.getResourceAsStream(
"resources/map.dtd")); "resources/map.dtd"));
} }

View File

@@ -47,9 +47,6 @@ import java.util.Vector;
import java.util.zip.DeflaterOutputStream; import java.util.zip.DeflaterOutputStream;
import java.util.zip.GZIPOutputStream; import java.util.zip.GZIPOutputStream;
import com.gpl.rpg.atcontentstudio.model.GameSource.Type;
import com.gpl.rpg.atcontentstudio.model.maps.TMXMapSet;
import tiled.core.AnimatedTile; import tiled.core.AnimatedTile;
import tiled.core.Map; import tiled.core.Map;
import tiled.core.MapLayer; import tiled.core.MapLayer;
@@ -153,7 +150,7 @@ public class TMXMapWriter
} }
private void writeMap(Map map, XMLWriter w, String wp) throws IOException { private void writeMap(Map map, XMLWriter w, String wp) throws IOException {
w.writeDocType("map", null, "https://mapeditor.org/dtd/1.0/map.dtd"); w.writeDocType("map", null, "http://mapeditor.org/dtd/1.0/map.dtd");
w.startElement("map"); w.startElement("map");
w.writeAttribute("version", "1.0"); w.writeAttribute("version", "1.0");
@@ -241,15 +238,7 @@ public class TMXMapWriter
} else { } else {
w.startElement("tileset"); w.startElement("tileset");
w.writeAttribute("firstgid", getFirstGidForTileset(set)); w.writeAttribute("firstgid", getFirstGidForTileset(set));
if (set.sheet != null && set.sheet.parent.getDataType() == Type.source) { w.writeAttribute("source", getRelativePath(wp, source));
String fileName = set.getName();
if (fileName.length() > 3 && !(fileName.substring(fileName.length() - 4).equalsIgnoreCase(".png"))) {
fileName += ".png";
}
w.writeAttribute("source", (TMXMapSet.DEFAULT_REL_PATH_TO_DRAWABLE + fileName).replace("\\", "/"));
} else {
w.writeAttribute("source", getRelativePath(wp, source));
}
if (set.getBaseDir() != null) { if (set.getBaseDir() != null) {
w.writeAttribute("basedir", set.getBaseDir()); w.writeAttribute("basedir", set.getBaseDir());
} }
@@ -290,15 +279,7 @@ public class TMXMapWriter
if (tileBitmapFile != null) { if (tileBitmapFile != null) {
w.startElement("image"); w.startElement("image");
if (set.sheet != null && set.sheet.parent.getDataType() == Type.source) { w.writeAttribute("source", getRelativePath(wp, tileBitmapFile));
String fileName = set.getName();
if (fileName.length() > 3 && !(fileName.substring(fileName.length() - 4).equalsIgnoreCase(".png"))) {
fileName += ".png";
}
w.writeAttribute("source", (TMXMapSet.DEFAULT_REL_PATH_TO_DRAWABLE + fileName).replace("\\", "/"));
} else {
w.writeAttribute("source", getRelativePath(wp, tileBitmapFile));
}
if (set.sheetDimensions != null) { if (set.sheetDimensions != null) {
w.writeAttribute("width", set.sheetDimensions.width); w.writeAttribute("width", set.sheetDimensions.width);
w.writeAttribute("height", set.sheetDimensions.height); w.writeAttribute("height", set.sheetDimensions.height);

Binary file not shown.

Binary file not shown.

BIN
lib/JGit/JavaEWAH-1.1.6.jar Executable file

Binary file not shown.

BIN
lib/JGit/commons-codec-1.6.jar Executable file

Binary file not shown.

Binary file not shown.

BIN
lib/JGit/httpclient-4.3.6.jar Executable file

Binary file not shown.

BIN
lib/JGit/httpcore-4.3.3.jar Executable file

Binary file not shown.

BIN
lib/JGit/jsch-0.1.54.jar Executable file

Binary file not shown.

BIN
lib/JGit/jzlib-1.0.7.jar Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
lib/JGit/slf4j-api-1.7.2.jar Executable file

Binary file not shown.

View File

@@ -1 +1 @@
v0.6.19 v0.6.14

View File

@@ -1,7 +1,7 @@
!include MUI2.nsh !include MUI2.nsh
!define VERSION "0.6.19" !define VERSION "0.6.14"
!define TRAINER_VERSION "0.1.5" !define TRAINER_VERSION "0.1.4"
!define JAVA_BIN "javaw" !define JAVA_BIN "javaw"
Name "Andor's Trail Content Studio v${VERSION}" Name "Andor's Trail Content Studio v${VERSION}"
@@ -83,16 +83,16 @@ Section install
FileClose $9 FileClose $9
SetOutPath "$INSTDIR\lib\" SetOutPath "$INSTDIR\lib\"
file "C:\AT\ATCS_source\lib\jide-oss.jar" file "jide-oss.jar"
file "C:\AT\ATCS_source\lib\ui.jar" file "ui.jar"
file "C:\AT\ATCS_source\lib\AndorsTrainer_v${TRAINER_VERSION}.jar" file "AndorsTrainer_v${TRAINER_VERSION}.jar"
file "C:\AT\ATCS_source\lib\junit-4.10.jar" file "junit-4.10.jar"
file "C:\AT\ATCS_source\lib\json_simple-1.1.jar" file "json_simple-1.1.jar"
file "C:\AT\temp\ATCS_v0.6.19\ATCS_v${VERSION}.jar" file "ATCS_v${VERSION}.jar"
file "C:\AT\ATCS_source\lib\rsyntaxtextarea.jar" file "rsyntaxtextarea.jar"
file "C:\AT\ATCS_source\lib\prefuse.jar" file "prefuse.jar"
file "C:\AT\ATCS_source\lib\bsh-2.0b4.jar" file "bsh-2.0b4.jar"
file "C:\AT\ATCS_source\lib\jsoup-1.10.2.jar" file "jsoup-1.10.2.jar"
SetOutPath $INSTDIR SetOutPath $INSTDIR
@@ -172,4 +172,4 @@ Function GetJRE
JreFound: JreFound:
Pop $R1 Pop $R1
Exch $R0 Exch $R0
FunctionEnd FunctionEnd

View File

@@ -1,85 +1,65 @@
atcs.spritesheet.actorconditions_1.category=actorcondition atcs.spritesheet.actorconditions_1.category=actorcondition
atcs.spritesheet.actorconditions_2.category=actorcondition atcs.spritesheet.actorconditions_2.category=actorcondition
atcs.spritesheet.actorconditions_japozero.category=actorcondition atcs.spritesheet.actorconditions_japozero.category=actorcondition
atcs.spritesheet.actorconditions_omi1.category=actorcondition
atcs.spritesheet.actorconditions_omi2.category=actorcondition
atcs.spritesheet.effect_blood3.animate=true
atcs.spritesheet.effect_blood4.animate=true
atcs.spritesheet.effect_bluetentacle.animate=true
atcs.spritesheet.effect_heal2.animate=true
atcs.spritesheet.effect_miss1.animate=true
atcs.spritesheet.effect_poison1.animate=true
atcs.spritesheet.effect_tometik1.animate=true
atcs.spritesheet.effect_tometik2.animate=true
atcs.spritesheet.items_armours.category=item atcs.spritesheet.items_armours.category=item
atcs.spritesheet.items_armours_2.category=item atcs.spritesheet.items_armours_2.category=item
atcs.spritesheet.items_armours_3.category=item atcs.spritesheet.items_armours_3.category=item
atcs.spritesheet.items_books.category=item atcs.spritesheet.items_weapons.category=item
atcs.spritesheet.items_consumables.category=item atcs.spritesheet.items_weapons_2.category=item
atcs.spritesheet.items_consumables_omi1.category=item atcs.spritesheet.items_weapons_3.category=item
atcs.spritesheet.items_feygard1.category=item
atcs.spritesheet.items_g03_package_omi1.category=item
atcs.spritesheet.items_japozero.category=item
atcs.spritesheet.items_jewelry.category=item atcs.spritesheet.items_jewelry.category=item
atcs.spritesheet.items_rings_1.category=item
atcs.spritesheet.items_necklaces_1.category=item
atcs.spritesheet.items_consumables.category=item
atcs.spritesheet.items_japozero.category=item
atcs.spritesheet.items_books.category=item
atcs.spritesheet.items_misc.category=item atcs.spritesheet.items_misc.category=item
atcs.spritesheet.items_misc_2.category=item atcs.spritesheet.items_misc_2.category=item
atcs.spritesheet.items_misc_3.category=item atcs.spritesheet.items_misc_3.category=item
atcs.spritesheet.items_misc_4.category=item atcs.spritesheet.items_misc_4.category=item
atcs.spritesheet.items_misc_5.category=item atcs.spritesheet.items_misc_5.category=item
atcs.spritesheet.items_misc_6.category=item atcs.spritesheet.items_misc_6.category=item
atcs.spritesheet.items_necklaces_1.category=item
atcs.spritesheet.items_omi2.category=item
atcs.spritesheet.items_reterski_1.category=item atcs.spritesheet.items_reterski_1.category=item
atcs.spritesheet.items_rijackson_1.category=item
atcs.spritesheet.items_rings_1.category=item
atcs.spritesheet.items_tometik1.category=item atcs.spritesheet.items_tometik1.category=item
atcs.spritesheet.items_tometik2.category=item atcs.spritesheet.items_tometik2.category=item
atcs.spritesheet.items_tometik3.category=item atcs.spritesheet.items_tometik3.category=item
atcs.spritesheet.items_weapons.category=item
atcs.spritesheet.items_weapons_2.category=item
atcs.spritesheet.items_weapons_3.category=item
atcs.spritesheet.monsters_armor1.category=monster atcs.spritesheet.monsters_armor1.category=monster
atcs.spritesheet.monsters_dogs.category=monster atcs.spritesheet.monsters_dogs.category=monster
atcs.spritesheet.monsters_eye1.category=monster atcs.spritesheet.monsters_eye1.category=monster
atcs.spritesheet.monsters_eye2.category=monster atcs.spritesheet.monsters_eye2.category=monster
atcs.spritesheet.monsters_eye3.category=monster atcs.spritesheet.monsters_eye3.category=monster
atcs.spritesheet.monsters_eye4.category=monster atcs.spritesheet.monsters_eye4.category=monster
atcs.spritesheet.monsters_ghost1.category=monster atcs.spritesheet.monsters_ghost1.category=monster
atcs.spritesheet.monsters_gisons.category=monster atcs.spritesheet.monsters_hydra1.category=monster
atcs.spritesheet.monsters_guynmart.category=monster atcs.spritesheet.monsters_hydra1.sizex=64
atcs.spritesheet.monsters_hydra1.sizey=64
atcs.spritesheet.monsters_insects.category=monster atcs.spritesheet.monsters_insects.category=monster
atcs.spritesheet.monsters_karvis1.category=monster
atcs.spritesheet.monsters_karvis2.category=monster
atcs.spritesheet.monsters_ld1.category=monster
atcs.spritesheet.monsters_ld2.category=monster
atcs.spritesheet.monsters_liches.category=monster atcs.spritesheet.monsters_liches.category=monster
atcs.spritesheet.monsters_mage.category=monster atcs.spritesheet.monsters_mage.category=monster
atcs.spritesheet.monsters_mage2.category=monster atcs.spritesheet.monsters_mage2.category=monster
atcs.spritesheet.monsters_maksiu1.category=monster
atcs.spritesheet.monsters_man1.category=monster atcs.spritesheet.monsters_man1.category=monster
atcs.spritesheet.monsters_men.category=monster atcs.spritesheet.monsters_men.category=monster
atcs.spritesheet.monsters_men2.category=monster atcs.spritesheet.monsters_men2.category=monster
atcs.spritesheet.monsters_misc.category=monster atcs.spritesheet.monsters_misc.category=monster
atcs.spritesheet.monsters_omi1.category=monster
atcs.spritesheet.monsters_omi1_b.category=monster
atcs.spritesheet.monsters_omi2.category=monster
atcs.spritesheet.monsters_rats.category=monster atcs.spritesheet.monsters_rats.category=monster
atcs.spritesheet.monsters_redshrike1.category=monster
atcs.spritesheet.monsters_rltiles1.category=monster
atcs.spritesheet.monsters_rltiles2.category=monster
atcs.spritesheet.monsters_rltiles3.category=monster
atcs.spritesheet.monsters_rltiles4.category=monster
atcs.spritesheet.monsters_rogue1.category=monster atcs.spritesheet.monsters_rogue1.category=monster
atcs.spritesheet.monsters_skeleton1.category=monster atcs.spritesheet.monsters_skeleton1.category=monster
atcs.spritesheet.monsters_skeleton2.category=monster atcs.spritesheet.monsters_skeleton2.category=monster
atcs.spritesheet.monsters_snakes.category=monster atcs.spritesheet.monsters_snakes.category=monster
atcs.spritesheet.monsters_warrior1.category=monster
atcs.spritesheet.monsters_wraiths.category=monster
atcs.spritesheet.monsters_zombie1.category=monster
atcs.spritesheet.monsters_zombie2.category=monster
atcs.spritesheet.monsters_karvis1.category=monster
atcs.spritesheet.monsters_karvis2.category=monster
atcs.spritesheet.monsters_rltiles1.category=monster
atcs.spritesheet.monsters_rltiles2.category=monster
atcs.spritesheet.monsters_rltiles3.category=monster
atcs.spritesheet.monsters_rltiles4.category=monster
atcs.spritesheet.monsters_redshrike1.category=monster
atcs.spritesheet.monsters_ld1.category=monster
atcs.spritesheet.monsters_ld2.category=monster
atcs.spritesheet.monsters_tometik1.category=monster atcs.spritesheet.monsters_tometik1.category=monster
atcs.spritesheet.monsters_tometik10.category=monster
atcs.spritesheet.monsters_tometik2.category=monster atcs.spritesheet.monsters_tometik2.category=monster
atcs.spritesheet.monsters_tometik3.category=monster atcs.spritesheet.monsters_tometik3.category=monster
atcs.spritesheet.monsters_tometik4.category=monster atcs.spritesheet.monsters_tometik4.category=monster
@@ -88,27 +68,21 @@ atcs.spritesheet.monsters_tometik6.category=monster
atcs.spritesheet.monsters_tometik7.category=monster atcs.spritesheet.monsters_tometik7.category=monster
atcs.spritesheet.monsters_tometik8.category=monster atcs.spritesheet.monsters_tometik8.category=monster
atcs.spritesheet.monsters_tometik9.category=monster atcs.spritesheet.monsters_tometik9.category=monster
atcs.spritesheet.monsters_warrior1.category=monster atcs.spritesheet.monsters_tometik10.category=monster
atcs.spritesheet.monsters_unknown.category=monster
atcs.spritesheet.monsters_wraiths.category=monster
atcs.spritesheet.monsters_zombie1.category=monster
atcs.spritesheet.monsters_zombie2.category=monster
atcs.spritesheet.monsters_bosses_2x2.category=monster
atcs.spritesheet.monsters_bosses_2x2.sizex=64
atcs.spritesheet.monsters_bosses_2x2.sizey=64
atcs.spritesheet.monsters_cyclops.category=monster
atcs.spritesheet.monsters_cyclops.sizex=64
atcs.spritesheet.monsters_cyclops.sizey=96
atcs.spritesheet.monsters_demon1.category=monster atcs.spritesheet.monsters_demon1.category=monster
atcs.spritesheet.monsters_demon1.sizex=64 atcs.spritesheet.monsters_demon1.sizex=64
atcs.spritesheet.monsters_demon1.sizey=64 atcs.spritesheet.monsters_demon1.sizey=64
atcs.spritesheet.monsters_demon2.category=monster atcs.spritesheet.monsters_demon2.category=monster
atcs.spritesheet.monsters_demon2.sizex=64 atcs.spritesheet.monsters_demon2.sizex=64
atcs.spritesheet.monsters_demon2.sizey=64 atcs.spritesheet.monsters_demon2.sizey=64
atcs.spritesheet.monsters_giantbasilisk.category=monster atcs.spritesheet.monsters_cyclops.category=monster
atcs.spritesheet.monsters_giantbasilisk.sizex=64 atcs.spritesheet.monsters_cyclops.sizex=64
atcs.spritesheet.monsters_giantbasilisk.sizey=64 atcs.spritesheet.monsters_cyclops.sizey=96
atcs.spritesheet.monsters_hydra1.category=monster atcs.spritesheet.effect_blood3.animate=true
atcs.spritesheet.monsters_hydra1.sizex=64 atcs.spritesheet.effect_blood4.animate=true
atcs.spritesheet.monsters_hydra1.sizey=64 atcs.spritesheet.effect_bluetentacle.animate=true
atcs.spritesheet.effect_heal2.animate=true
atcs.spritesheet.effect_poison1.animate=true
atcs.spritesheet.effect_tometik1.animate=true
atcs.spritesheet.effect_tometik2.animate=true
atcs.spritesheet.monsters_guynmart.category=monster

View File

@@ -1,227 +1,251 @@
package com.gpl.rpg.atcontentstudio; package com.gpl.rpg.atcontentstudio;
import java.awt.Color; import java.awt.Color;
import java.awt.Desktop; import java.awt.Desktop;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Font; import java.awt.Font;
import java.awt.Toolkit; import java.awt.Toolkit;
import java.awt.event.WindowAdapter; import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent; import java.awt.event.WindowEvent;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.net.URL; import java.net.URL;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import javax.swing.JEditorPane; import javax.swing.JEditorPane;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import javax.swing.UIDefaults; import javax.swing.UIDefaults;
import javax.swing.UIManager; import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException; import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener; import javax.swing.event.HyperlinkListener;
import javax.swing.plaf.FontUIResource; import javax.swing.plaf.FontUIResource;
import prefuse.data.expression.parser.ExpressionParser; import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.GitAPIException;
import com.gpl.rpg.atcontentstudio.model.Workspace; import org.eclipse.jgit.attributes.AttributesNodeProvider;
import com.gpl.rpg.atcontentstudio.ui.StudioFrame; import org.eclipse.jgit.internal.storage.file.FileRepository;
import com.gpl.rpg.atcontentstudio.ui.WorkerDialog; import org.eclipse.jgit.lib.ObjectDatabase;
import com.gpl.rpg.atcontentstudio.ui.WorkspaceSelector; import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.RefDatabase;
import org.eclipse.jgit.lib.ReflogReader;
public class ATContentStudio { import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.lib.StoredConfig;
public static final String APP_NAME = "Andor's Trail Content Studio";
public static final String APP_VERSION = "v0.6.19"; import prefuse.data.expression.parser.ExpressionParser;
public static final String CHECK_UPDATE_URL = "https://andorstrail.com/static/ATCS_latest"; import com.gpl.rpg.atcontentstudio.model.Workspace;
public static final String DOWNLOAD_URL = "https://andorstrail.com/viewtopic.php?f=6&t=4806"; import com.gpl.rpg.atcontentstudio.ui.StudioFrame;
import com.gpl.rpg.atcontentstudio.ui.WorkerDialog;
public static final String FONT_SCALE_ENV_VAR_NAME = "FONT_SCALE"; import com.gpl.rpg.atcontentstudio.ui.WorkspaceSelector;
public static boolean STARTED = false;
public static float SCALING=1.0f; public class ATContentStudio {
public static StudioFrame frame = null;
public static final String APP_NAME = "Andor's Trail Content Studio";
//Need to keep a strong reference to it, to avoid garbage collection that'll reset these loggers. public static final String APP_VERSION = "v0.6.14";
public static final List<Logger> configuredLoggers = new LinkedList<Logger>();
public static final String CHECK_UPDATE_URL = "https://andorstrail.com/static/ATCS_latest";
/** public static final String DOWNLOAD_URL = "https://andorstrail.com/viewtopic.php?f=6&t=4806";
* @param args
*/ public static final String FONT_SCALE_ENV_VAR_NAME = "FONT_SCALE";
public static void main(String[] args) {
String fontScaling = System.getProperty(FONT_SCALE_ENV_VAR_NAME); public static boolean STARTED = false;
Float fontScale = null; public static float SCALING=1.0f;
if (fontScaling != null) { public static StudioFrame frame = null;
try {
fontScale = Float.parseFloat(fontScaling); //Need to keep a strong reference to it, to avoid garbage collection that'll reset these loggers.
SCALING=fontScale; public static final List<Logger> configuredLoggers = new LinkedList<Logger>();
} catch (NumberFormatException e) {
System.err.println("Failed to parse font scaling parameter. Using default."); /**
e.printStackTrace(); * @param args
} */
} public static void main(String[] args) {
String fontScaling = System.getProperty(FONT_SCALE_ENV_VAR_NAME);
ConfigCache.init(); Float fontScale = null;
if (fontScaling != null) {
try { try {
String laf = ConfigCache.getFavoriteLaFClassName(); fontScale = Float.parseFloat(fontScaling);
if (laf == null) laf = UIManager.getSystemLookAndFeelClassName(); SCALING=fontScale;
UIManager.setLookAndFeel(laf); } catch (NumberFormatException e) {
} catch (ClassNotFoundException e) { System.err.println("Failed to parse font scaling parameter. Using default.");
e.printStackTrace(); e.printStackTrace();
} catch (InstantiationException e) { }
e.printStackTrace(); }
} catch (IllegalAccessException e) {
e.printStackTrace(); // try {
} catch (UnsupportedLookAndFeelException e) { // Git git = new Git(new FileRepository("/home/xxx/git_repos/andors-trail/.git/"));
e.printStackTrace(); // List<Ref> branches = git.branchList().call();
} // for (Ref branch : branches) {
// System.out.println(branch.getName());
// }
scaleUIFont(); // } catch (IOException e1) {
// e1.printStackTrace();
//Need to keep a strong reference to it, to avoid garbage collection that'll reset this setting. // } catch (GitAPIException e1) {
Logger l = Logger.getLogger(ExpressionParser.class.getName()); // e1.printStackTrace();
l.setLevel(Level.OFF); // }
configuredLoggers.add(l);
final WorkspaceSelector wsSelect = new WorkspaceSelector(); ConfigCache.init();
wsSelect.pack();
Dimension sdim = Toolkit.getDefaultToolkit().getScreenSize(); try {
Dimension wdim = wsSelect.getSize(); String laf = ConfigCache.getFavoriteLaFClassName();
wsSelect.setLocation((sdim.width - wdim.width)/2, (sdim.height - wdim.height)/2); if (laf == null) laf = UIManager.getSystemLookAndFeelClassName();
wsSelect.setVisible(true); UIManager.setLookAndFeel(laf);
} catch (ClassNotFoundException e) {
wsSelect.addWindowListener(new WindowAdapter() { e.printStackTrace();
@Override } catch (InstantiationException e) {
public synchronized void windowClosed(WindowEvent e) { e.printStackTrace();
if (wsSelect.selected != null && !STARTED) { } catch (IllegalAccessException e) {
ATContentStudio.STARTED = true; e.printStackTrace();
final File workspaceRoot = new File(wsSelect.selected); } catch (UnsupportedLookAndFeelException e) {
WorkerDialog.showTaskMessage("Loading your workspace...", null, new Runnable(){ e.printStackTrace();
public void run() { }
Workspace.setActive(workspaceRoot);
if (Workspace.activeWorkspace.settings.useInternet.getCurrentValue() && Workspace.activeWorkspace.settings.checkUpdates.getCurrentValue()) {
new Thread() { scaleUIFont();
public void run() {checkUpdate();}
}.start(); //Need to keep a strong reference to it, to avoid garbage collection that'll reset this setting.
} Logger l = Logger.getLogger(ExpressionParser.class.getName());
frame = new StudioFrame(APP_NAME+" "+APP_VERSION); l.setLevel(Level.OFF);
frame.setVisible(true); configuredLoggers.add(l);
frame.setDefaultCloseOperation(StudioFrame.DO_NOTHING_ON_CLOSE);
}; final WorkspaceSelector wsSelect = new WorkspaceSelector();
}); wsSelect.pack();
for (File f : ConfigCache.getKnownWorkspaces()) { Dimension sdim = Toolkit.getDefaultToolkit().getScreenSize();
if (workspaceRoot.equals(f)) { Dimension wdim = wsSelect.getSize();
if (!workspaceRoot.equals(ConfigCache.getLatestWorkspace())) { wsSelect.setLocation((sdim.width - wdim.width)/2, (sdim.height - wdim.height)/2);
ConfigCache.setLatestWorkspace(f); wsSelect.setVisible(true);
}
return; wsSelect.addWindowListener(new WindowAdapter() {
} @Override
} public synchronized void windowClosed(WindowEvent e) {
ConfigCache.addWorkspace(workspaceRoot); if (wsSelect.selected != null && !STARTED) {
ConfigCache.setLatestWorkspace(workspaceRoot); ATContentStudio.STARTED = true;
final File workspaceRoot = new File(wsSelect.selected);
} WorkerDialog.showTaskMessage("Loading your workspace...", null, new Runnable(){
} public void run() {
}); Workspace.setActive(workspaceRoot);
} if (Workspace.activeWorkspace.settings.useInternet.getCurrentValue() && Workspace.activeWorkspace.settings.checkUpdates.getCurrentValue()) {
new Thread() {
private static void checkUpdate() { public void run() {checkUpdate();}
BufferedReader in = null; }.start();
try { }
URL url = new URL(CHECK_UPDATE_URL); frame = new StudioFrame(APP_NAME+" "+APP_VERSION);
in = new BufferedReader(new InputStreamReader(url.openStream())); frame.setVisible(true);
frame.setDefaultCloseOperation(StudioFrame.DO_NOTHING_ON_CLOSE);
String inputLine, lastLine = null; };
while ((inputLine = in.readLine()) != null) {lastLine = inputLine;} });
if (lastLine != null && !lastLine.equals(APP_VERSION)) { for (File f : ConfigCache.getKnownWorkspaces()) {
if (workspaceRoot.equals(f)) {
// for copying style if (!workspaceRoot.equals(ConfigCache.getLatestWorkspace())) {
JLabel label = new JLabel(); ConfigCache.setLatestWorkspace(f);
Font font = label.getFont(); }
Color color = label.getBackground(); return;
}
// create some css from the label's font }
StringBuffer style = new StringBuffer("font-family:" + font.getFamily() + ";"); ConfigCache.addWorkspace(workspaceRoot);
style.append("font-weight:" + (font.isBold() ? "bold" : "normal") + ";"); ConfigCache.setLatestWorkspace(workspaceRoot);
style.append("font-size:" + font.getSize() + "pt;");
style.append("background-color: rgb("+color.getRed()+","+color.getGreen()+","+color.getBlue()+");"); }
}
JEditorPane ep = new JEditorPane("text/html", "<html><body style=\"" + style + "\">" });
+ "You are not running the latest ATCS version.<br/>" }
+ "You can get the latest version ("+lastLine+") by clicking the link below.<br/>"
+ "<a href=\""+DOWNLOAD_URL+"\">"+DOWNLOAD_URL+"</a><br/>" private static void checkUpdate() {
+ "<br/>" BufferedReader in = null;
+ "</body></html>"); try {
URL url = new URL(CHECK_UPDATE_URL);
ep.setEditable(false); in = new BufferedReader(new InputStreamReader(url.openStream()));
ep.setBorder(null);
String inputLine, lastLine = null;
ep.addHyperlinkListener(new HyperlinkListener() { while ((inputLine = in.readLine()) != null) {lastLine = inputLine;}
if (lastLine != null && !lastLine.equals(APP_VERSION)) {
@Override
public void hyperlinkUpdate(HyperlinkEvent e) { // for copying style
try { JLabel label = new JLabel();
if (e.getEventType().equals(HyperlinkEvent.EventType.ACTIVATED)) { Font font = label.getFont();
Desktop.getDesktop().browse(e.getURL().toURI()); Color color = label.getBackground();
}
} catch (IOException e1) { // create some css from the label's font
e1.printStackTrace(); StringBuffer style = new StringBuffer("font-family:" + font.getFamily() + ";");
} catch (URISyntaxException e1) { style.append("font-weight:" + (font.isBold() ? "bold" : "normal") + ";");
e1.printStackTrace(); style.append("font-size:" + font.getSize() + "pt;");
} style.append("background-color: rgb("+color.getRed()+","+color.getGreen()+","+color.getBlue()+");");
}
}); JEditorPane ep = new JEditorPane("text/html", "<html><body style=\"" + style + "\">"
+ "You are not running the latest ATCS version.<br/>"
JOptionPane.showMessageDialog(null, ep, "Update available", JOptionPane.INFORMATION_MESSAGE); + "You can get the latest version ("+lastLine+") by clicking the link below.<br/>"
} + "<a href=\""+DOWNLOAD_URL+"\">"+DOWNLOAD_URL+"</a><br/>"
} catch (MalformedURLException e) { + "<br/>"
e.printStackTrace(); + "</body></html>");
} catch (IOException e) {
e.printStackTrace(); ep.setEditable(false);
} finally { ep.setBorder(null);
try {
if (in != null) in.close(); ep.addHyperlinkListener(new HyperlinkListener() {
} catch (IOException e) {
e.printStackTrace(); @Override
} public void hyperlinkUpdate(HyperlinkEvent e) {
} try {
} if (e.getEventType().equals(HyperlinkEvent.EventType.ACTIVATED)) {
Desktop.getDesktop().browse(e.getURL().toURI());
public static void scaleUIFont() { }
if (SCALING != 1.0f) { } catch (IOException e1) {
System.out.println("Scaling fonts to "+SCALING); e1.printStackTrace();
UIDefaults defaults = UIManager.getLookAndFeelDefaults(); } catch (URISyntaxException e1) {
Map<Object, Object> newDefaults = new HashMap<Object, Object>(); e1.printStackTrace();
for (Enumeration<Object> e = defaults.keys(); e.hasMoreElements();) { }
Object key = e.nextElement(); }
Object value = defaults.get(key); });
if (value instanceof Font) {
Font font = (Font) value; JOptionPane.showMessageDialog(null, ep, "Update available", JOptionPane.INFORMATION_MESSAGE);
int newSize = (int)(font.getSize() * SCALING); }
if (value instanceof FontUIResource) { } catch (MalformedURLException e) {
newDefaults.put(key, new FontUIResource(font.getName(), font.getStyle(), newSize)); e.printStackTrace();
} else { } catch (IOException e) {
newDefaults.put(key, new Font(font.getName(), font.getStyle(), newSize)); e.printStackTrace();
} } finally {
} try {
} if (in != null) in.close();
for (Object key : newDefaults.keySet()) { } catch (IOException e) {
defaults.put(key, newDefaults.get(key)); e.printStackTrace();
} }
} }
} }
}
public static void scaleUIFont() {
if (SCALING != 1.0f) {
System.out.println("Scaling fonts to "+SCALING);
UIDefaults defaults = UIManager.getLookAndFeelDefaults();
Map<Object, Object> newDefaults = new HashMap<Object, Object>();
for (Enumeration<Object> e = defaults.keys(); e.hasMoreElements();) {
Object key = e.nextElement();
Object value = defaults.get(key);
if (value instanceof Font) {
Font font = (Font) value;
int newSize = (int)(font.getSize() * SCALING);
if (value instanceof FontUIResource) {
newDefaults.put(key, new FontUIResource(font.getName(), font.getStyle(), newSize));
} else {
newDefaults.put(key, new Font(font.getName(), font.getStyle(), newSize));
}
}
}
for (Object key : newDefaults.keySet()) {
defaults.put(key, newDefaults.get(key));
}
}
}
}

View File

@@ -11,10 +11,6 @@ import java.io.IOException;
import java.io.Serializable; import java.io.Serializable;
import java.io.StringReader; import java.io.StringReader;
import java.io.StringWriter; import java.io.StringWriter;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Enumeration; import java.util.Enumeration;
@@ -78,9 +74,7 @@ import com.gpl.rpg.atcontentstudio.utils.FileUtils;
public class Project implements ProjectTreeNode, Serializable { public class Project implements ProjectTreeNode, Serializable {
private static final long serialVersionUID = 4807454973303366758L; private static final long serialVersionUID = 4807454973303366758L;
private static final String drawablePath = TMXMapSet.DEFAULT_REL_PATH_TO_DRAWABLE.replace("\\", "/");
//Every instance field that is not transient will be saved in this file. //Every instance field that is not transient will be saved in this file.
public static final String SETTINGS_FILE = ".project"; public static final String SETTINGS_FILE = ".project";
@@ -1085,16 +1079,10 @@ public class Project implements ProjectTreeNode, Serializable {
public void run() { public void run() {
Notification.addInfo("Exporting project \""+name+"\" as "+target.getAbsolutePath()); Notification.addInfo("Exporting project \""+name+"\" as "+target.getAbsolutePath());
File tmpDir; File tmpDir = exportProjectToTmpDir();
try {
tmpDir = exportProjectToTmpDir();
FileUtils.writeToZip(tmpDir, target);
FileUtils.deleteDir(tmpDir);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
FileUtils.writeToZip(tmpDir, target);
FileUtils.deleteDir(tmpDir);
Notification.addSuccess("Project \""+name+"\" exported as "+target.getAbsolutePath()); Notification.addSuccess("Project \""+name+"\" exported as "+target.getAbsolutePath());
} }
@@ -1108,16 +1096,10 @@ public class Project implements ProjectTreeNode, Serializable {
public void run() { public void run() {
Notification.addInfo("Exporting project \""+name+"\" into "+target.getAbsolutePath()); Notification.addInfo("Exporting project \""+name+"\" into "+target.getAbsolutePath());
File tmpDir; File tmpDir = exportProjectToTmpDir();
try {
tmpDir = exportProjectToTmpDir();
FileUtils.copyOver(tmpDir, target);
FileUtils.deleteDir(tmpDir);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
FileUtils.copyOver(tmpDir, target);
FileUtils.deleteDir(tmpDir);
Notification.addSuccess("Project \""+name+"\" exported into "+target.getAbsolutePath()); Notification.addSuccess("Project \""+name+"\" exported into "+target.getAbsolutePath());
} }
@@ -1125,7 +1107,7 @@ public class Project implements ProjectTreeNode, Serializable {
}); });
} }
public File exportProjectToTmpDir() throws IOException { public File exportProjectToTmpDir() {
File tmpDir = new File(baseFolder, "tmp"); File tmpDir = new File(baseFolder, "tmp");
FileUtils.deleteDir(tmpDir); FileUtils.deleteDir(tmpDir);
tmpDir.mkdir(); tmpDir.mkdir();
@@ -1157,12 +1139,12 @@ public class Project implements ProjectTreeNode, Serializable {
writtenFiles = new LinkedList<String>(); writtenFiles = new LinkedList<String>();
for (File createdMapFile : createdContent.gameMaps.mapFolder.listFiles()) { for (File createdMapFile : createdContent.gameMaps.mapFolder.listFiles()) {
if (createdMapFile.getName().equalsIgnoreCase("worldmap.xml")) continue; if (createdMapFile.getName().equalsIgnoreCase("worldmap.xml")) continue;
copyTmxConverted(createdMapFile.toPath(), Paths.get(tmpMapDir.getAbsolutePath(), createdMapFile.getName())); FileUtils.copyFile(createdMapFile, new File(tmpMapDir, createdMapFile.getName()));
writtenFiles.add(createdMapFile.getName()); writtenFiles.add(createdMapFile.getName());
} }
for (File alteredMapFile : alteredContent.gameMaps.mapFolder.listFiles()) { for (File alteredMapFile : alteredContent.gameMaps.mapFolder.listFiles()) {
if (alteredMapFile.getName().equalsIgnoreCase("worldmap.xml")) continue; if (alteredMapFile.getName().equalsIgnoreCase("worldmap.xml")) continue;
copyTmxConverted(alteredMapFile.toPath(), Paths.get(tmpMapDir.getAbsolutePath(), alteredMapFile.getName())); FileUtils.copyFile(alteredMapFile, new File(tmpMapDir, alteredMapFile.getName()));
writtenFiles.add(alteredMapFile.getName()); writtenFiles.add(alteredMapFile.getName());
} }
writtenFilesPerDataType.put(TMXMap.class, writtenFiles); writtenFilesPerDataType.put(TMXMap.class, writtenFiles);
@@ -1195,16 +1177,6 @@ public class Project implements ProjectTreeNode, Serializable {
return tmpDir; return tmpDir;
} }
private void copyTmxConverted(Path from, Path to) throws IOException {
String xml = new String(Files.readAllBytes(from), StandardCharsets.UTF_8);
xml = xml.replace("../../altered/spritesheets/", drawablePath);
xml = xml.replace("../../created/spritesheets/", drawablePath);
xml = xml.replace("../spritesheets/", drawablePath);
xml = xml.replace("../spritesheets/", drawablePath);
Files.write(to, xml.getBytes(StandardCharsets.UTF_8));
}
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
public List<String> writeDataDeltaForDataType(GameDataCategory<? extends JSONElement> created, GameDataCategory<? extends JSONElement> altered, GameDataCategory<? extends JSONElement> source, Class<? extends JSONElement> gdeClass, File targetFolder) { public List<String> writeDataDeltaForDataType(GameDataCategory<? extends JSONElement> created, GameDataCategory<? extends JSONElement> altered, GameDataCategory<? extends JSONElement> source, Class<? extends JSONElement> gdeClass, File targetFolder) {
List<String> filenamesToWrite = new LinkedList<String>(); List<String> filenamesToWrite = new LinkedList<String>();

View File

@@ -36,7 +36,7 @@ public class Droplist extends JSONElement {
public static class DroppedItem { public static class DroppedItem {
//Available from parsed state; //Available from parsed state;
public String item_id = null; public String item_id = null;
public String chance = null; public Double chance = null;
public Integer quantity_min = null; public Integer quantity_min = null;
public Integer quantity_max = null; public Integer quantity_max = null;
@@ -114,8 +114,7 @@ public class Droplist extends JSONElement {
Map droppedItemJson = (Map)droppedItemJsonObj; Map droppedItemJson = (Map)droppedItemJsonObj;
DroppedItem droppedItem = new DroppedItem(); DroppedItem droppedItem = new DroppedItem();
droppedItem.item_id = (String) droppedItemJson.get("itemID"); droppedItem.item_id = (String) droppedItemJson.get("itemID");
//if (droppedItemJson.get("chance") != null) droppedItem.chance = JSONElement.parseChance(droppedItemJson.get("chance").toString()); if (droppedItemJson.get("chance") != null) droppedItem.chance = JSONElement.parseChance(droppedItemJson.get("chance").toString());
droppedItem.chance = (String) droppedItemJson.get("chance");
Map droppedItemQtyJson = (Map) droppedItemJson.get("quantity"); Map droppedItemQtyJson = (Map) droppedItemJson.get("quantity");
if (droppedItemQtyJson != null) { if (droppedItemQtyJson != null) {
droppedItem.quantity_min = JSONElement.getInteger((Number) droppedItemQtyJson.get("min")); droppedItem.quantity_min = JSONElement.getInteger((Number) droppedItemQtyJson.get("min"));
@@ -218,8 +217,7 @@ public class Droplist extends JSONElement {
} else if (droppedItem.item_id != null) { } else if (droppedItem.item_id != null) {
droppedItemJson.put("itemID", droppedItem.item_id); droppedItemJson.put("itemID", droppedItem.item_id);
} }
//if (droppedItem.chance != null) droppedItemJson.put("chance", JSONElement.printJsonChance(droppedItem.chance)); if (droppedItem.chance != null) droppedItemJson.put("chance", JSONElement.printJsonChance(droppedItem.chance));
if (droppedItem.chance != null) droppedItemJson.put("chance", droppedItem.chance);
if (droppedItem.quantity_min != null || droppedItem.quantity_max != null) { if (droppedItem.quantity_min != null || droppedItem.quantity_max != null) {
Map quantityJson = new LinkedHashMap(); Map quantityJson = new LinkedHashMap();
droppedItemJson.put("quantity", quantityJson); droppedItemJson.put("quantity", quantityJson);

View File

@@ -83,7 +83,6 @@ public class Item extends JSONElement {
public Integer increase_block_chance = null; public Integer increase_block_chance = null;
public Integer increase_damage_resistance = null; public Integer increase_damage_resistance = null;
public Double critical_multiplier = null; public Double critical_multiplier = null;
public Integer damage_modifier = null;
} }
public static class ConditionEffect { public static class ConditionEffect {
@@ -203,8 +202,7 @@ public class Item extends JSONElement {
//TODO correct game data, to unify format. //TODO correct game data, to unify format.
// this.equip_effect.critical_multiplier = JSONElement.getDouble((Number) equipEffect.get("setCriticalMultiplier")); // this.equip_effect.critical_multiplier = JSONElement.getDouble((Number) equipEffect.get("setCriticalMultiplier"));
if (equipEffect.get("setCriticalMultiplier") != null) this.equip_effect.critical_multiplier = JSONElement.getDouble(Double.parseDouble(equipEffect.get("setCriticalMultiplier").toString())); if (equipEffect.get("setCriticalMultiplier") != null) this.equip_effect.critical_multiplier = JSONElement.getDouble(Double.parseDouble(equipEffect.get("setCriticalMultiplier").toString()));
this.equip_effect.damage_modifier = JSONElement.getInteger((Number) equipEffect.get("setNonWeaponDamageModifier"));
List conditionsJson = (List) equipEffect.get("addedConditions"); List conditionsJson = (List) equipEffect.get("addedConditions");
if (conditionsJson != null && !conditionsJson.isEmpty()) { if (conditionsJson != null && !conditionsJson.isEmpty()) {
this.equip_effect.conditions = new ArrayList<Item.ConditionEffect>(); this.equip_effect.conditions = new ArrayList<Item.ConditionEffect>();
@@ -218,7 +216,6 @@ public class Item extends JSONElement {
} }
} }
Map hitEffect = (Map) itemJson.get("hitEffect"); Map hitEffect = (Map) itemJson.get("hitEffect");
if (hitEffect != null) { if (hitEffect != null) {
this.hit_effect = new HitEffect(); this.hit_effect = new HitEffect();
@@ -429,7 +426,6 @@ public class Item extends JSONElement {
clone.has_manual_price = this.has_manual_price; clone.has_manual_price = this.has_manual_price;
if (this.equip_effect != null) { if (this.equip_effect != null) {
clone.equip_effect = new EquipEffect(); clone.equip_effect = new EquipEffect();
clone.equip_effect.damage_modifier = this.equip_effect.damage_modifier;
clone.equip_effect.critical_multiplier = this.equip_effect.critical_multiplier; clone.equip_effect.critical_multiplier = this.equip_effect.critical_multiplier;
clone.equip_effect.damage_boost_max = this.equip_effect.damage_boost_max; clone.equip_effect.damage_boost_max = this.equip_effect.damage_boost_max;
clone.equip_effect.damage_boost_min = this.equip_effect.damage_boost_min; clone.equip_effect.damage_boost_min = this.equip_effect.damage_boost_min;
@@ -646,7 +642,6 @@ public class Item extends JSONElement {
if (this.equip_effect.increase_block_chance != null) equipEffectJson.put("increaseBlockChance", this.equip_effect.increase_block_chance); if (this.equip_effect.increase_block_chance != null) equipEffectJson.put("increaseBlockChance", this.equip_effect.increase_block_chance);
if (this.equip_effect.increase_damage_resistance != null) equipEffectJson.put("increaseDamageResistance", this.equip_effect.increase_damage_resistance); if (this.equip_effect.increase_damage_resistance != null) equipEffectJson.put("increaseDamageResistance", this.equip_effect.increase_damage_resistance);
if (this.equip_effect.critical_multiplier != null) equipEffectJson.put("setCriticalMultiplier", this.equip_effect.critical_multiplier); if (this.equip_effect.critical_multiplier != null) equipEffectJson.put("setCriticalMultiplier", this.equip_effect.critical_multiplier);
if (this.equip_effect.damage_modifier != null) equipEffectJson.put("setNonWeaponDamageModifier", this.equip_effect.damage_modifier);
if (this.equip_effect.conditions != null) { if (this.equip_effect.conditions != null) {
List conditionsJson = new ArrayList(); List conditionsJson = new ArrayList();
equipEffectJson.put("addedConditions", conditionsJson); equipEffectJson.put("addedConditions", conditionsJson);

View File

@@ -38,16 +38,11 @@ public abstract class JSONElement extends GameDataElement {
for (Object obj : gameDataElements) { for (Object obj : gameDataElements) {
Map jsonObj = (Map)obj; Map jsonObj = (Map)obj;
String id = (String) jsonObj.get("id"); String id = (String) jsonObj.get("id");
try {
if (id != null && id.equals(this.id )) { if (id != null && id.equals(this.id )) {
this.parse(jsonObj); this.parse(jsonObj);
this.state = State.parsed; this.state = State.parsed;
break; break;
} }
}
catch(Exception e){
System.out.println("Error in ID: " + id);
}
} }
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
Notification.addError("Error while parsing JSON file "+jsonFile.getAbsolutePath()+": "+e.getMessage()); Notification.addError("Error while parsing JSON file "+jsonFile.getAbsolutePath()+": "+e.getMessage());
@@ -58,10 +53,6 @@ public abstract class JSONElement extends GameDataElement {
} catch (ParseException e) { } catch (ParseException e) {
Notification.addError("Error while parsing JSON file "+jsonFile.getAbsolutePath()+": "+e.getMessage()); Notification.addError("Error while parsing JSON file "+jsonFile.getAbsolutePath()+": "+e.getMessage());
e.printStackTrace(); e.printStackTrace();
} catch (IllegalArgumentException e) {
System.out.println(id);
Notification.addError("Error while parsing JSON file "+jsonFile.getAbsolutePath()+": "+e.getMessage());
e.printStackTrace();
} finally { } finally {
if (reader != null) if (reader != null)
try { try {

View File

@@ -26,13 +26,10 @@ public class Requirement extends JSONElement {
countedItemTypes.add(RequirementType.inventoryRemove); countedItemTypes.add(RequirementType.inventoryRemove);
countedItemTypes.add(RequirementType.inventoryKeep); countedItemTypes.add(RequirementType.inventoryKeep);
countedItemTypes.add(RequirementType.usedItem); countedItemTypes.add(RequirementType.usedItem);
countedItemTypes.add(RequirementType.wear);
countedItemTypes.add(RequirementType.wearRemove);
COMPATIBLE_TYPES.put(RequirementType.inventoryRemove, countedItemTypes); COMPATIBLE_TYPES.put(RequirementType.inventoryRemove, countedItemTypes);
COMPATIBLE_TYPES.put(RequirementType.inventoryKeep, countedItemTypes); COMPATIBLE_TYPES.put(RequirementType.inventoryKeep, countedItemTypes);
COMPATIBLE_TYPES.put(RequirementType.usedItem, countedItemTypes); COMPATIBLE_TYPES.put(RequirementType.usedItem, countedItemTypes);
COMPATIBLE_TYPES.put(RequirementType.wear, countedItemTypes);
COMPATIBLE_TYPES.put(RequirementType.wearRemove, countedItemTypes);
} }
//Available from parsed state //Available from parsed state
@@ -57,10 +54,7 @@ public class Requirement extends JSONElement {
spentGold, spentGold,
consumedBonemeals, consumedBonemeals,
hasActorCondition, hasActorCondition,
factionScore, factionScore
random,
factionScoreEquals,
wearRemove
} }
public enum SkillID { public enum SkillID {
@@ -85,7 +79,6 @@ public class Requirement extends JSONElement {
,resistancePhysical // lowers chance to get negative active conditions by monsters (Physical Capacity like Minor fatigue) ,resistancePhysical // lowers chance to get negative active conditions by monsters (Physical Capacity like Minor fatigue)
,resistanceBlood // lowers chance to get negative active conditions by monsters (Blood Disorder like Weak Poison) ,resistanceBlood // lowers chance to get negative active conditions by monsters (Blood Disorder like Weak Poison)
,shadowBless ,shadowBless
,sporeImmunity
,crit1 // lowers atk ability ,crit1 // lowers atk ability
,crit2 // lowers def ability ,rejuvenation // Reduces magnitudes of conditions ,crit2 // lowers def ability ,rejuvenation // Reduces magnitudes of conditions
,rejuvenation // Reduces magnitudes of conditions ,rejuvenation // Reduces magnitudes of conditions
@@ -97,7 +90,6 @@ public class Requirement extends JSONElement {
,weaponProficiencyAxe ,weaponProficiencyAxe
,weaponProficiencyBlunt ,weaponProficiencyBlunt
,weaponProficiencyUnarmed ,weaponProficiencyUnarmed
,weaponProficiencyPole
,armorProficiencyShield ,armorProficiencyShield
,armorProficiencyUnarmored ,armorProficiencyUnarmored
,armorProficiencyLight ,armorProficiencyLight
@@ -112,21 +104,9 @@ public class Requirement extends JSONElement {
@Override @Override
public String getDesc() { public String getDesc() {
String obj_id = "";
if (required_obj_id != null)
{
obj_id = required_obj_id;
if (type != null && type == RequirementType.random){
obj_id = " Chance " + obj_id + (required_obj_id.contains("/") ? "" : "%");
}
else {
obj_id += ":";
}
}
return ((negated != null && negated) ? "NOT " : "") return ((negated != null && negated) ? "NOT " : "")
+(type == null ? "" : type.toString()+":") +(type == null ? "" : type.toString()+":")
+obj_id +(required_obj_id == null ? "" : required_obj_id+":")
+(required_value == null ? "" : required_value.toString()); +(required_value == null ? "" : required_value.toString());
} }
@@ -173,7 +153,6 @@ public class Requirement extends JSONElement {
case inventoryRemove: case inventoryRemove:
case usedItem: case usedItem:
case wear: case wear:
case wearRemove:
this.required_obj = proj.getItem(required_obj_id); this.required_obj = proj.getItem(required_obj_id);
break; break;
case killedMonster: case killedMonster:
@@ -194,8 +173,6 @@ public class Requirement extends JSONElement {
case spentGold: case spentGold:
case timerElapsed: case timerElapsed:
case factionScore: case factionScore:
case factionScoreEquals:
case random:
break; break;
} }
if (this.required_obj != null) this.required_obj.addBacklink((GameDataElement) this.parent); if (this.required_obj != null) this.required_obj.addBacklink((GameDataElement) this.parent);
@@ -248,12 +225,6 @@ public class Requirement extends JSONElement {
required_obj_id = null; required_obj_id = null;
required_value = null; required_value = null;
} }
if(destType==RequirementType.random)
{
required_obj_id = "50/100";
}
type = destType; type = destType;
} }

View File

@@ -95,9 +95,7 @@ public class ReplaceArea extends MapObject {
if (oldSchoolRequirement && Requirement.RequirementType.questProgress.equals(requirement.type) && (requirement.negated == null || !requirement.negated)) { if (oldSchoolRequirement && Requirement.RequirementType.questProgress.equals(requirement.type) && (requirement.negated == null || !requirement.negated)) {
tmxObject.setName(requirement.required_obj_id+":"+((requirement.required_value == null) ? "" : Integer.toString(requirement.required_value))); tmxObject.setName(requirement.required_obj_id+":"+((requirement.required_value == null) ? "" : Integer.toString(requirement.required_value)));
} else { } else {
if (requirement.type != null) { tmxObject.getProperties().setProperty("requireType", requirement.type.toString());
tmxObject.getProperties().setProperty("requireType", requirement.type.toString());
}
if (requirement.required_obj != null) { if (requirement.required_obj != null) {
tmxObject.getProperties().setProperty("requireId", requirement.required_obj.id); tmxObject.getProperties().setProperty("requireId", requirement.required_obj.id);
} else if (requirement.required_obj_id != null) { } else if (requirement.required_obj_id != null) {

View File

@@ -11,7 +11,7 @@ import com.gpl.rpg.atcontentstudio.ui.DefaultIcons;
public class SpawnArea extends MapObject { public class SpawnArea extends MapObject {
public int quantity = 1; public int quantity = 1;
public int respawnSpeed = 10; public int spawnchance = 10;
public boolean active = true; public boolean active = true;
public boolean ignoreAreas = false; public boolean ignoreAreas = false;
public String spawngroup_id; public String spawngroup_id;
@@ -21,8 +21,8 @@ public class SpawnArea extends MapObject {
if (obj.getProperties().getProperty("quantity") != null) { if (obj.getProperties().getProperty("quantity") != null) {
this.quantity = Integer.parseInt(obj.getProperties().getProperty("quantity")); this.quantity = Integer.parseInt(obj.getProperties().getProperty("quantity"));
} }
if (obj.getProperties().getProperty("respawnspeed") != null) { if (obj.getProperties().getProperty("spawnchance") != null) {
this.respawnSpeed = Integer.parseInt(obj.getProperties().getProperty("respawnspeed")); this.spawnchance = Integer.parseInt(obj.getProperties().getProperty("spawnchance"));
} }
if (obj.getProperties().getProperty("active") != null) { if (obj.getProperties().getProperty("active") != null) {
this.active = Boolean.parseBoolean(obj.getProperties().getProperty("active")); this.active = Boolean.parseBoolean(obj.getProperties().getProperty("active"));
@@ -82,8 +82,8 @@ public class SpawnArea extends MapObject {
if (quantity != 1) { if (quantity != 1) {
tmxObject.getProperties().setProperty("quantity", Integer.toString(quantity)); tmxObject.getProperties().setProperty("quantity", Integer.toString(quantity));
} }
if (respawnSpeed != 10) { if (spawnchance != 10) {
tmxObject.getProperties().setProperty("respawnspeed", Integer.toString(respawnSpeed)); tmxObject.getProperties().setProperty("spawnchance", Integer.toString(spawnchance));
} }
if (!this.active) { if (!this.active) {
tmxObject.getProperties().setProperty("active", Boolean.toString(active)); tmxObject.getProperties().setProperty("active", Boolean.toString(active));
@@ -92,4 +92,5 @@ public class SpawnArea extends MapObject {
tmxObject.getProperties().setProperty("ignoreAreas", Boolean.toString(ignoreAreas)); tmxObject.getProperties().setProperty("ignoreAreas", Boolean.toString(ignoreAreas));
} }
} }
} }

View File

@@ -258,7 +258,7 @@ public class TMXMap extends GameDataElement {
if (getDataType() == GameSource.Type.source) { if (getDataType() == GameSource.Type.source) {
writer.writeMap(tmxMap, baos, tmxFile.getAbsolutePath()); writer.writeMap(tmxMap, baos, tmxFile.getAbsolutePath());
} else { } else {
writer.writeMap(tmxMap, baos, ((TMXMapSet)this.parent).mapFolder.getAbsolutePath()+File.separator+"placeholder.tmx"); writer.writeMap(tmxMap, baos, getProject().baseContent.gameMaps.mapFolder.getAbsolutePath()+File.separator+"placeholder.tmx");
} }
} catch (Exception e) { } catch (Exception e) {
Notification.addError("Error while converting map "+getDesc()+" to XML: "+e.getMessage()); Notification.addError("Error while converting map "+getDesc()+" to XML: "+e.getMessage());

View File

@@ -100,7 +100,7 @@ public class TMXMapSet implements ProjectTreeNode {
while(getProject().open) { while(getProject().open) {
try { try {
watchService = FileSystems.getDefault().newWatchService(); watchService = FileSystems.getDefault().newWatchService();
/*WatchKey watchKey = */folderPath.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_CREATE); /*WatchKey watchKey = */folderPath.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY);
WatchKey wk; WatchKey wk;
validService: while(getProject().open) { validService: while(getProject().open) {
wk = watchService.poll(10, TimeUnit.SECONDS); wk = watchService.poll(10, TimeUnit.SECONDS);

View File

@@ -1,12 +1,9 @@
package com.gpl.rpg.atcontentstudio.model.tools.i18n; package com.gpl.rpg.atcontentstudio.model.tools.i18n;
import java.io.File; import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer; import java.io.Writer;
import java.nio.charset.StandardCharsets;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
@@ -20,7 +17,7 @@ public class PoPotWriter {
public static void writePoFile(Map<String, List<String>> stringsResources, Map<String, String> translations, File destination) { public static void writePoFile(Map<String, List<String>> stringsResources, Map<String, String> translations, File destination) {
try { try {
Writer fw = new OutputStreamWriter(new FileOutputStream(destination), StandardCharsets.UTF_8); FileWriter fw = new FileWriter(destination);
if (translations.get("") != null) { if (translations.get("") != null) {
fw.write(translations.get("")); fw.write(translations.get(""));
writeEndOfEntry(fw); writeEndOfEntry(fw);

View File

@@ -26,9 +26,7 @@ public class AboutEditor extends Editor {
private static final long serialVersionUID = 6230549148222457139L; private static final long serialVersionUID = 6230549148222457139L;
public static final String WELCOME_STRING = public static final String WELCOME_STRING =
"<html><head>" + "<html><body>" +
"<meta http-equiv=\\\"Content-Type\\\" content=\\\"text/html; charset=UTF-8\\\" />" +
"</head><body>" +
"<table><tr valign=\"top\">" + "<table><tr valign=\"top\">" +
"<td><img src=\""+ATContentStudio.class.getResource("/com/gpl/rpg/atcontentstudio/img/atcs_border_banner.png")+"\"/></td>" + "<td><img src=\""+ATContentStudio.class.getResource("/com/gpl/rpg/atcontentstudio/img/atcs_border_banner.png")+"\"/></td>" +
"<td><font size=+1>Welcome to "+ATContentStudio.APP_NAME+" "+ATContentStudio.APP_VERSION+"</font><br/>" + "<td><font size=+1>Welcome to "+ATContentStudio.APP_NAME+" "+ATContentStudio.APP_VERSION+"</font><br/>" +
@@ -37,24 +35,23 @@ public class AboutEditor extends Editor {
"<b>Right click on the left area or use the \"File\" menu to create a project.</b><br/>" + "<b>Right click on the left area or use the \"File\" menu to create a project.</b><br/>" +
"<br/>" + "<br/>" +
"Play <a href=\"https://play.google.com/store/apps/details?id=com.gpl.rpg.AndorsTrail\">Andor's Trail</a> for free on your Android device.<br/>" + "Play <a href=\"https://play.google.com/store/apps/details?id=com.gpl.rpg.AndorsTrail\">Andor's Trail</a> for free on your Android device.<br/>" +
"Visit <a href=\"https://andorstrail.com/\">the official forum</a> to give or receive help.<br/>" + "Visit <a href=\"http://andorstrail.com/\">the official forum</a> to give or receive help.<br/>" +
"Open the project's <a href=\"https://github.com/Zukero/andors-trail/\">GitHub project page</a> to check out the game's source code.<br/>" + "Open the project's <a href=\"https://github.com/Zukero/andors-trail/\">GitHub project page</a> to check out the game's source code.<br/>" +
"<br/>" + "<br/>" +
"For content creation help, make sure to use the following resources:<br/>" + "For content creation help, make sure to use the following resources:<br/>" +
"<a href=\"https://andorstrail.com/viewtopic.php?f=6&t=4560\">The contribution guide on the forums</a><br/>" + "<a href=\"http://andorstrail.com/viewtopic.php?f=6&t=4560\">The contribution guide on the forums</a><br/>" +
"<a href=\"https://andorstrail.com/wiki/doku.php?id=andors_trail_wiki:developer_section\">The developer section of the Andor's Trail wiki</a><br/>" + "<a href=\"http://andorstrail.com/wiki/doku.php?id=andors_trail_wiki:developer_section\">The developer section of the Andor's Trail wiki</a><br/>" +
"<a href=\"https://docs.google.com/document/d/1BwWD1tLgPcmA2bwudrVnOc6f2dkPLFCjWdn7tXlIp5g\">The design outline document on Google Drive/Docs</a><br/>" + "<a href=\"https://docs.google.com/document/d/1BwWD1tLgPcmA2bwudrVnOc6f2dkPLFCjWdn7tXlIp5g\">The design outline document on Google Drive/Docs</a><br/>" +
"<br/>" + "<br/>" +
"<font size=+1>Credits:</font><br/>" + "<font size=+1>Credits:</font><br/>" +
"<br/>" + "<br/>" +
"Author: <a href=\"https://andorstrail.com/memberlist.php?mode=viewprofile&u=2875\">Zukero</a><br/>" + "Author: <a href=\"http://andorstrail.com/memberlist.php?mode=viewprofile&u=2875\">Zukero</a><br/>" +
"Licence: <a href=\"http://www.gnu.org/licenses/gpl-3.0.html\">GPL v3</a><br/>" + "Licence: <a href=\"http://www.gnu.org/licenses/gpl-3.0.html\">GPL v3</a><br/>" +
"Sources are included in this package and on <a href=\"https://github.com/Zukero/ATCS\">GitHub</a>.<br/>" + "Sources are included in this package and on <a href=\"https://github.com/Zukero/ATCS\">GitHub</a>.<br/>" +
"<br/>" + "<br/>" +
"Contributors: <br/>" + "Contributors: <br/>" +
"Quentin Delvallet<br/>" + "Quentin Delvallet<br/>" +
"Žižkin<br/>" + "<EFBFBD>i<EFBFBD>kin<br/>" +
"Gonk<br/>" +
"<br/>" + "<br/>" +
"This project uses the following libraries:<br/>" + "This project uses the following libraries:<br/>" +
"<a href=\"http://code.google.com/p/json-simple/\">JSON.simple</a> by Yidong Fang & Chris Nokleberg.<br/>" + "<a href=\"http://code.google.com/p/json-simple/\">JSON.simple</a> by Yidong Fang & Chris Nokleberg.<br/>" +
@@ -82,7 +79,7 @@ public class AboutEditor extends Editor {
"<a href=\"https://jsoup.org/\">jsoup</a> by Jonathan Hedley<br/>" + "<a href=\"https://jsoup.org/\">jsoup</a> by Jonathan Hedley<br/>" +
"License: <a href=\"https://jsoup.org/license\">MIT License</a><br/>" + "License: <a href=\"https://jsoup.org/license\">MIT License</a><br/>" +
"<br/>" + "<br/>" +
"A slightly modified version of <a href=\"https://launchpad.net/po-parser\">General PO Parser</a> by Bal<61>zs T<>th<br/>" + "A slightly modified version of <a href=\"https://launchpad.net/po-parser\">General PO Parser</a> by Bal<61>zs T<>th<br/>" +
"License: <a href=\"http://www.gnu.org/licenses/gpl-3.0.html\">GPL v3</a><br/>" + "License: <a href=\"http://www.gnu.org/licenses/gpl-3.0.html\">GPL v3</a><br/>" +
"<br/>" + "<br/>" +
"A slightly modified version of <a href=\"www.whoischarles.com\">Minify.java</a> by Charles Bihis<br/>" + "A slightly modified version of <a href=\"www.whoischarles.com\">Minify.java</a> by Charles Bihis<br/>" +

View File

@@ -348,138 +348,6 @@ public abstract class Editor extends JPanel implements ProjectElementListener {
return spinner; return spinner;
} }
private static final String percent = "%";
private static final String ratio = "x/y";
public static JComponent addChanceField(JPanel pane, String label, String initialValue, String defaultValue, boolean editable, final FieldUpdateListener listener) {
int defaultChance = 1;
int defaultMaxChance = 100;
if (defaultValue != null) {
if (defaultValue.contains("/")) {
int c = defaultValue.indexOf('/');
try { defaultChance = Integer.parseInt(defaultValue.substring(0, c)); } catch (NumberFormatException nfe) {};
try { defaultMaxChance = Integer.parseInt(defaultValue.substring(c+1)); } catch (NumberFormatException nfe) {};
} else {
try { defaultChance = Integer.parseInt(defaultValue); } catch (NumberFormatException nfe) {};
}
}
boolean currentFormIsRatio = true;
int chance = defaultChance;
int maxChance = defaultMaxChance;
if (initialValue != null) {
if (initialValue.contains("/")) {
int c = initialValue.indexOf('/');
try { chance = Integer.parseInt(initialValue.substring(0, c)); } catch (NumberFormatException nfe) {};
try { maxChance = Integer.parseInt(initialValue.substring(c+1)); } catch (NumberFormatException nfe) {};
} else {
try {
chance = Integer.parseInt(initialValue);
currentFormIsRatio = false;
} catch (NumberFormatException nfe) {};
}
}
final JPanel tfPane = new JPanel();
tfPane.setLayout(new JideBoxLayout(tfPane, JideBoxLayout.LINE_AXIS, 6));
JLabel tfLabel = new JLabel(label);
tfPane.add(tfLabel, JideBoxLayout.FIX);
final JComboBox<String> entryTypeBox = new JComboBox<String>(new String[] {percent, ratio});
if (currentFormIsRatio) {
entryTypeBox.setSelectedItem(ratio);
} else {
entryTypeBox.setSelectedItem(percent);
}
entryTypeBox.setEnabled(editable);
tfPane.add(entryTypeBox, JideBoxLayout.FIX);
/////////////////////////////////////////////////////////////////////////////////////////////////// make sure "chance" is between 1 and 100. If lower than 1 get 1. If higher than 100, get chance/maxChance * 100... Then do the same with defaultChance, in case no value exist.
final SpinnerNumberModel percentModel = new SpinnerNumberModel(initialValue != null ? ((chance > 1 ? chance : 1) < 100 ? chance : (chance * 100 / maxChance)) : ((defaultChance > 1 ? defaultChance : 1) < 100 ? defaultChance : (defaultChance * 100 / defaultMaxChance)) , 1, 100, 1);
final SpinnerNumberModel ratioChanceModel = new SpinnerNumberModel(initialValue != null ? chance : defaultChance, 1, Integer.MAX_VALUE, 1);
final JSpinner chanceSpinner = new JSpinner(currentFormIsRatio ? ratioChanceModel : percentModel);
if (!currentFormIsRatio) ((JSpinner.DefaultEditor)chanceSpinner.getEditor()).getTextField().setHorizontalAlignment(JTextField.LEFT);
chanceSpinner.setEnabled(editable);
((DefaultFormatter)((NumberEditor)chanceSpinner.getEditor()).getTextField().getFormatter()).setCommitsOnValidEdit(true);
tfPane.add(chanceSpinner, JideBoxLayout.FLEXIBLE);
final JLabel ratioLabel = new JLabel("/");
tfPane.add(ratioLabel, JideBoxLayout.FIX);
final JSpinner maxChanceSpinner = new JSpinner(new SpinnerNumberModel(initialValue != null ? maxChance : defaultMaxChance, 1, Integer.MAX_VALUE, 1));
((JSpinner.DefaultEditor)maxChanceSpinner.getEditor()).getTextField().setHorizontalAlignment(JTextField.LEFT);
maxChanceSpinner.setEnabled(editable);
((DefaultFormatter)((NumberEditor)maxChanceSpinner.getEditor()).getTextField().getFormatter()).setCommitsOnValidEdit(true);
tfPane.add(maxChanceSpinner, JideBoxLayout.FLEXIBLE);
if (!currentFormIsRatio) {
ratioLabel.setVisible(false);
maxChanceSpinner.setVisible(false);
tfPane.revalidate();
tfPane.repaint();
}
final JButton nullify = new JButton(new ImageIcon(DefaultIcons.getNullifyIcon()));
tfPane.add(nullify, JideBoxLayout.FIX);
nullify.setEnabled(editable);
pane.add(tfPane, JideBoxLayout.FIX);
entryTypeBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (entryTypeBox.getSelectedItem() == percent) {
int chance = ((Integer)chanceSpinner.getValue());
int maxChance = ((Integer)maxChanceSpinner.getValue());
chance *= 100;
chance /= maxChance;
chance = Math.max(0, Math.min(100, chance));
chanceSpinner.setModel(percentModel);
chanceSpinner.setValue(chance);
((JSpinner.DefaultEditor)chanceSpinner.getEditor()).getTextField().setHorizontalAlignment(JTextField.LEFT);
ratioLabel.setVisible(false);
maxChanceSpinner.setVisible(false);
tfPane.revalidate();
tfPane.repaint();
listener.valueChanged(chanceSpinner, chanceSpinner.getValue().toString());
} else if (entryTypeBox.getSelectedItem() == ratio) {
int chance = ((Integer)chanceSpinner.getValue());
chanceSpinner.setModel(ratioChanceModel);
chanceSpinner.setValue(chance);
maxChanceSpinner.setValue(100);
ratioLabel.setVisible(true);
maxChanceSpinner.setVisible(true);
tfPane.revalidate();
tfPane.repaint();
listener.valueChanged(chanceSpinner, chanceSpinner.getValue().toString() + "/" + maxChanceSpinner.getValue().toString());
}
}
});
chanceSpinner.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
if (entryTypeBox.getSelectedItem() == percent) {
listener.valueChanged(chanceSpinner, chanceSpinner.getValue().toString());
} else if (entryTypeBox.getSelectedItem() == ratio) {
listener.valueChanged(chanceSpinner, chanceSpinner.getValue().toString() + "/" + maxChanceSpinner.getValue().toString());
}
}
});
maxChanceSpinner.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
listener.valueChanged(chanceSpinner, chanceSpinner.getValue().toString() + "/" + maxChanceSpinner.getValue().toString());
}
});
nullify.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
chanceSpinner.setValue(1);
listener.valueChanged(chanceSpinner, null);
}
});
return chanceSpinner;
}
// public static JSpinner addDoubleField(JPanel pane, String label, Double initialValue, boolean editable) { // public static JSpinner addDoubleField(JPanel pane, String label, Double initialValue, boolean editable) {
// return addDoubleField(pane, label, initialValue, editable, nullListener); // return addDoubleField(pane, label, initialValue, editable, nullListener);
// } // }

View File

@@ -123,7 +123,7 @@ public class DialogueEditor extends JSONElementEditor {
private MyComboBox requirementObj; private MyComboBox requirementObj;
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
private JComboBox requirementSkill; private JComboBox requirementSkill;
private JComponent requirementObjId; private JTextField requirementObjId;
private JComponent requirementValue; private JComponent requirementValue;
private BooleanBasedCheckBox requirementNegated; private BooleanBasedCheckBox requirementNegated;
@@ -722,11 +722,6 @@ public class DialogueEditor extends JSONElementEditor {
requirementObjId = null; requirementObjId = null;
requirementValue = addIntegerField(pane, "Quantity: ", requirement.required_value, false, writable, listener); requirementValue = addIntegerField(pane, "Quantity: ", requirement.required_value, false, writable, listener);
break; break;
case random:
requirementObj = null;
requirementObjId = addChanceField(pane, "Chance: ", requirement.required_obj_id, "50/100", writable, listener);
requirementValue = null;
break;
case hasActorCondition: case hasActorCondition:
requirementObj = addActorConditionBox(pane, project, "Actor Condition: ", (ActorCondition) requirement.required_obj, writable, listener); requirementObj = addActorConditionBox(pane, project, "Actor Condition: ", (ActorCondition) requirement.required_obj, writable, listener);
requirementObjId = null; requirementObjId = null;
@@ -735,8 +730,6 @@ public class DialogueEditor extends JSONElementEditor {
case inventoryKeep: case inventoryKeep:
case inventoryRemove: case inventoryRemove:
case usedItem: case usedItem:
case wear:
case wearRemove:
requirementObj = addItemBox(pane, project, "Item: ", (Item) requirement.required_obj, writable, listener); requirementObj = addItemBox(pane, project, "Item: ", (Item) requirement.required_obj, writable, listener);
requirementObjId = null; requirementObjId = null;
requirementValue = addIntegerField(pane, "Quantity: ", requirement.required_value, false, writable, listener); requirementValue = addIntegerField(pane, "Quantity: ", requirement.required_value, false, writable, listener);
@@ -772,10 +765,10 @@ public class DialogueEditor extends JSONElementEditor {
requirementObjId = addTextField(pane, "Faction ID:", requirement.required_obj_id, writable, listener); requirementObjId = addTextField(pane, "Faction ID:", requirement.required_obj_id, writable, listener);
requirementValue = addIntegerField(pane, "Minimum score: ", requirement.required_value, true, writable, listener); requirementValue = addIntegerField(pane, "Minimum score: ", requirement.required_value, true, writable, listener);
break; break;
case factionScoreEquals: case wear:
requirementObj = null; requirementObj = addItemBox(pane, project, "Item: ", (Item) requirement.required_obj, writable, listener);
requirementObjId = addTextField(pane, "Faction ID:", requirement.required_obj_id, writable, listener); requirementObjId = null;
requirementValue = addIntegerField(pane, "Exact value: ", requirement.required_value, true, writable, listener); requirementValue = null;
break; break;
} }
requirementNegated = addBooleanBasedCheckBox(pane, "Negate this requirement.", requirement.negated, writable, listener); requirementNegated = addBooleanBasedCheckBox(pane, "Negate this requirement.", requirement.negated, writable, listener);
@@ -1176,7 +1169,7 @@ public class DialogueEditor extends JSONElementEditor {
label.setIcon(new ImageIcon(DefaultIcons.getBonemealIcon())); label.setIcon(new ImageIcon(DefaultIcons.getBonemealIcon()));
} else if (req.type == Requirement.RequirementType.timerElapsed) { } else if (req.type == Requirement.RequirementType.timerElapsed) {
label.setIcon(new ImageIcon(DefaultIcons.getTimerIcon())); label.setIcon(new ImageIcon(DefaultIcons.getTimerIcon()));
} else if (req.type == Requirement.RequirementType.factionScore || req.type == Requirement.RequirementType.factionScoreEquals) { } else if (req.type == Requirement.RequirementType.factionScore) {
label.setIcon(new ImageIcon(DefaultIcons.getAlignmentIcon())); label.setIcon(new ImageIcon(DefaultIcons.getAlignmentIcon()));
} }
if (req.type == null) { if (req.type == null) {

View File

@@ -50,7 +50,7 @@ public class DroplistEditor extends JSONElementEditor {
private DroppedItemsListModel droppedItemsListModel; private DroppedItemsListModel droppedItemsListModel;
private JSpinner qtyMinField; private JSpinner qtyMinField;
private JSpinner qtyMaxField; private JSpinner qtyMaxField;
private JComponent chanceField; private JSpinner chanceField;
public DroplistEditor(Droplist droplist) { public DroplistEditor(Droplist droplist) {
super(droplist, droplist.getDesc(), droplist.getIcon()); super(droplist, droplist.getDesc(), droplist.getIcon());
@@ -142,7 +142,7 @@ public class DroplistEditor extends JSONElementEditor {
itemCombo = addItemBox(pane, proj, "Item: ", di.item, writable, listener); itemCombo = addItemBox(pane, proj, "Item: ", di.item, writable, listener);
qtyMinField = addIntegerField(pane, "Quantity min: ", di.quantity_min, false, writable, listener); qtyMinField = addIntegerField(pane, "Quantity min: ", di.quantity_min, false, writable, listener);
qtyMaxField = addIntegerField(pane, "Quantity max: ", di.quantity_max, false, writable, listener); qtyMaxField = addIntegerField(pane, "Quantity max: ", di.quantity_max, false, writable, listener);
chanceField = addChanceField(pane, "Chance: ", di.chance, "100", writable, listener);//addDoubleField(pane, "Chance: ", di.chance, writable, listener); chanceField = addDoubleField(pane, "Chance: ", di.chance, writable, listener);
} }
pane.revalidate(); pane.revalidate();
pane.repaint(); pane.repaint();
@@ -221,9 +221,9 @@ public class DroplistEditor extends JSONElementEditor {
Droplist.DroppedItem di = (Droplist.DroppedItem)value; Droplist.DroppedItem di = (Droplist.DroppedItem)value;
if (di.item != null) { if (di.item != null) {
label.setIcon(new ImageIcon(di.item.getIcon())); label.setIcon(new ImageIcon(di.item.getIcon()));
label.setText(di.chance+(di.chance != null && di.chance.contains("/") ? "" : "%")+" to get "+di.quantity_min+"-"+di.quantity_max+" "+di.item.getDesc()); label.setText(di.chance+"% to get "+di.quantity_min+"-"+di.quantity_max+" "+di.item.getDesc());
} else if (!isNull(di)) { } else if (!isNull(di)) {
label.setText(di.chance+(di.chance != null && di.chance.contains("/") ? "" : "%")+" to get "+di.quantity_min+"-"+di.quantity_max+" "+di.item_id); label.setText(di.chance+"% to get "+di.quantity_min+"-"+di.quantity_max+" "+di.item_id);
} else { } else {
label.setText("New, undefined, dropped item."); label.setText("New, undefined, dropped item.");
} }
@@ -283,7 +283,7 @@ public class DroplistEditor extends JSONElementEditor {
selectedItem.quantity_max = (Integer) value; selectedItem.quantity_max = (Integer) value;
droppedItemsListModel.itemChanged(selectedItem); droppedItemsListModel.itemChanged(selectedItem);
} else if (source == chanceField) { } else if (source == chanceField) {
selectedItem.chance = (String) value; selectedItem.chance = (Double) value;
droppedItemsListModel.itemChanged(selectedItem); droppedItemsListModel.itemChanged(selectedItem);
} }

View File

@@ -82,7 +82,6 @@ public class ItemEditor extends JSONElementEditor {
private JSpinner equipBoostBC; private JSpinner equipBoostBC;
private JSpinner equipBoostCS; private JSpinner equipBoostCS;
private JSpinner equipSetCM; private JSpinner equipSetCM;
private JSpinner equipSetDM;
private JSpinner equipBoostDR; private JSpinner equipBoostDR;
private JSpinner equipIncMoveCost; private JSpinner equipIncMoveCost;
private JSpinner equipIncUseCost; private JSpinner equipIncUseCost;
@@ -218,7 +217,6 @@ public class ItemEditor extends JSONElementEditor {
} }
equipDmgMin = addIntegerField(equipEffectPane, "Attack Damage min: ", equipEffect.damage_boost_min, true, item.writable, listener); equipDmgMin = addIntegerField(equipEffectPane, "Attack Damage min: ", equipEffect.damage_boost_min, true, item.writable, listener);
equipDmgMax = addIntegerField(equipEffectPane, "Attack Damage max: ", equipEffect.damage_boost_max, true, item.writable, listener); equipDmgMax = addIntegerField(equipEffectPane, "Attack Damage max: ", equipEffect.damage_boost_max, true, item.writable, listener);
equipSetDM = addIntegerField(equipEffectPane, "Damage modifier %: ", equipEffect.damage_modifier, 100, false, item.writable, listener);
equipBoostHP = addIntegerField(equipEffectPane, "Boost max HP: ", equipEffect.max_hp_boost, true, item.writable, listener); equipBoostHP = addIntegerField(equipEffectPane, "Boost max HP: ", equipEffect.max_hp_boost, true, item.writable, listener);
equipBoostAP = addIntegerField(equipEffectPane, "Boost max AP: ", equipEffect.max_ap_boost, true, item.writable, listener); equipBoostAP = addIntegerField(equipEffectPane, "Boost max AP: ", equipEffect.max_ap_boost, true, item.writable, listener);
equipBoostAC = addIntegerField(equipEffectPane, "Boost attack chance: ", equipEffect.increase_attack_chance, true, item.writable, listener); equipBoostAC = addIntegerField(equipEffectPane, "Boost attack chance: ", equipEffect.increase_attack_chance, true, item.writable, listener);
@@ -1433,7 +1431,6 @@ public class ItemEditor extends JSONElementEditor {
public static boolean isNull(Item.EquipEffect effect) { public static boolean isNull(Item.EquipEffect effect) {
if (effect.conditions != null) return false; if (effect.conditions != null) return false;
if (effect.critical_multiplier != null) return false; if (effect.critical_multiplier != null) return false;
if (effect.damage_modifier != null) return false;
if (effect.damage_boost_max != null) return false; if (effect.damage_boost_max != null) return false;
if (effect.damage_boost_min != null) return false; if (effect.damage_boost_min != null) return false;
if (effect.increase_attack_chance != null) return false; if (effect.increase_attack_chance != null) return false;
@@ -1622,10 +1619,6 @@ public class ItemEditor extends JSONElementEditor {
equipEffect.critical_multiplier = (Double) value; equipEffect.critical_multiplier = (Double) value;
updatePrice = true; updatePrice = true;
updateEquip = true; updateEquip = true;
} else if (source == equipSetDM) {
equipEffect.damage_modifier = (Integer) value;
updatePrice = true;
updateEquip = true;
} else if (source == equipBoostDR) { } else if (source == equipBoostDR) {
equipEffect.increase_damage_resistance = (Integer) value; equipEffect.increase_damage_resistance = (Integer) value;
updatePrice = true; updatePrice = true;

File diff suppressed because it is too large Load Diff

View File

@@ -521,6 +521,16 @@ public class WorldMapView extends JComponent implements Scrollable {
} }
worldmap.getProject().getMap(id).addBacklink(worldmap); worldmap.getProject().getMap(id).addBacklink(worldmap);
} }
List<String> toRemove = new ArrayList<String>();
for (String s : worldmap.labels.keySet()) {
if (!mapLocations.containsKey(s)) {
toRemove.add(s);
}
}
for (String s : toRemove) {
worldmap.labels.remove(s);
}
} }
} }

View File

@@ -37,7 +37,7 @@ public class ItemsTableView extends ElementTableView {
@Override @Override
public int getColumnCount() { public int getColumnCount() {
return 43; return 33;
} }
@Override @Override
@@ -62,30 +62,20 @@ public class ItemsTableView extends ElementTableView {
case 16: return "On kill - AP min"; case 16: return "On kill - AP min";
case 17: return "On kill - AP max"; case 17: return "On kill - AP max";
case 18: return "On kill - # conditions"; case 18: return "On kill - # conditions";
case 19: return "On hit recv - HP min"; case 19: return "AD min";
case 20: return "On hit recv - HP max"; case 20: return "AD max";
case 21: return "On hit recv - AP min"; case 21: return "Max HP";
case 22: return "On hit recv - AP max"; case 22: return "Max AP";
case 23: return "On hit recv - # conditions"; case 23: return "Attack cost";
case 24: return "On hit recv - Tgt HP min"; case 24: return "AC";
case 25: return "On hit recv - Tgt HP max"; case 25: return "BC";
case 26: return "On hit recv - Tgt AP min"; case 26: return "DR";
case 27: return "On hit recv - Tgt AP max"; case 27: return "CS";
case 28: return "AD min"; case 28: return "CM";
case 29: return "AD max"; case 29: return "Move cost";
case 30: return "Damage modifier %"; case 30: return "Use cost";
case 31: return "Max HP"; case 31: return "Reequip cost";
case 32: return "Max AP"; case 32: return "# conditions";
case 33: return "Attack cost";
case 34: return "AC";
case 35: return "BC";
case 36: return "DR";
case 37: return "CS";
case 38: return "CM";
case 39: return "Move cost";
case 40: return "Use cost";
case 41: return "Reequip cost";
case 42: return "# conditions";
} }
return null; return null;
} }
@@ -113,30 +103,20 @@ public class ItemsTableView extends ElementTableView {
case 16: return Integer.class;//"On kill - AP min"; case 16: return Integer.class;//"On kill - AP min";
case 17: return Integer.class;//"On kill - AP max"; case 17: return Integer.class;//"On kill - AP max";
case 18: return Integer.class;//"On kill - # conditions"; case 18: return Integer.class;//"On kill - # conditions";
case 19: return Integer.class;//"On hit recv - HP min"; case 19: return Integer.class;//"AD min";
case 20: return Integer.class;//"On hit recv - HP max"; case 20: return Integer.class;//"AD max";
case 21: return Integer.class;//"On hit recv - AP min"; case 21: return Integer.class;//"Max HP";
case 22: return Integer.class;//"On hit recv - AP max"; case 22: return Integer.class;//"Max AP";
case 23: return Integer.class;//"On hit recv - # conditions"; case 23: return Integer.class;//"Attack cost";
case 24: return Integer.class;//"On hit recv - Tgt HP min"; case 24: return Integer.class;//"AC";
case 25: return Integer.class;//"On hit recv - Tgt HP max"; case 25: return Integer.class;//"BC";
case 26: return Integer.class;//"On hit recv - Tgt AP min"; case 26: return Integer.class;//"DR";
case 27: return Integer.class;//"On hit recv - Tgt AP max"; case 27: return Integer.class;//"CS";
case 28: return Integer.class;//"AD min"; case 28: return Double.class;//"CM";
case 29: return Integer.class;//"AD max"; case 29: return Integer.class;//"Move cost";
case 30: return Integer.class;//"Damage modifier"; case 30: return Integer.class;//"Use cost";
case 31: return Integer.class;//"Max HP"; case 31: return Integer.class;//"Reequip cost";
case 32: return Integer.class;//"Max AP"; case 32: return Integer.class;//"# conditions";
case 33: return Integer.class;//"Attack cost";
case 34: return Integer.class;//"AC";
case 35: return Integer.class;//"BC";
case 36: return Integer.class;//"DR";
case 37: return Integer.class;//"CS";
case 38: return Double.class;//"CM";
case 39: return Integer.class;//"Move cost";
case 40: return Integer.class;//"Use cost";
case 41: return Integer.class;//"Reequip cost";
case 42: return Integer.class;//"# conditions";
} }
return null; return null;
} }
@@ -197,30 +177,20 @@ public class ItemsTableView extends ElementTableView {
case 16: return (!canUse && item.kill_effect != null) ? item.kill_effect.ap_boost_min : null;//"On kill - AP min"; case 16: return (!canUse && item.kill_effect != null) ? item.kill_effect.ap_boost_min : null;//"On kill - AP min";
case 17: return (!canUse && item.kill_effect != null) ? item.kill_effect.ap_boost_max : null;//"On kill - AP max"; case 17: return (!canUse && item.kill_effect != null) ? item.kill_effect.ap_boost_max : null;//"On kill - AP max";
case 18: return (!canUse && item.kill_effect != null && item.kill_effect.conditions_source != null) ? item.kill_effect.conditions_source.size() : null;//"On kill - # conditions"; case 18: return (!canUse && item.kill_effect != null && item.kill_effect.conditions_source != null) ? item.kill_effect.conditions_source.size() : null;//"On kill - # conditions";
case 19: return (!canUse && item.hit_received_effect != null) ? item.hit_received_effect.hp_boost_min : null;//"On hit recv - HP min"; case 19: return (canEquip && item.equip_effect != null) ? item.equip_effect.damage_boost_min : null;//"AD min";
case 20: return (!canUse && item.hit_received_effect != null) ? item.hit_received_effect.hp_boost_max : null;//"On hit recv - HP max"; case 20: return (canEquip && item.equip_effect != null) ? item.equip_effect.damage_boost_max : null;//"AD max";
case 21: return (!canUse && item.hit_received_effect != null) ? item.hit_received_effect.ap_boost_min : null;//"On hit recv - AP min"; case 21: return (canEquip && item.equip_effect != null) ? item.equip_effect.max_hp_boost : null;//"Max HP";
case 22: return (!canUse && item.hit_received_effect != null) ? item.hit_received_effect.ap_boost_max : null;//"On hit recv - AP max"; case 22: return (canEquip && item.equip_effect != null) ? item.equip_effect.max_ap_boost : null;//"Max AP";
case 23: return (!canUse && item.hit_received_effect != null && item.hit_received_effect.conditions_source != null) ? item.hit_received_effect.conditions_source.size() : null;//"On hit recv - # conditions"; case 23: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_attack_cost : null;//"Attack cost";
case 24: return (!canUse && item.hit_received_effect != null) ? item.hit_received_effect.hp_boost_min : null;//"On hit recv - Tgt HP min"; case 24: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_attack_chance : null;//"AC";
case 25: return (!canUse && item.hit_received_effect != null) ? item.hit_received_effect.hp_boost_max : null;//"On hit recv - Tgt HP max"; case 25: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_block_chance : null;//"BC";
case 26: return (!canUse && item.hit_received_effect != null) ? item.hit_received_effect.ap_boost_min : null;//"On hit recv - Tgt AP min"; case 26: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_damage_resistance : null;//"DR";
case 27: return (!canUse && item.hit_received_effect != null) ? item.hit_received_effect.ap_boost_max : null;//"On hit recv - Tgt AP max"; case 27: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_critical_skill : null;//"CS";
case 28: return (canEquip && item.equip_effect != null) ? item.equip_effect.damage_boost_min : null;//"AD min"; case 28: return (canEquip && item.equip_effect != null) ? item.equip_effect.critical_multiplier : null;//"CM";
case 29: return (canEquip && item.equip_effect != null) ? item.equip_effect.damage_boost_max : null;//"AD max"; case 29: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_move_cost : null;//"Move cost";
case 30: return (canEquip && item.equip_effect != null) ? item.equip_effect.damage_modifier : null;//"Damage modifier"; case 30: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_use_item_cost : null;//"Use cost";
case 31: return (canEquip && item.equip_effect != null) ? item.equip_effect.max_hp_boost : null;//"Max HP"; case 31: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_reequip_cost : null;//"Reequip cost";
case 32: return (canEquip && item.equip_effect != null) ? item.equip_effect.max_ap_boost : null;//"Max AP"; case 32: return (canEquip && item.equip_effect != null && item.equip_effect.conditions != null) ? item.equip_effect.conditions.size() : null;//"# conditions";
case 33: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_attack_cost : null;//"Attack cost";
case 34: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_attack_chance : null;//"AC";
case 35: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_block_chance : null;//"BC";
case 36: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_damage_resistance : null;//"DR";
case 37: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_critical_skill : null;//"CS";
case 38: return (canEquip && item.equip_effect != null) ? item.equip_effect.critical_multiplier : null;//"CM";
case 39: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_move_cost : null;//"Move cost";
case 40: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_use_item_cost : null;//"Use cost";
case 41: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_reequip_cost : null;//"Reequip cost";
case 42: return (canEquip && item.equip_effect != null && item.equip_effect.conditions != null) ? item.equip_effect.conditions.size() : null;//"# conditions";
} }
return null; return null;
} }

View File

@@ -12,8 +12,6 @@ import java.io.BufferedReader;
import java.io.File; import java.io.File;
import java.io.FileReader; import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.Vector; import java.util.Vector;
public class POParser public class POParser
@@ -62,9 +60,11 @@ public class POParser
POFile result = null; POFile result = null;
try try
{ {
BufferedReader br = Files.newBufferedReader(file.toPath(), StandardCharsets.UTF_8); FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
result = parse(br); result = parse(br);
br.close(); br.close();
fr.close();
} }
catch (java.io.FileNotFoundException e) catch (java.io.FileNotFoundException e)
{ {