online faq recherche accueil
 

Il y a 178 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

manipuler les déclencheurs

 
n°4587299
Maximaxou
rejoignez les fidèles du JASS
Posté le 09-12-2006 à 07:12:03  profilanswer
 

Bon weekend à tous,
   Encore un nouveau topic je sais, mais il y a tellement de choses à apprendre sur l'éditeur... :D
Concrètement je crée celui-ci afin d'éclaircir comment on peut manipuler les déclencheurs, et éventuellement comment ceux-ci fonctionnent.
Au passage je remercie troll-brain pour son tuyau à propos des fichiers blizzard.j et common.j.
Quelques questions me sont venues à l'esprit à propos des triggers (déclencheurs) :
 
1. Est-ce que pour un trigger ne s'exécutant qu'une seule fois (par exemple avec un évènement de tps de jeu écoulé), il est utile de le désactiver ( turn off(this trigger)  en dernière action) , ou non ?
 
2. Comment fonctionnent exactement les actions turn on/off (trigger) ,  run(trigger) ignoring or not conditions (ou plutôt comment "réagit" le trigger après l'exécution d'une de ces actions). Personnellement je le sais mais c'est pour que ceux qui ne le savent pas soient éclaircis à ce sujet.
 
3. Il existe plusieurs fonctions permettant de modifier les triggers, comme :
         _TriggerAddCondition( trigger, boolexpr condition )  
         _TriggerRemoveCondition( trigger, triggercondition )
         _TriggerClearConditions( trigger )                               //les types boolexpr condition, triggercondition, code actionFunc
                                                                                    //et triggeraction sont à éclaircir : comment spécifier une donnée de  
         _TriggerAddAction( trigger, code actionFunc )              //chacun de ces types ?
         _TriggerRemoveAction( trigger, triggeraction )
         _TriggerClearActions( trigger )
 
quatre autres fonctions, dont je ne comprends pas le fonctionnement :
        _TriggerWaitForSound( sound, real )
        _TriggerExecuteWait   takes trigger whichTrigger returns nothing
        _TriggerSyncStart     takes nothing returns nothing
        _TriggerSyncReady     takes nothing returns nothing
 
   Il y a également l'action : add(event) to (trigger), disponible en GUI, qui est en fait très compliqué puisque elle fait appel non pas à une fonction précise (en JASS), mais à une fonction qui correspond à l'évènement que l'on spécifie. Ceci est lié je pense au fait qu'on ne peut pas utiliser de variables dans les évènements. (mais je ne suis pas sûr)
 
Les fonctions TriggerRemoveEvent et TiggerClearEvents n'existent pas (probablement pour la même raison que TriggerAddEvent).
Néammoins existe-t-il des fonctions permettant de supprimer des évènements ? (par exemple j'en aurais besoin afin de changer un évènement every X second(s) of game, en every Y second(s) of game (X et Y étant deux réels)).
 
 
Voila, je crois que j'ai fait le tour. Certains me diront peut-être quelque-chose du style "je ne vois pas bien l'intérêt mais bon, c'est ton topic", néammoins j'espère que certains seront intéressés.  :D
 
 
PS : j'essaierai de répondre à ce que je peux si quelqu'un de plus qualifié que moi ne le fait avant.


Message édité par Maximaxou le 09-12-2006 à 07:14:47
n°4587301
Ayane
Posté le 09-12-2006 à 10:19:44  profilanswer
 


Voila qui devrait répondre à plusieurs de tes questions, la fonction initialement appelée est CreationDeclencheur
 

Code :
  1. function H2I takes handle H returns integer
  2. return H
  3. return 0
  4. endfunction
  5. function I2TA takes integer I returns triggeraction
  6. return I
  7. return null
  8. endfunction
  9. function TAction1 takes nothing returns nothing
  10. // Récupère un pointeur vers le déclencheur actuel
  11. local trigger trig = GetTriggeringTrigger()
  12. if udg_bool then
  13.  call TriggerRemoveAction( trig, I2TA(udg_tact) )
  14. endif
  15. // Détruit le déclencheur actuel
  16. call DestroyTrigger( trig )
  17. // Créer un nouveau déclencheur
  18. set trig = CreateTrigger()
  19. // Redéfinis l'événément
  20. set udg_tPer = udg_tPer * 2
  21. call TriggerRegisterTimerEvent( trig, udg_tPer, false )
  22. // Ajoute les actions
  23. call TriggerAddAction( trig, function TAction1 )
  24. endfunction
  25. function TAction2 takes nothing returns nothing
  26. // Affiche Hello
  27. call BJDebugMsg( "Hello" )
  28. endfunction
  29. function CreationDeclencheur takes nothing returns nothing
  30. // Création d'un déclencheur
  31. local trigger trig = CreateTrigger()
  32. // Ajout d'une action
  33. set udg_tact = H2I(TriggerAddAction( trig, function TAction1 ))
  34. // Ajout d'un événement
  35. set udg_tPer = 1.
  36. call TriggerRegisterTimerEvent( trig, udg_tPer, false )
  37. // Ajout d'autres actions
  38. call TriggerAddAction( trig, function TAction2 )
  39. endfunction

n°4587305
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 09-12-2006 à 12:05:55  profilanswer
 

1) tu peux le détruire dés la première ligne si ca te chante, en effet lorsq'un trigger a été lancé rien n'empêchera son exécution sauf un skip remaining actions (return).
Bien entendu il ne se lancera plus une deuxième fois puisqu'il a été supprimé
 
