Hey you thieves out there who do not get much recognition for your good (or sometimes evil) but nevertheless hard work: this for you!
Are you tired of unlocking locks for cheap trinkets only? How often have you thought why not just bash the crate (if only you had the strength to do so)? Why take the time to disable a trap when you could easily evade the damage (if only you had more hit points in case it goes wrong)?
Have you even thought about taking an office job and become a fighter (or something equally boring) in your next life?
If all this speaks to your heart... the solution is...
Award XP for Using Thieving Skills (AXPfUTS)
AXPfUTS is a simple script that can modify modules so they award XP for disarming/retrieving(*) traps or unlocking locks. This project started some time ago as a post in the Neverwinter Vault forum:
https://forum.neverwintervault.org/t/xp-script-for-disarming-traps/7427/1
Requirements:
AXPfUTS was creating and tested using the current version of NWN EE (8193.36-13). It was tested as well with the current development version (8193.37-11). Most likely it will not work with older versions of NWN EE. It does not work with the old NWN 1.69.
Installation:
It's very simple, just download the zip file, open it with yout favorite zip tool and copy the override\mk_axpfuts.ncs file into your
..\Documents\Neverwinter Nights\override
folder. Or use the Neverwinter Nights Mod Installer Tool (NIT) to do the installation.
Getting started:
To run the script simply start NWN, load your save (or start a new module) and follow the steps below (also see screenshots):
A) Press Shift+Ctrl+F12 to open the debug window
B) Click the Collapse Button to expand the window
C) Click [ ] nwscript to open the NWScript window
D) In the edit box in the bottom right corner next to the 'Execute' button enter the script name mk_axpfuts and then click 'Execute'
E) You should now see the AXPfUTS configuration window (see screenshot). If you don't see the configuration window see section troubleshooting below. Now click 'Modify module' to modify your current game...
After clicking the 'Modify' button AXPfUTS scans the module's areas for trapped and/or locked objects and modifies them by putting itself as their OnDisarm/OnUnlock script. Objects already having an OnDisarm/OnUnlock script are not modified (for safety reasons). You can tell AXPfUTS to ignore traps/locks that are not meant to be disarmed/unlocked by skill (because their DC is set to a very high value). This is only for the statistics section to display reasonable values.
After your game has been modified part 2) Statistics and part 3) XP setting become enabled. In the statistic section you see the number of modified traps/locks and their summated DCs. This is to give you an idea about the additional XP you would get by disarming/unlocking all traps/locks. However it isn't said that all traps/locks are really reachable (at all or for your chars's race/classes/level/...).
In the XP setting section you can change the XP for disarming a trap / unlocking a lock. The XP you get is the DC of the trap/lock multiplied by a factor. The factor can go from 0 (you'll always get at least 1 XP) to 5. After making modifications in this section click the 'Apply' button to store them.
AXPfUTS should work with modules of any size.
You don't get XP for using a key for unlocking (or if the key is in your inventory).
You don't get XP for unlocking a lock a second time (in case an unlocked lock can be re-locked again).
Optionally you can set AXPfUTS to not award XP for using the "Find Traps" spell. This option is available only if the module hasn't set a spellhook script (again this is for safety reasons). You don't get XP for using the "Knock" spell (because it doesn't seem to trigger OnUnlock events).
(*) You don't get XP for retrieving floor traps. This is because retrieving a floor trap does not trigger the OnDisarm event.
After playing (and disarming/unlocking) for a while you can re-open the AXPfUTS window by repeating steps A)-D) to see some more numbers in the statistic section. Missed traps/locks means that the current number of traps/locks in the module plus the number of disarmed/unlocked traps/locks is less then the number of traps/locks AXPfUTS had found on its first scan. This could be because you've bashed a lock or you've triggered a trap.
Troubleshooting:
If you don't see the AXPfUTS configuration window in step E) there are three possibilities:
a) the window is created only if the mk_axpfuts script is run by the PC. So make sure that OBJECT_SELF in the NWScript window is either your char or OBJECT_INVALID (in this case OBJECT_SELF defaults to your char). So either click 'Invalid' or 'Pick' and select your char.
b) another (very rare) possibility is that the module already contains a script named 'mk_axpfuts.ncs'. In this case you can safely rename 'mk_axpfuts.ncs' (the AXPfUTS one). The name has to be 16 characters or less with extension '.ncs'. However AXPfUTS stops working in older saves then until you repeat steps A)-E) using the new name.
c) you've found a bug you should report here.
Warning:
By using this mod you can get (depending on the number of traps/locks and their DCs) much more XP than you normally would. In particular, much more XP than the module builder expects you to have at a given time. This can lead to boring combat because your character has become far too powerful. If this happens don't blame the module creator for not considering overpowered chars, don't blame me for writing this script but only blame yourself for being too greedy ;).
Some numbers of the official campaigns:
Traps | Locks | |||||
---|---|---|---|---|---|---|
# | DCs | Max | # | DCs | Max | |
Prelude | 1 | 21 | 21 | 2 | 59 | 38 |
Chapter 1 | 103 | 2,513 | 32 | 265 | 6,415 | 32 |
Chapter 1E | 3 | 83 | 34 | 6 | 239 | 34 |
Chapter 2 | 187 | 4,499 | 37 | 271 | 7,294 | 38 |
Chapter 2E | 89 | 2,025 | 39 | 118 | 2,990 | 39 |
Chapter 3 | 128 | 3,863 | 42 | 171 | 5,454 | 42 |
Chapter 4 | 25 | 912 | 45 | 42 | 1,441 | 45 |
536 | 13,916 | 45 | 870 | 23,892 | 45 |
Traps | Locks | |||||
---|---|---|---|---|---|---|
# | DCs | Max | # | DCs | Max | |
Chapter 1 | 20 | 477 | 28 | 19 | 461 | 28 |
Interlude | 52 | 1,491 | 36 | 10 | 277 | 34 |
Chapter 2 | 118 | 2,768 | 31 | 14 | 316 | 32 |
190 | 4,736 | 36 | 43 | 1,054 | 34 |
Traps | Locks | |||||
---|---|---|---|---|---|---|
# | DCs | Max | # | DCs | Max | |
Chapter 1 | 66 | 1,702 | 36 | 36 | 823 | 38 |
Interlude | 48 | 1,438 | 46 | 36 | 1,007 | 44 |
Chapter 2 | 1 | 23 | 23 | 4 | 133 | 40 |
115 | 3,363 | 46 | 76 | 1,963 | 44 |
The mod should be safe to use and should be compatible with probably any existing modules. However in modules already awarding XP for using thieving skills you won't see much of a difference. For example in ADwR EE there are only one trap and two locks without an event script (probably forgotten by the author).
The zip file contains an erf file with the source code (for anyone interested in the scripting).
2025-11-30: version 1.0 uploaded
2025-12-01: version 1.0-1 uploaded (erf file changed, otherwise no change)
2025-12-16: version 1.1 (statistics should no longer get messed up when unlocking/disarming with the NUI window open or collapsed)
If you find any bugs please report them here.
Attachment | Size |
---|---|
AXPfUTS v1.1 (requires NWN EE 8193.36-13) (0) | 119.52 KB |
Well met.
Neat idea. With thorough design, implementation, and documentation. Must have taken you ages. Much appreciated.
Thieves Hall of Fame contender.
—
Phyte: My heart has been locked for longer than I can remember.
Sharwyn: Done, and done.
—
Well done, thank you for sharing!
Many thanks for your work on this "must have" mod for rogues.
I would like to suggest how nice it would be if this was included in your brilliant Customize Character Override Hak Extended Edition (CCOHEE) menu.
I already thought about that and the next update will probably have it. However I think it's much quicker to run the script using the NWScript console (at least if it's the only script you start this way).
Oh my, this is two years late, I guess :-D. Had to set the roguish xp in my modules manually ...
Yes, I guess for module builders it's propably easier assigning the scripts for awarding the XP for unlock/disarm by a script rather then doing it manually in the toolset :D.
New version 1.1 should fix two bugs:
1) the Ignore DCs check boxes now should work as intended
2) statistics should no longer get messed up when unlocking/disarming with the nui window opened/collapsed and then clicking the Modify button. Statistics do not update while the window is open but collapsing, waiting a short moment (otherwise the event is not send) and expanding forces an update.
Thanks Kamiryn! I've been trying to figure this out for years (Almost completly ignorant about scripting ). I just started building again, and this will be ideal for what I'll be trying to do. Just one comment/suggestion and a couple of questions :
If my Rogue fails to disarm the trap, how 'bout he springs the trap instead? Instead of GetXP he loses some HP. Maybe that will convince him to 'Examine' the trap first next time, then decide if it might be above his ability to try disarming it. We learn from our mistakes, and so should the PC.
Querys: What does the .erf install when I 'Import' it into my mod? Where should I put the scripts if that is what was imported? Wouldn't it be easier than going through the 'Override' ?
I couldn't help but notice that you submitted your D/L just ten days ago (today is 12/22/24), and you are watching these comments closley. So, again, Thanks so much for all this.
Roger Dodger
Hello Roger, as far as I know failing to disarm a trap does not trigger an event. Iirc sometimes on critical failures the trap goes off but that part is hard-coded I think. So it's not possible to detect a failed disarm attempt.
The erf file contains the AXPfUTS source code (the scripts). If you only want to award XP for unlocking/disarming you probably don't need them. Depending on how many traps/locks you have in your module it's probably easier to just set their OnUnlock/OnDisarm scripts manually. Of course you can also set these scripts by script (how it is done in AXPfUTS) but even then it's probably better to look how it is done in AXPfUTS and then write your own script.
Also see https://forum.neverwintervault.org/t/xp-script-for-disarming-traps/7427/1 where it all startet.
If you have any questions feel free to ask :).
Thanks for the rapid reply !
as far as I know failing to disarm a trap does not trigger an event. Iirc sometimes on critical failures the trap goes off but that part is hard-coded I think.
Too bad, guess I'll have to talk to Beamdog about that. I know that my Rogue has been injured before if he fails at disabling a trap (or did my henchman try to bash it, and set it off?) Anyway, I think I'll just set the OnUnlock/OnDisarm manually on each trap.
Speaking of the .ERF file, I tried installing it to the ToolSet (v1.5.0.5) FILE/IMPORT. . . menu, but I just get the requestor that says:
"This Module was created with an
updated version of Neverwinter Nights.
Please exit and update the game.
For windows users, Press the UPDATE BUTTON
on the Initial Neverwinter Nights Menu."
Firstly, there is no such button on the initial NWN menu, but I did do a VERIFY/REPAIR function with GOG Galaxy. That did an update of the game as well as add some other stuff as well. I';m now using v88.8193.36.13 of Neverwinter Nights. BUT I still am unable to IMPORT the AXPfUTS.erf (Same Complaint ). So I'l give up on the .erf, and do a manual install script on each trap. Must be a bug in the ToolSet program - Hasn't been a problem Importing .erf s before.
Have a Merry Xmas and the Happiest of New Years.
Roger Dodger
Strange... I did the same (importing the erf into a module on 8193.36-13) but I did not get the error.
The message text is probably still from the old Bioware NWN and was not updated for NWN EE.