I've started writing the db tables to store all the NPCs as well as the code to load and display them. There are a lot of NPCs in FFXIV but luckily the client has an internal table of all of them. Well... kinda. There are three main sheets that have to deal with NPCs: actorClass, actorGraphic, and xtx/displayName. ActorClass and ActorGraphic both share the same ids, and are linked together 1-1. I have a suspicion that this file is duplicated on the server but contains a lot more info (position, animation, etc) because all the fields are empty except for "displayName id". The displayName id links to xtx/displayName which contains the name of every NPC in the game. ActorGraphic has all the model, head, armor, and weapon Ids needed to set the appearance. With this data, the really hard part; name and appearance is already done! Also because the appearance data is the same as the player's appearance data (they are both character actors), you can set characters to look like NPCs!
Note: an NPC can be a static talkable one OR a monster.
Here is my character looking like Y'shtola:
This was an earlier attempt that had a bug, resulting in a hilarious glitch:
After getting the data uploaded and the NPC's loading I worked on the code that would send the correct actor packets to the clients so it would appear to players. This was pretty quick after some bugfixing due to player actors already using this same system for multiplayer. I still need to implement some NPC specific packets relating to events before it can be finished, but below is some actors I spawned. Their names are grey because they have no health state (so technically "dead") and no "talkEvent" handler set which would have made their names green like most NPCs.
PS: Just realized comments were disabled >.<. Enabled em on all pages.