RE:NODE

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

Squad: Server.cfg, админы и баны

Как правильно настроить персонал и правила сервера Squad: папка ServerConfig по файлам, группы админов и права, баны, резервные слоты, удалённые списки и ротации.

0 прочтений

Сервер Squad настраивается через папку небольших текстовых файлов в SquadGame/ServerConfig/, и два из них определяют, как на самом деле живёт ваше сообщество: Server.cfg (название, слоты, правила команд, режим ротации) и Admins.cfg (кто что может делать). Заведите в Admins.cfg несколько групп, дав каждой роли только те права, которые ей нужны, впишите в них SteamID64, выделите участникам резервные слоты через право reserve, храните баны в Bans.cfg или в общем удалённом списке и выберите режим ротации LayerList, чтобы вечер шёл так, как вы его спланировали. Редактируйте файлы при остановленном сервере, перезапускайте его и проверяйте по логу, что каждый файл загрузился.

Это руководство - про эксплуатационную половину работы с Squad: структура персонала, список прав с разбором каждого флага, баны и апелляции, удалённые списки админов и банов для сообществ с несколькими серверами и файлы ротации. Установка сервера, порты, лицензия и tick rate описаны в статье хостинг сервера Squad, а моды и подробные правила именования слоёв - в статье моды и слои Squad.

Папка ServerConfig по файлам#

Всё, о чём идёт речь в этом руководстве, лежит в одной папке. Точный набор файлов меняется между крупными версиями Squad - файлы переименовывают, объединяют или убирают, - поэтому считайте список ниже картой, а папку на своём сервере - местностью.

ФайлЧто в нёмКто его правит
Server.cfgНазвание, слоты, очередь, правила команд, режим ротации, правила тимкилловВладелец
Admins.cfgГруппы прав и SteamID в каждой из нихВладелец, главный админ
Bans.cfgЛокальные баны, их дописывают команды банаСервер, админы
RemoteAdminListHosts.cfgURL списков админов, загружаемых при стартеВладелец
RemoteBanListHosts.cfgURL списков банов, загружаемых при стартеВладелец
LayerRotation.cfgУпорядоченный список слоёв для режима LayerListВладелец, команда по картам
LevelRotation.cfgСписок карт для режима LevelListВладелец
ExcludedLayers.cfg, ExcludedLevels.cfg, ExcludedFactions.cfgТо, что никогда не выбираетсяВладелец
VoteConfig.cfgПравила голосования в конце раундаВладелец
ServerMessages.cfgСтроки, которые рассылаются по таймеруЛюбой доверенный человек
Motd.cfgСообщение дняЛюбой доверенный человек
Rcon.cfgПароль и порт RCONТолько владелец
License.cfgID и ключ лицензии, если она естьТолько владелец

Ко всем этим файлам относятся три правила. Комментарии начинаются с //. Файл, который сервер не узнаёт, молча игнорируется, поэтому файл с опечаткой в имени ничем не отличается от пустого. И большую часть этих файлов сервер читает при запуске, так что надёжный порядок действий такой: остановить, отредактировать, запустить, проверить лог. Некоторые версии умеют перечитывать часть конфигурации по админской команде, но только перезапуск ведёт себя одинаково на любой сборке.

У панельного хостинга вся папка доступна через редактор в браузере и по SFTP. Полезная привычка - держать копию папки вне сервера и сравнивать с ней после каждого обновления, потому что обновление Squad может принести новый файл по умолчанию, который тихо ляжет рядом с вашим. Как скачать папку к себе на компьютер, рассказано в статье SFTP и файловый менеджер.

Server.cfg: настройки, которые формируют сообщество#

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

SquadGame/ServerConfig/Server.cfg
ServerName="Longshot Tactical | EU | Comms Required"ShouldAdvertise=trueMaxPlayers=80NumReservedSlots=6PublicQueueLimit=25MapRotationMode=LayerListRandomizeAtStart=falseUseVoteLevel=falseUseVoteLayer=falseUseVoteFactions=falseAllowTeamChanges=truePreventTeamChangeIfUnbalanced=trueNumPlayersDiffForTeamChanges=3RejoinSquadDelayAfterKick=180TKAutoKickEnabled=trueAutoTKBanNumberTKs=7AutoTKBanTime=300AllowCommunityAdminAccess=true

