RE:NODE

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

Плагины OpenMod для Unturned и права доступа

OpenMod на сервере Unturned: чем он отличается от RocketMod, установка рядом с Rocket, плагины из NuGet, роли и права в YAML и ошибки загрузки.

0 прочтений

OpenMod - более новый из двух фреймворков плагинов для Unturned. Он ставится как модуль рядом с игрой, хранит свои файлы в папке OpenMod внутри экземпляра сервера, устанавливает плагины как пакеты NuGet командой openmod install <PackageId> и управляет тем, кто что может выполнять, через два YAML-файла: openmod.roles.yaml и openmod.users.yaml. RocketMod он не заменяет. Он рассчитан на работу рядом с ним, умеет загружать плагины Rocket через слой совместимости и может использовать данные прав Rocket. Практическое правило выбора: большинство существующих плагинов Unturned публикуются для RocketMod, так что начинайте с него, а OpenMod добавляйте, когда нужный плагин выходит только под него или когда пишете свой.

В этом руководстве разобрано, чем различаются два фреймворка, установка OpenMod на сервер, где уже есть Rocket, установка плагинов, подробно система прав, как работает мост с Rocket и с какими сбоями вы столкнётесь. Сторона Rocket описана в статье Commands.dat и плагины RocketMod в Unturned.

Сравнение OpenMod и RocketMod#

RocketMod (LDM)OpenMod
Откуда берётсяПоставляется с сервером в Extras, поддерживается вместе с игройОтдельный проект, ставится из его релизов
Формат плагиновDLL в Rocket/Plugins/Пакеты NuGet или DLL в OpenMod/plugins/
КонфигурацияXMLYAML
ПраваГруппы в Permissions.config.xmlРоли и пользователи в YAML-файлах
Каталог плагиновБольшой, плагины за много летМеньше
УстройствоПростое, синхронноеСовременный .NET: внедрение зависимостей, async, общие сервисы

Для этого сравнения важна история RocketMod: исходный проект был заархивирован, а версия, которую вы получаете сегодня, - это Legally Distinct Missile, которую поддерживает Smartly Dressed Games и которая идёт в комплекте с выделенным сервером. Она стабильна, и почти каждый плагин рассчитан на неё.

OpenMod написал один из исходных мейнтейнеров Rocket по современным практикам .NET: плагины - это пакеты с объявленными зависимостями, сервисы вроде экономики или прав используются совместно через интерфейсы, а не каждый плагин изобретает свой, а конфигурация - на YAML. Для автора плагинов это более приятная платформа. Для владельца сервера важно другое: чтобы нужный плагин под неё существовал и его зависимости разрешались.

Запускать оба - нормально. Типичный сервер использует Rocket ради большого каталога проверенных плагинов и OpenMod для нескольких, которые публикуются только там.

Установка OpenMod#

В RE:NODE серверы Unturned поставляются с RocketMod, уже лежащим в папке Modules, так что OpenMod вы всегда ставите рядом с Rocket, а не вместо него. Путей два.

Плагин-установщик

Проще всего - небольшой плагин Rocket, который сам устанавливает OpenMod.

  1. Остановите сервер и сделайте резервную копию папки экземпляра.
  2. Скачайте плагин-установщик OpenMod для RocketMod из релизов проекта OpenMod и положите DLL в Servers/<ServerID>/Rocket/Plugins/.
  3. Запустите сервер и дождитесь, пока Rocket загрузит установщик.
  4. Выполните в консоли openmod install и следуйте выводу.
  5. Перезапустите сервер, когда он об этом попросит.

Ручная установка

  1. Остановите сервер и сделайте резервную копию.
  2. Скачайте модуль для Unturned из релизов проекта OpenMod.
  3. Распакуйте его так, чтобы папка модуля лежала прямо в каталоге Modules сервера, рядом с Rocket.Unturned.
  4. Запустите сервер.
code
U3DS/  Modules/    Rocket.Unturned/    OpenMod.Unturned/  Servers/    MyServer/      Rocket/      OpenMod/

Первый запуск после установки медленный. OpenMod скачивает собственные компоненты как пакеты NuGet, для чего серверу нужен исходящий доступ в интернет, и при первом запуске это занимает время. Смотрите на консоль, а не на часы, и, когда всё уляжется, выполните modules, чтобы убедиться, что загружены оба модуля.

Что лежит в папке OpenMod#

После первого запуска OpenMod создаёт в экземпляре свою рабочую папку:

code
Servers/MyServer/OpenMod/  openmod.yaml              core settings  openmod.unturned.yaml     Unturned-specific settings, including the Rocket bridge  openmod.roles.yaml        roles and their permissions  openmod.users.yaml        players, their roles and personal permissions  logging.yaml              log levels and outputs  packages/                 NuGet packages, including installed plugins  plugins/                  plugin DLLs added by hand, and each plugin's config  logs/                     OpenMod's own logs

Точный набор файлов понемногу растёт с каждым релизом. Две привычки помогают держать всё под контролем: правьте только при остановленном сервере или делайте reload после правки, и включайте эту папку в резервные копии - в ней лежат все права, которые вы выдали.

