Jump to content

Recommended Posts

3 hours ago, Tlam99 said:

I doubt this can be done.

This mod uses a dll, it probably searchs the exact esp and objects.

FE ID is different to normal, I assume the dll does not felect this.

Hmm I thought so. That explains the patchiness when I tried conversions. OK, so be it.

Very many thanks for your quick response!  ?

Link to comment

Anyone know how to rename a mod in Vortex? If I check the mod folder itself, SoS has retained its proper name, however, Vortex has decided to call it "STEM Additions" which is going to confuse the heck out of me next time I'm trying to do something and am looking for something with either "SoS" or "Schlongs of Skyrim" in the name (cause I will have totally forgotten Vortex decided to be a butt and rename it). 

Link to comment
On 8/3/2022 at 9:01 PM, SafyreStorme said:

Anyone know how to rename a mod in Vortex? If I check the mod folder itself, SoS has retained its proper name, however, Vortex has decided to call it "STEM Additions" which is going to confuse the heck out of me next time I'm trying to do something and am looking for something with either "SoS" or "Schlongs of Skyrim" in the name (cause I will have totally forgotten Vortex decided to be a butt and rename it). 

you can do it by double clicking on the mod, and it will bring out a bar on the right, in the "Mod Name" box at the top, you can change the name

Link to comment
On 11/21/2021 at 4:30 AM, Erstam said:

Great news - PapyrusUtil has been updated to Skyrim AE. That means that this version of SOS, which only depends on SKSE and PapyrusUtil, works on the 1.6.318 exe:

 

SOS PapyrusUtil version Beta 4 (UPDATE).7z 61.39 kB · 30,260 downloads

 

Some important things first:

  1. This is an update to SOS SE and only contains the changed esp and scripts. It's not the full mod. So install the files over your existing SOS installation.
  2. As long as you have a working SKSE and PapyrusUtil (either for AE or older SE versions), you're good to go.
  3. Best remove, hide, or move your SchlongsOfSkyrim.dll. It shouldn't really hurt when it's trying to load, but it will cause warnings in the logs.
  4. I've done no testing on 1.6.318 (I'm running a partially downgraded 1.5.97), but it runs fine on my Skyrim installation, and I'm pretty sure it will also work with the new exe, provided you have installed the requirements. After some testing on 1.6.318 I can confirm that it does work.

So how does this work? I've replaced all the functions from the dll with corresponding functions from PapyrusUtil. It looks like the SOS dll was actually forked from an early version of PapyrusUtil, so many functions are identical.

 

Other functions are emulated in Papyrus script. Of course that's much slower than native code, but I took a lot of effort in optimizing them. Particularly the function that randomly picks a schlong for new actors, depending on race and MCM probabilities. Now it caches the values in lists according to race and gender. For example, the first time a Nord gets a schlong, the process is still slow, but subsequent Nords are schlongified much faster. The cache is invalidated when you install or remove addons, or enable/disable addons for certain races in the MCM, or change their probabilities.

 

Further optimizations have been done all over the place. PapyrusUtil functions were often wrapped in multiple layers of convenience functions. I've inlined those where speed does matter. Also fixed some bugs - for instance, when schlongs have been lost (often due to load order changes), the recovery code would run twice.

 

This version cannot read old exported settings from SOS.json. It's using JsonUtil now (part of PapyrusUtil), and the format is different compared to SchlongsOfSkyrim.dll. But I think it's not a big deal, you can easily export your settings in the new format.

 

 

So after I install this update and let it load over SOS I have to delete the SOS.dll from the data folder to make it work?

Link to comment
On 7/29/2022 at 6:52 PM, Moacir Jr said:

I cant select NPC. I am trying select the folower, or any other, showing E (dialog), then ESC -> System -> MCM Menu -> Scholong of Skyrim -> Player and NPC, and still showing "No Npc Selected".

 

Thanks a lot

 

 

Honestly I'm having the exact same problem myself, both in my Skyrim VR game, and in my older SE game, which I haven't touched in ages... though it's working with another one of my characters in my SE setup. Frankly it's *really* annoying, and I'm not sure what the heck is causing it. :(

