Page 1 sur 6

Création d'une mission multi-objectifs

Publié : 22 nov. 2014, 18:17
par Mystik
Toujours dans mon édition de mission...
J'ai avancé un peu avec un coup de pouce de Julien (merci à lui)

Je reviens pour demander un truc précis.
Je cherche à déclencher une tâche via un document secret. J'ai vu qu'en ouvrant ces derniers, cela nous bascule direct sur la carte dans l'onglet info avec une description du doc apparemment (vide de base).

Dans un premier temps je cherche à déclencher ma tâche via l'ouverture de ce document (et pourquoi pas utiliser l'ouverture auto du document via la carte, reste à donner une description... je sais pas faire)
J'ai lié mon trigger au document mais je vois pas trop quel script utiliser...

Merci les gars

Re: Déclenchement d'un événement à la lecture d'un document

Publié : 22 nov. 2014, 18:55
par Tyrghen
Salut, j'ai coupé le fil précédent pour que l'info ne se perde pas pour plus tard.
J'ai mis ta question dans le titre.

Re: Déclenchement d'un événement à la lecture d'un document

Publié : 22 nov. 2014, 19:07
par Tyrghen
Tu as placé le document avec quoi?
Et quel document?

Je ne vois pas directement de quel objet tu parles.

Re: Déclenchement d'un événement à la lecture d'un document

Publié : 23 nov. 2014, 16:27
par Mystik
le document est placé via l'éditeur, et c'est le "document secret"... pourquoi j'ai pris celui là plutôt qu'un autre me demande pas :lol:

Du coup j'ai placer un trigger relié à ce document en espérant qu'il déclenche ma prochaine tâche, voici le script du trigger:

["jip_var_done",true] call edt_fnc_setVar;["Investir la Base de Kamino et détruire les réserves d'arme de la résistance","created","Le document trouvé nous indique que ce convoi d'arme prenait la destination du centre de tir de Kamino","marker1_3","jip_var_done3"] call edt_fnc_task;

Du coup j'ai bien été regardé dans tes précedent post où tu me disais de regarder dans ramasser.sqf, mais j'suis désolé ça reste du chinois pour moi... y'a bien une ligne de code mais où dois-je la placer?

De plus, est il possible d'insérer du texte dans l'onglet "infos" de la carte, qui se déclenche automatiquement quand on ouvre le document (cela reste superflu à la limite)

Merci tyrghen ;) J'espère t'avoir apporté assez de détails pour que tu comprennes

Re: Déclenchement d'un événement à la lecture d'un document

Publié : 24 nov. 2014, 12:48
par Tyrghen
Ok, maintenant je te suis :)

Bon, ici déjà, on est sur la Base Mission, pas sur une mission pur éditeur.
Ca change la donne :)

Ton code pour l'activation est bon, tu ne dois rien modifier de ce côté là.
Simplement ton déclencheur n'est pas activé.

Pour tester cette partie là du code, modifies la condition du déclencheur de:

Code : Tout sélectionner

this
à

Code : Tout sélectionner

true
Et tu verras si ça fait ce que tu veux.
Une fois le test fini, tu remets "this".

Une remarque, tu utilises les variables JIP, c'est bien, mais dans ton cas, si tu te contentes de les numéroter, tu peux simplement utiliser des chiffres:

Code : Tout sélectionner

[1,true] call edt_fnc_setVar;
["Investir la Base de Kamino et détruire les réserves d'arme de la résistance","created","Le document trouvé nous indique que ce convoi d'arme prenait la destination du centre de tir de Kamino","marker1_3",3] call edt_fnc_task; 
C'est une facilité que j'ai ajoutée pour la concision et que j'utilise quand je crée le fil de ma mission.

Quand j'utilise les variables JIP je leur donne un nom reflétant leur fonction.
"jip_documents_trouves"
"jip_radar_detruit"
etc.

Le "jip_" que je mets dans les exemples est facultatif, il ne sert qu'à identifier le fait qu'on parle d'une variable synchronisée.


Pour la fonction ramasser, tu la mets simplement dans la ligne d'initialisation du document. Pas de bol, j'ai pas documenté ce script là dans la Base Mission.
Tu édites l'objet et dans le champ d'initialisation:

Code : Tout sélectionner

