Aller au contenu

Configuration des zones

Les zones CTLD sont déclarées directement dans l'éditeur de mission de DCS en nommant vos trigger zones selon une convention structurée. Pour la plupart des zones, aucun script n'est nécessaire : CTLD lit le nom de chaque trigger zone au démarrage de la mission, analyse celles qui correspondent à un préfixe connu, et les enregistre automatiquement. Les zones de transport IA constituent la seule exception — elles sont déclarées dans CTLD_userConfig.lua (voir Zones de transport IA ci-dessous).

Pour savoir comment les pilotes utilisent concrètement ces zones depuis le cockpit, consultez le Guide du pilote.

Convention de nommage

Le nom d'une zone encode son type et tous ses paramètres, séparés par _ :

TYPE_name_param1_param2_..._paramN

Règle : _ est le séparateur de champ. Il est interdit à l'intérieur de toute valeur de champ (nom de zone, nom de flag, etc.). Utilisez farmmain, et non farp_main.

Vue d'ensemble des types de zones

Trois préfixes sont auto-découverts à partir des noms de trigger zones de DCS :

Préfixe Type de zone Schéma
TRZ Zone de troupes — objectif de pickup et/ou d'extract joueur TRZ_<name>_<A\|R\|B\|N>_<stock>_<flag>_<target>les 5 champs sont requis
WPZ Zone de waypoint — les troupes déployées à l'intérieur marchent vers le centre de la zone WPZ_<name>_[R\|B\|N]
LGZ Zone logistique — services de crate et de véhicules LGZ_<name>_[R\|B\|N]

Un quatrième type — les zones de transport IA (AIZ) — n'est pas découvert par le nom. Il est déclaré entièrement en configuration ; voir Zones de transport IA.

Il n'existe pas de préfixe EXZ distinct. Les objectifs d'extract sont une fonction d'une TRZ (une zone de troupes avec stock = 0 et un flag d'objectif), décrite sous Zones de troupes.

Paramètre de coalition :

Valeur Coalition
A Toutes les coalitions (TRZ uniquement)
R RED uniquement
B BLUE uniquement
N Neutre
(omis) Toutes les coalitions (WPZ / LGZ uniquement — une TRZ requiert un A explicite)

Unicité : deux zones du même préfixe ne peuvent pas partager le même name. Un nom de zone déjà enregistré n'est jamais écrasé par un suivant.


Zones de troupes (TRZ)

Une zone de troupes fournit un pickup joueur et/ou un objectif d'extract.

Schéma : TRZ_<name>_<A|R|B|N>_<stock>_<flag>_<target>

Les 5 champs sont requis. Le parser rejette tout nom de TRZ comportant un champ manquant ou invalide — un avertissement est écrit dans CTLD.log et la zone est ignorée.

Champ Position Valeurs Signification
name 2 quelconque (sans underscore, ni mot réservé) Identifiant de zone utilisé dans les logs et les menus F10
coalition 3 A R B N Qui peut interagir : A=toutes, R=RED, B=BLUE, N=NEUTRAL
stock 4 entier 0–999 0=pas de pickup · 1–998=limité · 999=illimité
flag 5 nom de flag DCS ou nil Flag incrémenté du nombre de soldats à l'extract ; nil = pas d'objectif
target 6 entier ≥0 0=pas de seuil · N≥1=objectif de nombre de soldats pour un trigger de victoire DCS

Mots réservés — interdits comme name ou flag : nil, A, R, B, N.

Valeurs de stock

stock Capacité de pickup Ce que voit le pilote
0 Aucune — pas de pickup Pas d'entrée « Load from » dans le menu F10
1–998 Limité — décrémente à chaque chargement « Load from <name> (N remaining) »
999 Illimité — jamais épuisé « Load from <name> »

Utilisez 999 pour un pickup illimité — pas 0. 0 signifie aucune capacité de pickup.

Valeurs de flag et de target

flag target Comportement
nil quelconque La zone n'a pas d'objectif. Les troupes déployées ici apparaissent comme un ground group DCS.
un nom de flag 0 Objectif actif, sans seuil. CTLD incrémente le flag du nombre de soldats à chaque déploiement de troupes à l'intérieur.
un nom de flag N≥1 Objectif avec seuil. CTLD incrémente le flag ; c'est vous qui écrivez le trigger de victoire DCS flag >= N. CTLD initialise le flag à 0 au démarrage de la mission et ne termine jamais la mission de lui-même.

