Jump to content

Recommended Posts

Posted (edited)
On 4/12/2026 at 8:13 PM, hextun said:

 

I just want to say thank you for following up and posting your debug journey. I think that's incredibly helpful for others as it lets them have a peek into what can go wrong and how to make it right. :)

 

 

Hey, I am still working on this and this time I think it is truly something beyond my ability.

 

So - the issue here is that a "Top of the Hour" trigger is triggering multiple times on the hour instead of the expected one time. When the script is assigned to a hotkey, it works perfectly as expected - one button press - one trigger. When it is assigned to a Top of the Hour trigger, it triggers multiple times at once.

 

Here is the current version of my script:

 

set $arousalMulti 0.05
set $actorArousal resultfrom osla_get_arousal $system.player

set $sltrModIndex resultfrom game_dofunction GetModByName "OCum.esp"
if $sltrModIndex != 255
	set $isCummedOn resultfrom actor_isaffectedby $system.player "OCum.esp:0xF15"
	if $isCummedOn != true
		set $arousalMulti $arousalMulti + 0.2
		msg_notify $"Your need for cum grows..."  
	endif
endif

set $arousalIncrease $actorArousal * $arousalMulti
msg_notify $arousalIncrease
osla_modify_arousal $system.player $arousalIncrease "SLTrigger Arousal Increase"

 

In my testing, I already had the OCum spell active, so arousal should only be increasing by 5% of the current arousal every hour. At time of testing, arousal value was about 30. 5% of 30 is 1.5. 

 

When the new hour hit, I was flooded by notifications about the arousal increase value (each about 1.5) when I expected only one notification. The end result was that arousal went from 30 to 56 just by hitting the new hour once.

 

This doesn't seem right, am I misunderstanding the Top of the Hour trigger or is there something wrong with the trigger itself?

 

Also attaching the sl triggers log showing the arousal increase spam with the TOH trigger. sl-triggers.log

Edited by just let me download
Posted
On 4/13/2026 at 7:06 PM, just let me download said:

 

Hey, I am still working on this and this time I think it is truly something beyond my ability.

 

So - the issue here is that a "Top of the Hour" trigger is triggering multiple times on the hour instead of the expected one time. When the script is assigned to a hotkey, it works perfectly as expected - one button press - one trigger. When it is assigned to a Top of the Hour trigger, it triggers multiple times at once.

 

Here is the current version of my script:

 

set $arousalMulti 0.05
set $actorArousal resultfrom osla_get_arousal $system.player

set $sltrModIndex resultfrom game_dofunction GetModByName "OCum.esp"
if $sltrModIndex != 255
	set $isCummedOn resultfrom actor_isaffectedby $system.player "OCum.esp:0xF15"
	if $isCummedOn != true
		set $arousalMulti $arousalMulti + 0.2
		msg_notify $"Your need for cum grows..."  
	endif
endif

set $arousalIncrease $actorArousal * $arousalMulti
msg_notify $arousalIncrease
osla_modify_arousal $system.player $arousalIncrease "SLTrigger Arousal Increase"

 

In my testing, I already had the OCum spell active, so arousal should only be increasing by 5% of the current arousal every hour. At time of testing, arousal value was about 30. 5% of 30 is 1.5. 

 

When the new hour hit, I was flooded by notifications about the arousal increase value (each about 1.5) when I expected only one notification. The end result was that arousal went from 30 to 56 just by hitting the new hour once.

 

This doesn't seem right, am I misunderstanding the Top of the Hour trigger or is there something wrong with the trigger itself?

 

Also attaching the sl triggers log showing the arousal increase spam with the TOH trigger. sl-triggers.log

 

I'll take a look. :)

Posted
On 4/13/2026 at 7:06 PM, just let me download said:

 

Hey, I am still working on this and this time I think it is truly something beyond my ability.

 

So - the issue here is that a "Top of the Hour" trigger is triggering multiple times on the hour instead of the expected one time. When the script is assigned to a hotkey, it works perfectly as expected - one button press - one trigger. When it is assigned to a Top of the Hour trigger, it triggers multiple times at once.

 

Here is the current version of my script:

 

set $arousalMulti 0.05
set $actorArousal resultfrom osla_get_arousal $system.player

set $sltrModIndex resultfrom game_dofunction GetModByName "OCum.esp"
if $sltrModIndex != 255
	set $isCummedOn resultfrom actor_isaffectedby $system.player "OCum.esp:0xF15"
	if $isCummedOn != true
		set $arousalMulti $arousalMulti + 0.2
		msg_notify $"Your need for cum grows..."  
	endif
endif

set $arousalIncrease $actorArousal * $arousalMulti
msg_notify $arousalIncrease
osla_modify_arousal $system.player $arousalIncrease "SLTrigger Arousal Increase"

 

In my testing, I already had the OCum spell active, so arousal should only be increasing by 5% of the current arousal every hour. At time of testing, arousal value was about 30. 5% of 30 is 1.5. 

 

When the new hour hit, I was flooded by notifications about the arousal increase value (each about 1.5) when I expected only one notification. The end result was that arousal went from 30 to 56 just by hitting the new hour once.

 

This doesn't seem right, am I misunderstanding the Top of the Hour trigger or is there something wrong with the trigger itself?

 

Also attaching the sl triggers log showing the arousal increase spam with the TOH trigger. sl-triggers.log

 

Out of curiosity, was this a new character? Or, to put it another way, did the trigger exist when you initially created the character? Or perhaps did you create the trigger when you first created your character, before e.g. leaving the Helgen start point (or whatever start you are using if modded)?

Posted (edited)
5 hours ago, hextun said:

 

Out of curiosity, was this a new character? Or, to put it another way, did the trigger exist when you initially created the character? Or perhaps did you create the trigger when you first created your character, before e.g. leaving the Helgen start point (or whatever start you are using if modded)?

 

It was an existing character that I have been playing for a long time. I added the trigger in the middle of gameplay. I also use the Smart Timescale mod, so my timescale could be anywhere from 10X to 40X real time. Vanilla Skyrim is 20X real time. That could potentially affect things - just thought I'd mention this if you're unable to replicate the issue.

 

I'm happy to answer any questions you have to get to the bottom of this - I really would like to be able to use this trigger and script!

Edited by just let me download
Posted
20 hours ago, just let me download said:

 

It was an existing character that I have been playing for a long time. I added the trigger in the middle of gameplay. I also use the Smart Timescale mod, so my timescale could be anywhere from 10X to 40X real time. Vanilla Skyrim is 20X real time. That could potentially affect things - just thought I'd mention this if you're unable to replicate the issue.

 

I'm happy to answer any questions you have to get to the bottom of this - I really would like to be able to use this trigger and script!

 

Follow up question: What version are you running? 

 

Suggested interim action: Use the Reset option from the SLTriggers Redux MCM. Wait a few moments, then see how things progress. In your log I see what looks like 9 or so instances of "OSLA Increase Arousal.sltscript" being kicked off almost immediately after the various hooks are setup, with no messages from sl_triggersMain regarding the top of the hour calcs.

 

Also, I'll be adjusting the Top of the Hour code and testing the change. No ETA. But I think something else is happening.

 

SE;R (Short Enough; Reading) - I have never liked how I approached the Top of the Hour logic and am going to modify the approach to be a little less finicky. My current approach attempts to account for possible drift in the timing of the OnUpdateGameTime event handler; specifically situations where it runs a little off cadence and fires too early. In such cases I attempt to add in an additional single update registration for the small delta. This accounts for those "Core.OnUpdateGameTime: gametime update ran too early" messages you see. Interesting point however; those *should not* cause the trigger to run. Regardless, I'm going to be modifying this logic to make it (hopefully) cleaner.

 

Of far more importance are the following messages:

[2026-04-13 20:00:26.369] [log] [warning] [sl_triggers.cpp:755] Main.RunningScriptCount.Set: attempted to set negative value(-1); setting to 0

 

Some time ago I changed how scripts are queued and tracked. This message is indicating that at some point SLTR lost track of a script. Think of a script running but not being accounted for, or a script completing but marking down the count more than once. I had seen far more instances of this error at the time, but thought I had flushed them out. It's possible that I missed it somehow, of course.

 

I suspect that either:

a) the queueing is still mucked up and your "OSLA Increase Arousal.sltscript" has been queued but not freed upon execution,

b) you are running an old enough version for that to still be a problem,

c) something about how I am handling the registration of the OnUpdateGameTime handler is borked,

d) some or all of the above.

 

I'll continue to do some testing and (hopefully again) simplification. In the meantime, try the reset and see how it goes.

Posted (edited)
5 hours ago, hextun said:

 

Follow up question: What version are you running? 

 

