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

> El furgón policial: sirena, cuatro asientos para presos y la API para police jobs.

El RCO Enforcer es un furgón policial negro con una caja para presos detrás. Se vende en el concesionario de RCO Vehicles como todo vehículo RCO (ver [Resumen](https://rust-co.mintlify.site/es/rco-vehicles/overview.md)).

## Asientos

Seis asientos: el conductor, un pasajero delante y cuatro presos en la caja, en dos bancos enfrentados.

Detrás del furgón hay un solo prompt para la caja. Cada jugador que lo pulsa recibe el siguiente asiento libre, de la cabina hacia las puertas, y sube por las dos puertas traseras. Un asiento ocupado nunca se ofrece.

## Sirena

El conductor pulsa **G** para encender la sirena y **G** otra vez para apagarla. Usa la tecla de la bocina: el Enforcer no tiene bocina. El rotor gira, la lámpara roja se enciende y todos cerca la oyen. La sirena se apaga cuando el conductor baja.

En el `config/config.lua` del Enforcer:

| Opción | Qué hace | Por defecto |
| - | - | - |
| `Config.Sound.Volume` | Volumen de todo el furgón (0 a 1) | `0.5` |
| `Config.Sound.Effects.siren` | Volumen de la sirena (0 a 1) | `0.5` |
| `Config.Sound.SirenRange` | Hasta dónde se oye la sirena, en metros | `160.0` |

## API para police jobs

Tu police job puede meter a un jugador en la caja: esposado no puede caminar, así que la propia animación del furgón lo lleva desde detrás hasta su asiento. Los exports se ejecutan en el **cliente del preso**. Tu job decide en su servidor quién puede arrestar a quién (trabajo, distancia, esposas); el Enforcer confía en esa comprobación.

| Export (client) | Qué hace | Devuelve |
| - | - | - |
| `PutInBack(vehicle, held)` | Mete a este jugador en el siguiente asiento de preso libre. `vehicle` es la entidad o el network id del furgón; sin él, vale el Enforcer cuya parte trasera está a menos de 6 m. `held` (por defecto `true`): no puede salir solo. | El asiento (`1` a `4`), o `false` si está lleno, lejos o volcado |
| `TakeOutOfBack()` | Suelta a este jugador; baja por las puertas traseras. | `true` si estaba en un asiento de preso |
| `IsHeldInBack()` | Si este jugador está retenido en la caja. | `true` / `false` |

```lua theme={"dark"}
-- cliente del policía: el Enforcer que eligió
TriggerServerEvent('myjob:server:putInEnforcer', targetId, NetworkGetNetworkIdFromEntity(enforcer))

-- servidor (tu police job): comprueba al policía, la distancia y las esposas, luego
RegisterNetEvent('myjob:server:putInEnforcer', function(targetId, netId)
    TriggerClientEvent('myjob:client:putInEnforcer', targetId, netId)
end)

-- cliente del preso
RegisterNetEvent('myjob:client:putInEnforcer', function(netId)
    local seat = exports['rco-enforcer']:PutInBack(netId) -- sin network id: el Enforcer cuya parte trasera está a menos de 6 m
    if not seat then
        -- sin asiento: el Enforcer está lleno o lejos
    end
end)

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

> [!NOTE]
>
> `PutInBack` detiene la animación actual del jugador (la pose de esposado) para que suene la de subir. Vuelve a poner la pose de esposado después si tu job usa una. El cierre del furgón no impide el export. El preso sigue saliendo de la caja si muere o si el furgón se guarda.

> [!TIP]
>
> En el paquete **RCO Cars** todos los coches están en un solo recurso: llama a `exports['rco-cars']:PutInBack(...)`.


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