Freitag, 24. April 2015

[WoW Emulation] You should really read that!

Somewhere between the last few days I have read a great post of Stoneharry who is a known member on Ownedcore. I think everyone who plays on a private server should definetly read this:

Going down to where a emulator begins:
Everything sent and received between the client and a server is a packets. A packet is a message sent over the Internet that contains a header saying it's ID, and then some contents (usually some numbers, maybe a string, etc). Based on the packet ID and the contents the server or client will perform some verification to make sure it is valid and allowed, then carry out this command.
The emulator needs to read all the packets sent from the client. This part can be hard as you need to reverse engineer each packets structure, what data is in it, what does it actually mean, and so on. Then you need to reply with the EXACT data the client expects: if you don't, then the client will either crash or not listen to that data. You can begin to see the troubles we have.
However, assuming you know all the packet structures, then you are just coding what to read and what to write back and when. We now do know all the packet structures due to several leaks from Blizzard, one for almost every expansion including WoD. But knowing the structure is not enough, you also need to know the Id's and offsets. More reverse engineering, and as of Cataclysm this changes every single patch rather than on just major patches.
So you have to code the entire emulator with this data once you have figured it out, encode some sort of database system to store and load everything, work out what all the flags and enums mean (there are thousands), and code it all up. To put it in perspective, the current 3.3.5a TrinityCore emulator counts at about 300,000 lines of code if you run a line counter on all C++ files. And this isn't just simple programming: you are concurrently writing to handle thousands of connections at the same time all actively requesting and consuming content.
Okay, so this achievement has been done over many years of development. Why aren't we completely bug free yet? Why aren't the last things easy to clean up? Because the emulators are shit. Literally. You have to appreciate that these have been put together with little organisation over many years as an open source project where hundreds of amateur developers have contributed. Many classes are over 10,000 lines each! Coding practices are not used. It is hard to debug. Memory leaks.
This has been improved drastically as people go back and rewrite entire implementations and start to use proper computer science standards, but it is a mammoth task.
Then on top of all this emulator stuff, you have to do the server side content. Get all the creatures, items, etc, get all there spawns, waypoints, and spawn it all out and produce that content. A lot of this task can be automated by writing programs that listen to what is happening on retail and writing it out into your database, but it is hard to get it accurate and you will have to touch it all up.
After this huge task is done you then need to code it: tedious, boring, and LONG. Very very long. It takes so long to code the Blizzlike content, all the quests, dungeons, and so on. And think how much bug fixing Blizzard does on the PTR's? You have to somehow do that as a developer, without the player base testing it usually because you often work solo in the emulation scene. Yeah, it's not easy, and nobody wants to take on that task usually.
All of these issues and more are why we don't have perfect emulators. Especially as these are often not paid professional developers but rather amateurs learning and having fun.
TrinityCore 3.3.5a is a masterpiece considering all the effort and time that has been put into it and how well it runs now. Anyone can pick it up and run a 3.3.5a server mostly bug free and stable. This code base is being used to work on other emulators, but you begin with all the same issues described earlier in this post.
TrinityCore was created from the Mangos code base. Mangos is one of the oldest code bases. One emulator I forget the name of branched into Mangos and Antrix. Antrix became Ascent, then OpenAscent, Hearthstone, and ArcEmu. The Antrix side progressed much more quickly but employed much worse programming standards and thus while it was the most popular emulator in 2.4.3 and before, it was always buggy, unstable, and now is dead.
Mangos has continuously been worked on and was becoming the best emulator even in late TBC. TrinityCore branched from and has become even better.
Nobody appreciates the developers behind these emulators. We have put in tens of thousands of hours into this. And what do we get out of it? Thousands of people bitching about stuff not working. Servers using our base and then making millions of dollars profit from it. And often not even giving credit to us.
People have worked on it as a hobby. Others have taken that and turned it into a business. This has always been the case and always will be. But I digress from the original topic. All the big servers use TrinityCore, whatever they call it, "EpicMythicalCore", is just a rename of Trinity with a few changes for their specific needs, often with bug fixes they have found and managed themselves and they do not contribute it back.
I always focussed on custom content, as can be seen from my YouTube channel:
I have been in emulation since 2006 and participated actively. If you have any questions feel free to ask.

Thanks to people like Stoneharry newcomers have the chance to get into emulation and programming very fast. Since the date I registered to mmowned which was around 2009 I am amazed about this guys dedication.

Link to the original topic:

Keine Kommentare:

Kommentar veröffentlichen