RE:NODE

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

Команды сервера Factorio, баны и RCON

Все админские команды мультиплеера Factorio, группы прав против гриферов, полезные Lua-команды для консоли, настройка RCON и что /c делает с достижениями.

0 прочтений

Сервером Factorio управляют slash-командами, которые админ вводит в игре или в консоли сервера - у неё всегда полные права. Админы берутся из server-adminlist.json или назначаются через /promote; баны и записи белого списка пишутся в отдельные JSON-файлы; /config меняет настройки сервера на лету; а группы прав, которые открываются через /permissions, решают, что разрешено каждой категории игроков, - и это настоящая защита от гриферов на публичной карте. Lua-команды через /c и /sc умеют почти всё, но ценой навсегда отключённых достижений в этом сохранении. RCON открывает всё это по TCP для ботов и скриптов. Эта статья - полный справочник, с настройкой прав и Lua-фрагментами, которые стоит иметь под рукой.

Основы - установка headless-сервера, server-settings.json, порты и автосохранения - описаны в руководстве по headless-серверу Factorio. Здесь речь о том, как управлять сервером, когда на нём уже есть люди.

Кто является админом и как им становятся#

Получить права админа можно тремя способами:

  1. Консоль сервера. Всё, что вводится в стандартный ввод сервера - в поле консоли в панели, - выполняется с полными правами. Это единственное место, доступ к которому невозможно потерять.
  2. Список админов. server-adminlist.json, передаваемый через --server-adminlist, - это JSON-массив имён пользователей factorio.com. Перечисленные игроки становятся админами сразу при входе.
  3. `/promote`. Существующий админ или консоль повышает игрока. Сервер записывает его в файл списка админов, так что права сохраняются после перезапуска.
server-adminlist.json
["alice", "bob_builds"]

Имена - это имена аккаунтов factorio.com, и доверять им можно, только если в server-settings.json параметр require_user_verification равен true. С выключенной проверкой кто угодно может подключиться под любым именем, в том числе под именем админа. Оставьте её включённой.

Не правьте файлы списков вручную, пока сервер работает. Сервер перезаписывает их, когда вы используете /promote, /ban или /whitelist, и ваша правка затирается.

Справочник админских команд#

Команды начинаются со слеша. В консоли сервера слеш тоже обязателен - текст без него отправляется в чат от имени <server>.

Модерация

КомандаЧто делает
/kick <player> <reason>Отключает игрока
/ban <player> <reason>Банит и записывает в server-banlist.json
/unban <player>Снимает бан
/banlist add <player>Правит список банов напрямую; также remove, get, clear
/mute <player>Запрещает игроку писать в чат
/unmute <player>Отменяет запрет
/mutesПоказывает игроков с запретом чата
/purge <player>Удаляет сообщения игрока из истории чата
/whitelist add <player>Правит белый список; также remove, get, clear

Файл белого списка применяется, только если сервер запущен с --use-server-whitelist. Бан привязан к имени аккаунта, так что забаненный игрок не сможет вернуться с тем же аккаунтом factorio.com.

Управление админами и игроками

КомандаЧто делает
/promote <player>Делает игрока админом
/demote <player>Снимает права админа
/adminsПоказывает админов
/playersПоказывает игроков; /players online или /players count
/adminОткрывает окно админа: игроки, баны, белый список
/permissionsОткрывает редактор групп прав
/open <player>Открывает инвентарь другого игрока
/swap-players <a> [b]Меняет персонажей игроков местами
/delete-blueprint-library <player>Удаляет сохранённую библиотеку чертежей игрока, который не в сети

/admin - окно, которым большинство админов пользуется каждый день: список игроков с кнопками кика, бана, мута и повышения и вкладки со списком банов и белым списком. Команды делают то же самое из консоли, где окна нет.

/delete-blueprint-library решает одну конкретную проблему: библиотека чертежей каждого игрока хранится в сохранении, и на долго работающем публичном сервере сотни игроков, заглянувших один раз, могут раздуть сохранение библиотеками, которые никому больше не понадобятся. Работает только для игроков не в сети.

Сервер и информация

КомандаЧто делает
/server-saveСохраняет прямо сейчас
/config get <key>Читает настройку сервера
/config set <key> <value>Сразу меняет её
/timeСколько времени идёт карта
/seedСид карты
/evolutionЭволюция врагов и её причины
/versionВерсия игры
/helpПоказывает команды или подробности об одной

В ключах /config используются дефисы там, где в JSON-файле подчёркивания: max-players, game-password, afk-auto-kick, allow-commands, autosave-interval, max-upload-slots, only-admins-can-pause, visibility-public и остальные. Так, /config set game-password new-secret меняет пароль для следующего подключающегося без перезапуска. Настройка не записывается обратно в server-settings.json, так что обновите и файл, если изменение должно сохраниться.

Чат

