| DevMaster.net |
| Home | Forums | 3D Engines Database | Wiki | Articles/Tutorials | Game Dev Jobs | IRC Chat Network | Contact Us | |
| Eternal Lands' MMORPG Postmortem: Mistakes and Lessons, Part V |
|
|
|
21/12/2005
|
||
Introduction
Before I go on with the last part of Eternal Land's history, I would like to thank everyone who had nice things to say about the previous articles, and shown support. I would also like to explain the relatively long gap between Part IV and Part V. There were quite a few reasons that delayed it, such as being very busy, and not having a lot to add. So I wanted to wait a little and write a more interesting article. In addition to that, people interested to see what's going on could also read my blog. Server AdministrationAfter I 'left' Eternal Lands, I still continued to work with the rest of the team, but not directly. It was more like 'working from the shadow', so to speak. Two of the developers started to work at the server, and they made various modifications, mostly balancing things in the game and improving various aspects of the server code, such as adding an auto harvesting system to respond to wide criticism about people getting their mouse and hands ruined in while harvesting. A few months later, in January, they both quit. I can't really blame them for that; after all, I did the same thing just a few months before. Someone had to work on the server side, because having no server developer would mean total stagnation. For an MMORPG that is equivalent to its death. Fortunately, it seems that the Universe (or God, or chance, if you like) had some other intentions, and we found another server developer. He was already a client developer, and he is from Romania, so our communication was always very good. He also knows a lot about security and Linux administration, which is extremely important for server-related work. With him in charge of the server, things started to move again at a slow pace, but they were moving nonetheless: a few new items were added, some bugs were fixed, optimizations were made. Combined with the client changes (which were more frequent and drastic, due to it's open source nature) we even had a few updates. Choosing Between Working on Barren Moon or Eternal LandsMeanwhile, I was working on my new MMORPG game, Barren Moon, with two of the volunteers that used to work for Eternal Lands. One of the Barren Moon developers had to go in the army for 4 months, so he wasn't able to contribute much to the code during that period. The other developer, while he did contribute significantly in the beginning, was either too busy or didn't have enough motivation, so he basically quit. Until July of 2005, I worked a lot on Barren Moon's server, and accomplished quite a few things, such as making the plants grow, leave seeds and die, then have new plants 'spawn' from those seeds. I even implemented a much better harvesting system, where the resources are limited, and some respawn after a while, while others don't. Most of the city building system was done, and the last thing I worked on was making a voting NPC where people can vote for their leaders, or make a referendum and remove some leader from his position, in case someone abused his power. However, while the project went out pretty well, there was too much work for one single person to handle, and Eternal Lands was not doing that good, as the server-side improvements were relatively minor and rare. Once the Barren Moon developer that was in the army (Wytter) returned, he started to work more on the Eternal Lands server, rather than Barren Moon's, and I was a bit overwhelmed with the amount of work needed to finalize BM, so I had to make a decision: Continue to work at BM and finish it in a few years, or put the project on hold and work at Eternal Lands until it's more mature and able to generate some income that we can be used to fund additional projects such as BM. Meanwhile, Wytter and another client developer (Grum) became EL server developers. They implemented quite a few nice things, such as changing the player format to a more robust one, adding a better GUI for the storage system, making the trade system a bit more secure and allowing trading from storage to storage, adding new quests, supporting the ability to listen to multiple chat channels at once, and so on. In August, we (my wife and I) went to Romania for 2 weeks, where, among other things, we met with Mihai (the Romanian developer). We did a lot of brainstorming about the future of EL, and I knew that he alone doesn't have enough time to implement all those ideas, which made me choose to return to the EL development. Other Events that Took Place in 2005Password Stealing ExploitIn around July, someone reported that he found a bug which allows him to steal passwords under special circumstances. He even provided some source code. Now, that was very nice of him to do, and we would in fact have rewarded him, had he not actually used those passwords to log in as other users. While doing this is against our rules, I would have overlooked that, had he not stolen people's items. In a short period, he robbed about 10 players, stealing their best items. Because that was unacceptable, I banned him and wrote a complaint to his ISP on this issue. We were also able to recover most of the stolen items and return them to their original owners. Just after we banned him, he posted his exploit code on quite a few EL related forums (mostly on various guild sites). To make things worse, at that time all the active server developers were offline, and I was unfamiliar with the location of the source code on the server, as they changed a lot of things after I left. Luckily, one of the previous server developers that left in January returned just a few weeks before, so he figured out which directory has the 'production' code, and together we managed to find what the problem was and fix it. Two hours after the exploit code was publicly posted, the server was patched and restarted. One of the players told me that this was the fastest response time he had ever witnessed :) And not that I want to brag about it, but when the whole World of Warcraft (WoW) items duplication exploit was found and published on slashdot.com, Blizzard denied it for quite a while, even though many people confirmed that exploit (from what I've read on Slashdot). I didn't follow the rest of the story, so I don't know what really happened and what Blizzard did about it. But the point is, we reacted faster than they did :) How the Exploit WorkedWe had a bug in the chat routine that didn't check for the length of the text. So under some circumstances (when an invalid packet with a null length was sent) the server sent back whatever was in a global buffer where all the data from the clients was stored. Normally, that buffer is overwritten every time data is received from the server, but the buffer was not cleared. So by sending a special crafted message, the server returned the content of the buffer until the first NULL character. With a program that constantly abused that bug, it was possible to get the username/password combination from the log in the string issued by a client. Getting a specific username/password pair was very hard, as that would require knowing the exact time your target is going to log in, but stealing random username/password pairs was less difficult. Macroing Detection ImplementationAnother important event that was finalized in October was some macroing detection implementation. For obvious reasons, I can't detail how it works, but here is what happened: In July we got some reports that an entire guild is using an illegal client. We even got a copy of that client, so we analyzed it and found a lot of illegal stuff in it, such as a 'war window' that automated a lot of combat-related things, giving its users a clear and unfair advantage over those using the legal client. Furthermore, it contained many 'improvements' to the manufacturing system and various other modifications that were not really illegal but we didn't approve them; so technically they were not allowed. After analyzing the client for a while, we discovered a way to reliably detect it while keeping the false alarms to a very low level. Meanwhile, someone else devised a way to catch generic macroing, regardless of the method used. The server was modified accordingly to log and report suspected macroing activity, and a week later we announced that everyone who was macroing had 3 days to admit it, in exchange for a 30% reduction of all of their experience. Those who didn't admit and were caught would get a 70% reduction. For the first 2 days, no one admitted it. On the 3rd day, they found out that we got our hands on their client so they decided to come forward. Most of them did admit, with a few exceptions. Those who did not admit were given an extra chance, 45 hours of community service (helping newbies at the newbie spawn point) in exchange for a 'mere' 30% experience reduction. Most of them took that offer and some of them even completed their 'patriotic work'. Users who didn't admit were banned. Mistakes & LessonsAs promised in the previous articles, this part will contain a list of our mistakes. Actually, "mistakes" is the wrong word, because it is my belief that everything that happens, happens for a purpose. And our mistakes did contribute to our relative success, so they weren't that bad after all. But if/when I will start it all over again, here are a few things that I will do differently:
Closing wordsThis is the last part of this post mortem series as I feel that everything that had to be said has been said. However, if in the future a lot of new things worth mentioning happen, there might be a 6th part detailing what went on from this point forward. When I get some time I will try to write an article about an MMORPG economy, providing some broad guidelines on the Hows and Whys of a possible MMORPG economic system. Those of you interested in the latest changes in EL can, again, visit my blog. I try to update it at least once a week. -- Radu Privantu |
|
|
| © 2003-2004 DevMaster.net. All Rights Reserved. Terms of Use & Privacy Policy | Want to write for us? Click here |