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!

What makes Celino so stable?

Initiate Mage
Joined
Jan 7, 2014
Messages
61
Reaction score
1
Okay so I don't know if this is.the right place to discuss this but what makes celino so stable versus other Odin based sources.

I know that celino uses switch statements in its packet processor, while other Odin based sources do not. Although I don't think it really makes a difference by using either or.

Celino uses safe-threading in player storage, maple map and for characters. It also has character transfer between channels, which reduces database load and speeds up the process of changing channels. While other Odin based sources does not.

Celino loads xml data during startup while other odinms sources don't.

So my question is are these the main factors that make Celino so stable, and the main differences between older Odin based sources? Maybe the way he wrote MapleMap?

I don't know if this would be a help thread or not, but yeah discuss, I guess?
 
Initiate Mage
Joined
Aug 12, 2012
Messages
22
Reaction score
45


I'm not sure if lithium is Celino v115, Before lithium the source was TetraSEA which was v1.12.4 and before that it was AuraSEA which was v1.08 or something which were all based off of your v82 source. After TetraSEA it was later converted to GMS to be v1.11 and later on updated to numerous versions 117, 144 etc. so it makes sense to see Fishing handlers and things coded for the SEA server in lithium.

It's possible that maybe things were taken from your v115 but it wasn't the base source, the v82 release you did was.

Also, to add to that, didnt you finish coding stateless npcs in v115? you started it v82 but didn't finish it. It was similar to how Vana did it from what I saw but I did mine a bit differently but i'm still wondering if there are better script engines for JS atm.

Anyway I chose to use your v82 source at the end and happy with my choice. Another quick question is that your own binary format you used was that after you released the leaked source/fork or did you always use it? Why didn't you go with SQL loading like MCDB for the most part?

It is certainly not a coincidence that the stuff such as PlayerStats class; aran + even tutorial (with real NPCs text) which I've coded after Big bang were in most of the public sources right now. That isn't v82 :$:

I can't verify the specific version that was leaked, but I believe it was somewhere around v102~107. Yes, they may have taken it instead of using them as a base.

What's further surprising as I was looking around what happened for the past few years is this:
http://forum.ragezone.com/f431/moopledev-v117-2-a-951125/index6.html#post7808846
http://forum.ragezone.com/f431/moopledev-v117-2-a-951125/index6.html#post7808826

And celinoSEA was based off AuraSEA. What's your point? RMZ is a better developer - that much is very obvious. His skill in Java goes far past maplestory development, and his skill in C++ even farther.

Celino was started by pepsi, then RMZero got ahold of it sometime around v100 SEA, created auraSEA, then gave 1.08 back to pepsi, and that's as far as I know. RMZ continued AuraSEA to when I released it, and arcane was based on the same source.

The latest Celino was based off of RMZero's improvements, which according to him were rather extensive.
It seems that the drama never ends :cool: now I was the one who 'stole' lol... I'm so glad to have left the community, right now I'm just surfing around while killing some time playing MapleSEA and MapleRoyals..
Celino at that version was constantly updated to the latest version each time MapleSEA releases a new patch, so how did RMZero 'gave' it back to me?
Certainly, if you've looked at RMZero's code no one in the right mind would want to copy them. Its just extreme hard coding and HexStrings everywhere. RMZero sold his source code to someone at < $500 probably during v105 as he said he was 'leaving' and it was leaked around.
I believe he was still around developing for some servers right now (yeah nexon & Asiasoft, take note). lucid, luna, solms, masteria, ellinia


There's just too much existing NPC scripts to convert.... lol not worth the time

I didn't use MCDB because it wasn't really open source back then, and you simply need to be self sustainable. I can't rely on someone to extract that for me each time there was an update.
 
Last edited:
Upvote 0
Initiate Mage
Joined
Mar 11, 2010
Messages
49
Reaction score
14
RMZero' code's really ugly. Also, scripts like NPC texts and in game features, were pretty much very "custom".
However, we must admit that he codes really fast.
Extalias coded slowly, but I felt their code's really "pretty" and good, compared to RMZero's codes.

Isn't PlayerStats in v82 as well?
Since you mentioned MapleRoyals, just curious how is MapleRoyals?

Would be interesting to see latest version of Extalia (although Extalia never released anything) and Celino before they were closed.
 
Upvote 0
Initiate Mage
Joined
Aug 12, 2012
Messages
22
Reaction score
45
RMZero' code's really ugly. Also, scripts like NPC texts and in game features, were pretty much very "custom".
However, we must admit that he codes really fast.
Extalias coded slowly, but I felt their code's really "pretty" and good, compared to RMZero's codes.

