Jump to content

Devious Devices - Laura's Bondage Shop (16-aug-2025) v3.55 LE & SE


Recommended Posts

Posted (edited)

I finally managed to reach the (current) end and I have to say, congrats, that was quite the ride. I didn't expect things to get so serious and emotional toward the end, but that isn't a bad thing.

 

I do have one suggestion to make it even better, at least to my personal tastes, but I think others might enjoy this little tweak too.

!!(Spoiler warning to anyone who isn't through yet in version 3.42!!

If you choose to let Sloane live, it would be nice to have the option to put her in chains and lock her up. Apart from making sure she won't be able to flee, before the authorities come to collect her, it would be poetic justice to lock her into one of her own cells.

Edited by NoNickNeeded
Posted
Vor 1 Stunde sagte NoNickNeeded:

Endlich habe ich es geschafft, das (aktuelle) Ende zu erreichen, und ich muss sagen, herzlichen Glückwunsch, das war ein ziemlicher Ritt. Ich hätte nicht erwartet, dass es am Ende so ernst und emotional wird, aber das ist nicht schlecht.

 

Ich habe einen Vorschlag, um es zumindest nach meinem persönlichen Geschmack noch besser zu machen, aber ich denke, dass andere diese kleine Änderung auch mögen könnten.

!!(Spoiler-Warnung an alle, die mit Version 3.42 noch nicht fertig sind!!

Wenn Sie sich dafür entscheiden, Sloane am Leben zu lassen, wäre es schön, die Möglichkeit zu haben, sie in Ketten zu legen und einzusperren. Abgesehen davon, dass sie nicht fliehen kann, bevor die Behörden sie abholen, wäre es poetische Gerechtigkeit, sie in eine ihrer eigenen Zellen einzusperren.

 

If you put Solane in chains and lock her in one of the cells... you condemn her to death by "starvation" or "dying of thirst."


How do I come to this view?


When I decided to write a blog story in the Skyrim universe a few months ago - I also looked into mods from the fetish and BDSM area (because of my own preferences).

I liked Laura's mod for many different reasons and so I started reading through this huge discussion thread... and found several very interesting discussions about how this mod developed.


Particular attention was paid to the relationship between "Solane" and "Laura" and "Katharina"... why, for example, you have no chance of attacking or killing her (and her guards) during their attack on the store.


"Solane" (and previously also "Darius") actually have a "free pass" in the province "Skyrim"... they supply the "ruling class" with sex slaves.


Even if it were possible to kill the 4 guards and "Solane" WITHOUT anything happening to "Laura" or "Katharina"... the two would then be something like "outlaws" - that is, they could not take revenge from the powerful escape!


That's why this power of "Solane" must first be broken... we permanently destroy their trading ring with sex slaves... so "Solane" is no longer of any use to the powerful of Skyrim.


But why should they now arrest a woman and put her on trial... who knows a lot of dirty things about these very powerful people.

There's no one coming to arrest this woman... just "someone" from the Dark Brotherhood... who's going to fix a problem.


And yes - I too wish this woman all the "bad things in the world"... but I also let her live... the loss of her powerful position - which basically throws her "into the gutter"... is one life sentence... the dungeon does not surround her body but her "mind".


Please understand this text as my interpretation of the end of the quest story - but of course there was extensive discussion among the users here too.

Posted

I still think it would work. Laura and Katarina are guaranteed to stay out of public perception, meaning that those formly blackmailed authorities can easily set themselves up, as the people who took her down, with the kudos for bringing down an entire slaver's ring probably being more than enough to offset any "lies" told by Sloane. Also those blackmailed authorities were able to keep their involvement with the slavers, and from what I can tell the very existence of the slave trade in Skyrim secret from the public eye for years, so they've got to have some skill in information manipulation.

But if they really wanted to make sure nothing could possibly leak out, as you believe, they have all the more reason not to leave open the chance that someone might just randomly stunble into Sloane's home and free her, meaning they either have to arrest her and put her on trial, foregoe any due process and put her in a hole so deep nobody's ever going to find her, or just assassinate her outright.

 

That being said, we could always go above the heads of the blackmailed people. Going by the stuff in the letters, she didn't have a single Yarl, Thane or Steward under her thumb, so we definitely have options for that.

 

Though I guess locking her up and intentionally letting her starve, would make for a good fourth option. After all Sloane herself was the one who suggested to starve Hinda to death, rather than giving her a quick death. It would not be my prefered option, but I wouldn't lose any sleep over her going out that way either.

Posted (edited)
On 10/21/2023 at 11:49 PM, Miauzi said:

 

Thank you for your feedback.


I myself use such a mod - which carries out constant "scanning":

 

This mod, in conjunction with the length of time that DD devices can be worn, grants some advantages... so I can see quite well despite the blindfold being equipped - which makes completing some quests a lot easier.

I incorporate these training effects into my story (usually using “side comments”).


Since it also causes physical changes - such as a smaller waist by wearing a corset - I have a fairly heavy script load.

(But this is also done by mods that, for example, enable "pregnancies" or "changing the breast circumference" through a variable hormone level... there are quite a lot of "candidates" on LL.)


Such feedback from the author of a mod helps me to better understand their work... and thus help other users with their problems

:classic_wub:

 

---

Addendum:

I just thought of something... DCL has a very extensive menu for setting all the trap triggers and what kind of "surprises" you can expect as a player.

Among other things, there is (I hope my memory is correct) a connection to the player character's state of sexual arousal... the more "excited" you are, the greater the likelihood that a trap will be triggered.

SexLab Aroused is also something that periodically "scans" the player and surrounding characters. It can also be somewhat script heavy which is why SLA Redux exists.

I tried to find the periodic events function from DCL for you to use as an example but I couldn't find it. Maybe I did find it but I'm not sure because the mod is huge.

Maybe it's this one:

Spoiler

Function clocktickshort()
    ; do this only once per load, but we don't want to have to wait for up to an hour.
    if firstload
        initialize()
    endif    
    SuspendNakedCommentsIfBound()
    dclibs.checkDCURQuestRunning()    
    WasNearDeath = False
    If dclibs.containermutex
        dclibs.containermutex = False
        Return
    Endif    
    if dcumenu.shutdownmod || dclibs.pollutedsavegame
        if dcumenu.debuglogenabled
            debug.trace("[DCUR] Mod functionality has been shut down. Periodic events cancelled.")
        endif
        ; If the XDFF quest is active when the mod is shut down, we're setting it to paused state:
        if dfs.IsRunning()
            dfs.EndQuest()
        Endif
        ; same for the Rubber Doll quest.
        if rdqs.rdquestrunning     
            rdqs.terminatequest()
        EndIf
        return
    endif    
    ;none of the stuff below needs to be executed in combat or during sex scenes, so we just abort in this case and save some performance:
    if libs.playerRef.IsInCombat() || libs.IsAnimating(libs.playerRef) || suspendedstate
        addgraceperiod()    
        return
    endif                
    if dcumenu.debuglogenabled
        debug.trace("[DCUR] Periodical update starts")
    endif        
        
    ; Device Buffs    
    if dcumenu.enabledevicebuffs
        dcur_DeviceBuffs.cast(libs.playerref)    
    Else
        libs.playerref.DispelSpell(dcur_DeviceBuffs)
    Endif
    
    ;checksafearea()    
    If dcumenu.enablehornybuffs && !libs.playerRef.WornHasKeyword(dcur_kw_tentacles)
        If libs.aroused.GetActorArousal(libs.PlayerRef) > dcumenu.HornyBuffsThreshold
            if !hornybuffsactive
                libs.notify("Your sexual desires make you stronger!")
                hornybuffsactive = True
            Endif
            dcur_hornybuffs.cast(libs.playerref)
        Else
            if hornybuffsactive
                libs.notify("You are no longer horny enough to draw stength from it.")
                hornybuffsactive = False
            Endif
            libs.playerref.DispelSpell(dcur_hornybuffs)        
        Endif
    Else
        libs.playerref.DispelSpell(dcur_hornybuffs)        
    Endif        
    ; process some tasks once per game hour
    if (Utility.GetCurrentGameTime() - lasthousekeepingshortinterval) * 24.0 > 1.0
        housekeepingshortinterval()
    endif                
    breastresize()
    CheckFollowers()            
    cuminflation()
    mcs.IsSceneRunning = False        
    if StorageUtil.GetIntValue(Game.GetPlayer(), "_SD_iEnslaved")  || (dcumenu.installed_PO && (StorageUtil.GetIntValue(Game.GetPlayer(), "xpoPCinJail") == 1) || (StorageUtil.GetIntValue(Game.GetPlayer(), "xpoPCArrested") == 1) || (StorageUtil.GetIntValue(Game.GetPlayer(), "xpoPCArrestStart") == 1))
        if dcumenu.debuglogenabled
            debug.trace("[DCUR] - PO or SD Enslavement active: Periodical update cancelled")
        endif
        mcs.IsSceneRunning = True        
        return
    endif    
    ; regular stuff starts here        
    dclibs.checkchastity()
    checkvisiblerestraints()            
    ; Belt of Misogyny
    If Libs.PlayerRef.WornHasKeyword(dclibs.dcur_kw_misogynyBelt)
        libs.Aroused.UpdateActorExposure(libs.PlayerRef, 10)        
    EndIf    
    Sasha()
    ; Tentacle Parasite:
    if libs.playerRef.WornHasKeyword(dcur_kw_tentacles) && ((Utility.GetCurrentGameTime() - lasttentacleaction) * 24.0 > 0.35) && Utility.RandomInt() < 50 && !UI.IsMenuOpen("Dialogue Menu") && !UI.IsMenuOpen("InventoryMenu") && !UI.IsMenuOpen("BarterMenu") && !UI.IsMenuOpen("Crafting Menu") && !UI.IsMenuOpen("ContainerMenu")
        libs.notify("You are getting fucked by the tentacle inside your pussy..")
        libs.Aroused.UpdateActorExposure(libs.PlayerRef, 10)
        int selection = Utility.RandomInt(1,4)
        bool tease = false
        if selection == 1
            ;libs.ShockActor(libs.playerref)
            tease = true
        EndIf
        libs.VibrateEffect(libs.playerref, (selection+1), 0, teaseOnly = tease, silent = true)            
        lasttentacleaction = Utility.GetCurrentGameTime()
    Endif
    ; Gag Talk - change only when the player is not in dialogue to prevent switching system mid-dialogue
    If !UI.IsMenuOpen("Dialogue Menu")
        If Utility.RandomFloat(0.0, 99.9) < dcumenu.gagtalkchance
            ; use DCL Gag Talk
            dcur_gagtalk_enabled.SetValueInt(1)
        Else
            ; use DDI Gag Talk
            dcur_gagtalk_enabled.SetValueInt(0)
        Endif    
    Endif        
    ;Misogyny
    If Utility.RandomInt(0, 99) < dcumenu.pimisogynyrapechance && !mcs.isDCURQuestRunning && !UI.IsMenuOpen("Dialogue Menu") && dclibs.dcur_iswearinglockedgear.GetValueInt() != 1
        ;Int Chance = 25
        ;If libs.PlayerRef.GetAv("")
        ; allow misogyny rape
        dcumenu.dcur_misogyny_cooldown.SetValueInt(1)
    Else
        dcumenu.dcur_misogyny_cooldown.SetValueInt(0)
    Endif
    ;Device comments
    if libs.playerRef.WornHasKeyword(libs.zad_Lockable) && !(mcs.isDCURQuestRunning) && dcumenu.devicecommentsenabled && (dcumenu.dcur_isvisiblyrestrained.GetValue() == 1 || !dcumenu.devicecommentsvisibleonly) && (Utility.GetCurrentGameTime() - dcur_lastdevicecommenttime.GetValue()) * 24.0 > dcumenu.devicecommentscooldown
        dcur_devicecommentallowed.SetValue(1)
        dcur_devicecommentinconsequential.SetValue(0)
        dcur_devicecommentaction.SetValue(picknextdevicecommentevent())
    elseif !libs.playerRef.WornHasKeyword(libs.zad_Lockable) && !(mcs.isDCURQuestRunning) && dcumenu.devicecommentsenabled && (Utility.GetCurrentGameTime() - dcur_lastdevicecommenttime.GetValue()) * 24.0 > 24.0
        If Utility.RandomInt() < 20
            dcur_devicecommentallowed.SetValue(2)
        Else
            dcur_lastdevicecommenttime.SetValue(Utility.GetCurrentGameTime())
        EndIf
    else
        dcur_devicecommentallowed.SetValue(0)
    endif    
    if rdqs.rdquestrunning     
        libs.Aroused.UpdateActorExposure(libs.PlayerRef, 1)
        rdqs.UpdateSexCounter()
    endif    
    if dcumenu.selfbondageenable && !mcs.isDCURQuestRunning && !libs.playerref.WornHasKeyword(libs.zad_DeviousHeavyBondage) && (dcumenu.selfbondagewhenrestrained || !libs.playerRef.WornHasKeyword(libs.zad_Lockable)) && !libs.IsAnimating(libs.playerRef) && !libs.playerref.IsOnMount() && !libs.playerref.IsSwimming()
        If dclibs.Selfbondage()
            ; abort the function if Selfbondage added an item for performance reasons.
            return
        Endif    
    Endif
    ;Sex attacks, shame animation and collar punishment, but make another check for SL animation and combat first.
    if libs.playerRef.IsInCombat() || libs.IsAnimating(libs.playerRef)                
        return
    endif    
    ; at this point we survived two checks for sex scenes, so let's just assume that really none is running:
    rapemutex = false
    ; Auto Masturbate
    bool isAroused = (libs.aroused.GetActorArousal(libs.PlayerRef) > dcumenu.uncontrollablelustThreshold)
    ; if her arousal is high enough, make her go off
    If dcumenu.lossofcontrol && isAroused && !mcs.isDCURQuestRunning && ((Utility.GetCurrentGameTime() - lastmasturbation) * 24.0 > 2.0)
        If Utility.RandomInt(0, 99) < 33
            dclibs.Masturbate(libs.playerRef)
            lastmasturbation = Utility.GetCurrentGameTime()
            Return
        Else
            lastmasturbation = Utility.GetCurrentGameTime()
        EndIf
    Endif
    PublicIndencency()
    if dcur_scquest_isdancing.GetValueInt() != 1
        ; we check for proximity rape opportunities only when there were no sex attacks started or running.
        if !SexAttacks()        
            if !dclibs.gangbangmutex && (Utility.GetCurrentGameTime() - lastrape) * 24.0 > dcumenu.rdrapecooldown
                rapemutex = False
            endif
        else    
            rapemutex = True
        endif        
    endif        
EndFunction

I'm somewhat sure this is the code that runs once in a while. You don't need to be an expert to see how much this is.

A lot of the lines you see here just link to something else. Lines like Sasha() and Publicindecency() signals those functions to run if they're active in the MCM.

Sasha() looks like this:

Spoiler

Function Sasha()    
    ; no need to process this if Sasha isn't a current follower
    Actor Sasha = saqs.GetSasha()
     If !Sasha.IsInFaction(dcumenu.CurrentFollowerFaction)
         return
     Endif        
    ; remove dance packages
    If (Utility.GetCurrentGameTime() - saqs.dancetimerstart) * 24 > 0.5 && saqs.activepackage
        libs.notify("Sasha stops dancing.")
        saqs.removepackage(Sasha, saqs.activepackage)
        saqs.activepackage = None
        ;saqs.ResetOutfit(saqs.dcur_outfit_sashaNaked)
    EndIf    
    ;remove flags
    If (Utility.GetCurrentGameTime() - saqs.lastshock) * 24 > 1
        saqs.dcur_sasha_hasbeenshockedlasthour.SetValueInt(0)
    EndIf
    ; can run errand once a day
    If (Utility.GetCurrentGameTime() - saqs.lasterrand) * 24 > 24
        saqs.dcur_sasha_candoerrand.SetValueInt(1)
    Else
        saqs.dcur_sasha_candoerrand.SetValueInt(0)
    EndIf
    ; can get whored out once a day
    If (Utility.GetCurrentGameTime() - saqs.lastwhoredout) * 24 > 24
        saqs.dcur_sasha_canwhore.SetValueInt(1)
    Else
        saqs.dcur_sasha_canwhore.SetValueInt(0)
    EndIf
    ; can get gifts once a day
    If (Utility.GetCurrentGameTime() - saqs.lastgiftgiven) * 24 > 24
        saqs.dcur_sasha_cangetgift.SetValueInt(1)
    Else
        saqs.dcur_sasha_cangetgift.SetValueInt(0)
    EndIf
    ; can be kissed once in a while
    If (Utility.GetCurrentGameTime() - saqs.lastkissed) * 24 > 6
        saqs.dcur_sasha_canbekissed.SetValueInt(1)
    Else
        saqs.dcur_sasha_canbekissed.SetValueInt(0)
    EndIf
    ; check if she's willing to unlock the player's belt
    If saqs.dcur_sasha_isdominating.GetValueInt() == 0 && libs.playerref.WornHasKeyword(saqs.dcur_kw_sashaPlayerBelt) && ((Utility.GetCurrentGameTime() - saqs.lastplayerbelted) * 24 > saqs.playerbeltduration)
        if saqs.dcur_sasha_canunbeltplayer.GetValueInt() != 1
            libs.notify("Sasha would be willing to unbelt you.", messagebox = true)
        EndIf
        saqs.dcur_sasha_canunbeltplayer.SetValueInt(1)        
    Else
        saqs.dcur_sasha_canunbeltplayer.SetValueInt(0)
    EndIf
    ; domination
    ; chance to use the plugs if she plugged the player:
    if libs.playerRef.isEquipped(saqs.dcur_SashaPlayerChastityBelt) && (Utility.GetCurrentGameTime() - saqs.lasttease) * 24 > 3 && Utility.RandomInt() < 10
        libs.notify("Sasha activates the vibrators inside you...", messagebox = true)
        int rnd = Utility.RandomInt(1,5)
        if rnd == 0
            saqs.libs.VibrateEffect(libs.playerRef, 1, 10, teaseOnly = true)
        elseif rnd == 1    
            saqs.libs.VibrateEffect(libs.playerRef, 2, 20, teaseOnly = true)
        elseif rnd == 2
            saqs.libs.VibrateEffect(libs.playerRef, 3, 30, teaseOnly = true)
        elseif rnd == 3
            saqs.libs.VibrateEffect(libs.playerRef, 4, 40, teaseOnly = false)
        elseif rnd == 4
            saqs.libs.VibrateEffect(libs.playerRef, 5, 300, teaseOnly = false)
        Endif
        saqs.lasttease = Utility.GetCurrentGameTime()
    EndIf
    ; has a demand
    If saqs.dcur_sasha_isdominating.GetValueInt() == 1 && (Utility.GetCurrentGameTime() - saqs.lastdemand) * 24 > 8 && Sasha.GetDistance(libs.playerref) < 1500 && !Sasha.WornHasKeyword(libs.zad_DeviousGag)
        saqs.dcur_sasha_hasdemand.SetValueInt(1)
    Else
        saqs.dcur_sasha_hasdemand.SetValueInt(0)
    EndIf
    if saqs.dcur_sasha_hasdemand.GetValueInt() == 1 && !UI.IsMenuOpen("Dialogue Menu") && !UI.IsMenuOpen("BarterMenu") && !UI.IsMenuOpen("ContainerMenu") && !UI.IsMenuOpen("Sleep/Wait Menu") && !libs.playerRef.IsInCombat() && !libs.IsAnimating(libs.playerRef) && !libs.playerref.IsOnMount() && !libs.playerref.IsSwimming() && !dclibs.isInHomeorJail() ; && (dclibs.isInCity() || dclibs.isInHold())
        saqs.notalkcounter += 1        
        If saqs.notalkcounter > 20            
            if dclibs.progressivebondage(libs.playerref, dcumenu.equiptheme, 1)
                libs.notify("Sasha is locking more restraints on you for not talking to her!")
            Else
                libs.notify("Sasha is making your collar shock you. You need to talk to her!")
                dcumenu.dcur_electricblastspell.remoteCast(libs.playerRef, libs.playerRef, libs.playerRef)
                float maxHealth = libs.playerref.GetBaseActorValue("Health")
                libs.PlayerRef.DamageActorValue("Health", maxHealth * 0.8)    
                float maxStamina = libs.playerref.GetBaseActorValue("Stamina")
                libs.PlayerRef.DamageActorValue("Stamina", maxStamina * 0.8)    
                float maxMagicka = libs.playerref.GetBaseActorValue("Magicka")
                libs.PlayerRef.DamageActorValue("Magicka", maxMagicka * 0.8)    
            Endif
        elseif saqs.notalkcounter > 10
            libs.notify("Sasha is making your collar choke you. You need to talk to her!")
            dcumenu.dcur_electricblastspell.remoteCast(libs.playerRef, libs.playerRef, libs.playerRef)
            float maxHealth = libs.playerref.GetBaseActorValue("Health")
            libs.PlayerRef.DamageActorValue("Health", maxHealth * 0.5)    
        Elseif saqs.notalkcounter > 5
            libs.notify("Sasha demands you to talk to her NOW!")
        Else
            libs.notify("Sasha wants to talk to you.")
        Endif
    Endif
    ; process combination lock if player has the key.
    if libs.PlayerRef.GetItemCount(saqs.dcur_sashaMasterKey) >= 1 && (Utility.GetCurrentGameTime() - saqs.LastKeyTick) * 24.0 > saqs.KeyTickLen
        saqs.LastKeyTick = Utility.GetCurrentGameTime()
        saqs.KeyAction()    
    Endif
    ; errands
    If saqs.errandtype > 0    
        If saqs.errandtype == saqs.errand_lookforkeys && ((Utility.GetCurrentGameTime() - saqs.lasterrand) * 24 > 2)
            saqs.ReleaseSasha()                        
            libs.notify("Sasha returns with a key.", messagebox = true)
            dclibs.FindAnyUsefulKey(libs.playerref)
            saqs.errandtype = 0
        Endif
        If saqs.errandtype == saqs.errand_lookfortreasure && ((Utility.GetCurrentGameTime() - saqs.lasterrand) * 24 > 4)
            saqs.ReleaseSasha()                        
            libs.notify("Sasha returns with a valuable item.", messagebox = true)
            dclibs.GiveBondageRewards(leverage = 2)
            saqs.errandtype = 0
        Endif    
        If saqs.errandtype == saqs.errand_lookforgold && ((Utility.GetCurrentGameTime() - saqs.lasterrand) * 24 > 2)
            saqs.ReleaseSasha()                        
            libs.notify("Sasha returns with some gold.", messagebox = true)
            libs.playerref.AddItem(dcumenu.gold001, Utility.RandomInt(200,500))
            saqs.errandtype = 0
        Endif            
        If saqs.errandtype == saqs.errand_lookforsoulgem && ((Utility.GetCurrentGameTime() - saqs.lasterrand) * 24 > 6)
            saqs.ReleaseSasha()                        
            libs.notify("Sasha returns with a soulgem.", messagebox = true)
            libs.playerref.Additem(dclibs.LItemSoulGemFullSpecial, 1)
            saqs.errandtype = 0
        Endif                    
    Endif
    ; ties player when she's not outdoors and domination is active
    if (saqs.dcur_sasha_isdominating.GetValueInt() == 1) && saqs.GetIsOutdoors()
        saqs.UnlockPlayer()
    Elseif (saqs.dcur_sasha_isdominating.GetValueInt() == 1) && !saqs.GetIsOutdoors()
        saqs.TiePlayer()
    Endif
EndFunction

 

And PublicIndecency() looks like this:

Spoiler

Function PublicIndencency()
    if !(dclibs.isInCity() || dclibs.isInHold()) || !dcumenu.pienabled || !dcumenu.pienforcenuditylaw || libs.playerref.GetParentCell().IsInterior()
        return
    Endif
    bool isnaked = (libs.playerref.GetWornForm(0x00000004) == None)
    if !isnaked || (Game.GetModByName("Slaverun_Reloaded.esp") != 255 && dclibs.isInCity())
        return
    Endif
    ;full chastity    
    ; if (dclibs.dcur_iswearinglockedgear.GetValueInt() == 1)            
    ; actually, lets accept just the belt and bra and don't care if the player has the keys.
    if libs.playerRef.WornHasKeyword(libs.zad_DeviousBelt) && libs.playerRef.WornHasKeyword(libs.zad_DeviousBra)
        return
    Endif
    Actor currenttest = Game.FindRandomActorFromRef(libs.playerRef, 1000.0)
    if currenttest && dclibs.testrapist(currenttest) && currenttest.HasKeyword(dcumenu.ActorTypeNPC) ; make sure it's an NPC even if humanoid creatures are otherwise allowed.
        If currenttest.IsGuard()
            IndencencyPoints += 3
        Elseif dcumenu.pimisogyny
            IndencencyPoints += 2
        Else
            IndencencyPoints += 1
        Endif
        If IndencencyPoints > 15
            piqs.dcur_pi_witness.Clear()
            piqs.dcur_checkforguardFF.Cast(libs.playerref)
            Utility.Wait(1)            
            IndencencyPoints = 0            
            if piqs.dcur_pi_witness.GetActorReference().IsGuard()
                dcur_pi_usenakeddialogue.SetValueInt(1)
                libs.notify("A guard is going to prosecute you for public indecency!")    
                piqs.dcur_pi_witness.GetActorReference().moveto(libs.playerref)
                Utility.Wait(1)
                piqs.dcur_pi_guard.ForceRefTo(piqs.dcur_pi_witness.GetActorReference())                
            Else
                libs.notify("You have been reported for public indecency!")    
                int bounty
                If dcumenu.pimisogyny
                    bounty = dcumenu.pibounty * 2
                Else
                    bounty = dcumenu.pibounty
                Endif
                Faction akFaction = piqs.dcur_pi_witness.GetActorReference().GetCrimeFaction()
                akFaction.ModCrimeGold(bounty, false)
            Endif
        Else
            Bool Sex = currenttest.GetLeveledActorBase().GetSex()
            If currenttest.IsGuard()
                libs.notify(currenttest.GetLeveledActorBase().GetName() +" warns you for violeting indecency laws!")    
            ElseIf Sex == 0 ; male
                Int rm = Utility.RandomInt(1, 10)
                if rm == 1
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" is staring at your exposed self!")    
                ElseIf rm == 2
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" is staring at your boobs!")    
                ElseIf rm == 3
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" is staring at your pussy!")    
                ElseIf rm == 4
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" is staring at your curves!")    
                ElseIf rm == 5
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" is staring at your butt!")    
                ElseIf rm == 6
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" thinks you are a cheap whore!")    
                ElseIf rm == 7
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" shakes his fist at your indecent exposure!")    
                ElseIf rm == 8
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" rolls his eyes at your attention whoring!")    
                ElseIf rm == 9
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" rubs his cock while staring at your naked self!")    
                ElseIf rm == 10
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" makes obscene gestures in your direction!")    
                Endif        
            Else
                Int rm = Utility.RandomInt(1, 5)
                if rm == 1
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" thinks you are a cheap whore!")    
                ElseIf rm == 2
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" is shocked by your nudity!")    
                ElseIf rm == 3
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" shakes her head seeing you naked!")    
                ElseIf rm == 4
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" is staring at your curves!")    
                ElseIf rm == 5
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" turns her eyes away from your exposed self!")    
                Endif        
            Endif
        Endif
    EndIf
