Jump to content

Recommended Posts

18 hours ago, Zaflis said:

Have you installed CBBE or UUNP armors/restraints from the DD packages? They aren't zip files that can be just directly extracted, but there's a special FOMOD folder structure. But that's the case with loads of other mods too, like XPMSE, FNIS, Bodyslide and RaceMenu themselves... If you have Mod Organizer or Vortex you can install mods instead of extracting them.

I just have Vortex and used that to install everything. DD assets was a zip file and everything else was a 7z file.

Link to comment
4 hours ago, M1g17 said:

I just have Vortex and used that to install everything. DD assets was a zip file and everything else was a 7z file.

Did you make sure that all filters are off in Bodyslide? And which main body and preset did you choose?

 

If the issue continues, we will need loads more information or we can only guess things from you little by little. I don't actually think at this point that you are missing meshes or textures. In those cases you would propably see something far more distracting like triangle shapes or pink skins.

Link to comment
20 hours ago, Zaflis said:

Did you make sure that all filters are off in Bodyslide? And which main body and preset did you choose?

 

If the issue continues, we will need loads more information or we can only guess things from you little by little. I don't actually think at this point that you are missing meshes or textures. In those cases you would propably see something far more distracting like triangle shapes or pink skins.

Yes, I turned off all of the filters, but I also noticed that your outfit/body dropdown menu had a lot more options than mine does. The only options I have in the dropdown menu is the various body styles. Yours had a bunch of clothes under the UUNP style as well. The main body I picked was CBBE Body HDT, the first preset I picked was CBBE Slim, but I also tried with CT77 Body. 

 

Since you will need loads more information, could you tell me exactly what you need? I'll get all the information you need.

Link to comment

I'm having a problem with gag expressions since updating from 4.2 to 4.3a. 

 

When first equipping a gag, my character's mouth with open correctly, but whenever a sexlab scene of any kind is triggered, her mouth closes. This happens with sexlab expressions and lip sync turned on or off, and affects all DDi, DDa, DDx and Cursed Loot gags. ZBF gags, however, work properly. 

 

I'm not too mod-savvy, but I hope someone can help me out.

Link to comment
4 hours ago, Rip Van Winkle said:

I'm having a problem with gag expressions since updating from 4.2 to 4.3a. 

Gags still worked well in 4.3 but then 4.3a changed script. People figured earlier that we can just use the old (4.3) script still, so that file is still available here:

https://www.loverslab.com/topic/21484-devious-devices-integration-43a-2019-09-10/page/458/?tab=comments#comment-2760447

Link to comment
On 10/20/2019 at 3:41 PM, darktej said:

Yes you can add timers to all devious devices.  You can do this via the Creation Kit. If you have some knowledge in how to operate the Creation Kit you can do it yourself (I myself have very basic knowledge of the Creation Kit). I will give you a small example. I am assuming that you have the Creation Kit in your system.

 

1. open up the Creation Kit

2. Select either Devious Device Integration or Devious Device Expansion (my suggestion would be open up Expansion since it loads Integration as well along with it)

3. It will take some time to load...once it loads...you will get a new window within the CK called "Object Window"

4. Within the Object Window...search for "Armor" sub menu on the left hand side

5. there you will see a variety of Armor..but for this I will give an example

   a. I am going to edit the "Black Leather Cuffs"

   b. I search for it easily by typing "cuff" on the filter text box. The filter text box is located in the top left of the object window. 

   c. you will see a variety of Armors with the work "cuff" in them, for this purpose I need the "Black Leather Cuffs", especially the arm cuffs..so I select it by double clicking on                      "zad_cuffsLeatherArmsInventory"

   d. Once I double click it ...I get a new window ..towards the bottom right  of the window you will see "Scripts", there you will find a script by the name                                            "zadRestraintArmsScript",double click on it or click on the "Properties" button next to it or right click on the script and click "Edit Properties"

   e. Once you do that. you will get a new Window..it is the Properties for the particular device. Here you will see various properties which you can edit.  I haven't played around with           some of the new properties ...but these properties be what you want to edit "Lockshieldtimermax, Lockshieldtimermin, Locktimermax, Locktimermin, Timedunlock." 

 6. make the changes which you want and save it. 

 

