Jump to content

Multiple mods with soft dependency to the same resource


Monoman1

Recommended Posts

Hi all,

 

There appears to be an issue with Bethesdas/SKSEs code when 2 mods make a soft dependency check to the same resource but that resource is not installed. To demonstrate I've created 3 tiny mods. One 'master' mod that contains the resource we want to access and two 'soft link' mods that try to access a function in the master mod.

Test yourself with mod organizer.

1. Install and enable all mods

2. Start a new game, save and reload it. Quit and check your logs. Both mods should be running ok. 

3. Disable the master mod in the left hand side of MO (IE. remove the scripts). Start a new game and save a reload. Quit and check your log. Only one mod will be running even though they are essentially identical. 

 

Here's the code:

Master:

Scriptname _TM_MasterScript extends Quest  

String Function _TM_MasterFunction()
	Return "Master String"
EndFunction

SoftLink Mod A

Scriptname _TM_SoftLinkA_Script extends ReferenceAlias

Event OnInit()
	RegisterForSingleUpdate(1.0)
EndEvent

Event OnPlayerLoadGame()
	_TM_MasterScript Master = Game.GetFormFromFile(0x00000d62, "_TM_Master.esp") as _TM_MasterScript
	If Master
		Debug.MessageBox("_TM_: Soft Link A - " + Master._TM_MasterFunction())
		Debug.Trace("_TM_: Soft Link A - " + Master._TM_MasterFunction())
	Else
		Debug.MessageBox("_TM_: Soft Link A - Master esp not found")
		Debug.Trace("_TM_: Soft Link A - Master esp not found")
	EndIf
EndEvent

Event OnUpdate()
	Debug.Trace("_TM_: Soft Link A: Mod A running ok")
	RegisterForSingleUpdate(1.0)
EndEvent

SoftLink Mod B

Scriptname _TM_SoftLinkB_Script extends ReferenceAlias  

Event OnInit()
	RegisterForSingleUpdate(1.0)
EndEvent

Event OnPlayerLoadGame()
	_TM_MasterScript Master = Game.GetFormFromFile(0x00000d62, "_TM_Master.esp") as _TM_MasterScript
	If Master
		Debug.MessageBox("_TM_: Soft Link B - " + Master._TM_MasterFunction())
		Debug.Trace("_TM_: Soft Link B - " + Master._TM_MasterFunction())
	Else
		Debug.MessageBox("_TM_: Soft Link B - Master esp not found")
		Debug.Trace("_TM_: Soft Link B - Master esp not found")
	EndIf
EndEvent

Event OnUpdate()
	Debug.Trace("_TM_: Soft Link B: Mod B running ok")
	RegisterForSingleUpdate(1.0)
EndEvent

 

Here's a papyrus log with all mods active and installed:

The same is true if the masters scripts are installed but the esp is not active.

 

 


Line 814: [09/01/2018 - 11:10:07AM] _TM_: Soft Link B: Mod B running ok
    Line 815: [09/01/2018 - 11:10:07AM] _TM_: Soft Link A: Mod A running ok
    Line 1258: [09/01/2018 - 11:10:08AM] _TM_: Soft Link B: Mod B running ok
    Line 1259: [09/01/2018 - 11:10:08AM] _TM_: Soft Link A: Mod A running ok
    Line 1321: [09/01/2018 - 11:10:10AM] _TM_: Soft Link B: Mod B running ok
    Line 1322: [09/01/2018 - 11:10:10AM] _TM_: Soft Link A: Mod A running ok
    Line 1383: [09/01/2018 - 11:10:11AM] _TM_: Soft Link B: Mod B running ok
    Line 1384: [09/01/2018 - 11:10:11AM] _TM_: Soft Link A: Mod A running ok
    Line 1524: [09/01/2018 - 11:10:12AM] _TM_: Soft Link A: Mod A running ok
    Line 1525: [09/01/2018 - 11:10:12AM] _TM_: Soft Link B: Mod B running ok
    Line 1580: [09/01/2018 - 11:10:13AM] _TM_: Soft Link B: Mod B running ok
    Line 1581: [09/01/2018 - 11:10:13AM] _TM_: Soft Link A: Mod A running ok
    Line 1897: [09/01/2018 - 11:10:16AM] _TM_: Soft Link B - Master String
    Line 1898: [09/01/2018 - 11:10:16AM] _TM_: Soft Link A - Master String
    Line 2597: [09/01/2018 - 11:10:18AM] _TM_: Soft Link B: Mod B running ok
    Line 2637: [09/01/2018 - 11:10:19AM] _TM_: Soft Link A: Mod A running ok
    Line 2639: [09/01/2018 - 11:10:19AM] _TM_: Soft Link B: Mod B running ok
    Line 2700: [09/01/2018 - 11:10:20AM] _TM_: Soft Link A: Mod A running ok
    Line 2714: [09/01/2018 - 11:10:20AM] _TM_: Soft Link B: Mod B running ok
    Line 2844: [09/01/2018 - 11:10:21AM] _TM_: Soft Link A: Mod A running ok
    Line 2863: [09/01/2018 - 11:10:21AM] _TM_: Soft Link B: Mod B running ok
 

 

 

