Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

JourneyDEV v83

Elite Diviner
Joined
Mar 24, 2015
Messages
426
Reaction score
416
Revamped inner ability:
SYJourney - JourneyDEV v83 - RaGEZONE Forums

Ability shown is HP 5%, Str 6%, Dex 6%. Only considers base stats.
The stats now show on a ring that is permanently in your inventory. You get the empty ring without a jewel at Level 10. The jewel's color corresponds to the ability level with blue = rare, pink = epic, unique = gold and so on.
Ring colour and stats change automatically when using the inner ability cubes (works like a consumable, not like a scroll). The message for scrolling success will probably be switched to a more appropriate effect.
The new stats are recalculated when relevant stats change and also immediatly change on the ring. Autobans and checks have been added around this concept to (hopefully) prevent all possible exploits.

Code for stats reset:
Code:
private void resetAbilityRing() {
        int ringId = getInventory(MapleInventoryType.EQUIPPED).getItem((byte) -13).getItemId();
        int rankRingId = abilities.getRingId();
        final List<ModifyInventory> mods = new ArrayList<>();
        
        Equip abilityRing;
        if (ringId != rankRingId) {
            abilityRing = new Equip(rankRingId, (byte) -13);
            Item oldRing = getInventory(MapleInventoryType.EQUIPPED).getItem((byte) -13);
            if (oldRing != null) {
                mods.add(new ModifyInventory(3, oldRing));
                getInventory(MapleInventoryType.EQUIPPED).removeItem((byte) -13);
            }
            getInventory(MapleInventoryType.EQUIPPED).addFromDB(abilityRing);
        } else {
            abilityRing = (Equip) getInventory(MapleInventoryType.EQUIPPED).getItem((byte) -13);
            abilityRing.clearStats();
            mods.add(new ModifyInventory(3, abilityRing));
        }
        
        EquipStat newtype;
        for (Map.Entry<AbilityStat, Short> entry : abilities.getTempStats().entrySet()) {
            switch (entry.getKey()) {
                case BDM: 
                    newtype = EquipStat.HANDS; 
                    break;
                default:
                    newtype = EquipStat.valueOf(entry.getKey().toString());
                    break;
            }
            abilityRing.setStat(newtype, entry.getValue());
        }
        
        mods.add(new ModifyInventory(0, abilityRing));
        client.announce(MaplePacketCreator.modifyInventory(true, mods));
        equipChanged();
    }

SYJourney - JourneyDEV v83 - RaGEZONE Forums

I had to get more cubes for this SS because the chance is pretty low...
Ability shown is: HP 8%, MP 9%, HP 7%
 
Last edited:
Elite Diviner
Joined
Mar 24, 2015
Messages
426
Reaction score
416
I find the inner ability uniquely cool. Have you tried adding a %
Well the calculation is in %, as you can see in the first SS it's supposed to be 6% Str, but gives 3 because base stat is 60.
But if you're talking about UI well, I'm still learning the basics of client editing so it's gonna take awhile until I get to a point where I can add new UI stuff like different stats/text.

Edit: I guess what I could try is just filtering if the equip is an ability ring, and then somehow add a % to the display text? Not sure how hard that is tough, I'll have to try it later.
Having a completely own system for it e.g. source sends text would be more clean tough...
 
Custom Title Activated
Loyal Member
Joined
Jan 18, 2010
Messages
3,109
Reaction score
1,139
@SYJourney You could probably do client edits, not too sure though as I'm not that experienced in client editing.

The way the client detects a stat is "STR: +%s". This is globally used for all items, and if you were to change the string to "STR: +%s %" it would end up making every item have a "%" after it's STR.
 
Elite Diviner
Joined
Mar 24, 2015
Messages
426
Reaction score
416
@SYJourney You could probably do client edits, not too sure though as I'm not that experienced in client editing.

The way the client detects a stat is "STR: +%s". This is globally used for all items, and if you were to change the string to "STR: +%s %" it would end up making every item have a "%" after it's STR.
Yeah that might be a problem without filtering it.
But I realized after posting the above that it wouldn't work anyway, simply because then I would have to make the ring +6Str for it to display %6 Str, and it would also give +6 str, whereas the actual stat bonus should be something different (player's str *0.06).
 
