Jump to content

ATME : scheduleFunction et respawnGroup


CougarFFW04
 Share

Recommended Posts

Hello,

 

Comme j'envisage de basculer mes fonctionnalité Mist vers du ATME pour éviter de mixer les choses je me demandais s'il existe avec ATME des fonctions équivalente aux fonctionnalités Mist:

 

- mist.scheduleFunction

- mist.respawnGroup

 

J'ai regardé vite fait mais je n'ai pas trouvé mais fort possible que j'ai pu raté ca dans la doc assez touffue...

 

Merci

Link to comment
Share on other sites

Bonjour,

 

concernant le spawn simple ou multiple, ainsi que l'auto respawn celà existe dans ATME pour les AI.

 

Pour ce qui est du scheduling, ATME dispose qu'une classe alarme qui permet le déclenchement d'événement, le timing est à la seconde. Une alarme peut etre réarmée autant de fois que nécessaire.

 

 

Je profite de ce mail pour indiquer que la version 1.46 est en cours de finalisation et apportera encore plus de stabilté.

 

A+

 

Sunski

Link to comment
Share on other sites

Bonjour,

 

Pour ce qui est du scheduling, ATME dispose qu'une classe alarme qui permet le déclenchement d'événement, le timing est à la seconde. Une alarme peut etre réarmée autant de fois que nécessaire.

Ca a l'air de correspondre effectivement a ce que je recherche. Merci.

 

Bonjour,

concernant le spawn simple ou multiple, ainsi que l'auto respawn celà existe dans ATME pour les AI.

Par contre pour ca peux-tu STP me donner un peu plus de détail...

Ce que je veux faire c'est simplement respawner un groupe à l'identique mais en regardant la doc a priori les fonctionnalités que j'ai trouvées permettent de faire une duplication mais ce n'est pas ce que je veux.

 

Merci

Link to comment
Share on other sites

Cloning

 

Il est tout à fait possible de cloner un groupe en multiple version, il faut utiliser la classe C_CloningContext.

 

Deux possibilités, le faire avec des données directement dans le lua c'est plus compliqué car ce sont les tables DCS.

 

Ou plus simple cloner un groupe existant, dans le cas ci dessous son nom est "source" et le groupe cloné s'appelle "dest". Si tu spawn plusieurs fois tu auras "dest #001" "dest #002" etc....

 

Dans l'exemple je mets une route spécifique. Pour avoir le même route que le groupe initial, il suffit de ne pas mettre de paramètre à la fonction spawn. Tu peux aussi créer des routes diverses donc avec cette classe C_Route.

 

local cloningContext = ATME.C_CloningContext("source", "dest")
if cloningContext ~= nil then
   local route = ATME.C_Route("GROUND")
   route:addAbsoluteWaypoint("spawnZone", 0)
   route:addInitialWaypointsFrom("source", 1)
		
  cloningContext:spawn(route)
end

 

ATTENTION : A partir de la V1.46 à venir, le onSpawnGroupHandler n'existera plus mais tu pourras ajouter une callback qui sera executée lors du spawn après le onCreateGroupHandler s'il existe :

 

local cloningContext = ATME.C_CloningContext("source", "dest")
if cloningContext ~= nil then
   local route = ATME.C_Route("GROUND")
   route:addAbsoluteWaypoint("spawnZone", 0)
   route:addInitialWaypointsFrom("source", 1)
		
   cloningContext:addSpawnCallback(mySpawnCallback)
   cloningContext:spawn(route)
end

 

et la fonction callback est de type :

 

local function mySpawnCallback(context, group)
-- Callback de spawn pour mon contexte cloningContext que l'on récupère dans context
-- Le groupe spawné est récupéré dans group.

   ATME.displayForAll("New group " .. group:getName() .. " is spawned from intitial group : " 
                                                 .. context:getGroupName(), 5)
end


Edited by sunski34
Link to comment
Share on other sites

en complément, dans l'exemple, le nouveau groupe est spawnné dans une zone DCS nommée "spawnZone". Le positionnement dans cette zone est aléatoire. Après, à partir du waypoint 1, c'est la route du groupe "source" qui sera donc suivie elle aussi à partir du waypoint 1.


Edited by sunski34
Link to comment
Share on other sites

J'oubliai :

 

tu peux aussi créer plusieurs groupes identiques avec un délai entre chaque et une quantité définie. C'est la fonction setAutoRepeatSpawn(qté, période) dans la classe C_CloningContext.

 

La période peut etre fixe ou aléatoire avec un min/max en secondes, voir la doc.

Link to comment
Share on other sites

Hello,

 

Merci pour les infos.

 

Nickel pour les alarmes via le callback

 

Maintenant concernant le respawn je vais essayer mais je crois qu'on ne s'est pas compris... Je ne veux PAS cloner.

 

Je m'explique :

 

- imaginons que j'ai un vol nommé "TOTO".

- A un moment donné il part faire son taf et il revient, atterri.

- Je détecte son atterrissage et après un certain delai (le temps de le laisser retourner tranquillement au parking) je veux simplement le re-spawner à l'identique. Donc je ne veux pas faire un clone "TITI" (ou autre) mais je veux simplement retrouver mon TOTO à l'identique et après je me charge de lui faire faire ce que j'ai envie.

 

Dans ton explication possible que si je met "source" et "dest" identique j'obtiendrais effectivement ce que je veux mais je veux être sur que je ne rajoute pas une "nouveau" groupe. Après c'est peut-être finalement ce que fait DCS mais comme je n'en connais pas les rouages c'est pas clair pour moi si ce que tu proposes est exactement ce que je veux et ce que je faisais avec la fonction Mist indiquée...

 

Sinon possible que l'auto-respawn soit effectivement ce que je veux. Je veux tester...

 

Dernière question qu'est ce que la doc de setAutoRespawn entend par désactivation (et activation) ? Ca veut dire quoi concrètement dans DCS ? Le groupe n'existe plus et il disparait (apparait) ?

 

J'attends tes précisions,

 

Merci

 

 

Edit1: Bon je fais un peu les question réponse :)