EndFunction

 

Imagine this all running every 15 seconds. That's a lot. But computers are really fast and it's needed to make a huge mod like DCL work.

Huge props to Kimy btw. It's impressive.

So this in isolation isn't a problem, but imagine if you had more mods like this running at the same time. And then imagine trying to play one of my quests. My mod doesn't scan or anything, but it sometimes does use a bunch of code to spawn things, teleport characters and starts scenes. Like this big one in the last quest:

Spoiler

Function OnCollarActivate() ;REDONE FOR SEARCH REWORK. NOW STARTS THE CAVE SCENE

    SQ10B.CleanSearchItems()
    Game.GetPlayer().removeAllItems(Laura_PlayerItemStorage, true)

    Laulibs.FadeToBlack()


    ;libs.LockDevice(libs.playerRef, Laura_ToughBlackAnkleShacklesInventory, false)
    Jade.MoveTo(JadeCaveTeleportMarker)
    Daubeny.MoveTo(CaveTeleportMarker)
    Libs.playerref.MoveTo(CaveTeleportMarker)

    Game.SetPlayerAIDriven(false)

 

    Jade.SetOutfit(Laura_SQ10_JadeFreedOutfit)
    Libs.LockDevice(Jade, Laura_ToughIronPrisonerChainsInventory, false)

    Utility.Wait(0.5)

    Debug.MessageBox("Daubeny takes you and Jade to the cave.")
    Debug.MessageBox("Something feels really wrong.")

    Utility.Wait(0.5)

    CaveEntranceDoor.Lock(false)
    PlayerCageDoor.SetOpen()
    PlayerCageDoor.Lock(False)

    CaveIntroScene.Start()

 

    Chest1.Enable()
    Chest2.Enable()
    Chest3.Enable()
    Chest4.Enable()
    Chest5.Enable()
    Chest6.Enable()

 

    Chest1Prop.Enable()
    Chest2Prop.Enable()
    Chest3Prop.Enable()
    Chest4Prop.Enable()
    Chest5Prop.Enable()
    Chest6Prop.Enable()

 

    StorageRoomKey.Enable()

    OldLedger1.Disable()
    OldLedger2.Disable()

    Slave34.Disable()

    libs.UnlockDevice(Slave31, libs.gagPanel, libs.gagPanelRendered, libs.zad_DeviousGag, true, false)
    libs.UnlockDevice(Slave24, libs.gagPanel, libs.gagPanelRendered, libs.zad_DeviousGag, true, false)

    Utility.Wait(1)

    libs.LockDevice(Slave24, libs.gagPanel, false)
    libs.LockDevice(Slave31, libs.gagPanel, false)

 

