Example #1
0
 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);
        }