Hello all, @Zychronix aka deathstar and I, are back to help you guys out with your Wz editing needs.
We decided to actually release a 3-in-1 bundle thing so to speak. This includes our WzClear and our XML Source Parser that was released before, but it has been recoded and works more efficiently. The third thing we are adding is a Character Node Finder. The name is self explanatory. It finds nodes inside the Character.wz.
The correct order for importing CHARACTER files are as followed;
Source Parser > Node Finder > Wz Clear
Do NOT change the order or it will mess up.
The idea is to run the CMDs which is quicker then doing it through NetBeans. However do note that doing all three steps will take about a day or so, depending on your hard drive.
Each XML you wish to edit, has to be in the CLASSIC format.
Export as Classic > Run program > Reimport into the WZ.
Lets get into what is being released right here;
XML Source Parser
This is what most of you guys will be downloading this file for. This makes those pesky blinking items not blink no more. This it goes to the source and copies the canvas data. In case you do not know, the WzUOL property is inside every Maplestory version and acts just the same as the Source property.
You can type it in without a WZ folder and it will do the entire wz directory.PHP Code:
java -cp dist/XML.jar UltimateXMLSourceParser W:\\Parse Character.wz
pause
You need one main folder, it will run if you are missing folders (meaning when you export the folders of the kinds of items that are there) but if it tries to get a source value from a different wz file or a different file that doesn't exist it'll give you errors.
Here is our older XML Parser.
Character Node Finder
This needs to be ran before you do any of the other two projects. They find the nodes that is coded inside the Character.wz
How does this help? You ask, well it finds the nodes in all the items so that way if it is a node that Nexon just added, it will be in the list and that way you can use the WzClear to get rid of the pesky little node that is not coded inside the version of Maplestory you are working on. That simple!
Be sure to change your file location.
PHP Code:
static String BASE_FOLDER = "F:\\MapleStory";
WzClear
WzClear is a nice little thing. It gets rid of those pesky little nodes that isn't coded into your Maplestory version. Now for you to know exactly what is and isnt coded. All you really need to do is get a clean Character.wz file and run the Node finder and see what nodes are inside your version. Then run the Node Finder again on the newest GMS/KMS or whatever files to know whats there and boom, use WzClear to remove all the nodes that you don't need and now you got working items.
One main thing you must do before running WzClear is changing the file location. Open up the file in NetBeans or whatever it is you use, and change the location.
This is what you need to change.PHP Code:
static String BASE_FOLDER = "F:\\MapleStory\\v90\\Character.wz";
If you keep scrolling you will see this line of code;
This is what WzClear will NOT remove. If there is anything on this list that you want to keep, put it on the list otherwise WzClear will automatically remove it. If you want things to removed, then just delete it from the list.PHP Code:
static String[] knownNodes = {
Here is a link to our old WzClear release, the way to run it is mostly the same.
I'm not exactly sure what else to write, I'm just gonna end it here. If you need reference the older versions of these items are posted in this thread. I will adding a virus scan to the .rar file as well. If you need any help with anything just post below.
Here is the download.
This is a virus scan.
Last edited by religion; 07-01-17 at 06:43 PM.
Does this also work for ilinks and outlinks? I noticed you mentioned the Source property, but I don't see any servers using that property anymore. From what I've seen, KMS, CMS, JMS and GMS have all switched to inlinking and outlinking.
Here's a screenshot just in case you need it
Spoiler:
They work exactly the same as Source property do, the only difference is that inlinking is used when it's used inside the same XML, and outlinking is when it links to another XML.
Last edited by Angxl; 10-11-17 at 11:28 AM.
It doesn't because this was created based off of the source property (the Source Parser) I actually don't know anything about inlink and outlink because I've been out of the WZ Dev for awhile. But also servers can't even use the source property because it's not coded into the servers you feel me. I just wish they would stick to WzUOL instead of making more and more bullshit. sIGH.
Okay so, it runs and I get this.
Is this working correctly, because I changed my server XMLs and the items are still invisible/blinking.
Is there something else I'm supposed to do?
I decided to look into these new properties.
_outlink works exactly the same as the source property.
_inlink works nearly the same as a WzUOL property. _inlink doesn't have the dots indicating to go back a folder, it starts off with the file as the base location. The program doesn't currently support _inlinks but with a few minor code changes you can add it in.
I put in bold what I added/changed.
UltimateXMLSourceParser.java
Now it'll work with source, _outlink, and _inlinks. I'll get @religion to update the download link with the updated source in the thread later.Code:... static ArrayList<String> source = null; static ArrayList<String> sourceValue = null; static ArrayList<String> sourceType = null; ... if (check) { for (int i = 0; i < nodeMap.getLength(); i++) { Node node = nodeMap.item(i); if (i == 1) { sourceValue.add(node.getNodeValue()); } else { sourceType.add(node.getNodeValue()); } } ... for (int x = 0; x < sourceValueArray.length; x++) { if (!start && !sourceType.get(i).equals("_inlink")) { if (sourceValueArray[x].endsWith(".img")) { valueFile = sourceValueArray[x]; sourceValueFolderPath += "/" + sourceValueArray[x]; start = true; } else { sourceValueFolderPath += "/" + sourceValueArray[x]; } } else if (x == sourceValueArray.length - 1) { expression += "/canvas[@name='" + sourceValueArray[x] + "']"; } else { expression += "/imgdir[@name='" + sourceValueArray[x] + "']"; } } if (sourceType.get(i).equals("_inlink")) { valueFile = file.getName().substring(0, file.getName().length() - 4); } ...
Spoiler:
Also the simplified full tutorial is for example...
Server WZ: v83
Importing WZ: v179
- Make sure the folder paths for the CMD/Java files are correct.
- Export Classic v179 WZ XMLs
- Run "Run Ultimate XML Source Parser.cmd" or "UltimateXMLSourceParser.java" (I recommend the CMD as it will take a while. Just make sure to put an updated JAR in there if you've changed the source code).
- Run "Run Node Finder.cmd" or "CharacterInfoNode.java" on your v83 Server XMLs. The program will give you a list of nodes you need to put in the "knownNodes" array of UltimateWzClear. You only need to do this step each time you change server version (i.e v83->v90).
- After you've saved "UltimateWzClear.java" and compiled the JAR run, "Run Ultimate WZ Clear.cmd" or "UltimateWzClear.java". You should run these on your Classic v179 WZ XMLs after the Source Parser is finished.
- Once WZ Clear is finished you are ready to re-import the completed v179 XMLs in your v83 WZ files.
- After all that importing your items should no longer blink. Export the updated v83 WZ files to your v83 Server XML folder and go in game to test.
The three programs should look something similar to this when completed.
Spoiler:
Can this be used with v146 from higher versions? Since it had only the "Source" node and not _outlink _inlink nodes.
The download link has been updated with the new verison, that has the edited in/out links. Follow Zcho's post on how to exactly change it to use in/out links.
Heres the link to the new download as well
Thanks. I'm assuming to make it only affect _in and _out links would be to change:
to this?Code:if (node.getNodeValue().equals("source") || node.getNodeValue().equals("_inlink") || node.getNodeValue().equals("_outlink")) {
because the wz file size would skyrocket I guess if it didn't do that lolCode:if (node.getNodeValue().equals("_inlink") || node.getNodeValue().equals("_outlink")) {
Another thing I'm wondering is that..I'm importing about 4 different versions of MapleStory into one type of file. If I just put all of the xmls into one file, dump them, and then use the parser, would that change all of the custom xmls into ones that v146 could use? It would save me hours of time..
When Zchro and I did that, we did each version separately because each version has about the same ID ranges but different items in the IDs. We did it and changed the conflicting IDs. I mean you can do it all at once but it depends because some XMLs might get overridden by one from a different Maple.
But the only other thing you would need to look out for is things that are inside the items like how KMS has rebirth flames, and stuff for the stats, if you wanted to clear that up, you would need to add that into the WzClear and such.
@Age I saw in another post that you couldn't get WzClear working. Can you explain what is happened and what-not?
Okay so let's say I want to add a new eye from GMS right?
So I take out all the necessary XML's to make the eye work, run Ultimate XML Parser and get this:
Spoiler:
Then, I want to know what nodes to remove, so I run NodeFinder and get this:
Spoiler:
Lastly, I actually want to remove the unnecessary nodes, so I run WzClear and get:
Spoiler:
As you can see in the second image, it doesn't list all nodes that exist in a Face xml, and in the last image it doesn't remove any extra nodes. Any hints on what I'm doing wrong? I changed the paths in the bats, and in netbeans
If I can recall you only need to run the source parser on the Face/Eyes bcause there is only the source property inside it. Nothing else was added (unless they added new properties) into those files. So of course the other two won't do nothing because there is nothing for it to find/remove.
However can you post a screen shot of the eye inside HaRepacker with some nodes expanded?
Does the eye work at all as well?
(Sorry for the late reply.)