Page MenuHomeFeedback Tracker

GetPersistentID returns incorrect ID in OnStoreLoad
Assigned, UrgentPublic

Description

Given the following example code, the persistent ID returned in OnStoreLoad is incorrect (doesn't match AfterStoreLoad/OnStoreSave where it is correct):

modded class ItemBase
{
	override bool OnStoreLoad(ParamsReadContext ctx, int version)
	{
		if (!super.OnStoreLoad(ctx, version))
			return false;

		int b1, b2, b3, b4;
		GetPersistentID(b1, b2, b3, b4);
		Print(ToString() + "::OnStoreLoad - persistent ID <" + b1 + ", " + b2 + ", " + b3 + ", " + b4 + ">");

		return true;
	}

	override void AfterStoreLoad()
	{
		super.AfterStoreLoad();

		int b1, b2, b3, b4;
		GetPersistentID(b1, b2, b3, b4);
		Print(ToString() + "::AfterStoreLoad - persistent ID <" + b1 + ", " + b2 + ", " + b3 + ", " + b4 + ">");
	}

	override void OnStoreSave(ParamsWriteContext ctx)
	{
		super.OnStoreSave(ctx);

		int b1, b2, b3, b4;
		GetPersistentID(b1, b2, b3, b4);
		Print(ToString() + "::OnStoreSave - persistent ID <" + b1 + ", " + b2 + ", " + b3 + ", " + b4 + ">");
	}
}

Result (excerpt):

SCRIPT       : Pliers<b88a7660>::OnStoreLoad - persistent ID <798189327, 1598056803, -557177952, 151747679>
SCRIPT       : Pliers<b88a7660>::AfterStoreLoad - persistent ID <-1912522676, -515547464, 1276308636, -1871300054>
SCRIPT       : Pliers<b88a7660>::OnStoreSave - persistent ID <-1912522676, -515547464, 1276308636, -1871300054>
...snip...
SCRIPT       : CamoNet<b88a5020>::OnStoreLoad - persistent ID <460215492, -918281111, -1071962729, 899361833>
SCRIPT       : CamoNet<b88a5020>::AfterStoreLoad - persistent ID <-1870548345, -1035170369, 1236795313, -1098884204>
SCRIPT       : CamoNet<b88a5020>::OnStoreSave - persistent ID <-1870548345, -1035170369, 1236795313, -1098884204>

Details

Severity
None
Resolution
Open
Reproducibility
Always
Operating System
Windows 10 x64
Category
Scripting
Steps To Reproduce

Use GetPersistentID in OnStoreLoad after calling the super.

Additional Information

This is currently a blocker for the "ModStorage" feature in CF (Community Framework) that would allow mods that use the game storage to be added or removed without requiring to wipe the storage data.

Event Timeline

lava76 created this task.Feb 12 2022, 11:17 AM
lava76 changed Category from General to Scripting.Feb 12 2022, 12:19 PM
Geez changed the task status from New to Assigned.Feb 14 2022, 9:55 AM