Inscrit le: 14 Oct 2009 Messages: 719 Sujets: 40 Spécialité en worldedit: Les bugs Médailles: 1 (En savoir plus...)
Posté le: 26/02/10 18:29 Sujet du message: Des problemes de jass, comme d'hab, je vous fais souffrir.
Bonjour, encore moi, avec mes déclos en Jass qui marchent pas... ( ) Mais bon, c'est en forgeant qu'on devient forgeron.
Voici mon déclencheur:
Secret:
Gui:
Trigger:
SlamGuerrier
Evénements
Unité - A unit Initie l'effet d'une compétence
Conditions
((Ability being cast) Egal à |cffffcc00C|r|cffffcc55hoc |r ) and ((Unit-type of (Triggering unit)) Egal à (Unit-type of (Triggering unit)))
Actions
Custom script: local real r = 0 Custom script: local integer i = 1 Custom script: local location p = GetUnitLoc( GetTriggerUnit() ) Custom script: local group g Custom script: local effect array e Custom script: call AddSpecialEffectLocBJ( p, "Abilities\Weapons\PhoenixMissile\Phoenix_Missile.mdl" ) Custom script: set e[0] = GetLastCreatedEffectBJ() Custom script: call RemoveLocation(p) Custom script: loop Custom script: exitwhen i > 359 Custom script: set p = ( PolarProjectionBJ( GetUnitLoc( GetTriggerUnit() ), ( 2 * r ), ( 5 * r ))) Custom script: call AddSpecialEffectLocBJ( p, "Abilities\Weapons\PhoenixMissile\Phoenix_Missile_mini.mdl" ) Custom script: set e[i] = GetLastCreatedEffectBJ() Custom script: call RemoveLocation(p) Custom script: set r = r + 1.00 Custom script: set i = i + 1 Custom script: endloop Custom script: set p = GetUnitLoc( GetTriggerUnit() ) Wait 1.00 game-time seconds Custom script: set i = 0 Custom script: loop Custom script: exitwhen i > 359 Custom script: call DestroyEffect( e[i] ) Custom script: set e[i] = null Custom script: set i = i + 1 Custom script: endloop Custom script: set bj_wantDestroyGroup = true
Groupe joueur - Pick every player in (All enemies of (Owner of (Triggering unit))) and do (Actions)
Custom script: call RemoveLocation(p) Custom script: set p = null
Tout marche sauf au moment des groupes d'unités et de joueurs. Je ne comprends pas trop comment ça fonctione car quand je fais mes actions, je convertis l'action de Gui en Jass (Bah pourquoi il fait du jass alors ce con? Bah peut-être pour les variables locales ). Or quand je convertis les actions de groupe, les actions dans l'action de groupe sont mises dans une autre fonction Et moi j'aimerais bien qu'elles soient dans la même fonction .
Sinon si quelqu'un pourrait me répondre à cette question que je pose tout le temps (je fais pas un autre sujet pour ce truc...):
Dans la ligne Id Ordre de Base des compétence, lorsqu'on appuye sur shift + clic, on peut entrer n'importe quel Id Ordre de Base, même s'il n'existe pas dans la liste habituelle. Est-ce que cet Id marchera ou il y aura des bugs...
Autre question:
Qu'est ce que les BJ en jass? Car quand je les supprime l'action marche quand même .
J'en avais entendu parlé de ces truc et il paraît que c'est nul mais c'est quoi?
Secret:
J'ai le droit à une dernière question? Merci :
Mon sort en plus de faire des dégâts devrait éloigner les unités ennemis qui sont éloignés d'un maximum de 718 du lanceur de ce sort. Or les wait dans les boucle on peut leurs dire à dieux. un deuxième déclo qui a un événement périodique, euh ouais mais non, je crois pas que le sort serait multi-instancible. Et puis même s'il l'était il y a les timers.
J'ai trouvé une explication de Troll-Brain, comme d'habitude , datant de 2008. Le problème c'est que c'est en Jass. Donc j'ai demandé si c'était possible en GUI (quand je parle du GUI c'est le vrai GUI et pas le GUI custom script), mais personne n'a répondu . Vous savez comment faire
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
Posté le: 26/02/10 20:01 Sujet du message:
C'est pas possible de mettre tout dans la même fonction quand il s'agit des groupes ou des forces, il faudra t'y faire . En l'occurrence, je te conseille soit d'utiliser une variable de groupe globale, soit de convertir tout ton trigger en jass et le garder comme ça parceque là, tu créer plus de leak que si tu mettais du GUI classique ^^" (bj_wantDestroyGroup est réinitialisé à false chaque fois qu'il est utilisé et tu créer une force (Player Group) en plus).
Pour les BJ, ça signifie que c'est une fonction définie dans le fichier Blizzard.J pour faciliter l'interface du GUI. Essentiellement, ça change les angles en degrés et ça modifie l'ordre des arguments. Il y en a également qui ne servent à rien comme ForGroupBJ. Cependant, comme c'est pas une généralité, je te conseille de ne pas trop y toucher.
Pour ta dernière question, je pense que ça doit être possible en utilisant un tableau de hachage et l'ID du timer.
Ha, dernière chose, je sais pas si c'est voulu, mais dans ton déclencheur, les unités à moins de 100 de distance cumuleront les 3 dommages et subiront donc 225 fois le level de ton sort. _________________
Inscrit le: 14 Oct 2009 Messages: 719 Sujets: 40 Spécialité en worldedit: Les bugs Médailles: 1 (En savoir plus...)
Posté le: 27/02/10 11:04 Sujet du message:
Tirlititi a écrit:
C'est pas possible de mettre tout dans la même fonction quand il s'agit des groupes ou des forces, il faudra t'y faire . En l'occurrence, je te conseille soit d'utiliser une variable de groupe globale, soit de convertir tout ton trigger en jass et le garder comme ça parceque là, tu créer plus de leak que si tu mettais du GUI classique ^^" (bj_wantDestroyGroup est réinitialisé à false chaque fois qu'il est utilisé et tu créer une force (Player Group) en plus).
Mmhh. Bon, je vais essayer de faire comme ça, avec une autre fonction.
Mais tu pourrais m'expliquer ou est le leak car là je ne suis plus .
Citation:
Pour les BJ, ça signifie que c'est une fonction définie dans le fichier Blizzard.J pour faciliter l'interface du GUI. Essentiellement, ça change les angles en degrés et ça modifie l'ordre des arguments. Il y en a également qui ne servent à rien comme ForGroupBJ. Cependant, comme c'est pas une généralité, je te conseille de ne pas trop y toucher.
J'y toucherais pas. Mais c'est bizarre car dans HiveWorkshop, quand qqn crée un déclo, tout le monde lui dit de supprimer les BJ.
Citation:
Pour ta dernière question, je pense que ça doit être possible en utilisant un tableau de hachage et l'ID du timer.
Ok, mais je comprend pas trop le principe en fait. Je fais un timer et je pause->wait 0.02 sec->dépause-wait 0.02 sec->....etc? Ou c'est autre chose?
Citation:
Ha, dernière chose, je sais pas si c'est voulu, mais dans ton déclencheur, les unités à moins de 100 de distance cumuleront les 3 dommages et subiront donc 225 fois le level de ton sort.
Oui c'est fait exprès: les unité plus proches subissent plus de dégâts. Mais c'est vrai que 225 c'est un peu exécif! A changer. _________________
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
Posté le: 27/02/10 12:07 Sujet du message:
Secret:
Gui:
Trigger:
Slam Degats
Evénements
Unité - A unit Initie l'effet d'une compétence
Conditions
(Ability being cast) Egal à Choc
Actions
Custom script: local timer t=CreateTimer() -------- --- Toutes tes actions --- -------- Custom script: call TimerStart (t, 0.02, true, null) Custom script: call SaveLocationHandle (udg_Hashtable, GetHandleId (t), 0, GetUnitLoc(GetTriggerUnit())) Custom script: call SaveGroupHandle(udg_Hashtable, GetHandleId(t), 1, g) Custom script: call SaveInteger(udg_Hashtable, GetHandleId(t), 2, 50) -------- 50, c'est le nombre de recul : ça correspond à 1 seconde avec le timer à 0.02 -------- Custom script: call TriggerRegisterTimerExpireEventBJ( gg_trg_Slam_Repousse, t)
Slam Repousse
Evénements Conditions
Actions
Groupe unité - Pick every unit in (Load (Key (Expiring timer)) of 1 in Hashtable) and do (Actions)
Boucle - Actions
Unité - Move (Picked unit) instantly to ((Position of (Picked unit)) offset by 10.00 towards (Angle from (Load (Key (Expiring timer)) of 0 in Hashtable) to (Position of (Picked unit))) degrees) -------- Avec 10, ça fait un recul de 500 par secondes --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Si - Conditions
(Load (Key (Expiring timer)) of 2 from Hashtable) Supérieur à 0
Alors - Actions
Table de hachage - Save ((Load (Key (Expiring timer)) of 2 from Hashtable) - 1) as (Key (Expiring timer)) of 2 in Hashtable
Sinon - Actions
Table de hachage - Clear all child hashtables of child (Key (Expiring timer)) in Hashtable Custom script: call DestroyTimer (GetExpiredTimer())
Par exemple (bon, il est optimisable mais c'est le principe ^^).
EDIT : j'ai oublié de préciser qu'il faut initialiser la Hashtable en début de partie (Create a hashtable puis set Hashtable = Last Created hash).
Il est toujours possible de supprimer les BJ mais il faut les connaitre par coeur pour ça. Un exemple, c'est la fonction
Gui:
Trigger:
Effet spécial - Create a special effect attached to the overhead of (Triggering unit) using AbilitiesSpellsOtherTalkToMeTalkToMe.mdl
: en GUI, le 1er argument est le point d'attachement et le 3ème est le modèle de l'effet. Mais c'est l'inverse si tu supprimes le BJ et comme les 2 arguments sont des strings, ça ne te signalera même pas que t'as une erreur.
Pour le leak, ben tu créer un groupe non détruit à chaque fois que tu fais set g= .... _________________
Inscrit le: 28 Aoû 2007 Messages: 243 Sujets: 27 Spécialité en worldedit: Modeling, trigger, Objet & units
Posté le: 27/02/10 14:08 Sujet du message:
Les BJ sont en fait des fonctions qui appellent d'autre fonctions, il y en a beaucoup d'inutile. Par exemple qui échangent deux informations.
Le mieux est d'utiliser le JassNewGenPack, de convertir en texte personnalisé et d'utiliser la liste de fonctions pour trouver ta BJ, qui te montrera la fonction qu'elle appelle.
Je pense qu'il y a un tuto quelque part sur ce sujet.
Bonne journée (au passage... je trouve que mettre un trigger entier en custom script... est beaucoup moins facile a utiliser et moins efficase que le texte perso. _________________
Inscrit le: 14 Oct 2009 Messages: 719 Sujets: 40 Spécialité en worldedit: Les bugs Médailles: 1 (En savoir plus...)
Posté le: 27/02/10 17:46 Sujet du message:
Bon, j'ai un peu modifié mon déclencheur et le voilà:
Secret:
Gui:
Trigger:
SlamGuerrier
Evénements
Unité - A unit Initie l'effet d'une compétence
Conditions
((Ability being cast) Egal à |cffffcc00S|r|cffffcc55ymbole de couroux|r ) and ((Unit-type of (Triggering unit)) Egal à (Unit-type of (Triggering unit)))
Actions
Custom script: local real r = 0 Custom script: local integer i = 1 Custom script: local location p = GetUnitLoc( GetTriggerUnit() ) Custom script: local unit dummy Custom script: local effect array e Custom script: call AddSpecialEffectLocBJ( p, "Abilities\Weapons\PhoenixMissile\Phoenix_Missile.mdl" ) Custom script: set e[0] = GetLastCreatedEffectBJ() Custom script: call RemoveLocation(p) Custom script: loop Custom script: exitwhen i > 359 Custom script: set p = ( PolarProjectionBJ( GetUnitLoc( GetTriggerUnit() ), ( 2 * r ), ( 5 * r ))) Custom script: call AddSpecialEffectLocBJ( p, "Abilities\Weapons\PhoenixMissile\Phoenix_Missile_mini.mdl" ) Custom script: set e[i] = GetLastCreatedEffectBJ() Custom script: call RemoveLocation(p) Custom script: set r = r + 1.00 Custom script: set i = i + 1 Custom script: endloop Custom script: set p = GetUnitLoc( GetTriggerUnit() ) Wait 1.00 game-time seconds Custom script: set i = 0 Custom script: loop Custom script: exitwhen i > 359 Custom script: set e[i] = null Custom script: call DestroyEffect( e[i] ) Custom script: set i = i + 1 Custom script: endloop Custom script: call CreateNUnitsAtLoc( 1, 'h000', GetOwningPlayer(GetTriggerUnit()), p), bj_UNIT_FACING ) Custom script: set dummy = GetLastCreatedUnit() Unité - Add <<Buff>> Symbole de couroux to (Last created unit) Unité - Set level of <<Buff>> Symbole de couroux for (Last created unit) to (Level of |cffffcc00C|r|cffffcc55hoc |r for (Triggering unit)) Unité - Order (Last created unit) to Chef Tauren Orc - Choc martial Custom script: call RemoveLocation(p) Custom script: set p = null Wait 0.50 game-time seconds Custom script: call RemoveUnit( dummy )
Mais je ne peux pas l'activé: ça m'affiche plein d'erreurs et je ne vois pas où elles sont .
Merci trilititi pour ton système de timer! Ca va m'être utile pour beaucoup de sorts.
EDIT: Ah, non! En fait il y a tout qui va bien sauf:
REREEDIT: Les effets spéciaux ne se suppriment pas! Quelqu'un a une explication?
REREREEDIT: En fait ils ne se supprimaient pas car je nullifiais les variables e avant de les détruire. Ca marche parfaitement sauf parfois on ne voit pas les animations de mort des effets... _________________
Inscrit le: 14 Oct 2009 Messages: 719 Sujets: 40 Spécialité en worldedit: Les bugs Médailles: 1 (En savoir plus...)
Posté le: 01/03/10 17:46 Sujet du message:
Tirlititi a écrit:
Secret:
Gui:
Trigger:
Slam Degats
Evénements
Unité - A unit Initie l'effet d'une compétence
Conditions
(Ability being cast) Egal à Choc
Actions
Custom script: local timer t=CreateTimer() -------- --- Toutes tes actions --- -------- Custom script: call TimerStart (t, 0.02, true, null) Custom script: call SaveLocationHandle (udg_Hashtable, GetHandleId (t), 0, GetUnitLoc(GetTriggerUnit())) Custom script: call SaveGroupHandle(udg_Hashtable, GetHandleId(t), 1, g) Custom script: call SaveInteger(udg_Hashtable, GetHandleId(t), 2, 50) -------- 50, c'est le nombre de recul : ça correspond à 1 seconde avec le timer à 0.02 -------- Custom script: call TriggerRegisterTimerExpireEventBJ( gg_trg_Slam_Repousse, t)
Slam Repousse
Evénements Conditions
Actions
Groupe unité - Pick every unit in (Load (Key (Expiring timer)) of 1 in Hashtable) and do (Actions)
Boucle - Actions
Unité - Move (Picked unit) instantly to ((Position of (Picked unit)) offset by 10.00 towards (Angle from (Load (Key (Expiring timer)) of 0 in Hashtable) to (Position of (Picked unit))) degrees) -------- Avec 10, ça fait un recul de 500 par secondes --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Si - Conditions
(Load (Key (Expiring timer)) of 2 from Hashtable) Supérieur à 0
Alors - Actions
Table de hachage - Save ((Load (Key (Expiring timer)) of 2 from Hashtable) - 1) as (Key (Expiring timer)) of 2 in Hashtable
Sinon - Actions
Table de hachage - Clear all child hashtables of child (Key (Expiring timer)) in Hashtable Custom script: call DestroyTimer (GetExpiredTimer())
Par exemple (bon, il est optimisable mais c'est le principe ^^).
EDIT : j'ai oublié de préciser qu'il faut initialiser la Hashtable en début de partie (Create a hashtable puis set Hashtable = Last Created hash).
Petite question sur ton système de timer:
si je l'utilise plusieurs fois, il faudra que je sauvegarde mes données dans un X.Y différents dans la hashtable. Mais à quoi correspond expiring timer?
Et encore une petite question est-ce que c'est multi-instancible. Car dans le deuxième déclo, si dans une intervalle de 1 sec 2 gars ont lancé le sort, c'est plus MI, non?
EDIT: et dans le pick every unit in load key expiring timer, c'est où expiring timer?
Gui:
Trigger:
Groupe unité - Pick every unit in (Load (Key (Expiring timer)) of 1 in Hashtable) and do (Actions)
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
Posté le: 05/03/10 22:27 Sujet du message:
Nop, il faut pas que tu utilises des x ou y différents : c'est le "GetHandleId(t)" qui sera différent à chaque fois.
Expiring timer, c'est le timer que tu créer lorsque le sort est lancé (à chaque fois que le sort est lancé, tu créer un timer et tu le détruit une fois que le recul a été fait).
C'est parfaitement multi-instancible et c'est fait pour ^^.
Pour la dernière question, tu dois trouver si tu cherches un peu :p (c'est "Réponse évènement - Expiring timer").
PS : désolé pour la lenteur de la réponse mais j'ai pas le net très souvent en semaine ^^. _________________
Page 1 sur 1 La question posée dans ce topic a été résolue !
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