Jump to content

Deviously Cursed Loot LE 9.0 (2021-03-09)


Recommended Posts

Posted

 

Yeah, only drop usefull keys still keeps dropping for example leg restraint or body restraint keys even though all items I have only use regular ol' restraint keys.

 

Also would like to suggest changing scoundrel armor to maybe stealth or lockpicking increase?

 

Pickpocket feels kind of meh, stealth and lockpicking are far more usefull, I feel like woodsman outfit is just plain better because 40% extra bow damage is really substantial.

 

Drop useful keys drops keys for the "most annoying" restraint first. That's why you will always get restraints key when wearing e.g. a gag and a chastity belt. The gag is far more annoying. The rare key and common key chance is calculated independently, though. So it could be that you're getting head restraints keys for your gag instead of the restraints key it would actually need.

 

I can add a stealth and/or lockpicking bonus to the scoundrel armor, sure!

 

 

Yeah, Drop Useful Keys still has the same problem as the previous version. I came up with a fix then (for common keys), and posted it here, but I guess it got missed. I have adapted that fix to 5.3 and here it is.

 

Rather than dropping keys in a particular order, based on worn items, it instead boosts the weight of keys needed for worn items, and then does a normal weight based random selection. It doesn't guarantee that you'll get a key you need, but it shifts the probability that way.

 

 

 

Function FindUsefulKey(ObjectReference addto = none)
        FindUsefulKeys(addto, true, false)
endfunction

Function FindUsefulRareKey(ObjectReference addto = none)
        FindUsefulKeys(addto, false, true)
endfunction

string Function FindUsefulKeys(ObjectReference addto = none, bool includeCommonKeys = true, bool includeRareKeys = false)
        float chastitykeyweight = dcumenu.chastitykeyweight
        float restraintskeyweight = dcumenu.restraintskeyweight
        float piercingkeyweight = dcumenu.piercingkeyweight
        float headrestraintkeychance = dcumenu.headrestraintkeychance
        float handrestraintkeychance = dcumenu.handrestraintkeychance
        float bodyrestraintkeychance = dcumenu.bodyrestraintkeychance
        float legrestraintkeychance = dcumenu.legrestraintkeychance

        If !addto
                addto = libs.playerRef
        Endif
        Actor Player = libs.playerRef
        ; Weight keys by worn keywords
        If Player.WornHasKeyword(libs.zad_DeviousYoke)
                If includeRareKeys
                        handrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousHood)
                If includeRareKeys
                        headrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousGag)
                If includeRareKeys
                        headrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousBlindfold)
                If includeRareKeys
                        headrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousBoots)
                If includeRareKeys
                        legrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousCollar)
                If includeRareKeys
                        headrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousBelt)
                If includeRareKeys
                        bodyrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        chastitykeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousGloves)
                If includeRareKeys
                        handrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousSuit)
                If includeRareKeys
                        bodyrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousBra)
                If includeRareKeys
                        bodyrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        chastitykeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousHarness)
                If includeRareKeys
                        bodyrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        chastitykeyweight += 100
                Endif
        Endif

        Float chance = 0.0
        Float grandtotalweight = 0.0
        float dropchance = dcumenu.rarekeydropchance + dcumenu.keydropchance
        If (!includeCommonKeys || Utility.RandomFloat(0.0,dropchance) < dcumenu.rarekeydropchance) && includeRareKeys
                grandtotalweight = headrestraintkeychance + handrestraintkeychance + bodyrestraintkeychance + legrestraintkeychance
                chance = Utility.RandomFloat(0.0, grandtotalweight)
                if chance < headrestraintkeychance
                        addto.AddItem(dcumenu.dcur_headrestraintskey, 1)
                        return "Head Restraints Key"
                else
                        chance = chance - headrestraintkeychance
                endIf
                if chance < handrestraintkeychance
                        addto.AddItem(dcumenu.dcur_handrestraintskey, 1)
                        return "Hand Restraints Key"
                else
                        chance = chance - handrestraintkeychance
                endIf
                if chance < bodyrestraintkeychance
                        addto.AddItem(dcumenu.dcur_bodyrestraintskey, 1)
                        return "Body Restraints Key"
                else
                        chance = chance - bodyrestraintkeychance
                endIf
                if chance < legrestraintkeychance
                        addto.AddItem(dcumenu.dcur_legrestraintskey, 1)
                        return "Leg Restraints Key"
                else
                        chance = chance - legrestraintkeychance
                endIf
        elseif includeCommonKeys
                grandtotalweight = chastitykeyweight + restraintskeyweight + piercingkeyweight
                chance = Utility.RandomFloat(0.0, grandtotalweight)
                if chance < chastitykeyweight
                        addto.AddItem(libs.chastityKey, 1)
                        return "Chastity Key"
                else
                        chance = chance - chastitykeyweight
                endIf
                if chance < restraintskeyweight
                        addto.AddItem(libs.restraintsKey, 1)
                        return "Restraints Key"
                else
                        chance = chance - restraintskeyweight
                endIf
                if chance < piercingkeyweight
                        addto.AddItem(libs.piercingKey, 1)
                        return "Piercing Tool"
                else
                        chance = chance - piercingkeyweight
                endIf
        endif
