RE:NODE

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

ULX или SAM в Garry's Mod: права админов

Как настроить ULX и ULib или SAM на сервере Garry's Mod: первый superadmin, группы и наследование, ограничения целей, баны, CAMI, базы данных и что выбрать.

0 прочтений

ULX с ULib - бесплатный и давний админ-мод для Garry's Mod; SAM - платная альтернатива, которая легче для клиентов и с самого начала хранит ранги и баны в базе данных. Любой из них даёт группы, права по группам, баны и меню. Настройка у обоих устроена одинаково: установите аддон, перезапустите сервер, создайте первого superadmin из консоли сервера, потому что в игре ни у кого ещё нет прав, постройте небольшую лестницу групп с наследованием вверх и дайте каждой группе только нужные ей команды - с ограничениями на то, на кого они действуют. Разница проявляется позже: ULX хранит данные в текстовых файлах и SQLite на одном сервере, если не добавить аддон для MySQL, а SAM сделан для нескольких серверов с общей базой данных. В этом руководстве - оба мода, общая для них модель прав через CAMI и ошибки, из-за которых модератор может забанить владельца.

Что делает админ-мод и какие они бывают#

В Garry's Mod встроено лишь базовое понятие admin и superadmin, и больше ничего: ни групп, ни банов с причинами, ни меню. Админ-мод добавляет:

  • Группы (ранги) с наследованием, чтобы модератор наследовал всё, что может доверенный игрок.
  • Права на каждую команду для каждой группы, часто с ограничениями аргументов.
  • Правила выбора целей - на кого группа может действовать.
  • Баны с причинами, сроками и историей.
  • Меню, команды в чате и в консоли.
  • API прав, через которое другие аддоны спрашивают «может ли этот игрок это сделать?»
Админ-модЦенаХранилищеПримечания
ULX + ULibБесплатно, открытый кодТекстовые файлы и SQLite сервераСтандарт уже десять лет; огромная поддержка аддонами
SAMПлатныйSQLite или MySQL для сети серверовБолее лёгкое клиентское меню, сделан для нескольких серверов
FAdminПоставляется с DarkRPБаза данных DarkRPГодится для небольших серверов DarkRP; отключите, если ставите другой

Запускайте ровно один. Два админ-мода дерутся за одни и те же команды в чате и одни и те же встроенные флаги админа, и в итоге команды у одних работают, а у других нет. На DarkRP отключите FAdmin перед установкой ULX или SAM - в статье руководство по серверу DarkRP показана строка, которая это делает.

Установка ULX и создание первого superadmin#

ULX нужна ULib - его библиотека. Обе есть в Workshop и на GitHub авторов; берите обе из одного источника, чтобы версии совпадали. Добавьте их в свою коллекцию Workshop или положите в garrysmod/addons/, затем перезапустите сервер. Если коллекция ещё не настроена, о ней рассказывает статья Workshop и FastDL в Garry's Mod.

На свежей установке ни у кого нет прав, поэтому первый superadmin создаётся из консоли сервера - консоли панели или RCON, - а не из чата:

code
ulx adduser "YourName" superadminulx adduserid STEAM_0:1:12345678 superadmin

ulx adduser требует, чтобы игрок был онлайн, и ищет его по имени; ulx adduserid работает по SteamID независимо от того, онлайн ли игрок, и это более безопасная привычка. Когда вы стали superadmin, ulx menu - или !menu в чате - открывает XGUI, графическое меню, где можно сделать всё описанное ниже.

ULX хранит данные в garrysmod/data/:

code
garrysmod/data/  ulib/groups.txt     groups, inheritance, permissions  ulib/users.txt      who is in which group  ulx/config.txt      ULX settings, executed at start  ulx/motd.txt        message of the day

Это обычный текст, и его легко поправить вручную, если вы заперли себя снаружи: остановите сервер, отредактируйте, запустите. Свежие версии ULib хранят баны в базе SQLite сервера (garrysmod/sv.db), а не в текстовом файле; старые версии использовали файл. Делайте backup и папки data/ulib, и sv.db.

Группы и наследование в ULX#

ULX поставляется с четырьмя группами, каждая наследует от нижестоящей:

