online faq recherche accueil
 

Il y a 165 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

Barrage

 
n°4588526
gro_shaman
Ah... World edit...
Posté le 24-03-2007 à 21:01:15  profilanswer
 

Bonjour, c'est au sujet du sort barrage qui permet d'ajouter des cibles lorsqu'on attaque; il se trouve que ce sort propose de choisir le nombre de cibles supplementaires, mais ce nombre de cibles est faussé : lorsqu'on ecrit X cibles, X+2 cibles sont ajoutées dans le jeu (si X=0 alors le nombre de cibles n'est pas limité).  
Mon probleme est que je voudrais seulement 1 cible en plus (puis 2 cibles).
 
Je voudrais savoir si vous aviez une idée autre que refaire le sort sous forme de trigger ?
 
Cela dit en passant je vois pas trop comment faire meme sous forme de trigger, je sais pas quelle action mettre pour mettre une attaque en plus...
 
mon déclencheur :  
E : Unité - A unit Est attaqué
A : If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    Si - Conditions
        (Level of Attaques multiples  for (Attacking unit)) Egal à  1
    Alors - Actions
        Groupe unité - Pick every unit in (Random 1 units from (Units within 200.00 of (Position of (Attacking unit)) matching (((Matching unit) belongs to an enemy of (Owner of (Attacking unit))) Egal à  TRUE))) and do (Unité - Cause (Attacking unit) to damage (Picked unit), dealing Y damage of attack type Héros and damage type Normal)
    Sinon - Actions
 
Le probleme est que Y doit etre la valeur des degats infligés par la premiere attaque et je trouve pas de fonction pour trouver le nombre de degats...


Message édité par gro_shaman le 24-03-2007 à 21:35:12

---------------
http://www.acathla.com/
n°4588547
Sogara
What else ?
Posté le 25-03-2007 à 15:38:40  profilanswer
 

Petite question : T'as déjà essayé avec X= -1 ?
 
De plus, dans l'éditeur de compétence, c'est marqué 25 dommages par cible...


---------------
"Prouver que j'ai raison reviendrait à accorder que je puisse avoir tort."
n°4588556
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 25-03-2007 à 19:18:22  profilanswer
 

La compétence n'est pas bugée, elle est tout simplement concue comme cela.
tu ne peux mettre de valeurs négatives


Message édité par Troll-Brain le 25-03-2007 à 19:18:35

---------------
Je ne prends que sur rendez vous.
Assurez vous d'avoir un moyen de paiement conséquent, et de préférence en liquide, avant de me quémander la moindre question.
 
n°4588558
gro_shaman
Ah... World edit...
Posté le 25-03-2007 à 20:56:19  profilanswer
 

Oui pas de valeure négative, et les dommages par cible c'est n'importe quoi, les vrais dégats sont ceux de l'attaque 1 ou 2.
 
Et pour mon "Y", vous avez pas une idée pour reprendre les degats deja infligés (un truc comme : last damge given at UNIT)


---------------
http://www.acathla.com/
n°4588563
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 25-03-2007 à 22:19:15  profilanswer
 

Je t'ai fait un truc mais je sèches sur une partie du trigger.
 

Code :
  1. EstBlesse
  2.     Evénements
  3.     Conditions
  4.     Actions
  5.         Custom script:   local location udg_Point
  6.         Custom script:   local group udg_Groupe_Unite
  7.         Custom script:   local unit udg_Unite=GetEventDamageSource()
  8.         Custom script:   call DestroyTrigger(GetTriggeringTrigger())
  9.         Partie - Display to (All players) the text: debut
  10.         Partie - Display to (All players) the text: (attaquant :  + (Name of Unite))
  11.         Partie - Display to (All players) the text: (String((Level of Choc de flammes for Unite)))
  12.         Custom script:   if GetUnitAbilityLevelSwapped('AHfs', udg_Unite) == 0 then
  13.         Skip remaining actions
  14.         Custom script:   endif
  15.         Set Point = (Position of (Triggering unit))
  16.         Partie - Display to (All players) the text: (String((Number of units in Groupe_Unite)))
  17.         Set Groupe_Unite = (Random (Level of Choc de flammes for Unite) units from (Units within 512.00 of Point matching ((((Triggering unit) belongs to an enemy of (Owner of Unite)) Egal à TRUE) and (((Triggering unit) has buff Invulnérable) Egal à FALSE))))
  18.         Groupe unité - Pick every unit in Groupe_Unite and do (Actions)
  19.             Boucle - Actions
  20.                 Unité - Set life of (Picked unit) to ((Vie of (Picked unit)) - (Damage taken))
  21.         Custom script:   call RemoveLocation(udg_Point)
  22.         Custom script:   call DestroyGroup(udg_Groupe_Unite)


 
 

Code :
  1. EstCible
  2.     Evénements
  3.         Unité - A unit Est attaqué
  4.     Conditions
  5.     Actions
  6.         Custom script:   local trigger udg_Declencheur=CreateTrigger()
  7.         Custom script:   call TriggerAddAction( udg_Declencheur, function Trig_EstBlesse_Actions )
  8.         Déclencheur - Add to Declencheur the event (Unité - (Triggering unit) Subit des dégâts)


 
C'est au niveau du Set Groupe_Unite, étant donné qu'elle est composée de plusieurs fonctions, la variable locale udg_Unite ne fait plus référence à rien, autrement dit le groupe est toujours vide  :D  
 
Je cherches à rassembler les fonctions mais la fonction GetUnitsInRangeOfLocMatching demande en paramètre un boolexpr filter, ce que je ne sais pas encore faire


Message édité par Troll-Brain le 25-03-2007 à 22:24:42

---------------
Je ne prends que sur rendez vous.
Assurez vous d'avoir un moyen de paiement conséquent, et de préférence en liquide, avant de me quémander la moindre question.
 
n°4588565
Maximaxou
rejoignez les fidèles du JASS
Posté le 25-03-2007 à 23:03:07  profilanswer
 

L'idée pour arranger ça, serait de faire du bidouillage. Mais troll-brain et moi on aime pas ça ^^ (on se comprend).
 
"la variable locale udg_Unite" -----> quoi de mieux pour nous embrouiller ? xD


Message édité par Maximaxou le 25-03-2007 à 23:03:47

---------------
Dota c'est bien, le slide c'est encore mieux !
n°4588569
gro_shaman
Ah... World edit...
Posté le 26-03-2007 à 14:19:21  profilanswer
 

J'ai lu ton trigger dans la mesure de ma comprehension mais le fait est que war 3 veut pas que j'utilise cette fonction :

Code :
  1. Custom script:   call TriggerAddAction( udg_Declencheur, function Trig_EstBlesse_Actions )


D'apres WorldEditor : attend un nom de fonction.
 
J'ai pas tout à fait compris pourquoi le groupe ne se crée pas.
Ne serait-il pas preferable d'utiliser

Code :
  1. Unité - Cause Unite to damage (Triggering unit), dealing (Damage taken) damage of attack type Héros and damage type Normal


Et Unite c'est une variable? pasque elle est pas défini.
et pour le projectile ?? comment pourrais-je le reprensenter?
 
 
ps : je comprend pas grand-chose au JASS, ne m'en voulez pas ^^.


Message édité par gro_shaman le 26-03-2007 à 15:33:26

---------------
http://www.acathla.com/
n°4588582
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 26-03-2007 à 18:53:57  profilanswer
 

Bon j'ai appris une chose l'utilisation de variables locales n'est pas indispensable si le trigger ne comporte pas de wait , donc on peut presque tout faire en gui  ;)  
 
Le principe des déclencheurs est le suivant : Il n'existe pas d'événement unité général une unité subit des dégâts, par contre il existe en événement particulier.
On créé donc un déclencheur quand une unité est attaqué pour savoir quand elle sera blessée
 
Le déclencheur EstBlesse n'est jamais lancé il sert juste à stocker les actions que l'on rajoutera au déclencheur créé.
 
si tu convertis un déclencheur du gui en jass tu verras que la fonction qui contient les actions s'appelle invariablement : Trig_NomDeTaFonction_Actions, si le nom de ton tigger comporte des espaces ils seront remplacés par un underscore.
 
il faut d'abord créé le trigger EstBlessé car dans le trigger EstCible on rajoute la fonction Trig_EstBlesse_Actions, donc si le trigger EstBlesse n'est pas encore créé Worldedit t'envoie chier  :D  
 

Code :
  1. EstBlesse
  2.     Evénements
  3.     Conditions
  4.     Actions
  5.         -------- Detruit le tigger créé afin d'éviter son réenclenchement et bien sur un leak (n'arrête pas son exécution en cours) --------
  6.         Custom script:   call DestroyTrigger(GetTriggeringTrigger())
  7.         Set UNITE = (Damage source)
  8.         Partie - Display to (All players) the text: EST BLESSE
  9.         Set POINT = (Position of (Triggering unit))
  10.         Set GROUPE_UNITE = (Random (Level of Choc de flammes for UNITE) units from (Units within 512.00 of POINT matching ((((Triggering unit) belongs to an enemy of (Owner of UNITE)) Egal à TRUE) and (((Triggering unit) has buff Invulnérable) Egal à FALSE))))
  11.         Partie - Display to (All players) the text: (String((Number of units in GROUPE_UNITE)))
  12.         Groupe unité - Pick every unit in GROUPE_UNITE and do (Actions)
  13.             Boucle - Actions
  14.                 Unité - Cause UNITE to damage (Picked unit), dealing (Damage taken) damage of attack type Sorts and damage type Normal
  15.         -------- Pour eviter les leak --------
  16.         Custom script:   call RemoveLocation(udg_POINT)
  17.         Custom script:   call DestroyGroup(udg_GROUPE_UNITE)[code]
  18. [code]EstCible
  19.     Evénements
  20.         Unité - A unit Est attaqué
  21.     Conditions
  22.         (Level of Choc de flammes for (Attacking unit)) Supérieur à 0
  23.     Actions
  24.         -------- création d'un trigger étant donné qu'il n'existe pas d'événement spécifique une unit subit des dommages --------
  25.         Custom script:   local trigger udg_DECLENCHEUR=CreateTrigger()
  26.         Partie - Display to (All players) the text: EST ATTAQUE
  27.         -------- ajout des actions à ce trigger (actions du trigger EstBlesse dédié à cela) --------
  28.         Custom script:   call TriggerAddAction( udg_DECLENCHEUR, function Trig_EstBlesse_Actions )
  29.         -------- ajout de l'événement spécifique l'unité attaqué subit des dommages --------
  30.         Déclencheur - Add to DECLENCHEUR the event (Unité - (Triggering unit) Subit des dégâts)


 
