Aide - Recherche - Membres - Calendrier
Version complète : Lua Script
3rd-Wing · Escadre virtuelle DCS > DCS (& LockOn) > 3rd Wing devs' zone
Galevsky
Conjointement avec Etcher, et autres contributeurs si il le souhaitent, on va mettre sur pied un ensemble de fonctionnalites lua qui permettront d'ajouter des fonctionnalites en script lua pour rendre les missions:
  • Plus adaptables, en generant des unites qui tiennent compte notamment du nombre d'humains sur la missions afin de s'affranchir du besoin d'edition manuelle
  • Plus dynamiques, avec des comportement de l'IA qui prend en compte la sitac au sens large
  • Plus faciles, afin de rendre a la portee des possibilites de fonctionnalites qu'aujourd'hui peu de createurs de missions disposent.
Principe:

Basee sur Mist, notre bibliotheque sera une extension, et un simple fichier execute au lancement de la mission. On va commencer par recenser les besoins et les acquis car on a deja pas mal de choses.

Je commence pour ma part:


Utils

getRandomLocationInArea(prefix)
Renvoi un point en 2D choisi de maniere aleatoire parmi le/les zones dont le nom commence par le prefix en parametre.
ex: getRandomLocationInArea('rescue') renverra un point se trouvant a l'interieur de l'une des zones dont le nom commence par 'rescue'.

L'usage de cette fonction, c'est typiquement une mission CSAR, ou pour rendre une mission rejouable a l'infini en generant des unites jamais au meme endroit.

getRandomLocationInSector(origin, radiale_min, radiale_max, distance_mini, distance_max)
Renvoi un point en 2D choisi de maniere aleatoire dans un secteur par rapport a un point d'origine.
ex: getRandomLocationInSector(origin, 90, 180, 70, 110) renverra un point aleatoire situee entre les radiales 90 et 180 du point d'origine, et a une distance comprise entre 70 et 110km.
On peut prevoir de simplifier un appel getRandomLocationInSector(origin, 90, 90, 110, 110) par
getRandomLocationInSector(origin, 90, 110)

getClosestAB(origin, [type])
Renvoi l'ID de la BA la plus proche du point origin et du bon type si specifie( sinon ca renvoie la base peut-importe sa couleur). type choisi parmi {'FRIEND', 'FOE', 'NEUTRAL', 'FRIEND_NEUTRAL', 'FOE_NEUTRAL'}

getHumanNb([type], [side])
Renvoi le nombre d'appareils pilotes par des humains, avec le type d'appareil en option, ainsi que le side parmi {'RED','BLUE'}
ex: getHumanNb('F-15C') renverra le nombre de F-15C humain dans la partie actuellement.


CSAR


generateEjectedPilot(prefix, nb_km)
Cree un pilot au sol dans une des zones dont le nom commence par prefix et qui tirera une smoke orange si une unite amie entre dans un cercle de nb_km km


A2A

leadUnit(groupId)
Ajoute dans le menu F-10 un certaine nombre d'actions que le groupe executera.
  • reprendre la route initiale
  • prendre un CAP N/E/S/W
  • prendre un niveau de vol de XXXX
  • prendre une vitesse de XXXXX
  • orbiter sur la position courante
  • follow me
Typiquement pour toutes les missions MASA, Escorte et autres.

generateGAI(BA_ID, country, [difficulty])
Ajoute sur la base BA_ID des chasseurs en mission Fighter Sweep, avec des unites du pays country dont le type et le nombre est determine en fonction de la difficulte diffculty parmi {'easy', 'normal', 'hard'} (par default, difficulty='normal').


generateTraffic(BA_ID_DPT, BA_ID_ARR, COUNTRY)
Ajoute un vol d'une base vers l'autre en mission de type nothing, pour une unite choisie au hazard.

SUPPORT

callAWACS([nb_escort], [type_escort])
Accessible via menu F-10 dans un menu Support, fait decoller un AWACS depuis la base amie la plus proche pour aller orbiter sur la zone la plus proche dont le nom commence par 'awacs' (ou AWACS), et si il n'en trouve pas, il ira orbiter a mi-chemin entre la localisation de l'unite qui fait la demande et la BA de depart.
ex: callAWACS(3, 'Su-27') fera decoller un AWACS avec 3 SU-27 en mission d'escorte.

callTanker([nb_escort], [type_escort])
Accessible via menu F-10 dans un menu Support, pareil que pour l'AWACS, mais avec un tanker qui correspond a l'unite humaine qui en fait la demande. Et bien sur on choisit d'abord parmi les zones dont le nom commence par 'tanker' (case non-senstive)


callEscort(nb_escort, type_escort)
Accessible via menu F-10 dans un menu Support, fait decoller des appareils pour mission d'escorter l'unite humaine qui en fait la demande.

fireSmoke()
Permet a un humain ejecte d'allumer une smoke orange sur sa position (passage par une unite genere au lieu d'ejection si pas possible avec le pilote ejecte et une detection par zone du CSAR)




