Event Recall + Cash Shop bestsellers + MapleSessionCoordinator rework
Implemented an event recall system. Players that went disconnected during an event instance are able to rejoin the ongoing event upon relogin. Implemented a player-activity backed best-sellers system for the Cash Shop. Patched the recently added selective loot system interfering with quest items, ever disabling drops after the player picked up one item. Implemented a server flag for everlasting buffs. Fixed some inconsistencies with Priest Dispel skill, sometimes crashing party players. Fixed change job not properly showing effects for other players. Fixed wrong fee value being taken from players that expands their guild size. Also, implemented GMS-like fee for this action. Reworked the MapleSessionCoordinator, now evaluating client's HWID as well as remote IP. This's expected to lessen account drought time for players that are constantly changing their IP. Last but not least, added world maps for Mushroom Castle, Zipangu, CBD/Malaysia and Ellin Forest regions. Original artwork content used on files depicted in this topic are rightful property of Nexon Corps., these files thoroughly trying to adhere the "Fair Use" disclaimer policy, their purpose being solely to fulfill gaming experience for the areas that were already present on v83 GMS but still lacked worldmaps. For more info regarding Fair Use, please refer to "http://www.dmlp.org/legal-guide/fair-use".
This commit is contained in:
73
tools/MapleInvalidItemWithNoNameFetcher/nbbuild.xml
Normal file
73
tools/MapleInvalidItemWithNoNameFetcher/nbbuild.xml
Normal file
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- You may freely edit this file. See commented blocks below for -->
|
||||
<!-- some examples of how to customize the build. -->
|
||||
<!-- (If you delete it and reopen the project it will be recreated.) -->
|
||||
<!-- By default, only the Clean and Build commands use this build script. -->
|
||||
<!-- Commands such as Run, Debug, and Test only use this build script if -->
|
||||
<!-- the Compile on Save feature is turned off for the project. -->
|
||||
<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
|
||||
<!-- in the project's Project Properties dialog box.-->
|
||||
<project name="MapleInvalidItemWithNoNameFetcher" default="default" basedir=".">
|
||||
<description>Builds, tests, and runs the project MapleInvalidItemWithNoNameFetcher.</description>
|
||||
<import file="nbproject/build-impl.xml"/>
|
||||
<!--
|
||||
|
||||
There exist several targets which are by default empty and which can be
|
||||
used for execution of your tasks. These targets are usually executed
|
||||
before and after some main targets. They are:
|
||||
|
||||
-pre-init: called before initialization of project properties
|
||||
-post-init: called after initialization of project properties
|
||||
-pre-compile: called before javac compilation
|
||||
-post-compile: called after javac compilation
|
||||
-pre-compile-single: called before javac compilation of single file
|
||||
-post-compile-single: called after javac compilation of single file
|
||||
-pre-compile-test: called before javac compilation of JUnit tests
|
||||
-post-compile-test: called after javac compilation of JUnit tests
|
||||
-pre-compile-test-single: called before javac compilation of single JUnit test
|
||||
-post-compile-test-single: called after javac compilation of single JUunit test
|
||||
-pre-jar: called before JAR building
|
||||
-post-jar: called after JAR building
|
||||
-post-clean: called after cleaning build products
|
||||
|
||||
(Targets beginning with '-' are not intended to be called on their own.)
|
||||
|
||||
Example of inserting an obfuscator after compilation could look like this:
|
||||
|
||||
<target name="-post-compile">
|
||||
<obfuscate>
|
||||
<fileset dir="${build.classes.dir}"/>
|
||||
</obfuscate>
|
||||
</target>
|
||||
|
||||
For list of available properties check the imported
|
||||
nbproject/build-impl.xml file.
|
||||
|
||||
|
||||
Another way to customize the build is by overriding existing main targets.
|
||||
The targets of interest are:
|
||||
|
||||
-init-macrodef-javac: defines macro for javac compilation
|
||||
-init-macrodef-junit: defines macro for junit execution
|
||||
-init-macrodef-debug: defines macro for class debugging
|
||||
-init-macrodef-java: defines macro for class execution
|
||||
-do-jar: JAR building
|
||||
run: execution of project
|
||||
-javadoc-build: Javadoc generation
|
||||
test-report: JUnit report generation
|
||||
|
||||
An example of overriding the target for project execution could look like this:
|
||||
|
||||
<target name="run" depends="MapleInvalidItemWithNoNameFetcher-impl.jar">
|
||||
<exec dir="bin" executable="launcher.exe">
|
||||
<arg file="${dist.jar}"/>
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
Notice that the overridden target depends on the jar target and not only on
|
||||
the compile target as the regular run target does. Again, for a list of available
|
||||
properties which you can use, check the target you are overriding in the
|
||||
nbproject/build-impl.xml file.
|
||||
|
||||
-->
|
||||
</project>
|
||||
@@ -36,16 +36,16 @@ import provider.MapleDataDirectoryEntry;
|
||||
import provider.MapleDataFileEntry;
|
||||
import provider.MapleDataProvider;
|
||||
import provider.MapleDataProviderFactory;
|
||||
import provider.MapleDataTool;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author RonanLana
|
||||
*
|
||||
* This application finds inexistent itemids within the drop data from
|
||||
* the Maplestory database specified by the URL below. This program
|
||||
* assumes all itemids have at most 7 digits.
|
||||
*
|
||||
* A file is generated listing all the inexistent ids.
|
||||
* This application finds itemids with inexistent name and description from
|
||||
* within the server-side XMLs, then identify them on a report file along
|
||||
* with a XML excerpt to be appended on the String.wz xml nodes. This program
|
||||
* assumes all equipids are depicted using 8 digits and item using 7 digits.
|
||||
*
|
||||
* Estimated parse time: 2 minutes
|
||||
*/
|
||||
@@ -65,6 +65,9 @@ public class MapleNoItemNameFetcher {
|
||||
static Map<Integer, ItemType> itemsWithNoNameProperty = new HashMap<>();
|
||||
static Set<Integer> equipsWithNoCashProperty = new HashSet<>();
|
||||
|
||||
static Map<Integer, String> nameContentCache = new HashMap<>();
|
||||
static Map<Integer, String> descContentCache = new HashMap<>();
|
||||
|
||||
static ItemType curType = ItemType.UNDEF;
|
||||
|
||||
private enum ItemType {
|
||||
@@ -78,11 +81,20 @@ public class MapleNoItemNameFetcher {
|
||||
private static void processStringSubdirectoryData(MapleData subdirData, String subdirPath) {
|
||||
for(MapleData md : subdirData.getChildren()) {
|
||||
try {
|
||||
if(md.getChildByPath("name") != null) {
|
||||
int itemId = Integer.parseInt(md.getName());
|
||||
MapleData nameData = md.getChildByPath("name");
|
||||
MapleData descData = md.getChildByPath("desc");
|
||||
|
||||
int itemId = Integer.parseInt(md.getName());
|
||||
if (nameData != null && descData != null) {
|
||||
itemsWithNoNameProperty.remove(itemId);
|
||||
} else {
|
||||
System.out.println("Found itemid on String.wz with no name property: " + subdirPath + subdirData.getName() + "/" + md.getName());
|
||||
if (nameData != null) {
|
||||
nameContentCache.put(itemId, MapleDataTool.getString("name", md));
|
||||
} else if (descData != null) {
|
||||
descContentCache.put(itemId, MapleDataTool.getString("desc", md));
|
||||
}
|
||||
|
||||
System.out.println("Found itemid on String.wz with no full property: " + subdirPath + subdirData.getName() + "/" + md.getName());
|
||||
}
|
||||
} catch (NumberFormatException nfe) {
|
||||
System.out.println("Error reading string image: " + subdirPath + subdirData.getName() + "/" + md.getName());
|
||||
@@ -422,10 +434,33 @@ public class MapleNoItemNameFetcher {
|
||||
printWriter.println();
|
||||
}
|
||||
|
||||
private static String getMissingEquipName(int itemid) {
|
||||
String s = nameContentCache.get(itemid);
|
||||
if (s == null) {
|
||||
s = "MISSING NAME " + itemid;
|
||||
}
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
private static String getMissingEquipDesc(int itemid) {
|
||||
String s = descContentCache.get(itemid);
|
||||
if (s == null) {
|
||||
s = "MISSING INFO " + itemid;
|
||||
}
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
private static void writeMissingEquipInfo(Integer itemid) {
|
||||
printWriter.println(" <imgdir name=\"" + itemid + "\">");
|
||||
printWriter.println(" <string name=\"name\" value=\"MISSING NAME\"/>");
|
||||
printWriter.println(" <string name=\"desc\" value=\"MISSING INFO\"/>");
|
||||
|
||||
String s;
|
||||
s = getMissingEquipName(itemid);
|
||||
printWriter.println(" <string name=\"name\" value=\"" + s + "\"/>");
|
||||
|
||||
s = getMissingEquipDesc(itemid);
|
||||
printWriter.println(" <string name=\"desc\" value=\"" + s + "\"/>");
|
||||
printWriter.println(" </imgdir>");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user