Auto Save - Save string and Load it (Format Exception expected : found ,)

Discussion and help for Easy Save 3
Post Reply
Haytam95
Posts: 4
Joined: Sun Jun 20, 2021 1:07 am

Auto Save - Save string and Load it (Format Exception expected : found ,)

Post by Haytam95 »

Hi!

I'm trying to use Easy Save with it's AutoSave feature to store the data of a character. This is working with Opsive Saver (From pixel crushers).

Currently I've defined a custom object type to store the string that Opsive Saver generate, and restore it, here it is:

Code: Select all

namespace ES3Types
{
	[UnityEngine.Scripting.Preserve]
	[ES3PropertiesAttribute()]
	public class ES3UserType_UCCSaver : ES3ComponentType
	{
		public static ES3Type Instance = null;

		public ES3UserType_UCCSaver() : base(typeof(PixelCrushers.UCCSupport.UCCSaver)){ Instance = this; priority = 1;}


		protected override void WriteComponent(object obj, ES3Writer writer)
		{
			var instance = (PixelCrushers.UCCSupport.UCCSaver)obj;
			writer.WriteProperty(instance.key, instance.RecordData());

		}

		protected override void ReadComponent<T>(ES3Reader reader, object obj)
		{
			var instance = (PixelCrushers.UCCSupport.UCCSaver)obj;
			var result = reader.Read<string>(instance.key);
			// var result = reader.Read<System.String>(instance.key);
			instance.ApplyData(result);
		}
	}


	public class ES3UserType_UCCSaverArray : ES3ArrayType
	{
		public static ES3Type Instance;

		public ES3UserType_UCCSaverArray() : base(typeof(PixelCrushers.UCCSupport.UCCSaver[]), ES3UserType_UCCSaver.Instance)
		{
			Instance = this;
		}
	}
}
The save is doing okay, but the Load fails with an exception. "Format Exception", :?

Here is the data generated:

Code: Select all

{
				"_ES3Ref" : "2039910722573824912",
				"transformID" : 7047994908928221749,
				"layer" : 31,
				"tag" : "Player",
				"name" : "Director_old",
				"hideFlags" : 0,
				"active" : true,
				"components" : [
					{
						"__type" : "PixelCrushers.UCCSupport.UCCSaver,Assembly-CSharp",
						"_ES3Ref" : "5284029845438797141",
						"goID" : "2039910722573824912",
						"Director_old" : "{\"positions\":[{\"scene\":2,\"position\":{\"x\":-27.160655975341798,\"y\":6.509002685546875,\"z\":14.586334228515625},\"rotation\":{\"x\":0.0,\"y\":0.6474076509475708,\"z\":0.0,\"w\":0.7621439695358276}}],\"attributes\":[100.0,0.0,5.0,0.0,0.0],\"attributesMin\":[0.0,0.0,0.0,0.0,0.0],\"attributesMax\":[100.0,100.0,5.0,100.0,100.0],\"items\":[],\"firstPerson\":true}"
					}
				]
			}
And here is the Stack:

Code: Select all

