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

GTA Versions - поддерживаемые билды

Эта секция админ-панели заведует списком GTA-билдов которые мы официально поддерживаем. Каждый redux привязан к конкретной версии (или диапазону), чтобы не ставить мод на несовместимый билд.

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

create table gta_versions (
  id              uuid primary key,
  version_string  text not null unique,    -- "1.0.3411.0"
  display_name    text,                    -- "Build 3411 (Drug Wars)"
  release_date    date,
  is_supported    bool default true,
  notes           text,
  display_order   int default 0
);

version_string - точная версия из GTA5.exe (FileVersion в Windows PE header). Совпадает с тем что показывает Rockstar Launcher.

Почему нужно

GTA V обновляется регулярно. Каждый патч Rockstar может сломать redux'ы (изменить структуру update.rpf, добавить новые файлы, сместить offsets). Без version-check'а юзер ставит мод 2024-го года на билд 2026-го года, ловит crash, пишет в саппорт.

С gta_versions-таблицей мы можем:

  • При первом запуске лаунчера определить версию (через FileVersionInfo), сверить с whitelist'ом, показать warning «эта версия GTA не тестировалась, моды могут не работать».
  • При установке мода - проверить что текущая версия в списке supported_versions для этого мода.

UI

Админ видит список всех версий. Кнопки:

  • Добавить версию - указать version_string, display_name, дата.
  • Toggle supported - отключить/включить (is_supported = false). Юзеры на этой версии увидят warning.
  • Reorder - drag display_order для сортировки на UI.
  • Notes - markdown с особенностями билда (например «build 3258 - broken weapon spawns, не ставьте gunpack'и»).

Bridge handler

В нашем коде gta_versions обслуживается общими CRUD-handler'ами через Database секцию - adminCatalogList("gta_versions", ...), adminCatalogUpdate("gta_versions", id, ...). Специальных handler'ов нет, потому что схема простая.

Где используется

MiamiGraphics.Shell/Services/GtaVersionResolver.cs (упрощено)
public sealed class GtaVersionResolver
{
    public async Task<VersionStatus> ResolveAsync(string gtaPath)
    {
        var exePath = Path.Combine(gtaPath, "GTA5.exe");
        var fileVersion = FileVersionInfo.GetVersionInfo(exePath).FileVersion;
        // например "1.0.3411.0"

        var known = await _supa.GetGtaVersionsAsync();
        var match = known.FirstOrDefault(v => v.VersionString == fileVersion);

        if (match is null)
            return new VersionStatus(fileVersion, IsKnown: false, IsSupported: false,
                Notes: "Версия не в whitelist'е. Моды не тестировались.");

        return new VersionStatus(fileVersion, IsKnown: true,
            IsSupported: match.IsSupported, Notes: match.Notes);
    }
}

Эта проверка выполняется при:

  • Первом запуске лаунчера (показать warning если не supported).
  • Перед каждым installом (отказать если IsSupported = false).

Что делаем при new Rockstar update

  1. Юзеры начинают писать «лаунчер пишет unknown version».
  2. Админ проверяет какая версия - обычно из bug-report'а: 1.0.3xxx.0.
  3. Открывает админку → GTA Versions → Add → ставит is_supported = false пока не оттестируем.
  4. Тестируем topredux'ы на новой версии. Что работает - оставляем supported. Что ломается - фиксим.
  5. После того как протестировали - флипаем is_supported = true.

Цикл занимает 1-2 дня. В это время юзеры на новой версии видят «версия не поддерживается, дождитесь обновы».

Дальше: Library →