The problem is with the API generation - every time there is a new NWN:EE build, Liareth has to manually generate the API (function offsets and structure definitions) for each platform. This is a ~30 minute manual task for Linux. For Windows, the first part (function offsets) is similar enough, so another 30 minutes, but the second part would take too long to do manually.
As a consequence, plugins that require structure definitions will not work yet.
So, we'll be making a detour to build a new API generation tool that will work on both platforms. Aside from providing parity between platforms, this will also make NWNX updates (both platforms) automatic and not tied to Laura's free time. There would be no delay between the game update and the NWNX update.
Docker images for 8154 are available - pull the tag below for the version desired:
`docker pull glorwinger/nwserver:8154.nwnx`
glorwinger/nwserver:8154 - Docker image with nwserver version 8154 glorwinger/nwserver:8154.nwnx - Docker image with nwserver version 8154 and NWNX glorwinger/nwserver:8154.java.nwnx - Docker image with nwserver version 8154, NWNX and Java runtime
Looking at the new plugins on the NWNX github site, I've noticed a lot of them contain the functionality that I and others have requested be implemented in the base game. For example, I see there are events in the nwnx_events scripting function for NWNX_ON_EXAMINE_OBJECT_BEFORE and NWNX_ON_EXAMINE_OBJECT_AFTER, as well as others like NWNX_ON_USE_ITEM_BEFORE and NWNX_ON_USE_ITEM_AFTER. There is also a ton of stuff in nwnx_creature as well (modifying feats, skills, ability points, etc), among other plugin functionality, that has also been requested as things to be added to the base game as well.
Since Liareth is on the Beamdog team, and she must have some insight into the EE roadmap, I keep thinking she wouldn't want to be spending her free time setting these up for NWNX, if she knows that they are planned to be added to the base game. So is this a pretty clear indicator that what is currently available in the EE version of the NWNX plugins will *not* be added to the base game?
I'm hoping that someone can allay my fears that, since all these very useful requested features are currently being worked on in NWNX for EE, Beamdog is not really considering adding them to the base game?
@Balanor There's no plans to add any of that to the base game right now. If something turns out to be really useful for singleplayer or non-nwnx PWs *and* fits the theme, then we might pull it in, but right now nothing like that is on the roadmap.
@Balanor While what @niv said is true, you shouldn't use what is and isn't available in NWNX as a guide. 90% of these plugins were written before EE was released (and before I had access to work directly on the base game [and the plugins were intended to work on 1.69 too]). The beauty of the new NWNX is that updating plugins, for the most part, takes no work from plugin authors - the events I wrote a year and a half ago still work on this patch with no code changes.
@niv Can you tell us what the theme that something has to fit to be added to the base game? I don't mean this sarcastically either - really. I'm curious about what the criteria/theme NWNX functionality must fall under to get added into the base game.
I will say it is kind of disheartening that it seems many/most of the additional event and scripting suggestions/requests for the base game are being dismissed less than two months after the EE was announced (and without even a Trello card to vote for them, or anything). Plus since Liareth mentioned earlier in this thread that it was actually easier and safer for her to add these functions to the base game makes this an especially disappointing revelation...
@Liareth I'm sure by now you know I'm a Windows server owner (sorry, I know I've been loud and annoying about it), so I am curious as to whether these plugins on the GitHub site will work with NWNX-for-Windows that Sherincall is working on? I know the old version of NWNX had to have the plugins compiled separately for Linux and Windows. Is that going to be the same for EE? If so, is it safe to assume that the plugins currently on GitHub are Linux only?
Regardless, thank you both for the quick replies. And thanks for being up-front about this stuff.
@Balanor Just to be clear, there's a difference between dismissing an idea and the idea simply not being present on the roadmap. For example, if I have to implement a new feature in NWNX and find it's easier to do in the base game - and it fits in the base game - then I'll implement it there. It doesn't need to be in the roadmap for that to happen.
Both @Sherincall and I are working on the Windows version of NWNX, actually. All of the current plugins will probably work on both platforms but no promises etc.
@Balanor You misunderstand. We've not discarded anything. There simply wasn't a trello card or a feature request for it that filtered through yet to reach actual planning. Also, consider, adding stuff to NWNX is [relatively] fast and painless. Putting functions into the base game is a combined dev+triage+QA effort that runs way longer, and is more complicated.
If those functions, or any NWNX functionality, fits the theme, we can always add it once time frees up for it. Efforts right now are being spent on stabilisation still (not much longer), and adding other cool features already on the roadmap.
Thus, there is a theme to limit inclusions on purpose. My guiding principle for this is these questions: - Is this useful for singleplayer or regular multiplayer modules (or just persistent worlds; which might as well run nwnx)? - Is this something safe to include? Is it easy to misuse? (Will there be support effort? Is it going to expose players to abuse? Will it leak player data? etc.) - Is the usecase not so obscure as that only two people in the world will ever use it? - And, way more abstract, but think about this for a moment: Will this sell the game? What's the best thing we can spend our time and money on to make sure NWN grows?
Judging based on the affirmative answers on these and the required dev effort, a feature can make it into the base game. I think it's a very fair approach.
Thank you both for the clarification. I do get it. I'm glad that nothing has been dismissed or discarded, although I hope you can agree that this revelation is disappointing for those of us who were hoping for more scripting/event hooks in the base game sooner rather than later. But I guess we all want what we want right now, and not later.
I know adding event hooks and scripting functions is not really "sexy" and would fall to a relatively small subset of people to really use and make it worth your time to do so. Personally, I tried to keep most of my event/scripting suggestions limited to those that both single and multiplayer module designers could benefit from (although I admit I had a couple that were a bit obscure).
I do think getting more NWNX functionality into the game would be useful to Beamdog by giving you all the ability to make premium modules with features that go beyond the graphics (because NWN:EE can't and shouldn't try to compete with modern game graphics). So the ability to use currently NWNX-only functionality to "Wow" the majority of NWN players who haven't played on highly-developed-NWNX servers like Sinfar would, in my opinion, help sell the game. Or that additional functionality would give NWN's many talented module designers the ability to create a unique single or multi-player module unlike any seen in NWN so far - so that those who play them would rave about the experience to their friends so they'd go buy the game. Maybe.
Anyway, I imagine none of this is a shocking revelation to anyone and is probably all stuff you're well aware of and have considered already. So I will stop picking at this now as I know you've got a lot going on. Thanks again for the responses. It's nice to know I've at been heard, even if nothing else comes of this.
Time to download NWNX and starting playing with it.
However, it is still not done. It is a priority for me, but it is blocked on the work for the API generation, which we are doing at: https://github.com/nwnxee/unified-apigen
there's a few experiments on the windows side that are not visible there, which I'll hopefully post this weekend (time permitting) or the next one.
Meanwhile, is there somewhere any step by step guide how to install the Linux version? And would it work with CentOS 6.7 on an Windows VM?
I used Ubuntu 16.04.3 LTS version whit docker to build an image with my module and i had no problem. You just have to learn how to use the basic docker commands, on the web you will find all the information, it is very simple.
Ok so i tried to build on an 32 bit ubuntu 16.04. (not with docking as i have no idea what that even is). I got a few warnings, can i ignore this or am i still missing something?
nwn@nwn-VirtualBox:~/nwn_server/unified-master/build$ cmake -DCMAKE_BUILD_TYPE=Release ../
/home/nwn/nwn_server/unified-master/NWNXLib/API/Linux
-- Configuring done
-- Generating done
-- Build files have been written to: /home/nwn/nwn_server/unified-master/build
nwn@nwn-VirtualBox:~/nwn_server/unified-master/build$ make -j 8
[ 2%] Built target BeaEngine
[ 19%] Built target tacopie
[ 30%] Built target cpp_redis
[ 31%] Building CXX object NWNXLib/CMakeFiles/NWNXLib.dir/Services/Metrics/Metrics.cpp.o
[ 32%] Building CXX object NWNXLib/CMakeFiles/NWNXLib.dir/Services/Tasks/Tasks.cpp.o
[ 33%] Linking CXX static library libNWNXLib.a
[ 48%] Built target NWNXLib
Scanning dependencies of target Core
[ 49%] Building CXX object Core/CMakeFiles/Core.dir/NWNXCore.cpp.o
[ 49%] Building CXX object Core/CMakeFiles/Core.dir/EntryPointLinux.cpp.o
In file included from /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.hpp:102:0,
from /home/nwn/nwn_server/unified-master/Core/NWNXCore.cpp:12:
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl: In instantiation of ‘static std::__cxx11::string NWNXLib::Services::Log::FormatString(const char*, Args ...) [with Args = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’:
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:53:53: required from ‘void NWNXLib::Services::Log::Write(NWNXLib::Services::LogSeverity, NWNXLib::Services::LogSeverity, const string&, const char*, Params ...) [with Params = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:12:5: required from ‘void NWNXLib::Services::Log::Info(const string&, NWNXLib::Services::LogSeverity, const char*, Params ...) [with Params = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:78:5: required from ‘void NWNXLib::Services::LogProxy::Info(const char*, Params ...) [with Params = {}]’
/home/nwn/nwn_server/unified-master/Core/NWNXCore.cpp:78:61: required from here
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:61:34: warning: format not a string literal and no format arguments [-Wformat-security]
const int ret = std::snprintf(nullptr, 0, format, args ...);
~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:65:18: warning: format not a string literal and no format arguments [-Wformat-security]
std::snprintf(buffer.get(), len + 1, format, args ...);
~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[ 50%] Linking CXX shared library ../../Binaries/NWNX_Core.so
[ 50%] Built target Core
Scanning dependencies of target Chat
Scanning dependencies of target BehaviourTree
Scanning dependencies of target Profiler
Scanning dependencies of target Metrics_InfluxDB
Scanning dependencies of target Player
Scanning dependencies of target Administration
Scanning dependencies of target ThreadWatchdog
Scanning dependencies of target SQL
[ 51%] Building CXX object Plugins/BehaviourTree/CMakeFiles/BehaviourTree.dir/BehaviourTree.cpp.o
[ 51%] Building CXX object Plugins/Chat/CMakeFiles/Chat.dir/Chat.cpp.o
[ 51%] Building CXX object Plugins/ThreadWatchdog/CMakeFiles/ThreadWatchdog.dir/ThreadWatchdog.cpp.o
[ 52%] Building CXX object Plugins/Metrics_InfluxDB/CMakeFiles/Metrics_InfluxDB.dir/Metrics_InfluxDB.cpp.o
[ 52%] Building CXX object Plugins/Administration/CMakeFiles/Administration.dir/Administration.cpp.o
[ 53%] Building CXX object Plugins/Player/CMakeFiles/Player.dir/Player.cpp.o
[ 54%] Building CXX object Plugins/Profiler/CMakeFiles/Profiler.dir/Profiler.cpp.o
[ 55%] Building CXX object Plugins/SQL/CMakeFiles/SQL.dir/SQL.cpp.o
In file included from /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.hpp:102:0,
from /home/nwn/nwn_server/unified-master/Plugins/Administration/Administration.cpp:10:
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl: In instantiation of ‘static std::__cxx11::string NWNXLib::Services::Log::FormatString(const char*, Args ...) [with Args = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’:
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:53:53: required from ‘void NWNXLib::Services::Log::Write(NWNXLib::Services::LogSeverity, NWNXLib::Services::LogSeverity, const string&, const char*, Params ...) [with Params = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:19:5: required from ‘void NWNXLib::Services::Log::Notice(const string&, NWNXLib::Services::LogSeverity, const char*, Params ...) [with Params = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:84:5: required from ‘void NWNXLib::Services::LogProxy::Notice(const char*, Params ...) [with Params = {}]’
/home/nwn/nwn_server/unified-master/Plugins/Administration/Administration.cpp:77:60: required from here
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:61:34: warning: format not a string literal and no format arguments [-Wformat-security]
const int ret = std::snprintf(nullptr, 0, format, args ...);
~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:65:18: warning: format not a string literal and no format arguments [-Wformat-security]
std::snprintf(buffer.get(), len + 1, format, args ...);
~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.hpp:102:0,
from /home/nwn/nwn_server/unified-master/Plugins/SQL/SQL.cpp:5:
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl: In instantiation of ‘static std::__cxx11::string NWNXLib::Services::Log::FormatString(const char*, Args ...) [with Args = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’:
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:53:53: required from ‘void NWNXLib::Services::Log::Write(NWNXLib::Services::LogSeverity, NWNXLib::Services::LogSeverity, const string&, const char*, Params ...) [with Params = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:26:5: required from ‘void NWNXLib::Services::Log::Warning(const string&, NWNXLib::Services::LogSeverity, const char*, Params ...) [with Params = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:90:5: required from ‘void NWNXLib::Services::LogProxy::Warning(const char*, Params ...) [with Params = {}]’
/home/nwn/nwn_server/unified-master/Plugins/SQL/SQL.cpp:113:77: required from here
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:61:34: warning: format not a string literal and no format arguments [-Wformat-security]
const int ret = std::snprintf(nullptr, 0, format, args ...);
~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:65:18: warning: format not a string literal and no format arguments [-Wformat-security]
std::snprintf(buffer.get(), len + 1, format, args ...);
~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.hpp:102:0,
from /home/nwn/nwn_server/unified-master/Plugins/ThreadWatchdog/ThreadWatchdog.cpp:4:
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl: In instantiation of ‘static std::__cxx11::string NWNXLib::Services::Log::FormatString(const char*, Args ...) [with Args = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’:
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:53:53: required from ‘void NWNXLib::Services::Log::Write(NWNXLib::Services::LogSeverity, NWNXLib::Services::LogSeverity, const string&, const char*, Params ...) [with Params = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:26:5: required from ‘void NWNXLib::Services::Log::Warning(const string&, NWNXLib::Services::LogSeverity, const char*, Params ...) [with Params = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:90:5: required from ‘void NWNXLib::Services::LogProxy::Warning(const char*, Params ...) [with Params = {}]’
/home/nwn/nwn_server/unified-master/Plugins/ThreadWatchdog/ThreadWatchdog.cpp:74:99: required from here
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:61:34: warning: format not a string literal and no format arguments [-Wformat-security]
const int ret = std::snprintf(nullptr, 0, format, args ...);
~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:65:18: warning: format not a string literal and no format arguments [-Wformat-security]
std::snprintf(buffer.get(), len + 1, format, args ...);
~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[ 56%] Linking CXX shared module ../../../Binaries/NWNX_Administration.so
[ 56%] Built target Administration
[ 56%] Building CXX object Plugins/Metrics_InfluxDB/CMakeFiles/Metrics_InfluxDB.dir/InfluxDBClient.cpp.o
Scanning dependencies of target Events
[ 56%] Building CXX object Plugins/Events/CMakeFiles/Events.dir/Events.cpp.o
[ 57%] Linking CXX shared module ../../../Binaries/NWNX_Player.so
[ 58%] Linking CXX shared module ../../../Binaries/NWNX_Chat.so
[ 59%] Linking CXX shared module ../../../Binaries/NWNX_ThreadWatchdog.so
[ 59%] Built target Player
Scanning dependencies of target Redis
[ 59%] Built target Chat
[ 60%] Building CXX object Plugins/Redis/CMakeFiles/Redis.dir/Redis.cpp.o
[ 60%] Built target ThreadWatchdog
[ 61%] Building CXX object Plugins/Redis/CMakeFiles/Redis.dir/NWScript.cpp.o
Scanning dependencies of target Time
[ 62%] Building CXX object Plugins/Time/CMakeFiles/Time.dir/Time.cpp.o
[ 62%] Building CXX object Plugins/Profiler/CMakeFiles/Profiler.dir/Timing.cpp.o
[ 63%] Linking CXX shared module ../../../Binaries/NWNX_Metrics_InfluxDB.so
[ 63%] Built target Metrics_InfluxDB
Scanning dependencies of target Tracking
[ 63%] Building CXX object Plugins/Tracking/CMakeFiles/Tracking.dir/Tracking.cpp.o
[ 64%] Linking CXX shared module ../../../Binaries/NWNX_BehaviourTree.so
[ 64%] Built target BehaviourTree
[ 65%] Building CXX object Plugins/Tracking/CMakeFiles/Tracking.dir/Targets/Activity.cpp.o
[ 66%] Building CXX object Plugins/SQL/CMakeFiles/SQL.dir/Targets/MySQL.cpp.o
[ 67%] Building CXX object Plugins/Redis/CMakeFiles/Redis.dir/Config.cpp.o
[ 67%] Building CXX object Plugins/Redis/CMakeFiles/Redis.dir/Connection.cpp.o
[ 68%] Linking CXX shared module ../../../Binaries/NWNX_Time.so
[ 69%] Building CXX object Plugins/Profiler/CMakeFiles/Profiler.dir/Targets/AIMasterUpdates.cpp.o
[ 69%] Built target Time
[ 70%] Building CXX object Plugins/Redis/CMakeFiles/Redis.dir/PubSub.cpp.o
[ 71%] Building CXX object Plugins/Events/CMakeFiles/Events.dir/Helpers.cpp.o
Scanning dependencies of target Creature
In file included from /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.hpp:102:0,
from /home/nwn/nwn_server/unified-master/Plugins/SQL/Targets/MySQL.cpp:5:
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl: In instantiation of ‘static std::__cxx11::string NWNXLib::Services::Log::FormatString(const char*, Args ...) [with Args = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’:
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:53:53: required from ‘void NWNXLib::Services::Log::Write(NWNXLib::Services::LogSeverity, NWNXLib::Services::LogSeverity, const string&, const char*, Params ...) [with Params = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:26:5: required from ‘void NWNXLib::Services::Log::Warning(const string&, NWNXLib::Services::LogSeverity, const char*, Params ...) [with Params = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:90:5: required from ‘void NWNXLib::Services::LogProxy::Warning(const char*, Params ...) [with Params = {}]’
/home/nwn/nwn_server/unified-master/Plugins/SQL/Targets/MySQL.cpp:51:56: required from here
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:61:34: warning: format not a string literal and no format arguments [-Wformat-security]
const int ret = std::snprintf(nullptr, 0, format, args ...);
~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:65:18: warning: format not a string literal and no format arguments [-Wformat-security]
std::snprintf(buffer.get(), len + 1, format, args ...);
~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[ 72%] Building CXX object Plugins/Creature/CMakeFiles/Creature.dir/Creature.cpp.o
[ 73%] Building CXX object Plugins/Events/CMakeFiles/Events.dir/Events/AssociateEvents.cpp.o
[ 73%] Building CXX object Plugins/SQL/CMakeFiles/SQL.dir/Targets/PostgreSQL.cpp.o
[ 74%] Linking CXX shared module ../../../Binaries/NWNX_Tracking.so
[ 75%] Building CXX object Plugins/Redis/CMakeFiles/Redis.dir/Util.cpp.o
[ 75%] Built target Tracking
Scanning dependencies of target Ruby
[ 75%] Building CXX object Plugins/Ruby/CMakeFiles/Ruby.dir/Ruby.cpp.o
[ 76%] Building CXX object Plugins/Profiler/CMakeFiles/Profiler.dir/Targets/MainLoop.cpp.o
[ 77%] Building CXX object Plugins/Profiler/CMakeFiles/Profiler.dir/Targets/NetLayer.cpp.o
In file included from /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.hpp:102:0,
from /home/nwn/nwn_server/unified-master/Plugins/SQL/Targets/PostgreSQL.cpp:9:
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl: In instantiation of ‘static std::__cxx11::string NWNXLib::Services::Log::FormatString(const char*, Args ...) [with Args = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’:
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:53:53: required from ‘void NWNXLib::Services::Log::Write(NWNXLib::Services::LogSeverity, NWNXLib::Services::LogSeverity, const string&, const char*, Params ...) [with Params = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:26:5: required from ‘void NWNXLib::Services::Log::Warning(const string&, NWNXLib::Services::LogSeverity, const char*, Params ...) [with Params = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:90:5: required from ‘void NWNXLib::Services::LogProxy::Warning(const char*, Params ...) [with Params = {}]’
/home/nwn/nwn_server/unified-master/Plugins/SQL/Targets/PostgreSQL.cpp:74:56: required from here
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:61:34: warning: format not a string literal and no format arguments [-Wformat-security]
const int ret = std::snprintf(nullptr, 0, format, args ...);
~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:65:18: warning: format not a string literal and no format arguments [-Wformat-security]
std::snprintf(buffer.get(), len + 1, format, args ...);
~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Scanning dependencies of target Object
[ 78%] Building CXX object Plugins/Object/CMakeFiles/Object.dir/Object.cpp.o
[ 79%] Linking CXX shared module ../../../Binaries/NWNX_Redis.so
[ 79%] Built target Redis
[ 80%] Building CXX object Plugins/Events/CMakeFiles/Events.dir/Events/ClientEvents.cpp.o
Scanning dependencies of target ServerLogRedirector
[ 81%] Building CXX object Plugins/ServerLogRedirector/CMakeFiles/ServerLogRedirector.dir/ServerLogRedirector.cpp.o
[ 81%] Linking CXX shared module ../../../Binaries/NWNX_Creature.so
[ 81%] Built target Creature
Scanning dependencies of target Data
[ 81%] Building CXX object Plugins/Profiler/CMakeFiles/Profiler.dir/Targets/NetMessages.cpp.o
[ 82%] Building CXX object Plugins/Data/CMakeFiles/Data.dir/Data.cpp.o
[ 83%] Linking CXX shared module ../../../Binaries/NWNX_Ruby.so
[ 84%] Building CXX object Plugins/Profiler/CMakeFiles/Profiler.dir/Targets/ObjectAIUpdates.cpp.o
[ 84%] Built target Ruby
Scanning dependencies of target JVM
[ 85%] Building CXX object Plugins/JVM/CMakeFiles/JVM.dir/JVM.cpp.o
[ 86%] Building CXX object Plugins/Events/CMakeFiles/Events.dir/Events/ExamineEvents.cpp.o
[ 87%] Building CXX object Plugins/Data/CMakeFiles/Data.dir/Providers/Array.cpp.o
[ 87%] Linking CXX shared module ../../../Binaries/NWNX_Object.so
[ 88%] Linking CXX shared module ../../../Binaries/NWNX_ServerLogRedirector.so
[ 88%] Built target Object
[ 88%] Built target ServerLogRedirector
[ 89%] Building CXX object Plugins/Profiler/CMakeFiles/Profiler.dir/Targets/ObjectEventHandlers.cpp.o
[ 90%] Building CXX object Plugins/Profiler/CMakeFiles/Profiler.dir/Targets/Pathing.cpp.o
[ 90%] Building CXX object Plugins/Profiler/CMakeFiles/Profiler.dir/Targets/Scripts.cpp.o
[ 91%] Building CXX object Plugins/JVM/CMakeFiles/JVM.dir/Internal.cpp.o
[ 91%] Building CXX object Plugins/Events/CMakeFiles/Events.dir/Events/FeatEvents.cpp.o
[ 92%] Building CXX object Plugins/JVM/CMakeFiles/JVM.dir/Config.cpp.o
[ 92%] Building CXX object Plugins/JVM/CMakeFiles/JVM.dir/NWScript.cpp.o
[ 93%] Linking CXX shared module ../../../Binaries/NWNX_SQL.so
[ 94%] Building CXX object Plugins/JVM/CMakeFiles/JVM.dir/SCORCO.cpp.o
[ 95%] Building CXX object Plugins/Events/CMakeFiles/Events.dir/Events/ItemEvents.cpp.o
[ 95%] Built target SQL
[ 96%] Building CXX object Plugins/Events/CMakeFiles/Events.dir/Events/StealthEvents.cpp.o
[ 97%] Building CXX object Plugins/Events/CMakeFiles/Events.dir/Events/SpellEvents.cpp.o
[ 98%] Linking CXX shared module ../../../Binaries/NWNX_Profiler.so
[ 98%] Built target Profiler
[ 99%] Linking CXX shared module ../../../Binaries/NWNX_JVM.so
[ 99%] Built target JVM
[ 99%] Linking CXX shared module ../../../Binaries/NWNX_Events.so
[ 99%] Built target Events
[100%] Linking CXX shared module ../../../Binaries/NWNX_Data.so
[100%] Built target Data
@Himmelweiss yes, those warnings are harmless. Half is the compiler being too stupid to understand a section of the language standard, and the other half is the compiler being too stupid to understand it was stupid before.
Now i just need to figure out what to do with all the .so files and how to setup the server with nwnx.
Getting somehwat closer. Starting the Server it seems it can't load the NWNX_JVM.so, but obpenjdk 1.8.0_151 seems to be running
Do i actually need NWNX_JVM.so and NWNX_Redis.so? Because without theese 2 plugins it actually works.
Neverwinter Nights Server
Build:8155
Copyright BioWare Corp 1998-2004
Registering crash signal handlers.
Server: Loading...
Working Directory For Game Install Is: /home/nwn/nwn_server/nwnee_dedicated_8155
Working Directory For Your Resources Is: /home/nwn/.local/share/Neverwinter Nights
I [17:37:57] NWNX_Core: Server is running version 8155.
I [17:37:57] NWNX_Core: Loading plugins from: .
I [17:37:57] NWNX_Core: Loaded plugin 0 (Administration) v1 by Liareth.
I [17:37:57] NWNX_Core: Loaded plugin 1 (BehaviourTree) v1 by Liareth.
I [17:37:57] NWNX_Core: Loaded plugin 2 (Chat) v1 by Liareth.
I [17:37:57] NWNX_Core: Loaded plugin 3 (Creature) v1 by various / sherincall.
I [17:37:57] NWNX_Core: Loaded plugin 4 (Data) v1 by Liareth.
I [17:37:57] NWNX_Core: Loaded plugin 5 (Events) v1 by Liareth.
I [17:37:57] NWNX_JVM: Configuring up VM.
I [17:37:57] NWNX_JVM: Classpath: -Djava.class.path=/home/nwn/.local/share/Neverwinter Nights/org.nwnx.nwnx2.jvm.jar
I [17:37:57] NWNX_JVM: Creating the Virtual Machine.
Unrecognized option:
E [17:37:57] NWNX_Core: Failed to load plugin (NWNX_JVM.so) because 'Cannot initialise Java VM.'.
F [17:37:57] NWNX_Core: The server encountered a fatal error 'Cannot initialise Java VM.' during setup and must now terminate.
terminate called after throwing an instance of 'std::runtime_error'
what(): Cannot initialise Java VM.
We just crashed hard. :( Sorry about that. But you can help us fix this! Please consider reporting this crash at http://redmine.beamdog.com with the relevant information attached.
A log file has been written to /home/nwn/.local/share/Neverwinter Nights/nwserver-crash-1517157477.log containing further diagnostic information.
./start_server: line 9: 25645 Aborted (core dumped) ./nwserver-linux -port $port -module $module -maxclients $max_clients -pauseandplay $player_pause -pvp $pvp -servervault $servervault -elc $enforce_legal_characters -ilr $item_level_restriction -oneparty $only_one_party -autosaveinterval $autosave_interval -difficulty $difficulty -dmpassword $dmpassword -servername $servername $playerpassword -publicserver 1 -reloadwhenempty $reloadwhenempty
nwn@nwn-VirtualBox:~/nwn_server/nwnee_dedicated_8155/bin/linux-x86$ java -version
openjdk version "1.8.0_151"
OpenJDK Runtime Environment (build 1.8.0_151-8u151-b12-0ubuntu0.16.04.2-b12)
OpenJDK Server VM (build 25.151-b12, mixed mode)
nwn@nwn-VirtualBox:~/nwn_server/nwnee_dedicated_8155/bin/linux-x86$
You don't need them unless you do I mean, if you don't have any plan to use them explicitly, you don't need them. No other plugin depends on them. You can either delete the two .so files, or you can add these env variables: NWNX_JVM_SKIP=y NWNX_REDIS_SKIP=y
So i am now in mid of the process to convert the old aps_include functions.
For saving objects, is it not anymore possible to save objects into BLOB fields? I noticed TEXT(1000000) is being used now which auto turned into MEDIUMTEXT. Will i run into issues if i go with the TEXT(1000000) route? Expecially if i want to save objects like chests or henchmans with an full inventory?
Also, do we still need hookscorco for hooking StoreCampaignObject and RetrieveCampaignObject? Is that even possible atm?
The objects now use 33% more storage than they did with the BLOB. This is the price we pay for the ability the keep them in the printable range, which has many benefits. We can also add BLOB support if needed, but I don't think these sizes are large enough to matter.
TEXT(1000000) was just arbitrary for the test. MEDIUMTEXT contains up to 16MB of data, which ought to be enough for a full container with objects with a bunch local variables each. Just look at your existing BLOB sizes, and add 33%. If you're anywhere near 16MB, maybe go with LARGETEXT.
SCO/RCO hooking is no longer needed, so your interface will need to change a bit. @Glorwinger made a persistence facade that might help with the conversion. Even if you don't use it, I suggest taking a look to see how to use the new interface. You can also look at nwnx_sql_t.nss for some usage examples, but those were made for testing primarily and weren't meant to be very readable...
By the way, you'll probably get better/faster responses on the NWNX discord channel - see first post of this thread.
Will this sell the game? What's the best thing we can spend our time and money on to make sure NWN grows?
Maybe I'm biased and I'm sure you have much better data than me, but from my point of view, PWs are what really keeps this game alive.
I personally don't know anyone online or in real life that has played though all the campaigns, let alone replayed them. But I've meet tens of thousands of players that have put hundreds of hours into single PWs.
Using simple steam data: There are 41 players right now playing NWN:EE on Steam. There are 37 people on public listed PWs. Obviously this doesn't show how many Beamdog clients are in play or playing on private servers, but seems to at least give a broad brush on were player's interests are.
Not sure how to get data on 1.69, but a few PWs still have dozens of players active right now. Do you think most people would still have interest in a 15 year old game if it wasn't for these PWs keeping it active?
Mods are also a big deal, but don't know how to gauge that.
I feel you would get quite a bit bang for your buck by focusing on modding tools and PW features. Carter to those and they will create new content for players.
Lastly, one unique selling point that NWN has that almost no other games do, is the ability to create content. There are a lot of great RPGs and a lot of great single player games, but most don't have the toolset that NWN has. The mods and PWs are unqiue selling points that almost no other game can compete with.
Just another anecdote, I remember with HOTU was about to be released. Everyone on our PW was excited and bought it because it meant we could go to level 40 on our PW. No one I know even talked about the single player campaign that came with it.
Again, running a PW, i'm obviously biased and only see part of the scene. But in all fairness, I know a lot of people, including myself, who won't be here if it wasn't for the PWs keeping it fun.
I completely agree with @FinalStand on this. The only reason NWNX is still of interest to players is the ability to explore and play in the myriad of mods and persistent worlds out there. Revamping the graphics and original story is great to attract some new players, but it is the PWs and Mods that will keep it going for another decade.
I can attract dozens of people with nostalgy of bringing back best online platform for online RP with some great mods where they spent teenage years or show newcomers this super cool things they've heard about from me and my friends and let them join us on this magical journey to the roots of RPing.
NWN campaign wasn't that ground breaking moment in history of rpg. All this great memories that brings as here after 16 years were forged during campaigns, quests and stories written with our friends,(who were often first time met online), nemeses(everyone of us still remember THAT annoying guy!), favorite DMs(who gave us that awesome personalized sword) and evil DMs(the one who always was there to teach you not to focus on builds but RPing with his dragons and liches)
My whole group is determined to buy NWN:EE just to rebuild that using new tools and don't struggle with compatibility and nightmare of using software from 2002. What's my selling point other than that? That they can replay HoTU with few new shaders? If that's it we can stay on 1.69 because it won't be any better and with nwncx 1.69 if years ahead with customization (shout out to @Shadooow for implementing almost every request for nwnx part of community patch).
Will this sell the game? What's the best thing we can spend our time and money on to make sure NWN grows?
Maybe I'm biased and I'm sure you have much better data than me, but from my point of view, PWs are what really keeps this game alive.
I personally don't know anyone online or in real life that has played though all the campaigns, let alone replayed them. But I've meet tens of thousands of players that have put hundreds of hours into single PWs.
As a long time PW player and builder/owner that's not true. In fact I just played through 2 of the campaigns myself (one being the 50+ hour OC) and regularly play through one or more single player modules as well as play and work on the PW. My son plays on PWs and single player as well. If I had to count, I'd bet I've played through the OC at least 7 times. So now you do know someone who has
Okay so I have gone through the whole thread now and am still foggy on a few things:
You participated in NWNX2 development but were not a primary developer. True or False?
You have written your new "NWNX:EE" from scratch using no old code. True or False?
Which leaves me with these questions:
Will scripts based on NWNX2 for 1.69 work with the your NWNX:EE without modification?
Can original NWNX2 plugins be compiled for or even straight used with NWNX:EE?
Beyond the core functionality, CoPaP absolutely relies on the nwnx_vaultster plugin.
Personally I find the ResMan plugin insanely useful when developing for a PW and interacting with a test server.
I also use the Reset plugin to manage memory bloat and provide a maintenance window.
As a PW owner, and a host of another PW and a CoPaP representative, these are very important factors to whether it is worth our time to update to NWN:EE. Also, is there any word on whether the last known maintainers of NWNX2 may pursue developing their own version for NWN:EE?
Comments
Thanks to @highv_priest's generosity, the Windows port is underway at: https://code.nwnx.io/mtijanic/unified/commits/windows
I expect to have the core and MySQL functional for the weekend.
The problem is with the API generation - every time there is a new NWN:EE build, Liareth has to manually generate the API (function offsets and structure definitions) for each platform. This is a ~30 minute manual task for Linux. For Windows, the first part (function offsets) is similar enough, so another 30 minutes, but the second part would take too long to do manually.
As a consequence, plugins that require structure definitions will not work yet.
So, we'll be making a detour to build a new API generation tool that will work on both platforms. Aside from providing parity between platforms, this will also make NWNX updates (both platforms) automatic and not tied to Laura's free time. There would be no delay between the game update and the NWNX update.
That project can be tracked here: https://code.nwnx.io/Liareth/unified-apigen
Any questions, best ask them on the NWNX discord: https://discord.gg/hxTt8Fr
`docker pull glorwinger/nwserver:8154.nwnx`
glorwinger/nwserver:8154 - Docker image with nwserver version 8154
glorwinger/nwserver:8154.nwnx - Docker image with nwserver version 8154 and NWNX
glorwinger/nwserver:8154.java.nwnx - Docker image with nwserver version 8154, NWNX and Java runtime
https://github.com/nwnxee/unified
Since Liareth is on the Beamdog team, and she must have some insight into the EE roadmap, I keep thinking she wouldn't want to be spending her free time setting these up for NWNX, if she knows that they are planned to be added to the base game. So is this a pretty clear indicator that what is currently available in the EE version of the NWNX plugins will *not* be added to the base game?
I'm hoping that someone can allay my fears that, since all these very useful requested features are currently being worked on in NWNX for EE, Beamdog is not really considering adding them to the base game?
I will say it is kind of disheartening that it seems many/most of the additional event and scripting suggestions/requests for the base game are being dismissed less than two months after the EE was announced (and without even a Trello card to vote for them, or anything). Plus since Liareth mentioned earlier in this thread that it was actually easier and safer for her to add these functions to the base game makes this an especially disappointing revelation...
@Liareth I'm sure by now you know I'm a Windows server owner (sorry, I know I've been loud and annoying about it), so I am curious as to whether these plugins on the GitHub site will work with NWNX-for-Windows that Sherincall is working on? I know the old version of NWNX had to have the plugins compiled separately for Linux and Windows. Is that going to be the same for EE? If so, is it safe to assume that the plugins currently on GitHub are Linux only?
Regardless, thank you both for the quick replies. And thanks for being up-front about this stuff.
Both @Sherincall and I are working on the Windows version of NWNX, actually. All of the current plugins will probably work on both platforms but no promises etc.
If those functions, or any NWNX functionality, fits the theme, we can always add it once time frees up for it. Efforts right now are being spent on stabilisation still (not much longer), and adding other cool features already on the roadmap.
Thus, there is a theme to limit inclusions on purpose. My guiding principle for this is these questions:
- Is this useful for singleplayer or regular multiplayer modules (or just persistent worlds; which might as well run nwnx)?
- Is this something safe to include? Is it easy to misuse? (Will there be support effort? Is it going to expose players to abuse? Will it leak player data? etc.)
- Is the usecase not so obscure as that only two people in the world will ever use it?
- And, way more abstract, but think about this for a moment: Will this sell the game? What's the best thing we can spend our time and money on to make sure NWN grows?
Judging based on the affirmative answers on these and the required dev effort, a feature can make it into the base game. I think it's a very fair approach.
I know adding event hooks and scripting functions is not really "sexy" and would fall to a relatively small subset of people to really use and make it worth your time to do so. Personally, I tried to keep most of my event/scripting suggestions limited to those that both single and multiplayer module designers could benefit from (although I admit I had a couple that were a bit obscure).
I do think getting more NWNX functionality into the game would be useful to Beamdog by giving you all the ability to make premium modules with features that go beyond the graphics (because NWN:EE can't and shouldn't try to compete with modern game graphics). So the ability to use currently NWNX-only functionality to "Wow" the majority of NWN players who haven't played on highly-developed-NWNX servers like Sinfar would, in my opinion, help sell the game. Or that additional functionality would give NWN's many talented module designers the ability to create a unique single or multi-player module unlike any seen in NWN so far - so that those who play them would rave about the experience to their friends so they'd go buy the game. Maybe.
Anyway, I imagine none of this is a shocking revelation to anyone and is probably all stuff you're well aware of and have considered already. So I will stop picking at this now as I know you've got a lot going on. Thanks again for the responses. It's nice to know I've at been heard, even if nothing else comes of this.
Time to download NWNX and starting playing with it.
Sorry for the maybe dumb question, but is there a Windows Version now or not?
Because the link posted above for NWNX Windows doesn't seem to work:
https://code.nwnx.io/mtijanic/unified/commits/windows
However, it is still not done. It is a priority for me, but it is blocked on the work for the API generation, which we are doing at:
https://github.com/nwnxee/unified-apigen
there's a few experiments on the windows side that are not visible there, which I'll hopefully post this weekend (time permitting) or the next one.
I know there are a lot of windows users out there.
Meanwhile, is there somewhere any step by step guide how to install the Linux version?
And would it work with CentOS 6.7 on an Windows VM?
I got a few warnings, can i ignore this or am i still missing something?
nwn@nwn-VirtualBox:~/nwn_server/unified-master/build$ cmake -DCMAKE_BUILD_TYPE=Release ../ /home/nwn/nwn_server/unified-master/NWNXLib/API/Linux -- Configuring done -- Generating done -- Build files have been written to: /home/nwn/nwn_server/unified-master/build nwn@nwn-VirtualBox:~/nwn_server/unified-master/build$ make -j 8 [ 2%] Built target BeaEngine [ 19%] Built target tacopie [ 30%] Built target cpp_redis [ 31%] Building CXX object NWNXLib/CMakeFiles/NWNXLib.dir/Services/Metrics/Metrics.cpp.o [ 32%] Building CXX object NWNXLib/CMakeFiles/NWNXLib.dir/Services/Tasks/Tasks.cpp.o [ 33%] Linking CXX static library libNWNXLib.a [ 48%] Built target NWNXLib Scanning dependencies of target Core [ 49%] Building CXX object Core/CMakeFiles/Core.dir/NWNXCore.cpp.o [ 49%] Building CXX object Core/CMakeFiles/Core.dir/EntryPointLinux.cpp.o In file included from /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.hpp:102:0, from /home/nwn/nwn_server/unified-master/Core/NWNXCore.cpp:12: /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl: In instantiation of ‘static std::__cxx11::string NWNXLib::Services::Log::FormatString(const char*, Args ...) [with Args = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’: /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:53:53: required from ‘void NWNXLib::Services::Log::Write(NWNXLib::Services::LogSeverity, NWNXLib::Services::LogSeverity, const string&, const char*, Params ...) [with Params = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’ /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:12:5: required from ‘void NWNXLib::Services::Log::Info(const string&, NWNXLib::Services::LogSeverity, const char*, Params ...) [with Params = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’ /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:78:5: required from ‘void NWNXLib::Services::LogProxy::Info(const char*, Params ...) [with Params = {}]’ /home/nwn/nwn_server/unified-master/Core/NWNXCore.cpp:78:61: required from here /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:61:34: warning: format not a string literal and no format arguments [-Wformat-security] const int ret = std::snprintf(nullptr, 0, format, args ...); ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:65:18: warning: format not a string literal and no format arguments [-Wformat-security] std::snprintf(buffer.get(), len + 1, format, args ...); ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 50%] Linking CXX shared library ../../Binaries/NWNX_Core.so [ 50%] Built target Core Scanning dependencies of target Chat Scanning dependencies of target BehaviourTree Scanning dependencies of target Profiler Scanning dependencies of target Metrics_InfluxDB Scanning dependencies of target Player Scanning dependencies of target Administration Scanning dependencies of target ThreadWatchdog Scanning dependencies of target SQL [ 51%] Building CXX object Plugins/BehaviourTree/CMakeFiles/BehaviourTree.dir/BehaviourTree.cpp.o [ 51%] Building CXX object Plugins/Chat/CMakeFiles/Chat.dir/Chat.cpp.o [ 51%] Building CXX object Plugins/ThreadWatchdog/CMakeFiles/ThreadWatchdog.dir/ThreadWatchdog.cpp.o [ 52%] Building CXX object Plugins/Metrics_InfluxDB/CMakeFiles/Metrics_InfluxDB.dir/Metrics_InfluxDB.cpp.o [ 52%] Building CXX object Plugins/Administration/CMakeFiles/Administration.dir/Administration.cpp.o [ 53%] Building CXX object Plugins/Player/CMakeFiles/Player.dir/Player.cpp.o [ 54%] Building CXX object Plugins/Profiler/CMakeFiles/Profiler.dir/Profiler.cpp.o [ 55%] Building CXX object Plugins/SQL/CMakeFiles/SQL.dir/SQL.cpp.o In file included from /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.hpp:102:0, from /home/nwn/nwn_server/unified-master/Plugins/Administration/Administration.cpp:10: /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl: In instantiation of ‘static std::__cxx11::string NWNXLib::Services::Log::FormatString(const char*, Args ...) [with Args = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’: /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:53:53: required from ‘void NWNXLib::Services::Log::Write(NWNXLib::Services::LogSeverity, NWNXLib::Services::LogSeverity, const string&, const char*, Params ...) [with Params = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’ /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:19:5: required from ‘void NWNXLib::Services::Log::Notice(const string&, NWNXLib::Services::LogSeverity, const char*, Params ...) [with Params = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’ /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:84:5: required from ‘void NWNXLib::Services::LogProxy::Notice(const char*, Params ...) [with Params = {}]’ /home/nwn/nwn_server/unified-master/Plugins/Administration/Administration.cpp:77:60: required from here /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:61:34: warning: format not a string literal and no format arguments [-Wformat-security] const int ret = std::snprintf(nullptr, 0, format, args ...); ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:65:18: warning: format not a string literal and no format arguments [-Wformat-security] std::snprintf(buffer.get(), len + 1, format, args ...); ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.hpp:102:0, from /home/nwn/nwn_server/unified-master/Plugins/SQL/SQL.cpp:5: /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl: In instantiation of ‘static std::__cxx11::string NWNXLib::Services::Log::FormatString(const char*, Args ...) [with Args = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’: /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:53:53: required from ‘void NWNXLib::Services::Log::Write(NWNXLib::Services::LogSeverity, NWNXLib::Services::LogSeverity, const string&, const char*, Params ...) [with Params = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’ /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:26:5: required from ‘void NWNXLib::Services::Log::Warning(const string&, NWNXLib::Services::LogSeverity, const char*, Params ...) [with Params = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’ /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:90:5: required from ‘void NWNXLib::Services::LogProxy::Warning(const char*, Params ...) [with Params = {}]’ /home/nwn/nwn_server/unified-master/Plugins/SQL/SQL.cpp:113:77: required from here /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:61:34: warning: format not a string literal and no format arguments [-Wformat-security] const int ret = std::snprintf(nullptr, 0, format, args ...); ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:65:18: warning: format not a string literal and no format arguments [-Wformat-security] std::snprintf(buffer.get(), len + 1, format, args ...); ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.hpp:102:0, from /home/nwn/nwn_server/unified-master/Plugins/ThreadWatchdog/ThreadWatchdog.cpp:4: /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl: In instantiation of ‘static std::__cxx11::string NWNXLib::Services::Log::FormatString(const char*, Args ...) [with Args = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’: /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:53:53: required from ‘void NWNXLib::Services::Log::Write(NWNXLib::Services::LogSeverity, NWNXLib::Services::LogSeverity, const string&, const char*, Params ...) [with Params = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’ /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:26:5: required from ‘void NWNXLib::Services::Log::Warning(const string&, NWNXLib::Services::LogSeverity, const char*, Params ...) [with Params = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’ /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:90:5: required from ‘void NWNXLib::Services::LogProxy::Warning(const char*, Params ...) [with Params = {}]’ /home/nwn/nwn_server/unified-master/Plugins/ThreadWatchdog/ThreadWatchdog.cpp:74:99: required from here /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:61:34: warning: format not a string literal and no format arguments [-Wformat-security] const int ret = std::snprintf(nullptr, 0, format, args ...); ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:65:18: warning: format not a string literal and no format arguments [-Wformat-security] std::snprintf(buffer.get(), len + 1, format, args ...); ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 56%] Linking CXX shared module ../../../Binaries/NWNX_Administration.so [ 56%] Built target Administration [ 56%] Building CXX object Plugins/Metrics_InfluxDB/CMakeFiles/Metrics_InfluxDB.dir/InfluxDBClient.cpp.o Scanning dependencies of target Events [ 56%] Building CXX object Plugins/Events/CMakeFiles/Events.dir/Events.cpp.o [ 57%] Linking CXX shared module ../../../Binaries/NWNX_Player.so [ 58%] Linking CXX shared module ../../../Binaries/NWNX_Chat.so [ 59%] Linking CXX shared module ../../../Binaries/NWNX_ThreadWatchdog.so [ 59%] Built target Player Scanning dependencies of target Redis [ 59%] Built target Chat [ 60%] Building CXX object Plugins/Redis/CMakeFiles/Redis.dir/Redis.cpp.o [ 60%] Built target ThreadWatchdog [ 61%] Building CXX object Plugins/Redis/CMakeFiles/Redis.dir/NWScript.cpp.o Scanning dependencies of target Time [ 62%] Building CXX object Plugins/Time/CMakeFiles/Time.dir/Time.cpp.o [ 62%] Building CXX object Plugins/Profiler/CMakeFiles/Profiler.dir/Timing.cpp.o [ 63%] Linking CXX shared module ../../../Binaries/NWNX_Metrics_InfluxDB.so [ 63%] Built target Metrics_InfluxDB Scanning dependencies of target Tracking [ 63%] Building CXX object Plugins/Tracking/CMakeFiles/Tracking.dir/Tracking.cpp.o [ 64%] Linking CXX shared module ../../../Binaries/NWNX_BehaviourTree.so [ 64%] Built target BehaviourTree [ 65%] Building CXX object Plugins/Tracking/CMakeFiles/Tracking.dir/Targets/Activity.cpp.o [ 66%] Building CXX object Plugins/SQL/CMakeFiles/SQL.dir/Targets/MySQL.cpp.o [ 67%] Building CXX object Plugins/Redis/CMakeFiles/Redis.dir/Config.cpp.o [ 67%] Building CXX object Plugins/Redis/CMakeFiles/Redis.dir/Connection.cpp.o [ 68%] Linking CXX shared module ../../../Binaries/NWNX_Time.so [ 69%] Building CXX object Plugins/Profiler/CMakeFiles/Profiler.dir/Targets/AIMasterUpdates.cpp.o [ 69%] Built target Time [ 70%] Building CXX object Plugins/Redis/CMakeFiles/Redis.dir/PubSub.cpp.o [ 71%] Building CXX object Plugins/Events/CMakeFiles/Events.dir/Helpers.cpp.o Scanning dependencies of target Creature In file included from /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.hpp:102:0, from /home/nwn/nwn_server/unified-master/Plugins/SQL/Targets/MySQL.cpp:5: /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl: In instantiation of ‘static std::__cxx11::string NWNXLib::Services::Log::FormatString(const char*, Args ...) [with Args = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’: /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:53:53: required from ‘void NWNXLib::Services::Log::Write(NWNXLib::Services::LogSeverity, NWNXLib::Services::LogSeverity, const string&, const char*, Params ...) [with Params = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’ /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:26:5: required from ‘void NWNXLib::Services::Log::Warning(const string&, NWNXLib::Services::LogSeverity, const char*, Params ...) [with Params = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’ /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:90:5: required from ‘void NWNXLib::Services::LogProxy::Warning(const char*, Params ...) [with Params = {}]’ /home/nwn/nwn_server/unified-master/Plugins/SQL/Targets/MySQL.cpp:51:56: required from here /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:61:34: warning: format not a string literal and no format arguments [-Wformat-security] const int ret = std::snprintf(nullptr, 0, format, args ...); ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:65:18: warning: format not a string literal and no format arguments [-Wformat-security] std::snprintf(buffer.get(), len + 1, format, args ...); ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 72%] Building CXX object Plugins/Creature/CMakeFiles/Creature.dir/Creature.cpp.o [ 73%] Building CXX object Plugins/Events/CMakeFiles/Events.dir/Events/AssociateEvents.cpp.o [ 73%] Building CXX object Plugins/SQL/CMakeFiles/SQL.dir/Targets/PostgreSQL.cpp.o [ 74%] Linking CXX shared module ../../../Binaries/NWNX_Tracking.so [ 75%] Building CXX object Plugins/Redis/CMakeFiles/Redis.dir/Util.cpp.o [ 75%] Built target Tracking Scanning dependencies of target Ruby [ 75%] Building CXX object Plugins/Ruby/CMakeFiles/Ruby.dir/Ruby.cpp.o [ 76%] Building CXX object Plugins/Profiler/CMakeFiles/Profiler.dir/Targets/MainLoop.cpp.o [ 77%] Building CXX object Plugins/Profiler/CMakeFiles/Profiler.dir/Targets/NetLayer.cpp.o In file included from /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.hpp:102:0, from /home/nwn/nwn_server/unified-master/Plugins/SQL/Targets/PostgreSQL.cpp:9: /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl: In instantiation of ‘static std::__cxx11::string NWNXLib::Services::Log::FormatString(const char*, Args ...) [with Args = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’: /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:53:53: required from ‘void NWNXLib::Services::Log::Write(NWNXLib::Services::LogSeverity, NWNXLib::Services::LogSeverity, const string&, const char*, Params ...) [with Params = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’ /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:26:5: required from ‘void NWNXLib::Services::Log::Warning(const string&, NWNXLib::Services::LogSeverity, const char*, Params ...) [with Params = {}; std::__cxx11::string = std::__cxx11::basic_string<char>]’ /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:90:5: required from ‘void NWNXLib::Services::LogProxy::Warning(const char*, Params ...) [with Params = {}]’ /home/nwn/nwn_server/unified-master/Plugins/SQL/Targets/PostgreSQL.cpp:74:56: required from here /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:61:34: warning: format not a string literal and no format arguments [-Wformat-security] const int ret = std::snprintf(nullptr, 0, format, args ...); ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/nwn/nwn_server/unified-master/NWNXLib/./Services/Log/Log.inl:65:18: warning: format not a string literal and no format arguments [-Wformat-security] std::snprintf(buffer.get(), len + 1, format, args ...); ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Scanning dependencies of target Object [ 78%] Building CXX object Plugins/Object/CMakeFiles/Object.dir/Object.cpp.o [ 79%] Linking CXX shared module ../../../Binaries/NWNX_Redis.so [ 79%] Built target Redis [ 80%] Building CXX object Plugins/Events/CMakeFiles/Events.dir/Events/ClientEvents.cpp.o Scanning dependencies of target ServerLogRedirector [ 81%] Building CXX object Plugins/ServerLogRedirector/CMakeFiles/ServerLogRedirector.dir/ServerLogRedirector.cpp.o [ 81%] Linking CXX shared module ../../../Binaries/NWNX_Creature.so [ 81%] Built target Creature Scanning dependencies of target Data [ 81%] Building CXX object Plugins/Profiler/CMakeFiles/Profiler.dir/Targets/NetMessages.cpp.o [ 82%] Building CXX object Plugins/Data/CMakeFiles/Data.dir/Data.cpp.o [ 83%] Linking CXX shared module ../../../Binaries/NWNX_Ruby.so [ 84%] Building CXX object Plugins/Profiler/CMakeFiles/Profiler.dir/Targets/ObjectAIUpdates.cpp.o [ 84%] Built target Ruby Scanning dependencies of target JVM [ 85%] Building CXX object Plugins/JVM/CMakeFiles/JVM.dir/JVM.cpp.o [ 86%] Building CXX object Plugins/Events/CMakeFiles/Events.dir/Events/ExamineEvents.cpp.o [ 87%] Building CXX object Plugins/Data/CMakeFiles/Data.dir/Providers/Array.cpp.o [ 87%] Linking CXX shared module ../../../Binaries/NWNX_Object.so [ 88%] Linking CXX shared module ../../../Binaries/NWNX_ServerLogRedirector.so [ 88%] Built target Object [ 88%] Built target ServerLogRedirector [ 89%] Building CXX object Plugins/Profiler/CMakeFiles/Profiler.dir/Targets/ObjectEventHandlers.cpp.o [ 90%] Building CXX object Plugins/Profiler/CMakeFiles/Profiler.dir/Targets/Pathing.cpp.o [ 90%] Building CXX object Plugins/Profiler/CMakeFiles/Profiler.dir/Targets/Scripts.cpp.o [ 91%] Building CXX object Plugins/JVM/CMakeFiles/JVM.dir/Internal.cpp.o [ 91%] Building CXX object Plugins/Events/CMakeFiles/Events.dir/Events/FeatEvents.cpp.o [ 92%] Building CXX object Plugins/JVM/CMakeFiles/JVM.dir/Config.cpp.o [ 92%] Building CXX object Plugins/JVM/CMakeFiles/JVM.dir/NWScript.cpp.o [ 93%] Linking CXX shared module ../../../Binaries/NWNX_SQL.so [ 94%] Building CXX object Plugins/JVM/CMakeFiles/JVM.dir/SCORCO.cpp.o [ 95%] Building CXX object Plugins/Events/CMakeFiles/Events.dir/Events/ItemEvents.cpp.o [ 95%] Built target SQL [ 96%] Building CXX object Plugins/Events/CMakeFiles/Events.dir/Events/StealthEvents.cpp.o [ 97%] Building CXX object Plugins/Events/CMakeFiles/Events.dir/Events/SpellEvents.cpp.o [ 98%] Linking CXX shared module ../../../Binaries/NWNX_Profiler.so [ 98%] Built target Profiler [ 99%] Linking CXX shared module ../../../Binaries/NWNX_JVM.so [ 99%] Built target JVM [ 99%] Linking CXX shared module ../../../Binaries/NWNX_Events.so [ 99%] Built target Events [100%] Linking CXX shared module ../../../Binaries/NWNX_Data.so [100%] Built target Data
Now i just need to figure out what to do with all the .so files and how to setup the server with nwnx.
Getting somehwat closer.
Starting the Server it seems it can't load the NWNX_JVM.so, but obpenjdk 1.8.0_151 seems to be running
Do i actually need NWNX_JVM.so and NWNX_Redis.so?
Because without theese 2 plugins it actually works.
Neverwinter Nights Server Build:8155 Copyright BioWare Corp 1998-2004 Registering crash signal handlers. Server: Loading... Working Directory For Game Install Is: /home/nwn/nwn_server/nwnee_dedicated_8155 Working Directory For Your Resources Is: /home/nwn/.local/share/Neverwinter Nights I [17:37:57] NWNX_Core: Server is running version 8155. I [17:37:57] NWNX_Core: Loading plugins from: . I [17:37:57] NWNX_Core: Loaded plugin 0 (Administration) v1 by Liareth. I [17:37:57] NWNX_Core: Loaded plugin 1 (BehaviourTree) v1 by Liareth. I [17:37:57] NWNX_Core: Loaded plugin 2 (Chat) v1 by Liareth. I [17:37:57] NWNX_Core: Loaded plugin 3 (Creature) v1 by various / sherincall. I [17:37:57] NWNX_Core: Loaded plugin 4 (Data) v1 by Liareth. I [17:37:57] NWNX_Core: Loaded plugin 5 (Events) v1 by Liareth. I [17:37:57] NWNX_JVM: Configuring up VM. I [17:37:57] NWNX_JVM: Classpath: -Djava.class.path=/home/nwn/.local/share/Neverwinter Nights/org.nwnx.nwnx2.jvm.jar I [17:37:57] NWNX_JVM: Creating the Virtual Machine. Unrecognized option: E [17:37:57] NWNX_Core: Failed to load plugin (NWNX_JVM.so) because 'Cannot initialise Java VM.'. F [17:37:57] NWNX_Core: The server encountered a fatal error 'Cannot initialise Java VM.' during setup and must now terminate. terminate called after throwing an instance of 'std::runtime_error' what(): Cannot initialise Java VM. We just crashed hard. :( Sorry about that. But you can help us fix this! Please consider reporting this crash at http://redmine.beamdog.com with the relevant information attached. A log file has been written to /home/nwn/.local/share/Neverwinter Nights/nwserver-crash-1517157477.log containing further diagnostic information. ./start_server: line 9: 25645 Aborted (core dumped) ./nwserver-linux -port $port -module $module -maxclients $max_clients -pauseandplay $player_pause -pvp $pvp -servervault $servervault -elc $enforce_legal_characters -ilr $item_level_restriction -oneparty $only_one_party -autosaveinterval $autosave_interval -difficulty $difficulty -dmpassword $dmpassword -servername $servername $playerpassword -publicserver 1 -reloadwhenempty $reloadwhenempty nwn@nwn-VirtualBox:~/nwn_server/nwnee_dedicated_8155/bin/linux-x86$ java -version openjdk version "1.8.0_151" OpenJDK Runtime Environment (build 1.8.0_151-8u151-b12-0ubuntu0.16.04.2-b12) OpenJDK Server VM (build 25.151-b12, mixed mode) nwn@nwn-VirtualBox:~/nwn_server/nwnee_dedicated_8155/bin/linux-x86$
I mean, if you don't have any plan to use them explicitly, you don't need them. No other plugin depends on them. You can either delete the two .so files, or you can add these env variables:
NWNX_JVM_SKIP=y
NWNX_REDIS_SKIP=y
Yeah i think i don't need them, atleast i don't remember needing java or redis for my PW.
For saving objects, is it not anymore possible to save objects into BLOB fields?
I noticed TEXT(1000000) is being used now which auto turned into MEDIUMTEXT.
Will i run into issues if i go with the TEXT(1000000) route? Expecially if i want to save objects like chests or henchmans with an full inventory?
Also, do we still need hookscorco for hooking StoreCampaignObject and RetrieveCampaignObject?
Is that even possible atm?
TEXT(1000000) was just arbitrary for the test. MEDIUMTEXT contains up to 16MB of data, which ought to be enough for a full container with objects with a bunch local variables each. Just look at your existing BLOB sizes, and add 33%. If you're anywhere near 16MB, maybe go with LARGETEXT.
I guess you could also stay with BLOB, but TEXT are easier to work with. More info:https://stackoverflow.com/questions/13932750/tinytext-text-mediumtext-and-longtext-maximum-storage-sizes
https://stackoverflow.com/questions/7755629/varchar255-vs-tinytext-tinyblob-and-varchar65535-vs-blob-text
SCO/RCO hooking is no longer needed, so your interface will need to change a bit. @Glorwinger made a persistence facade that might help with the conversion. Even if you don't use it, I suggest taking a look to see how to use the new interface.
You can also look at nwnx_sql_t.nss for some usage examples, but those were made for testing primarily and weren't meant to be very readable...
By the way, you'll probably get better/faster responses on the NWNX discord channel - see first post of this thread.
Ok, thanks for all the info.
I personally don't know anyone online or in real life that has played though all the campaigns, let alone replayed them. But I've meet tens of thousands of players that have put hundreds of hours into single PWs.
Using simple steam data: There are 41 players right now playing NWN:EE on Steam. There are 37 people on public listed PWs. Obviously this doesn't show how many Beamdog clients are in play or playing on private servers, but seems to at least give a broad brush on were player's interests are.
Not sure how to get data on 1.69, but a few PWs still have dozens of players active right now. Do you think most people would still have interest in a 15 year old game if it wasn't for these PWs keeping it active?
Mods are also a big deal, but don't know how to gauge that.
I feel you would get quite a bit bang for your buck by focusing on modding tools and PW features. Carter to those and they will create new content for players.
Lastly, one unique selling point that NWN has that almost no other games do, is the ability to create content. There are a lot of great RPGs and a lot of great single player games, but most don't have the toolset that NWN has. The mods and PWs are unqiue selling points that almost no other game can compete with.
Again, running a PW, i'm obviously biased and only see part of the scene. But in all fairness, I know a lot of people, including myself, who won't be here if it wasn't for the PWs keeping it fun.
@Beamdog must be able to see.
I can attract dozens of people with nostalgy of bringing back best online platform for online RP with some great mods where they spent teenage years or show newcomers this super cool things they've heard about from me and my friends and let them join us on this magical journey to the roots of RPing.
NWN campaign wasn't that ground breaking moment in history of rpg. All this great memories that brings as here after 16 years were forged during campaigns, quests and stories written with our friends,(who were often first time met online), nemeses(everyone of us still remember THAT annoying guy!), favorite DMs(who gave us that awesome personalized sword) and evil DMs(the one who always was there to teach you not to focus on builds but RPing with his dragons and liches)
My whole group is determined to buy NWN:EE just to rebuild that using new tools and don't struggle with compatibility and nightmare of using software from 2002. What's my selling point other than that? That they can replay HoTU with few new shaders? If that's it we can stay on 1.69 because it won't be any better and with nwncx 1.69 if years ahead with customization (shout out to @Shadooow for implementing almost every request for nwnx part of community patch).
- You participated in NWNX2 development but were not a primary developer. True or False?
- You have written your new "NWNX:EE" from scratch using no old code. True or False?
Which leaves me with these questions:- Will scripts based on NWNX2 for 1.69 work with the your NWNX:EE without modification?
- Can original NWNX2 plugins be compiled for or even straight used with NWNX:EE?
- Beyond the core functionality, CoPaP absolutely relies on the nwnx_vaultster plugin.
- Personally I find the ResMan plugin insanely useful when developing for a PW and interacting with a test server.
- I also use the Reset plugin to manage memory bloat and provide a maintenance window.
As a PW owner, and a host of another PW and a CoPaP representative, these are very important factors to whether it is worth our time to update to NWN:EE. Also, is there any word on whether the last known maintainers of NWNX2 may pursue developing their own version for NWN:EE?