Giter VIP home page Giter VIP logo

heavenms's Introduction

Head developer: Ronan C. P. Lana

Besides myself for maintaining this repository, credits are to be given to Wizet/Nexon (owners of MapleStory & it's IP contents), the original MapleSolaxia staff and other colaborators, as just some changes/patches on the game were applied by myself, in which some of them diverged from the original v83 patch contents (alright, not just "some patches" by now since a whole lot of major server core changes have been applied on this development).

Regarding distributability and usage of the code presented here: like it was before, this MapleStory server is open-source. By that, it is meant that anyone is free to install, use, modify and redistribute the contents, as long as there is no kind of commercial trading involved and the credits to the original creators are maintained within the codes.

This server source should be built and run on Java 8 in order to run properly -- used to be ran in Java 7, thanks kolakcc (Familiar) for the Java 8 support!

Consider using an IDE for setting up the server source into a project. Once mounted the project, build it on your machine and run the server using the "launch.bat" application.

In this project, many gameplay-wise issues generated from either the original WZ files and the server source have been partially or completely solved. Considering the use of the provided edited WZ's and server-side wz.xml files should be of the greatest importance when dealing with this instance of server source, in order to perceive it at it's full potential. My opinion, though!

  • In other case, as fallback from the provided ones, consider using whole clean set. Selecting part of the provided ones to play pretty much may eventually lead to unexpected issues.

The main objective of this effort is to try as best as possible to recreate what once was the original MapleStory v83, while adding up some flavors that spices up the gameplay. In other words, aim to get the best of the MapleStory of that era.


Download items

Server files: https://github.com/ronancpl/HeavenMS

Client files & general tools: https://drive.google.com/drive/folders/0BzDsHSr-0V4MYVJ0TWIxd05hYUk

Java 8 SDK & NetBeans bundle: https://www.oracle.com/technetwork/pt/java/javase/downloads/jdk-netbeans-jsp-3413153-ptb.html

Important note about localhosts: these executables are red-flagged by antivirus tools as potentially malicious softwares, this happens due to the reverse engineering methods that were applied onto these software artifacts. Those depicted here have been put to use for years already and posed no harm so far, so they are soundly assumed to be safe.

Latest localhost: https://hostr.co/amuX5SLeeVZx

The following list, in bottom-up chronological order, holds information regarding all changes that were applied from the starting localhost used in this development. Some lines have a link attached, that will lead you to a snapshot of the localhost at that version of the artifact. Naturally, later versions holds all previous changes along with the proposed changes.

Change log:

  • Fixed Monster Magnet crashing the caster when trying to pull fixed mobs, credits to Shavit. https://gofile.io/?c=BW7dVM

  • Cleared need for administrator privileges (OS) to play the game, credits to Ubaware.

  • Set a higher cap for AP assigning with AP Reset, credits to Ubaware.

  • Fixed Monster Magnet crashing the caster when trying to pull bosses. Drawback: Dojo HPBar becomes unavailable. https://hostr.co/SvnSKrGzXhG0

  • Fixed some 'rn' problems with quest icons & removed "tab" from party leader changed message. https://hostr.co/tsYsQzzV6xT0

  • Removed block on applying attack-based strengthening gems on non-weapon equipments. https://hostr.co/m2bVtnizCtmD

  • Set a higher cap for SPEED.

  • Removed the AP assigning block for beginners below level 10. https://hostr.co/AHAHzneCti9B

  • Removed block on party for beginners level 10 or below. https://hostr.co/JZq53mMtToCz

  • Removed block on MTS entering in some maps, rendering the buyback option available.

  • Removed "AP excess" popup and limited actions on Admin/MWLB, credits to kevintjuh93.

  • Removed "You've gained a level!" popup, credits to PrinceReborn.

  • Removed caps for WATK, WDEF, MDEF, ACC, AVOID.

  • 'n' problem fixed.

  • Fraysa's https://hostr.co/gJbLZITRVHmv

  • Eric's MapleSilver starting on window-mode.


Open-source client development - HeavenClient

Continuing from where SYJourney's JourneyClient has finished contributions (as of 5 Jul 2016), an open-source development of a software artifact designed to handle both gaming operations and interactions with the server is being conducted.

Newer implementations are being maintained by ้ ผๆ™ (ryantpayton) and aims to offer higher display resolution, bring recent UI contents for the pre-BB gameplay and incremental support on overall gaming perspective.

HeavenClient Github: https://github.com/ryantpayton/HeavenClient


Development information

Status: Released (4 rounds).

Mission

With non-profitting means intended, provide nostalgic pre-BB maplers world-wide a quality local server for freestyle entertainment.

Vision

By taking the v83 MapleStory as the angular stone, incrementally look forward to improve the gaming experience whilst still retaining the "clean v83" conservative ideal. Also, through reviewing distinguished aspects of the server's behavior that could be classified as a potential server threat, in the long run look for ways to improve or even stabilize some of it's uncertain aspects.

Values

  • Autonomy, seek self-improvement for tackling issues head-on;
  • Adventurous, take no fear of failures on the path of progress;
  • Light-hearted support, general people out there didn't experience what you've already had;
  • Humility, no matter how good you are, there's no good in boasting yourself over experiences only a few have had;

Announcements

HeavenMS development as we can see right now achieved an acceptable state-of-the-art. A heartfelt thanks for everyone that contributed in some way for the progress of this server!

A case study has been conducted with the objective of overview results achieved during HeavenMS development. Those can be checked out on: https://heavenms-survey.home.blog/2019/12/24/project-visualizations/

Support HeavenMS

If you liked this project, please don't forget to star the repo ;) .

It's never enough to tell this, thanks to everyone that have been contributing something for the continuous improvement of the server! Be it through bug reports, donation, code snippets and/or pull requests.

Our Discord channel is still available on: https://discord.gg/Q7wKxHX


Disclaimer

  • HeavenMS staff has no current intention to publicly open a server with this source, if that ever comes to happen this note will be lifted. Don't be scammed!

  • This server source is NOT intended to be stable as is. Proper deadlock review and other maintenance contributions are needed in order to make it steps ahead on viability.


Preparing the ambient

The following link teaches on how to install a MapleStory v83 private server, however IT DIFFERS on what is used here: http://forum.ragezone.com/f428/maplestory-private-server-v83-741739/

Use that link ONLY AS AN ORIENTATION on where here things start to become ambiguous.

Firstly, install all the general tools required to run the server:

  • WampServer2.0i.exe -> recipient of the MySQL server.
  • mysql-query-browser.msi -> MySQL client component, visually shows the DB data and hubs queries.
  • hamachi.msi -> used for establishing a tunnelling route for the server/client communication.

Now install the Java 8 SDK & NetBeans bundle (or any other IDE of your liking):

  • jdk-8u111-nb-8_2-windows-x64.exe -> JDK/JRE 8 & IDE for building the server.

Now that the tools have been installed, test if they are working.

For WampServer:

  • Once you're done installing it, run it and you will see the Wamp icon on the bottom right corner. Left click it and click 'Put Online'.
  • In case of ORANGE ICON, change port 80 at "httpd.conf" to another, as it clashes with a Windows default port. Then Left click it again and click 'Start All Services'.
  • The Wamp icon must look completely green (if its orange or red, you have a problem).

For Hamachi:

  • Try opening it. It's that simple.

Hamachi is optional, though. You don't have to install Hamachi if you want to make the server just for use on your own machine. However, if you want to let other players access your server, consider alternatively using port-forwarding methods.


Installing the SERVER

By downloading through the Github download button, you may have obtained a ZIP file with a single "HeavenMS-master" folder on it. EXTRACT that folder.

For expediency, "HeavenMS-master" folder on this guide will be referred just as "HeavenMS". Rename it for convenience. Then, set "HeavenMS" the folder on a place of your preference. It is recommended to use "C:\Nexon\HeavenMS".

Setting up the SQL: open MySQL Query Browser, then create a new session with the parameters below, then click OK.

  • Server Host: localhost
  • Port: 3306
  • Username: root

Now it must be done CAREFULLY:

  1. File -> Open Script... -> Browse for "C:\Nexon\HeavenMS\sql" -> db_database.sql, and execute it.

  2. File -> Open Script... -> Browse for "C:\Nexon\HeavenMS\sql" -> db_drops.sql, and execute it.

Now it is OPTIONAL, you don't need to run it if you don't want, as it will simply change some NPC shops to set some new goods, not present in the original MapleStory, to sell:

  1. File -> Open Script... -> Browse for "C:\Nexon\HeavenMS\sql" -> db_shopupdate.sql, and execute it.

At the end of the execution of these SQLs, you should have installed a database schema named "heavenms". REGISTER YOUR FIRST ACCOUNT to be used in-game by creating manually an entry on the table "accounts" at that database with a login and a password.

Configure the IP you want to use for your MapleStory server in "configuration.ini" file, or set it as "localhost" if you want to run it only on your machine. Alternatively, you can use the IP given by Hamachi to use on a Hamachi network, or you can use a non-Hamachi method of port-forwarding. Neither will be approached here.

Configuring the project

Now open NetBeans, and click "New project...". Opt for creating one "with existent code".

In doubt where the project should be located, consider placing it on the same directory you've opted to place the server files.

When prompted for location of source packages, navigate through the file system reaching the server files, and select the "src" folder. Next, click "Finish".

Inside the project you might encounter some code errors, you have yet to set the core JARs of the project.

From the project hierarchy, right-click the project and select "Properties" -> "Libraries" -> "Add JAR/Folder".

Locate the folder "cores" inside the root directory of the server files and manually configure those cores on NetBeans (mina-core, slf4j-api, ...).

Finally, select "Clean and Build project" to build the JAR file for the MapleStory server.

Launching the server

Once done, make sure both WampServer and Hamachi are on and functional, then execute "launch.bat" on the base folder of the server files. If no errors were raised from this action, your MapleStory server is now online.


Installing the CLIENT

Setting up client-side ambient

The client's set-up is quite straightforward:

  1. From "ManagerMsv83.exe", install MapleStory on your folder of preference (e.g. "C:\Nexon\MapleStory") and follow their instructions.
  2. Once done, erase these files: "HShield" (folder), "ASPLnchr.exe", "MapleStory.exe" and "Patcher.exe".
  3. Extract into the client folder the "localhost.exe" from the provided link.
  4. Overwrite the original WZ files with the ones provided from either one of those folders on the Google Drive:
    • "commit397_wz" (last published RELEASE, referring to commit of same number).
    • "current_wz" (latest source update).

Editing localhost IP target

If you are not using "localhost" as the target IP on the server's config file, you will need to HEX-EDIT "localhost.exe" to fetch your IP. Track down all IP locations by searching for "Type: String" "127.0.0.1", and applying the changes wherever it fits.

To hex-edit, install the Neo Hex Editor from "free-hex-editor-neo.exe" and follow their instructions. Once done, open "localhost.exe" for editing and overwrite the IP values under the 3 addresses. Save the changes and exit the editor.

Testing the localhost

Open the "localhost.exe" client. If by any means the program did not open, and checking the server log your ping has been listened by the server and you are using Windows 8 or 10, it probably might be some compatibility issue.

In that case, extract "lolwut.exe" from "lolwut-v0.01.rar" and place it on the MapleStory client folder ("C:\Nexon\MapleStory"). Your "localhost.exe" property settings must follow these:

  • Run in compatibility mode: Windows 7;
  • Unchecked reduced color mode;
  • 640 x 480 resolution;
  • Unchecked disable display on high DPI settings;
  • Run as an administrator;
  • Opening "lolwut.exe", use Fraysa's method.

Important: should the client be refused a connection to the game server, it may be because of firewall issues. Head to the end of this file to proceed in allowing this connection through the computer's firewall. Alternatively, one can deactivate the firewall and try opening the client again.


Creating an account and logging in the game

By default, the server source is set to allow AUTO-REGISTERING. This means that, by simply typing in a "Login ID" and a "Password", you're able to create a new account.

After creating a character, experiment typing in all-chat "@commands". This will display all available commands for the current GM level your character has.

To change a character's GM level, make sure that character is not logged in, then:

  • Open MySQL Query Browser;
  • Double-click "heavenms" schema;
  • Double click "characters" table;
  • Execute the selected query;
  • Mark "Edit" flag on the MySQL Query Browser UI screen;
  • Locate your character's row on the displayed ResultSet;
  • Edit your character's GM level;
  • Hit APPLY CHANGES.

Some notes about WZ/WZ.XML EDITING

NOTE: Be extremely wary when using server-side's XMLs data being reimported into the client's WZ, as some means of synchronization between the server and client modules, this action COULD generate some kind of bugs afterwards. Client-to-server data reimporting seems to be fine, though.

Editing the v83 WZ's:

  • Use the HaRepacker 4.2.4 editor, encryption "GMS (old)".
  • Open the desired WZ for editing and use the node hierarchy to make the desired changes (copy/pasting nodes may be unreliable in rare scenarios).
  • Save the changed WZ, overwriting the original content at the client folder.
  • Finally, RE-EXPORT (using the "Private Server..." exporting option) the changed XMLs into the server's WZ.XML files, overwriting the old contents.

These steps are IMPORTANT, to maintain synchronization between the server and client modules.

The MobBookUpdate example

As an example of client WZ editing, consider the MapleMobBookUpdate tool project I developed, it updates all reported drop data on the Monster Book with what is currently being hold on the database:

To make it happen:

  • Open the MobBookUpdate project on NetBeans, located at "tools\MapleMobBookUpdate", and build it.
  • At the subfolder "lib", copy the file "MonsterBook.img.xml". This is from the original WZ v83.
  • Paste it on the "dist" subfolder.
  • Inside "dist", open the command prompt by alt+right clicking there.
  • Execute "java -jar MobBookUpdate.jar". It will generate a "MonsterBook_updated.img.xml" file.
  • At last, overwrite the "MonsterBook.img.xml" on "C:\Nexon\HeavenMS\wz\String.wz" with this file, renaming it back to "MonsterBook.img.xml".

At this point, just the server-side Monster Book has been updated with the current state of the database's drop data.

To update the client as well, open HaRepacker 4.2.2 and load "String.wz" from "C:\Nexon\MapleStory". Drop the "MonsterBook.img" node by removing it from the hierarchy tree, then import the server's "MonsterBook.img.xml".

Note: On this case, a server-to-client data transfer has been instanced. This kind of action could cause problems on the client-side if done unwary, however the nodes being updated on client-side and server-side provides no conflicts whatsoever, so this is fine. Remember, server-to-client data reimport may be problematic, whereas client-to-server data reimport is fine.

The client's WZ now has the proper item drops described by the DB updated into the MobBook drop list.

Save the changes and overwrite the older WZ on the MapleStory client folder.


Portforwarding the SERVER

To use portforward, you will need to have permission to change things on the LAN router. Access your router using the Internet browser. URLs vary accordingly with the manufacturer. To discover it, open the command prompt and type "ipconfig" and search for the "default gateway" field. The IP shown there is the URL needed to access the router. Also, look for the IP given to your machine (aka "IPv4 address" field), which will be the server one.

The default login/password also varies, so use the link http://www.routerpasswords.com/ as reference. Usually, login as "admin" and password as "password" completes the task well.

Now you have logged in the router system, search for anything related to portforwarding. Should the system prompt you between portforwarding and portriggering, pick the first, it is what we will be using.

Now, it is needed to enable the right ports for the Internet. For MapleSolaxia, it is basically needed to open ports 7575 to 7575 + (number of channels) and port 8484. Create a new custom service which enables that range of ports for the server's channel and opt to use TCP/UDP protocols. Finally, create a custom service now for using port 8484.

Optionally, if you want to host a webpage, portforward the port 80 (the HTTP port) as well.

It is not done yet, sometimes the firewalls will block connections between the LAN and the Internet. To overcome this, it is needed to create some rules for the firewall to permit these connections. Search for the advanced options with firewalls on your computer and, with it open, create two rules (one outbound and one inbound).

These rules must target "one application", "enable connections" and must target your MapleStory client (aka localhost).

After all these steps, the portforwarding process should now be complete.

heavenms's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

heavenms's Issues

moveplayer in maple map error

coming from this line
MapleMapObject[] visibleObjectsNow = visibleObjects.toArray(new MapleMapObject[visibleObjects.size()]);

something about nextnode and collections

All: 29 00 00 66 1F 84 D7 C5 FC C6 FE 05 00 EE FC D8 FE 0D 01 0E 01 00 00 06 96 00 00 EE FC D9 FE 86 00 00 00 00 00 06 03 00 00 FC FC D9 FE 05 00 00 00 2F 00 08 B1 00 00 FC FC D9 FE 00 00 00 00 2F 00 08 78 00 00 F9 FC D9 FE AC FF 00 00 2F 00 03 3C 00 11 00 00 00 00 00 00 00 80 08 C5 FC C6 FE FC FC D9 FE
Now: 11 00 00 00 00 00 00 00 80 08 C5 FC C6 FE FC FC D9 FE
java.util.ConcurrentModificationException
at java.util.LinkedHashMap$LinkedHashIterator.nextNode(Unknown Source)
at java.util.LinkedHashMap$LinkedKeyIterator.next(Unknown Source)
at java.util.AbstractCollection.toArray(Unknown Source)
at java.util.Collections$UnmodifiableCollection.toArray(Unknown Source)
at server.maps.MapleMap.movePlayer(MapleMap.java:2420)
at net.server.channel.handlers.MovePlayerHandler.handlePacket(MovePlayerHandler.java:37)
at net.MapleServerHandler.messageReceived(MapleServerHandler.java:139)

restartEventTimer Function not found.

javax.script.ScriptException: TypeError: null has no such function "restartEventTimer" in <eval> at line number 32
	at jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:470)
	at jdk.nashorn.api.scripting.NashornScriptEngine.invokeImpl(NashornScriptEngine.java:392)
	at jdk.nashorn.api.scripting.NashornScriptEngine.invokeFunction(NashornScriptEngine.java:190)
	at scripting.reactor.ReactorScriptManager.act(ReactorScriptManager.java:74)
	at server.maps.MapleReactor.hitReactor(MapleReactor.java:217)
	at net.server.channel.handlers.ReactorHitHandler.handlePacket(ReactorHitHandler.java:44)
	at net.MapleServerHandler.messageReceived(MapleServerHandler.java:139)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:690)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:417)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:47)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:765)
	at org.apache.mina.filter.codec.ProtocolCodecFilter$ProtocolDecoderOutputImpl.flush(ProtocolCodecFilter.java:407)
	at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:236)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:417)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:47)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:765)
	at org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:109)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:417)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:410)
	at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:710)
	at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:664)
	at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:653)
	at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$600(AbstractPollingIoProcessor.java:67)
	at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1124)
	at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Caused by: <eval>:32 TypeError: null has no such function "restartEventTimer"
	at jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:57)
	at jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:213)
	at jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:185)
	at jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:172)
	at jdk.nashorn.internal.runtime.linker.NashornBottomLinker.linkNull(NashornBottomLinker.java:180)
	at jdk.nashorn.internal.runtime.linker.NashornBottomLinker.getGuardedInvocation(NashornBottomLinker.java:66)
	at jdk.internal.dynalink.support.CompositeGuardingDynamicLinker.getGuardedInvocation(CompositeGuardingDynamicLinker.java:124)
	at jdk.internal.dynalink.support.LinkerServicesImpl.getGuardedInvocation(LinkerServicesImpl.java:154)
	at jdk.internal.dynalink.DynamicLinker.relink(DynamicLinker.java:253)
	at jdk.nashorn.internal.scripts.Script$Recompilation$2789$1077$\^eval\_.act(<eval>:32)
	at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:637)
	at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:494)
	at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393)
	at jdk.nashorn.api.scripting.ScriptObjectMirror.callMember(ScriptObjectMirror.java:199)
	at jdk.nashorn.api.scripting.NashornScriptEngine.invokeImpl(NashornScriptEngine.java:386)
	... 26 more