Custom Title Activated
Loyal Member
Joined
Jan 18, 2010
Messages
3,109
Reaction score
1,139
Yeah that might be a problem without filtering it.
But I realized after posting the above that it wouldn't work anyway, simply because then I would have to make the ring +6Str for it to display %6 Str, and it would also give +6 str, whereas the actual stat bonus should be something different (player's str *0.06).

Yeah because you're giving the actual stat, but what if you instead on specific items displayed their stats by % anyways?

One way you could do that'd be a workaround if the player knew about it (maybe the items scroll count type or something idk) is in the stat packet where it says "STR: +5" make the 5 the %, so it'd actually end up being 5% str. Then, when a player attempts to scroll the item, just block them from doing so. Or you could just continue making it the actual % conversion in the end, that's actually nice to know. Only thing is, what if their HP changes? Will the stat on the item update itself?
 
Elite Diviner
Joined
Mar 24, 2015
Messages
426
Reaction score
416
Yeah because you're giving the actual stat, but what if you instead on specific items displayed their stats by % anyways?
Yes, that is what I meant by filtering it.

One way you could do that'd be a workaround if the player knew about it (maybe the items scroll count type or something idk) is in the stat packet where it says "STR: +5" make the 5 the %, so it'd actually end up being 5% str. Then, when a player attempts to scroll the item, just block them from doing so. Or you could just continue making it the actual % conversion in the end, that's actually nice to know. Only thing is, what if their HP changes? Will the stat on the item update itself?
I'm not sure what you're meaning by scolling here. Are you talking about the item potential or the inner ability ring? Item potential would have to be displayed in the description.
And the inner ability ring cannot be scrolled, it has no slots. The way I intended it to be was to pretend that the Inner ability ring "realizes" the stats the inner ability gives. So inner ability is say, 5% HP 6% Str, which makes the ring give the stats that result, for ex. +3 str.
And the stats on the ring change automatically, it says so in my original post. When the updateSingleStat function, levelUp or changeJob are called, there's a check to see if a relevant stat changes. If it does, the inner ability temp stats (+stats) are recalculated and applied to the ring.
One thing about this is that the actual stat changes happen in a changeJob/levelUp/addStat function in my playerstats object. The abilites object uses the playerstats object to calculate its stats.


Apparently double posts are disabled? The updates below have nothing to do with my reply above.

Some small updates:
- Removed Aran/Cygnus Knights from Character Creation (properly, with UI edit, I always planned to do this)
- Cleaned up PlayerStats.java
- Removed SupremeWorld because running two worlds is probably not a good idea. The hell channel concept will probably be used for an event (put it as a boolean in ServerConstants)
- Removed some unneccesary functions/data from the source, for example loading map/street names in MapFactory
- Removed gachapon from all towns except 5 main towns, NLC and Showa (couldn't think of more rewards...lol)
- Revamped a good portion of events/npcs/other scripts to be nashorn compatible
Edit:
- Forgot, also revamped autobansystem to use my class instead of the autobanmanager. Server notices upon ban, sendPolice and similiar have been disabled to not help hackers in finding what bans and what not.
 
Last edited:
Elite Diviner
Joined
Mar 24, 2015
Messages
426
Reaction score
416
Another small update:
- Revamped the map system. Neccessary data is now only loaded once into a MapleMapData object. MapleMaps in each channel can access this data when it's needed. Not sure how much an effect this has, but it was fun to work on.
For anyone who doesn't know why I did this, in the original map system, maps were loaded once per channel, so if you had 8 channels you'd have 8x the data and loading time for every channel.
 
Joined
Oct 15, 2013
Messages
515
Reaction score
159
Now I must say, I've been looking at this thread and your updates the entire time you've posted this, and I must say you do some good work. I really like your potential ring. That is really cool/nice. Keep up your good work, and hope to see a server made soon.


Also at what chunkarama was saying with scrolling, I believe he means as an actual scroll to gain more stats; if not ops.
 
Custom Title Activated
Loyal Member
Joined
Jan 18, 2010
Messages
3,109
Reaction score
1,139
I agree with religion, it's nice to see you've been putting lots of effort into your source and didn't ditch it after a week like most people. Pretty cool seeing all the things you've implemented as well, you go way beyond just NPC's and basic edits.

Also yes, that's what I was talking about. I didn't realize you set the scrolls left to 0 so you couldn't scroll to just gain more stats. ;P
 
Elite Diviner
Joined
Mar 24, 2015
Messages
426
Reaction score
416
I got the loading of data finished, like it says in the above update. However I'm still not sure what the best way is to have a MapleMap work with a MapleMapData. For primitives like all the booleans, mapids etc. I have decided that I copy them over to MapleMap anyway, (atleast I don't need to use DataProvider again).
For other things im not too sure. Here my programming experience just lacks, altough I know how it can work, I don't know how it should work. Portals and the "MapleFootholdTree" I am right now storing in MapleMapData, and when the MapleMap needs them I do MapleMapDataFactory.getInstance().getMapData(mapid) to access this data. Is that an okay way of doing it or should I do something else?
For Monsters/Reactors etc. I have the problem that the data doubles as the actual objects, e.g. these cannot be the same for all channels because then If you kill a monster in one channel, it also dies in another...
So I have to copy these over anyway which was not my original intention. The loading time is till better but I'm sure that theres a good way to do this. Would be great if someone could give me some tips for approaching this.