Suggested interim action: Use the Reset option from the SLTriggers Redux MCM. Wait a few moments, then see how things progress. In your log I see what looks like 9 or so instances of "OSLA Increase Arousal.sltscript" being kicked off almost immediately after the various hooks are setup, with no messages from sl_triggersMain regarding the top of the hour calcs.

 

Also, I'll be adjusting the Top of the Hour code and testing the change. No ETA. But I think something else is happening.

 

SE;R (Short Enough; Reading) - I have never liked how I approached the Top of the Hour logic and am going to modify the approach to be a little less finicky. My current approach attempts to account for possible drift in the timing of the OnUpdateGameTime event handler; specifically situations where it runs a little off cadence and fires too early. In such cases I attempt to add in an additional single update registration for the small delta. This accounts for those "Core.OnUpdateGameTime: gametime update ran too early" messages you see. Interesting point however; those *should not* cause the trigger to run. Regardless, I'm going to be modifying this logic to make it (hopefully) cleaner.

 

Of far more importance are the following messages:

[2026-04-13 20:00:26.369] [log] [warning] [sl_triggers.cpp:755] Main.RunningScriptCount.Set: attempted to set negative value(-1); setting to 0

 

Some time ago I changed how scripts are queued and tracked. This message is indicating that at some point SLTR lost track of a script. Think of a script running but not being accounted for, or a script completing but marking down the count more than once. I had seen far more instances of this error at the time, but thought I had flushed them out. It's possible that I missed it somehow, of course.

 

I suspect that either:

a) the queueing is still mucked up and your "OSLA Increase Arousal.sltscript" has been queued but not freed upon execution,

b) you are running an old enough version for that to still be a problem,

c) something about how I am handling the registration of the OnUpdateGameTime handler is borked,

d) some or all of the above.

 

I'll continue to do some testing and (hopefully again) simplification. In the meantime, try the reset and see how it goes.

 

I am running the current version of SLT: 0.978. I am very hesitant about using the Reset option (but may do it anyway - I just have to take multiple steps in purging the mod first) because it render the MCM completely unusable where several options permanently disappear. I did it for the last version I had installed - I can't remember which version I had previously but I skipped at least 2 updates. I used 0.978 while making/testing this script.


Edit: 

 

In case it helps, I enabled all the debug options other than SL (since I use Ostim) to catch an example where the arousal level updated 3x in one trigger (other things happened so it's a bigger log than the last). sl-triggers.log

 

Also: The notification for the arousal increase amount shows up many more times than the "Your need for cum grows..." message even though there is only 1 of each per trigger activation. I think I saw 5+ notifications of the arousal amount for 1-2 (I was interrupted at exactly that moment so I didn't know if it was 1 or 2) "Your need" message. That may be a clue to solving this strange behavior.

 

Edited by just let me download
Posted (edited)
2 hours ago, just let me download said:

 

I am running the current version of SLT: 0.978. I am very hesitant about using the Reset option (but may do it anyway - I just have to take multiple steps in purging the mod first) because it render the MCM completely unusable where several options permanently disappear. I did it for the last version I had installed - I can't remember which version I had previously but I skipped at least 2 updates. I used 0.978 while making/testing this script.


Edit: 

 

In case it helps, I enabled all the debug options other than SL (since I use Ostim) to catch an example where the arousal level updated 3x in one trigger (other things happened so it's a bigger log than the last). sl-triggers.log

 

Also: The notification for the arousal increase amount shows up many more times than the "Your need for cum grows..." message even though there is only 1 of each per trigger activation. I think I saw 5+ notifications of the arousal amount for 1-2 (I was interrupted at exactly that moment so I didn't know if it was 1 or 2) "Your need" message. That may be a clue to solving this strange behavior.

 

 

Hrmph... well... (edit: this is representative of general dissatisfaction that you are experiencing these problems, not dissatisfaction that you are reporting them or with you; I realized after I posted that this particular bit could come across as somehow upset with you... not my intent :) )

 

1) Reset really really should not blow up your MCM. Not saying you aren't seeing it of course, but if it does (*ugh*), try saving to a new save, exiting the game, and reloading.

 

1a) Guess that's something else for me to reexamine, just to be on the safe side.

 

2) The Reset shouldn't require purging/reinstalling the mod. But in theory doing so should not affect your game.

Edited by hextun
To point out I wasn't being a jerk
Posted (edited)
4 hours ago, hextun said:

 

Hrmph... well... (edit: this is representative of general dissatisfaction that you are experiencing these problems, not dissatisfaction that you are reporting them or with you; I realized after I posted that this particular bit could come across as somehow upset with you... not my intent :) )

 

1) Reset really really should not blow up your MCM. Not saying you aren't seeing it of course, but if it does (*ugh*), try saving to a new save, exiting the game, and reloading.

 

1a) Guess that's something else for me to reexamine, just to be on the safe side.

 

2) The Reset shouldn't require purging/reinstalling the mod. But in theory doing so should not affect your game.

 

 

I didn't do a full purge this time like I normally do for version updates, I just purged everything related to SLTriggers in Resaver without uninstalling the mod in MO2. This time, allowing the ToH trigger resulted in a single output of the arousal increase amount (I had the OCum effect active, so no message for "Your need..."). I'll continue observing to see if purging somehow helped this situation or if it was a one time thing. I'll keep you updated because I don't want to send you on a wild goose chase.

 

If the multiple arousal update issue happens again, I'll try the reset route.

 

Edit: For 3 seperate ToH updates, it seems it now only gives the expected one update on the hour. I'll keep monitoring to see if the multi-update issue comes back under different conditions. 

 

Edit 2: With or without the Cum effect, there is only one update per TOH trigger - so, all is good for me. Just don't know why or how the multiple arousal updates happened earlier.

 

Edit 3: My guesses as to what may have caused it initially, assuming it *wasn't* like that since the beginning, is that I kept reloading my latest save to a point before the hour in order to keep triggering the trigger. This was before I thought of assigning the trigger to a hotkey. I did not do anything like try to purge/reinstall SLTriggers the whole time I was working on the script.
 

Edit 4: It happened again, this time after sleeping for about 6 hours ingame. I had an Ostim scene immediately after sleeping, then the next TOH trigger resulted in a bunch of arousal updates. This is the sl triggers log copied immediately after I noticed the arousal update flood: sl-triggers.log

Edited by just let me download
Posted
8 hours ago, just let me download said:

@hextun Just to make sure you get the notification - sleeping for a few hours is what starts the issue. Please see Edit 4 in my previous reply.

 

Got it. That's actually quite helpful. I think. The change I mentioned I was going to make *should* address this use case. Thanks for helping track this down. :)

 

Posted
On 4/2/2026 at 2:03 PM, thorax339 said:

For the water triggers. Personally i dont use them (and dont plan to) but options are options especially if it doesn't cause any issue if they are not being used. Off the top of my head i thought of 2 possible uses for it, One where the player can automatically swap into a swimsuit when going in the water and reverting back to normal outfit when leaving. Another where its a type of swimming skill that slows the player down while swimming unless you spend a lot of time swimming to build up the skill and then you can swim faster. Maybe in the Wiki you could mention potential intensive / volatile events where you have the events explained.

 

Speaking of triggers tho. i was trying to find an event to try my matchmaker style script on. I wanted it to fire while in safe locations so i chose Timer Based with Location set to "safe"

While inside the Falkreath Inn, Dead Mans Drink, It was not going off even on a 1 minute timer. Tried setting the location to be "inn" and that didn't work either. Trying just "Top of the Hour" did work so i know it wasn't to do with the script itself. Script ofc works when using the Slt run console commands.

Also just double checked using SSEEdit, the location is still an Inn/Dwelling and nothing has overwritten it.
Setting location to "Any" also allowed the script to run so something might be going wrong with specifying locations

To test further i added a location tester in my script itself and was able to get it working that way so i have a workaround atleast. Technically the workaround works better as i can specify more potential locations than the trigger lets me choose.

 

I reviewed the location matching logic and have come to the realization that I wrote some very, very... VERY... very... awful code.

 

*sigh*

 

Okay, so, for whatever reason (probably in pursuit of speed optimization to avoid extraneous lookups and cache some results somewhere) if you said something like "only match when Location is X":

WHAT I WAS DOING (and what your copy is doing until the next release):

- Iterate the list of potential keywords

-- Set the first match as the keyword for the location