Exemples

Nom de zone Coalition Stock Flag Target Comportement
TRZ_base_B_50_nil_0 BLUE 50 (limité) Pickup — 50 soldats, réapprovisionnement au RTB
TRZ_depot_A_999_nil_0 Toutes illimité Pickup — illimité, toutes coalitions
TRZ_exfil_B_0_rescue_0 BLUE pas de pickup rescue aucun Extract uniquement — déployer des troupes ici incrémente le flag rescue
TRZ_lz_R_0_secure_100 RED pas de pickup secure 100 Extract avec condition de victoire — objectif RED à 100 soldats
TRZ_fob_N_20_defend_50 Neutre 20 (limité) defend 50 Mixte — pickup (20) + objectif d'extract
TRZ_marker_B_0_nil_0 BLUE pas de pickup Inerte — marqueur nommé, sans fonction

Annoté :

TRZ  _  fob  _  N   _  20     _  defend  _  50
 │      │       │      │          │          │
 │      │       │      │          │          └─ target : 50 soldats complètent l'objectif
 │      │       │      │          └──────────── flag   : "defend" (nom de flag DCS)
 │      │       │      └─────────────────────── stock  : 20 troupes max (pickup limité)
 │      │       └────────────────────────────── coalition: NEUTRAL
 │      └────────────────────────────────────── name   : "fob"
 └───────────────────────────────────────────── préfixe TRZ

Zone extract uniquement (stock = 0) : aucune entrée « Load from » n'apparaît dans le menu F10. La zone sert uniquement de trigger d'objectif quand des troupes y sont déployées.

Zone mixte (stock > 0 et flag ≠ nil) : gère à la fois l'embarquement et le décompte d'objectif. Quand un pilote se pose à l'intérieur avec des troupes à bord, l'objectif est prioritaire — le flag est incrémenté et aucun groupe DCS n'est spawné. Le réapprovisionnement du stock au RTB n'a lieu que dans les zones de pickup uniquement.

Fumigène : la couleur du fumigène des zones de troupes est définie globalement par coalition via le paramètre troopZoneSmokeColor (voir Configuration), et non par nom de zone.

Voir Transport de troupes pour le workflow côté pilote (embarquement, déploiement, extraction).


Zones de waypoint (WPZ)

Quand des troupes sont déployées (fast-rope ou dépose au sol) en un point qui tombe à l'intérieur d'une WPZ active, elles marchent automatiquement vers le centre de cette zone au lieu de chercher l'ennemi le plus proche.

Schéma : WPZ_<name>_[R|B|N]

Exemple de nom Signification
WPZ_hill47_B Zone de waypoint BLUE « hill47 »
WPZ_bridge Zone de waypoint toutes coalitions

Le rayon de la zone est repris de l'éditeur de trigger zone de DCS.

Les zones WPZ n'apparaissent pas dans le menu F10 — elles agissent silencieusement au moment du déploiement.


Zones logistiques (LGZ)

Une zone logistique définit une base où les pilotes peuvent spawner et packer des crates et des véhicules depuis le menu F10. Un pilote doit se trouver à l'intérieur d'une zone logistique pour utiliser ces services.

Schéma : LGZ_<name>_[R|B|N]

Exemple de nom Signification
LGZ_depot1_B Zone logistique « depot1 », BLUE uniquement
LGZ_farmmain_R Zone logistique « farmmain », RED uniquement
LGZ_shared Zone logistique ouverte à toutes les coalitions

Rayon : une zone LGZ_ est un cercle centré sur la trigger zone, avec un rayon repris du paramètre dynamicZoneRadius (défaut 200 m). Le rayon propre de la trigger zone dans l'éditeur n'est pas utilisé pour les LGZ. Réglez dynamicZoneRadius dans Configuration pour le modifier globalement.

Voir Catalogue des crates pour ce qui peut être spawné, et Crates pour le workflow du pilote.

Zones logistiques créées à l'exécution

