resource.toml
Каждый ресурс — это папка внутри resourcesDir с файлом resource.toml. Это канонический справочник по полям resource.toml (и соседнего stream.toml). Про понятие ресурса и раскладку папок — см. Resources; про ключи server.toml — server.toml.
Parser resource.toml учитывает кавычки и многострочные массивы (мощнее, чем parser server.toml). Ключи принимаются и в kebab-case, и в camelCase.
Пример
enabled = true
type = "js"
main = "server/main.js"
client-type = "js"
client-main = "client/main.js"
client-files = ["client/**", "shared/**"]
deps = ["shared-core"]
exports = ["getInventory"]
[config]
debug = true
maxInventorySlots = 40Поля
| Ключ (алиасы) | Тип | Default | Назначение |
|---|---|---|---|
type | string | "" | Серверный runtime: js, csharp, go, asset-pack, dlc, rpf. Исполняется только js. |
main | string | "" | Серверный вход (напр. server/main.js). js с непустым main авто-запускает серверный JS-host. |
client-type / clientType | string | наследует type (или js), если задан client-main | Runtime клиентского входа |
client-main / clientMain | string | "" | Клиентский вход; попадает в манифест автоматически |
assets-base / assetsBase | string | /assets/<name>/ | HTTP-база для кода ресурса |
stream-base / streamBase | string | /stream/<name>/ | HTTP-база для файлов под stream/ |
stream-manifest / streamManifest | string | авто | Путь к stream-манифесту; авто-детект (см. ниже) |
enabled | bool | true | Загружать ресурс; false пропускает его |
client-files / clientFiles | string[] | [] | Globs файлов, отправляемых клиенту |
deps / dependencies | string[] | [] | Имена зависимостей (публикуются в манифесте) |
exports | string[] | [] | Имена экспортов |
таблица [config] | — | {} | Пользовательские scalar-настройки, доступные через getResourceConfig() |
Примечания:
- Семантика
type.typeхранится как есть; серверный host запускает толькоjs(сmain). Дескрипторыcsharp/go— preview, текущим сервером не исполняются.asset-pack/dlc/rpfтолько раздают/стримят файлы. - Default
client-type. Еслиclient-mainзадан, аclient-typeпуст, он наследуетtype(илиjs, еслиtypeтоже пуст). - Порядок загрузки и зависимости. Ресурсы грузятся в порядке списка
resourcesизserver.toml(или в порядке файловой системы, если список пуст).deps/dependenciesзаписываются и публикуются в манифесте, но текущий загрузчик НЕ переупорядочивает ресурсы по ним.
Таблица [config]
Каждый scalar под [config] становится JSON-значением: true/false и числа проходят без кавычек, всё остальное — JSON-строкой. Объект доступен коду ресурса:
const config = varion.getResourceConfig(); // сервер: [config] этого ресурсаGlobs client-files
client-files / clientFiles (и files из stream.toml) принимают:
| Шаблон | Что матчит |
|---|---|
path/to/file.js | ровно этот файл |
dir/* | обычные файлы прямо в dir (один уровень) |
dir/** | каждый файл под dir (рекурсивно) |
** | каждый файл в папке ресурса (рекурсивно) |
Пути с .. и абсолютные пути отклоняются. Каждый раскрытый файл публикуется по /resources/files/<resource>/<path>; client-main раскрывается и добавляется автоматически.
URL-адреса
Клиентские файлы отдаются по /resources/files/<resource>/<path>. К тем же файлам ведут два алиаса:
/assets/<resource>/...(база по умолчанию/assets/<name>/)/stream/<resource>/...(база по умолчанию/stream/<name>/)
Любой файл, чей путь относительно ресурса начинается с stream/, публикуется в манифесте по /stream/<resource>/... — независимо от типа ресурса.
stream.toml
Для стримингуемых игровых файлов ресурс может нести stream.toml. Он используется как stream-манифест, если на него указывает stream-manifest, если main заканчивается на .toml, либо если stream.toml лежит в корне ресурса (авто-детект).
files = ["stream/**"]
[meta]
"stream/handling.meta" = "HANDLING_FILE"
"stream/vehicles.meta" = "VEHICLE_METADATA_FILE"files— globs (те же правила, что уclient-files) стримингуемых файлов.[meta]— сопоставляет путь относительно ресурса с тегом data-файла GTA (напр.HANDLING_FILE). Записи с../абсолютными путями или пустым тегом отбрасываются.
Любой файл под stream/ получает URL /stream/<resource>/.... Клиентскую сторону см. в Streaming assets.
Объявляются, но не парсятся
required-permissions / optional-permissions встречаются в некоторых дескрипторах и старой документации, но текущий серверный бинарник не парсит их из resource.toml и не включает в клиентский манифест. Считайте их зарезервированными.