I've made a lot of progress with npcs, figuring out the last few packets related to actors. Using the exe's RTTI data (debug info left over from when the game was compiled) there was, I was able to find the true names for a lot of the packets. Here are some of the ones I found:
0x12E: SetTalkEventCondition 0x16B: SetNoticeEventCondition 0x16C: SetEmoteEventCondition 0x16F: SetPushEventConditionWithCircle 0x171: SetPushEventConditionWithFan 0x175: SetPushEventConditionWithTriggerBox 0x12F: KickClientOrderEvent 0x138: SetTargetTime 0x18E: ChangeSystemStat 0x1A2: JobQuestCompleteTriple 0x1A5: EntrustItem (????) 0x1A6: HamletSupplyRanking 0x1A8: HamletDefenseScore
The big win is the first group. These are used to set how an actor will activate an event. The talk condition is when a player targets and presses 'enter' on an npc. The notice condition I am still figuring out. Emote is when a npc is emoted. Finally push conditions are activated when a player touches the bounding box defined. The bound box can take the shape of a circle, fan, or box. I've also found the last of the 0x1A_ packets.
I haven't looked at all of these packets nor have I figured out all their fields, however I have finished working on the talk, notice, and emote condition packets... and built the code to manage all that. The npc table in the DB also has a new column storing these conditions. I used a json object to defined them... since there can be any number of conditions. With this all setup, I've removed all the inn room actors from the hardcoded packets and moved them into the db. Suffice to say they are working correctly. The only actor I haven't move is the inn room door due to push packets not full implemented (will be soon).
With npcs working, I was able to test the instance system. Each player has their own personal "instance" of actors they can see. As you move around, actors are added and removed as they enter/exit your surroundings. Packets are sent to update the client's own instance. While actors were being added, I didn't really have a way to test if they were being removed since there wasn't anything dynamic. I've fixed it up and now you will no longer see inn room actors in the middle of Coerthas.... actually due to the inn room door still being hard coded (as mentioned above), my server is blind to it and it still appears under Dzemael Darkhold if you warp to Coerthas lol.
You may notice some commands in the chat log. I have also rewritten the server command function to allow for both the server console and the in game log to fire off commands.