Donc il semblerait que la fonction setAutoRespawn soit ce que je cherche mais il subsiste un problème c'est que l'autorespawn suppose que le groupe soit détruit ou désactivé. Dans mon cas (en tout cas pour mes test actuellement) comme je ne souhaite pas attendre la destruction il me faut donc le désactiver. Le problème c'est que je trouve bien une fonction activate mais pas la fonction pour désactiver et apparemment disable ne fait pas non plus l'affaire... Donc jusqu’à en savoir plus je vais rester avec mes fonctions Mist qui font leur taf

 

 

Edit2 : malheureusement le onSpawnGroupHandler ne semble pas détecter lorsque les vols sont remis en place via la fonction mist.respawnGroup... Donc bloqué pour l'instant :(


Edited by CougarFFW04
Link to comment
Share on other sites

pour un objet de classe Group ou AiUnit :disable() fonctionne pour désactiver faire disparaitre de DCS ton avion.

 

" je veux simplement le re-spawner à l'identique" -->

 

au point de départ du plan de vol ou il repart de là où il vient d'atterir ?

si il repart du point de départ c'est mieux de faire un respawn ( duplication d'un modèle que tu peux mettre en invisible ) et detruire disable celui qui vient d'atterir. je pense que c'est ce que fait mist aussi a priori. ce n'est pas le même avion qui se téléporte lol.

 

si tu veux que ce soit celui qui vient d'atterir qui repart en vol alors il faut lui affecter une nouvelle route, et des nouvelles taches :

 

dans ce cas il faut que tu explore les set task pour de nouvelles actions et surtout set route pour refaire un nouveau plan de vol une fois atterit, ce qui permettra de réaffecter des chose à faire au meme objet group

bonne découverte ;-) ...et bonne recherche

je regarde de mon coté et je te mets les bonnes page de la doc en edit de ce post. :

 

 

essenciellement : documentes toi dans la doc V146fr sur classe ATME.C_Task

 

et tu fais une recherche sur "task" pour voir toutes les possibilités dans ton pdf reader ( il y a des liens clickables pour en haut de chaque page pour retourner rapidement au sommaire général ou au sommaire de la class en cours )

 

et surtout tu lis la page dans la classe ATME.C_Group : Object:setRoute / Object:setTask

 

il y a aussi des exemples exploitable pour le setRoute, dans les missions exemples "autres exemples"


Edited by snowsniper

[sIGPIC][/sIGPIC]

all my skins :

here

 

Core i7-4790 @ 3.6- 4GHz - 16GB

- nVidia RTX 2070 - 2xSSD -

GRANDIN TV screen 39" in 1920x1080 cockpit scale 1:1

- MS FFB2 Joystick

- DIY MIDI Throttle with 14 analogic sliders and knobs

- Saitek Pro Flight Rudder Pedals

 

Link to comment
Share on other sites

le plus simple

 

dans le Mission Editor tu fais un TOTO Group que tu met en"activate later."

 

il sera non visible dans la mission et va te servir de modele

 

tu cree ton cloning_context avec comme modele de group TOTO,

tu fais pour que le clone réutilise exactement la même route que le modèle et le même point de départ ( ou tu en redefinies un autre )

tu spawn le clone que l'on nomerra TITI, et qui aura exactement les même caractéritiques et emports.

 

une fois TITI atterit, sur l'evenement handler

onStopEngineAIUnitHandler ( au parking il eteint ses moteurs normalement )

tu fais un TITI:disable()

 

et tu respawn TITIN°2

etc

etc

tu peux le faire avec l'autorespawn.

 

 

et si tu veux pouvoir lui faire faire des choses particulière quelque soit le nombre / nom de l'avion spawné ( parce que le nom est indexé à chaque spawn) , le plus simple est de stocker dans une variable tampon propre au module, l'objet Aiunit ou Group que tu viens de spawner ATME.module[modulename].avionencours = Aiunit ou Cgroup à chaque nouveau spawn.

comme ca tu peux lui faire faire une fonction facilement sur un appel F10radio ou d'autres conditions . en utilisant la variable ATME.module[modulename].avionencours


Edited by snowsniper

[sIGPIC][/sIGPIC]

all my skins :

here

 

Core i7-4790 @ 3.6- 4GHz - 16GB

- nVidia RTX 2070 - 2xSSD -

GRANDIN TV screen 39" in 1920x1080 cockpit scale 1:1

- MS FFB2 Joystick

- DIY MIDI Throttle with 14 analogic sliders and knobs

- Saitek Pro Flight Rudder Pedals

 

Link to comment
Share on other sites

Hello,

 

Merci pour tes suggestions, je vais explorer tout cela.

 

Ta réponse soulève quand même une interrogation :

 

 

" je veux simplement le re-spawner à l'identique" -->

 

au point de départ du plan de vol ou il repart de là où il vient d'atterir ?

si il repart du point de départ c'est mieux de faire un respawn ( duplication d'un modèle que tu peux mettre en invisible ) et detruire disable celui qui vient d'atterir. je pense que c'est ce que fait mist aussi a priori. ce n'est pas le même avion qui se téléporte lol.

 

Exactement ca

Exactement ce que je veux faire...

 

Par contre je ne trouve pas de fonction respawn dans la doc ATME.. Et c'est bien la mon problème... Je trouve le hasAutorespawn(), resetAutoRespawn(), setAutoRespawn() mais aucun simple respawn...

 

Et comme je disais je ne trouve pas non plus avec ATME une fonction qui permettrait de désactiver un groupe pour que ca fonctionne sans que le groupe soit mort... Cette fonction existe pourtant de base dans DCS :

function trigger.action.deactivateGroup(Group Group) Est-ce a dire que l'équivalent de cette fonction n'existe pas dans ATME ? Auquel cas ce n'est pas sis grave et j'utilise directement la fonction DCS.

bref il n'est pas clair pour moi si quand tu dis

c'est mieux de faire un respawn
Tu parles d'une simple fonction respawn que je ne trouve nulle part ou si tu veux parler de toute la manipe de clonage que tu suggères...

 

Enfin j'aurais aussi aimé avoir ton avis pourquoi le onSpawnGroupHandler ne détecte pas un respawn avec la fonction Mist... Je ne comprend pas trop pourquoi car de mon point de vue, d'ou que le respawn vienne (Mist, MOOSE, autre) ca reste un événement DCS...

 

Donc si tu pouvais éclaircir ces trois derniers points je serais sur de ne pas faire fausse route...

 

Merci d'avance


Edited by CougarFFW04
Link to comment
Share on other sites