/shout (или /s) отправляет сообщение всем игрокам независимо от команды, /whisper <player> (или /w) - лично, а /reply (или /r) отвечает на последнее личное сообщение. Админы видят тот же чат, что и все; скрытого канала для персонала нет.

Группы прав: настоящее средство против гриферов#

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

По умолчанию все находятся в Default, которой разрешено всё. Обычная схема для публичного сервера - ограничить Default и переводить тех, кому доверяете, в группу без ограничений:

ГруппаКтоЧто запрещено
DefaultНовые и незнакомые игрокиПланировщик разбора, импорт чертежей, правка поездов и проводов
TrustedПостоянные игрокиНичего или только правка прав
АдминыПерсоналАдмины управляют группами через /permissions

Проще всего настроить это в окне /permissions, где каждое действие - галочка для каждой группы, а игроков можно перетаскивать между группами. То же можно сделать и из Lua-консоли, что удобно, чтобы каждый раз одинаково настраивать свежую карту:

lua
/sc local d = game.permissions.get_group("Default")d.set_allows_action(defines.input_action.deconstruct, false)d.set_allows_action(defines.input_action.import_blueprint_string, false)d.set_allows_action(defines.input_action.edit_permission_group, false)local t = game.permissions.create_group("Trusted")t.add_player("alice")

Имена в defines.input_action - внутренние имена действий, и время от времени они меняются между версиями игры; актуальный набор приведён в документации Lua API Factorio. Группа, созданная через create_group, начинается со всех разрешённых действий, так что нужно только запрещать.

О том, как вообще организовать персонал и правила, читайте в статье правила сервера, модерация и персонал.

Lua-команды: /c, /sc и /mc#

/c (или /command) выполняет строку Lua с доступом ко всему игровому API. Это самый мощный инструмент админа и тот, о применении которого чаще всего жалеют.

ПрефиксПоведение
/c <lua>Выполняет Lua; команда видна всем игрокам
/sc <lua>Тихо - выполняет без объявления команды
/mc <lua>Выполняет и сообщает, сколько времени это заняло

Кто может ими пользоваться, определяет allow_commands в server-settings.json: true, false или admins-only. Везде, кроме закрытой игры с друзьями, должно стоять admins-only.

Несколько строк, которые стоит знать, - все это настоящие вызовы API:

