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'ов нет, потому что схема простая.
Где используется¶
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¶
- Юзеры начинают писать «лаунчер пишет unknown version».
- Админ проверяет какая версия — обычно из bug-report'а:
1.0.3xxx.0. - Открывает админку → GTA Versions → Add → ставит
is_supported = falseпока не оттестируем. - Тестируем topredux'ы на новой версии. Что работает — оставляем supported. Что ломается — фиксим.
- После того как протестировали — флипаем
is_supported = true.
Цикл занимает 1-2 дня. В это время юзеры на новой версии видят «версия не поддерживается, дождитесь обновы».