> ## 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

> Le fourgon de police : sirène, quatre places pour prisonniers et l'API pour les police jobs.

Le RCO Enforcer est un fourgon de police noir avec une cellule à l'arrière. Il est vendu chez le concessionnaire RCO Vehicles comme tout véhicule RCO (voir [Présentation](https://rust-co.mintlify.site/fr/rco-vehicles/overview.md)).

## Places

Six places : le conducteur, un passager à l'avant et quatre prisonniers dans la cellule, sur deux bancs face à face.

Derrière le fourgon, il n'y a qu'un seul prompt pour la cellule. Chaque joueur qui l'utilise reçoit la place libre suivante, de la cabine vers les portes, et monte par les deux portes arrière. Une place occupée n'est jamais proposée.

## Sirène

Le conducteur appuie sur **G** pour allumer la sirène et de nouveau sur **G** pour l'éteindre. Elle prend la touche du klaxon : l'Enforcer n'a pas de klaxon. Le rotor tourne, la lampe rouge s'allume et tout le monde l'entend aux alentours. La sirène s'éteint quand le conducteur descend.

Dans le `config/config.lua` de l'Enforcer :

| Option | Rôle | Par défaut |
| - | - | - |
| `Config.Sound.Volume` | Volume de tout le fourgon (0 à 1) | `0.5` |
| `Config.Sound.Effects.siren` | Volume de la sirène (0 à 1) | `0.5` |
| `Config.Sound.SirenRange` | Distance à laquelle on entend la sirène, en mètres | `160.0` |

## API pour les police jobs

Votre police job peut mettre un joueur dans la cellule : menotté, il ne peut pas marcher, donc l'animation du fourgon l'emmène de l'arrière jusqu'à sa place. Les exports s'exécutent sur le **client du prisonnier**. Votre job décide sur son serveur qui peut arrêter qui (métier, distance, menottes) ; l'Enforcer fait confiance à cette vérification.

| Export (client) | Rôle | Retour |
| - | - | - |
| `PutInBack(vehicle, held)` | Met ce joueur à la place de prisonnier libre suivante. `vehicle` est l'entité ou le network id du fourgon ; sans lui, l'Enforcer dont l'arrière est à moins de 6 m. `held` (par défaut `true`) : il ne peut pas sortir seul. | La place (`1` à `4`), ou `false` si le fourgon est plein, trop loin ou renversé |
| `TakeOutOfBack()` | Libère ce joueur ; il descend par les portes arrière. | `true` s'il était à une place de prisonnier |
| `IsHeldInBack()` | Si ce joueur est retenu dans la cellule. | `true` / `false` |

```lua theme={"dark"}
-- client du policier : l'Enforcer qu'il a choisi
TriggerServerEvent('myjob:server:putInEnforcer', targetId, NetworkGetNetworkIdFromEntity(enforcer))

-- serveur (votre police job) : vérifiez le policier, la distance et les menottes, puis
RegisterNetEvent('myjob:server:putInEnforcer', function(targetId, netId)
    TriggerClientEvent('myjob:client:putInEnforcer', targetId, netId)
end)

-- client du prisonnier
RegisterNetEvent('myjob:client:putInEnforcer', function(netId)
    local seat = exports['rco-enforcer']:PutInBack(netId) -- sans network id : l'Enforcer dont l'arrière est à moins de 6 m
    if not seat then
        -- pas de place : l'Enforcer est plein ou trop loin
    end
end)

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

> [!NOTE]
>
> `PutInBack` arrête l'animation en cours du joueur (la pose menottée) pour jouer la montée. Remettez la pose menottée ensuite si votre job en utilise une. Le verrouillage du fourgon n'empêche pas l'export. Le prisonnier sort quand même de la cellule s'il meurt ou si le fourgon est rangé.

> [!TIP]
>
> Dans le pack **RCO Cars**, toutes les voitures sont dans une seule ressource : appelez `exports['rco-cars']:PutInBack(...)`.


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