Hope this helps. 

 

Thanks for this. It works for replacing the locking mechanism. I'll keep looking for a way to add to the available options in-game.

Link to comment
On 10/20/2019 at 10:41 PM, darktej said:
Spoiler

 

Yes you can add timers to all devious devices.  You can do this via the Creation Kit. If you have some knowledge in how to operate the Creation Kit you can do it yourself (I myself have very basic knowledge of the Creation Kit). I will give you a small example. I am assuming that you have the Creation Kit in your system.

 

1. open up the Creation Kit

2. Select either Devious Device Integration or Devious Device Expansion (my suggestion would be open up Expansion since it loads Integration as well along with it)

3. It will take some time to load...once it loads...you will get a new window within the CK called "Object Window"

4. Within the Object Window...search for "Armor" sub menu on the left hand side

5. there you will see a variety of Armor..but for this I will give an example

   a. I am going to edit the "Black Leather Cuffs"

   b. I search for it easily by typing "cuff" on the filter text box. The filter text box is located in the top left of the object window. 

   c. you will see a variety of Armors with the work "cuff" in them, for this purpose I need the "Black Leather Cuffs", especially the arm cuffs..so I select it by double clicking on                      "zad_cuffsLeatherArmsInventory"

   d. Once I double click it ...I get a new window ..towards the bottom right  of the window you will see "Scripts", there you will find a script by the name                                            "zadRestraintArmsScript",double click on it or click on the "Properties" button next to it or right click on the script and click "Edit Properties"

   e. Once you do that. you will get a new Window..it is the Properties for the particular device. Here you will see various properties which you can edit.  I haven't played around with           some of the new properties ...but these properties be what you want to edit "Lockshieldtimermax, Lockshieldtimermin, Locktimermax, Locktimermin, Timedunlock." 

 6. make the changes which you want and save it. 

 

Hope this helps. 

 

Helps indeed. But there were lots of bumps on the road being able to do that, although i'm glad it finally works. Basically CK threw errors when doubleclicking the script so i had to make sure all scripts are available. And this all happened for LE, using MO2. CK also started from it.

- In the Skyrim folder you need to edit SkyrimEditor.ini . You need to be able to select multiple masters, and add masterfiles in the list too as explained there: https://www.reddit.com/r/skyrimmods/comments/7hbhhy/ck_issue_multiple_master_files_selected_for_load/

- scripts.rar in the Skyrim folder itself, extract scripts\ to data.

- In Skyrim folder keep checking the EditorWarnings.txt for what you might be missing. Google to find out what script belongs to what mod if you don't know.

- SkyUI basically comes with scripts inside .bsa, that won't do. Extract pex files into scripts\ folder in the SkyUI mod, MO2 can do the extraction and you don't need another archive tool.

- SLA_redux you need the "loose" version that has scripts folder, otherwise it's bsa too.

 

Edit: You need SkyUI pex files, not the script sources.

Link to comment

I've been trying to modify restraints into timed but what happens with setup like this is that i can directly just "Unlock" it without having any keys:

 

Spoiler

CK_DD.png.3baf3bd142cbcf1d2077d317b2256d6f.png

 

So what am i missing, and what's the difference between LockShield and LockTimer? Cursed Loot's existing timed restraints use LockShield which i don't understand. I feel like lockshield should be used to block key use for that time, and locktimer would be used together with TimedUnlock so that it snaps open automatic after that time (enables the "Remove It" option).

 

I'd prefer keeping the deviceKey as "restraints key" for majority of them, just so that key can only be used after time period. But extreme hobbles would be interesting i guess for a no key with 1-4 hours timer. But since dcur timed restraints use its own master key too, i thought to try making one myself too. The key has the right zad restraint keyword.

 

