Oxide, который распространяется через uMod, - давний фреймворк плагинов для серверов Rust. Устанавливается он так: вы распаковываете релиз Oxide.Rust поверх папки установки сервера, перезапускаете его, и у сервера появляется папка oxide/. Плагины - это одиночные файлы .cs, которые кладутся в oxide/plugins; Oxide компилирует и загружает их на лету, пишет их настройки в oxide/config и ограничивает доступ игроков через систему прав, которой управляет oxide.grant. Подвох - ежемесячное обновление Rust, которое каждый раз ломает Oxide, пока не выйдет новая сборка. В этой статье - установка, правильная работа с плагинами, модель прав и то, как сохранить всё это в рабочем состоянии на протяжении года обновлений.
Что на самом деле Oxide делает с вашим сервером#
У Rust нет официального API для плагинов. Oxide патчит управляемые сборки игры в RustDedicated_Data/Managed так, чтобы игра обращалась к Oxide в сотнях мест - когда подключается игрок, когда сущность получает урон, когда добывается ресурс, когда крафтится предмет. Каждое такое место - это хук. Плагин - это класс на C#, который реализует нужные ему хуки и возвращает значения, способные изменить то, что произойдёт дальше.
Отсюда три следствия, и они объясняют большую часть проблем, с которыми сталкиваются люди:
- Oxide привязан к конкретной сборке игры. Когда Facepunch выпускает обновление, сборки меняются, SteamCMD перезаписывает пропатченные файлы, и Oxide пропадает, пока вы не поставите сборку под новую версию.
- Плагины компилируются на вашем сервере. Oxide поставляется с процессом-компилятором. Плагин, который обращается к методу игры, переименованному Facepunch, не компилируется, выводит ошибку и остаётся незагруженным, а остальные продолжают работать.
- Ваш сервер становится модовым. По умолчанию сервер с Oxide сообщает о себе как о модовом, и это переносит его на вкладку Modded в браузере. Для всего, что меняет геймплей, это правильно, и подробнее об этом - в статье о рейтах добычи и китах на модовом сервере.
Oxide - не единственный вариант. Carbon - более новый фреймворк, который загружает большинство плагинов Oxide без патчинга файлов игры, и о нём стоит почитать, прежде чем делать выбор. Экосистема плагинов, описанная ниже, работает на обоих.
Установка Oxide#
- Корректно остановите сервер командой
quitв консоли, чтобы мир сохранился. - Сначала обновите Rust. Запустите SteamCMD с
validate. Если поставить Oxide на устаревший сервер, а потом обновиться, Oxide тут же перезапишется. - Скачайте подходящую сборку Oxide.Rust со страницы Rust на umod.org. Для Windows и Linux архивы разные; берите тот, что для операционной системы сервера, а не того компьютера, за которым вы сидите.
- Распакуйте его в корень сервера, чтобы его папка
RustDedicated_Dataслилась с существующей, и подтвердите перезапись файлов. - Запустите сервер и следите за консолью. Oxide сообщает о себе во время старта и при первом запуске создаёт папку
oxide/. - Проверьте командой
oxide.versionв консоли. Если команда неизвестна, Oxide не загрузился.
В панели шаг 4 проще всего сделать через файловый менеджер: загрузите zip в корень сервера и распакуйте его на месте. В некоторых egg-ах на вкладке Startup есть переключатель фреймворка, который скачивает Oxide при каждом старте; если у вас такой есть, используйте его и не смешивайте с ручной установкой.
Папка oxide, файл за файлом#
| Путь | Что там лежит |
|---|---|
oxide/plugins/ | Исходные файлы плагинов, PluginName.cs |
oxide/config/ | По одному JSON-файлу на плагин, создаётся при первой загрузке |
oxide/data/ | Данные плагинов, а также пользователи, группы и права самого Oxide |
oxide/lang/ | Файлы сообщений по языкам, например lang/en/Kits.json |
oxide/logs/ | Логи Oxide и логи плагинов с датами |
oxide/oxide.config.json | Настройки фреймворка, включая флаг modded |
Разница между config и data важнее всего остального в этой таблице. Config - это то, что выбрали вы: рейты, кулдауны, цены. Data - это то, что сделали игроки: время получения китов, состав кланов, точки домов, балансы в экономике. Удаление data в день вайпа сбрасывает состояние игроков; удаление config сбрасывает ваши настройки. Люди регулярно удаляют не то.
Права тоже хранятся в oxide/data, в собственных файлах данных Oxide. Они переживают вайпы карты и чертежей, если вы их не удалите, - и почти всегда это именно то, что нужно.
Установка плагинов и управление ими#
Положите файл .cs в oxide/plugins, и Oxide это заметит. По умолчанию наблюдатель за плагинами автоматически компилирует и загружает новые файлы и перезагружает плагин при изменении его файла, так что обновить плагин - значит заменить файл. В консоли появится либо строка «Loaded plugin» с названием и версией, либо ошибка компиляции с номером строки.
oxide.plugins list loaded plugins with versionsoxide.load Kits load one plugin (file name without .cs)oxide.unload Kits unload itoxide.reload Kits unload and load again, rereading configoxide.reload * reload every pluginoxide.version framework versionУ каждой команды есть и короткая форма с o. вместо oxide. - o.reload Kits делает то же самое, что и длинная.
Несколько привычек помогают сохранить порядок:
- Читайте зависимости. Многим плагинам сначала нужен плагин-библиотека. Чаще всего это ImageLibrary для картинок в интерфейсе и Economics для всего, где есть цены. На странице плагина это написано; ошибка в консоли об этом говорит не всегда.
- Один плагин на одну задачу. Два плагина телепорта, два форматтера чата или два контроллера размера стаков будут драться за один и тот же хук, и результат будет зависеть от порядка загрузки.
- Сохраняйте старый файл. Прежде чем заменить плагин, скопируйте рабочую версию куда-нибудь за пределы
oxide/plugins. Сломанное обновление плагина быстрее всего лечится возвратом старого файла. - Не оставляйте тестовые плагины в папке. Каждый загруженный плагин тратит время хуков на каждое событие, на которое он подписан.
Конфиги и языковые файлы
При первой загрузке большинство плагинов записывает конфиг по умолчанию в oxide/config/PluginName.json. Отредактируйте его, сохраните и выполните oxide.reload PluginName - изменение не применится, пока плагин не перезагрузится.
{ "Cooldown (seconds)": 600, "Max uses per wipe": 3, "Enabled for default group": true, "Allowed items": ["rifle.ak", "ammo.rifle"]}JSON ошибок не прощает. Лишняя запятая в конце, пропущенная кавычка или случайный комментарий не дают плагину загрузиться, а некоторые плагины в ответ на нечитаемый конфиг записывают поверх вашего файла свежие значения по умолчанию. Проверяйте крупную правку перед перезагрузкой и храните копию каждого конфига, на который вы потратили время. Названия предметов в конфигах - это короткие имена Rust (rifle.ak, stones, metal.fragments), а не отображаемые названия.
Языковые файлы в oxide/lang/<code>/ содержат все сообщения, которые выводит плагин. Их можно свободно переписать под тон вашего сервера или перевести; игрок видит тот язык, который сообщает его клиент, если файл для него существует, а иначе - английский.
Права: группы, выдача и группа admin#
Система прав Oxide отделена от собственных уровней владельца и модератора в Rust. Плагин регистрирует строки прав вроде kits.use или removertool.normal, и ничего в плагине не работает для игрока, которому не выдали нужное право - напрямую или через группу.
Групп по умолчанию две. Каждый игрок состоит в default. Игроки с правами владельца попадают в admin. Можно создавать и другие.
oxide.grant group default kits.useoxide.grant group admin removertool.adminoxide.grant user 76561198012345678 vanish.allowoxide.revoke group default kits.useoxide.group add vip "VIP" 10oxide.group parent vip defaultoxide.usergroup add 76561198012345678 vipoxide.usergroup remove 76561198012345678 vipoxide.show groupsoxide.show group vipoxide.show user 76561198012345678oxide.show perm kits.use| Команда | Что делает |
|---|---|
oxide.grant group <g> <perm> | Выдаёт право всем в группе |
oxide.grant user <id> <perm> | Выдаёт его одному игроку |
oxide.group add <g> [title] [rank] | Создаёт группу |
oxide.group parent <g> <parent> | Наследует права родительской группы |
oxide.usergroup add <id> <g> | Добавляет игрока в группу |
oxide.show user <id> | Что есть у игрока и почему |
Во всём, что вы автоматизируете или документируете, используйте SteamID64, а не ники. Ники меняются и содержат символы, которые ломают команды; ID - нет. Наследование позволяет не выдавать одни и те же двадцать прав три раза: vip наследует default, moderator наследует vip, и каждое право выдаётся один раз на самом нижнем уровне, которому оно положено.
Храните права в виде скрипта
Права, накопленные по одной команде за год, превращаются в то, что никто не может описать. Решение - держать каждую выдачу в обычном текстовом файле, по одной команде в строке, сгруппировав по группам, и считать этот файл источником истины. Добавили плагин - добавьте его права в файл и выполните их. Когда модератор спросит, почему VIP могут пользоваться какой-то командой, ответ будет в файле.
Файл окупается трижды. После ошибки или повреждения файла данных права можно восстановить с нуля за минуту. Можно перейти на Carbon, заменив oxide. на c. и вставив команды. И его можно просматривать - а это единственный способ заметить, что полтора года назад кто-то, тестируя плагин, выдал default админское право.
Выдача * группе даёт ей всё, а маска вроде kits.* даёт все права, которые регистрирует плагин. Оба варианта удобны, и оба - то, как модератор случайно получает админские возможности плагина. Если уж нужно, выдавайте широкие права группе admin, а всем остальным - явно. Тот же аргумент для доступа к панели приводится в статье о субпользователях и минимальных привилегиях.
Какие плагины стоит ставить#
uMod хранит бесплатный каталог, и по его правилам проверки плагины там - читаемый исходный код. Codefling и Lone.Design размещают много платных плагинов. Поскольку плагин - это исходный код, компилируемый на вашем сервере, он может делать всё, что может сервер, - читать файлы, делать веб-запросы, выдавать права, - поэтому берите плагины с настоящей страницы автора и внимательно читайте всё, что выглядит слишком щедро. Слитые копии платных плагинов - известный путь к серверам с бэкдором.
| Задача | Популярные плагины |
|---|---|
| Удаление своих построек | RemoverTool |
| Телепорты и дома | NTeleportation |
| Киты | Kits |
| Рейты и стаки | GatherManager, StackSizeController |
| Кланы и команды | Clans |
| Форматирование чата | BetterChat |
| Невидимость админов | Vanish, AdminRadar |
| Дополнительное хранилище | Backpacks |
| Правила PvE | TruePVE |
Платные плагины не лучше автоматически. Некоторые отличные и активно поддерживаются; другие - идея бесплатного плагина с добавленным интерфейсом. Цена обычно покупает поддержку и обновления после ежемесячного патча, поэтому судите о платном плагине по тому, как быстро автор выпускал исправления после нескольких последних обновлений, - это видно по его changelog. Плагин, на котором держится лицо вашего сервера - своя экономика, система рейдов, - заслуживает автора, который всё ещё на связи.
Названия и мейнтейнеры со временем меняются; проверяйте на странице плагина текущую версию и то, работает ли он на последней версии Rust. Плагин, который не обновлялся год, обычно уже чем-то заменён.
Общая дисциплина короткого списка плагинов разобрана в статье о том, как держать модовый сервер в чистоте, а порядок восстановления - в статье о том, что делать, когда обновление мода всё сломало.
Ежемесячное обновление и Oxide#
В первый четверг месяца обновление Rust перезаписывает пропатченные сборки. Сервер запускается, работает как ванилла, и все плагины молча исчезают: права не применяются, китов нет, защитных плагинов нет, и игроки обнаруживают это за считанные минуты. Решение - в порядке действий:
- Остановите сервер и обновите Rust с
validate. - Дождитесь, пока uMod опубликует сборку Oxide под новую версию. Обычно это часы, а не дни.
- Установите её, запустите сервер и найдите в консоли плагины, которые не компилируются.
- Обновите или выгрузите сломанные плагины, прежде чем открывать сервер.
Если ваш сервер автоматически обновляет Rust при старте, в день вайпа это выключите, иначе сервер поднимется без защиты раньше, чем будет готов Oxide. Ветка staging, установленная отдельно, позволяет протестировать плагины на сборке следующего месяца на неделю раньше. В календарь всё это сведено в статье о графике ежемесячного принудительного вайпа.
Заметки о панели и производительности#
oxide.plugins показывает каждый плагин с цифрой времени рядом - это время, проведённое в хуках этого плагина. Когда частота кадров сервера падает, начните с этого списка; один плохо написанный плагин, повешенный на спавн сущностей или урон, стоит дороже всех остальных вместе взятых. Остальная диагностика описана в статье о производительности сервера и числе сущностей.
В RE:NODE, как и в панелях Pterodactyl вообще, плагины вы загружаете сами через файловый менеджер или SFTP - белого списка разрешённых модов и установщика плагинов в один клик нет. Файловый менеджер редактирует JSON с подсветкой синтаксиса и ловит пропущенную запятую раньше Oxide, а отдельные SFTP-доступы для каждого сервера позволяют дать разработчику доступ к файлам без вашего пароля от панели. Оба инструмента разобраны в статье SFTP и файловый менеджер.
Решение проблем#
«Unknown command: oxide.version». Oxide не загружен. Либо его не ставили, либо его перезаписало обновление, либо вы поставили Windows-сборку на Linux.
Плагин падает с ошибкой компиляции после обновления. Он обращается к коду игры, который изменился. Обновите плагин; если обновления ещё нет, выгрузите его и подождите.
Плагин загружается, но у игроков ничего не работает. Права. Выполните oxide.show perm <permission>, чтобы увидеть, у кого оно есть, и выдайте его default, если оно положено всем.
Изменения в конфиге игнорируются. Плагин не перезагрузили, или он перезаписал файл, потому что JSON был невалидным. Найдите в консоли ошибку конфига, исправьте файл и перезагрузите плагин.
У админов нет админских прав. Они не в группе admin. Одни только права владельца не дают прав Oxide; добавьте их через oxide.usergroup add.
После вайпа всё сбросилось. Кто-то удалил всю папку oxide/data. Восстановите файлы прав самого Oxide из backup-а перед вайпом и решите, какие данные плагинов вы на самом деле хотели сохранить.
FAQ#
uMod и Oxide - это одно и то же?
Фактически да. Oxide - это фреймворк; uMod - проект и сайт, который его распространяет и хранит каталог плагинов. На серверы Rust ставится сборка под названием Oxide.Rust.
Нужно ли игрокам что-то устанавливать, чтобы зайти на сервер с Oxide?
Нет. Oxide работает полностью на сервере. Плагины со своими картинками или интерфейсом отправляют их клиенту в ходе обычной игры.
Можно ли использовать плагины Oxide на Carbon?
Большинство - да. Carbon спроектирован так, чтобы загружать плагины Oxide без изменений, и подавляющее большинство из них работает. Немногим, которые зависят от внутренностей Oxide, нужно обновление или замена.
Сохраняются ли права после вайпа?
Да, если не удалить файлы данных Oxide. Они хранятся в oxide/data, отдельно от файлов карты, сохранения и чертежей, которые удаляет вайп.
Почему после установки Oxide мой сервер отображается как модовый?
Oxide по умолчанию сообщает о сервере как о модовом, потому что большинство серверов с ним меняет геймплей. Настройка находится в oxide.config.json; выключайте её, только если ваши плагины действительно оставляют геймплей ванильным.




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