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!

was Odin a great Mistake to Everyone ?

Junior Spellweaver
Joined
Apr 20, 2013
Messages
103
Reaction score
24
Odin itself is coded quite decent, thats a fact
Sadly the source codes based on Odin are not (in common)
the clear disadvantage of Java is that it tend to eat your RAM and thus will slow down after a while, it also isnt executed as efficient as a language like C++, or neither as beginner friendly like .NET
While there have been near to none improvements on Java, the .NET framework became quite powerfull.
Though .NET requires windows to run, unlike Java which is cross platform (please note: linux is only free when your time has no value ;3)

I would advise people to code in C# (.NET) instead, since it looks like Java (syntax-wise).
Though I doubt this forum has anyone smart enough AND motivated enough to make a new base source for Maple
 
Newbie Spellweaver
Joined
Apr 5, 2008
Messages
34
Reaction score
3
Was Odin a mistake: I'd say it wasn't. Like many before me have said, Java is fairly simple to pick up and learn. As the first major public source out there, it rallied the entire Maplestory Private Server community. People who waited hours in a queue to get into LocalMS could now just make their own server and contribute to the code base!

Now the question becomes is it the best source. What does that really mean? I'd say that the most modular, stable, and optimized. Vana is by far the most professional server out there in my opinion. Built from the ground up in C/C++, it can take advantage of proper memory management. C/C++ allow you to strictly dictate when memory is allocated and freed, as they are mid-level programming languages. Languages such as C# and Java give you very limited control over that sort of thing, which can really stream line the process of creation, as it did with Odin, but it also comes at a cost. Optimization. Look at Minecraft servers, such as Bukkit. The amount of RAM needed for it is grotesque.

Vana is also modular with Lua scripting support and extremely simple custom command creation. It's a C++ project and Bui (the developer ATM) makes multi-platform conformity a key priority, allowing users to compile the source on Linux and Windows. With new native C++11 features coming to light, such as threading and super precise timers, Vana is moving away from third party libraries.

All in all, Odin was awesome, regardless of the quality of the code. Now though, as we know a lot more about Maplestory and its inner-workings, Vana is the dominant force in quality Maplestory private server software. While Vana development is slow, a backing would really help. Anything you can do, even if it is just hoping into IRC and talking up the developers, helps.
 
FutureLegend's Owner
Joined
Feb 10, 2011
Messages
470
Reaction score
99
C# and Java are almost the same in terms of code.
C++ may be a little faster and less memory-eating, but it's not that effective and doesn't really matter... It's wrong to state odin as a "mistake". Translating the code from Java to C++ / C# is not a problem.

You would. There was TitanMS. OdinMS caused everyone to move from it.

The only reason people moved from it is because they were leechers. Odin was basically more complete and stable.
 
Newbie Spellweaver
Joined
May 3, 2013
Messages
15
Reaction score
4
I may not be a "pro" by many standards, but allow me to say this; If you honestly believe OdinMS was a mistake to the development of private servers... do yourself and everyone else a favor and see yourself out of the section. They are one of the great pioneers of development. I'll even go so far as to say if they hadn't been around, development would have died a long time ago. People long forget there was a time when anything non-Java was next to nonexistent to the public.

Just because it was one of the first doesn't mean it is good. They should have revised their initial build before they let it be seen by anybody else. There's a reason why people are constantly asking for help, fixes, stability improvements, etc... throughout the communities that support maplestory ps development. It is because the widely used source was crap, or in other words, the foundation is weak. My base will hopefully rectify this massive mistakes in MSPS development.
 
Last edited:
Custom Title Activated
Loyal Member
Joined
Nov 14, 2008
Messages
1,025
Reaction score
641
Just because it was one of the first doesn't mean it is good. They should have revised their initial build before they let it be seen by anybody else. There's a reason why people are constantly asking for help, fixes, stability improvements, etc... throughout the communities that support maplestory ps development. It is because the widely used source was crap, or in other words, the foundation is weak. My base will hopefully rectify this massive mistakes in MSPS development.

Wait, are you rewriting the client or the server? Or both?
 
Newbie Spellweaver
Joined
May 3, 2013
Messages
15
Reaction score
1
C# and Java are almost the same in terms of code.
C++ may be a little faster and less memory-eating, but it's not that effective and doesn't really matter... It's wrong to state odin as a "mistake". Translating the code from Java to C++ / C# is not a problem.



The only reason people moved from it is because they were leechers. Odin was basically more complete and stable.

good reply i ever seen :D
i agree with your 1st line .
whoever thinks that java is shenanigans shouldnt really play maple or use a computer
if java is shenanigans , why are they still invending with so much updates for windows?

well tell me guys :D i believe everyone needs to install
java on your windows to operate some stuff . unless windows runs on C# which will be a joke .

so ima repeat again, for those people who thinks java is shenanigans .
open the window and throw away your laptop or computer please o__o
 
Joined
Apr 5, 2008
Messages
663
Reaction score
537
good reply i ever seen :D
i agree with your 1st line .
whoever thinks that java is shenanigans shouldnt really play maple or use a computer
if java is shenanigans , why are they still invending with so much updates for windows?

well tell me guys :D i believe everyone needs to install
java on your windows to operate some stuff . unless windows runs on C# which will be a joke .

so ima repeat again, for those people who thinks java is shenanigans .
open the window and throw away your laptop or computer please o__o
Windows does not come with Java by default, nor do any Windows programs require java. Ditto for all mainstream OS's. Java is a purely optional runtime which is required to run java applications.

Recently Java has had several major exploits, which let people install viruses on your computer just by visiting a malicious website. These exploits have affected both Mac and Windows. Apple even disabled Java for a while because of how terrible it was. Firefox will disable Java if you're using a version which has an exploit.

Java is shenanigans, and you can go throw your computer out the window.

zPsychotic - was Odin a great Mistake to Everyone ? - RaGEZONE Forums
 
Last edited:
Initiate Mage
Joined
May 8, 2012
Messages
1
Reaction score
0
Yes, I never wanted to have Odin, she was a huge mistake and I regret it dearly. The day of her conception, the condom broke and I didn't have any other contraceptives. It was time for Plan B, I gave the mother a morning after pill and Odin birthed a disfigured baby.

I apologize for the havoc I have unleashed onto the world.
 
Newbie Spellweaver
Joined
Dec 20, 2012
Messages
20
Reaction score
5
The code is complete and total garbage, but it gets the job done. By default, there was a poop ton of memory leaks, the original coders failed to follow proper naming conventions, failed to include basic OOP principles, and there is a ton of sloppy code because I assume they got lazy and stopped trying to make it look nice. Most of the source is just hard-coded variables, functions, etc. Otherwise it's a great base to learn from, but since first looking at it, dumping it and then learning at College and vastly expanding my knowledge I've come to realize it's a sloppy mess.

tl;dr
Sloppy code, annoying to work with. Good base to start from. Glad it gave idiots a chance to learn.
 
Joined
Jun 5, 2010
Messages
567
Reaction score
598
The code is complete and total garbage, but it gets the job done. By default, there was a poop ton of memory leaks, the original coders failed to follow proper naming conventions, failed to include basic OOP principles, and there is a ton of sloppy code because I assume they got lazy and stopped trying to make it look nice. Most of the source is just hard-coded variables, functions, etc. Otherwise it's a great base to learn from, but since first looking at it, dumping it and then learning at College and vastly expanding my knowledge I've come to realize it's a sloppy mess.

tl;dr
Sloppy code, annoying to work with. Good base to start from. Glad it gave idiots a chance to learn.

The naming conventions are fine? I don't know what you're talking about. It's standard JAVA naming conventions. As for the OOP, it uses a lot of the correct design patterns as well and a good amount. I am talking about theses: Also not all of those should be used in this product. Also can you list the memory leaks? I believe those were added later on by later developers... I'd like to see your sources for these statements as these are largely untrue (hardcoded functions? I'm sure there are variables that are hardcoded but that's only in the packets where people didn't know what the bytes did. There aren't really any magic numbers in the source code and not enough to talk about). We are talking about the original source code here and not later ones.
 
Junior Spellweaver
Joined
Sep 23, 2012
Messages
129
Reaction score
17
well it seems like a nuclear war happened here but if anyone would know that you could use Guava or apacha for external libraries if you guys think the Java Standard Library is unusefulness at all
 
