Свой сервер
Консоль, кики и баны
Консоль
Заголовок раздела «Консоль»Сервер, запущенный в терминале, принимает команды прямо в своём окне. На Windows это окно
Node-Server.exe, на Linux — терминал, из которого его запустили.
| Команда | Что делает |
|---|---|
help |
Список команд. |
status |
Версия, время работы, игроки, машины, ресурсы, память. |
players |
Все игроки: id, имя, пинг, машины и адрес (последняя часть скрыта). |
kick <id|имя> [причина] |
Отключить игрока. Он увидит причину. Имя с пробелами — в кавычках. |
say <текст> |
Системное сообщение в чат всем игрокам. |
reload <ресурс> |
Перезапустить ресурс. |
stop |
Остановить сервер. То же делают exit и quit. |
Ресурсы могут добавлять свои команды; help показывает их в разделе «from resources:» вместе с
названием ресурса. На слово, которое никто не взял, консоль отвечает unknown command, try help.
Без причины кикнутый игрок увидит Kicked by the server. Игроки до консоли не достают: /kick 1,
набранный в чате, — обычная строка чата. Командой она станет, только если её возьмёт себе
какой-нибудь ресурс.
В службе systemd и в Docker без терминала консоль выключена. Как её включить, написано на страницах Linux и Docker.
Чат в консоли
Заголовок раздела «Чат в консоли»Консоль показывает чат по мере того, как игроки пишут, с id игрока:
17:51:12.345 Chat › (0) Alice: привет17:51:16.000 Chat › System -> all: Рестарт через 5 минут [console]Если строка не ушла, рядом написано почему, а строка, которую ресурс взял как команду, помечена
[handled by a resource]. Аргументы команд с паролями (/login, /register и других из
[chat] masked_commands) заменяются на ***. [chat] log = false убирает чат из консоли
и лога.
Кики и баны
Заголовок раздела «Кики и баны»Кикнуть можно из консоли, командой выше. Команды бана в консоли нет: банят ресурсы — например,
команда /ban для модераторов (пример).
Баны хранятся в bans.json в рабочей папке. Это один JSON-объект: ключ — заблокированный адрес или
аккаунт NodeMP в виде nodemp:<id>, значение — причина, время и имя игрока:
{ "203.0.113.7": { "reason": "Спам", "at": 1789558100, "name": "Bob" }, "nodemp:108": { "reason": "Спам", "at": 1789558100, "name": "Bob" }}У временного бана есть ещё поле "until" — время окончания в секундах Unix. Когда оно наступит,
сервер сам уберёт бан.
Если забанить игрока, который на сервере, блокируются его адрес и, если он вошёл в аккаунт, сам
аккаунт. Так бан действует и из другой сети. Забаненный игрок при входе видит причину или, если её
нет, You are banned from this server.
Чтобы снять бан, остановите сервер и выполните:
Node-Server --bans listNode-Server --bans remove 203.0.113.7Node-Server --bans remove nodemp:108list показывает все баны, remove снимает один: по адресу, по nodemp:<id> или по номеру
аккаунта. Можно и поправить файл руками, но тоже при остановленном сервере. Работающий сервер держит
список в памяти и перезапишет файл при следующем бане.
Перезапуск с предупреждением
Заголовок раздела «Перезапуск с предупреждением»stop отключает всех сразу. Чтобы предупредить игроков, перезапуск планирует ресурс: вызов
node.server.shutdown("Ночной перезапуск", 5 * 60 * 1000) остановит сервер через пять минут.
Игроки увидят эту причину, ресурсы сохранят данные, сервер завершится с кодом 0. Служба systemd
с Restart=always или контейнер с restart: unless-stopped поднимут его снова — получается
перезапуск. Пример с обратным отсчётом в чате — на странице
Таймеры и корутины.
Всё, что сервер пишет в консоль, попадает и в logs/server.log, а в файле есть и больше. Консоль
показывает то, на что нужно реагировать: входы и выходы, спавны, отказы, чат, предупреждения и
ошибки. Статистика и служебные строки — например, netstats, посадки в машины, неудачные попытки
подключения — идут только в файл, если [logs] details = true не выводит их и в консоль. Новый файл
начинается при каждом запуске и когда старый перерастает 50 МБ. Пять старых хранятся как
server.1.log, server.2.log и так далее ([logs] max_size_mb, keep).
На что стоит смотреть:
| Строка | Что значит |
|---|---|
server is ready |
Сервер полностью запустился. |
started, but … failed — what they do may not work |
Какая-то часть не запустилась. Почему — в строках выше. |
listed in the server browser |
Сервер в списке (Попасть в список). |
<имя> kicked — <причина> |
Сервер отказал игроку или завершил его сессию — теми же словами, что увидел игрок. |
netstats id=… rtt=… loss=… |
В файле, раз в 15 секунд по каждому игроку: пинг, трафик, потери. Пригодится, если игрок жалуется на лаги. |
Игрока не пускает
Заголовок раздела «Игрока не пускает»Игрок обычно присылает текст из лаунчера. Все сообщения собраны на странице Сообщения об ошибках. Что проверить на своей стороне:
- В логе каждый отказ и кик записан с тегом
Kick, теми же словами, что увидел игрок. Connection refusedбез подробностей — игрока не пустил ресурс, не назвав причину. Ищите строки с именем этого ресурса.- Бан — запись в
bans.json, см. выше. - Что-то про файлы игры — это уровень
[integrity] verify(Строгая проверка). - Не пускает сразу нескольких игроков из одного места — см. Если сервер не работает.