Merged all changes from my fork. They are needed to work on AT v0.7.10

This commit is contained in:
Gonk
2020-05-01 20:30:17 +02:00
11 changed files with 176 additions and 72 deletions

View File

@@ -47,6 +47,9 @@ import java.util.Vector;
import java.util.zip.DeflaterOutputStream;
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.Map;
import tiled.core.MapLayer;
@@ -238,7 +241,15 @@ public class TMXMapWriter
} else {
w.startElement("tileset");
w.writeAttribute("firstgid", getFirstGidForTileset(set));
if (set.sheet != null && set.sheet.parent.getDataType() == Type.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) {
w.writeAttribute("basedir", set.getBaseDir());
}
@@ -279,7 +290,15 @@ public class TMXMapWriter
if (tileBitmapFile != null) {
w.startElement("image");
if (set.sheet != null && set.sheet.parent.getDataType() == Type.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, tileBitmapFile));
}
if (set.sheetDimensions != null) {
w.writeAttribute("width", set.sheetDimensions.width);
w.writeAttribute("height", set.sheetDimensions.height);

View File

@@ -11,6 +11,10 @@ import java.io.IOException;
import java.io.Serializable;
import java.io.StringReader;
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.Collections;
import java.util.Enumeration;
@@ -74,6 +78,8 @@ import com.gpl.rpg.atcontentstudio.utils.FileUtils;
public class Project implements ProjectTreeNode, Serializable {
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.
public static final String SETTINGS_FILE = ".project";
@@ -1079,10 +1085,16 @@ public class Project implements ProjectTreeNode, Serializable {
public void run() {
Notification.addInfo("Exporting project \""+name+"\" as "+target.getAbsolutePath());
File tmpDir = exportProjectToTmpDir();
File tmpDir;
try {
tmpDir = exportProjectToTmpDir();
FileUtils.writeToZip(tmpDir, target);
FileUtils.deleteDir(tmpDir);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Notification.addSuccess("Project \""+name+"\" exported as "+target.getAbsolutePath());
}
@@ -1096,10 +1108,16 @@ public class Project implements ProjectTreeNode, Serializable {
public void run() {
Notification.addInfo("Exporting project \""+name+"\" into "+target.getAbsolutePath());
File tmpDir = exportProjectToTmpDir();
File tmpDir;
try {
tmpDir = exportProjectToTmpDir();
FileUtils.copyOver(tmpDir, target);
FileUtils.deleteDir(tmpDir);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Notification.addSuccess("Project \""+name+"\" exported into "+target.getAbsolutePath());
}
@@ -1107,7 +1125,7 @@ public class Project implements ProjectTreeNode, Serializable {
});
}
public File exportProjectToTmpDir() {
public File exportProjectToTmpDir() throws IOException {
File tmpDir = new File(baseFolder, "tmp");
FileUtils.deleteDir(tmpDir);
tmpDir.mkdir();
@@ -1139,12 +1157,12 @@ public class Project implements ProjectTreeNode, Serializable {
writtenFiles = new LinkedList<String>();
for (File createdMapFile : createdContent.gameMaps.mapFolder.listFiles()) {
if (createdMapFile.getName().equalsIgnoreCase("worldmap.xml")) continue;
FileUtils.copyFile(createdMapFile, new File(tmpMapDir, createdMapFile.getName()));
copyTmxConverted(createdMapFile.toPath(), Paths.get(tmpMapDir.getAbsolutePath(), createdMapFile.getName()));
writtenFiles.add(createdMapFile.getName());
}
for (File alteredMapFile : alteredContent.gameMaps.mapFolder.listFiles()) {
if (alteredMapFile.getName().equalsIgnoreCase("worldmap.xml")) continue;
FileUtils.copyFile(alteredMapFile, new File(tmpMapDir, alteredMapFile.getName()));
copyTmxConverted(alteredMapFile.toPath(), Paths.get(tmpMapDir.getAbsolutePath(), alteredMapFile.getName()));
writtenFiles.add(alteredMapFile.getName());
}
writtenFilesPerDataType.put(TMXMap.class, writtenFiles);
@@ -1177,6 +1195,16 @@ public class Project implements ProjectTreeNode, Serializable {
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")
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>();

View File

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

View File

@@ -26,10 +26,13 @@ public class Requirement extends JSONElement {
countedItemTypes.add(RequirementType.inventoryRemove);
countedItemTypes.add(RequirementType.inventoryKeep);
countedItemTypes.add(RequirementType.usedItem);
countedItemTypes.add(RequirementType.wear);
countedItemTypes.add(RequirementType.wearRemove);
COMPATIBLE_TYPES.put(RequirementType.inventoryRemove, countedItemTypes);
COMPATIBLE_TYPES.put(RequirementType.inventoryKeep, countedItemTypes);
COMPATIBLE_TYPES.put(RequirementType.usedItem, countedItemTypes);
COMPATIBLE_TYPES.put(RequirementType.wear, countedItemTypes);
COMPATIBLE_TYPES.put(RequirementType.wearRemove, countedItemTypes);
}
//Available from parsed state
@@ -55,7 +58,9 @@ public class Requirement extends JSONElement {
consumedBonemeals,
hasActorCondition,
factionScore,
random
random,
factionScoreEquals,
wearRemove
}
public enum SkillID {
@@ -91,6 +96,7 @@ public class Requirement extends JSONElement {
,weaponProficiencyAxe
,weaponProficiencyBlunt
,weaponProficiencyUnarmed
,weaponProficiencyPole
,armorProficiencyShield
,armorProficiencyUnarmored
,armorProficiencyLight
@@ -166,6 +172,7 @@ public class Requirement extends JSONElement {
case inventoryRemove:
case usedItem:
case wear:
case wearRemove:
this.required_obj = proj.getItem(required_obj_id);
break;
case killedMonster:
@@ -186,6 +193,7 @@ public class Requirement extends JSONElement {
case spentGold:
case timerElapsed:
case factionScore:
case factionScoreEquals:
case random:
break;
}

View File

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

View File

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

View File

@@ -735,6 +735,8 @@ public class DialogueEditor extends JSONElementEditor {
case inventoryKeep:
case inventoryRemove:
case usedItem:
case wear:
case wearRemove:
requirementObj = addItemBox(pane, project, "Item: ", (Item) requirement.required_obj, writable, listener);
requirementObjId = null;
requirementValue = addIntegerField(pane, "Quantity: ", requirement.required_value, false, writable, listener);
@@ -770,10 +772,10 @@ public class DialogueEditor extends JSONElementEditor {
requirementObjId = addTextField(pane, "Faction ID:", requirement.required_obj_id, writable, listener);
requirementValue = addIntegerField(pane, "Minimum score: ", requirement.required_value, true, writable, listener);
break;
case wear:
requirementObj = addItemBox(pane, project, "Item: ", (Item) requirement.required_obj, writable, listener);
requirementObjId = null;
requirementValue = null;
case factionScoreEquals:
requirementObj = null;
requirementObjId = addTextField(pane, "Faction ID:", requirement.required_obj_id, writable, listener);
requirementValue = addIntegerField(pane, "Exact value: ", requirement.required_value, true, writable, listener);
break;
}
requirementNegated = addBooleanBasedCheckBox(pane, "Negate this requirement.", requirement.negated, writable, listener);
@@ -1174,7 +1176,7 @@ public class DialogueEditor extends JSONElementEditor {
label.setIcon(new ImageIcon(DefaultIcons.getBonemealIcon()));
} else if (req.type == Requirement.RequirementType.timerElapsed) {
label.setIcon(new ImageIcon(DefaultIcons.getTimerIcon()));
} else if (req.type == Requirement.RequirementType.factionScore) {
} else if (req.type == Requirement.RequirementType.factionScore || req.type == Requirement.RequirementType.factionScoreEquals) {
label.setIcon(new ImageIcon(DefaultIcons.getAlignmentIcon()));
}
if (req.type == null) {

View File

@@ -82,6 +82,7 @@ public class ItemEditor extends JSONElementEditor {
private JSpinner equipBoostBC;
private JSpinner equipBoostCS;
private JSpinner equipSetCM;
private JSpinner equipSetDM;
private JSpinner equipBoostDR;
private JSpinner equipIncMoveCost;
private JSpinner equipIncUseCost;
@@ -217,6 +218,7 @@ public class ItemEditor extends JSONElementEditor {
}
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);
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);
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);
@@ -1431,6 +1433,7 @@ public class ItemEditor extends JSONElementEditor {
public static boolean isNull(Item.EquipEffect effect) {
if (effect.conditions != 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_min != null) return false;
if (effect.increase_attack_chance != null) return false;
@@ -1619,6 +1622,10 @@ public class ItemEditor extends JSONElementEditor {
equipEffect.critical_multiplier = (Double) value;
updatePrice = true;
updateEquip = true;
} else if (source == equipSetDM) {
equipEffect.damage_modifier = (Integer) value;
updatePrice = true;
updateEquip = true;
} else if (source == equipBoostDR) {
equipEffect.increase_damage_resistance = (Integer) value;
updatePrice = true;

View File

@@ -688,6 +688,8 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe
case inventoryKeep:
case inventoryRemove:
case usedItem:
case wear:
case wearRemove:
requirementObj = addItemBox(pane, project, "Item: ", (Item) requirement.required_obj, writable, listener);
requirementObjId = null;
requirementValue = addIntegerField(pane, "Quantity: ", requirement.required_value, false, writable, listener);
@@ -722,10 +724,10 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe
requirementObjId = addTextField(pane, "Faction ID:", requirement.required_obj_id, writable, listener);
requirementValue = addIntegerField(pane, "Minimum score: ", requirement.required_value, true, writable, listener);
break;
case wear:
requirementObj = addItemBox(pane, project, "Item: ", (Item) requirement.required_obj, writable, listener);
requirementObjId = null;
requirementValue = null;
case factionScoreEquals:
requirementObj = null;
requirementObjId = addTextField(pane, "Faction ID:", requirement.required_obj_id, writable, listener);
requirementValue = addIntegerField(pane, "Exact value: ", requirement.required_value, true, writable, listener);
break;
}
}

View File

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

View File

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