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=1b9615683584a19b0e1391d9de57dd52Mé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

Infliger des dégâts selon le nombre d'arbres à proximité
Aller à la page 1, 2  Suivante
 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Les sorts
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 Bloodking
Membre récent


Inscrit le: 05 Aoû 2008
Messages: 65
Sujets: 11
Spécialité en worldedit: Un peu de tout, sauf en jass


MessagePosté le: 13/07/09 23:12    Sujet du message: Infliger des dégâts selon le nombre d'arbres à proximité Citer

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 Smile .

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. Smile
_________________
De toute façon on s’en fout, dans 100 ans on sera tous morts.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Nerzulll
Floodeur prématuré


Inscrit le: 30 Jan 2009
Messages: 669
Sujets: 56
Spécialité en worldedit: Faire des bug
Médailles: 1 (En savoir plus...)
Grand décorateur (Quantité : 1)

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

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 !
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Doubotis
Membre honoraire


Inscrit le: 10 Mai 2008
Messages: 246
Sujets: 15
Spécialité en worldedit: Worldediter ²


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

Gui:
Trigger:
Hero Cast Competence
Collapse Evénements
Unité - Ton héros Achève le lancement d'une compétence
Collapse Conditions
(Ability being cast) Egal à  Competence
Collapse Actions
Destructible - Pick every destructible within Ta Distance of (Position of (Ton Héros)) and do (Actions)
Collapse Boucle - Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
Mur d'arbres d'Ashenvale Egal à  (Destructible-type of (Picked destructible))
Collapse Alors - Actions
Unité - Cause (Ton héro) to damage (Ta Cible), dealing 10.00 damage of attack type Sorts and damage type Normal
Collapse 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é Smile
_________________


Soigner est la plus noble tâche que l'humanité puisse accomplir.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Bloodking
Membre récent


Inscrit le: 05 Aoû 2008
Messages: 65
Sujets: 11
Spécialité en worldedit: Un peu de tout, sauf en jass


MessagePosté le: 14/07/09 12:57    Sujet du message: Citer

Ton déclencheur a l'air bon Smile Peut-tu le faire en entier s'il te plait ? Smile

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.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Doubotis
Membre honoraire


Inscrit le: 10 Mai 2008
Messages: 246
Sujets: 15
Spécialité en worldedit: Worldediter ²


MessagePosté le: 14/07/09 13:51    Sujet du message: Citer

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.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Bloodking
Membre récent


Inscrit le: 05 Aoû 2008
Messages: 65
Sujets: 11
Spécialité en worldedit: Un peu de tout, sauf en jass


MessagePosté le: 14/07/09 15:54    Sujet du message: Citer

Resalut !

Doubotis, grâce à ton déclo, mon sort est sur le point de marcher, exactement comme je le voulais. Smile

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)
Collapse Boucle - Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
Mur d'arbres d'Ashenvale Egal à  (Destructible-type of (Picked destructible))
Collapse Alors - Actions
Collapse For each (Integer A) from 1 to 20, do (Actions)
Collapse 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
Collapse 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 Smile
_________________
De toute façon on s’en fout, dans 100 ans on sera tous morts.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Doubotis
Membre honoraire


Inscrit le: 10 Mai 2008
Messages: 246
Sujets: 15
Spécialité en worldedit: Worldediter ²


MessagePosté le: 14/07/09 19:24    Sujet du message: Citer

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 Smile

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.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Bloodking
Membre récent


Inscrit le: 05 Aoû 2008
Messages: 65
Sujets: 11
Spécialité en worldedit: Un peu de tout, sauf en jass


MessagePosté le: 14/07/09 20:10    Sujet du message: Citer

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 Smile

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 Smile

Merci beaucoup !
_________________
De toute façon on s’en fout, dans 100 ans on sera tous morts.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Keitaro_Ura
Floodozaurus


Inscrit le: 21 Aoû 2007
Messages: 2073
Sujets: 38
Spécialité en worldedit: Oui
Médailles: 1 (En savoir plus...)
Rédacteur de tuto #2 (Quantité : 1)

MessagePosté le: 14/07/09 21:29    Sujet du message: Citer

Les "wait" dans une boucle en gui ne font exécuter la boucle qu'une seule fois (en gros annulent la boucle).
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 [L]ove*[Of]*[P]ink
Anomalie floodiforme


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...)
Grand décorateur (Quantité : 1)

MessagePosté le: 14/07/09 21:30    Sujet du message: Citer

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à.
_________________

Soutenez Brissou de Mourièssou dans sa carte :: Arena - 100 :: !


Un grand moment de remise en question de soi-même.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Doubotis
Membre honoraire


Inscrit le: 10 Mai 2008
Messages: 246
Sujets: 15
Spécialité en worldedit: Worldediter ²


MessagePosté le: 14/07/09 23:10    Sujet du message: Citer

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 Smile
_________________


Soigner est la plus noble tâche que l'humanité puisse accomplir.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Bloodking
Membre récent


Inscrit le: 05 Aoû 2008
Messages: 65
Sujets: 11
Spécialité en worldedit: Un peu de tout, sauf en jass


MessagePosté le: 15/07/09 01:11    Sujet du message: Citer

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 Smile ), 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 Smile :
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
Collapse Evénements
Unité - Une unité Initie l'effet d'une compétence.
Collapse Conditions
(Compétence étant utilisée) Egal à  Courroux des arbres
Collapse 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
Collapse Evénements
Temps - Lancer les actions toutes les 1.00 secondes de temps de jeu.
Conditions
Collapse Actions
Collapse 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).
Collapse Boucle - Actions
Si (Conditions) sont vraies, exécuter (Alors - Actions). Sinon, exécuter (Sinon - Actions).
Collapse Si - Conditions
(courroux_cible[(Numéro de Joueur du (Propriétaire de (Unités considérées)))] est vivante) Egal à  VRAI
Collapse 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'.
Collapse Boucle - Actions
Si (Conditions) sont vraies, exécuter (Alors - Actions). Sinon, exécuter (Sinon - Actions).
Collapse Si - Conditions
(Type-Destructible de (Destructibles considérés)) Egal à  Mur d'arbres d'Ashenvale
Collapse 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
Collapse 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.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Bloodking
Membre récent


Inscrit le: 05 Aoû 2008
Messages: 65
Sujets: 11
Spécialité en worldedit: Un peu de tout, sauf en jass


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

Quelqu'un peut confirmer si le déclencheur est valide svp ? Smile
_________________
De toute façon on s’en fout, dans 100 ans on sera tous morts.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Keitaro_Ura
Floodozaurus


Inscrit le: 21 Aoû 2007
Messages: 2073
Sujets: 38
Spécialité en worldedit: Oui
Médailles: 1 (En savoir plus...)
Rédacteur de tuto #2 (Quantité : 1)

MessagePosté le: 15/07/09 19:57    Sujet du message: Citer

Takatesté

C'est pas forcément nous qui le dirons, Ctrl+F9 sur le worldeditor et t'as ta réponse.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Doubotis
Membre honoraire


Inscrit le: 10 Mai 2008
Messages: 246
Sujets: 15
Spécialité en worldedit: Worldediter ²


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

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.
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 -> Les sorts 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