# Structure d’un trajet Lua

Un trajet Jitsuri est un fichier `.lua` qui retourne une liste d’actions pour chaque carte. Les anciens trajets restent compatibles.

## Exemple minimal

```lua
MAX_PODS = 90
ELEMENTS_TO_GATHER = { 254, 255, 67 }

function move()
    return {
        { map = "5,7", path = "bottom", gather = true },
        { map = "5,8", path = "left", gather = true },
        { map = "4,8", path = "5,7", gather = true },
    }
end

function bank()
    return {
        { map = "99095051", npcBank = true },
    }
end
```

`move()` est le parcours principal. `bank()` est utilisé lorsque le seuil de pods est atteint. Une fonction `fight()` peut être ajoutée pour un pilotage de combat entièrement personnalisé.

Un trajet peut aussi changer dynamiquement de phase selon un objectif de
récolte ou une recette. Le guide [Récolter puis fabriquer](craft-et-recolte.md)
présente ce fonctionnement.

## Paramètres globaux

| Paramètre | Description |
|---|---|
| `MAX_PODS` | Pourcentage de pods déclenchant le retour au stockage. Valeur par défaut : 90. |
| `ELEMENTS_TO_GATHER` | Identifiants des ressources à récolter. |
| `AUTO_DELETE` | GID des objets à supprimer lorsque les pods sont pleins. |
| `IGNORE_ZAAP` | Si `true`, les repositionnements automatiques n’utilisent pas les zaaps. |
| `TELEPORT_ONLY_FROM_ZAAP` | `false` par défaut : téléportation directe vers un zaap connu, sans passage par le havre-sac. `true` : utilise l’ancien fonctionnement, depuis un zaap ou le havre-sac. À définir en tête du script. |
| `FORCE_MONSTERS` | Monstres qui doivent être présents dans le groupe. |
| `FORBIDDEN_MONSTERS` | Monstres qui rendent le groupe invalide. |
| `MIN_MONSTERS` | Taille minimale d’un groupe. |
| `MAX_MONSTERS` | Taille maximale d’un groupe. |
| `FIGHT_LOCK_PARTY` | Verrouille le groupe de combat. |
| `FIGHT_LOCK_JOIN` | Interdit les arrivées non prévues. |
| `FIGHT_LOCK_SPEC` | Interdit les spectateurs. |

!!!warning
`AUTO_DELETE` supprime définitivement les piles concernées. Utilisez uniquement des GID que vous acceptez de perdre.
!!!

## Une action de trajet

```lua
{
    map = "5,7",
    path = "bottom",
    gather = true,
    fight = false,
}
```

### Identifier une carte

`map` accepte :

- des coordonnées : `"5,7"` ;
- un MapID : `"188745730"`.

Utilisez un MapID pour distinguer deux intérieurs ou deux étages partageant les mêmes coordonnées.

### Se déplacer

| Forme | Exemple |
|---|---|
| Direction | `path = "top"`, `"bottom"`, `"left"`, `"right"` |
| Destination | `path = "5,15"` ou `path = "188745730"` |
| Cellule de sortie | `cell = "140"` |
| Porte ou interactif | `door = "355"` |
| Zaap explicite | `path = "zaap(68419587)"` |

Un `path` vers une destination laisse Jitsuri calculer les changements de carte. Si le personnage démarre ailleurs, il cherche une entrée accessible du trajet avant de poursuivre.

### Récolter et combattre

```lua
{ map = "5,7", path = "bottom", gather = true, fight = true }
```

- `gather = true` récolte les ressources définies dans `ELEMENTS_TO_GATHER`.
- `fight = true` recherche un groupe compatible avec les règles globales.

### Exécuter une fonction

```lua
local function afterMap()
    printMessage("Carte terminée.", "green")
end

function move()
    return {
        { map = "5,7", path = "bottom", custom = afterMap },
    }
end
```

Passez la fonction elle-même à `custom`, sans guillemets.

## Banque et stockages

Une banque classique peut être déclarée simplement :

```lua
function bank()
    return {
        { map = "99095051", npcBank = true },
    }
end
```

Les trajets créés depuis l’interface peuvent également contenir les informations d’un coffre de maison ou de guilde. Pour ces stockages, utilisez de préférence le sélecteur Jitsuri afin d’enregistrer la porte, les salles, la cellule et le numéro de coffre sans erreur.

Quand les pods sont pleins, Jitsuri tente d’abord `AUTO_DELETE`, puis le stockage. Une sécurité arrête les répétitions si aucun objet n’a été déposé ou si le parcours n’a pas progressé.

Consultez la [référence Lua](lua.md) pour les fonctions utilisables dans vos actions et combats.