---------------------------------

Regarding Contact

Hi Ronan,

Is there any way that I can contact you for some questions? :)

Also sooner or later, I'll contribute some of my script to you!

Have fun developing!

PQ

This error seems to be showing when I try to start a pq.

capture-001

[FIX] java 8 map script issue

replace
fr = new FileReader(scriptFile);
with
fr = new FileReader(scriptFile);
portal.eval("load('nashorn:mozilla_compat.js');");

i dont use gith enough to make pull fix things so this is to help u ronan

reason i posted this is for use custom modders, we can have unlimited access to any part of the src from map scripts without having to make useless addons lol

char save currurptions with rings

cant tell if it was a hacker on server using illegal rings or what not but i do have item level up enabled and i have spingleman rings dropping from mobs.

All: 05 00 02 00 00 49 8C 86 8F
Now: 49 8C 86 8F
java.lang.NullPointerException
at tools.MaplePacketCreator.addCharStats(MaplePacketCreator.java:144)
at tools.MaplePacketCreator.addCharEntry(MaplePacketCreator.java:318)
at tools.MaplePacketCreator.getCharList(MaplePacketCreator.java:866)
at client.MapleClient.sendCharList(MapleClient.java:155)
at net.server.handlers.login.CharlistRequestHandler.handlePacket(CharlistRequestHandler.java:36)
at net.MapleServerHandler.messageReceived(MapleServerHandler.java:139)