repawn

 

Bonjour,

 

il n'y a pas de fonction respawn à proprement parler. Pour faire un respawn automatique, il faut utiliser la fonction setAutoRespawn de la classe ATME.C_Group. Cette fonction permet de respawner un groupe détruit avec un délai donné.

 

Pour détruire un groupe, deux possibilités :

 

  • dans la réalisation de la mission, à la réception des events DCS ad'hoc
  • par ton script en utilisant la fonction disable de la classe ATME.C_Group, c'est ce que veut dire snowsniper

 

Voici un exemple simple qui fixe l'autorespawn entre 1 et 4 seconde puis si le groupe existe le détruit... Donc il sera recréé ensuite dans le délai indiqué. Il existe un exemple en 1.45 dans "Other examples.zip" dont est tiré l'extrait ci dessous (ATME_direct_menu_spawn_destroy) :

 

local group = ATME.C_Group.getByName("copy0")

if group ~= nil then
   -- If exists, disable group ...

   thisModule:output("Avant auto...",1)
   group:setAutoRespawn("RANDOM 1 00:00:04")
   thisModule:output("Après auto...",1)
   group:disable()
end

 

Mais en faisant celà, le groupe va toujours refaire la même chose.

 

Maintenant, si tu veux qu'un groupe reparte de l'endroit ou il est, il faut toujours faire un disable puis faire un spawn à partir du cloningcontext créé comme je t'ai montré mais cette fois avec une route inverse. Il faut la faire waypoint par waypoint pour l'instant car les copies de route ne se font pas en sens inverse (c'est une idée que je retiens).

 

Je précise que dans les dernières version de DCS, pour les avions, il existe un nouveau cas "atterrir et repartir", je dois voir celà car pour l'instant non implémenté dans ATME.


Edited by sunski34
Link to comment
Share on other sites

"Par contre je ne trouve pas de fonction respawn dans la doc ATME"

 

context:spawn(route)

 

page 119 est ce que tu cherches. context étant l'objet de classe de cloning définie préalablement, la methode souhaitée et la nouvelle route )

 

ça c'est le spawn simple, sinon il ya l'autorespawn comme expliqué ci dessus par Sun, qui semble mieux correspondre à ce que tu voulais faire si c'est toujours le même trajet

 

2) objetdeclassegroup:disable() et objetdeclasseAIunit:disable() fonctionnent même si l'objet est en vie.


Edited by snowsniper

[sIGPIC][/sIGPIC]

all my skins :

here

 

Core i7-4790 @ 3.6- 4GHz - 16GB

- nVidia RTX 2070 - 2xSSD -

GRANDIN TV screen 39" in 1920x1080 cockpit scale 1:1

- MS FFB2 Joystick

- DIY MIDI Throttle with 14 analogic sliders and knobs

- Saitek Pro Flight Rudder Pedals

 

Link to comment
Share on other sites

Salut et merci pour la réponse,

 

Bonjour,

dans la réalisation de la mission, à la réception des events DCS ad'hoc

  • par ton script en utilisant la fonction disable de la classe ATME.C_Group, c'est ce que veut dire snowsniper

local group = ATME.C_Group.getByName("copy0")

if group ~= nil then
   -- If exists, disable group ...

   thisModule:output("Avant auto...",1)
   group:setAutoRespawn("RANDOM 1 00:00:04")
   thisModule:output("Après auto...",1)
   group:disable()
end

Mais en faisant celà, le groupe va toujours refaire la même chose.

 

En fait c'est exactement ce que je faisais...

Voici mon code : pour info je déclenche une alarme a un instant juste pour tester le mécanisme.

Cette alarme (déclenchée pour chaque groupe) appel ce code qui est censé faire un respawn des groupes aprés x secondes (5 dans le cas présent):

 

local function reSpawnAlarm(_alarm)
   local alarmName = _alarm:getName()
   if ATME.getTags(alarmName) ~= nil then
       groupName = ATME.getTags(alarmName)[2]
       _Group = ATME.C_Group.getByName(groupName)
       _Group:setAutoRespawn(5)
       _Group:disable()
       ATME.displayForAll(groupName.." will be respawned in 5 sec",3)
   end
end

Si je commente les deux lignes de code lié à l'autorespawn et disable, tout se passe bien. Donc tout le reste du code n'est pas en cause.

 

 

Par contre dés que je les valide, le code m'annonce bien que les groupes seront remis en place mais dés que cet événement arrive j'ai ce message d'erreur :

 

 

error-55a44e3.jpg

 

 

 

puis ensuite tout reprend normalement.

 

 

Et c'est le genre de message d'erreur lié à ATME que je ne comprends pas...

 

