Alors j'ignore si le titre est explicite ou accrocheur (oui bon ca on s'en fout) mais force est de constater qu'après bien des échecs je me lance dans un message pour demander conseil. Dans une map qui devrait logiquement sortir prochainement je m'attèle à un sort assez chiatique mais plutot sympa (sinon je le ferais pas). En gros ca donne ca :
Le héros invoque 3 unités différentes (donc on les crée via trigger)
On a un pal qui va flash heal en permanance le héros du joueur qui a lancé le sort
Un démoniste qui va faire des pluies de feu aléatoirement sur les unités ennemies à portée (512) et coller des malédictions sur les mêmes unités aléatoires autour de lui (ennemies évidemment)
Un chasseur des ombres qui va hex aléatoirement suivant le même principe que le démoniste et qui va surtout lancer des chaines de soin sur le héros qui a lancé le sort
C'est bon vous suivez ? xD Ok bon jusque là pour créer les unités pas de problème. Pour stocker les unités dans des variables d'unités (avec déploiement donc puisque la map comprendra plusieurs joueurs donc potentiellement plusieurs héros identiques) ca marche aussi.
Le souci vient principalement de l'indexation pour reconnaître le joueur qui manipule tel héros dans le trigger "boucle" qui dira de faire toutes les 2-3sec telle action sur tel perso etc.
Bon c'est pas propre ni rien mais ca donne ca (oui pour ceux qui reconnaissent c'est un héros basé sur la 1ere guilde mondiale de WoW c'est le petit trip de la map, héros surprise toussa)
Gui:
Trigger:
Glory of the Raider
Evénements
Unité - A unit Commence le lancement d'une compétence
Conditions
(Ability being cast) Egal à (==) Glory of the Raider
Actions
Set Kungen[(Player number of (Owner of (Casting unit)))] = (Casting unit) Set Ensidia[(Player number of (Owner of (Casting unit)))] = (Owner of (Casting unit)) Unité - Create 1 Mackzter (niveau 1) for (Owner of (Casting unit)) at (Position of (Casting unit)) facing Orientation bâtiment par défaut (270.0) degrees Set Mackzter[(Player number of Ensidia[(Player number of (Owner of (Casting unit)))])] = (Last created unit) Unité - Add Feu sacré to Mackzter[(Player number of Ensidia[(Player number of (Owner of (Casting unit)))])] Unité - Set level of Feu sacré for Mackzter[(Player number of Ensidia[(Player number of (Owner of (Casting unit)))])] to 2 Unité - Add a 45.00 second Summoned Unit expiration timer to Mackzter[(Player number of Ensidia[(Player number of (Picked player))])] Déclencheur - Run Mackzter rank 1 <gen> (checking conditions) Unité - Create 1 Buzzkill (niveau 1) for (Owner of (Casting unit)) at (Position of (Casting unit)) facing Orientation bâtiment par défaut (270.0) degrees Set Buzzkill[(Player number of Ensidia[(Player number of (Owner of (Casting unit)))])] = (Last created unit) Unité - Add Pluie de flammes to Buzzkill[(Player number of Ensidia[(Player number of (Owner of (Casting unit)))])] Unité - Set level of Pluie de flammes for Buzzkill[(Player number of Ensidia[(Player number of (Owner of (Casting unit)))])] to 2 Unité - Add a 45.00 second Summoned Unit expiration timer to Buzzkill[(Player number of Ensidia[(Player number of (Owner of (Casting unit)))])] Déclencheur - Run Buzzkill rank 1 <gen> (checking conditions) Unité - Create 1 Meka (niveau 1) for (Owner of (Casting unit)) at (Position of (Casting unit)) facing Orientation bâtiment par défaut (270.0) degrees Set Mek[(Player number of Ensidia[(Player number of (Owner of (Casting unit)))])] = (Last created unit) Unité - Add Hex to Mek[(Player number of Ensidia[(Player number of (Owner of (Casting unit)))])] Unité - Add a 45.00 second Summoned Unit expiration timer to Mek[(Player number of Ensidia[(Player number of (Owner of (Casting unit)))])] Déclencheur - Run Mek rank 1 <gen> (checking conditions)
Deja est-ce plus ou moins correct, et ensuite dans la boucle (donc un autre trigger) comment determiner que cette unité là appartient bien à tel joueur puisque l'indexation va me demander à chaque fois s'il s'agit du "owner of triggering/casting unit" et ca risque de foirer dans la mesure où il n'y a pas de casting unit dans le trigger "boucle" (ouais je sais pas si je suis clair la :/)
Bref un peu de lumière sur tout ca m'aiderait grandement. En gros faut retenir pour simplifier que 3 unités apparaissent et font des actions chacunes de leur coté en boucle jusqu'à expiration du timer =). Bon et pas taper s'il y a des aberrations pour vous, je suis loin d'être bon dans ce domaine :/
J'avoue que je ne comprends pas le problème =o
Tu veux pouvoir reconnaître un joueur dans des actions futures nan ? Il suffit de l'enregistrer sur une variable, à déploiement comme les précédentes. D'ailleurs tu devrais utiliser quelques variables dans ce déclencheur pour alléger les calculs. Pour ce que j'en sais, récupérer 12 fois des choses telles que (Player number of (Owner of (Casting unit))) est plus lent que d'enregistrer une fois la valeur en question puis de la réutiliser 12 fois
PS : Viens te présenter, dans le forum dédié, d'autant que tu as l'air de savoir un peu plus t'y prendre en déclencheur que le nouveau-membre-fantôme habituel _________________
Bah je veux en gros pouvoir le reconnaitre dans la mesure ou il peut y en avoir plusieurs qui possèdent ce même héros et pour éviter toute confusion dans les triggers. Bah j'avoue que récuperer 12 fois la même valeur c'est crade, vraiment crade et en plus assez lourd, seulement c'est parceque je parviens pas à lui donner une valeur fixe >_<
Je file me présenter, quel impoli _________________
Ca j'avais bien saisi la logique, mais sur quoi je base l'indexation puisque j'utilise une variable joueur en déploiement ?
Ah. Effectivement, c'est gênant.
Il me semble qu'il y a moyen d'empêcher un joueur de contrôler ses unités dans les commandes cinématiques, ce qui te permettrait de garder le même possesseur et donc avoir le même index. Je vais ouvrir l'éditeur pour vérifier que ça existe.
Sinon, tu peux tenter avec la custom value, mais tu vas vite te rendre compte qu'une seule custom value par unité c'est beaucoup trop peu
EDIT : Je m'étais planté, l'action mentionnée touche le contrôle sur toutes les unités d'un joueur.
EDIT² : Si tu as besoin des customs values pour autre chose (ce qui est fort probable), tu peux utiliser les hashtables. En l'occurrence ça donnerait quelque chose du genre :
Gui:
Trigger:
Custom script: set udg_tmpHandle = bj_lastCreatedUnit Table de hachage - Save (Player number of (Owner of (Casting unit))) as (Key tmpHandle) of keyGotR in (Last created hashtable)
Si tu mets ça après avoir créé une des unités, cela stockera le numéro du joueur sous une adresse correspondant à l'unité. Tu peux ensuite le récupérer sous la même adresse (cette fois il faudra que tu changes le custom script pour que ce soit égal à ta variable unité, avec udg_ devant). keyGotR est juste un chiffre qui va servir à identifier qu'il s'agît bien de données sur le sort Glory of the Raider. Des hacks de l'éditeur permettent d'avoir des entiers uniques sans s'embêter à les définir soit-même, mais je cause déjà de hashtables et de custom scripts à quelqu'un qui s'est inscrit y a une heure, donc je crois que je vais me limiter =)
Un des défauts de la hashtable est qu'il faut nettoyer les données, sinon elles y restent et occupent de la mémoire inutilement. N'oublie pas que ta hashtable doit être initialisée au début de la carte. J'ai entendu dire qu'il y avait des bugs avec les actions de la hashtable dans l'interface utilisateur, donc fais un backup de ta carte avant d'appliquer ces modifications. _________________
Dernière édition par Bantas le 26/08/09 03:17; édité 1 fois
Je vois la logique du truc ouais, par contre question idiote et de noob très certainement mais ta hashtable tu l'affiches comment dans les actions ? J'ai beau chercher j'ai pas vu (et pourtant j'ai JNGP) _________________
Je sais je suis chiant mais comme je peux pas embêter Profet je me rabats sur vous <3. Non plus sérieusement parlant tu dois avoir une version plus optimisée alors, ou bien je suis aveugle _________________
Ok bon donc ca c'est mort vu que j'utilise NewJassGenPack je vais voir s'il y a une MAJ justement, mais sinon je vais me debrouiller, enfin je vais essayer, merci en tout cas des réponses _________________
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