EndFunction

If you're running multiple "scanning" mods at the same time, there's a chance that there's no room left for my code to spawn a chest or something. And if that happens to be an important chest, you're stuck.

Edited by Laura
Posted (edited)
On 10/22/2023 at 12:14 PM, zittonⅡ said:

How about add a bed in the shop and change some conversation after player finished this story,? I mean, after player and laura experienced these events, they should have a good friendship.

I want to but I also want to overdo it. Adding a few lines of dialogue and some code to make a bed available for the player is easy but I want more. I want it to be part of somekind of sub/dom quest or renting thing. I'm sure I'd regret it if I took the easy path. I've always taken the 'overdo it' path and in hindsight I'm always glad I did.

 

Like the quest I'm currently working on, I want characters to return but it's difficult to not accidentally start a whole new storyline. I could go the easy soap-like route where after the quest they have to go abroad to visit their grandma something and fuck off. But that doesn't make much sense. ?

Edited by Laura
Posted (edited)
Vor 34 Minuten sagte Laura:

SexLab Aroused ist auch etwas, das den Spieler und die umliegenden Charaktere regelmäßig „scannt“. Es kann auch etwas skriptlastig sein, weshalb es SLA Redux gibt.

Ich habe versucht, die Funktion für periodische Ereignisse von DCL als Beispiel zu finden, konnte sie aber nicht finden. Vielleicht habe ich es gefunden, bin mir aber nicht sicher, weil der Mod riesig ist.