to be continued...



DArt
Je peux fournir du lua pour faire des chronométrages wink.gif
Galevsky
c-a-d ? dis-nous en plus... cowboy.gif

Toute contribution est bienvenue !!
Galevsky
Un tuto geant sur l'edition de mission est a venir avec ses bonnes pratiques, avec en prime des exemple tres concrets concernant les fonctionnalites dynamiques suivantes:


Trigger: comment creer des evenements declencheurs

# Bases sur le temps
- comment declencher X minutes apres le lancement de la partie
- comment declencher a une heure precise
- comment declencher de maniere aleatoire entre tel et tel duree apres le lancement de la partie
- comment declencher a partir d'une certaine duree a partir d'un certain evenement anterieur

# Bases sur une zone
- comment declencher si des unites entre sur un territoire
- comment declencher si plus aucune unites se trouve sur un territoire
- comment declencher si une BA est capturee
- comment declencher si des unites sont a telle distance d'une autre unite
- comment declencher si des unites sont a telle distance d'un point fixe

# Bases sur les unites elles-memes et leur etat
- comment declencher si une unite meurt
- comment declencher si le niveau de vie d'une unite atteint telle valeur
- comment declencher si une unite atteint telle vitesse
- comment declencher si une unite atteint telle altitude
- comment declencher si une unite est au niveau du sol

Action: comment creer tous types d'actions differentes
- comment generer une smoke
- comment generer une fusee de detresse
- comment generer une explosion
- comment generer un/des fantassin(s) au sol qui vont monter a bord/debarquer d'un helico
- comment activer une unite (apparition dans le jeu)
- comment activer une unite qui somnolait (deja presente physiquement mais immobile)
- comment activer une unite dans un endroit aleatoire
- comment assigner une nouvelle destination a une unite
- comment rendre le plan de vol d'une unite au sol en boucle


Pour certaines d'entre elle, pas besoin de lua, le Mission Editor suffit, pour d'autre le script lua sera necessaire: une ligne sera suffisante pout chaque action, pour rester simple. On ne peut pas tout faire, mais 90% des besoins seront couverts.

Si vous voyez des besoins, dites-le.
Galevsky
Voilà le tuto:

http://dcs-tools.com/brief/tuto-edition.php

C'est pas fini, je vais détailler toutes les options intéressantes suivant les différents types de mission, ainsi que le fameux annuaire de triggers, mais cette première mission guidée pas-à-pas est faite pour commencer à faire des missions MP simples, tout étant valide pour le MP.

Si des gens veulent relire, identifier les points où j'irais un peu trop vite, discuter de ce qu'ils feraient différemment, ce serait super sympa.
Boulling
Merci! Je lis ça ce soir et je te donne mon retour!

Je sens que ça va m'être utile!

Édit: La méthodologie est bonne, tout est clair, bon boulot! thumbsup.gif
Goztreh
Bon boulot Galevsky! thumbsup.gif

Dans les petits détails à apporter:

- Section 3.2 Meteo: J'utilise souvent ce lien pour les heures de lever et coucher de soleil. DCS Calender

- Section 3.3 ENI IA: Le FighterSweep fonctionne très bien en SP. En MP par contre, dans le meilleur des cas les appareils engagent l'avion du hosteur et les autres IA. Sur un dédié, cette fonction est inutile. Je lui préfère l'utilisation de la fonction CAP. Bien plus agressive envers TOUS les avions en vol sans distinction. Je leur place aussi une fonction orbit sur le premier waypoint de manière à ce qu'ils restent en l'air un maximum de temps.

Il y a une petite faute 'au lâcher de pose', je n'arrive plus à la retrouver...

Goz.
Skander
Très bon boulot en effet ! thumbsup.gif
Très utile.
Skander
Déterrage... laugh.gif

Ton tuto n'est plus disponible, Gal ?
wink.gif
Galevsky
non faudrait que je le remette
Skander
Ah ok.
Je prépare une mission et j'aurais besoin de faire faire à des IA des opérations qui ne figurent pas dans leur manuel. laugh.gif
J'ai donc essayé de me mettre au script lua, mais j'ai un peu trop d'âge de mal...
Donc, je recherche des tutos et aussi des exemples...
wink.gif

J'ai bien trouvé un tuto :
https://forums.eagle.ru/showthread.php?t=120355

Mais des exemples concrets seraient bienvenus...
notworthy.gif
Skander
Et merci à Goz' pour son aide ! notworthy.gif

wink.gif
kakane57
Cela peut t'aider.

https://forums.eagle.ru/showthread.php?t=98616
Skander
Merci ! wink.gif
Galevsky
J'avais fais un exemple complet aussi sur le wiki avec Mist:

http://wiki.3rd-wing.net/index.php?title=A...ion_des_ennemis
Skander
Je vais regarder attentivement.
Merci !
wink.gif
C'est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquez ici.