sinon c'est vrai que c'est problèmatique pour voir l'unité ciblée, je te conseille de lui rajouter un effet resemblant à l'attaque de la première


Message édité par Troll-Brain le 26-03-2007 à 19:11:45

---------------
Je ne prends que sur rendez vous.
Assurez vous d'avoir un moyen de paiement conséquent, et de préférence en liquide, avant de me quémander la moindre question.
 
n°4588584
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 26-03-2007 à 19:08:54  profilanswer
 

Maintenant pourquoi j'avais des problèmes avec l'utilisation des variables locales.
 
Les variables que tu utilises en gui sont ce que l'on appelle des globales.
On peut y accéder à partir de nimporte quelle fonction (trigger pour faire trés simple)
Une globale se nomme de cette façon : udg_NomDeTaVariable
 
Une locale quand à elle n'a d'existence que dans sa fonction, or le gui génère souvent une multitude de sous fonctions.
 
Il existe une astuce pour utiliser des locales en gui, si dans une même fonction il exite une variable locale et globale du même nom, c'est la variable locale qui est utilisée, mais c'est trés limité, come je vais te l'expliquer
 

Code :
  1. function Trig_EstBlesse_Func006002002003001 takes nothing returns boolean
  2.     return ( IsUnitEnemy(GetTriggerUnit(), GetOwningPlayer(udg_UNITE)) == true )
  3. endfunction
  4. function Trig_EstBlesse_Func006002002003002 takes nothing returns boolean
  5.     return ( UnitHasBuffBJ(GetTriggerUnit(), 'Bvul') == false )
  6. endfunction
  7. function Trig_EstBlesse_Func006002002003 takes nothing returns boolean
  8.     return GetBooleanAnd( Trig_EstBlesse_Func006002002003001(), Trig_EstBlesse_Func006002002003002() )
  9. endfunction
  10. function Trig_EstBlesse_Func008A takes nothing returns nothing
  11.     call UnitDamageTargetBJ( udg_UNITE, GetEnumUnit(), GetEventDamage(), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
  12. endfunction
  13. // LES ACTIONS DU TRIGGER SONT ICI
  14. function Trig_EstBlesse_Actions takes nothing returns nothing
  15.     // Detruit le tigger créé afin d'éviter son réenclenchement et bien sur un leak (n'arrête pas son exécution en cours)
  16.     call DestroyTrigger(GetTriggeringTrigger())
  17.     set udg_UNITE = GetEventDamageSource()
  18.     call DisplayTextToForce( GetPlayersAll(), "TRIGSTR_019" )
  19.     set udg_POINT = GetUnitLoc(GetTriggerUnit())
  20.     set udg_GROUPE_UNITE = GetRandomSubGroup(GetUnitAbilityLevelSwapped('AHfs', udg_UNITE), GetUnitsInRangeOfLocMatching(512, udg_POINT, Condition(function Trig_EstBlesse_Func006002002003)))
  21.     call DisplayTextToForce( GetPlayersAll(), I2S(CountUnitsInGroup(udg_GROUPE_UNITE)) )
  22.     call ForGroupBJ( udg_GROUPE_UNITE, function Trig_EstBlesse_Func008A )
  23.     // Pour eviter les leak
  24.     call RemoveLocation(udg_POINT)
  25.     call DestroyGroup(udg_GROUPE_UNITE)
  26. endfunction
  27. //===========================================================================
  28. function InitTrig_EstBlesse takes nothing returns nothing
  29.     set gg_trg_EstBlesse = CreateTrigger(  )
  30.     call TriggerAddAction( gg_trg_EstBlesse, function Trig_EstBlesse_Actions )
  31. endfunction


 

Code :
  1. set udg_GROUPE_UNITE = GetRandomSubGroup(GetUnitAbilityLevelSwapped('AHfs', udg_UNITE), GetUnitsInRangeOfLocMatching(512, udg_POINT, Condition(function Trig_EstBlesse_Func006002002003)))


 
on voit que le set GROUPE_UNITE utilise comme condition la fonction Trig_EstBlesse_Func006002002003, qui elle même en utilise 2 autres
 

Code :
  1. function Trig_EstBlesse_Func006002002003 takes nothing returns boolean
  2.     return GetBooleanAnd( Trig_EstBlesse_Func006002002003001(), Trig_EstBlesse_Func006002002003002() )
  3. endfunction


 
Prenons rien que la fonction suivante, celle qui vérifie que l'attaquant est bien un ennemi de l'unité blessée :
 

Code :
  1. function Trig_EstBlesse_Func006002002003001 takes nothing returns boolean
  2.     return ( IsUnitEnemy(GetTriggerUnit(), GetOwningPlayer(udg_UNITE)) == true )
  3. endfunction


 
Avec l'utilisation de la variable globale udg_UNITE pas de problème (voir explication plus haut), par contre si c'était une locale, on perd sa valeur et on fait référence à la variable globale udg_UNITE, donc à rien car je ne l'avais pas set dans mon premier code
 
PS : On ne peut utiliser de variables locales indéxées avec cette astuce


---------------
Je ne prends que sur rendez vous.
Assurez vous d'avoir un moyen de paiement conséquent, et de préférence en liquide, avant de me quémander la moindre question.
 
n°4588592
gro_shaman
Ah... World edit...
Posté le 26-03-2007 à 19:52:06  profilanswer
 

J'ai à peu pres tout compris mais un probleme reside... Cette fonction n'est toujours pas acceptée par l'editeur :  
Custom script:   call TriggerAddAction( udg_DECLENCHEUR, function Trig_EstBlesse_Actions )
 
 
erreur : "attendant un nom de fonction"


Message édité par gro_shaman le 26-03-2007 à 19:52:46

---------------
http://www.acathla.com/
n°4588593
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 26-03-2007 à 19:55:17  profilanswer
 

tu le faix exprés hein  :fou:  
Créé d'abord le trigger EstBlesse


---------------
Je ne prends que sur rendez vous.
Assurez vous d'avoir un moyen de paiement conséquent, et de préférence en liquide, avant de me quémander la moindre question.
 
n°4588594
gro_shaman
Ah... World edit...
Posté le 26-03-2007 à 19:56:44  profilanswer
 

Je l'ai deja créé...


Message édité par gro_shaman le 26-03-2007 à 19:56:59

---------------
http://www.acathla.com/
n°4588595
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 26-03-2007 à 19:57:55  profilanswer
 

suppirme complètement le trigger EstCible et recrée le manuellement


Message édité par Troll-Brain le 26-03-2007 à 19:58:02

---------------
Je ne prends que sur rendez vous.
Assurez vous d'avoir un moyen de paiement conséquent, et de préférence en liquide, avant de me quémander la moindre question.
 
n°4588597
gro_shaman
Ah... World edit...
Posté le 26-03-2007 à 20:13:42  profilanswer
 

Je viens de le faire et j'ai encore plus d'erreurs, jte montre les erreurs et les lignes de code ce soir la faut que j'y aille et ca prend longtemp a upload les images !!

Message cité 1 fois
Message édité par gro_shaman le 26-03-2007 à 20:19:40

---------------
http://www.acathla.com/
n°4588599
Maximaxou
rejoignez les fidèles du JASS
Posté le 26-03-2007 à 20:46:05  profilanswer
 

Citation :

Bon j'ai appris une chose l'utilisation de variables locales n'est pas indispensable si le trigger ne comporte pas de wait , donc on peut presque tout faire en gui  ;)  
 

oO comment il retourne sa veste !!!!


---------------
Dota c'est bien, le slide c'est encore mieux !
n°4588600
Maximaxou
rejoignez les fidèles du JASS
Posté le 26-03-2007 à 20:48:01  profilanswer
 

Citation :

   // Pour eviter les leak  
    call RemoveLocation(udg_POINT)
    call DestroyGroup(udg_GROUPE_UNITE)


Je ne suis pas sûr que ça serve à grand chose puisque ces deux variables sont écrasées à chaque exécution de ce déclo.

Message cité 1 fois
Message édité par Maximaxou le 26-03-2007 à 20:48:44

---------------
Dota c'est bien, le slide c'est encore mieux !
n°4588604
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 26-03-2007 à 20:57:37  profilanswer
 

Maximaxou a écrit :

Citation :

Bon j'ai appris une chose l'utilisation de variables locales n'est pas indispensable si le trigger ne comporte pas de wait , donc on peut presque tout faire en gui  ;)  
 

oO comment il retourne sa veste !!!!


 
L'avenir profite aux sans scrupules
 
 
 


---------------
Je ne prends que sur rendez vous.
Assurez vous d'avoir un moyen de paiement conséquent, et de préférence en liquide, avant de me quémander la moindre question.
 
n°4588605
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 26-03-2007 à 20:59:04  profilanswer
 

gro_shaman a écrit :

Je viens de le faire et j'ai encore plus d'erreurs, jte montre les erreurs et les lignes de code ce soir la faut que j'y aille et ca prend longtemp a upload les images !!


Poste le code upload pas les images >.<
ou encore mieux envoie moi la map par msn


Message édité par Troll-Brain le 26-03-2007 à 20:59:19

---------------
Je ne prends que sur rendez vous.
Assurez vous d'avoir un moyen de paiement conséquent, et de préférence en liquide, avant de me quémander la moindre question.
 
n°4588606
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 26-03-2007 à 21:04:00  profilanswer
 

Maximaxou a écrit :

Citation :

   // Pour eviter les leak  
    call RemoveLocation(udg_POINT)
    call DestroyGroup(udg_GROUPE_UNITE)


Je ne suis pas sûr que ça serve à grand chose puisque ces deux variables sont écrasées à chaque exécution de ce déclo.


 
Si ca leak ca ne vient pas de la variable mais du fait que les points et groupes d'unités sont des "objets"
 
 
 


---------------
Je ne prends que sur rendez vous.
Assurez vous d'avoir un moyen de paiement conséquent, et de préférence en liquide, avant de me quémander la moindre question.
 
n°4588610
gro_shaman
Ah... World edit...
Posté le 26-03-2007 à 23:01:55  profilanswer
 

J'arrive pas à les uploader alors jte lenvoie par msn troll-brain (mon adresse msn c'est jcooleman, jtai deja rentré).


---------------
http://www.acathla.com/

Aller à :
Ajouter une réponse