mrkill3r Posted October 31, 2019 Posted October 31, 2019 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?
Zaflis Posted October 31, 2019 Posted October 31, 2019 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.
Zaflis Posted November 1, 2019 Posted November 1, 2019 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.
cobra420 Posted November 2, 2019 Posted November 2, 2019 where can i get a copy of ddi 4.0 or 4.1? it is required for slaverun reloaded. i have 4.3 now.Â
DeWired Posted November 2, 2019 Posted November 2, 2019 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.
Zaflis Posted November 2, 2019 Posted November 2, 2019 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...
DeWired Posted November 2, 2019 Posted November 2, 2019 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.
Zaflis Posted November 2, 2019 Posted November 2, 2019 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 Â
Rogwar002 Posted November 2, 2019 Posted November 2, 2019 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. 2
naaitsab Posted November 3, 2019 Posted November 3, 2019 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 Â
Garagulu Posted November 7, 2019 Posted November 7, 2019 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 Â
MrsBelch Posted November 7, 2019 Posted November 7, 2019 6 minutes ago, Garagulu said: Path: C\..bla bla bla...skyrim\data\meshes\bondage  should be ...\Skyrim\Data\Meshes\devious\... Â
Garagulu Posted November 7, 2019 Posted November 7, 2019 10 hours ago, MrsBelch said: should be ...\Skyrim\Data\Meshes\devious\... Â won't work ...
Zaflis Posted November 7, 2019 Posted November 7, 2019 49 minutes ago, Garagulu said: won't work ... Do you have a modern launcher like MO2 or Vortex? It would be easier to install mods with them because you get an actual installer similar to how you install games and software. No longer need to deal with extracting zip or 7z packages. But to get your game usable with those you would have to clean up your entire skyrim data folder from every mod. They will no longer be installed there in the future. Even if you uninstall whole Skyrim from Steam your mods would still be safe, i like it better that way. Â Either way reinstall DD-Assets, Integration and Expansion again. That is also the order they should be in the load order. But you can also install LOOT to let it work out the whole load order for you. But if you still are using the old ways with zip and 7z, know that you cannot just extract the files directly as is in Skyrim\data\. When you see folders like "01 UUNP", think of it as Data\ folder itself. Don't install both CBBE and UUNP, choose one, and also the Core files. But again if you used the actual installer you wouldn't need to deal with anything this complicated. 1
Garagulu Posted November 7, 2019 Posted November 7, 2019 10 hours ago, Zaflis said: Do you have a modern launcher like MO2 or Vortex? It would be easier to install mods with them because you get an actual installer similar to how you install games and software. No longer need to deal with extracting zip or 7z packages. But to get your game usable with those you would have to clean up your entire skyrim data folder from every mod. They will no longer be installed there in the future. Even if you uninstall whole Skyrim from Steam your mods would still be safe, i like it better that way. Â Either way reinstall DD-Assets, Integration and Expansion again. That is also the order they should be in the load order. But you can also install LOOT to let it work out the whole load order for you. But if you still are using the old ways with zip and 7z, know that you cannot just extract the files directly as is in Skyrim\data\. When you see folders like "01 UUNP", think of it as Data\ folder itself. Don't install both CBBE and UUNP, choose one, and also the Core files. But again if you used the actual installer you wouldn't need to deal with anything this complicated. Yes i use vortex and i am very happy! Never installed a mod manually unless strictly reccomended.... always sorted my plugins with LOOT And obviously i just use uunp.... I am not a total newby of modding, but can't find a solution
Zaflis Posted November 8, 2019 Posted November 8, 2019 13 hours ago, Garagulu said: Yes i use vortex and ... Also started Bodyslide from Vortex, selected UUNP HDT preset and run batch build? 1
Garagulu Posted November 8, 2019 Posted November 8, 2019 10 hours ago, Zaflis said: Also started Bodyslide from Vortex, selected UUNP HDT preset and run batch build? Yup...:(
Sucker343 Posted November 10, 2019 Posted November 10, 2019 devious devices equipped by mods do not lock or show up n body. I can remove them like any other armor from inventory. help.
Zaflis Posted November 10, 2019 Posted November 10, 2019 1 hour ago, Sucker343 said: devious devices equipped by mods do not lock or show up n body. I can remove them like any other armor from inventory. help. 1. Do you have iEquip?  2. Does DD have MCM menus?  3. If you give yourself restraints with console command, will they lock? Alternatively download AddItemMenu mod, if you are less familiar with console. Don't mix with zbf* starting restraint names, ZAP restraints do not lock.  Either way we can't do much with that little info, this does not happen normally or ever. Posting your "load order" and "install order" might be a good start. Find a way to copy paste them from your mod launcher as text into forum spoiler here or file attachment. Only other tip i can give is to reinstall DD.
Sucker343 Posted November 10, 2019 Posted November 10, 2019 12 minutes ago, Zaflis said: 1. Do you have iEquip?  2. Does DD have MCM menus?  3. If you give yourself restraints with console command, will they lock? Alternatively download AddItemMenu mod, if you are less familiar with console. Don't mix with zbf* starting restraint names, ZAP restraints do not lock.  Either way we can't do much with that little info, this does not happen normally or ever. Posting your "load order" and "install order" might be a good start. Find a way to copy paste them from your mod launcher as text into forum spoiler here or file attachment. Only other tip i can give is to reinstall DD. 1. iEquip installed.  2. DD does have MCM  3. yes and yes item from additemmenu also works.  4. self bondage from DD equip cause CTD or nothing.
Zaflis Posted November 10, 2019 Posted November 10, 2019 6 minutes ago, Sucker343 said: 1. iEquip installed.  2. DD does have MCM  3. yes and yes item from additemmenu also works. There's a patch for iEquip: https://www.loverslab.com/topic/33986-deviously-cursed-loot-v83-2019-05-07/page/850/?tab=comments#comment-2716828 (You asked in Cursed Loot before so i guess it's the mod you still mean.).
Sucker343 Posted November 10, 2019 Posted November 10, 2019 14 minutes ago, Zaflis said: There's a patch for iEquip: https://www.loverslab.com/topic/33986-deviously-cursed-loot-v83-2019-05-07/page/850/?tab=comments#comment-2716828 thanks. I will just remove iEquip.  Cursed loot quest was completely bugged because of the issue. I had to remove cursed loot. now i can install it again. i had iEquip before cursed loot but this bug started to show up after i install DCL. but it was not limited to DCL, all other DD mod started causing the problem.
worik Posted November 15, 2019 Posted November 15, 2019 14 minutes ago, 8888kot said: ? ? mmmm, and you want to ask or say us exactly what?
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