/// <summary> /// Конструктор класса формы модуля создания отчётов для техподдержки. /// </summary> /// <param name="A">Путь к каталогу пользователя</param> /// <param name="FS">Путь к каталогу установки Steam</param> /// <param name="SG">Конфигурация выбранной в главном окне игры</param> public FrmRepBuilder(string A, string FS, SourceGame SG) { InitializeComponent(); AppUserDir = A; FullSteamPath = FS; SelectedGame = SG; }
/// <summary> /// Главный конструктор класса GameManager. /// </summary> /// <param name="App">Экземпляр класса с параметрами приложения</param> public GameManager(CurrentApp App) { // Создаём объекты для хранения базы игр... SourceGames = new List <SourceGame>(); InstalledGames = new List <String>(); // При использовании нового метода поиска установленных игр, считаем их из конфига Steam... List <String> GameDirs = App.SteamClient.FormatInstallDirs(App.Platform.SteamAppsFolderName); // Создаём поток с XML-файлом... using (FileStream XMLFS = new FileStream(Path.Combine(App.FullAppPath, Properties.Resources.GameListFile), FileMode.Open, FileAccess.Read)) { // Создаём объект документа XML... XmlDocument XMLD = new XmlDocument(); // Загружаем поток в объект XML документа... XMLD.Load(XMLFS); // Обходим полученный список в цикле... XmlNodeList XMLNode = XMLD.GetElementsByTagName("Game"); for (int i = 0; i < XMLNode.Count; i++) { try { if (XMLD.GetElementsByTagName("Enabled")[i].InnerText == "1" || !Properties.Settings.Default.HideUnsupportedGames) { SourceGame SG = new SourceGame(XMLNode[i].Attributes["Name"].Value, XMLD.GetElementsByTagName("DirName")[i].InnerText, XMLD.GetElementsByTagName("SmallName")[i].InnerText, XMLD.GetElementsByTagName("Executable")[i].InnerText, XMLD.GetElementsByTagName("SID")[i].InnerText, XMLD.GetElementsByTagName("SVer")[i].InnerText, XMLD.GetElementsByTagName("VFDir")[i].InnerText, App.Platform.OS == CurrentPlatform.OSType.Windows ? XMLD.GetElementsByTagName("HasVF")[i].InnerText == "1" : true, XMLD.GetElementsByTagName("UserDir")[i].InnerText == "1", XMLD.GetElementsByTagName("HUDsAvail")[i].InnerText == "1", App.FullAppPath, App.AppUserDir, App.SteamClient.FullSteamPath, App.Platform.SteamAppsFolderName, App.SteamClient.SteamID, GameDirs); if (SG.IsInstalled) { SourceGames.Add(SG); InstalledGames.Add(SG.FullAppName); } } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } } } }
/// <summary> /// Вызывает форму модуля создания отчётов для Техподдержки. /// </summary> /// <param name="AppUserDir">Путь к каталогу пользователя программы</param> /// <param name="FullSteamPath">Путь к каталогу установки Steam</param> /// <param name="FullCfgPath">Путь к каталогу с конфигами выбранной игры</param> /// <param name="SelectedGame">Конфигурация выбранной в главном окне игры</param> public static void FormShowRepBuilder(string AppUserDir, string FullSteamPath, SourceGame SelectedGame) { using (FrmRepBuilder RBF = new FrmRepBuilder(AppUserDir, FullSteamPath, SelectedGame)) { RBF.ShowDialog(); } }
/// <summary> /// Выбирает определённую игру по имени. /// </summary> /// <param name="GameName">Имя игры</param> public void Select(string GameName) { SelectedGame = SourceGames.Find(Item => String.Equals(Item.FullAppName, GameName, StringComparison.CurrentCultureIgnoreCase)); }
private void AppSelector_SelectedIndexChanged(object sender, EventArgs e) { try { // Получаем нужные значения... SelGame = SourceGames.Find(Item => String.Equals(Item.FullAppName, AppSelector.Text, StringComparison.CurrentCultureIgnoreCase)); // Переключаем состояние некоторых контролов... HandleControlsOnSelGame(); // Проверим наличие запрещённых символов в пути... CheckSymbolsGame(SelGame.FullGamePath); // Распознаем файловую систему на диске с игрой... DetectFS(SelGame.FullGamePath); // Считаем настройки графики... if (SelGame.IsUsingVideoFile) { string VideoFile = SelGame.GetActualVideoFile(); if (File.Exists(VideoFile)) { ReadNCFGameSettings(VideoFile, SelGame.SourceType); } else { CoreLib.WriteStringToLog(String.Format(AppStrings.AppVideoDbNotFound, SelGame.FullAppName, VideoFile)); NullGraphOptions(); } } else { ReadGCFGameSettings(SelGame.SmallAppName); } // Переключаем графический твикер в режим GCF/NCF... SetGTOptsType(!SelGame.IsUsingVideoFile); // Получим параметры запуска... GT_LaunchOptions.Text = SelGame.LaunchOptions; // Получаем текущий SteamID... HandleSteamIDs(Properties.Settings.Default.LastSteamID); // Проверим, установлен ли FPS-конфиг... HandleConfigs(SelGame.FullGamePath, SelGame.IsUsingUserDir); // Закроем открытые конфиги в редакторе... if (!(String.IsNullOrEmpty(CFGFileName))) { CloseEditorConfigs(); } // Считаем имеющиеся FPS-конфиги... if (!BW_FPRecv.IsBusy) { BW_FPRecv.RunWorkerAsync(); } // Обновляем статус... UpdateStatusBar(MainTabControl.SelectedIndex); // Сохраним ID последней выбранной игры... Properties.Settings.Default.LastGameName = AppSelector.Text; // Переключаем вид страницы менеджера HUD... HandleHUDMode(SelGame.IsHUDsAvailable); // Считаем список доступных HUD для данной игры... if (SelGame.IsHUDsAvailable) { if (!BW_HUDList.IsBusy) { BW_HUDList.RunWorkerAsync(); } } // Считаем список бэкапов... if (!BW_BkUpRecv.IsBusy) { BW_BkUpRecv.RunWorkerAsync(); } // Создадим каталоги... if (!Directory.Exists(SelGame.AppHUDDir)) { Directory.CreateDirectory(SelGame.AppHUDDir); } } catch (Exception Ex) { CoreLib.HandleExceptionEx(AppStrings.AppFailedToGetData, Properties.Resources.AppName, Ex.Message, Ex.Source, MessageBoxIcon.Warning); } }
/// <summary> /// Определяет установленные игры и заполняет комбо-бокс выбора /// доступных управляемых игр. /// </summary> /// <param name="SteamPath">Путь к клиенту Steam</param> private void DetectInstalledGames(string SteamPath) { // Очистим список игр... AppSelector.Items.Clear(); SourceGames.Clear(); // При использовании нового метода поиска установленных игр, считаем их из конфига Steam... List<String> GameDirs = SteamManager.FormatInstallDirs(App.FullSteamPath); // Формируем список для поддерживаемых игр... List<String> AvailableGames = new List<String>(); try { // Создаём поток с XML-файлом... using (FileStream XMLFS = new FileStream(Path.Combine(App.FullAppPath, Properties.Resources.GameListFile), FileMode.Open, FileAccess.Read)) { // Создаём объект документа XML... XmlDocument XMLD = new XmlDocument(); // Загружаем поток в объект XML документа... XMLD.Load(XMLFS); // Обходим полученный список в цикле... XmlNodeList XMLNode = XMLD.GetElementsByTagName("Game"); for (int i = 0; i < XMLNode.Count; i++) { AvailableGames.Add(XMLD.GetElementsByTagName("DirName")[i].InnerText); try { SourceGame SG = new SourceGame(XMLNode[i].Attributes["Name"].Value, XMLD.GetElementsByTagName("DirName")[i].InnerText, XMLD.GetElementsByTagName("SmallName")[i].InnerText, XMLD.GetElementsByTagName("Executable")[i].InnerText, XMLD.GetElementsByTagName("SID")[i].InnerText, XMLD.GetElementsByTagName("SVer")[i].InnerText, XMLD.GetElementsByTagName("VFDir")[i].InnerText, XMLD.GetElementsByTagName("HasVF")[i].InnerText == "1", XMLD.GetElementsByTagName("UserDir")[i].InnerText == "1", XMLD.GetElementsByTagName("HUDsAvail")[i].InnerText == "1", App.FullAppPath, App.AppUserDir, App.FullSteamPath, GameDirs); if (SG.IsInstalled) { SourceGames.Add(SG); AppSelector.Items.Add(XMLNode[i].Attributes["Name"].Value); } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } } } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } }