Migration d'une mission vers VEAF MCT v6¶
Ce guide couvre deux scénarios :
- Depuis VEAF MCT v5.xx — votre mission utilise déjà les scripts VEAF MCT mais est antérieure à la chaîne d'outils v6
- Depuis une mission DCS vanilla — votre mission n'a aucun script VEAF MCT
Dans les deux cas, le résultat final est un dossier de mission VEAF MCT v6 que vous gérez avec veaf-tools.exe.
flowchart TD
V5[Mission VEAF MCT v5] -->|veaf-tools convert v5| FOLDER[Dossier de mission v6]
VAN[Mission DCS vanilla .miz] -->|veaf-tools mission extract| FOLDER
FOLDER --> CFG[Éditer mission.yaml]
CFG --> BUILD[veaf-tools mission build]
BUILD --> MIZ[.miz v6 prêt à voler]
Avant de commencer¶
Terminologie¶
| Terme | Signification |
|---|---|
| Dossier de mission | Le répertoire géré par veaf-tools — contient les fichiers source, la config et le .miz |
Fichier .miz |
Le fichier de mission DCS (une archive ZIP) ; le résultat du build |
published/ |
Dossier où veaf-tools-updater.exe installe les scripts VEAF |
src/ |
Vos fichiers source spécifiques à la mission (scripts, données) |
Prérequis¶
- Installez
veaf-tools-updater.exe— téléchargez depuis la dernière release GitHub
Sécurité Windows : Windows peut bloquer les fichiers
.exetéléchargés depuis Internet. Si le fichier ne s'exécute pas, cliquez droit dessus → Propriétés → onglet Général → cochez Débloquer en bas de la fenêtre → OK.
- Exécutez l'updater une fois pour installer
veaf-tools.exeet tous les scripts VEAF :
.\veaf-tools-updater.exe
- Ayez votre dossier de mission v5 sous la main
Le
.\est obligatoire. Le terminal Windows par défaut est PowerShell, qui ne cherche pas dans le dossier courant — exprès.cmd.exeaccepte les deux formes, donc.\marche partout. Voir PowerShell ou invite de commandes ?.Conseil — configuration globale utilisateur : Avant de commencer, créez
~/veafmct.yaml(soitC:\Users\VotreNom\veafmct.yamlsous Windows) pour définir des préférences persistantes sur cette machine — notamment la langue (lang: fr) afin que tous les outils s'affichent en français. Voir Configuration globale utilisateur pour le détail et les commandes disponibles.
Migration depuis VEAF MCT v5.xx¶
Ce qui a changé en v6¶
| Domaine | v5 | v6 |
|---|---|---|
| Trigger DCS | Triggers DO SCRIPT FILE manuels pointant vers chaque fichier .lua |
Trigger unique injecté automatiquement par veaf-tools mission build ; aucun travail de trigger manuel |
| Chaîne de build | Pas d'étape de build — scripts chargés directement depuis le disque au démarrage de la mission | .\veaf-tools.exe mission build assemble le .miz depuis src/mission/ + src/scripts/ |
| Script de build | build.cmd complexe avec une ligne par commande d'injection |
Pas de build.cmd — lancez simplement .\veaf-tools-updater.exe puis .\veaf-tools.exe mission build |
| Pipeline d'auto-injection | Chaque commande d'injection devait être ajoutée manuellement à build.cmd |
veaf-tools mission build auto-détecte et exécute chaque étape quand le fichier correspondant est présent dans src/ |
| Mises à jour des outils | NPM (npm install) — scripts distribués sous forme de package versionné |
veaf-tools-updater.exe — télécharge et vérifie la dernière release en une commande |
| Config au moment du build | Pas de fichier de config au moment du build | mission.yaml — contrôle les niveaux de log, l'activation/désactivation des modules, les surcharges d'étapes du pipeline |
| Activation/désactivation de modules | Éditer missionConfig.lua (ou simplement omettre l'appel à initialize()) |
Bloc modules: dans mission.yaml ; génère veaf-config.lua automatiquement |
| Configuration de modules | Affectation directe : veafSpawn.SpawnKeyphrase = "_spawn" dans missionConfig.lua |
La même affectation directe fonctionne toujours dans mission-script.lua ; ou veaf.setConfig("MODULE_ID", "key", value) pour les surcharges pilotées par config |
| Pattern d'init des modules | Appels nus veafXxx.initialize() |
Auto-généré dans veaf-config.lua par veaf-tools mission build ; aucun appel initialize() manuel nécessaire |
| Emplacement de la config | Initialisation dispersée dans des scripts de trigger DCS ou un fichier Lua séparé | mission.yaml génère veaf-config.lua au moment du build ; code Lua personnalisé optionnel dans mission-script.lua |
| Migration de la config | Réécriture manuelle | .\veaf-tools.exe convert v5 — une seule commande migre missionConfig.lua, convertit les fichiers pipeline (préréglages, waypoints, météo, groupes d'aéronefs) et génère mission.yaml + mission-script.lua. Utilisez migrate-config uniquement pour migrer missionConfig.lua seul. |
| Niveaux de log des modules | Définis par module en assignant veafXxx.LogLevel avant l'init |
Section modules: → MODULE_ID: logLevel: dans mission.yaml ou option CLI --log-modules |
| Skynet / CTLD / CSAR / QRA | Sections séparées external_modules: et qra: |
Tout sous le bloc modules: (modules.SKYNET, modules.CSAR avec un sous-bloc settings:, modules.QRA avec silence_all + definitions:). modules.CTLD est un simple booléen : CTLD 2 se configure dans un ctld-config.yaml à côté de mission.yaml, un bloc settings: y est refusé par validate — et il s'édite avec ctld-tools, un outil livré avec CTLD qu'il faut télécharger séparément. Les sections external_modules: et qra: n'existent plus — voir ADR 0001. convert-v5 émet directement la nouvelle forme. |
Migration étape par étape¶
1. Créer un nouveau dossier de mission et copier les fichiers source v5¶
Créez un nouveau dossier vide pour votre projet de mission v6, puis copiez le dossier src/ de votre mission v5 dedans. Partir d'un dossier neuf évite les interférences avec les anciens fichiers v5 et conserve une seule copie propre de vos sources :
# Adaptez ces chemins à votre configuration
New-Item -ItemType Directory "C:\chemin\vers\ma-nouvelle-mission-v6"
Copy-Item -Recurse "C:\chemin\vers\mission-v5\src" "C:\chemin\vers\ma-nouvelle-mission-v6"
Set-Location "C:\chemin\vers\ma-nouvelle-mission-v6"
Conseil : Vous pouvez aussi le faire dans l'Explorateur Windows — créez un nouveau dossier, copiez-y le dossier
src/de votre mission v5, puis ouvrez un terminal dans ce nouveau dossier.
2. Installer VEAF MCT v6¶
Copiez veaf-tools-updater.exe dans le dossier et exécutez :
.\veaf-tools-updater.exe
Cela crée le répertoire published/ avec tous les scripts et outils. Vos fichiers src/ existants ne sont pas touchés.
3. Convertir le dossier de mission en v6¶
Exécutez le convertisseur tout-en-un :
.\veaf-tools.exe convert v5 .
Cette commande unique gère tout en une seule passe :
- Migration de
missionConfig.lua— commente les appelsdoFile()qui chargent les scripts VEAF (le builder les injecte automatiquement), enveloppe les appels nusveafXxx.initialize()dans des gardesif veafXxx then … end. - Conversion des configs pipeline — convertit les fichiers de config v5 (préréglages radio, waypoints, météo, groupes d'aéronefs) du format Lua vers le YAML v6.
- Génération de
mission.yaml— créemission.yamlavec les sectionsmodules:etpipeline:correctes. - Promotion de
src/mission/en v6 — réécrit le.mizéclaté (src/mission/) au format v6 : un build de base migre les triggers v5 hérités sur disque, après avoir sauvegardé l'original dansbackup_v5/src/mission/. Activé par défaut ; tout le contenu de l'éditeur (groupes, routes, unités) est préservé — seule la couche de triggers v5 hérités est purgée. Utilisez--no-promotepour l'ignorer. - Tri des fichiers v5 hérités — l'outillage v5 obsolète (
*.cmd,*.ps1,package.json,yarn.lock,configuration.json, …) est déplacé dansbackup_v5/; les artefacts régénérables (node_modules/,build/,cache/) sont supprimés ; tout autre fichier non géré est simplement listé dans le rapport pour que vous décidiez.configuration.jsonest signalé car il peut contenir une clé API v5 (inutile en v6 : la météo réelle passe paravwx-engine, sans clé). - Rapport de conversion — sauvegarde
convert-v5-report.mdavec toutes les actions effectuées et les éléments nécessitant une révision manuelle.
Si votre pipeline contient des versions météo realweather, fournissez le code ICAO de l'aéroport via l'option --icao pour l'intégrer dans la config générée. Si vous l'omettez, la conversion réussit quand même : l'outil écrit airport_icao: TODO dans la config générée (versions.yaml) et affiche un avertissement. Renseignez-le ensuite, au choix, en éditant le TODO dans versions.yaml, ou en relançant convert-v5 --icao UGGG --force :
.\veaf-tools.exe convert v5 . --icao UGGG
Les anciens triggers DCS DO SCRIPT FILE sont supprimés automatiquement par veaf-tools mission build à l'étape suivante — aucune action manuelle requise.
Promotion de
src/mission/en v6 (activée par défaut) :convert-v5termine en réécrivantsrc/mission/au format v6 (build de base + extraction), ce qui rend la bascule v6 définitive et évite de re-migrer les triggers v5 à chaque build. L'original est sauvegardé dansbackup_v5/src/mission/. Si vous préférez d'abord vérifier les configs générées et builder vous-même, désactivez l'étape avec--no-promote; vous pourrez relancerconvert-v5plus tard pour promouvoir.Si vous n'avez besoin de migrer que
missionConfig.luasans convertir les fichiers pipeline, utilisez.\veaf-tools.exe convert migrate-config src\scripts\missionConfig.luadirectement.
4. Vérifier les patterns v5 supprimés¶
Ce que devient chaque construction v5 — certaines ont été renommées, d'autres sont inchangées et n'ont donc rien à migrer :
| v5 | v6 |
|---|---|
veaf.SecurityDisabled = true |
Les deux orthographes fonctionnent : veafSecurity.SecurityDisabled est le nom recommandé, veaf.SecurityDisabled reste honoré. Rien à changer dans l'urgence |
veafSpawn.Keyphrase défini au niveau global |
Toujours veafSpawn.Keyphrase — inchangé |
Table veafAssets.Assets inline |
Même format de table — inchangé |
Chargement de fichiers .lua individuels via DO SCRIPT FILE |
Automatique — ne pas ajouter ces triggers manuellement |
Scripts IADS chargés manuellement |
Chargez-les via src/scripts/ — ils sont pris en charge automatiquement |
5. Vérifier avec un build de test¶
.\veaf-tools.exe mission build
Ouvrez le .miz résultant dans DCS, chargez la mission et confirmez :
- Pas de triggers DO SCRIPT FILE en double dans l'éditeur de triggers
- Le trigger chargeur VEAF MCT v6 est présent (nommé quelque chose comme VEAF scripts loader)
- Les menus radio et les commandes de marqueurs fonctionnent comme prévu
6. Configurer le contrôle de version¶
git init
git add src/ .gitignore
git commit -m "feat: migration de ma-mission vers VEAF MCT v6"
Ajoutez published/ et *.miz à .gitignore — ce sont des artefacts de build.
Une mission avec sa propre couche de scripts¶
Quand votre mission v5 charge ses propres scripts par la liste scriptsToLoad de veafDynamicConfig.lua, convert v5 en plus :
- reporte cette liste dans
custom_scripts:, dans le même ordre (saufmissionConfig.lua, qui est migré) ; - lit tous les scripts de
src/scripts, pas seulementmissionConfig.lua: un module que l'un d'eux appelle est activé, et un module que l'un d'eux démarre (veafXxx.initialize(…), ouinitializeCarrierGroupsdu porte-avions) est activé avecinitialized_by_mission: true, pour que le build ne le démarre pas une seconde fois — CSAR et Skynet compris (CTLD est seulement activé : son démarrage v6 reste à VEAF) ; - distingue, parmi les réglages qu'il ne peut pas reporter, ceux que votre script calcule (lus dans des données, par un appel) au lieu de les écrire comme une valeur.
La méthode complète est dans Porter une mission à couche de scripts maison.
Intégration de VEAF MCT dans une mission DCS vanilla¶
Une mission vanilla n'a pas de scripts VEAF MCT, pas de triggers spéciaux, et a été construite entièrement avec l'éditeur de missions DCS.
Intégration étape par étape¶
1. Créer le dossier de mission¶
mkdir ma-mission
cd ma-mission
2. Installer VEAF MCT v6¶
.\veaf-tools-updater.exe
3. Extraire le .miz vanilla puis builder¶
Extrayez votre .miz vanilla dans le dossier source, puis lancez le build qui injecte les scripts VEAF MCT et reconstruit un nouveau .miz :
.\veaf-tools.exe mission extract "C:\chemin\vers\vanilla.miz" .
.\veaf-tools.exe mission build
Cela :
1. Extrait vanilla.miz dans src/mission/
2. Crée mission.yaml et src/scripts/mission-script.lua par défaut
3. Injecte le trigger chargeur VEAF MCT v6
4. Reconstruit un nouveau .miz à côté du dossier
4. Optionnel : préparer le dossier avec les défauts seulement¶
Si vous souhaitez configurer la structure du dossier sans convertir de mission immédiatement, utilisez prepare :
.\veaf-tools.exe mission prepare .
Puis copiez votre .miz sous mission.miz et exécutez :
.\veaf-tools.exe mission extract mission.miz .
.\veaf-tools.exe mission build
5. Configurer les modules à activer¶
Éditez mission.yaml pour activer les modules souhaités. Un ensemble de modules courants est actif par défaut — radio, spawn, raccourcis, CAS, transport, météo… — à ajuster selon vos besoins :
mission:
name: Ma Mission Vanilla
modules:
RADIO:
enabled: true
SPAWN:
enabled: true
# Décommenter pour activer les missions CAS :
# CASMISSION:
# enabled: true
# Décommenter pour activer les opérations carrier :
# CARRIER:
# enabled: true
Pour du Lua personnalisé (appels de modules avancés, alias, etc.), éditez src/scripts/mission-script.lua.
Consultez la référence YAML et les guides de scripts individuels dans scripts/ pour toutes les options.
6. Conserver votre contenu de mission existant¶
Tout ce que vous avez construit dans l'éditeur de missions DCS (unités, triggers, waypoints, zones) est préservé. VEAF ne supprime ni n'écrase le contenu de la mission — il se contente de : - Ajouter un seul trigger de chargeur au démarrage de la mission - Ajouter des entrées de menu radio F10 au moment de l'exécution - Répondre aux commandes de marqueurs sur la carte F10
Vos triggers personnalisés, statiques et groupes sont intacts.
7. Tester et itérer¶
# Rebuilder après chaque changement de config
.\veaf-tools.exe mission build
Chaque build produit un fichier .miz daté (ex. mission_20260516.miz). Ouvrez-le dans DCS et testez.
Référence du dossier de mission¶
Après la migration, votre dossier devrait ressembler à ceci :
ma-mission/
├── src/
│ ├── mission/ ← données de mission DCS extraites (à commiter)
│ │ ├── mission ← dictionnaire Lua principal de la mission
│ │ ├── options
│ │ └── warehouses
│ ├── scripts/
│ │ ├── mission-script.lua ← code Lua personnalisé (à commiter)
│ │ └── veafDynamicConfig.lua ← config du chargement dynamique des scripts (dev, optionnel)
│ ├── presets.yaml ← config des préréglages radio (optionnel)
│ ├── spawnables.yaml ← groupes spawnables personnalisés (optionnel)
│ └── waypoints.yaml ← waypoints personnalisés (optionnel)
├── mission.yaml ← config des modules et du pipeline (à commiter)
├── published/ ← installé par veaf-tools-updater (NE PAS commiter)
│ ├── veaf-scripts.lua
│ └── ...
├── veaf-tools.exe ← installé par veaf-tools-updater (NE PAS commiter)
├── veaf-tools-updater.exe ← à commiter
└── mission_20260516.miz ← sortie du build (NE PAS commiter)
.gitignore recommandé¶
published/
*.miz
*.log
__pycache__/
Référence mission-script.lua¶
mission-script.lua est un fichier optionnel pour du code Lua personnalisé exécuté après l'initialisation de tous les modules VEAF. Utilisez-le pour la configuration avancée qui ne peut pas encore s'exprimer dans mission.yaml — alias personnalisés, surcharges de paramètres de modules, assets, etc.
Exemple minimal :
-- Optionnel : surcharger un paramètre de module
veafSpawn.SpawnKeyphrase = "_spawn"
-- Alias personnalisé
veafShortcuts.AddAlias(
VeafAlias:new()
:setName("-monalias")
:setVeafCommand("_spawn group, name mon-template")
)
L'activation/désactivation des modules se configure dans mission.yaml → modules: — pas dans ce fichier. Consultez la référence YAML pour la syntaxe complète de mission.yaml.
Problèmes courants¶
« impossible de charger le fichier de préréglages » après une conversion¶
Un src/presets.yaml déjà présent avant la conversion pouvait être écrit selon le schéma v5 :
même nom, même format de fichier, mais une structure interne différente (presets_definition: au
lieu de presets_collection:, un niveau coalitions: en trop, les radios définies en ligne dans
chaque préréglage). convert-v5 le laissait alors en place — il était au bon endroit — et le build
échouait à l'étape suivante.
convert-v5 détecte désormais ce cas par la structure du fichier et le réécrit sur place, en
conservant l'original dans backup_v5/src/presets.yaml. Le rapport de conversion le signale, avec
un avertissement pour chaque point qu'il n'a pas pu trancher seul (une radio dont les canaux
couvrent plusieurs bandes, par exemple).
Si vous éditez ce fichier à la main, sachez que le lecteur refuse maintenant une section qu'il ne connaît pas au lieu de l'ignorer en silence, et qu'il nomme la clé fautive, ce qu'il y a trouvé et ce qu'il attendait.
Le trigger "VEAF scripts loader" apparaît deux fois¶
Un ancien trigger DO SCRIPT FILE manuel coexiste avec le trigger auto-injecté v6. veaf-tools mission build supprime les anciens triggers v5 automatiquement (option --migrate-from-v5, active par défaut) — relancer le build suffit. Une suppression manuelle dans l'éditeur DCS n'est nécessaire que si vous avez explicitement désactivé cette migration (--no-migrate-from-v5).
Les menus radio n'apparaissent pas¶
Vérifiez que RADIO est activé dans mission.yaml :
modules:
RADIO:
enabled: true
Reconstruisez avec .\veaf-tools.exe mission build après toute modification de mission.yaml.
Les commandes de marqueurs ne fonctionnent pas¶
Vérifiez que SPAWN est activé dans mission.yaml :
modules:
SPAWN:
enabled: true
Ensuite, consultez le journal DCS (Saved Games\DCS\Logs\dcs.log) pour les erreurs VEAF — filtrez sur VEAF ou ERROR.
Lire les journaux¶
Tous les messages VEAF sont écrits dans Saved Games\DCS\Logs\dcs.log. Pour les trouver rapidement :
- Klogg (recommandé) : ouvrez
dcs.log, utilisez la barre de recherche pour filtrer surVEAF. Un profil de coloration VEAF est livré avec le dépôt, danstools/klogg/veaf.conf— chargez-le via Fichier > Importer les surligneurs…. - Notepad++ : ouvrez
dcs.log→ Recherche → Rechercher (Ctrl+F) → cherchezVEAF.
Le build échoue avec "VEAF scripts file not found"¶
Exécutez .\veaf-tools-updater.exe d'abord — le dossier published/ est manquant ou obsolète.
Voir aussi¶
- Guide du créateur de missions — workflow général de création de missions
- Référence des scripts — tous les modules disponibles
- Référence CLI — les 37 commandes de
veaf-tools, arguments et options