private static void SL_OnGameplayResumedAfterLoading() { if (!StashAreaToStashUID.ContainsKey(SceneManagerHelper.ActiveSceneName) || PhotonNetwork.isNonMasterClientInRoom) { return; } try { TryLoadStashes(SaveManager.Instance.m_charSaves[CharacterManager.Instance.GetFirstLocalCharacter().UID].CurrentSaveInstance); } catch (Exception ex) { Log.LogMessage($"Error loading stashes: {ex}"); } }
private bool SaveInstance_ApplyEnvironment(On.SaveInstance.orig_ApplyEnvironment orig, SaveInstance self) { bool result = orig.Invoke(self); EnvironmentSave loadedScene = GetPrivatePart <EnvironmentSave, SaveInstance>(self, "m_loadedScene"); if (loadedScene == null || !StashAreaToStashUID.ContainsKey(loadedScene.AreaName)) { return(result); } string areaName = loadedScene.AreaName; List <EnvironmentSave> otherAreaSaves = AreasWithExistingStashChests(self, areaName); if (otherAreaSaves.Count == 0) { Debug.Log("Linked Stash Chests: No other stash chests to sync with."); return(result); } var treasureChest = (TreasureChest)ItemManager.Instance.GetItem(StashAreaToStashUID[areaName]); if (treasureChest == null) { Debug.LogWarning("Linked Stash Chests: Could not get loaded stash chest in " + areaName + ". Aborting."); return(result); } var bufferedLog = new StringBuilder(); try { BasicSaveData basicSaveData = null; var currentStashItems = new List <BasicSaveData>(); if (self.PathToSceneSaves.ContainsKey(areaName)) { basicSaveData = GetSavedStashChest(loadedScene); currentStashItems = GetSavedStashItems(loadedScene); } if (basicSaveData == null) { basicSaveData = new BasicSaveData(treasureChest.UID, treasureChest.ToSaveData()); } bufferedLog.AppendLine("--------------------------------- Linked Stash Chests ---------------------------------"); bufferedLog.AppendLine($"{areaName}'s stash chest BEFORE pulling all other stash chest items into it:"); bufferedLog.AppendLine($"{currentStashItems.Count} items: {basicSaveData.Identifier} {basicSaveData.SyncData}"); foreach (EnvironmentSave otherAreaSave in otherAreaSaves) { BasicSaveData otherStashChest = GetSavedStashChest(otherAreaSave); List <BasicSaveData> otherStashItems = GetSavedStashItems(otherAreaSave, StashAreaToStashUID[areaName]); bufferedLog.AppendLine(); bufferedLog.AppendLine($"{otherAreaSave.AreaName}'s SAVED stash chest BEFORE pulling all its items into {areaName}'s stash chest:"); bufferedLog.AppendLine($"{otherStashItems.Count} items: {(otherStashChest == null ? "null" : otherStashChest.Identifier + " " + otherStashChest.SyncData)}"); RemoveSavedStashItems(otherAreaSave); ItemManager.Instance.LoadItems(otherStashItems); int savedStashSilver = GetSavedStashSilver(otherStashChest); SetSavedStashSilver(0, otherStashChest); AddSavedStashSilver(savedStashSilver, basicSaveData); ItemManager.Instance.LoadItems(new List <BasicSaveData>(1) { basicSaveData }); currentStashItems.AddRange(otherStashItems); otherAreaSave.ProcessSave(); otherStashItems = GetSavedStashItems(otherAreaSave, StashAreaToStashUID[areaName]); bufferedLog.AppendLine($"{otherAreaSave.AreaName}'s SAVED stash chest AFTER pulling all its items into {areaName}'s stash chest:"); bufferedLog.AppendLine($"{otherStashItems.Count} items): {(otherStashChest == null ? "null" : otherStashChest.Identifier + " " + otherStashChest.SyncData)}"); } bufferedLog.AppendLine(); bufferedLog.AppendLine($"{areaName}'s stash chest AFTER pulling all other stash chest items into it:"); bufferedLog.AppendLine($"{currentStashItems.Count} items: {basicSaveData.Identifier + " " + basicSaveData.SyncData}"); bufferedLog.AppendLine("---------------------------------------------------------------------------------------"); } finally { Debug.Log(bufferedLog.ToString()); } return(result); }