Skip to content
This repository has been archived by the owner on Dec 28, 2019. It is now read-only.

Some fantasies about "Optimize for programmer happiness" #485

Open
xinyifly opened this issue Jul 12, 2019 · 5 comments
Open

Some fantasies about "Optimize for programmer happiness" #485

xinyifly opened this issue Jul 12, 2019 · 5 comments

Comments

@xinyifly
Copy link

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
Copy link

y785 commented Sep 1, 2019

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.

@xinyifly
Copy link
Author

xinyifly commented Sep 1, 2019

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

@CanIGetaPR
Copy link
Contributor

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
Copy link

y785 commented Sep 7, 2019

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.

@CanIGetaPR
Copy link
Contributor

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

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants