• Unfortunately, we have experienced significant hard drive damage that requires urgent maintenance and rebuilding. The forum will be a state of read only until we install our new drives and rebuild all the configurations needed. Please follow our Facebook page for updates, we will be back up shortly! (The forum could go offline at any given time due to the nature of the failed drives whilst awaiting the upgrades.) When you see an Incapsula error, you know we are in the process of migration.

JourneyDEV v83

Elite Diviner
Joined
Mar 24, 2015
Messages
426
Reaction score
416
Recipe system is done! It may not look like much, but the amount of background stuff going on is ridicolous. Have some ss:

Recipe Book, shows your recipes: (npc layout will probably change), the book npc is also still a bit misplaced
SYJourney - JourneyDEV v83 - RaGEZONE Forums


Recipe for an item: (it doesnt exactly match "Alchemy", I just put this item in for testing)
SYJourney - JourneyDEV v83 - RaGEZONE Forums


How the recipe system works:
When getting your crafting profession or leveling it, you will get 4 new default recipes you can try.
Other than that, all monsters have a chance to drop a recipe. There are 3 different itemids (smithing, crafting, alchemy) and you will only get (actually: see) a drop that matches your profession. When picking up the recipe, the monsters level is used to calculate the recipe level (same as profession level, newbie to master) and you will get a random recipe from that level's pool. Recipes are consume on pickup, so they won't fill your inventory but you'll get a message in chat telling you what you got.
I'll probably put some recipes in quests or bosses too but that'll be later.

Recipes have a scope of one char. They can't expire or be used up. However having the recipe is neccessary to craft something, even if you tell someone else the materials. I'll probably come up with some bs lore reason for that.
Other than that there will also be recipeless items, which can be found by trying out random materials (easter eggs).

In general there will be two types of recipes: Ones made up of materials from ardentmill, and others that require etc drops from monsters or similiar. The former are sort of the standard items and the latter special items.

As for coding, I tried to make the system as general as possible so there's really no restrictions on what I could put in. I also added a new xml file just with recipeinfo (for preloading) because there will probably be hundreds of recipes to put in.
With that in mind: If anyone has a cool idea for a recipe or a secret item or whatever or just an item you'd like to see in crafting, please throw it at me because coming up with hundreds of recipes is going to be hard.
 
Experienced Elementalist
Joined
Nov 21, 2008
Messages
297
Reaction score
38
I really like your posts SYJourney.
I'm sure that I speak for everyone when I say we appreciate that you explain the logic behind your code ITT. & hmm.... Try to add some ITG items? heheh

obligatory:
7drHiqrb - JourneyDEV v83 - RaGEZONE Forums
 

Attachments

You must be registered for see attachments list
Elite Diviner
Joined
Mar 24, 2015
Messages
426
Reaction score
416
I really like your posts SYJourney.
I'm sure that I speak for everyone when I say we appreciate that you explain the logic behind your code ITT. & hmm.... Try to add some ITG items? heheh

obligatory:
SYJourney - JourneyDEV v83 - RaGEZONE Forums

Just one thing, what are ITG items? Do you mean Trading Card Items? Those will be forged by the NLC npcs.

Adding a small update to this:
Harvesting drop logic has been changed. Previously harvesting a reactor required a random number of tries dependant on how high your level is (to not being harvestable at all).
I changed it so the drops are now tied to this, meaning: more tries = more drops, this feels alot more natural because now having to harvest for a longer time also gives more drops.
The drops overall have been increased, to make production of elixirs/power elixirs and other potions worthwhile.

The exp rate on release will be dynamic and based off levels:
Lv. 1-29: 1x
Lv. 30-69: 2x
Lv. 70-119: 3x
Lv. 120+ : 4x
(Raise takes effect after job advancement)

The reason for that is that as it stands, there is alot more low-level content in v83 than high lvl content. So if you have low rates, leveling up at high lvls just takes too much time, but if you have high rates, all the low lvl content like all the quests, training areas etc. become lost.
Another positive effect imo, is that an exp raise after a job advance makes it easier to go through the early levels of a new job where you have to skill your main attacks.

On another note, aran has been added back in because I reconsidered it, and actually it is a pretty nice class. Cygnus Knights are just redundant tough, and they will not be added, ereve will not even be on the World Map.
 
Last edited:
Junior Spellweaver
Joined
Apr 18, 2008
Messages
108
Reaction score
46
I changed it so the drops are now tied to this, meaning: more tries = more drops, this feels alot more natural because now having to harvest for a longer time also gives more drops.
The drops overall have been increased, to make production of elixirs/power elixirs and other potions worthwhile.

The exp rate on release will be dynamic and based off levels:
Lv. 1-29: 1x
Lv. 30-69: 2x
Lv. 70-119: 3x
Lv. 120+ : 4x
(Raise takes effect after job advancement)

The reason for that is that as it stands, there is alot more low-level content in v83 than high lvl content. So if you have low rates, leveling up at high lvls just takes too much time, but if you have high rates, all the low lvl content like all the quests, training areas etc. become lost.

I'm doing something very similar with my server. Only I prefer using a formula to calculate per-level, instead of having "steps" for each job. Why? Take this example: Once you reach level 30, leveling up to 31, 32, 33, etc. will be significantly easier than going from 29 to 30. It feels kind of backwards for it to be easier to level at a higher level. Here's the formula I came up with, just as a sample:
Code:
lvl * (0.05 - 0.0005 * (lvl / 5))
Note: Mine takes effect at level 21, and at level 200 your exp rate would be 6x with this formula.

EDIT: Just read the rest of your post. I guess if you like the easier leveling after job advance, go you. XD Anyway, your stuff looks great and refreshingly unique. Keep up the good works!
 
Last edited:
Elite Diviner
Joined
Mar 24, 2015
Messages
426
Reaction score
416
I'm doing something very similar with my server. Only I prefer using a formula to calculate per-level, instead of having "steps" for each job. Why? Take this example: Once you reach level 30, leveling up to 31, 32, 33, etc. will be significantly easier than going from 29 to 30. It feels kind of backwards for it to be easier to level at a higher level. Here's the formula I came up with, just as a sample:
Code:
lvl * (0.05 - 0.0005 * (lvl / 5))
Note: Mine takes effect at level 21, and at level 200 your exp rate would be 6x with this formula.

EDIT: Just read the rest of your post. I guess if you like the easier leveling after job advance, go you. XD Anyway, your stuff looks great and refreshingly unique. Keep up the good works!

Thanks for your support! I was thinking about doing the same thing at first (increase with each level) but I kinda like the idea of the first few levels being easier.
Another things is that it may be confusing to players when their exp rate increases all the time, for example if they want to compare different spots, one player will say: this spot gives me x exp but that may not be neccessarily true for another player.
 
Legendary Battlemage
Joined
Jan 23, 2013
Messages
695
Reaction score
101
When I said 'you can be more creative than that' I meant it. Having just a solid set rate for those levels, while it isn't complex, it's been done all too many times, even by myself. it's rather bland, to be honest.

Instead, look at how GMS is doing things. Kill a monster a higher level than you, you get more exp, lower, you get less.

I coded something like this once upon a time, forgot what formula i used then, but heres a video.

 
Elite Diviner
Joined
Mar 24, 2015
Messages
426
Reaction score
416
When I said 'you can be more creative than that' I meant it. Having just a solid set rate for those levels, while it isn't complex, it's been done all too many times, even by myself. it's rather bland, to be honest.

Instead, look at how GMS is doing things. Kill a monster a higher level than you, you get more exp, lower, you get less.

I coded something like this once upon a time, forgot what formula i used then, but heres a video.


I totally understand what you mean, but just think about it: You're trying to make something really complex that should be simple. I actually said this in my previous reply, the problem here is that you're adding some 'obscure' formula to something as simple as exp, which should be clear and understandable to all players.
I'm not saying that players will have trouble figuring your formula out, I'm saying that they shouldn't have to do that in the first place.

And nexon's formula that you bring up is from post Big-Bang which has completely different gameplay from v83. In post big-bang consistency doesn't matter so much, so having varied exp also is not that important. Brining in something that destroys this consistency does not match the gamplay of oldschool maple in my opinion.

Also let me just add this, I'm naturally thankful for suggestions and ideas, but 'you can be more creative than that' is a bit patronizing, and you're also just missing the point, I'm not being uncreative, I simply don't want a complex formula.
 
Legendary Battlemage
Joined
Jan 23, 2013
Messages
695
Reaction score
101
I totally understand what you mean, but just think about it: You're trying to make something really complex that should be simple. I actually said this in my previous reply, the problem here is that you're adding some 'obscure' formula to something as simple as exp, which should be clear and understandable to all players.
I'm not saying that players will have trouble figuring your formula out, I'm saying that they shouldn't have to do that in the first place.

And nexon's formula that you bring up is from post Big-Bang which has completely different gameplay from v83. In post big-bang consistency doesn't matter so much, so having varied exp also is not that important. Brining in something that destroys this consistency does not match the gamplay of oldschool maple in my opinion.

Also let me just add this, I'm naturally thankful for suggestions and ideas, but 'you can be more creative than that' is a bit patronizing, and you're also just missing the point, I'm not being uncreative, I simply don't want a complex formula.


All criticism is designed to make you think.


As far as your comment on the new exp system, while I agree, if you design a formula for it it is your system. Think about it this way; in newer versions, it is not as easy to hunt for mobs that are a higher level than you (in fact it's harder, with a 5% accuracy drop every level); but in the older maplestory, it is much easier. Whether you drop the exp gained after they reach the mobs level or not would be entirely up to somebody who decided to do such a thing.

I'm not trying to patronize you. I'm simply trying to enable you; and as a person that has played a LOT of maplestory servers, the current rate you would be going with exp seems like it would be too boring. I am not trying to be a penis; I really like what you are doing here and I am just trying to help you make it better, that is all.


Like I said, nexon released a gem with their new exp system...

a gem that they use more to penalize players than benefit players. Pre-bb maplestory is where a formula like that belonged. And I did use the formula I designed in a live server; the players loved it. It actually brought me around 15-20 extra concurrent players (thats saying a lot for a server that averaged around 60 before)
 
Elite Diviner
Joined
Mar 24, 2015
Messages
426
Reaction score
416
the current rate you would be going with exp seems like it would be too boring.
I think the main issue here is that I don't really care alot about having an 'interesting' exp rate, while you seem to think it's important.

During the whole development, I've actually been thinking alot about what made maplestory fun to me when I played it and tried to come up with things that make a server fun (in general). The exp rate actually never occured to me, so I didn't actually consider trying to come up with a fun or interesting exp rate.

What I came up with was that I wanted to revive all the low-lvl content that's lost on alot of servers and a good way to do that seemed to be to change the exp rate.

So to make it short: My exp rate was never about coming up with something interesting or creative, I just wanted a way to make the first and second job slower, without making 3rd and 4th job too hard.
 
Elite Diviner
Joined
Mar 24, 2015
Messages
426
Reaction score
416
Posting a small update: (If anyone has noticed, I'm trying to do daily updates right now, even if it's small stuff)

- Added map instance support to EventManager/MapFactory (for Herb Patch/Mine), basically what this does is just create a new mapobject for a pq so that multiple parties can do the same pq in the same channel at once
- Changed mapdatafactory to only keep mapobjects for pq maps (because of the instances) around, if every channel's mapfactory has received a non-pq map, the mapobjects are now deleted from mapdata (except npcs/portals, which are constant for almost all v83 maps)
- Added daily entrance limits to LastActionManager.java
Code:
        NPCTALK(0.5), 
        HARVEST, 
        HEAL(1.5), 
        ITEMSORT, 
        PETFOOD, 
        CATCHITEM, 
        SPECIALMOVE(500), 
        ENTERHARVEST(3600 * 24, 3),
        CPQ(3600 * 12, 3),
        CPQ2(3600 * 12, 3),
        LUDI(3600 * 12, 3),
        LUDIMAZE(3600 * 12, 3),
        PIRATE(3600 * 12, 3),
        DOJO(3600 * 24, 5),
        BPQEASY(3600 * 24, 5),
        BPQMED(3600 * 24, 5),
        BPQHARD(3600 * 24, 5),
        BPQHELL(3600 * 24, 5),
        NEOTOKYO(3600 * 12, 2),
        ARMORIA(3600 * 12, 1),
        ZAK(3600 * 24, 1), 
        HT(3600 * 24, 1),
        PB(3600 * 24, 1);
(first value: cooldown, second: count until cooldown is applied, default for cd is 1 second)

Edit: Almost a whole day later and I notice that I fked up on this. Just spent an hour searching for why I couldn't use Shadow Partner until I realized that I forgot to change SPECIALMOVE's cd to 0.5 when switching to whole seconds instead of ms...
 
Last edited:
Elite Diviner
Joined
Mar 24, 2015
Messages
426
Reaction score
416
And just when I decide that I'll post daily updates, I don't seem to have time anymore. I still managed to work on some stuff today:
- Added support for my potential system to MTS (I want to use a combination of regular store permits and meso-currency MTS for the market)
- Removed all game items from CS (because CS will be donor only), a small exception are Character Slot Expansion and the Aura Ring. Nx Clothes will also drop from monsters, but I don't want everyone to have nx immediatly like it is in other servers, it damages the oldschool feel quite a bit imo
- Rewrote the Cash Item Factory and added support for displaying "best items" (this is reset with every restart)
 
Elite Diviner
Joined
Mar 24, 2015
Messages
426
Reaction score
416
Update:
The crafting professions are almost finished. I am currently in process of wz/client editing the menu/other stuff for crafting. However I've found thatthere is no other menu or similiar I can use, so unfortunately I had to trade in the maker skill for profession based crafting. All items that you could craft in maker will be in the new profession crafting tough.

Handler for profession based crafting:
Code:
    private final MapleItemInformationProvider iip = MapleItemInformationProvider.getInstance();

    @Override
    public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
        slea.readInt();
        int toCreate = slea.readInt();
        MapleProfession prof = c.getPlayer().getProfessions().getProfession(false);
        if (c.getPlayer().getProfessions().hasRecipe(toCreate)) {
            Recipe recipe = ProfessionFactory.getInstance().getRecipe(toCreate);
            if (!MapleInventoryManipulator.checkSpace(c, toCreate, recipe.getQty(), null) || c.getPlayer().getInventory(MapleInventoryType.ETC).isFull()) {
                c.getPlayer().message("You do not have enough inventory space to craft this item.");
                return;
            }
            
            boolean hasItems = recipe.getReqItems().allMatch((item) -> c.getPlayer().getInventory(iip.getInventoryType(item.getLeft())).countById(item.getLeft()) >= item.getRight());
            byte distance = (byte) (recipe.getReqLevel().ordinal() - prof.getLevel().ordinal());
            if (hasItems) {
                if (distance <= 0 || Randomizer.nextInt(51) > distance*10) {
                    int expgain = distance*5 + 5;
                    recipe.getReqItems().forEach((item) -> MapleInventoryManipulator.removeById(c, iip.getInventoryType(item.getLeft()), item.getLeft(), item.getRight(), false, false));
                    MapleInventoryManipulator.addById(c, toCreate, recipe.getQty());
                    c.announce(MaplePacketCreator.showSpecialEffect(16));
                    if (prof.gainExp(expgain)) {
                        c.getPlayer().dropMessage(6, "Creation successful! You now have enough exp to level up your profession!");
                    } else {
                        c.getPlayer().dropMessage(6, "Creation successful! You have gained "+expgain+" "+prof.getName()+" exp!");
                    }
                } else {
                    int expgain = distance*1;
                    recipe.getReqItems().forEach((item) -> MapleInventoryManipulator.removeById(c, iip.getInventoryType(item.getLeft()), item.getLeft(), item.getRight(), false, false));
                    MapleInventoryManipulator.addById(c, ProfessionFactory.getInstance().getRandomFailCraft(prof.getType()), (short) 1);
                    if (prof.gainExp(expgain)) {
                        c.getPlayer().dropMessage(6, "Creation failed. However, you have gathered enough exp to level up your profession!");
                    } else {
                        c.getPlayer().message("Creation failed. You have gained "+expgain+" "+prof.getName()+" exp.");
                    }
                }
            } else {
                recipe.getReqItems().forEach((item) -> MapleInventoryManipulator.removeById(c, iip.getInventoryType(item.getLeft()), item.getLeft(), Math.min(item.getRight(), c.getPlayer().getInventory(iip.getInventoryType(item.getLeft())).countById(item.getLeft())), false, false));
                MapleInventoryManipulator.addById(c, ProfessionFactory.getInstance().getRandomFailCraft(prof.getType()), (short) 1);
                c.getPlayer().message("Creation failed.");
            }
        } else {
            c.getPlayer().message("You do not have the recipe to create this item");
        }
    }

