RE:NODE

Руководства12 мин чтения

FiveM server.cfg: convar, OneSync и ACE простыми словами

Каждая строка server.cfg для FiveM: endpoint, sv_maxclients, OneSync, сборка игры, convar, права ACE и настройки, которые стоит менять.

0 прочтений

server.cfg - единственная конфигурация, которая есть у FXServer. В ней задаются порты, лимит игроков, лицензионный ключ, имя в списке серверов, какие ресурсы запускаются и в каком порядке, а также кто и какие команды имеет право вводить. Файл читается один раз, сверху вниз, при запуске сервера, поэтому порядок важен, недостающая закрывающая кавычка молча съедает всё после себя, а convar, который ресурс читает при старте, не изменится, пока этот ресурс не перезапустится. Эта статья проходит по файлу так, как это делает сервер.

Где лежит файл и как он читается#

FXServer запускается с файлом, названным в командной строке:

bash
$ ./run.sh +exec server.cfg

Всё в файле - это команды консоли. Особого синтаксиса нет, разделов нет, правил отступов нет: каждая строка выполняется в точности так, как если бы вы ввели её в консоль сервера. # начинает комментарий. Значения с пробелами нужно брать в двойные кавычки, а забытая закрывающая кавычка заставляет парсер проглотить остаток строки, и поэтому вполне корректно выглядящий файл может упасть с ошибкой, указывающей на строку на сорок рядов ниже.

Вложенность поддерживается, и ею стоит пользоваться. exec permissions.cfg внизу server.cfg подтягивает второй файл, и это разумное место для списка идентификаторов администраторов: тогда вы можете показать свой server.cfg, прося о помощи, не раздавая список админов.

Если вы используете txAdmin, он хранит данные сервера в собственной папке и редактирует server.cfg на странице CFG Editor. Правка того же файла в файловом менеджере, пока он открыт в txAdmin, означает, что победит одна из двух копий. Выберите одно место и не покидайте его.

Строки, необходимые каждому серверу#

Это шаблон по умолчанию, урезанный до необязательных частей, со значениями, которые вы на самом деле выставите:

server.cfg
endpoint_add_tcp "0.0.0.0:30120"endpoint_add_udp "0.0.0.0:30120"sv_hostname "^2Northside RP ^7| ^3Whitelisted ^7| ^1ESX"sv_maxclients 48sv_licenseKey "cfxk_xxxxxxxxxxxxxxxxxxxxx_xxxxxx"sv_scriptHookAllowed 0sv_endpointprivacy truesets locale "en-GB"sets tags "roleplay, esx, whitelist, europe"load_server_icon logo.pngset mysql_connection_string "mysql://user:pass@host/db?charset=utf8mb4"ensure oxmysqlensure ox_libensure es_extendedexec permissions.cfg

endpoint_add_tcp и endpoint_add_udp указывают на один и тот же номер порта, и нужны оба. UDP несёт игровой трафик. TCP - это HTTP-сервер: он отдаёт клиентам файлы ресурсов при первом входе и отвечает на /info.json, /players.json и /dynamic.json, и именно так каждый трекер серверов узнаёт число ваших игроков. Сервер, у которого доступен только TCP, бесконечно висит на экране подключения; сервер, у которого доступен только UDP, никогда не проходит дальше загрузки ресурсов. В статье порты игрового сервера объяснено, почему две половины ломаются по-разному.

0.0.0.0 означает «каждый адрес на этой машине» и почти всегда верно. Меняйте его, только если у машины несколько интерфейсов и вы знаете, какой вам нужен.

sv_hostname принимает цветовые коды: ^1 красный, ^2 зелёный, ^3 жёлтый, ^4 синий, ^5 голубой, ^6 розовый, ^7 белый, ^8 оранжевый, ^9 серый. Используйте не больше двух. Имя хоста, состоящее в основном из знаков препинания, не запоминается, а поиск по списку серверов идёт по обычному тексту.

sv_licenseKey - это ваш собственный ключ с портала Cfx.re. Он выдаётся вам, а не вашему хостеру, и привязан к адресу, на котором работает сервер: переезд на другой хост или другой IP означает перевыпуск ключа, а не копирование. FXServer не запустится без действительного ключа и ясно сообщает об этом в консоли.

