VirginMarie Posted July 12, 2016 Posted July 12, 2016 I've been trying very hard to use this in my Mod. I have just one problem, and its very breaking. It's the stated known issue "Player character can't get out (stuck in collision with zaz vertical stocks?)" This happens very consistently, I've only seen it not occur maybe 1 out of 10 times. When it happens, then all variations of MoveTo to continue the quest, leave the player in a few very bad situations, like "over the world" or their run speed suddenly very fast, ultimately leading to a CTD. I'm using same edits as what Kenjoka posted as I find they are needed for it to work at all. This includes using Game.SetPlayerAIDriven. Possible solution you might be able to help me with: I've tried to move the player before moveActorOut. Was thinking to just not execute moveActorOut, and port the player directly out of the machine. This places the player "above the world" too. So I'm wondering if maybe you could help me with what needs to happen to work around using moveActorOut so I can avoid the "collision with zaz vertical stocks". You can try -forcing the view to 3rd person with making player ai controlled -disabling the stocks for a few seconds (if it works, you can delete collision from them by copying stuff in nif to a new nif and putting stocks w/o collision over the real stocks) - ask Xaz to fix the stocks :)other stocks don't have this problem - replace stocks collision model with something small like a barrel? I had already tried #1. Does not help #2 sounds good but how can I reference and disable it without creating a hard dependency on your mod? 1
nooblet123 Posted July 17, 2016 Author Posted July 17, 2016 I had already tried #1. Does not help #2 sounds good but how can I reference and disable it without creating a hard dependency on your mod? I messed with stocks collision in 0.45 so now it's better ................................................................ To teleport BDOD with a script: Place this in your script and call TPBDOD( reference from a cell in CK linked to your script property, adjust height relative to the floor... 15 is ok). objectReference function TPBDOD(objectReference targetRef, float bdodadjheight) ObjectReference stocks Quest xbQ=Game.GetFormFromFile(0x001854, "BrandingDeviceOfDoom.esp") As Quest objectReference bdodObjRef=(xbQ as xxbQuestScript).BdodInDungeonObjRef (bdodObjRef as xxBrandingDeviceScript).MoveBDODFromDungeonToObjRef(targetRef, bdodadjheight) ;25.0 stocks=(bdodObjRef as xxBrandingDeviceScript).BDODGetTPStocksRef() ; debug.notification("stocks "+stocks) return stocks endfunction Teleport with a console: set xxBDODTeleportToPC to 1 Don't move for a few seconds help xxbdod will list the proper variable names The same device is being teleported so if 2 differenet mods will teleport it, perhaps you should teleport it each time player enters your cell. Currently BDOD NPC packages won't work because new stocks are being spawned and deleted
VirginMarie Posted July 17, 2016 Posted July 17, 2016 I had already tried #1. Does not help #2 sounds good but how can I reference and disable it without creating a hard dependency on your mod? I messed with stocks collision in 0.45 so now it's better ................................................................ To teleport BDOD with a script: Place this in your script and call TPBDOD( reference from a cell in CK linked to your script property, adjust height relative to the floor... 15 is ok). function TPBDOD(objectReference targetRef, float bdodadjheight) Quest xbQ=Game.GetFormFromFile(0x001854, "BrandingDeviceOfDoom.esp") As Quest objectReference bdodObjRef=(xbQ as xxbQuestScript).BdodInDungeonObjRef (bdodObjRef as xxBrandingDeviceScript).MoveBDODFromDungeonToObjRef(targetRef, bdodadjheight) ;25.0 endfunction Teleport with a console: set xxBDODTeleportToPC to 1 Don't move for a few seconds help xxbdod will list the proper variable names The same device is being teleported so if 2 differenet mods will teleport it, perhaps you should teleport it each time player enters your cell. Currently BDOD NPC packages won't work because new stocks are being spawned and deleted Nice. I just tried this out in game with the console and looking promising. Getting stuck problem no longer happening so far. I will try this out in my mod. The teleport is a bonus for sure, as I had been thinking about all the work it would take me to try and put this in my own location myself.
nooblet123 Posted July 17, 2016 Author Posted July 17, 2016 Nice. I just tried this out in game with the console and looking promising. Getting stuck problem no longer happening so far. I will try this out in my mod. The teleport is a bonus for sure, as I had been thinking about all the work it would take me to try and put this in my own location myself. Also I forgot to provide an ObjectReference to the stocks in 0.45 making it useless lol , so now there's 0.46 Yeah, putting a new device in is a horrible PITA
VirginMarie Posted July 17, 2016 Posted July 17, 2016 Nice. I just tried this out in game with the console and looking promising. Getting stuck problem no longer happening so far. I will try this out in my mod. The teleport is a bonus for sure, as I had been thinking about all the work it would take me to try and put this in my own location myself. Also I forgot to provide an ObjectReference to the stocks in 0.45 making it useless lol , so now there's 0.46 Yeah, putting a new device in is a horrible PITA Ya acaully I'm feeling lost now as I remember there's this ; 0 - brandingdungeon ; 1 - markarth ; 2 - whiterun It's not apparent to me where I get this object reference you just added in .46. My own Package is no problem but what object do I reference to "sit" ? And it's also not apparent to me how to adapt for each case where those above are different.
nooblet123 Posted July 17, 2016 Author Posted July 17, 2016 Ya acaully I'm feeling lost now as I remember there's this ; 0 - brandingdungeon ; 1 - markarth ; 2 - whiterun It's not apparent to me where I get this object reference you just added in .46. My own Package is no problem but what object do I reference to "sit" ? And it's also not apparent to me how to adapt for each case where those above are different. Ah, you will only need devnum=0, a device from brandingdungeon that can teleport The object reference to stocks will be returned by this function which you copy paste into your code objectReference function TPBDOD(objectReference targetRef, float bdodadjheight) ObjectReference stocks Quest xbQ=Game.GetFormFromFile(0x001854, "BrandingDeviceOfDoom.esp") As Quest objectReference bdodObjRef=(xbQ as xxbQuestScript).BdodInDungeonObjRef (bdodObjRef as xxBrandingDeviceScript).MoveBDODFromDungeonToObjRef(targetRef, bdodadjheight) ;25.0 stocks=(bdodObjRef as xxBrandingDeviceScript).BDODGetTPStocksRef() ; debug.notification("stocks "+stocks) return stocks endfunction then you call it like newstocks = TPBDOD (something, 15.0) It will teleport the bdod to "something", newstocks is the object reference to vertical stocks which you will use in a package for a a slave aka which you reference to "sit" something is your reference in your map cell, for example shackles on the floor / or an invisible xmarkerheading Also in that example code in the OP, maybe you'll need to replace stocks references with newstocks, and there's a bunch of garbage now so you might want to hold on till i test this on npcs
VirginMarie Posted July 17, 2016 Posted July 17, 2016 Ya acaully I'm feeling lost now as I remember there's this ; 0 - brandingdungeon ; 1 - markarth ; 2 - whiterun It's not apparent to me where I get this object reference you just added in .46. My own Package is no problem but what object do I reference to "sit" ? And it's also not apparent to me how to adapt for each case where those above are different. Ah, you will only need devnum=0, a device from brandingdungeon that can teleport The object reference to stocks will be returned by this function which you copy paste into your code objectReference function TPBDOD(objectReference targetRef, float bdodadjheight) ObjectReference stocks Quest xbQ=Game.GetFormFromFile(0x001854, "BrandingDeviceOfDoom.esp") As Quest objectReference bdodObjRef=(xbQ as xxbQuestScript).BdodInDungeonObjRef (bdodObjRef as xxBrandingDeviceScript).MoveBDODFromDungeonToObjRef(targetRef, bdodadjheight) ;25.0 stocks=(bdodObjRef as xxBrandingDeviceScript).BDODGetTPStocksRef() ; debug.notification("stocks "+stocks) return stocks endfunction then you call it like newstocks = TPBDOD (something, 15.0) It will teleport the bdod to "something", newstocks is the object reference to vertical stocks which you will use in a package for a a slave aka which you reference to "sit" something is your reference in your map cell, for example shackles on the floor / or an invisible xmarkerheading Also in that example code in the OP, maybe you'll need to replace stocks references with newstocks, and there's a bunch of garbage now so you might want to hold on till i test this on npcs Using your function to place the branding device where I want works no problem. But I see no way to have the package reference newstocks. I don't understand what you have in mind here, have you tried it?
nooblet123 Posted July 17, 2016 Author Posted July 17, 2016 Ya acaully I'm feeling lost now as I remember there's this ; 0 - brandingdungeon ; 1 - markarth ; 2 - whiterun It's not apparent to me where I get this object reference you just added in .46. My own Package is no problem but what object do I reference to "sit" ? And it's also not apparent to me how to adapt for each case where those above are different. Ah, you will only need devnum=0, a device from brandingdungeon that can teleport The object reference to stocks will be returned by this function which you copy paste into your code objectReference function TPBDOD(objectReference targetRef, float bdodadjheight) ObjectReference stocks Quest xbQ=Game.GetFormFromFile(0x001854, "BrandingDeviceOfDoom.esp") As Quest objectReference bdodObjRef=(xbQ as xxbQuestScript).BdodInDungeonObjRef (bdodObjRef as xxBrandingDeviceScript).MoveBDODFromDungeonToObjRef(targetRef, bdodadjheight) ;25.0 stocks=(bdodObjRef as xxBrandingDeviceScript).BDODGetTPStocksRef() ; debug.notification("stocks "+stocks) return stocks endfunction then you call it like newstocks = TPBDOD (something, 15.0) It will teleport the bdod to "something", newstocks is the object reference to vertical stocks which you will use in a package for a a slave aka which you reference to "sit" something is your reference in your map cell, for example shackles on the floor / or an invisible xmarkerheading Also in that example code in the OP, maybe you'll need to replace stocks references with newstocks, and there's a bunch of garbage now so you might want to hold on till i test this on npcs Using your function to place the branding device where I want works no problem. But I see no way to have the package reference newstocks. I don't understand what you have in mind here, have you tried it? In package data choose the package target as "Ref alias" with one of the aliases from your "Quest", and force that alias to the new stocks.
VirginMarie Posted July 17, 2016 Posted July 17, 2016 That is what I tried. Tried with the new stocks as a objectref property. But since the property cannot be filled with anything other than default, it will not be listed to choose when you try to make a quest alias for it. Have you tried it?
ZarthonTheVanquished Posted July 17, 2016 Posted July 17, 2016 Which part of Deadly Mutilations does this mod actually use by the way? From context I'm guessing it's the sound files (screams and whatnot)...?
nooblet123 Posted July 18, 2016 Author Posted July 18, 2016 That is what I tried. Tried with the new stocks as a objectref property. But since the property cannot be filled with anything other than default, it will not be listed to choose when you try to make a quest alias for it. Have you tried it? Yes, I've tried it. You need to press OK as soon as you create aliases/packages and close their window/reopen, otherwise CK is bugged and won't let you pick stuff. I made an npc walk to spawned stocks by using 2 aliases, but it wouldn't enter them, likely my Skyrim is screwed up. Which part of Deadly Mutilations does this mod actually use by the way? From context I'm guessing it's the sound files (screams and whatnot)...? only screams
nooblet123 Posted July 18, 2016 Author Posted July 18, 2016 That is what I tried. Tried with the new stocks as a objectref property. But since the property cannot be filled with anything other than default, it will not be listed to choose when you try to make a quest alias for it. Have you tried it? Also the easiest way instead of using stupid packages is SlaveActor.PathToReference(stocks, 1) stocks.Activate(SlaveActor)
VirginMarie Posted July 18, 2016 Posted July 18, 2016 That is what I tried. Tried with the new stocks as a objectref property. But since the property cannot be filled with anything other than default, it will not be listed to choose when you try to make a quest alias for it. Have you tried it? Also the easiest way instead of using stupid packages is SlaveActor.PathToReference(stocks, 1) stocks.Activate(SlaveActor) Thank you! PathToReference is the ticket. No need for any alias etc. so that solved my problem completely. I now have it working perfectly, incorporated into the story and scene and all. Also handling skipping it if your mod is not installed. It shall be in my next release.
Kenjoka Posted July 18, 2016 Posted July 18, 2016 I had already tried #1. Does not help #2 sounds good but how can I reference and disable it without creating a hard dependency on your mod? I messed with stocks collision in 0.45 so now it's better ................................................................ To teleport BDOD with a script: Place this in your script and call TPBDOD( reference from a cell in CK linked to your script property, adjust height relative to the floor... 15 is ok). objectReference function TPBDOD(objectReference targetRef, float bdodadjheight) ObjectReference stocks Quest xbQ=Game.GetFormFromFile(0x001854, "BrandingDeviceOfDoom.esp") As Quest objectReference bdodObjRef=(xbQ as xxbQuestScript).BdodInDungeonObjRef (bdodObjRef as xxBrandingDeviceScript).MoveBDODFromDungeonToObjRef(targetRef, bdodadjheight) ;25.0 stocks=(bdodObjRef as xxBrandingDeviceScript).BDODGetTPStocksRef() ; debug.notification("stocks "+stocks) return stocks endfunction Teleport with a console: set xxBDODTeleportToPC to 1 Don't move for a few seconds help xxbdod will list the proper variable names The same device is being teleported so if 2 differenet mods will teleport it, perhaps you should teleport it each time player enters your cell. Currently BDOD NPC packages won't work because new stocks are being spawned and deleted wow, thanks, that sounds very cool, I will try to use it this week for the slaverun reloaded mod and teleport a branding device in the slaverun dungeon if I understand it right and do the teleport 10 times there still will be only one branding device and not 10 in my dungeon? as I want to brand my slave after every city enslavement (with corinthios tatoos)
VirginMarie Posted July 18, 2016 Posted July 18, 2016 Found a problem and I am stumped. The second time the device gets operated, the player along with part of the device, starts to float through the air and move across the large room im in, always to the same spot up in the air. It does this while still operating and still finishes branding. This will consisently happen each time. The entirety of my code is as follows. Tried lots of variations, such as the version below that will only teleport it once, but still same thing each time. Also tried teleporting it first to my holding cell, then to the spot. No difference. Seems like something needs to reset or clean up. Note: my VirginInitSceneStart() function does stuff including: Game.DisablePlayerControls(true, true, true, false, true) ;disable movement, combat, pov, sneakGame.forcethirdperson()VirginFixIdle()Game.Setplayeraidriven(true) ;********** Branding Device ObjectReference VirginStocksRef Bool PlaceOnce = False ;.......... Branding Device - place Function VirginBrandingDevicePlace() If ! PlaceOnce Quest xbQ = Game.GetFormFromFile(0x001854, "BrandingDeviceOfDoom.esp") As Quest ObjectReference bdodObjRef=(xbQ as xxbQuestScript).BdodInDungeonObjRef (bdodObjRef as xxBrandingDeviceScript).MoveBDODFromDungeonToObjRef(BrandingAreaMarker, 15) VirginStocksRef = (bdodObjRef as xxBrandingDeviceScript).BDODGetTPStocksRef() PlaceOnce = True EndIf EndFunction ;.......... Branding Device - place if first time, move into, operate Function VirginBrandingDevice() ;is branding mod installed? If Game.GetModByName("BrandingDeviceOfDoom.esp") == 255 ;function returns 255 if mod not there Debug.MessageBox("Branding Device of Doom is not installed. You will have to just imagine screaming for hours as a branding machine sears tattoos onto your skin!") Return EndIf ;place the device first time VirginBrandingDevicePlace() ;port next to it VirginPortal.Cast(PlayerRef) Utility.Wait(3) PlayerRef.MoveTo(BrandingArea2Marker) Utility.Wait(1) VirginPortal.Cast(PlayerRef) Utility.wait(3) ;get in stocks GlobalVariable gstocksactivated= Game.GetFormFromFile(0x00007486, "BrandingDeviceOfDoom.esp") As GlobalVariable gstocksactivated.setvalue(0) VirginInitSceneStart() PlayerRef.PathToReference(VirginStocksRef, 1) VirginStocksRef.Activate(PlayerRef) ;Run the Branding Machine Utility.wait(10) brandexternal(11) ;Lbreast Utility.wait(8) brandexternal(5) ;LAss Utility.wait(8) brandexternal(2) ;crotch Utility.wait(8) brandexternal(6) ;RAss Utility.wait(8) brandexternal(10) ;RUnderboob Utility.wait(6) VirginInitSceneEnd() VirginFixIdle() EndFunction ;.......... Branding Device - supporting functions function brandexternal(int bodypositionnumber) Quest questbdod = Game.GetFormFromFile(0x00001854, "BrandingDeviceOfDoom.esp") As Quest ReferenceAlias slavealias GlobalVariable gstartdevice slavealias = questbdod.getalias(0) as ReferenceAlias gstartdevice = Game.GetFormFromFile(0x00005EB6, "BrandingDeviceOfDoom.esp") As GlobalVariable GlobalVariable gpositionnumber = Game.GetFormFromFile(0x0000594D, "BrandingDeviceOfDoom.esp") As GlobalVariable gpositionnumber.setvalue(bodypositionnumber) gstartdevice.setvalue(1) waitwhilebusy() endfunction function waitwhilebusy() Utility.wait(3) GlobalVariable gbusy= Game.GetFormFromFile(0x00001DC0, "BrandingDeviceOfDoom.esp") As GlobalVariable int busy=gbusy.getvalue() as int while(busy==1) busy=gbusy.getvalue() as int Utility.wait(1.0) endwhile endfunction
VirginMarie Posted July 18, 2016 Posted July 18, 2016 Some more data points: If VirginBrandingDevice() runs before player leaves the cell - problem does not happen - can keep repeating no problem. But as soon as you leave the cell (COC out or whatever), then if you run VirginBrandingDevice() the problem will occur if it's not the first time I can go to the Whiterun outdoor device and get in and out, running it each time, and no problem. So would appear to be only a problem for the teleported device, although have not tried to do this through script. I'm tried to figure out how to place the device each time the cell loads. I tried just Event OnCellLoad() and it did not work (the device did not show up), but even if it did work, this is a horrible solution as too much script load, and would need to be more sophisticated. Not sure I want to peruse this since just placing the device each time I start to use does not work (even if I move it to my holding cell, then place it again) so I can't see why this would help. ---------- As a workaround, so I can release my mod for now, I'd be happy to use the Whiterun device. But I don't have enough info on how to use the Whiterun location... specifically how to get VirginStocksRef for it? I'd actually like to know how to do this even if we have a solution for the teleported too. EDIT: One last thing I tried. On 2nd try move the device to a new location within the came dungeon, then use it. Same problem.
nooblet123 Posted July 18, 2016 Author Posted July 18, 2016 wow, thanks, that sounds very cool, I will try to use it this week for the slaverun reloaded mod and teleport a branding device in the slaverun dungeon if I understand it right and do the teleport 10 times there still will be only one branding device and not 10 in my dungeon? as I want to brand my slave after every city enslavement (with corinthios tatoos) So far there's just 1, but you never know what papyrus will do next Some more data points: If VirginBrandingDevice() runs before player leaves the cell - problem does not happen - can keep repeating no problem. But as soon as you leave the cell (COC out or whatever), then if you run VirginBrandingDevice() the problem will occur if it's not the first time I can go to the Whiterun outdoor device and get in and out, running it each time, and no problem. So would appear to be only a problem for the teleported device, although have not tried to do this through script. I'm tried to figure out how to place the device each time the cell loads. I tried just Event OnCellLoad() and it did not work (the device did not show up), but even if it did work, this is a horrible solution as too much script load, and would need to be more sophisticated. Not sure I want to peruse this since just placing the device each time I start to use does not work (even if I move it to my holding cell, then place it again) so I can't see why this would help. ---------- As a workaround, so I can release my mod for now, I'd be happy to use the Whiterun device. But I don't have enough info on how to use the Whiterun location... specifically how to get VirginStocksRef for it? I'd actually like to know how to do this even if we have a solution for the teleported too. EDIT: One last thing I tried. On 2nd try move the device to a new location within the came dungeon, then use it. Same problem. I've reproduced this bug, I think my script variables are lost after leaving the cell.
VirginMarie Posted July 18, 2016 Posted July 18, 2016 I've reproduced this bug, I think my script variables are lost after leaving the cell. Another data point. I recreated it when it's the first time...the difference was that the cell has loaded more than once. So I think the problem is when the cell is load more than once, rather than it being the first time. Can you give me the info I need to use the whiterun location please (I mentioned above)? This way can I test and release without waiting to use the teleported version, rather than remove it to release.
nooblet123 Posted July 18, 2016 Author Posted July 18, 2016 I've reproduced this bug, I think my script variables are lost after leaving the cell. Another data point. I recreated it when it's the first time...the difference was that the cell has loaded more than once. So I think the problem is when the cell is load more than once, rather than it being the first time. Can you give me the info I need to use the whiterun location please (I mentioned above)? This way can I test and release without waiting to use the teleported version, rather than remove it to release. Use v0.43 and that huge piece of code in the OP and change devnum to 2
VirginMarie Posted July 18, 2016 Posted July 18, 2016 I've reproduced this bug, I think my script variables are lost after leaving the cell. Another data point. I recreated it when it's the first time...the difference was that the cell has loaded more than once. So I think the problem is when the cell is load more than once, rather than it being the first time. Can you give me the info I need to use the whiterun location please (I mentioned above)? This way can I test and release without waiting to use the teleported version, rather than remove it to release. Use v0.43 and that huge piece of code in the OP and change devnum to 2 I'd rather wait for you to fix than have to tell people to use an old version, which half will not read and not do. Not a good way for me to release first time out of the gate. Also I have no intention of changing my code that much all over again. I want to use the StockRef as I have it and simply swap to whiterun. You can't give me the info required to do that? EDIT: wait... .43? that's the one that does not even work at all for me as you just get stuck in the stocks. Otherwise I'd have already released previously
nooblet123 Posted July 18, 2016 Author Posted July 18, 2016 I've reproduced this bug, I think my script variables are lost after leaving the cell. Another data point. I recreated it when it's the first time...the difference was that the cell has loaded more than once. So I think the problem is when the cell is load more than once, rather than it being the first time. Can you give me the info I need to use the whiterun location please (I mentioned above)? This way can I test and release without waiting to use the teleported version, rather than remove it to release. Use v0.43 and that huge piece of code in the OP and change devnum to 2 I'd rather wait for you to fix than have to tell people to use an old version, which half will not read and not do. Not a good way for me to release first time out of the gate. Also I have no intention of changing my code that much all over again. I want to use the StockRef as I have it and simply swap to whiterun. You can't give me the info required to do that? EDIT: wait... .43? that's the one that does not even work at all for me as you just get stuck in the stocks. Otherwise I'd have already released previously Try 0.47 with teleportation
VirginMarie Posted July 18, 2016 Posted July 18, 2016 Yup. Looks like you nailed it. More of the bits of machine in now too that's great. I'll be testing more in the full context of my scenes, and hopefully releasing with it included later today. By the way, if in future you'd like me to test with my mod before you release to public, let me know. It's certainly worth it for me to catch something before rather than dealing with support.
VirginMarie Posted July 19, 2016 Posted July 19, 2016 More testing and all was well so I've now released with this in as a soft dependancy. Fun fun We did find one thing but it's cosmetic. I mentioned above how I thought you had improved in .47 by adding more bits of the machine. Well those bits don't show up during my actual scenes, and I'd guess the difference is that by that point the cell has loaded more than once before placing your machine (just a guess as it's the only difference I can think of). To see what I mean you can see the missing parts in this pic
nooblet123 Posted July 19, 2016 Author Posted July 19, 2016 More testing and all was well so I've now released with this in as a soft dependancy. Fun fun We did find one thing but it's cosmetic. I mentioned above how I thought you had improved in .47 by adding more bits of the machine. Well those bits don't show up during my actual scenes, and I'd guess the difference is that by that point the cell has loaded more than once before placing your machine (just a guess as it's the only difference I can think of). To see what I mean you can see the missing parts in this pic If they won't show up, but you really want those bits, you can place your own stuff in CK in the general area where the bdod is supposed to go.
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