-- Compare that keyword against other keywords to determine the match (i.e. "Inn" or for Safe(Inn or Jail or PlayerHome)

 

This is so wrong. So so wrong. Because what if a location matches multiple of the keywords? And what if the first hit doesn't match one you were looking for? Like say a certain Inn in Falkreath named Dead Man's Drink?

 

Dead Man's Drink has two keywords, LocTypeDwelling and LocTypeInn. Since LocTypeDwelling is listed first, if you are in Dead Man's Drink it will return LocTypeDwelling as its current location keyword. But that will only match if you picked "In City" or "Dwelling". It will not help if you picked "Inn".

 

*sigh*

 

*sigh*

 

What I should have done, and will be doing as of the next release (already tested it) is to simply check to see if any required keyword is found in the Location. I literally already had that logic encapsulated as a function, but for some inexplicable reason (seriously, what was I thinking) had encapsulated an entirely different set of logic using this stupid keyword bullshit.

 

You won't need to modify a trigger if you've already configured it how you expected it to work. But it should now start working more reliably.

 

*sigh*

 

I *think* that wraps up the pending work I wanted done. 

 

Note: The Chinese localization is going to be incomplete, but I went ahead and added the keys with the English translations in place in case some enterprising soul wishes to finish that piece up. 

Posted

Okay, dropped 0.979. Technically not a breaking change, but if you want the Location matching to work correctly (or really anything I fixed here), you will want to upgrade.

 

First, the changelog entry:

Spoiler
Savegame compatible
Reminder: Note that logging output is all sent to <My Documents>\My Games\Skyrim Special Edition\SKSE\sl-triggers.log 
    (or whichever folder you have your SKSE logs directed to)
bugfix: TopOfTheHour not handling sleep/wait correctly; general TOH calculation overhaul
bugfix: multiple documentation fixes
bugfix: util_scan_cell_npcs now correctly accepts 'none' (or no parameters at all) as the objCenter (first parameter)
bugfix: clarified the Location: dropdown; Dungeon was listed twice; first use references multiple Dungeon-like locations, second use is for specific Dungeon keyword
bugfix: fixed Location matching
enhancement: new Core trigger, Player Level Up
    request variables:
        $request.core.level_up.old_level : int - (Added by SLTR Core) (for Level Up) the player's level before leveling up (as they may have accrued multiple levels)
        $request.core.level_up.new_level : int - (Added by SLTR Core) (for Level Up) the player's level after leveling up (as they may have accrued multiple levels)
enhancement: More localization/translation in the MCM
    I have created and configured the localization tokens and added them for both English and Chinese (as these are the only translation files I currently have)
    I have *not* translated the Chinese localization for the newly added items (I am not a native speaker and have left them in English until I can get an updated version)
    Other language translations will just require an updated copy of interface/translations/sl_triggers_ENGLISH.txt (but in the new language of course)
enhancement: Public Whore integration
    pw_is_whore_anywhere - returns true if the player is currently marked as the public whore anywhere, false otherwise

 

 

So..

- TopOfTheHour trigger should work more consistently now and with none of the script flooding that was happening

- util_scan_cell_npcs should now properly handle the 'none' (or no parameter) cases, defaulting properly to use the player

- Location matching should now work properly

- new trigger: Player Level Up (adds two new request variables)

- tiny bit of integration with Public Whore (I wanted to be able to test for being the public whore and felt it would be rude not to share)

- MCM localization is now wired up *BUT* the Chinese localization (which was the only non-English localization I had) is now only partially complete; the localization file has all the tags but the new ones are in English. I am hoping someone will come along and complete the translation, but otherwise it's only half-baked.

 

On the localization/translation front: If you feel up to translating the MCM bits, you can crack open the mod and visit "interface/translations/sl_triggers_ENGLISH.txt" and make a new copy for your language. Note this is using SkyUI's MCM localization functionality. I am aware there are tools to use Google Translate API to automatically generate translations but I haven't gotten around to that. If anyone already has it set up and wishes to give it a go, I'll be happy to consider incorporating it.

Posted

Thanks for the update! I will re-test my TOH script and see how it goes. If something else comes up, I'll let you know. Also - this is the first version that updated the version number on its own without my usual 3-step uninstall-purge-reinstall process. Not sure if you did anything special this time around, just thought I'd mention it.

Posted
On 4/19/2026 at 7:53 PM, just let me download said:

Thanks for the update! I will re-test my TOH script and see how it goes. If something else comes up, I'll let you know. Also - this is the first version that updated the version number on its own without my usual 3-step uninstall-purge-reinstall process. Not sure if you did anything special this time around, just thought I'd mention it.

 

Thanks! I didn't do anything special. It should have worked like that for the previous versions. *shrug*

 

Posted

would playing arbitrary sound files be possible?

the "Voiced Books of Skyrim" mod lets you play wav files when opening books. https://www.nexusmods.com/skyrimspecialedition/mods/16741, filename can be whatever, the mod just plays whatever sound file you tell it to by using an ini file to map books and sound files, so it doesnt limit you to playing sounds predefined by mods.

 

would be handy for playing custom voice lines for individual sl anim stages and whatnot, even if the voice is not played from a particular actor in 3d space.

context aware sl anim voicelines if you check for actor name or race and play sound files based on that, could for example play custom voice lines for specific npcs

Posted
7 hours ago, henrillama said:

would playing arbitrary sound files be possible?

the "Voiced Books of Skyrim" mod lets you play wav files when opening books. https://www.nexusmods.com/skyrimspecialedition/mods/16741, filename can be whatever, the mod just plays whatever sound file you tell it to by using an ini file to map books and sound files, so it doesnt limit you to playing sounds predefined by mods.

 

would be handy for playing custom voice lines for individual sl anim stages and whatnot, even if the voice is not played from a particular actor in 3d space.

context aware sl anim voicelines if you check for actor name or race and play sound files based on that, could for example play custom voice lines for specific npcs

 

The snd_play (https://github.com/sltriggersredux/sltriggersredux/wiki/Function-Libraries#snd_play) function is what you are looking for, which uses the same mechanism that the mod you linked uses. Namely, it loads a Sound object from an .esp via the form ID and then plays it.

 

I'm going to thank you real quick, by the way; because this mod focuses solely on playing sound records, it gave me a lot more info. This question of how to do this has come up before and I haven't had the knowledge to give more info than "use snd_play".

 

Based on examining the .esp and .bsa...

- the mod uses .xwm audio format

-- .xwm is apparently often used by Bethesda

-- you can get an mp3->xwm formatter here https://www.nexusmods.com/fallout4/mods/24888 (it's "for fallout" but since it's just converting files I assume it should be fine)

 

- but base Skyrim appears to use .wav files directly

-- not sure why you would choose one over the other, perhaps space?

--- would require investigation of xwm vs wav

 

- bundling into a .bsa is presumably an optional optimization choice

-- regardless, you would need to make note of where you placed the files under your mod

-- i.e. data\sound\fx\yourmodname\your-sound-file.xwm (or .wav if you prefer)

 

- in an .esp, you would need a SNDR record for each audio file (Sound Descriptor)

-- Note: I strongly suspect this is linked to dialog voice vs (for example) music.

--- note that the output models (if you try to select one in xedit) include a lot of voice related options

--- but further note that there exist MUSC and MUST records which are music related

-- I know next to nothing about this, but you could probably use the Voice Books mod as a source of inspiration (as I am)

-- ONAM (Output Model) is set to SOMDialogue2D for all of the ones provided by the mod, but there appear to be a lot of choices

 

- you would also need the SOUN (Sound Marker) records

-- these point to the SNDR records

-- this is the object you need the FormID of to pass to snd_play

 

Now, that's perhaps useful if you are constructing your own sound bank, but if you are looking to play a sound that already exists, you would need to find the SOUN record in the .esp (or Skyrim.esm if it's the base game) that you want to play and then reference that in your SLTScript.

 

So, for example, suppose you wanted to play the "skill increase" sound that you hear when leveling up. That SOUN (Sound Marker) record has form ID 0x00018538, and editorID UISkillIncrease. You could use:

snd_play 0x18538 $system.player

-or-

snd_play UISkllIncrease $system.player

 

Now... having said all that... if what you want is to plop down a .wav file and just call something to play it, I don't think that there is an option to do that. To get the Skyrim engine to play a sound I think requires you go through the hoops of linking the actual sound file through internal sound objects like SOUN and SNDR objects in an .esp.

 

Does that help? Which were you trying to do (play existing sounds in an .esp or play .wav files directly)?

Posted
3 hours ago, hextun said:

 

The snd_play (https://github.com/sltriggersredux/sltriggersredux/wiki/Function-Libraries#snd_play) function is what you are looking for, which uses the same mechanism that the mod you linked uses. Namely, it loads a Sound object from an .esp via the form ID and then plays it.

 

I'm going to thank you real quick, by the way; because this mod focuses solely on playing sound records, it gave me a lot more info. This question of how to do this has come up before and I haven't had the knowledge to give more info than "use snd_play".

 

Based on examining the .esp and .bsa...

- the mod uses .xwm audio format

-- .xwm is apparently often used by Bethesda

-- you can get an mp3->xwm formatter here https://www.nexusmods.com/fallout4/mods/24888 (it's "for fallout" but since it's just converting files I assume it should be fine)

 

- but base Skyrim appears to use .wav files directly

-- not sure why you would choose one over the other, perhaps space?

--- would require investigation of xwm vs wav

 

- bundling into a .bsa is presumably an optional optimization choice

-- regardless, you would need to make note of where you placed the files under your mod

-- i.e. data\sound\fx\yourmodname\your-sound-file.xwm (or .wav if you prefer)

 

- in an .esp, you would need a SNDR record for each audio file (Sound Descriptor)

-- Note: I strongly suspect this is linked to dialog voice vs (for example) music.

--- note that the output models (if you try to select one in xedit) include a lot of voice related options

--- but further note that there exist MUSC and MUST records which are music related

-- I know next to nothing about this, but you could probably use the Voice Books mod as a source of inspiration (as I am)

-- ONAM (Output Model) is set to SOMDialogue2D for all of the ones provided by the mod, but there appear to be a lot of choices

 

- you would also need the SOUN (Sound Marker) records

-- these point to the SNDR records

-- this is the object you need the FormID of to pass to snd_play

 

Now, that's perhaps useful if you are constructing your own sound bank, but if you are looking to play a sound that already exists, you would need to find the SOUN record in the .esp (or Skyrim.esm if it's the base game) that you want to play and then reference that in your SLTScript.

 

So, for example, suppose you wanted to play the "skill increase" sound that you hear when leveling up. That SOUN (Sound Marker) record has form ID 0x00018538, and editorID UISkillIncrease. You could use:

snd_play 0x18538 $system.player

-or-

snd_play UISkllIncrease $system.player

 

Now... having said all that... if what you want is to plop down a .wav file and just call something to play it, I don't think that there is an option to do that. To get the Skyrim engine to play a sound I think requires you go through the hoops of linking the actual sound file through internal sound objects like SOUN and SNDR objects in an .esp.

 

Does that help? Which were you trying to do (play existing sounds in an .esp or play .wav files directly)?

 

the thing is that voiced books doesn't need a specific filepath for audio files.

I can tell it to play "sound\fx\voicedbooksofskyrim\test.wav" when I open a given book, and it will work no problems, even when there is no records in the mod itself which contains that path.

I checked with SSEEdit, the voiced books mod only has one sound record and one sound descriptor, pointing to "sound\fx\xxx_placeholder_silence.wav".

So it appears to play soundfiles without relying on sound records, meaning it lets you play arbitrary audio files. Whereas the snd_play function requires a predefined sound with a corresponding sound descriptor, at least as far as I can tell. That is the limit I was hoping to avoid.

I'm not sure it even uses skyrims engine to play sound files, the sound doesn't appear to be playing from an actor ingame but rather just play as if you opened it with an audio player program.

Posted
10 hours ago, henrillama said:

 

the thing is that voiced books doesn't need a specific filepath for audio files.

I can tell it to play "sound\fx\voicedbooksofskyrim\test.wav" when I open a given book, and it will work no problems, even when there is no records in the mod itself which contains that path.

I checked with SSEEdit, the voiced books mod only has one sound record and one sound descriptor, pointing to "sound\fx\xxx_placeholder_silence.wav".

So it appears to play soundfiles without relying on sound records, meaning it lets you play arbitrary audio files. Whereas the snd_play function requires a predefined sound with a corresponding sound descriptor, at least as far as I can tell. That is the limit I was hoping to avoid.

I'm not sure it even uses skyrims engine to play sound files, the sound doesn't appear to be playing from an actor ingame but rather just play as if you opened it with an audio player program.

 

Ah... you had linked to Audiobooks of Skyrim but were describing Voiced Books of Skyrim (which is a rewrite). The Audiobooks of Skyrim mod does indeed have the SOUN and SNDR records I described, and the Papyrus scripts, when decompiled, show that it uses standard Papyrus API calls to achieve the readback.

 

Voiced Books of Skyrim adds a sound playback mechanism via SKSE plugin .dll, where it dynamically creates the appropriate sound record from the path you provide, and then sends that to the sound engine.

 

...

 

On the one hand, SLTR also has a SKSE plugin .dll, so it's not like I don't have the ability to add similar functionality. But I'm not sure how I feel about doing so. Not to mention part of the process involves sending back an event to the Papyrus side, notifying it when the sound playback, running via a detached thread, completes, and not only am I hesitant to add more threading I don't currently have a good way to, for example, communicate an event back to a running SLTScript.

 

I'm not saying "no" but I am saying "umm... gonna have to think about whether this is worth taking on".

Posted
5 hours ago, hextun said:

 

Ah... you had linked to Audiobooks of Skyrim but were describing Voiced Books of Skyrim (which is a rewrite). The Audiobooks of Skyrim mod does indeed have the SOUN and SNDR records I described, and the Papyrus scripts, when decompiled, show that it uses standard Papyrus API calls to achieve the readback.

 

Voiced Books of Skyrim adds a sound playback mechanism via SKSE plugin .dll, where it dynamically creates the appropriate sound record from the path you provide, and then sends that to the sound engine.

 

...

 

On the one hand, SLTR also has a SKSE plugin .dll, so it's not like I don't have the ability to add similar functionality. But I'm not sure how I feel about doing so. Not to mention part of the process involves sending back an event to the Papyrus side, notifying it when the sound playback, running via a detached thread, completes, and not only am I hesitant to add more threading I don't currently have a good way to, for example, communicate an event back to a running SLTScript.

 

I'm not saying "no" but I am saying "umm... gonna have to think about whether this is worth taking on".

 

My bad. thought I made sure to link the correct one. Need to stop having so many damn tabs open at the same time.

And very understandable, nnobody wants to play with threads more than they have to. Especially when it sounds like it relies on hacks to introduce dynamic records.

For now, i'll make a dummy mod with a ton of sounds records with SSEEdit, then play them as needed. Should hopefully work just fine for custom audio.

And just to add, thanks for the very dope mod. gonna be fun to play around with it some more, being able to edit scripts on the fly without even needing to compile is absolutely nuts.

Posted
On 4/26/2026 at 12:23 PM, henrillama said:

 

My bad. thought I made sure to link the correct one. Need to stop having so many damn tabs open at the same time.

And very understandable, nnobody wants to play with threads more than they have to. Especially when it sounds like it relies on hacks to introduce dynamic records.

For now, i'll make a dummy mod with a ton of sounds records with SSEEdit, then play them as needed. Should hopefully work just fine for custom audio.

And just to add, thanks for the very dope mod. gonna be fun to play around with it some more, being able to edit scripts on the fly without even needing to compile is absolutely nuts.

 

Glad you enjoy it! :)

