Администрирование сервера 7 Days to Die сводится к двум файлам и одной консоли. serveradmin.xml определяет, кто администратор, кто забанен и какие команды доступны каждому уровню прав. Консоль, доступная из игры по F1 для администратора, через telnet или из панели вашего хостера, выполняет команды. Всё остальное, от настройки ночи орды до таблицы добычи, - это либо параметр в serverconfig.xml, либо модлет в папке Mods.
Это руководство подробно разбирает систему прав, удалённые пути доступа и то, почему один из них никогда не должен смотреть в интернет, консольные команды, которые действительно полезны, и работу модлетов: куда они кладутся, как их применяют патчи XPath, что блокирует EAC и что происходит с миром, когда вы удаляете мод, добавлявший блоки. Сам файл настроек - размер мира, число зомби, кровавая луна - описан в статье настройки сервера 7 Days to Die.
Где живёт админ: serveradmin.xml#
Файл лежит в папке пользовательских данных сервера, рядом с сохранениями, а его имя берётся из свойства AdminFileName в serverconfig.xml (по умолчанию serveradmin.xml). Сама папка - это UserDataFolder, которая на сервере под Linux по умолчанию находится в ~/.local/share/7DaysToDie/, а в Windows - в %APPDATA%\7DaysToDie\. Если вы не можете её найти, задайте UserDataFolder в serverconfig.xml явно, чтобы всегда знать, где она.
Файл для версии 1.0 и новее выглядит так:
<adminTools> <admins> <user platform="Steam" userid="76561198000000000" permission_level="0" name="you" /> <user platform="Steam" userid="76561198000000001" permission_level="100" name="a moderator" /> </admins> <permissions> <permission cmd="kick" permission_level="100" /> <permission cmd="ban" permission_level="100" /> <permission cmd="say" permission_level="100" /> <permission cmd="lp" permission_level="1000" /> </permissions> <whitelist> <user platform="Steam" userid="76561198000000002" name="a friend" /> </whitelist> <blacklist> <user platform="Steam" userid="76561198000000003" reason="griefing" /> </blacklist></adminTools>platform - это сеть аккаунтов: Steam для клиента Steam и другой идентификатор для аккаунтов Epic, Xbox или PlayStation на сервере с кроссплеем. userid - это ID на этой платформе, 17-значное число, которое для Steam начинается с 76561198. name - комментарий для вас, на работу он не влияет.
Точную платформу и ID подключённого игрока берите командой lp в консоли, а не набирайте Steam ID из URL профиля в надежде, что всё совпадёт.
Уровни прав и правило, на котором спотыкаются#
Уровни идут от 0 до 1000. Чем ниже, тем больше власти. У игрока без записи в <admins> уровень 1000.
0- уровень владельца: все команды, без исключений.- От
1до999- администратор, которого можно ограничить списком<permissions>. 1000- обычный игрок.
Правило, по которому команда выполняется, стоит прочитать дважды: игрок может выполнить любую команду, чей требуемый уровень больше или равен его собственному. Поэтому команду с permission_level="1000" может выполнить любой, а команду с permission_level="0" - только администратор уровня 0. Команда, вообще не перечисленная в <permissions>, по умолчанию получает уровень 0, и поэтому свежий сервер никому, кроме владельца, ничего не позволяет.
Отсюда простая кадровая модель. Поставьте своих модераторов на уровень 100 в <admins>, а затем перечислите на уровне 100 ровно те команды, которые им нужны:
| Команда | Предлагаемый уровень | Почему |
|---|---|---|
kick, ban, say, pm | 100 | Модерация без правки мира |
lp, lkp, gettime | 1000 | Безвредная информация, годится для всех |
give, giveself, cm, dm | 0 | Создание предметов остаётся у владельца |
shutdown, setgamepref | 0 | Всё, что меняет сам сервер |
Изменения в serveradmin.xml в современных сборках подхватываются без перезапуска, но консольные команды остаются надёжным путём, потому что записывают и перезагружают за один шаг.
Telnet, панель управления и порт, который не нужно открывать#
7 Days to Die поставляется с собственным интерфейсом удалённого администрирования, который настраивается в serverconfig.xml:
| Свойство | По умолчанию | Что делает |
|---|---|---|
TelnetEnabled | true | Включает консоль telnet |
TelnetPort | 8081 | Где она слушает |
TelnetPassword | пусто | Нужен для любого подключения, кроме локального |
TelnetFailedLoginLimit | задан | Число неудачных попыток до блокировки адреса |
TelnetFailedLoginsBlocktime | задан | Как долго длится эта блокировка |
ControlPanelEnabled | false | Встроенная веб-панель |
ControlPanelPort | 8080 | Её HTTP-порт |
Telnet передаёт данные открытым текстом. Пароль идёт по сети незашифрованным, каждая команда читается всем, что стоит на пути, а у протокола нет понятия ключа сессии. Он создавался для панели управления, которая общается с сервером на той же машине, и только там ему место. То же верно для встроенной веб-панели управления, которая работает по обычному HTTP.
Итак: оставьте telnet включённым с паролем и не открывайте порт 8081 в интернет. Если нужно удалённое администрирование, пользуйтесь консолью вашего хостера, которая достигает сервера по локальной сети, а не через полмира. Общий довод изложен в статье RCON без риска, а версия по портам - в статье правила файрвола, которые важны.
Сами игровые порты:
| Порт | Протокол | Назначение |
|---|---|---|
26900 | TCP и UDP | ServerPort, основной игровой порт и порт Steam |
26901 | UDP | Игровой трафик |
26902 | UDP | Игровой трафик |
8081 | TCP | Telnet, только локально |
8080 | TCP | Веб-панель управления, если включена, только локально |
Смена ServerPort сдвигает и два UDP-порта над ним. Почему игре нужно больше одного порта и что ломается, когда доступны только некоторые из них, описано в статье порты игрового сервера.
Консольные команды, которые стоит знать#
Их намного больше сотни. Вот те, которыми вы будете пользоваться. У большинства есть короткий псевдоним, указанный в скобках.
Модерация:
| Команда | Что делает |
|---|---|
admin add <name/id> <level> | Добавляет администратора с уровнем прав |
admin remove <name/id> | Удаляет его |
admin list | Выводит список администраторов |
kick <name/id> [reason] | Отключает игрока |
kickall [reason] | Отключает всех, полезно перед выключением |
ban add <name/id> <duration> <unit> [reason] | Банит, например ban add Bob 3 days "griefing" |
ban remove <name/id> | Снимает бан |
ban list | Выводит список банов |
whitelist add/remove/list | Управляет белым списком |
say "message" | Рассылает сообщение всем |
pm <name> "message" | Личное сообщение |
Информация:
| Команда | Что делает |
|---|---|
listplayers (lp) | Подключённые игроки с ID, позициями, здоровьем и пингом |
listknownplayers (lkp) | Все, кого сервер когда-либо видел |
listents (le) | Все сущности - так выясняют, что съедает время кадра |
gettime (gt) | Текущий день и время |
getgamepref (gg) | Все игровые параметры и их текущие значения |
mem | Память и число объектов |
version | Версия сборки, первое, что нужно сверить с модом |
Мир и игроки:
| Команда | Что делает |
|---|---|
settime <day> <hour> <minute> (st) | Также принимает day и night |
teleportplayer <player> <x> <y> <z> | Перемещает кого-то или к имени другого игрока |
tele <x> <y> <z> | Перемещает вас |
give <player> <item> <count> [quality] | Выдаёт предмет по его внутреннему имени |
giveself <item> [quality] [count] | Выдаёт его вам |
giveselfxp <amount> | Опыт |
spawnentity <playerid> <entityid> (se) | Создаёт рядом с игроком |
spawnairdrop | Сбрасывает ящик с припасами |
spawnwanderinghorde (swh) | Посылает бродячую орду |
buffplayer <player> <buff> | Применяет бафф, debuffplayer снимает его |
creativemenu (cm) | Открывает творческое меню для вашего клиента |
debugmenu (dm) | Режим отладки для вашего клиента |
Сервер:
| Команда | Что делает |
|---|---|
saveworld (sa) | Принудительно сохраняет сейчас |
shutdown | Сохраняет и штатно завершает работу |
setgamepref <pref> <value> (sg) | Меняет игровой параметр на лету |
help <command> | Авторитетный синтаксис для вашей сборки |
Две из них заслуживают большего, чем строки таблицы.
shutdown - единственный правильный способ остановить сервер 7 Days to Die. Мир хранится в файлах регионов, и процесс, убитый посреди записи, оставляет один из них повреждённым, что проявится позже как конкретная область, которая обрушивает клиент любому, кто в неё зайдёт, а не как ошибка при запуске. Пользуйтесь кнопкой Stop в панели, которая посылает штатный сигнал, или сначала выполните shutdown. Восстановить из резервной копии один повреждённый регион гораздо быстрее, чем весь мир, поэтому храните копии, которые можно просматривать, а не только архивы мира целиком.
setgamepref меняет параметр на работающем сервере и не записывает его в serverconfig.xml. Поэтому он идеален для эксперимента - снизьте BloodMoonEnemyCount посреди недели и посмотрите, что будет с CPU, - и ловушка для всего, что вы хотите сохранить, потому что следующий перезапуск всё вернёт. Некоторые параметры читаются только при создании мира и вообще ничего не изменят, что бы ни говорила консоль. Проверьте через gg после установки.
Модлеты: куда их класть и как они загружаются#
В 7 Days to Die нет мастерской. Моды - это папки, которые вы кладёте в каталог Mods в корне сервера, рядом с Data/ и исполняемым файлом сервера. Создайте его, если его нет. Каждый модлет - это одна вложенная папка с ModInfo.xml в корне:
Mods/ MyTweaks/ ModInfo.xml Config/ blocks.xml loot.xml SomeUIMod/ ModInfo.xml Config/ Resources/ModInfo.xml в версии 1.0 и новее плоский:
<?xml version="1.0" encoding="UTF-8" ?><xml> <Name value="MyTweaks" /> <DisplayName value="My Tweaks" /> <Version value="1.0.0" /> <Description value="Small balance changes" /> <Author value="you" /> <Website value="" /></xml>Старые модлеты оборачивают всё это в элемент <ModInfo> внутри <xml>. С версии 1.0 форма с оболочкой перестала быть актуальной, так что модлет, который не трогали со времён Alpha 21, может вообще не распознаваться. Мод, который просто не появляется в журнале запуска, - обычно именно этот случай, а не плохая установка.
Модлеты загружаются в алфавитном порядке имён папок, и более поздние патчи побеждают более ранние, когда оба затрагивают одно и то же значение. Это весь механизм порядка загрузки: если нужно, чтобы один модлет победил, переименуйте его папку так, чтобы она шла последней. Префиксы вроде 00_ и zz_ - соглашение сообщества, и они работают потому, что это просто имена файлов.
Как написать и отладить патч XPath#
Модлет не заменяет ванильный конфигурационный файл, а патчит его. Положите в Config/ файл с тем же именем, что у ванильного в Data/Config/, оберните содержимое в <configs> и опишите изменение:
<configs> <set xpath="/blocks/block[@name='BLOCK_NAME']/property[@name='MaxDamage']/@value">1200</set> <append xpath="/blocks"> <block name="myNewBlock"> <property name="Extends" value="BLOCK_TO_COPY" /> </block> </append> <remove xpath="/blocks/block[@name='BLOCK_NAME']/property[@name='DowngradeBlock']" /></configs>Доступны инструкции set, setattribute, removeattribute, append, insertBefore, insertAfter, remove и csv. Путь xpath должен в точности соответствовать ванильному файлу, поэтому откройте Data/Config/blocks.xml на сервере и скопируйте путь оттуда, а не гадайте с именами элементов.
Важный факт для отладки: патч, чей xpath ничему не соответствует, не роняет сервер. Он пишет предупреждение, и игра продолжает работать с исходным значением. Поэтому модлет, который «ничего не делает», почти всегда просто не применился, а причина есть в выходном журнале сервера, который консоль панели показывает при запуске. Найдите в нём имя модлета: вы увидите либо строку о том, что он загружен и применён, либо строку о том, что патч не совпал.
Поэтому же разнобой версий так болезнен. Когда обновление игры переименовывает свойство, каждый модлет, который его патчил, молча перестаёт работать, продолжая выглядеть установленным. После любого обновления читайте журнал запуска раньше, чем форумы.
EAC, клиенты и что должны установить игроки#
EACEnabled в serverconfig.xml управляет Easy Anti-Cheat. Эмпирическое правило:
- Модлет, который состоит только из XML, обычно работает при включённом EAC.
- Модлет с `.dll` - нет. Установите
EACEnabledвfalse, а игрокам, которым нужна клиентская часть, придётся запускать игру без EAC из лаунчера.
Отключение EAC - это настоящая цена, а не формальность. Именно он останавливает распространённые читы полёта и создания предметов, и на публичном сервере вы это заметите. Если то, что вам нужно, можно получить одним XML, делайте так.
Автоматической доставки модов клиентам нет. Никто никого ни на что не подписывает, и при подключении ничего не отправляется. Что нужно каждому игроку, зависит от того, что меняет модлет:
- Только сервер возможен для того, что вычисляет один сервер: веса таблицы добычи, правила появления, награды за задания.
- Обе стороны нужны для всего, что клиент рисует или предсказывает: новые предметы, новые блоки, рецепты, значки, модели, звуки, интерфейс.
Считайте, что нужны обе стороны, если автор не говорит иного, и выдавайте игрокам zip точной папки Mods, которую вы запускаете, а не список ссылок. Игрок, скачавший более новую версию одного из модов, чем на сервере, столкнётся с непонятными сбоями, а не с внятным сообщением.
На сервере с кроссплеем это решается само: консольные игроки ничего не могут установить, так что модифицированный сервер, которому нужны клиентские файлы, - это сервер только для PC, что бы ни говорила настройка кроссплея.
Диагностика#
Ничего из введённого в консоли не работает. Вы не администратор или вы администратор с уровнем выше требуемого командой. Выполните admin list из консоли самого сервера, у которой всегда уровень 0.
Бан ничего не дал. Вы забанили имя игрока на сервере, где он может переподключиться под другим. Баньте вместо этого ID платформы из lp.
Telnet отвергает мой пароль. TelnetPassword пуст, что разрешает только локальные подключения, либо адрес заблокирован после неудачных попыток - дождитесь окончания TelnetFailedLoginsBlocktime.
Модлет лежит в папке и ничего не делает. Три кандидата по порядку: формат ModInfo.xml старый, вложенный; неверная структура папок, когда модлет лежит на уровень глубже внутри скачанного архива; или xpath не совпадает. Журнал запуска скажет, какой именно.
Настройки, изменённые в консоли, вернулись. setgamepref действует только на сессию. Запишите значение ещё и в serverconfig.xml.
Определённая область обрушивает клиенты игроков. Повреждён файл региона, почти всегда из-за сервера, который убили, а не завершили штатно. Восстановите этот регион из резервной копии, а не весь мир.
Производительность рушится в ночь орды, а до неё - нет. Это и есть нагрузочный тест, и это вопрос подбора тарифа, а не администрирования. le во время орды покажет, сколько сущностей живо, а настройки сервера 7 Days to Die объясняют, какие числа урезать.
FAQ#
Как сделать себя администратором на сервере 7 Days to Die?
В консоли сервера выполните admin add <your platform id> 0. ID возьмите из lp, пока вы подключены. Можно и вручную отредактировать serveradmin.xml, но команда записывает его в формате, которого ждёт ваша сборка.
Какой уровень прав дать модераторам?
Обычно выбирают 100. Он намного ниже 1000, который получают обычные игроки, и намного выше 0, так что вы можете выдать kick, ban и say на уровне 100 в разделе <permissions>, оставив создание предметов и shutdown на уровне 0.
Безопасно ли открывать порт telnet?
Нет. Telnet отправляет пароль и каждую команду открытым текстом. Оставьте TelnetEnabled включённым с паролем для локальных инструментов, держите порт 8081 закрытым от интернета и администрируйте сервер через консоль вашего хостера.
Нужно ли игрокам устанавливать моды?
Обычно да. Мастерской нет, и клиентам ничего не отправляется. Модлеты только для сервера существуют для правил добычи и появления, но всё, что добавляет предмет, блок, рецепт или значок, должно быть на обеих сторонах в одной версии.
Можно ли запускать моды при включённом EAC?
Модлеты только на XML в целом работают при включённом EAC. Всё, что содержит скомпилированный .dll, требует EACEnabled в значении false в serverconfig.xml, и затронутым игрокам тоже нужно запускать игру без EAC.
Почему мой модлет перестал работать после обновления?
Обновление игры переименовало или переместило то, на что указывал его xpath, поэтому патч больше не совпадает и пропускается с предупреждением. Проверьте журнал запуска, затем страницу мода в поисках выпуска под вашу сборку. Более общий порядок действий описан в статье что делать, когда обновление мода ломает сервер.




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