lua
-- How many players are connected/sc game.print(#game.connected_players)-- Teleport a named player to a position on Nauvis/sc game.get_player("bob_builds").teleport({0, 0}, "nauvis")-- Reveal a 1000x1000 area around the origin for your force/sc game.forces.player.chart("nauvis", {{-500, -500}, {500, 500}})-- Kill all enemy units currently on the map/sc game.forces.enemy.kill_all_units()-- Remove all pollution from a surface/sc game.surfaces["nauvis"].clear_pollution()

Одна ловушка подстерегает всех, кто пользуется консолью сервера: game.player означает игрока, который ввёл команду. В игре это вы. В консоли сервера или через RCON такого игрока нет, и game.player равен nil. Используйте вместо этого game.get_player("name").

/editor переключает админа прямо на месте в редактор карты - это так же мощно, как звучит, и тоже отключает достижения. /cheat открывает рецепты и включает чит-режим; его опции менялись между версиями, так что перед использованием проверьте /help cheat.

RCON: команды из скриптов и ботов#

RCON позволяет программе отправлять команды серверу по TCP. Он включается двумя аргументами запуска:

bash
$ ./bin/x64/factorio --start-server-load-latest \    --server-settings ./data/server-settings.json \    --rcon-port 27015 --rcon-password "a-long-random-string"

--rcon-bind <address:port> вместо этого привязывает его к конкретному адресу. Factorio использует стандартный протокол Source RCON, так что подойдёт любой RCON-клиент - rcon-cli, mcrcon, большинство библиотек для Discord-ботов, - и каждая команда из этой статьи будет принята.

ПортПротоколНазначение
34197UDPИгровой трафик
27015 (пример)TCPRCON, любой выбранный вами порт

Сообщения чата, отправленные через RCON, появляются в игре от имени <server>. Lua-команды, отправленные через RCON, возвращают свой вывод RCON-клиенту, если используют rcon.print, а не game.print:

lua
/sc rcon.print(#game.connected_players)

RCON - это полноценный админский канал, защищённый только паролем: никакого ограничения частоты, никакого второго фактора. Используйте длинный случайный пароль, добавляйте RCON-порт, только если им действительно что-то пользуется, и никогда не используйте этот пароль где-то ещё. На RE:NODE дополнительные порты добавляются на вкладке Network, так что RCON-порт существует, только если вы его добавили. Статья безопасный RCON разбирает, что может пойти не так.

Логи: как узнать, что произошло#

--console-log <file> пишет чат и события сервера в файл с тегами вроде [JOIN], [LEAVE], [CHAT], [KICK] и [BAN]. Это та запись, которая нужна, когда игрок говорит, что его кикнули ни за что, и по ней легко искать.

Для расследования гриферства есть ещё логирование действий. /toggle-action-logging включает журнал отдельных действий игроков - строительство, добыча, открытие контейнеров, - который пишется в лог сервера. Он очень подробный, так что включайте его, когда есть проблема, и выключайте, когда получили ответ. Сколько хранить логи и зачем, описано в статье логи, которые стоит хранить.

Настройки, которые экономят работу админа#

Несколько настроек server-settings.json, которые убирают целые категории админских проблем:

НастройкаРекомендуетсяПочему
require_user_verificationtrueИмена - настоящие аккаунты factorio.com
allow_commandsadmins-onlyНикакого Lua для обычных игроков
only_admins_can_pause_the_gametrueНикто не ставит публичную игру на паузу
afk_autokick_interval30Освобождает слоты, в минутах; 0 - выключено
max_playersЗадайтеАдмины всё равно могут зайти на заполненный сервер
game_passwordЗадайте на закрытых серверахЛегко сменить на лету через /config

На RE:NODE файл настроек на месте с первой загрузки, а пароль игры для сервера сгенерирован, консоль не фильтруется, так что в ней видна каждая команда и каждый вход, а вкладка Schedules может отправлять консольные команды по cron-выражению - например, /server-save перед ночным бэкапом. Больше шаблонов - в статье запланированные задачи, которые стоит завести.

Когда грифер всё-таки прорвался#

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

  1. Остановите ущерб. /ban <player> <reason> из консоли или окна /admin. Один только кик позволит ему сразу вернуться.
  2. Остановите ботов. Если он использовал планировщик разбора, строительные боты продолжат выполнять приказы и после его ухода. Админ может отменить отмеченный разбор своим планировщиком, или вся команда может держаться в стороне, пока вы решаете, откатываться ли.
  3. Выберите между ремонтом и откатом. Небольшой ущерб быстрее починить на месте, особенно если есть чертежи пострадавшей области. Что-то крупное быстрее отменить загрузкой автосохранения, сделанного до инцидента, - ценой всего честного прогресса, сделанного в промежутке.
  4. Откатывайтесь аккуратно. Остановите сервер, скопируйте выбранный файл _autosave поверх основного сохранения или переименуйте его, чтобы его подхватил --start-server-load-latest, и запустите снова. Сначала предупредите игроков, потому что их последние минуты пропадут.
  5. Закройте дыру. Посмотрите, что игрок смог сделать, и запретите это для группы, в которой он был.

Шаг 4 возможен благодаря слотам автосохранений, и они перезаписываются по кругу - при настройках по умолчанию пять слотов с интервалом десять минут покрывают меньше часа. Если ущерб нанесён раньше, нужен настоящий backup вне сервера. Статья бэкапы, которые действительно восстанавливаются объясняет, почему стоит проверить восстановление до того, как оно понадобится, а на RE:NODE слоты для бэкапов входят в каждый тариф Factorio и восстанавливаются кнопкой.

Полезно также знать, кто и когда был в сети. С заданным --console-log строки входа и выхода дают хронологию с точностью до секунды, а логирование действий - если оно было включено - точно показывает, кто что поставил или убрал. Включите его на какое-то время после инцидента, когда вероятнее всего вторая попытка.

Устранение неполадок#

Команды в консоли ничего не делают. Нет слеша, или allow_commands равен false. Без слеша текст уходит в чат.

Админ потерял права. Его нет в файле списка админов, или кто-то применил /demote. Повысьте его из консоли.

`game.player` выдаёт ошибку в консоли. В консоли сервера нет игрока. Используйте game.get_player("name").

Белый список игнорируется. Сервер запущен без --use-server-whitelist.

Изменение через `/config set` пропало после перезапуска. /config меняет только работающий сервер. Обновите и server-settings.json.

Достижения пропали. Кто-то выполнил /c, /editor или /cheat в этом сохранении. Это не отменить; в более старом сохранении, сделанном до этого, они ещё есть.

FAQ#

Как сделать себя админом на собственном сервере Factorio?

Введите /promote yourname в консоли сервера. У консоли всегда полные права, и сервер запишет вас в файл списка админов, так что это сохранится.

Отключает ли /sc достижения так же, как /c?

Да. Любая Lua-команда - /c, /sc или /mc - отключает достижения в сохранении. «Тихая» значит лишь, что другим игрокам об этом не сообщают.

Можно ли дать части игроков право строить, но не разбирать?

Да, с помощью групп прав. Запретите действие разбора в группе этих игроков, а строительство оставьте разрешённым. /permissions показывает все действия.

Баны действуют на один сервер или глобально?

На один сервер. Они хранятся в файле списка банов этого сервера. Чтобы использовать общий список банов на нескольких своих серверах, скопируйте файл.

Может ли Discord-бот выполнять команды на сервере?

Да, через RCON, который принимает каждую команду из этой статьи. Используйте длинный пароль и внимательно настройте привязку, потому что у RCON полные права админа.


Комментарии

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

0/2000