set, sets и setr: три слова для одной переменной#

На этом спотыкаются все, по одному разу. В FiveM три команды, которые выглядят одинаково, а попадают в разные места.

КомандаКому виднаДля чего использовать
setтолько серверным скриптамсекреты, строки подключения, API-ключи
setsсписку серверов и клиентамназвание проекта, описание, теги
setrклиентам, реплицируетсянастройки, которые должен читать клиентский скрипт

Скрипт читает любую из них через GetConvar('name', 'default') или GetConvarInt('name', 0). Правило простое и абсолютное: всё секретное идёт через `set`. Пароль от базы данных за sets публикуется в списке серверов, где его находят скрейперы за считаные минуты.

config
set mysql_connection_string "mysql://user:pass@host/db"   # privatesets sv_projectName "Northside RP"                        # publicsets sv_projectDesc "Serious roleplay, whitelist on Discord"setr voice_defaultRadius 25.0                             # clients read it

sets locale принимает идентификатор локали, например en-GB или de-DE; шаблон по умолчанию содержит заглушку root-AQ, то есть Антарктиду, и если её оставить, это небольшой признак того, что никто не читал файл. sets tags - это список через запятую, который используют фильтры списка серверов, и это самый дешёвый способ быть найденным.

load_server_icon требует PNG размером 96 на 96, лежащий рядом с server.cfg. Любой другой размер отклоняется, обычно без сообщения, которое вы заметите.

OneSync и слоты игроков#

Базовая сеть GTA упирается в 32 игрока. OneSync - замена от Cfx.re, и всё, что выше 32 слотов, зависит от него:

config
set onesync onset onesync_population trueset onesync_forceMigration truesv_maxclients 64

onesync on - актуальная форма, и она покрывает то, что в старых руководствах называется Infinity. legacy - более старый режим с меньшей ёмкостью, а off возвращает вас к потолку в 32 игрока. При включённом OneSync FXServer примет число слотов, далеко выходящее за пределы разумного; то число, которое стоит задать, определяют ваш CPU и список ресурсов, а не предел.

onesync_population управляет тем, создаёт ли сервер фоновый трафик и пешеходов. Ролевые серверы обычно оставляют его включённым, а потом год жалуются на число сущностей. Отключение убирает большой кусок сетевой и процессорной нагрузки ценой пустого города, и несколько серьёзных серверов делают именно так и создают собственный трафик там, где он важен.

onesync_forceMigration передаёт владение сущностью от ушедшего игрока, а не удаляет её. Без него машина, владельцем которой был игрок, может исчезнуть при его отключении.

Изменение настроек OneSync требует полного перезапуска сервера, а не перезапуска ресурса. То же относится к sv_maxclients. А увеличение числа слотов на сервере, у которого CPU уже загружен на 100%, означает лишь, что больше людей будут смотреть, как он тормозит, - честная версия этого разговора в статье CPU или RAM для игровых серверов.

Сборка игры, script hook и pure mode#

config
sv_enforceGameBuild 2802sv_scriptHookAllowed 0sv_pureLevel 1

sv_enforceGameBuild фиксирует для каждого клиента конкретное обновление GTA Online. Это важно, потому что транспорт, оружие, области карты и одежда, добавленные в конкретном DLC, существуют только на клиентах с этой сборкой или новее. Если пользовательская машина использует ресурсы более новой сборки, чем вы навязываете, она будет невидимой или обрушит клиент. Распространённые значения: 1604 (базовая сборка), 2060, 2189, 2372, 2545, 2612, 2699, 2802, 2944, 3095 и более поздние. Список растёт с каждым обновлением Rockstar, поэтому сверяйтесь с актуальной документацией Cfx.re, а не копируйте число из поста на форуме. Повышение заставляет каждого игрока скачать новые игровые данные у Rockstar, что для него разовая задержка, о которой стоит предупредить.

sv_scriptHookAllowed 0 блокирует клиентские меню на основе ScriptHookV. Оставьте ноль. Нет ни одного ролевого сервера, которому это нужно включённым.

sv_pureLevel 1 отклоняет подключения клиентов с изменёнными игровыми файлами; 2 строже и блокирует ещё и графические модификации. Pure mode - грубый инструмент: уровень 2 отклонит вполне невинных игроков с визуальными модами, и это не античит. Начинайте с 0 или 1, если у вас нет причин.

