I was originally going to publish a post titled "minor update" as I connect more parts of the player to the database... but then for the last three days I made huge strides with zoning. First; I was able to find the internal table that defined all the zones in the game, and a lot of their zone names. This will aid in creating actors later as well as managing and splitting the whole world up. Here is the database table that stores all the zones and their settings:

undefined

http://i.imgur.com/hTCJ7PC.png

Next, I decoupled a lot of systems that were being jammed into the packet processor since I was just figuring things out and writing over time. Now that player login works and I have a list of zones... I moved all zone related things into a "WorldManager". This handles moving the player actors around between the various zones and also informing the player actors to send packets to their clients when needed.

With this system in place, I could write the code to signal a client to do a zone change. Suffice to say... it seems to work flawlessly, and even didn't have the weird graphically glitch Seventh Umbral had. It seems if things aren't 100%, the character will move before the screen fades causing a weird jump into the void. Not the case with this.

I also found the last bit of info about the packet header. First, game packets aren't encrypted... only compressed (lobby packets are however). Second, when you first connect, a field I didn't notice before informs the server what the connection type of that socket is... either Zone or Chat. XIV uses two connections on two separate ports. Before this code was a total mess, but after finding this field... it's much cleaner and less error prone.

Before I started this work I was going to mention: all achievement data is now loaded from the DB, and the debug and WorldMaster (now handled by the WorldManager) actors are generated by the server. This means only npc actors are left in the "hardcoded" files I use to simulate login. Soon the server will be able to do it fully on it's own w.o help from sniffed hardcode packets.