# Configuration des échelles

Ce chapitre explique `config/ladders.lua` : la liste des véhicules à échelle reconnus par le script, avec leurs props, leurs butées, leurs extras et leurs places. C'est le chapitre le plus technique, mais c'est lui qui permet d'utiliser MasterLadder avec n'importe quel véhicule à échelle.

## Principe

- Une entrée par véhicule. **La clé est le nom de spawn du véhicule** (ex. `['epan']`).
- Tout réglage absent d'une entrée reprend celui de **`Config.LadderDefaults`** (en bas du fichier). Une entrée peut donc se limiter à son nom, ses props et ce qui diffère.
- **Unités** : angles en degrés, distances en mètres, durées en millisecondes.
- **Repère de rotation** : 0° = échelle vers l'avant (au-dessus de la cabine), sens horaire vu de dessus.

```lua
Config.Ladders = {
    ['epabspp'] = {
        label = "EPA BSPP",
        props = {
            turntable = "prop_tl2_base",
            D         = "prop_tl2_ladder1",
            C         = "prop_tl2_ladder2",
            B         = "prop_tl2_ladder3",
            A         = "prop_tl2_ladder4",
            S         = "prop_tl2_ladder5",
            basket    = "prop_tl2_cage",
            stab      = "prop_tl2_outriggers",
        },
        interface = { theme = nil, forced = false, model = "ML 32", serial = "N° de série 2004-1187" },
        seat = { angle = 143.24, distance = 1.3, height = 0.24 },
        -- le reste reprend Config.LadderDefaults
    },
}
```

## Identité et props

- **`label`** : nom affiché (pupitre, messages).
- **`props`** : noms des modèles de l'échelle, streamés par la ressource du véhicule. **Les 8 sont obligatoires** ; une entrée incomplète est ignorée, avec un avertissement dans la console.
  - `turntable` : tourelle
  - `D` : plan fixe
  - `C`, `B`, `A` : plans coulissants
  - `S` : bras de nacelle
  - `basket` : nacelle
  - `stab` : stabilisateur (utilisé 4 fois)

## Déploiement

- **`deployTime`** (défaut `7000`) : durée du calage et du repli (ms).
- **`maxSlope`** (défaut `8.0`) : pente maximale du véhicule pour déployer (°).

## Butées

- **`elevation`** (défaut `{ min = -15.0, max = 75.0 }`) : inclinaison de l'échelle (°).
- **`length`** (défaut `{ min = 0.0, max = 23.0 }`) : longueur sortie (m), en plus de la longueur repliée.
- **`arm`** (défaut `{ min = -90.0, max = 0.0, floor = -50.0 }`) : bras de nacelle (°). `floor` : le bras ne descend jamais sous `floor` moins l'inclinaison de l'échelle (la nacelle reste horizontale).
- **`light`** (défaut `{ left = -90.0, right = 90.0, down = -85.0, up = 85.0 }`) : débattement du projecteur (°).
- **`rotation`** : zone interdite à l'arrière du véhicule.
  - `stopRight` / `stopLeft` : butées en tournant à droite / à gauche.
  - `resumeRight` / `resumeLeft` : au-delà, la rotation est de nouveau possible (pour ressortir de la zone).
- **`cabZone`** (défaut `{ from = 324.0, to = 34.0 }`) : secteur au-dessus de la cabine où l'échelle ne peut pas descendre sous l'horizontale.

## Extras du véhicule

- **`extras`** : numéros des extras du modèle.
  - `ladder` (défaut `{ 5, 10 }`) : extras de l'échelle repliée, masqués quand elle est déployée.
  - `left` / `right` (défaut `{ open = 6, closed = 7 }` / `{ open = 12, closed = 11 }`) : coffres gauche / droite.
  - `screen` (défaut `{ on = 9, off = 8 }`) : écran de commande arrière.
- **`spawnExtras`** : état du véhicule à sa première apparition.
  - `left`, `right` : `"open"` ou `"closed"`
  - `screen` : `"on"` ou `"off"`
  - `others` : autres extras, `[numéro] = true` (visible) ou `false` (masqué). Ex. `{ [1] = true, [3] = false }`.

💡 Les extras sont appliqués sans réparer le véhicule : les dégâts et les portes ouvertes sont conservés.

## Places

- **`seat`** (défaut `{ angle = 131.78, distance = 1.0, height = -0.28 }`) : position du poste de commande autour de la tourelle (angle en °, distance et hauteur en m).
- **`basketPlaces`** (défaut `3`) : nombre de places dans la nacelle (1 à 3).
- **`basketSpots`** : position de chaque place autour du centre de la nacelle (`angle` en °, `distance` en m).

## Collisions des props

- **`collisions`** (défaut `{ sections = false, basket = true, stabs = true }`) : active les collisions des sections, de la nacelle et des stabilisateurs. À n'activer que si les modèles en possèdent.

## Interface

- **`interface`**
  - `theme` : `nil` (choix du joueur), `"modern"` ou `"retro"` (interface suggérée pour cette échelle).
  - `forced` : `true` impose `theme` à tous les joueurs pour cette échelle.
  - `model`, `serial` : textes de la plaque constructeur du pupitre années 2000.

## Ajouter un véhicule

1. Vérifiez que la ressource du véhicule stream bien **le véhicule et les 8 props** de l'échelle.
2. Copiez une entrée existante et renommez la clé avec le **nom de spawn** du véhicule.
3. Renseignez `label` et `props`.
4. Ajustez les **numéros d'extras** du modèle (`extras`) et l'état de spawn (`spawnExtras`).
5. Redémarrez la ressource, déployez, puis ajustez en jeu `seat`, `basketSpots` et les butées.

💡 Avec `Config.Debug = true`, la console signale les props introuvables par leur nom, et `/mldebug` affiche au-dessus de l'échelle son état complet.