Установка плагинов#

Плагины OpenMod обычно публикуются как пакеты NuGet, и консоль устанавливает их по ID пакета:

code
openmod install <PackageId>openmod install <PackageId> <version>openmod remove <PackageId>help openmod

ID пакета указан на странице плагина. Установка скачивает пакет и его зависимости в packages/, и большинству плагинов для загрузки нужен перезапуск. help openmod выводит подкоманды, которые поддерживает ваша версия, и это стоит проверить, потому что между релизами они менялись.

Плагин, который распространяется как обычная DLL, кладётся в OpenMod/plugins/ вместе с нужными ему библиотеками.

При первой загрузке плагин обычно создаёт собственную папку с файлами - config.yaml для настроек и translations.yaml для сообщений. Обычный порядок действий:

  1. Установите плагин и перезапустите сервер.
  2. Прочитайте консоль. Убедитесь, что плагин загрузился без ошибок.
  3. Остановите сервер, отредактируйте сгенерированный конфиг плагина, запустите снова.
  4. Выдайте его права роли (следующий раздел).
  5. Протестируйте как обычный игрок, а не как администратор.

На четвёртом шаге заканчивается большинство жалоб «плагин не работает» - ровно как и с Rocket.

Роли, пользователи и права#

Права в OpenMod - это строки вида <ComponentId>:<permission>. Компонент - это плагин или фреймворк, которому принадлежит право, поэтому OpenMod.Core:commands.help - право базового фреймворка выполнять help. Страница плагина должна перечислять его права; если не перечисляет, его команды обычно следуют шаблону <PluginId>:commands.<command>.

Роли хранятся в openmod.roles.yaml:

Servers/MyServer/OpenMod/openmod.roles.yaml
roles:- id: default  displayName: Default  priority: 0  isAutoAssigned: true  parents: []  permissions:  - OpenMod.Core:commands.help  data: {}- id: vip  displayName: VIP  priority: 10  isAutoAssigned: false  parents:  - default  permissions:  - Example.Kits:commands.kit  - Example.Kits:kits.vip  data: {}
ПолеЧто делает
idИмя роли, которое используется везде
isAutoAssignedЭту роль получают все, без перечисления
parentsРоли, от которых наследуется эта
priorityРешает, какая роль побеждает, когда две расходятся
permissionsСтроки прав, которые даёт эта роль

Источник истины для имён полей - структура, которую сгенерировал ваш сервер; если она отличается от этого примера, следуйте ей.

Основную работу делают три возможности:

  • Наследование. У vip в родителях указан default, поэтому у VIP есть всё, что есть у обычного игрока, плюс собственные права.
  • Подстановочные знаки. Example.Kits:kits.* даёт все права на киты, которые определяет плагин.
  • Отрицание. Право с префиксом ! явно запрещается, что позволяет роли унаследовать подстановочный знак, а потом убрать из него один пункт.

Отдельные игроки хранятся в openmod.users.yaml по их Steam ID, с ролями, которые у них есть, и личными правами. Его можно править вручную при остановленном сервере, но на работающем сервере консольные команды безопаснее, потому что они записывают файл и делают reload за один шаг. В OpenMod есть команды permission и role для добавления и удаления прав и ролей; точный синтаксис для вашей версии покажут help permission и help role.

Принцип тот же, что и для аккаунтов панели: давайте каждой роли только то, что ей нужно. Модераторам нужны кик и бан, а не спавн предметов. Общий довод приведён в статье сабюзеры и минимальные привилегии.

OpenMod рядом с Rocket#

Два фреймворка могут взаимодействовать тремя способами, которые настраиваются в openmod.unturned.yaml.

Загрузка плагинов Rocket. OpenMod может запускать плагины Rocket через свой слой совместимости, так что сервер в принципе может гонять всё через OpenMod. На практике большинство серверов оставляют плагины Rocket под Rocket, потому что тестируются они именно там.

Общие права. Мост с Rocket может заставить OpenMod читать Permissions.config.xml от Rocket или держать две системы раздельно. Если у вас уже есть хорошо выстроенный файл прав Rocket, позволить OpenMod им пользоваться - значит не поддерживать два набора групп. Если вы начинаете с нуля, YAML-роли OpenMod читать легче.

Общая экономика. Плагинам, которые списывают или начисляют деньги игрокам, нужен один баланс на игрока, а не по одному на фреймворк. Мост может направить вызовы экономики в одну систему, чтобы плагин магазина под одним фреймворком и плагин работ под другим видели одни и те же деньги.

Имена настроек и варианты менялись между релизами, поэтому прочитайте комментарии в сгенерированном openmod.unturned.yaml, прежде чем что-то менять. Решите одну вещь заранее и запишите её: какой фреймворк на вашем сервере владеет правами. Две системы, каждая из которых считает себя главной, - так игрок и получает команду в одной и не получает в другой.

команда Rocketкоманда OpenModвыбран в конфигеКоманда игрокаRocketModплагины RocketOpenModпакеты и плагиныМост Rocketправа, экономикаОдин источник прав
Один сервер, два фреймворка

Пример: добавляем один плагин OpenMod на сервер с Rocket#

