Централизованный запрет

Что это?

Централизованная блокировка — это (новая!) функция выделенного сервера Rust, которая позволяет владельцам серверов создавать синхронизированный внешний список блокировок, которым можно делиться на нескольких серверах.

Как мне это использовать?

Вам понадобится веб-сервер (HTTP или HTTPS), на котором будет размещён централизованный API для блокировки. Мы не предоставляем реализацию этого API, но его относительно просто реализовать. Некоторые сторонние реализации перечислены в разделе «Часто задаваемые вопросы» ниже.

Чтобы включить его на своём сервере, просто установите переменную server.bansServerEndpoint на конечную точку API вашего веб-сервера. Например:

server.bansServerEndpoint "https://domain.tld/api/rustBans/"

После настройки выделенный сервер Rust будет запрашивать эту конечную точку API, чтобы проверить, не забанены ли игроки на момент их подключения к серверу.

Подробности об API

Если для server.bansServerEndpoint задано что-то вроде «https://domain.tld/api/rustBans/», ваш веб-сервер будет получать подобные запросы от выделенного сервера Rust.

GET /api/rustBans/{steamID64}

Возвращает статус блокировки для 64-битного SteamID в формате JSON.

Примечание: URI для этого запроса генерируется путем добавления 64-битного идентификатора Steam к значению server.bansServerEndpoint. Это означает, что вы можете установить server.bansServerEndpoint на "https://domain.tld/api/rustBans?steamId=", и идентификатор Steam будет передан в параметрах URL, как и ожидалось. Если ваша строка не заканчивается на / или /.=

Пример ответа:

{ "steamId": "76561197960287930", "reason": "определенно не мошенничество", "expiryDate": 1608611830 }
Поле Описание
SteamID 64-битный идентификатор Steam, для которого применяется блокировка. Это используется для проверки работоспособности API, чтобы убедиться, что он возвращает правильные блокировки.
reason Причина блокировки. Она будет показана игроку при подключении к серверу.
expiryDate Отметка времени в формате Unix, которая определяет срок действия бана. Она будет использоваться для отображения оставшегося срока действия бана для игрока при подключении к серверу. Значения меньше или равные нулю указывают на то, что бан является постоянным.

Выделенный сервер Rust также проверит код ответа веб-сервера:

Код состояния Значение
2xx Коды успешного выполнения (2xx) требуют, чтобы в теле ответа использовался описанный выше формат JSON.
404 Не найдено означает, что запрошенный 64-битный SteamID не заблокирован.
Other Перенаправления должны обрабатываться Unity, но коды ошибок приведут к сбою (см. server.bansServerFailureMode convar в разделе часто задаваемых вопросов)

Вопросы и ответы

Будут ли игроки удаляться с серверов, когда на конечную точку будет добавлен бан?

Нет, централизованный бан только не позволит игрокам заходить на сервер. Если вы хотите, чтобы их немедленно удалили с сервера, вам нужно будет использовать команду kick на том сервере, на котором они находятся.

Что происходит, когда конечная точка API не работает или не работает должным образом?

При возникновении ошибки в централизованной системе блокировки на консоли выделенного сервера Rust будет отображаться сообщение. Отдельный параметр (server.bansServerFailureMode) определяет, что происходит с игроками, которые не прошли проверку:

bansServerFailureMode Value Значение
0 Игроки допускаются на сервер при возникновении ошибки (сообщение регистрируется в консоли сервера)
1 Игрокам отказывают в подключении к серверу при возникновении ошибки (сообщение регистрируется в консоли сервера и отображается игроку)

Время ожидания запросов к моей конечной точке API истекает. Что я могу сделать?

Тайм-аут по умолчанию для всех централизованных запросов на блокировку составляет пять секунд. Этого должно быть более чем достаточно, но если возникают проблемы, вы можете изменить это значение с помощью server.bansServerTimeout переменной (значение указывается в секундах). Имейте в виду, что чем дольше выполняются запросы, тем дольше игрокам придется ждать подключения к вашему серверу. Вместо увеличения тайм-аута попробуйте ускорить свой API.

Нужно ли мне перезапускать мой сервер после изменения какого-либо из параметров?

Вам не нужно перезапускать сервер после изменения bansServerEndpointbansServerFailureMode, или bansServerTimeout. Однако игроки, уже находящиеся на сервере, не будут удалены при включении или изменении bansServerEndpoint.

Я управляю Rust-серверами и хочу использовать централизованный бан, но я не знаю ни одного программиста. Есть ли какие-нибудь общедоступные реализации?

API спроектирован таким образом, что его можно использовать даже при наличии только HTTP-сервера. Вы можете загружать файлы JSON в папку и считывать их с помощью Rust-сервера — это менее удобно, потому что будет сложно управлять всеми файлами, но это всё равно будет работать.

Ниже приведен список известных реализаций, которые вы, возможно, сможете использовать: