sunski34 Posted May 22, 2018 Share Posted May 22, 2018 Bonjour à tous, je crée ce jour ce thread qui regroupera l'ensemble des remontées utilisateurs, bugs, remarques ou demandes d'aide. Enjoy ATME ;) Sunski34 Link to comment Share on other sites More sharing options...
guimcdo Posted May 23, 2018 Share Posted May 23, 2018 Cas 1: relance d'un ravitailleur après atterrissage pour cause de carburant J'ai vu un post qui propose un script très complet pour faire un respawn d'un tanker, trop compliqué et pas forcement justifié à mes yeux. Avec MIST, la fonction mist.respawngroup('mygroup', true) permet de relancer ce fameux tanker après atterrissage. 1) Y a t il une fonction ATME similaire à ce respawn? 2) La problématique est le déclenchement de cette fonction, qui se trouve dans l'action du déclencheur (Do script). Aujourd'hui, je suis obligé de bidouiller plusieurs conditions (vitesse < 2 kts et temps > 120 secondes) mais ce n'est pas propre. Est il possible, via le lua predicate, de détecter un évènement, du type engine shut down pour le groupe/unité en question? Merci, pas sûre que mes question relève d'ATME ... Link to comment Share on other sites More sharing options...
sunski34 Posted May 24, 2018 Author Share Posted May 24, 2018 (edited) Salut, effectivement, je ne répondrai ni sur MIST ni sur l'utilisation d'un predicate car ce n'est pas lié à ATME. Pour ce qui est du respawn après parking dans ATME, il n'y a pas de fonction à proprement parler qui fasse tout. Par contre , tu vas trouver dans "Other examples.zip" (dispo en téléchargement) une mission avec le fichier lua qui va bien qui déclenche une destruction et un auto respawn à partir d'un menu. Il s'agit de ATME_direct_menu_spawn_destroy.lua. Regarde lignes 35 à 40, copyPlane0 est le nom du groupe, ici celui de ton tanker. local group = ATME.C_Group.getByName("copyPlane0") group:setAutoRespawn() if group ~= nil then -- If exists, disable group ... group:disable() end Je vois d'ailleurs un petite coquille dans mon exemple car group peut etre nil et donc group:setAutoRespawn peut engendrer une erreur, il faut que cette ligne soit dans le test if group ~= nil. Ceci étant, on fixe un autorespawn (dans ce cas, le groupe est regénéré automatiquement à sa destruction), tu peux même passer un paramètre de temps de regénération voir ligne 18 : group:setAutoRespawn("RANDOM 1 00:00:04") Ici on attend entre 1 et 4 secondes avant l'auto respawn, voir doc pour plus de détail. En ensuite, on detruit le groupe inutile par disable Pour déclencher ce traitement, tu peux te baser sur l'atterrisage du tanker avec onLandingAIUnitHandler ou effectivement onEngineStopAIUnitHandler de la classe ATME.C_Module, voir dans le doc p207 pour les paramètres acceptés par ces fonctions. si on reprend l'exemple, tu verras lignes 109 à 134 la définition des handlers, il faut associer une fonction conforme aux paramétres attendus à l'entrée équivalente (en gras ci dessous, remplacer le nil par ta fonction avec les bons paramètres), tu peux t'inspirer de onSpawn par exemple. local newHandlers = { onCreatePlayerHandler = onCreatePlayer, onDeletePlayerHandler = nil, onUpdatePlayerHandler = onUpdatePlayer, onTakeoffPlayerHandler = nil, onLandingPlayerHandler = nil, onStartEnginePlayerHandler = nil, onStopEnginePlayerHandler = nil, onCreateAIUnitHandler = nil, onDeleteAIUnitHandler = nil, onDisableAIUnitHandler = nil, onTakeoffAIUnitHandler = nil, [b]onLandingAIUnitHandler = nil,[/b] onStartEngineAIUnitHandler = nil, [b]onStopEngineAIUnitHandler = nil,[/b] onCreateGroupHandler = nil, onSpawnGroupHandler = onSpawn, onDeleteGroupHandler = nil, onDisableGroupHandler = nil, onCreateStaticObjectHandler = nil, onDeleteStaticObjectHandler = nil, onTimerHandler = nil, onModuleStartHandler = onStart, } Enfin, si tu veux que ton tanker soit regénéré aussi après destruction, il te faut mettre le group:setAutoRespawn dans le handler onCreateGroupHandler, en testant le nom du groupe bien sur pour faire l'action. Conclusion : Se fait en 5 lignes de code dans ATME. Après tu peux améliorer en ajoutant une alarme pour lancer ce traitement après un certain temps ce qui laisserait le temps (voir pour celà les exemples dans "Manual examples" traitant des alarmes). Ca rajoute une ligne et une fonction. Tu as un readme des exemples dans "Manual Examples.zip". Attention cependant, il faudra vérifier qu'après l'arrêt moteur, le groupe est toujours actif dans DCS, il me semble qu'il est remplacé par un statique. Si c'est le cas, il faudra utiliser une autre méthode un peu plus compliquée, ou bien faire l'action immédiatement sans délai si fait sur arrêt moteur. Enjoy ATME ;) Sunski Edited May 24, 2018 by sunski34 Link to comment Share on other sites More sharing options...
guimcdo Posted May 25, 2018 Share Posted May 25, 2018 (edited) Merci pour ta réponse hyper détaillée Sunski, je vais digérer ça piti à piti :thumbup: Par contre, ta réponse m'éclaire sur un autre point qui n'a rien à voir, c'est que le LUA Predicate n'est capable d'interpréter que le script engine de DCS, et non pas des scripts chargés via un fichier tiers. ++ Loulou Edited May 25, 2018 by guimcdo Link to comment Share on other sites More sharing options...
sunski34 Posted May 26, 2018 Author Share Posted May 26, 2018 Salut, pour le prédicate, il était buggé en 1.5, donc j'avoue qu'à ce stade je n'ai pas creusé. Cependant, j'ai tendance à penser que le fonctionnement est identique au lancement d'un script dans un trigger (je parle d'un script direct et non d'un fichier script). Aussi, si tu as des variables ou des fonctions globales, je pense que ca devrait marcher avec les prédicates, mais c'est à vérifier. A+ Link to comment Share on other sites More sharing options...
ickyline Posted June 3, 2018 Share Posted June 3, 2018 Salut, J'aurais aimé savoir si il était possible d'avoir un petit coup de main pour l'édition de mission. Je cherche depuis un moment comment réaliser un radio menu complexe, je l'ai déjà mis en place avec l'éditeur DCS mais dans l'éditeur ça devient vite un bordel monstre et faire répeter des triggers pour activer et désactiver devient laborieux. Je compte donc me tourner vers ATME pour faire ma mission. Cette mission est une mission d'entrainement pour mon escadrille. Nous avons besoin de pouvoir "lancer différentes actions, qui lanceront a leurs tours des missions de manière aléatoire". Exemple: Le client 1 se connecte, DCS le détecte client 1 zone 1, après 10 sec il active un menu radio composé de : Ouvrir un plan de vol Ouvrir une mission AA Ouvrir une mission AG Ouvrir une mission MULTIROLE ETC... Si je sélectionne "ouvrir un plan de vol" DCS supprime les précédent menu radio et les remplace par : Plan de vol court Plan de vol moyen Plan de vol long Si je sélectionne "plan de vol moyen" DCS doit alors choisir aléatoirement un plan de vol sur 10 pré enregistré. Il renvera donc un message au joueur qui a demandé le plan de vol un message type : Plan de vol n°123456 chargé, veuillez consulter le navlog n°4525 Le joueur devra alors ouvrir les documents en question (imprimé) ou se trouve tout les points de navigation en LAT et LONG pour les insérés manuellement. Une fois que DCS à renvoyer le message il faut qu'il retourne dans son état d'origine (Donc les options de départ) : Ouvrir un plan de vol Ouvrir une mission AA Ouvrir une mission AG Ouvrir une mission MULTIROLE ETC... Tout cela doit être géré au cas par cas, afin que chaque pilote puisse disposer de la possibilité de pratiquer des tâches totalement différente. Le hick c'est que je ne suis pas bon du tout en proggramation et j'ai bcp de mal à comprendre le fonctionnement. Serait il possible que vous me mettiez sur la piste afin que je puisse essayer de comprendre la logique? Merci Link to comment Share on other sites More sharing options...
sunski34 Posted June 4, 2018 Author Share Posted June 4, 2018 (edited) Salut, tu t'attaques à un gros morceau là... Le plus compliqué va être de créer toutes les données en lua pour gérer tes cas. Pour avoir un code simple, il faut prédéfinir les menus etc... avec des fonctions. J'ai déjà fait ce type de mission notamment pour de l'entrainement AA avec des bandits de différentes configurations. Par ailleurs qu'entends tu par plans de vol? Utilises tu des WPs ? Si oui, pour l'instant, il n'est pas possible de changer les WP une fois dans l'avion comme on peut le faire pour une AI. En fait, je n'ai pas testé, je regarderai ce que ca donne et si ca marche je l'autoriserai mais je n'ai aucune certitude à cette heure. En dehors de ce point, ce n'est pas insurmontable, mais ca demande un peu d'apprentissage, je pense que pour débuter tu vises haut. Il vaut mieux commencer par créer des choses simples en lua pour comprendre les bases, ensuite tu pourras te lancer dans des missions plus complexes. Tu dois comprendre le code de la mission d'entrainement A/A pour comprendre le fonctionnement de ce type d'approche. En multi avec des triggers, je pense que c'est abominable... C'est d'ailleurs pour celà que j'ai créé ATME, j'avais les mêmes soucis, mais je maitrise le code informatique. Je peux t'aider, bien sur, mais il faut que tu avances étape par étape. Aussi, prends les exemples "Manual examples" pour voir comment créer un menus, un timer etc.... Une fois compris, vois alors cette mission d'entrainement AI. Si tu as des incompréhensions sur le code de cette mission, je pourrai te le détailler, voir si tu veux échanger via discord why not mais je ne suis dispo que les WE pour te faire un petit cours en attendant que je fasse mes vidéos de formations... Vois aussi avec snowsniper ici sur le forum, il a fait un module intermédiaire qui gère déjà pas mal de trucs avec une notion de mini missions à l'intérieur d'une mission. C'est un module générique ATME qui peut te simplfier la vie sur un projet comme ca. Mais je ne sais pas s'il l'a déjà publié meme si les derniers tests étaient concluants ;) Bon courage Edited June 4, 2018 by sunski34 Link to comment Share on other sites More sharing options...
ickyline Posted June 4, 2018 Share Posted June 4, 2018 Salut, tu t'attaques à un gros morceau là... Le plus compliqué va être de créer toutes les données en lua pour gérer tes cas. Pour avoir un code simple, il faut prédéfinir les menus etc... avec des fonctions. J'ai déjà fait ce type de mission notamment pour de l'entrainement AA avec des bandits de différentes configurations. Par ailleurs qu'entends tu par plans de vol? Utilises tu des WPs ? Si oui, pour l'instant, il n'est pas possible de changer les WP une fois dans l'avion comme on peut le faire pour une AI. En fait, je n'ai pas testé, je regarderai ce que ca donne et si ca marche je l'autoriserai mais je n'ai aucune certitude à cette heure. En dehors de ce point, ce n'est pas insurmontable, mais ca demande un peu d'apprentissage, je pense que pour débuter tu vises haut. Il vaut mieux commencer par créer des choses simples en lua pour comprendre les bases, ensuite tu pourras te lancer dans des missions plus complexes. Tu dois comprendre le code de la mission d'entrainement A/A pour comprendre le fonctionnement de ce type d'approche. En multi avec des triggers, je pense que c'est abominable... C'est d'ailleurs pour celà que j'ai créé ATME, j'avais les mêmes soucis, mais je maitrise le code informatique. Je peux t'aider, bien sur, mais il faut que tu avances étape par étape. Aussi, prends les exemples "Manual examples" pour voir comment créer un menus, un timer etc.... Une fois compris, vois alors cette mission d'entrainement AI. Si tu as des incompréhensions sur le code de cette mission, je pourrai te le détailler, voir si tu veux échanger via discord why not mais je ne suis dispo que les WE pour te faire un petit cours en attendant que je fasse mes vidéos de formations... Vois aussi avec snowsniper ici sur le forum, il a fait un module intermédiaire qui gère déjà pas mal de trucs avec une notion de mini missions à l'intérieur d'une mission. C'est un module générique ATME qui peut te simplfier la vie sur un projet comme ca. Mais je ne sais pas s'il l'a déjà publié meme si les derniers tests étaient concluants ;) Bon courage Hello, merci pour ta réponse ;) Oui c'est un gros morceaux :p mais je sais pas pourquoi je ne sais jamais faire les choses simplement hahaha. Merci pour les infos, je vais me pencher sur le code de base afin d'en comprendre les tenant et aboutissants, par contre effectivement je peux déjà prédire que je vais certainement te poser plusieurs question héhé. Pour ce qui est des plans de vol effectivement il n'est pas possible d'en créé plusieurs et de les chargés en fonction de ce que l'on veut, c'est pour cela qu'en fait j'ai juste créé de faux plan de vol avec d'autres avions, j'ai relevé les coordonées que j'ai immédiatement collée sur un NAVLOG que nos pilotes télécharge et lise pour insérer les coordonnées lors du démarrages de l'avion. C'est le seul moyen pour faire ce que je voulais faire. Donc en résumé plutôt que de chargé un plan de vol, il "simule" une recherche dans la base de données en affichant des messages du genre ("Chargement du plan de vol", 3 sec après "10 plans de vols trouvés", 2 sec après, "Plan de vol chargé, consulté le fichier NAVLOG N°Blablabla") Dès lors les pilotes ouvrent leurs fichiers en question et recopie les informations dans l'avion. Link to comment Share on other sites More sharing options...
snowsniper Posted June 9, 2018 Share Posted June 9, 2018 interressant. il te faut par exemple une AI defini dans le ME avec 1 plan de vol par AI. les rendre eventuellement invisible avec ATME tu recupere les données de WP de ces AI , selon la mini mission selectionnée ou active une mini mission 01 = datas de WP associée à l'AI 01 tu fais de ces datas une variable txt avec une pagination lisible et tu l'affiches sur demande avec une gestion de menus , pour donner les bonne consignes à tes joueurs après plus complexe tu peux utiliser des conditions scriptée etape par etape linéaires selon le mini scenario en cours.( c'est tout le principe de ce que j'ai essayé de faire et que sunski a evoqué ) la question est de savoir si chacun gere l'objectif etape par etape de SON scenario dans une mission commune ou si les conditions (par exemple point de passage), doivent être validés par tous ceux qui ont selectionné cette mini mission.( notion de COOP possible grace à ATME quelque soit le nb de joueurs et d'appareil ) mais le principe de mon module sur base ATME c'est justement de permettre ces choix etapes par etapes pour chaque mini scenario dispo à la selection dans la même mission ( condition solo ou coop ) n'hésites pas à me contacter que je retrouve éventuellement un exemple propre proche de ce que tu veux faire (...ou pas selon l'idée que tu as déjà en tête ;-) ou alors je te partage la trame vierge. d'ailleur c'est une bonne idée que de mettre à dispo cette trame generique à qui veut l'utiliser je vais essayer d'y reconsacrer un peu de temps pour le mettre au propre et ajouter des commentaires exploitable à l'utilisation. mais comme indiqué par SUN il serait raisonnable de te faire les dents sur les exemples de base d'abord même si ATME est plutôt intuitif (même pour un luanoob que j'étais). @+ i7-10700KF CPU 3.80GHz - 32 GO Ram - - nVidia RTX 2070 - SSD Samsung EVO with LG TV screen 40" in 3840x2150 - cockpit scale 1:1 - MS FFB2 Joystick - COUGAR F16 throttle - Saitek Pro Flight Rudder Pedals Link to comment Share on other sites More sharing options...
ickyline Posted June 11, 2018 Share Posted June 11, 2018 Salut, merci pour vos réponses ;) Comme recommandé j'ai donc commencé à jouer avec le code lua etc pour faire mes essais. Mais je rencontre déjà un problème sur mon premier test. Je me suis servis du code dans le modul HelloWorld pour faire mes premiers essai de chargement du script etc. Mais je reçois alors un message d'erreur lorsque je prend place dans un avion. "[ATME] Error in script lua (out of a module lua file) At line 41 - Constructor ATME.C_Module(name, handlers, debugSwitch) -> name type must be string ATME STOPPED stack traceback: [string C:Users\...\AppData\Local\Temp\DCS.openbetaV mis00001739']:41: in main chunk" Voici le code que j'ai utilisé : -- Advanced Tools for Mission Editor - ATME V1.30 -- December 2017 -- Part 1 : Module declarations - Name and specific module variable local thisModule local moduleName = "LCG_START" -- Part 2 : Module variables and functions local function onCreatePlayer(player) player:display("Hello World ... " .. player:getPseudo(), 10) end -- Part 3 : MAIN function for module initialisation do local newHandlers = { onCreatePlayerHandler = onCreatePlayer, onDeletePlayerHandler = nil, onUpdatePlayerHandler = nil, onTakeoffPlayerHandler = nil, onLandingPlayerHandler = nil, onStartEnginePlayerHandler = nil, onStopEnginePlayerHandler = nil, onCreateAIUnitHandler = nil, onDeleteAIUnitHandler = nil, onTakeoffAIUnitHandler = nil, onLandingAIUnitHandler = nil, onStartEngineAIUnitHandler = nil, onStopEngineAIUnitHandler = nil, onCreateGroupHandler = nil, onSpawnGroupHandler = nil, onDeleteGroupHandler = nil, onCreateStaticObjectHandler = nil, onDeleteStaticObjectHandler = nil, onTimerHandler = nil, onModuleStartHandler = nil, } thisModule = ATME.C_Module(moduleName, newHandlers, true) end Une petite idée et explication? Désolé mais comme je le disait j suis pas vraiment doué en programmation lol Link to comment Share on other sites More sharing options...
snowsniper Posted June 11, 2018 Share Posted June 11, 2018 ton script est bon je l'ai testé. c'est la manière de la charger qui doit déconner 1) en premier on charge le "core" le moteur en quelque sorte de ATME avec un "DO SCRIPT FILE" 2) ensuite ton script avec un "DO SCRIPT FILE" 3) enfin on lui dit de lancer le tout avec un DO SCRIPT tout court dans le DO SCRIPT : on met ATME.setDebugLevel(1) ATME.run("EN") et ça va fonctionner. lorsqu'il y a beaucoup de module l'ordre peut être important. ( moi je met le core puis mes libraries de fonctions generiques à moi mes scripts d'ambiance son décor, puis mes différents mini scripts de mission, et enfin je fais le ATM.run comme ci dessus dans un D SCRIPT voir screen en PJ @+ bonne découverte i7-10700KF CPU 3.80GHz - 32 GO Ram - - nVidia RTX 2070 - SSD Samsung EVO with LG TV screen 40" in 3840x2150 - cockpit scale 1:1 - MS FFB2 Joystick - COUGAR F16 throttle - Saitek Pro Flight Rudder Pedals Link to comment Share on other sites More sharing options...
snowsniper Posted September 15, 2018 Share Posted September 15, 2018 (edited) Hornet F18 or AV8 missionDCS . Case III Operations ATME script facile un petit script simple pour donner des infos sur les bateaux présents dans un rayon de 50 nautiques : cap, cap de piste, vitesse, vent etc ... utilisable pour toutes vos missions multi et solo, pour Hornet F18 or AV8 missionDCS . Case III Operations ou atterrissage de nuit ou brouillard, ou même de jour. le script est copieusement commenté en français et en anglais 2 missions identiques exemples sont jointes seule la langue diffère au lancement d'ATME le script est le même . ATME.run("EN") ou ATME.run("FR") marche très bien avec l'ATME core version 145. version mise à jour avec correction de cap magnetique selon la carte DCS jouée. pour l'alignement piste. https://forums.eagle.ru/showpost.php?p=3628567&postcount=41 Edited September 17, 2018 by snowsniper i7-10700KF CPU 3.80GHz - 32 GO Ram - - nVidia RTX 2070 - SSD Samsung EVO with LG TV screen 40" in 3840x2150 - cockpit scale 1:1 - MS FFB2 Joystick - COUGAR F16 throttle - Saitek Pro Flight Rudder Pedals Link to comment Share on other sites More sharing options...
CougarFFW04 Posted January 13, 2019 Share Posted January 13, 2019 Hello, Bon j'avais zappé ce message donc voir ici : https://forums.eagle.ru/showthread.php?t=229556 Pour info par rapport a un message précédent, ma méthode de chargement est pourtant bien la bonne... Thanks Link to comment Share on other sites More sharing options...
snowsniper Posted January 14, 2019 Share Posted January 14, 2019 Envois moi svp le log dcs i7-10700KF CPU 3.80GHz - 32 GO Ram - - nVidia RTX 2070 - SSD Samsung EVO with LG TV screen 40" in 3840x2150 - cockpit scale 1:1 - MS FFB2 Joystick - COUGAR F16 throttle - Saitek Pro Flight Rudder Pedals Link to comment Share on other sites More sharing options...
Recommended Posts