FormatException: Expected ':', found ','.
ES3Internal.ES3JSONReader.ReadCharIgnoreWhitespace (System.Char expectedChar) (at Assets/Easy Save 3/Scripts/Readers/ES3JSONReader.cs:374)
ES3Internal.ES3JSONReader.ReadPropertyName () (at Assets/Easy Save 3/Scripts/Readers/ES3JSONReader.cs:72)
ES3Reader.Goto (System.String key) (at Assets/Easy Save 3/Scripts/Readers/ES3Reader.cs:53)
ES3Reader.Read[T] (System.String key) (at Assets/Easy Save 3/Scripts/Readers/ES3Reader.cs:192)
ES3Types.ES3UserType_UCCSaver.ReadComponent[T] (ES3Reader reader, System.Object obj) (at Assets/Easy Save 3/Types/ES3UserType_UCCSaver.cs:25)
ES3Types.ES3ComponentType.ReadUnityObject[T] (ES3Reader reader, System.Object obj) (at Assets/Easy Save 3/Scripts/Types/ES3ComponentType.cs:36)
ES3Types.ES3UnityObjectType.ReadObject[T] (ES3Reader reader, System.Object obj) (at Assets/Easy Save 3/Scripts/Types/ES3UnityObjectType.cs:65)
ES3Types.ES3ObjectType.ReadInto[T] (ES3Reader reader, System.Object obj) (at Assets/Easy Save 3/Scripts/Types/ES3ObjectType.cs:77)
ES3Types.ES3Type_GameObject.ReadComponents (ES3Reader reader, UnityEngine.GameObject go) (at Assets/Easy Save 3/Scripts/Types/Unity Types/ES3Type_GameObject.cs:211)
ES3Types.ES3Type_GameObject.ReadObject[T] (ES3Reader reader, System.Object obj) (at Assets/Easy Save 3/Scripts/Types/Unity Types/ES3Type_GameObject.cs:162)
ES3Types.ES3ObjectType.ReadInto[T] (ES3Reader reader, System.Object obj) (at Assets/Easy Save 3/Scripts/Types/ES3ObjectType.cs:77)
ES3Types.ES3Type_GameObject.ReadObject[T] (ES3Reader reader) (at Assets/Easy Save 3/Scripts/Types/Unity Types/ES3Type_GameObject.cs:126)
ES3Types.ES3ObjectType.Read[T] (ES3Reader reader) (at Assets/Easy Save 3/Scripts/Types/ES3ObjectType.cs:54)
ES3Reader.ReadObject[T] (ES3Types.ES3Type type) (at Assets/Easy Save 3/Scripts/Readers/ES3Reader.cs:249)
ES3Reader.Read[T] (ES3Types.ES3Type type) (at Assets/Easy Save 3/Scripts/Readers/ES3Reader.cs:278)
ES3Types.ES3CollectionType.ReadICollection[T] (ES3Reader reader, System.Collections.Generic.ICollection`1[T] collection, ES3Types.ES3Type elementType) (at Assets/Easy Save 3/Scripts/Types/Collection Types/ES3CollectionType.cs:52)
ES3Types.ES3ArrayType.Read (ES3Reader reader) (at Assets/Easy Save 3/Scripts/Types/Collection Types/ES3ArrayType.cs:36)
ES3Reader.Read[T] (ES3Types.ES3Type type) (at Assets/Easy Save 3/Scripts/Readers/ES3Reader.cs:274)
ES3Reader.Read[T] (System.String key, T defaultValue) (at Assets/Easy Save 3/Scripts/Readers/ES3Reader.cs:212)
ES3.Load[T] (System.String key, T defaultValue, ES3Settings settings) (at Assets/Easy Save 3/Scripts/ES3.cs:443)
ES3AutoSaveMgr.Load () (at Assets/Easy Save 3/Scripts/Auto Save/ES3AutoSaveMgr.cs:85)
_Game.Scripts.SaveSystem.SaveAndLoadSlot.LoadSlot () (at Assets/_Game/Scripts/SaveSystem/SaveAndLoadSlot.cs:25)
I don't know how could I fix this problem. I thought that maybe the problem was that the json was being broken, but it's not (I've checked it using an online json viewer)
User avatar
Joel
Moodkie Staff
Posts: 4849
Joined: Wed Nov 07, 2012 10:32 pm

Re: Auto Save - Save string and Load it (Format Exception expected : found ,)

Post by Joel »

Hi there,

You appear to have removed the foreach loop from the ReadComponent method of the ES3Type. This is necessary for the ES3Type to function. Please see the guide for more information:

https://docs.moodkie.com/easy-save-3/es ... -is-saved/

All the best,
Joel
Joel @ Moodkie Interactive
Purchase Easy Save | Contact | Guides | Docs | Getting started
Post Reply