Inscrit le: 05 Aoû 2008 Messages: 65 Sujets: 11 Spécialité en worldedit: Un peu de tout, sauf en jass
Posté le: 13/07/09 23:12 Sujet du message: Infliger des dégâts selon le nombre d'arbres à proximité
Bonsoir a tous !
Je ressors de l'ombre, car, pour ceux qui ont vu mon topic dans les présentations des maps, je suis en train d'en faire une. J'ai régulièrement stoppé mon projet, mais je l'ai continué malgré tous. Pour l'instant, je suis plus que jamais en train de m'occuper surtout des compétences des héros. J'utilise des compétences du jeu (d'unités et de héros), mais j'en créée aussi. De ce côté là, je me débrouille plutôt bien, si je réussi pas créer un sort, je baisse un peu mes ambitions .
Mais voilà, il y a un sort que, malgré tous mes efforts, n'arrive absolument pas à faire.
Ce sort, comme le dis le titre, inflige des dégâts en fonction du nombre d'arbres à proximité. Je m'explique :
Le héros lance le sort sur une unité ou un héros, et chaque seconde, des dégâts initiaux (selon le niveau de la compétence) multipliés par le nombre d'arbres (Arbres d'Ahsenvale pour être précis) sont infligé à l'unité cible et ce pendant 20 secondes.
C'est ce sort que j'essaye de créer, mais j'ai beaucoup de mal, car il y a très peu de déclencheurs (GUI) sur les destructibles.
Ca doit être possible car, dans Aeon Heroes Strike Battle, une compétence permet au héros de devenir invisible si il est près d'un arbre.
Pouvez-vous m'aider ? Merci d'avance
Bonne soirée. _________________
De toute façon on s’en fout, dans 100 ans on sera tous morts.
Inscrit le: 30 Jan 2009 Messages: 669 Sujets: 56 Spécialité en worldedit: Faire des bug Médailles: 1 (En savoir plus...)
Posté le: 13/07/09 23:18 Sujet du message:
Il faudrait que tes arbres soient des unités. Ce serait beaucoup plus simple et plus rapide de faire une détection du nombre de mob dans la zone autour du héros et de multiplier ce nombre par les dégâts initiaux.
C'est tout ce que je peux te proposer ...
Peut être que quelqu'un aura une meilleure proposition ! _________________
Inscrit le: 10 Mai 2008 Messages: 246 Sujets: 15 Spécialité en worldedit: Worldediter ²
Posté le: 14/07/09 01:37 Sujet du message:
Gui:
Trigger:
Hero Cast Competence
Evénements
Unité - Ton héros Achève le lancement d'une compétence
Conditions
(Ability being cast) Egal à Competence
Actions
Destructible - Pick every destructible within Ta Distance of (Position of (Ton Héros)) and do (Actions)
Boucle - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Si - Conditions
Mur d'arbres d'Ashenvale Egal à (Destructible-type of (Picked destructible))
Alors - Actions
Unité - Cause (Ton héro) to damage (Ta Cible), dealing 10.00 damage of attack type Sorts and damage type Normal
Sinon - Actions
Voilà les grandes lignes. Je n'ai pas ajouté les instructions anti-leak - l'est un peu tard, si tu veux je peux le faire ce matin en me levant ^^
Donc en gros, je t'explique le fonctionnement en vitesse :
Ta compétence, de base, inflige déjà des dégâts. Tu peux prendre la Boule de foudre par exemple.
Ensuite, le déclencheur correspondant inflige encore d'autres dégâts à la suite. Les dégâts ne sont pas groupés, mais en jeu, on ne voit pas la différence, et ça évite l'utilisations de variables inutiles.
Edit : J'éditerai ce matin pour la compétence en entier si tu veux, ça ne m'a pas l'air bien compliqué _________________
Soigner est la plus noble tâche que l'humanité puisse accomplir.
Inscrit le: 05 Aoû 2008 Messages: 65 Sujets: 11 Spécialité en worldedit: Un peu de tout, sauf en jass
Posté le: 14/07/09 12:57 Sujet du message:
Ton déclencheur a l'air bon Peut-tu le faire en entier s'il te plait ?
Mais ce n'est pas de multiplier un nombre par le nombre de destructibles ? (si on me répond non, ça m'étonnerai pas, vu le peu de déclencheurs pour destructibles) _________________
De toute façon on s’en fout, dans 100 ans on sera tous morts.
Inscrit le: 10 Mai 2008 Messages: 246 Sujets: 15 Spécialité en worldedit: Worldediter ²
Posté le: 14/07/09 13:51 Sujet du message:
Ma vision des choses, c'est que infliger un gros coup à 1000 ou bien 10 petits coups à 100, pour le joueur, c'est du pareil au même : ça fait mal.
Donc pas besoin de multiplier, juste d'infliger les dégâts à chaque fois qu'on rencontre un destructible d'un type défini dans les destructibles trouvés autour de 512 de Range du héros. _________________
Soigner est la plus noble tâche que l'humanité puisse accomplir.
Inscrit le: 05 Aoû 2008 Messages: 65 Sujets: 11 Spécialité en worldedit: Un peu de tout, sauf en jass
Posté le: 14/07/09 15:54 Sujet du message:
Resalut !
Doubotis, grâce à ton déclo, mon sort est sur le point de marcher, exactement comme je le voulais.
Mais je rencontre un dernier petit problème, comme j'ai dis, je voulais que le sort inflige des dégâts chaque seconde (20 en tous), et donc j'ai refais le déclencheur comme ça :
Gui:
Trigger:
Trigger
Evénements
Unité - A unit Initie l'effet d'une compétence
Conditions
(Ability being cast) Egal à Courroux des arbres
Actions
Destructible - Pick every destructible within 500.00 of (Position of (Target unit of ability being cast)) and do (Actions)
Boucle - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Si - Conditions
Mur d'arbres d'Ashenvale Egal à (Destructible-type of (Picked destructible))
Alors - Actions
For each (Integer A) from 1 to 20, do (Actions)
Boucle - Actions
Unité - Cause (Casting unit) to damage (Target unit of ability being cast), dealing 1.00 damage of attack type Sorts and damage type Plante
Sinon - Actions
Le problème, est que lorsque je met un wait d'une seconde, les dégâts ne sont plus du tout appliqué (et les fonctions suivantes, si je met quelque chose). Ce wait annule les fonctions suivantes. Pareil si je met une condition dans l'integer A qui dis si l'unité a le buff "Courroux de la nature". Dès qu'il y a la conditon, pouff, ça marche plus (alors que l'unité a bien le buff).
C'est ce dernier détail a régler pour que le sort fontionne (sans le wait, les dégâts seront appliqué immédiatement, et pour la condition, je le met car le sort peut très bien être dissipé, voila son utilité)
En tout cas, merci beaucoup pour ton aide Doubotis _________________
De toute façon on s’en fout, dans 100 ans on sera tous morts.
Inscrit le: 10 Mai 2008 Messages: 246 Sujets: 15 Spécialité en worldedit: Worldediter ²
Posté le: 14/07/09 19:24 Sujet du message:
C'est normal.
"Target unit of ability being cast" n'est pas mémorisé,ce qui fait que si tu ajoutes un "Wait" dans tes actions, la valeur retournée après ce Wait par "Target unit of ability being cast" est nulle.
Il suffit alors de fixer cette donnée ("Target unit of ability being cast") dans une variable locale.
En GUI c'est possible (y a un tutorial à ce sujet), mais il s'agit d'un bug qui est mis à néant à cause du For Each.
A moins de prévoir une variable globale rien que pour ce sort, par héros...
Il va falloir passer à de la programmation JASS.
J'ai un raid ce soir dans WoW, mais je m'en occupe dès que j'ai le temps
Edit : A tout hasard, une première ébauche du sort et ce que ça donne ici. _________________
Soigner est la plus noble tâche que l'humanité puisse accomplir.
Inscrit le: 05 Aoû 2008 Messages: 65 Sujets: 11 Spécialité en worldedit: Un peu de tout, sauf en jass
Posté le: 14/07/09 20:10 Sujet du message:
Ahhhhh super ! Franchement, Doubotis tu m'a enlevé une épine du pied, merci beaucoup ! Pour te remercier, je t'offre une place dans les crédits de ma carte
Je vais adapter le sort à ma carte (compétences en 6 niveaux), et le donner à un héros (druide-ours)
Sinon j'ai lu aussi le tuto, sur les variables locales, et pour les wait, j'avoue que je ne savais vraiment pas pourquoi ça ne marchait pas... a l'avenir je saurai
Merci beaucoup ! _________________
De toute façon on s’en fout, dans 100 ans on sera tous morts.
Inscrit le: 07 Juil 2008 Messages: 1518 Sujets: 39 Spécialité en worldedit: Décors! Et bourrer la map avec pleins²² de modèles d'effets/particules!! Médailles: 1 (En savoir plus...)
Posté le: 14/07/09 21:30 Sujet du message:
Noooon!!!!
Citation:
les variables locales
!!
Quand tu créés une variable via l'éditeur de déclencheur (avec la fenêtre etc...) c'est une variable globale.
Une variable locale ça se créé via une action en Jass et la variable ne peut servir que pour le déclencheur où elle a été créée, au contraire d'une variable globale qui n'est pas créé via une action par déclencheur, et est donc utilisable par tous les déclencheurs.
Par contre, attention aux waits, ils rendent le sorts non-MUI.
MUI c'est multi-instanciable, ça veut dire qu'on peut lancer plusieurs fois le même sort à la suite sans que ça pose problème.
Imagine que pendant que les dégâts s'infligent, le déclencheur est re-lancé, ba la variable prend la 2ème cible donc la première cible du sort n'aura pas tous les dégâts.
Si tu veux savoir comment rendre ton déclencheur MUI ou pour un autre déclencheur je peux t'expliquer comment contourner les waits, c'est un tout petit peu plus compliqué vu qu'on créé un 2ème déclencheur mais la difficulté s'arrête là. _________________
Inscrit le: 10 Mai 2008 Messages: 246 Sujets: 15 Spécialité en worldedit: Worldediter ²
Posté le: 14/07/09 23:10 Sujet du message:
Le système qu'on évoque c'est le fait que les variables globales et locales peuvent être ambiguës, et que le programme se trompe.
Imaginons une variable locale unité définie dans l'interface de Variables MaVariableGlobale.
Et imaginons une action :
Gui:
Trigger:
Custom Script : local unit udg_MaVariableGlobale
La variable globale va être confondue en variable locale pour le déclencheur en cours.
J'utilise tout le temps cette technique, et elle marche au poil la très grande majorité du temps.
Le soucis, c'est que l'instruction For Each déclare une fonction elle aussi, et la variable locale "buggée" udg_MaVariableGlobale définie plus haut est alors perdue. Tant qu'on est dans le For Each, elle fera mention de l'ancienne variable globale.
3 solutions s'offrent à nous :
1) Se passer du For Eachk, ce qui donne du code "sale"
2) Utiliser une variable globale utilisée uniquement quand c'est nécessaire, et qui peut être utilisée du momen qu'on ne fait pas appel deux fois à celle-ci dans le même déclencheur avec un Wait entre les deux.
3) Passer en JASS, et permettre ainsi de crée une "vraie" variable locale.
Quand au sort, attend encore pour l'implanter dans ta carte finale, car actuellement, il est non-MUI et contient beaucoup de leaks _________________
Soigner est la plus noble tâche que l'humanité puisse accomplir.
Inscrit le: 05 Aoû 2008 Messages: 65 Sujets: 11 Spécialité en worldedit: Un peu de tout, sauf en jass
Posté le: 15/07/09 01:11 Sujet du message:
C'est un peu bête, je l'ai déjà intégré... bon c'est pas trop grave, car quand j'essayai de créer le sort (donc avant le topic ), juste avant de tester avec "For Each" je comptai mettre carrément 20 fois infliger les dégâts, etc.. Peut être que si je fais ça, ça pourra marcher.
Maintenant pour la variable "Unite" pour éviter que le sort soit annulé, je peux la mettre en deploiement, pour chaque joueur sauf IA (puisque c'est un sort héros, et que chaque joueur a son héros), comme ça, ça applique pour chacun correctement.
Évidemment, pour éviter le problème de lancement du sort par le même héros, j'ai fais en sorte que le rechargement du sort finisse après la fin du sort.
Edit : J'ai un peu réfléchi au problème, et une autre idée, peut être plus simple m'est venu :
Il y a deux déclencheurs, un pour le lancement de la compétence qui fixera deux variables, une pour le lanceur du sort, et l'autre pour la cible (les deux variables seront en déploiement 10 puisqu'il y a dix joueurs humains). Dans le deuxième déclencheur, l'évènement sera une période de 1 seconde, qui détectera l'unité ayant le buff, et appliquera les dégâts, et c'est là que les variables du premier déclencheur entreront en jeu puisqu'elles contiennent les infos sur le lanceur et sa cible.
En gros, le premier déclencheur pour les variables, le deuxième pour appliquer les effets à l'aide des variables .
Edit2 : Voila, j'ai fais le déclencheur que j'ai cité plus haut, et il marche aussi bien que celui de Doubotis.
Gui:
Trigger:
Variables
Evénements
Unité - Une unité Initie l'effet d'une compétence.
Conditions
(Compétence étant utilisée) Egal à Courroux des arbres
Actions
Définir courroux_cible[(Numéro de Joueur du (Propriétaire de (Unité ciblée par la compétence)))] = (Unité ciblée par la compétence). Définir courroux_lanceur[(Numéro de Joueur du (Propriétaire de (Unité utilisant la capacité)))] = (Unité utilisant la capacité).
Gui:
Trigger:
Application
Evénements
Temps - Lancer les actions toutes les 1.00 secondes de temps de jeu.
Conditions
Actions
Groupe unité - Considérer toutes unités présentes dans (Unités présentes dans (Zone jouable de la carte) et respectant (((Unité respectant la condition) a le Buff Courroux des arbres ) Egal à VRAI)) et exécuter les (Actions).
Boucle - Actions
Si (Conditions) sont vraies, exécuter (Alors - Actions). Sinon, exécuter (Sinon - Actions).
Si - Conditions
(courroux_cible[(Numéro de Joueur du (Propriétaire de (Unités considérées)))] est vivante) Egal à VRAI
Alors - Actions
Unité - Faire que courroux_lanceur[(Numéro de Joueur du (Propriétaire de (Unité utilisant la capacité)))] cause des dommages à courroux_cible[(Numéro de Joueur du (Propriétaire de (Unités considérées)))], répartissant 2.00 points de dégâts de type Sorts et dommages de type Plante. Destructible - Considérer tous les Destructibles du cercle de rayon 512.00 qui a pour centre le point (Position de courroux_cible[(Numéro de Joueur du (Propriétaire de (Unités considérées)))]) et exécuter les actions de l'onglet 'Actions'.
Boucle - Actions
Si (Conditions) sont vraies, exécuter (Alors - Actions). Sinon, exécuter (Sinon - Actions).
Si - Conditions
(Type-Destructible de (Destructibles considérés)) Egal à Mur d'arbres d'Ashenvale
Alors - Actions
Effet spécial - Créer un effet spécial au point (Position de (Destructibles considérés)) ; utiliser le fichier modèle suivant : AbilitiesSpellsItemsAIilAIilTarget.mdl. Effet spécial - Détruire l'effet spécial (Dernier effet spécial créé). Unité - Faire que courroux_lanceur[(Numéro de Joueur du (Propriétaire de (Unité utilisant la capacité)))] cause des dommages à courroux_cible[(Numéro de Joueur du (Propriétaire de (Unités considérées)))], répartissant 2.00 points de dégâts de type Sorts et dommages de type Normal.
Sinon - Actions
Sinon - Actions
Il n'y a pas de wait ni de for each, puisque le second déclencheur est par période d'une seconde.
Je pense qu'avec le déclo que j'ai fais, il ne devrait pas y avoir de problèmes même si plusieurs joueurs lancent le sort en même temps. _________________
De toute façon on s’en fout, dans 100 ans on sera tous morts.
Inscrit le: 10 Mai 2008 Messages: 246 Sujets: 15 Spécialité en worldedit: Worldediter ²
Posté le: 15/07/09 20:24 Sujet du message:
Il y a une petite erreur dans ton raisonnement.
Soit t égal à 2.00
Soit le Héros lance le sort.
Le premier tick se fera à 3.00, soit 1.00 seconde précise après le lancement du sort, tout va bien.
Soit t égal à 2.45
Soit le héros lance le sort.
Le premier tick se fera à 3.00, soit 0,55 seconde précise après le lancement.
Ce ne sera donc pas "toutes les secondes".
Fait ça simplement sans For Each, ça fonctionnera mieux je pense. C'est la solution la plus saine et la plus équilibrée si tu veux le faire en GUI. Le code sera un peu "sale", mais il sera fonctionnel et MUI. _________________
Soigner est la plus noble tâche que l'humanité puisse accomplir.
Toutes les heures sont au format GMT + 1 Heure Aller à la page 1, 2Suivante
Page 1 sur 2
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