Posted

Thanks for putting this mod together, would it be possible to set up the VampireFeed perk or OnVampireFeed event to be triggered by a Sexlab scene tagged with Oral or Blowjob?
I have asked here already and I am hoping it's possible.

Ty!

 

Posted
16 hours ago, MessyBellySlaps said:

Thanks for putting this mod together, would it be possible to set up the VampireFeed perk or OnVampireFeed event to be triggered by a Sexlab scene tagged with Oral or Blowjob?
I have asked here already and I am hoping it's possible.

Ty!

 

 

So, if I am understanding correctly, you would want SexLab scenes tagged "Oral" or "Blowjob" to reduce the player's current vampirism stage back to 1?

 

Note that the other mods you linked to (Vampiric Cum Addiction and SexLab Cumpires), if I am not mistaken, also eliminate your ability feed via blood. SLTR won't do that.

  • 3 weeks later...
Posted

New version, 0.980. Added for your entertainment:

 

cursor_ref - returns the object under cursor, including Actors, via Game.GetCurrentCrosshairRef()

 

So, for example, you could create a Key Mapping Core event, use cursor_ref and store the returned value into, say, a global variable. If you were pointing at an actor at the time, that Actor's ObjectReference will be stored as a Form. Then later, in another script (or immediately in the same script; you do you, chief), you could make use of that Actor.

 

Put another way, create a Key Mapping Core event and point at this script to trigger a sex event with the player and whomever you were pointing at at the time:

 

set $other_actor resultfrom cursor_ref

if $other_actor != none
	Form[] $actors
	set $actors[0] = $system.player
	set $actors[1] = $other_actor
	sl_startsex $actors none "Vaginal" false
else
	msg_notify "Unable to obtain Actor under cursor"
endif

 

Posted

hey @hextun

 

was wondering why this script creates bloat when set to timer = every 4 minutes.

 

= after playing for ~20 minutes i get ~ 400 suspended stacks per resaver and papyrus engine stops working.