Isn't PlayerStats in v82 as well?
Since you mentioned MapleRoyals, just curious how is MapleRoyals?

Would be interesting to see latest version of Extalia (although Extalia never released anything) and Celino before they were closed.

PlayerStats made for Big bang/Chaos/Jump which was nearly identical as what I have... anyway, forget about those :laugh: I really cant be bothered now...


Yes, maple royals.. I was playing :eek:tt: it kinda brought me back to truly enjoying maplestory again. I'm not really a fan of the current maplestory, but I felt that it was a necessary step for Nexon to maintain or attract new players...
I first started when GlobalMS was in beta, and that was nearly a decade ago now! How time flies!! :scared:


I could agree to that... Extalia is the other server who truly cared about the little small details in-game, its not just about leveling.
This is also one reason I spent days to weeks just to finish stuff like MSEA like aran, evan tutorial + job advancement. Back in the days I even had to train characters myself to that level in order to 'sniff' the server side quest conversations and such... was pretty tedious work :tongue:


Unfortunately I simply can't disclose the latest unmodified source code of Celino, as much as I wanted to.. due to legal reasons. However you can bet that the majority of the work are already in public repacks of today due to leaks... certain things that were not brought forward were: (maybe more, but these are the list I can think of)

-A split project for Loginserver (loginserver.jar)
-BinWZ caching on startup
-Some official server like NPCs/quests
-Professions
-Best practices for coding (mainly to prevent exploits/anticheats)
 
Last edited:
Upvote 0
Initiate Mage
Joined
Jan 7, 2014
Messages
61
Reaction score
1
Unfortunately I simply can't disclose the latest unmodified source code of Celino, as much as I wanted to.. due to legal reasons. However you can bet that the majority of the work are already in public repacks of today due to leaks... certain things that were not brought forward were: (maybe more, but these are the list I can think of)

-A split project for Loginserver (loginserver.jar)
-BinWZ caching on startup
-Some official server like NPCs/quests
-Professions
-Best practices for coding (mainly to prevent exploits/anticheats)

Would you still happen to have ZeroFusion v62? I can't find it anywhere :(
 
Upvote 0
Initiate Mage
Joined
Jan 7, 2014
Messages
61
Reaction score
1
That's fine.
and if your source code is or was leaked, I don't think anyone ever released it but, like you said possibly just took bits here and there from it. So it makes sense.
 
Upvote 0
Junior Spellweaver
Joined
Sep 11, 2014
Messages
181
Reaction score
76
PlayerStats made for Big bang/Chaos/Jump which was nearly identical as what I have... anyway, forget about those :laugh: I really cant be bothered now...


Yes, maple royals.. I was playing :eek:tt: it kinda brought me back to truly enjoying maplestory again. I'm not really a fan of the current maplestory, but I felt that it was a necessary step for Nexon to maintain or attract new players...
I first started when GlobalMS was in beta, and that was nearly a decade ago now! How time flies!! :scared:


I could agree to that... Extalia is the other server who truly cared about the little small details in-game, its not just about leveling.
This is also one reason I spent days to weeks just to finish stuff like MSEA like aran, evan tutorial + job advancement. Back in the days I even had to train characters myself to that level in order to 'sniff' the server side quest conversations and such... was pretty tedious work :tongue:


Unfortunately I simply can't disclose the latest unmodified source code of Celino, as much as I wanted to.. due to legal reasons. However you can bet that the majority of the work are already in public repacks of today due to leaks... certain things that were not brought forward were: (maybe more, but these are the list I can think of)

-A split project for Loginserver (loginserver.jar)
-BinWZ caching on startup
-Some official server like NPCs/quests
-Professions
-Best practices for coding (mainly to prevent exploits/anticheats)

There's other servers out that that cared about other things. Extalia is just one that cared about quests, but other servers have quests too. I think my source from years ago had hundreds of quest scripts. The problem with Extalia is they just don't care about adding features until they have everything working 100%. This is probably how real life works but for the gaming community that has no idea how development works that doesn't work as well. Extalia barely had legendary potential years after opening. Extalia was missing key features that many other servers had. They probably cared too much about code quality, to the point that it's even excessive for good real world code.

For the drama there's a simple explanation. The issue with everyone in this section (you, me, and anyone else included) in 2009-2010 when it was the most active was that no one really was that good except maybe Hendi. There were a couple guys that were a lot better than others such as yourself, Flav, Moogra, Simon, and idk who else was active back in Celino days. Those guys updated packets and added new features. People just cared about being the best back then or coded the best server if they didn't care about personal recognition. I heard people DDoSed servers just so they could move up on rankings. Hating was purely business and not personal. There may have been rumors spread that go around even today. They're silly.
 