EndFunction 

 

EDIT: New version, without multiple calls to expensive GetWornDevice() call.

Posted

Hi Kimy, love this mod and its been great with all the improvements you have made, i got rid of a few other mods too.

 

having one minor issue with pony boots, when i equip them on either my PC or a follower, the feet disappear.

 

I can put on restrictive boots, rubber boots and they are fine, just pony boots disappearing

 

the issue first appeared when i started playing with 5.2, and i didnt worry about it then, but now its still there with 5.3

 

could it be a load order issue with captured dreams? i have it loading before DCL, just trying to figure it out.

 

i run xpmse 3.76, sl 1.61b, sla 2.7a, dda 2.92, ddx 1.2.3 ddi 2.9.2 cd 3.84 fnis 6.2, all latest versions and cant figure it out as to why the boots are disappearing

using cbbe HDT body

 

any advice?

Posted

hey I just had a thought. would you be interested in putting an a chance that when your defeated adding another possible outcome of being sent to leon or leah as there slave? maybe sold to them or whatever so you have to remain their slave until you pay off what they payed in some task or another. or escaping somehow. just wandering, as it is your mod is my favorite in loverslab ty for the work you put in.

Posted

hey I just had a thought. would you be interested in putting an a chance that when your defeated adding another possible outcome of being sent to leon or leah as there slave? maybe sold to them or whatever so you have to remain their slave until you pay off what they payed in some task or another. or escaping somehow. just wandering, as it is your mod is my favorite in loverslab ty for the work you put in.

 

That's already in, via SimpleSlavery. If you have this mod installed, you can get sent to a slave auction when defeated, which again can start Leon/Leah slavery/

Posted

 

 

Yeah, only drop usefull keys still keeps dropping for example leg restraint or body restraint keys even though all items I have only use regular ol' restraint keys.

 

Also would like to suggest changing scoundrel armor to maybe stealth or lockpicking increase?

 

Pickpocket feels kind of meh, stealth and lockpicking are far more usefull, I feel like woodsman outfit is just plain better because 40% extra bow damage is really substantial.

 

Drop useful keys drops keys for the "most annoying" restraint first. That's why you will always get restraints key when wearing e.g. a gag and a chastity belt. The gag is far more annoying. The rare key and common key chance is calculated independently, though. So it could be that you're getting head restraints keys for your gag instead of the restraints key it would actually need.

 

I can add a stealth and/or lockpicking bonus to the scoundrel armor, sure!

 

 

Yeah, Drop Useful Keys still has the same problem as the previous version. I came up with a fix then (for common keys), and posted it here, but I guess it got missed. I have adapted that fix to 5.3 and here it is.

 

Rather than dropping keys in a particular order, based on worn items, it instead boosts the weight of keys needed for worn items, and then does a normal weight based random selection. It doesn't guarantee that you'll get a key you need, but it shifts the probability that way.

 

 

 

Function FindUsefulKey(ObjectReference addto = none)
        FindUsefulKeys(addto, true, false)
endfunction

Function FindUsefulRareKey(ObjectReference addto = none)
        FindUsefulKeys(addto, false, true)
endfunction

