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=1f67e6e4cdae7f526dfc6902d457e284Mé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

Eviter les boucles inutiles
Aller à la page 1, 2, 3, 4  Suivante
 
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
 zazaa
Membre actif


Inscrit le: 05 Aoû 2008
Messages: 197
Sujets: 24



MessagePosté le: 12/10/08 15:46    Sujet du message: Eviter les boucles inutiles Citer

Bonjour le monde !

Si vous pouvier encore m'aider, il me manque un truc avec mes déclos..
pour mes sort je me retrouve tout le temps avec des déclencheur du genre
Secret:

Jass:
function Trig_turn_Actions takes nothing returns nothing
local integer i = 1

loop
    exitwhen i > 12
    if udg_channel[i] then
        call TurnUnit( udg_firechannel[i] )
        if R2I(udg_counttime[i]) < 11 then
            set udg_counttime[i] = udg_counttime[i] + 0.01
        endif
    endif
    set i = i + 1
endloop
       
endfunction

//===========================================================================
function InitTrig_turn takes nothing returns nothing
    set gg_trg_turn = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( gg_trg_turn, 0.01 )
    call TriggerAddAction( gg_trg_turn, function Trig_turn_Actions )
endfunction



je veux juste que les actions se fassent quand un boolean passe a TRUE
mais je dois verifier tous les joueur à chaque fois
sa commence à faire quelque déclos et va yen avoir encore, et pour l'instant y a que 3 héro sur le terrain et sa lagg deja Sad

Merci
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé  
 Troll-Brain
Ri1kamoua


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...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 12/10/08 15:56    Sujet du message: Citer

Tu veux faire quoi exactement ?
0.01 s ca me partait beaucoup trop petit comme intervalle.
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé  
 zazaa
Membre actif


Inscrit le: 05 Aoû 2008
Messages: 197
Sujets: 24



MessagePosté le: 12/10/08 16:04    Sujet du message: Citer

c'est pour tous les triggers qui utilisent le move unit instantaly et le polarprojection ; 0.02 c'est limite et 0.03 on voit carrémént l'unité qui clignotte
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé  
 Troll-Brain
Ri1kamoua


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...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 12/10/08 16:59    Sujet du message: Citer

Faudrait plutôt utiliser des timers périodiques pour ce genre de chose.
Et tu lances, stoppes puis détruit ou recycle le compteur quand il le faut.
0.02 s me semble un bon compromis.

Maintenant il paraitrait que pour des périodes inférieures à 0.04 s il serait préférable d'utiliser un seul compteur qui lance tes fonctions stockées dans un trigger en conditions avec la fonction TriggerEvaluate.
Mais là ca devient assez complexe ...
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé  
 zazaa
Membre actif


Inscrit le: 05 Aoû 2008
Messages: 197
Sujets: 24



MessagePosté le: 12/10/08 17:52    Sujet du message: Citer

désolé questions de noob ; j'ai cherché sur le forum des fonctions avec des timers, j'en ai pas trouvé beaucoup et j'y comprend rien^^
Citation:
native CreateTimer takes nothing returns timer
native TimerStart takes timer whichTimer, real timeout, boolean periodic, code handlerFunc returns nothing


je le met ou le 0.02 ?
si j'ai pas de temps limite comment je l'arrete avec un boolean à false? (par exemple le déclo du dessus ; l'action se fait tant que le joueur fait pas stop, se prend pas de stun et lance pas son sort )
le "code handlerfunc" c'est je met la fonction action du trigger du dessus et je met rien en evenement ?
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé  
 Troll-Brain
Ri1kamoua


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...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 12/10/08 18:39    Sujet du message: Citer

Das le code personnalisé de ta map ou du moins il faut que cette fonction se situe en haut de celle ou tu vas démarrer ton compteur.

Jass:
function NomDeTaFonction takes nothing returns nothing
 if ... then // ta condition de fin
   call PauseTimer(GetExpiredTimer())
   call DestroyTimer(GetExpiredTimer())
 endif

// tes actions

endfunction


Il faut impérativement que la fonction takes et returns nothing.
Si tu as besoin de passer des paramètres utilise des variables globales.

Ex d'utilisation :

Jass:
local timer tim = CreateTimer()

call TimerStart( tim , 0.02 , true , function NomDeTaFonction)


Si tu mets false à la place de true ton compteur ne se lancera qu'une fois.
Cela est utile si tu veux un wait précis et qui ne continue pas son décompte quand le jeu est en pause.
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé  
 zazaa
Membre actif


Inscrit le: 05 Aoû 2008
Messages: 197
Sujets: 24



MessagePosté le: 12/10/08 19:43    Sujet du message: Citer

Oh youpi sa marche^^

mais quand je met le boolean a false sa veut pas s'arreter...
Jass:
function TimerTurn takes nothing returns nothing
    if not udg_channel[udg_indexchannel] then
       call PauseTimer(GetExpiredTimer())
       call DestroyTimer(GetExpiredTimer())
    endif
       
  call TurnUnit( udg_firechannel[udg_indexchannel] )
  if R2I(udg_counttime[udg_indexchannel]) < 11 then
        set udg_counttime[udg_indexchannel] = udg_counttime[udg_indexchannel] + 0.02
   endif
     
endfunction


comment on le récupere le GetExpired timer si on peut pas passer les parametres?
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé  
 Troll-Brain
Ri1kamoua


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...)
Rédacteur de tuto #3 (Quantité : 1) Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 12/10/08 20:12    Sujet du message: Citer

La meilleure solution à mes yeux est de lier l'handle du timer : I2S(H2I(timer)) ,avec l'index d'une struct contenant tes différentes variables via le game cache.
Hélas tu es sous mac et ne peut donc pas coder en vJass.
Reproduire une struct en jass "normal" serait assez crade à lire.