nul = [this] execVM "ramasser.sqf";
Petite remarque:
Le "nul = " est nécessaire parce que l'éditeur n'accepte pas du code qui renvoie du code. Hors c'est ce que fait la fonction execVM.
Du coup, on met "nul =" et la ligne ne renvoie rien à l'éditeur puisqu'elle écrit sa valeur dans une variable.
C'est con... mais faut le savoir.
Tu peux essayer sans le "nul =" tu verras le message d'erreur classique.

Maintenant, si tu veux déclencher le trigger précédent, il faut que l'action ramasser poste son statut quelque part.
Le code devient:

Code : Tout sélectionner

nul = [this, getPos this, "jip_documents"] execVM "ramasser.sqf";
L'action va maintenant poster le résultat dans la variable "jip_documents", que tu peux alors utiliser dans la condition de ton déclencheur

Code : Tout sélectionner

["jip_documents",false] call edt_fnc_getVar

Re: Déclenchement d'un événement à la lecture d'un document

Publié : 24 nov. 2014, 14:01
par Mystik
merci pour ta réponse détaillée, je testerais cela cet ap midi ;)

Re: Déclenchement d'un événement à la lecture d'un document

Publié : 24 nov. 2014, 15:21
par Mystik
bon je vais tester ça mais je me pose des question sur la fin du post, sur la valeur "false", elle signifie bien un echec de la mission où jsuis a côté de mes pompes?

Sinon aurais tu une astuce à me donner pour tester une mission sans devoir la faire?

Re: Déclenchement d'un événement à la lecture d'un document

Publié : 24 nov. 2014, 15:41
par Tyrghen
Mystik a écrit :bon je vais tester ça mais je me pose des question sur la fin du post, sur la valeur "false", elle signifie bien un echec de la mission où jsuis a côté de mes pompes?
Non, quand tu appeles la commande "getVar" tu demandes la valeur actuelle qui se cache derrière "jip_documents".
Le deuxième paramètre, c'est la valeur que tu reçois si 'jip_documents" n'a pas encore de valeur.

Dans notre cas, tant que le document n'est pas ramassé, "jip_documents" n'a pas encore de valeur.

La condition d'un déclencheur attend une valeur vraie (true) ou fausse (false), donc on lui donne ce qu'elle demande: le contenu de "jip_documents" ou "false". La condition ne sera donc pas validée tant que "jip_documents" ne devient pas "true".
Mystik a écrit :Sinon aurais tu une astuce à me donner pour tester une mission sans devoir la faire?
Tu veux dire tester du code?
Oui bien sûr, tu as la console de débogage de l'éditeur.

Mais personnellement, je te recommande le RMM Debug de la Base Mission, accessible dans le menu "U", tu peux y taper du code et tu reçois la valeur renvoyée par ce code dans le bas de la fenêtre. Dans la console de débogage, tu dois envoyer la valeur vers l'écran avec un "hint" ou autre.
Personnellement, je préfère le RMM Debug quand je teste une condition ou la valeur d'une variable.

Tu places un joueur, tu fais "prévisualiser" et tu peux tester les différentes commandes.
Tu peux ajouter des objets avec l'ACV et ensuite exécuter des commandes dessus. L'ACV associe un nom de variable (OBJ1, OBJ2, etc.) avec les objets que tu places.

Re: Déclenchement d'un événement à la lecture d'un document

Publié : 24 nov. 2014, 15:49
par Mystik
Oulla ça fait bcp de chose... je suis vraiment un noob en script lol

Bon je viens de tester mais j'ai eu une erreur je pense que c'est dû aux guillemets manquant là:

["2",true] call edt_fnc_setVar;["Investir la Base de Kamino et détruire les réserves d'arme de la résistance","created","Le document trouvé nous indique que ce convoi d'arme prenait la destination du centre de tir de Kamino","marker1_3","3"] call edt_fnc_task;

Re: Déclenchement d'un événement à la lecture d'un document

Publié : 24 nov. 2014, 15:57
par Tyrghen
Faut pas de guillements quand tu utilises des chiffres ;)

Et après ça devrait être bon.

Code : Tout sélectionner

[2,true] call edt_fnc_setVar;
["Investir la Base de Kamino et détruire les réserves d'arme de la résistance","created","Le document trouvé nous indique que ce convoi d'arme prenait la destination du centre de tir de Kamino","marker1_3",3] call edt_fnc_task;
Si t'as encore une erreur, essayes d'utiliser l'autre fonction raccourci pour les status:

Code : Tout sélectionner

2 call edt_fnc_completed;
qui est un équivalent plus simple de :

Code : Tout sélectionner

[2,true] call edt_fnc_setVar;