Inscrit le: 31 Oct 2007 Messages: 142 Sujets: 23 Spécialité en worldedit: Boarf
Posté le: 05/11/07 17:18 Sujet du message: Problème... avec la fonction find next unit
Bonjour !
Ne maitrisant actuellement pas le jass (je crois que jvais m'y mettre bientot...), j'utilise le célèbre weu, mais voilà j'ai un petit problème avec une des fonction "advanced".
Je cherche à créer un sort automatique, qui se déclenche à chaque tir du héros (comme flèche enflammée par exemple), et qui a pour effet de créer une dummy unit qui lance le sort de chaine d'éclair modifié pour n'atteindre qu'une cible et ne pas faire de dégats. J'utilise ensuite l'action damage target pour simuler les dégats du sort. Jusque là tout va bien...
Le problème est qu'ensuite, il y a 50% de chances pour que l'éclair ricoche sur une autre cible, et ainsi de suite... Les dégats diminuant au fur et à mesure. C'est cette seconde unité susceptible d'être touchée que je n'arrive pas à désigner : j'utilise la fonction "find next unit" en prenant comme position de base celle de la cible initiale du sort, et il semble bien que ce soit également celle désigné par la fonction que j'essaye d'utiliser (en jeu ça se traduit par un one shot de l'unité une fois sur deux...)
J'aimerais donc savoir comment faire pour trouver la plus proche des unités sans tomber sur la cible initiale, située dans un rayon calculé par mes soins, et qui appartiennent à l'adversaire du héros...
Pis si c'est possible aussi, j'aimerais savoir comment faire pour répéter les chances de rebond de l'éclair à l'infini, histoire de pas avoir un trigger de 5 pages de if/then/else ><
Gargl un utilisateur du tristement célèbre WEU ! connu pour sa traduction complète et son augmentation rapide du poids des maps ! Télécharge en vitesse le JassNewGenPack !
Déjà il faut que tu saches que ce que tu veux faire est parfaitement faisable sans WEU.
Pour répéter la chaîne à l'infini, il suffit de faire une boucle "For each Integer from X to Y", en réduisant à chaque fois le nombre de dégâts par une division. A chaque fois, tu ajoutes la cible de l'éclair à un groupe. Quand tu choisis une nouvelle cible (unité au hasard dans un cercle autour de l'unité touchée précedemment), tu vérifies qu'elle n'est pas dans le groupe des touchés. Ensuite, si la cible choisie est égale à "Pas d'unité", tu règle l'entier que tu as choisi pour la boucle à Y, sinon tu le mets à X. Ca aura pour effet de terminer la boucle s'il n'y a plus de cibles.
Oui oui c'est compliqué, mais le sort le vaut bien _________________
Inscrit le: 31 Oct 2007 Messages: 142 Sujets: 23 Spécialité en worldedit: Boarf
Posté le: 05/11/07 18:55 Sujet du message:
Han merci beaucoup je connaissais pas le coup de l'entier variable *-*
Bon j'ai un peu galéré à rendre ma map compatible pour JassNewGenPack mais j'aovue que c'ets moins brouillon comme éditeur ^^"
Merci encore, jvais tester ça tout de suite :p _________________
Inscrit le: 31 Oct 2007 Messages: 142 Sujets: 23 Spécialité en worldedit: Boarf
Posté le: 05/11/07 21:28 Sujet du message:
Alors petit compte rendu : ça marche presque à la perfection ^^"
Quelques petits problèmes cependant :
- Quand il y a un cadavre dans la zone, il peut être frappé par un éclair, et forcément le joli texte flottant s'affiche =/
J'ai trouvé une solution mais je crois qu'elle est un peu trop bricolée : j'ai rajouté dans les conditions du "random unit... matching conditions" le fait que la vie de l'unité devait être supérieure à 0. Y aurait-il moyen de faire mieux ?
- Je ne trouve pas quel événement peut correspondre à l'action de lancer un sort comme flèche enflammée lors d'une attaque. Lorsque la compétence est en lancement automatique, pas de problème : j'ai créé une variable boléenne qui prend la valeur true dès que la compétence est en auto, et qui devient false dès qu'une autre compétence le devient ou que l'unité reçoit l'ordre de désactiver le lancement automatique. L'événement est alors "une unité est attaquée" et dans les conditions figurent le mana nécessaire ainsi que la vérif de la variable citée plus haut. J'ai essayé de reproduire ce système pour le lancement actif du sort, en créant une autre variable, en la passant vraie lorsque le héros reçoit l'ordre de lancer le sort et la passant fausse lorsque le sort est lancé (même évenement). Malheureusement, le déclencheur n'entre en action qu'après une attaque normale :/
- Dernier problème : juste le temps du lancement du sort, l'aura de précision du héros se désative oO
Je crois que c'est tout mais c'est déjà pas mal >< _________________
- Quand il y a un cadavre dans la zone, il peut être frappé par un éclair, et forcément le joli texte flottant s'affiche =/
J'ai trouvé une solution mais je crois qu'elle est un peu trop bricolée : j'ai rajouté dans les conditions du "random unit... matching conditions" le fait que la vie de l'unité devait être supérieure à 0. Y aurait-il moyen de faire mieux ?
Filtres plutôt à l'entrée du groupe (pareil pour les unités alliées, méfie toi !)
Citation:
- Je ne trouve pas quel événement peut correspondre à l'action de lancer un sort comme flèche enflammée lors d'une attaque. Lorsque la compétence est en lancement automatique, pas de problème : j'ai créé une variable boléenne qui prend la valeur true dès que la compétence est en auto, et qui devient false dès qu'une autre compétence le devient ou que l'unité reçoit l'ordre de désactiver le lancement automatique. L'événement est alors "une unité est attaquée" et dans les conditions figurent le mana nécessaire ainsi que la vérif de la variable citée plus haut. J'ai essayé de reproduire ce système pour le lancement actif du sort, en créant une autre variable, en la passant vraie lorsque le héros reçoit l'ordre de lancer le sort et la passant fausse lorsque le sort est lancé (même évenement). Malheureusement, le déclencheur n'entre en action qu'après une attaque normale :/
J'aimerais bien voir les déclencheurs en question. D'ailleurs j'ai un peu mal compris à quels moment ça bugue.
Citation:
- Dernier problème : juste le temps du lancement du sort, l'aura de précision du héros se désative oO
Tu veux dire que le graphique/les buffs n'aparaissent plus ? Oo
EDIT : C'est peut-être du à Canaliser. Vérifies si tu as bien mis à false le champ "Désactiver autres compétences" _________________
Inscrit le: 31 Oct 2007 Messages: 142 Sujets: 23 Spécialité en worldedit: Boarf
Posté le: 05/11/07 21:52 Sujet du message:
Euh comment ça filtrer à l'entrée du groupe ? ^^"
Sinon pour le coup de l'aura qui se désactive, après observation ça se passe à chaque éclair, donc à chaque création de l'unité dummy.
EDIT: et non ça ne semble pas venir de la compétence canaliser, j'ai mis sur false ça n'a rien changé et surtout mon héros n'est pas pourvu de cette compétence ^^"
Et sinon voilà les triggers :
Gui:
Trigger:
Evénements
Unité - A unit Reçoit un ordre avec objet pour cible
Conditions
(Ordered unit) Egal à Ranger (Issued order) Egal à (Order(blackarrow))
Actions
Set ATraitsDeFoudreInstant = TRUE
Gui:
Trigger:
Evénements
Unité - A unit Est attaqué
Conditions
(Attacking unit) Egal à Ranger (Mana of (Attacking unit)) Supérieur ou égal à 49.00 ATraitsDeFoudreInstant Egal à TRUE
Actions
Set ATraitsDeFoudreInstant = FALSE Set TraitDeFoudreDamage = (50.00 + (Real((Agilité of Ranger (Inclure bonuses))))) Set TraitDeFoudreTarget = (Attacked unit) Unité - Create 1 DummyUnit (Traits de foudre) for (Owner of Ranger) at ((Position of Ranger) offset by 50.00 towards (Facing of Ranger) degrees) facing Orientation bâtiment par défaut degrees Unité - Order (Last created unit) to Prophète orc - Chaîne d'éclairs TraitDeFoudreTarget Unité - Add a 0.50 second Générique expiration timer to (Last created unit) Unité - Cause Ranger to damage TraitDeFoudreTarget, dealing TraitDeFoudreDamage damage of attack type Sorts and damage type Foudre Texte flottant - Create floating text that reads (String((Integer(TraitDeFoudreDamage)))) at (Position of TraitDeFoudreTarget) with Z offset 10.00, using font size 10.00, color (20.00%, 0.00%, 80.00%), and 10.00% transparency Texte flottant - Change (Last created floating text): Désactiver permanence Texte flottant - Set the velocity of (Last created floating text) to 64.00 towards 90.00 degrees Texte flottant - Change the fading age of (Last created floating text) to 1.00 seconds Texte flottant - Change the lifespan of (Last created floating text) to 3.00 seconds Groupe unité - Add TraitDeFoudreTarget to TraitDeFoudreGroupTarget Set RandomPercentage = (Random integer number between 1 and 100)
For each (Integer LoopTraitDeFoudre) from 1 to 2, do (Actions)
Boucle - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Si - Conditions
RandomPercentage Inférieur ou égal à 60
Alors - Actions
Set TraitDeFoudreDamage = (TraitDeFoudreDamage - (TraitDeFoudreDamage x 0.10)) Set TraitDeFoudreTargetSecondary = (Random unit from (Units within (200.00 + (5.00 x (Real((Intelligence of Ranger (Inclure bonuses)))))) of (Position of TraitDeFoudreTarget) matching (((Matching unit) Différent de TraitDeFoudreTarget) and (((Owner of (Matching unit)) Egal à (Random player f Wait 0.25 seconds Unité - Create 1 DummyUnit (Traits de foudre) for (Owner of Ranger) at (Position of TraitDeFoudreTarget) facing Orientation bâtiment par défaut degrees Unité - Order (Last created unit) to Prophète orc - Chaîne d'éclairs TraitDeFoudreTargetSecondary Unité - Add a 0.50 second Générique expiration timer to (Last created unit) Unité - Cause Ranger to damage TraitDeFoudreTargetSecondary, dealing TraitDeFoudreDamage damage of attack type Sorts and damage type Foudre Texte flottant - Create floating text that reads (String((Integer(TraitDeFoudreDamage)))) at (Position of TraitDeFoudreTargetSecondary) with Z offset 10.00, using font size 10.00, color (20.00%, 0.00%, 80.00%), and 10.00% transparency Texte flottant - Change (Last created floating text): Désactiver permanence Texte flottant - Set the velocity of (Last created floating text) to 64.00 towards 90.00 degrees Texte flottant - Change the fading age of (Last created floating text) to 1.00 seconds Texte flottant - Change the lifespan of (Last created floating text) to 3.00 seconds Groupe unité - Add TraitDeFoudreTargetSecondary to TraitDeFoudreGroupTarget Groupe unité - Remove TraitDeFoudreTarget from TraitDeFoudreGroupTarget Set TraitDeFoudreTarget = TraitDeFoudreTargetSecondary Set TraitDeFoudreTargetSecondary = Pas d'unité Set RandomPercentage = (Random integer number between 1 and 100) Set LoopTraitDeFoudre = 1
Pour filtrer à l'entrée du groupe : Units In Range Matching X
Pour ton déclencheur, je ne comprends pourquoi tu as mis "blackarrow" comme ordre : c'est l'ordre pour éxécuter en direct, et pas en automatique, non ?
Ensuite, je te conseilles de mettre ta boucle de 1 à 3, je me demande comment ça peut marcher actuellement. _________________
Inscrit le: 31 Oct 2007 Messages: 142 Sujets: 23 Spécialité en worldedit: Boarf
Posté le: 05/11/07 22:11 Sujet du message:
Oui blackarrow est l'ordre direct, en automatique ça marche très bien, et justement, étant donné que c'est en ordre direct, le sort devrait se lancer dès la prochaine attaque, or il ne par qu'à celle d'après.
Pour filtrer à l'entrée c'est bien ça que j'ai fait en fait ^^ (mais on le voit pas parce que la condition est trop longue ><)
Sinon je viens de tester l'histoire de l'aura, c'est bien le fait de créer une unité alliée dans le coin qui génère ce "bug", j'ai testé en créant l'unité pour le neutre passif, et ya plus de bug, par contre ya plus d'éclair non plus --" (j'ai aussi créé pour un ordi ennemi, histoire au cas où le neutre passif ne puisse cibler un neutre hostile avec un sort agressif, mais ça marche pas non plus oO)
Et pour la boucle, moi ça me parait normal que ça tourne comme ça, vu que la valeur de l'entier est remise à 1 à la fin. Quoique en fait tout dépend du moment auquel l'entier passe à 2 >< _________________
Sinon je viens de tester l'histoire de l'aura, c'est bien le fait de créer une unité alliée dans le coin qui génère ce "bug", j'ai testé en créant l'unité pour le neutre passif, et ya plus de bug, par contre ya plus d'éclair non plus --" (j'ai aussi créé pour un ordi ennemi, histoire au cas où le neutre passif ne puisse cibler un neutre hostile avec un sort agressif, mais ça marche pas non plus oO)
Tout simplement pour éviter que tu t'amuses à OS tes potes avec des sorts imba, les cibles sont limitées aux ennemis.
Citation:
Et pour la boucle, moi ça me parait normal que ça tourne comme ça, vu que la valeur de l'entier est remise à 1 à la fin. Quoique en fait tout dépend du moment auquel l'entier passe à 2 ><
Eh bien oui mais non, en passant la chose en Jass on voit qu'à chaque éxécution de la boucle il augmente la variable de 1. Donc, tu mets ta variable à 1, il l'augmente à 2, et donc en théorie ça s'arrête.
PS : En fait je viens de regarder, c'est quand c'est SUPERIEUR à 2 que ça s'arrête. Donc ton truc s'arrête bien quand il faut, et j'ai dis une bêtise. _________________
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