Also, i noticed that this script tends to fire up several times in parallel according to the logs

 

Spoiler
; =============================================================================
; _dom_persona_read.sltscript
; =============================================================================
; PURPOSE: Timer-driven in SL Triggers MCM (you set the interval, e.g. 2 minutes). Same
;          scan/cast flow as _dom_persona_read_hourly_v1 copy.sltscript: bare
;          util_scan_cell_npcs (whole cell), actor_infaction == false,
;          spell_cast, cap $MAX_TARGETS. After cast: female or futa (gender 1/2), if
;          DOMVirginOral/Anal/Vaginal rank == 4, roll and set DOMTrain* (csv buckets).
;          Bump $SCRIPT_VERSION (v2l, v2m, …) on edits.
;
; NOTE: Disable any other SL Triggers rule that runs _dom_persona_read_hourly_v1.sltscript
;       (not the "copy" reference file) — duplicate runs still cast/train; use one timer rule.
;
; TRIGGER: SL Triggers timer (interval not read by this script — set in MCM only).
; =============================================================================
 
; -----------------------------------------------------------------------------
; USER-EDITABLE CONFIG
; -----------------------------------------------------------------------------
set $SCRIPT_VERSION "v2m"
; $MAX_TARGETS : maximum casts per trigger run
set $MAX_TARGETS 5
 
deb_msg "[DOM-PR] " $SCRIPT_VERSION " STEP=INIT script enter Persona Read timer fired"
deb_msg "[DOM-PR] " $SCRIPT_VERSION " CONFIG MAX_TARGETS=" $MAX_TARGETS " (cast cap per run)"
msg_notify "[DOM-PR] " $SCRIPT_VERSION " Persona Read triggered"
 
; -----------------------------------------------------------------------------
; RESOLVE FORMS (editor-ID lookup)
; -----------------------------------------------------------------------------
set $facetSmartness resultfrom form_getbyid "DOMFacetSmartness"
deb_msg "[DOM-PR] " $SCRIPT_VERSION " STEP=FORM form_getbyid editor=DOMFacetSmartness -> facetSmartness form (none=missing mod)"
set $personaSpell resultfrom form_getbyid "DOMPersonaReadSpell"
deb_msg "[DOM-PR] " $SCRIPT_VERSION " STEP=FORM form_getbyid editor=DOMPersonaReadSpell -> personaSpell form (none=missing mod)"
set $domVirginAnal resultfrom form_getbyid "DOMVirginAnal"
deb_msg "[DOM-PR] " $SCRIPT_VERSION " STEP=FORM form_getbyid editor=DOMVirginAnal -> virginAnal faction (train gate later)"
set $domVirginVaginal resultfrom form_getbyid "DOMVirginVaginal"
deb_msg "[DOM-PR] " $SCRIPT_VERSION " STEP=FORM form_getbyid editor=DOMVirginVaginal -> virginVaginal faction"
set $domVirginOral resultfrom form_getbyid "DOMVirginOral"
deb_msg "[DOM-PR] " $SCRIPT_VERSION " STEP=FORM form_getbyid editor=DOMVirginOral -> virginOral faction"
set $domTrainAnal resultfrom form_getbyid "DOMTrainAnal"
deb_msg "[DOM-PR] " $SCRIPT_VERSION " STEP=FORM form_getbyid editor=DOMTrainAnal -> trainAnal faction"
set $domTrainVaginal resultfrom form_getbyid "DOMTrainVaginal"
deb_msg "[DOM-PR] " $SCRIPT_VERSION " STEP=FORM form_getbyid editor=DOMTrainVaginal -> trainVaginal faction"
set $domTrainOral resultfrom form_getbyid "DOMTrainOral"
deb_msg "[DOM-PR] " $SCRIPT_VERSION " STEP=FORM form_getbyid editor=DOMTrainOral -> trainOral faction"
 
if $facetSmartness == none
    deb_msg "[DOM-PR] " $SCRIPT_VERSION " ABORT STEP=FORM editor=DOMFacetSmartness result=none (install DOM / facet mod)"
    msg_notify "[DOM-PR] " $SCRIPT_VERSION " Faction DOMFacetSmartness not found"
    return
endif
 
if $personaSpell == none
    deb_msg "[DOM-PR] " $SCRIPT_VERSION " ABORT STEP=FORM editor=DOMPersonaReadSpell result=none"
    msg_notify "[DOM-PR] " $SCRIPT_VERSION " Spell DOMPersonaReadSpell not found"
    return
endif
 
if $domVirginAnal == none
    deb_msg "[DOM-PR] " $SCRIPT_VERSION " WARN STEP=FORM editor=DOMVirginAnal missing -> SKIP train anal branch (actor_getfactionrank DOMVirginAnal)"
endif
if $domVirginVaginal == none
    deb_msg "[DOM-PR] " $SCRIPT_VERSION " WARN STEP=FORM editor=DOMVirginVaginal missing -> SKIP train vaginal branch"
endif
if $domVirginOral == none
    deb_msg "[DOM-PR] " $SCRIPT_VERSION " WARN STEP=FORM editor=DOMVirginOral missing -> SKIP train oral branch"
endif
if $domTrainAnal == none
    deb_msg "[DOM-PR] " $SCRIPT_VERSION " WARN STEP=FORM editor=DOMTrainAnal missing -> SKIP set rank anal"
endif
if $domTrainVaginal == none
    deb_msg "[DOM-PR] " $SCRIPT_VERSION " WARN STEP=FORM editor=DOMTrainVaginal missing -> SKIP set rank vaginal"
endif
if $domTrainOral == none
    deb_msg "[DOM-PR] " $SCRIPT_VERSION " WARN STEP=FORM editor=DOMTrainOral missing -> SKIP set rank oral"
endif
 
; -----------------------------------------------------------------------------
; SCAN NEARBY NPCS (official pattern: no args = player center, whole cell, no keyword)
; -----------------------------------------------------------------------------
deb_msg "[DOM-PR] " $SCRIPT_VERSION " STEP=SCAN util_scan_cell_npcs (no args) center=player default radius=whole cell dead=ignored"
set $nearby resultfrom util_scan_cell_npcs
set $count resultfrom listcount $nearby
deb_msg "[DOM-PR] " $SCRIPT_VERSION " STEP=SCAN result listCount=$count variable=nearby (Form[] NPC refs)"
 
if $count == 0
    deb_msg "[DOM-PR] " $SCRIPT_VERSION " EXIT STEP=SCAN listCount=0 no NPC refs -> return"
    return
endif
 
; -----------------------------------------------------------------------------
; ITERATE AND CAST (same gate as v1 copy: resultfrom + == true / == false)
; -----------------------------------------------------------------------------
set $i 0
set $cast 0
deb_msg "[DOM-PR] " $SCRIPT_VERSION " STEP=LOOP begin while i<listCount i=0 castSoFar=0 cap=MAX_TARGETS"
 
