Hangs on Data Saving.

Discussion and help for Easy Save 3
deverydoo
Posts: 8
Joined: Sun May 05, 2019 11:45 pm

Re: Hangs on Data Saving.

Post by deverydoo »

I see Exactly what you are saying. I loaded EasySave 3 into a different game I have.This also is using Steam. The types are there.

The game with Issues has over 1000 types. Would this be a Unity limitation?

ES3Types.ES32DArrayType
ES3Types.ES33DArrayType
ES3Types.ES3ArrayType
ES3Types.ES3CollectionType
ES3Types.ES3DictionaryType
ES3Types.ES3HashSetType
ES3Types.ES3ListType
ES3Types.ES3QueueType
Now available on Steam and XBox!
https://www.animalfriendsAdventure.com
User avatar
Joel
Moodkie Staff
Posts: 4846
Joined: Wed Nov 07, 2012 10:32 pm

Re: Hangs on Data Saving.

Post by Joel »

Hi there,

Unity is not limited in the number of types it can have. If Easy Save is still running (albeit with the error you're getting), this tells me that the ES3Types are being put into a different assembly. It would be impossible for Easy Save 3 to run without these classes, so they must exist somewhere else.

The easiest way to find out what assembly the types exist in is to iterate over all assemblies and search each one individually until we find the one containing the types. Would you be able to run the script below to find out which assembly they exist in?
using UnityEngine;
using System.Reflection;

public class GetAssemblies : MonoBehaviour
{
    public void Awake()
    {
        var assemblies =  = AppDomain.CurrentDomain.GetAssemblies();
        foreach(var assembly in assemblies)
		{
			foreach (var type in assembly.GetTypes())
			{
				if(typeof(ES3Type).IsAssignableFrom(type))
				{
					Debug.Log("SUCCESS: ES3Types exist in assembly " + assembly.ToString());
					return;
				}
			}
			Debug.Log("ES3Types do *not* exist in assembly "+assembly.ToString());
		}
    }
}
All the best,
Joel
Joel @ Moodkie Interactive
Purchase Easy Save | Contact | Guides | Docs | Getting started
deverydoo
Posts: 8
Joined: Sun May 05, 2019 11:45 pm

Re: Hangs on Data Saving.

Post by deverydoo »

New Exception error now. I deleted a lot of the "StandardAssets" stuff and the types finally showed up.

This happens when doing a Standalone windows build in Unity 2018.3.12f1 with IL2CPP and either .Net Standard or 4.x as the API level.

System.Reflections did not have the AppDomain namespace and I could not run the script you provided earlier.

Uploading Crash Report
TypeLoadException: Type list could not be initialised. Please contact Easy Save developers on mail@moodkie.com.
at ES3Internal.ES3TypeMgr.Init () [0x00000] in <00000000000000000000000000000000>:0
at ES3Internal.ES3TypeMgr.GetOrCreateES3Type (System.Type type, System.Boolean throwException) [0x00000] in <00000000000000000000000000000000>:0
at ES3Writer.Write (System.Object value, ES3+ReferenceMode memberReferenceMode) [0x00000] in <00000000000000000000000000000000>:0
at ES3Internal.ES3JSONWriter.StartWriteProperty (System.String name) [0x00000] in <00000000000000000000000000000000>:0
at ES3Writer.Write[T] (System.String key, System.Object value) [0x00000] in <00000000000000000000000000000000>:0
at ES3.Save[T] (System.String key, System.Object value, ES3Settings settings) [0x00000] in <00000000000000000000000000000000>:0
at DataUtil+<SaveCo>d__23.MoveNext () [0x00000] in <00000000000000000000000000000000>:0
at UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) [0x00000] in <00000000000000000000000000000000>:0
Now available on Steam and XBox!
https://www.animalfriendsAdventure.com
User avatar
Joel
Moodkie Staff
Posts: 4846
Joined: Wed Nov 07, 2012 10:32 pm

Re: Hangs on Data Saving.

Post by Joel »

Hi there,

My apologies, it looks like I missed off the top using statement in the script. This script should work:
using System;
using UnityEngine;
using System.Reflection;
 
public class GetAssemblies : MonoBehaviour
{
    public void Awake()
    {
        var assemblies =  = AppDomain.CurrentDomain.GetAssemblies();
        foreach(var assembly in assemblies)
        {
           foreach (var type in assembly.GetTypes())
           {
               if(typeof(ES3Type).IsAssignableFrom(type))
              {
                   Debug.Log("SUCCESS: ES3Types exist in assembly " + assembly.ToString());
                    return;
             }
           }
           Debug.Log("ES3Types do *not* exist in assembly "+assembly.ToString());
      }
    }
}
With regards to the error you've posted, this looks like the same error. I've tried to use your instructions to replicate it but I don't seem to be able to.

Please could you PM me a basic project which replicates this so I can try to understand what is happening?

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