Upvote 0
Skilled Illusionist
Joined
Apr 26, 2015
Messages
302
Reaction score
77
What's wrong with the bolded part? There is nothing wrong with helpful println() statements for debugging.
If you say that in a java software company people will laugh at you.
First, you can use loggers and change the ouput. Want to send to console? Use console appender.
Want to send logs to database? use a database appender.



I forgot how many times i found this in code:
catch(Exception ex){
//Do nothing really?
}

The first version of OdinMS that can be found here:

Is really well coded and organized and also use correctly know design patterns.

I've seen worst coded bank projects.

I still cant understand the idea to change the handler's to a switch statements, with thousands non standard naming convenction static methods (like 'CancelBuffHandler', non camelcase) in same class!

For example LocalMS v88 source is still using OdinMS structure for handler's and it's much more easier to mantain and understand the code than a source based on switch statement.
 
Upvote 0
<3
Joined
Feb 4, 2011
Messages
481
Reaction score
123
If you say that in a java software company people will laugh at you.
First, you can use loggers and change the ouput. Want to send to console? Use console appender.
Want to send logs to database? use a database appender.



I forgot how many times i found this in code:


The first version of OdinMS that can be found here:

Is really well coded and organized and also use correctly know design patterns.

I've seen worst coded bank projects.

I still cant understand the idea to change the handler's to a switch statements, with thousands non standard naming convenction static methods (like 'CancelBuffHandler', non camelcase) in same class!

For example LocalMS v88 source is still using OdinMS structure for handler's and it's much more easier to mantain and understand the code than a source based on switch statement.

There is no serious issue with using println() for debugging in general. Of course, if you plan on having your code shipped or open source, then by all means, you should be using a Logger. But for a small-scale project, it doesn't really matter. You got to face the fact that many people here aren't going to release their code for open-source purposes, and they mostly amounted from leaks or people who just simply did programming for MapleStory.
 
Upvote 0
Joined
Aug 10, 2008
Messages
858
Reaction score
516
If you say that in a java software company people will laugh at you.
First, you can use loggers and change the ouput. Want to send to console? Use console appender.
Want to send logs to database? use a database appender.



I forgot how many times i found this in code:


The first version of OdinMS that can be found here:

Is really well coded and organized and also use correctly know design patterns.

I've seen worst coded bank projects.

I still cant understand the idea to change the handler's to a switch statements, with thousands non standard naming convenction static methods (like 'CancelBuffHandler', non camelcase) in same class!

For example LocalMS v88 source is still using OdinMS structure for handler's and it's much more easier to mantain and understand the code than a source based on switch statement.

Not really sure what you're claiming in terms of "java software company people," but the form of logging information doesn't really matter so long as it is logged appropriately. In a forms application, you would never see logging unless you ran the program through a terminal; but, that debug log can be pretty useful for a developer trying to figure out what's going wrong with their program in the debugging stage. It would not be appropriate to use an entire logging library like log4j to handle fairly minimal amounts of debugging such as that...

It is of course preferable to be a bit more strategic about your applications than just including a System.println here and there to debug (ideally have some global field that indicates a debugging mode perhaps), but not necessarily required so long as it disappears prior to a production build being sent out.

Most professionals I've encountered are in the mindset that getting code to function is more important than worrying about incredibly minor details like use of a logging library versus something really quickly made. Documentation is also pretty minimal in the corporate scene from what I've seen from my end. Of course, it could be that the code I'm working with is intentionally not documented in the snapshots I get to look at...

That's all corporate games though, so no barring to MapleStory development really. In a scene where, at least how I view it, the main purpose to learn and have fun playing a children's video game, such details seems incredibly pointless so long as the problems do not outweigh a certain reliability margin.

Exception swallowing can be a pretty bad practice, but sometimes I can assume that an operation will go fine 99.99% of the time fine such as reading from a file that I've already confirmed to exist and acquired read permissions from the OS. Exceptions can also be used as tools to signal application state (and be used to break execution) rather than intrinsically an error per-say.