code
superadmin -> admin -> operator -> user

Обычно хочется своих названий и чуть более длинной лестницы. Создавайте группы, указывая группу, от которой они наследуют:

code
ulx addgroup vip userulx addgroup moderator vipulx addgroup senioradmin adminulx groupallow moderator "ulx kick"ulx groupallow moderator "ulx gag"ulx groupallow moderator "ulx mute"ulx groupallow moderator "ulx slay"ulx groupallow moderator "ulx goto"ulx groupallow moderator "ulx bring"ulx groupdeny moderator "ulx noclip"

groupallow выдаёт команду группе и всему, что от неё наследует; groupdeny её забирает. Выдавайте команду самой нижней группе, которой она должна быть доступна, а остальное сделает наследование. ulx userallow и ulx userdeny существуют для разовых исключений, но права отдельных пользователей потом трудно проверять - лучше группа.

Разумная лестница для публичного сервера:

ГруппаНаследуетТипичные команды
user-ulx motd, ulx votemap
vipuserКосметические бонусы, зарезервированный слот
moderatorvipКик, gag, mute, slay, goto, bring, короткие баны
adminmoderatorБолее длинные баны, смена карты, noclip, jail
superadminadminВсё, включая ulx rcon и ulx luarun

Правила выбора целей: как не дать модератору забанить вас#

Наследование решает, что группа может делать. Выбор целей решает, с кем она может это делать. Без правила выбора целей модератор с ulx kick может кикнуть админа, а модератор с ulx ban - забанить владельца. Это исправляют строки целей ULib:

ЦельЗначение
^Вы сами
*Все
@Игрок, на которого вы смотрите
#groupУчастники ровно этой группы
%groupУчастники этой группы и всех групп, которые от неё наследуют
$idИгрок по SteamID или уникальному ID
!Отрицает следующую цель

ulx setgroupcantarget задаёт ограничение целей для группы:

code
ulx setgroupcantarget moderator !%moderatorulx setgroupcantarget admin !%admin

Первая строка означает, что модераторы могут действовать на кого угодно, кроме модераторов и групп, которые от них наследуют, - включая админов и superadmin. Одна эта команда убирает самый частый случай злоупотребления правами на сервере Garry's Mod. Задавайте её для каждой группы команды, как только группа создана.

XGUI также позволяет ограничивать аргументы команд для каждой группы - например, самый долгий бан, который может выдать модератор, или максимальный урон от slap. Пользуйтесь этим: модератор, который может забанить на час, но не навсегда, делает меньше ошибок, которые вам придётся отменять.

Баны, логирование и повседневные команды#

КомандаДействие
ulx kick <player> [reason]Выгнать игрока
ulx ban <player> [minutes] [reason]Забанить игрока онлайн; 0 - навсегда
ulx banid <steamid> [minutes] [reason]Бан по SteamID, онлайн игрок или нет
ulx unban <steamid>Снять бан
ulx gag <player> / ulx mute <player>Запретить голос / запретить текстовый чат
ulx slay, ulx slap, ulx freeze, ulx jailНаказания на месте
ulx goto, ulx bring, ulx returnТелепорт к игроку, к себе, вернуть обратно
ulx map <map> [gamemode]Сменить карту, при желании и режим
ulx asay <message>Сообщение, которое видят только админы (также @ в чате)
ulx whoСписок игроков с их группами

Если логирование включено, ULX записывает действия админов в garrysmod/data/ulx_logs/, по файлу на день. Этот лог - то, чем вы через неделю отвечаете на вопрос «кто забанил моего друга»; держите ulx logFile 1 (с ulx logEvents 1 и ulx logChat 1, если нужен контекст) в data/ulx/config.txt и просматривайте его раз в неделю. Как вести команду, которая пользуется всем этим последовательно, описано в статье правила сервера, модерация и команда.

Зарезервированные слоты и бонусы VIP