As for what happens here: You first need space in the inventory of what you want to craft, and also in etc because when crafting fails, you get a random useless(?) etc item.
There's two ways to fail crafting:
If you lack the items, you will lose the items up to the amount that is required and get a random useless etc item based on your profession.
If you have the items but your level is too low, there will be a 20% fail chance per level below. In this case you will receive exp but only a small amount.
If crafting is successful you receive the correct item and a larger amount of exp.

On another note, I remade the command system. THe code for it looks a bit shady (on github) but it does in fact work the way I intended it to.
 
Last edited:
Elite Diviner
Joined
Mar 24, 2015
Messages
426
Reaction score
416
Just wanna post here, cause the last update was 2 weeks ago.
This project is not dead and I will continue development. It's just that I have exams next week so I didn't have time to work on anything. I will continue development in two weeks then.
 
Last edited:
BloopBloop
Joined
Aug 9, 2012
Messages
892
Reaction score
275
I am gonna bumb this with a crappy almost non game related suggestion. If you are bored then consider rewriting / / / / since there are a lot of interfaces that in my opinion should get removed.
 
Last edited:
Elite Diviner
Joined
Mar 24, 2015
Messages
426
Reaction score
416
I am gonna bumb this with a crappy almost non game related suggestion. If you are bored then consider rewriting / / / / since there are a lot of interfaces that in my opinion should get removed.

It's an interesting suggestion, because I'm currently writing the "complementary" to those tools on the client side. I have one question about packets, so I might as well ask it here in my thread: Do I need all of the encryptions/aes stuff and so on for my client-server communication? Or are there some that could be replaced with something simpler or removed. I'm assuming I probably need the ecryption with recvIv/sendIv, what about the rest?
I'm asking this because I'm getting quite annoyed with writing all those cryptography things that essentially just move around the bytes in my packet. (From what I can tell atleast)
 
BloopBloop
Joined
Aug 9, 2012
Messages
892
Reaction score
275
It's an interesting suggestion, because I'm currently writing the "complementary" to those tools on the client side. I have one question about packets, so I might as well ask it here in my thread: Do I need all of the encryptions/aes stuff and so on for my client-server communication? Or are there some that could be replaced with something simpler or removed. I'm assuming I probably need the ecryption with recvIv/sendIv, what about the rest?
I'm asking this because I'm getting quite annoyed with writing all those cryptography things that essentially just move around the bytes in my packet. (From what I can tell atleast)

You can remove the AES encryption in the client, shanda can also be removed in the client . @sunnyboy
(if I try I t I will duck it up the first 10 times, sunny will do it correct in just 1 time xD).

