Свой сервер
Ресурсы
Ресурс — это плагин: папка с Lua-кодом, который работает на сервере, и, если нужно, со скриптами, которые сервер отправит игрокам. Команды чата, правила, режимы игры, инструменты для админов — всё это ресурсы. Как их писать, рассказано в разделе Разработка плагинов.
Поставить ресурс
Заголовок раздела «Поставить ресурс»- Скопируйте папку ресурса целиком в
resources/рядом сserver.toml. Если папкиresources/ещё нет, создайте её. В Docker этоdata/resources/. - Перезапустите сервер.
Каждый загруженный ресурс сервер отмечает в логе:
demo-numbers v1.0 loaded — lua · server 1 file · 1 client file1 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 = 600maxWorldVehicles = 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/ находится внутри образа: чтобы
добавить модуль, соберите свой образ на основе этого.