Easy save is not easy for me!

Discussion and help for Easy Save 3
User avatar
fanaei
Posts: 26
Joined: Thu Aug 23, 2018 7:54 am

Easy save is not easy for me!

Post by fanaei »

Hi. I'm an Artist and working on my indie Adventure game. When I saw your asset I thought it would be easy to use it, but now I feel it's not EASY at all! So I have some questions:

1- What's the difference between Easy Save 2 and 3? Which version I should use?
2- I couldn't find any beginner video tutorial for your asset, is there any?
3- I tried to use Auto Save from EasySave3, but I couldn't find any way to just save some specific variables! Is there any way for doing it? Or if it's just save everything, it doesn't make the save file too big?
4- I tried to use Auto save from EasySave2, but when I was trying to select which variables to save, the unity became too much slow and laggy!
5- I'm trying to upload the save file to Google play services with the help of "Easy Mobile" asset (I should mention that wasn't easy, too!) can you show me (as a noob) to how to do it?

Thanks in advance
User avatar
Joel
Moodkie Staff
Posts: 4848
Joined: Wed Nov 07, 2012 10:32 pm

Re: Easy save is not easy for me!

Post by Joel »

Hi there,

Sorry to hear you're having trouble with Easy Save.

You should use Easy Save 3, as Easy Save 2 is included for backwards compatibility. Easy Save 3 is much simpler to use, and has more functionality.

We do not currently have tutorial videos, but you can find guides here: https://docs.moodkie.com/product/easy-s ... s3-guides/

If you wish to change what variables are saved when you use Auto Save, you can go to Window > Easy Save 3 > Types, search for your type, and then select which variables you want to be saved for that type.

Unfortunately as I have no experience with "Easy Mobile" (this asset is not affiliated with us), I can't provide any specific guidance. However, you can use ES3.LoadRawString to load save data as a string, which you should presumably be able to save to Google Play. You can then use ES3.SaveRaw to save a string downloaded from Google Play to a local file.

There's also general information in integrating with other storage APIs here, if you do not want to store the data locally: https://docs.moodkie.com/easy-save-3/es ... rage-apis/.

All the best,
Joel
Joel @ Moodkie Interactive
Purchase Easy Save | Contact | Guides | Docs | Getting started
User avatar
fanaei
Posts: 26
Joined: Thu Aug 23, 2018 7:54 am

Re: Easy save is not easy for me!

Post by fanaei »

Thank you.
You should use Easy Save 3, as Easy Save 2 is included for backwards compatibility. Easy Save 3 is much simpler to use, and has more functionality.
So Can I delete EasySave2 folders from Assets and plugins? (Also there is no EasySave3 folder in Assets folder, but I saw in a topic that you said there is an EasySave3 folder in Assets)
Easysave2.jpg
Easysave2.jpg (33.46 KiB) Viewed 6815 times
User avatar
fanaei
Posts: 26
Joined: Thu Aug 23, 2018 7:54 am

Re: Easy save is not easy for me!

Post by fanaei »

Why every time that I want to check or uncheck a variable in types setting, the unity tries to compile the codes?
It makes the process so laggy and takes a long time.
User avatar
fanaei
Posts: 26
Joined: Thu Aug 23, 2018 7:54 am

Re: Easy save is not easy for me!

Post by fanaei »

Another problem:
When I set a password for save file I get this error on save:

Code: Select all