maplemapfactory reactor fix

in ur newest reactor update u need to put it like this for it to work else server errors like no other

    myReactor.setName(MapleDataTool.getString(reactor.getChildByPath("name"), ""));
    myReactor.resetReactorActions();

found dc issue with this packet

MaplePacketCreator.modifyInventory(true, mods)

when its ran more than 16 times at once it dcs everyone on map but person gaining the exp/levels on items

applying an npc to cash shop button = char lockup

i applied this npc code to enter cash shop
NPCScriptManager.getInstance().start(c, 9000030, null);
the npc is direct clone of a fairy nearby, i talk to fairy fine over and over no issues
but for some reason when i click on cash shop button to open npc then click END CHAT
player is locked until @dispose

criticals do no damage

the bowman error u saw in gif was cuz it was critical damages

so yea thats the bug and in rev 100 we didnt see crits and in rev 101 we saw 3rd party crits some how

EDIT:
you have bugged text inside the protected AttackInfo parseDamage
i delete ALL the anti hack stuff and crits work fine now

rev100 SQL broken

not able to import new SQL files from rev100
works fine from last version however

something with TEMP DATA

New Movement Parse :)

`/*
This file is part of the OdinMS Maple Story Server
Copyright (C) 2008 Patrick Huy [email protected]
Matthias Butz [email protected]
Jan Christian Meyer [email protected]

This program is free software: you can redistribute it and/or modify
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,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
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 net.server.channel.handlers;

import java.awt.Point;
import java.util.ArrayList;
import java.util.List;

import net.AbstractMaplePacketHandler;
import server.maps.AnimatedMapleMapObject;
import server.movement.AbsoluteLifeMovement;
import server.movement.ChangeEquip;
import server.movement.JumpDownMovement;
import server.movement.LifeMovement;
import server.movement.LifeMovementFragment;
import server.movement.RelativeLifeMovement;
import server.movement.TeleportMovement;
import tools.data.input.LittleEndianAccessor;

public abstract class AbstractMovementPacketHandler extends AbstractMaplePacketHandler {

protected List<LifeMovementFragment> parseMovement(LittleEndianAccessor lea) {
    List<LifeMovementFragment> res = new ArrayList<>();
    byte numCommands = lea.readByte();
    for (byte i = 0; i < numCommands; i++) {
        byte command = lea.readByte();
        switch (command) {
            case 0: // normal move
            case 5:
            case 12:
            case 14:
            case 35:
            case 36:
            {
                short xpos = lea.readShort();
                short ypos = lea.readShort();
                short xwobble = lea.readShort();
                short ywobble = lea.readShort();
                short unk = lea.readShort();
                if (command == 12) {
                    byte newstate = lea.readByte();
                    short duration = lea.readShort();
                    AbsoluteLifeMovement alm = new AbsoluteLifeMovement(command, new Point(xpos, ypos), duration, newstate);
                    alm.setUnk(unk);
                    alm.setPixelsPerSecond(new Point(xwobble, ywobble));
                    res.add(alm);
                    break;
                }
            }
            case 1:
            case 2:
            case 13: // Shot-jump-back thing
            case 16: // Float
            case 17:
			case 18:
			case 19: // Springs on maps
            case 20: // Aran Combat Step
            case 21:
            case 22:
            case 23:
            case 24:
            case 25:
            case 26:
            case 27:
            case 28:
            case 29:
            case 30:
            case 31:
            case 32:
            case 33:
            case 34:
            {
                short xpos = lea.readShort();
                short ypos = lea.readShort();
                byte newstate = lea.readByte();
                short duration = lea.readShort();
                RelativeLifeMovement rlm = new RelativeLifeMovement(command, new Point(xpos, ypos), duration, newstate);
                res.add(rlm);
                break;
            }
            case 3:
            case 4: // tele... -.-
            case 6: // fj
            case 7: // assaulter
            case 8: // assassinate
            case 9: // rush
			case 11: //chair
            {
                short xpos = lea.readShort();
                short ypos = lea.readShort();
                short xwobble = lea.readShort();
                short ywobble = lea.readShort();
                byte newstate = lea.readByte();
                TeleportMovement tm = new TeleportMovement(command, new Point(xpos, ypos), newstate);
                tm.setPixelsPerSecond(new Point(xwobble, ywobble));
                res.add(tm);
                break;
            }
            case 10: // Change Equip
                res.add(new ChangeEquip(lea.readByte()));
                break;
            case 15: { 
                short xpos = lea.readShort();
                short ypos = lea.readShort();
                short xwobble = lea.readShort();
                short ywobble = lea.readShort();
                short unk = lea.readShort();
                short fh = lea.readShort();
                byte newstate = lea.readByte();
                short duration = lea.readShort();
                JumpDownMovement jdm = new JumpDownMovement(command, new Point(xpos, ypos), duration, newstate);
                jdm.setUnk(unk);
                jdm.setPixelsPerSecond(new Point(xwobble, ywobble));
                jdm.setFH(fh);
                res.add(jdm);
                break;
            }
            default:
				System.out.println("Unhandled Case:" + command);
                return null;
        }
    }
    return res;
}

protected void updatePosition(List<LifeMovementFragment> movement, AnimatedMapleMapObject target, int yoffset) {
    for (LifeMovementFragment move : movement) {
        if (move instanceof LifeMovement) {
            if (move instanceof AbsoluteLifeMovement) {
                Point position = ((LifeMovement) move).getPosition();
                position.y += yoffset;
                target.setPosition(position);
            }
            target.setStance(((LifeMovement) move).getNewstate());
        }
    }
}

}
`