while $i < $count
    if $cast >= $MAX_TARGETS
        deb_msg "[DOM-PR] " $SCRIPT_VERSION " STEP=LOOP halt castSoFar=" $cast " >= MAX_TARGETS=" $MAX_TARGETS " -> goto done (no more casts this run)"
        goto [done]
    endif
 
    deb_msg "[DOM-PR] " $SCRIPT_VERSION " STEP=LOOP body iter index i=" $i " listCount=" $count " castSoFar=" $cast " (next=nearby ref)"
 
    set $npc $nearby[$i]
 
    set $isValid resultfrom actor_isvalid $npc
    deb_msg "[DOM-PR] " $SCRIPT_VERSION " CHECK actor_isvalid nearby[i=" $i "] -> isValid=" $isValid " (true=Actor ref)"
    if $isValid == true
        set $isPlayer resultfrom actor_isplayer $npc
        deb_msg "[DOM-PR] " $SCRIPT_VERSION " CHECK actor_isplayer nearby[i=" $i "] -> isPlayer=" $isPlayer " (true=skip player not NPC)"
        if $isPlayer == false
            set $npcName resultfrom actor_name $npc
            deb_msg "[DOM-PR] " $SCRIPT_VERSION " STEP=LOOP actor identity i=" $i " name=" $npcName " (next=actor_infaction DOMFacetSmartness)"
 
            deb_msg "[DOM-PR] " $SCRIPT_VERSION " CHECK actor_infaction faction=DOMFacetSmartness (facetSmartness form) actor=" $npcName
            set $inFaction resultfrom actor_infaction $npc $facetSmartness
            deb_msg "[DOM-PR] " $SCRIPT_VERSION " RESULT actor_infaction DOMFacetSmartness name=" $npcName " inFaction=" $inFaction " (false=not yet smartness -> CAST spell)"
            if $inFaction == false
                deb_msg "[DOM-PR] " $SCRIPT_VERSION " ACTION spell_cast spell=DOMPersonaReadSpell target=" $npcName " (persona read)"
                spell_cast $personaSpell $npc
                inc $cast 1
                deb_msg "[DOM-PR] " $SCRIPT_VERSION " RESULT cast count castSoFar=" $cast " after spell_cast"
                ; female (1) or futa (2): train ranks if virgin faction rank == 4
                deb_msg "[DOM-PR] " $SCRIPT_VERSION " STEP=train actor_getgender name=" $npcName
                actor_getgender $npc
                set $gender $$
                deb_msg "[DOM-PR] " $SCRIPT_VERSION " RESULT actor_getgender name=" $npcName " gender=" $gender " (1=female 2=futa 0=male)"
                set $doVirginTrain false
                if $gender == 1
                    set $doVirginTrain true
                endif
                if $gender == 2
                    set $doVirginTrain true
                endif
                if $doVirginTrain == true
                    deb_msg "[DOM-PR] " $SCRIPT_VERSION " STEP=train enter virgin rank reads for name=" $npcName " (rank 4 = train gate per lane; form none = lane skipped entirely)"
                    if $domVirginOral != none
                        set $vrOral resultfrom actor_getfactionrank $npc $domVirginOral
                        deb_msg "[DOM-PR] " $SCRIPT_VERSION " RESULT actor_getfactionrank faction=DOMVirginOral name=" $npcName " rank=" $vrOral
                    endif
                    if $domVirginAnal != none
                        set $vrAnal resultfrom actor_getfactionrank $npc $domVirginAnal
                        deb_msg "[DOM-PR] " $SCRIPT_VERSION " RESULT actor_getfactionrank faction=DOMVirginAnal name=" $npcName " rank=" $vrAnal
                    endif
                    if $domVirginVaginal != none
                        set $vrVag resultfrom actor_getfactionrank $npc $domVirginVaginal
                        deb_msg "[DOM-PR] " $SCRIPT_VERSION " RESULT actor_getfactionrank faction=DOMVirginVaginal name=" $npcName " rank=" $vrVag
                    endif
                    if $domVirginOral != none
                        if $domTrainOral != none
                            if $vrOral == 4
                                deb_msg "[DOM-PR] " $SCRIPT_VERSION " ACTION gosub roll oral DOMVirginOral rank==4 name=" $npcName
                                gosub sub_roll_train_oral
                                actor_setfactionrank $npc $domTrainOral $trainRank
                                deb_msg "[DOM-PR] " $SCRIPT_VERSION " RESULT actor_setfactionrank faction=DOMTrainOral name=" $npcName " trainRank=" $trainRank
                            else
                                deb_msg "[DOM-PR] " $SCRIPT_VERSION " SKIP train oral DOMVirginOral rank=" $vrOral " (need 4) name=" $npcName
                            endif
                        else
                            deb_msg "[DOM-PR] " $SCRIPT_VERSION " SKIP train oral DOMTrainOral form missing name=" $npcName
                        endif
                    else
                        deb_msg "[DOM-PR] " $SCRIPT_VERSION " SKIP train oral DOMVirginOral form missing name=" $npcName
                    endif
                    if $domVirginAnal != none
                        if $domTrainAnal != none
                            if $vrAnal == 4
                                deb_msg "[DOM-PR] " $SCRIPT_VERSION " ACTION gosub roll anal DOMVirginAnal rank==4 name=" $npcName
                                gosub sub_roll_train_anal
                                actor_setfactionrank $npc $domTrainAnal $trainRank
                                deb_msg "[DOM-PR] " $SCRIPT_VERSION " RESULT actor_setfactionrank faction=DOMTrainAnal name=" $npcName " trainRank=" $trainRank
                            else
                                deb_msg "[DOM-PR] " $SCRIPT_VERSION " SKIP train anal DOMVirginAnal rank=" $vrAnal " (need 4) name=" $npcName
                            endif
                        else
                            deb_msg "[DOM-PR] " $SCRIPT_VERSION " SKIP train anal DOMTrainAnal form missing name=" $npcName
                        endif
                    else
                        deb_msg "[DOM-PR] " $SCRIPT_VERSION " SKIP train anal DOMVirginAnal form missing name=" $npcName
                    endif
                    if $domVirginVaginal != none
                        if $domTrainVaginal != none
                            if $vrVag == 4
                                deb_msg "[DOM-PR] " $SCRIPT_VERSION " ACTION gosub roll vaginal DOMVirginVaginal rank==4 name=" $npcName
                                gosub sub_roll_train_vaginal
                                actor_setfactionrank $npc $domTrainVaginal $trainRank
                                deb_msg "[DOM-PR] " $SCRIPT_VERSION " RESULT actor_setfactionrank faction=DOMTrainVaginal name=" $npcName " trainRank=" $trainRank
                            else
                                deb_msg "[DOM-PR] " $SCRIPT_VERSION " SKIP train vaginal DOMVirginVaginal rank=" $vrVag " (need 4) name=" $npcName
                            endif
                        else
                            deb_msg "[DOM-PR] " $SCRIPT_VERSION " SKIP train vaginal DOMTrainVaginal form missing name=" $npcName
                        endif
                    else
                        deb_msg "[DOM-PR] " $SCRIPT_VERSION " SKIP train vaginal DOMVirginVaginal form missing name=" $npcName
                    endif
                else
                    deb_msg "[DOM-PR] " $SCRIPT_VERSION " SKIP train branch gender=" $gender " name=" $npcName " (only female=1 or futa=2 get virgin train rolls)"
                endif
            else
                deb_msg "[DOM-PR] " $SCRIPT_VERSION " SKIP persona DOMFacetSmartness actor_infaction=true already has facet name=" $npcName
            endif
        else
            set $plName resultfrom actor_name $npc
            deb_msg "[DOM-PR] " $SCRIPT_VERSION " SKIP player ref actor_isplayer=true index i=" $i " name=" $plName " (not an NPC target)"
        endif
    else
        typeid $npc
        set $badTypeid $$
        form_dogetter $npc GetFormID
        set $badFormid $$
        actor_name $npc
        set $badName $$
        deb_msg "[DOM-PR] " $SCRIPT_VERSION " SKIP invalid ref index i=" $i " actor_isvalid=false typeid=" $badTypeid " GetFormID=" $badFormid " name=" $badName
    endif
 
    deb_msg "[DOM-PR] " $SCRIPT_VERSION " STEP=LOOP end iteration i=" $i " advancing i++"
    inc $i 1
endwhile
 
[done]
deb_msg "[DOM-PR] " $SCRIPT_VERSION " STEP=done label castSoFar=" $cast " (persona casts this run)"
if $cast > 0
    msg_notify "[DOM-PR] " $SCRIPT_VERSION " Read " $cast " mind(s)"
else
    deb_msg "[DOM-PR] " $SCRIPT_VERSION " RESULT castSoFar=0 (no DOMPersonaReadSpell cast this run; NPCs skipped facet/player/invalid or list empty returned earlier)"
endif
return
 
; -----------------------------------------------------------------------------
; SUBROUTINES: rnd 0-99 -> train rank (sskillsdistribution.csv oral/anal/vaginal)
; -----------------------------------------------------------------------------
beginsub sub_roll_train_anal
    set $r resultfrom rnd_int 0 99
    deb_msg "[DOM-PR] " $SCRIPT_VERSION " SUB=sub_roll_train_anal rnd_int 0-99 -> r=" $r " (next=map r to DOMTrainAnal rank bucket)"
    if $r < 70
        set $trainRank 0
    elseif $r < 86
        set $trainRank 10
    elseif $r < 94
        set $trainRank 30
    elseif $r < 97
        set $trainRank 50
    elseif $r < 99
        set $trainRank 70
    else
        set $trainRank 90
    endif
    deb_msg "[DOM-PR] " $SCRIPT_VERSION " RESULT sub_roll_train_anal trainRank=" $trainRank " (actor_setfactionrank DOMTrainAnal by caller)"
endsub
 
beginsub sub_roll_train_vaginal
    set $r resultfrom rnd_int 0 99
    deb_msg "[DOM-PR] " $SCRIPT_VERSION " SUB=sub_roll_train_vaginal rnd_int 0-99 -> r=" $r " (next=map r to DOMTrainVaginal rank bucket)"
    if $r < 22
        set $trainRank 0
    elseif $r < 57
        set $trainRank 10
    elseif $r < 77
        set $trainRank 30
    elseif $r < 87
        set $trainRank 50
    elseif $r < 95
        set $trainRank 70
    else
        set $trainRank 90
    endif
    deb_msg "[DOM-PR] " $SCRIPT_VERSION " RESULT sub_roll_train_vaginal trainRank=" $trainRank " (actor_setfactionrank DOMTrainVaginal by caller)"