Voila pourquoi je cherchais une solution alternative (que je n'est toujours pas trouvé) depuis hier soir...


Edited by CougarFFW04
Link to comment
Share on other sites

après un bug, ATME ne tourne plus, donc cela ne reprend pas normalement.

lorsque j'ai ce genre de soucis, la bonne méthode est de circonscrire pour trouver là ou est l'erreur ou la variable nil qui fait bugger.

 

pour ce faire on peut utiliser des traces visibles dans le log dcs : sur chaque ligne de log on trouve le script en cours [ script ] blablabla

 

les traces ( sous reserve que "ATME.setDebugLevel(0)" ou ATME.setDebugLevel(1) soit bien lancé dans le Mission editor sont de cette forme :

 

thisModule:outputVar("text what to test ",variabletotestanddisplayinlog,niveaudevisibilité(1))

ou

 

if vartotest == nil then

thisModule:output("ci ceci s'affiche alors la variable est nil à ce niveau" ,1)

end

 

une fois le probleme circonscrit on peu retirer ou commenter les traces

 

après là tout de suite je ne sais pas trouver l'erreur sans le code complet.

 

sur quel ligne du script dans le log, cela crash t'il car dans la fenêtre là c'est une référence du Core, donc peut probable il doit y avoir une ligne qui crash avant dans le script en cours. à priori la ligne 13 ou 11 ? cela correspond à quelle ligne concretement ?


Edited by snowsniper

[sIGPIC][/sIGPIC]

all my skins :

here

 

Core i7-4790 @ 3.6- 4GHz - 16GB

- nVidia RTX 2070 - 2xSSD -

GRANDIN TV screen 39" in 1920x1080 cockpit scale 1:1

- MS FFB2 Joystick

- DIY MIDI Throttle with 14 analogic sliders and knobs

- Saitek Pro Flight Rudder Pedals

 

Link to comment
Share on other sites

euh juste à tester, j'ai un petit doute : peut être

 

essayes ceci :

 

_Group:setAutoRespawn("5") au lieu de _Group:setAutoRespawn(5)

 

tiens moi informé

[sIGPIC][/sIGPIC]

all my skins :

here

 

Core i7-4790 @ 3.6- 4GHz - 16GB

- nVidia RTX 2070 - 2xSSD -

GRANDIN TV screen 39" in 1920x1080 cockpit scale 1:1

- MS FFB2 Joystick

- DIY MIDI Throttle with 14 analogic sliders and knobs

- Saitek Pro Flight Rudder Pedals

 

Link to comment
Share on other sites

Hello,

 

 

Négatif concernant le entre "" ou pas.

 

 

Concernant les lignes de code 11 et 13 de ce que je comprends ca ne fait pas référence à mon code d'autant que les lignes correspondantes :

 

 

ligne 11 : respawnAfterLand = 720    -- delay before landed flight is re-spawned (suggest 12mn (720s)) 
ligne 13 : delayAfterReject = 900    -- delay between subsequent activation (when prob failed; suggest 15mn (900s))

ne sont pas utilisées dans le présent code et ne posaient aucun pb dans le code précédent ou je n'utilisais pas ATME.

Par contre, je ne sais pas si c'est significatif ou pas (mais vu le message d'erreur peut-etre) la lgne 11 fait suite à : local thisModule

 

 

Bon pour l'instant je suis un peu dans le floue avec cette erreur mais je vais continuer mes investigations en prenant en compte tes conseils précédents.

Mais c'est vrai que dés que c'est plus dans mon code c'est le genre d'erreur ou je me sens un peu désemparé :joystick: :D

 

D'ailleurs concernant tout cela je constate qu'un respawn déclencle a la fois un

- onSpawnGroupHandler (a priori normal)

mais aussi

- onCreateGroupHandler (c'est peut-etre normal mais c'est ce que voulais éviter pour un respawn)


Edited by CougarFFW04
Link to comment
Share on other sites

tu as quoi dans le dcs.log ?

tu peux pas le mettre en PJ svp.

 

PM même si la fenêtre d'alerte renvoi a une ligne du core ATME, les bugs dans le core engine ATME deviennent extremement rares plus probable à 99% erreur de typo d'usage ou de definition de variable / objet

il faut trouver le sous processus cause au plus prêt du script en cours, et de la ligne concernée.

 

essayes qd même de mettre local devant les ligne 11 et 13. ça mange pas de pain comme dirait l'autre.


Edited by snowsniper

[sIGPIC][/sIGPIC]

all my skins :

here

 

Core i7-4790 @ 3.6- 4GHz - 16GB

- nVidia RTX 2070 - 2xSSD -

GRANDIN TV screen 39" in 1920x1080 cockpit scale 1:1

- MS FFB2 Joystick

- DIY MIDI Throttle with 14 analogic sliders and knobs

- Saitek Pro Flight Rudder Pedals

 

Link to comment
Share on other sites

"D'ailleurs concernant tout cela je constate qu'un respawn déclencle a la fois un

- onSpawnGroupHandler (a priori normal)

mais aussi

- onCreateGroupHandler (c'est peut-etre normal mais c'est ce que voulais éviter pour un respawn)"

 

ça c'est parce que tu utilises la V145. sur la V146 il n'ya plus de onSpawnGroupHandler mais une callback spécifique.

[sIGPIC][/sIGPIC]

all my skins :

here

 

Core i7-4790 @ 3.6- 4GHz - 16GB

- nVidia RTX 2070 - 2xSSD -

GRANDIN TV screen 39" in 1920x1080 cockpit scale 1:1

- MS FFB2 Joystick

- DIY MIDI Throttle with 14 analogic sliders and knobs

- Saitek Pro Flight Rudder Pedals

 

Link to comment
Share on other sites

edit:

 

moi j'utiliserais plutot " _Alarm:getUserPrivateDatas(thisModule)" de la classe alarm pour faire transiter l'objet group et non son nom a récupérer plutot que les tags ..

mais ce n'est que mon avis. au feeling groupname doit être nil ou ne correspondant pas à un objet existant ( a tester avec une trace ), ce qui ne bloque pas le script si tu commente les 2 lignes que tu dis. mais dès que tu y fait appel. bing

sun aura un avis plus rapide et plus éclairé, mais il ne sera dispo qu'à 16h30 sans certitude.

 

 

J'ai l'impression que l'index 2 de la table des tags extraits ne te retourne pas toujour le groupname de l'objet spawné.

il faut tester la sortie avec une trace.

 

pour rappel un objet spawné , son nom de groupe est indexé, model #001 ce qui veut dire que son nom complet correspond à 2 tags et non 1 seul.


Edited by snowsniper

[sIGPIC][/sIGPIC]

all my skins :

here

 

Core i7-4790 @ 3.6- 4GHz - 16GB

- nVidia RTX 2070 - 2xSSD -

GRANDIN TV screen 39" in 1920x1080 cockpit scale 1:1

- MS FFB2 Joystick

- DIY MIDI Throttle with 14 analogic sliders and knobs

- Saitek Pro Flight Rudder Pedals

 

Link to comment
Share on other sites

pour plus de précisions

 

sur la creation de l'alarme :

 

local datas = _Alarm:getUserPrivateDatas(thisModule)

 

datas.objectgroup = _Group -- store in private datas, object

 

sur la callback :

 

local datas = _Alarm:getUserPrivateDatas(thisModule)

 

_Group = datas.objectgroup

[sIGPIC][/sIGPIC]

all my skins :

here

 

Core i7-4790 @ 3.6- 4GHz - 16GB

- nVidia RTX 2070 - 2xSSD -

GRANDIN TV screen 39" in 1920x1080 cockpit scale 1:1

- MS FFB2 Joystick

- DIY MIDI Throttle with 14 analogic sliders and knobs

- Saitek Pro Flight Rudder Pedals

 

Link to comment
Share on other sites

 

local function reSpawnAlarm(_alarm)
   local alarmName = _alarm:getName()
   if ATME.getTags(alarmName) ~= nil then
       groupName = ATME.getTags(alarmName)[2]
       _Group = ATME.C_Group.getByName(groupName)
       _Group:setAutoRespawn(5)
       _Group:disable()
       ATME.displayForAll(groupName.." will be respawned in 5 sec",3)
   end
end

 

Es tu sur que _Group est bien non nil ? en d'autres termes que groupName est juste ?

 

Le plus simple est de lié le groupe à l'alarme comme l'a dit snowsniper avec un getUserPrivateDatas qui te retourne une entrée sur une table à laquelle tu peut y définir ton groupe.

Link to comment
Share on other sites

J'ai l'impression que l'index 2 de la table des tags extraits ne te retourne pas toujour le groupname de l'objet spawné.

il faut tester la sortie avec une trace.

 

pour rappel un objet spawné , son nom de groupe est indexé, model #001 ce qui veut dire que son nom complet correspond à 2 tags et non 1 seul.

 

 

Comme je disais le code m'annonce bien que les groupes seront remis en place donc je récupère bien le nom des groupes d'origine.

 

 

Pour la fin du log :

 

 

2019-01-20 16:00:45.007 INFO    SCRIPTING: [ATME] Start main timer
2019-01-20 16:00:45.007 INFO    SCRIPTING: [ATME] Gestion des spawn multiples
2019-01-20 16:00:45.007 INFO    SCRIPTING: [ATME] Gestion des groupes avec tache on zone
2019-01-20 16:00:45.007 INFO    SCRIPTING: [ATME] Reaffectation des spots sur changement de cibles
2019-01-20 16:00:45.007 INFO    SCRIPTING: [ATME] Gestion des Handlers par module
2019-01-20 16:00:45.007 INFO    SCRIPTING: [ATME] Module  module_Randomize_Mission  - Alarme SPAWN F15E_STRIKE_1 déclenché
2019-01-20 16:00:45.007 INFO    SCRIPTING: [ATME] Appel handler de l'alarme SPAWN F15E_STRIKE_1 pour le module  module_Randomize_Mission 
2019-01-20 16:00:45.007 INFO    SCRIPTING: [ATME] Delete unit = Pilot #011
2019-01-20 16:00:45.007 INFO    SCRIPTING: [ATME] Function C_Group_deleteUnit : appel C_group_delete
2019-01-20 16:00:45.007 INFO    SCRIPTING: [ATME] Delete group = F15E_STRIKE_1
2019-01-20 16:00:45.007 INFO    SCRIPTING: [ATME] Delete unit = Pilot #010
2019-01-20 16:00:45.007 INFO    SCRIPTING: [ATME] Module  module_Randomize_Mission  - Alarme SPAWN F15C_ESC_3 déclenché
2019-01-20 16:00:45.007 INFO    SCRIPTING: [ATME] Appel handler de l'alarme SPAWN F15C_ESC_3 pour le module  module_Randomize_Mission 
2019-01-20 16:00:45.007 INFO    SCRIPTING: [ATME] Delete unit = Pilot #009
2019-01-20 16:00:45.007 INFO    SCRIPTING: [ATME] Delete unit = Pilot #007
2019-01-20 16:00:45.007 INFO    SCRIPTING: [ATME] Function C_Group_deleteUnit : appel C_group_delete
2019-01-20 16:00:45.007 INFO    SCRIPTING: [ATME] Delete group = F15C_ESC_3
2019-01-20 16:00:45.007 INFO    SCRIPTING: [ATME] Delete unit = Pilot #008
2019-01-20 16:00:45.007 INFO    SCRIPTING: [ATME] Module  module_Randomize_Mission  - Alarme SPAWN M2000 déclenché
2019-01-20 16:00:45.007 INFO    SCRIPTING: [ATME] Appel handler de l'alarme SPAWN M2000 pour le module  module_Randomize_Mission 
2019-01-20 16:00:45.007 INFO    SCRIPTING: [ATME] Delete unit = Pilot #013
2019-01-20 16:00:45.007 INFO    SCRIPTING: [ATME] Function C_Group_deleteUnit : appel C_group_delete
2019-01-20 16:00:45.007 INFO    SCRIPTING: [ATME] Delete group = M2000
2019-01-20 16:00:45.007 INFO    SCRIPTING: [ATME] Delete unit = Pilot #012
2019-01-20 16:00:45.008 INFO    SCRIPTING: [ATME] Module  module_Randomize_Mission  - Alarme SPAWN F15C_ESC_2 déclenché
2019-01-20 16:00:45.008 INFO    SCRIPTING: [ATME] Appel handler de l'alarme SPAWN F15C_ESC_2 pour le module  module_Randomize_Mission 
2019-01-20 16:00:45.008 INFO    SCRIPTING: [ATME] Delete unit = Pilot #004
2019-01-20 16:00:45.008 INFO    SCRIPTING: [ATME] Delete unit = Pilot #005
2019-01-20 16:00:45.008 INFO    SCRIPTING: [ATME] Function C_Group_deleteUnit : appel C_group_delete
2019-01-20 16:00:45.008 INFO    SCRIPTING: [ATME] Delete group = F15C_ESC_2
2019-01-20 16:00:45.008 INFO    SCRIPTING: [ATME] Delete unit = Pilot #006
2019-01-20 16:00:45.008 INFO    SCRIPTING: [ATME] Module  module_Randomize_Mission  - Alarme SPAWN F15C_ESC_1 déclenché
2019-01-20 16:00:45.008 INFO    SCRIPTING: [ATME] Appel handler de l'alarme SPAWN F15C_ESC_1 pour le module  module_Randomize_Mission 
2019-01-20 16:00:45.008 INFO    SCRIPTING: [ATME] Delete unit = Pilot #001
2019-01-20 16:00:45.008 INFO    SCRIPTING: [ATME] Delete unit = Pilot #002
2019-01-20 16:00:45.008 INFO    SCRIPTING: [ATME] Function C_Group_deleteUnit : appel C_group_delete
2019-01-20 16:00:45.008 INFO    SCRIPTING: [ATME] Delete group = F15C_ESC_1
2019-01-20 16:00:45.008 INFO    SCRIPTING: [ATME] Delete unit = Pilot #003
2019-01-20 16:00:45.008 INFO    SCRIPTING: [ATME] Groupes en attente de création -> Suppression si delai 0
2019-01-20 16:00:45.008 INFO    SCRIPTING: [ATME] Finalisation de traitement Core event avec délai
2019-01-20 16:00:45.008 INFO    SCRIPTING: [ATME] Traitement des patrouilles
2019-01-20 16:00:45.008 INFO    SCRIPTING: [ATME] End main timer
2019-01-20 16:00:46.007 INFO    SCRIPTING: [ATME] Start main timer
2019-01-20 16:00:46.007 INFO    SCRIPTING: [ATME] Gestion des spawn multiples
2019-01-20 16:00:46.007 INFO    SCRIPTING: [ATME] Gestion des groupes avec tache on zone
2019-01-20 16:00:46.007 INFO    SCRIPTING: [ATME] Reaffectation des spots sur changement de cibles
2019-01-20 16:00:46.007 INFO    SCRIPTING: [ATME] Gestion des Handlers par module
2019-01-20 16:00:46.007 INFO    SCRIPTING: [ATME] Groupes en attente de création -> Suppression si delai 0
2019-01-20 16:00:46.007 INFO    SCRIPTING: [ATME] Finalisation de traitement Core event avec délai
2019-01-20 16:00:46.007 INFO    SCRIPTING: [ATME] Traitement des patrouilles
2019-01-20 16:00:46.007 INFO    SCRIPTING: [ATME] End main timer
2019-01-20 16:00:47.009 INFO    SCRIPTING: [ATME] Start main timer
2019-01-20 16:00:47.009 INFO    SCRIPTING: [ATME] Gestion des spawn multiples
2019-01-20 16:00:47.009 INFO    SCRIPTING: [ATME] Gestion des groupes avec tache on zone
2019-01-20 16:00:47.009 INFO    SCRIPTING: [ATME] Reaffectation des spots sur changement de cibles
2019-01-20 16:00:47.009 INFO    SCRIPTING: [ATME] Gestion des Handlers par module
2019-01-20 16:00:47.009 INFO    SCRIPTING: [ATME] Groupes en attente de création -> Suppression si delai 0
2019-01-20 16:00:47.009 INFO    SCRIPTING: [ATME] Finalisation de traitement Core event avec délai
2019-01-20 16:00:47.009 INFO    SCRIPTING: [ATME] Traitement des patrouilles
2019-01-20 16:00:47.009 INFO    SCRIPTING: [ATME] End main timer
2019-01-20 16:00:48.011 INFO    SCRIPTING: [ATME] Start main timer
2019-01-20 16:00:48.011 INFO    SCRIPTING: [ATME] Gestion des spawn multiples
2019-01-20 16:00:48.011 INFO    SCRIPTING: [ATME] Gestion des groupes avec tache on zone
2019-01-20 16:00:48.011 INFO    SCRIPTING: [ATME] Reaffectation des spots sur changement de cibles
2019-01-20 16:00:48.011 INFO    SCRIPTING: [ATME] Gestion des Handlers par module
2019-01-20 16:00:48.011 INFO    SCRIPTING: [ATME] Groupes en attente de création -> Suppression si delai 0
2019-01-20 16:00:48.011 INFO    SCRIPTING: [ATME] Finalisation de traitement Core event avec délai
2019-01-20 16:00:48.011 INFO    SCRIPTING: [ATME] Traitement des patrouilles
2019-01-20 16:00:48.011 INFO    SCRIPTING: [ATME] End main timer
2019-01-20 16:00:49.013 INFO    SCRIPTING: [ATME] Start main timer
2019-01-20 16:00:49.013 INFO    SCRIPTING: [ATME] Gestion des spawn multiples
2019-01-20 16:00:49.013 INFO    SCRIPTING: [ATME] Gestion des groupes avec tache on zone
2019-01-20 16:00:49.013 INFO    SCRIPTING: [ATME] Reaffectation des spots sur changement de cibles
2019-01-20 16:00:49.013 INFO    SCRIPTING: [ATME] Gestion des Handlers par module
2019-01-20 16:00:49.013 INFO    SCRIPTING: [ATME] Groupes en attente de création -> Suppression si delai 0
2019-01-20 16:00:49.013 INFO    SCRIPTING: [ATME] Finalisation de traitement Core event avec délai
2019-01-20 16:00:49.013 INFO    SCRIPTING: [ATME] Traitement des patrouilles
2019-01-20 16:00:49.013 INFO    SCRIPTING: [ATME] End main timer
2019-01-20 16:00:49.998 INFO    SCRIPTING: [ATME] Start main timer
2019-01-20 16:00:49.998 INFO    SCRIPTING: [ATME] Gestion des spawn multiples
2019-01-20 16:00:49.998 INFO    SCRIPTING: [ATME] Gestion des groupes avec tache on zone
2019-01-20 16:00:49.998 INFO    SCRIPTING: [ATME] Reaffectation des spots sur changement de cibles
2019-01-20 16:00:49.998 INFO    SCRIPTING: [ATME] Gestion des Handlers par module
2019-01-20 16:00:49.999 INFO    SCRIPTING: [ATME] Groupes en attente de création -> Suppression si delai 0
2019-01-20 16:00:49.999 INFO    SCRIPTING: [ATME] Finalisation de traitement Core event avec délai
2019-01-20 16:00:49.999 INFO    SCRIPTING: [ATME] Traitement des patrouilles
2019-01-20 16:00:49.999 INFO    SCRIPTING: [ATME] End main timer
2019-01-20 16:00:51.001 INFO    SCRIPTING: [ATME] Start main timer
2019-01-20 16:00:51.001 INFO    SCRIPTING: [ATME] Gestion des spawn multiples
2019-01-20 16:00:51.001 INFO    SCRIPTING: [ATME] Gestion des groupes avec tache on zone
2019-01-20 16:00:51.001 INFO    SCRIPTING: [ATME] Reaffectation des spots sur changement de cibles
2019-01-20 16:00:51.001 INFO    SCRIPTING: [ATME] Gestion des Handlers par module
2019-01-20 16:00:51.001 INFO    SCRIPTING: [ATME] Groupes en attente de création -> Suppression si delai 0
2019-01-20 16:00:51.001 INFO    SCRIPTING: [ATME] Finalisation de traitement Core event avec délai
2019-01-20 16:00:51.001 INFO    SCRIPTING: [ATME] Traitement des patrouilles
2019-01-20 16:00:51.001 INFO    SCRIPTING: [ATME] End main timer
2019-01-20 16:00:52.003 INFO    SCRIPTING: [ATME] Start main timer
2019-01-20 16:00:52.003 INFO    SCRIPTING: [ATME] Gestion des spawn multiples
2019-01-20 16:00:52.003 INFO    SCRIPTING: [ATME] Gestion des groupes avec tache on zone
2019-01-20 16:00:52.003 INFO    SCRIPTING: [ATME] Reaffectation des spots sur changement de cibles
2019-01-20 16:00:52.003 INFO    SCRIPTING: [ATME] Gestion des Handlers par module
2019-01-20 16:00:52.003 INFO    SCRIPTING: [ATME] Groupes en attente de création -> Suppression si delai 0
2019-01-20 16:00:52.003 INFO    SCRIPTING: [ATME] Finalisation de traitement Core event avec délai
2019-01-20 16:00:52.003 INFO    SCRIPTING: [ATME] Traitement des patrouilles
2019-01-20 16:00:52.003 INFO    SCRIPTING: [ATME] End main timer
2019-01-20 16:00:53.005 INFO    SCRIPTING: [ATME] Start main timer
2019-01-20 16:00:53.005 INFO    SCRIPTING: [ATME] Gestion des spawn multiples
2019-01-20 16:00:53.005 INFO    SCRIPTING: [ATME] Gestion des groupes avec tache on zone
2019-01-20 16:00:53.005 INFO    SCRIPTING: [ATME] Reaffectation des spots sur changement de cibles
2019-01-20 16:00:53.005 INFO    SCRIPTING: [ATME] Gestion des Handlers par module
2019-01-20 16:00:53.005 INFO    SCRIPTING: [ATME] Groupes en attente de création -> Suppression si delai 0
2019-01-20 16:00:53.005 INFO    SCRIPTING: [ATME] Finalisation de traitement Core event avec délai
2019-01-20 16:00:53.005 INFO    SCRIPTING: [ATME] Traitement des patrouilles
2019-01-20 16:00:53.005 INFO    SCRIPTING: [ATME] End main timer
2019-01-20 16:00:54.007 INFO    SCRIPTING: [ATME] Start main timer
2019-01-20 16:00:54.007 INFO    SCRIPTING: [ATME] Gestion des spawn multiples
2019-01-20 16:00:54.007 INFO    SCRIPTING: [ATME] Gestion des groupes avec tache on zone
2019-01-20 16:00:54.007 INFO    SCRIPTING: [ATME] Reaffectation des spots sur changement de cibles
2019-01-20 16:00:54.007 INFO    SCRIPTING: [ATME] Gestion des Handlers par module
2019-01-20 16:00:54.007 INFO    SCRIPTING: [ATME] Groupes en attente de création -> Suppression si delai 0
2019-01-20 16:00:54.007 INFO    SCRIPTING: [ATME] Finalisation de traitement Core event avec délai
2019-01-20 16:00:54.007 INFO    SCRIPTING: [ATME] Traitement des patrouilles
2019-01-20 16:00:54.007 INFO    SCRIPTING: [ATME] End main timer
2019-01-20 16:00:55.008 INFO    SCRIPTING: [ATME] Start main timer
2019-01-20 16:00:55.009 INFO    SCRIPTING: [ATME] Gestion des spawn multiples
2019-01-20 16:00:55.009 INFO    SCRIPTING: [ATME] Gestion des groupes avec tache on zone
2019-01-20 16:00:55.009 INFO    SCRIPTING: [ATME] Reaffectation des spots sur changement de cibles
2019-01-20 16:00:55.009 INFO    SCRIPTING: [ATME] Gestion des Handlers par module
2019-01-20 16:00:55.009 INFO    SCRIPTING: [ATME] Groupes en attente de création -> Suppression si delai 0
2019-01-20 16:00:55.009 INFO    SCRIPTING: [ATME] Finalisation de traitement Core event avec délai
2019-01-20 16:00:55.009 INFO    SCRIPTING: [ATME] Traitement des patrouilles
2019-01-20 16:00:55.009 INFO    SCRIPTING: [ATME] End main timer
2019-01-20 16:00:56.010 INFO    SCRIPTING: [ATME] Start main timer
2019-01-20 16:00:56.078 INFO    SCRIPTING: [ATME] Gestion des spawn multiples
2019-01-20 16:00:56.078 INFO    SCRIPTING: [ATME] Gestion des groupes avec tache on zone
2019-01-20 16:00:56.078 INFO    SCRIPTING: [ATME] Reaffectation des spots sur changement de cibles
2019-01-20 16:00:56.078 INFO    SCRIPTING: [ATME] Gestion des Handlers par module
2019-01-20 16:00:56.078 INFO    SCRIPTING: [ATME] Groupes en attente de création -> Suppression si delai 0
2019-01-20 16:00:56.078 INFO    SCRIPTING: [ATME] Finalisation de traitement Core event avec délai
2019-01-20 16:00:56.078 INFO    SCRIPTING: [ATME] Traitement des patrouilles
2019-01-20 16:00:56.078 INFO    SCRIPTING: [ATME] End main timer
2019-01-20 16:00:56.078 INFO    SCRIPTING: [ATME] Event 15 déclenché
2019-01-20 16:00:56.079 INFO    SCRIPTING: [ATME] Function C_Group_addUnit : ajout unité Pilot #001
2019-01-20 16:00:56.079 INFO    SCRIPTING: [ATME] Create group = F15C_ESC_1
2019-01-20 16:00:56.079 INFO    SCRIPTING: [ATME] Create unit = Pilot #001
2019-01-20 16:00:56.079 INFO    SCRIPTING: [ATME] Event 15 déclenché
2019-01-20 16:00:56.079 INFO    SCRIPTING: [ATME] Function C_Group_addUnit : ajout unité Pilot #002
2019-01-20 16:00:56.079 INFO    SCRIPTING: [ATME] Create unit = Pilot #002
2019-01-20 16:00:58.316 ERROR   DCS: Mission script error: : [string "C:\Users\COUGAR~1\AppData\Local\Temp\DCS\/~mis00002535.lua"]:22376: attempt to index field '?' (a nil value)
stack traceback:
   [C]: ?
   [string "C:\Users\COUGAR~1\AppData\Local\Temp\DCS\/~mis00002535.lua"]:22376: in function 'onEvent'
   [string "Scripts/World/EventHandlers.lua"]:13: in function <[string "Scripts/World/EventHandlers.lua"]:11>
2019-01-20 16:00:58.317 INFO    SCRIPTING: [ATME] Event 15 déclenché
2019-01-20 16:00:58.317 INFO    SCRIPTING: [ATME] Function C_Group_addUnit : ajout unité Pilot #003
2019-01-20 16:00:58.317 INFO    SCRIPTING: [ATME] Create unit = Pilot #003
2019-01-20 16:00:58.972 ERROR   DCS: Mission script error: : [string "C:\Users\COUGAR~1\AppData\Local\Temp\DCS\/~mis00002535.lua"]:22376: attempt to index field '?' (a nil value)
stack traceback:
   [C]: ?
   [string "C:\Users\COUGAR~1\AppData\Local\Temp\DCS\/~mis00002535.lua"]:22376: in function 'onEvent'
   [string "Scripts/World/EventHandlers.lua"]:13: in function <[string "Scripts/World/EventHandlers.lua"]:11>
2019-01-20 16:00:58.972 INFO    SCRIPTING: [ATME] Event 15 déclenché
2019-01-20 16:00:58.973 INFO    SCRIPTING: [ATME] Function C_Group_addUnit : ajout unité Pilot #004
2019-01-20 16:00:58.973 INFO    SCRIPTING: [ATME] Create group = F15C_ESC_2
2019-01-20 16:00:58.973 INFO    SCRIPTING: [ATME] Create unit = Pilot #004
2019-01-20 16:00:59.460 ERROR   DCS: Mission script error: : [string "C:\Users\COUGAR~1\AppData\Local\Temp\DCS\/~mis00002535.lua"]:22376: attempt to index field '?' (a nil value)
stack traceback:
   [C]: ?
   [string "C:\Users\COUGAR~1\AppData\Local\Temp\DCS\/~mis00002535.lua"]:22376: in function 'onEvent'
   [string "Scripts/World/EventHandlers.lua"]:13: in function <[string "Scripts/World/EventHandlers.lua"]:11>
2019-01-20 16:00:59.461 INFO    SCRIPTING: [ATME] Event 15 déclenché
2019-01-20 16:00:59.461 INFO    SCRIPTING: [ATME] Function C_Group_addUnit : ajout unité Pilot #005
2019-01-20 16:00:59.461 INFO    SCRIPTING: [ATME] Create unit = Pilot #005
2019-01-20 16:00:59.461 INFO    SCRIPTING: [ATME] Event 15 déclenché
2019-01-20 16:00:59.464 WARNING LOG: 7 duplicate message(s) skipped.
2019-01-20 16:00:59.464 INFO    SCRIPTING: [ATME] Event 17 déclenché
2019-01-20 16:01:00.469 WARNING LOG: 1 duplicate message(s) skipped.
2019-01-20 16:01:00.469 INFO    SCRIPTING: [ATME] Start main timer
2019-01-20 16:01:00.469 INFO    SCRIPTING: [ATME] Gestion des spawn multiples
2019-01-20 16:01:00.469 INFO    SCRIPTING: [ATME] Gestion des groupes avec tache on zone
2019-01-20 16:01:00.469 INFO    SCRIPTING: [ATME] Reaffectation des spots sur changement de cibles
2019-01-20 16:01:00.469 INFO    SCRIPTING: [ATME] Gestion des Handlers par module
2019-01-20 16:01:00.469 INFO    SCRIPTING: [ATME] Groupes en attente de création -> Suppression si delai 0
2019-01-20 16:01:00.469 INFO    SCRIPTING: [ATME] Finalisation de traitement Core event avec délai
2019-01-20 16:01:00.469 INFO    SCRIPTING: [ATME] Traitement des patrouilles
2019-01-20 16:01:00.469 INFO    SCRIPTING: [ATME] End main timer
2019-01-20 16:01:01.421 INFO    Lua: Lua CPU usage: metric: average mission execution: 3.3173 %
2019-01-20 16:01:03.082 INFO    SCRIPTING: [ATME] Event 12 déclenché
2019-01-20 16:01:03.082 INFO    SCRIPTING: [ATME] Fin de Mission
2019-01-20 16:01:03.091 INFO    LuaExport::LuaExportStart: [Tacview.EndLog] Telemetry file closed
2019-01-20 16:01:03.091 INFO    Config: netview stopped
2019-01-20 16:01:03.123 INFO    TERRAIN: lSystem::CleanScenes()
2019-01-20 16:01:03.171 INFO    TACVIEW.DLL: End of flight data recording
2019-01-20 16:01:03.172 INFO    EDCORE: (dDispatcher)enterToState_:3


Edited by CougarFFW04
Link to comment
Share on other sites

Une mission exemple

 

Voici une mission exemple et son fichier lua.

 

Se mettre hors de l'avions par F2, puis F10

 

F1 Pour le groupe au sol pas d'alarme avec autorespawn entre 1 et 4 sec

F2 Pour les deux helico avec alarme de 10s et autorespawn à 5 sec

 

En version 1.45, Oui il y a toujours un create après un respawn ou un spawn. Si une partie du traitement se fait après la première initialisation, utiliser le onStartHandler avec un test du paramètre paramètre à true et récuperer le groupe pour faire le traitement.

 

En 1.46 il n'y a plus d'appel a une callback de spawn si c'est un autorespawn car ATME considère que c'est le même groupe.

ATME direct menu spawn and destroy.miz

ATME_direct_menu_spawn_destroy.lua


Edited by sunski34
Link to comment
Share on other sites

Dans ton log, je vois que ta mission a deux modules.

 

Pour commencer, supprime le module qui ne gère pas le respawn pour voir si le bug existe toujours.

 

Si oui, il faut déjà passer en 1.46 et refaire les tests. Penser à mettre le onSpawnGroupHandler à nil (ou à le supprimer) et mettre en commentaire la fonction associée car sinon problème.

 

Tiens moi au courant.

 

As tu lu tes messages privés?

Link to comment
Share on other sites

 Share

  • Recently Browsing   0 members

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