Edit: It would still be good if someone could give me some advice for the above issue. On another note, I just realized that I'll probably have to rewrite MapleMap too. The thing is: MapleNPCs should be the same for every map (Can't think of anywhere in v83 where this is not the case). But because they share the oid with other life objects, I currently had to make an ugly temporary solution, where I just increment the running oid when getting an npc from MapleMapData while making a new map...
Long story short this will be a huge time sink but it also gives me the opportunity to try out some streams and stuff. MapleMap has alot of functions which could make good use of streams.

Edit: Loading and accessing MapData is done! Thanks to Hilia for helping me with this (see Thread in help section). The next update will be redone MapleMap to make better use of it.
 
Last edited:
Elite Diviner
Joined
Mar 24, 2015
Messages
426
Reaction score
416
Very small update:
- The new map system is done for now. Maps are splitted in the channel map and static map data. Map data contains all channel-independent information such as ids, portals, npcs.
- Added a new AutobanManager which will hand out bans based on static data, mostly WZ edits. For example it checks if the ids a char is created with match the MakeCharInfo.xml. (The default, character-dependent autobanmanager is partially covered by LastActionManager.java, I just used the same name)
- Revamped records system with better version of RecordsManager

Usage example of static AutobanManager:
CreateCharHandler
Code:
if (AutobanManager.checkWZNotLegit(WZCheck.MAKECHARINFO, Stream.of(top, bottom, shoes, weapon))) {
            AutobanFactory.WZ_EDIT.execute(newchar, "Char created with: "+top+" : "+bottom+" : "+shoes+" : "+weapon);
            return;
        }
CheckWZNotLegit:
Code:
private static final EnumMap<WZCheck, HashSet<Integer>> legitIDs = new EnumMap<>(WZCheck.class);
    
    public enum WZCheck {
        MAKECHARINFO;
    }

    public static boolean checkWZNotLegit(WZCheck img, Stream<Integer> ids) {
        final HashSet<Integer> legitIds = getLegitIDs(img);
        return !ids.allMatch((id) -> legitIds.contains(id));
    }

Edit: Github just reached 100th commit! This project is more than alive.
 
Last edited:
Elite Diviner
Joined
Mar 24, 2015
Messages
426
Reaction score
416
Update:
Best update yet!... :p cleaned up github. All files that were part of odinms/moopledev have been removed. License has been changed. All files made by me have now copyright claim and license added in the header. Serious poop lol.

Other stuff:
Added all reactors/items for mining profession. So far only herbalism had been added because I was lazy.
I've also decided how I'll approach crafting:
- Ardentmill will contain a npc responsible for your recipes. Recipes will be added to monster drops just like in gms.
- Players will then be able to look up recipes using this npc. They will have to remember the materials neccessary and select them for crafting. The ultimate goal here is to have a menu, which contains a number of item slots. You can then drag and drop materials into it and either get a result or a failure by chance (if crafting level is too low) or a failure by using wrong materials.