Vielleicht ist es dieses hier:

  Inhalte ausblenden

Funktion clocktickshort()
; Tun Sie dies nur einmal pro Ladung, aber wir möchten nicht bis zu einer Stunde warten müssen.
wenn erst laden
initialisieren()
endif
SuspendNakedCommentsIfBound()
dclibs.checkDCURQuestRunning()
WasNearDeath = Falsch
Wenn dclibs.containermutex
dclibs.containermutex = Falsch
Zurückkehren
Endif
wenn dcumenu.shutdownmod || dclibs.pollutedsavegame
wenn dcumenu.debuglogenabled
debug.trace("[DCUR] Mod-Funktionalität wurde heruntergefahren. Regelmäßige Ereignisse abgebrochen.")
endif
; Wenn die XDFF-Quest aktiv ist, wenn die Mod heruntergefahren wird, versetzen wir sie in den pausierten Zustand:
if dfs.IsRunning()
dfs.EndQuest()
Endif
; Gleiches gilt für die Gummipuppen-Quest.
wenn rdqs.rdquestrunning
rdqs.terminatequest()
EndIf
zurückkehren
endif
;Keiner der folgenden Dinge muss im Kampf oder während Sexszenen ausgeführt werden, daher brechen wir in diesem Fall einfach ab und sparen etwas Leistung:
if libs.playerRef.IsInCombat() || libs.IsAnimating(libs.playerRef) || suspendierter Zustand
addgraceperiod()
zurückkehren
endif
wenn dcumenu.debuglogenabled
debug.trace("[DCUR] Regelmäßige Aktualisierung beginnt")
endif
        
; Geräte-Buffs
wenn dcumenu.enabledevicebuffs
dcur_DeviceBuffs.cast(libs.playerref)
Anders
libs.playerref.DispelSpell(dcur_DeviceBuffs)
Endif
    
