To sum things up... honestly.
If you're the only programmer taking care of the whole damn server, and chasing after stability, performance, and being up to date with the official server which one would you choose?
I literally coded big bang, chaos all within weeks of the official server release with real MapleSEA like NPC scripts and tutorial.
Sure you guys could nitpick over the little changes that I did, but prior to that.... what is the stability of odin really like?
Also, my question is if you're looking at the leaked celino v82 source (when I first started) or v115?
As far as I can see, Lithium source of today was based on
Celino v115 which was somehow leaked when it shut down on May 2012.
(Re-written quests/ checks, anticheats, PlayerStat, DamageParse, SEA like NPC script, Professions, Potentials )
Look into Lithium and you'll know what I mean.
These are SEA exclusive content which GMS never had, and somehow it was on GMS server? lol
handling.channel.handler.FishingHandler
events/2095_tokyo
events/AufHaven
events/CoreBlaze
events/Dunas
events/Dunas2
events/WitchTower_EASY
events/WitchTower_Med
events/WitchTower_Hard
events/Nibergen
and many more
I've been away for so long that I didn't realize that until recently
This isn't entirely true because there are cases where an ArrayList would be suboptimal, even when loading on startup. For example, say you want to load all items and you decide to use an ArrayList. ArrayLists grow by powers of 2 so if you assume that there are 16k items (16385 to be exact), then the array would grow to a size of 32768 but you would only be using 16385 of those spaces. That's like 64kb of wasted space along with the overhead of copying the data every time it grows.
Of course, this can be solved by knowing the size of the data beforehand and in most cases for MapleStory you wouldn't really use an ArrayList to load stuff at startup anyway, but the same resizing issues exist for HashMaps too. Once you know the implementation of Linked- structures (and why they are called that) it's pretty simple to identify which one you need.
Anyway most of the things OP listed are just minor improvements (or actually suboptimal replacements) and I don't think they contribute to the perceived stability that Celino has. I think one of the main things is LaiLai's redo of MapleMap with ReentrantLocks. Even though the difference between synchronized and ReentrantLocks isn't very big (probably not really noticeable in most situations), he redid the threadsafing and that probably fixed some of the random concurrency issues (like mobs stop spawning). Of course, when you fix memory leaks and don't have to restart the server every few hours because of some random concurrency problem, the server would look way more stable.
Loading XML data at startup really only affects how many times the server will have to read from disk (which is slow). It makes a big difference for Odin based sources though because Odin's parsing system is not very good and you will end up taking lots of memory from random parsing objects after every read existing until garbage collected. Caching at startup stops this, but it generally ends up wasting memory because there are some items/whatever that would never be cached in the first place, and now you have them sitting there forever just taking up memory. I think ideally you would want to design a Map implementation that prunes unpopular entries, so that you can load everything at startup and then automatically remove unnecessary things over time.
There are some things that are pretty good in Celino, but also bad things (like the CharacterTransfer is just so bad) and overall, I don't really like Celino. It threw away a lot of java conventions and things that would be considered good practice, like separate classes for each handler, and since every source now is based on it, it kind of created a downward spiral in terms of code quality in this section.
I've tested looping over objects in a synchronized block versus copying. Certain parts of the codes uses copying instead, and I believe the hit in memory is insignificant relative to speed and performance in today's computing context.
As for XML data loading at startup, no. I think you've mistaken the fact that I cached everything from a custom formatted binary WZ.
It was less than 50MB actually, and within 10 seconds.
What else do you suggest aside from CharacterTransfer then?
Of course I wouldn't want to be re-loading from the SQL database after changing channels again, it was slow as hell. Eventually my aim was to move those data over to world server but I simply don't have the time for that.
Writing a println statement is completely fine. It is for debugging purposes. There are times when you need to see whether a method is reached or not. Also, the MapleServerHandler class was barely even changed in comparison to the original OdinMS one. If I remember correctly. Celino also was a lot better than the sources that are publicly released with like 10000 memory leaks.
I wrote my own logger class for things happening within the game... it was still incomplete.
System.out.prints were never useful, and never seen anyway... it was only for debugging purpose
Celino was not that stable as what SuperLol have said
also it was it remove some key points of very important logs, I remember he wrote System.out.println() for everything he did and remove the the SLF4J logging also there was not a need to change the packetprocessor, odin packethandler was pretty decent done, unlike now it is pretty horrible and I don't know whose idea was it to put final keyword in basically everything
the logger class it terrible in the MapleServerHandler.. you meant no one could figure out how to log from SL4FJ ?
also there was other approach to fix the mobs stop spawning etc...
and It was me who said it was a rip of Vana, you can ask Bui that most of struct was a pretty much a copy of Vana back in the days and a terrible conversion destroying the Odin Version
not only did Celino had memory leaks it had some serious race condition which is still in today source
the coding quality is horrible and the removing of rmi and with some wztosql made it worst
you could do what Vana is doing on passing connection if you did not like rmi
wztosql when there is a mcdb all you need to do is code a sql reading parser if you found odin parsing system horrible
the coding quality is terrible
yeah it seems they redid the client after big bang and also screwed up the game pretty bad..
well if you could write a better one it would be great or get a fork team which is still dedicated to fork odin rev988
Reflect upon yourself, what have you done at all.