I'm not sure if this is the correct place to ask for new features. If it isn't, please let me know where I should post this.
One thing that I've come to hate about NWN conversations is the scripting side of it. There's a lot of potential, but the way it is currently implemented requires you to create multiple copies of the same script.
For example: if you have a generic conversation with 3 options, you'll need a different script for every option, so you know if the user clicked on option 1, 2 or 3. Often all the scripts are the same and the only difference is the option number.
This creates a bloat of conversation scripts and prevents some system designs from being realized.
I found this problem particularly limiting when I decided to create a conversation driven quest system. I wanted a simple way to start an arbitrary quest, like say quest #158, from a conversation. Or perform other operations, like completing a quest, checking if a player meets the necessary requirements to start a quest, etc.
This system would require one new script per action per quest. However, thanks to NWNX, I was able to create a workaround.
By hooking the function that runs a script on the server, I could modify the script name. So I created a system that would detect a # in the script name, take the value after if and make it available through a local variable set on the module that the script could use. The system detected multiple # and set the appropriate variables.
This meant that instead of creating a script "start_quest_158" to start one quest, I could have a generic script "start_quest", and the builders of my module could use it to start a quest by placing the script name "start_quest#158".
This feature was a blessing, it not only allowed my quest system to exist, but also allowed me to significantly clean up my module's scripts by condensing most conversation scripts.
So I would like to propose this becomes a feature in NWN:EE. It could be extended to any script, but to keep things simple I will keep it to conversations.
The idea is to have a variable input field, like the we have for local variables on creatures, for each dialog option. The game would check for these values before running a script, and store them in a place accessible by the script virtual machine.
A new set of functions would be needed to access these, like the ones we have for local variables:
int GetConversationInt(string sVarName);
string GetConversationString(string sVarName);
float GetConversationFloat(string sVarName);
This would allow for much more powerful conversation-driven systems to be define and would help a lot when creating generic conversations.