endsub
 
beginsub sub_roll_train_oral
    set $r resultfrom rnd_int 0 99
    deb_msg "[DOM-PR] " $SCRIPT_VERSION " SUB=sub_roll_train_oral rnd_int 0-99 -> r=" $r " (next=map r to DOMTrainOral rank bucket)"
    if $r < 30
        set $trainRank 0
    elseif $r < 65
        set $trainRank 10
    elseif $r < 85
        set $trainRank 30
    elseif $r < 95
        set $trainRank 50
    elseif $r < 99
        set $trainRank 70
    else
        set $trainRank 90
    endif
    deb_msg "[DOM-PR] " $SCRIPT_VERSION " RESULT sub_roll_train_oral trainRank=" $trainRank " (actor_setfactionrank DOMTrainOral by caller)"
endsub

 

 

log for a previous but similar version with a blacklist

 

Spoiler

can you analyze whats going on???

@SKSE/Plugins/sl_triggers/commands/_dom_persona_read.sltscript

here is the log:

---

 

[2026-05-14 16:14:41.233] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=INIT script enter Persona Read timer fired

[2026-05-14 16:14:41.382] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=INIT RACE_BLACKLIST built listCount=$RACE_BL_COUNT (next=msg_notify user)

[2026-05-14 16:14:41.582] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l CONFIG MAX_TARGETS=5 (cast cap per run)

[2026-05-14 16:14:41.881] [log] [info] [sl_triggers.cpp:751] SLTR:(_dom_persona_read.sltscript)[45]: [DOM-PR] v2l Persona Read triggered

[2026-05-14 16:14:42.331] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=FORM form_getbyid editor=DOMFacetSmartness -> facetSmartness form (none=missing mod)

[2026-05-14 16:14:42.731] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=FORM form_getbyid editor=DOMPersonaReadSpell -> personaSpell form (none=missing mod)

[2026-05-14 16:14:43.262] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=FORM form_getbyid editor=DOMVirginAnal -> virginAnal faction (train gate later)

[2026-05-14 16:14:43.710] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=FORM form_getbyid editor=DOMVirginVaginal -> virginVaginal faction

[2026-05-14 16:14:44.084] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=FORM form_getbyid editor=DOMVirginOral -> virginOral faction

[2026-05-14 16:14:44.485] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=FORM form_getbyid editor=DOMTrainAnal -> trainAnal faction

[2026-05-14 16:14:44.909] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=FORM form_getbyid editor=DOMTrainVaginal -> trainVaginal faction

[2026-05-14 16:14:45.335] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=FORM form_getbyid editor=DOMTrainOral -> trainOral faction

[2026-05-14 16:14:47.033] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=SCAN util_scan_cell_npcs (no args) center=player default radius=whole cell dead=ignored

[2026-05-14 16:14:47.857] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=SCAN result listCount=$count variable=nearby (Form[] NPC refs)

[2026-05-14 16:14:48.506] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP begin while i<listCount i=0 castSoFar=0 cap=MAX_TARGETS

[2026-05-14 16:14:49.130] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP body iter index i=0 listCount=11 castSoFar=0 (next=nearby ref)

[2026-05-14 16:14:50.044] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l CHECK actor_isvalid nearby -> isValid=1 (true=Actor ref)

[2026-05-14 16:14:50.669] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l CHECK actor_isplayer nearby -> isPlayer=False (true=skip player not NPC)

[2026-05-14 16:14:51.618] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP actor identity i=0 name=Achmack actor_race=Redguard (next=RACE_BLACKLIST compare)

[2026-05-14 16:14:51.818] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=blacklist begin while j<RACE_BL_COUNT compare actor_race to list entry

[2026-05-14 16:15:27.481] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=blacklist end isBlacklisted=False name=Achmack (true=skip creature race)

[2026-05-14 16:15:27.830] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l CHECK actor_infaction faction=DOMFacetSmartness (facetSmartness form) actor=Achmack

[2026-05-14 16:15:28.505] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l RESULT actor_infaction DOMFacetSmartness name=Achmack inFaction=False (false=not yet smartness -> CAST spell)

[2026-05-14 16:15:28.779] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l ACTION spell_cast spell=DOMPersonaReadSpell target=Achmack (persona read)

[2026-05-14 16:15:29.379] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l RESULT cast count castSoFar=1 after spell_cast

[2026-05-14 16:15:29.579] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=train actor_getgender name=Achmack

[2026-05-14 16:15:32.026] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l RESULT actor_getgender name=Achmack gender=0 (1=female 2=futa 0=male)

[2026-05-14 16:15:34.549] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l SKIP train branch gender=0 name=Achmack (only female=1 or futa=2 get virgin train rolls)

[2026-05-14 16:15:35.274] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP end iteration i=0 advancing i++

[2026-05-14 16:15:36.048] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP body iter index i=1 listCount=11 castSoFar=1 (next=nearby ref)

[2026-05-14 16:15:36.897] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l CHECK actor_isvalid nearby[i=1] -> isValid=1 (true=Actor ref)

[2026-05-14 16:15:37.496] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l CHECK actor_isplayer nearby[i=1] -> isPlayer=False (true=skip player not NPC)

[2026-05-14 16:15:38.545] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP actor identity i=1 name=Owyn the Officer actor_race=Redguard (next=RACE_BLACKLIST compare)

[2026-05-14 16:15:38.720] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=blacklist begin while j<RACE_BL_COUNT compare actor_race to list entry

[2026-05-14 16:15:43.315] [log] [debug] [sl_triggers.cpp:743] Core.OnUpdate

[2026-05-14 16:15:43.415] [log] [debug] [sl_triggers.cpp:743] Core.HandleTimers: starting at nowtime(838.778015)

[2026-05-14 16:16:14.499] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=blacklist end isBlacklisted=False name=Owyn the Officer (true=skip creature race)

[2026-05-14 16:16:14.849] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l CHECK actor_infaction faction=DOMFacetSmartness (facetSmartness form) actor=Owyn the Officer

[2026-05-14 16:16:15.474] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l RESULT actor_infaction DOMFacetSmartness name=Owyn the Officer inFaction=False (false=not yet smartness -> CAST spell)

[2026-05-14 16:16:15.773] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l ACTION spell_cast spell=DOMPersonaReadSpell target=Owyn the Officer (persona read)

[2026-05-14 16:16:16.373] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l RESULT cast count castSoFar=2 after spell_cast

[2026-05-14 16:16:16.548] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=train actor_getgender name=Owyn the Officer

[2026-05-14 16:16:17.097] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l RESULT actor_getgender name=Owyn the Officer gender=0 (1=female 2=futa 0=male)

[2026-05-14 16:16:24.196] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l SKIP train branch gender=0 name=Owyn the Officer (only female=1 or futa=2 get virgin train rolls)

[2026-05-14 16:16:24.970] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP end iteration i=1 advancing i++

[2026-05-14 16:16:25.745] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP body iter index i=2 listCount=11 castSoFar=2 (next=nearby ref)

[2026-05-14 16:16:26.792] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l CHECK actor_isvalid nearby[i=2] -> isValid=0 (true=Actor ref)

[2026-05-14 16:16:30.788] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l SKIP invalid ref index i=2 actor_isvalid=false typeid=5 GetFormID=185746470 name=Dog

[2026-05-14 16:16:31.016] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP end iteration i=2 advancing i++

[2026-05-14 16:16:31.762] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP body iter index i=3 listCount=11 castSoFar=2 (next=nearby ref)

[2026-05-14 16:16:32.611] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l CHECK actor_isvalid nearby[i=3] -> isValid=0 (true=Actor ref)

[2026-05-14 16:16:39.669] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l SKIP invalid ref index i=3 actor_isvalid=false typeid=5 GetFormID=185070340 name=Hallin

[2026-05-14 16:16:39.870] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP end iteration i=3 advancing i++

[2026-05-14 16:16:40.646] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP body iter index i=4 listCount=11 castSoFar=2 (next=nearby ref)

[2026-05-14 16:16:41.568] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l CHECK actor_isvalid nearby[i=4] -> isValid=1 (true=Actor ref)

[2026-05-14 16:16:42.242] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l CHECK actor_isplayer nearby[i=4] -> isPlayer=TRUE (true=skip player not NPC)

[2026-05-14 16:16:45.766] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l SKIP player ref actor_isplayer=true index i=4 name=Dominus (not an NPC target)

[2026-05-14 16:16:46.338] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP end iteration i=4 advancing i++

[2026-05-14 16:16:47.087] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP body iter index i=5 listCount=11 castSoFar=2 (next=nearby ref)

