internal static string GetCurrentSavePath() { string folder = SLSaveManager.GetSaveFolderForWorldHost(); if (string.IsNullOrEmpty(folder)) { throw new Exception("Trying to save world host SL_ItemSpawns, but couldn't get a folder!"); } var saveFolder = $@"{folder}\{SLSaveManager.ITEMSPAWNS_FOLDER}"; return(saveFolder + $@"\{SceneManager.GetActiveScene().name}.itemdata"); }
internal static string GetCurrentSavePath(CharSaveType saveType) { string folder = SLSaveManager.GetSaveFolderForWorldHost(); if (string.IsNullOrEmpty(folder)) { throw new Exception("Trying to save world host SL_Characters, but couldn't get a folder!"); } var saveFolder = $@"{folder}\{SLSaveManager.CHARACTERS_FOLDER}"; return(saveType == CharSaveType.Scene ? saveFolder + $@"\{SceneManager.GetActiveScene().name}.chardata" : saveFolder + $@"\followers.chardata"); }
// Internal load all extensions internal static void LoadExtensions(Character character) { var dir = SLSaveManager.GetSaveFolderForCharacter(character) + "\\" + SLSaveManager.CUSTOM_FOLDER + "\\"; bool isWorldHost = character.UID == CharacterManager.Instance.GetWorldHostCharacter()?.UID; foreach (var file in Directory.GetFiles(dir)) { try { var typename = Path.GetFileNameWithoutExtension(file); var type = s_registeredModels.FirstOrDefault(it => it.FullName == typename); if (type != null) { using (var xml = File.OpenRead(file)) { var serializer = Serializer.GetXmlSerializer(type); if (serializer.Deserialize(xml) is PlayerSaveExtension loaded) { loaded.LoadSaveData(character, isWorldHost); } else { throw new Exception("Unknown - extension was null after attempting to load XML!"); } } } else { SL.LogWarning("Loading PlayerSaveExtensions, could not find a matching registered type for " + typename); } } catch (Exception ex) { SL.LogWarning($"Exception loading Player Save Extension XML from '{file}'!"); SL.LogInnerException(ex); } } }
// Internal save all extensions internal static void SaveAllExtensions(Character character, bool isWorldHost) { var baseDir = SLSaveManager.GetSaveFolderForCharacter(character) + "\\" + SLSaveManager.CUSTOM_FOLDER + "\\"; //bool isWorldHost = character.UID == CharacterManager.Instance.GetWorldHostCharacter()?.UID; foreach (var type in s_registeredModels) { try { PlayerSaveExtension model; var path = baseDir + type.FullName + ".xml"; if (File.Exists(path)) { using (var file = File.OpenRead(path)) { var serializer = Serializer.GetXmlSerializer(type); model = (PlayerSaveExtension)serializer.Deserialize(file); } } else { model = (PlayerSaveExtension)Activator.CreateInstance(type); } model.SaveDataFromCharacter(character, isWorldHost); Serializer.SaveToXml(baseDir, model.GetType().FullName, model); } catch (Exception ex) { SL.LogWarning($"Exception saving PlayerSaveExtension type: {type.FullName}!"); SL.Log(ex.ToString()); } } }
public static string GetSaveFilePath <T>(string characterUID) => SLSaveManager.GetSaveFolderForCharacter(characterUID) + "\\" + SLSaveManager.CUSTOM_FOLDER + "\\" + $"{typeof(T).FullName}.xml";