ronancpl/HeavenMS

Some fantasies about "Optimize for programmer happiness"

Opened this issue · 5 comments

A network packet sniffing tool into clientkit.

Would be really thankful if we can get some suggestions about a sniffing tool. (like HaRepacker, Hex Edit Neo)

Batch operations / Incremental import for HaRepacker

I do a lot of repeating operations modifying WZs, for example, removing all EXP/Drop cards. There are many disadvantages:

  • For 1 function, usually you need to modify a bunch of nodes.
  • Need to be really careful not modified unrelated nodes.
  • Hard to merge others modifications. (Or hard to be version controlled)

I remember there was a tool can generate an exe patch from wz to wz years ago.

NPC scripts filename.

Most NPC's filename is the code of that NPC. A renaming of 9010009.js to 9010009-duey.js might improve my happiness really a bit. Maybe a rename when modifying strategy can help this come true.

A Maple framework

It's only an academic discussion, not requesting it.
The most unreachable possibility maybe turning a "maple source" to a "maple framework".
This idea is from some existing projects like "Rack and Rails", "WSGI and Django" and other middleware based framework. There is also an interesting game development driven by mods, Minetest

A summary of the ideal situation:
Everyone starts from a GMS (or a more simplicity) when installed HeavenMS, then developers pick features from package system (maven / ant).

I think of the framework based on the truth: I need to maintain both personal modifications and keeping code up to date with upstream. Feature toggle is a nice solution for current, tho.

y785 commented

A network packet sniffing tool into clientkit.
Would be really thankful if we can get some suggestions about a sniffing tool. (like HaRepacker, Hex Edit Neo)

MapleShark is an excellent tool for sniffing packets. Aside from that, your local server with logging can handle incoming/outgoing packets. You can also hook the client methods to solve this issue, if you're determined.

NPC scripts filename.
Most NPC's filename is the code of that NPC. A renaming of 9010009.js to 9010009-duey.js might improve my happiness really a bit. Maybe a rename when modifying strategy can help this come true.

NPCs in vanilla MapleStory determine script based on the .wz script property. There are more than enough issues with odin-style scripts, but for a little clarity it wouldn't be too hard to flatten a directory tree into filenames for easier loading. So scripts/npc/9010009.js becomes scripts/npc/victoria/henesys/9010009.js.

@y785 Thanks for your information, I'll dig into MapleShark, and hooking server's handling is so great an idea.

The maple framework sounds great. I'm looking at the source now and the main problem is people think that in order to add features they have to put code in specific places such as maplecharacter.java or maplemap.java or npcconversationmanager.java and that is just not the truth. If every feature had its own package and a common place to hook into the core server, this package system could be easily accomplished.

y785 commented

The maple framework sounds great. I'm looking at the source now and the main problem is people think that in order to add features they have to put code in specific places such as maplecharacter.java or maplemap.java or npcconversationmanager.java and that is just not the truth. If every feature had its own package and a common place to hook into the core server, this package system could be easily accomplished.

You really don't need hooks into classes, look at https://github.com/y785/script-api which is a standalone scripting api for maple. It relies proxying calls, so you don't have any need to modify a preexisting class. You just write the wrappers for your object, so MapleCharacter becomes UserObject, etc.

Writing a maplestory-framework wouldn't be easy and would almost certainly exceed the scope of current project expectations(?). It would more than likely require a ground-up approach.

I don't understand how your scripting api works, or how it's relevant to the bad structuring of the code.