string Function FindUsefulKeys(ObjectReference addto = none, bool includeCommonKeys = true, bool includeRareKeys = false)
        float chastitykeyweight = dcumenu.chastitykeyweight
        float restraintskeyweight = dcumenu.restraintskeyweight
        float piercingkeyweight = dcumenu.piercingkeyweight
        float headrestraintkeychance = dcumenu.headrestraintkeychance
        float handrestraintkeychance = dcumenu.handrestraintkeychance
        float bodyrestraintkeychance = dcumenu.bodyrestraintkeychance
        float legrestraintkeychance = dcumenu.legrestraintkeychance

        If !addto
                addto = libs.playerRef
        Endif
        Actor Player = libs.playerRef
        ; Weight keys by worn keywords
        If Player.WornHasKeyword(libs.zad_DeviousYoke)
                If includeRareKeys
                        handrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousHood)
                If includeRareKeys
                        headrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousGag)
                If includeRareKeys
                        headrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousBlindfold)
                If includeRareKeys
                        headrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousBoots)
                If includeRareKeys
                        legrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousCollar)
                If includeRareKeys
                        headrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousBelt)
                If includeRareKeys
                        bodyrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        chastitykeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousGloves)
                If includeRareKeys
                        handrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousSuit)
                If includeRareKeys
                        bodyrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousBra)
                If includeRareKeys
                        bodyrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        chastitykeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousHarness)
                If includeRareKeys
                        bodyrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        chastitykeyweight += 100
                Endif
        Endif

        Float chance = 0.0
        Float grandtotalweight = 0.0
        float dropchance = dcumenu.rarekeydropchance + dcumenu.keydropchance
        If (!includeCommonKeys || Utility.RandomFloat(0.0,dropchance) < dcumenu.rarekeydropchance) && includeRareKeys
                grandtotalweight = headrestraintkeychance + handrestraintkeychance + bodyrestraintkeychance + legrestraintkeychance
                chance = Utility.RandomFloat(0.0, grandtotalweight)
                if chance < headrestraintkeychance
                        addto.AddItem(dcumenu.dcur_headrestraintskey, 1)
                        return "Head Restraints Key"
                else
                        chance = chance - headrestraintkeychance
                endIf
                if chance < handrestraintkeychance
                        addto.AddItem(dcumenu.dcur_handrestraintskey, 1)
                        return "Hand Restraints Key"
                else
                        chance = chance - handrestraintkeychance
                endIf
                if chance < bodyrestraintkeychance
                        addto.AddItem(dcumenu.dcur_bodyrestraintskey, 1)
                        return "Body Restraints Key"
                else
                        chance = chance - bodyrestraintkeychance
                endIf
                if chance < legrestraintkeychance
                        addto.AddItem(dcumenu.dcur_legrestraintskey, 1)
                        return "Leg Restraints Key"
                else
                        chance = chance - legrestraintkeychance
                endIf
        elseif includeCommonKeys
                grandtotalweight = chastitykeyweight + restraintskeyweight + piercingkeyweight
                chance = Utility.RandomFloat(0.0, grandtotalweight)
                if chance < chastitykeyweight
                        addto.AddItem(libs.chastityKey, 1)
                        return "Chastity Key"
                else
                        chance = chance - chastitykeyweight
                endIf
                if chance < restraintskeyweight
                        addto.AddItem(libs.restraintsKey, 1)
                        return "Restraints Key"
                else
                        chance = chance - restraintskeyweight
                endIf
                if chance < piercingkeyweight
                        addto.AddItem(libs.piercingKey, 1)
                        return "Piercing Tool"
                else
                        chance = chance - piercingkeyweight
                endIf
        endif
EndFunction 

 

EDIT: New version, without multiple calls to expensive GetWornDevice() call.

 

 

It's a different take on how to drop useful keys and certainly works, but it will strongly tend to drop useless keys when you're wearing quest items requiring neither DCL's rare nor standard DDI framework keys (that's why my own implementation checks for that, expensive or not.)

 

Posted

 

 

 

Yeah, only drop usefull keys still keeps dropping for example leg restraint or body restraint keys even though all items I have only use regular ol' restraint keys.

 

Also would like to suggest changing scoundrel armor to maybe stealth or lockpicking increase?

 

Pickpocket feels kind of meh, stealth and lockpicking are far more usefull, I feel like woodsman outfit is just plain better because 40% extra bow damage is really substantial.

 

Drop useful keys drops keys for the "most annoying" restraint first. That's why you will always get restraints key when wearing e.g. a gag and a chastity belt. The gag is far more annoying. The rare key and common key chance is calculated independently, though. So it could be that you're getting head restraints keys for your gag instead of the restraints key it would actually need.

 

I can add a stealth and/or lockpicking bonus to the scoundrel armor, sure!

 

 

Yeah, Drop Useful Keys still has the same problem as the previous version. I came up with a fix then (for common keys), and posted it here, but I guess it got missed. I have adapted that fix to 5.3 and here it is.

 

Rather than dropping keys in a particular order, based on worn items, it instead boosts the weight of keys needed for worn items, and then does a normal weight based random selection. It doesn't guarantee that you'll get a key you need, but it shifts the probability that way.

 

 

 

Function FindUsefulKey(ObjectReference addto = none)
        FindUsefulKeys(addto, true, false)
endfunction

Function FindUsefulRareKey(ObjectReference addto = none)
        FindUsefulKeys(addto, false, true)
endfunction

