Jump to content

OSA | Skyrim Ascendancy Engine


Recommended Posts

Actually, I just remembered. This is what made me believe people saying all the scripts were stored in the save file:

 

[10/09/2016 - 06:39:57AM] Warning: Function _oOmni..OnStartModuleUI in stack frame 0 in stack 9456322 differs from the in-game resource files - using version from save
[10/09/2016 - 06:39:57AM] Warning: Function osa..setActors in stack frame 1 in stack 9456322 differs from the in-game resource files - using version from save
[10/09/2016 - 06:39:57AM] Warning: Function _oOmni..OnStartModuleUI in stack frame 0 in stack 9456232 differs from the in-game resource files - using version from save
[10/09/2016 - 06:39:57AM] Warning: Function osa..setActors in stack frame 1 in stack 9456232 differs from the in-game resource files - using version from save

 

 

Link to comment

 

 

...

 

Thanks for the very informative post Migal. I'm sorry if this is really offtopic but would it be possible to remove HDT Heels without causing issues when having armor that uses it still installed? I've been wanting to remove it for a while but I feared to break anything and I lost track of which armors use it. Would it just remove the offset?

 

More on topic:

I've been hesitant to believe statements saying scripts get baked into savegames and I can take your word for it not being so, but what about scripts from ongoing threads? These were the type of spams I was getting into the logs before I somehow stopped it:

 

 

 

[10/09/2016 - 01:40:14AM] ERROR: Cannot call HasKeywordString() on a None object, aborting function call

stack:
<unknown self>.osa.IsAllowed() - "OSA.psc" Line ?
<unknown self>._oglobal.checkActra() - "_oGlobal.psc" Line ?
<unknown self>.osa.setActors() - "<savegame>" Line ?
[0SA (18000D62)]._oOmni.OnStartModuleUI() - "<savegame>" Line ?
[10/09/2016 - 01:40:14AM] Warning: Assigning None to a non-object variable named "::temp27"

 

 

 

Notice the <savegame> tags? When I altered OSA.psc the changes I made inside "IsAllowed" (OSA.psc) were shown (such as adding debug message boxes) but altering "setActors" didn't do anything at all. Which is why in the end I assumed at least scripts related to currently running threads were saved into the save file. Which is at least WAY more understandable than saving everything, but could be really troublesome when fixing broken savegames, is what I though.

 

 

It depends on if a script is running when the game is saved.  Most scripts are very rapid fire-and-forget things.  Only polling scripts and scripts that are waiting for an event to occur stay active.  But, even if one of them is hanging around your game save and the mod loads with a newer version of the script attached, the worst that typically happens is some log spam for only that one session.

 

Like I said, I haven't looked at it in depth, but based on your logs, I'm wondering if you uninstalled an NPC/follower mod.  OSA's cloaking spells can hang onto an NPC for a while and if you uninstall that NPC and OSA then tries to dispel the cloaking spell on that same NPC, you'll get a None error.  But, again, I haven't looked closely at each specific case.  I'm not getting the log spam nearly as frequently as you are.  I'm wondering, are you using the ESG/clothing removal animations?  Are you starting scenes with a bound hotkey, or by selecting NPCs (and/or yourself) via the menu?  Are you starting scenes with BBLS or AA?  These things can make a difference.

 

As for HDT heels, I convert all HDT heels I find to NiO.  It typically takes less than 60 seconds per pair.  I did the entire Luxury Collection in about a half hour, which is pretty much all the shoes you will ever need.  Once you are no longer using any HDT heels mod, it is completely safe to remove the HDT heels esm file from your load order.  Just make sure no NPCs (or your own toon) are wearing HDT heels when you do it.  I learned how to convert by watching Ousnius' videos on the description page of his furniture fix mod here.  If you're a purist, go ahead and use Skyrim Save Cleaner to remove any lingering HDT heels scripts from your save.  Note:  You can remove the HDT heels esm from your load order, but you can't get rid of the file completely.  TESVedit needs it when you are converting to NiO.

Link to comment

 

Basically, an equivalent to SexLab's tags. For what I can tell, there is no way to obtain such a list run-time, but I figured it couldn't hurt to ask.

 

 

