public void UpdateCharacters() { var test = RemnantCharacter.GetCharactersFromSave(this.SaveFolderPath); if (saveCharacters != null && test.Count == saveCharacters.Count) { for (int i = 0; i < test.Count; i++) { if (test[i].Progression > saveCharacters[i].Progression) { NewData(test); break; } } Debug.WriteLine("Data Not Updated"); } else { NewData(test); } }
public RemnantSave(string saveProfilePath) { if (!saveProfilePath.EndsWith("profile.sav")) { if (File.Exists(saveProfilePath + "\\profile.sav")) { saveProfilePath += "\\profile.sav"; } else { throw new Exception(saveProfilePath + " is not a valid save."); } } else if (!File.Exists(saveProfilePath)) { throw new Exception(saveProfilePath + " does not exist."); } this.profilePath = saveProfilePath; if (saveCharacters == null) { saveCharacters = RemnantCharacter.GetCharactersFromSave(this.SaveFolderPath); } }
public void UpdateCharacters(RemnantCharacter.CharacterProcessingMode mode) { saveCharacters = RemnantCharacter.GetCharactersFromSave(this.SaveFolderPath, mode); }
public static List <RemnantCharacter> GetCharactersFromSave(string saveFolderPath, string filename, CharacterProcessingMode mode) { List <RemnantCharacter> charData = new List <RemnantCharacter>(); try { string profileData = File.ReadAllText(saveFolderPath + filename); string[] characters = profileData.Split(new string[] { "/Game/Characters/Player/Base/Character_Master_Player.Character_Master_Player_C" }, StringSplitOptions.None); for (var i = 1; i < characters.Length; i++) { RemnantCharacter cd = new RemnantCharacter(i - 1); cd.Archetype = GearInfo.Archetypes["Undefined"]; Match archetypeMatch = new Regex(@"/Game/_Core/Archetypes/[a-zA-Z_]+").Match(characters[i - 1]); if (archetypeMatch.Success) { string archetype = archetypeMatch.Value.Replace("/Game/_Core/Archetypes/", "").Split('_')[1]; if (GearInfo.Archetypes.ContainsKey(archetype)) { cd.Archetype = GearInfo.Archetypes[archetype]; } else { cd.Archetype = archetype; } } List <string> saveItems = new List <string>(); string charEnd = "Character_Master_Player_C"; string inventory = characters[i].Substring(0, characters[i].IndexOf(charEnd)); FindMatches(saveItems, inventory, new Regex(@"/Items/Weapons(/[a-zA-Z0-9_]+)+/[a-zA-Z0-9_]+") , new Regex(@"/Items/Armor/([a-zA-Z0-9_]+/)?[a-zA-Z0-9_]+") , new Regex(@"/Items/Trinkets/(BandsOfCastorAndPollux/)?[a-zA-Z0-9_]+") , new Regex(@"/Items/Mods/[a-zA-Z0-9_]+") , new Regex(@"/Items/Traits/[a-zA-Z0-9_]+") , new Regex(@"/Items/QuestItems(/[a-zA-Z0-9_]+)+/[a-zA-Z0-9_]+") , new Regex(@"/Quests/[a-zA-Z0-9_]+/[a-zA-Z0-9_]+") , new Regex(@"/Player/Emotes/Emote_[a-zA-Z0-9]+")); cd.Inventory = saveItems; charData.Add(cd); } if (mode == CharacterProcessingMode.All) { string[] saves = Directory.GetFiles(saveFolderPath, "save_*.sav"); for (int i = 0; i < saves.Length && i < charData.Count; i++) { charData[i].processSaveData(File.ReadAllText(saves[i])); Debug.WriteLine(charData[i].missingItems.Count); } } } catch (IOException ex) { if (ex.Message.Contains("being used by another process")) { Console.WriteLine("Save file in use; waiting 0.5 seconds and retrying."); System.Threading.Thread.Sleep(500); charData = GetCharactersFromSave(saveFolderPath, filename, mode); } } return(charData); }
public RemnantProfile(string path) { this.foldername = path.Split('\\').Last(); chars = RemnantCharacter.GetCharactersFromSave(path); }