I've made an open-source standalone program that watches the chatlog output of NWN and tracks buffs, abilities, and cooldown durations. The Watcher window is set as topmost so it will hover over a windowed session of NWN and allow the game to be played as normal. Think of it like a UI enhancement.
bugfix: One With The Land corrected to One with the Land #54
bugfix: wand of freedom corrected to Wand of Freedom of Movement #53
Features:
Durations of buffs from potions, scrolls, and wands based on in-game item level
Tracking durations and spells from items like Dust of Disappearance; I’m sure this list could be expanded if anyone wants to share more items, but I’ve captured most everything crafting and the few module items I’m aware of
Enter character information for more accurate durations from modifiers
Loremaster levels calculate increased durations for wands and scrolls
Spell Focus feats are calculated for things like Invisibility, True Seeing, and Aura of Vitality
Caster levels and extend meta-magic for casted buffs
Specialist wizard signature spell cooldowns and unique durations for Illusion and Divination
Class ability cooldowns are tracked and thankfully, because Arelith outputs are sane and similar, cooldowns for complex things like Blinding Speed are accurate
Enter charisma modifier and Divine Champion levels for accurate Wrath, Might, and Shield durations
Tracking of staggered Bard Song, Turn Undead, and Smite cooldowns (with the caveat that the cooldowns themselves in-game are not exactly 10 minutes, so these will drift)
Tracking innate ability cooldowns and duration of abilities like Duergar Invisibility; this is the first example of the limitations of the Watcher as it can only collect the “uses Innate Ability” from the chatlog and cannot know what ability the player is using, but this is solved by allowing the user to select the ability they wish to track from the buff window itself with a drop-down menu
Tracking Knockdown duration on a single target, subject to the same limitations of the chatlog
Handling player-made potions (and hence a longer duration) with a toggle on the character window depending on what type of potions you use
Tracks durations of summons and tracks durations of cooldowns for those classes that have refreshed summon casting
Spell cooldowns like Clarity, Time Stop, and Greater Restoration are captured
Edge cases for things like Improved Invisibility actually being two spells in Arelith and how the Invisibility duration can be adjusted in like three different ways, are handled
User can destroy a buff that was removed in some way that’s not capturable, for example if a summon is killed or unsummoned
Rest button to quickly clear all buffs and cooldowns, except for the Scry and godsave cooldowns
When dispelled and breached, removed spells are removed from the Watcher and displayed in another pop-up
Damage shields not stacking
Ability to add your own custom triggers. Requires JSON editing. Player-made items are sometimes branded and change in the chatlog. That means they’ll be missed by the normal triggers looking for “Bull’s Strength” if the potion is renamed to “Maggie’s Magical Strong Juice”. Today, it would be possible for you to simply add another entry to the JSON -- trust me it isn’t hard -- but in the future I have it on my todo list to make it possible to add these custom items from the Watcher.
Unzip the exe and its JSON and graphics sub-folders anywhere
Have your chat logging turned on
Setup the watcher and open the "nwclientLog1" (the location of the log for you is probably in the same directory as mine in this screen shot):
FAQ/Other:
I'm sure I will expand the with edits as questions come up. Please let me know of any bugs or issues. I'm open to the idea of people helping with the code if you want to add a feature or fix a bug. That can all be handled on the GitHub. Python is a pretty easy language to learn. I know because I've learned it these past few months and I've added lots of comments to the source code about how it works.
How do I extend spells?
You've keyed in into a limitation of using the chatlog. There's not way to tell from "User casts Bull's Strength" it it's maximized, extended, empowered, still, or silent. To address this, click on the buff in the Watcher and choose if its extended:
So after you cast an extended spell you have to go into the Watcher and set if its extended. If you mis-click you can un-check or re-check as needed. The Watcher will remember the duration either way.
Last edited by Mattamue on Mon Jun 07, 2021 3:55 am, edited 4 times in total.
Having watched the development of this project from the start, I can attest that the program is awesome and a tremendous amount of work went into it. A real gift to the community! Thanks!
Pala wrote: Tue Jun 01, 2021 7:57 am
This is AMAZING. Thanks so much, man.
Just a heads up from the wands I could test: Freedom of Movement and One With The Land don't seem to come up.
Thank you!
The trigger for Freedom wands didn't spell out "Freedom of Movement". On the list to be fixed.
The trigger for One with the Land in the Watcher is "One With The Land" and it should be "One with the Land". On the list to be fixed.
In the meantime, before I make another release, those are super easy to fix. Go into the use_items.json with any text editor. Find "uses Wand of Freedom" and change it to "uses Wand of Freedom of Movement". Find "uses Wand of One With The Land" and change it to "uses Wand of One with the Land."
Good Character wrote: Tue Jun 01, 2021 11:37 am
Yes! YES! Especially the class cooldowns!
Does it track Taunt and Intimidate?
No, it doesn't track taunt or intimidate. I've added to the list. Intimidate is trickier because it doesn't have any feedback in the chatlog that it actually worked. It could assume that it did work on everyone in AoE and track off that assumption.
Very very neat, though one thing I did notice is that it doesn't seem to be able to tell if I have spells extended. I extend a lot of my buffs so if there is some way to track that awesome, though I'm unsure how easy that is.
Zariu wrote: Tue Jun 01, 2021 2:28 pm
Very very neat, though one thing I did notice is that it doesn't seem to be able to tell if I have spells extended. I extend a lot of my buffs so if there is some way to track that awesome, though I'm unsure how easy that is.
You've keyed in into a limitation of using the chatlog. There's not way to tell from "Zariu casts Bull's Strength" it it's maximized, extended, empowered, still, or silent.
I attempt to address this by allowing you to click on the buff in the Watcher and choose if its extended:
So after you cast an extended spell you have to go into the Watcher and set if its extended. If you mis-click you can un-check or re-check as needed and it'll remember the duration either way.
This is amazing!
I was thinking about making something like this in Autohotkey script, but your implementation is super! Great that data .jsons are editable.
Characters:
Cecil - Active
Qtar Thepetor - Lost in the Void
Rudolfo - Teleported thru the roof
So that extra space is throwing things off. Will be fixed when I release a bugfix for all these little things. Or, it'll start working correctly again on June 10th!
Is it possible to choose which buffs to track? Or do I simply customise the json to my liking? I would personally only want to track round-based stuff so this kind of categorisation would be great if not already featured.
Characters: all poor babies suffering from neglect
Opustus wrote: Fri Jun 11, 2021 12:26 pm
w00ty, this is neat! You are a treasure.
Is it possible to choose which buffs to track? Or do I simply customise the json to my liking? I would personally only want to track round-based stuff so this kind of categorisation would be great if not already featured.
Thanks, was a lot of fun to make. Not built-in feature to choose which buffs to track, but yes you keyed in on how you can make it that way.
I've found that I get a popup every time I disable a trap or unlock a chest alerting me that these properties have been dispelled. O.o
I see there was a bugfix made for this but doesnt seem to have applied? All the other bugfixes appear to have worked (Divine power, regen changes). I suppose it could just be an issue on my end and I'll reinstall for next time I play.
I keep having to select the client log at the start of every session (and server transition I think). I assume this is unavoidable based on how NWN generates the logs but I just thought I'd check if there was a workaround?
Otherwise I've been having a lot of fun with it. Actually it's been awesome. Thanks!
TooManyPotatoes wrote: Fri Jul 02, 2021 2:07 pm
I've found that I get a popup every time I disable a trap or unlock a chest alerting me that these properties have been dispelled. O.o
I see there was a bugfix made for this but doesnt seem to have applied? All the other bugfixes appear to have worked (Divine power, regen changes). I suppose it could just be an issue on my end and I'll reinstall for next time I play.
Are you on version 1.1?
TooManyPotatoes wrote: Fri Jul 02, 2021 2:07 pm
I keep having to select the client log at the start of every session (and server transition I think). I assume this is unavoidable based on how NWN generates the logs but I just thought I'd check if there was a workaround?
There may be something. Here's some insight. The chat log will always have the same "nwclientLog1" name, so I should be able to save that as a default. Then, the program could see if you have a default saved, and just attempt to open that file at program start and start watching. The user would have to only open the watcher after NWN is already running in that case. So I'd also have to have a case for when the user opens the Watcher before NWN is running, and then when NWN starts it creates or replaces that file, so the user would still have to interact or click something... maybe just clicking "watch" will use the saved location and file and forget about having it run at startup. I'll think about how to solve it.
And thanks, glad you like it! I'm simmering on the next feature. Probably AC/AB of the last few attack-ers and attack-ees. I was told I may also be able to add some basic timers to the buffs in-game with NWNX. Still very early on that front.
TooManyPotatoes wrote: Fri Jul 02, 2021 2:07 pm
I've found that I get a popup every time I disable a trap or unlock a chest alerting me that these properties have been dispelled. O.o
I see there was a bugfix made for this but doesnt seem to have applied? All the other bugfixes appear to have worked (Divine power, regen changes). I suppose it could just be an issue on my end and I'll reinstall for next time I play.
Are you on version 1.1?
Haven't been able to reproduce since reinstalling so I guess it was just a problem my end. My bad!
Unfortunately if an enemy dispels you unsuccessfully, nwns logs will still sometimes show bless weapon as being dispelled (even though that is impossible). Is it possible to add an exception in your dispel pop up if bless weapon is "dispelled" in the combat log?
There may be something. Here's some insight. The chat log will always have the same "nwclientLog1" name, so I should be able to save that as a default. Then, the program could see if you have a default saved, and just attempt to open that file at program start and start watching. The user would have to only open the watcher after NWN is already running in that case. So I'd also have to have a case for when the user opens the Watcher before NWN is running, and then when NWN starts it creates or replaces that file, so the user would still have to interact or click something... maybe just clicking "watch" will use the saved location and file and forget about having it run at startup. I'll think about how to solve it.
That would be super cool. It's pretty much the only hassle with the program.
And thanks, glad you like it! I'm simmering on the next feature. Probably AC/AB of the last few attack-ers and attack-ees. I was told I may also be able to add some basic timers to the buffs in-game with NWNX. Still very early on that front.
The AB/AC would be really useful. Especially for my own character as it can be hard to spot it at a glance if there are a lot of enemies. For some enemies I've had to record the last few minutes of gameplay and go through them after the fight to get an idea of their AC/AB. Saving me this effort would be a dream. At any rate I'll be keeping an eye out for the next update!