Here's a papyrus log when the master is not installed but both soft link mods are installed:

 

 


Line 30: [09/01/2018 - 11:12:46AM] Cannot open store for class "_tm_masterscript", missing file?
    Line 31: [09/01/2018 - 11:12:46AM] Error: Unable to link types associated with function "OnPlayerLoadGame" in state "" on object "_TM_SoftLinkB_Script".
    Line 1614: [09/01/2018 - 11:13:08AM] _TM_: Soft Link A: Mod A running ok
    Line 1687: [09/01/2018 - 11:13:09AM] _TM_: Soft Link A: Mod A running ok
    Line 1735: [09/01/2018 - 11:13:11AM] _TM_: Soft Link A: Mod A running ok
    Line 1788: [09/01/2018 - 11:13:12AM] _TM_: Soft Link A: Mod A running ok
    Line 1857: [09/01/2018 - 11:13:13AM] _TM_: Soft Link A: Mod A running ok
    Line 1911: [09/01/2018 - 11:13:14AM] _TM_: Soft Link A: Mod A running ok
    Line 2046: [09/01/2018 - 11:13:17AM] warning: Unable to get type _TM_SoftLinkB_Script referenced by the save game. Objects of this type will not be loaded.
    Line 2048: [09/01/2018 - 11:13:17AM] warning: Could not find type _TM_SoftLinkB_Script in the type table in save
    Line 2070: [09/01/2018 - 11:13:17AM] ERROR: File "_TM_Master.esp" does not exist or is not currently loaded.
    Line 2073:     [alias PlayerAlias on quest _TM_SoftLinkA_Quest (41000D62)]._TM_SoftLinkA_Script.OnPlayerLoadGame() - "_TM_SoftLinkA_Script.psc" Line 8
    Line 2073:     [alias PlayerAlias on quest _TM_SoftLinkA_Quest (41000D62)]._TM_SoftLinkA_Script.OnPlayerLoadGame() - "_TM_SoftLinkA_Script.psc" Line 8
    Line 2073:     [alias PlayerAlias on quest _TM_SoftLinkA_Quest (41000D62)]._TM_SoftLinkA_Script.OnPlayerLoadGame() - "_TM_SoftLinkA_Script.psc" Line 8
    Line 2109: [09/01/2018 - 11:13:17AM] _TM_: Soft Link A - Master esp not found
    Line 2513: [09/01/2018 - 11:13:19AM] _TM_: Soft Link A: Mod A running ok
    Line 2774: [09/01/2018 - 11:13:20AM] _TM_: Soft Link A: Mod A running ok
    Line 2819: [09/01/2018 - 11:13:21AM] _TM_: Soft Link A: Mod A running ok
    Line 2901: [09/01/2018 - 11:13:22AM] _TM_: Soft Link A: Mod A running ok
 

 

The first mod in the load order 'wins' and continues running as expected. The mod lower in the load order has it's scripts dumped and stops working entirely. 

 

I'm a guy that likes to bring mods together where I can and have mods as more than 'a collection of islands' but with this issue I not only need to account for my own mod but every other mod and load order out there and it's just too much hassle. 

So questions:

1. First. Is my implementation ok? Maybe I've got something wrong. 

2. Why the heck does this happen and what exactly is causing it? 

Test Mod - Master.7z

Test Mod - SoftLink A.7z

Test Mod - SoftLink B.7z

Link to comment
14 hours ago, Verstort said:

Good to know this is replicatable.

 

Can I assume this is only for quest functions? If you grab a quest (fromfrom file or GetQuest(strid)) only to get the stage/running state there is no issues?

GetStage seems to work fine at least. 

Changed SoftLink mods to:

Scriptname _TM_SoftLinkA_Script extends ReferenceAlias

Event OnInit()
	RegisterForSingleUpdate(1.0)
EndEvent

