Kharos Posted February 25, 2023 Author Posted February 25, 2023 Ok, I found a 4.1.15 archive on my harddisk, I hope it's the right one (as far as I know wabbajack hashes the archives so even if a small detail like a timestamp is different it will not match). Attached below. BTW I know this is the wrong place to complain about it, but I think the way Wabbajack goes about it is really dumb. It basically forces people to use outdated versions of mods that have known bugs (which are fixed in the newer version). RealHandcuffs.0.4.15.7z 4
KEKW12345678 Posted February 25, 2023 Posted February 25, 2023 38 minutes ago, Kharos said: Ok, I found a 4.1.15 archive on my harddisk, I hope it's the right one (as far as I know wabbajack hashes the archives so even if a small detail like a timestamp is different it will not match). Attached below. BTW I know this is the wrong place to complain about it, but I think the way Wabbajack goes about it is really dumb. It basically forces people to use outdated versions of mods that have known bugs (which are fixed in the newer version). RealHandcuffs.0.4.15.7z 3.73 MB · 1 download Thx man! Now it works. Have a nice day!
lee3310 Posted February 25, 2023 Posted February 25, 2023 42 minutes ago, Kharos said: BTW I know this is the wrong place to complain about it, but I think the way Wabbajack goes about it is really dumb. It basically forces people to use outdated versions of mods that have known bugs (which are fixed in the newer version). That's why i can't even think about using a mod collection (too restrictive) 1
DingusTrashCanus Posted February 25, 2023 Posted February 25, 2023 Hello, The Servitron patch in update 0.4.16 causes the cuffs to become invisible while equipped for some reason. Disabling the patch and using real handcuffs without it makes them visible again.
Kharos Posted February 25, 2023 Author Posted February 25, 2023 (edited) 49 minutes ago, DingusTrashCanus said: Hello, The Servitron patch in update 0.4.16 causes the cuffs to become invisible while equipped for some reason. Disabling the patch and using real handcuffs without it makes them visible again. Thanks for the bug report, I missed that one. There are too many combinations of patches to test (Servitron without DD; with DD original slots; with DD and DD slots). It looks like this one actually broke with the changes that I made in 0.4.15. Please try if the attached version solves the issue. [Edit] If it does not solve the issue then please provide more details: What exact installations options are you using, what kind of handcuffs are you using, on a servitron or on a regular character. RealHandcuffs.0.4.17 beta 1.7z Edited February 25, 2023 by Kharos typo 1
DingusTrashCanus Posted February 26, 2023 Posted February 26, 2023 2 hours ago, Kharos said: Thanks for the bug report, I missed that one. There are too many combinations of patches to test (Servitron without DD; with DD original slots; with DD and DD slots). It looks like this one actually broke with the changes that I made in 0.4.15. Please try if the attached version solves the issue. [Edit] If it does not solve the issue then please provide more details: What exact installations options are you using, what kind of handcuffs are you using, on a servitron or on a regular character. RealHandcuffs.0.4.17 beta 1.7z 3.73 MB · 1 download Thanks for the quick update, 0.4.17 did the trick! I can see the cuffs now with the servitron patch enabled. FYI I also noticed before trying 0.4.17 that the collars and hinged handcuffs were also invisible (oddly enough without the servitron patch installed as well), and the update seems to have also fixed this issue, at least from a quick check using debug mode. 1
Kharos Posted February 26, 2023 Author Posted February 26, 2023 (edited) 12 hours ago, DingusTrashCanus said: Thanks for the quick update, 0.4.17 did the trick! I can see the cuffs now with the servitron patch enabled. FYI I also noticed before trying 0.4.17 that the collars and hinged handcuffs were also invisible (oddly enough without the servitron patch installed as well), and the update seems to have also fixed this issue, at least from a quick check using debug mode. I screwed up the slot numbers when I modified them from 0.4.15 so it affected all kinds of handcuffs (regular, hinged, broken). It should not have affected collars though as these did not change slot number. [Edit]: It should also only have caused issues with the servitron patch, as far as I can see everything else was ok. Edited February 26, 2023 by Kharos 1
lee3310 Posted February 26, 2023 Posted February 26, 2023 7 hours ago, Kharos said: I screwed up the slot numbers when I modified them from 0.4.15 so it affected all kinds of handcuffs (regular, hinged, broken). It should not have affected collars though as these did not change slot number. [Edit]: It should also only have caused issues with the servitron patch, as far as I can see everything else was ok. I was using slot 58 before update, is it ok to switch to DD slots mid-save ?
Kharos Posted February 26, 2023 Author Posted February 26, 2023 3 minutes ago, lee3310 said: I was using slot 58 before update, is it ok to switch to DD slots mid-save ? Should be safe. Best be careful and make a dedicated save before updating such that you can go back if necessary. 1
lee3310 Posted February 28, 2023 Posted February 28, 2023 (edited) On 2/26/2023 at 5:29 PM, Kharos said: Should be safe. Best be careful and make a dedicated save before updating such that you can go back if necessary. I tested the new handcuffs slot on NPCs: When RH-Cuffs are equipped, you can't equip DD restrains and the opposite removes the DD cuffs (the visible model will get removed but not the scripted dummy armor ). So i guess it's working with current save but i just noticed that outfits like the "Wildman rags" will get unequipped when you apply cuffs (use the same slots). It's always a tough choice when it comes to to slots. PS Do you think it's best to prevent handcuffs from being equipped when actor is wearing DD Wrist restraint ? Edited February 28, 2023 by lee3310
Kharos Posted March 1, 2023 Author Posted March 1, 2023 7 hours ago, lee3310 said: Do you think it's best to prevent handcuffs from being equipped when actor is wearing DD Wrist restraint ? They are not designed to be worn at the same time. The DD compatibility patch adds DD keywords to RH handcuffs to ensure that DD recognizes them as wrist restraints, that's why you can't equip DD cuffs when wearing RH handcuffs. 1
lee3310 Posted March 1, 2023 Posted March 1, 2023 (edited) 8 hours ago, Kharos said: They are not designed to be worn at the same time. The DD compatibility patch adds DD keywords to RH handcuffs to ensure that DD recognizes them as wrist restraints, that's why you can't equip DD cuffs when wearing RH handcuffs. Yes, that part is working as intended (you can't equip DD over RH) but when an NPC is wearing a DD wrist cuff, you can still put RH on him/her. They will replace the visible armor and leave the dummy one for the player to unequip it manually. Since DD is not fully compatible with NPCs, i was asking if it will be more safe to prevent RH from being ever equipped when DD are applied (or is it already the case and something is wrong on my end). Edited March 1, 2023 by lee3310
lee3310 Posted March 1, 2023 Posted March 1, 2023 (edited) On a side not, do you think that invisible actors will be considered not 3d loaded ?. I used "SetAlpha(0.0)" instead of "disable()" and i'm getting this error in the log after applying restrains and making the actor kneel: SetAlpha(0.0, True) CallFunction("CreateHandcuffsEquipOnActor", kArgs) CallFunction("StartBoundWaitState", kArgs) SetAlpha(1.0, True) Quote error: Failed to setup moving reference because it has no parent cell or no 3D stack: [ (00004DED)].Actor.TranslateTo() - "<native>" Line ? [ (FF25A51C)].realhandcuffs:temporarywaitmarker.TranslateIntoPosition() - "\RealHandcuffs\package\0_Common\Scripts\Source\User\RealHandcuffs\TemporaryWaitMarker.psc" Line 37 [ (FF25A51C)].realhandcuffs:temporarywaitmarker.StopAnimationAndWait() - "\RealHandcuffs\package\0_Common\Scripts\Source\User\RealHandcuffs\WaitMarkerBase.psc" Line 207 I mean it's working, the target does appear kneeling but i prefer not having a log error if possible. Edited March 1, 2023 by lee3310
Kharos Posted March 1, 2023 Author Posted March 1, 2023 1 hour ago, lee3310 said: On a side not, do you think that invisible actors will be considered not 3d loaded ?. I used "SetAlpha(0.0)" instead of "disable()" and i'm getting this error in the log after applying restrains and making the actor kneel: SetAlpha(0.0, True) CallFunction("CreateHandcuffsEquipOnActor", kArgs) CallFunction("StartBoundWaitState", kArgs) SetAlpha(1.0, True) I mean it's working, the target does appear kneeling but i prefer not having a log error if possible. I don't know, it is possible that the game does that kind of optimization (unloading the 3D model if alpha is zero). I just modified my scripts to check for Is3DLoaded before translating actors, you can check if this solves the issue (version is attached). RealHandcuffs.0.4.17 beta 2.7z 1
lee3310 Posted March 1, 2023 Posted March 1, 2023 2 hours ago, Kharos said: I don't know, it is possible that the game does that kind of optimization (unloading the 3D model if alpha is zero). I just modified my scripts to check for Is3DLoaded before translating actors, you can check if this solves the issue (version is attached). RealHandcuffs.0.4.17 beta 2.7z Oh, excellent. I'm trying to make a transition between NPC and clone as smooth as possible (without fade to black), almost succeeded.
Kharos Posted March 1, 2023 Author Posted March 1, 2023 (edited) 29 minutes ago, lee3310 said: Oh, excellent. I'm trying to make a transition between NPC and clone as smooth as possible (without fade to black), almost succeeded. Ah, I remember a few things from my other experimental mod. Reading my code again, when cloning NPCs I did the following: create the clone in disabled state - this means that 3D is not yet loaded, also the player cannot see the clone move the clone to a position directly above the player, like this the player will usually not notice it, i,e. clone.MoveTo(player, 0.0, 0.0, 3072.0, false) enable the clone with clone.EnableNoWait(), the clone will start falling but 3072 is a pretty long distance call clone.WaitFor3DLoad() to wait the fraction of a second that is necessary for the 3D to load then set alpha to zero to hide the clone with clone.SetAlpha(0.0) After that 3D was loaded so I could move, translate, and animate the invisible clone, and make it visible by setting Alpha to one. This procedure is not perfect, if the player looks up exactly they will see the falling clone for a short moment. So if you are in a similar situation, the issue might not be that the game unloads 3D when you set alpha to zero, it might be that 3D was never loaded (clone was created in disabled state) and the game does not load 3D when enabling with alpha set to zero. Edited March 1, 2023 by Kharos 1
lee3310 Posted March 1, 2023 Posted March 1, 2023 (edited) 1 hour ago, Kharos said: Ah, I remember a few things from my other experimental mod. Reading my code again, when cloning NPCs I did the following: create the clone in disabled state - this means that 3D is not yet loaded, also the player cannot see the clone move the clone to a position directly above the player, like this the player will usually not notice it, i,e. clone.MoveTo(player, 0.0, 0.0, 3072.0, false) enable the clone with clone.EnableNoWait(), the clone will start falling but 3072 is a pretty long distance call clone.WaitFor3DLoad() to wait the fraction of a second that is necessary for the 3D to load then set alpha to zero to hide the clone with clone.SetAlpha(0.0) After that 3D was loaded so I could move, translate, and animate the invisible clone, and make it visible by setting Alpha to one. This procedure is not perfect, if the player looks up exactly they will see the falling clone for a short moment. So if you are in a similar situation, the issue might not be that the game unloads 3D when you set alpha to zero, it might be that 3D was never loaded (clone was created in disabled state) and the game does not load 3D when enabling with alpha set to zero. Yes i'm in the same situation, i'm setting alpha to zero just after placeatme() and that is causing two problems: 1) with FPE: I'm cloning the source NPC pregnancy state to pass it to the clone with a copyPregnancy() function but now, FPE spell is firing too late: "Pregnancy data missing: Source = [fpfp_basepregdata < (FF21B37F)>] and target = None" "FPE [fpfp_basepregdata < (FF2673BF)>] holding actor [(FF26536B)] | We have initialized!" "FPE [fpfp_basepregdata < (FF21B37F)>] holding actor [Actor < (FF214A06)>] | Actor has died" The spell is probably relying on 3D too (and distance since it's an area effect). 2) To prevent the source NPC from getting naked i switched to additem() instead of removeItem() to transfer inventory but that will randomize weapon and armor mods (need to copy them separately if possible). So FPE is my biggest problem now need to figure out how get the spell/marker.. to apply in time without creating a dependency (clone.WaitFor3DLoad() could help if it's enough). And thank you for the suggestion, i will try it too. Edited March 1, 2023 by lee3310
lee3310 Posted March 2, 2023 Posted March 2, 2023 (edited) 3 hours ago, lee3310 said: Yes i'm in the same situation, i'm setting alpha to zero just after placeatme() and that is causing two problems: 1) with FPE: I'm cloning the source NPC pregnancy state to pass it to the clone with a copyPregnancy() function but now, FPE spell is firing too late: "Pregnancy data missing: Source = [fpfp_basepregdata < (FF21B37F)>] and target = None" "FPE [fpfp_basepregdata < (FF2673BF)>] holding actor [(FF26536B)] | We have initialized!" "FPE [fpfp_basepregdata < (FF21B37F)>] holding actor [Actor < (FF214A06)>] | Actor has died" The spell is probably relying on 3D too (and distance since it's an area effect). 2) To prevent the source NPC from getting naked i switched to additem() instead of removeItem() to transfer inventory but that will randomize weapon and armor mods (need to copy them separately if possible). So FPE is my biggest problem now need to figure out how get the spell/marker.. to apply in time without creating a dependency (clone.WaitFor3DLoad() could help if it's enough). And thank you for the suggestion, i will try it too. Ok, so i solved the FPE problem by moving the copyPregnancy() to the last moment, before deleting the source and after EnableAI(True) (that's most likely the culprit) and solved the armor Mods by this (it's just a quick test, not comfortable with the multiple loops but surprisingly it's working great) Spoiler Struct TheArmor Form TheItem ObjectMod[] TheArmorMods EndStruct ;in a first loop check the source equipped items TheArmor[] AllArmors = new TheArmor[0] TheArmor ThisArmor = new TheArmor ThisArmor.TheItem = sourceActor.GetWornItem(index).Item ThisArmor.TheArmorMods = sourceActor.GetWornItemMods(index) AllArmors.Add(ThisArmor) ;Apply mods to armors in target inventory after adding all items and before equipping items = targetActor.GetInventoryItems() index = 0 While index < items.Length int i =0 While i < AllArmors.Length If AllArmors[i].TheItem == items[index] Int j = 0 While j < AllArmors[i].TheArmorMods.Length targetActor.AttachModToInventoryItem(items[index], AllArmors[i].TheArmorMods[j]) J += 1 EndWhile EndIf i += 1 EndWhile index += 1 EndWhile So only SetAlpha() and enableAI(). Edited March 2, 2023 by lee3310
Kharos Posted March 2, 2023 Author Posted March 2, 2023 5 hours ago, lee3310 said: Ok, so i solved the FPE problem by moving the copyPregnancy() to the last moment, before deleting the source and after EnableAI(True) (that's most likely the culprit) and solved the armor Mods by this (it's just a quick test, not comfortable with the multiple loops but surprisingly it's working great) Hide contents Struct TheArmor Form TheItem ObjectMod[] TheArmorMods EndStruct ;in a first loop check the source equipped items TheArmor[] AllArmors = new TheArmor[0] TheArmor ThisArmor = new TheArmor ThisArmor.TheItem = sourceActor.GetWornItem(index).Item ThisArmor.TheArmorMods = sourceActor.GetWornItemMods(index) AllArmors.Add(ThisArmor) ;Apply mods to armors in target inventory after adding all items and before equipping items = targetActor.GetInventoryItems() index = 0 While index < items.Length int i =0 While i < AllArmors.Length If AllArmors[i].TheItem == items[index] Int j = 0 While j < AllArmors[i].TheArmorMods.Length targetActor.AttachModToInventoryItem(items[index], AllArmors[i].TheArmorMods[j]) J += 1 EndWhile EndIf i += 1 EndWhile index += 1 EndWhile So only SetAlpha() and enableAI(). Yeah, I had to do something similar to clone worn armor including mods. It's a bit slow but it worked. 1
lee3310 Posted March 2, 2023 Posted March 2, 2023 9 hours ago, Kharos said: Yeah, I had to do something similar to clone worn armor including mods. It's a bit slow but it worked. This will be very helpful, thanks. It doesn't matter if it's slow because i will only clone one actor at a time and to be sure, i put the cloning function in a "state"(still better than waiting with a black screen).
lee3310 Posted March 2, 2023 Posted March 2, 2023 (edited) 16 hours ago, Kharos said: Yeah, I had to do something similar to clone worn armor including mods. It's a bit slow but it worked. One last hiccup (i hope): the transition is as smooth as it can be (just a split sec blink when actors are swapped) but "StartBoundWaitState" is storing the NPC initial position (x,y,z) so when the NPC stands up, he/she gets teleported to another position (the one he/she had when kneeled behind the scene). If there is a way to fix this (move the marker ?) that's cool otherwise, i will add the handcuffs to the source and only make the clone kneel (swap them when standing). I just have to make the source stay in place and not wander about (is there a built in wait package in RH i can use ?) Edited March 3, 2023 by lee3310
vaultbait Posted March 2, 2023 Posted March 2, 2023 2 hours ago, lee3310 said: One last hiccup (i hope): the transition is as smooth as it can be (just a split sec blink when actors are swapped) but "StartBoundWaitState" is storing the NPC initial position (x,y,z) so when the NPC stands up, he/she gets teleported to another position (the one he/she had when kneeled behind the scene). If there is a way to fix this (move the marker ?) that's cool otherwise, i will add the handcuffs to the source and only make the clone kneel (swap them when standing). I just have to make the source stay in place and not wander about (is there a built in wait package in RH i can use ?) If you spawn a marker you can set it as a linked ref with the RH_WaitMarkerLink keyword (doing that in a mod I've got under development and it seems to work). Basically MyPrisoner.SetLinkedRef(MyMarker, RH_WaitMarkerLink) should do the trick, and can be done as a soft integration too if necessary (the keyword's ID is 0xB in RealHandcuffs.esp). I add the keyword to the actor prior to calling CreateHandcuffsEquipOnActor() from the RH third-party API. 1
lee3310 Posted March 3, 2023 Posted March 3, 2023 (edited) 34 minutes ago, vaultbait said: If you spawn a marker you can set it as a linked ref with the RH_WaitMarkerLink keyword (doing that in a mod I've got under development and it seems to work). Basically MyPrisoner.SetLinkedRef(MyMarker, RH_WaitMarkerLink) should do the trick, and can be done as a soft integration too if necessary (the keyword's ID is 0xB in RealHandcuffs.esp). I add the keyword to the actor prior to calling CreateHandcuffsEquipOnActor() from the RH third-party API. I still can't wrap my head around HR mechanism (first time using the API) but from what i gathered, When you call "StartBoundWaitState" it will automatically place a marker and links NPC to it. I can't use the source marker because it will probably get deleted on death but maybe i can get the target marker in order to move it ? (getlinkedRef will return nothing if the NPC is liked to the marker and not the other way around). Do you suggest that i place my own marker and link the targetNPC to it ? Edited March 3, 2023 by lee3310
vaultbait Posted March 3, 2023 Posted March 3, 2023 18 minutes ago, lee3310 said: Do you suggest that i place my own marker and link the targetNPC to it ? That's what's working for me, but in my case I have the benefit of it being a unique actor in a custom interior cell, so the marker I'm using is preplaced there with the CK and I just pass it as a property on a script I attach to the actor ref. 1
Kharos Posted March 3, 2023 Author Posted March 3, 2023 (edited) 11 hours ago, lee3310 said: I still can't wrap my head around HR mechanism (first time using the API) but from what i gathered, When you call "StartBoundWaitState" it will automatically place a marker and links NPC to it. I can't use the source marker because it will probably get deleted on death but maybe i can get the target marker in order to move it ? (getlinkedRef will return nothing if the NPC is liked to the marker and not the other way around). Do you suggest that i place my own marker and link the targetNPC to it ? Basically StartBoundWaitState will place an invisible marker at the NPC, optionally put the NPC into an animation (kneeling), and set up an AI package to keep the NPC waiting at the position of the marker. The mod will also ensure that if you leave the area (NPC gets unloaded) and then return again, the animation is restored and the position fixed if necessary. If you move the NPC after StartBoundWaitState , the position of the marker and of the NPC are no longer correct, which can cause issues. One issue is that if the animation is swiched to a different one (e.g. getting up) then the NPC will move back to the marker; another is that when you leave and return, the NPC will move back to the marker too. I would probably have tried the approach that you mentioned above, moving the marker to the NPC. Something like: api.StartBoundWaitState(myActor, ...) myActor.MoveTo(...) ObjectReference waitMarker = myActor.GetLinkedRef(Library.Resources.WaitMarkerLink) waitMarker.MoveTo(myActor) Note, I have not actually tried this, so it's possible that I made a mistake and it will not work. [Edit]: If I remember correctly the marker gets deleted in the following situations: when you call StopBoundWaitState when the NPC dies when you free the NPC from the handcuffs Edited March 3, 2023 by Kharos 1
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