Other kind of changes work though, like that DisableLockManipulation that i just forgot to set for that hobble. Upping NumberOfKeysNeeded is nice for certain restraints and works too.

 

Edit: I found explanations to the parameters from zadEquipScript:

LockShieldTimerMin = 0.0 Auto            ; If this number is greater than zero, the player has to wait for a minimum of this many hours before she can unlock the device with a key.
LockShieldTimerMax = 0.0 Auto            ; If this number is greater than zero, the player has to wait for a maximum of this many hours before she can unlock the device with a key.
TimedUnlock = False Auto                     ; If set to true, the device can be removed without the key when the lock timer is expired. Uses parameters below. When the timed lock is engaged, the device can STILL be unlocked with a key. This way, restraints can use either or both methods simultaneously.
LockTimerMin = 0.0 Auto                    ; Minimum hours before the lock timer expires
LockTimerMax = 0.0 Auto                    ; Maximum hours before the lock timer expires

 

But that leaves a feeling that LockTimer is redundant, and TimedUnlock should be kept false if i want it to use key too? There is another oddity at dcur_veilBlindfold, where "multikeys = 3" and "NumberOfKeysNeeded" is undefined. Multikeys could be a relic from time before the other property, or just made as a special case for Cursed Loot.

 

Anyway please help me get timed restraints working :D

 

Edit2: Now that i tried the Cursed Loot's template timed restraints too, they aren't working either (you can unlock them without keys just a second after you lock them on). I guess the system is still a work in progress, and Cursed Loot has some unique scripts for timed yokes and belts. I could tell they're not using DD script for it.

Link to comment

Okay so after hours and hours of searching I'm here asking you guys.

 

I just updated DDI and DDE to 4.3a. Now I can't get it to work. The mcm is gone and whenever I equip something I don't get the ``prompt´ messages.

Same when I unequip said item. No prompt and the item just comes straight off. Well in the inventory that is... It's still visually equipped on my character.. Please help!

 

I also updated DDE equip to 433 and same issue there, no mcm.

Link to comment
13 minutes ago, mrkill3r said:

Okay so after hours and hours of searching I'm here asking you guys.

 

I just updated DDI and DDE to 4.3a. Now I can't get it to work. The mcm is gone and whenever I equip something I don't get the ``prompt´ messages.

Same when I unequip said item. No prompt and the item just comes straight off. Well in the inventory that is... It's still visually equipped on my character.. Please help!

 

I also updated DDE equip to 433 and same issue there, no mcm.

Have you tried the "setstage Ski_configmanagerinstance 1" command or "jaxonz mcm kicker" yet? If not then those are worth a shot. If that doesnt help make for sure you have all mods this depends on and that they are updated. If those dont work I am out of my depth.

Link to comment
8 minutes ago, indolu said:

Have you tried the "setstage Ski_configmanagerinstance 1" command or "jaxonz mcm kicker" yet? If not then those are worth a shot. If that doesnt help make for sure you have all mods this depends on and that they are updated. If those dont work I am out of my depth.

Okey so I got the MCMs to work by saving removing loading etc..

 

But still don't get the messages when equipping/removing devices and they are still visually stuck.

 

As far as I know all dependencies are met and updated. I mean it worked before I updated theese specific mods?

Link to comment
13 hours ago, mrkill3r said:

But still don't get the messages when equipping/removing devices and they are still visually stuck.

The likely answer is that your savefile could be the problem, and it would work well in a new game. You can try cleaning your equipped items, that includes the scripted DD items by using console. Each restraint has the script and rendered item to it, it is extremely rare but glitch like you describe can happen, and could result from some mod conflict too. Don't use mods that depend on old DD versions.

Link to comment

More research on the timed restraints, especially "LockShield" mechanic.

 

Lets see script from DDI's zadEquipScript.psc, line 581:

LockShieldTimer = ((Utility.RandomFloat(LockShieldTimerMin, LockShieldTimerMax)) * CalculateCooldownModifier(False))

 

Line 1070:

Spoiler