Event OnPlayerLoadGame()
	Quest Master = Game.GetFormFromFile(0x00000d62, "_TM_Master.esp") as Quest
	If Master
		Debug.MessageBox("_TM_: Soft Link A - " + Master.GetStage())
		Debug.Trace("_TM_: Soft Link A - " + Master.GetStage())
	Else
		Debug.MessageBox("_TM_: Soft Link A - Master esp not found")
		Debug.Trace("_TM_: Soft Link A - Master esp not found")
	EndIf
EndEvent

Event OnUpdate()
	Debug.Trace("_TM_: Soft Link A: Mod A running ok")
	RegisterForSingleUpdate(1.0)
EndEvent

Papyrus log:



Line 904: [09/02/2018 - 08:53:41AM] _TM_: Soft Link A: Mod A running ok
    Line 905: [09/02/2018 - 08:53:41AM] _TM_: Soft Link B: Mod B running ok
    Line 1058: [09/02/2018 - 08:53:42AM] _TM_: Soft Link A: Mod A running ok
    Line 1059: [09/02/2018 - 08:53:42AM] _TM_: Soft Link B: Mod B running ok
    Line 1174: [09/02/2018 - 08:53:43AM] _TM_: Soft Link A: Mod A running ok
    Line 1175: [09/02/2018 - 08:53:43AM] _TM_: Soft Link B: Mod B running ok
    Line 1213: [09/02/2018 - 08:53:44AM] _TM_: Soft Link A: Mod A running ok
    Line 1214: [09/02/2018 - 08:53:44AM] _TM_: Soft Link B: Mod B running ok
    Line 1359: [09/02/2018 - 08:53:45AM] _TM_: Soft Link B: Mod B running ok
    Line 1360: [09/02/2018 - 08:53:45AM] _TM_: Soft Link A: Mod A running ok
    Line 1670: [09/02/2018 - 08:53:50AM] ERROR: File "_TM_Master.esp" does not exist or is not currently loaded.
    Line 1673:     [alias PlayerAlias on quest _TM_SoftLinkA_Quest (41000D62)]._TM_SoftLinkA_Script.OnPlayerLoadGame() - "_TM_SoftLinkA_Script.psc" Line 8
    Line 1673:     [alias PlayerAlias on quest _TM_SoftLinkA_Quest (41000D62)]._TM_SoftLinkA_Script.OnPlayerLoadGame() - "_TM_SoftLinkA_Script.psc" Line 8
    Line 1673:     [alias PlayerAlias on quest _TM_SoftLinkA_Quest (41000D62)]._TM_SoftLinkA_Script.OnPlayerLoadGame() - "_TM_SoftLinkA_Script.psc" Line 8
    Line 1674: [09/02/2018 - 08:53:50AM] ERROR: File "_TM_Master.esp" does not exist or is not currently loaded.
    Line 1677:     [alias PlayerAlias on quest _TM_SoftLinkB_Quest (42000D62)]._TM_SoftLinkB_Script.OnPlayerLoadGame() - "_TM_SoftLinkB_Script.psc" Line 8
    Line 1677:     [alias PlayerAlias on quest _TM_SoftLinkB_Quest (42000D62)]._TM_SoftLinkB_Script.OnPlayerLoadGame() - "_TM_SoftLinkB_Script.psc" Line 8
    Line 1677:     [alias PlayerAlias on quest _TM_SoftLinkB_Quest (42000D62)]._TM_SoftLinkB_Script.OnPlayerLoadGame() - "_TM_SoftLinkB_Script.psc" Line 8
    Line 1705: [09/02/2018 - 08:53:50AM] _TM_: Soft Link A - Master esp not found
    Line 1706: [09/02/2018 - 08:53:50AM] _TM_: Soft Link B - Master esp not found
    Line 2476: [09/02/2018 - 08:53:53AM] _TM_: Soft Link A: Mod A running ok
    Line 2477: [09/02/2018 - 08:53:53AM] _TM_: Soft Link B: Mod B running ok
    Line 2772: [09/02/2018 - 08:53:54AM] _TM_: Soft Link A: Mod A running ok
    Line 2774: [09/02/2018 - 08:53:54AM] _TM_: Soft Link B: Mod B running ok
    Line 2853: [09/02/2018 - 08:53:55AM] _TM_: Soft Link A: Mod A running ok
    Line 2854: [09/02/2018 - 08:53:55AM] _TM_: Soft Link B: Mod B running ok
    Line 3041: [09/02/2018 - 08:53:56AM] _TM_: Soft Link A: Mod A running ok
    Line 3042: [09/02/2018 - 08:53:56AM] _TM_: Soft Link B: Mod B running ok
    Line 3214: [09/02/2018 - 08:53:57AM] _TM_: Soft Link A: Mod A running ok
    Line 3215: [09/02/2018 - 08:53:57AM] _TM_: Soft Link B: Mod B running ok
    Line 3392: [09/02/2018 - 08:53:58AM] _TM_: Soft Link A: Mod A running ok
    Line 3467: [09/02/2018 - 08:53:59AM] _TM_: Soft Link B: Mod B running ok

