Jump to content

Corrupt Saves - StrCount > 0xFFFF - CTD on load


bcsp

Recommended Posts

  • Replies 204
  • Created
  • Last Reply

Top Posters In This Topic

Link to the Restringer app by Mark: http://www.loverslab.com/topic/61279-restringer/

 

There's also been another very interesting development: http://www.loverslab.com/topic/61293-help-test-fix-for-save-game-string-table-overflow/

that 2nd one i think will be perfect for people in the midst of a current playthru that want to continue it. but sadly it seems the current Save Game Cleaner type programs will NOT work on saves using that 2nd method. hopefully someone can make the save cleaners work with that method because they're invaluable for cleanin and even just testing. i gots my donating finger ready!

 

the Restringer will be THE method for building a NEW game i think

Link to comment
Share on other sites

 

that 2nd one i think will be perfect for people in the midst of a current playthru that want to continue it. but sadly it seems the current Save Game Cleaner type programs will NOT work on saves using that 2nd method. hopefully someone can make the save cleaners work with that method because they're invaluable for cleanin and even just testing. i gots my donating finger ready!

 

the Restringer will be THE method for building a NEW game i think

 

 

Yeah that's what I'm thinking to. If we can get save game cleaners and such that can read the saves the 2nd tool makes and loads then that second one will be ideal in pretty much all ways, but until then new games are probably better off reducing initial string count. The second one though is awesome so that people don't have to abandon their current save, at the very least.

Link to comment
Share on other sites

I think that the 2nd mod is better even for a new game, the first one need at least couple of months of extended testing to see what the results would be at the affected mods.

Even if you reduce initial strings with the 1st method at future if you have a long play through with many expansion mods like faalksar beyond skyrim etc the string count eventually will rise again.

Link to comment
Share on other sites

Hey bcsp, thanks for the good read. I certainly didn't expect my mod to come up :tongue: . After looking at a 30 minute playtime save of mine, I found that I have 62215 strings used!! Eek.

 

I'm no expert on scripts so if anyone has any tips on reducing the strings in my script I'd be open to suggestions.

 

http://pastebin.com/RJnY7nGA

 

edit: looks like the guy who made crash fixes is at it again does this fix the problem?

Edited by euphoricknave
Link to comment
Share on other sites

I'm no expert on scripts so if anyone has any tips on reducing the strings in my script I'd be open to suggestions.

 

http://pastebin.com/RJnY7nGA

The easiest solution is to use two FormList properties instead of those arrays and multiple properties. That's the technique Forteverum and I came up with for Immersive Jewelry (for the left and right hand ring swapping) so I know it can scale to a very large number of items. And according to Forteverum getting the two lists set up isn't too bad.

 

You need to keep the items paired in the two lists and formlists will purge None entries so you need to leave the item out of both lists if you can't put it in both. Formlists also can't store duplicates but looking at your existing lists there aren't any duplicates so that shouldn't be a problem. On the positive side you can add or remove items in future updates just by adding or removing entries in the formlists. (The script will force a refresh every game load.)

 

I haven't tested it but this should work if you replace the ?????? with the ids and mod name for the HDT cloaks meant to replace the Campfire cloaks. (The problem is that you need the lists to stay in sync and the easiest way is to handle the pairs the same way for both sets even though you could use properties for the one.) If you use it in an existing game you'll get an initial set of errors about the missing properties, but those should go away after a save and reload.

 

When finished you'll have a total of 3 strings added to the string cache for the revised script (the script name and the two properties).

 

 

ScriptName _eu_COS_PlayerAliasHDTCloakSwap extends ReferenceAlias

FormList property OriginalCloakFL auto

FormList property HDTCloakFL auto

Event OnInit()
	OnPlayerLoadGame()
EndEvent

Event OnPlayerLoadGame()
        OriginalCloakFL.Revert()
        HDTCloakFL.Revert()
	if Game.GetModByName("Campfire.esm") != 255   ; Campfire.esm found
		HDTCloakFL.AddForm(Game.GetFormFromFile(0x??????, "?????????????????")) ; HDTCampfireBasicBurlap
		OriginalCloakFL.AddForm(Game.GetFormFromFile(0x03FA9C, "Campfire.esm")) ; _Camp_Cloak_BasicBurlap

		HDTCloakFL.AddForm(Game.GetFormFromFile(0x??????, "?????????????????")) ; HDTCampfireBasicHide
		OriginalCloakFL.AddForm(Game.GetFormFromFile(0x03FA9F, "Campfire.esm")) ; _Camp_Cloak_BasicHide

		HDTCloakFL.AddForm(Game.GetFormFromFile(0x??????, "?????????????????")) ; HDTCampfireBasicLinen
		OriginalCloakFL.AddForm(Game.GetFormFromFile(0x03FA9D, "Campfire.esm")) ; _Camp_Cloak_BasicLinen
	endif
	RemoveAllInventoryEventFilters()
	AddInventoryEventFilter(OriginalCloakFL) ; avoid overwhelming Papyrus and stack dumps
EndEvent

Event OnItemAdded(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akSourceContainer)
	if akBaseItem as Armor 
		int idx = OriginalCloakFL.Find(akBaseItem)
		if idx != -1 && (HDTCloakFL.GetAt(idx) as Armor) != None
			GetReference().RemoveItem(akBaseItem, aiItemCount, abSilent = true)     
			GetReference().AddItem(HDTCloakFL.GetAt(idx), aiItemCount, abSilent = true)   
		endif
	endif
EndEvent

 

 

Link to comment
Share on other sites

Newest version of the crash fixes mod by meh321has implemented a fix:

http://www.nexusmods.com/skyrim/mods/72725/?

 

Edit: Be aware that once a save goes over the normal string limit, the ususal save tools won't work. Hopefully we'll see an update for the new save format or a new save tool altogether.

Sadly it seem there may be problems with that Crash fixes option, as you can read on lovelab.

 

Has anyone used the Restinger tool on Interesting NPCS and Legacy of Dragonbourne and played for a while? Any conflicts or strangeness?

Link to comment
Share on other sites

So, if i'm understanding everything right, for modders/scripters/whatever this means:

 

1) Reduce the number of scripts because the name of each script is 1 string? Probably much less important than properties though. But still worth repeating "Use existing script (those starting with "default" for example) whenever posible!"

 

2) Reduce the number of uniquely-named properties (and variables? they don't persist on the string table?), meaning the usual PlayerRef does not count because it's probably already in the string table.

And using non-unique names for properties is probably also a good idea, for example: MyEffect, MyQuest, etc. Maybe check how properties are named in vanilla scripts and use those?

The bad side is you cannot autofill, as always convenience vs safety/performance

 

3) Assuming an array property is 1 string, it's probably a good idea to use arrays or formlists (depending on whatever you are doing) if you need a bunch of properties.

Edited by FrankFamily
Link to comment
Share on other sites

  • 2 weeks later...

meh321 has just released a new version of his Crash Fixes mod (v.9). He believes that he got the parts of the StrCount bug fix that were missing in v.8.

 

I can't test this right now as my own setup is no longer breaking 65535 (so far), if anyone else wants to give it a spin though, here it is:

 

http://www.nexusmods.com/skyrim/mods/72725/?

 

Cheers!

Edited by Gawad
Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.

×
×
  • Create New...