SourceMod определяет, что может администратор, однобуквенными флагами (b - базовый администратор, c - кик, d - бан, и так далее до z - root), привязанными к идентификатору, обычно SteamID, в файле addons/sourcemod/configs/admins_simple.ini. Число перед флагами, как в "STEAM_0:1:123456" "50:bcdj", - уровень иммунитета администратора: по умолчанию администратор не может применить команду к другому администратору с более высоким иммунитетом, а администраторы с равным иммунитетом могут действовать друг против друга, что можно изменить через sm_immunity_mode в cfg/sourcemod.cfg. Группы в admin_groups.cfg объединяют флаги и иммунитет, чтобы роль менялась в одном месте, а admin_overrides.cfg меняет, какой флаг нужен для команды. Это вся модель; остальная часть статьи - детали, благодаря которым она ведёт себя так, как вы ожидаете.
Всё это относится к каждой игре, на которой работает SourceMod: Team Fortress 2, Garry's Mod (где SourceMod встречается реже, чем ULX или SAM), Left 4 Dead 2, Counter-Strike: Source, Day of Defeat: Source и другим. Counter-Strike 2 не запускает SourceMod; там его аналог - CounterStrikeSharp, о нём в статье плагины CS2 с Metamod и CounterStrikeSharp.
Откуда SourceMod читает администраторов#
Все эти файлы лежат в addons/sourcemod/configs/ внутри папки игры (tf/, left4dead2/, cstrike/ и так далее).
| Файл | Что в нём | Кем загружается |
|---|---|---|
admins_simple.ini | По строке на администратора: идентификатор, иммунитет, флаги | admin-flatfile.smx |
admins.cfg | Администраторы в формате KeyValues, с группами и паролями | admin-flatfile.smx |
admin_groups.cfg | Именованные группы: флаги, иммунитет, переопределения | admin-flatfile.smx |
admin_overrides.cfg | Какой флаг требуется для каждой команды | admin-flatfile.smx |
databases.cfg | Подключение для администраторов на SQL | admin-sql-*.smx |
Читаются оба файла администраторов, так что администратор может быть в любом из них. Выберите один для каждого сервера и придерживайтесь его: человек, описанный в обоих с разными флагами, - это гарантированный день путаницы. admins_simple.ini подходит для нескольких человек; admins.cfg с группами лучше, когда появляются роли; администраторы на SQL лучше, когда серверов несколько, потому что изменение в базе данных применяется везде. Как делиться этой базой, описано в статье глобальные бан-системы для сообществ.
После правки любого из этих файлов команда sm_reloadadmins в консоли сервера перечитывает их без перезапуска.
Администраторы на SQL для нескольких серверов
SourceMod поставляется со всеми частями для администраторов на базе данных, но по умолчанию они отключены. Перенесите admin-sql-threaded.smx (или admin-sql-prefetch.smx, который загружает всё при старте карты) и sql-admin-manager.smx из plugins/disabled в plugins и добавьте в databases.cfg запись с именем "admins", указав хост, базу данных, пользователя и пароль. Затем в консоли сервера:
sm_create_adm_tablessm_sql_addgroup "Moderator" bcj 20sm_sql_addadmin "Jan" steam STEAM_0:1:5555555 "" 0sm_sql_setadmingroups steam STEAM_0:1:5555555 "Moderator"Первая команда создаёт таблицы, остальные создают группу и администратора, входящего в неё. Каждый сервер, подключённый к той же базе, видит одних и тех же администраторов, так что повышение или удаление человека выполняется один раз, а не на каждом сервере отдельно. Файлы продолжают работать вместе с базой данных - это удобно, чтобы хранить запись владельца локально на случай недоступности базы, - и это же причина проверять оба места, когда у кого-то есть права, которых быть не должно. Если вы предпочитаете управлять администраторами через веб-интерфейс, панель SourceBans++ умеет управлять администраторами и группами известных ей серверов, а не только банами.
Флаги и что каждый из них на самом деле даёт#
| Флаг | Название | Что открывает |
|---|---|---|
a | reservation | Зарезервированный слот, если резервные слоты настроены |
b | generic | Сам статус администратора: админ-меню, sm_who, админ-чат во многих плагинах |
c | kick | sm_kick |
d | ban | sm_ban и связанные команды бана |
e | unban | Снятие банов |
f | slay | sm_slay, sm_slap и подобные |
g | changemap | sm_map и другие крупные изменения геймплея |
h | cvar | sm_cvar: чтение и изменение большинства cvar |
i | config | sm_execcfg: выполнение конфиг-файлов |
j | chat | Функции админ-чата: sm_say, sm_csay, sm_psay и так далее |
k | vote | Запуск голосований |
l | password | sm_password: установка пароля сервера |
m | rcon | sm_rcon: любая консольная команда сервера |
n | cheats | Изменение sv_cheats и использование чит-команд |
С o по t | custom1 - custom6 | То, что им назначат отдельные плагины |
z | root | Все флаги, проверки иммунитета игнорируются |
Два из них - по сути root под другим именем и требуют той же осторожности, что и z:
- `m` (rcon) выполняет любую консольную команду. Включая
rcon_password,exec,quitи изменение всего, что иначе защищал бы сам SourceMod. Тот, у кого естьm, может выдать себе всё остальное. - `h` (cvar) - очень широкий. Многие плагины настраиваются целиком через cvar, поэтому
hпозволяет администратору перенастроить их, в том числе отключить логирование или плагины, которые бы это заметили.
n - флаг, который губит публичные серверы: включённые читы означают noclip и спавн для любого, у кого есть команды.
b - тот, о котором забывают. Большинство админ-команд и плагинов ожидают, что у администратора он есть, и админ-меню (sm_admin) без него не работает. Администратор с cd, но без b, часто обнаруживает, что команды ему отказывают без видимой причины.
Пользовательские флаги с o по t ничего не значат, пока их не использует плагин. В документации плагина сказано, какой из них он проверяет, а admin_overrides.cfg позволяет это изменить.
Резервные слоты и флаг a
Флаг a - единственный, который часто выдают людям, вообще не входящим в команду: донатерам, постоянным игрокам, членам клана. Он ничего не делает, пока резервные слоты не настроены в cfg/sourcemod.cfg с помощью плагина reservedslots.smx, который идёт в комплекте с SourceMod:
sm_reserved_slots 2 // how many slots are kept for flag asm_hide_slots 0 // 1 hides the reserved slots from the visible maxsm_reserve_type 0 // 0, 1 or 2, see belowПри sm_reserve_type 0 последние слоты держатся для игроков с резервом: когда публичные слоты заполнены, обычным игрокам отказывают, а игроки с a всё ещё могут зайти. При 1 сервер может заполниться полностью, и когда игрок с резервом заходит на полный сервер, кого-то без резервного доступа кикают - игрока с самой высокой задержкой или по другому правилу в зависимости от настроек, - чтобы освободить место. 2 ведёт себя как 1, но перестаёт кикать, когда на сервере заданное число администраторов. Тип 0 меньше всего удивляет игроков; тип 1 держит сервер полным, но кикает людей посреди игры, и если вы его используете, об этом стоит написать в правилах.
Поскольку a не даёт никакой власти над другими игроками, его можно раздавать широко. Это же флаг, который чаще всего оказывается у человека, позже попавшего в команду, поэтому проверяйте существующие записи, прежде чем добавлять человека второй раз.
Идентификаторы: SteamID, IP и ник#
Запись администратора начинается с идентификатора. Их три вида:
- SteamID, например
STEAM_0:1:123456. Единственный вид, проверяемый через Steam, и именно его стоит использовать. - IP-адрес, записанный с ведущим
!, например"!203.0.113.5". Имеет смысл только для постоянного адреса, который вы контролируете, например для сервера, обращающегося сам к себе. - Ник с паролем. Внутриигровой ник администратора, а пароль передаёт клиент.
Формат SteamID должен совпадать с тем, что видит сервер. Надёжный способ - попросить человека подключиться, выполнить status в консоли сервера и скопировать ID ровно так, как он выведен: разные игры на Source выводят немного разные формы, а перепечатывание приводит к ошибкам.
Администраторы по нику проверяются через клиентскую настройку. В addons/sourcemod/configs/core.cfg её имя задаёт PassInfoVar (по умолчанию _password), и администратор перед входом вводит в своей консоли setinfo _password "their-password". Слабое место в том, что значения setinfo отправляются на каждый сервер, на который заходит игрок, и любой из этих серверов может их прочитать. Администраторы по нику и паролю - крайняя мера для серверов, где проверка через Steam недоступна.
admins_simple.ini целиком#
Формат по документации самого SourceMod:
// "<SteamID, !IP or name>" "[immunity:]<flags or @group>" ["password"]"STEAM_0:1:1111111" "99:z" // owner"STEAM_0:0:2222222" "@Senior Admin" // flags and immunity from the group"STEAM_0:1:3333333" "40:bcdefgjk" // admin without rcon or cvars"STEAM_0:0:4444444" "20:bcj" // moderator: kick and chat"!127.0.0.1" "z" // local tools only"Night Shift Tom" "bcj" "a-long-password"Правила:
- Иммунитет необязателен.
"bcj"без числа означает иммунитет 0. @Group Nameвместо флагов берёт всё из этой группы вadmin_groups.cfg, включая её иммунитет.- Поле пароля применяется только к записям по нику.
- Комментарии начинаются с
//, а одна пропущенная кавычка ломает весь файл. Если после правки администратор внезапно лишился всех прав, проверьте кавычки в каждой строке, затем поищите ошибку вaddons/sourcemod/logs/.
Группы, admins.cfg и групповой иммунитет#
Группы делают роли поддерживаемыми. Вы описываете «Moderator» один раз и меняете один раз.
Groups{ "Senior Admin" { "flags" "bcdefgijk" "immunity" "60" } "Moderator" { "flags" "bcj" "immunity" "20" "Overrides" { "sm_map" "deny" "sm_slap" "allow" } }}Затем администраторы ссылаются на группу - либо через @Moderator в admins_simple.ini, либо в admins.cfg:
Admins{ "Anna" { "auth" "steam" "identity" "STEAM_0:0:2222222" "group" "Senior Admin" } "Jan" { "auth" "steam" "identity" "STEAM_0:1:5555555" "group" "Moderator" "flags" "k" }}Jan получает флаги Moderator плюс k для голосований. Флаги групп и флаги из собственной записи администратора складываются.
У группового иммунитета две формы. Число применяется к членам группы, только если оно выше уже имеющегося у них иммунитета, так что группа может поднять иммунитет, но не понизить. Значение в виде `@GroupName` делает членов группы защищёнными именно от этой группы, независимо от чисел, - полезно для правила «модераторы никогда не могут действовать против старших администраторов», даже если кто-то потом по ошибке даст модератору высокое число.
Блок Overrides в группе разрешает или запрещает конкретные команды для её членов. Флаги он не меняет: в примере модераторам запрещён sm_map, даже если какая-то другая запись даёт им g, и разрешён sm_slap, хотя у них нет f.
Иммунитет: кто на кого может действовать#
Иммунитет определяет, может ли команда одного администратора затронуть другого администратора - кик, бан, slay. На обычных игроков он не влияет: у них иммунитета нет, и на них всегда можно действовать.
Поведение задаётся sm_immunity_mode в cfg/sourcemod.cfg:
| Значение | Поведение |
|---|---|
0 | Уровни иммунитета игнорируются, кроме иммунитета от конкретных групп |
1 | Защита только от администраторов с меньшим иммунитетом (по умолчанию) |
2 | Защита от администраторов с равным или меньшим иммунитетом |
3 | Как 2, но администраторы без иммунитета могут действовать друг против друга |
При значении по умолчанию 1 два модератора с иммунитетом 20 могут кикнуть друг друга, и ни один не может тронуть старшего администратора с 60. При 2 равные тоже защищены друг от друга, что подходит серверам, где в команде уже бывали конфликты. Root-администраторы (z) полностью игнорируют иммунитет - ещё одна причина давать z как можно меньшему числу людей.
Схема, которая подходит большинству сообществ:
| Роль | Флаги | Иммунитет |
|---|---|---|
| Владелец | z | 99 |
| Старший администратор | bcdefgijk | 60 |
| Администратор | bcdefjk | 40 |
| Модератор | bcj | 20 |
| Только резервный слот | a | 0 |
Оставляйте m, h, i и n у владельца, если только у конкретного человека нет конкретной потребности, и делайте промежутки между числами иммунитета, чтобы позже можно было добавить роль, не перенумеровывая всех.
Переопределения: какой флаг нужен для команды#
Плагины сами выбирают флаг по умолчанию для каждой команды. Когда он не подходит к структуре вашей команды, admin_overrides.cfg меняет его без правки плагина:
Overrides{ "sm_map" "k" // let vote-trusted staff change the map "sm_rcon" "z" // rcon only for root, not for flag m "sm_chat" "" // anyone can message admins}Пустая строка означает, что команду может использовать кто угодно. Имя, начинающееся с @, например "@CSDM" "m", - это группа команд, которую регистрируют некоторые плагины, чтобы несколько связанных команд можно было переопределить разом; если у плагина есть такая группа, её имя указано в документации.
Именно в переопределениях находится ответ на большинство вопросов «почему мой модератор может это делать?», поэтому оставляйте рядом с каждым короткий комментарий о том, зачем оно существует.
Проверка и решение проблем#
Команды, которые показывают, что на самом деле думает SourceMod:
sm_who // connected players and their admin flagssm_reloadadmins // re-read every admin filesm plugins list // confirm admin-flatfile.smx is loadedsm_dump_admcache // write the full admin cache to a file for inspectionУ администратора вообще нет прав. SteamID не совпадает (скопируйте его из status), в строке синтаксическая ошибка, или admin-flatfile.smx не загружен либо перемещён в plugins/disabled. Проверьте addons/sourcemod/logs/ на ошибки разбора.
Права работают после смены карты, но не сразу. Вы отредактировали файл, но не выполнили sm_reloadadmins.
Администратор может кикнуть другого администратора, которого не должен. Их иммунитет равен, а sm_immunity_mode стоит в 1. Поднимите иммунитет одному, переключитесь на режим 2 или используйте групповой иммунитет через @GroupName.
Команда плагина отказывает администратору, у которого есть нужный флаг. У него нет b, или переопределение изменило требуемый флаг. Посмотрите в admin_overrides.cfg и в блок Overrides его группы.
У кого-то есть права, которых вы не выдавали. Проверьте и admins_simple.ini, и admins.cfg, каждую группу, в которую он входит, и таблицы SQL-администраторов, если вы их используете. Если объяснения всё равно нет, считайте это взломом - порядок действий есть в статье что делать, если ваш сервер взломали.
Действия администраторов, логи и видимость#
SourceMod пишет действия администраторов в addons/sourcemod/logs/, по файлу на день, так что видно, кто кого кикнул или забанил и когда. Читайте их, когда игрок жалуется на кого-то из команды, и иногда - когда никто не жалуется.
sm_show_activity в cfg/sourcemod.cfg управляет тем, как действия администраторов объявляются в игре. Это сумма значений: 1 показывает действия не-администраторам анонимно, 2 добавляет для них имена администраторов, 4 показывает действия администраторам анонимно, 8 добавляет имена для администраторов, а 16 всегда показывает имена root-администраторам. Значение по умолчанию 13 означает, что игроки видят, что «администратор» что-то сделал, а администраторы видят, кто именно. Многие сообщества ставят 15, чтобы игроки видели, какой администратор действовал, - это отбивает охоту злоупотреблять.
На RE:NODE консоль панели выполняет каждую из этих команд без RCON-клиента, а субпользователям можно дать доступ к консоли без доступа к файлам - так модератор может выполнить sm_reloadadmins или посмотреть sm_who, не имея возможности редактировать файлы администраторов. У Team Fortress 2, Garry's Mod и Counter-Strike 1.6 есть собственные страницы в разделе игровых серверов, а установка SourceMod с нуля описана в статье плагины SourceMod для Team Fortress 2.
FAQ#
В чём разница между флагом b и флагом z?
b делает человека администратором без каких-то особых полномочий; каждый другой флаг добавляет конкретную возможность. z - это все флаги сразу, включая флаги, которые плагины добавят позже, и он игнорирует иммунитет. Давайте b всей команде, а z - владельцу.
Можно ли дать администратору доступ только к одной команде?
Да. Дайте ему b, затем используйте блок Overrides в группе с "command" "allow" или измените в admin_overrides.cfg требуемый флаг команды на пользовательский флаг, который есть только у него.
Защищает ли иммунитет администраторов от голосований?
Сам по себе нет. Иммунитет применяется к админ-командам, направленным на игрока. Может ли голосование за кик убрать администратора, зависит от плагина голосований, и многие из них проверяют иммунитет или флаги отдельно.
Использовать admins_simple.ini или admins.cfg?
admins_simple.ini - для нескольких администраторов на одном сервере. admins.cfg с группами - когда появились роли. База данных - когда несколько серверов делят одну команду.
Почему администратор сохраняет права после удаления?
Кеш администраторов всё ещё загружен. Выполните sm_reloadadmins и проверьте, не описан ли он ещё и в другом файле администраторов или в SQL-схеме на основе групп.




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