Link to comment
On 8/11/2022 at 3:48 AM, Exploited Kiri said:

Oh, Jesus Frelling Christ on a stick people.

 

 

WHICH version of SoS will run with 1.6.353 ???

 

I install the newest I can find, SKSE won't launch with it.

 

If it's older version, DD will tell me it's out of date.

 

 

 

 

 

Should work with 1.6.353.

Link to comment
On 7/22/2022 at 12:38 PM, besinister said:

 

Over on NEXUS in the post section for CBBE 3BA [3BBB] CBBE 3BA (3BBB) at Skyrim Special Edition Nexus - Mods and Community (nexusmods.com) UnholyDKSaeko asks the same question.  Lers98 replied with the following:

 

Go to Data/SKSE/Plugins and open CBPCMasterConfig_SOS.txt
Then copy-paste this:

[ConfigMap]                   
NPC Genitals01 [Gen01]=SOS01
NPC Genitals02 [Gen02]=SOS02
NPC Genitals03 [Gen03]=SOS03
NPC Genitals04 [Gen04]=SOS04
NPC Genitals05 [Gen05]=SOS05
NPC Genitals06 [Gen06]=SOS06
<
#GenitalsLag01=SOS01
#GenitalsLag02=SOS02
#GenitalsLag03=SOS03
#GenitalsLag04=SOS04
#GenitalsLag05=SOS05
#GenitalsLag06=SOS06
>
NPC GenitalsScrotum [GenScrot]=SOSScrotum
GenitalsScrotumLag=SOSScrotum

 

End quote.

It tried it and it seems to have fixed the problem for me.

 

Thanks for this - finally fixed my bent schlongs.

Link to comment
19 hours ago, yhgghdg said:

Whenever I try to download this all I get is this with the mod manager as well as this

 

1st pic means there's a mod that dependent on SOS,

2nd pic you enabled mod that contain same esps/esls that might conflict 

 

you can double click on sos see if any mod that conflicted or use filter to find only esps that might conflict sos

dclickmod.png.301715d2d72b1f20dff1ae6e4e52e951.png

Link to comment
1 hour ago, rageshinobi said:

1st pic means there's a mod that dependent on SOS,

2nd pic you enabled mod that contain same esps/esls that might conflict 

 

you can double click on sos see if any mod that conflicted or use filter to find only esps that might conflict sos

dclickmod.png.301715d2d72b1f20dff1ae6e4e52e951.png

But I have Skyrim and everything on vortex

Link to comment

hi

 

In regards to the SOS mod does anyone know why "Schlongs of Skyrim.bsa" exists?

 

for example one of the scripts in the sos bsa "bladessparringscript.pex" decompiled gives us....

 

Spoiler

;/ Decompiled by Champollion V1.0.1
Source   : BladesSparringScript.psc
Modified : 2016-07-28 20:40:12
Compiled : 2016-07-28 20:40:14
User     : Maximilian
Computer : MARUNAE
/;
scriptName BladesSparringScript extends ReferenceAlias

;-- Properties --------------------------------------
ReferenceAlias property Opponent auto

;-- Variables ---------------------------------------

;-- Functions ---------------------------------------

; Skipped compiler generated GetState

; Skipped compiler generated GotoState

function OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, Bool abPowerAttack, Bool abSneakAttack, Bool abBashAttack, Bool abHitBlocked)

    if akAggressor != Opponent.GetRef()
        if (akSource as weapon) as Bool || (akSource as spell) as Bool && (akSource as spell).IsHostile() || (akSource as scroll) as Bool
            self.GetOwningQuest().SetStage(300)
        endIf
    endIf
endFunction

 

skyrims native pex equivalent gives us ...

 

Spoiler

;/ Decompiled by Champollion V1.0.1
Source   : BladesSparringScript.psc
Modified : 2011-10-03 19:27:52
Compiled : 2021-12-15 19:06:47
User     : builds
Computer : RKVBGSBUILD08
/;
scriptName BladesSparringScript extends ReferenceAlias

;-- Properties --------------------------------------
ReferenceAlias property Opponent auto

;-- Variables ---------------------------------------

