ArgumentException: An item with the same key has already been added

Discussion and help for Easy Save 3
Post Reply
seaniboy2009
Posts: 13
Joined: Thu Sep 17, 2020 9:55 am

ArgumentException: An item with the same key has already been added

Post by seaniboy2009 »

Hi,

I am getting this exception when trying to save, not really sure why as everything has been working fine until I changed 1 prefab.

Code:

public void SaveGameData(int slot)
{

if (slot == 1)
{
ES3AutoSaveMgr.Instance.settings.path = "SaveFile1/AutoSave1.es3";
ES3Settings.defaultSettings.path = "SaveFile1/SaveSlot1";
}
else if (slot == 2)
{
ES3AutoSaveMgr.Instance.settings.path = "SaveFile2/AutoSave2.es3";
ES3Settings.defaultSettings.path = "SaveFile2/SaveSlot2";
}
else if (slot == 3)
{
ES3AutoSaveMgr.Instance.settings.path = "SaveFile3/AutoSave3.es3";
ES3Settings.defaultSettings.path = "SaveFile3/SaveSlot3";
}

else if (slot == 0)
{
if(ES3Settings.defaultSettings.path == "SaveFile1/SaveSlot1")
{
ES3AutoSaveMgr.Instance.settings.path = "SaveFile1/AutoSave1.es3";
}

if (ES3Settings.defaultSettings.path == "SaveFile2/SaveSlot2")
{
ES3AutoSaveMgr.Instance.settings.path = "SaveFile2/AutoSave2.es3";
}

if (ES3Settings.defaultSettings.path == "SaveFile3/SaveSlot3")
{
ES3AutoSaveMgr.Instance.settings.path = "SaveFile3/AutoSave3.es3";
}

}

character.SaveGame();
character.GetComponent<Inventory>().SaveInventory();
inventoryManager.SaveGame();
settings.SaveSettings();
saveManager.Save();
InteractMainMenu();
UpdateLoadUI();
}

Error:

ArgumentException: An item with the same key has already been added. Key: 3156241369745969669
System.Collections.Generic.Dictionary`2[TKey,TValue].TryInsert (TKey key, TValue value, System.Collections.Generic.InsertionBehavior behavior) (at <695d1cc93cca45069c528c15c9fdd749>:0)
System.Collections.Generic.Dictionary`2[TKey,TValue].Add (TKey key, TValue value) (at <695d1cc93cca45069c528c15c9fdd749>:0)
ES3Internal.ES3Prefab.GetReferences () (at Assets/Easy Save 3/Scripts/ES3Prefab.cs:69)
ES3Types.ES3Type_ES3PrefabInternal.Write (System.Object obj, ES3Writer writer) (at Assets/Easy Save 3/Scripts/ES3Prefab.cs:165)
ES3Writer.Write (System.Object value, ES3Types.ES3Type type, ES3+ReferenceMode memberReferenceMode) (at Assets/Easy Save 3/Scripts/Writers/ES3Writer.cs:205)
ES3Writer.WriteProperty (System.String name, System.Object value, ES3Types.ES3Type type, ES3+ReferenceMode memberReferenceMode) (at Assets/Easy Save 3/Scripts/Writers/ES3Writer.cs:269)
ES3Writer.WriteProperty (System.String name, System.Object value, ES3Types.ES3Type type) (at Assets/Easy Save 3/Scripts/Writers/ES3Writer.cs:260)
ES3Types.ES3Type_GameObject.WriteObject (System.Object obj, ES3Writer writer, ES3+ReferenceMode mode) (at Assets/Easy Save 3/Scripts/Types/Unity Types/ES3Type_GameObject.cs:31)
ES3Writer.Write (System.Object value, ES3Types.ES3Type type, ES3+ReferenceMode memberReferenceMode) (at Assets/Easy Save 3/Scripts/Writers/ES3Writer.cs:203)
ES3Types.ES3ArrayType.Write (System.Object obj, ES3Writer writer, ES3+ReferenceMode memberReferenceMode) (at Assets/Easy Save 3/Scripts/Types/Collection Types/ES3ArrayType.cs:26)
ES3Writer.Write (System.Object value, ES3Types.ES3Type type, ES3+ReferenceMode memberReferenceMode) (at Assets/Easy Save 3/Scripts/Writers/ES3Writer.cs:186)
ES3Writer.WriteProperty (System.String name, System.Object value, ES3Types.ES3Type type, ES3+ReferenceMode memberReferenceMode) (at Assets/Easy Save 3/Scripts/Writers/ES3Writer.cs:269)
ES3Writer.Write[T] (System.String key, System.Object value) (at Assets/Easy Save 3/Scripts/Writers/ES3Writer.cs:116)
ES3.Save[T] (System.String key, T value, ES3Settings settings) (at Assets/Easy Save 3/Scripts/ES3.cs:109)
ES3AutoSaveMgr.Save () (at Assets/Easy Save 3/Scripts/Auto Save/ES3AutoSaveMgr.cs:43)
PlayerUIManager.SaveGameData (System.Int32 slot) (at Assets/Scripts/PlayerUIManager.cs:454)
PlayerUIManager.MainStartMenu () (at Assets/Scripts/PlayerUIManager.cs:406)
UnityEngine.Events.InvokableCall.Invoke () (at <af218701fe324032b521ddd91f13662b>:0)
UnityEngine.Events.UnityEvent.Invoke () (at <af218701fe324032b521ddd91f13662b>:0)
UnityEngine.UI.Button.Press () (at Library/PackageCache/com.unity.ugui@1.0.0/Runtime/UI/Core/Button.cs:68)
UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at Library/PackageCache/com.unity.ugui@1.0.0/Runtime/UI/Core/Button.cs:110)
UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/ExecuteEvents.cs:50)
UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor) (at Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/ExecuteEvents.cs:262)
UnityEngine.EventSystems.EventSystem:Update() (at Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/EventSystem.cs:385)
seaniboy2009
Posts: 13
Joined: Thu Sep 17, 2020 9:55 am

Re: ArgumentException: An item with the same key has already been added

Post by seaniboy2009 »

I have resolved it, what i think has happened there was a reference to the prefab i change still in the scene, but the prefab itself did not update, so when saving i was getting the error.

I deleted it then replaced it with the updated prefab and the save now works.
User avatar
Joel
Moodkie Staff
Posts: 4846
Joined: Wed Nov 07, 2012 10:32 pm

Re: ArgumentException: An item with the same key has already been added

Post by Joel »

Glad you managed to find a solution.

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