CryptographicException: Invalid input block size.
Mono.Security.Cryptography.SymmetricTransform.FinalDecrypt (System.Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount)
Mono.Security.Cryptography.SymmetricTransform.TransformFinalBlock (System.Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount)
System.Security.Cryptography.CryptoStream.Read (System.Byte[] buffer, Int32 offset, Int32 count) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Security.Cryptography/CryptoStream.cs:205)
ES3Internal.EncryptionAlgorithm.CopyStream (System.IO.Stream input, System.IO.Stream output, Int32 bufferSize) (at Assets/Plugins/Easy Save 3/Scripts/ES3Crypto.cs:38)
ES3Internal.AESEncryptionAlgorithm.Decrypt (System.IO.Stream input, System.IO.Stream output, System.String password, Int32 bufferSize) (at Assets/Plugins/Easy Save 3/Scripts/ES3Crypto.cs:139)
ES3Internal.UnbufferedCryptoStream..ctor (System.IO.Stream stream, Boolean isReadStream, System.String password, Int32 bufferSize, ES3Internal.EncryptionAlgorithm alg) (at Assets/Plugins/Easy Save 3/Scripts/ES3Crypto.cs:165)
(wrapper remoting-invoke-with-check) ES3Internal.UnbufferedCryptoStream:.ctor (System.IO.Stream,bool,string,int,ES3Internal.EncryptionAlgorithm)
ES3Internal.ES3Stream.CreateStream (.ES3Settings settings, ES3FileMode fileMode) (at Assets/Plugins/Easy Save 3/Scripts/Streams/ES3Stream.cs:62)
ES3Reader.Create (.ES3Settings settings) (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs:309)
ES3Writer.Merge () (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:358)
ES3Writer.Save (Boolean overwriteKeys) (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:388)
ES3Writer.Save () (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:380)
ES3.Save[GameObject[]] (System.String key, System.Object value, .ES3Settings settings) (at Assets/Plugins/Easy Save 3/Scripts/ES3.cs:41)
ES3AutoSaveMgr.Save () (at Assets/Plugins/Easy Save 3/Scripts/Auto Save/ES3AutoSaveMgr.cs:31)
SaveLoadGame.SaveTheGame () (at Assets/Scripts/Common/SaveLoadGame.cs:14)
UnityEngine.Events.InvokableCall.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:166)
UnityEngine.Events.UnityEvent.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent_0.cs:58)
UnityEngine.UI.Button.Press () (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:36)
UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:45)
UnityEngine.EventSystems.ExecuteEvents.Execute (IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:50)
UnityEngine.EventSystems.ExecuteEvents.Execute[IPointerClickHandler] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.EventFunction`1 functor) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:261)
UnityEngine.EventSystems.EventSystem:Update()
And error on Load:

Code: Select all

CryptographicException: Invalid input block size.
Mono.Security.Cryptography.SymmetricTransform.FinalDecrypt (System.Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount)
Mono.Security.Cryptography.SymmetricTransform.TransformFinalBlock (System.Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount)
System.Security.Cryptography.CryptoStream.Read (System.Byte[] buffer, Int32 offset, Int32 count) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Security.Cryptography/CryptoStream.cs:205)
ES3Internal.EncryptionAlgorithm.CopyStream (System.IO.Stream input, System.IO.Stream output, Int32 bufferSize) (at Assets/Plugins/Easy Save 3/Scripts/ES3Crypto.cs:38)
ES3Internal.AESEncryptionAlgorithm.Decrypt (System.IO.Stream input, System.IO.Stream output, System.String password, Int32 bufferSize) (at Assets/Plugins/Easy Save 3/Scripts/ES3Crypto.cs:139)
ES3Internal.UnbufferedCryptoStream..ctor (System.IO.Stream stream, Boolean isReadStream, System.String password, Int32 bufferSize, ES3Internal.EncryptionAlgorithm alg) (at Assets/Plugins/Easy Save 3/Scripts/ES3Crypto.cs:165)
(wrapper remoting-invoke-with-check) ES3Internal.UnbufferedCryptoStream:.ctor (System.IO.Stream,bool,string,int,ES3Internal.EncryptionAlgorithm)
ES3Internal.ES3Stream.CreateStream (.ES3Settings settings, ES3FileMode fileMode) (at Assets/Plugins/Easy Save 3/Scripts/Streams/ES3Stream.cs:62)
ES3Reader.Create (.ES3Settings settings) (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs:309)
ES3Writer.Merge () (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:358)
ES3Writer.Save (Boolean overwriteKeys) (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:388)
ES3Writer.Save () (at Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Writer.cs:380)
ES3.Save[GameObject[]] (System.String key, System.Object value, .ES3Settings settings) (at Assets/Plugins/Easy Save 3/Scripts/ES3.cs:41)
ES3AutoSaveMgr.Save () (at Assets/Plugins/Easy Save 3/Scripts/Auto Save/ES3AutoSaveMgr.cs:31)
SaveLoadGame.SaveTheGame () (at Assets/Scripts/Common/SaveLoadGame.cs:14)
UnityEngine.Events.InvokableCall.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:166)
UnityEngine.Events.UnityEvent.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent_0.cs:58)
UnityEngine.UI.Button.Press () (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:36)
UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:45)
UnityEngine.EventSystems.ExecuteEvents.Execute (IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:50)
UnityEngine.EventSystems.ExecuteEvents.Execute[IPointerClickHandler] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.EventFunction`1 functor) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:261)
UnityEngine.EventSystems.EventSystem:Update()
User avatar
Joel
Moodkie Staff
Posts: 4848
Joined: Wed Nov 07, 2012 10:32 pm

Re: Easy save is not easy for me!

Post by Joel »

Hi there,

You can indeed delete the Easy Save 2 folder from Assets and Plugins.

The /Assets/Easy Save 3/ folder is created if you create an ES3Type from the Types pane.

The Types panel recompiles each time you select a variable as it is modifying a Type file. However, if this is causing slowdown for people then I will change it so that you have to press a button to make the changes persist.

Regarding the error you are getting, this usually occurs because save data exists which is not encrypted (when it's expecting encrypted data) or uses a different password. Deleting your old save data should rectify this. You can do this by going to Window > Easy Save 3 > Tools > Open Persistent Data Path, and deleting the save data from there.

All the best,
Joel
Joel @ Moodkie Interactive
Purchase Easy Save | Contact | Guides | Docs | Getting started
User avatar
fanaei
Posts: 26
Joined: Thu Aug 23, 2018 7:54 am

Re: Easy save is not easy for me!

Post by fanaei »

Thanks. Having that button or an option to save automatically or not, would be great.
Now I should wait for an update to have this ability?
User avatar
Joel
Moodkie Staff
Posts: 4848
Joined: Wed Nov 07, 2012 10:32 pm

Re: Easy save is not easy for me!

Post by Joel »

Hi there,

I've just created an update which saves your changes in the Types pane when it loses focus or is closed, which will stop it from recompiling each time you press a button.

If you PM me your invoice number, I'll send you over the update.

All the best,
Joel
Joel @ Moodkie Interactive
Purchase Easy Save | Contact | Guides | Docs | Getting started
User avatar
fanaei
Posts: 26
Joined: Thu Aug 23, 2018 7:54 am

Re: Easy save is not easy for me!

Post by fanaei »

Thank you. I just sent you the invoice number.
User avatar
fanaei
Posts: 26
Joined: Thu Aug 23, 2018 7:54 am

Re: Easy save is not easy for me!

Post by fanaei »

I got this error after adding Auto save component to my Inventory object:
Does it mean that I can't use Sprites as variables?!

Code: Select all

ArgumentException: Only types of UnityEngine.Object can be written with this method, but argument given is type of UnityEngine.Sprite
Post Reply