Skip to content

server.toml

server.toml читается функцией LoadServerConfig — это минимальный плоский parser key = value (подмножество TOML-скаляров), а не полноценный TOML. Практические следствия:

  • Только плоские ключи. Секции [section] и вложенные таблицы игнорируются.
  • Массивы — в одну строку: resources = ["a", "b"]. Многострочные массивы не поддерживаются (parser читает файл построчно).
  • Bool «истинно» при true, 1, yes или on; любое другое значение = false.
  • Кавычки вокруг строк необязательны и срезаются автоматически (name = "X" и name = X эквивалентны).
  • Комментарии # обрезают строку до конца — не используйте # внутри значений (URL, паролей).
  • Неизвестные ключи молча игнорируются.

Поля разделены на две группы: (A) читаемые parser (их установка работает) и (B) присутствующие в ServerConfig, но НЕ читаемые плоским parser (установка ни на что не влияет — сохраняется значение по умолчанию из сборки).

Пример

toml
name = "My Varion Server"
host = "0.0.0.0"
port = 7788
httpPort = 7789
maxPlayers = 128
maxQueueSlots = 32

gamemode = "roleplay"
channel = "release"
minClientBuild = 0
tickRate = 64
streamingDistance = 300
migrationDistance = 150

debug = false
collectClientDiagnostics = false
encryptTransport = true
announce = true
masterListUrl = "https://master.example/api"
serverPassword = ""
language = "en"
description = "Freeroam + roleplay"
website = "https://example.com"
tags = ["roleplay", "voice"]

resourcesDir = "resources"
resources = ["my-gamemode"]
modulesDir = "modules"

spawnAfterConnect = false

(A) Читаемые поля

КлючТипDefaultНазначение
namestring"Varion Server"Имя сервера в браузере серверов
hoststring"0.0.0.0"Адрес привязки игрового сокета
portuint167788UDP/ENet-порт игры
httpPortuint167789HTTP-порт (манифест, файлы ресурсов, /server-info.json)
maxPlayersuint321024Лимит принятых игроков
maxQueueSlotsuint3264Доп. ENet-слоты для очереди подключения (сверх maxPlayers)
gamemodestring"freeroam"Метка режима для браузера серверов
channelstring"release"Канал релиза (release/rc/dev); клиент должен совпадать
minClientBuilduint320Минимальный билд клиента (0 = без ограничения)
tickRateuint3264Частота серверного тика (Гц)
streamingDistancefloat300Радиус стриминга сущностей (м)
migrationDistancefloat150Радиус миграции владельца пустых машин к ближайшему игроку (м)
debugboolfalseDebug-логирование
collectClientDiagnosticsboolfalseРазрешить клиентам выгружать хвосты логов на HTTP-эндпоинт
clientDiagnosticsDirstring"logs/client-diagnostics"Каталог для выгруженных клиентских логов
encryptTransportbooltrueШифрование транспорта (ECDH P-256 + AES-256-GCM)
announcebooltrueПубликовать в masterlist (false = не публиковать даже при заданном URL)
masterListUrlstring""URL masterlist-бэкенда (пусто = не публиковать)
descriptionstring""Описание для браузера серверов
websitestring""Сайт сервера
languagestring"en"Язык сервера
serverPasswordstring""Пароль подключения (пусто = без пароля)
useEarlyAuthboolfalseВключить внешнюю страницу входа до завершения подключения
earlyAuthUrlstring""URL страницы early-auth
useCloudAuthboolfalseВключить проверку облачной личности на handshake (см. примечание)
spawnAfterConnectboolfalseТолько dev: движок спавнит игрока сам (см. примечание)
resourcesDirstring"resources"Каталог ресурсов
modulesDirstring"modules"Каталог нативных модулей
resourcesstring[][]Ресурсы по порядку; пусто = авто-скан всех подпапок с resource.toml
modules / loadModulesstring[][]Читается, но НЕ используется (см. примечание)
tagsstring[][]Теги для браузера серверов