Float Function CalculateCooldownModifier(Bool operator = true)
    ; We don't modify for quest items
    If deviceInventory.HasKeyword(libs.zad_BlockGeneric) || deviceRendered.HasKeyword(libs.zad_BlockGeneric) || deviceInventory.HasKeyword(libs.zad_QuestItem) || deviceRendered.HasKeyword(libs.zad_QuestItem)
        ; except the modder specifically allowed the system to be used for that item!
        If !AllowDifficultyModifier
            libs.log("Difficulty modifier not applied - custom/quest item!")
            return 1.0
        EndIf
    EndIf
    Float val = 1.0
    Int mcmValue = libs.config.CooldownDifficulty    
    Int mcmLength = libs.config.EsccapeDifficultyList.Length
    Int median = ((mcmLength - 1) / 2) As Int ; This assumes the array to be uneven, otherwise there is no median value.
    Float maxModifier = 0.9 ; set this as desired - it's the maximum possible +/- modifier. It should not be larger than 1 (=100%)
    Float StepLength = maxModifier / median
    Int Steps = mcmValue - median    
    If operator
        val = 1 + (Steps * StepLength)
    Else
        val = 1 - (Steps * StepLength)
    EndIf
    libs.log("Difficulty modifier applied: " + val + " [setting: " + mcmValue + "]")
    return val
EndFunction

 

So what we know is quest items will always get a value 1.0, but what if it's a timed restraint you buy from a shop or give with console... First, it was called with operator = false, and from "Vanilla" to "Born slave" that is 9 difficulty levels. So what we get with difficulty 0 and 8:

 

mcmValue = 0

mcmLength = 9

median = (9-1)/2 As Int = 4

StepLength = 0.9 / 4 = 0.225

Steps = 0 - 4 = -4

val = 1 - (Steps * StepLength) = 1- (-4 * 0.225) = 1.9  -- Multiplier on hardest difficulty.

 

mcmValue = 8

Steps = 8 - 4 = 4

val = 1- (4 * 0.225) = 0.1 -- Multiplier on easiest difficulty.

 

Expected range for val with mcmValue 0..8 is around 0.5 to 1.5 or so. We don't want them to unlock too fast even on easiest difficulty, and not last several weeks on hardest.

 

Edit: Oops, i realize in the DD's MCM menu the first one in the list is actually hardest, so i should have said inverse. 0 = hardest and 8 easiest. But i tried timed restraint with both difficulty ingame (ones given in DCL's esp) and it unlocks instantly both times. I had given all keys to follower but i had the Unlock menu available (by timed release i assume).

 

Edit2: Fixed val error with setting 8 and cleaned meanings. Bottom line is still that the reason timed restraints unlock instantly is somewhere else than in this function.

Link to comment
21 hours ago, Zaflis said:

More research on the timed restraints, especially "LockShield" mechanic.

 

Lets see script from DDI's zadEquipScript.psc, line 581:

LockShieldTimer = ((Utility.RandomFloat(LockShieldTimerMin, LockShieldTimerMax)) * CalculateCooldownModifier(False))

 

Line 1070:

  Reveal hidden contents

Float Function CalculateCooldownModifier(Bool operator = true)
    ; We don't modify for quest items
    If deviceInventory.HasKeyword(libs.zad_BlockGeneric) || deviceRendered.HasKeyword(libs.zad_BlockGeneric) || deviceInventory.HasKeyword(libs.zad_QuestItem) || deviceRendered.HasKeyword(libs.zad_QuestItem)
        ; except the modder specifically allowed the system to be used for that item!
        If !AllowDifficultyModifier
            libs.log("Difficulty modifier not applied - custom/quest item!")
            return 1.0
        EndIf
    EndIf
    Float val = 1.0
    Int mcmValue = libs.config.CooldownDifficulty    
    Int mcmLength = libs.config.EsccapeDifficultyList.Length
    Int median = ((mcmLength - 1) / 2) As Int ; This assumes the array to be uneven, otherwise there is no median value.
    Float maxModifier = 0.9 ; set this as desired - it's the maximum possible +/- modifier. It should not be larger than 1 (=100%)
    Float StepLength = maxModifier / median
    Int Steps = mcmValue - median    
    If operator
        val = 1 + (Steps * StepLength)
    Else
        val = 1 - (Steps * StepLength)
    EndIf
    libs.log("Difficulty modifier applied: " + val + " [setting: " + mcmValue + "]")
    return val
