# Exports et événements

Pour intégrer MasterStretcher à vos propres scripts (menu radial, script ambulance, etc.). Remplacez `MasterStretcher` par le nom du dossier de la ressource.

## Exports client

Toutes les actions renvoient `true` en cas de succès, ou `false, raison`. Les mêmes contrôles qu'en jeu s'appliquent (licence, permission, distance), et le serveur revalide chaque action.

| Export | Paramètres | Retour |
|---|---|---|
| `IsPushingStretcher()` | — | `boolean` : le joueur pousse un brancard |
| `GetAttachedStretcher()` | — | Entité du brancard poussé, ou `nil` |
| `IsStretcherOccupied(entity?)` | brancard (défaut : le plus proche, 4 m) | `boolean` |
| `TogglePush(entity?)` | brancard (défaut : le plus proche) | `true, "pushed"` / `true, "dropped"` |
| `OpenMenu(entity?)` | brancard | Ouvre le *Menu Gestion* |
| `StowStretcher(ambulance?)` | ambulance (défaut : la plus proche, 5 m) | Range le brancard poussé |
| `UnstowStretcher(ambulance?)` | ambulance | Sort le brancard rangé |
| `OpenAmbulanceMenu(ambulance?)` | ambulance | Ouvre le *Menu Intérieur* |
| `ToggleBrakes(entity?)` | brancard couché | Serre ou desserre les freins |

Raisons possibles : `not_authorized`, `no_permission`, `invalid_stretcher`, `holding_stretcher`, `no_stretcher_held`, `no_ambulance_found`, `doors_closed`, `no_stretcher_in_ambulance`.

```lua
local ok, reason = exports.MasterStretcher:StowStretcher()
if not ok then print('Rangement impossible : ' .. reason) end
```

## Événements client

Déclenchés localement (`AddEventHandler`), pour le joueur qui fait l'action :

| Événement | Arguments |
|---|---|
| `stretchermod:onPushStart` | `stretcher` |
| `stretchermod:onPushStop` | `stretcher`, `position` (`'debout'` ou `'couche'`) |
| `stretchermod:onStretcherStowed` | `vehicle`, `stretcher` |
| `stretchermod:onStretcherUnstowed` | `vehicle`, `stretcher` |

```lua
AddEventHandler('stretchermod:onStretcherStowed', function(vehicle, stretcher)
    -- ex. : afficher le moniteur du véhicule
end)
```

## State bags (lecture seule)

L'état est écrit uniquement par le serveur. Vous pouvez le lire :

| Clé | Sur | Valeur |
|---|---|---|
| `stretcherPos` | brancard | `'haut'`, `'bas'` ou `'basket'` |
| `stretcherBrakes` | brancard | `boolean` |
| `attachedPlayer` | brancard | serverId du joueur allongé, ou `nil` |
| `attachedPedNetId` | brancard | netId du PNJ allongé, ou `nil` |
| `attachedStretcher` | véhicule | netId du brancard rangé, ou `nil` |
| `isPushingStretcher` | joueur | netId du brancard poussé, ou `nil` |

```lua
local patient = Entity(stretcher).state.attachedPlayer
```

> Les événements réseau internes (`stretchermod:server:*`, `stretchermod:client:*`) ne font pas partie de l'API : leurs paramètres peuvent changer d'une version à l'autre et le serveur refuse les appels qui ne viennent pas du script.