Newbie Spellweaver
Joined
Dec 1, 2007
Messages
5
Reaction score
25
hiho,

I'm actually surprised to find out that there are still active communities concerned about MS private server development, furthermore OdinMS. But it makes me feel like the work of our original OdinMS team had at least some kind of impact =)

But on topic: I have to agree to the things that Dynamik said. All I can do is add some pieces to the puzzle :p

OdinMS was started as a tiny little project by Serp that he worked on from time to time. Then I joined him, later Matze. We made slow but steady progress until eventually it became something that was ready to be presented to the public. Then I uploaded that very first demonstration video on YouTube, showing Serp and me fighting Zakum and proving that OdinMS was actually a real deal. I think that must've been the point where the 'hype' really started and our forums grew beyond any expectations ;-)

But how does that answer your questions? It actually just helps understanding a thing or two.

I'd wouldn't really say it was "Badly Coded in terms of lack of knowledge", it got the job done :p But yes, of course it had bugs, exploits and other weaknesses. That was one of the main reasons the source had been released later on. But then again, like Dynamik said, it was written from scratch by three people who were at the same time learning for university/school and had very little information to base their work on. So in conclusion, I'd say we did a pretty good job :>

"would Odin been better in other Programming Language ?" Yes, I think so. But as I said, it all started as a little fun project, and at that point we weren't really concerned about things like efficiency etc. Noone even thought it could become so popular and such a big deal. We had an idea and it actually just so happened that Java was the only language we were familiar with xD

I hope I didn't bore you with my little history lesson, but I think it might have given you an idea of how the whole project started that long time ago :)

Yours,
- richan
 
Newbie Spellweaver
Joined
Nov 8, 2008
Messages
6
Reaction score
0
hiho,

I'm actually surprised to find out that there are still active communities concerned about MS private server development, furthermore OdinMS. But it makes me feel like the work of our original OdinMS team had at least some kind of impact =)

But on topic: I have to agree to the things that Dynamik said. All I can do is add some pieces to the puzzle :p

OdinMS was started as a tiny little project by Serp that he worked on from time to time. Then I joined him, later Matze. We made slow but steady progress until eventually it became something that was ready to be presented to the public. Then I uploaded that very first demonstration video on YouTube, showing Serp and me fighting Zakum and proving that OdinMS was actually a real deal. I think that must've been the point where the 'hype' really started and our forums grew beyond any expectations ;-)

But how does that answer your questions? It actually just helps understanding a thing or two.

I'd wouldn't really say it was "Badly Coded in terms of lack of knowledge", it got the job done :p But yes, of course it had bugs, exploits and other weaknesses. That was one of the main reasons the source had been released later on. But then again, like Dynamik said, it was written from scratch by three people who were at the same time learning for university/school and had very little information to base their work on. So in conclusion, I'd say we did a pretty good job :>

"would Odin been better in other Programming Language ?" Yes, I think so. But as I said, it all started as a little fun project, and at that point we weren't really concerned about things like efficiency etc. Noone even thought it could become so popular and such a big deal. We had an idea and it actually just so happened that Java was the only language we were familiar with xD

I hope I didn't bore you with my little history lesson, but I think it might have given you an idea of how the whole project started that long time ago :)

Yours,
- richan

So, uh, are you guys getting sued or what? You never updated your blog.
 
Legendary Battlemage
Joined
Jan 23, 2013
Messages
695
Reaction score
101
Whoa there, I don't think that Java sucks dicks (although PHP on the other hand...). Java is a fine language on it's own, it's just that trying to make Java run fast requires not only understanding optimization, but also understand the JVM so you can figure out why its GC is making your poop run as slow as molasses. Also, the mentality that Java gives you of not having to worry about optimization, because you think the JVM and its GC will handle that for you. This is why I hate Java. I also personally dislike Java's limited language and syntax, but do I think Java sucks? No. The problem is that most of the people here are terrible programmers and/or program only enough to get their server running and profitable. Do players care if you managed to lower your memory requirements? No. Do they care if you added some crappily coded, but awesome new feature? Of course, they love it. This is why MapleStory pservers are coded the way they are, and that won't change no matter what language you use. However, if we were using C++, the development community would be a lot smaller due to the much steeper difficulty curve. We'd have a much higher ratio of pros to noobs, but we'd also have less activity going on. So having OdinMS in Java is actually one of the better things for this community simply because most of the time nobody actually needs or is capable of using what other languages offer, and Java makes entry into the community easy.

