Halstrom Posted February 24, 2012 Posted February 24, 2012 I'm having some trouble with the enslavement script again. It seems totally arbitrary which cells will be safe and which will be off-limits. I tested the following script: scn SexoutAPSlavery1 float timer ; In theory' date=' this is the beginning stage of SexoutAP. begin GameMode if( playerRef.isSpellTarget SexoutSlaveryFreePlayer ) ; Because GameBryo is retarded and can't do things in the correct order. if(timer < 1) set timer to timer + getSecondsPassed return endif set SexoutSlaveryPlayerQ.SlaveryID to 666 ; The number of the beast! set SexoutSlaveryPlayerQ.master to LegionaryDeadSeaREF ; Dead Sea will be the primary master. set SexoutSlaveryPlayerQ.slaveryType to 4 ; The player must stay within certain cells set SexoutSlaveryPlayerQ.punishmentType to 2 ; The collar will explode if outside of the cells. set SexoutSlaveryPlayerQ.takeItems to 1 ; All items will be removed from the player. set SexoutSlaveryPlayerQ.stolenItemsContainer to LegionaryDeadSeaREF ; Dead Sea will take the player's items set SexoutSlaveryPlayerQ.canSubmit to 1 set SexoutSlaveryPlayerQ.submissionDialog to APSubmissionDialog set SexoutSlaveryPlayerQ.noWeapons to 1 set SexoutSlaveryPlayerQ.useDefaultDialog to 0 AddFormToFormList SexoutSlaverySafeCells 000DEA72 ; Nelson AddFormToFormList SexoutSlaverySafeCells 00124099 ; NelsonBarracks1 AddFormToFormList SexoutSlaverySafeCells 001244CD ; NelsonBarracks2 AddFormToFormList SexoutSlaveryExtraMasters CiceroREF ; Cicero is a secondary master. playerRef.CIOS SexoutSlaveryEnslavePlayer RemoveMe elseif( playerRef.isSpellTarget SexoutSlaveryEnslavePlayer == 0) playerRef.CIOS SexoutSlaveryFreePlayer endif end And everything worked fine--I got collared and items were stripped, albeit it was impossible to step outside without heads blowing up. I then tried adding two more AddFormtoFormList after the first three (for NelsonHouse1 and 2), and suddenly NO cells were safe. So I removed those two and added a different one--the Wilderness space right outside Barracks2. When I did that, only that one was safe. Adding other cells, like NelsonHighground, broke the script entirely. ListAddForm doesn't work either. Confused, I went and messed with the example esp. Below "AddFormToFormList SexoutSlaverySafeCells 2EOVault21", I added "AddFormToFormList SexoutSlaverySafeCells StripVault21", which is directly outside Vault 21. That broke the script. Safe to say this one is outside the realm of my abilities. [/quote'] Remember if you add something to a formlist I'm pretty sure it stays there till you remove it somehow by script or start a new game before it was added, even if you delete it from the "add to formlist" script.
Matador Posted February 24, 2012 Posted February 24, 2012 I'm having some trouble with the enslavement script again. It seems totally arbitrary which cells will be safe and which will be off-limits. I tested the following script: scn SexoutAPSlavery1 float timer ; In theory' date=' this is the beginning stage of SexoutAP. begin GameMode if( playerRef.isSpellTarget SexoutSlaveryFreePlayer ) ; Because GameBryo is retarded and can't do things in the correct order. if(timer < 1) set timer to timer + getSecondsPassed return endif set SexoutSlaveryPlayerQ.SlaveryID to 666 ; The number of the beast! set SexoutSlaveryPlayerQ.master to LegionaryDeadSeaREF ; Dead Sea will be the primary master. set SexoutSlaveryPlayerQ.slaveryType to 4 ; The player must stay within certain cells set SexoutSlaveryPlayerQ.punishmentType to 2 ; The collar will explode if outside of the cells. set SexoutSlaveryPlayerQ.takeItems to 1 ; All items will be removed from the player. set SexoutSlaveryPlayerQ.stolenItemsContainer to LegionaryDeadSeaREF ; Dead Sea will take the player's items set SexoutSlaveryPlayerQ.canSubmit to 1 set SexoutSlaveryPlayerQ.submissionDialog to APSubmissionDialog set SexoutSlaveryPlayerQ.noWeapons to 1 set SexoutSlaveryPlayerQ.useDefaultDialog to 0 AddFormToFormList SexoutSlaverySafeCells 000DEA72 ; Nelson AddFormToFormList SexoutSlaverySafeCells 00124099 ; NelsonBarracks1 AddFormToFormList SexoutSlaverySafeCells 001244CD ; NelsonBarracks2 AddFormToFormList SexoutSlaveryExtraMasters CiceroREF ; Cicero is a secondary master. playerRef.CIOS SexoutSlaveryEnslavePlayer RemoveMe elseif( playerRef.isSpellTarget SexoutSlaveryEnslavePlayer == 0) playerRef.CIOS SexoutSlaveryFreePlayer endif end And everything worked fine--I got collared and items were stripped, albeit it was impossible to step outside without heads blowing up. I then tried adding two more AddFormtoFormList after the first three (for NelsonHouse1 and 2), and suddenly NO cells were safe. So I removed those two and added a different one--the Wilderness space right outside Barracks2. When I did that, only that one was safe. Adding other cells, like NelsonHighground, broke the script entirely. ListAddForm doesn't work either. Confused, I went and messed with the example esp. Below "AddFormToFormList SexoutSlaverySafeCells 2EOVault21", I added "AddFormToFormList SexoutSlaverySafeCells StripVault21", which is directly outside Vault 21. That broke the script. Safe to say this one is outside the realm of my abilities. [/quote'] Remember if you add something to a formlist I'm pretty sure it stays there till you remove it somehow by script or start a new game before it was added, even if you delete it from the "add to formlist" script. Oh yeah, I'm testing it by having a saved game right before I get enslaved and going through the dialog each time. Unless you mean they persist across the game even through resets, in which case I don't even know.
Halstrom Posted February 24, 2012 Posted February 24, 2012 Oh yeah' date=' I'm testing it by having a saved game right before I get enslaved and going through the dialog each time. Unless you mean they persist across the game even through resets, in which case I don't even know. [/quote'] That should be ok, though I have at times wondered and thought I've seen behavior to indicate stuff doesn't reset as easily as we would think.
Chase Roxand Posted February 24, 2012 Author Posted February 24, 2012 When I was creating the slave mode in the Powder Ganger plugin' date=' GetInCell was not working for the wilderness areas if I tried to call them by name in the script. Something similar might be happening to the form lists. My workaround was to pick an item in a central location - in this case a picnic table in the middle of the basket court - and change it into a persistent ref. I found out how far away the furthest reasonable point ingame was from it using getdistance in the console, then set the limit a little beyond that (longest distance inside NCRCF was 5420 units or something like that, I set the limit to 6000). It works very well - I don't know if this mode has built in functionality for something like that. [/quote'] That's probably it, then. Thanks. SexoutSlavery does, in fact, have that functionality. I might have to tweak it a smidge, but it'd work. I'll check if "getInSameCell" works, first, as that would be easier for everyone.
vman0341 Posted February 26, 2012 Posted February 26, 2012 Do you know of any mods so far that use your system, or a timelin in which there will be any? i am quite curious to see this implemented
Chase Roxand Posted February 26, 2012 Author Posted February 26, 2012 No public mods use SexoutSlavery at the moment. There's a technical demo, but it's not meant for regular use. I'm working on v1.4 right now, but then I'll rewrite bits of SewerSlave to use SexoutSlavery. At that point, SewerSlave will be the first mod to use it. v1.4 should be complete enough for me to remove the [WIP] tag. v2 will be the introduction of functional slavers, but before that I'll probably have an update or two with other little features thrown in. Oh, and the obligatory bug-fix updates.
Matador Posted February 26, 2012 Posted February 26, 2012 Do you know of any mods so far that use your system' date=' or a timelin in which there will be any? i am quite curious to see this implemented [/quote'] I'm working on one. I'm hoping to get a working version out soonish, and then add more layers onto it once the core gameplay is stable. I'll make a thread once I've got something that doesn't make me hang my head in shame.
ChancellorKremlin Posted February 26, 2012 Posted February 26, 2012 Chase, does the player.placeAtMexx0019661 command still work? I've tried it and got nothing. Btw, loved the 'example' with Sarah Weintraub, worked like a charm, really well implemented and executed. If that's what it's going to be like full stop, then I think we're all in for a treat!
Chase Roxand Posted February 26, 2012 Author Posted February 26, 2012 Yes, that NPC (XX001996) is still included. But unless you're trying to fix the slaver traveling code for me, it isn't going to do you much good. It's buggy and does nothing on its own. That'll all be scrapped when I redo the slaver stuff for v2.
ChancellorKremlin Posted February 26, 2012 Posted February 26, 2012 Cool, I was just checking. I might give the code a crack, I think the only way I am going to learn modding is by 'immersing' myself so to speak.
Matador Posted February 26, 2012 Posted February 26, 2012 The only thing for it is to plan exactly what you want to do, and think hard as to whether there is something in the game or a mod that mimics it. If there is, and you look at the scripts, you can generally puzzle out how to jigger it to work for whatever purpose you've intended. If there isn't, you have to say "Well, how important is this to my mod, can I work this out from scratch, and if not, can I work around it?"
Chase Roxand Posted February 27, 2012 Author Posted February 27, 2012 Restricting clothing types is giving me trouble. The following code doesn't seem to work: playerRef.GetEqObj 5 != SexoutSlaveryEquipmentAllowed SexoutSlaveryEquipmentAllowed is a form list. Do I have to manually go through each item in the form list and check it against the current upper body item? I could've sworn that I can just give it the form list and NV would check each one for me.
prideslayer Posted February 27, 2012 Posted February 27, 2012 You can't do that, but you don't have to loop through them all. You can do: set someRef to playerRef.getEqObj 5 if (someRef.isInList SexoutSlaveryEquipmentAllowed) .. do stuff endif
Matador Posted February 27, 2012 Posted February 27, 2012 Hey Chase, would you mind shorting a percDefiant in the next version of SexoutSlavery? From my experiments, having two meters to track mental status works better than a single progressive bar. That way you start out as neutral (or depending on your actions when enslaved, tilted towards one direction or the other) and gradually work towards one end of the spectrum instead of starting at 0. It also allows for neat things like having some actions increase brokeness and defiance simultaneously, and allowing for passive-aggressive resistance (for instance, if you are 100 broken and 100 defiant, you can't openly defy a command, but you might be able to subvert its intent). Thanks~
prideslayer Posted February 27, 2012 Posted February 27, 2012 I get what you're talking about, but broken (really) means the same thing as subservient, which is definitely the polar opposite of defiant. I think one bar is fine, perhaps with a range of (defiant)-100 to +100(broken/subservient) instead of 0-100. The stuff you're after could happen in the -20 to +20 range, or whatever you choose, or would this not work either?
prideslayer Posted February 27, 2012 Posted February 27, 2012 Actually even that might not work reliably for what you're doing, due to differences between references and base forms. I'm going to whip up a quick ESP to find out once and for all how these functions actually behave for finding stuff, and adding stuff (vs. adding it in the geck). Back in a few.
prideslayer Posted February 28, 2012 Posted February 28, 2012 Ok just finished up, took a little longer than expected, but here's what I've found.. some of this is known/obvious, but I tested anyway to be thorough. My test ESP is attached. A little terminology here, may not be exactly right, but it's what I mean in the post.. BASE forms/refs are straight base items from the geck, not instantiated. STATIC REFS are references defined in the geck, such as npc_nameREF. DYNAMIC REFS are references I created with "player.placeatme BASE" All the add methods work equally well (sort of, they do add stuff, always). I tested adding base refs, static refs (e.g. veronicaREF), and dynamic refs (result of placeAtme) to formlists using AddFormToFormList, ListAddForm, and ListAddReference. All three functions were able to add each item type except the last one, which (obviously) cannot operate on a base type. I tested this by simply adding a known number of items to the list, then checking ListGetCount. When I said sort of it's because the interaction between adding methods and lookup methods is more complex. So broken down by the three types of objects, then the lookup functions: Base types: You can only use ListGetFormIndex on these (static.IsInList = geck error). Works no matter which ADD method (the two functions or via GECK drag/drop) was used. Looking up a static in a list containing statics: - IsInList fails no matter which command added them to the list. - ListGetFormIndex works no matter what command was used. Looking up a baseref in a list containing dynamic refs (this was for my amusement): - IsInList here will crash the script. - ListGetFormIndex will not find them. Looking up a dynamic ref in a list containing base refs. - IsInList works (amazing!) - ListGetFormIndex will not find them. Looking up a dynamic ref in a list containing dynamic refs. - IsInList will not find them. - ListGetFormIndex finds them all. It seems the only way to know for certain if a given item (base, static, or dynamic) is in a list that can also contain all three is to use both functions. If you maintain strict control over what is added to the list, then you can use the single function that is appropriate. The attached ESP has one quest, one script, three formlists. The script is kind of hard to follow, but I was too focused on what I was doing to bother making the print statements more human-friendly or to rename the vars after repurposing them. It's not terrible but if it's too hard to follow I can come up with one that is friendlier. Best way to use is to activate it, then before you load your save game, open the console and: SCOF "console.txt" tdt Load the game and wait, console output will go over the top of your game screen, don't open it or you'll pause the script. Wait until it says 'stage 4 done' then quit the game and open console.txt in a text editor to see the output.
prideslayer Posted February 28, 2012 Posted February 28, 2012 One scenario I did not test (oops) was looking up a static in a list containing base objects. IsInList should work here, not sure about ListGetFormIndex.
Matador Posted February 28, 2012 Posted February 28, 2012 I get what you're talking about' date=' but broken (really) means the same thing as subservient, which is definitely the polar opposite of defiant. I think one bar is fine, perhaps with a range of (defiant)-100 to +100(broken/subservient) instead of 0-100. The stuff you're after could happen in the -20 to +20 range, or whatever you choose, or would this not work either? [/quote'] I guess that could work too, although you'd have to make percbroken a long or float variable instead of a short (I guess that's not a big deal though). The value of having two bars is that you can blend certain events to produce different results. I think this is why Fame and Infamy, in-game, are two different values--if you buy somebody a drink and then punch them in the balls, both actions get remembered instead of one overwriting the other. formlist stuff Man, that's...wow. So for an equipment-only list, you'd use ListGetFormIndex, I guess? Do you have any insight on why certain exterior cells break formlists when added?
prideslayer Posted February 28, 2012 Posted February 28, 2012 I've never tried adding a cell to a formlsit, so I can't answer that question.. as for equipment, you still need to use both. You have one things in the list, say an armor you dragged and dropped in the geck (armorA). Now say the player is wearing an instance of armorA. Only IsInList will work to tell you that the players "armorA" is the same as the one in your formlist. Now, a while later, somehow the player gets ahold of armorB and *any* script adds it to your form list, in your mod or in another mod (say the way that other mods can manipulate the lists in Sexout and SCR, or in this mod). Only ListGetFormIndex will tell you that armorB is in the list. Now.. I'm pretty tired and may have totally screwed the pooch in the ESP, but I think it's working right.
Chase Roxand Posted February 28, 2012 Author Posted February 28, 2012 pride, your contributions to science SexoutSlavery have not gone unnoticed. Clothing/weapon restrictions now work as intended. Thanks! Now for the joys of recreating the tryouts system, but without using a "Dialog" Script Package.
Chase Roxand Posted February 28, 2012 Author Posted February 28, 2012 It does? Huh, that's exactly how I was going to do it. At least I know it'll work.
prideslayer Posted February 28, 2012 Posted February 28, 2012 Good luck Chase, and thank you, for the compliment and the hard work you're doing. I have slated a couple of formlist commands for the NVSE plugin that will make life a whole shitload easier, in light of these discoveries. You can see them in the OP for that thread.
astymma Posted February 28, 2012 Posted February 28, 2012 Feel free to reverse engineer the scripts. Basically what happens is in the effect script' date=' a walk package is added to move the actor to the player. Once within distance of the player, StartConversation occurs. The same thing in Working Girl for the Gomorrah and Wrangler, except StartConversation is instead a random picker for sex acts. [/quote'] BTW, StartConversation has a built in AI walk to player package. I don't use any packages to make SmallerTalk have NPC's walk over to you and say their line, StartConversation has that built in. The only time you need an AI package to handle that part is if they have to perform actions to get to you, like opening/unlocking a door or otherwise activating something to get to the target. Basically any of the AI Travel package checkboxes. But same room or within a reasonable walking distance outdoors, no need.
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