AbstractMovementPacketHandler :)

crane in MU lung to orbis broken

the cranes doesnt teleport players to orbis

this code needs to be added to npc ID: 2090005
} else if(status == 2) { //under
if(slct == 1) {
if(cm.getMeso() < cost[1]) {
cm.sendNext("Are you sure you have enough mesos?");
cm.dispose();
} else {
cm.gainMeso(-cost[1]);
cm.warp(200000100);
cm.dispose();
}
}

possible work on dojo scripts?

everything seems fine on dojo but this line is missing
ms.getPlayer().setDojoStart();

seems that everything else is there lol

Hello!

Hello, Do you have a discord? If so whats your name and #. Great job on the updates!

PS: Your Boss Rush PQ doesn't read party leader correctly it just says "make sure your party leader talked with me"

EDIT: Your new horntail thing is broken as well. Not sure if its your isLeader method but it is broke.

NPC issues

For some of the NPC's (Steward Command NPC and LudiPQ Blue Balloon) I get errors such as;

"Cannot call method "split" of null " - Blue Balloon in LudiPQ

Monster freeze despawn?

Hello friend, boss or sir.... how can i fix monster despawn. When me and my friends killing monster, after awhile monster freeze and just stuck? They give exp and drops. But monster then freeze. Unless u do a relog everytime to fix and then it keep happening? Freeze. Please help and show how i can fix this matter thanks man

Commands issue

I seem to be having troubles with the new layout of commands. Characters at level 0 cant use any commands but when set to level 1, they can use the player commands and not the regular commands. When they are set to level 2 they cant use any commands at all ?_?

loot issue with auto consumes and nx cards in party

java.lang.NullPointerException
at provider.MapleDataTool.getIntConvert(MapleDataTool.java:101)
at server.MapleItemInformationProvider.isConsumeOnPickup(MapleItemInformationProvider.java:1080)
at client.MapleCharacter.pickupItem(MapleCharacter.java:1417)
at client.MapleCharacter.pickupItem(MapleCharacter.java:1398)
at client.command.Commands.executePlayerCommand(Commands.java:698)
at net.server.channel.handlers.GeneralChatHandler.handlePacket(GeneralChatHandler.java:53)
at net.MapleServerHandler.messageReceived(MapleServerHandler.java:139)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:690)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:417)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:47)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:765)
at org.apache.mina.filter.codec.ProtocolCodecFilter$ProtocolDecoderOutputImpl.flush(ProtocolCodecFilter.java:407)
at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:236)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:417)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:47)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:765)
at org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:109)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:417)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:410)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:710)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:664)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:653)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$600(AbstractPollingIoProcessor.java:67)
at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1124)
at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

