Jump to content

Scripts baked in savegames


Lanceor

Recommended Posts

tl;dr Once a script is baked into a savegame, will the old script forever be used even if it is subsequently updated?

 

Long version:

 

I'm having troubles with the TrapDweThresher script spamming my papyrus log, blocking other scripts from working, causing CTDs and being a general PITA.

 

Updating the Unofficial Skyrim Patch (which should fix this script) doesn't seem to have helped - the papyrus spam still exists, though it has changed very slightly:

 

Before updating to USKP 1.3.1

[03/23/2013 - 11:53:00AM] warning:  (00078307): currently does not have 3d and cannot register for animation callbacks. Returni.
stack:
	[ (00078307)].TrapDweThresher.WaitForAnimationEvent() - "<native>" Line ?
	[ (00078307)].TrapDweThresher.fireTrap() - "<savegame>" Line ?
	[ (00078307)].TrapDweThresher.OnActivate() - "TrapBase.psc" Line 87
After updating to USKP 1.3.1
[03/23/2013 - 12:05:29PM] warning:  (00078307): currently does not have 3d and cannot register for animation callbacks. Returni.
stack:
	[ (00078307)].TrapDweThresher.WaitForAnimationEvent() - "<native>" Line ?
	[ (00078307)].TrapDweThresher.fireTrap() - "<savegame>" Line ?
	[ (00078307)].TrapDweThresher.OnActivate() - "TrapBase.psc
I can revert to a savegame from before the papyrus spam started, but I'm not sure if I've encountered a thresher that didn't bug out previously. Does the script get baked in the first time it is run? Will it update? Or will this savegame forever be at risk of encountering the infinite thresher loop?

 

I've tried all the things I can think of to make the script stop - hanging around and waiting for it to stop spinning (which it doesn't), disabling the thresher (script keeps running), SetPapyrusVariable isLoaded false in the console... so far no luck.

Link to comment
Share on other sites

Usually, yes. Once a script is introduced to your game it will remain. There are some updates to scripts which will take. There are other updates which will not. Yours doesn't seem to be from a missing object but it is calling a script from the savegame rather than the script itself. (noted by the "<savegame>" Line ? )

 

You should look at the top of the script and see if you have any references to the script. Something about the script not existing and thus it will use what is in the savegame. Or something about the script doesn't match what is in the savegame and thus it will use what is in the savegame instead. If either one of those is true, then your game will continue to try to use that script no matter what you do.

Link to comment
Share on other sites

Yikes! Thanks for confirming my worst fears. One has to wonder what the team at Bethesda was smoking when they specced a savegame format that pretty much guarantees no forwards compatibility.

 

The script doesn't seem to be missing in the logs, but then I've opened and closed the game so many times during troubleshooting that the first error entry is probably long gone.

 

I'll roll back to before loading that cell and see if the error re-appears. Hopefully the game will bake in the USKP version of the script if it's the first thresher that I've encountered.

Link to comment
Share on other sites

Contrary to popular belief, SCRIPTS do not get saved into your savegame, only the images of the currently running functions. The function will update if a script event that is not currently running is called (by the new script) that is able to kill the running event or function; or once the currently running event/function finishes executing. You cannot replace a function/event with a new one while it is executing.

The way to fix your script error is to make the trap load its 3D so the function can break out of the loop. Try fast travelling to the trap location. If for some reason the trap has been disabled (by a mod or console) when it shouldn't be, then re-enabling that trap should fix it. It shows what damage can be caused when you enable/disable/mod stuff willy nilly - if the scripter didn't anticipate this in their code, the script could get stuck in a loop.

In my skyBirds mod I have code like this to try to catch situations where the 3D has unloaded and abort the script:

If Is3DLoaded() && GetParentCell()
  SplineTranslateToRef(arTarget, afTangentMagnitude, afSpeed, afMaxRotationSpeed)
  Return True
Else


And yet I STILL get the "object has no 3D" errors in the log from time to time (at least not repetitively). So it is even possible for the 3D to unload AFTER the "Is3DLoaded" test but BEFORE the "SplineTranslateTo" function is called. What a major pain in the backside and headache for scripters :wallbash:

Edited by steve40
Link to comment
Share on other sites

  • Recently Browsing   0 members

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