Слоты и очередь. MaxPlayers - это общее число мест, а NumReservedSlots вычитается из него, а не добавляется сверху. Сервер на 80 мест с шестью резервными слотами пускает 74 человека из публики; когда он заполнен, следующий публичный игрок ждёт в очереди длиной до PublicQueueLimit, а тот, у кого есть право reserve, занимает одно из шести придержанных мест. Если в пиковое время онлайн больше постоянных игроков, чем резервных слотов, участники будут стоять в общей очереди, поэтому подбирайте NumReservedSlots по реальному пику, а не по размеру списка. Параметр запуска FIXEDMAXPLAYERS - жёсткий потолок над всем этим: если он меньше MaxPlayers, побеждает он.

Правила команд. PreventTeamChangeIfUnbalanced вместе с NumPlayersDiffForTeamChanges=3 не даёт складывать сильных в одну команду, не запрещая переходы вовсе. RejoinSquadDelayAfterKick - сколько действует кик от сквад-лидера; 180 секунд хватает, чтобы закончить спор, не наказывая выкинутого игрока до конца раунда.

Тимкиллы. TKAutoKickEnabled включает автоматическую обработку, AutoTKBanNumberTKs - число убийств своих за раунд, после которого она срабатывает, а AutoTKBanTime - длительность бана в минутах. Семь - мягкое значение для ротации с большим количеством техники, где дружественный огонь от машин обычное дело; на пехотном сервере его стоит снизить.

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

Admins.cfg: сначала группы, потом люди#

В Admins.cfg два вида строк. Строка Group= задаёт роль и перечисленные через запятую права, которые у неё есть. Строка Admin= помещает один SteamID64 в одну группу. Комментарий // в конце строки необязателен, но им стоит пользоваться, потому что через полгода никто не вспомнит, чей это ID 76561198087654321.

SquadGame/ServerConfig/Admins.cfg
Group=Owner:changemap,pause,cheat,private,balance,chat,kick,ban,config,cameraman,immune,manageserver,reserve,demos,teamchange,forceteamchange,canseeadminchatGroup=SeniorAdmin:changemap,balance,chat,kick,ban,cameraman,immune,reserve,teamchange,forceteamchange,canseeadminchatGroup=Admin:chat,kick,ban,cameraman,reserve,teamchange,forceteamchange,canseeadminchatGroup=Moderator:chat,kick,reserve,canseeadminchatGroup=Member:reserveAdmin=76561198012345678:Owner // Mira, server ownerAdmin=76561198087654321:SeniorAdmin // DaxAdmin=76561198011112222:Admin // TheoAdmin=76561198033334444:Moderator // Kel, trialAdmin=76561198055556666:Member // patron

Названия прав и что каждое из них на самом деле даёт. Файл из поставки перечисляет их в комментариях в начале, и для вашей версии главный источник - именно этот список: Offworld добавляет новые флаги и убирает старые.

ПравоЧто оно разрешает
changemapМенять текущий или следующий слой, завершать матч
pauseСтавить игру на паузу
cheatЧитерские команды сервера. На живом сервере они никому не нужны
privateСтавить пароль на сервер
balanceИгнорировать ограничения баланса команд при переходе
chatАдминский чат и объявления на весь сервер
kickКикать игроков
banБанить игроков
configМенять конфигурацию сервера из игры
cameramanАдминская камера наблюдателя
immuneНельзя кикнуть или забанить, в том числе голосованием
manageserverВыключать сервер и другие команды управления его состоянием
reserveЗанимать резервный слот
demos, clientdemosЗаписывать демо на стороне сервера или клиента
debugОтладочный вывод и админская статистика
teamchangeПереходить в другую команду без таймера
forceteamchangeПереводить других игроков между командами
canseeadminchatВидеть админский чат, уведомления о тимкиллах и входе админов
featuretestТестовые функции разработчиков. Не выдавайте