The following things will be craftable:
- Alchemy: Pots, Buff Items, Custom Scrolls
- Smithing: Special Weapons and Armor
- Acc Crafting: Special accessories
Also, profession relearning will be removed. I think that having to stick to a profession will have better effects on how things work out community-wise and so on. Another important part of this will be that recipes are going to be very rare, so that once a player find a recipe, they will be able to make money (or fame) off it by providing the service to other players.
 
Legendary Battlemage
Joined
Jan 23, 2013
Messages
695
Reaction score
101
Update:
Best update yet!... :p cleaned up github. All files that were part of odinms/moopledev have been removed. License has been changed. All files made by me have now copyright claim and license added in the header. Serious poop lol.

Other stuff:
Added all reactors/items for mining profession. So far only herbalism had been added because I was lazy.
I've also decided how I'll approach crafting:
- Ardentmill will contain a npc responsible for your recipes. Recipes will be added to monster drops just like in gms.
- Players will then be able to look up recipes using this npc. They will have to remember the materials neccessary and select them for crafting. The ultimate goal here is to have a menu, which contains a number of item slots. You can then drag and drop materials into it and either get a result or a failure by chance (if crafting level is too low) or a failure by using wrong materials.

The following things will be craftable:
- Alchemy: Pots, Buff Items, Custom Scrolls
- Smithing: Special Weapons and Armor
- Acc Crafting: Special accessories
Also, profession relearning will be removed. I think that having to stick to a profession will have better effects on how things work out community-wise and so on. Another important part of this will be that recipes are going to be very rare, so that once a player find a recipe, they will be able to make money (or fame) off it by providing the service to other players.
I assume you plan on being rather..complete with crafting, so I have to ask.


How will you manage certain things that require a buffstat? e.g. angelic blessing
 
Elite Diviner
Joined
Mar 24, 2015
Messages
426
Reaction score
416
I assume you plan on being rather..complete with crafting, so I have to ask.


How will you manage certain things that require a buffstat? e.g. angelic blessing

I haven't actually thought about the blessing items yet. But I'm pretty sure that adding new buffstats won't be a problem. Usually there's a much easier solution for these things than you'd think. And besides: I'll have to do the same for all buff items in alchemy too...