;-- Functions ---------------------------------------

; Skipped compiler generated GetState

; Skipped compiler generated GotoState

function OnHit(ObjectReference akAggressor, Form akWeapon, Projectile akProjectile, Bool abPowerAttack, Bool abSneakAttack, Bool abBashAttack, Bool abHitBlocked)

    if akAggressor != Opponent.GetRef()
        self.GetOwningQuest().SetStage(300)
    endIf
endFunction

function OnMagicEffectApply(ObjectReference akCaster, MagicEffect akEffect)

    if akCaster != Opponent.GetRef() && akCaster != self.GetRef()
        self.GetOwningQuest().SetStage(300)
    endIf
endFunction

 

and for comparisons sake sos v3 (le) gives us...

 

Spoiler

Scriptname BladesSparringScript extends ReferenceAlias

;Keyword[] Property MagicEffectArray Auto
{ Array of Keywords to check for. Array traversal is > 1000x faster than using FLSTs, so should stay as an Array, despite FLST's convenience.
Only if the magic effect keyword from this list is cast by the player will the opponent consider it cheating.
}
Keyword[] MagicEffectArray

import game

Event OnInit()
    MagicEffectArray = new Keyword[27]
    MagicEffectArray[0] = (GetFormFromFile(0x0001CEAD, "Skyrim.esm") as Keyword) ; MagicDamageFire
    MagicEffectArray[1] = (GetFormFromFile(0x0001CEAF, "Skyrim.esm") as Keyword) ; MagicDamageShock
    MagicEffectArray[2] = (GetFormFromFile(0x00046B99, "Skyrim.esm") as Keyword) ; MagicShout
    MagicEffectArray[3] = (GetFormFromFile(0x00078098, "Skyrim.esm") as Keyword) ; MagicInfluence
    MagicEffectArray[4] = (GetFormFromFile(0x0001CEAE, "Skyrim.esm") as Keyword) ; MagicDamageFrost
    MagicEffectArray[5] = (GetFormFromFile(0x000FBFEE, "Skyrim.esm") as Keyword) ; DB10MagicHeavyFire
    MagicEffectArray[6] = (GetFormFromFile(0x00042509, "Skyrim.esm") as Keyword) ; MagicAlchHarmful
    MagicEffectArray[7] = (GetFormFromFile(0x0010E4B3, "Skyrim.esm") as Keyword) ; dunCGMagicHeavyFire
    MagicEffectArray[8] = (GetFormFromFile(0x0001EA70, "Skyrim.esm") as Keyword) ; MagicParalysis
    MagicEffectArray[9] = (GetFormFromFile(0x000424E0, "Skyrim.esm") as Keyword) ; MagicInfluenceFear
    MagicEffectArray[10] = (GetFormFromFile(0x0009F28E, "Skyrim.esm") as Keyword) ; MagicTrapGas
    MagicEffectArray[11] = (GetFormFromFile(0x000424EE, "Skyrim.esm") as Keyword) ; MagicInfluenceCharm
    MagicEffectArray[12] = (GetFormFromFile(0x000B729E, "Skyrim.esm") as Keyword) ; MagicSlow
    MagicEffectArray[13] = (GetFormFromFile(0x000C44B6, "Skyrim.esm") as Keyword) ; MagicInfluenceFrenzy
    MagicEffectArray[14] = (GetFormFromFile(0x00109D79, "Skyrim.esm") as Keyword) ; MagicRune
    MagicEffectArray[15] = (GetFormFromFile(0x0007F404, "Skyrim.esm") as Keyword) ; MagicTelekinesis
    MagicEffectArray[16] = (GetFormFromFile(0x000FBFEF, "Skyrim.esm") as Keyword) ; DB10MagicLightFire
    MagicEffectArray[17] = (GetFormFromFile(0x00101BDE, "Skyrim.esm") as Keyword) ; MagicVampireDrain
    MagicEffectArray[18] = (GetFormFromFile(0x001093BB, "Skyrim.esm") as Keyword) ; MagicTrapPoison    
    MagicEffectArray[19] = (GetFormFromFile(0x0010E4B4, "Skyrim.esm") as Keyword) ; dunCGMagicLightFire
    ;MagicEffectArray[20] = (GetFormFromFile(0x00074F4E, "Skyrim.esm") as Keyword) ; MagicAlchWeaknessFire
    ;MagicEffectArray[21] = (GetFormFromFile(0x00074F4F, "Skyrim.esm") as Keyword) ; MagicAlchWeaknessFrost
    ;MagicEffectArray[22] = (GetFormFromFile(0x00074F50, "Skyrim.esm") as Keyword) ; MagicAlchWeaknessShock
    ;MagicEffectArray[23] = (GetFormFromFile(0x00074F51, "Skyrim.esm") as Keyword) ; MagicAlchWeaknessMagic
    ;MagicEffectArray[24] = (GetFormFromFile(0x00074F53, "Skyrim.esm") as Keyword) ; MagicEnchWeaknessFire
    ;MagicEffectArray[25] = (GetFormFromFile(0x00074F55, "Skyrim.esm") as Keyword) ; MagicEnchWeaknessShock
    
    GoToState("Waiting")
