RE:NODE

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

Форматы конфигов игровых серверов: ini, json, xml

Как редактировать конфиги игровых серверов в любом формате - ini, json, yaml, xml, cfg, lua и toml, - какие ошибки синтаксиса ломают сервер и как проверить файл заранее.

0 прочтений

Игровые серверы настраиваются примерно в восьми текстовых форматах, и почти каждое «настройка ничего не изменила» или «после правки сервер не запускается» сводится к одному из трёх: нарушено правило синтаксиса формата, сервер перезаписывает файл при остановке или панель хостинга перезаписывает ключ при загрузке. Выучите правила каждого формата один раз - секции INI, запрет комментариев и висячих запятых в JSON, запрет табуляции в YAML, экранирование в XML, точки с запятой в .cfg от Bohemia - и редактируйте при остановленном сервере, и большая часть этих проблем исчезнет. Эта статья - полевой справочник по форматам, играм, которые их используют, и способам проверить файл до того, как ошибку за вас найдёт сервер.

Какая игра использует какой формат#

ФорматТипичные файлыИгры
INIGameUserSettings.ini, Game.ini, PalWorldSettings.ini, cluster.iniИгры на Unreal Engine, Palworld, ARK, Don't Starve Together
Properties / key=valueserver.properties, servertest.ini, serverconfig.txtMinecraft, Project Zomboid, Terraria
JSONServerHostSettings.json, enshrouded_server.json, server-settings.jsonV Rising, Enshrouded, Factorio
YAMLpaper-global.yml, bukkit.yml, config.yml плагиновPaper и Spigot, большинство плагинов Minecraft
XMLserverconfig.xml, serversettings.xml, types.xml7 Days to Die, Barotrauma, Space Engineers, лут DayZ
Консольный .cfgserver.cfg, autoexec.cfgИгры на Source (CS2, TF2, Garry's Mod), FiveM
.cfg от BohemiaserverDZ.cfg, server.cfgDayZ, Arma 3
LuaSandboxVars.lua, modoverrides.luaProject Zomboid, Don't Starve Together
TOMLServerConfig.toml, velocity.toml, конфиги модовBeamMP, Velocity, моды NeoForge

Расширение не всегда говорит о формате. servertest.ini в Project Zomboid - это простой key=value без секций. .cfg в игре на Source - это список консольных команд, а .cfg в DayZ - синтаксис на классах с точками с запятой. Посмотрите на файл, прежде чем делать выводы.

INI, properties и вариант Unreal#

INI - самый старый формат из перечисленных: секции в квадратных скобках, под ними строки key=value, комментарии начинаются с ; (некоторые парсеры принимают и #).

GameUserSettings.ini
[ServerSettings]ServerPassword=ServerAdminPassword=change-meDifficultyOffset=1.0XPMultiplier=2.0[SessionSettings]SessionName=My ARK Server

Секция имеет значение. Правильный ключ под неправильным заголовком молча игнорируется - это классическая ошибка в ARK: настройку из Game.ini кладут в GameUserSettings.ini или правильный ключ ставят под [SessionSettings] вместо [ServerSettings].

У игр на Unreal Engine есть две собственные привычки. Имена секций часто являются путями скриптов, например [/Script/Pal.PalGameWorldSettings]. А некоторые игры упаковывают все настройки в одну очень длинную строку вложенных значений:

PalWorldSettings.ini
[/Script/Pal.PalGameWorldSettings]OptionSettings=(Difficulty=None,ExpRate=1.000000,ServerPlayerMaxNum=32,ServerName="My Palworld",AdminPassword="change-me",PublicPort=8211)

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

Серверы на Unreal к тому же записывают свои конфиги обратно на диск при остановке. Если править GameUserSettings.ini при работающем сервере, ваше изменение будет перезаписано копией из памяти сервера при следующей остановке. Сначала остановите, потом правьте, потом запускайте. Структура файлов и то, какая папка действительно применяется, объясняются в статье об основах выделенных серверов на Unreal Engine.

Don't Starve Together использует классический INI для cluster.ini и для server.ini каждого шарда, с секциями вроде [GAMEPLAY], [NETWORK] и [SHARD]. Правило то же: правильный ключ в правильной секции.

Properties и простой key=value

server.properties в Minecraft - это файл свойств Java: по одному key=value на строку, # для комментариев, секций нет.

server.properties
# Minecraft server propertiesview-distance=8simulation-distance=6white-list=truemotd=A \u00A7aGreen\u00A7r server

На трёх деталях спотыкаются чаще всего. Пробелы после значения сохраняются как его часть, так что white-list=true с пробелом в конце может не означать true. Обратный слэш - символ экранирования, поэтому цветовые коды часто пишут как \u00A7. А сервер перезаписывает файл при запуске, добавляя недостающие ключи со значениями по умолчанию и иногда переставляя строки, так что ваши собственные комментарии могут исчезнуть. Каждый ключ разобран в статье о server.properties.

servertest.ini в Project Zomboid (он называется по имени вашего сервера) и serverconfig.txt в Terraria устроены так же, только со своими ключами. В Zomboid списки внутри значения разделяются точкой с запятой - Mods=modA;modB и WorkshopItems=123;456, - и лишний пробел или разное количество элементов в этих двух строках - частая причина того, что моды не загружаются.

JSON#

JSON строгий, и в этом весь его характер. Объекты в фигурных скобках, массивы в квадратных, ключи в двойных кавычках, значения - строки, числа, true, false или null.

ServerHostSettings.json
{  "Name": "My V Rising Server",  "Port": 9876,  "QueryPort": 9877,  "MaxConnectedUsers": 40,  "Password": "",  "Secure": true}

Правила, нарушение которых ломает сервер:

  • Никаких висячих запятых. "Secure": true, перед закрывающей скобкой - ошибка.
  • Никаких комментариев. Нельзя ни //, ни #. server-settings.json в Factorio обходит это ключами вроде "_comment_visibility", которые игра игнорирует, - намёк на то, что настоящие комментарии добавлять не стоит.
  • Только двойные кавычки. Одинарные недопустимы.
  • Типы важны. "Port": "9876" - это строка, а не число, и некоторые серверы её отвергают или игнорируют.
  • Обратные слэши нужно экранировать. Путь Windows записывается как "C:\\Servers\\save".

Ошибка в JSON обычно останавливает сервер при запуске с ошибкой разбора, где указаны строка и столбец. Некоторые серверы вместо этого откатываются на значения по умолчанию и перезаписывают ими ваш файл, и выглядит это так, будто ваши настройки пропали. Проверяйте перед запуском:

bash
$ python3 -m json.tool ServerHostSettings.json > /dev/null && echo ok

YAML#

YAML - формат мира плагинов Minecraft: собственные конфиги Paper, bukkit.yml, spigot.yml и config.yml почти любого плагина. Структура задаётся отступами:

config/paper-world-defaults.yml
chunks:  auto-save-interval: default  max-auto-save-chunks-per-tick: 24entities:  spawning:    despawn-ranges:      monster:        hard: 128        soft: 32

Что его ломает:

  • Табуляция. YAML запрещает символы табуляции в отступах. Один таб, вставленный из поста на форуме, ломает весь файл.
  • Непоследовательные отступы. Два пробела в одном блоке и четыре в соседнем меняют структуру.
  • Специальные значения без кавычек. yes, no, on и off старые парсеры YAML могут прочитать как булевы значения; версия вроде 1.20 становится числом. Берите в кавычки строки, похожие на что-то другое: version: "1.20".
  • Двоеточие с пробелом внутри значения начинает новое отображение. Возьмите значение в кавычки.

Когда конфиг плагина Paper сломан, плагин обычно пишет ошибку в лог и либо загружает значения по умолчанию, либо отключается, а некоторые плагины после этого перезаписывают файл. Сохраняйте копию перед правкой и проверяйте:

bash
$ python3 -c 'import sys, yaml; yaml.safe_load(open(sys.argv[1]))' config.yml && echo ok

Для этого нужен пакет PyYAML. Онлайн-валидаторы тоже подходят, но не вставляйте на сайт конфиг, в котором есть пароли или учётные данные базы данных.

XML#

XML многословен и ничего не прощает. Каждый элемент должен быть закрыт, атрибуты - в кавычках, а пять символов внутри значений нужно экранировать: & как &amp;, < как &lt;, > как &gt;, " как &quot; и ' как &apos;.

serverconfig.xml
<?xml version="1.0"?><ServerSettings>  <property name="ServerName" value="Smith &amp; Sons Survival"/>  <property name="ServerPort" value="26900"/>  <property name="ServerMaxPlayerCount" value="8"/>  <!-- <property name="ServerPassword" value=""/> --></ServerSettings>

Обычный виновник - амперсанд: имя сервера с & сразу ломает конфиг 7 Days to Die. Комментарии записываются как <!-- ... --> и не могут содержать --. Каждая настройка из этого файла разобрана в статье о настройках сервера 7 Days to Die.

types.xml в DayZ - другой XML-файл, который правят постоянно, и при нескольких тысячах строк один незакрытый тег может отключить всю экономику лута. Ему посвящена статья о types.xml и экономике лута в DayZ. Проверяйте перед загрузкой:

bash
$ xmllint --noout types.xml && echo ok

Два вида .cfg#

Source и FiveM: список команд

В играх на Source файл .cfg - это скрипт из консольных команд, которые выполняются по порядку, ровно как если бы вы их вводили. // начинает комментарий. Значения с пробелами нужно брать в двойные кавычки.

server.cfg
hostname "My CS2 Server"sv_password ""rcon_password "change-me"sv_cheats 0exec banned_user.cfg

Раз это скрипт, порядок важен: более поздняя строка переопределяет более раннюю, и конфиг игрового режима, выполненный после server.cfg, может незаметно отменить ваши настройки. Опечатка в команде - не ошибка; консоль печатает Unknown command и идёт дальше. После правки читайте консоль при запуске. Сами cvar разобраны в статье о командах и cvar сервера CS2.

server.cfg в FiveM устроен по той же идее - строки sv_hostname, set, endpoint_add_tcp, ensure выполняются по порядку, - и порядок запуска ресурсов определяется порядком строк ensure. Подробно - в статье о server.cfg в FiveM.

DayZ и Arma 3: синтаксис классов

Формат Bohemia похож на C. Присваивания заканчиваются точкой с запятой, строки берутся в двойные кавычки, а вложенные блоки - это классы:

serverDZ.cfg
hostname = "My DayZ Server";password = "";passwordAdmin = "change-me";maxPlayers = 60;class Missions{    class DayZ    {        template = "dayzOffline.chernarusplus";    };};

Пропущенная точка с запятой или пропущенная }; после класса - обычная причина, по которой сервер DayZ останавливается при запуске с ошибкой конфига. Массивы записываются как name[] = {"a", "b"};. Каждая строка разобрана в статье о server.cfg в DayZ.

Lua и TOML#

Таблицы Lua

Project Zomboid и Don't Starve Together хранят часть настроек в виде кода на Lua, который возвращает или присваивает таблицу. Раз это код, он выполняется, и синтаксическая ошибка означает, что не сработает весь файл.

modoverrides.lua
return {  ["workshop-378160973"] = { enabled = true },  ["workshop-375850593"] = {    enabled = true,    configuration_options = { difficulty = "hard" },  },}

Записи разделяются запятыми, и Lua допускает висячую запятую, так что здесь это не проблема, в отличие от JSON. Проблема - пропущенные запятые между записями, несбалансированные скобки и строки без кавычек. -- начинает комментарий. luac -p file.lua проверяет синтаксис без выполнения, если Lua установлен. SandboxVars.lua из Project Zomboid разобран по ключам в статье о настройках сервера Project Zomboid.

TOML

TOML похож на INI, но типизирован и строже: строки обязательно в кавычках, числа и булевы значения - обязательно без них, а таблицы записываются как [section] или [section.subsection].

ServerConfig.toml
[General]Name = "My BeamMP Server"Port = 30814MaxPlayers = 8Private = trueAuthKey = ""

Private = "true" - это строка, и её могут отвергнуть; Name = My Server без кавычек - синтаксическая ошибка. TOML используют BeamMP, прокси Velocity для Minecraft и конфиги модов NeoForge.

Кодировка, редакторы и учёт изменений#

Кодировка и окончания строк

Файл может быть синтаксически безупречным и всё равно не работать из-за того, как он сохранён.

  • Кодировка. Используйте UTF-8. Некоторые редакторы под Windows сохраняют UTF-8 с BOM - тремя невидимыми байтами в начале файла, - и кое-какие парсеры на нём спотыкаются; ошибка тогда указывает на строку 1, столбец 1, где на вид всё в порядке.
  • Окончания строк. Windows сохраняет строки с окончанием \r\n, Linux использует \n. Большинство игровых парсеров принимают оба варианта; shell-скрипты - нет.
  • Типографские кавычки. При копировании настроек с веб-страницы или из текстового процессора " может превратиться в фигурные кавычки, которые не принимает ни один парсер.
  • Пользуйтесь нормальным редактором. Редактор в файловом менеджере панели, VS Code или Notepad++ с подсветкой синтаксиса для нужного формата. Подсветка покажет незакрытую строку или скобку раньше, чем это сделает сервер.

В RE:NODE файловый менеджер открывает конфиги во встроенном в браузер редакторе с подсветкой синтаксиса, а крупные правки можно делать через SFTP в любимом редакторе - данные для подключения есть в статье о SFTP и файловом менеджере.

Учёт изменений

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

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

  • Копируйте перед правкой. Сохраните server.cfg как server.cfg.2026-10-07, прежде чем его трогать. Диск дешёвый, а копия рядом с файлом - самый быстрый откат, какой только бывает.
  • Меняйте по одному. Если вы поменяли пять значений и сервер ведёт себя странно, у вас пять подозреваемых. Одно изменение, один рестарт, одно наблюдение.
  • Записывайте причину. Комментарий в файле, если формат это позволяет, или короткий текстовый файл с датированными заметками, если нет: «2026-10-07: view-distance с 10 на 8, TPS проседает в пик». Причину вы забудете первой.
  • Сравнивайте, когда что-то изменилось неожиданно. Скачайте текущий файл и последнюю заведомо рабочую копию и сравните их. На машине с командной строкой diff -u old.yml new.yml показывает, какие именно строки сдвинулись, и вопрос «изменило ли обновление мой конфиг» решается за секунды.
  • Храните конфиги в backup. Backup панели включают их вместе с миром. Если вы вдобавок держите папку конфигов в приватном Git-репозитории, вы бесплатно получаете полную историю каждого изменения, но никогда не коммитьте файлы с паролями или токенами туда, куда есть доступ у других.

Обновления плагинов и модов заслуживают особого подозрения. Многие плагины Minecraft при обновлении мигрируют свой config.yml: добавляют новые ключи, а иногда переименовывают или удаляют старые. Большинство делает это аккуратно и сохраняет ваши значения. Некоторые пересоздают файл, а старый сохраняют как config.yml.old, и вы найдёте его, только если поищете. После любого обновления сравните конфиг со своей копией, прежде чем считать, что плагин ведёт себя как раньше.

Когда правка не применяется#

Если настройка откатывается или ни на что не влияет, причина почти всегда одна из этих, в таком порядке:

  1. Сервер перезаписал файл. Игры на Unreal, Minecraft и многие плагины записывают конфиги при запуске или остановке. Остановите сервер, правьте, запускайте.
  2. Ключом управляет панель. Эгг Pterodactyl может при каждой загрузке перезаписывать определённые ключи - порты, IP, иногда максимум игроков - из вкладок Startup и Network. Меняйте эти значения там, а не в файле. Как это работает, объясняется в статье об эггах Pterodactyl для игровых серверов.
  3. Аргумент запуска переопределяет файл. Во многих играх флаги командной строки важнее значений из конфига. -port в строке запуска побеждает Port в JSON.
  4. Не тот файл или не та папка. У игр на Unreal конфиги по умолчанию и сохранённые конфиги лежат в разных местах; читается только один. В Minecraft есть переопределения глобальных настроек для отдельных миров.
  5. Синтаксическая ошибка с тихим откатом. Сервер не смог разобрать файл и взял значения по умолчанию. Поищите предупреждение о разборе в начале лога.

FAQ#

Можно ли добавлять комментарии в JSON-конфиг?

Нет. В стандартном JSON нет синтаксиса комментариев, и большинство игровых серверов используют строгий парсер. Ведите заметки в отдельном текстовом файле или используйте ключ, который игра игнорирует, как делает Factorio со своими ключами _comment.

Почему после правки сервер сбросил конфиг на значения по умолчанию?

Файл не удалось разобрать, и сервер откатился на значения по умолчанию, часто записав их поверх вашего файла. Проверьте синтаксис, восстановите свою копию и поищите ошибку разбора в начале лога.

Имеет ли значение, табуляция или пробелы?

В YAML - да, табуляция в отступах недопустима. В INI, JSON, XML, TOML и Lua отступы чисто косметические. В файлах .cfg от Bohemia тоже, а вот точки с запятой - нет.

Можно ли править конфиги при работающем сервере?

Только если игра перечитывает этот файл по команде, а таких немного. Многие серверы записывают конфиг при остановке и перезаписывают ваши правки. Остановить, отредактировать, запустить - безопасный порядок для любой игры.

Как безопаснее всего менять длинную строку настроек Unreal Engine?

Скопируйте рабочую строку в резервную копию, поменяйте одно значение, не трогайте запятые и кавычки и запустите сервер. Если настройка не применилась, сравните со стандартным файлом, который поставляется с игрой, вместо того чтобы перепечатывать строку.


Комментарии

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

0/2000