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/ |
| Конфигурация | XML | YAML |
| Права | Группы в 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.
- Остановите сервер и сделайте резервную копию папки экземпляра.
- Скачайте плагин-установщик OpenMod для RocketMod из релизов проекта OpenMod и положите DLL в
Servers/<ServerID>/Rocket/Plugins/. - Запустите сервер и дождитесь, пока Rocket загрузит установщик.
- Выполните в консоли
openmod installи следуйте выводу. - Перезапустите сервер, когда он об этом попросит.
Ручная установка
- Остановите сервер и сделайте резервную копию.
- Скачайте модуль для Unturned из релизов проекта OpenMod.
- Распакуйте его так, чтобы папка модуля лежала прямо в каталоге
Modulesсервера, рядом сRocket.Unturned. - Запустите сервер.
U3DS/ Modules/ Rocket.Unturned/ OpenMod.Unturned/ Servers/ MyServer/ Rocket/ OpenMod/Первый запуск после установки медленный. OpenMod скачивает собственные компоненты как пакеты NuGet, для чего серверу нужен исходящий доступ в интернет, и при первом запуске это занимает время. Смотрите на консоль, а не на часы, и, когда всё уляжется, выполните modules, чтобы убедиться, что загружены оба модуля.
Что лежит в папке OpenMod#
После первого запуска OpenMod создаёт в экземпляре свою рабочую папку:
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 пакета:
openmod install <PackageId>openmod install <PackageId> <version>openmod remove <PackageId>help openmodID пакета указан на странице плагина. Установка скачивает пакет и его зависимости в packages/, и большинству плагинов для загрузки нужен перезапуск. help openmod выводит подкоманды, которые поддерживает ваша версия, и это стоит проверить, потому что между релизами они менялись.
Плагин, который распространяется как обычная DLL, кладётся в OpenMod/plugins/ вместе с нужными ему библиотеками.
При первой загрузке плагин обычно создаёт собственную папку с файлами - config.yaml для настроек и translations.yaml для сообщений. Обычный порядок действий:
- Установите плагин и перезапустите сервер.
- Прочитайте консоль. Убедитесь, что плагин загрузился без ошибок.
- Остановите сервер, отредактируйте сгенерированный конфиг плагина, запустите снова.
- Выдайте его права роли (следующий раздел).
- Протестируйте как обычный игрок, а не как администратор.
На четвёртом шаге заканчивается большинство жалоб «плагин не работает» - ровно как и с Rocket.
Роли, пользователи и права#
Права в OpenMod - это строки вида <ComponentId>:<permission>. Компонент - это плагин или фреймворк, которому принадлежит право, поэтому OpenMod.Core:commands.help - право базового фреймворка выполнять help. Страница плагина должна перечислять его права; если не перечисляет, его команды обычно следуют шаблону <PluginId>:commands.<command>.
Роли хранятся в 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, прежде чем что-то менять. Решите одну вещь заранее и запишите её: какой фреймворк на вашем сервере владеет правами. Две системы, каждая из которых считает себя главной, - так игрок и получает команду в одной и не получает в другой.
Пример: добавляем один плагин 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. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.