Несколько решений здесь требуют размышления, а не копирования:

  • `cheat`, `config` и `manageserver` - только для группы владельца. Модератор на испытательном сроке, который может выключить сервер или поменять его конфигурацию из игры, - это модератор, который может положить сервер случайно или нарочно в день ухода.
  • `immune` - это заявление о доверии. Оно же означает, что никто другой из персонала не сможет быстро убрать этого человека. Выдавайте его как можно меньшему числу людей.
  • `private` меняет сам сервер. На лицензированном сервере пароль нарушает условия лицензии. На лицензированном сервере не включайте его ни в одну группу.
  • `canseeadminchat` - самое дешёвое полезное право. Даже модераторы без права бана должны видеть уведомления о тимкиллах и админский чат, потому что именно так персонал координируется во время живого раунда.

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

Как получить правильный SteamID

Каждой строке Admin= нужен SteamID64 - 17-значное число, начинающееся с 7656119. Не кастомный URL профиля и не короткий формат Steam3. Надёжный источник - сам сервер: попросите человека один раз зайти, затем выполните ListPlayers через RCON или найдите строку о его входе в логе. Неверный ID не вызывает ошибки - у человека просто нет полномочий, - поэтому если новый админ говорит, что ничего не работает, первым делом проверьте цифры.

Резервные слоты и вайтлисты для участников#

Когда сообщество говорит, что хочет вайтлист в Squad, почти всегда имеется в виду одно из двух разных, и сервер обрабатывает их по-разному.

  1. Приоритет для участников. Участники проходят мимо общей очереди, когда сервер заполнен. Это право reserve в группе Member плюс NumReservedSlots в Server.cfg, ровно как показано выше. Без плагинов и внешних инструментов.
  2. Только для участников. Никто без ID из списка вообще не может зайти. Встроенного переключателя для такого списка разрешённых в Squad нет. Грубо это решает пароль (и он несовместим с лицензией); инструмент вроде SquadJS может через RCON кикать не-участников при входе. На лицензированном сервере это вообще запрещено, так как сервер должен оставаться публичным.

В первом случае эксплуатационная ловушка - размер. Патроны и участники накапливаются, список никто не чистит, и через два года в Admins.cfg четыреста строк Member для людей, которые давно не играют. Серверу это не вредит, но файл становится нечитаемым, а строки персонала легко пропустить. Держите участников в отдельном удалённом списке, описанном ниже, а персонал - в локальном файле.

Баны, апелляции и файл банов#

Баны, выданные в игре или через RCON командами AdminBan или AdminBanById, дописываются в Bans.cfg. В каждой строке - SteamID64 забаненного и срок окончания, где 0 означает навсегда, а за ними комментарий //, куда команда записывает причину и, в свежих версиях, кто выдал бан. Прежде чем писать строку руками, посмотрите на строку, которую записал сервер, потому что точный формат менялся между версиями, а некорректная строка пропускается.

Длительность бана в командах задаётся числом с единицей измерения; 0 - навсегда. Предпочитайте формы ById с числовым id из ListPlayers:

code
ListPlayersAdminBanById 17 7d Repeated teamkilling after warningsAdminKickById 23 AFK in squad leadAdminWarnById 31 Stop mic-spamming in command chat

Система банов, которая работает на сообщество, а не просто существует, обладает тремя свойствами:

  • Причина конкретная. "Токсичный" - это не причина, которую кто-то сможет разобрать через три недели. "Многократные тимкиллы на базе, три предупреждения" - причина.
  • Есть способ подать апелляцию. Канал в Discord или форма, где тот, кто рассматривает апелляцию, видит причину бана. Большинство банов должны быть временными, а постоянные должны требовать второго админа.
  • Есть доказательства. Squad умеет записывать демо (RecordDemos и право demos), а SquadJS или парсер логов может хранить запись убийств, тимкиллов и действий админов. Как выстроить остальную часть процесса, разобрано в статье правила сервера, модерация и персонал.

Чтобы снять бан, удалите его строку из Bans.cfg при остановленном сервере или воспользуйтесь командой разбана, которая есть в вашей версии, через RCON. Затем перезапустите сервер и убедитесь, что строки нет, потому что сервер перезаписывает файл при выключении.

