Inscrit le: 08 Mar 2010 Messages: 243 Sujets: 54 Spécialité en worldedit: Sort sans déclencheurs
Posté le: 26/05/10 14:14 Sujet du message: Probleme de sort de ligne
Voila je veut réaliser un sort tout simple ou une fleches parcour 1700m et inflige des dégats aux ennemies sur le chemin de la fleche. Pour ma fleche j'ai crée un dummy avec comme effet origin aura de lenteur (pour faire des effet de vents) mais j'ai deux problèmes:
1) Comment régler les dégats en GUI ?
2) Mon Dummy ne réalise pas ce que je lui ordonne.
Gui:
Trigger:
Powershot
Evénements
Unité - A unit Initie l'effet d'une compétence
Conditions
(Ability being cast) Egal à Powershot
Actions
Set Caster = (Casting unit) Set Dummy_Unit = (Last created unit) Set Picked_Unit = (Picked unit) Unité - Create 1 Dummy (Powershot) for (Owner of Caster) at (Position of Caster) facing Orientation bâtiment par défaut degrees Unité - Order Dummy_Unit to Avancer vers (Target point of ability being cast) Unité - Kill Dummy_Unit
Merci d'avance pour votre aide _________________
.
Alpha vs Xantgjia nouveau projet serieux en cour :
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/05/10 14:49 Sujet du message:
M'enfin, relis toi .
Tu mets "Set Dummy Unit = Last created unit" avant même de créer quoi que ce soit. C'est vachement important de mettre tes actions dans l'ordre.
Ensuite tu peux faire un shoot en ordonnant à ta flèche d'avancer mais comme elle a une vitesse de 522 au maximum, elle sera très lente pour un projectile. Tu pourras utiliser un autre déclencheur avec un évènement "Unit within range of [Ta Flèche]".
Mais dans DotA (puisque tu veux apparament faire pareil), le sort est codé comme ça (les noms des variables et des fonctions sont malheureusement pas explicites) :
Secret:
Jass:
function PowerShot_Timer takes nothing returns boolean
local trigger t=GetTriggeringTrigger()
local integer vvv=GetHandleId(t)
local unit IJ=LoadUnit(vvv,"Projectile")
local real eie=LoadReel(vvv,"TargetX")
local real eae=LoadReel(vvv,"TargetY")
local real RK=LoadReel(vvv,"Angle")
local real vuv=LoadReel(vvv,"Damage")
local integer eHe=LoadInt(vvv,"TreeCount")
local integer ehe=LoadInt(vvv,"UnitCount")
local group eEe=LoadGroup(vvv,"AlreadyHit")
local real x=vlv(GetUnitX(IJ)+(60*Pow(0.9,ehe)*Pow(0.99,eHe))*Cos(RK))
local real y=vLv(GetUnitY(IJ)+(60*Pow(0.9,ehe)*Pow(0.99,eHe))*Sin(RK))
local group g=CreateGroup()
local real d
if GetTriggerEvalCount(t)>2 then
set d=150
else
set d=75
endif
call DestroyEffect(AddSpecialEffect("effects\\Tornado.mdx",x,y))
set eHe=eHe+v7v(x,y,75)
call N5(vvv,"TreeCount",eHe)
set TB=eEe
set wB=IJ
set WB=vuv
set yB=eHe
set zB=ehe
set Ql=IJ
call GroupEnumUnitsInRange(g,x,y,d,Condition(function eGv))
call ForGroup(g,function eje)
call D8(g)
call N5(vvv,"UnitCount",zB)
call SetUnitX(IJ,x)
call SetUnitY(IJ,y)
if GetTriggerEvalCount(t)>29 then
call KillUnit(IJ)
call D8(eEe)
call A5(vvv)
call F8(t)
endif
set t=null
set IJ=null
set eEe=null
set g=null
return false
endfunction
function PowerShot_Actions takes nothing returns nothing
local unit Y3=GetTriggerUnit()
local real x2=l6(GetHandleId(Y3),"ReverseLance|x")
local real y2=l6(GetHandleId(Y3),"ReverseLance|y")
local real eKe=vtv(B8()-l6(GetHandleId(Y3),"ReverseLance|Time"),1.0)
local real RK=Atan2(y2-GetUnitY(Y3),x2-GetUnitX(Y3))
local trigger t
local integer vvv
local unit IJ
local integer v8=GetUnitAbilityLevel(Y3,'A12K')
local real vuv=(40+80*v8)*(eKe)
set t=CreateTrigger()
set vvv=GetHandleId(t)
set IJ=CreateUnit(GetOwningPlayer(Y3),'h078',GetUnitX(Y3),GetUnitY(Y3),RK*bj_RADTODEG)
set x2=GetUnitX(Y3)+1700*Cos(RK)
set y2=GetUnitY(Y3)+1700*Sin(RK)
call SaveUnit(vvv,"Projectile",IJ)
call SaveReel(vvv,"TargetX",x2)
call SaveReel(vvv,"TargetY",y2)
call SaveReel(vvv,"Angle",RK)
call SaveReel(vvv,"Damage",vuv)
call SaveInt(vvv,"TreeCount",0)
call SaveInt(vvv,"UnitCount",0)
call SaveGroup(vvv,"AlreadyHit",CreateGroup())
call TriggerRegisterTimerEvent(t,0.02,true)
call TriggerAddCondition(t,Condition(function PowerShot_Timer))
set Y3=null
set t=null
set IJ=null
endfunction
Bon, c'est sans aucuns doutes du Rapanui pour toi mais ça peut au moins te donner l'idée de la longueur d'un sort comme ça (chaque ligne est heureusement très simple si tu sais ce que tu fais).
L'idée, c'est d'utiliser un compte à rebours périodique pour bouger la flèche et infliger les dégats. Les unités déjà touchées sont stockées dans un groupe et, à chaque "pas" de flèche, on prend toutes les unités autour de la flèche et, si elles ne sont pas dans le groupe "AlreadyHit", on leur inflige des dégats.
Une Hashtable est présente tout au long des fonctions pour stocker les informations. Le plus difficile en GUI, c'est de faire ça sans leaker et c'est vraiment là que t'as besoin des variables locales.
Tout ça pour dire que le GUI c'est bien sympa, mais en ce moment vous avez l'air d'en attendre trop de lui. _________________
Deux solutions en Gui:
1-Avoir un dummy qui lance une onde de choc ou un essaim putride sans graphisme
2-Un déclencheur périodique qui inflige des dégâts aux unités dans une petite zone toutes les 0.0X secondes en espérant que ta flèche aura la même vitesse.
3-Ta flèche est une unité qui est déplacée par un trigger périodique de 0.0X secondes et qui possède un sort d'immolation sans effet graphique pour distribuer les dégâts. _________________
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