Централизованные баны
Один список банов и мутов можно раздать нескольким серверам. Игровой сервер при входе спрашивает ваш адрес: забанен человек или нет. Это не страница заблокированных IP Facepunch. Здесь банят SteamID игрока, а не адрес машины.
Как это работает
Facepunch даёт только конвар и формат ответа. Сам сайт со списком вы поднимаете сами: подойдёт любой HTTP или HTTPS.
Адрес записывают так:
server.bansServerEndpoint "https://example.com/api/rust-bans/"Дальше при каждом входе сервер Раст спрашивает этот адрес и смотрит, есть ли бан или мут.
Настройка централизованных банов на сервере
Если endpoint заканчивается как в примере выше, сервер дописывает Steam64:
https://example.com/api/rust-bans/76561198000000000Steam64 приклеивается в конец строки. Если ваш API ждёт параметр, поставьте = в конце, и идентификатор уйдёт в запрос:
server.bansServerEndpoint "https://example.com/api/rust-bans?steamId="Если в конце нет ни /, ни =, сервер сам добавит /.
Пример ответа
Ответ на забаненный Steam64 — JSON:
{
"steamId": "76561198000000000",
"reason": "чит на бою",
"expiryDate": 1608611830,
"isMute": false
}Поля ответа
| Поле | Смысл |
|---|---|
steamId | Steam64, которого вы проверили. Сервер сверяет, что ответ про того же человека |
reason | текст, который человек увидит при отказе во входе |
expiryDate | UNIX-время, когда бан или мут кончается. 0 и отрицательные — без срока |
isMute | true — это мут, не бан. Срок мута берётся из expiryDate, 0 и ниже — мут постоянный |
Коды ответа (HTTP)
| Код | Как понимает сервер |
|---|---|
2xx | успех, в теле JSON как выше |
404 | этого Steam64 в списке нет, человек не забанен и не в муте |
| другой | редирект забирает Unity. Ошибка запускает режим сбоя server.bansServerFailureMode |
FAQ
В консоли сервера появится сообщение об ошибке проверки. Что делать с игроком в эту секунду, решает server.bansServerFailureMode:
| Значение | Поведение |
|---|---|
0 | пустить. Ошибка только в консоли |
1 | не пускать. Ошибка и в консоли, и у игрока |
Ждать ответ дольше 5 секунд сервер по умолчанию не будет. Свой предел в секундах:
server.bansServerTimeout 5Длинный таймаут заставляет человека висеть на экране входа. Быстрее починить API, чем раздувать ожидание.
server.bansServerEndpoint, server.bansServerFailureMode и server.bansServerTimeout подхватываются без рестарта. Те, кто уже играет, при включении списка не вылетят: проверка идёт на входе.
Тот же контракт закрывается папкой JSON-файлов на обычном HTTP, без программы. Файлами управлять неудобно, но сервер их читает.
Готовые реализации, если не писать API самим:
- RustCentralBanServer — бесплатно, GPL
- Centralized Banning на Codefling — бесплатно, MIT
- Server Armour — бесплатный и платный варианты
- Game Server Tools — платно
- Better BattleMetrics Bans — платный плагин
- Easy Admin — платный плагин
- AO Steam Bans — платный плагин