Удалённые списки админов и банов для сообществ с несколькими серверами#

Как только у сообщества появляется второй сервер, две копии Admins.cfg расходятся в течение месяца. Ответ Squad на это - файлы удалённых списков: каждая строка в RemoteAdminListHosts.cfg - это URL, по которому отдаётся текстовый файл в формате Admins.cfg, а каждая строка в RemoteBanListHosts.cfg - URL, по которому отдаётся список банов. Сервер загружает их при старте и объединяет с локальными файлами.

SquadGame/ServerConfig/RemoteAdminListHosts.cfg
https://lists.example-community.org/squad/admins.cfghttps://lists.example-community.org/squad/members.cfg
публикуетHTTPS fetchHTTPS fetchИнструмент персоналаправит списокСтатический хостингadmins.cfg, баныСервер Squad 1загружает при стартеСервер Squad 2загружает при старте
Один список персонала, много серверов Squad

Что нужно знать, прежде чем на это полагаться:

  • Список загружается при старте. Добавление админа в удалённый список ничего не даёт, пока каждый сервер не перезапустится, поэтому дополните это ежедневным плановым перезапуском.
  • URL - это граница безопасности. Любой, кто может изменить файл по этому адресу, может сделать себя владельцем на каждом вашем сервере. Размещайте его там, куда может писать только владелец, по HTTPS, и не используйте paste-сайты.
  • Разделяйте списки по назначению. Один файл для персонала, другой для участников. Файл персонала меняется редко и проверяется тщательно; файл участников меняется каждую неделю и может генерироваться скриптом из ролей в Discord или списка патронов.
  • Если хостинг списка недоступен, серверы стартуют без него. Держите группу владельца в локальном Admins.cfg на каждом сервере, чтобы упавший хостинг списков никогда не закрыл вам доступ к собственному серверу.

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

Ротации, голосования и сообщения, которые видят игроки#

MapRotationMode выбирает, какой файл ротации используется:

ЗначениеЧитаетПоведение
LayerListLayerRotation.cfgРовно те слои, которые вы перечислили, по порядку
LayerList_RandomizedLayerRotation.cfgВаши слои в случайном порядке
LevelListLevelRotation.cfgВы называете карты, слой выбирает игра
LevelList_RandomizedLevelRotation.cfgКарты вперемешку, слои выбирает игра

Для сервера сообщества режим, который даёт контроль, - это LayerList с RandomizeAtStart=false. Можно чередовать слои с тяжёлой техникой и пехотные, что и играется лучше, и держит tick rate ровнее на протяжении вечера, а любимую карту постоянных игроков можно поставить на пиковое время. Свежие версии также принимают два тега фракций после имени слоя, чтобы зафиксировать противостояние для этой записи; перед использованием проверьте точный формат в комментариях к вашему LayerRotation.cfg из поставки, а правила именования и ловушка с тихим пропуском слоёв описаны в статье моды и слои Squad.

Голосование управляется переключателями UseVote* в Server.cfg и правилами в VoteConfig.cfg, который заменил старый файл исключений для фракций. Голосование популярно, и у него есть один предсказуемый эффект: ротация постепенно сжимается до трёх слоёв, которые выигрывают каждое голосование. Если вы его включаете, используйте ExcludedLayers.cfg, чтобы слои, которые вы никогда не хотите предлагать, вообще не попадали в голосование.

ServerMessages.cfg содержит по одному сообщению на строку, они рассылаются по порядку каждые ServerMessageInterval секунд. Ограничьтесь тремя-четырьмя строками: ссылка на правила, приглашение в Discord, правило, которое нарушают чаще всего. Motd.cfg показывается при входе и может быть длиннее. Оба файла читаются при старте.

RCON, админские инструменты и контроль изменений#

Rcon.cfg хранит пароль и порт RCON. RCON работает по TCP и даёт полную власть консоли за паролем, который передаётся по сети открытым текстом, поэтому используйте длинный случайный пароль, нигде больше не применяемый, и по возможности ограничьте доступ к порту по адресу источника. Подробнее - в статье безопасный RCON.

