Jump to content

Recommended Posts

6 hours ago, Erstam said:

there's a memory limit for Papyrus that you can set in Skyrim.ini

You have more false concepts about the Script Engine. The parameter iMaxAllocatedMemoryBytes not have any relationto the memory ussage of the Script Engine. Take a read to this post because you have the same bad concept. Continue reading all the messages, specially this, because you can see how the game can cumulate thousand and thousand of active scripts whitout show a memory out message. I have more than 300k in one of my savegames. The pure tecnical details are in this post and two messages down you can read the results of specific test made by mrsrt and their conclusions, some of them are bad but i not want discuse more.

 

6 hours ago, Erstam said:

When more and more of them pile up over a long playthrough and never get released again (I'm speaking of hundreds of thousands here), then the memory available to Papyrus will eventually fill up, either degrade script performance further or lead to unknown, really detrimental effects for your game.

The problem not have any relation to the memory ussage. Is related excusively to the work charge of the Script Engine. When we have hundreds and hundreds of active scripts the speed of execution, the performance and the latency can be degraded to a ridiculus point and some scripts can need up to 10 to 30 seconds for be executed.

That happen because the Script Engine only can execute from 100 to 200 simultaneous scripts whitout lost performance in a noticeable way. When we exced that limit the performance is degraded in relation to to the number of Active Scripts and the exact lines of code that must be executed.

 

 

Aditionally, i not recomend the use of OnLoad in this situation because is fired when the object's 3d is loaded and ready. If the object never get 3DLoaded and the condition Is3DLoaded always return false, probably, is because the object is never loaded. If the OnLoad is not executed you can not call disable() and delete() and, as you are  creating it ussing PlaceAtMe, you can end with hundreds and hundres of object placed in the world that are never deleted. Maybe, the OnCellDetach can delete it because not have a running script but i'm not totally sure.

Link to comment

The information above is incorrect. You CAN call Disable and Delete on any ObjectReference, whether they have their model loaded or not. I do so on the threads that I use for Manual Strip when I am updating the number of available threads (already did once from 10 threads to 5 threads).

Why would you add a Delete function which only works on objects whose models were loaded? Delete merely flags the object for garbage collection.

 

As for the rest, I would rather stick with the information that is in the wiki and that has been my own experience with modding this game.

 

@Erstam

ScriptName CS2DropScript Extends ObjectReference

ObjectReference a
Float vx
Float vy
Float vz
Float speed
Float scale
ObjectReference proxy
Int stage

; Only copy parameters to script variables for now,
; so the function finishes quickly, and the calling script can continue.
Function Launch(ObjectReference pA, Float pVx, Float pVy, Float pVz, Float pSpeed, Float pScale, ObjectReference pProxy)
    a = pA
    vx = pVx
    vy = pVy
    vz = pVz
    speed = pSpeed
    scale = PapyrusUtil.ClampFloat(pScale, 0.5, 1.5)
    proxy = pProxy
    stage = 1
    RegisterForSingleUpdate(0.01)
EndFunction

Event OnLoad()
    If stage == 2
        UnregisterForUpdate()
        ApplyHavokImpulse(vx, vy, vz, speed)
        stage = 3
        RegisterForSingleUpdate(1.5)
    EndIf
EndEvent

Event OnUpdate()
    If stage == 1
        SetScale(scale)
        If proxy
            MoveTo(proxy)
        Else
            MoveToNode(a, "Urethra")
        EndIf
        stage = 2
        RegisterForSingleUpdate(0.01)
    ElseIf stage == 2
        If Is3DLoaded()
            OnLoad()
        EndIf
    ElseIf stage == 3
        stage = 4
        ; Would have liked to make the drops fade out, but there are insurmountable problems.
        ; Any reference created or enabled while another reference of the same type is fading out, will not become visible,
        ; even though Is3DLoaded() returns true, and script functions that manipulate the object process without errors.
        Disable()
        Delete()
    EndIf
EndEvent

; Failsafe, in case the drop isn't gone yet when the player leaves the cell
Event OnCellDetach()
    UnregisterForUpdate()
    Disable()
    Delete()
EndEvent

No need for loops or checking if the object's model is loaded every 10ms.

Link to comment
23 hours ago, Hawk9969 said:

The information above is incorrect. You CAN call Disable and Delete on any ObjectReference, whether they have their model loaded or not. I do so on the threads that I use for Manual Strip when I am updating the number of available threads (already did once from 10 threads to 5 threads).

Why would you add a Delete function which only works on objects whose models were loaded? Delete merely flags the object for garbage collection.

Of course i know that. I calling Disable() and Delete() in my code when the object not have 3DLoaded after 5 seconds and that mean the object model not exist and the OnLoad() has not been trigered.

The delete of the object not have any relation to if the object is loaded or is not loaded.

 

What I was thinking when I wrote that is to replace OnUpdate with OnLoad because it is not necessary to do several rounds. In that case, when the OnLoad does NOT fire, the object is NOT deleted.

But thinking a bit more on it seems that OnLoad() can be a good solution if we add an OnUpdate for delete the object when OnLoad() not fire:

Spoiler

 

 

Bool Object_Deleted = false ; variable for not make the delete two times

 

 

Function Launch(ObjectReference pA, Float pVx, Float pVy, Float pVz, Float pSpeed, Float pScale, ObjectReference pProxy)
    a = pA
    vx = pVx
    vy = pVy
    vz = pVz
    speed = pSpeed
    scale = pScale
    proxy = pProxy
    
    Utility.Wait(0.01) 

 

    If scale < 0.5
        scale = 0.5
    ElseIf scale > 1.5
        scale = 1.5
    EndIf
    SetScale(scale)
    If proxy
        MoveTo(proxy)
    Else
        MoveToNode(a, "Urethra")
    EndIf

 

    ;ApplyHavokImpulse moved to OnLoad

 

    RegisterForSingleUpdate(5) ; security clean
EndFunction

 

Event OnLoad()
    ApplyHavokImpulse(vx, vy, vz, speed)
    Utility.Wait(1.5)

   

    Object_Deleted = true


    Disable()
    Delete()
EndEvent

 

Event OnUpdate()

    if Object_Deleted == false
        Disable()
        Delete()

    endif
EndEvent

 

We not have a loop, not have multiple calls to OnUpdate, not have multiples stages.

Is much more simple, better structured and is fast and secure.

 

1 - The Launch make all the initializations.

2 - When the OnLoad is executed make the ApplyHavokImpulse and delete the object

3 - If after 5 seconds the Onload has not been executed we delete the object.

 

-----------------------

 

Aditionally, your code is much more complex and not works.

 

When Launch is executed put stage in 1 and Register.

First OnUpdate: As stage = 1 put stage 2 and Register.

Second OnUpdate: As stage = 2    If the object have 3DLoaded you call OnLoad...

 

If not? What happens? Do you think the game ALWAYS calls OnLoad?

We have a log with 312 scripts locked in an infinite loop because the object is NEVER loaded in 3D and that means that OnLoad() is NEVER triggered. What we are looking for is a solution when that happens.

With your code, if the game not calls the OnLoad, the stage never changes to 3, the Register is never made and the object is never deleted.

Link to comment

@GenioMaestro Yes. i already thought about that solution, and that's probably what I'm going to do. However, the Launch function has to be very fast, otherwise it will slow down the calling loop in CS2GameScript (line 499). Every additional external call or latent function will noticably cause the drops to fly further apart, and what is supposed to look like a shower of drops will turn into a sequence of single drops, which doesn't look good. So the only thing that Launch() should do is copying the parameters to local script variables, and then registering the script for update so that the loop can continue.

Other than that, I think it's the optimal way to do it.

Link to comment
3 hours ago, Erstam said:

Other than that, I think it's the optimal way to do it.

I know that speed is important. I try optimize the script moving the lines:

Spoiler

    If scale < 0.5
        scale = 0.5
    ElseIf scale > 1.5
        scale = 1.5
    EndIf
    SetScale(scale)
    If proxy
        MoveTo(proxy)
    Else
        MoveToNode(a, "Urethra")
    EndIf

to the OnLoad() function and NOT works.

 

I not sure about why the OnLoad() is not fired and the drops never show. I add a control like:

Spoiler

Event OnUpdate()
    if Object_Deleted == false
        debug.trace("CS2DropScript OnLoad NOT fired... making secure delete in OnUpdate")
        Disable()
        Delete()
    endif
EndEvent

And my log is filled whit hundreds of lines saying "CS2DropScript OnLoad NOT fired"

 

I thinking the problem is caused because PlaceAtMe create and object in the same position as the object we used for create it. When we put Player.PlaceAtMe(xxx) the object is created in the same position as the Player.

 

But in your code you have:

(CS2CumPoolMarker.PlaceAtMe(dropType) as CS2DropScript).Launch(a, vx, vy, vz, speed, scale, proxy)

and the position of the object CS2CumPoolMarker is used for place the drops.

 

As you placed the object CS2CumPoolMarker in an unaccesible position i think the object can not be loaded until we move it to the position of the Actor ussing MoveTo() or MoveToNode() and for that the OnLoad() is not fired.

That mean the lines MoveTo() or MoveToNode() must be in the Launch and can not be moved to OnLoad.

 

Maybe, if we replacet CS2CumPoolMarker by PlayerRef as:

(PlayerRef.PlaceAtMe(dropType, abInitiallyDisabled = TRUE) as CS2DropScript).Launch(...)

we can put the move lines in the OnLoad, because the player always exist and the object always can be loaded. We can call Enable() after move it. Is only a idea, i not have tested it.

 

 

Aditionally, i take a look to MoveToNode in the wiki of the CK and the notes say:

MoveToNode can unload an object's 3D and reset any motion type changes you've made to the object. If you know for sure that the object's 3D is loaded, SplineTranslateToRefNode can be used with a very high speed value to instantaneously teleport the object to the proper node, without the risk of unloading its 3D or resetting its physics.

 

Maybe, for that we have some users that, sometimes, have scripts locked in a infinite loop, because the function MoveToNone() can unload the object. Have you try use SplineTranslateToRefNode?

Link to comment

I've been trying many things when writing those scripts, and there always were different problems until I settled with the current method. Of course, at first I tried spawning the drops at the actor, but then they briefly showed up at the feet. I don't know what happened when using abInitiallyDisabled = true, but I'm absolutely sure I tried that too. At least I had to do an additional Enable step then, which would take additional time. Spawning them outside the loaded area and then moving them into the scene proved to be the fastest solution. IIRC, SplineTranslateToRefNode didn't work at all for me. And the proxy method is just a band aid for 1st person, where MoveToNode doesn't work correctly. It's very inaccurate too because the proxy doesn't follow the character's animation or movements. It's only repositioned at the beginning of each spurt, for performance reasons.

 

Note that I never had major problems with drops not loading and their scripts not processing. I managed to cause stack dumps once in LE, but never in SE. And that was while stress testing the system at a custom home built in the exterior world that had many scripted objects, and where framerate dropped into the 40's in SE, and into the 30's in LE.

 

Long story short, I'll need to experiment a lot. But as I already said, I can't do that now, as I currently have very little time. Thanks for all the suggestions though, I'll keep them in mind when I get to it.

 

Link to comment
7 hours ago, GenioMaestro said:

We not have a loop, not have multiple calls to OnUpdate, not have multiples stages.

Is much more simple, better structured and is fast and secure.

 

1 - The Launch make all the initializations.

2 - When the OnLoad is executed make the ApplyHavokImpulse and delete the object

3 - If after 5 seconds the Onload has not been executed we delete the object.

 

-----------------------

 

Aditionally, your code is much more complex and not works.

 

When Launch is executed put stage in 1 and Register.

First OnUpdate: As stage = 1 put stage 2 and Register.

Second OnUpdate: As stage = 2    If the object have 3DLoaded you call OnLoad...

 

If not? What happens? Do you think the game ALWAYS calls OnLoad?

We have a log with 312 scripts locked in an infinite loop because the object is NEVER loaded in 3D and that means that OnLoad() is NEVER triggered. What we are looking for is a solution when that happens.

With your code, if the game not calls the OnLoad, the stage never changes to 3, the Register is never made and the object is never deleted.

I really don't want to bother arguing with random strangers in these forums anymore, but since this is a mod I'm actively using (and have modified myself)...

 

Do you understand that:

  1. The scripts will be inactive until the object model loads?
  2. The objects will be deleted upon changing cells?

No need for a timeout (you are the one making it complex) as the objects will be deleted upon a cell change.

If the object model is not loaded, simply wait for it to be loaded or delete it if we change cells. Simple, no loops, no timeout.

Quote

Aditionally, your code is much more complex and not works.

If not? What happens? Do you think the game ALWAYS calls OnLoad?

With your code, if the game not calls the OnLoad, the stage never changes to 3, the Register is never made and the object is never deleted.

And yes, another false information from you, which makes me question everything that you say at this point. 

 

It doesn't matter whether OnLoad is ever called or not. The scripts will not remain in the stack and we will delete these objects (which doesn't have their model loaded, consuming almost no RAM) when the player changes cell. Problem solved.