You mean like this?


PHP:
public static void evolveWeapon(MapleClient c) {
        Equip nEquip = (Equip) c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).getItem((byte) -11);
        if (nEquip == null || nEquip.getSynthPoints() < 5) {//Change to getLevel() if you're not using my Equip Synthesis System
            c.getPlayer().dropMessage("Your weapon does not have 5 synth points.");
            return;
        }
        final byte newPos = c.getPlayer().getInventory(MapleInventoryType.EQUIP).getNextFreeSlot();
        if (newPos == -1) {
            c.getPlayer().dropMessage("Please make some space.");
            return;
        }
        final MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
        for (int i = 0; i < evo.size(); i++) {
            Entry<Pair<Integer, Integer>, Pair<Integer, Integer>> newWep = evo.get(i);
            if (nEquip.getItemId() == newWep.getKey().getLeft()) {
                MapleInventoryManipulator.unequipRemove(c, nEquip.getPosition(), newPos);

                Equip equ = (Equip) ii.getEquipById(newWep.getKey().getRight());
                StringBuilder sb = new StringBuilder("Stage ");
                for (int x = 0; x < newWep.getValue().getRight(); x++) {
                    sb.append("I");
                }
                if (sb.toString().equals("Stage IIII")) {
                    equ.setOwner(c.getPlayer().getName());
                } else {
                    equ.setOwner(sb.toString());
                }
                if (c.getPlayer().getJob().isA(MapleJob.WARRIOR) || c.getPlayer().getJob().isA(MapleJob.BRAWLER) || c.getPlayer().getJob().isA(MapleJob.DAWNWARRIOR1) || c.getPlayer().getJob().isA(MapleJob.ARAN1) || c.getPlayer().getJob().isA(MapleJob.THUNDERBREAKER1)) {
                    equ.setStr(equ.getStr() + newWep.getValue().getLeft());
                    equ.setWatk(equ.getWatk() + newWep.getValue().getLeft());
                } else if (c.getPlayer().getJob().isA(MapleJob.MAGICIAN) || c.getPlayer().getJob().isA(MapleJob.BLAZEWIZARD1)) {
                    equ.setInt(equ.getInt() + newWep.getValue().getLeft());
                    equ.setMatk(equ.getMatk() + newWep.getValue().getLeft());
                } else if (c.getPlayer().getJob().isA(MapleJob.BOWMAN) || c.getPlayer().getJob().isA(MapleJob.PIRATE) || c.getPlayer().getJob().isA(MapleJob.WINDARCHER1)) {
                    equ.setDex(equ.getDex() + newWep.getValue().getLeft());
                    equ.setWatk(equ.getWatk() + newWep.getValue().getLeft());
                } else if (c.getPlayer().getJob().isA(MapleJob.THIEF) || c.getPlayer().getJob().isA(MapleJob.NIGHTWALKER1)) {
                    equ.setLuk(equ.getLuk() + newWep.getValue().getLeft());
                    equ.setWatk(equ.getWatk() + newWep.getValue().getLeft());
                }
                MapleInventoryManipulator.addFromDrop(c, equ, false);
                MapleInventoryManipulator.equip(c, equ.getPosition(), (byte) -11);
                String itname = ii.getName(newWep.getKey().getLeft());
                String itsname = ii.getName(newWep.getKey().getRight());
                c.getPlayer().dropMessage("Your " + itname + " has evolved into a(n) " + itsname);
                break;
            }
        }
    }

:p


OP

No, odin was not a big mistake to everybody. Maybe themselves..but not everybody.
 
Joined
Apr 5, 2008
Messages
663
Reaction score
537
You mean like this?


