Worldedit
  Worldedit
Le site sur l'éditeur de warcraft 3 !
 
  FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs   medals.php?sid=f2a02da11e25f26f88783622eafdee61Médailles   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 
  FAQFAQ World Editor   UploadUploader une map ou une image    UploadAjouter sa map à l'annuaire   UploadConsulter l'annuaire

bj_wantDestroyGroup ?
Aller à la page Précédente  1, 2
 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Aide sur les déclencheurs
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7143
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1) Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 17/07/09 19:58    Sujet du message: Citer

C'est pas possible j'ai du forcément me vautrer quelque part mais j'ai de la merde dans les yeux là ...
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Max
Floodeur prématuré


Inscrit le: 13 Jan 2009
Messages: 550
Sujets: 47
Spécialité en worldedit: La partie déclencheurs sauf le GUI.


MessagePosté le: 18/07/09 03:58    Sujet du message: Citer

Troll-Brain a écrit:
Jass:
call ForGroupBJ2( GetUnitsOfTypeIdAll2('hfoo'), function Trig_test_Func003A )

"ForGroup" s'affiche après "GetUnitsOfTypeIdAll2" Confused Shocked Surprised Exclamation Question
Ce qui fait que dans l'enum du group bj_wantDestroyGroup est encore égal à true, et au premier GroupAddGroup le groupe g est détruit...

Aaaah c'est donc ça ! Tout s'explique Very Happy
Tu as trouvé pourquoi seules les unités de rouge sont prises en compte dans les actions. Je me méprenais, je croyais que ce qu'il se passait était que le groupe était bien entièrement créé, mais qu'il était supprimé après les pick des unités du joueur rouge. Alors qu'en fait c'est plutôt le contraire, non seulement le groupe n'est pas entièrement créé, mais il n'est pas supprimé puisque bj_wantDestroyGroup a déja servi et est repassé à false (donc ça leak). C'est comme si on avait un pick every unit dans un autre pick every unit, il y a conflit.

Troll-Brain a écrit:
Moi pas comprendre pourquoi les fonctions sont appelées dans cet ordre ...

C'est logique qu'elles soient appelées dans cet ordre, c'est la base de la programmation.
call FunA( FunB() )
La fonction FunB est appelée en premier, puisque la fonction FunA a besoin du résultat de FunB pour pouvoir être exécutée.
Prenons un exemple très simple :
RacineCarrée( Carré(x) ) -> il nous faut le carré de x pour pouvoir calculer la racine carrée du carré de x ^^.


Maintenant que l'on a compris le problème, on voit que dans ma map de démo on peut utiliser bj_wantDestroyGroup de la façon suivante :
Gui:
Trigger:
test pick
Collapse Evénements
Temps - Elapsed game time is 2.00 seconds
Conditions
Collapse Actions
Partie - Display to (All players) the text: removed
Set aGroup = (Units of type Fantassin)
Custom script:   set bj_wantDestroyGroup = true
Collapse Groupe unité - Pick every unit in aGroup and do (Actions)
Collapse Boucle - Actions
Unité - Remove (Picked unit) from the game


On doit dans le cas présent obligatoirement passer par une variable. Le code précédent revient exactement au même que le suivant (pour l'ordi, l'une ou l'autre des méthodes, ça revient au même, il n'y en a pas de meilleure) :
Gui:
Trigger:
test pick
Collapse Evénements
Temps - Elapsed game time is 2.00 seconds
Conditions
Collapse Actions
Partie - Display to (All players) the text: removed
Set aGroup = (Units of type Fantassin)
Collapse Groupe unité - Pick every unit in aGroup and do (Actions)
Collapse Boucle - Actions
Unité - Remove (Picked unit) from the game
Custom script:   call DestroyGroup(udg_aGroup)

Pour les deux on est obligé de passer par un custom script. Alors ici, choisir l'une ou l'autre des deux méthodes est uniquement une question de préférences...
_________________
Maximaxou@northrend

