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=aba937f29203e279d2c1d8444ccdd5efMé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

Problème de conception
Aller à la page 1, 2  Suivante
 
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
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 24/01/13 18:41    Sujet du message: Problème de conception Citer

Plop,
Je suis en train de faire un système de "ComplexEvent", c'est à dire d'événements composés de sous-événements, se déclenchant quand chacun d'entre eux l'a été.
Dans ma structure j'ai un déclencheur t auquel j'attache tout les sous-événements, ce qui me permet de savoir combien doivent encore être déclenchés avant que le "ComplexEvent" soit exécuté.
Et j'ai un problème pour l'ajout de ces événements :
Soit je mets t en private, ce qui est plus sûr, mais l'utilisateur ne peut pas jouter n'importe quel event : il doit passer par une méthode de la struct. Et comme j'ai pas envie d'en faire une pour chaque type d'event, c'est limité.
Soit je met t en readonly. C'est moins sûr, mais au moins on peut ajouter n'importe quel type d'event. A la limite, ça m'aurais pas dérangé : il suffit de préciser de ne pas détruire t. Mais à chaque event ajouté, il faut que j'incrémente un entier dans ma struct. Ça devient donc vite embêtant pour l'utilisateur, et d'autant moins sûr pour le fonctionnement du système.

Quelqu'un a une solution pour avoir les avantages des deux systèmes Very Happy ?

Ah et tiens, pendant que j'y pense : que pensez-vous de la bibliothèque Event? Je m'en sers pour cette struct, mais je la trouve pas génial parce qu'on peut pas détruire les Events. En fait j'ai pensé à l'arranger à ma manière, mais Nes n'est pas idiot (enfin, il me semble Rolling Eyes), s'il n'a pas permis ça, c'est qu'il y a une raison non?
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Ectelion
Membre reconnu


Inscrit le: 12 Nov 2011
Messages: 1062
Sujets: 107
Spécialité en worldedit: Inactif(Enfin presque)
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 24/01/13 19:42    Sujet du message: Citer

Il faut... Non en fait j'ai pas d'idées. Quoique, peut-être que tu n'a qu'à mettre que l'on ajoute les events par des appels de functions à l'instance de ta struct
mais je doute que ce soit réellement une réponse à ton problème et que ça change réellement quelque chose.
_________________
Inactif(Enfn presque)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Tirlititi



Inscrit le: 21 Fév 2010
Messages: 1785
Sujets: 22
Spécialité en worldedit: La modestie
Médailles: 1 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 24/01/13 20:08    Sujet du message: Citer

Est-ce que tu as pensé aux methods operator?
_________________
Warcraft III, c'était mieux avant. Y'avait des purs chefs-d'oeuvres du mapping !
Road Of Glory (par moi)
Casse-briques (par moi)
Temple de Glace (par moi)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 24/01/13 20:21    Sujet du message: Citer

Bah, étant donné qu'une méthode opérator ne peut qu'assigner une valeur à une variable, je ne vois pas comment m'en servir pour ajouter un event à un déclencheur Shocked.

@Lord : C'est ce que j'essaie d'éviter de faire Wink.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Ayane
Bot administrateur


Inscrit le: 17 Sep 2007
Messages: 2009
Sujets: 49

Médailles: 2 (En savoir plus...)
Ayane (Quantité : 1) Rédacteur de tuto #1 (Quantité : 1)

MessagePosté le: 24/01/13 20:46    Sujet du message: Citer

Jass:
constant native GetTriggerEventId () returns eventid

Ou plus simplement créé un déclencheur par évènement et met en action une vérification que tous les évènements ont été déclenchés, si c'est le cas tu exécute la ComplexAction.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Tirlititi



Inscrit le: 21 Fév 2010
Messages: 1785
Sujets: 22
Spécialité en worldedit: La modestie
Médailles: 1 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 24/01/13 21:09    Sujet du message: Citer

Ben je sais pas comment tu t'es débrouillé jusque là, mais tu peux utiliser l'opérateur "t" pour renvoyer le trigger auquel l'utilisateur rajoute l'event tout en incrémentant ton truc :

Jass:
struct ComplexEvent

    private trigger t=CreateTrigger()
    private integer i=0
    ....

    method operator t takes nothing returns trigger
        set this.i = this.i+1
        return this.t
    endmethod

    ....

endstruct


Ensuite, l'utilisateur fait un "TriggerRegister(complexEventVariable.t, ....)" et pis voilà.

EDIT : Grillé par Ayane ^^. Je met trop de temps à répondre :O
_________________
Warcraft III, c'était mieux avant. Y'avait des purs chefs-d'oeuvres du mapping !
Road Of Glory (par moi)
Casse-briques (par moi)
Temple de Glace (par moi)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Ayane
Bot administrateur