Допустим, сервер год работает на Rocket, с аккуратным Permissions.config.xml, где есть группы default, vip и moderator, и владельцы хотят один плагин, который публикуется только для OpenMod. Вот порядок, который избавит от вечера путаницы.

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

Во-вторых, решите, кто владеет правами. При устоявшейся конфигурации Rocket разумно направить мост в openmod.unturned.yaml на данные прав Rocket, чтобы существующие группы продолжали работать и никто не вёл два списка. Прочитайте комментарии в этом файле, внесите изменение и перезапустите сервер.

В-третьих, установите плагин через openmod install и снова перезапустите сервер. Найдите в консоли строку загрузки плагина и возможные ошибки зависимостей. Остановите сервер, откройте сгенерированный конфиг плагина, настройте его и запустите сервер.

В-четвёртых, выдайте право плагина. Если правами владеет Rocket, это значит добавить право в нужную группу в Permissions.config.xml в том виде, которого ожидает мост, - как именно, сказано в комментариях его конфига, - и сделать reload командой /p reload. Если правами владеет OpenMod, это значит добавить его в роль в openmod.roles.yaml. Именно на этом шаге проще всего положить право не в тот файл, и поэтому решение на втором шаге так важно.

Наконец, протестируйте обычным игровым аккаунтом в каждой группе. Администраторы обходят достаточно проверок, чтобы тест от их имени доказывал очень мало. Если VIP может использовать команду, а обычный игрок нет, всё настроено верно.

Запишите, что вы сделали, - какой фреймворк владеет правами, какие плагины где живут, - там, где это найдут другие администраторы. Через полгода кто-нибудь добавит плагин и будет гадать, почему его команда ничего не делает, и эта заметка сэкономит ему час.

Безопасность и выбор плагинов#

Плагины OpenMod - это код, который работает с полным доступом к вашему серверу: данным игроков, сохранению и всему, до чего может дотянуться процесс сервера. Упаковка в NuGet делает их установку простой, а значит, легко поставить то, на что вы не посмотрели.

  • Выбирайте плагины с открытым исходным кодом. Экосистема OpenMod в основном открытая; прочитайте, что делает плагин, прежде чем доверить ему сервер.
  • Закрепляйте версии. openmod install <PackageId> <version> ставит конкретную версию, так что последующее обновление не изменит поведение без вашего решения.
  • Удаляйте то, чем перестали пользоваться. Неиспользуемый плагин - всё равно работающий код.
  • Делайте резервную копию перед установкой. Плагины, которые хранят данные, могут писать в сохранение или в свои файлы, и отмены нет.

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

Решение проблем#

OpenMod никак не закончит первый запуск. Он скачивает пакеты. Если он падает окончательно, консоль покажет ошибку NuGet - обычно это сбой сети или пакет, которого нет для этой версии.

`modules` не показывает OpenMod. Папка модуля вложена слишком глубоко или распакована в папку экземпляра, а не в каталог Modules сервера.

Плагин установлен, но его команды ничего не делают. Права. Добавьте право плагина в роль, сделайте reload или перезапуск и протестируйте не от имени администратора.

Плагин не загружается из-за отсутствующей зависимости. Установите пакет зависимости, названный в ошибке, или поставьте версию плагина, собранную под вашу версию OpenMod.

После обновления Unturned всё сломалось. Модулю OpenMod нужен релиз, собранный под новую версию игры. Проверьте релизы проекта; если сервер нужен прямо сейчас, восстановите резервную копию.

Права работают в Rocket, но не в OpenMod, или наоборот. Какая система используется, решает мост в openmod.unturned.yaml. Выберите одну и заставьте другую следовать за ней.

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

FAQ#

Что выбрать: OpenMod или RocketMod?

Начните с RocketMod, который поставляется с сервером и у которого больше каталог плагинов. Добавьте OpenMod, когда нужный плагин публикуется только для него или когда пишете собственные плагины и хотите его современное устройство.

Могут ли OpenMod и RocketMod работать одновременно?

Да. OpenMod рассчитан на работу рядом с Rocket, и в его модуль для Unturned входит мост для прав и экономики. Большинство серверов, использующих OpenMod, запускают и Rocket.

Где хранятся права OpenMod?

В OpenMod/openmod.roles.yaml для ролей и в OpenMod/openmod.users.yaml для отдельных игроков, внутри папки экземпляра сервера. Делайте резервную копию этой папки вместе с сохранением.

Как установить плагин OpenMod?

Выполните openmod install <PackageId> в консоли сервера и перезапустите его. Плагины, которые распространяются как DLL, кладутся в OpenMod/plugins/. Затем выдайте права плагина роли.

Нужен ли OpenMod доступ сервера в интернет?

Да, для установки. Пакеты и собственные компоненты OpenMod берутся из NuGet. После установки сервер работает на скачанных пакетах.

Нужно ли игрокам что-то устанавливать для плагинов OpenMod?

Нет. Плагины работают только на сервере. Игрокам ничего не нужно, кроме контента мастерской, который использует сервер, а он обрабатывается отдельно - см. статью карты и моды из мастерской в Unturned.


Комментарии

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

0/2000