Master mod not installed but both mods continue running as expected. 

 

Posted this over on the nexus too: https://forums.nexusmods.com/index.php?/topic/6957326-multiple-mods-with-soft-dependency-to-the-same-resource/

Link to comment
On 9/1/2018 at 12:41 PM, Monoman1 said:

 

Test yourself with mod organizer.

 

no need for that

 

   Line 2046: [09/01/2018 - 11:13:17AM] warning: Unable to get type _TM_SoftLinkB_Script referenced by the save game. Objects of this type will not be loaded.

referenced by the save game?

your previous _TM_SoftLinkB_Script was no good, and the game load the one from your save over the new one in script folder

so it's still no good

 

 Line 2048: [09/01/2018 - 11:13:17AM] warning: Could not find type _TM_SoftLinkB_Script in the type table in save game. Objects of this type will not be loaded.

same error as above

 

Line 2070: [09/01/2018 - 11:13:17AM] ERROR: File "_TM_Master.esp" does not exist or is not currently loaded.

you check if the esp is in the load order before trying to load something from it if you don't want those useless lines in the log

 

 

the only problem it's loading a save for that test instead of coc somewhere from main menu

and it's not because 2 mods load the same thing, you have to load it twice

 

when i initialise sexlab animation, a script put animations in mf[], ff[], mff[], mmf[].... (male female)

that's to delete the checks for animations for (actor1, actor2) in defeat and whatever, it just check if there's something in mf[] instead

the master load it once, and the plugins just reload it, it's faster that way

 

Link to comment

My testing method was to start a new game, then save and reload to trigger OnPlayerLoadGame()

 

I'm not really worried about those errors. This error is the main problem: 

Error: Unable to link types associated with function "OnPlayerLoadGame" in state "" on object "_TM_SoftLinkB_Script".

 

With the master mod installed both of these mods will run fine. Without the 'master' mod installed, either one of these mods will run perfectly. But running both mods at the same time will cause one to fail. 

Solution is in the nexus thread. 

Link to comment
  • 1 year later...
9 hours ago, Yinkle said:

@Monoman1 Did you ever find a way to do this without making 2 versions of your scripts? From what I've read it seems there is a way in FO4 using the scriptobject script but not in skyrim sadly.

Yes. There is a much better way using globals. 

Reference interface scripts in sexlab survival for examples. 

Link to comment
14 hours ago, Monoman1 said:

Yes. There is a much better way using globals. 

Reference interface scripts in sexlab survival for examples. 

Great! Thanks for the info and I'll check that out. I had my mod infacing with SLEN's relationship system with what I "thought" was a soft dependency but it was breaking the mod if SLEN wasn't installed. So I made 2 versions of the interfacing script which worked but with drawbacks as you mentioned in your previous post. This will be much better.

Link to comment

So I've been meaning to correct this thread for a while. This method appears to be the best way of creating soft dependencies that I'm aware of. I haven't had a single complaint about 'Unable to link type' errors since adopting this method. I got most of this knowledge from Lupine00, so credit goes to her. 

 

External function calls or getting external script variables begin their journey in the 'gating' script. The purpose of this script is really just: 

1. Do/return different results based on whether the soft dependency is installed or not to suit whatever purpose you have in mind. 

2. STOP function calls to scripts that are not installed. 

3. Hopefully avoid making calls to external script functions before said scripts have fully initialized. 

 

Here is probably one of the simpler ones I've done for SL Survival. It's the link to PaySexCrime to find out if your character has a hidden bounty for that hold. This is used in the eviction feature so that you're not un-evicted when you use PSC to temporarily suppress your bounty. 

_SLS_InterfacePaySexCrime is attached to a quest. This is the 'gating' script. Every other script in SL Survival that wants to know the players hidden PSC bounty goes through this script. 

_SLS_IntPsc is attached to nothing. DO NOT attach it to anything. You can attach it to compile it or whatever just make sure it's removed when you save the mod. 

 