string Function FindUsefulKeys(ObjectReference addto = none, bool includeCommonKeys = true, bool includeRareKeys = false)
        float chastitykeyweight = dcumenu.chastitykeyweight
        float restraintskeyweight = dcumenu.restraintskeyweight
        float piercingkeyweight = dcumenu.piercingkeyweight
        float headrestraintkeychance = dcumenu.headrestraintkeychance
        float handrestraintkeychance = dcumenu.handrestraintkeychance
        float bodyrestraintkeychance = dcumenu.bodyrestraintkeychance
        float legrestraintkeychance = dcumenu.legrestraintkeychance

        If !addto
                addto = libs.playerRef
        Endif
        Actor Player = libs.playerRef
        ; Weight keys by worn keywords
        If Player.WornHasKeyword(libs.zad_DeviousYoke)
                If includeRareKeys
                        handrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousHood)
                If includeRareKeys
                        headrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousGag)
                If includeRareKeys
                        headrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousBlindfold)
                If includeRareKeys
                        headrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousBoots)
                If includeRareKeys
                        legrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousCollar)
                If includeRareKeys
                        headrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousBelt)
                If includeRareKeys
                        bodyrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        chastitykeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousGloves)
                If includeRareKeys
                        handrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousSuit)
                If includeRareKeys
                        bodyrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousBra)
                If includeRareKeys
                        bodyrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        chastitykeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousHarness)
                If includeRareKeys
                        bodyrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        chastitykeyweight += 100
                Endif
        Endif

        Float chance = 0.0
        Float grandtotalweight = 0.0
        float dropchance = dcumenu.rarekeydropchance + dcumenu.keydropchance
        If (!includeCommonKeys || Utility.RandomFloat(0.0,dropchance) < dcumenu.rarekeydropchance) && includeRareKeys
                grandtotalweight = headrestraintkeychance + handrestraintkeychance + bodyrestraintkeychance + legrestraintkeychance
                chance = Utility.RandomFloat(0.0, grandtotalweight)
                if chance < headrestraintkeychance
                        addto.AddItem(dcumenu.dcur_headrestraintskey, 1)
                        return "Head Restraints Key"
                else
                        chance = chance - headrestraintkeychance
                endIf
                if chance < handrestraintkeychance
                        addto.AddItem(dcumenu.dcur_handrestraintskey, 1)
                        return "Hand Restraints Key"
                else
                        chance = chance - handrestraintkeychance
                endIf
                if chance < bodyrestraintkeychance
                        addto.AddItem(dcumenu.dcur_bodyrestraintskey, 1)
                        return "Body Restraints Key"
                else
                        chance = chance - bodyrestraintkeychance
                endIf
                if chance < legrestraintkeychance
                        addto.AddItem(dcumenu.dcur_legrestraintskey, 1)
                        return "Leg Restraints Key"
                else
                        chance = chance - legrestraintkeychance
                endIf
        elseif includeCommonKeys
                grandtotalweight = chastitykeyweight + restraintskeyweight + piercingkeyweight
                chance = Utility.RandomFloat(0.0, grandtotalweight)
                if chance < chastitykeyweight
                        addto.AddItem(libs.chastityKey, 1)
                        return "Chastity Key"
                else
                        chance = chance - chastitykeyweight
                endIf
                if chance < restraintskeyweight
                        addto.AddItem(libs.restraintsKey, 1)
                        return "Restraints Key"
                else
                        chance = chance - restraintskeyweight
                endIf
                if chance < piercingkeyweight
                        addto.AddItem(libs.piercingKey, 1)
                        return "Piercing Tool"
                else
                        chance = chance - piercingkeyweight
                endIf
        endif
EndFunction 

 

EDIT: New version, without multiple calls to expensive GetWornDevice() call.

 

 

It's a different take on how to drop useful keys and certainly works, but it will strongly tend to drop useless keys when you're wearing quest items requiring neither DCL's rare nor standard DDI framework keys (that's why my own implementation checks for that, expensive or not.)

 

 

 

True, but on the other hand, it won't lock you into one particular type of key when what you really need is one of the others.

 

For instance, there was a Damsel In Distress example mentioned earlier, where a Hand Restraint key was needed, but being fully bound, only Head Restraint Keys were dropping. Fortunately, the player in question hadn't locked the MCM when bound and was able to turn off useful keys and subsequently find the key he actually needed.

 

Oh, and my original version did include the GetDeviceKey(GetWornDevice()) check, but when I tested it in the DiD quest, it was painfully slow and resulted in massive Papyrus lag. Hence the updated version without it which runs much faster, even though it does add some false positives.

Posted

Actually, on the topic of expensive GetWornDevice() calls, I noticed that there was a long lag when rapists would remove a chastity belt. Looking into it I found three identical calls to GetWornDevice().

 