EndEvent

State Waiting

    Event OnHit(ObjectReference akAggressor, Form akWeapon, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
        ; if I'm hit by anybody but my opponent, stop quest
        GotoState("Busy")
        if (akWeapon as Spell)
            ; handle in OnMagicEffectApply
            return
        endif
        if (akAggressor != Opponent.GetRef())
            ;debug.trace(self + " hit by someone besides my opponent - end sparring")
            GetOwningQuest().SetStage(300)
        endif
        GotoState("Waiting")
    endEvent

    Event OnMagicEffectApply(ObjectReference akCaster, MagicEffect akEffect)
        ; if hit by anybody but opponent
        GotoState("Busy")
        ;debug.trace(self + "OnMagicEffectApply akCaster=" + akCaster)
        Actor pActor = GetActorRef()
        If HasMagicEffectKeywordInList(akEffect, MagicEffectArray)
            if akCaster != Opponent.GetRef() && akCaster != GetRef()
                ;debug.trace(self + " hit by someone besides my opponent - end sparring")
                GetOwningQuest().SetStage(300)
            endif     
        EndIf
        GotoState("Waiting")
    endEvent
EndState

State Busy

    Event OnHit(ObjectReference akAggressor, Form akWeapon, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
        return
    EndEvent
    
    Event OnMagicEffectApply(ObjectReference akCaster, MagicEffect akEffect)
        return
    EndEvent
    
EndState

ReferenceAlias Property Opponent  Auto

bool Function HasMagicEffectKeywordInList(MagicEffect akEffect, Keyword[] akList)
    int aiIndex = 0
    While aiIndex < akList.Length
        ; Order akList in order of prevalence (User count in CK)
        ; MagicDamageFire, MagicDamageShock, and so forth.
        ; This is so walking the array will return True faster.
        If (akEffect.HasKeyword(akList[aiIndex]))
            return True
        EndIf
        aiIndex += 1
    EndWhile
    return False
EndFunction

 

and finally here's vanilla script micro optimizations take on bladesparringscript

 

Spoiler

Scriptname BladesSparringScript extends ReferenceAlias  

import game

Event OnHit(ObjectReference akAggressor, Form akWeapon, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
    ; if I'm hit by anybody but my opponent, stop quest
;    if akAggressor != Opponent.GetRef()
    if akAggressor != Opponent.GetReference()
;         debug.trace(self + " hit by someone besides my opponent - end sparring")
;        GetOwningQuest().SetStage(300)
        GetOwningQuest().SetCurrentStageID(300)
    endif
endEvent

Event OnMagicEffectApply(ObjectReference akCaster, MagicEffect akEffect)
;     debug.trace(self + "OnMagicEffectApply akCaster=" + akCaster)
    ; if hit by anybody but opponent
;    if akCaster != Opponent.GetRef() && akCaster != GetRef()
    if akCaster != Opponent.GetReference() && akCaster != GetReference()
;         debug.trace(self + " hit by someone besides my opponent - end sparring")
;        GetOwningQuest().SetStage(300)
        GetOwningQuest().SetCurrentStageID(300)
    endif     
endEvent

ReferenceAlias Property Opponent  Auto

 

Major difference here is .getref() slower than GetReference() (source)

 

My LO is vanilla script (scripts in bsa) and then SOS bsa . So sos will win with scripts :(

I've deleted my sos.bsa, I have a copy in an archive somewhere if I need to install again. And now I've forgotten why I was looking at the scripts to begin with :( ...sigh!

Edited by pinkfluf
Link to comment
On 3/4/2018 at 8:57 PM, galgaroth said:

Correct. For the moment it's unstable and it could be a lot of things causing it, maybe the ESMs/NIFs/HKXs were not converted properly or maybe SKSE64 is the culprit, it's still in an alpha state. But don't be shy if you want to test, the more eyes we have on this the better.

bruh i just installed this mod and it keeps telling me that its either not installed or mod is too old what are people suppose to use for sos now??

Link to comment
23 hours ago, Panther619 said:

bruh i just installed this mod and it keeps telling me that its either not installed or mod is too old what are people suppose to use for sos now??

 

Here:

On 11/20/2021 at 5:30 PM, Erstam said:
23 hours ago, Panther619 said:

bruh i just installed this mod and it keeps telling me that its either not installed or mod is too old what are people suppose to use for sos now??

Great news - PapyrusUtil has been updated to Skyrim AE. That means that this version of SOS, which only depends on SKSE and PapyrusUtil, works on the 1.6.318 exe:

 

SOS PapyrusUtil version Beta 4 (UPDATE).7z 61.39 kB · 31,232 downloads

 

Some important things first:

  1. This is an update to SOS SE and only contains the changed esp and scripts. It's not the full mod. So install the files over your existing SOS installation.
  2. As long as you have a working SKSE and PapyrusUtil (either for AE or older SE versions), you're good to go.
  3. Best remove, hide, or move your SchlongsOfSkyrim.dll. It shouldn't really hurt when it's trying to load, but it will cause warnings in the logs.
  4. I've done no testing on 1.6.318 (I'm running a partially downgraded 1.5.97), but it runs fine on my Skyrim installation, and I'm pretty sure it will also work with the new exe, provided you have installed the requirements. After some testing on 1.6.318 I can confirm that it does work.

So how does this work? I've replaced all the functions from the dll with corresponding functions from PapyrusUtil. It looks like the SOS dll was actually forked from an early version of PapyrusUtil, so many functions are identical.

 

Other functions are emulated in Papyrus script. Of course that's much slower than native code, but I took a lot of effort in optimizing them. Particularly the function that randomly picks a schlong for new actors, depending on race and MCM probabilities. Now it caches the values in lists according to race and gender. For example, the first time a Nord gets a schlong, the process is still slow, but subsequent Nords are schlongified much faster. The cache is invalidated when you install or remove addons, or enable/disable addons for certain races in the MCM, or change their probabilities.

 

Further optimizations have been done all over the place. PapyrusUtil functions were often wrapped in multiple layers of convenience functions. I've inlined those where speed does matter. Also fixed some bugs - for instance, when schlongs have been lost (often due to load order changes), the recovery code would run twice.

 

This version cannot read old exported settings from SOS.json. It's using JsonUtil now (part of PapyrusUtil), and the format is different compared to SchlongsOfSkyrim.dll. But I think it's not a big deal, you can easily export your settings in the new format.

 

This right here fixed the problem for me, you can even delete the SOS dll. There's another solution too, which updates the dll, though I preferred the first option. Both of these solutions were in the same page you commented on btw. Regardless, the mod works now.

Edited by lo0u
Link to comment

Hey guys, can someone help me with SoS and full SMP 3BA body? In sex scenes with SMP the V seems only to like twitch and a bit to none opening, in CBPC mode opens on max. Tried the smp patch on this page still nothing. Btw is there a way for anus collusion (without the mod for anal colus in this forum its breaks my body physics BAD with the new 3BA)
A simple step by step guide? I lost 2 days fixing physics and tryed new bodies like HIMBo but there are no penis SMP collusion. Thanks in advance

Link to comment

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more information, see our Privacy Policy & Terms of Use