Link to comment
8 hours ago, Adolis2019 said:

Hello.  Sperm is not displayed on the body of the partner.  I use the mod Osex.

No, and it isn't supposed to do so. Its purpose is to display spurts of cum flying through the air when a male character orgasms. SexLab (and FlowerGirls with an additional mod) has an option to display cum textures on the partner's body. OSex is unsupported because it lacks an orgasm mechanism.

Link to comment
1 hour ago, devildx said:

For some reason this mod is not working with the new evilreflex SOS addon. Works fine with previous ERF High Poly.

 

 

Yeah, it's another schlong for females, needs to be added to the database. When the fucking hell will people stop making those? Put it on the list for the January update. Note to self - also need to increase the size of the arrays for them, or one day they're going to overflow.

Link to comment

Hi Erstam. This is probably not a good time to come back to you with Nehebarlan's Kalena Rios Mod, given the above post...   ?  (cold sweat...)

 

But, here goes (gulp).  Nehaberlan and I are working on an updated and improved version of his mod (the current SE port is here, updated by Nomkaz  https://www.loverslab.com/topic/123946-kalena-rios-trans-porn-star-follower-se/   ).

 

Kalena Rios has a UNP body that has SOS B3lsario's Addon permanently added in a NIF file to the follower.

So it's a female body with a permanent add-on. It's listed in the "Armor Addon" section of the ESP, and in the Models subsection of the Addon.

 

The mod has Sexlab and SOS (full) as masters.

 

In order to ensure Cumshot works with 'her', are there keywords / lines / scripts that we need to add to the mod esp or files so that Cumshot will 'see' her and work consistently with her? 

Normally we have to force her gender to male using the old mod Sexlab Gender Change. But Nehaberlan is trying to script her so this is unnecessary.

 

In the past, Kalena has worked with Cumshot but it has been a little hit or miss. But it would be good to make sure it will work permanently.

 

Thank you. Season's Greetings and all the best for 2020.

 

 

Link to comment
3 hours ago, Bluegunk said:

Hi Erstam. This is probably not a good time to come back to you with Nehebarlan's Kalena Rios Mod, given the above post...   ?  (cold sweat...)

 

But, here goes (gulp).  Nehaberlan and I are working on an updated and improved version of his mod (the current SE port is here, updated by Nomkaz  https://www.loverslab.com/topic/123946-kalena-rios-trans-porn-star-follower-se/   ).

 

Kalena Rios has a UNP body that has SOS B3lsario's Addon permanently added in a NIF file to the follower.

So it's a female body with a permanent add-on. It's listed in the "Armor Addon" section of the ESP, and in the Models subsection of the Addon.

 

The mod has Sexlab and SOS (full) as masters.

 

In order to ensure Cumshot works with 'her', are there keywords / lines / scripts that we need to add to the mod esp or files so that Cumshot will 'see' her and work consistently with her? 

Normally we have to force her gender to male using the old mod Sexlab Gender Change. But Nehaberlan is trying to script her so this is unnecessary.

 

In the past, Kalena has worked with Cumshot but it has been a little hit or miss. But it would be good to make sure it will work permanently.

 

Thank you. Season's Greetings and all the best for 2020.

 

 

No idea if it will work out of the box, just try it out. If Kalena's schlong is a slot 52 armor piece that is automatically equipped, it may need to be added to the database, in the equippable schlongs list. If the nif is actually a part of the body, dunno, then it should be handled like a SOS Light variant, but for females - probably have to change the scripts to allow for something like that.

 

Anyway, I can't even think of doing more than replying to posts until January 6, and even then I'm probably just going to relax for a week. So don't expect anything soon.

Link to comment
17 hours ago, Erstam said:

No idea if it will work out of the box, just try it out. If Kalena's schlong is a slot 52 armor piece that is automatically equipped, it may need to be added to the database, in the equippable schlongs list. If the nif is actually a part of the body, dunno, then it should be handled like a SOS Light variant, but for females - probably have to change the scripts to allow for something like that.

 

Anyway, I can't even think of doing more than replying to posts until January 6, and even then I'm probably just going to relax for a week. So don't expect anything soon.

Many thanks! Have a good rest!  ?

Link to comment
On 12/25/2019 at 10:39 AM, Erstam said:

Yeah, it's another schlong for females, needs to be added to the database. When the fucking hell will people stop making those? Put it on the list for the January update. Note to self - also need to increase the size of the arrays for them, or one day they're going to overflow.

This was just released by ERF on Tuesday, so of course it wouldn't be added to the database. :P I'll go ahead and send you another update to the JSON if you like, just give me a day or two.

Link to comment
19 hours ago, AtomicPlayboy said:

This was just released by ERF on Tuesday, so of course it wouldn't be added to the database. :P I'll go ahead and send you another update to the JSON if you like, just give me a day or two.

Thanks, but it's not really necessary, as I'll be working on Cumshot in a couple weeks anyway. However, it would save me from fiddling with the position values, so if you really want to do it, I won't stop you. ?

14 hours ago, AtomicPlayboy said:

Also: anyone know if it's possible to reload the AdjustValues.json live in-game if it's running from Mod Organizer 2?

You can define the "Reload Adjustments" key in the MCM and use it for that purpose. As long as the file is present when you start MO2, its contents will always update for everything that uses the VFS. At least it has always worked for me like that. Did a recent change to the VFS break that behavior?

Link to comment
9 hours ago, Erstam said:

Thanks, but it's not really necessary, as I'll be working on Cumshot in a couple weeks anyway. However, it would save me from fiddling with the position values, so if you really want to do it, I won't stop you. ?

Here's what I added at least, to save you the trouble. I admit I only tried it using the shape I built and haven't tried RaceMenu size adjustments yet.

Spoiler

	"SOSAddons" : 
	{
		...
		"ERF - Futanari CBBE - Addon" : "3427|SOS - ERF - Futanari CBBE - Addon.esp",
		...
	},
	...
	"floatList" : 
	{
		...
		"erf - futanari cbbe - addon" : 
		[
			0, 1.5, 2.4,
			0, 1.5, 2.4,
			0, 0, 18
		],
		...
	}

 

 

9 hours ago, Erstam said:

You can define the "Reload Adjustments" key in the MCM and use it for that purpose. As long as the file is present when you start MO2, its contents will always update for everything that uses the VFS. At least it has always worked for me like that. Did a recent change to the VFS break that behavior?

Hmm...I'm using Mod Organizer 2.2.1 rev. e69078e, which is the latest stable release on GitHub/Nexus/etc. I tried doing the in-game reload using the bound key, but it didn't do anything. Cumshot is loaded like any other mod in MO2, and while I have a pretty long mod list, I have all of Cumshot's requirements. I run the game using the SKSE loader (1.5.97, latest). I can save and load files in game for other MCM mods, though I've never tried modifying them on-disk while the game is running, so thus far this is the only one I've tried modifying during gameplay with no effect. Could there be another mod/SKSE addon causing it to prevent the file settings from reloading? Is there something else I could try like reloading a game save after reloading the file?

 

Edit: confirmed that reloading a save game updates the AdjustValues.json file after editing. I'm using the experimental UVFS 4.4.4 now, don't know if that matters, but it looks like the save game reload is the fix for now.

Link to comment

New database update - added EvilReFlex Futanari CBBE Addon. Thanks to @AtomicPlayboy for providing the data.

 

If reloading a save (without exiting and restarting the game) makes Cumshot read the updated values, then I don't think that MO2 is at fault. It looks like the hotkey may be broken. I'll have to check that too when I start working on the update.

Link to comment

A chronic problem that I keep stumbling over with this mod (2.1 SE version, before the ERF futa update) is that the cumshot ejaculation animation seems to get stuck in a loop and the actor (even the player) will eventually fade to invisibility while they walk around spurting everywhere.  Is there a workaround/fix to this?  Am I just experiencing too much script load?

Link to comment
11 hours ago, 4nk8r said:

A chronic problem that I keep stumbling over with this mod (2.1 SE version, before the ERF futa update) is that the cumshot ejaculation animation seems to get stuck in a loop and the actor (even the player) will eventually fade to invisibility while they walk around spurting everywhere.  Is there a workaround/fix to this?  Am I just experiencing too much script load?

Are you using SexLab Squirt as well? Bluegunk has had similar problems, and tracked it down to that mod interfering with the process.

Link to comment
7 hours ago, Erstam said:

Are you using SexLab Squirt as well? Bluegunk has had similar problems, and tracked it down to that mod interfering with the process.

No, not using that.  Just Cumshot.  Also had the same issue using Follow Me For Sex, which seems to have a similar cumshot mechanic to this mod.

Link to comment
15 hours ago, Erstam said:

Are you using SexLab Squirt as well? Bluegunk has had similar problems, and tracked it down to that mod interfering with the process.

I have noticed that SexLab Squirt does get stuck sometimes, but I've never had Cumshot get stuck along with it. Squirt usually stops once a SexLab scene ends though.

Link to comment
  • 2 weeks later...

Version 2.2 released

 

IMPORTANT NOTICE - Development of Cumshot has finished (for real this time). 2.2 will be the final version. Feature requests will be ignored from now on. If you want to make a new schlong / body / race / something else compatible with Cumshot, you have to do it yourself.
Honestly, I actually want to start my final Skyrim playthrough (I've been preparing it since 2016!) and then move on. I have games sitting on my hard drive for years now that I never got to play -- yes Geralt, I will get to you before you die of old age. :P

 

With that out of the way, here are the changes:

 

  • Drop Objects mode: Made drops delete themselves if their 3D hasn't loaded after two seconds
    This should make the scripts less prone to getting stuck in your savegame, and causing stack dumps.
    Since I never had problems with it in my own game, I can't notice any real difference myself, even when stress testing the mechanics (setting cum amount to crazy levels, making four people squirt at once). But if you've been plagued by stack dumps in this mode, please try it out and report (after having cleaned your save before, of course).
  • Always check if an actor's 3D is loaded before letting them emit a drop shower, spell, or tracer
    An additional safety measure to prevent scripts from throwing errors or getting stuck.
  • No longer use the proxy method for NPCs to launch drops and tracers in 1st person
    It's only needed for the player. MoveToNode always works correctly for NPCs, in any camera mode, and is more precise.
  • Aroused support: Added an optional setting to make hotkey ejaculation reduce arousal
    This can be useful for simulating an orgasm in OSex scenes, for example.
  • Added the latest database update.
    A lot more schlong types are supported, compared to v2.1.
    Also increased the max number of installed schlongs and of known equippables from 30 to 100 each. I never thought that people would be creating so many different penises, schlongs, cocks, wangs, dongs, wieners, and whatnot else over the years. Better enlarge the arrays to keep them from overflowing.
  • Support for special races or characters that have their penis included with their body
    For now, this feature only adds support for the Kalena Rios character. A new list called "specialBodies" has been added to the database, where similar cases can be added to. The list can contain ActorBase as well as Race forms.
    This still won't generally work on creatures, though. It's meant for humanoid characters who have the Genitals06 node in their skeleton, and their race must have DefaultRace as their Armor Race.
  • SexLab: MCM option to save custom ejaculation rules to a file
    Now you can easily carry over your rules to a different playthrough. The data will be saved to SKSE\Plugins\StorageUtilData\SLRulesCustom.json.
    Also redesigned the Animations page in the MCM a bit to make room for the option. It can be found in the new "Actions" menu at the top of the page.
  • Made the Reload Adjustments key work again with recent Mod Organizer 2 versions
    Something has changed in the VFS that MO2 uses. Now the file has to be unloaded first before reloading it.

Notes on the changes to CS2DropScript for my tech advisors - open the spoiler to read:

Spoiler

Using OnLoad proved to be very reliable. To test it, as a first step I only added an OnLoad() event to CS2DropScript that did nothing but printing a message to the log. It turned out that the event always occured at stage 1 - it isn't possible before anyway, because the drops are spawned in an inaccessible cell and then are moved into the rendered scene. I added a counter to the calling loop to verify that the event fires for every single drop and none are lost.


The script now listens for two concurrent events, the action depends on whichever happens first: an OnLoad() that will fire the drop off, or an OnUpdate() that will delete it after 2 seconds. The stage variable ensures that the two events won't get in each other's way at the wrong time.


I think I discovered the main reason why CS2DropScript got stuck so often. If the user cancels the ejaculation by hotkey while a spurt is in progress, or the scripts are lagging a lot, then the cumshot helper object would get removed from the actor (and the Urethra node along with it) before all drops are sent out. On subsequent drops, the MoveToNode(a, "Urethra") call would fail, the drop is never moved into the rendered scene, and its 3D never loads.


In my tests, I managed to get this error from MoveToNode three times in the log, and I saw the message from my OnUpdate() handler two seconds later for exactly those three FormIDs. So the emergency code does kick in when it's needed, which is a good sign.

 

 

Link to comment

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
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more information, see our Privacy Policy & Terms of Use