I rewrote that section of IntroScene() thusly, using only one GetWornDevice() call. It's mostly functionally identical, but more efficient, and there is a tweak that reduces the chance for a rapist to have a non-standard chastity belt key (5% in the code below, but could be anything less than the standard 50%). 

 

This improved the speed of that scenario greatly.

 

 

 

Function IntroScene()
        libs.notify("You are getting pushed down to the ground!!!")
        Game.DisablePlayerControls()
        libs.SexlabMoan(libs.playerref)
        Speaker = dcur_Rapists.GetAt(0) As Actor
        libs.SexlabMoan(libs.playerref)
        beltwasremoved = None
        if Libs.PlayerRef.WornHasKeyword(Libs.zad_DeviousBelt) && dcumenu.stripbeltsonrape && !(dcur_Rapists.GetAt(0) As Actor).HasKeyWord(dcumenu.ActorTypeCreature)
                Armor belt = libs.GetWornDevice(libs.playerref, libs.zad_DeviousBelt)
                Key k = libs.GetDeviceKey(belt)
                int chance = 50
                if k != libs.ChastityKey
                        ; Belt requires a non-standard key, so rapist has reduced chance to posess it if player doesn't have one.
                        chance = 5
                endif
                if !belt.haskeyword(libs.zad_BlockGeneric) && k != None && (libs.playerref.GetItemCount(k) > 0 || Utility.RandomInt(1,100) < chance)
                        beltwasremoved = belt
                        if libs.ManipulateGenericDeviceByKeyword(libs.playerref, Libs.zad_DeviousBelt, false, false, false)
                                if Libs.PlayerRef.GetItemCount(k) > 0
                                        dcumenu.dcur_assaulter_dialogue.SetValueInt(7)
                                        speaker.say(dcumenu.dcur_assaulters_dialogue)
                                else
                                        dcumenu.dcur_assaulter_dialogue.SetValueInt(8)
                                        speaker.say(dcumenu.dcur_assaulters_dialogue)
                                endif
                                Utility.Wait(5)
                        else
                                beltwasremoved = None
                        endif
                endif
        endif

; Remainder of function unchanged... 

Posted

Hi, just wanted to report a little oddity with the cum inflation: for me, it seems to jump from nothing to huge without any gradual progression.  Not sure if it makes a difference, but all of the...ummm...intake(?) was oral (I got belted by my master).

 

I was searching through topic to see if anyone else reported, yes same for me, from 0 to very big, probably the max size even (5 i think?)

 

It was "normal" sex for me, not oral. It was like two or three sex acts, message about "load of cum" appeared but i saw no change, after fourth act or so, it was suddenly giant belly.

Posted

http://www.loverslab.com/topic/33986-deviously-cursed-loot-v53-2016-02-16/page-423?do=findComment&comment=1476410

 

http://www.loverslab.com/topic/33986-deviously-cursed-loot-v53-2016-02-16/page-423?do=findComment&comment=1477104

 

Hello Kimy

 

Just in case those got lost upstream in the thread, have you any help/suggestions for us folk with the sex attacks + subsequent mass follower teleport problems?  Apart from "It's Friday night, so please go away!"  LOL

Posted

Actually, on the topic of expensive GetWornDevice() calls, I noticed that there was a long lag when rapists would remove a chastity belt. Looking into it I found three identical calls to GetWornDevice().

 

I rewrote that section of IntroScene() thusly, using only one GetWornDevice() call. It's mostly functionally identical, but more efficient, and there is a tweak that reduces the chance for a rapist to have a non-standard chastity belt key (5% in the code below, but could be anything less than the standard 50%). 

 

This improved the speed of that scenario greatly.

 

 

 

Function IntroScene()
        libs.notify("You are getting pushed down to the ground!!!")
        Game.DisablePlayerControls()
        libs.SexlabMoan(libs.playerref)
        Speaker = dcur_Rapists.GetAt(0) As Actor
        libs.SexlabMoan(libs.playerref)
        beltwasremoved = None
        if Libs.PlayerRef.WornHasKeyword(Libs.zad_DeviousBelt) && dcumenu.stripbeltsonrape && !(dcur_Rapists.GetAt(0) As Actor).HasKeyWord(dcumenu.ActorTypeCreature)
                Armor belt = libs.GetWornDevice(libs.playerref, libs.zad_DeviousBelt)
                Key k = libs.GetDeviceKey(belt)
                int chance = 50
                if k != libs.ChastityKey
                        ; Belt requires a non-standard key, so rapist has reduced chance to posess it if player doesn't have one.
                        chance = 5
                endif
                if !belt.haskeyword(libs.zad_BlockGeneric) && k != None && (libs.playerref.GetItemCount(k) > 0 || Utility.RandomInt(1,100) < chance)
                        beltwasremoved = belt
                        if libs.ManipulateGenericDeviceByKeyword(libs.playerref, Libs.zad_DeviousBelt, false, false, false)
                                if Libs.PlayerRef.GetItemCount(k) > 0
                                        dcumenu.dcur_assaulter_dialogue.SetValueInt(7)
                                        speaker.say(dcumenu.dcur_assaulters_dialogue)
                                else
                                        dcumenu.dcur_assaulter_dialogue.SetValueInt(8)
                                        speaker.say(dcumenu.dcur_assaulters_dialogue)
                                endif
                                Utility.Wait(5)
                        else
                                beltwasremoved = None
                        endif
                endif
        endif

