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); }
// 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()); }