;checksafearea()
Wenn dcumenu.enablehornybuffs && !libs.playerRef.WornHasKeyword(dcur_kw_tentacles)
Wenn libs.aroused.GetActorArousal(libs.PlayerRef) > dcumenu.HornyBuffsThreshold
wenn !hornybuffsactive
libs.notify("Deine sexuellen Wünsche machen dich stärker!")
hornybuffsactive = True
Endif
dcur_hornybuffs.cast(libs.playerref)
Anders
wenn hornybuffsactive
libs.notify("Du bist nicht mehr geil genug, um daraus Kraft zu schöpfen.")
hornybuffsactive = Falsch
Endif
libs.playerref.DispelSpell(dcur_hornybuffs)
Endif
Anders
libs.playerref.DispelSpell(dcur_hornybuffs)
Endif
; Bearbeiten Sie einige Aufgaben einmal pro Spielstunde
if (Utility.GetCurrentGameTime() - lasthousekeepingshortinterval) * 24.0 > 1.0
housekeepingshortinterval()
endif
Brustgröße()
CheckFollowers()
Cuminflation()
mcs.IsSceneRunning = False
if StorageUtil.GetIntValue(Game.GetPlayer(), "_SD_iEnslaved") || (dcumenu.installed_PO && (StorageUtil.GetIntValue(Game.GetPlayer(), "xpoPCinJail") == 1) || (StorageUtil.GetIntValue(Game.GetPlayer(), "xpoPCArrested") == 1) || (StorageUtil. GetIntValue(Game.GetPlayer(), "xpoPCArrestStart") == 1))
wenn dcumenu.debuglogenabled
debug.trace("[DCUR] - PO- oder SD-Versklavung aktiv: Regelmäßige Aktualisierung abgebrochen")
endif
mcs.IsSceneRunning = True
zurückkehren
endif
; Normales Zeug beginnt hier
dclibs.checkchastity()
checkvisiblerestraints()
; Gürtel der Frauenfeindlichkeit
Wenn Libs.PlayerRef.WornHasKeyword(dclibs.dcur_kw_misogynyBelt)
libs.Aroused.UpdateActorExposure(libs.PlayerRef, 10)
EndIf
Sasha()
; Tentakelparasit:
if libs.playerRef.WornHasKeyword(dcur_kw_tentacles) && ((Utility.GetCurrentGameTime() - lasttentacleaction) * 24.0 > 0.35) && Utility.RandomInt() < 50 && !UI.IsMenuOpen("Dialogmenü") && !UI.IsMenuOpen( "InventoryMenu") && !UI.IsMenuOpen("BarterMenu") && !UI.IsMenuOpen("Crafting Menu") && !UI.IsMenuOpen("ContainerMenu")
libs.notify("Du wirst von dem Tentakel in deiner Muschi gefickt.")
libs.Aroused.UpdateActorExposure(libs.PlayerRef, 10)
int-Auswahl = Utility.RandomInt(1,4)
bool tease = false
wenn Auswahl == 1
;libs.ShockActor(libs.playerref)
necken = wahr
EndIf
libs.VibrateEffect(libs.playerref, (selection+1), 0, teaseOnly = tease, Silent = true)
lasttentacleaction = Utility.GetCurrentGameTime()
Endif
; Gag Talk – nur ändern, wenn der Spieler nicht im Dialog ist, um zu verhindern, dass das System mitten im Dialog wechselt
Wenn !UI.IsMenuOpen("Dialogmenü")
Wenn Utility.RandomFloat(0.0, 99.9) < dcumenu.gagtalkchance
; Verwenden Sie DCL Gag Talk
dcur_gagtalk_enabled.SetValueInt(1)
Anders
; Verwenden Sie DDI Gag Talk
dcur_gagtalk_enabled.SetValueInt(0)
Endif
Endif
;Misogynie
Wenn Utility.RandomInt(0, 99) < dcumenu.pimisogynyrapechance && !mcs.isDCURQuestRunning && !UI.IsMenuOpen("Dialogue Menu") && dclibs.dcur_iswearinglockedgear.GetValueInt() != 1
;Int Chance = 25
;Wenn libs.PlayerRef.GetAv("")
; frauenfeindliche Vergewaltigung zulassen
dcumenu.dcur_misogyny_cooldown.SetValueInt(1)
Anders
dcumenu.dcur_misogyny_cooldown.SetValueInt(0)
Endif
;Gerätekommentare
if libs.playerRef.WornHasKeyword(libs.zad_Lockable) && !(mcs.isDCURQuestRunning) && dcumenu.devicecommentsenabled && (dcumenu.dcur_isvissiblerestrained.GetValue() == 1 || !dcumenu.devicecommentsvisibleonly) && (Utility.GetCurrentGameTime() - dcur_ letztesGerätKommentarzeit .GetValue()) * 24.0 > dcumenu.devicecommentscooldown
dcur_devicecommentallowed.SetValue(1)
dcur_devicecommentinconsequential.SetValue(0)
dcur_devicecommentaction.SetValue(picknextdevicecommentevent())
elseif !libs.playerRef.WornHasKeyword(libs.zad_Lockable) && !(mcs.isDCURQuestRunning) && dcumenu.devicecommentsenabled && (Utility.GetCurrentGameTime() - dcur_lastdevicecommenttime.GetValue()) * 24.0 > 24.0
Wenn Utility.RandomInt() < 20
dcur_devicecommentallowed.SetValue(2)
Anders
dcur_lastdevicecommenttime.SetValue(Utility.GetCurrentGameTime())
EndIf
anders
dcur_devicecommentallowed.SetValue(0)
endif
wenn rdqs.rdquestrunning
libs.Aroused.UpdateActorExposure(libs.PlayerRef, 1)
rdqs.UpdateSexCounter()
endif
if dcumenu.selfbondageenable && !mcs.isDCURQuestRunning && !libs.playerref.WornHasKeyword(libs.zad_DeviousHeavyBondage) && (dcumenu.selfbondagewhenrestrained || !libs.playerRef.WornHasKeyword(libs.zad_Lockable)) && !libs.IsAnimating(lib s.playerRef) && !libs.playerref.IsOnMount() && !libs.playerref.IsSwimming()
Wenn dclibs.Selfbondage()
; Brechen Sie die Funktion ab, wenn Selfbondage aus Performance-Gründen ein Element hinzugefügt hat.
zurückkehren
Endif
Endif
;Sexuelle Angriffe, Schamanimationen und Kragenstrafen, aber überprüfen Sie zuerst noch einmal die SL-Animationen und den Kampf.
if libs.playerRef.IsInCombat() || libs.IsAnimating(libs.playerRef)
zurückkehren
endif
; Zu diesem Zeitpunkt haben wir zwei Überprüfungen auf Sexszenen überstanden. Gehen wir also einfach davon aus, dass wirklich keine läuft:
rapemutex = falsch
; Automatisch masturbieren
bool isAroused = (libs.aroused.GetActorArousal(libs.PlayerRef) > dcumenu.uncontrollablelustThreshold)
; Wenn ihre Erregung hoch genug ist, lassen Sie sie los
If dcumenu.lossofcontrol && isAroused && !mcs.isDCURQuestRunning && ((Utility.GetCurrentGameTime() - lastmasturbation) * 24.0 > 2.0)
Wenn Utility.RandomInt(0, 99) < 33
dclibs.Masturbate(libs.playerRef)
lastmasturbation = Utility.GetCurrentGameTime()
Zurückkehren
Anders
lastmasturbation = Utility.GetCurrentGameTime()
EndIf
Endif
PublicIndence()
wenn dcur_scquest_isdancing.GetValueInt() != 1
; Wir suchen nur dann nach Gelegenheiten für eine Vergewaltigung aus der Nähe, wenn keine sexuellen Übergriffe stattgefunden haben oder stattgefunden haben.
wenn !SexAttacks()
if !dclibs.gangbangmutex && (Utility.GetCurrentGameTime() - lastrape) * 24.0 > dcumenu.rdrapecooldown
rapemutex = Falsch
endif
anders
rapemutex = Wahr
endif
endif
EndFunction

Ich bin mir ziemlich sicher, dass dies der Code ist, der hin und wieder ausgeführt wird. Man muss kein Experte sein, um zu sehen, wie viel das ist.

Viele der Zeilen, die Sie hier sehen, verweisen einfach auf etwas anderes. Zeilen wie Sasha() und Publicindecency() signalisieren die Ausführung dieser Funktionen, wenn sie im MCM aktiv sind.

Sasha() sieht so aus:

  Inhalte ausblenden

Funktion Sasha()
; Dies muss nicht verarbeitet werden, wenn Sasha kein aktueller Follower ist
Schauspieler Sasha = saqs.GetSasha()
Wenn !Sasha.IsInFaction(dcumenu.CurrentFollowerFaction)
zurückkehren
Endif
; Tanzpakete entfernen
If (Utility.GetCurrentGameTime() - saqs.dancetimerstart) * 24 > 0,5 && saqs.activepackage
libs.notify("Sasha hört auf zu tanzen.")
saqs.removepackage(Sasha, saqs.activepackage)
saqs.activepackage = Keine
;saqs.ResetOutfit(saqs.dcur_outfit_sashaNaked)
EndIf
;Flags entfernen
If (Utility.GetCurrentGameTime() - saqs.lastshock) * 24 > 1
saqs.dcur_sasha_hasbeenshockedlasthour.SetValueInt(0)
EndIf
; kann einmal am Tag Besorgungen machen
If (Utility.GetCurrentGameTime() - saqs.lasterrand) * 24 > 24
saqs.dcur_sasha_candoerrand.SetValueInt(1)
Anders
saqs.dcur_sasha_candoerrand.SetValueInt(0)
EndIf
; kann einmal am Tag ausgehurt werden
If (Utility.GetCurrentGameTime() - saqs.lastwhoredout) * 24 > 24
saqs.dcur_sasha_canwhore.SetValueInt(1)
Anders
saqs.dcur_sasha_canwhore.SetValueInt(0)
EndIf
; kann einmal am Tag Geschenke bekommen
If (Utility.GetCurrentGameTime() - saqs.lastgiftgiven) * 24 > 24
saqs.dcur_sasha_cangetgift.SetValueInt(1)
Anders
saqs.dcur_sasha_cangetgift.SetValueInt(0)
EndIf
; kann ab und zu geküsst werden
If (Utility.GetCurrentGameTime() - saqs.lastkissed) * 24 > 6
saqs.dcur_sasha_canbekissed.SetValueInt(1)
Anders
saqs.dcur_sasha_canbekissed.SetValueInt(0)
EndIf
; Überprüfen Sie, ob sie bereit ist, den Gürtel des Spielers zu öffnen
Wenn saqs.dcur_sasha_isdominating.GetValueInt() == 0 && libs.playerref.WornHasKeyword(saqs.dcur_kw_sashaPlayerBelt) && ((Utility.GetCurrentGameTime() - saqs.lastplayerbelted) * 24 > saqs.playerbeltduration)
wenn saqs.dcur_sasha_canunbeltplayer.GetValueInt() != 1
libs.notify("Sasha wäre bereit, dich abzuschnallen.", messagebox = true)
EndIf
saqs.dcur_sasha_canunbeltplayer.SetValueInt(1)
Anders
saqs.dcur_sasha_canunbeltplayer.SetValueInt(0)
EndIf
; Herrschaft
; Chance, die Stecker zu verwenden, wenn sie den Player angeschlossen hat:
if libs.playerRef.isEquipped(saqs.dcur_SashaPlayerChastityBelt) && (Utility.GetCurrentGameTime() - saqs.lasttease) * 24 > 3 && Utility.RandomInt() < 10
libs.notify("Sasha aktiviert die Vibratoren in dir...", messagebox = true)
int rnd = Utility.RandomInt(1,5)
wenn rnd == 0
saqs.libs.VibrateEffect(libs.playerRef, 1, 10, teaseOnly = true)
elseif rnd == 1
saqs.libs.VibrateEffect(libs.playerRef, 2, 20, teaseOnly = true)
elseif rnd == 2
saqs.libs.VibrateEffect(libs.playerRef, 3, 30, teaseOnly = true)
elseif rnd == 3
            saqs.libs.VibrateEffect(libs.playerRef, 4, 40, teaseOnly = false)
        elseif rnd == 4
            saqs.libs.VibrateEffect(libs.playerRef, 5, 300, teaseOnly = false)
        Endif
        saqs.lasttease = Utility.GetCurrentGameTime()
    EndIf