; Remainder of function unchanged... 

 

Looks good. Will borrow that code! Thanks :)

 

 

 

 

 

Yeah, only drop usefull keys still keeps dropping for example leg restraint or body restraint keys even though all items I have only use regular ol' restraint keys.

 

Also would like to suggest changing scoundrel armor to maybe stealth or lockpicking increase?

 

Pickpocket feels kind of meh, stealth and lockpicking are far more usefull, I feel like woodsman outfit is just plain better because 40% extra bow damage is really substantial.

 

Drop useful keys drops keys for the "most annoying" restraint first. That's why you will always get restraints key when wearing e.g. a gag and a chastity belt. The gag is far more annoying. The rare key and common key chance is calculated independently, though. So it could be that you're getting head restraints keys for your gag instead of the restraints key it would actually need.

 

I can add a stealth and/or lockpicking bonus to the scoundrel armor, sure!

 

 

Yeah, Drop Useful Keys still has the same problem as the previous version. I came up with a fix then (for common keys), and posted it here, but I guess it got missed. I have adapted that fix to 5.3 and here it is.

 

Rather than dropping keys in a particular order, based on worn items, it instead boosts the weight of keys needed for worn items, and then does a normal weight based random selection. It doesn't guarantee that you'll get a key you need, but it shifts the probability that way.

 

 

 

Function FindUsefulKey(ObjectReference addto = none)
        FindUsefulKeys(addto, true, false)
endfunction

Function FindUsefulRareKey(ObjectReference addto = none)
        FindUsefulKeys(addto, false, true)
endfunction

string Function FindUsefulKeys(ObjectReference addto = none, bool includeCommonKeys = true, bool includeRareKeys = false)
        float chastitykeyweight = dcumenu.chastitykeyweight
        float restraintskeyweight = dcumenu.restraintskeyweight
        float piercingkeyweight = dcumenu.piercingkeyweight
        float headrestraintkeychance = dcumenu.headrestraintkeychance
        float handrestraintkeychance = dcumenu.handrestraintkeychance
        float bodyrestraintkeychance = dcumenu.bodyrestraintkeychance
        float legrestraintkeychance = dcumenu.legrestraintkeychance

        If !addto
                addto = libs.playerRef
        Endif
        Actor Player = libs.playerRef
        ; Weight keys by worn keywords
        If Player.WornHasKeyword(libs.zad_DeviousYoke)
                If includeRareKeys
                        handrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousHood)
                If includeRareKeys
                        headrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousGag)
                If includeRareKeys
                        headrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousBlindfold)
                If includeRareKeys
                        headrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousBoots)
                If includeRareKeys
                        legrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousCollar)
                If includeRareKeys
                        headrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousBelt)
                If includeRareKeys
                        bodyrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        chastitykeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousGloves)
                If includeRareKeys
                        handrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousSuit)
                If includeRareKeys
                        bodyrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        restraintskeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousBra)
                If includeRareKeys
                        bodyrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        chastitykeyweight += 100
                Endif
        Endif
        If Player.WornHasKeyword(libs.zad_DeviousHarness)
                If includeRareKeys
                        bodyrestraintkeychance += 100
                Endif
                if includeCommonKeys
                        chastitykeyweight += 100
                Endif
        Endif

        Float chance = 0.0
        Float grandtotalweight = 0.0
        float dropchance = dcumenu.rarekeydropchance + dcumenu.keydropchance
        If (!includeCommonKeys || Utility.RandomFloat(0.0,dropchance) < dcumenu.rarekeydropchance) && includeRareKeys
                grandtotalweight = headrestraintkeychance + handrestraintkeychance + bodyrestraintkeychance + legrestraintkeychance
                chance = Utility.RandomFloat(0.0, grandtotalweight)
                if chance < headrestraintkeychance
                        addto.AddItem(dcumenu.dcur_headrestraintskey, 1)
                        return "Head Restraints Key"
                else
                        chance = chance - headrestraintkeychance
                endIf
                if chance < handrestraintkeychance
                        addto.AddItem(dcumenu.dcur_handrestraintskey, 1)
                        return "Hand Restraints Key"
                else
                        chance = chance - handrestraintkeychance
                endIf
                if chance < bodyrestraintkeychance
                        addto.AddItem(dcumenu.dcur_bodyrestraintskey, 1)
                        return "Body Restraints Key"
                else
                        chance = chance - bodyrestraintkeychance
                endIf
                if chance < legrestraintkeychance
                        addto.AddItem(dcumenu.dcur_legrestraintskey, 1)
                        return "Leg Restraints Key"
                else
                        chance = chance - legrestraintkeychance
                endIf
        elseif includeCommonKeys
                grandtotalweight = chastitykeyweight + restraintskeyweight + piercingkeyweight
                chance = Utility.RandomFloat(0.0, grandtotalweight)
                if chance < chastitykeyweight
                        addto.AddItem(libs.chastityKey, 1)
                        return "Chastity Key"
                else
                        chance = chance - chastitykeyweight
                endIf
                if chance < restraintskeyweight
                        addto.AddItem(libs.restraintsKey, 1)
                        return "Restraints Key"
                else
                        chance = chance - restraintskeyweight
                endIf
                if chance < piercingkeyweight
                        addto.AddItem(libs.piercingKey, 1)
                        return "Piercing Tool"
                else
                        chance = chance - piercingkeyweight
                endIf
        endif
