Move MapleEmptyItemWzChecker to main module

This commit is contained in:
P0nk
2021-07-10 22:10:21 +02:00
parent 08d2b40cc4
commit e6fef246cb
4 changed files with 147 additions and 335 deletions

View File

@@ -21,7 +21,6 @@ import java.util.*;
* Estimated parse time: 1 minute * Estimated parse time: 1 minute
*/ */
public class CashCosmeticsChecker { public class CashCosmeticsChecker {
private static final String HANDBOOK_PATH = "handbook";
private static final String INPUT_DIRECTORY_PATH = ToolConstants.getInputFile("care").getPath(); private static final String INPUT_DIRECTORY_PATH = ToolConstants.getInputFile("care").getPath();
private static final File OUTPUT_FILE = ToolConstants.getOutputFile("cash_cosmetics_result.txt"); private static final File OUTPUT_FILE = ToolConstants.getOutputFile("cash_cosmetics_result.txt");
private static final boolean IGNORE_CURRENT_SCRIPT_COSMETICS = false; // Toggle to preference private static final boolean IGNORE_CURRENT_SCRIPT_COSMETICS = false; // Toggle to preference
@@ -481,7 +480,7 @@ public class CashCosmeticsChecker {
} }
private static String getHandbookFileName(String fileName) { private static String getHandbookFileName(String fileName) {
return HANDBOOK_PATH + fileName; return ToolConstants.HANDBOOK_PATH + fileName;
} }
private static List<Integer> fetchExpectedCosmetics(String[] cosmeticList, boolean gender) { private static List<Integer> fetchExpectedCosmetics(String[] cosmeticList, boolean gender) {

View File

@@ -1,72 +1,38 @@
/* package tools.mapletools;
This file is part of the HeavenMS MapleStory Server
Copyleft (L) 2016 - 2019 RonanLana
This program is free software: you can redistribute it and/or modify import provider.wz.WZFiles;
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation version 3 as published by
the Free Software Foundation. You may not use, modify or distribute
this program under any other version of the GNU Affero General Public
License.
This program is distributed in the hope that it will be useful, import java.io.*;
but WITHOUT ANY WARRANTY; without even the implied warranty of import java.nio.charset.StandardCharsets;
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the import java.util.*;
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package mapleemptyitemwzchecker;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Stack;
/** /**
*
* @author RonanLana * @author RonanLana
* * <p>
This application has two objectives: it reports in a detailed file all itemids which is * This application has two objectives: it reports in a detailed file all itemids which is
currently missing either a name entry in the String.wz or an item entry in the Item.wz; * currently missing either a name entry in the String.wz or an item entry in the Item.wz;
And it removes from the String.wz XMLs all entries which misses properties on Item.wz. * And it removes from the String.wz XMLs all entries which misses properties on Item.wz.
*/ */
public class MapleEmptyItemWzChecker { public class EmptyItemWzChecker {
private static final File OUTPUT_FILE = ToolConstants.getOutputFile("empty_item_wz_report.txt");
static String newFile = "lib/Report.txt"; private static final String OUTPUT_PATH = ToolConstants.OUTPUT_DIRECTORY.getPath();
static String outputWzPath = "lib"; private static final int INITIAL_STRING_LENGTH = 50;
static PrintWriter printWriter = null; private static final int ITEM_FILE_NAME_SIZE = 13;
static InputStreamReader fileReader = null;
static BufferedReader bufferedReader = null; private static final Stack<String> currentPath = new Stack<>();
private static final Map<Integer, String> stringWzItems = new HashMap<>();
static String wzPath = "../../wz"; private static final Map<Integer, String> contentWzItems = new HashMap<>();
static String handbookPath = "../../handbook"; private static final Set<Integer> handbookItems = new HashSet<>();
static int initialStringLength = 50;
static int itemFileNameSize = 13; private static PrintWriter printWriter = null;
private static InputStreamReader fileReader = null;
static byte status = 0; private static BufferedReader bufferedReader = null;
static int currentItemid = 0; private static byte status = 0;
static int currentDepth = 0; private static int currentItemid = 0;
static Stack<String> currentPath = new Stack<>(); private static int currentDepth = 0;
static String currentFile; private static String currentFile;
private static Set<Integer> nonPropItems;
static Map<Integer, String> stringWzItems = new HashMap<>();
static Map<Integer, String> contentWzItems = new HashMap<>();
static Set<Integer> handbookItems = new HashSet<>();
static Set<Integer> nonPropItems;
private static String getName(String token) { private static String getName(String token) {
int i, j; int i, j;
char[] dest; char[] dest;
@@ -76,35 +42,33 @@ public class MapleEmptyItemWzChecker {
i = token.indexOf("\"", i) + 1; //lower bound of the string i = token.indexOf("\"", i) + 1; //lower bound of the string
j = token.indexOf("\"", i); //upper bound j = token.indexOf("\"", i); //upper bound
dest = new char[initialStringLength]; dest = new char[INITIAL_STRING_LENGTH];
token.getChars(i, j, dest, 0); token.getChars(i, j, dest, 0);
d = new String(dest); d = new String(dest);
return(d.trim()); return (d.trim());
} }
private static void forwardCursor(int st) { private static void forwardCursor(int st) {
String line = null; String line = null;
try { try {
while(status >= st && (line = bufferedReader.readLine()) != null) { while (status >= st && (line = bufferedReader.readLine()) != null) {
simpleToken(line); simpleToken(line);
} }
} } catch (Exception e) {
catch(Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
private static void simpleToken(String token) { private static void simpleToken(String token) {
if(token.contains("/imgdir")) { if (token.contains("/imgdir")) {
status -= 1; status -= 1;
} } else if (token.contains("imgdir")) {
else if(token.contains("imgdir")) {
status += 1; status += 1;
} }
} }
private static void listFiles(String directoryName, ArrayList<File> files) { private static void listFiles(String directoryName, ArrayList<File> files) {
File directory = new File(directoryName); File directory = new File(directoryName);
@@ -118,137 +82,135 @@ public class MapleEmptyItemWzChecker {
} }
} }
} }
private static int getItemIdFromFilename(String name) { private static int getItemIdFromFilename(String name) {
try { try {
return Integer.valueOf(name.substring(0, name.indexOf('.'))); return Integer.parseInt(name.substring(0, name.indexOf('.')));
} catch(Exception e) { } catch (Exception e) {
return -1; return -1;
} }
} }
private static void inspectItemWzEntry() { private static void inspectItemWzEntry() {
String line = null; String line = null;
try { try {
while((line = bufferedReader.readLine()) != null) { while ((line = bufferedReader.readLine()) != null) {
translateItemToken(line); translateItemToken(line);
} }
} } catch (Exception e) {
catch(Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
private static String currentItemPath() { private static String currentItemPath() {
String s = currentFile + " -> "; String s = currentFile + " -> ";
for (String p : currentPath) { for (String p : currentPath) {
s += (p + "\\"); s += (p + "\\");
} }
return s; return s;
} }
private static void translateItemToken(String token) { private static void translateItemToken(String token) {
if(token.contains("/imgdir")) { if (token.contains("/imgdir")) {
status -= 1; status -= 1;
currentPath.pop(); currentPath.pop();
} } else if (token.contains("imgdir")) {
else if(token.contains("imgdir")) {
status += 1; status += 1;
String d = getName(token); String d = getName(token);
if(status == 2) { if (status == 2) {
currentItemid = Integer.valueOf(d); currentItemid = Integer.parseInt(d);
contentWzItems.put(currentItemid, currentItemPath()); contentWzItems.put(currentItemid, currentItemPath());
forwardCursor(status); forwardCursor(status);
} else { } else {
currentPath.push(d); currentPath.push(d);
} }
} }
} }
private static void inspectStringWzEntry() { private static void inspectStringWzEntry() {
String line = null; String line = null;
try { try {
while((line = bufferedReader.readLine()) != null) { while ((line = bufferedReader.readLine()) != null) {
translateStringToken(line); translateStringToken(line);
} }
} } catch (Exception e) {
catch(Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
private static void translateStringToken(String token) { private static void translateStringToken(String token) {
if(token.contains("/imgdir")) { if (token.contains("/imgdir")) {
status -= 1; status -= 1;
currentPath.pop(); currentPath.pop();
} } else if (token.contains("imgdir")) {
else if(token.contains("imgdir")) {
status += 1; status += 1;
String d = getName(token); String d = getName(token);
if(status == currentDepth) { if (status == currentDepth) {
currentItemid = Integer.valueOf(d); currentItemid = Integer.parseInt(d);
stringWzItems.put(currentItemid, currentItemPath()); stringWzItems.put(currentItemid, currentItemPath());
//if (currentItemid >= 4000000) System.out.println(" " + currentItemid); //if (currentItemid >= 4000000) System.out.println(" " + currentItemid);
forwardCursor(status); forwardCursor(status);
} else { } else {
currentPath.push(d); currentPath.push(d);
} }
} }
} }
private static void loadStringWzFile(String filePath, int depth) throws IOException { private static void loadStringWzFile(String filePath, int depth) throws IOException {
fileReader = new InputStreamReader(new FileInputStream(filePath), "UTF-8"); fileReader = new InputStreamReader(new FileInputStream(filePath), StandardCharsets.UTF_8);
bufferedReader = new BufferedReader(fileReader); bufferedReader = new BufferedReader(fileReader);
currentFile = filePath; currentFile = filePath;
currentDepth = 2 + depth; currentDepth = 2 + depth;
//System.out.println(filePath + " depth " + depth); //System.out.println(filePath + " depth " + depth);
inspectStringWzEntry(); inspectStringWzEntry();
bufferedReader.close(); bufferedReader.close();
fileReader.close(); fileReader.close();
} }
private static void loadStringWz() throws IOException { private static void loadStringWz() throws IOException {
System.out.println("Reading String.wz ..."); System.out.println("Reading String.wz ...");
String stringWzFiles[][] = {{"Cash", "Consume", "Ins", "Pet"}, {"Etc"}, {"Eqp"}}; String[][] stringWzFiles = {{"Cash", "Consume", "Ins", "Pet"}, {"Etc"}, {"Eqp"}};
String stringWzPath = wzPath + "/String.wz/";
for (int i = 0; i < stringWzFiles.length; i++) { for (int i = 0; i < stringWzFiles.length; i++) {
for (String dirFile : stringWzFiles[i]) { for (String dirFile : stringWzFiles[i]) {
loadStringWzFile(stringWzPath + dirFile + ".img.xml", i); final String fileName = "/" + dirFile + ".img.xml";
loadStringWzFile(WZFiles.STRING.getFilePath() + fileName, i);
} }
} }
} }
private static void loadItemWz() throws IOException { private static void loadItemWz() throws IOException {
System.out.println("Reading Item.wz ..."); System.out.println("Reading Item.wz ...");
ArrayList<File> files = new ArrayList<>(); ArrayList<File> files = new ArrayList<>();
listFiles(wzPath + "/Item.wz", files); listFiles(WZFiles.ITEM.getFilePath(), files);
for (File f : files) {
if (f.getParentFile().getName().contentEquals("Special")) {
continue;
}
for(File f : files) {
if (f.getParentFile().getName().contentEquals("Special")) continue;
//System.out.println("Parsing " + f.getAbsolutePath()); //System.out.println("Parsing " + f.getAbsolutePath());
fileReader = new InputStreamReader(new FileInputStream(f), "UTF-8"); fileReader = new InputStreamReader(new FileInputStream(f), StandardCharsets.UTF_8);
bufferedReader = new BufferedReader(fileReader); bufferedReader = new BufferedReader(fileReader);
currentFile = f.getCanonicalPath(); currentFile = f.getCanonicalPath();
if(f.getName().length() <= itemFileNameSize) { if (f.getName().length() <= ITEM_FILE_NAME_SIZE) {
inspectItemWzEntry(); inspectItemWzEntry();
} else { // pet file structure is similar to equips, maybe there are other item-types following this behaviour? } else { // pet file structure is similar to equips, maybe there are other item-types following this behaviour?
int itemid = getItemIdFromFilename(f.getName()); int itemid = getItemIdFromFilename(f.getName());
if(itemid < 0) { if (itemid < 0) {
continue; continue;
} }
@@ -260,17 +222,19 @@ public class MapleEmptyItemWzChecker {
fileReader.close(); fileReader.close();
} }
} }
private static void loadCharacterWz() throws IOException { private static void loadCharacterWz() throws IOException {
System.out.println("Reading Character.wz ..."); System.out.println("Reading Character.wz ...");
ArrayList<File> files = new ArrayList<>(); ArrayList<File> files = new ArrayList<>();
listFiles(wzPath + "/Character.wz", files); listFiles(WZFiles.CHARACTER.getFilePath(), files);
for (File f : files) {
if (f.getParentFile().getName().contentEquals("Character.wz")) {
continue;
}
for(File f : files) {
if (f.getParentFile().getName().contentEquals("Character.wz")) continue;
int itemid = getItemIdFromFilename(f.getName()); int itemid = getItemIdFromFilename(f.getName());
if(itemid < 0) { if (itemid < 0) {
continue; continue;
} }
@@ -279,57 +243,56 @@ public class MapleEmptyItemWzChecker {
contentWzItems.put(currentItemid, currentItemPath()); contentWzItems.put(currentItemid, currentItemPath());
} }
} }
private static void calculateItemNameDiff(Set<Integer> emptyItemNames, Set<Integer> emptyNameItems) { private static void calculateItemNameDiff(Set<Integer> emptyItemNames, Set<Integer> emptyNameItems) {
for (Integer i : contentWzItems.keySet()) { for (Integer i : contentWzItems.keySet()) {
if (!stringWzItems.containsKey(i)) { if (!stringWzItems.containsKey(i)) {
emptyNameItems.add(i); emptyNameItems.add(i);
} }
} }
for (Integer i : stringWzItems.keySet()) { for (Integer i : stringWzItems.keySet()) {
if (!contentWzItems.containsKey(i)) { if (!contentWzItems.containsKey(i)) {
emptyItemNames.add(i); emptyItemNames.add(i);
} }
} }
} }
private static void readHandbookItems() throws IOException { private static void readHandbookItems() throws IOException {
System.out.println("Reading handbook ..."); System.out.println("Reading handbook ...");
String[] handbookPaths = {"Equip", "Cash.txt", "Etc.txt", "Pet.txt", "Setup.txt", "Use.txt"}; String[] handbookPaths = {"Equip", "Cash.txt", "Etc.txt", "Pet.txt", "Setup.txt", "Use.txt"};
for (String path : handbookPaths) { for (String path : handbookPaths) {
readHandbookPath(handbookPath + "/" + path); readHandbookPath(ToolConstants.HANDBOOK_PATH + "/" + path);
} }
} }
private static void readHandbookPath(String filePath) throws IOException { private static void readHandbookPath(String filePath) throws IOException {
ArrayList<File> files = new ArrayList<>(); ArrayList<File> files = new ArrayList<>();
File testFile = new File(filePath); File testFile = new File(filePath);
if (testFile.isDirectory()) { if (testFile.isDirectory()) {
listFiles(filePath, files); listFiles(filePath, files);
} else { } else {
files.add(testFile); files.add(testFile);
} }
for (File f : files) { for (File f : files) {
fileReader = new InputStreamReader(new FileInputStream(f), "UTF-8"); fileReader = new InputStreamReader(new FileInputStream(f), StandardCharsets.UTF_8);
bufferedReader = new BufferedReader(fileReader); bufferedReader = new BufferedReader(fileReader);
String line = null; String line = null;
try { try {
while((line = bufferedReader.readLine()) != null) { while ((line = bufferedReader.readLine()) != null) {
String[] tokens = line.split(" - "); String[] tokens = line.split(" - ");
if (tokens[0].length() > 0) { if (tokens[0].length() > 0) {
int itemid = Integer.valueOf(tokens[0]); int itemid = Integer.parseInt(tokens[0]);
handbookItems.add(itemid); handbookItems.add(itemid);
} }
} }
} } catch (Exception e) {
catch(Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
@@ -337,60 +300,60 @@ public class MapleEmptyItemWzChecker {
fileReader.close(); fileReader.close();
} }
} }
private static void printReportFileHeader() { private static void printReportFileHeader() {
printWriter.println(" # Report File autogenerated from the MapleEmptyItemWzChecker feature by Ronan Lana."); printWriter.println(" # Report File autogenerated from the MapleEmptyItemWzChecker feature by Ronan Lana.");
printWriter.println(" # Generated data takes into account several data info from the server-side WZ.xmls."); printWriter.println(" # Generated data takes into account several data info from the server-side WZ.xmls.");
printWriter.println(); printWriter.println();
} }
private static List<Integer> getSortedItems(Set<Integer> items) { private static List<Integer> getSortedItems(Set<Integer> items) {
List<Integer> sortedItems = new ArrayList<>(items); List<Integer> sortedItems = new ArrayList<>(items);
Collections.sort(sortedItems); Collections.sort(sortedItems);
return sortedItems; return sortedItems;
} }
private static void printReportFileResults(Set<Integer> emptyItemNames, Set<Integer> emptyNameItems) { private static void printReportFileResults(Set<Integer> emptyItemNames, Set<Integer> emptyNameItems) {
if (!emptyItemNames.isEmpty()) { if (!emptyItemNames.isEmpty()) {
printWriter.println("String.wz NAMES with no Item.wz node, " + emptyItemNames.size() + " entries:"); printWriter.println("String.wz NAMES with no Item.wz node, " + emptyItemNames.size() + " entries:");
for(Integer itemid : getSortedItems(emptyItemNames)) { for (Integer itemid : getSortedItems(emptyItemNames)) {
printWriter.println(" " + itemid + " " + stringWzItems.get(itemid) + (handbookItems.contains(itemid) ? "" : " NOT FOUND")); printWriter.println(" " + itemid + " " + stringWzItems.get(itemid) + (handbookItems.contains(itemid) ? "" : " NOT FOUND"));
} }
printWriter.println(); printWriter.println();
} }
if (!emptyNameItems.isEmpty()) { if (!emptyNameItems.isEmpty()) {
printWriter.println("Item.wz ITEMS with no String.wz node, " + emptyNameItems.size() + " entries:"); printWriter.println("Item.wz ITEMS with no String.wz node, " + emptyNameItems.size() + " entries:");
for(Integer itemid : getSortedItems(emptyNameItems)) { for (Integer itemid : getSortedItems(emptyNameItems)) {
printWriter.println(" " + itemid + " " + contentWzItems.get(itemid) + (handbookItems.contains(itemid) ? "" : " NOT FOUND")); printWriter.println(" " + itemid + " " + contentWzItems.get(itemid) + (handbookItems.contains(itemid) ? "" : " NOT FOUND"));
} }
printWriter.println(); printWriter.println();
} }
} }
private static void reportItemNameDiff(Set<Integer> emptyItemNames, Set<Integer> emptyNameItems) throws IOException { private static void reportItemNameDiff(Set<Integer> emptyItemNames, Set<Integer> emptyNameItems) throws IOException {
System.out.println("Reporting results..."); System.out.println("Reporting results...");
printWriter = new PrintWriter(newFile, "UTF-8"); printWriter = new PrintWriter(OUTPUT_FILE, StandardCharsets.UTF_8);
printReportFileHeader(); printReportFileHeader();
printReportFileResults(emptyItemNames, emptyNameItems); printReportFileResults(emptyItemNames, emptyNameItems);
printWriter.close(); printWriter.close();
} }
private static void locateItemStringWzDiff() throws IOException { private static void locateItemStringWzDiff() throws IOException {
Set<Integer> emptyItemNames = new HashSet<>(), emptyNameItems = new HashSet<>(); Set<Integer> emptyItemNames = new HashSet<>(), emptyNameItems = new HashSet<>();
calculateItemNameDiff(emptyItemNames, emptyNameItems); calculateItemNameDiff(emptyItemNames, emptyNameItems);
reportItemNameDiff(emptyItemNames, emptyNameItems); reportItemNameDiff(emptyItemNames, emptyNameItems);
nonPropItems = emptyItemNames; nonPropItems = emptyItemNames;
} }
private static void runEmptyItemWzChecker() throws IOException { private static void runEmptyItemWzChecker() throws IOException {
readHandbookItems(); readHandbookItems();
@@ -400,77 +363,75 @@ public class MapleEmptyItemWzChecker {
locateItemStringWzDiff(); locateItemStringWzDiff();
} }
private static void generateStringWzEntry() { private static void generateStringWzEntry() {
String line = null; String line = null;
try { try {
while((line = bufferedReader.readLine()) != null) { while ((line = bufferedReader.readLine()) != null) {
updateStringToken(line); updateStringToken(line);
} }
} } catch (Exception e) {
catch(Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
private static void updateStringToken(String token) { private static void updateStringToken(String token) {
if(token.contains("/imgdir")) { if (token.contains("/imgdir")) {
status -= 1; status -= 1;
} } else if (token.contains("imgdir")) {
else if(token.contains("imgdir")) {
status += 1; status += 1;
if (status == currentDepth && nonPropItems.contains(Integer.valueOf(getName(token)))) { if (status == currentDepth && nonPropItems.contains(Integer.valueOf(getName(token)))) {
forwardCursor(status); forwardCursor(status);
return; return;
} }
} }
printWriter.println(token); printWriter.println(token);
} }
private static void generateStringWzFile(String filePath, int depth) throws IOException { private static void generateStringWzFile(String filePath, int depth) throws IOException {
fileReader = new InputStreamReader(new FileInputStream(wzPath + filePath), "UTF-8"); fileReader = new InputStreamReader(new FileInputStream(WZFiles.DIRECTORY + filePath), StandardCharsets.UTF_8);
bufferedReader = new BufferedReader(fileReader); bufferedReader = new BufferedReader(fileReader);
printWriter = new PrintWriter(outputWzPath + filePath, "UTF-8"); printWriter = new PrintWriter(OUTPUT_PATH + filePath, StandardCharsets.UTF_8);
currentDepth = 2 + depth; currentDepth = 2 + depth;
//System.out.println(filePath + " depth " + depth); //System.out.println(filePath + " depth " + depth);
generateStringWzEntry(); generateStringWzEntry();
printWriter.close(); printWriter.close();
bufferedReader.close(); bufferedReader.close();
fileReader.close(); fileReader.close();
} }
private static void generateStringWz() throws IOException { private static void generateStringWz() throws IOException {
System.out.println("Generating clean String.wz ..."); System.out.println("Generating clean String.wz ...");
String stringWzFiles[][] = {{"Cash", "Consume", "Ins", "Pet"}, {"Etc"}, {"Eqp"}}; String[][] stringWzFiles = {{"Cash", "Consume", "Ins", "Pet"}, {"Etc"}, {"Eqp"}};
String stringWzPath = "/String.wz/"; String stringWzPath = "/String.wz/";
File folder = new File(outputWzPath + "/String.wz/"); File folder = new File(OUTPUT_PATH + "/String.wz/");
if (!folder.exists()) { if (!folder.exists()) {
folder.mkdirs(); folder.mkdirs();
} }
for (int i = 0; i < stringWzFiles.length; i++) { for (int i = 0; i < stringWzFiles.length; i++) {
for (String dirFile : stringWzFiles[i]) { for (String dirFile : stringWzFiles[i]) {
generateStringWzFile(stringWzPath + dirFile + ".img.xml", i); generateStringWzFile(stringWzPath + dirFile + ".img.xml", i);
} }
} }
} }
public static void main(String[] args) { public static void main(String[] args) {
try { try {
runEmptyItemWzChecker(); runEmptyItemWzChecker();
generateStringWz(); generateStringWz();
System.out.println("Done!"); System.out.println("Done!");
} catch (IOException ioe) { } catch (IOException ioe) {
ioe.printStackTrace(); ioe.printStackTrace();
} }
} }
} }

View File

@@ -6,6 +6,7 @@ public class ToolConstants {
public static final File INPUT_DIRECTORY = new File("tools/input"); public static final File INPUT_DIRECTORY = new File("tools/input");
public static final File OUTPUT_DIRECTORY = new File("tools/output"); public static final File OUTPUT_DIRECTORY = new File("tools/output");
public static final String SCRIPTS_PATH = "scripts"; public static final String SCRIPTS_PATH = "scripts";
public static final String HANDBOOK_PATH = "handbook";
public static File getInputFile(String fileName) { public static File getInputFile(String fileName) {
return new File(INPUT_DIRECTORY, fileName); return new File(INPUT_DIRECTORY, fileName);

View File

@@ -1,149 +0,0 @@
# Report File autogenerated from the MapleEmptyItemWzChecker feature by Ronan Lana.
# Generated data takes into account several data info from the server-side WZ.xmls.
String.wz NAMES with no Item.wz node, 130 entries:
20816 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Face\
20817 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Face\
21817 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Face\
21820 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Face\
1002655 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Cap\
1002657 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Cap\
1002658 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Cap\
1003028 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Cap\
1003029 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Cap\
1003030 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Cap\
1003043 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Cap\
1022096 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Accessory\
1042180 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Coat\
1052226 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Longcoat\
1060115 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Pants\
1060138 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Pants\
1061125 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Pants\
1061160 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Pants\
1062036 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Pants\
1062037 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Pants\
1072248 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Shoes\
1072249 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Shoes\
1072418 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Shoes\
1072425 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Shoes\
1080002 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Glove\
1082217 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Glove\
1082221 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Glove\
1082261 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Glove\
1142152 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Accessory\
1142155 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Accessory\
1302032 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Weapon\
1302069 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Weapon\
1322030 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Weapon\
1322034 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Weapon\
1332058 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Weapon\
1382013 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Weapon\
1452047 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Weapon\
1462020 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Weapon\
1462042 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Weapon\
1472057 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Weapon\
1702113 ../../wz/String.wz/Eqp.img.xml -> Eqp.img\Eqp\Weapon\
2002012 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2002013 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2002014 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2012004 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2022034 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2022036 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2022046 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2022114 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2070014 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2083000 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2084000 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2101016 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2101017 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2101018 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2101019 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2101022 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2101058 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2210023 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2210024 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2240004 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2240005 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2240006 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2240007 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2240008 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2240009 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2240010 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2240011 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2240012 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2240013 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2240014 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2240015 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2290109 ../../wz/String.wz/Consume.img.xml -> Consume.img\
2390000 ../../wz/String.wz/Consume.img.xml -> Consume.img\
3010044 ../../wz/String.wz/Ins.img.xml -> Ins.img\
3994016 ../../wz/String.wz/Ins.img.xml -> Ins.img\
4000275 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
4001150 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
4031294 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
4031627 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
4031628 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
4031629 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
4031630 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
4031631 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
4031632 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
4031633 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
4031634 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
4031635 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
4031636 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
4031637 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
4031638 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
4031639 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
4031640 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
4031641 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
4031642 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
4031643 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
4031644 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
4031645 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
4031646 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
4031647 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
4031648 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
4031795 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
4031867 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
4032526 ../../wz/String.wz/Etc.img.xml -> Etc.img\Etc\
5000040 ../../wz/String.wz/Pet.img.xml -> Pet.img\
5000043 ../../wz/String.wz/Pet.img.xml -> Pet.img\
5000046 ../../wz/String.wz/Pet.img.xml -> Pet.img\
5201000 ../../wz/String.wz/Cash.img.xml -> Cash.img\
5201001 ../../wz/String.wz/Cash.img.xml -> Cash.img\
5210000 ../../wz/String.wz/Cash.img.xml -> Cash.img\
5210001 ../../wz/String.wz/Cash.img.xml -> Cash.img\
5210002 ../../wz/String.wz/Cash.img.xml -> Cash.img\
5210003 ../../wz/String.wz/Cash.img.xml -> Cash.img\
5210004 ../../wz/String.wz/Cash.img.xml -> Cash.img\
5210005 ../../wz/String.wz/Cash.img.xml -> Cash.img\
5211001 ../../wz/String.wz/Cash.img.xml -> Cash.img\
5211002 ../../wz/String.wz/Cash.img.xml -> Cash.img\
5211003 ../../wz/String.wz/Cash.img.xml -> Cash.img\
5211047 ../../wz/String.wz/Cash.img.xml -> Cash.img\
5240016 ../../wz/String.wz/Cash.img.xml -> Cash.img\
5240019 ../../wz/String.wz/Cash.img.xml -> Cash.img\
5251004 ../../wz/String.wz/Cash.img.xml -> Cash.img\
5251005 ../../wz/String.wz/Cash.img.xml -> Cash.img\
5251006 ../../wz/String.wz/Cash.img.xml -> Cash.img\
5360009 ../../wz/String.wz/Cash.img.xml -> Cash.img\
5360010 ../../wz/String.wz/Cash.img.xml -> Cash.img\
5360011 ../../wz/String.wz/Cash.img.xml -> Cash.img\
5360012 ../../wz/String.wz/Cash.img.xml -> Cash.img\
5360013 ../../wz/String.wz/Cash.img.xml -> Cash.img\
5360014 ../../wz/String.wz/Cash.img.xml -> Cash.img\
Item.wz ITEMS with no String.wz node, 12 entries:
1942000 C:\Nexon\HeavenMS\wz\Character.wz\Dragon\01942000.img.xml -> NOT FOUND
1942001 C:\Nexon\HeavenMS\wz\Character.wz\Dragon\01942001.img.xml -> NOT FOUND
1942002 C:\Nexon\HeavenMS\wz\Character.wz\Dragon\01942002.img.xml -> NOT FOUND
1952000 C:\Nexon\HeavenMS\wz\Character.wz\Dragon\01952000.img.xml -> NOT FOUND
1952001 C:\Nexon\HeavenMS\wz\Character.wz\Dragon\01952001.img.xml -> NOT FOUND
1952002 C:\Nexon\HeavenMS\wz\Character.wz\Dragon\01952002.img.xml -> NOT FOUND
1962000 C:\Nexon\HeavenMS\wz\Character.wz\Dragon\01962000.img.xml -> NOT FOUND
1962001 C:\Nexon\HeavenMS\wz\Character.wz\Dragon\01962001.img.xml -> NOT FOUND
1962002 C:\Nexon\HeavenMS\wz\Character.wz\Dragon\01962002.img.xml -> NOT FOUND
1972000 C:\Nexon\HeavenMS\wz\Character.wz\Dragon\01972000.img.xml -> NOT FOUND
1972001 C:\Nexon\HeavenMS\wz\Character.wz\Dragon\01972001.img.xml -> NOT FOUND
1972002 C:\Nexon\HeavenMS\wz\Character.wz\Dragon\01972002.img.xml -> NOT FOUND