Сервером Factorio управляют slash-командами, которые админ вводит в игре или в консоли сервера - у неё всегда полные права. Админы берутся из server-adminlist.json или назначаются через /promote; баны и записи белого списка пишутся в отдельные JSON-файлы; /config меняет настройки сервера на лету; а группы прав, которые открываются через /permissions, решают, что разрешено каждой категории игроков, - и это настоящая защита от гриферов на публичной карте. Lua-команды через /c и /sc умеют почти всё, но ценой навсегда отключённых достижений в этом сохранении. RCON открывает всё это по TCP для ботов и скриптов. Эта статья - полный справочник, с настройкой прав и Lua-фрагментами, которые стоит иметь под рукой.
Основы - установка headless-сервера, server-settings.json, порты и автосохранения - описаны в руководстве по headless-серверу Factorio. Здесь речь о том, как управлять сервером, когда на нём уже есть люди.
Кто является админом и как им становятся#
Получить права админа можно тремя способами:
- Консоль сервера. Всё, что вводится в стандартный ввод сервера - в поле консоли в панели, - выполняется с полными правами. Это единственное место, доступ к которому невозможно потерять.
- Список админов.
server-adminlist.json, передаваемый через--server-adminlist, - это JSON-массив имён пользователей factorio.com. Перечисленные игроки становятся админами сразу при входе. - `/promote`. Существующий админ или консоль повышает игрока. Сервер записывает его в файл списка админов, так что права сохраняются после перезапуска.
["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-консоли, что удобно, чтобы каждый раз одинаково настраивать свежую карту:
/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:
-- 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. Он включается двумя аргументами запуска:
$ ./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-ботов, - и каждая команда из этой статьи будет принята.
| Порт | Протокол | Назначение |
|---|---|---|
34197 | UDP | Игровой трафик |
27015 (пример) | TCP | RCON, любой выбранный вами порт |
Сообщения чата, отправленные через RCON, появляются в игре от имени <server>. Lua-команды, отправленные через RCON, возвращают свой вывод RCON-клиенту, если используют rcon.print, а не game.print:
/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_verification | true | Имена - настоящие аккаунты factorio.com |
allow_commands | admins-only | Никакого Lua для обычных игроков |
only_admins_can_pause_the_game | true | Никто не ставит публичную игру на паузу |
afk_autokick_interval | 30 | Освобождает слоты, в минутах; 0 - выключено |
max_players | Задайте | Админы всё равно могут зайти на заполненный сервер |
game_password | Задайте на закрытых серверах | Легко сменить на лету через /config |
На RE:NODE файл настроек на месте с первой загрузки, а пароль игры для сервера сгенерирован, консоль не фильтруется, так что в ней видна каждая команда и каждый вход, а вкладка Schedules может отправлять консольные команды по cron-выражению - например, /server-save перед ночным бэкапом. Больше шаблонов - в статье запланированные задачи, которые стоит завести.
Когда грифер всё-таки прорвался#
Группы прав уменьшают ущерб, но не предотвращают его полностью. Когда кто-то всё же прорывается - железнодорожная сеть пущена в стену, энергосеть перерезана, главная шина разобрана, - действуйте в таком порядке, а не чините всё вручную, пока виновник ещё в сети.
- Остановите ущерб.
/ban <player> <reason>из консоли или окна/admin. Один только кик позволит ему сразу вернуться. - Остановите ботов. Если он использовал планировщик разбора, строительные боты продолжат выполнять приказы и после его ухода. Админ может отменить отмеченный разбор своим планировщиком, или вся команда может держаться в стороне, пока вы решаете, откатываться ли.
- Выберите между ремонтом и откатом. Небольшой ущерб быстрее починить на месте, особенно если есть чертежи пострадавшей области. Что-то крупное быстрее отменить загрузкой автосохранения, сделанного до инцидента, - ценой всего честного прогресса, сделанного в промежутке.
- Откатывайтесь аккуратно. Остановите сервер, скопируйте выбранный файл
_autosaveповерх основного сохранения или переименуйте его, чтобы его подхватил--start-server-load-latest, и запустите снова. Сначала предупредите игроков, потому что их последние минуты пропадут. - Закройте дыру. Посмотрите, что игрок смог сделать, и запретите это для группы, в которой он был.
Шаг 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. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.