EndFunction 

 

EDIT: New version, without multiple calls to expensive GetWornDevice() call.

 

 

It's a different take on how to drop useful keys and certainly works, but it will strongly tend to drop useless keys when you're wearing quest items requiring neither DCL's rare nor standard DDI framework keys (that's why my own implementation checks for that, expensive or not.)

 

 

 

True, but on the other hand, it won't lock you into one particular type of key when what you really need is one of the others.

 

For instance, there was a Damsel In Distress example mentioned earlier, where a Hand Restraint key was needed, but being fully bound, only Head Restraint Keys were dropping. Fortunately, the player in question hadn't locked the MCM when bound and was able to turn off useful keys and subsequently find the key he actually needed.

 

Oh, and my original version did include the GetDeviceKey(GetWornDevice()) check, but when I tested it in the DiD quest, it was painfully slow and resulted in massive Papyrus lag. Hence the updated version without it which runs much faster, even though it does add some false positives.

 

 

Know what? Looking at your code, I think I have an idea how I can rewrite it in a way to use your approach and eliminate GetWornDevice() calls entirely while still making sure that no useless keys are dropped! Best of all worlds! :D

Posted

http://www.loverslab.com/topic/33986-deviously-cursed-loot-v53-2016-02-16/page-423?do=findComment&comment=1476410

 

http://www.loverslab.com/topic/33986-deviously-cursed-loot-v53-2016-02-16/page-423?do=findComment&comment=1477104

 

Hello Kimy

 

Just in case those got lost upstream in the thread, have you any help/suggestions for us folk with the sex attacks + subsequent mass follower teleport problems?  Apart from "It's Friday night, so please go away!"  LOL

 

The code is meant to teleport to you all followers listed in the MCM Follower tab. If there are followers listed there that currently aren't following you (bad!), try re-scanning the followers with the option in the Debug MCM tab.

Posted

Looks good. Will borrow that code! Thanks :)

 

...

 

Know what? Looking at your code, I think I have an idea how I can rewrite it in a way to use your approach and eliminate GetWornDevice() calls entirely while still making sure that no useless keys are dropped! Best of all worlds! :D

 

 

That's great, thanks (x2)!

Posted

Do i have to start and complete Leon's quest in order for him and his sister to be eligible as masters? When i choose the dialogue option to be enslaved the message "You need to be obedient from now on" pops up, but nothing happens after that, and the enslavement dialogue option is still available.

Posted

Do i have to start and complete Leon's quest in order for him and his sister to be eligible as masters? When i choose the dialogue option to be enslaved the message "You need to be obedient from now on" pops up, but nothing happens after that, and the enslavement dialogue option is still available.

 

Choosing enslavement right away is supposed to skip the quest and enslave you right away.

But we haven't got much info, please post a papyrus log.

Posted

 

hey I just had a thought. would you be interested in putting an a chance that when your defeated adding another possible outcome of being sent to leon or leah as there slave? maybe sold to them or whatever so you have to remain their slave until you pay off what they payed in some task or another. or escaping somehow. just wandering, as it is your mod is my favorite in loverslab ty for the work you put in.

 

That's already in, via SimpleSlavery. If you have this mod installed, you can get sent to a slave auction when defeated, which again can start Leon/Leah slavery/

 

 