PHP:
public static void evolveWeapon(MapleClient c) {
        Equip nEquip = (Equip) c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).getItem((byte) -11);
        if (nEquip == null || nEquip.getSynthPoints() < 5) {//Change to getLevel() if you're not using my Equip Synthesis System
            c.getPlayer().dropMessage("Your weapon does not have 5 synth points.");
            return;
        }
        final byte newPos = c.getPlayer().getInventory(MapleInventoryType.EQUIP).getNextFreeSlot();
        if (newPos == -1) {
            c.getPlayer().dropMessage("Please make some space.");
            return;
        }
        final MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
        for (int i = 0; i < evo.size(); i++) {
            Entry<Pair<Integer, Integer>, Pair<Integer, Integer>> newWep = evo.get(i);
            if (nEquip.getItemId() == newWep.getKey().getLeft()) {
                MapleInventoryManipulator.unequipRemove(c, nEquip.getPosition(), newPos);

                Equip equ = (Equip) ii.getEquipById(newWep.getKey().getRight());
                StringBuilder sb = new StringBuilder("Stage ");
                for (int x = 0; x < newWep.getValue().getRight(); x++) {
                    sb.append("I");
                }
                if (sb.toString().equals("Stage IIII")) {
                    equ.setOwner(c.getPlayer().getName());
                } else {
                    equ.setOwner(sb.toString());
                }
                if (c.getPlayer().getJob().isA(MapleJob.WARRIOR) || c.getPlayer().getJob().isA(MapleJob.BRAWLER) || c.getPlayer().getJob().isA(MapleJob.DAWNWARRIOR1) || c.getPlayer().getJob().isA(MapleJob.ARAN1) || c.getPlayer().getJob().isA(MapleJob.THUNDERBREAKER1)) {
                    equ.setStr(equ.getStr() + newWep.getValue().getLeft());
                    equ.setWatk(equ.getWatk() + newWep.getValue().getLeft());
                } else if (c.getPlayer().getJob().isA(MapleJob.MAGICIAN) || c.getPlayer().getJob().isA(MapleJob.BLAZEWIZARD1)) {
                    equ.setInt(equ.getInt() + newWep.getValue().getLeft());
                    equ.setMatk(equ.getMatk() + newWep.getValue().getLeft());
                } else if (c.getPlayer().getJob().isA(MapleJob.BOWMAN) || c.getPlayer().getJob().isA(MapleJob.PIRATE) || c.getPlayer().getJob().isA(MapleJob.WINDARCHER1)) {
                    equ.setDex(equ.getDex() + newWep.getValue().getLeft());
                    equ.setWatk(equ.getWatk() + newWep.getValue().getLeft());
                } else if (c.getPlayer().getJob().isA(MapleJob.THIEF) || c.getPlayer().getJob().isA(MapleJob.NIGHTWALKER1)) {
                    equ.setLuk(equ.getLuk() + newWep.getValue().getLeft());
                    equ.setWatk(equ.getWatk() + newWep.getValue().getLeft());
                }
                MapleInventoryManipulator.addFromDrop(c, equ, false);
                MapleInventoryManipulator.equip(c, equ.getPosition(), (byte) -11);
                String itname = ii.getName(newWep.getKey().getLeft());
                String itsname = ii.getName(newWep.getKey().getRight());
                c.getPlayer().dropMessage("Your " + itname + " has evolved into a(n) " + itsname);
                break;
            }
        }
    }

:p
That's exactly the sort of Java poop that I hate, and that's not even that bad compared to some Java I had to deal with.
Just compare it to some trivial C/C++ code :D
zPsychotic - was Odin a great Mistake to Everyone ? - RaGEZONE Forums
 
Last edited:
Banned
Banned
Joined
Feb 9, 2007
Messages
1,313
Reaction score
177
Giving my suggestion, odinms has been an inspiration for all the private server's. But, it has destroyed life too.

How?

I read that 3 million charge case when nexon sued someone. That;s a great way to destroy someone's life. No offense to odin ms. Just saying that Nexon is very evil. Especially MapleStory team... Probably thee wizet.
 
Joined
Jun 5, 2010
Messages
567
Reaction score
598
That's exactly the sort of Java poop that I hate, and that's not even that bad compared to some Java I had to deal with.
Just compare it to some trivial C/C++ code :D
zPsychotic - was Odin a great Mistake to Everyone ? - RaGEZONE Forums

If you were to code that equip thing in any language it would be the same... especially if your implementation included such functions. There isn't anyway to get around adding specific stats to an item based on your job. Eventually you'll have to check for job id.
for (int i = 0; i < evo.size(); i++) { wouldn't work though because evo isn't defined.
 
Back
Top