Reste la solution only game cache.
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé  
 zazaa
Membre actif


Inscrit le: 05 Aoû 2008
Messages: 197
Sujets: 24



MessagePosté le: 12/10/08 21:39    Sujet du message: Citer

en fait je sais pas si je fais vraiment tout ce qu'il faut. l'event ou je rajoute la fonction c'est : Unité recoit un ordre sans cible ; ca met le boolean a true.
mais je le met a false dans d'autre déclo donc l'action va pas se faire
enfin j'ai pas trop compris quoi
voila le déclo
Secret:

Jass:
function Trig_fire_channel_Conditions takes nothing returns boolean
    if ( GetIssuedOrderId() != OrderId("web") ) then
        return false
    endif
    return true
endfunction

function Trig_fire_channel_Actions takes nothing returns nothing
local integer i = GetPlayerId(GetOwningPlayer(GetOrderedUnit())) + 1
local effect e
local timer t = CreateTimer()

    set udg_indexchannel = i
    set udg_firechannel[i] = MakeTurningUnit( udg_hero[i], 250.00, 'hfoo')
    set eAddSpecialEffectTarget( "Abilities\\Weapons\\PhoenixMissile\\Phoenix_Missile.mdl",udg_firechannel[i], "overhead" )
   
    set udg_channel[i] = true
    call UnitAddAbility( udg_hero[i], 'A01T' )
    call TriggerSleepAction( 0.01 )
    call ForceUIKeyBJ( Player(i-1), "N" )

    call TimerStart( t , 0.02 , true , function TimerTurn)
endfunction

//===========================================================================
function InitTrig_fire_channel takes nothing returns nothing
    set gg_trg_fire_channel = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_fire_channel, EVENT_PLAYER_UNIT_ISSUED_ORDER )
    call TriggerAddCondition( gg_trg_fire_channel, Condition( function Trig_fire_channel_Conditions ) )
    call TriggerAddAction( gg_trg_fire_channel, function Trig_fire_channel_Actions )
endfunction


_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé  
 Troll-Brain
Ri1kamoua


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...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 13/10/08 18:10    Sujet du message: Citer

Je t'ai enduit d'erreurs en te parlant de variables globales.
Il faut lier le timer avec tes variables.
Utiliser le cache avec en missionkey : I2S(H2I(timer)), et en key le nom choisi de tes données
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé  
 zazaa
Membre actif


Inscrit le: 05 Aoû 2008
Messages: 197
Sujets: 24



MessagePosté le: 13/10/08 19:08    Sujet du message: Citer

En fait sa marche c'est mon déclo qui était buggé (forceuikey c'est pas considéré comme un ordre) y'aura pas besoin du game gache

En tous cas merci encore <3
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé  
 zazaa
Membre actif


Inscrit le: 05 Aoû 2008
Messages: 197
Sujets: 24



MessagePosté le: 13/10/08 20:39    Sujet du message: Citer

Reuh

j'ai encore un probleme Crying or Very sad
j'ai mis un timer dans un autre déclo, l'action se fait mais les effets spéciaux se removent pas ( par conséquent les point non plus ) surement a cause d'un wait
qu'est ce que je dois faire plz?
Jass:
function TimerCharge takes nothing returns nothing
       
local integer i = udg_indexcharge
local location l1
local location l2
local effect e
            set l1 = GetUnitLoc(udg_hero[i])
            set l2 = PolarProjectionBJ(l1, 12.00, GetUnitFacing(udg_hero[i]))
            call SetUnitPositionLoc( udg_hero[i], l2 )
            set e = AddSpecialEffectLoc( "Doodads\\Cinematic\\TownBurningFireEmitter\\TownBurningFireEmitter.mdl", l1 )
            call TriggerSleepAction( 0.01 )
            call DestroyEffect( e )
            call RemoveLocation( l1 )
            call RemoveLocation( l2 )
         set l1 = null
         set l2 = null
         set e = null
     
endfunction

je suis obligée de mettre le wait sinon l'effet se fait pas
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé  
 Troll-Brain
Ri1kamoua


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...)
Rédacteur de tuto #3 (Quantité : 1) Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 13/10/08 21:32    Sujet du message: Citer

Utiliser un autre compteur à la place.
Mais comme tu ne sembles pas avoir compris la notion d'attachement, ce qui a vrai dire est tout à fait normal étant donné que je ne l'ai pas expliqué Razz, il faudrait d'abord te l'expliquer avant d'aller plus loin.
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé  
 Ayane
Bot administrateur


Inscrit le: 17 Sep 2007
Messages: 2012
Sujets: 49

Médailles: 2 (En savoir plus...)
Ayane (Quantité : 1) Rédacteur de tuto #1 (Quantité : 1)

MessagePosté le: 13/10/08 21:33    Sujet du message: Citer

Lorsque tu fais DestroyEffect cela joue l'animation Death avant de le détruire. Il faut aussi considérer que TriggerSleepAction a une attente minimale de plus de 0.04secondes.
Donc si tu met cette fonction à exécuter périodiquement tu peux voir tout le temps l'effet spécial.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger 
 Troll-Brain
Ri1kamoua


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...)
Rédacteur de tuto #3 (Quantité : 1) Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 13/10/08 21:42    Sujet du message: Citer

De toute façon il me semble qu'utiliser un TriggerSleepAction dans le code d'un compteur interrompt l'exécution du code ( à vérifier)
_________________
Le violet, c'est moche.
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
Aller à la page 1, 2, 3, 4  Suivante
Page 1 sur 4
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