Rynnes Master Posted February 25, 2016 Posted February 25, 2016 You should find a quest marker and a description; at least that is what displays on mine.
Slagblah Posted February 25, 2016 Posted February 25, 2016 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.
Maddac Posted February 25, 2016 Posted February 25, 2016 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?
Raistlin_ Posted February 25, 2016 Posted February 25, 2016 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.
Kimy Posted February 25, 2016 Author Posted February 25, 2016 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/
Kimy Posted February 25, 2016 Author Posted February 25, 2016 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.)
Slagblah Posted February 25, 2016 Posted February 25, 2016 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.
Slagblah Posted February 25, 2016 Posted February 25, 2016 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...
handsandarrows Posted February 25, 2016 Posted February 25, 2016 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.
DonQuiWho Posted February 25, 2016 Posted February 25, 2016 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
Kimy Posted February 25, 2016 Author Posted February 25, 2016 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!
Kimy Posted February 25, 2016 Author Posted February 25, 2016 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.
Slagblah Posted February 25, 2016 Posted February 25, 2016 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! That's great, thanks (x2)!
trellouk Posted February 25, 2016 Posted February 25, 2016 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.
Laura Posted February 25, 2016 Posted February 25, 2016 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.
trellouk Posted February 26, 2016 Posted February 26, 2016 First time uploading a Log, i hope i did it right, thanks for taking the time to help me. Papyrus.0.log
Raistlin_ Posted February 26, 2016 Posted February 26, 2016 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?
Tockity Posted February 26, 2016 Posted February 26, 2016 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..
Kimy Posted February 26, 2016 Author Posted February 26, 2016 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!
Kalderon Posted February 26, 2016 Posted February 26, 2016 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. 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 ) I used two LAL level 1 chars, male and female respectivly, with cheated money for testing Sasha out. Best regards Kalderon
AnubiSs2167 Posted February 26, 2016 Posted February 26, 2016 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.
Laura Posted February 26, 2016 Posted February 26, 2016 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?
DonQuiWho Posted February 26, 2016 Posted February 26, 2016 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
minibw Posted February 26, 2016 Posted February 26, 2016 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. Thanks, and keep up the great work!
rjn Posted February 26, 2016 Posted February 26, 2016 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.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now