public ViewModel(string Patch) { if (Folder_game == "") { throw new Exception("Не задан путь к папке с игрой!"); } if (Dialogs != null) { Dialogs.Clear(); } else { Dialogs = new ObservableCollection <GameDialog>(); } if (Strings != null) { Strings.Clear(); } else { Strings = new ObservableCollection <GameText>(); } if (Infoportions != null) { Infoportions.Clear(); } else { Infoportions = new ObservableCollection <Infoportion>(); } Load(Patch); }
/// <summary> /// Чтение и загрузка ресурсов игры /// </summary> /// <param name="Folder_game">Путь к папке с игрой</param> public void Load(string Folder_game) { this.Folder_game = Folder_game; // Считываем файл локализации ArrayList arrSTFiles = GetStringTableFiles(); // Проверить каждый файл на существование foreach (string patch in arrSTFiles) { if (File.Exists(Folder_game + TEXT_RUS + patch)) { XmlDocument xDoc = new XmlDocument(); xDoc.Load(Folder_game + TEXT_RUS + patch); XmlNode xStringTable = xDoc.DocumentElement; XmlNodeList xStringList = xStringTable.SelectNodes("string"); foreach (XmlNode xString in xStringList) { Strings.Add(new GameText(xString, Folder_game + TEXT_RUS + patch)); } } else { // Вывод в консоль } } // Считываем файлы поршней if (Directory.Exists(Folder_game + GAMEDATA)) { // Получили список файлов с поршнями ArrayList arrInfoFiles = GetInfoportionsFiles(); // Проверить каждый файл на существование foreach (string patch in arrInfoFiles) { if (File.Exists(Folder_game + GAMEPLAY + patch)) { // Открыть файл XmlDocument xDoc = new XmlDocument(); try { xDoc.Load(Folder_game + GAMEPLAY + patch); } catch (Exception ex) { Console.WriteLine($"Ошибка {ex.Message} в файле: {patch}"); continue; } finally { XmlNode xRoot = xDoc.DocumentElement; if (xRoot != null) { // Ищем XML диалога XmlNodeList xInfos = xRoot.SelectNodes("info_portion"); // Передаём в конструктор диалога строку с XML foreach (XmlNode n in xInfos) { Infoportion Inf = new Infoportion(n, Folder_game + GAMEPLAY + patch); //string dlgid = n.Attributes.GetNamedItem("id").Value; Infoportions.Add(Inf); } } } } else { //Вывод в лог } } // Получили список файлов с диалогами ArrayList arrDialogFiles = GetDialogFiles(); // Проверить каждый файл на существование foreach (string patch in arrDialogFiles) { if (File.Exists(Folder_game + GAMEPLAY + patch)) { // Открыть файл XmlDocument xDoc = new XmlDocument(); xDoc.Load(Folder_game + GAMEPLAY + patch); XmlNode xRoot = xDoc.DocumentElement; // Ищем XML диалога XmlNodeList xDialogs = xRoot.SelectNodes("dialog"); // Передаём в конструктор диалога строку с XML foreach (XmlNode n in xDialogs) { GameDialog Dlg = new GameDialog(n, Folder_game + GAMEPLAY + patch); //string dlgid = n.Attributes.GetNamedItem("id").Value; Dialogs.Add(Dlg); } } else { //Вывод в лог } } } else { throw new Exception("В папке с игрой не найдена папка 'gamedata' \n распакуйте *.db архивы и перезапустите программу."); //MessageBox.Show( // "В папке с игрой не найдена папка 'gamedata' \n распакуйте *.db архивы и перезапустите программу.", // "Ошибка", // MessageBoxButton.OK, // MessageBoxImage.Information, // MessageBoxResult.OK, // MessageBoxOptions.DefaultDesktopOnly); } }