Example #1
0
 internal static void PlayerProgression_SaveDeathPersistentDataOfCurrentState(On.PlayerProgression.orig_SaveDeathPersistentDataOfCurrentState orig, PlayerProgression self, bool saveAsIfPlayerDied, bool saveAsIfPlayerQuit)
 {
     orig(self, saveAsIfPlayerDied, saveAsIfPlayerQuit);
     if (getOrInitSavePersLock)
     {
         return;
     }
     SaveOIsPers(saveAsIfPlayerDied, saveAsIfPlayerQuit);
 }
Example #2
0
        // Update a file on the disk with the current save-persistent data
        private static void PlayerProgression_SaveDeathPersistentDataOfCurrentState(On.PlayerProgression.orig_SaveDeathPersistentDataOfCurrentState orig, PlayerProgression self, bool saveAsIfPlayerDied, bool saveAsIfPlayerQuit)
        {
            int slot = self.rainWorld.options.saveSlot;
            SlugBaseCharacter ply = null;

            if (self.currentSaveState != null)
            {
                ply = PlayerManager.GetCustomPlayer(self.currentSaveState.saveStateNumber);
            }
            if (ply == null || !(self.currentSaveState is CustomSaveState css))
            {
                orig(self, saveAsIfPlayerDied, saveAsIfPlayerQuit);
                return;
            }

            // Copied from PlayerProgression.SaveDeathPersistentDataOfCurrentState

            Debug.Log(string.Concat(new object[]
            {
                "save slugbase deathPersistent data ",
                self.currentSaveState.deathPersistentSaveData.karma,
                " sub karma: ",
                saveAsIfPlayerDied,
                " (quit:",
                saveAsIfPlayerQuit,
                ")"
            }));

            string savePath    = GetSaveFilePath(ply.Name, slot);
            string vanillaDPSD = self.currentSaveState.deathPersistentSaveData.SaveToString(saveAsIfPlayerDied, saveAsIfPlayerQuit);
            string customDPSD  = css.SaveCustomPermanentToString(saveAsIfPlayerDied, saveAsIfPlayerQuit);

            string inSave;

            try
            {
                inSave = File.ReadAllText(savePath);
            }
            catch (Exception)
            {
                // Consider changing to handle FileNotFound only
                return;
            }
            StringBuilder outSave = new StringBuilder();

            string[] array2 = Regex.Split(inSave, "<svA>");
            for (int j = 0; j < array2.Length; j++)
            {
                string[] pair = Regex.Split(array2[j], "<svB>");
                // Save vanilla DPSD
                if (pair[0] == "DEATHPERSISTENTSAVEDATA" && !string.IsNullOrEmpty(vanillaDPSD))
                {
                    outSave.Append("DEATHPERSISTENTSAVEDATA<svB>" + vanillaDPSD + "<svA>");
                }
                // Save custom DPSD
                else if (pair[0] == "SLUGBASEPERSISTENT" && !string.IsNullOrEmpty(customDPSD))
                {
                    outSave.Append("SLUGBASEPERSISTENT<svB>" + customDPSD + "<svA>");
                }
                // Echo any other data
                else
                {
                    outSave.Append(array2[j] + "<svA>");
                }
            }

            File.WriteAllText(savePath, outSave.ToString());
        }