About crafting in general: Tbh, I definitely don't want my system to be 100% gms like/complete with all items they have and everything. For one thing, normal armor/weapons lv. 30-120 will not be in smithing, that's what the maker skill is for. Smithing will probably contain things that are useful for special purposes. One idea for example, is a weapon/armor set that lowers your attack (it's lv.50) but doubles meso/drop rate when equipped.

About accessory crafting: Having the rings is a pretty good idea, because it's not as boring as just putting in normal rings. However the biggest problem here will be to add the animation for it, and to be honest, I'll probably not do that because it's going to be too much work for such a small thing. Another thing that I have to add is that I'm not a big fan of all those antimations they have in new servers: If your character has a medal, an nx effect, a blessing ring, 3 totems, wings cape...the whole screen will be filled with that. And it looks too much like new gms, I don't think that it fits in a v83 context. Just the ring with it's buff will be added tough.
 
Custom Title Activated
Loyal Member
Joined
Jan 18, 2010
Messages
3,109
Reaction score
1,139
I haven't actually thought about the blessing items yet. But I'm pretty sure that adding new buffstats won't be a problem. Usually there's a much easier solution for these things than you'd think. And besides: I'll have to do the same for all buff items in alchemy too...

About crafting in general: Tbh, I definitely don't want my system to be 100% gms like/complete with all items they have and everything. For one thing, normal armor/weapons lv. 30-120 will not be in smithing, that's what the maker skill is for. Smithing will probably contain things that are useful for special purposes. One idea for example, is a weapon/armor set that lowers your attack (it's lv.50) but doubles meso/drop rate when equipped.

About accessory crafting: Having the rings is a pretty good idea, because it's not as boring as just putting in normal rings. However the biggest problem here will be to add the animation for it, and to be honest, I'll probably not do that because it's going to be too much work for such a small thing. Another thing that I have to add is that I'm not a big fan of all those antimations they have in new servers: If your character has a medal, an nx effect, a blessing ring, 3 totems, wings cape...the whole screen will be filled with that. And it looks too much like new gms, I don't think that it fits in a v83 context. Just the ring with it's buff will be added tough.

It'll be cool to see how your full crafting system looks in the end, and at least with wz edits you can almost simulate anything in lower versions (the effects). I do agree, the effects can be quite annoying. ;p

also buffstats are actually really annoying (imo anyways). and you can't just add new buffstats like that.. it's not like skill.wz editing, you can create an itembuff and just send a hack buffstat (unless w/e angelic blessing is is not a buffstat of its own)
 
Elite Diviner
Joined
Mar 24, 2015
Messages
426
Reaction score
416
It'll be cool to see how your full crafting system looks in the end, and at least with wz edits you can almost simulate anything in lower versions (the effects). I do agree, the effects can be quite annoying. ;p

also buffstats are actually really annoying (imo anyways). and you can't just add new buffstats like that.. it's not like skill.wz editing, you can create an itembuff and just send a hack buffstat (unless w/e angelic blessing is is not a buffstat of its own)

From what I can tell, the item buffs like for example, a warrior potion, just take the icon base, add the items icon and send it to the client. So my first idea would be to just add the blessing as a buff potion and while it's equipped, periodically send a packet that pretends they consumed the item. That's just an idea, but I have time to work on it right now, so I'll post an SS in a minute when I've tried (and succeded).

Also imo, that's an even cleaner way than what nexon did, because the way they did it makes the skill "angelic blessing" show up in your beginner skills which is kinda dumb.

Edit: Of course it works. I just took a random item icon. (gives 500 att, lol)...
SYJourney - JourneyDEV v83 - RaGEZONE Forums


Code:
Code:
blessing = TimerManager.getInstance().register(() -> {
            MapleItemInformationProvider.getInstance().getItemEffect(2002040).applyTo(chr);
        }, 5000, 3000);

Btw, the book on the right will be used as recipe lookup npc.

Edit2: In case you were talking about actually having it stack with other effects, [STRIKE]I guess you can just add a variable that stores the combined buffs and then sends the total effect. [/STRIKE]
This might actually be more complicated. Nevertheless the question is: Does it really have to stack? As long as the effect is better than an average potion I don't think it needs to be. It also makes it more strategic when players have to remove the ring if they want to use apples.
 
Last edited:
Legendary Battlemage
Joined
Jan 23, 2013
Messages
695
Reaction score
101
From what I can tell, the item buffs like for example, a warrior potion, just take the icon base, add the items icon and send it to the client. So my first idea would be to just add the blessing as a buff potion and while it's equipped, periodically send a packet that pretends they consumed the item. That's just an idea, but I have time to work on it right now, so I'll post an SS in a minute when I've tried (and succeded).

Also imo, that's an even cleaner way than what nexon did, because the way they did it makes the skill "angelic blessing" show up in your beginner skills which is kinda dumb.

Edit: Of course it works. I just took a random item icon. (gives 500 att, lol)...
SYJourney - JourneyDEV v83 - RaGEZONE Forums


Code:
Code:
blessing = TimerManager.getInstance().register(() -> {
            MapleItemInformationProvider.getInstance().getItemEffect(2002040).applyTo(chr);
        }, 5000, 3000);

Btw, the book on the right will be used as recipe lookup npc.

Edit2: In case you were talking about actually having it stack with other effects, [STRIKE]I guess you can just add a variable that stores the combined buffs and then sends the total effect. [/STRIKE]
This might actually be more complicated. Nevertheless the question is: Does it really have to stack? As long as the effect is better than an average potion I don't think it needs to be. It also makes it more strategic when players have to remove the ring if they want to use apples.
Yes. it does. Having to remove the ring to use an apple is downright annoying. :'[
 
Elite Diviner
Joined
Mar 24, 2015
Messages
426
Reaction score
416
Yes. it does. Having to remove the ring to use an apple is downright annoying. :'[
It's good that you say that, sometimes my ideas are just to hardcore hehe...
Then it'll just be a system where the rings buff is only applied if a higher atk stat isn't already in effect.
 
Back
Top