[2026-05-14 16:16:48.036] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l CHECK actor_isvalid nearby[i=5] -> isValid=0 (true=Actor ref)

[2026-05-14 16:16:52.132] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l SKIP invalid ref index i=5 actor_isvalid=false typeid=5 GetFormID=185732270 name=Fasahr

[2026-05-14 16:16:52.382] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP end iteration i=5 advancing i++

[2026-05-14 16:16:53.057] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP body iter index i=6 listCount=11 castSoFar=2 (next=nearby ref)

[2026-05-14 16:16:53.381] [log] [debug] [sl_triggers.cpp:743] Core.OnUpdate

[2026-05-14 16:16:53.456] [log] [debug] [sl_triggers.cpp:743] Core.HandleTimers: starting at nowtime(901.475037)

[2026-05-14 16:16:54.055] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l CHECK actor_isvalid nearby[i=6] -> isValid=1 (true=Actor ref)

[2026-05-14 16:16:54.655] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l CHECK actor_isplayer nearby[i=6] -> isPlayer=False (true=skip player not NPC)

[2026-05-14 16:16:55.729] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP actor identity i=6 name=Thadgeir actor_race=nord (next=RACE_BLACKLIST compare)

[2026-05-14 16:16:55.928] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=blacklist begin while j<RACE_BL_COUNT compare actor_race to list entry

[2026-05-14 16:17:31.818] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=blacklist end isBlacklisted=False name=Thadgeir (true=skip creature race)

[2026-05-14 16:17:32.167] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l CHECK actor_infaction faction=DOMFacetSmartness (facetSmartness form) actor=Thadgeir

[2026-05-14 16:17:32.867] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l RESULT actor_infaction DOMFacetSmartness name=Thadgeir inFaction=TRUE (false=not yet smartness -> CAST spell)

[2026-05-14 16:17:35.189] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l SKIP persona DOMFacetSmartness actor_infaction=true already has facet name=Thadgeir

[2026-05-14 16:17:35.839] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP end iteration i=6 advancing i++

[2026-05-14 16:17:36.588] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP body iter index i=7 listCount=11 castSoFar=2 (next=nearby ref)

[2026-05-14 16:17:37.437] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l CHECK actor_isvalid nearby[i=7] -> isValid=0 (true=Actor ref)

[2026-05-14 16:17:41.533] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l SKIP invalid ref index i=7 actor_isvalid=false typeid=5 GetFormID=185746468 name=Dog

[2026-05-14 16:17:41.733] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP end iteration i=7 advancing i++

[2026-05-14 16:17:42.557] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP body iter index i=8 listCount=11 castSoFar=2 (next=nearby ref)

[2026-05-14 16:17:43.481] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l CHECK actor_isvalid nearby[i=8] -> isValid=0 (true=Actor ref)

[2026-05-14 16:17:47.652] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l SKIP invalid ref index i=8 actor_isvalid=false typeid=5 GetFormID=185030552 name=Alusannah the wise

[2026-05-14 16:17:47.927] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP end iteration i=8 advancing i++

[2026-05-14 16:17:48.676] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP body iter index i=9 listCount=11 castSoFar=2 (next=nearby ref)

[2026-05-14 16:17:49.600] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l CHECK actor_isvalid nearby[i=9] -> isValid=0 (true=Actor ref)

[2026-05-14 16:17:53.646] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l SKIP invalid ref index i=9 actor_isvalid=false typeid=5 GetFormID=185746553 name=Joramah

[2026-05-14 16:17:53.871] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP end iteration i=9 advancing i++

[2026-05-14 16:17:54.620] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP body iter index i=10 listCount=11 castSoFar=2 (next=nearby ref)

[2026-05-14 16:17:55.565] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l CHECK actor_isvalid nearby[i=10] -> isValid=0 (true=Actor ref)

[2026-05-14 16:17:58.138] [log] [debug] [sl_triggers.cpp:743] Core.OnUpdate

[2026-05-14 16:17:58.212] [log] [debug] [sl_triggers.cpp:743] Core.HandleTimers: starting at nowtime(963.686035)

[2026-05-14 16:17:59.761] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l SKIP invalid ref index i=10 actor_isvalid=false typeid=5 GetFormID=185746469 name=Dog

[2026-05-14 16:18:00.060] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP end iteration i=10 advancing i++

[2026-05-14 16:18:04.166] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=done label castSoFar=2 (persona casts this run)

[2026-05-14 16:18:04.490] [log] [info] [sl_triggers.cpp:751] SLTR:(_dom_persona_read.sltscript)[266]: [DOM-PR] v2l Read 2 mind(s)

[2026-05-14 16:54:37.515] [log] [debug] [sl_triggers.cpp:743] Core.OnUpdate

[2026-05-14 16:54:37.590] [log] [debug] [sl_triggers.cpp:743] Core.HandleTimers: starting at nowtime(3159.522217)

[2026-05-14 16:54:39.283] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=INIT script enter Persona Read timer fired

[2026-05-14 16:54:39.434] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=INIT RACE_BLACKLIST built listCount=$RACE_BL_COUNT (next=msg_notify user)

[2026-05-14 16:54:39.683] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l CONFIG MAX_TARGETS=5 (cast cap per run)

[2026-05-14 16:54:39.858] [log] [info] [sl_triggers.cpp:751] SLTR:(_dom_persona_read.sltscript)[45]: [DOM-PR] v2l Persona Read triggered

[2026-05-14 16:54:40.333] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=FORM form_getbyid editor=DOMFacetSmartness -> facetSmartness form (none=missing mod)

[2026-05-14 16:54:40.707] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=FORM form_getbyid editor=DOMPersonaReadSpell -> personaSpell form (none=missing mod)

[2026-05-14 16:54:41.157] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=FORM form_getbyid editor=DOMVirginAnal -> virginAnal faction (train gate later)

[2026-05-14 16:54:41.582] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=FORM form_getbyid editor=DOMVirginVaginal -> virginVaginal faction

[2026-05-14 16:54:42.031] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=FORM form_getbyid editor=DOMVirginOral -> virginOral faction

[2026-05-14 16:54:42.493] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=FORM form_getbyid editor=DOMTrainAnal -> trainAnal faction

[2026-05-14 16:54:42.868] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=FORM form_getbyid editor=DOMTrainVaginal -> trainVaginal faction

[2026-05-14 16:54:43.342] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=FORM form_getbyid editor=DOMTrainOral -> trainOral faction

[2026-05-14 16:54:45.039] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=SCAN util_scan_cell_npcs (no args) center=player default radius=whole cell dead=ignored

[2026-05-14 16:54:46.040] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=SCAN result listCount=$count variable=nearby (Form[] NPC refs)

[2026-05-14 16:54:46.639] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP begin while i<listCount i=0 castSoFar=0 cap=MAX_TARGETS

[2026-05-14 16:54:47.263] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP body iter index i=0 listCount=3 castSoFar=0 (next=nearby ref)

[2026-05-14 16:54:48.212] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l CHECK actor_isvalid nearby -> isValid=1 (true=Actor ref)

[2026-05-14 16:54:48.787] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l CHECK actor_isplayer nearby -> isPlayer=TRUE (true=skip player not NPC)

[2026-05-14 16:54:52.209] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l SKIP player ref actor_isplayer=true index i=0 name=Dominus (not an NPC target)

[2026-05-14 16:54:52.683] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP end iteration i=0 advancing i++

[2026-05-14 16:54:53.381] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP body iter index i=1 listCount=3 castSoFar=0 (next=nearby ref)

[2026-05-14 16:54:55.201] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l CHECK actor_isvalid nearby[i=1] -> isValid=0 (true=Actor ref)

[2026-05-14 16:54:59.421] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l SKIP invalid ref index i=1 actor_isvalid=false typeid=5 GetFormID=185762386 name=Cyrus

[2026-05-14 16:54:59.620] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP end iteration i=1 advancing i++

[2026-05-14 16:55:00.394] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP body iter index i=2 listCount=3 castSoFar=0 (next=nearby ref)

[2026-05-14 16:55:01.465] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l CHECK actor_isvalid nearby[i=2] -> isValid=1 (true=Actor ref)

[2026-05-14 16:55:02.189] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l CHECK actor_isplayer nearby[i=2] -> isPlayer=False (true=skip player not NPC)

[2026-05-14 16:55:03.163] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=LOOP actor identity i=2 name=Thadgeir actor_race=nord (next=RACE_BLACKLIST compare)

[2026-05-14 16:55:03.362] [log] [debug] [sl_triggers.cpp:743] DebMsg> [DOM-PR] v2l STEP=blacklist begin while j<RACE_BL_COUNT compare actor_race to list entry

 

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...