-
Announcements
-
SITE MOVED - IN READ ONLY MODE 12/08/2015
Please use http://www.loverslab.com moving forward. Site has been restored to a previous version, and this one placed into a read-only mode. This is available for a limited time so users may reference/copy content that has been lost in the transition. This will no longer be accessible by December 22nd, 2015.
-
-
Content count
138 -
Joined
-
Last visited
Posts posted by nkAlex
-
-
I was actually referring to the Victim/Aggressor modes and companions, I'm not really interested in the slavery module and wasn't going to touch it much. Adding dialogues is possible, but with the lowest priority and only if somebody writes the actual dialogues.So, can we know what NPCs have a special dialog when enslaved? Or would that be a spoiler? So far I've only seen Trudy.
As of now, I don't even know what features does this slavery mode have, besides enslaving NPCs and adding a hideout for them
0 -
1) Will add that, thanks!
2) Hmm, I was also thinking about using a marker, it should be pretty easy to place it randomly "X units away from Player", but how to make sure it doesn't end up in an unreachable location (inside a building, a rock, behind a closed door, off the map, etc., especially in interiors)?
I could probably just place a marker in the very center of the world map and make them run to it until they're not "GetDetected" by specified actors, but... there is probably just so many ways it could go wrong %))
What are these "GetVATS..." functions for exactly? The GECK documentation is completely blank on them. Aren't they supposed to only work on Player?
3) Sounds promising, but may probably end up with the same uncertainties. I'll look into it, thanks!
0 -
7KeysCurtain, check PMs

0 -
So, I've mostly finished with the Victim Mode, I think. There is still some fine-tuning left, and some features I'm considering implementing, but for now it works fine and (probably) stable.
Also tweaked Forced Talk and added some more settings to it.
Aggressor Mode is next on the list, but there's still some actual job to attend to, so, moving there as fast as I can