EndFunction

 

So what we know is quest items will always get a value 1.0, but what if it's a timed restraint you buy from a shop or give with console... First, it was called with operator = false, and from "Vanilla" to "Born slave" that is 9 difficulty levels. So what we get with difficulty 0 and 8:

 

mcmValue = 0

mcmLength = 9

median = (9-1)/2 As Int = 4

StepLength = 0.9 / 4 = 0.225

Steps = 0 - 4 = -4

val = 1 - (Steps * StepLength) = 1- (-4 * 0.225) = 1.9  -- Multiplier on easiest difficulty, still doesn't match behavior... I thought 0 or negative. So something else outside the function is not working either.

 

mcmValue = 8

Steps = 8 - 4 = 4

val = 1- (8 * 0.225) = -0.8 -- Multiplier on hardest difficulty. With this it would unlock instantly, easier than the easiest setting.

 

Expected range for val with mcmValue 0..8 is around 0.5 to 1.5 or so. We don't want them to unlock too fast even on easiest difficulty, and not last several weeks on hardest.

 

Edit: Oops, i realize in the DD's MCM menu the first one in the list is actually hardest, so i should have said inverse. 0 = hardest and 8 easiest. But i tried timed restraint with both difficulty ingame (ones given in DCL's esp) and it unlocks instantly both times. I had given all keys to follower but i had the Unlock menu available (by timed release i assume).

I propose a change in timed locks:

Spoiler

Function SetLockShield()
	If (LockShieldTimerMin > 0.0) && (LockShieldTimerMin <= LockShieldTimerMax)
		if LockShieldTimerMin == LockShieldTimerMax
			LockShieldTimer = LockShieldTimerMin
		else
			LockShieldTimer = CalculateTimerModifier(LockShieldTimerMin, LockShieldTimerMax)
		endif
	Else
		LockShieldTimer = 0.0
	EndIf
EndFunction
                                                                              
Function SetLockTimer()
	If (LockTimerMin > 0.0) && (LockTimerMin <= LockTimerMax)
		if LockTimerMin == LockTimerMax
			LockTimer = LockTimerMin
		else
			LockTimer = CalculateTimerModifier(LockTimerMin, LockTimerMax)
		endIf
	Else
		LockTimer = 0.0
	EndIf
EndFunction

Float Function CalculateTimerModifier(float timerMin, float timerMax)
	; We don't modify for quest items
	If deviceInventory.HasKeyword(libs.zad_BlockGeneric) || deviceRendered.HasKeyword(libs.zad_BlockGeneric) || deviceInventory.HasKeyword(libs.zad_QuestItem) || deviceRendered.HasKeyword(libs.zad_QuestItem)
		; except the modder specifically allowed the system to be used for that item!
		If !AllowDifficultyModifier
			libs.log("Difficulty timer modifier not applied - custom/quest item!")
			return Utility.RandomFloat(timerMin,timerMax)
		EndIf
	EndIf
	Float timerRange = timerMax - timerMin
	;use escape difficulty for calculations
	Int mcmValue = libs.config.EscapeDifficulty	
	Int mcmLength = libs.config.EsccapeDifficultyList.Length
	Float StepLength = timerRange / mcmLength
	;let's call it escape chance instead - from zero to max
	float upperTargetBound = timerMax - mcmValue * StepLength
	float lowerTargetBound = timerMax - (mcmValue + 1) * StepLength
	float val = timerMin
	float fateValue = Utility.randomFloat(0.0,1.0)
	if fateValue < 0.2
		; lower range selected
		val = Utility.randomFloat(timerMin,lowerTargetBound)
	elseif fateValue < 0.37
		; upper range selected
		val = Utility.randomFloat(upperTargetBound,timerMax)
	else
		; target range selected
		val = Utility.randomFloat(lowerTargetBound,upperTargetBound)
	endIf
	;sanity checks just because
	if val < timerMin
		val = timerMin
	endIf
	if val > timerMax
		val = timerMax
	endIf
	libs.log("Difficulty timer modifier applied: " + val + " [setting: " + mcmValue + "]")
	return val