Tags is exactly what CEO ended up planning, but that was months ago.  He's a very creative guy and he sometimes gets drawn into another area just because an idea popped into his head.  Based on his tumblr, it looks like the last thing he was working on was some kind of modification of the icon system in the GUI.

 

If he comes back, I expect we'll get tags.  We'll see.  He disappeared September 20th, stopped by the Nexus without posting on September 30th, stopped by here without posting October 1st.  Not that I'm keeping track or anything.   ;)

Link to comment

 

...

Indeed, I also suspected it was just me going nuts with adding and removing followers. But it's happened twice thus far with a new game where I haven't touched them yet, must be something else.

 

Let's see... I havent actually removed clothes in this playthrough so I'm unsure on whether the setting is on or off, but the issue activates as soon as the scene starts so could that setting already influence it? One time it happened via hotkey and the other via OSA menu. And I haven't started any with BBLS or AA yet. I'm sorry to say I haven't found a pattern to it yet.

Link to comment

 

 

...

Indeed, I also suspected it was just me going nuts with adding and removing followers. But it's happened twice thus far with a new game where I haven't touched them yet, must be something else.

 

Let's see... I havent actually removed clothes in this playthrough so I'm unsure on whether the setting is on or off, but the issue activates as soon as the scene starts so could that setting already influence it? One time it happened via hotkey and the other via OSA menu. And I haven't started any with BBLS or AA yet. I'm sorry to say I haven't found a pattern to it yet.

 

 

Your PapyrusUtil is up to date?

Link to comment

 

Your PapyrusUtil is up to date?

 

Yup.

 

[EDIT]

And I wouldn't be too bothered about me getting this issue so frequently, as I'm purposely trying to find it by starting scenes and closing them after they start whenever it comes to mind.

[/EDIT]

Link to comment

 

And I wouldn't be too bothered about me getting this issue so frequently, as I'm purposely trying to find it by starting scenes and closing them after they start whenever it comes to mind.

 

 

How long are you waiting before closing a scene?  Does at least five seconds pass after you press the hotkey?  The reason I ask is that OSA may still be running its startup processing when you kill the scene.

Link to comment

 

 

How long are you waiting before closing a scene?  Does at least five seconds pass after you press the hotkey?  The reason I ask is that OSA may still be running its startup processing when you kill the scene.

 

Very little to be honest, but should be over 5 seconds. Usually my behavior is: start scene -> alt tab -> wait a couple of seconds -> check log file properties to see if file size changed -> go back -> close scene.

I used to do more stuff before, but once I triggered the issue for the first time in the new game during scene startup I've been keeping it to that.

 

I'm gonna start messing around with going in and out of first person during scene startup, since I have an immersive FPV mod that suposedly creates a dummy during first person which can even get in the way when trying to select elements in console mode, maybe there's something going on there. Plus I have a tendency to go into third person view before OSA triggers it.

Link to comment
Guest ffabris

 

 

Basically, an equivalent to SexLab's tags. For what I can tell, there is no way to obtain such a list run-time, but I figured it couldn't hurt to ask.

 

 

Tags is exactly what CEO ended up planning, but that was months ago.  He's a very creative guy and he sometimes gets drawn into another area just because an idea popped into his head.  Based on his tumblr, it looks like the last thing he was working on was some kind of modification of the icon system in the GUI.

 

If he comes back, I expect we'll get tags.  We'll see.  He disappeared September 20th, stopped by the Nexus without posting on September 30th, stopped by here without posting October 1st.  Not that I'm keeping track or anything.   ;)

 

 

It's all good. I was just trying to learn what the current state of things is. :)

 

Btw, any clues on font size, and concurrent scenes?

 

Link to comment

 

 

Very little to be honest, but should be over 5 seconds. Usually my behavior is: start scene -> alt tab -> wait a couple of seconds -> check log file properties to see if file size changed -> go back -> close scene.

I used to do more stuff before, but once I triggered the issue for the first time in the new game during scene startup I've been keeping it to that.

 

