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=b285c23ddd31e04a4187f151b6b36325Mé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

Des problemes de jass, comme d'hab, je vous fais souffrir.

 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Aide sur les déclencheurs
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 26/02/10 18:29    Sujet du message: Des problemes de jass, comme d'hab, je vous fais souffrir. Citer

Bonjour, encore moi, avec mes déclos en Jass qui marchent pas... ( Crying or Very sad ) Mais bon, c'est en forgeant qu'on devient forgeron.
Voici mon déclencheur:
Secret:

Gui:
Trigger:
SlamGuerrier
Collapse Evénements
Unité - A unit Initie l'effet d'une compétence
Collapse Conditions
((Ability being cast) Egal à  |cffffcc00C|r|cffffcc55hoc |r ) and ((Unit-type of (Triggering unit)) Egal à  (Unit-type of (Triggering unit)))
Collapse 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
Collapse Groupe joueur - Pick every player in (All enemies of (Owner of (Triggering unit))) and do (Actions)
Collapse Boucle - Actions
Custom script:   set g = GetUnitsInRangeOfLocMatching(718.00, p), Condition(return ( GetOwningPlayer(GetFilterUnit()) == GetEnumPlayer() )))
Custom script:   call ForGroupBJ( g, call UnitDamageTargetBJ( GetTriggerUnit(), GetEnumUnit(), ( 50.00 * I2R(GetUnitAbilityLevelSwapped('A04L', GetTriggerUnit())) ), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL ) )
Custom script:   set g = GetUnitsInRangeOfLocMatching(359.00, p), Condition(return ( GetOwningPlayer(GetFilterUnit()) == GetEnumPlayer() )))
Custom script:   call ForGroupBJ( g, call UnitDamageTargetBJ( GetTriggerUnit(), GetEnumUnit(), ( 75.00 * I2R(GetUnitAbilityLevelSwapped('A04L', GetTriggerUnit())) ), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL ) )
Custom script:   set g = GetUnitsInRangeOfLocMatching(100.00, p), Condition(return ( GetOwningPlayer(GetFilterUnit()) == GetEnumPlayer() )))
Custom script:   call ForGroupBJ( g, call UnitDamageTargetBJ( GetTriggerUnit(), GetEnumUnit(), ( 100.00 * I2R(GetUnitAbilityLevelSwapped('A04L', GetTriggerUnit())) ), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL ) )
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 Razz). Or quand je convertis les actions de groupe, les actions dans l'action de groupe sont mises dans une autre fonction Confused Et moi j'aimerais bien qu'elles soient dans la même fonction Idea .



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 Surprised .
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 Smile :
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 Wink , 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 Sad. Vous savez comment faire Question


_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Tirlititi



Inscrit le: 21 Fév 2010
Messages: 1785
Sujets: 22
Spécialité en worldedit: La modestie
Médailles: 1 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 26/02/10 20:01    Sujet du message: Citer

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 Razz . 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.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 27/02/10 11:04    Sujet du message: Citer

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 Razz . 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 Shocked .

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



Inscrit le: 21 Fév 2010
Messages: 1785
Sujets: 22
Spécialité en worldedit: La modestie
Médailles: 1 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 27/02/10 12:07    Sujet du message: Citer

Secret:

Gui:
Trigger:
Collapse Slam Degats
Collapse Evénements
Unité - A unit Initie l'effet d'une compétence
Collapse Conditions
(Ability being cast) Egal à  Choc
Collapse 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)

Collapse Slam Repousse
Evénements
Conditions
Collapse Actions
Collapse Groupe unité - Pick every unit in (Load (Key (Expiring timer)) of 1 in Hashtable) and do (Actions)
Collapse 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 --------
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
(Load (Key (Expiring timer)) of 2 from Hashtable) Supérieur à  0
Collapse Alors - Actions
Table de hachage - Save ((Load (Key (Expiring timer)) of 2 from Hashtable) - 1) as (Key (Expiring timer)) of 2 in Hashtable
Collapse 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= ....
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 ArnaudB
Membre honoraire


Inscrit le: 28 Aoû 2007
Messages: 243
Sujets: 27
Spécialité en worldedit: Modeling, trigger, Objet & units


MessagePosté le: 27/02/10 14:08    Sujet du message: Citer

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.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 27/02/10 17:46    Sujet du message: Citer

Bon, j'ai un peu modifié mon déclencheur et le voilà:

Secret:

Gui:
Trigger:
SlamGuerrier
Collapse Evénements
Unité - A unit Initie l'effet d'une compétence
Collapse Conditions
((Ability being cast) Egal à  |cffffcc00S|r|cffffcc55ymbole de couroux|r ) and ((Unit-type of (Triggering unit)) Egal à  (Unit-type of (Triggering unit)))
Collapse 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 Confused .
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:
Gui:
Trigger:
Custom script:   call CreateNUnitsAtLoc( 1, 'h000', GetOwningPlayer(GetTriggerUnit()), p), bj_UNIT_FACING )


REEDIT: c'est bon j'ai trouvé, j'ai dû remplacer par ça:
Gui:
Trigger:
Custom script:   call CreateNUnitsAtLoc( 1, 'h000', GetOwningPlayer(GetTriggerUnit()), p, bj_UNIT_FACING )


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...
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 01/03/10 17:46    Sujet du message: Citer

Tirlititi a écrit:
Secret:

Gui:
Trigger:
Collapse Slam Degats
Collapse Evénements
Unité - A unit Initie l'effet d'une compétence
Collapse Conditions
(Ability being cast) Egal à  Choc
Collapse 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)

Collapse Slam Repousse
Evénements
Conditions
Collapse Actions
Collapse Groupe unité - Pick every unit in (Load (Key (Expiring timer)) of 1 in Hashtable) and do (Actions)
Collapse 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 --------
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
(Load (Key (Expiring timer)) of 2 from Hashtable) Supérieur à  0
Collapse Alors - Actions
Table de hachage - Save ((Load (Key (Expiring timer)) of 2 from Hashtable) - 1) as (Key (Expiring timer)) of 2 in Hashtable
Collapse 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 Mr. Green 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)

_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Tirlititi



Inscrit le: 21 Fév 2010
Messages: 1785
Sujets: 22
Spécialité en worldedit: La modestie
Médailles: 1 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 05/03/10 22:27    Sujet du message: Citer

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 ^^.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 13/03/10 11:48    Sujet du message: Citer

Ok, merci pour tes réponses.
_________________
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 -> Aide sur les déclencheurs Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1
La question posée dans ce topic a été résolue !

 
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