sv_endpointprivacy true не пускает IP-адреса игроков в публичный вывод сервера. Причин держать его выключенным нет.

Запуск ресурсов#

config
ensure oxmysqlensure ox_libensure es_extendedensure ox_inventoryensure pma-voice

ensure запускает ресурс или перезапускает, если он уже работает. start только запускает. stop и restart делают то, что сказано, а refresh пересканирует resources/ в поисках папок, которых не было при загрузке сервера, - новому ресурсу всегда нужен refresh, прежде чем ensure его найдёт.

Порядок в файле - это порядок загрузки, а порядок загрузки - это порядок зависимостей. Сначала мост к базе данных, затем общие библиотеки, затем фреймворк, затем всё, что обращается к фреймворку. Ресурс профессии, стартовавший раньше ядра, получает nil, когда просит общий объект, и потом молча ничего не делает до конца сессии - без единой ошибки. Какой фреймворк ставить в середину этого списка и что нужно каждому - в статье сравнение фреймворков FiveM.

Ресурс находится только тогда, когда в его папке есть fxmanifest.lua. Папки в квадратных скобках, например [core] или [jobs], сканируются как контейнеры, а не считаются ресурсами, и вложенность может быть в несколько уровней. ensure всегда принимает имя ресурса, а не путь.

Права ACE: кто что может#

Система прав FiveM - это две команды. add_principal говорит, что одна сущность наследует от другой. add_ace говорит, что принципалу разрешён или запрещён объект.

permissions.cfg
add_ace group.admin command allowadd_ace group.admin command.quit denyadd_ace group.mod command.kick allowadd_ace group.mod command.ban allowadd_principal group.admin group.modadd_principal identifier.license:8e1f0c2a4b6d8e0f2a4b6c8d0e2f4a6b8c0d2e4f group.adminadd_principal identifier.discord:216735154273419264 group.mod

Объекты иерархичны по точкам, поэтому разрешение command разрешает каждый command.something, а более поздний deny для конкретного из них побеждает. Принципалами могут быть идентификаторы, группы или ресурсы - resource.mycoolscript настоящий принципал, и именно так ресурс получает право самостоятельно запускать привилегированные команды.

Типы идентификаторов, которые можно использовать как принципалы: license, license2, steam, discord, fivem, xbl, live и ip. license - тот, что нужен для постоянного администратора: он стабилен, не требует запущенного Steam и печатается в консоли, когда игрок заходит. Идентификаторы steam существуют, только если вы задали ключ Steam Web API через set steam_webApiKey, а discord - только если у игрока запущен Discord. Никогда не используйте ip.

Ресурсы проверяют эти права через IsPlayerAceAllowed(source, 'something'), и объект не обязан быть командой - фреймворки определяют собственные, например ace для открытия админ-меню. Аргумент true в конце вызова RegisterCommand - это то, что вообще делает команду защищённой по ACE; без него команда открыта каждому игроку на сервере.

Две вещи, в которых ошибаются. Во-первых, group.admin ничего не значит, пока вы ничего ему не выдали: это обычное имя, а не встроенная роль. Во-вторых, у txAdmin свой отдельный список администраторов, так что добавление человека в txAdmin не даёт ему прав ACE в игре, а выдача прав ACE не пускает его в txAdmin. Это две системы, и вы поддерживаете обе. Общий довод в пользу коротких списков - в статье субпользователи и наименьшие привилегии.

RCON и почему его лучше не включать#

FXServer поддерживает старый протокол RCON в стиле Source через rcon_password. В шаблоне по умолчанию он закомментирован, там ему и место. RCON в FiveM отправляет пароль открытым текстом по UDP на том же порту, что и игра, а всё, для чего он нужен, - консоль, перезапуски, управление игроками - уже есть в консоли панели или в txAdmin. Если он вам действительно нужен, задайте пароль, которого нет больше нигде, и сначала прочтите как безопасно пользоваться RCON.

sv_master1 "" убирает сервер из публичного списка. Используйте для сервера разработки, который не хотите показывать посторонним, и помните, что вы это задали, потому что иначе «мой сервер не появляется в списке» превращается в долгий вечер.