I'm gonna start messing around with going in and out of first person during scene startup, since I have an immersive FPV mod that suposedly creates a dummy during first person which can even get in the way when trying to select elements in console mode, maybe there's something going on there. Plus I have a tendency to go into third person view before OSA triggers it.

 

Other people are reporting the same log errors over on the Nexus, but I do not get these errors, so something is different about the way I use OSex or other mods in our games.

 

The HasKeywordString() check is part of a series of checks to see if OSex can be performed on an actor.  It's meant to exclude creatures and children and include actors with the Keyword, "ActorTypeNPC."  It is failing because OSA thinks it needs to check an actor whose 3D is not loaded (they are in another cell), or an actor that has been uninstalled.  It's possible that the subject actor is cached on the Flash side after inspection and hasn't been cleared for some reason.

 

This could hit you by stealth in certain situations.  For example, VRDaphni and VRApollo followers can be very pretty, but they come with something Apollo calls a "body changer spell."  The spell allows you to swap skin textures, body types, hairstyles, vampire/no vampire, etc.  It is *not* a body changer spell.  It is an NPC swap spell.  Those follower mods come with a ton of NPCs, one for every possible option combination.  The Aurora/Twilight mod is supposedly 2 NPCs, but if you open it in TESVedit you'll see there is something like 60 NPCs in the mod.  Each NPC is a completely different actor with its own in-game refID.  So, if you were to inspect one of those actors and then later run the "body changer spell," it would be exactly the same thing as inspecting the actor and then uninstalling the actor's mod, because the actor you inspected is no longer in your game.  Of course, this can also create havok for mods like BBLS and MHIYH, which try to keep track of followers you have invited to live someplace.

 

Btw, any clues on font size, and concurrent scenes?

 

 

Sorry.  Not a clue.

Link to comment

 

...

 

Makes sense, though in my case I was using the player character and a vanilla NPC so it must be another weirdness going on, then again maybe I used the "get actors from vicinity option", I forgot about that... Anyways, I thought this might just be a particular scenario which people like me might share but if there are that many scenarios maybe me trying to hunt for my particular case is rather pointless. If possible it'd just be good to add some checks for invalid actras or limit the whiles and call it a day.

 

At least from all the messing around I finally managed to clean my old save and learn a couple of things.

Link to comment

 

Makes sense, though in my case I was using the player character and a vanilla NPC so it must be another weirdness going on, then again maybe I used the "get actors from vicinity option", I forgot about that... Anyways, I thought this might just be a particular scenario which people like me might share but if there are that many scenarios maybe me trying to hunt for my particular case is rather pointless. If possible it'd just be good to add some checks for invalid actras or limit the whiles and call it a day.

 

The while loops wouldn't be there if CEO didn't think they were necessary.  As far as the actra validity checks, there many of them, but he didn't put them everywhere because he wants the logs to be able to tell him if something isn't working the way it's supposed to work.  Clearly that's happening.  We just don't know the right combination that causes it to happen.

Link to comment

 

 

Makes sense, though in my case I was using the player character and a vanilla NPC so it must be another weirdness going on, then again maybe I used the "get actors from vicinity option", I forgot about that... Anyways, I thought this might just be a particular scenario which people like me might share but if there are that many scenarios maybe me trying to hunt for my particular case is rather pointless. If possible it'd just be good to add some checks for invalid actras or limit the whiles and call it a day.

 

The while loops wouldn't be there if CEO didn't think they were necessary.  As far as the actra validity checks, there many of them, but he didn't put them everywhere because he wants the logs to be able to tell him if something isn't working the way it's supposed to work.  Clearly that's happening.  We just don't know the right combination that causes it to happen.

 

Leaving out the checks to throw some errors in the log makes a lot of sense, I see your point there. As for the while loops, I'm only saying to add breaks and/or limiters to them to avoid savegame disaster (like the issue we've been discussing), where you can have them running forever when something goes wrong.

 

This is a VERY crude but effective example of a change I'd suggest:

 

 

 

bool approved = true
int limit_this=0
while (i < l && limit_this<99)

    limit_this+=1

    if _oGlobal.checkActra(sceneSuite[0], actra, statusFaction)
    i+=1
    else
    approved = false
    i+99
    endIf