My initial intention was to also expand and bring more variety to dialogues, but considering that, A, I'm not a native English speaker, and B, the dialogue lines I can come up with tend to sound way beyond ridiculous even by bad porn grade, I'm wondering if someone with a more creative writing skill could probably throw in some nice lines? There are some particular ideas I wish to implement, but too lazy now to write a tl;dr description in case no one is actually interested
1 -
Regarding that question about packages.
Weird, but sometimes a package added with "AddPackageAt" can't be removed with "RemovePackageAt", although is removed by "RemoveScriptPackage" instead. So, executing a shortly delayed "second pass" with RemoveScriptPackage in case the package still exists (after a RemovePackageAt) does the trick, I think...
And now a portion of some new random questions
- The PC is being robbed of random items by some NPCs. But for the sake of not ruining quests and stuff like that, some items can't be taken. For now, I have the following checks:
- if eval !(IsQuestItem rItemBaseForm) && !(IsScripted rItemBaseForm)
- if it is not a pip-boy (i.e. GetEquipmentSlotsMask doesn't contain a 6 flag)
- if Item name does not contain keywords "pip-boy", "key", "card" — so that various keys and keycards don't get stolen.
- It's quite simple to make NPCs run towards some target, but is it possible to make it reverse? I want to simulate a situation where the PC sends his companions away, after which they should run away for some distance, spend some time "regrouping", and then return back and attack whoever I script them to. That should work on any random terrain or even in interiors (although in interiors it would be best if they could run away just until they can't be "seen" by the enemies)
Is there any function that can tell whether an NPC can be spotted by another NPC?
Is something like that even possible? - Is there a better way of sorting out who is your enemy and who is your ally in a battle besides comparing GetCombatTarget references and faction relations (for now doing it with a multipass loop which marks any NPC fighting the PC or his companions as an enemy, and then adds everyone else from their factions to enemies either. But it is not failsafe in case an ally is fighting an enemy, and both are not faction related to any other NPCs — both will be marked as allies. Or when and ally and an enemy are related by a neutral to both faction — both will be counted as enemies).
1 - The PC is being robbed of random items by some NPCs. But for the sake of not ruining quests and stuff like that, some items can't be taken. For now, I have the following checks:
-
Okay, the problem with stuck controls + package still RANDOMLY persists, so it might actually be a timing issue. Here is the debug log, I've prefixed my own comments with a ">>>>".
SetConsoleOutputFilename >> '__SO_Log_001.log'_______________________________let rActor := GetCrosshairRef___DisablePlayerControls 1 1 1 0 0 0 1___call fnSexoutActRunFull (Ar_Map "ActorA"::rActor "ActorB"::PlayerRef "Flags"::(Ar_List "rape") "Raper"::rActor "bDontRedressA"::1 "bDontRedressB"::1)fnSARF: Locked actor (14000EC4 -- Butch).fnSARF: Locked actor (00000014 -- Alex).fnSARF: Invoking CIOS on Alex (00000014)____________________________CSES: Starting for: Alex(00000014)Sexout Version is: '95(b4)fnCSE (93): from Alex (00000014) on Alex (00000014)fnCSE (93): is actorfnCSE (93): CV2fnSoCSv: Alex (00000014) 'Sexout:Start::' -> Alex (00000014) 'Sexout:Start:93::'fnSoNXClr Sexout:Start:: Alex (00000014)fnCSE (93): Returning 1fnSNNXA: T:Alex (00000014), K:Sexout:Start:93::fnSNNXA: Final A:Butch(14000EC4)fnSNNXA: Final B:Alex(00000014)fnSNNXA: Final C:<no name>(00000000)fnSNNXA: Final X:<no name>(00000000)CSES: Normalize finished, checking sanitizer. : fnSexoutGetArArgs Alex(00000014), Sexout:Start:93::NGSAN: Validating animation choicesfnSoRandAct: In randomizerfnSoRandAct: 2 actors, skeletons: MM : fnSexoutGetArArgs Alex(00000014), Sexout:Start:93::Sexout Random Picker: 162 animations possible for these actorsSexout Random Picker: 28 animations left after filtering on flag: rapeSexout Random Picker: 28 animations left after filtering on plugin: *Any* (No furniture)Sexout Random Picker: 28 animations left after filtering against black listValid anim choices: 204, 404, 603, 604, 631, 634, 707, 901, 931, 203, 603, 604, 606, 607, 608, 615, 631, 632, 633, 634, 635, 636, 638, 639, 648, 821, 905, 909, fnSAN: Actor: Alex (Sexout:Start:93:, isAnal: 1, isOral: 0, isVaginal: 0NGSAN (93): Returning 0.000000: SUCCESSCSES: SES done with CSE=1 SAN=0.000000, Stage=0 SEU next.CSES: ActorB validity is 1fnSAVa: Lock present but invalid, clearing.CSES: ActorA validity is 1fnSAVa: Lock present but invalid, clearing.CSES (93): initializing actorsCSES (93): init actorA Alex (00000014), Butch (14000EC4), Alex (00000014)fnSoNXClr Sexout:Started:: Butch (14000EC4)fnSoCSv: Alex (00000014) 'Sexout:Start:93::' -> Butch (14000EC4) 'Sexout:Started::'fnSoNXClr Sexout:Start:93:: Butch (14000EC4)CSES (93): init actorB Alex (00000014), Alex (00000014), Alex (00000014)fnSoNXClr Sexout:Started:: Alex (00000014)fnSoCSv: Alex (00000014) 'Sexout:Start:93::' -> Alex (00000014) 'Sexout:Started::'CSES (93): clearing selfkeyfnSoNXClr Sexout:Start:93:: Alex (00000014)CSES (93): kickoffCSES (93): Transitioning from 0 -> 1000fnSoCUUID: Cleaning 189_16.3746_1B53D700uuid1[189_16.3746_1B53D700][0] = rapeuuidkeys:[sexout:started::arargs:flags] = 189_16.3746_1B53D700CSES (93): Transitioning from 1000 -> 1001fnSAL: 14000EC4 (Butch) initial lock state: 0fnSAL: 14000EC4 (Butch) final lock state: 1 0Scaling A from 1.000000 to 1.0fnSAL: 00000014 (Alex) initial lock state: 0fnSAL: 00000014 (Alex) final lock state: 1 0Scaling B from 1.000000 to 1.0fnSoNXClr Sexout:Core:Cleanup Butch (14000EC4)fnSoNXClr Sexout:Core:Cleanup Alex (00000014)SexoutNGBES (93): SES: Setting global hook vars.SexoutNGBES (93): SES: Global hook triggered, SES moving to BES stage 0.SexoutNGBES (93): SEU: Stage 0.026001 0 -> 10SexoutNGPCQ: PCFd1: 1 1 1 0 0 0 1soAPS: StartNGCBQ1: Casting Start PosControl (2E000AE8) on Alex (00000014)NGCBQ1: Casting Start PosControl (2E000AE8) on Alex (00000014)NGCBQ1: Casting Start PosControl (2E000AE8) on Alex (00000014)NGCBQ1: Casting Start Sexout Sound (2F001935) on Alex (00000014)soAPS: StartSexoutNGBES (93): SEU: Stage 0.106659 10 -> 11SexoutNGBES (93): Casting undress on player.Pos: Waiting for Butch to gain sexout PosXSexoutNGBES (93): SEU: Stage 0.035004 11 -> 12SNGUndress (93): Found Alex's Leather Jacket (35002254) on Alex (00000014)SNGUndress (93): Added Alex's Leather Jacket (35002254) on Alex (00000014)SNGUndress (93): Found Alex's Cool Sunglasses (35002255) on Alex (00000014)SNGUndress (93): Found A Cigarette (28003D54) on Alex (00000014)SNGUndress (93): Alex (00000014) undress stage transition from 0 -> 10SNGUndress (93): Removing 'Alex's Leather Jacket' from Alex (00000014)SNGUndress (93): Alex (00000014) undress stage transition from 10 -> 20SNGUndress (93): Alex (00000014) undress stage transition from 20 -> 100SNGUndress (93): Alex (00000014) undress stage transition from 100 -> 110SexoutNGBES (93): SEU: Stage 0.534012 12 -> 13Pos: Waiting for Butch to gain sexout PosXSexoutNGBES (93): SEU: Stage 1.024063 13 -> 14Pos: Waiting for Butch to gain sexout PosXSexoutNGBES (93): SEU: Stage 1.035080 14 -> 15SexoutNGBES (93): SEU: Stage 0.130020 15 -> 16SexoutNGBES (93): SEU: Stage 0.018997 16 -> 100soAPS - Plugin: Sexout.esm, anim: 648soAPS: ActorA is: Butch. mX: -0, mY: 0, mZ: 0, heading: 309Sexout: Butch (14000EC4) PlayIdle SNG648ASNGUndress (93): Found Tunnel Snake Outfit (14000EB8) on Butch (14000EC4)SNGUndress (93): Added Tunnel Snake Outfit (14000EB8) on Butch (14000EC4)SNGUndress (93): Found Pip-Boy Glove (00025B83) on Butch (14000EC4)SNGUndress (93): Added Pip-Boy Glove (00025B83) on Butch (14000EC4)SNGUndress (93): Found Marksman Carbine (00106FEA) on Butch (14000EC4)SNGUndress (93): Added Marksman Carbine (00106FEA) on Butch (14000EC4)SNGUndress (93): Found Aviator Sunglasses Black with golden frame (27012D1C) on Butch (14000EC4)SNGUndress (93): Added Aviator Sunglasses Black with golden frame (27012D1C) on Butch (14000EC4)SNGUndress (93): Found A Cigarette (28003D54) on Butch (14000EC4)SNGUndress (93): Butch (14000EC4) undress stage transition from 0 -> 10SNGUndress (93): Removing 'Tunnel Snake Outfit' from Butch (14000EC4)SNGUndress (93): Removing 'Pip-Boy Glove' from Butch (14000EC4)SNGUndress (93): Removing 'Marksman Carbine' from Butch (14000EC4)SNGUndress (93): Removing 'Aviator Sunglasses Black with golden frame' from Butch (14000EC4)soAPS - Plugin: Sexout.esm, anim: 648soAPS: ActorB is: Alex. mX: -0, mY: 0, mZ: 0, heading: 309Sexout: Alex (00000014) PlayIdle SNG648BSexoutNGBES (93): SEU: Stage 0.020004 100 -> 101SNGUndress (93): Butch (14000EC4) undress stage transition from 10 -> 20Positioning Active. Alex ( selected** Dumping Array #7 **Refs: 1 Owner 2E: SexoutPosNew.esp[ A ] : Butch (14000EC4)[ B ] : Alex (00000014)SNGUndress (93): Butch (14000EC4) undress stage transition from 20 -> 100SNGUndress (93): Butch (14000EC4) undress stage transition from 100 -> 110Sexout: Alex (00000014) PlayIdle SNG648BSexoutNGBES (93): SEU: Stage 15.005981 101 -> 200SexoutNGBES (93): SEU: Stage 0.018997 200 -> 201SexoutNGBES (93): SEU: Stage 0.291992 201 -> 300NGK Knockdown Butch 382NGK Knockdown Alex 977SexoutNGBES (93): SEU: Stage 0.523041 300 -> 301fnSoNXClr Sexout:Start:: Alex (00000014)NGClean (93 0): Started on 'Butch' (14000EC4)NGClean (93 20): T=Butch (14000EC4) CBD=<no name> (00000000)fnSoNXClr Sexout:Started:: Butch (14000EC4)NGClean (93 20): stage 0 -> 20 for Butch (14000EC4)NGClean (93 0): Started on 'Alex' (00000014)NGClean (93 20): T=Alex (00000014) CBD=<no name> (00000000)fnSoNXClr Sexout:Started:: Alex (00000014)NGClean (93 20): stage 0 -> 20 for Alex (00000014)SexoutNGBES (93): SEU: Stage 0.018005 301 -> 1000NGClean (93 30): stage 20 -> 30 for Butch (14000EC4)SNGUndress (93): Butch (14000EC4) undress stage transition from 110 -> 1000SNGUndress (93): Butch (14000EC4) undress stage transition from 1000 -> 2000NGClean (93 31): stage 30 -> 31 for Butch (14000EC4)NGClean (93 40): stage 31 -> 40 for Butch (14000EC4)NGClean (93 200): stage 40 -> 200 for Butch (14000EC4)NGClean (93 1000): stage 200 -> 1000 for Butch (14000EC4)NGClean (93 30): stage 20 -> 30 for Alex (00000014)SNGUndress (93): Alex (00000014) undress stage transition from 110 -> 1000SNGUndress (93): Alex (00000014) undress stage transition from 1000 -> 2000NGClean (93 31): stage 30 -> 31 for Alex (00000014)NGClean (93 40): stage 31 -> 40 for Alex (00000014)NGClean (93 200): stage 40 -> 200 for Alex (00000014)NGClean (93 1000): stage 200 -> 1000 for Alex (00000014)SexoutNGBES (93): SEU: Stage 7.265442 1000 -> 1001SexoutNGBES (93): SEU: Stage 0.014999 1001 -> 3001fnSoNXClr Sexout:TFlags Butch (14000EC4)fnSAU: 14000EC4 (Butch) initial lock state: 1fnSoAC: Removing 1 DO NOT BUY OR TAKE: Debug: Sexout Ac(0E000ADE)'s from Butch(14000EC4)fnSoAC: Removing 1 SexoutNG nude body M1(0E0027A6)'s from Butch(14000EC4)fnSAU: 14000EC4 (Butch) final lock state: 0fnSoNXClr Sexout:Core:Cleanup Butch (14000EC4)Rescaling A to 1.000000fnSoNXClr Sexout:TFlags Alex (00000014)fnSAU: 00000014 (Alex) initial lock state: 1fnSoAC: Removing 1 DO NOT BUY OR TAKE: Debug: Sexout Ac(0E000ADE)'s from Alex(00000014)fnSoAC: Removing 1 SexoutNG nude body M1(0E0027A6)'s from Alex(00000014)fnSAU: 00000014 (Alex) final lock state: 0fnSoNXClr Sexout:Core:Cleanup Alex (00000014)Rescaling B to 1.000000SexoutNGBES (93): SEU: Stage 0.000000 3001 -> 3002SexoutNGPCQ: PCFe1: 1 1 1 0 0 0 1SexoutNGPCQ: PCFe2: 1 1 1 0 0 0 1NGCBQ1: Casting Finish PosControl (2E000AEC) on Alex (00000014)NGCBQ1: Casting Finish PosControl (2E000AEC) on Alex (00000014)NGCBQ1: Casting Finish PosControl (2E000AEC) on Alex (00000014)NGCBQ1: Casting Stop Sexout Sound (2F006ED3) on Alex (00000014)>>>> Here the PC ends stuck in a pose from my screenshot.GetPlayerControlsDisabledGetPlayerControlsDisabled: 1.00 Movement - Disabled Looking - Enabled Pipboy - Disabled Fighting - Disabled POV Switch - Enabled Rollover Text - Enabled Sneaking - DisabledGetCurrentPackageGetCurrentPackage >> [00000000] GetRestrainedAlex is not restrained>>>> Enabling controlsEnablePlayerControlsGetPlayerControlsDisabledGetPlayerControlsDisabled: 0.00 Movement - Enabled Looking - Enabled Pipboy - Enabled Fighting - Enabled POV Switch - Enabled Rollover Text - Enabled Sneaking - EnabledGetCurrentPackageGetCurrentPackage >> [00000000] GetRestrainedAlex is not restrained>>>> Now the PC is still in the pose, but can also jump on place.RemoveScriptPackage>>>> After RemoveScriptPackage the pose is gone, the PC acts as normal. GetPlayerControlsDisabledGetPlayerControlsDisabled: 0.00 Movement - Enabled Looking - Enabled Pipboy - Enabled Fighting - Enabled POV Switch - Enabled Rollover Text - Enabled Sneaking - EnabledGetCurrentPackageGetCurrentPackage >> [00000000] GetRestrainedAlex is not restrained
And here is the log when I don't use "DisablePlayerControls 1 1 1 0 0 0 1" before RunFull. Visually I've noticed that the PC briefly plays something similar to the pose from the screenshot after the act is finished (a reset animation maybe?), so probably the controls are being forced on him mid-animation, and it screws something up engine-wise?
SetConsoleOutputFilename >> '__SO_Log_002.log'_______________________________let rActor := GetCrosshairRef___call fnSexoutActRunFull (Ar_Map "ActorA"::rActor "ActorB"::PlayerRef "Flags"::(Ar_List "rape") "Raper"::rActor "bDontRedressA"::1 "bDontRedressB"::1)fnSARF: Locked actor (14000EC4 -- Butch).fnSARF: Locked actor (00000014 -- Alex).fnSARF: Invoking CIOS on Alex (00000014)____________________________CSES: Starting for: Alex(00000014)Sexout Version is: '95(b4)fnCSE (93): from Alex (00000014) on Alex (00000014)fnCSE (93): is actorfnCSE (93): CV2fnSoCSv: Alex (00000014) 'Sexout:Start::' -> Alex (00000014) 'Sexout:Start:93::'fnSoNXClr Sexout:Start:: Alex (00000014)fnCSE (93): Returning 1fnSNNXA: T:Alex (00000014), K:Sexout:Start:93::fnSNNXA: Final A:Butch(14000EC4)fnSNNXA: Final B:Alex(00000014)fnSNNXA: Final C:<no name>(00000000)fnSNNXA: Final X:<no name>(00000000)CSES: Normalize finished, checking sanitizer. : fnSexoutGetArArgs Alex(00000014), Sexout:Start:93::NGSAN: Validating animation choicesfnSoRandAct: In randomizerfnSoRandAct: 2 actors, skeletons: MM : fnSexoutGetArArgs Alex(00000014), Sexout:Start:93::Sexout Random Picker: 162 animations possible for these actorsSexout Random Picker: 28 animations left after filtering on flag: rapeSexout Random Picker: 28 animations left after filtering on plugin: *Any* (No furniture)Sexout Random Picker: 28 animations left after filtering against black listValid anim choices: 204, 404, 603, 604, 631, 634, 707, 901, 931, 203, 603, 604, 606, 607, 608, 615, 631, 632, 633, 634, 635, 636, 638, 639, 648, 821, 905, 909, fnSAN: Actor: Alex (Sexout:Start:93:, isAnal: 1, isOral: 0, isVaginal: 0NGSAN (93): Returning 0.000000: SUCCESSCSES: SES done with CSE=1 SAN=0.000000, Stage=0 SEU next.CSES: ActorB validity is 1fnSAVa: Lock present but invalid, clearing.CSES: ActorA validity is 1fnSAVa: Lock present but invalid, clearing.CSES (93): initializing actorsCSES (93): init actorA Alex (00000014), Butch (14000EC4), Alex (00000014)fnSoNXClr Sexout:Started:: Butch (14000EC4)fnSoCSv: Alex (00000014) 'Sexout:Start:93::' -> Butch (14000EC4) 'Sexout:Started::'fnSoNXClr Sexout:Start:93:: Butch (14000EC4)CSES (93): init actorB Alex (00000014), Alex (00000014), Alex (00000014)fnSoNXClr Sexout:Started:: Alex (00000014)fnSoCSv: Alex (00000014) 'Sexout:Start:93::' -> Alex (00000014) 'Sexout:Started::'CSES (93): clearing selfkeyfnSoNXClr Sexout:Start:93:: Alex (00000014)CSES (93): kickoffCSES (93): Transitioning from 0 -> 1000fnSoCUUID: Cleaning 189_16.3381_06C37198uuid1[189_16.3381_06C37198][0] = rapeuuidkeys:[sexout:started::arargs:flags] = 189_16.3381_06C37198CSES (93): Transitioning from 1000 -> 1001fnSAL: 14000EC4 (Butch) initial lock state: 0fnSAL: 14000EC4 (Butch) final lock state: 1 0Scaling A from 1.000000 to 1.0fnSAL: 00000014 (Alex) initial lock state: 0fnSAL: 00000014 (Alex) final lock state: 1 0Scaling B from 1.000000 to 1.0fnSoNXClr Sexout:Core:Cleanup Butch (14000EC4)fnSoNXClr Sexout:Core:Cleanup Alex (00000014)SexoutNGBES (93): SES: Setting global hook vars.SexoutNGBES (93): SES: Global hook triggered, SES moving to BES stage 0.SexoutNGBES (93): SEU: Stage 0.027000 0 -> 10SexoutNGPCQ: PCFd1: 0 0 0 0 0 0 0soAPS: StartNGCBQ1: Casting Start PosControl (2E000AE8) on Alex (00000014)NGCBQ1: Casting Start Sexout Sound (2F001935) on Alex (00000014)soAPS: StartSexoutNGBES (93): SEU: Stage 0.109667 10 -> 11SexoutNGBES (93): Casting undress on player.Pos: Waiting for Butch to gain sexout PosXSexoutNGBES (93): SEU: Stage 0.030001 11 -> 12SNGUndress (93): Found Alex's Leather Jacket (35002254) on Alex (00000014)SNGUndress (93): Added Alex's Leather Jacket (35002254) on Alex (00000014)SNGUndress (93): Found Alex's Cool Sunglasses (35002255) on Alex (00000014)SNGUndress (93): Found A Cigarette (28003D54) on Alex (00000014)SNGUndress (93): Alex (00000014) undress stage transition from 0 -> 10SNGUndress (93): Removing 'Alex's Leather Jacket' from Alex (00000014)SNGUndress (93): Alex (00000014) undress stage transition from 10 -> 20SNGUndress (93): Alex (00000014) undress stage transition from 20 -> 100SNGUndress (93): Alex (00000014) undress stage transition from 100 -> 110SexoutNGBES (93): SEU: Stage 0.559002 12 -> 13Pos: Waiting for Butch to gain sexout PosXSexoutNGBES (93): SEU: Stage 1.040997 13 -> 14Pos: Waiting for Butch to gain sexout PosXSexoutNGBES (93): SEU: Stage 1.029991 14 -> 15SexoutNGBES (93): SEU: Stage 0.136999 15 -> 16SexoutNGBES (93): SEU: Stage 0.018000 16 -> 100soAPS - Plugin: Sexout.esm, anim: 638soAPS: ActorA is: Butch. mX: -0, mY: 0, mZ: 0, heading: 304Sexout: Butch (14000EC4) PlayIdle SNG638ASNGUndress (93): Found Tunnel Snake Outfit (14000EB8) on Butch (14000EC4)SNGUndress (93): Added Tunnel Snake Outfit (14000EB8) on Butch (14000EC4)SNGUndress (93): Found Pip-Boy Glove (00025B83) on Butch (14000EC4)SNGUndress (93): Added Pip-Boy Glove (00025B83) on Butch (14000EC4)SNGUndress (93): Found Marksman Carbine (00106FEA) on Butch (14000EC4)SNGUndress (93): Added Marksman Carbine (00106FEA) on Butch (14000EC4)SNGUndress (93): Found Aviator Sunglasses Black with golden frame (27012D1C) on Butch (14000EC4)SNGUndress (93): Added Aviator Sunglasses Black with golden frame (27012D1C) on Butch (14000EC4)SNGUndress (93): Found A Cigarette (28003D54) on Butch (14000EC4)SNGUndress (93): Butch (14000EC4) undress stage transition from 0 -> 10SNGUndress (93): Removing 'Tunnel Snake Outfit' from Butch (14000EC4)SNGUndress (93): Removing 'Pip-Boy Glove' from Butch (14000EC4)SNGUndress (93): Removing 'Marksman Carbine' from Butch (14000EC4)SNGUndress (93): Removing 'Aviator Sunglasses Black with golden frame' from Butch (14000EC4)soAPS - Plugin: Sexout.esm, anim: 638soAPS: ActorB is: Alex. mX: -0, mY: 0, mZ: 0, heading: 304Sexout: Alex (00000014) PlayIdle SNG638BSexoutNGBES (93): SEU: Stage 0.023001 100 -> 101SNGUndress (93): Butch (14000EC4) undress stage transition from 10 -> 20Positioning Active. Alex ( selected** Dumping Array #48 **Refs: 1 Owner 2E: SexoutPosNew.esp[ A ] : Butch (14000EC4)[ B ] : Alex (00000014)SNGUndress (93): Butch (14000EC4) undress stage transition from 20 -> 100SNGUndress (93): Butch (14000EC4) undress stage transition from 100 -> 110Sexout: Alex (00000014) PlayIdle SNG638BSexoutNGBES (93): SEU: Stage 15.011974 101 -> 200SexoutNGBES (93): SEU: Stage 0.016998 200 -> 201SexoutNGBES (93): SEU: Stage 0.288006 201 -> 300NGK Knockdown Butch 382NGK Knockdown Alex 977SexoutNGBES (93): SEU: Stage 0.524994 300 -> 301fnSoNXClr Sexout:Start:: Alex (00000014)NGClean (93 0): Started on 'Butch' (14000EC4)NGClean (93 20): T=Butch (14000EC4) CBD=<no name> (00000000)fnSoNXClr Sexout:Started:: Butch (14000EC4)NGClean (93 20): stage 0 -> 20 for Butch (14000EC4)NGClean (93 0): Started on 'Alex' (00000014)NGClean (93 20): T=Alex (00000014) CBD=<no name> (00000000)fnSoNXClr Sexout:Started:: Alex (00000014)NGClean (93 20): stage 0 -> 20 for Alex (00000014)SexoutNGBES (93): SEU: Stage 0.021999 301 -> 1000NGClean (93 30): stage 20 -> 30 for Butch (14000EC4)SNGUndress (93): Butch (14000EC4) undress stage transition from 110 -> 1000SNGUndress (93): Butch (14000EC4) undress stage transition from 1000 -> 2000NGClean (93 31): stage 30 -> 31 for Butch (14000EC4)NGClean (93 40): stage 31 -> 40 for Butch (14000EC4)NGClean (93 200): stage 40 -> 200 for Butch (14000EC4)NGClean (93 1000): stage 200 -> 1000 for Butch (14000EC4)NGClean (93 30): stage 20 -> 30 for Alex (00000014)SNGUndress (93): Alex (00000014) undress stage transition from 110 -> 1000SNGUndress (93): Alex (00000014) undress stage transition from 1000 -> 2000NGClean (93 31): stage 30 -> 31 for Alex (00000014)NGClean (93 40): stage 31 -> 40 for Alex (00000014)NGClean (93 200): stage 40 -> 200 for Alex (00000014)NGClean (93 1000): stage 200 -> 1000 for Alex (00000014)SexoutNGBES (93): SEU: Stage 7.075024 1000 -> 1001SexoutNGBES (93): SEU: Stage 0.015999 1001 -> 3001fnSoNXClr Sexout:TFlags Butch (14000EC4)fnSAU: 14000EC4 (Butch) initial lock state: 1fnSoAC: Removing 1 DO NOT BUY OR TAKE: Debug: Sexout Ac(0E000ADE)'s from Butch(14000EC4)fnSoAC: Removing 1 SexoutNG nude body M1(0E0027A6)'s from Butch(14000EC4)fnSAU: 14000EC4 (Butch) final lock state: 0fnSoNXClr Sexout:Core:Cleanup Butch (14000EC4)Rescaling A to 1.000000fnSoNXClr Sexout:TFlags Alex (00000014)fnSAU: 00000014 (Alex) initial lock state: 1fnSoAC: Removing 1 DO NOT BUY OR TAKE: Debug: Sexout Ac(0E000ADE)'s from Alex(00000014)fnSoAC: Removing 1 SexoutNG nude body M1(0E0027A6)'s from Alex(00000014)fnSAU: 00000014 (Alex) final lock state: 0fnSoNXClr Sexout:Core:Cleanup Alex (00000014)Rescaling B to 1.000000SexoutNGBES (93): SEU: Stage 0.000000 3001 -> 3002SexoutNGPCQ: PCFe1: 0 0 0 0 0 0 0SexoutNGPCQ: PCFe2: 0 0 0 0 0 0 0NGCBQ1: Casting Finish PosControl (2E000AEC) on Alex (00000014)NGCBQ1: Casting Stop Sexout Sound (2F006ED3) on Alex (00000014)
I've compared the two in Beyond Compare, and the only significant difference between them is in 4 additional calls in the first log:
...NGCBQ1: Casting Start PosControl (2E000AE8) on Alex (00000014)NGCBQ1: Casting Start PosControl (2E000AE8) on Alex (00000014)...NGCBQ1: Casting Finish PosControl (2E000AEC) on Alex (00000014)NGCBQ1: Casting Finish PosControl (2E000AEC) on Alex (00000014)...
Oh, and it most frequently happens after casting SexoutNGFinishNow.0 -
Weird, but I've removed all of the fail-safes and can't seem to reproduce this particular behavior on the latest build of Sexout. The PC is now restrained back correctly and is not stuck. Might have been a timing conflict between different calls which solved itself when you changed other stuff?
I'd say I probably might have had some bugs in my scripts, but previously the PC got stuck even on a simple test call:
let rActor := GetCrosshairRefif eval (IsFormValid rActor) && (rActor.IsActor) DisablePlayerControls 1 1 1 0 0 0 1 call fnSexoutActRunFull (Ar_Map "ActorA"::rActor "ActorB"::PlayerRef "Flags"::(Ar_List "rape") "Raper"::rActor "bDontRedressA"::1 "bDontRedressB"::1)endif
So, let's assume it's solved for now
The PC still gets kicked out of his conditional idles on act start, but I'll look into it, maybe the animation itself is bugged, or an engine issue. Not sure how to check the latter although...EDIT:
Never mind about animations, I've looked through some info on them, and poking around a little in NifScope seems to have done the trick (although I can't just use vanilla versions now). The weird thing is that the "bug" seemed to be synchronized with Sexout animations start, maybe the game reevaluates animations in packs or something?
0 -
Odessa, have you looked into the Player restrain/packages issue? I've posted a more detailed explanation in the Api thread. Especially the one where the PC is affected when he is not a participant, I think it may have something to do with the main spell being cast on the Player. Maybe some stuff is being executed on Self instead of NPCs?0 -
Hmm, just use a stringmap array as an input arg, like in RunFull? And then just check if you have the particular key defined or not.This is what I'm already doing. I just don't want to repeat the full call line in that wrapper for every variation of call I need. Unless you're talking about building the actual call line itself, in which case, I'm just not that smart, or if I was I've forgotten it.
scn fnMyRunFull; Argsarray_var arrArgs; Local varsint iIndexref rActorref rItemarray_var arrActorRolesarray_var arrSexoutCallstring_var strTempstring_var strActorRolebegin Function {arrArgs} let arrSexoutCall := Ar_Construct "stringmap" if eval !(arrArgs) SetFunctionValue 0 return endif if eval !(Ar_Size arrArgs) SetFunctionValue 0 return endif if eval !(Ar_HasKey arrArgs "Actors") SetFunctionValue 0 return else if eval (Ar_Size arrArgs["Actors"]) < 1 SetFunctionValue 0 return endif endif ;; and many-many other boring checks... let arrActorRoles := Ar_List "A" "B" "C" "X" let iIndex := 0 while iIndex < (Ar_Size arrArgs["Actors"]) let rActor := arrArgs["Actors"][iIndex] let strActorRole := arrActorRoles[iIndex] let strTemp := Sv_Construct "Actor%z" strActorRole let arrSexoutCall[strTemp] := rActor let strTemp := Sv_Construct "bDontUndress%z" strActorRole let arrSexoutCall[strTemp] := arrArgs["DontUndress"][iIndex] let strTemp := Sv_Construct "CBItem%z" strActorRole if eval arrArgs["CBItems"][iIndex] let rItem := arrArgs["CBItems"][iIndex] if eval IsFormValid rItem let arrSexoutCall[strTemp] := arrArgs["CBItems"][iIndex] endif endif ;; etc, etc... let iIndex += 1 loop Sv_Destruct strActorRole Sv_Destruct strTemp if eval (Ar_HasKey arrArgs "Flags") if eval (Ar_Size arrArgs["Flags"]) > 0 arrSexoutCall["Flags"] := Ar_Copy arrArgs["Flags"] endif else ;; and so on, and so on... SetFunctionValue (call fnSexoutActRunFull (arrSexoutCall)) endand use it somewhat like that:
;; some codelet arrMyCall := Ar_Construct "stringmap"let arrMyCall["Actors"] := Ar_List rActorA rActorBlet arrMyCall["Raper"] := rActorAlet arrMyCall["DontUndress"] := Ar_List 1 0let arrMyCall["CBItems"] := Ar_List Token 0let arrMyCall["Flags"] := Ar_List "Vaginal" "Miss";; etc.let bSuccess := call fnMyRunFull arrMyCall;; some code
Obviously, quite sketchy and untested.
0 -
I believe in that case the best way would be to write your own "wrapper" function which will accept any kind of values you want it too, then filter out everything invalid for Sexout and build a proper RunFull call. That way you stay independent from the API in your other scripts and will have to make changes in only one place in case something in the API changes again.In other words your example doesn't fill my needs. ie. What if ActorB is null in your example? Since you can't have null values, you would have to make another full call with the actorB omitted. At least, that's how I understood it.
0 -
Odessa, thanks for the fnSexoutGetAnimsForActors function, it's cool!
t3589, you can set all those values via a single fnSexoutActRunFull call, for example
let Flags := Ar_List "Vaginal" "Miss"Call fnSexoutActSetRef "Raper" rActorACall fnSexoutActSetRef "CBItemA" TokenCall fnSexoutActSetInt "bDontUndressA" 1Call fnSexoutActRunFull (Ar_Map "ActorA"::rActorA, "ActorB"::rActorB, "Flags"::Flags)
can be easily turned into:let Flags := Ar_List "Vaginal" "Miss"call fnSexoutActRunFull (Ar_Map "ActorA"::rActorA, "ActorB"::rActorB, "Flags"::Flags, "Raper"::rActorA, "CBItemA"::Token, "bDontUndressA"::1)
or pass rActorA, Token, 1, etc. as variables if they're supposed to be changing in dialogues or something. If some variable is null it will be automatically discarded I think, but haven't tested that.0 -
I've just made a few checks and there's definitely a bug somewhere (maybe the PC gets restrained prematurely?). If I start RunFull on a restrained PC (I had movement, pipboy, fighting and sneaking disabled, to be specific), the act runs fine, but the PC ends up in a funny pose, which looks like a hang up animation, and acts as if everything but looking around is off. Well, he can also go to 1st person POV. GetPlayerControlsDisabled returns the states I've assigned before, EnablePlayerControls sets everything to enabled, but the PC is still stuck. Here's a screenshot, you can see the pose there:sexout should check the restrained state of actors/player controls (if player involved) and reset it to that when its finished.