You should also only use one interface script per soft dependency link. Don't try to link to more than one external mod per interface script. Eg: Survival uses 2 separate interface scripts for RND and iNeed. 

Scriptname _SLS_InterfacePaySexCrime extends Quest

Quest PscQuest ; Store PSC quest so we are not getting it every time. Get it when the script state changes to 'Installed' and pass it as needed to the global script

Event OnInit()
	RegisterForModEvent("_SLS_Int_PlayerLoadsGame", "On_SLS_Int_PlayerLoadsGame") ; Custom event to run on game load because quest scripts don't receive the vanilla event.
EndEvent

Event On_SLS_Int_PlayerLoadsGame(string eventName, string strArg, float numArg, Form sender)
	PlayerLoadsGame()
EndEvent

Function PlayerLoadsGame()
	; Is the soft dependency installed and is our script in the right state? If not change state. 

	If Game.GetModByName("Sexlab_PaySexCrime.esp") != 255
		If GetState() != "Installed"
			GoToState("Installed")
		EndIf
	
	Else
		If GetState() != ""
			GoToState("")
		EndIf
	EndIf
EndFunction

Event OnEndState()
	Utility.Wait(5.0) ; Wait before entering active state to help avoid making function calls to scripts that may not have initialized yet.
	PscQuest = Game.GetFormFromFile(0x002862,"Sexlab_PaySexCrime.esp") as Quest ; Get PSC quest now
EndEvent

Bool Function GetIsInterfaceActive()
	; Only really used to display interface state in SL Survivals Mcm.
	If GetState() == "Installed"
		Return true
	EndIf
	Return false
EndFunction

; PSC is not installed so there wont be any hidden bounties. Return 0 to the calling script and dont try to access any external resources. 
Int Function GetPscBountyWhiterun()
	Return 0
EndFunction

Int Function GetPscBountySolitude()
	Return 0
EndFunction

Int Function GetPscBountyMarkarth()
	Return 0
EndFunction

Int Function GetPscBountyWindhelm()
	Return 0
EndFunction

Int Function GetPscBountyRiften()
	Return 0
EndFunction

State Installed
	; PSC IS installed. Now call the global script and get PSCs hidden bounty. Pass in PscQuest just to save some time
    
	Int Function GetPscBountyWhiterun()
		Return _SLS_IntPsc.GetPscBountyWhiterun(PscQuest)
	EndFunction

	Int Function GetPscBountySolitude()
		Return _SLS_IntPsc.GetPscBountySolitude(PscQuest)
	EndFunction

	Int Function GetPscBountyMarkarth()
		Return _SLS_IntPsc.GetPscBountyMarkarth(PscQuest)
	EndFunction

	Int Function GetPscBountyWindhelm()
		Return _SLS_IntPsc.GetPscBountyWindhelm(PscQuest)
	EndFunction

	Int Function GetPscBountyRiften()
		Return _SLS_IntPsc.GetPscBountyRiften(PscQuest)
	EndFunction
EndState

 

Here is the global script

Scriptname _SLS_IntPsc Hidden 

Int Function GetPscBountyWhiterun(Quest PscQuest) Global
	PaySexCrimeMCM Psc = PscQuest as PaySexCrimeMCM ; Here it should be safe to cast to an external type and access external script variables and functions
	Return (Psc.BountyViolent[8] + Psc.BountyNonViolent[8])
EndFunction

Int Function GetPscBountySolitude(Quest PscQuest) Global
	PaySexCrimeMCM Psc = PscQuest as PaySexCrimeMCM
	Return (Psc.BountyViolent[3] + Psc.BountyNonViolent[3])
EndFunction

Int Function GetPscBountyMarkarth(Quest PscQuest) Global
	PaySexCrimeMCM Psc = PscQuest as PaySexCrimeMCM
	Return (Psc.BountyViolent[6] + Psc.BountyNonViolent[6])
EndFunction

Int Function GetPscBountyWindhelm(Quest PscQuest) Global
	PaySexCrimeMCM Psc = PscQuest as PaySexCrimeMCM
	Return (Psc.BountyViolent[1] + Psc.BountyNonViolent[1])
EndFunction

Int Function GetPscBountyRiften(Quest PscQuest) Global
	PaySexCrimeMCM Psc = PscQuest as PaySexCrimeMCM
	Return (Psc.BountyViolent[7] + Psc.BountyNonViolent[7])
EndFunction

 

Link to comment
15 hours ago, Yinkle said:

I can confirm that this works perfectly! I'll be updating a few mods on here shortly with props to Monoman1 and Lupine00

I forgot to mention: 

You should also only use one interface script per soft dependency link. Don't try to link to more than one external mod per interface script. Eg: Survival uses 2 separate interface scripts for RND and iNeed. 

1 interface per mod. 

Link to comment
On 3/19/2020 at 9:42 AM, Monoman1 said:

You should also only use one interface script per soft dependency link.

? OK, I keep that as a rule of thumb and will stick to that.

Many things for me to learn here. It's not really my profession, but I would like to avoid mistakes and bad habits. :classic_blush:

"script" as in "single script file", right? One per interface to another mod, e.g. your example with

Scriptname _SLS_InterfacePaySexCrime extends Quest

But I didn't understand the reason for this? :classic_huh: ?

Is it because of your "installed" state wouldn't be unique if you mix more than one dependency together?

 

On 3/18/2020 at 11:43 AM, Monoman1 said:

_SLS_IntPsc is attached to nothing. DO NOT attach it to anything. You can attach it to compile it or whatever just make sure it's removed when you save the mod. 

Again here, I didn't understand why attaching it to a quest would be bad? :classic_huh: Or is just because it's "pointless"?

Link to comment
58 minutes ago, worik said:

"script" as in "single script file", right? One per interface to another mod, e.g. your example with

I suppose you could use multiple gating scripts to access one mod but why? It would make things more confusing. Just put everything to do with mod X into one file. That way when you need to check something to do with mod X you're not looking at several different scripts.

 

The main thing is that you're not trying to link into more than one external mod from the same script. This applies to the globals script more so than the gating script. Any time you're casting to an external type, which is done in the globals script. In the example above that's this line:

PaySexCrimeMCM Psc = PscQuest as PaySexCrimeMCM

PaySexCrimeMcm being the foreign, potentially missing (not installed) type. 

 

58 minutes ago, worik said:

Is it because of your "installed" state wouldn't be unique if you mix more than one dependency together?

Again you COULD use the same gating script but why? It would make the states more complex. If say I had one combined gating script for PSC and RND say. Then I'd need states:

None installed.

Only RND installed. 

Only PSC installed.

Both installed.

 

Then you're duplicating code most likely in states Only X and Both installed which will lead to mistakes between states that are essentially meant to be the same (typos, forgetting to change things in more than one state, etc) and inconsistencies which will lead to people reporting problems that are inconsistent as a result - Works for Bob, doesn't work for John.

Keep it in one script for simplicity IMO. Nothing is gained by trying to cram as much as possible into a single script. When I started modding I tried to create one long script (or as few scripts as possible) but this isn't really the way to do things. Keeping the number of lines of code as short as possible within the scope of what needs to be done is a better rule of thumb. Ie if you can get the same results from 3 lines of code instead of 4 then this is usually better. 

 

I suppose in the case or iNeed and RND it could be done in one gating script but people CAN install both. God only knows why you would. That said I have had both installed while building SLS. 

 

58 minutes ago, worik said:

Again here, I didn't understand why attaching it to a quest would be bad? :classic_huh: Or is just because it's "pointless"?

Honestly I don't understand it fully myself. BUT my guess is that because this is the globals script and this is where you are casting to the external type then having it attached will have Skyrim try to load this unknown, foreign, potentially not installed type (or even just potentially not yet initialized type) when the game is loaded resulting in Skyrim shitting it's pants and dumping scripts as seen in the OP. 

Having it in an unattached, global function seems to only try to actually access it when it is actually called. Which is what we want. 

 

I'm pretty sure I remember creating a test mod like in the OP but instead it had NO accessing at all of external resources at all - No events or updates. Just a never called function that referenced an external type. And Skyrim still dumped the script so it obviously is loading these types on game load unless they're in a global function and unattached. 

Link to comment
4 hours ago, GenioMaestro said:

Can i know how many users has reported this problem in each mod?

Please, provide approximate data as 10 users in ABBA, near 50 in  Survival and 33 in MWA.

Hiya,

 

ABBA doesn't have any soft depencendies. ABMM does interface with SLEN functions though (relationship updates) and a couple folk reported a problem which turned out to be due to SLEN not being installed and what I thought was a soft depencency was actually broken. This issue has now been fixed by using this method and it now works fine with or without SLEN.

 

I've not had any complaints since I released the latest version of ABMM 1.7.0 which includes this method.

Link to comment

Archived

This topic is now archived and is closed to further replies.

  • 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