2) Bah si tu sais alors , je ne vais pas épiloguer la dessus, au pire on aura encore les questions de posées ^^
 
3) je penses qu'il n'est possible de rajouter que des fonctions en condition/action , fais un déclencheur en gui et convertis le en jass
 
Pour le wait for sound je penses que tu peux utiliser cette fonction pour qu'elle s'active quand le son a été joué depuis X secondes
Sinon pour les autres moi aussi je me demandes comment les utiliser
 
sinon Ayane t'as montré comment faire pour supprimer un event ^^, et oui fait recréer tout le trigger  :sarcastic:


Message édité par Troll-Brain le 09-12-2006 à 12:07:28
n°4587307
Maximaxou
rejoignez les fidèles du JASS
Posté le 09-12-2006 à 14:36:05  profilanswer
 

Citation :

Sinon pour les autres moi aussi je me demandes comment les utiliser


haHA enfin des choses que tu ne sais pas :DDD.
 
Ayane --> pour l'instant je n'ai pas compris grand chose à tout ce bazar mais je n'ai fait encore que survoler.:p
 
Dites-moi, il n'y a que deux personnes qui s'y connaissent en programmation sur le forum de l'éditeur ?

n°4587310
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 09-12-2006 à 16:17:28  profilanswer
 

C'est même pire que cela, je ne connais que le "langage" casio des calculatrices graphiques  :whistle:  
Sinon il y avait aussi Jihn, surtout le basic mais il ne poste plus


Message édité par Troll-Brain le 09-12-2006 à 16:17:59
n°4587317
Maximaxou
rejoignez les fidèles du JASS
Posté le 10-12-2006 à 00:52:20  profilanswer
 

lol ^^ Personnellement je m'y connais un peu en C, pascal, casio (:sarcastic:), visual basic. Mais je n'ai fait que survoler la plupart de ces langages. Le C est mon préféré parce que c'est un langage beaucoup plus proche de la machine que la plupart des autres langages évolués. Ainsi, on peut faire beaucoup plus de choses. Par exemple je trouve très efficace l'utilisation des pointeurs, or ceux-ci sont cachés dans la plupart des langages, mais pas en C. Par exemple suivant le cas, on va écrire &<nom_var>, <nom_var>, *<var>, les trois ayant un "niveau de pointage" différent. Alors que dans d'autres langages on écrira toujours <nom_var>, mais le fait de savoir si on prend la valeur, l'adresse de la variable est déterminé suivant le cas. En visual basic pour excel par exemple, si on a un variable de type cellule appelée "cell", pour modifier le contenu de la cellule on écrit "cell = <valeur>", mais pour modifier la cellule on écrit set cell = <cellule>.    (bon dsl je sors un peu du sujet de ce topic xD)


Message édité par Maximaxou le 10-12-2006 à 00:52:50
n°4587324
Ayane
Posté le 10-12-2006 à 11:27:46  profilanswer
 

En Visual Basic c'est avant la variable on met ByVal pour la valeur, ByRef pour le pointeur. Ce n'est pas aussi poussé que le C mais c'est beaucoup plus simple et lisible, pour les objets en VB6 on mettait set avant (comme en Jass). En Delphi (pascal) c'est ^ après la variable pour le pointeur, @ avant pour récupérer la valeur d'un pointeur. En fait chaque langage se révèle assez puissant lorsqu'on prend la peine de les connaîtres et de efaire abstraction de toutes les critiques de ceux qui ne programment en ce langage. Par exemple ceux qui font du C/C++ on tendance à répéter ce qui a été dit par certains qui ont à peine testé et qui ce sont contenté en fait de faire du vbscript, il est clair que si on programme en vbscript (aucun typage etc) les performances se font sentir dans une application VB.
 
En Jass on ne voie pas lorsqu'on passe des pointeurs ou non, ce qui constitue un défauts étant donné que beaucoup oublie de détruire l'objet qu'ils ont créer. En gros les types non pointeurs sont integer, real, boolean.
La plupart des types pointeurs sont des extentions du type handle (type group              extends     handle), handle étant justement le "type pointeur" du jass. On peut récupérer l'adresse (entier) du pointeur en faisant une conversion de types. En Jass il existe une astuce pour le faire, à savoir seul le type de la dernière valeur retournée est testé par le parseur dans une fonction.
 
Donc

Code :
  1. function H2I takes handle H returns integer
  2.     return H
  3.     return 0
  4. endfunction


 
Prend la valeur de type handle ou de son extention (dans mon exemple triggeraction), et retourne cette valeur sous le format entier. Le return 0 ne sera jamais executé, mais cela permet à ce que le parseur ne renvoye pas d'erreur de types incorrectes.


Message édité par Ayane le 10-12-2006 à 11:28:56
n°4587331
Maximaxou
rejoignez les fidèles du JASS
Posté le 10-12-2006 à 14:30:39  profilanswer
 

Citation :

Par exemple ceux qui font du C/C++ on tendance à répéter ce qui a été dit par certains qui ont à peine testé et qui ce sont contenté en fait de faire du vbscript


Désolé je ne le ferai plus :sarcastic:
 
Que fais-tu dans la vie Ayane, pour avoir autant de connaissances en programmation ?


Message édité par Maximaxou le 10-12-2006 à 14:47:05
n°4587344
Maximaxou
rejoignez les fidèles du JASS
Posté le 11-12-2006 à 00:33:36  profilanswer
 

edit : enfin, si c'est pas trop indiscret de demander


Aller à :
Ajouter une réponse