Well, seems the packed skill.dll
for the client does actually contain functions like core::CSkillCarpentry::CalcQuality(), but...
1 - I might need to grab updated versions, it's hard to tell with this.
2 - I'm not sure if this contains the same calculations as the server copy would.
3 - This stuff
is a hell of a lot harder to read because it's compiled machine code and not scripts or databases.
As a basic overview, Mabi runs off of databases, scripts, and actual game code.
Which one is used depends on what sort of functionality is needed and what may change.
- Database: Lists and groups of things. Items, skills, emotes, keywords, mission rewards, etc. Stuff that's resulting numbers/files and able to be changed on a whim.
- Scripts: Setup code for NPCs, events, dungeons, missions, some specific items, etc. These apparently get compiled whenever the server starts up and do functions that would normally be compiled into the game, but are in a script format instead so that they can be changed as needed without an entirely new server+client build (so sort of the same as a database, except scripts do things instead of just hold data).
- Game code: This is where the "core" of Mabi is, things like how to render the screen, what movement is, what skills actually do when they're used (the math and junk), how to parse and handle the databases, things like that. This sort of stuff is compiled machine code (basically stuff inside the .exe, not data files) which is much smaller and faster than the previous choices, but needs the game to be recompiled for any changes... and it's much, much harder to read.
For comparison...
- Database, this is part of the client's XML that determines which pet commands exist, and references the text used for pet commands.
[spoiler="XML"][Image: http://i.imgur.com/oTarOqY.png]
[/spoiler]Simple stuff, right?
- Script, here's the part of Ferghus' setup that adds Tioz armor to his overseas shops.
[spoiler="Ferghus Shop Setup"][Image: http://i.imgur.com/d2HbLi9.png]
[/spoiler]It's in a human-readable format and anybody that's done programming stuff before can read this.
- Game code... let's look at the raw form of core::CSkillCarpentry::CalcQuality()...
[spoiler="Raw Function"][Image: http://i.imgur.com/WwOzxfi.png]
[/spoiler]That's not in a human-readable format.
Thankfully decompilers can turn machine code into human-readable assembly... more or less.
[spoiler="Assembly Form"][Image: http://i.imgur.com/xMbYy3a.png]
[/spoiler]Technically better, but still far short of something as easily-read and comprehended as an xml or script.
Not to mention that once source is compiled, the compiler tosses out things the program doesn't need in order to run. This includes things like variable names, comments, the original source structure, and more info that's crucial to understanding how the function/program is intended to actually work.
So even in cases where skill functionality could potentially be duplicated in the client (and thus technically accessible), not many people would be able to read it and tell you what's going on. My assembly knowledge is limited and generally geared towards "find what modifies a thing, change that" game-hacking stuff and not actual reverse-engineering.