Перейти к содержимому

Свой сервер

Ресурсы

Ресурс — это плагин: папка с Lua-кодом, который работает на сервере, и, если нужно, со скриптами, которые сервер отправит игрокам. Команды чата, правила, режимы игры, инструменты для админов — всё это ресурсы. Как их писать, рассказано в разделе Разработка плагинов.

  1. Скопируйте папку ресурса целиком в resources/ рядом с server.toml. Если папки resources/ ещё нет, создайте её. В Docker это data/resources/.
  2. Перезапустите сервер.

Каждый загруженный ресурс сервер отмечает в логе:

demo-numbers v1.0 loaded — lua · server 1 file · 1 client file
1 resource · 1 module loaded

Чат работает и без ресурсов. А вот команды в чате, например /pm, появляются только с ресурсом, который их добавляет.

В архиве сервера рядом с программой лежит папка examples/ с готовыми ресурсами. Чтобы попробовать пример, скопируйте его папку в resources/. Копия — ваша: её можно менять, обновление сервера её не тронет.

Пример Что делает
chat-commands Добавляет в чат /help, /me и /pm. С него удобно начинать свои команды.
vehicle-cleanup Удаляет брошенные машины по правилам из своего resource.toml.
gatekeeper-example Показывает, как отказать во входе, спавне или правке машины и объяснить игроку причину.
seat-demo Сажает игроков в машины по команде сервера, высаживает, меняет местами.
nodegrab-allow Разрешает экспериментальный захват узлов, который без плагина запрещён.
freeroam-example Приветствует игроков, отвечает на событие клиента, запускает таймеры.
demo-numbers Самый маленький ресурс с серверной и клиентской частью. Удобен для проверки связи.
devapi-example Обзор API плагинов, по одной возможности за раз.
session-report Отчёт: кто играл, сколько и на чём. Написан на JavaScript, поэтому нужен модуль js-host, которого в архиве нет. Без него сервер этот ресурс пропускает.

Ресурс может нести файл resource.toml. Хосту в нём интересна таблица [config] — настройки самого ресурса. Какие ключи там бывают, пишет автор ресурса. Например, у vehicle-cleanup:

[config]
deleteIdleAfterSeconds = 600
maxWorldVehicles = 20

После правки перезапустите сервер или перезагрузите ресурс.

Команда reload <имя> в консоли сервера заново запускает серверную часть ресурса без перезапуска всего сервера. Клиентские скрипты сервер упаковывает один раз, при запуске: их изменения дойдут до игроков только после перезапуска.

Скрипты, которые ресурс отправляет игрокам, сервер сначала запутывает ([resources] obfuscate, включено по умолчанию), чтобы их было труднее скопировать. Делает это Prometheus — программа на Lua из папки tools/. С системой мониторинга того же имени она не связана. Для работы ей нужна Lua 5.1:

  • на Windows она есть в архиве;
  • на Linux поставьте пакет lua5.1 и задайте NODE_LUA=/usr/bin/lua5.1;
  • в Docker-образе она уже есть.

Если всё в порядке, в логе будет client obfuscation ready · runner … · Prometheus (cache .obfcache). Если нет, сервер всё равно работает и отправляет скрипты как есть, а в логе объясняет, чего не хватает. Проверить настройку можно командой Node-Server --obf-selftest: при успехе она печатает [obf-selftest] available=1.

Насколько сильно запутывать, решает ресурс ключом [client] obfuscation: none, light (по умолчанию), medium или strong. Результаты кэшируются в .obfcache/, эту папку можно удалить в любой момент.

Ещё при упаковке сервер проверяет синтаксис клиентских скриптов. Скрипт с ошибкой он всё равно отправит, но предупредит в логе: … client file 'main.lua' has a syntax error: ….

Нативный модуль — это скомпилированная библиотека (.dll или .so) в папке modules/ рядом с программой. Модули загружаются раньше ресурсов. Один модуль уже есть в архиве — модуль базы данных для плагинов (Модуль db). Пока база не настроена, он пишет одно предупреждение при запуске и больше ничего не делает.

При загрузке сервер проверяет, под какую версию интерфейса собран модуль. Несовместимый модуль он не загрузит и попросит пересобрать. В Docker папка modules/ находится внутри образа: чтобы добавить модуль, соберите свой образ на основе этого.