2nd job map breaks spawns

dunno whats up but going into 2nd job map, one where u get the marbles, breaks server wide respawn timers

[FIX] Portal bug fixed

instead of using random spawn point for normal jumping we do this instead
this is built where if theres no portals on a map, itll revert to random spawn portal.
this fixes issues with mystic doors and FM market where u spawn at the main portal instead of a random portal lol

public void changeMap(int map) {
    MapleMap warpMap;
    if (getEventInstance() != null) {
        warpMap = getEventInstance().getMapInstance(map);
    } else {
        warpMap = client.getChannelServer().getMapFactory().getMap(map);
    }
    if (warpMap.getPortals() == null) {
        changeMap(warpMap, warpMap.getRandomPlayerSpawnpoint());
    } else {
        changeMap(warpMap, warpMap.getPortal(0));
    }
}

Hi Friend

How about, I can help you in some simple things clear if you can?
Like, what's up in Ragezone to add as a console?

bowman skills such as arrow bomb not killing mobs?

ive had a player on my server report to me about archers not doing damage with all skills.
he told me that it sometimes does damage and sometimes it does nothing to mobs.

the server console has shown no errors on this glitch

tot quest chain broken

some of quests in tot cant be completed.... ppl keep whining about it to me lol on my server

updatePlayerStats vs petStatUpdate