Группа vip - то место, куда большинство серверов складывает бонусы для поддерживающих и постоянных игроков, и самый частый бонус - зарезервированный слот. ULX делает это сам: настройки зарезервированных слотов лежат в data/ulx/config.txt как ulx rslotsMode, ulx rslots и ulx rslotsVisible, а слот получает группа, которой выдан доступ к зарезервированным слотам. Режимы различаются тем, держатся ли слоты пустыми для админов или кого-то кикают, чтобы освободить место; комментарии в config.txt описывают каждый, и их стоит прочитать до выбора, потому что режим с киком ради свободного места неприятно удивляет постоянных игроков, которых выбрасывает посреди раунда.

Оставляйте бонусы VIP косметическими или удобными. Платная группа, которая может летать в noclip, создавать оружие или избегать наказаний, превращает сервер сообщества в pay-to-win, а в зависимости от игры это ещё и может нарушать правила издателя для серверов сообщества. Где проходит эта граница, объясняет статья монетизация игрового сервера в рамках правил.

Лестница команды, которая выдержит годы#

Права - простая часть. Админ-систему годами удерживает процесс вокруг неё.

  1. Начинайте новых членов команды с пробной группы. Группа trialmod, наследующая от vip, с киком, gag, mute и больше ничем. Повышайте после нескольких недель здравых решений, видных в логах.
  2. Выдавайте минимальный набор, который решает задачу. Каждая команда, которой у модератора нет, - ошибка, которую он не сможет совершить. Баны дольше суток могут подождать админа.
  3. Запишите, для чего каждая группа. По строке на группу в канале команды. Когда кто-то просит новое право, вопрос становится «соответствует ли это назначению группы», а не «нравится ли мне этот человек».
  4. Просматривайте логи. Десять минут в неделю на чтение ulx_logs ловят злоупотребления задолго до того, как на них пожалуются игроки.
  5. Отзывайте доступ в тот же день, когда человек уходит. ulx removeuserid <steamid> в игре, удалённый субпользователь панели и смена любого общего пароля - RCON, базы данных, - если он у него когда-либо был. Бывший член команды со старой записью superadmin - так вайпают многие серверы.

Та же лестница напрямую переносится на ранги SAM, так что при переходе ничего из этого не пропадёт.

SAM: установка и чем он отличается#

SAM продаётся через маркетплейс аддонов Garry's Mod, ставится как обычная папка аддона и лицензируется за каждую покупку. Как и в ULX, в нём изначально нет админов, поэтому первый ранг задаётся из консоли сервера - консольная команда SAM для этого - sam setrank с именем или SteamID и рангом, но сверьтесь с документацией своей версии на случай, если синтаксис изменился. Дальше всё делает меню в игре.

Различия, которые важны при выборе:

  • Хранилище. SAM по умолчанию использует SQLite и поддерживает MySQL через модуль MySQLOO, так что несколько серверов могут делить ранги и баны из одной базы данных. ULX может то же самое только со сторонним аддоном для MySQL.
  • Нагрузка на клиент. Меню SAM легче XGUI, что помогает на серверах с множеством аддонов, где загрузка клиентского Lua и так долгая.
  • Модель. Ранги с правами и наследованием, выбор целей через иммунитет рангов, а не через строки целей ULib. Понятия переносятся; команды - нет.
  • Экосистема. У ULX десятилетие аддонов, написанных прямо под него, - наборы команд для TTT, аддоны логирования, плагины MOTD. SAM поддерживает CAMI и имеет собственные модули для распространённых режимов.

Для MySQL MySQLOO - это бинарный модуль: файл .dll в garrysmod/lua/bin/, собранный под платформу и ветку сервера. На 64-битной ветке сервера нужна 64-битная сборка. Каждый игровой тариф на RE:NODE включает слот базы данных со сгенерированными хостом, пользователем и паролем; прежде чем переносить туда ранги, сверьте предоставляемый движок с тем, чего ожидает SAM или ваш аддон MySQL для ULX.

можно ли игроку?да или нетИгроквыполняет командуЛюбой аддоннапример, двериULX или SAMгруппы и рангиХранилищефайлы, SQLite, MySQLCAMIобщий API привилегий
Как аддоны запрашивают права через CAMI

CAMI: почему вашим аддонам всё равно, что вы выберете#

