Inscrit le: 01 Mai 2014 Messages: 35 Sujets: 5 Spécialité en worldedit: France
Posté le: 02/05/14 17:46 Sujet du message: Sort Anneau de Glace
Alors voilà (C'est encore moi) j'ai essayé de faire un sort !
Description :
"Anneau de glace
Crée de la glace autour de vous à une distance de 700 enfermant les unités et leur infligeant 0.5x intelligence de dégats pendant 10 seconde. Cooldown : 45 seconde
Temps de canalisation : 2 seconde"
Sauf que j'ai un petit soucis alors voici mes déclos :
Gui:
Trigger:
Anneau de glace
Evénements
Unité - A unit Initie l'effet d'une compétence
Conditions
(Ability being cast) Egal à (==) Anneau de Glace
Actions
Custom script: local unit t Custom script: local unit c = GetSpellAbilityUnit() Custom script: local real a = 360.00 Custom script: local integer i = 0 Custom script: local real x = GetUnitX(c) Custom script: local real y = GetUnitY(c)
Groupe unité - Pick every unit in (Units within 700.00 of (Point((x), (y))) matching (((Owner of (Picked unit)) Egal à (==) Joueur 12 (Marron)) or ((Owner of (Picked unit)) Egal à (==) Neutre Hostile))) and do (Actions)
Boucle - Actions
Groupe unité - Add (Matching unit) to Group_unit_Anneau_De_Glace
Groupe unité - Pick every unit in Group_unit_Anneau_De_Glace and do (Actions)
Boucle - Actions
Custom script: set t = GetEnumUnit()
Custom script: loop Unité - Create 1 Dummy Anneau de Glace for (Triggering player) at ((Position of (Target unit of ability being cast)) offset by 700.00 towards (a) degrees) facing Orientation bâtiment par défaut (270.0) degrees Unité - Add a 10.00 second Générique expiration timer to (Last created unit) Custom script: set a = a - 9 Custom script: exitwhen a == 0 Custom script: endloop Custom script: loop Custom script: exitwhen i > 10 Custom script: set bj_wantDestroyGroup = true Wait 1.00 seconds Custom script: call Iceprison( t, c, "m") Custom script: set i = i+1 Custom script: endloop
Groupe unité - Pick every unit in (Units owned by (Owner of (c)) of type Dummy Anneau de Glace) and do (Actions)
Boucle - Actions
Unité - Remove (Picked unit) from the game
Et voici la fonction IcePrison
Jass:
function Iceprison takes unit t, unit c, string m returns nothing
call UnitDamageTarget( c, t, (GetHeroInt( c, true ) * 0.50), true, false, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_UNIVERSAL, WEAPON_TYPE_WHOKNOWS )
endfunction
Or quand je veux changer la variable t il me dit qu'elle est pas declaré alors qu'elle est belle et bien déclaré au début du déclo..[/Jass][/Gui] _________________
Inscrit le: 12 Nov 2009 Messages: 711 Sujets: 50 Spécialité en worldedit: Vétéran
Posté le: 02/05/14 20:01 Sujet du message:
Je peux te poser une question? Pourquoi ne pas te mettre au jass puisque les 3/4 des tes déclencheurs sont fait en jass par le biais des custom script.
D'ailleurs j'aimerai bien savoir comment tu as fait pour incruster tes variables locales dans tes fonctions GUI :/ _________________
C'est en forgeant que l'on devient forgeron
"Le feu ne peut tuer le dragon"
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
Posté le: 02/05/14 20:10 Sujet du message:
Les variables sont gérées comme ça dans l'éditeur :
- créer une variable globale (via l'icône verte) rajoute en fait un préfixe "udg_" (pour User-Defined Global) devant le nom de ta variable globale.
- utiliser une variable globale via une action GUI (donc pas un custom script) rajoute également ce préfixe.
- les custom scripts sont laissés tels quel dans le résultat final, donc quand tu créés tes variables "c" ou "t", il s'agit de leurs vrais noms.
Du coup, le "c" local et le "c" dans ton "Pick every unit" de la fin, c'est pas les mêmes.
D'autre part, pour 1 déclencheur GUI, il y a parfois plusieurs fonctions JASS différentes qui sont créées. Dans un "Pick every units in group", par exemple, ce qu'il y a à l'intérieur de la boucle est dans une autre fonction : il n'y a pas de variable locale "t" déclarée dans cette autre fonction.
Voilà. Pour ces raisons, c'est dangereux d'utiliser à la fois le GUI et le JASS.
Une dernière remarque, pour la route : quand tu fais "set t = GetEnumUnit()", l'unité "t" est remplacée à chaque fois (il s'agit d'une variable qui pointe sur une seule unité) et donc ton sort n'infligera des dégâts qu'à une seule unité (la dernière du groupe). Il te faut passer par une variable de type "Groupe unité" ("group" en JASS).
Idem pour les unités dummy "Anneau de glace" : utilise un groupe si tu veux faire ça proprement (comme c'est codé là, ça buggera si le sort est lancé 2 fois à moins d'une seconde d'intervalle).
Custom script: local integer udg_TriggerId = 0 Set TriggerId = ((Execution count of (This trigger)) mod 8100) Set IceRingTargets[TriggerId] = (Units within 700.00 of (Position of (Casting unit)) matching (((Matching unit) is alive) Egal à TRUE))
For each (Integer IceRingIterCount[TriggerId]) from 1 to 10, do (Actions)
Boucle - Actions
Wait 1.00 game-time seconds Set Damage = ((Real((Intelligence of (Triggering unit) (Inclure bonuses)))) x 0.50)
Groupe unité - Pick every unit in IceRingTargets[TriggerId] and do (Actions)
Boucle - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Si - Conditions
((Picked unit) has buff Frozen (Pause)) Egal à TRUE
Alors - Actions
Unité - Cause (Triggering unit) to damage (Picked unit), dealing Damage damage of attack type Sorts and damage type Glace
Basé sur le sort Choc Martial.
Lancer un sort basé sur quelque chose comme choc de flamme pourrait remplacer le code sur les dégâts de zone. _________________
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