AJ told me in another thread that you can assign a package to the PC, and after executing RemoveScriptPackage on him he is somewhat reset to a default standing pose and can be unrestrained as expected. So I guess something inside Sexout maybe forgets to cleanup a package?
I can unrestrain the PC pre-act and restrain him back in a post-act spell as a workaround, which works fine, but still doesn't solve the issue when he gets unrestrained without actually participating in the act.
That... is something I'll maybe leave for the future for nowThere is a penis prop floating around the forum somewhere which you may be able to use over the top of clothing, made by Amra for futa if I recall correctly.

***
Update
I'm using AJ's advice on resetting stuck animations with a reset.kf I've found in Sexout (there are several, I've picked the one with the most recent date: "Characters\_Male\IdleAnims\XXXAnims\reset.kf"), and it works fine.
I've also found a "Characters\_Male\IdleAnims\Expressions\reset.kf" which is I suppose for resetting NPC's facial expressions (they've got those ugly faces when kicked out of combat sometimes), but it has a 50/50 chance of making an NPC stuck instead. Is there something special about how to use it?
***
Update 2
NX_GetEVFl "Sexout:Started::Duration" always returns 0.0000 for me, does it mean "use default MCM duration"?. Other variables look right, and I'm reading them from a spell added to the SexoutNGFLGlobalCBStartS list.
0 -
nkAlex, I don't know why you call it "majorly bugged" since only a few people out of at least 2k who downloaded report bugs and I tested it a lot when I was making it and I'd never leave my work if I wasn't sure it was at least playable. Anyway I hope you have strong reasons to say so or otherwise I'd think you're seeking attention. Keep up the good work, nice fix for companions! When you're done you're free to create your own file page, no need to upload fixes in esp files anymore.
I was actually referring to my own "wip" at the time, sorry for the misunderstanding

I was initially intending to modify and expand companions options, starting with not requiring to assign only 3 companions and using everyone available instead. But it lead to reworking other stuff, so for now I mostly finished the "victim mode". The basic logic is mostly the same, but I completely changed how the turns are queued (you now get random turns count for each victim), the PC can bail out and leave the companions to take one for the team (I'll probably add a vice-versa option later), also player's/NPCs' orientations should be taken into consideration (adjustable in settings).
There will probably be some work on the dialogues either, they seem to be mostly applicable to a female PC.
The "math" works fine, but I still got issues with packages and animations (the game engine has its own unconventional logic at times, I think...), you can find a lot of my posts in "Scripting Help 101" and "Sexout API" threads

The next will probably be the "aggressor mode", and then the companions (that one I really wanted to work with XD), and I think I'll mostly leave slavery intact (not much interested in that), only update Sexout calls and maybe some other stuff intertwined with other modes

I'll send you an .esp in its current state (check PMs), it's playable apart from beforementioned bugs, but mostly untested so I don't want to release it yet in case it actually breaks something

For now, it is dependent on your .esm, but adds its own MCM (I'm slowly moving stuff to another "namespace"), so you'll have to disable "victim mode" in your copy, otherwise there will be 2 copies running and, well, that'll surely end badly
In my copy, only "victim mode" and "options" are actually functional, don't enable anything else, it is either empty or completely untested! It also contains some modifications to the "companions mode" which are bind to your .esm, I'm not sure, it's on hold for later.2 -
Thanks! But if I start the act myself with RunFull the duration should be default, right?Your timeout check isn't reliable if an act sets the time manually, although you can find this using: SexActor.NX_GetEVFl "Sexout:Started::duration"
Yeah, I use it as a final failsafe measure in case something went wrong (or somebody comes in and starts shooting at everyone mid-act. Maybe also an OnDeath event may be required).I believe if you set a duration manually, spunk does not adjust it. You can also force an act to end early using: SexActor.CIOS SexoutNGFinishNow
That may be probably intertwined somehow with an animation reset or something, since the PC gets kicked out of the idles. Restraining right after RunFull doesn't help, that behavior is a bit delayed and is triggered by some spell, I think. Most probably about the time the animations start playing.Controls being enabled/disabled when player not involved: it is possible, definitely a bug if so, will look into it.
Also, do I need to urestrain the PC before RunFull?
May be a bug, since there are mods which undress NPCs and they stay naked.bDontRedress on NPCs: I've noticed this doesn't work too, might be an engine issue but I will check it sexout side.
So those "safe" clothes are supposed to bind to another slots or not contain a body? Is there maybe some tutorial or an article or something on game mechanics in this department?bDontUndress on males: The way the engine works, most clothing (slot 2) contains a body, so there is nothing to stick out. It would be possible to achieve this using a penis prop (like the strap on) for males.

Ok, thanksMultiple actors flagged as rapist: Checking now, if you set A or C as raper in a 3P then both are counted as such, and B as rapee. If you set B as raper, then A and C are counted as rapee.
0 -
Flags are filtered on in the order you specify them, with any that lead to 0 choices being ignored, so you should specify them in the order of importance.
Yeah, I got that. Still, there may be no animation for a threesome even for one flag.
Currently, ActRunFull returns 0 if any of the actors are in use or actorA is invalid, but a return of 1 doesn't guarantee it will complete- there are more checks later down the line.
Oh, okay. So, I'm still keeping the timeout checks

I can add a new UDF GetAnimsForActors which returns all possible animations for a specified actor combination quite easily.
That would be really awesome!

BTW, speaking about timeout checks, now I calculate the maximum act duration as:
dfTime + max(nKODurationRapee, nKODurationRapist) + 9
plus maybe a Spunk tolerance will be added later on. 9 is just randomly handpicked as an additional failsafe tolerance
After that duration since RunFull call the actors will be forcefully kicked out of action if they are still "InUse". Is this about right, or are there any additional timings to be considered?***
Update
Is it possible that Sexout kicks the PC out of movement control restraints at some point even when he isn't participating in the act? I've noticed it happens on either RunFull start or finish (most probably on start, I think, about when Sexout anims start playing) — the PC ends up with locked fighting and sneaking, everything else is unlocked (I don't use this particular combination in my scripts), and also gets kicked out any currently playing idle (he just stands there doing nothing, although PickIdle shows correct current idle in the console, but it doesn't kick in).
And also some small things:
- Do "bDontRedress{?}"::1 flags work on NPCs? They seem to work fine on the Player, but any NPCs instantly redress right after the act regardless of this setting. The same is true for redressing options in the MCM — work for Player only.
- The "bDontUndress{?}"::1 flags seem to work fine, although aren't any particular body parts supposed to, err, stick out through clothing this way?
Or is this technically not possible (then why are there safe lists for crotchless/topless apparel?) - How do I mark two actors in a threesome as rapists? The "Raper"::ref flag only takes one...
0 -
OK, maybe I'll try it later...It doesn't really matter, any package will have that result. And yes the equipment flags should work. I remember I was removescriptpackage via console without passing any parameter and it was working to unrestrain me, so I believe it doesn't really care what package you're triggering.
Hmm, what UDF do you mean? I was mostly talking about stuff I tried via console in the previous posts, and the UDF posted before was to search for and remove a particular package, it's just a failsafe measure in case something went bad and a package had been added to an NPC multiple times.My opinion? I don't understand why using such a complicated UDF just to trigger a simple package.
The actual calling UDF which adds packages is quite simple and basically assigns a correct package to an NPC based on its scripted role.
Problem is, RemovePackageAt doesn't remove package for some rare NPCs (or maybe removes it with a very long lag?)
, and then a creepy dude clapping his hands starts following me all over the place.I couldn't find any documentation on AddPackageAt/RemovePackageAt besides a list of argument, so if there are some caveats, I'm not aware.
The problematic NPC is just a random vanilla King from Freeside, and I believe it's the same one every time...
0 -
Added a spell cast, looks like at least the animation kicks in faster now, thanksIt's probably the most reliable method, and it's instantaneous. It requires to be called inside a spell casted on the player, or in general I guess it could work as object script attached to a ref too; it doesn't work as UDF, unless it's called by one of the previous methods.
That dead link was wrong anyway, I know what they're talking about and it's not true, so don't worry.

How do I restrain the PC with a package? With a zero radius? Will things like "Weapon unequipped" also work?You can, but you won't have the expected result (= your character won't start roaming because you triggered a wander package
)The only effect you achieve with a package on the player is blocking him to do everything else, so it's like if you are restraining him, but in addiction you can trigger the animations specified inside the package itself.
Still, the packages continue to give all kinds of issues. Using the reset.kf did the trick with releasing animation-stuck NPCs, I think. But sometimes a package is not removed by "RemovePackageAt" for some reason, i.e. it still shows in the console as the active one even after trying to remove it several times. Randomly trying stuff like EVP, ResetAI, RemovePackageAt consistently sometimes does the trick. As initiating a combat does.
0 -
Working on a, well, reworking a lot of stuff inside this mod. As for now, the victim mode is mostly functional, but is still majorly bugged.
2 -
I'm pretty sure it's the animation. Ok, thanks, I'll look into what you suggested.if you are SURE that the package is removed (i.e. checked it via console), then it could be the animation is glitching. Animations are everything but perfect and they can mess your game quite easily. It's better making some reset after an idle, you can find a reset.kf inside Sexout too, you call it on the npc and it will hopefully stop the animations. If it doesn't work, he's probably playing a peculiar kind of animation (i.e. a clamped animation setted as loop), in that case you can reset if you playgroup equip for example.
From what I've read on geck.bethsoft.com PlayIdle seems even less reliable and requires certain conditions when used on the Player. There is also a link to some workarounds, but it's dead...Yes that method requires some time to kick in, that time is variable (it's cyclic). And it's not reliable, if you want to force an animation you should use playidle.
Can I actually use packages on the PC? I supposed they're only applicable to NPCs...OR addscriptpackage, which removes you the need to restrain movements too.
DisablePlayerControls is also somewhat bugged it seems, sometimes it interferes with an animation or something like that, and the PC gets stuck restrained in a funny pose and can't be unrestrained even with console commands, only reloading a save helps. For now I restrain Player when the scene starts -> unrestrain right before a Sexout RunFull call -> restrain again right after -> GoTo 1. But it gets the Player stuck from time to time any way.
0 -
There's some weird thing with the way packages work I can't understand.
What I'm trying to do is quite simple: if a quest variable is in particular range the NPCs should play an idle defined in the package. The package includes those conditions. "Must complete", "Must reach location", "Continue if PC near" are unchecked, package type is Wander, location is "Near current location" with a small radius.
To add a package I use:
rActor.AddPackageAt MyPackage 0rActor.EVP
and that works fine (most of the time, any way).To remove I use a function (just to be safe in case something went wrong and there is more than one copy):
scn FnRemoveScriptPackage; Argsref rPackage; Local varsref rMyselfint iPackagesCoutint iPackageIndexref rCurrentPackagebegin Function {rPackage} let rMyself := GetSelf let iPackagesCout := rMyself.GetPackageCount let iPackageIndex := iPackagesCout - 1 while iPackageIndex >= 0 let rCurrentPackage := GetNthPackage iPackageIndex if rCurrentPackage == rPackage rMyself.RemovePackageAt iPackageIndex endif let iPackageIndex -= 1 loopendand call it:
rActor.call FnRemoveScriptPackage MyPackagerActor.EVP
And for some actors it works fine, but for others (especially companions) the animation from the added/removed package keeps playing even after the package has been removed (GetCurrentPackage returns a correct vanilla/companion's appropriate package in console output). EVP and ResetAI don't help in any way, but if you talk to them or initiate a combat nearby — the correct package immediately kicks in.******
Another animation-related question.
If certain conditions are not met, the PC is supposed to sit and wait. I restrain him with "DisablePlayerControls 1 1 1 0 0 0 0" and add a new idle with conditions "GetIsId NPC:Player == 1" AND "GetQuestVariable MyQuest.iStage > 50" AND "GetQuestVariable MyQuest.iStage < 200". It works mostly fine, but is not completely reliable, i.e. it sometimes takes a while for the animation to kick in, and the PC keeps to interrupt animation and stand up for a couple of seconds from time to time.
0 -
Awesome! I'll check it outMostly fixed/added in '95 beta 3


I think this way I can try initiating a threesome, and if it fails, kick ActorC out and try again. \
Does false function value mean that some pre-run checks have failed, or just any kind of error?
***
Update:
Didn't even have to modify my function, RunFull now excludes the "rape" flag if no anims match participating actors

But in the future, will it be possible to get a function returning "animation compatibility" for an actors+flags combination? That way the incompatible combinations for a desired action can be excluded in advance, should be faster and more fail-proof than including a fully functional RunFull call inside a loop with general actor checks
0 -
fnSexoutGetAnimIntersect is not part of the public API and so is subject to change without notice, please don't call it from your mod.
If there are no animations matching your flags, you will get "Warning! Too many flags to match any animation. Ignoring flag: XXX" messages, meaning sexout has dropped one of the calling mod's flags to try and find a match.
The 'black list ignored' message means that all animations matching your flags have been blacklisted by the user, so it ignores their preferences and selects from them anyway.
----
Currently the gender check is after the flags check, meaning if the flags filtered all options down to MFM but your actors are MFF you get nothing. This is probably the issue you are hitting. Fixing it has been on the todo list for a while, I'll add something to '95 beta 3, hopefully today.
More:
The way sexout works, fnSexoutGetAnimIntersect does:
1a) Deletes all unknown flags
1b) Takes the subset of animation matching flag #1, which is very fast because animations are pre-sorted by flag in an array.
1c) Takes the subset of animations matching #2, then finds the intersection with above, if this is empty, flag #2 is ignored.
1d) Repeat (1c) for next flag, until no flags remain.
2) Filter results by plugin specified. If no animations match your plugin, you get nothing
.3) Filter results by gender/skeleton. Creatures have their skeleton as flag #1 as a workaround, but for humans, if no animations match gender you get nothing
.4) Filter results by the user's anim blacklist, but if nothing remains ignore this step.
---
Okay, having typed all this out, I can see the solution: add 'sort' keys to every animdef, similar to flags but for gender/plugin. Coming soon.
I've looked into the "fnSexoutGetAnimIntersect" function and it seem that it will return "Warning! Black list ignored- All matching animations were black listed." every time the final array is empty. I don't have anything blacklisted (haven't even touched this function) and I believe in my case it fails on "gender/species filter" when the "rape" flag is set. Probably it fails when a MMF combination is met? The function also seems to auto-blacklists ZAZ animations, I believe these are BDSM animations requiring special items? Sorry, still new here )
I've got my own functions which (prior to calling RunFull) check:
- whether the actors are suitable (i.e. not dead, disabled and so on, valid for Sexout, not in use, some mod specific checks, etc.);
- whether the actors A-B, C-B are orientation compatible and whether a particular combination (MM, FF, MF) is enabled in settings;
- whether the actors are "scene compatible" — like creatures can only be ActorA with no threesomes and so on.
The final check I can't run externally is the "animations" compatibility, so when RunFull fails the calling script can't tell if it was because of an incompatibility or some other/random error and can't exclude an incompatible combination from its list.
How about making fnSexoutActRunFull return 1 if all checks passed and some -int error code on failure? This can be catched in the calling script and processed accordingly and shouldn't interfere with any existing mods I think
And maybe like there is now a "noAnim" flag there could be also something like "CheckOnly" which will only run the checks and return true or an error code? 
For now, do I have to explicitly disable any MFF and MMF combinations in my checks? Just wanted to keep it "future-compatible" and keep hardcoding stuff like that to a minimum
0 -
Make sure you don't have flags like Must Complete or Continue if PC Near set in the packages.
Thanks! That may have been the case for some of the issues. Also for some reason Niner (that's a companion mod) tends to be a special case: he keeps running the last assigned package even after it has been removed with "RemovePackageAt". Even ResetAI fails, only talking to him helps, that's weird.
Odessa, I've finally paid attention to Sexout debug output and have noticed that it gives a lot of "9.1 Black list ignored- All matching animations were black listed" errors which I believe in my case mean there is just no suitable animation combo for my flags. I've looked for a way to run this "actors animation compatible check" and found the calling function "fnSexoutGetAnimIntersect" and tried to use it, but it is dependent on another function which is dependent on another an so on. Is it somehow possible to perform the animation check prior to running "RunFull"? Otherwise the calling script just doesn't know the reason of failure and keeps trying to run the same incompatible threesome again and again instead of just kicking out ActorC

EDIT: Removing "rape" from the flags list seems to have solved about 90% of the problems... is there something special about it?
0 -
It just seems to me now that when there is a lot of simultaneous action going on, the game engine screws something up or something, because almost every time on the queue end the actors stay locked (InUse = true). And sometimes actors get locked on RunFull call, but nothing happens for (probably) an act duration, they just switch to their usual packages, and then I guess the actors are being released since they return back to the queue.
I also have some packages with idle animations added to the actors, may this be causing any problems?
(The packages which should be played theoretically pre/post/between acts, but NPCs just seem to ignore them most of the time for some reason and also ignore specific conditions inside those packages, even removing all of the packages but one doesn't seem to do the trick half of the time, I don't get it, this game is frustrating %)
EDIT: looks like the packages evaluate their conditions waaay slower than everything else, I've got a condition like "Quest.iStage > 50 AND Quest.iStage < 200", but the NPCs still keep running it even when iStage is 400, 500, etc. EVP doesn't help.
0

Fallout New Vegas GECK / Scripting Help 101
in Fallout Technical Support
Posted
That would be good for a companion manager, bot is not exactly suitable for the situation I want to simulate. I'm currently reworking tomm434's "Unethical Deeds" mod and wanted to implement an option for the "Player as victim" mode so that the PC could choose to "take one for the team" and send away the companions, but they would actually "regroup" and come back a bit later to attack the rapists mid-act