La seule façon d'ajouter une nouvelle zone logistique pendant une mission en cours est de déployer une FOB. Quand la construction de la FOB est terminée, CTLD enregistre automatiquement une zone logistique circulaire centrée sur le site de la FOB (rayon = fobLogisticZoneRadius, défaut 150 m, sous le nom de la FOB). Aucune trigger zone LGZ_ ni entrée de config n'est requise. Voir Scenes & FOB pour le cycle de vie complet de la FOB, y compris comment une FOB détruite retire sa zone logistique.

Désactivation et réactivation d'une zone logistique

Utilisez l'API CTLDZoneManager depuis un trigger DO SCRIPT pour simuler une capture de zone ou une perte temporaire. Cela fonctionne à la fois pour les trigger zones LGZ_ et pour les zones basées sur logisticUnits :

-- Deactivate — zone is ignored by all pilots until reactivated
CTLDZoneManager.getInstance():deactivateLogisticZone("depot1")

-- Reactivate — zone becomes available again
CTLDZoneManager.getInstance():activateLogisticZone("depot1")

La zone reste enregistrée et peut être basculée autant de fois que souhaité.


Zones de transport IA (AIZ)

Les zones AIZ contrôlent le comportement automatique des transports IA (unités listées dans transportPilotNames). Les joueurs humains ne sont jamais affectés par elles.

Les zones AIZ n'ont pas de convention de nommage. N'importe quelle trigger zone de DCS peut être une zone AIZ — vous la référencez par son nom dans le tableau de config aiZones. Le pickup comme le drop-off se déclenchent à l'atterrissage (S_EVENT_LAND) : l'unité IA doit physiquement se poser à l'intérieur du rayon de la zone.

Rôles

Rôle Déclencheur Comportement
Pickup Le transport IA se pose à l'intérieur de la zone Charge des troupes et/ou un véhicule entier
Drop-off Le transport IA se pose à l'intérieur de la zone Déploie des troupes et/ou décharge un véhicule entier

Une zone peut être pickup uniquement, drop-off uniquement, ou les deux.

Déclaration en config

Les zones sont déclarées dans _cfg.settings["aiZones"], un tableau d'entrées :

_cfg.settings["aiZones"] = {
    -- Troops-only pickup: two templates with per-template stock
    { dcsZoneName = "my_base", coalition = "BLUE",
      isPickup = true, cargoType = "T",
      troopStock = { ["Standard Group"] = 5, ["Anti Tank"] = 2 } },

    -- Troops-only pickup: every compatible template, unlimited
    { dcsZoneName = "depot_alpha", coalition = "BLUE",
      isPickup = true, cargoType = "T",
      troopStock = { All = -1 } },

    -- Vehicle-only pickup (vehicles must be physically in the zone)
    { dcsZoneName = "armor_depot", coalition = "BLUE",
      isPickup = true, cargoType = "V",
      vehicleStock = { ["Hummer"] = 3, ["M1025 HMMWV Armament"] = -1 } },

    -- Troops + vehicle pickup
    { dcsZoneName = "hub_tv", coalition = "BLUE",
      isPickup = true, cargoType = "TV",
      troopStock = { All = -1 }, vehicleStock = { ["Hummer"] = 5 } },

    -- Ground-only drop-off
    { dcsZoneName = "lz_front", coalition = "BLUE",
      isDropoff = true, aiDropMode = "G" },

    -- Ground + parachute drop-off (default)
    { dcsZoneName = "lz_rear", coalition = "BLUE",
      isDropoff = true },
}

Paramètres

Paramètre Type Requis Description
dcsZoneName string Nom exact de la trigger zone DCS
coalition "RED" / "BLUE" / "NEUTRAL" Quels transports IA utilisent cette zone
isPickup true l'un des deux Marque la zone comme zone de pickup
isDropoff true l'un des deux Marque la zone comme zone de drop-off
cargoType "T" / "V" / "TV" pickup uniquement Troupes, véhicule entier, ou les deux. Défaut "T"
troopStock table { [name] = N } pickup + troupes Stock par template. N = -1 illimité, N > 0 limité. Clé spéciale All = tous les templates compatibles. Doit être présent pour activer le pickup de troupes.
vehicleStock table { [type] = N } pickup + véhicules Stock par type, mêmes règles -1 / N / All. Doit être présent pour activer le pickup de véhicules.
aiDropMode "G" / "P" / "GP" drop-off G sol, P parachute, GP l'un ou l'autre. Défaut "GP"
troopTemplates { "Name1", ... } optionnel Liste blanche des templates de troupes éligibles à cette zone
vehicleTypes { "TypeName", ... } optionnel Liste blanche des noms de type de véhicule DCS éligibles au chargement

troopStock et vehicleStock sont des tables, pas de simples entiers. Le stock par template / par type a remplacé l'ancienne forme à entier unique.

Configuration du transport IA

  1. Créez des trigger zones dans le ME (nom quelconque, rayon adapté à l'atterrissage).
  2. Déclarez-les dans _cfg.settings["aiZones"] (ci-dessus).
  3. Ajoutez le nom d'unité DCS exact de chaque unité IA à transportPilotNames :
_cfg.settings["transportPilotNames"] = {
    ["heliai_supply"]  = true,
    ["heliai_medevac"] = true,
}
  1. Routez l'unité IA pour qu'elle se pose à l'intérieur des zones (waypoints avec une tâche « Landing »).

Un véhicule entier n'est chargé que si son poids n'excède pas le maxVehicleWeight du transport et qu'au moins un aéronef a canTransportWholeVehicle = true. Voir Configuration pour les poids et les capacités.

Rapport de validation

Au démarrage de la mission, CTLD valide chaque entrée aiZones et, s'il y a quoi que ce soit à signaler, affiche à l'écran (30 s) et dans CTLD.log une liste groupée d'erreurs et d'avertissements, dans la langue de la mission. Si tout est valide, une seule ligne INFO est loggée et rien n'apparaît.

Une entrée est ignorée (erreur) quand elle n'a pas de dcsZoneName, un dcsZoneName en double, une zone absente de l'éditeur de mission, une coalition manquante ou invalide (doit être RED / BLUE / NEUTRAL), ni isPickup ni isDropoff, ou un cargo véhicule (V / TV) alors qu'aucun aéronef ne peut transporter un véhicule entier. Les avertissements courants (la zone est tout de même créée) : un cargoType invalide retombe sur "T", un aiDropMode invalide retombe sur "GP", une zone de pickup à laquelle manque le troopStock / vehicleStock correspondant a ce pickup désactivé, des noms de troopTemplates / vehicleTypes inconnus, et une zone de pickup chevauchant une zone de drop-off de la même coalition (risque de boucle instantanée pickup+drop-off).


Configuration de zone héritée (legacy)

Les missions construites à la manière classique de CTLD v1 — noms de zones listés dans des tables de config plutôt qu'analysés depuis les noms de trigger — restent supportées. Le caractère _ est autorisé dans les noms ici, car il s'agit de simples noms de trigger (ou d'unité) DCS, et non de schémas analysés. Déclarez-les dans CTLD_userConfig.lua :

-- Pickup zones: { "DCS zone name", "smoke color", limit, "active", side }
-- smoke color : "none"|"green"|"red"|"white"|"orange"|"blue"
-- limit       : -1 = unlimited, or any integer >= 1
-- active      : "yes" | "no"
-- side        : 0 = both, 1 = RED, 2 = BLUE
ctld.pickupZones = {
    { "pickzone1",  "blue", -1, "yes", 0 },
    { "pickzone2",  "red",  -1, "yes", 2 },
    { "USS Tarawa", "blue", 10, "yes", 2 },  -- a ship unit name is also accepted
}

-- Drop-off zones (AI auto-deploy points): { "DCS zone name", "smoke color", side }
ctld.dropOffZones = {
    { "dropzone1", "green", 2 },
    { "dropzone2", "none",  0 },
}

-- Waypoint zones (deployed troops march to the centre): { "DCS zone name", "smoke color", "active", side }
ctld.wpZones = {
    { "wpzone1", "green", "yes", 2 },
}

-- Logistic units: unit or static names placed in the ME.
-- If the named object is destroyed, its logistic zone is removed automatically.
ctld.logisticUnits = { "logistic1", "logistic2" }

Les zones héritées et les zones auto-découvertes (TRZ / WPZ / LGZ) coexistent sans conflit : une zone déjà enregistrée via la découverte par nom de trigger n'est jamais écrasée par la config héritée.

Pour la surface de compatibilité v1 ctld.* complète, voir API héritée.