> ## Documentation Index
> Fetch the complete documentation index at: https://docs.thunder-studio.net/llms.txt
> Use this file to discover all available pages before exploring further.

# Ponts Clés véhicule

> Verrouiller et déverrouiller les véhicules avec un pont simple.

Les ponts clés véhicule abstraient la façon dont les différents scripts de clés verrouillent et déverrouillent les véhicules.\
Vos scripts appellent une fonction et TS-Lib route vers `qb-vehiclekeys`, `qs-vehiclekeys` ou une implémentation standalone.

```lua theme={null}
-- Shared
Bridge.VehicleKeys
Bridge.VehicleKeys.Client
Bridge.VehicleKeys.Server
```

***

## Statut et tests

| Système de clés  |    Statut    |             Testé par |
| :--------------- | :----------: | --------------------: |
| `qb-vehiclekeys` |   **Testé**  |       Thunder Scripts |
| `qs-vehiclekeys` | Expérimental | en attente de retours |
| `lfKeys`         |   **Testé**  |       Thunder Scripts |
| `standalone`     |   **Testé**  |       Thunder Scripts |

***

## Systèmes de clés pris en charge

TS-Lib embarque le support pour :

* `qb-vehiclekeys`
* `qs-vehiclekeys`
* `lfKeys`
* `standalone` (aucune ressource de clés externe)

Configuration dans `ts-lib/config.lua` :

```lua theme={null}
Config.VehicleKeys = 'auto' -- 'auto', 'qb-vehiclekeys', 'qs-vehiclekeys', 'lfKeys', 'standalone'

Config.Data = {
  VehicleKeys = {
    ['qb-vehiclekeys'] = 'qb-vehiclekeys',
    ['qs-vehiclekeys'] = 'qs-vehiclekeys',
    ['lfKeys']         = 'lfKeys',
    ['standalone']     = 'standalone',
  },
}
```

Quand `Config.VehicleKeys = 'auto'`, TS-Lib sélectionne la première ressource démarrée dans `Config.Data.VehicleKeys`.

***

## API côté client

### `Bridge.VehicleKeys.Client.Functions.SetDoorStatus(entity, lockStatus)`

Point d’entrée principal depuis vos scripts.

```lua theme={null}
Bridge.VehicleKeys.Client.Functions.SetDoorStatus(vehicle, 2) -- verrouiller
Bridge.VehicleKeys.Client.Functions.SetDoorStatus(vehicle, 1) -- déverrouiller
```

**Convention d’état de verrouillage** (natives GTA) :

* `1` – déverrouillé
* `2` – verrouillé
* `4` – verrouillé pour tous les joueurs, etc.

#### Comportement par système

* **`qb-vehiclekeys`**

  ```lua theme={null}
  Bridge.VehicleKeys.Client.Functions.SetDoorStatus = function(entity, status)
      TriggerEvent('qb-vehiclekeys:server:setVehLockState', NetworkGetNetworkIdFromEntity(entity), status)
  end
  ```

* **`qs-vehiclekeys`**

  ```lua theme={null}
  Bridge.VehicleKeys.Client.Functions.SetDoorStatus = function(entity, status)
      exports["qs-vehiclekeys"]:DoorLogic(entity, true, status, true, true, true)
  end
  ```

* **`lfKeys`**

  ```lua theme={null}
  Bridge.VehicleKeys.Client.Functions.SetDoorStatus = function(entity, status)
      local netId = NetworkGetNetworkIdFromEntity(entity)
      if not netId then return end

      local isLocking = status ~= 0 and status ~= 1
      TriggerServerEvent('vehicle:syncLock', netId, status, isLocking)
  end
  ```

* **`standalone`**

  ```lua theme={null}
  Bridge.VehicleKeys.Client.Functions.SetDoorStatus = function(entity, lockStatus)
      local isLocked = (lockStatus ~= 1 and lockStatus ~= 0)
      Entity(entity).state:set('isLocked', isLocked, true)
      SetVehicleDoorsLocked(entity, lockStatus)

      if lockStatus == 2 or lockStatus == 4 then
          SetVehicleDoorsLockedForAllPlayers(entity, true)
      else
          SetVehicleDoorsLockedForAllPlayers(entity, false)
      end
  end
  ```

En mode standalone, l’état de verrouillage repose uniquement sur le state bag de l’entité et les natives, sans ressource externe.

***

## API côté serveur

Pour l’instant TS-Lib n’expose pas d’helpers serveur supplémentaires pour les clés.\
Le pont serveur (`Bridge.VehicleKeys.Server`) est un emplacement réservé pour de futures extensions :

* Octroi / révocation centralisés des clés
* Opérations de verrou avec prise en compte des permissions
* Traçabilité des événements de verrou

Vous pouvez l’étendre dans votre fork en suivant la même structure que les ponts existants.

***