EndFunction
                                                            
                                                                              

 

The goals are:

1. when timer bounds are equal, just return one of them and don't bother with randomization - obviously, item creator have procise idea of what time he need.

2. when bounds aren't equal, we need to apply difficulty level. This is done by calculating target range inside provided minimum and maximum lock times. Then, there is 20% probability to get random time lower then target, 17% probability to get random time higher then target, and 53% probability to get lock time from inside the target. Theoretically, it skews probability of getting longer locked intervals on higher difficulty levels, while maintaining randomness.

3. Quest items without difficulty modifier get uniformly random lock time from inside the provided range.

P.S. While I managed to compile zadEquipScript with my modifications, I haven't tested it in game yet, as I don't have ready made timed restraints to test.

Link to comment
42 minutes ago, DeWired said:

I propose a change in timed locks ...

I had also made a typo in val = 1- (8 * 0.225), should have been val = 1- (4 * 0.225). That's what we get trying to run code in our heads ? The results look more reasonable, although 0.1 multiplier with easiest is too easy.

 

As for why timed restraints don't work, i didn't want to look into it much more unless @Kimy asks for help. The little bit i've checked is that zadEquipScript is inherited in the other device scripts. But we would have to do papyrus debugging to know more, and DD development is on pause so...

Link to comment
1 hour ago, Zaflis said:

I had also made a typo in val = 1- (8 * 0.225), should have been val = 1- (4 * 0.225). That's what we get trying to run code in our heads ? The results look more reasonable, although 0.1 multiplier with easiest is too easy.

 

As for why timed restraints don't work, i didn't want to look into it much more unless @Kimy asks for help. The little bit i've checked is that zadEquipScript is inherited in the other device scripts. But we would have to do papyrus debugging to know more, and DD development is on pause so...

About timed restraints not working - look in TES5Edit, maybe your modified versions are overwritten by originals from some other mod. For example, hobble dress from DDx mentioned in your earlier post in my setup is overwritten by two other mods.

Link to comment
1 hour ago, DeWired said:

About timed restraints not working - look in TES5Edit, maybe your modified versions are overwritten by originals from some other mod. For example, hobble dress from DDx mentioned in your earlier post in my setup is overwritten by two other mods.

Nope, ESP mods can't be overridden by other ESP mods, Skyrim limitation. It would have to be converted to ESM first. The timed restraints are from cursed loot esp, and i made a copy of it just to edit their shown names. Just so i can search with word "timed" in console. Specifically i tried with those timed boots last time.

 

Spoiler

timed.png.3b639ecab46f98cd455931663be66059.png

 

Link to comment
16 hours ago, cobra420 said:

where can i get a copy of ddi 4.0 or 4.1? it is required for slaverun reloaded. i have 4.3 now. 

There is a fix floating in Slaverun thread. The fix let´s you use DDi 4.3 without hassle. Just Google Skyrim +Slaverun + DDi +4.3. Should point to page 212. Start your search from there, because there is more than one script fix floating around.

Link to comment

After some digging I finally found out why the modevents from DDI where not working (properly). Not sure if this is the best place to post it but here goes:

 

The search started with the log lines regarding the removal event:

[Zad]: Player has failed to escape Harness
ERROR: Type mismatch for argument 1. Type mismatch for argument 2. 

 

After backtracking the scripts I found the error to be in the registering of the mod event in the zadlibs script file. The modevent is cast/required as a form, float, bool or int but pushed as an actor, keyword, armor etc. So that won't work. (the bool one does). So as per creationkit.com example I modified the script (starting at line 1632) to remedy this:

 

Function SendDeviceEquippedEventVerbose(armor inventoryDevice, keyword deviceKeyword, actor akActor)	
	Int Handle = ModEvent.Create("DDI_DeviceEquipped")
	If (Handle)		
		ModEvent.PushForm(Handle, inventoryDevice as Form)
		ModEvent.PushForm(Handle, deviceKeyword as Form)
		ModEvent.PushForm(Handle, akActor as Form)		
		ModEvent.Send(Handle)
	Endif	
EndFunction

Function SendDeviceRemovedEventVerbose(armor inventoryDevice, keyword deviceKeyword, actor akActor)
	Int Handle = ModEvent.Create("DDI_DeviceRemoved")
	If (Handle)		
		ModEvent.PushForm(Handle, inventoryDevice as Form)
		ModEvent.PushForm(Handle, deviceKeyword as Form)
		ModEvent.PushForm(Handle, akActor as Form)		
		ModEvent.Send(Handle)
	Endif
EndFunction

Function SendDeviceKeyBreakEventVerbose(armor inventoryDevice, keyword deviceKeyword, actor akActor)	
	Int Handle = ModEvent.Create("DDI_KeyBreak")
	If (Handle)		
		ModEvent.PushForm(Handle, inventoryDevice as Form)
		ModEvent.PushForm(Handle, deviceKeyword as Form)
		ModEvent.PushForm(Handle, akActor as Form)		
		ModEvent.Send(Handle)
	Endif	
EndFunction

Function SendDeviceJamLockEventVerbose(armor inventoryDevice, keyword deviceKeyword, actor akActor)	
	Int Handle = ModEvent.Create("DDI_JamLock")
	If (Handle)		
		ModEvent.PushForm(Handle, inventoryDevice as Form)
		ModEvent.PushForm(Handle, deviceKeyword as Form)
		ModEvent.PushForm(Handle, akActor as Form)		
		ModEvent.Send(Handle)
	Endif	
EndFunction

Function SendDeviceEscapeEvent(armor inventoryDevice, keyword deviceKeyword, bool successful)	
	Int Handle = ModEvent.Create("DDI_DeviceEscapeAttempt")
	If (Handle)		
		ModEvent.PushForm(Handle, inventoryDevice as Form)
		ModEvent.PushForm(Handle, deviceKeyword as Form)
		ModEvent.PushBool(Handle, successful)		
		ModEvent.Send(Handle)
	Endif	
EndFunction

////////////////////////Line 2488////////////////////////////////////

Function SendGagEffectEvent(actor akActor, bool isRemove)
    Int Handle = ModEvent.Create("DDI_GagExpressionStateChange")
    If (Handle)    
        ModEvent.PushForm(Handle, akActor as Form)
        ModEvent.PushBool(Handle, isRemove)
        ModEvent.Send(Handle)
    Endif  
EndFunction

This also requires the hooking of the events to change. For example using the "No Escape" rule of the Devious follower framework of @Kimy 's mod Cursed Loot

 

To "change" the form back into it's intended type (armor, keyword and actor in this example) I tried a proof of concept script like this. With the proper event parameters and the "recasting".

 

Event OnDeviceEscapeAttempt(form inventoryDevice, form deviceKeyword, bool successful)                
    ...
EndEvent


Event DDP_OnDeviceRemoved(form inventoryDevice, form deviceKeyword, form akActor)
	...
        libs.EquipDevice(libs.PlayerRef, inventoryDevice as Armor, libs.GetRenderedDevice(inventoryDevice as Armor), deviceKeyword as Keyword, skipmutex = True)
	...
EndEvent

 

Link to comment

Hello everyone, i have a strange bug in game, i can't see DDx equipment EQUIPPED on player....i can see it in inventory though...can someone help me? I run bodyslide, selected the preset, batch builded everything.

 

Path: C\..bla bla bla...skyrim\data\meshes\bondage

 

Link to comment

Create an account or sign in to comment

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

Create an account

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

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

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

Important Information

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