Сервер 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.cfg | URL списков админов, загружаемых при старте | Владелец |
RemoteBanListHosts.cfg | URL списков банов, загружаемых при старте | Владелец |
LayerRotation.cfg | Упорядоченный список слоёв для режима LayerList | Владелец, команда по картам |
LevelRotation.cfg | Список карт для режима LevelList | Владелец |
ExcludedLayers.cfg, ExcludedLevels.cfg, ExcludedFactions.cfg | То, что никогда не выбирается | Владелец |
VoteConfig.cfg | Правила голосования в конце раунда | Владелец |
ServerMessages.cfg | Строки, которые рассылаются по таймеру | Любой доверенный человек |
Motd.cfg | Сообщение дня | Любой доверенный человек |
Rcon.cfg | Пароль и порт RCON | Только владелец |
License.cfg | ID и ключ лицензии, если она есть | Только владелец |
Ко всем этим файлам относятся три правила. Комментарии начинаются с //. Файл, который сервер не узнаёт, молча игнорируется, поэтому файл с опечаткой в имени ничем не отличается от пустого. И большую часть этих файлов сервер читает при запуске, так что надёжный порядок действий такой: остановить, отредактировать, запустить, проверить лог. Некоторые версии умеют перечитывать часть конфигурации по админской команде, но только перезапуск ведёт себя одинаково на любой сборке.
У панельного хостинга вся папка доступна через редактор в браузере и по SFTP. Полезная привычка - держать копию папки вне сервера и сравнивать с ней после каждого обновления, потому что обновление Squad может принести новый файл по умолчанию, который тихо ляжет рядом с вашим. Как скачать папку к себе на компьютер, рассказано в статье SFTP и файловый менеджер.
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.
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, почти всегда имеется в виду одно из двух разных, и сервер обрабатывает их по-разному.
- Приоритет для участников. Участники проходят мимо общей очереди, когда сервер заполнен. Это право
reserveв группеMemberплюсNumReservedSlotsвServer.cfg, ровно как показано выше. Без плагинов и внешних инструментов. - Только для участников. Никто без ID из списка вообще не может зайти. Встроенного переключателя для такого списка разрешённых в Squad нет. Грубо это решает пароль (и он несовместим с лицензией); инструмент вроде SquadJS может через RCON кикать не-участников при входе. На лицензированном сервере это вообще запрещено, так как сервер должен оставаться публичным.
В первом случае эксплуатационная ловушка - размер. Патроны и участники накапливаются, список никто не чистит, и через два года в Admins.cfg четыреста строк Member для людей, которые давно не играют. Серверу это не вредит, но файл становится нечитаемым, а строки персонала легко пропустить. Держите участников в отдельном удалённом списке, описанном ниже, а персонал - в локальном файле.
Баны, апелляции и файл банов#
Баны, выданные в игре или через RCON командами AdminBan или AdminBanById, дописываются в Bans.cfg. В каждой строке - SteamID64 забаненного и срок окончания, где 0 означает навсегда, а за ними комментарий //, куда команда записывает причину и, в свежих версиях, кто выдал бан. Прежде чем писать строку руками, посмотрите на строку, которую записал сервер, потому что точный формат менялся между версиями, а некорректная строка пропускается.
Длительность бана в командах задаётся числом с единицей измерения; 0 - навсегда. Предпочитайте формы ById с числовым id из ListPlayers:
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, по которому отдаётся список банов. Сервер загружает их при старте и объединяет с локальными файлами.
https://lists.example-community.org/squad/admins.cfghttps://lists.example-community.org/squad/members.cfgЧто нужно знать, прежде чем на это полагаться:
- Список загружается при старте. Добавление админа в удалённый список ничего не даёт, пока каждый сервер не перезапустится, поэтому дополните это ежедневным плановым перезапуском.
- URL - это граница безопасности. Любой, кто может изменить файл по этому адресу, может сделать себя владельцем на каждом вашем сервере. Размещайте его там, куда может писать только владелец, по HTTPS, и не используйте paste-сайты.
- Разделяйте списки по назначению. Один файл для персонала, другой для участников. Файл персонала меняется редко и проверяется тщательно; файл участников меняется каждую неделю и может генерироваться скриптом из ролей в Discord или списка патронов.
- Если хостинг списка недоступен, серверы стартуют без него. Держите группу владельца в локальном
Admins.cfgна каждом сервере, чтобы упавший хостинг списков никогда не закрыл вам доступ к собственному серверу.
Для хостинга списков достаточно маленького статического сайта. Те же файлы можно генерировать ботом или из базы данных и выкладывать по расписанию - общая схема связки игрового сервера с инструментами, которыми ваше сообщество уже пользуется, показана в статье вебхуки Discord для статуса сервера.
Ротации, голосования и сообщения, которые видят игроки#
MapRotationMode выбирает, какой файл ротации используется:
| Значение | Читает | Поведение |
|---|---|---|
LayerList | LayerRotation.cfg | Ровно те слои, которые вы перечислили, по порядку |
LayerList_Randomized | LayerRotation.cfg | Ваши слои в случайном порядке |
LevelList | LevelRotation.cfg | Вы называете карты, слой выбирает игра |
LevelList_Randomized | LevelRotation.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, если ваша версия поддерживает несколько, и обращайтесь с его конфигурационным файлом как с секретом.
Контроль изменений звучит бюрократично для игрового сервера, но избавляет от настоящих споров:
- Храните папку
ServerConfigв приватном Git-репозитории или хотя бы в копиях с датами. - Делайте по одному изменению за раз, перезапускайте сервер и проверяйте в логе, что каждый файл загрузился.
- Записывайте в канал персонала, что изменилось и зачем.
- Делайте 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. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.