CAMI, Common Admin Mod Interface, - небольшая общая библиотека, которая позволяет любому аддону зарегистрировать привилегию и спросить, есть ли она у игрока, не зная, какой админ-мод установлен. Её поддерживают и ULX, и SAM. Игровой режим, который регистрирует через CAMI право «может редактировать двери», автоматически появляется как право в XGUI или в меню SAM, и вы выдаёте его группе, как любую другую команду.

Два практических следствия. При смене админ-мода аддоны с поддержкой CAMI продолжают работать; нужно лишь заново выдать их привилегии в новом моде. А когда у члена команды нет какой-то функции аддона, поищите в админ-моде привилегию, которую аддон зарегистрировал, - обычно она там есть и по умолчанию выдана только superadmin.

Доступ к панели - отдельный вопрос#

Админка в игре и администрирование сервера - разные работы. Модератору, которому нужно перезапустить сервер после краша, не нужны файлы, учётные данные базы данных или биллинг. На RE:NODE субпользователи и роли панели дают только доступ к консоли, только к файлам или другие узкие наборы прав, с журналом действий по каждому серверу, а доступ можно ограничить по времени. Сочетайте это с лестницей в игре: у доверенного админа может быть консоль в панели и admin в ULX, а доступ к файлам и superadmin нет ни у кого, кроме владельца. Подробности - в статье субпользователи и минимальные привилегии, а защита самих аккаунтов описана в статье безопасность админ-аккаунтов игрового сервера.

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

`ulx adduser` пишет, что игрок не найден. Он офлайн, или его имя неоднозначно. Используйте ulx adduserid с SteamID.

Команды работают у superadmin, но не у новой группы. Группа создана без наследования от user, или команда выдана группе, от которой новая не наследует. Проверьте родителя группы в XGUI.

Модератор забанил админа. Нет правила выбора целей. Задайте ulx setgroupcantarget для каждой группы команды.

Открываются два меню, или команды в чате ничего не делают. Установлены два админ-мода - на DarkRP часто FAdmin. Отключите один.

Ранги сбрасываются после перезапуска. Файлы данных были недоступны для записи, или обновление Workshop заменило старую папку аддона. Проверьте время изменения файлов в data/ulib/ и держите backup.

Вы заперли себя снаружи, отредактировав `groups.txt` вручную. Пропущенная скобка или кавычка заставляет ULib отбросить файл и вернуться к значениям по умолчанию, так что прав не остаётся ни у кого. Остановите сервер, восстановите файл из backup или исправьте синтаксис, запустите снова и, если прав всё ещё нет, используйте ulx adduserid из консоли.

У команды нет админ-функции какого-то аддона. Он зарегистрировал привилегию CAMI, которая по умолчанию есть только у superadmin. Найдите её в списке прав XGUI или в редакторе рангов SAM и выдайте нужной группе.

MySQLOO не загружается. В lua/bin/ сборка не под ту платформу или архитектуру. Подберите модуль под ветку сервера.

FAQ#

Что выбрать: ULX или SAM?

ULX, если у вас один сервер, нужно что-то бесплатное и вы полагаетесь на аддоны, написанные под ULX. SAM, если у вас несколько серверов, которые должны делить ранги и баны, или вам нужно более лёгкое клиентское меню и вы готовы за него заплатить.

Как сделать себя superadmin в ULX?

Из консоли сервера, а не из чата: ulx adduserid <your SteamID> superadmin. Командам в игре нужны права, которых у вас ещё нет.

Можно ли перейти с ULX на SAM, не потеряв баны?

Да, но это миграция, а не переключение. SAM предоставляет инструменты импорта из распространённых админ-модов; сверьтесь с его документацией, сначала сделайте backup data/ulib и sv.db и проверьте всё на копии.

Где ULX хранит группы и пользователей?

В garrysmod/data/ulib/groups.txt и garrysmod/data/ulib/users.txt. Настройки ULX лежат в garrysmod/data/ulx/config.txt, а свежие версии ULib хранят баны в garrysmod/sv.db.

Почему мои модераторы могут кикать админов?

Потому что по умолчанию их ничто не останавливает. Используйте ulx setgroupcantarget moderator !%moderator, чтобы модераторы не могли действовать на свою группу и всех, кто выше.


Комментарии

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

0/2000