endWhile

 

 

I only added the limit_this there.

 

In the worst case scenario where checkActra() errors and "i" doesn't increment at least the loops will close after 100 cycles. I've been doing a lot of reading since I've gotten interested in the great work you guys do around here, and it was this article that lead me to this train of thought. Other scripting languages would have probably killed a loop where an unexpected exception occurs, but since papyrus doesn't seem to do this using loops without simple foolproof breaks seems pretty dangerous.

Link to comment

 

This is a VERY crude but effective example of a change I'd suggest:

 

 

 

bool approved = true
int limit_this=0
while (i < l && limit_this<99)

    limit_this+=1

    if _oGlobal.checkActra(sceneSuite[0], actra, statusFaction)
    i+=1
    else
    approved = false
    i+99
    endIf
endWhile

 

 

I only added the limit_this there.

 

In the worst case scenario where checkActra() errors and "i" doesn't increment at least the loops will close after 100 cycles. I've been doing a lot of reading since I've gotten interested in the great work you guys do around here, and it was this article that lead me to this train of thought. Other scripting languages would have probably killed a loop where an unexpected exception occurs, but since papyrus doesn't seem to do this using loops without simple foolproof breaks seems pretty dangerous.

 

 

You seem to know what you're doing.  Maybe you should take a crack at fixing the log errors.  We can use all the help we can get.

Link to comment

...

As of now this is the only remark I can be confident to speak of regarding the script. As I said before, while I have some general understanding I'm still green when it comes to papyrus. But if there's something I could take a look at I'd love to, as you can see I take enjoyment in all this and I love to help when I can. \o/

 

If you mean the log error spam people like me were getting just adding...

 

if(actra==None)
return true
endif

 

...to the isAllowed function will probably allow papyrus to digest the infinite loop (i>l) instead of crashing into actra.IsChild(), it did for me and all is ok now. I can't say that's the most logical fix and shouldn't be kept permanently but since other functions like setActors are being pulled from the save and can't be "released" until the active loop ends this was the only way I could manage to stop it (this might be a rare case for people that had the issue start in previous versions).

Making it return false makes more sense and could be left there permanently but maybe the version of the setActors function that got stored in my save is from a version that didn't have the else statement that stops the loop in it yet. I've got no idea when the issue started in my old save, could've been a month ago, or more.

 

[EDIT]

Oh, wait, wait.

At OSA.psc line 272, does this line actually do anything?

 

i+99

 

I'm still unfamiliar with the syntax for papyrus, but I assume this should be i+=99 or i=99? Maybe this is why returning false didnt end the loop. I've been looking at that so many times and only noticed it now...

Might be the main culprit of the infinite loops right there, if I'm seeing that right you can even have some running without any errors being logged.

[/EDIT]

Link to comment

 

...

As of now this is the only remark I can be confident to speak of regarding the script. As I said before, while I have some general understanding I'm still green when it comes to papyrus. But if there's something I could take a look at I'd love to, as you can see I take enjoyment in all this and I love to help when I can. \o/

 

If you mean the log error spam people like me were getting just adding...

 

if(actra==None)

return true

endif

 

...to the isAllowed function will probably allow papyrus to digest the infinite loop (i>l) instead of crashing into actra.IsChild(), it did for me and all is ok now. I can't say that's the most logical fix and shouldn't be kept permanently but since other functions like setActors are being pulled from the save and can't be "released" until the active loop ends this was the only way I could manage to stop it (this might be a rare case for people that had the issue start in previous versions).

 

Making it return false makes more sense and could be left there permanently but maybe the version of the setActors function that got stored in my save is from a version that didn't have the else statement that stops the loop in it yet. I've got no idea when the issue started in my old save, could've been a month ago, or more.

 

[EDIT]

Oh, wait, wait.

At OSA.psc line 272, does this line actually do anything?

 

i+99

 

I'm still unfamiliar with the syntax for papyrus, but I assume this should be i+=99 or i=99? Maybe this is why returning false didnt end the loop. I've been looking at that so many times and only noticed it now...

