diff --git a/NewHorizons/External/NewHorizonsData.cs b/NewHorizons/External/NewHorizonsData.cs index 84a5bb8b..addb5059 100644 --- a/NewHorizons/External/NewHorizonsData.cs +++ b/NewHorizons/External/NewHorizonsData.cs @@ -11,17 +11,18 @@ namespace NewHorizons.External { private static NewHorizonsSaveFile _saveFile; private static NewHorizonsProfile _activeProfile; + private static string _activeProfileName; private static string _fileName = "save.json"; public static void Load() { - var profileName = StandaloneProfileManager.SharedInstance.currentProfile.profileName; + _activeProfileName = StandaloneProfileManager.SharedInstance.currentProfile.profileName; try { _saveFile = Main.Instance.ModHelper.Storage.Load(_fileName); - if (!_saveFile.Profiles.ContainsKey(profileName)) _saveFile.Profiles.Add(profileName, new NewHorizonsProfile()); - _activeProfile = _saveFile.Profiles[profileName]; - Logger.Log($"Loaded save data for {profileName}"); + if (!_saveFile.Profiles.ContainsKey(_activeProfileName)) _saveFile.Profiles.Add(_activeProfileName, new NewHorizonsProfile()); + _activeProfile = _saveFile.Profiles[_activeProfileName]; + Logger.Log($"Loaded save data for {_activeProfileName}"); } catch(Exception) { @@ -29,10 +30,10 @@ namespace NewHorizons.External { Logger.Log($"Couldn't load save data from {_fileName}, creating a new file"); _saveFile = new NewHorizonsSaveFile(); - _saveFile.Profiles.Add(profileName, new NewHorizonsProfile()); - _activeProfile = _saveFile.Profiles[profileName]; + _saveFile.Profiles.Add(_activeProfileName, new NewHorizonsProfile()); + _activeProfile = _saveFile.Profiles[_activeProfileName]; Main.Instance.ModHelper.Storage.Save(_saveFile, _fileName); - Logger.Log($"Loaded save data for {profileName}"); + Logger.Log($"Loaded save data for {_activeProfileName}"); } catch(Exception e) { @@ -49,8 +50,14 @@ namespace NewHorizons.External public static void Reset() { - if (_saveFile == null || _activeProfile == null) return; + if (_saveFile == null || _activeProfile == null) + { + Load(); + } + Logger.Log($"Reseting save data for {_activeProfileName}"); _activeProfile = new NewHorizonsProfile(); + _saveFile.Profiles[_activeProfileName] = _activeProfile; + Save(); } diff --git a/NewHorizons/Utility/Patches.cs b/NewHorizons/Utility/Patches.cs index 6d938261..5f6170fc 100644 --- a/NewHorizons/Utility/Patches.cs +++ b/NewHorizons/Utility/Patches.cs @@ -39,7 +39,9 @@ namespace NewHorizons.Utility var playerDataLearnFrequency = typeof(PlayerData).GetMethod("LearnFrequency"); Main.Instance.ModHelper.HarmonyHelper.AddPrefix(playerDataLearnFrequency, typeof(Patches), nameof(Patches.OnPlayerDataLearnFrequency)); var playerDataKnowsMultipleFrequencies = typeof(PlayerData).GetMethod("KnowsMultipleFrequencies"); - Main.Instance.ModHelper.HarmonyHelper.AddPrefix(playerDataKnowsMultipleFrequencies, typeof(Patches), nameof(Patches.OnPlayerDataKnowsMultipleFrequencies)); + Main.Instance.ModHelper.HarmonyHelper.AddPrefix(playerDataKnowsMultipleFrequencies, typeof(Patches), nameof(Patches.OnPlayerDataKnowsMultipleFrequencies)); + var playerDataResetGame = typeof(PlayerData).GetMethod("ResetGame"); + Main.Instance.ModHelper.HarmonyHelper.AddPostfix(playerDataResetGame, typeof(Patches), nameof(Patches.OnPlayerDataResetGame)); // Postfixes Main.Instance.ModHelper.HarmonyHelper.AddPostfix("Awake", typeof(Patches), nameof(Patches.OnMapControllerAwake)); @@ -297,6 +299,11 @@ namespace NewHorizons.Utility } return true; } + + public static void OnPlayerDataResetGame() + { + NewHorizonsData.Reset(); + } #endregion } }