Jump to content

[ATME], remarques, bugs ou commentaires


sunski34

Recommended Posts

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

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 by sunski34
Link to comment
Share on other sites

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 by guimcdo
Link to comment
Share on other sites

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

  • 2 weeks later...

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

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 by sunski34
Link to comment
Share on other sites

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

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

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

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

chargementmodules.thumb.jpg.f3d2d60fd77d4b30c8491404b7bd6e20.jpg

 

 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

  • 3 months later...

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 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

  • 3 months later...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...