Перейти к содержанию

GTA Presets — графические пресеты

Форма загрузки GTA Preset: имя, автор, описание, железо, viewer priority

GTA Presets — секция админ-панели для графических пресетов (settings.xml). Это не моды и не текстуры, а готовые settings.xml файлы которые юзер применяет одним кликом, чтобы выставить графику «Low / Medium / High / Ultra / Custom Hunter style».

Что это вообще

GTA V держит свои настройки графики в %USERPROFILE%\Documents\Rockstar Games\GTA V\settings.xml. В этом XML — все слайдеры из меню «Графика»: текстуры, тени, anti-aliasing, рефлексы и так далее.

Замена этого файла = моментальная смена настроек. Юзер не лезет в in-game меню, просто кликает «применить пресет Ultra Hunter».

Структура таблицы

create table gta_presets (
  id            uuid primary key,
  name          text not null,             -- "Hunter Ultra"
  description   text,
  preview_url   text,                      -- скрин с настройками
  payload_url   text not null,             -- R2 link на settings.xml
  target_resolution  text,                 -- "1920x1080" / "2560x1440"
  target_gpu_tier    text,                 -- "1060" / "3070" / "4090"
  popularity    int default 0,
  is_deleted    bool default false
);

Пресет привязан к разрешению и GPU tier для guidance. Юзеру с 1060-й бесполезно ставить пресет «Hunter Ultra 4K» — он будет лагать.

Handlers

HunterGraphics.Shell/Bridge/WebViewBridgeHost.cs
["adminGtaPresetList"]    = async _ => await _bridge.AdminGtaPresetListAsync(),
["adminGtaPresetUpload"]  = ...   // upload settings.xml + preview
["adminGtaPresetPatch"]   = ...   // edit name/description/target
["adminGtaPresetDelete"]  = ...   // soft-delete
["adminGtaPresetAnalyze"] = ...   // парсинг settings.xml → читаемые поля

adminGtaPresetAnalyze

Самый интересный handler. Принимает локальный settings.xml, парсит его и возвращает readable summary: разрешение, FPS limit, текстуры, тени, MSAA.

HunterGraphics.Core/Services/GtaSettingsAnalyzer.cs (упрощено)
public sealed class GtaSettingsAnalyzer
{
    public GtaSettingsSummary Analyze(string xmlPath)
    {
        var doc = XDocument.Load(xmlPath);
        var root = doc.Root!;

        return new GtaSettingsSummary(
            Resolution: $"{root.Element("graphics")!.Element("ScreenWidth")?.Value}" +
                        $"x{root.Element("graphics")!.Element("ScreenHeight")?.Value}",
            VSync:      ParseBool(root.Element("video")!.Element("VSync")?.Value),
            TextureQuality: ParseEnum(root.Element("graphics")!.Element("TextureQuality")?.Value),
            ShadowQuality:  ParseEnum(root.Element("graphics")!.Element("Shadow_Quality")?.Value),
            MsaaX:          ParseEnum(root.Element("graphics")!.Element("MSAA")?.Value),
            // ...
        );
    }
}

UI показывает админу: «Этот пресет 2560x1440, MSAA 4x, Tex Ultra, Shadow High». Админ верифицирует и публикует.

Применение у юзера

Юзер кликает «Apply preset» → GtaPresetApplyAsync:

public async Task<ApplyPresetResultDto> GtaPresetApplyAsync(string presetId)
{
    var preset = await _supa.GetGtaPresetAsync(presetId);
    var xmlBytes = await _assetCache.GetOrDownloadAsync(preset.PayloadUrl);

    // Backup существующего settings.xml
    var settingsPath = Path.Combine(
        Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
        "Rockstar Games", "GTA V", "settings.xml");

    if (File.Exists(settingsPath))
        File.Copy(settingsPath, settingsPath + ".backup.xml", overwrite: true);

    // Atomic replace
    var temp = settingsPath + ".tmp";
    await File.WriteAllBytesAsync(temp, xmlBytes);
    File.Move(temp, settingsPath, overwrite: true);

    return new ApplyPresetResultDto(true, BackupPath: settingsPath + ".backup.xml");
}

Backup нужен потому что юзер может захотеть откатить. Не делаем версионную историю — просто settings.xml.backup.xml рядом, перезаписываемый при каждом следующем apply'е.

Connection с GTA settings analyzer

Эта же GtaSettingsAnalyzer используется не только в админке, но и для юзерских settings. В Main → Settings → «Анализ настроек GTA» — мы читаем текущий settings.xml юзера, показываем что у него стоит, и предлагаем подходящие presets из каталога. Такой матчинг по GPU tier и resolution.

Где взять начальные пресеты

Изначально админ берёт settings.xml с известных «золотых» билдов GTA — например с тестового ПК с 4090, выкручиваем максимум, кладём как preset «Hunter 4K Ultra». Потом community присылает свои — добавляем.

Дальше: Заявки на сборки →