Surface de contrôle test/debug
Fichier optionnel DynamicMission_TestUtils.lua, chargé séparément.
Activée par DM.Config.TEST_MODE — le simple chargement du fichier active ce mode par défaut si
le flag n'est pas déjà défini, sans action requise du mission-maker. Expose un menu F10
F10 → DynamicMission Test Utils avec 9 sous-menus paginés (limite DCS de 9 entrées par page
gérée automatiquement), pour un total d'environ 30 fonctions.
Désynchronisation confirmée avec le modèle de données actuel
Ce fichier référence un schéma de propriétés antérieur à celui de DM.Region/DM.Airbase
actuel. Comparaison directe des noms de champs :
region.cycleCount / region.lastDetectionTime lus/écrits partout — le champ réel est
region.spawnCycles, et lastDetectionTime n'existe pas du tout.
region.visibility — le champ réel est region.isMapVisible.
region.forceBalancing — le champ réel est region.modeFB.
region.modelGroups / region.spawnZones (tableaux à plat) — les structures réelles sont
region._mgTemplatesByTag / region._szZonesByTag (indexées par tag).
region.vertices — les champs réels sont region.vertices2D / region.verticesRaw.
airbase.position — le champ réel est airbase.point.
airbase.jerrycanStatics (pluriel) — le champ réel est airbase.jerrycanStatic (singulier).
forceSpawnInRegion appelle une fonction externe mist.cloneInZone(...) non liée au
moteur de spawn interne du script (DM.utils.cloneInZone) — elle ne fonctionne que si un
fichier tiers fournissant cette fonction est chargé séparément par la mission.
Effet net : les fonctions touchant ces champs obsolètes (printRegionInfo, printAirbaseInfo,
forceSpawnInRegion, resetRegion, resetMission, fastForwardCycles, setRegionFrequency,
toggleRegionVisibility, refreshRegionMarks, teleportPlayerToRegion, la branche de
rafraîchissement de captureAirbase) liront nil là où une valeur est attendue — sortie
vide/incohérente dans la plupart des cas, erreur d'exécution dans quelques-uns (ex.
arithmétique sur nil dans fastForwardCycles). Constat de lecture de code, pas de test
d'exécution en direct.
1 — Défenses de base (4)
| Fonction |
Effet |
clearAirbaseDefenses |
Détruit tous les groupes de défense AD_ et le Jerrycan d'une base. |
forceSpawnDefenses |
Purge puis force le spawn de N groupes (1-6) pour une coalition donnée. |
clearAllDefenses |
Applique clearAirbaseDefenses à toutes les bases de la mission. |
respawnDefenses |
Purge puis respawn 6 groupes pour la coalition actuelle de la base. |
2 — Coalition de base (3)
| Fonction |
Effet |
setAirbaseCoalition |
Change la coalition DCS brute, sans défenses ni événement. |
setAirbaseNeutral |
Raccourci vers coalition neutre. |
captureAirbase |
Capture simulée complète : purge défenses, change coalition, spawn 6 nouvelles défenses, re-check CLEARED. |
3 — Gestion de région (6)
| Fonction |
Effet |
forceActivateRegion |
Contourne les conditions d'activation ; refuse si CLEARED. |
forceInactivateRegion |
Arrêt forcé du scheduler. |
setRegionState |
Force directement IDLE/ACTIVE/CLEARED ; refuse CLEARED → ACTIVE. |
clearRegionGroups |
Détruit tous les groupes actifs d'une région. |
forceSpawnInRegion |
Force 1-20 spawns en ignorant tous les plafonds. ⚠️ Champs obsolètes |
resetRegion |
Purge + IDLE forcé + compteurs à zéro + F10 effacé. ⚠️ Champs obsolètes |
4 — Debug / inspection (5)
| Fonction |
Effet |
printRegionInfo |
Dump multi-ligne F10 de l'état/config d'une région. ⚠️ Champs obsolètes |
printAirbaseInfo |
Dump multi-ligne F10 d'une base. ⚠️ Champs obsolètes |
printAllRegionsStatus |
Tableau récapitulatif une ligne par région. |
printActiveGroups |
Liste les groupes actifs d'une région (nom/coalition/effectif). |
printManagerStatus |
Compteurs globaux (régions par état, bases, groupes actifs, file de messages, journal d'erreurs). |
5 — Téléportation (3)
| Fonction |
Effet |
teleportPlayerToZone |
Téléporte au centre d'une zone trigger, altitude conservée. |
teleportPlayerToAirbase |
Téléporte au-dessus d'une base (altitude par défaut 3000 m). |
teleportPlayerToRegion |
Téléporte au centroïde d'une région à 3000 m. ⚠️ Champs obsolètes |
6 — Marques F10 (3)
| Fonction |
Effet |
clearAllMarks |
Retire tous les polygones de région. |
refreshRegionMarks |
Redessine les régions visibles non-IDLE. ⚠️ Champs obsolètes |
toggleRegionVisibility |
Bascule le flag de visibilité. ⚠️ N'agit pas sur le vrai champ isMapVisible |
7 — Simulation d'événements (2)
| Fonction |
Effet |
simulateBaseCaptured |
Enveloppe fine de captureAirbase. |
simulateLanding |
Spawn de défenses comme si un atterrissage venait d'avoir lieu sur base neutre. |
8 — Temps / cycles (2)
| Fonction |
Effet |
fastForwardCycles |
Invoque manuellement runCycle() N fois (1-50), arrêt anticipé si CLEARED. ⚠️ Champs obsolètes |
setRegionFrequency |
Change la fréquence de cycle (10-300 s) à chaud, redémarre le scheduler si actif. |
9 — Réinitialisation globale (4)
| Fonction |
Effet |
resetMission |
Purge tous les groupes de toutes les régions et défenses de toutes les bases, remet tout à IDLE. |
stopAllRegions |
Désactive toutes les régions ACTIVE. |
reloadCode |
Recharge à chaud les deux fichiers via dofile(). Chemin codé en dur — ne fonctionne que sur la machine d'origine. |
forceRegionCleared |
La plus élaborée : purge et respawn les défenses adverses sur chaque base de la région, puis planifie un suivi à 10 s qui resynchronise les coalitions et force CLEARED si checkClearedStatus() confirme. |