состояние, голосфайлы ресурсов, info.jsonконсоль, перезапускиКлиент игрокаFiveMtxAdminвеб-интерфейс 40120UDP 30120игровой трафикTCP 30120HTTP endpointFXServerресурсы
Что приходит на сервер FiveM по каждому протоколу

Диагностика конфигурации, которая не запускается#

После строки, которую вы правили, ничего не происходит. Пропала закрывающая кавычка. Парсер съел остаток этой строки, а если кавычка была в конце файла, последние несколько настроек не выполнились. Поищите в файле нечётное число кавычек.

Консоль сообщает, что лицензионный ключ недействителен. Ключ неверен, отозван или используется на другом адресе. Ключи привязаны к адресу, на котором работают, так что серверу, который переехал, нужен перевыпуск ключа на портале Cfx.re, а не копирование.

Could not find resource. Имя папки не совпадает со строкой ensure, в папке нет fxmanifest.lua или папку добавили после загрузки сервера, и никто не выполнил refresh. На Linux важен регистр.

Игроки бесконечно сидят на «Loading screen». Обычно ресурс выдаёт ошибку во время появления или создания персонажа. Следите за консолью, пока кто-то заходит; последний ресурс, напечатавший что-то перед тишиной, - ваш кандидат. Навык, который для этого нужен, - в статье чтение консоли.

Игроки не могут подключиться вообще, но сервер работает. UDP недоступен. Убедитесь, что присутствуют и endpoint_add_tcp, и endpoint_add_udp и что порт - тот, который выделил ваш хост.

Клиентам говорят, что сервер на другой сборке игры. sv_enforceGameBuild не совпадает с тем, что установлено у них. Им нужно дать GTA обновиться, или вам нужно понизить навязываемую сборку.

Сервер игнорирует `sv_maxclients` выше 32. OneSync выключен. Задайте set onesync on и перезапустите весь сервер.

На RE:NODE тарифы FiveM идут с двумя выделенными портами - один для игрового endpoint и один для веб-интерфейса txAdmin, - а на вкладке Network можно добавить ещё, если ресурсу нужен собственный. Вкладка Startup содержит переменные запуска, сам server.cfg можно править в браузере с подсветкой синтаксиса или по SFTP, а консоль неотфильтрована, что и есть единственный способ, которым проблему с экраном загрузки вообще решают. Еженедельный перезапуск на вкладке Schedules держит число сущностей в порядке; обоснование - в статье расписания перезапусков, которые помогают.

FAQ#

Нужны ли оба - endpoint_add_tcp и endpoint_add_udp?

Да, на одном порту. UDP несёт игру, TCP отдаёт загрузки ресурсов и endpoint JSON, которые читает список серверов. Если одного нет, сервер выглядит рабочим ровно до момента, когда игрок пытается зайти.

В чём разница между set, sets и setr?

set - приватная для сервера, sets публикуется в списке серверов, setr реплицируется подключённым клиентам. Пароли к базе и API-ключи всегда идут в set. Всё, что вы были бы рады увидеть на сайте-трекере, может быть sets.

Сколько игроков вмещает сервер FiveM?

Тридцать два без OneSync. С set onesync on программный потолок намного выше всего, что стоит пробовать, а реальный ответ - столько, сколько выдерживают ваша доля CPU и список ресурсов: большинство серверов находят свой предел где-то между 48 и 128 при обычной нагрузке ролевых ресурсов.

Как сделать кого-то администратором?

Добавьте его идентификатор license: как принципала группы и выдайте этой группе нужные ace. Его идентификатор license печатается в консоли, когда он заходит. Если ему нужен ещё и txAdmin, добавьте его там отдельно - две системы прав друг с другом не общаются.

Почему мои изменения в server.cfg не действуют?

Convar читаются при запуске ресурса. Правка значения без перезапуска чего-либо ничего не меняет. Перезапустите ресурс, который его читает, а для sv_maxclients, OneSync и endpoint перезапустите весь сервер.

Стоит ли включать RCON?

Нет. Это незашифрованный протокол из прошлого десятилетия, а всё, что он делает, уже делают консоль панели и txAdmin. Оставьте rcon_password закомментированным.


Комментарии

Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.

0/2000