Примечания к (A):

  • Точные имена ключей. Именно maxPlayers, maxQueueSlots, serverPassword. Старые players, queueSlots, password не читаются.
  • resources пуст → авто-скан. Загрузится каждая подпапка resourcesDir с resource.toml (ресурсы с enabled = false пропускаются). Непустой список загружается строго по указанному порядку и по точным именам папок — wildcard-ы (*, dir/*) в нём НЕ раскрываются.
  • JS host стартует сам. Любой ресурс type = "js" с непустым main автоматически запускает серверный JavaScript-host — запись в modules не нужна.
  • modules / loadModules не влияет на загрузку. Ключ парсится, но загрузчик модулей грузит ВСЕ библиотеки (*.dll/*.so) из modulesDir независимо от этого списка.

(B) Поля, НЕ читаемые плоским parser

Эти поля объявлены в ServerConfig, но у плоского parser нет их разбора — установка в server.toml ни на что не влияет, сохраняется значение из сборки (колонка Default). Не тратьте время на их настройку через TOML.

КлючТипDefault (из сборки)Назначение
maxEntitiesuint3265535Верхний лимит сущностей
maxStreamedEntitiesuint328192Лимит одновременно стримингуемых сущностей
serverAntiCheatbooltrueФлаг античита
extendedLoggingbooltrueРасширенное логирование
masterListTokenstring""Inline-токен владельца сервера
masterListTokenFilestring"data/masterlist-token.txt"Путь к кэшу токена
publicHoststring""Публичный host для бэкенда
serverIdstring""Официальная личность сервера
serverLicenseTokenstring""Inline-proof лицензии
serverLicenseTokenFilestring"data/server-license.txt"Файл proof лицензии
requireServerLicenseboolfalseПадать при старте без личности/proof
allowLocalUnlicensedbooltrueРазрешить локальный dev-режим без лицензии
dataDirstring"data"Каталог данных
configFilestring"server.toml"Путь к конфигу (задаётся аргументом запуска, не из TOML)
cloudAuthUrlstring""URL проверки облачной личности
cloudAuthRequiredbooltrueТребовать облачную личность
cloudApiUrlstring""URL облачного API
cloudApiTokenstring""Токен облачного API
spawnXfloat215.76X dev-спавна
spawnYfloat-810.12Y dev-спавна
spawnZfloat30.73Z dev-спавна
spawnHeadingfloat157.0Heading dev-спавна
spawnModeluint320x705E61F2 (mp_m_freemode_01)Модель dev-спавна
debugSpawnRemotePedboolfalseТестовый серверный ped через обычный стриминг
debugRemotePedNetworkIduint1665000Network id тестового ped
debugRemotePedModeluint320x9B22DBAF (player_one)Модель тестового ped
debugRemotePedOffsetXfloat2.0Смещение X тестового ped
debugRemotePedOffsetYfloat0.0Смещение Y тестового ped
debugRemotePedOffsetZfloat0.0Смещение Z тестового ped
debugRemotePedHeadingfloat337.0Heading тестового ped

Две важные асимметрии

  • Cloud-auth подключён наполовину. useCloudAuth читается (можно включить), но ни одно из его детальных полей — cloudAuthUrl, cloudAuthRequired, cloudApiUrl, cloudApiToken — не читается. Облачную проверку можно включить, но нельзя настроить через TOML. (Early-auth, напротив, подключён полностью: читаются и useEarlyAuth, и earlyAuthUrl.)
  • Dev-спавн фиксирован. spawnAfterConnect читается (dev-fallback можно включить), но spawnX/Y/Z, spawnHeading, spawnModel не читаются — точка спавна жёстко зашита в сборку (215.76, -810.12, 30.73, heading 157, модель mp_m_freemode_01). Для боевого сервера держите spawnAfterConnect = false и спавните из ресурса в обработчике playerReady через SDK.

Идентичность и лицензия

Поля личности и лицензии (serverId, masterListToken, serverLicenseToken*, requireServerLicense, allowLocalUnlicensed, publicHost) и модель доверия описаны в Masterlist. Важно: кроме masterListUrl и announce, перечисленные там ключи текущим плоским parser server.toml не читаются — они сохраняют значения из сборки.

Varion Multiplayer Platform