Good evening,
I'm feeling pretty good about this update. Next week will feel better, but this week is a good one too.
I normally do my bit first, but I'm going to save it for last and go into it in some significant depth. I'll run down what everyone else is up to first instead.
Asura has got the loot engine basically done, random world drop generation is now working on his dev realm. I'll go into this in some more detail when I get to my stuff, but suffice for now to say that it works. He also has mail mostly fixed up after the Alpha testers found a bunch of bugs with it. He's doing a more clever rewrite of the reputation system as well, which he said was about 40% done. We're down to the short straws on system work before we're solely focused on fixing bugs.
Speaking of fixing bugs, I believe Daribon has finished updating all the reported gossips we were missing. You shouldn't really ever see the "Greetings, <name>!" when you talk to an NPC on Crestfall. He's been working on finishing the Chinese localization, and I think an Italian localization as well.
Rodeg has been working on a few nasty bugs, most recently a bug where your current (not max) health drops to 1 when you log in, regardless of what it was when you logged out. Bit of a weird issue but he's currently debugging it, should be fixed shortly. He also wrote up a parser to convert some of our old loot data into the new format. More on that later, too.
Keb and Schaka finally have a working dev server and have started quest scripting, so script creation is back underway. If I remember right, Keb is working on Eastern Kingdoms scripts, and Schaka is working on Kalimdor.
Now, my bit. Loot is very, very close to finished. Loot is chopped up into seven sub-categories.
1 ) Creature loot - That's every item dropped by every NPC.
2) Disenchanting loot - This determines what you get when you disenchant an item.
3) Skinning loot - This determines what you get when you skin a creature.
4) Pickpocketing loot - This determines what you get when you pick a pocket.
5) Item loot - This determines what you get when you open a container, like a clam or lockbox.
6) Gameobject loot - This determines what you get when you activate a gameobject, like a chest, or an Un'goro Power Crystal.
7) Fishing loot - This determines what you get when you reel in a fishing cast.
On a MaNGOS emulator, the way loot is generated is each creature, object, item, etc. all has a big list of every single item that can drop. That's why you see things like this chest with over 1000 potential items in it. The system assigns a percent chance to each item, and it just rolls sequentially through every item. Everything that passes gets added to the loot window. The more advanced versions will cap off at a maximum number of items, at which point it stops rolling. More advanced than that will allow you to assign items to a group, and it will stop rolling in that group once an item from that group has been generated.
Since every possible item has to be added individually to every entry, a typical creature_loot table will have something on the order of 600,000 entries.
We do things a lot differently, and we're pretty sure we're doing it the same way Blizzard did. We build templates for loot, and then give each mob a chance to roll on a subset of those templates. What this means is that instead of 600,000 entries in our creature_loot database, we have significantly less. I'll get to that.
Anyways, creature loot, item loot, and gameobject loot are the ones that were most effected by the change to our new loot system. Those ones had to be done manually in order to get them right... there's just no other way. Creature loot got finished last week, as I mentioned in my previous update. This week Rodeg wrote a parser to convert our old loot databases into the new template format, at which point I could modify them and clean them up to remove redundancies and correct errors. I finished Skinning, Pickpocketing, Fishing, and Disenchanting on my own. Those were largely correct direct from the parse and required very little work, just some cleanup. In many cases these actually grew slightly inside as we had to add an index line for each entry, but the addition is marginal compared to the savings in other areas. Item loot was partially crowd sourced, thanks to some more very helpful volunteers from the forums who helped me clean these up. The following people deserve special mention for their time and effort: seefly, Odysseu, Arthas, Caldon, Calfuron, Boxto, Roadblock, Rhazjel, Saxyy, surveillance, Nogar, and Soyoen. Gameobjects are the last section that need doing, and we're currently sitting at about 350 done out of 616. In other words, loot will be finished and ready for testing by the weekend.
Much of our savings and efficiency comes from handling world drops in a very different way that other servers. Asura and I devised a system that lets us simply assign a template to any creature, item or gameobject with a special identifier. The system then knows that the template is a level-based random item generation. It will sift through specific lists I created with all the potential random drops in it (one list for each quality), filter out any item outside of it's level range, weight the remaining items automatically so that items closer to the "level" of whatever is dropping the item are more likely to appear, and pull a random item from that list. Because it's actually only doing a handful of simple calculations, it's actually much faster than rolling individually through 600+ items, and because we can use a single template for all world drops of a given quality, it means that instead of having 600+ items assigned to each mob, we just link it to the appropriate world drop templates and it's done with no overlap. This also works for the random greens or blues or greys you get from chests and lockboxes, translating to big, big savings on database size, which is great for the server's memory, boot time, and efficiency.
I'm going to list off here the old size of each loot database so you can get an idea how many entries we're saving by eliminating redundancies. Note that these are rounded off:
7) Fishing loot: Old size 3000, new size 3300
6) Gameobject loot: Old size 11000, new size (estimated, not quite done yet) 3000
5) Item loot: Old size 4200, new size 1200
4) Pickpocket loot: Old size 9300, new size 11000
3) Skinning loot: Old size 3100, new size 4000
2) Disenchanting loot: Old size 13500, new size 20000
1) Creature loot: Old size 590,000, new size 30000
Old Total: Approximately 630k entries
New Total: Approximately 70k entries
Total change: Removed approximately 560,000 entries. Five hundred and sixty thousand (and change). The vast majority of that savings will be in creature loot, but the efficiencies carry over into everything in terms of speed of execution, so it's all worthwhile work.
What will I be doing when loot is done? Well, fixing bugs with world mob AI, fixing loot bugs, testing content, assisting the scripters, and beginning work on doing world mob AI and loot for the TBC expansion. Oh, and of course answering questions from you wonderful people on the forums here. The world really is my oyster. I'm quite happy about this, I thought these other loot tables were going to take well into Beta to finish, but with the community's help and some clever automation, we've cut that down massively and we'll have it in for testing when Beta begins in just a few weeks. I'm actually started to get excited about it.
That's all for now. As always, feel free to post questions or comments below, and thanks for your continued interest in Crestfall.