oh geez sorry ill look that mod up. lol ty ty. I just looked at it. im wondering it says you need a few combat surrender mods to get sent to the auction block but it doesn't show cursed loots surrender as one of those. it shows it as a place to be a slave after the auction block though. so my question is if I lose in combat with cursed loots surrender does it work or do I need one of the other mods like death alternative?

 

Posted

May have run into a serious issue. With the new gag dialogue, Slave Gags seem to make it impossible to talk to anyone regardless of whether or not the new dialogue is enabled in the MCM. Combining this with having the Dollmaker as your keyholder makes for a rather problematic situation..

Posted

May have run into a serious issue. With the new gag dialogue, Slave Gags seem to make it impossible to talk to anyone regardless of whether or not the new dialogue is enabled in the MCM. Combining this with having the Dollmaker as your keyholder makes for a rather problematic situation..

 

Known issue and will be fixed! :)

Posted

First of all: Great mod Kimy, thank you for your fantastic work.

 

I have a problem with Sasha: I can't tie up Sasha. Over the dialogue i get only the option to Remove her chastity belt, but i get no option to put something on her.

 

I use the german version, maybe it has  something to do with the translation or i do soemthing wrong.

 

Same for me, also using german. There is no dialogue option under "Sasha..." where I can put the special collar on her to make her a slave instead of a companion (also the special collar is not in my inventory after opening the toybox, only the regular one).

 

And on another note: When I initate sex with her (using her dialogue), she always assumes the male position with a strap-on equiped... even if my toon is male. Especially hilarious when I use the aggressive option in case she is not in mood for consensual sex. :D

Don't know if this is an issue on my side with a fucked up Sexlab/ZAZ, or your mod calling the Sexlab API wrong (and overall a rather minor issue for me anyway since I usually skip the actual sexscenes, and the "technical" stuff like arousal and pregnancy from other mods seems to be processed correctly... after endless hours looking at my toons banging and getting banged, you just go for the stories :D )

 

I used two LAL level 1 chars, male and female respectivly, with cheated money for testing Sasha out.

 

Best regards

Kalderon

Posted

Cursed loot doesnt seem to give a fuck about my mcm setings when it comes to choosing devices. I left everything other then chastity belt, estrus and 1 type of colar off. Ended in some kind of full leather suit and hood. Also with solicitation optionn the clients were giving me chastity bras even tho i had them unticked.

 

Posted

First time uploading a Log, i hope i did it right, thanks for taking the time to help me.

 

Seems like that savegame is having some issues.

Can you try it with a new game?

Posted

 

http://www.loverslab.com/topic/33986-deviously-cursed-loot-v53-2016-02-16/page-423?do=findComment&comment=1476410

 

http://www.loverslab.com/topic/33986-deviously-cursed-loot-v53-2016-02-16/page-423?do=findComment&comment=1477104

 

Hello Kimy

 

Just in case those got lost upstream in the thread, have you any help/suggestions for us folk with the sex attacks + subsequent mass follower teleport problems?  Apart from "It's Friday night, so please go away!"  LOL

 

The code is meant to teleport to you all followers listed in the MCM Follower tab. If there are followers listed there that currently aren't following you (bad!), try re-scanning the followers with the option in the Debug MCM tab.

 

 

Thanks for that.  I'll have a try later when I have access to my gaming machine. 

 

I do note a difference between DCL and Defeat, in that Goubo's Follower Registry positively differentiates between followers which are Active and those which are Not Active.  Not sure how that's done, some sort of 'distance cloak' or the like maybe(?), but it does mean that current followers are differentiated between those that are currently 'with' you, and those that are not, eg if they have been told to 'wait' elsewhere, and the latter then don't seem to get caught up in any mod generated scene or its aftermath

 

Does your mechanic make a similar differentiation, or just register all 'followers'?  If not, it may just be registering followers wherever they are, and then porting them all in. 

 

As I said, I'll try again when I can, but I hope that this additional info may be of some help

Posted

This is just a low-priority suggestion, but might it be possible to have a different response to being arrested for sex if the PC was being raped instead? "But I was just having fun!" doesn't really make sense for a victim of misogyny. :angel:

 

Thanks, and keep up the great work!

Posted

Just FYI,

 

Probably should add a check for Leon/Leah solicitation critical fail.  If the consequence is "arrest/report to guards" and you have Prison Overhaul active, then you get hooded and tied - stand up and get gagged and cuffed - and Leon/Leah is supposed to lead you to jail ( but they won't leave the Bannered Mare - and you're stuck). 

I guess another possibility is to make them invalid targets for solicitation, but I think the best idea would be to allow the critical fail and exclude the arrest option for them.

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