Posté le: 15/11/08 15:13 Sujet du message: Unité finit le lancement dune compétence : Actions ( Oopas )
Salut
Voilà mon problème : avec l'événement "unité termine le lancement d'une compétence", on ne peut pas récupérer le point cible
pour ça je le récupère quand l'unité est en train de lancer le sort, et je crée un sous-trigger qui détecte quand l'unité finit le sort et j'utilise le point sauvegardé :
function Trig_bombe_Actions takes nothing returns nothing
local location l = GetSpellTargetLoc()
local unit u = GetSpellAbilityUnit()
local trigger t = CreateTrigger()
local string s = H2S(t)
call StoreInteger(udg_GC, s, "location", H2I(l) )
call TriggerRegisterUnitEvent( t, u, EVENT_UNIT_SPELL_FINISH )
call TriggerAddCondition( t, Condition( function Trig_bombe_Conditions2 ) )
call TriggerAddAction( t, function Trig_bombe_Actions2 )
set u = null
set l = null
set t = null
endfunction
//===========================================================================
function InitTrig_bombe takes nothing returns nothing
set gg_trg_bombe = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_bombe, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_bombe, Condition( function Trig_bombe_Conditions ) )
call TriggerAddAction( gg_trg_bombe, function Trig_bombe_Actions )
endfunction
Problème : le déclencheur se fait environ 1 fois sur 5, et quand il se fait, il se fait à tous les points ou il y a eu des essais ratés en meme temps d'ou un enorme lagg qui plante l'ordi
Alors si vous avez une meilleure méthode merci _________________
ici c'est un sort basé sur roquettes, qui crée une bombe à l'endroit ou le projectile touche le sol :
EVENT_PLAYER_UNIT_SPELL_EFFECT = unité initie l'effect d'une compétence
pourquoi pas directement?
sa detecte quand l'unité lance le sort et sa fait las action a ce moment la :
le projectile de roquette ne mettra pas le meme temps si l'unité cible a coté d'elle ou a l'autre bout de la map ;
en fait il faudrait calculer un wait entre le point cible, la position de l'unité, et la vitesse du projectile ( si y'a pas de solution pour detecter si l'unit termine le sort c'est ce que je ferais )
(recoit un ordre avec point pour cible c'est pareil, j'ai testé les 2 : de meme que si elle cible + loin que la portée du sort l'action se fera avant qu'elle ait fini le sort )
edit : le bug a l'air de venir du fait qu'on bouge l'unité avant quelle ait fini la competence (a verifier) _________________
Inscrit le: 23 Aoû 2007 Messages: 7146 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
Posté le: 15/11/08 17:52 Sujet du message:
Le point cible ne fonctionne pas avec l'event termine/achève une compétence.
Je peux me tromper mais je ne crois pas que l'arrivée des roquettes coïncide avec l'event achève une compétence ( à tester sur une grande distance).
Je crois que la solution du calcul de la distance est la meilleure option. _________________
Oui la fin des roquettes est détectée
En fait le bug vient bien du fait que si l'unité reçoit un ordre entre le début et la fin de la compétence, l'event "termine une competence" n'est pas pris en compte, même si c'est un projectile
le fait de se faire pause ou sleep est considéré aussi comme un ordre
du coup sa a l'air de fonctionner avec ca :
Jass:
local force f = CreateForce()
call UnitAddAbility( u, 'Avul' )
call UnitAddAbility( u, 'ACmi' )
call ForceAddPlayer(f, GetOwningPlayer(u))
call SetUserControlForceOff( f )
Inscrit le: 23 Aoû 2007 Messages: 7146 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
Posté le: 15/11/08 18:55 Sujet du message:
zazaa a écrit:
Oui la fin des roquettes est détectée
En fait le bug vient bien du fait que si l'unité reçoit un ordre entre le début et la fin de la compétence, l'event "termine une competence" n'est pas pris en compte, même si c'est un projectile
le fait de se faire pause ou sleep est considéré aussi comme un ordre
du coup sa a l'air de fonctionner avec ca :
Jass:
local force f = CreateForce()
call UnitAddAbility( u, 'Avul' )
call UnitAddAbility( u, 'ACmi' )
call ForceAddPlayer(f, GetOwningPlayer(u))
call SetUserControlForceOff( f )
termine une compétence se produit justement quand un sort est interrompu (ou juste après achève quand le lancement du sort est achevé), t'es certaine qu'il ne se déclenche pas hmm ?
Sinon pour la pause/stun d'une unité tu peux consulter mon topic "la foire aux bugs" dans le forum autre. _________________
je m'en suis aperçue en augmentant le range des roquettes, car j'en avait marre de bouger mon bonhome pour eviter qui'il explose
du coups on lui donne pas d'ordre sa bug plus
alors j'ai essayer de le pause pour eviter qu'on lui donne des ordres ( le sort de roquette dure entre 0 et 3 sec ) et de le depauser apres
alors pause unit sa annule l'ordre
et le fait de creer un dummy qui sleep le hero sa annule aussi
enfin sa annule pas vraiment car si on relance le sort apres et qu'il reussit, il se fait à tous les points en meme temps
alors pour l'event du 1er trigger j'ai mis : EVENT_PLAYER_UNIT_SPELL_CHANNEL ( sa recupere les points et c'est plus rapide )
et au cas ou on clique à la vitesse de la lumiere :
Jass:
call TriggerSleepAction( 5.00 )
if GetUnitAbilityLevelSwapped('ACmi', u) > 0 then
call UnitRemoveAbility( u, 'ACmi' )
call UnitRemoveAbility( u, 'Avul' )
call SetUserControlForceOn( f )
call TriggerClearActions( t )
call DestroyTrigger( t )
endif
Inscrit le: 23 Aoû 2007 Messages: 7146 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
Posté le: 15/11/08 19:58 Sujet du message:
Mouai je suis sceptique, on se comprend peut être mal, mais je doute fortement que l'évènement ne se produise pas.
Je testerais moi même et confirmerais ma goujaterie et la trop grande confiance en moi ou bien ton manque d'expérience _________________
Inscrit le: 23 Aoû 2007 Messages: 7146 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
Posté le: 15/11/08 22:18 Sujet du message:
zazaa a écrit:
fait le bouger ton ingénieur et tu verras que l'evenement acheve n'y est pas^^
Acheve ne se produit que si le sort se termine correctement.
Termine se produit quand le sort est interrompu, ou en même temps que achève, enfin un pouillème après.
Quand je bouge mon ingénieur termine se produit bien mais pas achève, normal quoi.
C'est ce que j'ai essayé de t'expliquer tu ne sembles pas avoir saisi la différence entre termine et achève. _________________
C'etait pour ca que je posait une question
j'avais pas compris que quand on donne un ordre ca annule l'event unit acheve une competence (termine n'existant pas) mais sa prend en compte arrete
dans se cas si je lance le trigger quand mon bonhome arrete, y'aura quand meme un truc qui va toucher le sol mais le trigger va se lancer avant.
On c'est juste mal compris : pour moi termine = acheve et arrete c'est une autre histoire mais je m'en suis pas occupée
Donc il faut bloquer le bonhome pour qu'il puisse achever sa compétence
C'etait la question existentielle du soir et sur ce je me coucherais plus intelligente ( ou pas ) et desolée de t'avoir fait perdre ton temps _________________
Inscrit le: 23 Aoû 2007 Messages: 7146 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
Posté le: 16/11/08 10:15 Sujet du message:
Y'a aucun soucis, ce forum est là pour aider à apprendre.
Par contre je ne trouve pas cela élégant de forcer l'utilisateur à achever le spell, enfin stoi qui voit. _________________
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