Inscrit le: 17 Sep 2007
Messages: 2009
Sujets: 49

Médailles: 2 (En savoir plus...)
Rédacteur de tuto #1 (Quantité : 1) Ayane (Quantité : 1)

MessagePosté le: 24/01/13 23:42    Sujet du message: Citer

S'il s'agit juste de savoir le nombre de fois qu'a été exécuté un déclencheur il y a:
Jass:
constant native GetTriggerEvalCount     takes trigger whichTrigger returns integer
constant native GetTriggerExecCount     takes trigger whichTrigger returns integer

_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 25/01/13 12:58    Sujet du message: Citer

Pour l'instant j'utilise GetTriggerEventId qui me permet de savoir, à l'aide d'une hashtable, si l'événement déclenché ne l'a pas déjà été. Si c'est la première fois qu'il l'est, je décrémente une variable. Lorsque cette variable arrive à 0, je déclenche le ComplexEvent. Donc il vaut mieux utiliser une variable propre à la struct plutôt que GetTriggerEvalCount pour éviter les événements déclenchés deux fois, et qui ne doivent être comptabilisés qu'une seule fois.

Tirlititi, j'avoue que j'avais pas du tout pensé à ça Wink. Je vais utiliser cette solution pour le moment, sauf si je trouve mieux. Parce qu'il faut quand même que l'utilisateur fasse attention : il ne doit utiliser cet opérateur que lorsqu'il ajoute un event.
_________________
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: 25/01/13 15:51    Sujet du message: Citer

Comme tu le sais il n'est pas possible de supprimer un event, seulement un trigger.
En fait en cas de nécessité d'avoir un event dynamique (qui est créé/détruit) il vaut mieux coder soit même la chose.
Le plus simple, et probablement la meilleure solution, est en effet de créer/détruire un trigger. C'est pour cela qu'Event ne propose pas la gestion de tels events.
Je l'ai fait pour UnitLL par exemple.

Par contre je ne suis pas spécialement convaincu de la nécessité d'une telle library, comparé à écrire directement le code nécessaire quand c'est besoin, à voir.
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 25/01/13 20:48    Sujet du message: Citer

Hum ça me paraît difficile de gérer ça sans Event : il peut y avoir plusieurs déclencheurs par instance : /.

A la base je comptais utiliser cette lib' pour une sorte de système de quête. Et devoir tout faire directement à chaque fois est assez embêtant, c'est pour ça que je l'ai faite.
_________________
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: 25/01/13 21:27    Sujet du message: Citer

J'ai du mal à bien visualiser le truc, mais à priori oui une library Event "dynamique" serait intéressante dans ce cas ci.
Si tu veux je peux t'en faire une. (et si tu préfères le faire toi même, ca me va aussi)
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 25/01/13 21:39    Sujet du message: Citer

Citation:
J'ai du mal à bien visualiser le truc

A quoi ça sert ou comment ça fonctionne Razz?

Citation:
Si tu veux je peux t'en faire une. (et si tu préfères le faire toi même, ca me va aussi)

Je ne suis pas contre un peu d'aide. Pas forcément que tu fasses tout (sauf si t'en as l'envie et le temps ^^), mais que tu me donnes quelques pistes. Parce que je ne vois pas comment faire pour qu'une fois un event détruit, les triggers auxquels il est attaché ne se déclenche plus. Il faudrait utiliser un type d'event propre à chaque instance, pour qu'il ne soit plus déclenché une fois l'instance détruite (genre UnitDie, avec une unité différente pour chaque instance, mais ça serait pire que crade).
_________________
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: 25/01/13 21:55    Sujet du message: Citer

Si on peut détruire l'event, le code associé ne sera plus déclenché.
Je ne te proposais pas de toute faire mais juste un Event like, sauf que l'on pourrait détruire les Event.
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 03/02/13 12:30    Sujet du message: Citer

Bon, je remonte le sujet Rolling Eyes.
Finalement cette lib' Event où les events seraient destructibles est indispensable pour finir mes systèmes.
Donc comment faire? Parce qu'il est de toute façon impossible d'enlever un Event d'un trigger.
Je me suis dit qu'au lieu de faire q = this (comme dans la lib' de Nes), on ferait q = this.r avec r un réel propre à chaque instance (une instance détruite puis recréée n'aura pas la même valeur).
_________________
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: 03/02/13 20:11    Sujet du message: Citer

Ce n'est pas possible de faire ainsi, cet event ne fonctionne qu'avec les variables global non array.
Je n'y ai pas encore réfléchi, j'essaierais de me pencher là dessus demain.
_________________
Le violet, c'est moche.
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 1, 2  Suivante
Page 1 sur 2

 
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