Page 1 of 1

Dialogue System Saver causing issue with storing actor field

Posted: Sat Jul 04, 2020 12:11 pm
by rjb32
Hello,

I'm experiencing a weird issue that I'm not sure how to resolve.

I have two scenes. On Scene A, I have my Dialogue Manager with the following components recommended by the documentation to add for the saving system: Dialogue System Saver, Save System, PlayerPrefs Saved Game Data Storer, Json Data Serializer, and Standard Scene Transition Manager. Scene B does not have a Dialogue Manager present.

The intended purpose of these two scenes is for the player to interact with an object on Scene A that triggers a conversation. Selecting an option in that conversation calls LoadLevel() and transitions the player to Scene B. Scene B has an "On start" trigger that first calls a custom sequence to adjust some fields in the database's Player actor. This same trigger then plays a conversation. There is then an "on conversation end" trigger that transitions the player back to Scene A. I write to the console on each scene to track the changes.

The issue I'm experiencing is that the player fields I'm adjusting on Scene B do not persist after the transition to Scene A -- they revert back to what they originally were. However, if I disable the Dialogue System Saver component on the Dialogue Manager, the field changes do persist.

I'm not sure if I've done something incorrectly regarding the save system or how to further troubleshoot this issue. Any help or advice would be greatly appreciated.

Thank you!

Re: Dialogue System Saver causing issue with storing actor field

Posted: Sat Jul 04, 2020 2:50 pm
by Tony Li
Hi,

After loading a new scene, the save system waits a number of frames before applying save data. This allows scripts that initialize themselves in Start() methods to finish initialization first. You can set the number of frames on the Save System component. By default, it waits 1 frame.

What's happening here is that the "On Start" trigger changes the Dialogue System's data as soon as the scene starts. Then, after a number of frames, the Dialogue System Saver component overwrites the change with the data stored in the save system.

Through DS version 2.2.7, normally you'd change the "On Start" trigger to an "On Use" trigger, and add a Timed Event component to call the trigger's OnUse method after a number of frames.

However, version 2.2.8 adds a new checkbox "Skip Apply Data After Frames If Apply Immediate" to the Dialogue System Saver component. This tells the Dialogue System to immediately restore its data from the save system as soon as the new scene is loaded, and then don't restore it again after a number of frames. It's ticked by default. If you want to use this new checkbox, you can download a patch here:

DS_SaverPatch_2020-07-04.unitypackage

(Version 2.2.8 should be available in the second half of next week.)

Re: Dialogue System Saver causing issue with storing actor field

Posted: Sat Jul 04, 2020 3:13 pm
by rjb32
That explanation was very helpful. I've downloaded the patch and it has fixed my issue.

Thank you!

Re: Dialogue System Saver causing issue with storing actor field

Posted: Sat Jul 04, 2020 3:32 pm
by Tony Li
Glad to help! :-)