; hat eine Nachfrage
Wenn saqs.dcur_sasha_isdominating.GetValueInt() == 1 && (Utility.GetCurrentGameTime() - saqs.lastdemand) * 24 > 8 && Sasha.GetDistance(libs.playerref) < 1500 && !Sasha.WornHasKeyword(libs.zad_DeviousGag)
saqs.dcur_sasha_hasdemand.SetValueInt(1)
Anders
saqs.dcur_sasha_hasdemand.SetValueInt(0)
EndIf
if saqs.dcur_sasha_hasdemand.GetValueInt() == 1 && !UI.IsMenuOpen("Dialogue Menu") && !UI.IsMenuOpen("BarterMenu") && !UI.IsMenuOpen("ContainerMenu") && !UI.IsMenuOpen("Sleep /Wartemenü") && !libs.playerRef.IsInCombat() && !libs.IsAnimating(libs.playerRef) && !libs.playerref.IsOnMount() && !libs.playerref.IsSwimming() && !dclibs.isInHomeorJail() ; && (dclibs.isInCity() || dclibs.isInHold())
saqs.notalkcounter += 1
Wenn saqs.notalkcounter > 20
if dclibs.progressivebondage(libs.playerref, dcumenu.equiptheme, 1)
libs.notify("Sasha legt dir noch mehr Beschränkungen auf, weil du nicht mit ihr redest!")
Anders
libs.notify("Sasha sorgt dafür, dass dein Kragen dich schockiert. Du musst mit ihr reden!")
dcumenu.dcur_electricblastspell.remoteCast(libs.playerRef, libs.playerRef, libs.playerRef)
float maxHealth = libs.playerref.GetBaseActorValue("Health")
libs.PlayerRef.DamageActorValue("Health", maxHealth * 0,8)
float maxStamina = libs.playerref.GetBaseActorValue("Stamina")
libs.PlayerRef.DamageActorValue("Stamina", maxStamina * 0,8)
float maxMagicka = libs.playerref.GetBaseActorValue("Magicka")
libs.PlayerRef.DamageActorValue("Magicka", maxMagicka * 0,8)
Endif
elseif saqs.notalkcounter > 10
libs.notify("Sasha lässt dich am Halsband ersticken. Du musst mit ihr reden!")
dcumenu.dcur_electricblastspell.remoteCast(libs.playerRef, libs.playerRef, libs.playerRef)
float maxHealth = libs.playerref.GetBaseActorValue("Health")
libs.PlayerRef.DamageActorValue("Health", maxHealth * 0,5)
Elseif saqs.notalkcounter > 5
libs.notify("Sasha verlangt von dir, JETZT mit ihr zu reden!")
Anders
libs.notify("Sasha möchte mit dir reden.")
Endif
Endif
; Benutzen Sie das Zahlenschloss, wenn der Spieler den Schlüssel hat.
wenn libs.PlayerRef.GetItemCount(saqs.dcur_sashaMasterKey) >= 1 && (Utility.GetCurrentGameTime() - saqs.LastKeyTick) * 24.0 > saqs.KeyTickLen
saqs.LastKeyTick = Utility.GetCurrentGameTime()
saqs.KeyAction()
Endif
; Besorgungen
Wenn saqs.errandtype > 0
Wenn saqs.errandtype == saqs.errand_lookforkeys && ((Utility.GetCurrentGameTime() - saqs.lasterrand) * 24 > 2)
saqs.ReleaseSasha()
libs.notify("Sasha kommt mit einem Schlüssel zurück.", messagebox = true)
dclibs.FindAnyUsefulKey(libs.playerref)
saqs.errandtype = 0
Endif
Wenn saqs.errandtype == saqs.errand_lookfortreasure && ((Utility.GetCurrentGameTime() - saqs.lasterrand) * 24 > 4)
saqs.ReleaseSasha()
libs.notify("Sasha kommt mit einem wertvollen Gegenstand zurück.", messagebox = true)
dclibs.GiveBondageRewards(leverage = 2)
saqs.errandtype = 0
Endif
Wenn saqs.errandtype == saqs.errand_lookforgold && ((Utility.GetCurrentGameTime() - saqs.lasterrand) * 24 > 2)
saqs.ReleaseSasha()
libs.notify("Sasha kommt mit etwas Gold zurück.", messagebox = true)
libs.playerref.AddItem(dcumenu.gold001, Utility.RandomInt(200,500))
saqs.errandtype = 0
Endif
Wenn saqs.errandtype == saqs.errand_lookforsoulgem && ((Utility.GetCurrentGameTime() - saqs.lasterrand) * 24 > 6)
saqs.ReleaseSasha()
libs.notify("Sasha kehrt mit einem Seelenstein zurück.", messagebox = true)
libs.playerref.Additem(dclibs.LItemSoulGemFullSpecial, 1)
saqs.errandtype = 0
Endif
Endif
; bindet die Spielerin, wenn sie nicht draußen ist und die Dominanz aktiv ist
if (saqs.dcur_sasha_isdominating.GetValueInt() == 1) && saqs.GetIsOutdoors()
saqs.UnlockPlayer()
Elseif (saqs.dcur_sasha_isdominating.GetValueInt() == 1) && !saqs.GetIsOutdoors()
saqs.TiePlayer()
Endif
EndFunction

 

Und PublicIndecency() sieht so aus:

  Verborgene Inhalte aufdecken

Function PublicIndencency()
    if !(dclibs.isInCity() || dclibs.isInHold()) || !dcumenu.pienabled || !dcumenu.pienforcenuditylaw || libs.playerref.GetParentCell().IsInterior()
        return
    Endif
    bool isnaked = (libs.playerref.GetWornForm(0x00000004) == None)
    if !isnaked || (Game.GetModByName("Slaverun_Reloaded.esp") != 255 && dclibs.isInCity())
        return
    Endif
    ;full chastity    
    ; if (dclibs.dcur_iswearinglockedgear.GetValueInt() == 1)            
    ; actually, lets accept just the belt and bra and don't care if the player has the keys.
    if libs.playerRef.WornHasKeyword(libs.zad_DeviousBelt) && libs.playerRef.WornHasKeyword(libs.zad_DeviousBra)
        return
    Endif
    Actor currenttest = Game.FindRandomActorFromRef(libs.playerRef, 1000.0)
    if currenttest && dclibs.testrapist(currenttest) && currenttest.HasKeyword(dcumenu.ActorTypeNPC) ; make sure it's an NPC even if humanoid creatures are otherwise allowed.
        If currenttest.IsGuard()
            IndencencyPoints += 3
        Elseif dcumenu.pimisogyny
            IndencencyPoints += 2
        Else
            IndencencyPoints += 1
        Endif
        If IndencencyPoints > 15
            piqs.dcur_pi_witness.Clear()
            piqs.dcur_checkforguardFF.Cast(libs.playerref)
            Utility.Wait(1)            
            IndencencyPoints = 0            
            if piqs.dcur_pi_witness.GetActorReference().IsGuard()
                dcur_pi_usenakeddialogue.SetValueInt(1)
                libs.notify("A guard is going to prosecute you for public indecency!")    
                piqs.dcur_pi_witness.GetActorReference().moveto(libs.playerref)
                Utility.Wait(1)
                piqs.dcur_pi_guard.ForceRefTo(piqs.dcur_pi_witness.GetActorReference())                
            Else
                libs.notify("You have been reported for public indecency!")    
                int bounty
                If dcumenu.pimisogyny
                    bounty = dcumenu.pibounty * 2
                Else
                    bounty = dcumenu.pibounty
                Endif
                Faction akFaction = piqs.dcur_pi_witness.GetActorReference().GetCrimeFaction()
                akFaction.ModCrimeGold(bounty, false)
            Endif
        Else
            Bool Sex = currenttest.GetLeveledActorBase().GetSex()
            If currenttest.IsGuard()
                libs.notify(currenttest.GetLeveledActorBase().GetName() +" warns you for violeting indecency laws!")    
            ElseIf Sex == 0 ; male
                Int rm = Utility.RandomInt(1, 10)
                if rm == 1
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" is staring at your exposed self!")    
                ElseIf rm == 2
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" is staring at your boobs!")    
                ElseIf rm == 3
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" is staring at your pussy!")    
                ElseIf rm == 4
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" is staring at your curves!")    
                ElseIf rm == 5
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" is staring at your butt!")    
                ElseIf rm == 6
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" thinks you are a cheap whore!")    
                ElseIf rm == 7
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" shakes his fist at your indecent exposure!")    
                ElseIf rm == 8
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" rolls his eyes at your attention whoring!")    
                ElseIf rm == 9
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" rubs his cock while staring at your naked self!")    
                ElseIf rm == 10
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" makes obscene gestures in your direction!")    
                Endif        
            Else
                Int rm = Utility.RandomInt(1, 5)
                if rm == 1
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" thinks you are a cheap whore!")    
                ElseIf rm == 2
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" is shocked by your nudity!")    
                ElseIf rm == 3
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" shakes her head seeing you naked!")    
                ElseIf rm == 4
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" is staring at your curves!")    
                ElseIf rm == 5
                    libs.notify(currenttest.GetLeveledActorBase().GetName() +" turns her eyes away from your exposed self!")    
                Endif        
            Endif
        Endif
    EndIf
