> ## Documentation Index
> Fetch the complete documentation index at: https://rust-co.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Enforcer

> Полицейский фургон: сирена, четыре места для заключённых и API для police jobs.

RCO Enforcer — чёрный полицейский фургон с отсеком для заключённых сзади. Он продаётся у дилера RCO Vehicles, как и любой транспорт RCO (см. [Обзор](https://rust-co.mintlify.site/ru/rco-vehicles/overview.md)).

## Места

Шесть мест: водитель, один пассажир спереди и четыре заключённых в отсеке, на двух скамьях лицом друг к другу.

Сзади фургона есть один prompt для отсека. Каждый игрок, который его нажимает, получает следующее свободное место, от кабины к дверям, и забирается через двойные задние двери. Занятое место никогда не предлагается.

## Сирена

Водитель нажимает **G**, чтобы включить сирену, и ещё раз **G**, чтобы выключить. Она занимает клавишу гудка: у Enforcer нет гудка. Ротор вращается, красная лампа загорается, и все рядом её слышат. Сирена выключается, когда водитель выходит.

В `config/config.lua` фургона:

| Параметр | Что делает | По умолчанию |
| - | - | - |
| `Config.Sound.Volume` | Громкость всего фургона (0–1) | `0.5` |
| `Config.Sound.Effects.siren` | Громкость сирены (0–1) | `0.5` |
| `Config.Sound.SirenRange` | На каком расстоянии слышна сирена, в метрах | `160.0` |

## API для police jobs

Ваш police job может посадить игрока в отсек: в наручниках он не может идти, поэтому собственная анимация фургона ведёт его от задних дверей до места. Экспорты выполняются на **клиенте заключённого**. Ваш job на своём сервере решает, кто кого может арестовать (работа, расстояние, наручники); Enforcer доверяет этой проверке.

| Export (client) | Что делает | Возвращает |
| - | - | - |
| `PutInBack(vehicle, held)` | Сажает этого игрока на следующее свободное место заключённого. `vehicle` — сущность или network id фургона; без него берётся Enforcer, чья задняя часть ближе 6 м. `held` (по умолчанию `true`): сам он выйти не может. | Место (`1`–`4`) или `false`, если фургон полон, далеко или перевёрнут |
| `TakeOutOfBack()` | Освобождает игрока; он выходит через задние двери. | `true`, если он был на месте заключённого |
| `IsHeldInBack()` | Удерживается ли игрок в отсеке. | `true` / `false` |

```lua theme={"dark"}
-- клиент полицейского: выбранный им Enforcer
TriggerServerEvent('myjob:server:putInEnforcer', targetId, NetworkGetNetworkIdFromEntity(enforcer))

-- сервер (ваш police job): проверьте полицейского, расстояние и наручники, затем
RegisterNetEvent('myjob:server:putInEnforcer', function(targetId, netId)
    TriggerClientEvent('myjob:client:putInEnforcer', targetId, netId)
end)

-- клиент заключённого
RegisterNetEvent('myjob:client:putInEnforcer', function(netId)
    local seat = exports['rco-enforcer']:PutInBack(netId) -- без network id: Enforcer, чья задняя часть ближе 6 м
    if not seat then
        -- места нет: Enforcer полон или далеко
    end
end)

RegisterNetEvent('myjob:client:takeOutOfEnforcer', function()
    exports['rco-enforcer']:TakeOutOfBack()
end)
```

> [!NOTE]
>
> `PutInBack` останавливает текущую анимацию игрока (позу в наручниках), чтобы проиграть посадку. Если ваш job использует позу в наручниках, верните её после этого. Замок фургона не мешает экспорту. Заключённый всё равно покидает отсек, если умирает или фургон убирают в гараж.

> [!TIP]
>
> В наборе **RCO Cars** все машины находятся в одном ресурсе: вызывайте `exports['rco-cars']:PutInBack(...)`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.