Might be the main culprit of the infinite loops right there, if I'm seeing that right you can even have some running without any errors being logged.

[/EDIT]

 

 

It's important to make sure you don't have any old script code in your game save.  That would undoubtedly cause you to see errors that others weren't getting.

 

The full function you mention:

 

bool function setActors(string[] sceneSuite, actor[] actra) global
int i = 0
int l = actra.length
while i < l
sceneSuite[i+1] = id(actra[i])
i+=1
endWhile
oGlyphSS(".glyph.setActors", PapyrusUtil.SliceStringArray(sceneSuite, 0, L))
i=0

faction statusFaction = Game.GetFormFromFile(0x00006190, "OSA.esm") as faction

bool approved = true
while i < l
if _oGlobal.checkActra(sceneSuite[0], actra[i], statusFaction)
i+=1
else
approved = false
i+99
endIf
endWhile

if approved == true
(Quest.GetQuest("0SA") as _oOmni).prepActra(sceneSuite, actra)
endif
return approved
endFunction

i+99 looks pretty friggin' suspect to me.  The question is, what should be there instead?  i+=99 makes no sense, because that would remove the need for a loop, as both the If and Else branches would increment i to greater than 0, resulting in the loop ending after just one pass no matter what.

 

As it stands, an infinite loop certainly looks possible if an actor doesn't pass the IsAllowed function.  The first line of the If branch uses a function in oGlobal which calls IsAllowed and that is where the log spam gets written.  However, the infinite loop is not why the log spam takes place.  The log spam is a result of IsAllowed being run on an Actra set to None.  That shouldn't be possible and it is a sign that something else is wrong.  We would need to find out how Actra is getting set to None, in addition to figuring out what should be in place of i+99.

Link to comment

 

...

 

Yeah, actra being set to none is still up in the air and I have no clue.

 

As for why i+99 was probably intended to be i+=99 or i=99: since you have approved = false which seems intent on terminating the scene anyways, 99 is simply a number that'd end the loop by being applied into variable "i" (as it's very unlikely you'd have something over 99 for the variable "l" (the number of actors being checked, not zero) ).

 

This sudden termination of the scene when one of the isAllowed returns false might not be the best choice but this is a work in progress after all so I can see this function being revisited and changed to acomodate that. The i+99 needs patching with a little bit of urgency though, I think. >_<

Link to comment

Hi uh not sure where to start :s pretty new here !! but i think i missed up big time and now won't get osex to run for me anymore.  :( After i installed osa everything just stopped working.. I would press the mod start hotkey and nothing, install all the patches and latest files over again nothing either!

 

Note: i had the older version of osex installed while doing that I knew i fucked up after reading the instructions

Link to comment

Hi uh not sure where to start :s pretty new here !! but i think i missed up big time and now won't get osex to run for me anymore.  :( After i installed osa everything just stopped working.. I would press the mod start hotkey and nothing, install all the patches and latest files over again nothing either!

 

Note: i had the older version of osex installed while doing that I knew i fucked up after reading the instructions

 

You cannot run OSA with an old version of OSex.  You need to uninstall the old OSex, then start a new game, then install OSA and the new OSex from the Nexus.

 

You could also try uninstalling the old OSex and using a script cleaner on your old game saves, but I get the feeling you don't have much experience doing that.

Link to comment

The thing that gets me is how am I supposed to play with OSA when the numberpad keys are also firing off my listed Favorites?

 

I hit numpad 4 it also acts like number 4 so my character equips the weapon I have keymapped to number 4.

 

Is there an out of game engine configuration or MCM menu Im not seeing?

Link to comment

The thing that gets me is how am I supposed to play with OSA when the numberpad keys are also firing off my listed Favorites?

 

I hit numpad 4 it also acts like number 4 so my character equips the weapon I have keymapped to number 4.

 

Is there an out of game engine configuration or MCM menu Im not seeing?

There are different mods that allow you to remove or change the forced numpad keybinds to your quickslots. My choice is fairly old and can change a lot of key behavior but works ok for me, maybe someone can suggest something that only applies to the numpad.

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