I hit a small bump in the road today: The NWNX Controller can not pass information to the NWNX Hook using the nwserver command line. It (the server) just does not like unknown parameters and in turn fails to load the module (sic!).
I was planning to implement IPC (inter process communication) between the GUI and the Controller sometime later, but had to start on a prototype version between the Controller and the Hook today. A bit more complex than I would like it to be, but it works. A way to communicate between the Controller and the Hook was missing in NWNX2 anyway, so I am glad this is finally done.
The new plugin architecture is done. While still resembling the old one, the interface is a bit simpler to understand. On the feature side, it is now possible for plugins to provide a “function class”, independent of it’s DLL filename.
That means that e.g. several database plugins (xp_sqlite.dll, xp_mysql.dll, and xp_sqlserver.dll) can share the same function class “sql” and register it with NWNX. On the other side, a script always calls a function based on it’s function class, no matter what the underlying plugin is named, meaning that a request for a “sql” type plugin is routed to one of the installed plugins that provides the “sql” class.
A simple change, but one that provides much better flexibility than the old, rather monolithic, approach.
The hook of SetLocalString in the NWN2 dedicated server is done!
I did some work on the logging and command line parsing functions, as well as laying out parts of the new plugin structure. Basic grunt work on which I plan to build on.