EndFunction

 

Stellen Sie sich vor, das Ganze läuft alle 15 Sekunden ab. Das ist eine Menge. Aber Computer sind wirklich schnell und es ist notwendig, damit ein großer Mod wie DCL funktioniert.

Ein großes Lob übrigens an Kimy. Es ist beeindruckend.

Das ist also für sich genommen kein Problem, aber stellen Sie sich vor, Sie hätten mehrere Mods dieser Art gleichzeitig laufen lassen. Und dann stellen Sie sich vor, Sie versuchen, eine meiner Quests zu spielen. Mein Mod scannt nicht oder so, aber er verwendet manchmal eine Menge Code, um Dinge zu spawnen, Charaktere zu teleportieren und Szenen zu starten. Wie dieser große in der letzten Quest:

  Inhalte ausblenden

Funktion OnCollarActivate() ;ÜBERARBEITET ZUR ÜBERARBEITUNG DER SUCHE. JETZT BEGINNT DIE HÖHLENSZENE

SQ10B.CleanSearchItems()
Game.GetPlayer().removeAllItems(Laura_PlayerItemStorage, true)

Laulibs.FadeToBlack()


;libs.LockDevice(libs.playerRef, Laura_ToughBlackAnkleShacklesInventory, false)
Jade.MoveTo(JadeCaveTeleportMarker)
Daubeny.MoveTo(CaveTeleportMarker)
Libs.playerref.MoveTo(CaveTeleportMarker)

Game.SetPlayerAIDriven(false)

 

Jade.SetOutfit(Laura_SQ10_JadeFreedOutfit)
Libs.LockDevice(Jade, Laura_ToughIronPrisonerChainsInventory, false)

Utility.Wait(0.5)

Debug.MessageBox("Daubeny bringt dich und Jade in die Höhle.")
Debug.MessageBox("Etwas fühlt sich wirklich falsch an.")

Utility.Wait(0.5)

CaveEntranceDoor.Lock(false)
PlayerCageDoor.SetOpen()
PlayerCageDoor.Lock(False)

CaveIntroScene.Start()

 

Chest1.Enable()
Chest2.Enable()
Chest3.Enable()
Chest4.Enable()
Chest5.Enable()
Chest6.Enable()

 

Chest1Prop.Enable()
Chest2Prop.Enable()
Chest3Prop.Enable()
Chest4Prop.Enable()
Chest5Prop.Enable()
Chest6Prop.Enable()

 

StorageRoomKey.Enable()

OldLedger1.Disable()
OldLedger2.Disable()

Slave34.Disable()

libs.UnlockDevice(Slave31, libs.gagPanel, libs.gagPanelRendered, libs.zad_DeviousGag, true, false)
libs.UnlockDevice(Slave24, libs.gagPanel, libs.gagPanelRendered, libs.zad_DeviousGag, true, false)

Utility.Wait(1)

libs.LockDevice(Slave24, libs.gagPanel, false)
libs.LockDevice(Slave31, libs.gagPanel, false)

 

EndFunction

Wenn Sie mehrere „Scanning“-Mods gleichzeitig ausführen, besteht die Möglichkeit, dass kein Platz mehr für meinen Code vorhanden ist, um eine Truhe oder ähnliches zu erzeugen. Und wenn es sich hierbei um eine wichtige Truhe handelt, stecken Sie fest.

 

Thank you for these detailed examples ... they show me things I have only suspected so far (due to lack of detailed knowledge).


The user in question - whom I tried to help - has a very long mod list with various candidates.

I myself had a similarly long mod list when I first tried to get her mod to work ... also with DCL - which I really enjoyed playing!.

And so her mod didn't work for me either - very frsutrated I had deleted it then.


This time I approached the matter differently ... I informed myself in this thread beforehand and adjusted my mod list accordingly (as described) ... and everything works perfectly.

 

---

This training mod (gives bonuses for wearing DD equipment over time) - has a very high scan frequency - if you extend this scanning to your companions it sometimes gets difficult (you see clear time delays in quest reactions) ... but as soon as you extend the scan function to all NPCs, it's over ... it becomes unplayable.

Since the physical changes - which are produced by the training - are also adjusted at the same time, the game can be overwhelmed even with a fully activated DCL.

(You only have to go to the "club cellar" in Flusswald...)

 

 

Edited by Miauzi
Posted
Vor 17 Minuten sagte Laura:

Ich möchte, aber ich möchte es auch übertreiben. Ein paar Dialogzeilen und etwas Code hinzuzufügen, um dem Spieler ein Bett zur Verfügung zu stellen, ist einfach, aber ich möchte mehr. Ich möchte, dass es Teil einer Art Sub-/Dom-Quest oder einer Mietsache ist. Ich bin mir sicher, dass ich es bereuen würde, wenn ich den einfachen Weg gewählt hätte. Ich habe immer den Weg gewählt, es zu übertreiben, und im Nachhinein bin ich immer froh, dass ich es getan habe.

 

Wie bei der Quest, an der ich gerade arbeite, möchte ich, dass die Charaktere zurückkehren, aber es ist schwierig, nicht versehentlich eine ganz neue Handlung zu beginnen. Ich könnte den einfachen Soap-ähnlichen Weg gehen, bei dem sie nach der Quest ins Ausland gehen müssen, um ihre Oma zu besuchen und sich zu verpissen. Aber das macht wenig Sinn. ?

 

A "game relationship" between Laura and the player ... good idea - because the beginning is already there, so to speak.


I have already hinted at something like that in my story ... but these are still the thoughts of my play character - how she reacts to being locked into the KG ... my own "roll-play", so to speak.

Whereas in the current story an actual "play-relationship" (sub-dom-relationship) would be very complicated - because something like that is already firmly planned with other protagonists (the companion "Recorder" and the "modified" Serana). Laura "merely" supplies the "toys" needed ... also "custom-made").


But this idea would inspire many fans of the mod from my point of view.

:classic_wub:

 

Posted

Going to sound like a broken record but i've tried every listed fix for that one stage in taking control, I saved outside the shop, master literally couldn't be closer to me, go inside, he comes in just fine, no laura trigger, spawn laura, has the first line of dialogue then back to usual shop dialogue, masters dialogue will trigger when he says "make her" and you can respond but after that nothing. autosaves don't do it, talking to master outside is a nope, inside nope, might try killing viggo tomorrow see if that fixes it.
did not kill viggo in case it's linked to that.
SSE.

Posted
On 10/25/2023 at 11:51 PM, Laura said:

So this in isolation isn't a problem, but imagine if you had more mods like this running at the same time. And then imagine trying to play one of my quests.

Relating to this, does anyone know how much script load bakafactory/factoryclose's mods have? Namely SLHH, SLAP and BaboDialogue.

Posted

Just incase anyone is wondering, JK's Whiterun Outskirts is KIND OF compatible, there are a few clipping issues but it kind of places nicely and gives Laura a backyard. A few markfordelete can clean it up nicely.

Posted

Just completed the main storyline; what happens to Jade after she seemingly escapes? I really enjoyed her character and story, and really want to see more of her. Maybe some side quests where we try to track her down and capture her again, since she still hasn't faced justice (and probably get tied up by her along the way)?

Posted
On 10/29/2023 at 12:27 AM, philyb said:

