p0nk / cosmic Goto Github PK
View Code? Open in Web Editor NEWThis project forked from ronancpl/heavenms
MapleStory Global v83 server emulator
Home Page: https://discord.gg/JU5aQapVZK
License: GNU Affero General Public License v3.0
This project forked from ronancpl/heavenms
MapleStory Global v83 server emulator
Home Page: https://discord.gg/JU5aQapVZK
License: GNU Affero General Public License v3.0
Hey, WinRAR is saying the following when I unzip it. Do you mind uploading a new version?
commit397_wz-20210321T173600Z-001.zip: Checksum error in commit397_wz\Map.wz. The file is corrupt
commit397_wz-20210321T173600Z-001.zip: The archive is corrupt
Some scripts have characters in them causing them to not be processed by the engine.
cunfricht@charlie-dev:~/Projects/Cosmic$ find . -path "./scripts/*/*.js" -exec file {} \; >encoding.txt
cunfricht@charlie-dev:~/Projects/Cosmic$ cat encoding.txt | grep UTF-8
./scripts/quest/20408.js: UTF-8 Unicode text
./scripts/quest/21738.js: UTF-8 Unicode text
./scripts/npc/1092019.js: UTF-8 Unicode text, with very long lines
./scripts/npc/2012031.js: UTF-8 Unicode text
./scripts/npc/2042000.js: UTF-8 Unicode text, with very long lines
./scripts/npc/2012028.js: UTF-8 Unicode text
./scripts/npc/2012033.js: UTF-8 Unicode text
./scripts/npc/2012032.js: UTF-8 Unicode text
./scripts/npc/1090000.js: UTF-8 Unicode text, with very long lines
./scripts/npc/2012030.js: UTF-8 Unicode text
./scripts/npc/2012027.js: UTF-8 Unicode text
./scripts/npc/2012029.js: UTF-8 Unicode text
10 second delay before transitioning to view all character screen when more than one world is present.
id:1822000
name:Pet Label Ring
win10 21h2 An error is reported when the mouse is moved to the item
err:-2147467261
win10 ltsc2019 no problem
I know this is mentioned in the readme, but I can only get the localhost to work in reduced resolution compatibility mode. Might be worth looking into how to get it working on windows 10. I've seen a thread on a fix here
83中文支持能支持一下吗?
I have created an account and a hero, after maxing the stats, the maximum damage dealed by character is 199999, I'm wondering is there any way to unlimited damage cap?
Sometimes when I cc, then client gets stuck in the transition, when the screen is completely black.
This bug seems to go back pretty far, I encountered it when going back to before refactoring try-with-resources (PR #5) - it's possible this is from HeavenMS.
Should remove all the unused stuff.
CHARSET: ISO-8859-1 allows you to enter Chinese in the game and display it, but the Chinese character name is displayed as????
executing docker-compose up
for the first time failed for me since maplestory started before the database had initialised everything. It was fine the second run, presumably since the db
had set up all the tables and made itself available for connection.
Unfortunately compose doesn't have the inbuilt ability to wait until a service has passed its health checks before starting another service; instead depends_on
only waits until the container starts.
Potential solutions could be to use a wait-for
instead to await db connectivity?
Asethia in #bug-report:
A lot of the Magatia quests seem to be not functioning or bugged in some way, not entirely sure why? Fairly confident that it isn't v83 related, went through and saw tons of people talking about doing them around this time, so probably related to heavenms? Unfortunate too, given they're one of the main questlines available in the 70s.
For instance;
"The secret, Quiet passage" doesn't seem completable
You're supposed to go through to this locked door, press up, then enter a password, but it simply doesn't respond. https://youtu.be/Io5MFrh7NVg?t=400 (link to the quest with time stamp)
Similarly; a lot of the clickables in "Magatia: Home of the missing alchemist" don't respond, or don't respond for the quests they're needed to, making them impossible to complete without commands.
https://youtu.be/Io5MFrh7NVg?t=423
You also can't collect this item; Magic device, from Closed lab homun, so commands are required again to complete it.
Using Red Meat when you have a White Tiger out with 100 fullness will use up the Red Meat without adding 100 closeness.
Currently, rebirth automatically makes you a Beginner, which doesn't allow for Aran or Cygnus night rebirths. Instead, I think the player should be given the option of which path to rebirth into.
This would mean an update to MapleCharacter::executeReborn
to take in the job id to rebirth into, and an update to the rebirth script to ask for the player choice.
RankingLoginTask causes exception when run: "Unsupported conversion from TIMESTAMP to java.lang.Long". Most likely a side effect from upgrading MySQL versions.
The same issue was fixed for "tempban" and "birthday" values in "account" table.
Instead of the user modifying script/wz/config.yaml, having a separate local directory ($HOME/.local/share/cosmic?) that the server will load on top of it's own directory would be rather nice.
As an example in the local directory a user can have a config.yaml with only the changed values:
WORLDS: 2
ENABLE_PIC: false
USE_MTS: true
As well for scripts/wz folder the source likewise loads the local folder on top of it's own original folder, so the user only needs to have the scripts / wz xmls that they want to change or add.
I've found that a few classes are missing entries for skills in their java constants file (constants.skills.*
). Two examples are Aran and Bowmaster.
If you cross check the skills listed against those available on BBB hiddenstreet, you can which are missing.
They'd be useful to add in so that they could be referenced directly instead of the skill id, which would improve script readability in my opinion. Of course, it's better to have a complete list in case people wish to reference them in future, so that's another reason.
Map id: 101040001
Reactor id: 1029000
Jr. Boogie mob ids:
Cannot read property 'clearPQ' of null
It's unknown to me if KIN and NimaKIN have ever been documented in actual MapleStory (be it GMS, KMS, or otherwise).
I think KIN's current script should be changed to a !gmsalon command or the like and restoring her as changing people's job to GMs (900/910) as it appears is her function from her speech bubble. A note for current functionality is it would be ideal if hair/eye color didn't default to black but was taken from the player's existing.
As for NimaKIN, I think there should probably be a check before the dialog to see if the player can level up (if level under 200/120), assuming the dialogue is not original.
Currently rebirths can be turned on but they'll only we usable if you can find Wolf Spirit Ryko
(9010021). We couldn't find that npc anywhere that was listed in the xml files, so I modified the rebirth system to allow a specific NPC id to be passed in.
This feature seems pretty useful, so I think it should be added.
Since npcs that already have their conversations present in the wz
don't automatically use the *.js
file present and any npc should be usable, the id of the rebirth npc being set should be added to the list of npcs that will always use the override, if rebirths are enabled.
Horntail spams skills constantly. Gatekeeper attacks upon entering the map even though no character is nearby.
Likely introduced during mob skill refactoring in last merged PR.
Thank you for your continued contribution.
Currently !goto southperry sends the player to map 60000, which is an older Southperry. The correct Southperry is map 2000000.
Dojo scripts are broken since they are still using GameConstants#isDojoPartyArea, which was removed when adding MapId class with constants.
Have only checked MapleMobBookUpdate so far, which is unable to make a database connection.
If you create a custom NPC script, it isn't executed if the NPC already has a D0
entry in the wz xml.
For example, Cody has the following XML:
<imgdir name="9200000">
<string name="name" value="Cody"/>
<string name="func" value="Wizet Wizard"/>
<string name="n0" value="Hey, care to help me out??"/>
<string name="n1" value="I'm telling you, I really AM from WIZET!"/>
<string name="d0" value="What's going on? I'm Cody, the head programmer of MapleStory~"/>
<string name="d1" value="Thanks to your help, the party went bananas! Boy it was fun. anyway, hope you liked the stuff that I gave you. I'll see you around~"/>
</imgdir>
I created a new npc file (scripts/npc/9200000.js
) and gave it custom content, but it's never executed. It seems most if not all of the npcs that are already in the WZ xml files have been skipped over if they already have text. It makes sense, but it's difficult if you want to have an npc become a custom npc.
I think the scripts should take precedence if they exist, instead of being a fallback. I think scipting.npc.NPCConversationManager
may be the place to do it, but I haven't dug far enough to say for sure.
A side use-case for this is fixing incorrect wording that was on some of the NPCs in v83.
Thoughts?
P.s. I came across this issue when trying to debug why Cody wasn't registering as an npc when debug mode is enabled and I clicked him. Seems like there are multiple pathways to having a conversation with an npc, maybe something to refactor.
Level 50 chr is leeching from a level 90 mob with lv 105 chr as mvp.
As described by Shahar in the general channel on Discord on September 4th.
宠物捡取会停止攻击会禁止放技能,希望大神告诉一下方法。
The NPCs for the first Mushroom Kingdom map (106020000 - Mushroom Forest Field) are in the wrong spots.
These are all supposed to be further to the left (with the exception of the Head Security Officer, who should be close to the portal but is in fact all the way to the left of the map). You can see that the graphics for Mushking are slightly broken because he is supposed to be seated in his throne to the left (foothold 40)
It appears to be an issue in the WZ files for this map. The server XML/WZ files have different footholds assigned than in a clean Map.wz, which line up with where the characters are (mis)placed
I am happy to fix this, I think that just pulling a copy of this map from the clean v83 WZ and updating will suffice - but not sure what the process is for changes to the WZ/XML files is :-)
Changes to the src
can't be rebuilt once it's been deployed, since the user doesn't have permissions on the docker-db-data
directory which is sent to the docker build context. This causes docker-compose up --build
to complain of a docker socket issue when it's actually masking the permissions error (evident by running docker build .
in the project root).
I've fixed this locally by adding the folder to the .dockerignore
since it shouldn't be sent to the image anyway.
Rate coupons seem to be working as a buff, and expire when u die like all buffs, but the times in which they buff are when the character is saved, eg; changing channels / relogging / going into/outof cash shop
So to get the buff again after death you'll have to cc, instead of it being automatically applied after death
Attempting to enter the portal to map 261000011 (Zenumist - Hidden Room : Zenumist - Hidden Room) results in a exception, forcing a !reloadmap command.
java.lang.IndexOutOfBoundsException: readerIndex(20) + length(4) exceeds writerIndex(20): UnpooledHeapByteBuf(ridx: 20, widx: 20, cap: 20/20)
at io.netty.buffer.AbstractByteBuf.checkReadableBytes0(AbstractByteBuf.java:1442)
at io.netty.buffer.AbstractByteBuf.readIntLE(AbstractByteBuf.java:817)
at net.packet.ByteBufInPacket.readInt(ByteBufInPacket.java:33)
at net.server.channel.handlers.ChangeMapHandler.handlePacket(ChangeMapHandler.java:91)
at client.Client.channelRead(Client.java:208)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436)
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:327)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:299)
at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:722)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:658)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:584)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Thread.java:833)
When a player rebirths, the game remembers how many points have been used on which skills. This causes them to be present on the next playthrough if the player chooses the same job path.
By itself this is not an issue, but the server requires that the player use all their sp before their 3rd job advancement, which is not possible in this scenario since their skills are already maxed out. This leads to a deadlock in progression.
A possible fix is to warn the player that SP will be lost when they job advance instead of requesting they use it. Of course, this isn't in line with the authentic experience since you had to use them instead.
gm server is not implemented
its only mentioned in serverconfig and config.yaml, there isn't any use of the setting
in my understanding gmserver is supposed to allow only gm accounts to log in(user accounts wouldn't be able to login), this can be done with a check whether the account has a character with gm lvl >1
This setting is useful for server owners to check that the server is ok after a restart / update before allowing the users to log in
It will also be good idea to add a command @gmserver off, (permission only for characters with gm lvl 4/5+) to re-enable users to log in, I'm unsure about how to implement the gmserver setting but I think if it was implemented I could write the code for the command
ERROR npc.NPCScriptManager - Error performing NPC script action for npc: 1063017
javax.script.ScriptException: org.graalvm.polyglot.PolyglotException: TypeError: Access to host class server.life.MapleLifeFactoroy is not allowed or does not exist.
"MapleLifeFactoroy" should be "LifeFactory"
TypeError: elevator.getProperty(...).equals is not a function
So the family system is working nice, and summons / teleports within the family are great
but there's the exp/drop buffs that don't function
Was reported a while ago, I haven't tested it myself.
Snow Witch, Security Camera, Deet and Roi, Scholar Ghost and Shade should be killable and stop using the warp attack when the reactor on the map has been triggered.
Currently the config is built with the jar, but mounting it in would make it easier to redeploy and test changes, since it shouldn't need a full rebuild to be applied.
This one may be controversial, but I think the code style should be standardised and applied to the repo. Currently there's a mix of tabs and spaces everywhere, some different brace placement etc.
Since intellij community has become pretty standard next to vscode, I think it would be worth having a standard code style committed to the repo for both editors, then it can be applied automatically on save for js and java files.
Currently I've gotten around the tabs issue by changing the tab display to 8 characters in my IDE, which makes it look a bit better, but it's inconsistent.
Thoughts?
When in a party and killing a mob, one of the party members (the one who dealt the most damage) gets the maximum exp and the others get the minimum exp (regardless of their damage), for example, 6 characters are in a party and two attack a zakum arm, lets say it gives 100 exp, one of them dealt 51% of the damage and another 49% the rest didn't participate but are within the level interval to leech, the one who dealt 51% will get 20+80/6 exp and his friends 80/6 exp each, instead it should be, the one who hit 51% gets 51%*20 +80/6, his friend 49%*20 +80/6 and the other 4 80/6
example takes into account the default values:
EXP_SPLIT_MVP_MOD: 0.2
EXP_SPLIT_COMMON_MOD: 0.8
PARTY_BONUS_EXP_RATE: 1.0
The relevant file to look at is Monster.java
java.lang.NoSuchFieldException: modifiers
at java.base/java.lang.Class.getDeclaredField(Class.java:2549)
at tools.AutoJCE.removeCryptographyRestrictions(AutoJCE.java:32)
at net.server.Server.main(Server.java:974)
Failed to remove cryptography restrictions
Second job quests for explorers use custom quest IDs for tracking the progress (letter, marbles, proof of hero). When rebirthing, these quests are still marked as completed for the player, which prevents them from getting past the letter phase.
The custom quest IDs are not short
s either, although they need to be in order to send the packet to the client.
In order to set up the rebirth to reset completed class-specific quests, the custom quests will need to have their id changed to be < 32767
in order to be a short
, and the rebirth system will need to be extended to forfeit those quests. Currently, no method exists on the maple character to do so.
MapleCharacter::rebirth
to also forfeit any job-specific questsA declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.