Большинство устоявшихся сообществ Squad используют SquadJS - открытый фреймворк, который подключается через RCON и читает лог сервера, давая логирование в Discord, автоматическую балансировку команд, правила сидинга, логи админской камеры и подобные плагины. Он стоит того прежде всего по одной причине: он даёт долговечную запись действий админов, а именно это делает апелляции по банам честными. Дайте ему собственный пароль RCON, если ваша версия поддерживает несколько, и обращайтесь с его конфигурационным файлом как с секретом.

Контроль изменений звучит бюрократично для игрового сервера, но избавляет от настоящих споров:

  1. Храните папку ServerConfig в приватном Git-репозитории или хотя бы в копиях с датами.
  2. Делайте по одному изменению за раз, перезапускайте сервер и проверяйте в логе, что каждый файл загрузился.
  3. Записывайте в канал персонала, что изменилось и зачем.
  4. Делайте backup папки перед каждым обновлением Squad и каждой переделкой ротации. Почему проверка восстановления важнее самой копии, объясняет статья бэкапы, которые действительно восстанавливаются.

В панели ежедневный перезапуск настраивается во вкладке Schedules, и именно он делает так, что удалённые списки и новые админы начинают действовать без чьего-либо входа на сервер. Субпользователи только с доступом к файлам - правильный способ дать команде по картам править LayerRotation.cfg, не отдавая ей Rcon.cfg.

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

У нового админа нет полномочий. Неверный SteamID64, имя группы в строке Admin= не совпадает в точности со строкой Group= или сервер не перезапускался после правки. Имена групп чувствительны к регистру.

Резервные слоты не работают. В группе игрока нет reserve или NumReservedSlots равен 0. Также проверьте, что сервер действительно заполнен - резерв имеет значение только при полной загрузке.

Баны пропадают после перезапуска. Файл правили при работающем сервере, и при выключении он был перезаписан, либо написанная вручную строка не соответствует формату, который ожидает сервер.

Удалённые админы не загружаются. URL делает редирект, отдаёт HTML вместо простого текста или требует аутентификации. Загрузите его через curl из shell и посмотрите, что именно приходит в ответ.

Ротация крутит две карты по кругу. Имена слоёв в LayerRotation.cfg после обновления перестали существовать и были пропущены. Сверьтесь с текущим списком слоёв.

Сообщения сервера не появляются. ServerMessageInterval равен 0, файл пуст или сохранён в кодировке, которую сервер не может прочитать. Сохраните его как обычный UTF-8.

FAQ#

Как добавить админа на сервер Squad?

Добавьте строку Admin=<SteamID64>:<GroupName> в SquadGame/ServerConfig/Admins.cfg, где группа определена строкой Group= в том же файле, затем перезапустите сервер. Берите SteamID64 из ListPlayers или лога сервера, а не из URL профиля.

Чем группа модератора отличается от группы админа?

Ничем встроенным - сервер знает только права. Группа модератора - это тот набор, который вы ей дали; разумный вариант содержит chat, kick, reserve и canseeadminchat, но не ban, changemap или immune.

Можно ли сделать сервер Squad только для участников?

Встроенным переключателем - нет. Можно дать участникам приоритет через reserve и резервные слоты, поставить пароль или поручить инструменту на RCON кикать не-участников при входе. Лицензированный сервер должен оставаться публичным, так что вариант "только для участников" там невозможен.

Нужен ли перезапуск после изменения Admins.cfg?

Рассчитывайте, что да. Большинство файлов ServerConfig читаются при старте, и перезапуск - единственный способ, который ведёт себя одинаково во всех версиях. Удалённые списки тоже загружаются при старте.

Как сделать общие баны для двух серверов Squad?

Разместите файл со списком банов по HTTPS-адресу, куда можете писать только вы, и укажите этот URL в RemoteBanListHosts.cfg на обоих серверах. Каждый сервер загружает его при старте и объединяет со своим локальным Bans.cfg.

Почему мой модератор может завершить раунд?

В его группе есть changemap или manageserver. Уберите оба права из всех групп ниже старшего админа, перезапустите сервер и проверьте с аккаунта модератора.


Комментарии

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

0/2000