Just incase anyone is wondering, JK's Whiterun Outskirts is KIND OF compatible, there are a few clipping issues but it kind of places nicely and gives Laura a backyard. A few markfordelete can clean it up nicely.

 

I have a patch for Outskirts available here: 

 

Posted
On 10/30/2023 at 12:54 PM, BlahBlahBlah1103 said:

Just completed the main storyline; what happens to Jade after she seemingly escapes? I really enjoyed her character and story, and really want to see more of her. Maybe some side quests where we try to track her down and capture her again, since she still hasn't faced justice (and probably get tied up by her along the way)?

So far no new updates after the main quest ends so we have no idea.

Posted
Am 30.10.2023 um 12:54 Uhr sagte BlahBlahBlah1103:

Habe gerade die Haupthandlung abgeschlossen; Was passiert mit Jade, nachdem sie scheinbar entkommen ist? Ich habe ihren Charakter und ihre Geschichte wirklich genossen und möchte unbedingt mehr von ihr sehen. Vielleicht ein paar Nebenquests, in denen wir versuchen, sie aufzuspüren und wieder gefangen zu nehmen, da sie immer noch nicht vor Gericht gestellt wurde (und wahrscheinlich unterwegs von ihr gefesselt wird)?

 

"Jade" itself comes - as I understand the plot - from the slave cellar of "Darius" and "Sloane".


Whether she was able to escape or was released by her "new owner" or escaped... as I understand it, it's not really clear yet... or have I overlooked something fundamental?


Their "raids" - according to my interpretation - were intended to get the "ball rolling"... ultimately they represent the dramaturgical lever - why "Laura" and "Katharina" ultimately have to face their fate... with the indispensable help of the player.


So finding "Jade" in the dungeon basement of "Sloane" was logical... the slave trader probably also had various papers about her in her hand in addition to the StarWars guy... which we don't have found in the safe.

The mod author is obviously still keeping some continuation options open here.


Interactions with Jade would ultimately be a kind of "spin-off" of the mod itself... would turn her from an important supporting character into THE main character... but who is actually far superior to the player in all aspects of "stealth".

So if you want to hunt "Jade"... you have to offer yourself as a "tasty" bait... basically invite her to a BDSM game together.

?

 

Posted

First of all - your mod is brilliant - I recently downloaded it on the SE version, everything works for me - including DD, chains, etc. But for some reason, during the first task - bringing thotium, Katarina cannot remove any DD accessories from the character. I don't know what the problem is, even Debug in MM cannot remove them

Posted
3 hours ago, Sidorowicz said:

First of all - your mod is brilliant - I recently downloaded it on the SE version, everything works for me - including DD, chains, etc. But for some reason, during the first task - bringing thotium, Katarina cannot remove any DD accessories from the character. I don't know what the problem is, even Debug in MM cannot remove them

 

If you still have one, try reloading a save before going into the shop and try to get her to remove it again.  Might be script lag or something.   If that fails or you don't have a save, you could try adding "Laura's Secret Key" I think it is called, via console.  However... I remember that one set of the quest items won't open with that key and it might be that one, the first set.  So if that happens, you could try the debug options in DD itself, and maybe even Deviously Cursed Loot if you use it.  DCL has a "Free Me!" button that can remove quest objects... but that might be reserved for only DCL objects, I don't actually know if it can free you from other mods' items.  

Posted
Vor 4 Stunden sagte Sidorowicz:

Zunächst einmal – Ihr Mod ist brillant – ich habe ihn kürzlich auf die SE-Version heruntergeladen, bei mir funktioniert alles – einschließlich DD, Ketten usw. Aber aus irgendeinem Grund kann Katarina während der ersten Aufgabe – Thotium bringen – kein DD-Zubehör entfernen der Charakter. Ich weiß nicht, wo das Problem liegt, selbst Debug in MM kann sie nicht entfernen

 

Well - without a complete list of their mods (in a spoiler please) we can't really get any further here.


We addressed your error here for another user just a few weeks ago.

 

Posted
Vor 27 Minuten sagte OlegMokry:

Hallo. Kannst du mir helfen? Ich habe Probleme mit „vertrautes Gesicht“. Ich habe alle drei Schlüssel gefunden, aber ich kann keinen Tresor öffnen.

 

Can't you describe it a little more precisely... I, for example, do NOT have a "crystal ball" and at the moment I don't feel like guessing blindly... thank you

Posted (edited)
20 hours ago, Miauzi said:

 

Can't you describe it a little more precisely... I, for example, do NOT have a "crystal ball" and at the moment I don't feel like guessing blindly... thank you

i`ve found all three keys, and then i can`t understand what i need to do next. i can only to change my restraints. A strongbox is not active. i try  to open it, but nothing happens. All idols work. What i need to do next? i`ve tried every restraints set but a strongbox didn`t activate,

ScreenShot3.bmp

Edited by OlegMokry
Posted (edited)
Vor einer Stunde sagte OlegMokry:

Ich habe alle drei Schlüssel gefunden und verstehe dann nicht, was ich als nächstes tun soll. Ich kann nur meine Fesseln ändern. Ein Tresor ist nicht aktiv. Ich versuche es zu öffnen, aber es passiert nichts. Alle Idole funktionieren. Was muss ich als nächstes tun? Ich habe alle Fesseln ausprobiert, aber ein Tresor ließ sich nicht aktivieren.

ScreenShot3.bmp 5.93 MB · 2 downloads

 

According to the picture you sent, you have already opened the box (???) ... it contains the key with which you can leave the mine ... it belongs to the grille door behind the drawbridge

 

The problem is not unknown to me... it has been discussed at least once in this thread... I just don't remember where.

So it only helps to look through the last 200 pages ...

 

Edited by Miauzi
Posted
49 minutes ago, Miauzi said:

 

According to the picture you sent, you have already opened the box (???) ... it contains the key with which you can leave the mine ... it belongs to the grille door behind the drawbridge

 

 

but i didn`t get a key. This strongbox is active when i don`t have any  of three keys. maybe i can use older versions of this mod. I will check my other mods. Maybe one of them caused it

Posted
Gerade eben sagte OlegMokry:

Aber ich habe keinen Schlüssel bekommen. Dieser Tresor ist aktiv, wenn ich keinen der drei Schlüssel habe. Vielleicht kann ich ältere Versionen dieses Mods verwenden. Ich werde meine anderen Mods überprüfen. Vielleicht hat es einer von ihnen verursacht

 

Well - the current version works - I used it to create my blog story

 

 

But translations of the subtitles or packages that give the mod's NPC "voices" - can lead to errors... although usually in dialogues


The reason that a "box" doesn't work is usually due to a conflict with another mod... but without a complete mod list (in a spoiler) we can't help you

 

Posted
On 10/26/2023 at 9:14 PM, lmTAYLA said:

Going to sound like a broken record but i've tried every listed fix for that one stage in taking control, I saved outside the shop, master literally couldn't be closer to me, go inside, he comes in just fine, no laura trigger, spawn laura, has the first line of dialogue then back to usual shop dialogue, masters dialogue will trigger when he says "make her" and you can respond but after that nothing. autosaves don't do it, talking to master outside is a nope, inside nope, might try killing viggo tomorrow see if that fixes it.
did not kill viggo in case it's linked to that.
SSE.


Nope, just went back and tried that myself, but it didn't seem to make a difference.

 

So far, the closest I got was by manually doing what the TpSonaAndLaura function does, but you can only talk to each once before they go back to their normal dialog. I did try and brute force it along, but due to the issues, it really didn't help all that much. I will include what I did in a spoiler below, in case you want to try and break shit as well.


 

Spoiler

This is super janky, and brute forces your way though, but has some MAJOR issues due to missing scripts.

 

Move and enable Sona: prid xx029057, moveto player, enable

 

Talk to Sona.

 

Enable Laura: prid xx004f08, enable

 

Talk to Laura & Master.

 

Based on the code, somewhere in here it looks like you would attack Laura. Trying that when not asked doesn't help other than make people yell and run around.

 

Manually set the quest stage to 1400, then 1500.

 

Manually unlock the thotium case under the front desk and touch it. The quest stage should now be 1600.

 

Re-enable Laura.

 

Set it to 1650. This is the dialog that indicates what should be happening right now. (function: FreePlayer2)

"Sona slowly puts her hands near the collar and seems to drain it. As she drains it, master fades away and the rest of the steel restraints disappear. She then carefully removes the collar and then takes off the gag."

Since this doesn't happen, you're left with all your restraints.

 

Find a way to get the restraints off of yourself. Use the console, or give youself the key (xx01c35a). I used the console, then unequiped them from my inventory.

 

Disable Master to get him out of the way.

 

Talk to Laura, she will remove all the leather restraints. It would have re-enabled fast travel, but it doesn't since the script didn't run, so that's a problem... (function: FreePlayer3)

 

Set the stage to 1800, Manually unlock the front door and re-lock the thotium case is you wish. (function: StartStage1800)

 

Talk to Laura. She asks if you're ready to go, but she never follows.

 

At this point, I got stuck since there's no quest marker or objective.

 

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...