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

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'ов нет, потому что схема простая.

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

HunterGraphics.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 →