An example of this would be blocking sockets (bare in mind that no one really uses these anymore for server applications, but they still exist as an option). Most blocking socket schemes center around a single thread blocking to await data which is then processed (and sometimes buffered between to ensure functionality) and a different thread that does any other logic while data is being received. My only way out of this loop is for the socket to be closed. For most implementations of blocking sockets, this implies that I will be blocking to read WHILE my connection is actually being closed locally/remotely (unless I intentionally join my threads locally, but that's generally frowned upon in Java).

In instances where I can know for sure that this termination is planned, I do not need to handled the exception thrown. Generally, this exception is handled with some sort of message like "Session with 127.0.0.1:39191 has been terminated." rather than spew out a bunch of information that's pointless. In some applications, I wouldn't really care if that information is logged since it would just take more buffer space on my terminal screen that I would rather use that memory for something else. I would rather remain ignorant of the timing of the socket termination since it was a planned inevitability.

I have nothing to really say with the second half of your post since I would rather use guaranteed O(1) access for getting my handlers (array), but that segment is probably not really timing critical either compared to the encryption step.
 
Upvote 0
Skilled Illusionist
Joined
Apr 26, 2015
Messages
302
Reaction score
77
Not really sure what you're claiming in terms of "java software company people," but the form of logging information doesn't really matter so long as it is logged appropriately. In a forms application, you would never see logging unless you ran the program through a terminal; but, that debug log can be pretty useful for a developer trying to figure out what's going wrong with their program in the debugging stage. It would not be appropriate to use an entire logging library like log4j to handle fairly minimal amounts of debugging such as that...

It is of course preferable to be a bit more strategic about your applications than just including a System.println here and there to debug (ideally have some global field that indicates a debugging mode perhaps), but not necessarily required so long as it disappears prior to a production build being sent out.

Most professionals I've encountered are in the mindset that getting code to function is more important than worrying about incredibly minor details like use of a logging library versus something really quickly made. Documentation is also pretty minimal in the corporate scene from what I've seen from my end. Of course, it could be that the code I'm working with is intentionally not documented in the snapshots I get to look at...

That's all corporate games though, so no barring to MapleStory development really. In a scene where, at least how I view it, the main purpose to learn and have fun playing a children's video game, such details seems incredibly pointless so long as the problems do not outweigh a certain reliability margin.

Exception swallowing can be a pretty bad practice, but sometimes I can assume that an operation will go fine 99.99% of the time fine such as reading from a file that I've already confirmed to exist and acquired read permissions from the OS. Exceptions can also be used as tools to signal application state (and be used to break execution) rather than intrinsically an error per-say.

An example of this would be blocking sockets (bare in mind that no one really uses these anymore for server applications, but they still exist as an option). Most blocking socket schemes center around a single thread blocking to await data which is then processed (and sometimes buffered between to ensure functionality) and a different thread that does any other logic while data is being received. My only way out of this loop is for the socket to be closed. For most implementations of blocking sockets, this implies that I will be blocking to read WHILE my connection is actually being closed locally/remotely (unless I intentionally join my threads locally, but that's generally frowned upon in Java).

In instances where I can know for sure that this termination is planned, I do not need to handled the exception thrown. Generally, this exception is handled with some sort of message like "Session with 127.0.0.1:39191 has been terminated." rather than spew out a bunch of information that's pointless. In some applications, I wouldn't really care if that information is logged since it would just take more buffer space on my terminal screen that I would rather use that memory for something else. I would rather remain ignorant of the timing of the socket termination since it was a planned inevitability.

I have nothing to really say with the second half of your post since I would rather use guaranteed O(1) access for getting my handlers (array), but that segment is probably not really timing critical either compared to the encryption step.
"Not really sure what you're claiming in terms of "java software company people," but the form of logging information doesn't really matter so long as it is logged appropriately"
I agree with you, but there's 2 kinds of logs. The first thing you will do when facing a problem in production is check the logs, at least in corporative applications. Normally i do use sysout during development and then change it to sf4j logger if it is something that i want to see in production logs. A logging framework is better because it allow you to backup, rename your daily logs, upload, delete, etc and it also offer's some levels to filter the logs, apply logs based on package, etc.


Sometimes going to production faster is better, but this can cause trouble in future as the code base grows without any structure.

"That's all corporate games though, so no barring to MapleStory development really. In a scene where, at least how I view it, the main purpose to learn and have fun playing a children's video game, such details seems incredibly pointless so long as the problems do not outweigh a certain reliability margin."

Yes, that's true but in the beginning the people who started odinMs did a great job on the project structure.

"Exception swallowing can be a pretty bad practice, but sometimes I can assume that an operation will go fine 99.99% of the time fine"

I agree with you, like the closeable operations in jdbc.

"I have nothing to really say with the second half of your post since I would rather use guaranteed O(1) access for getting my handlers (array), but that segment is probably not really timing critical either compared to the encryption step."
O(1)
guaranteed and a easy to mantain structure :D

 
Upvote 0
Back
Top