Example #1
0
        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);
            }
        }
Example #2
0
 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);
     }
 }
Example #3
0
 public void UpdateCharacters(RemnantCharacter.CharacterProcessingMode mode)
 {
     saveCharacters = RemnantCharacter.GetCharactersFromSave(this.SaveFolderPath, mode);
 }
Example #4
0
        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);
        }
Example #5
0
 public RemnantProfile(string path)
 {
     this.foldername = path.Split('\\').Last();
     chars           = RemnantCharacter.GetCharactersFromSave(path);
 }