Removing the AES only allows you to remove the following function, where as UpdateIV() still needs to be called. https://github.com/MapleGits/MoopleDEV/blob/master/src/tools/MapleAESOFB.java -> "crypt" (UpdateIV still has to be called).

Removing Shanda allows you to remove this whole class: https://github.com/MapleGits/MoopleDEV/blob/master/src/net/mina/MapleCustomEncryption.java

EDIT: removed everything that i posted below of this edit, since that was to crappy explained -_-
EDIT: added it back kinda.

What you can do is the "flag" design, a design that can be seen as a way more extended version of some code in mapleshark,Thnx to @Diamondo25 for letting me steal that idea from mapleshark.

What i did: I made a new folder called "Cryptography" or a name you prever and put there all sort of encryption classes in, Shanda, AES,Sha etc.
Then i made a wrapper over those classes, the main encryption/decryption class and select based on the flags the encryption algorithms to call to encrypt/decrypt

Example of the class I use, in the design i use,i only create one instance of this class in the whole server and let every client refer to that instance. The reason for this is that in my design the aes key/ shuffle table are not static and therefore creating multiple instances is very expensive. (I am actually using multiple instances (a total of 3),but don't bother with that)
Code:
public sealed class NetworkSecurity
    {
        private readonly NetworkSecurityKinds _kinds;
        private readonly ChiperIGCrypto _chiper; //class in Crypto folder
        private readonly ChiperAESCrypto _aes; // class in crypto folder

        private readonly ushort _version;


        public NetworkSecurity(NetworkSecurityKinds kinds, ImmutableArray<byte> aes32, ImmutableArray<byte> shuffle256, uint defaultKey, ushort version)
        {
            _kinds = kinds;
            _version = version;


            if (kinds.HasFlag(NetworkSecurityKinds.Aes))
            {
                _aes = new ChiperAESCrypto(aes32);
            }


            if (kinds.HasFlag(NetworkSecurityKinds.InnoEncryptDecrypt) || kinds.HasFlag(NetworkSecurityKinds.InnoShuffle))
            {
                _chiper = new ChiperIGCrypto(shuffle256, defaultKey);
            }


        }


        public uint Encrypt(byte[] packet, int start, int count, uint key)
        {
            if (_kinds.HasFlag(NetworkSecurityKinds.Server))
            {
                return key;
            }


            if (_kinds.HasFlag(NetworkSecurityKinds.Shanda))
            {
                ShandaCrypto.Encrypt(packet, start, count);
            }


            if (_kinds.HasFlag(NetworkSecurityKinds.Aes))
            {
                _aes.Transform(packet, key);
            }


            if (_kinds.HasFlag(NetworkSecurityKinds.InnoEncryptDecrypt))
            {
                _chiper.InnoEncrypt(packet, start, count, key);
            }


            if (_kinds.HasFlag(NetworkSecurityKinds.InnoShuffle))
            {
                return _chiper.InnoHash(key);
            }


            return key;
        }


        public uint Decrypt(byte[] packet, int start, int count, uint key)
        {
            if (_kinds.HasFlag(NetworkSecurityKinds.Server))
            {
                return key;
            }


            if (_kinds.HasFlag(NetworkSecurityKinds.Aes))
            {
                _aes.Transform(packet, key);
            }


            if (_kinds.HasFlag(NetworkSecurityKinds.Shanda))
            {
                ShandaCrypto.Decrypt(packet, start, count);
            }


            if (_kinds.HasFlag(NetworkSecurityKinds.InnoEncryptDecrypt))
            {
                _chiper.InnoDecrypt(packet, start, count, key);
            }


            if (_kinds.HasFlag(NetworkSecurityKinds.InnoShuffle))
            {
                return  _chiper.InnoHash(key, System.BitConverter.ToUInt32(new byte[4] { 0xF2, 0x53, 0x50, 0xC6 } ,0));
            }


            return key;
        }


        public byte[] GeneratePacketHeader(byte[] packet, int start, int count, uint key)
        {
            var ret = new byte[4];
            var a = (((key >> 24) & 0xFF) * 0x100 + ((key >> 16) & 0xFF) ^ -(_version + 1));
            var b = a ^ count;


            ret[0] = (byte)(a % 0x100);
            ret[1] = (byte)((a - ret[0]) / 0x100);
            ret[2] = (byte)(b ^ 0x100);
            ret[3] = (byte)((b - ret[2]) / 0x100);


            return ret;
        }


        public int GetPacketLength(byte[] packet, int start, int count, uint key)
        {
            return (packet[start] + (packet[1 + start] << 8)) ^ (packet[2 + start] + (packet[3 + start] << 8));
        }


        public void Dispose()
        {
            _aes?.Dispose();
        }
    }
if your intention is to only "organize" / make the algorithms easier to read then take a look at:
https://github.com/diamondo25/MapleShark/blob/master/MapleAES.cs (C#)
java, not sure if that one works though: https://forum.ragezone.com/f427/aes-encryption-1072166/




 
Last edited:
Elite Diviner
Joined
Mar 24, 2015
Messages
426
Reaction score
416
Announcment/Update: I came up with a new idea of how to increase the depth of the gameplay mechanics by quite a bit. The stats (str/dex/int/luk) are always a no-brainer in every server. You just put most of it in one stat, or all if you can afford to go dexless/lukless whatever. I've come up with a different stat system that increases the complexity of builds:

First off, damage will not be based on stats anymore. It will naturally increase with leveling up: level * 5 = just what old stats were
Stats will have the following effects:
STR: Weapons Defense +, Max HP +, Knockback, Stance
DEX: Attacking Speed, Avoid, Accuracy
INT: Magic Defense +, Max MP +, better at professions
LUK: Drop Rates +, better rewards from gachapon and similiar, exp loss -

Leveling up will give you 4 points, so always being completely balanced is possible, altough with this setup making mules for certain purposes will be a good idea.
It's gonna be quite a while until I can implement this. I'm currently working on my own client for this server, which will allow me to implement all my custom features properly and create a good mix of old and new maplestory. I'm done with the basics, such as client-server communication, loading and using maples assets etc. Next up will be constructing character looks and then actual gameplay.
Other features I have in mind:
- 5th job, starting from level 200, which will be based on RED/Post-BB patch skills (1-4 job will still be v83)
- More focus on "gameplay" e.g. more attacks will be dodgeable and bosses will require more skill to defeat. Monster touch damage will be removed and a different pot system added.
Open beta will come in winter 2020.

Edit - just to add some reasoning to what I gave above:
All stats max out at 500. You get 4 ap per levelup, so at a max level of 250 you will get 1000 ap total. That means that you could theoretically go for a full attacker build str + dex, or a full farming/crafting build int + luk. Here are some of the formulas I will use:

Knockback: damage required to knock back a monster. 12.5 * str, maxes out at 5000 which is KB for "The Boss" (I think this is the highest kb)
Max HP +: for every 5 ap in str, one additional hp per levelup
Stance: 1% per 5 ap, so max 100%.
Attacking speed: every 50 points will reduce the delay of your attacking animation by 1
Avoid: Fixed chance of 1% per 10 ap, so max 50%
Crafting +: Increases amount of materials gained by mining/herbalism, sucession chances of crafting and a higher chance to obtain increased stats for equipment
Drop Rate +: 1% every 4 points, so max is double the normal rate
Exp loss -: By default you will lose all exp when dying. In balance, gaining the lost exp back will be easier with a 10x increased rate. Still you dont want to die, so Exp loss - will reduce the exp lost by 1% for every 4 ap.
 
Last edited:
Newbie Spellweaver
Joined
Dec 24, 2013
Messages
24
Reaction score
0
I have a private question I want to ask you not related to this thread but your inbox is full. Sorry in advance if I am breaking rules for doing this but I really want to contact you.
 
Back
Top