public static byte[] petStatUpdate(MapleCharacter chr) {
final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendOpcode.STAT_CHANGED.getValue());
int mask = 0;
mask |= MapleStat.PET.getValue();
mplew.write(0);
mplew.writeInt(mask);
MaplePet[] pets = chr.getPets();
for (int i = 0; i < 3; i++) {
if (pets[i] != null) {
mplew.writeInt(pets[i].getUniqueId());
mplew.writeInt(0);
} else {
mplew.writeLong(0);
}
}
mplew.write(0);
return mplew.getPacket();
}

be shifted to updatePlayerStats Example ....

} else if (statupdate.getLeft().getValue() == 0x08) { // Pet
mplew.writeLong(statupdate.getRight().longValue());
}

+1: everyone is doing it wrong man.

Guild Issue

The players on my server have run in to a guild issue where, if a regular player joins a guild, sometimes their displayed level in the guild isn't the same as their actual current level. It seems to display the level that the character was when the server first opened (if they levelled up after the server opened and before they joined the guild).

If the player joined the guild before levelling up, the correct level seems to be displayed and the levelup messages are also displayed. No idea what could be causing this... x_x

using gain item exp dcs map

using item gain exp, even inside an NPC if u gain too much exp even targeted on a single char, itll overload all other clients in the map and dc them. not you tho. i think its from packet overflow issue.

it seems changing the method to this works

public void forceUpdateItem(Item item) {
    final List<ModifyInventory> mods = new LinkedList<>();
    mods.add(new ModifyInventory(3, item));
    mods.add(new ModifyInventory(0, item));
    this.client.announce(MaplePacketCreator.modifyInventory(true, mods));
}

this.client.announce(MaplePacketCreator.modifyInventory(true, mods)); was changed added this.

Char dcs from multi target skills with item gain exp more info inside

i have no clue why but whenever i use this ANYWHERE targeted for 1 char aka killer
attacker.increaseEquipExp((getStats().getLevel() / 10) + 1);
everyone dcs on map when using skills like genesis that do mass kills but system works perfectly fine when killing under 8 targets, only dcs when genesis hits over 8 targets

i have NO clue how or why this is happening

Alliance ranks

After creating alliance, Everyone in the Alliance is a member.
-No Master or JrMaster

unknown

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.