Projet Max Escape Creation (éditeur d'escapes : mazes/slides) : http://max.slid.free.fr/maxEscapeCreation/
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7143
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1) Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 18/07/09 09:37    Sujet du message: Citer

ForGroup est appelé quelques lignes après le display text "ForGroup", il n'y a aucune logique là dedans si ce n'est un bug de compilation du jass ...
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Max
Floodeur prématuré


Inscrit le: 13 Jan 2009
Messages: 550
Sujets: 47
Spécialité en worldedit: La partie déclencheurs sauf le GUI.


MessagePosté le: 18/07/09 13:15    Sujet du message: Citer

Je ne comprends pas ce dont tu parles.
Jass:
native ForGroup                 takes group whichGroup, code callback returns nothing

ForGroup prend en premier paramètre un groupe, qui dans notre cas est le résultat de GetUnitsOfTypeIdAll('hfoo').
_________________
Maximaxou@northrend

Projet Max Escape Creation (éditeur d'escapes : mazes/slides) : http://max.slid.free.fr/maxEscapeCreation/
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7143
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 18/07/09 13:36    Sujet du message: Citer

Regarde les fonctions gui que j'ai modifié et le trigger de test.
Le message "ForGroup" ne s'affiche qu'après "GetUnitsOfTypeIdAll2".
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Max
Floodeur prématuré


Inscrit le: 13 Jan 2009
Messages: 550
Sujets: 47
Spécialité en worldedit: La partie déclencheurs sauf le GUI.


MessagePosté le: 18/07/09 15:24    Sujet du message: Citer

Mais c'est tout à fait normal :

GetUnitsOfTypeIdAll2 est appelée en premier et ses actions exécutées jusqu'à la dernière action return result qui nous permet d'obtenir le groupe premier paramètre de l'appel de la fonction ForGroupBJ2.

Ensuite seulement la fonction ForGroupBJ2 peut être appelée, prenant donc deux paramètres, le groupe précédemment obtenu grâce à la fonction GetUnitsOfTypeIdAll2 (il lui faut absolument ce groupe obtenu par l'action "return result" pour pouvoir commencer à s'exécuter), et le code contenu dans la fonction Trig_test_Func003A.

C'est la même chose qu'un simple calcul mathématique :
RacineCarrée( 20 + 5 )
-> RacineCarrée( 25 )
-> 5
On calcule d'abord l'intérieur des parenthèses.
_________________
Maximaxou@northrend

Projet Max Escape Creation (éditeur d'escapes : mazes/slides) : http://max.slid.free.fr/maxEscapeCreation/
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7143
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1) Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 18/07/09 16:02    Sujet du message: Citer

o_O je ne voyais pas comme cela.

Jass:
library Test initializer init

globals
    private group Grp
endglobals

function ForGroupBJ2 takes group whichGroup, code callback returns nothing
    // If the user wants the group destroyed, remember that fact and clear
    // the flag, in case it is used again in the callback.
    local boolean wantDestroy = bj_wantDestroyGroup
    call BJDebugMsg("ForGroupBJ2")
    set bj_wantDestroyGroup = false
    call BJDebugMsg("avant for group")
    call ForGroup(whichGroup, callback)
    call BJDebugMsg("apres for group")
    // If the user wants the group destroyed, do so now.
    if (wantDestroy) then
        call DestroyGroup(whichGroup)
    endif
endfunction

private function ReturnGrp takes nothing returns group
    call BJDebugMsg("return group")
    return Grp
endfunction

private function test takes nothing returns nothing
    call BJDebugMsg("test")
endfunction

private function Actions takes nothing returns nothing
    call ForGroupBJ2(ReturnGrp(),function test)
endfunction

private function init takes nothing returns nothing
    local trigger trig = CreateTrigger()
    set Grp = CreateGroup()
    call TriggerRegisterPlayerEventEndCinematic(trig,Player(0))
    call GroupAddUnit(Grp,CreateUnit(Player(0),'hfoo',0.,0.,0.))
    call TriggerAddAction(trig,function Actions)
endfunction

endlibrary


Affiche :
Code:
"return group"
"ForGroupBJ2"
"avant for group"
"test"
"apres for group"


Mais moi je voyais plutôt comme cela :

Citation:
"ForGroupBJ2"
"avant for group"
"return group"
"test"
"apres for group"


Étant donné que le code en paramètre n'a pas besoin d'être utilisé tout de suite.
Mais du coup cela change carrément ma vision des choses ...

Merci de m'avoir appris cela.
Donc pour résumer Blizzard a faillit en codant les BJ, ils auraient du utiliser un GroupAddGroup supplémentaire. (ou peut être que ce n'est pas possible, la flemme d'y réfléchir ...)
Quitte à rendre le gui convertit en jass encore plus incompréhensible.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Max
Floodeur prématuré


Inscrit le: 13 Jan 2009
Messages: 550
Sujets: 47
Spécialité en worldedit: La partie déclencheurs sauf le GUI.


MessagePosté le: 18/07/09 16:35    Sujet du message: Citer

Jass:
function ForGroup takes group whichGroup, code callback returns nothing
L'ordinateur lui n'a aucune idée du moment à partir duquel on va lui demander d'utiliser le paramètre "whichGroup". Ca pourrait très bien être en première action.

Cependant ta précédente vision des choses est tout à fait compréhensible et logique. Je pense que beaucoup de gens font cette erreur là car c'est peu intuitif. On lit de la gauche vers la droite Razz


Troll-Brain a écrit:
Donc pour résumer Blizzard a faillit en codant les BJ, ils auraient du utiliser un GroupAddGroup supplémentaire.
Quitte à rendre le gui convertit en jass ecore plus incompréhensible.

Jass:
function GetUnitsOfTypeIdAll takes integer unitid returns group

Nous avons ici une fonction prédéfinie de blizzard, prenant un typeUnité et retournant un groupe unité. Nous utilisateurs ne sommes pas censés avoir besoin de savoir comment cette fonction est implémentée (définie) pour l'utiliser. On donne un type d'unité, on récupère toutes les unités de ce type, c'est tout simple (normalement...). Donc oui, je pense que blizzard a fait une erreur en ne prévoyant pas ce problème de conflit (développeur numéro 6492 gare à vous !).
_________________
Maximaxou@northrend

Projet Max Escape Creation (éditeur d'escapes : mazes/slides) : http://max.slid.free.fr/maxEscapeCreation/
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Max
Floodeur prématuré


Inscrit le: 13 Jan 2009
Messages: 550
Sujets: 47
Spécialité en worldedit: La partie déclencheurs sauf le GUI.


MessagePosté le: 18/07/09 16:40    Sujet du message: Citer

Troll-Brain a écrit:
Merci de m'avoir appris cela.

Mais de rien. Tu m'as appris des tonnes de choses, il faut bien que je te rende un peu la pareille ! Wink
_________________
Maximaxou@northrend

Projet Max Escape Creation (éditeur d'escapes : mazes/slides) : http://max.slid.free.fr/maxEscapeCreation/
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7143
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1) Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 18/07/09 16:44    Sujet du message: Citer

Citation:
Cependant ta précédente vision des choses est tout à fait compréhensible et logique. Je pense que beaucoup de gens font cette erreur là car c'est peu intuitif. On lit de la gauche vers la droite Razz


Ceci n'incite pas au racisme, c'est tout simplement une mauvaise blague :

Secret:

Saleté de Chinois Exclamation


_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Max
Floodeur prématuré


Inscrit le: 13 Jan 2009
Messages: 550
Sujets: 47
Spécialité en worldedit: La partie déclencheurs sauf le GUI.


MessagePosté le: 18/07/09 16:54    Sujet du message: Citer

Mdr j'y pensais à eux justement ! Very Happy
_________________
Maximaxou@northrend

Projet Max Escape Creation (éditeur d'escapes : mazes/slides) : http://max.slid.free.fr/maxEscapeCreation/
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Aide sur les déclencheurs Toutes les heures sont au format GMT + 1 Heure
Aller à la page Précédente  1, 2
Page 2 sur 2
La question posée dans ce topic a été résolue !

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com