Worldedit
  Worldedit
Le site sur l'éditeur de warcraft 3 !
 
  FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs   medals.phpMé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

déclencheur qui se se lance pas

 
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
 kungfu-sheep
Anomalie floodiforme


Inscrit le: 14 Avr 2011
Messages: 1846
Sujets: 119
Spécialité en worldedit: fonctions paramétriques, équation de mouvement.


MessagePosté le: 27/06/12 11:56    Sujet du message: déclencheur qui se se lance pas Citer

salutation, oui c'est mon nouveau problème à la mode. ce déclencheur veut pas se lancer, c'est assez étrange et pour le coup j'n'ai aucune piste particulière.

Jass:
globals
real COLLISION_HEROS = 70
group array Group_check_unit
group Group_jump = CreateGroup()
group Group_transporteur = CreateGroup()
group Group_teleporteur = CreateGroup()
integer JUMP = 'o001'
integer TRANSPORTEUR = 'o000'
integer TELEPORTEUR = 'o002'
endglobals

function Null takes nothing returns boolean
return true
endfunction

function CheckUnit takes nothing returns nothing
    local unit u
    local integer n = GetTimerData(GetExpiredTimer())
    local unit heros = Heros_j[n]
    local group G = Group_check_unit[n]
    local integer max = CountUnitsInGroup(G)
    local integer i = 0
                call BJDebugMsg("ii")

    loop
        exitwhen i > max
                    call BJDebugMsg("iiiiiii")

        set u = GroupPickRandomUnit(G)
       
        if IsUnitInGroup(u, Group_jump) then
            call JumpUnit(Heros_j[n], u)
            call BJDebugMsg("ii")
           
        elseif IsUnitInGroup(u, Group_transporteur) then
          //  call TransporteurUnit(Heros_j[n], u)
           
        elseif IsUnitInGroup(u, Group_teleporteur) then
          //  call TeleporteurUnit(Heros_j[n], u)
           
        endif
       
        call GroupRemoveUnit(G, u)
        set i = i + 1
        set u = null
    endloop
   
    set heros = null
endfunction

function Trig_checkunit_Actions takes nothing returns nothing
    local integer i = 0
    local timer t = NewTimer()
                        call BJDebugMsg("i")

    loop
        exitwhen i > 11
                            call BJDebugMsg("iiiiiii")

        if Is_activ_j[i] then           
            call GroupEnumUnitsInRange(Group_check_unit[i], GetUnitX(Heros_j[i]), GetUnitY(Heros_j[i]), COLLISION_HEROS, Filter(function Null))
            call SetTimerData(t, i)
            call TimerStart(t, 0, false, function CheckUnit)
        endif
               
        set i = i + 1
    endloop
   
    call DestroyTimer(t)
endfunction

//===========================================================================
function InitTrig_checkunit takes nothing returns nothing
    set gg_trg_checkunit = CreateTrigger(  )
    call TriggerRegisterTimerEvent(gg_trg_checkpath, 0.05, true)
    call TriggerAddAction( gg_trg_checkunit, function Trig_checkunit_Actions )
    call DisableTrigger(gg_trg_checkunit)
endfunction



voici la suite du déclos même si pour le problème en question il n'est pas très nécessaire :

Secret:

Jass:
library Jump uses TimerUtils

struct Parabole
    unit u
    real a
    real b
    real c
    real incrementation
    real x = 0
   
    static method Jumping takes nothing returns nothing
        local Parabole p = GetTimerData(GetExpiredTimer())
        local real a = p.a
        local unit u = p.u
        local real b = p.b
        local real c = p.c
        local real incrementation = p.incrementation
        local real x = p.x
       
        set x = x + incrementation
       
        if GetUnitFlyHeight(u) > 0 then
            call SetUnitFlyHeight(u, a * Pow(x, 2) + b * x + c, 0)
            call SetTimerData(GetExpiredTimer(), p)
       
        else
            call PauseTimer(GetExpiredTimer())
        endif
    endmethod
endstruct

function JumpUnit takes unit slider, unit jumper returns nothing
    local real height = LoadReal(HASHTABLE_JUMPING, GetHandleId(jumper), 1)
    local real time = LoadReal(HASHTABLE_JUMPING, GetHandleId(jumper), 2) // pour avoir la vitesse pour une période de 0.05
    local real speed = (height * 0.05) / time
    local real a = height / (Pow(time, 2) / 4 - Pow(time, 2) / 2)
    local real b = -1 * a * time
    local real c = GetUnitFlyHeight(slider)
    local Parabole p = Parabole.create()
    local timer t = CreateTimer()
   
    set p.u = slider
    set p.a = a
    set p.b = b
    set p.c = c
    set p.incrementation = speed
    call SetTimerData(t, p)
    call TimerStart(t, 0.05, true, function Parabole.Jumping)
    call DestroyTimer(t)
endfunction

endlibrary



voila j'vous prierais de ne pas trop vous concentrer sur l'aspect rudimentaire de ma structure et de son utilisation, je débute et j'ai pas encore fini de l'optimiser sur ce que sapeur m'a déjà dit dessus.

pour l'info, j'n'ai aucun texte qui s'affiche.

sinon je le met enable dans un autre déclos qui se lance très bien (le même qui crée mon héros en début de partie, et il est très bien créé) enfin je vous le met quand même en spoiler aussi :

Secret:

Jass:
globals
boolean array Is_activ_j
integer HEROS = 'E000'
integer INVIS_UNIT = 'E001'
unit array Heros_j
unit array Invis_unit_j
integer Nb_player = 0
endglobals

function Trig_create_heros_Actions takes nothing returns nothing
    local real dist_angle = 360 / Nb_player
    local real dist_unit = 30
    local real rayon
    local real ordonate
    local integer i = 0
    local real angle = 0
   
    set ordonate = SinBJ((180 - dist_angle) / 2) * dist_unit
   
    if SinBJ(dist_angle) == 0 or ordonate == 0 then
        set rayon = dist_unit
       
    else
        set rayon = ordonate / SinBJ(dist_angle)
    endif
   
    set Slide_j[0] = gg_trg_slide_j0
    set Slide_j[1] = gg_trg_slide_j1
    set Slide_j[2] = gg_trg_slide_j2
    set Slide_j[3] = gg_trg_slide_j3
    set Slide_j[4] = gg_trg_slide_j4
    set Slide_j[5] = gg_trg_slide_j5
    set Slide_j[6] = gg_trg_slide_j6
    set Slide_j[7] = gg_trg_slide_j7
    set Slide_j[8] = gg_trg_slide_j8
    set Slide_j[9] = gg_trg_slide_j9
    set Slide_j[10] = gg_trg_slide_j10
   
        loop
            exitwhen i > Nb_player
           
            if Is_activ_j[i] then
                set Heros_j[i] = CreateUnit(Player(i), HEROS, GetRectCenterX(LVL_DEPART[0]) + rayon * CosBJ(angle), GetRectCenterY(LVL_DEPART[0]) + rayon * SinBJ(angle), 0)
                set Invis_unit_j[i] = CreateUnit(Player(PLAYER_NEUTRAL_PASSIVE), INVIS_UNIT, GetRectCenterX(LVL_DEPART[0]) + rayon * CosBJ(angle), GetRectCenterY(LVL_DEPART[0]) + rayon * SinBJ(angle), 0)
                               
                call TriggerRegisterTimerEvent(Slide_j[i], 0.01, true)
                call ShowUnit(Heros_j[i], false)
                call ShowUnit(Heros_j[i], true)
                call SetUnitPathing(Invis_unit_j[i], false)
                call SetUnitPathing(Heros_j[i], false)
                call SetUnitUserData(Invis_unit_j[i], i)
                call SelectUnitAddForPlayer(Heros_j[i], Player(i))
               
                set angle = angle + dist_angle
            endif
            set i = i + 1
        endloop
       
        call EnableTrigger(gg_trg_checkpath)
endfunction

//===========================================================================
function InitTrig_create_heros takes nothing returns nothing
    set gg_trg_create_heros = CreateTrigger(  )
    call TriggerRegisterTimerEvent(gg_trg_create_heros, 1, false)
    call TriggerAddAction( gg_trg_create_heros, function Trig_create_heros_Actions )
endfunction



de toute façon j'ai essayé sans le disable/enable ça change rien (j'l'ai mi car sinon les variable sutilisé dans checkunit ne sont pas définis)
_________________
22:27:43<Seiraw> Bah y a deux genre de personnes
22:27:57<Seiraw> les soumis et les soumises
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
 kungfu-sheep
Anomalie floodiforme


Inscrit le: 14 Avr 2011
Messages: 1846
Sujets: 119
Spécialité en worldedit: fonctions paramétriques, équation de mouvement.


MessagePosté le: 27/06/12 11:59    Sujet du message: Citer

wtf avec le 2è spoiler il y a des p'tits bug de la balise ??
_________________
22:27:43<Seiraw> Bah y a deux genre de personnes
22:27:57<Seiraw> les soumis et les soumises
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
 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/06/12 14:58    Sujet du message: Citer

Jass:
function InitTrig_checkunit takes nothing returns nothing
    set gg_trg_checkunit = CreateTrigger(  )
    call TriggerRegisterTimerEvent(gg_trg_checkpath, 0.05, true)
    call TriggerAddAction( gg_trg_checkunit, function Trig_checkunit_Actions )
    call DisableTrigger(gg_trg_checkunit) // Loul?
endfunction


Sinon, par pitié, sers-toi des initializers. Ça va te simplifier la vie.
J'ai aussi remarqué que dans ta struct, tu détruit le timer juste après l'avoir lancé, ça ne risque pas de fonctionner Wink. Il faudrait que tu le détruise dans ta méthode Jumping si tu en utilises plusieurs. De même qu'il n'est pas nécessaire que redéfinir la data du timer à chaque fois dans la méthode Jumping.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 kungfu-sheep
Anomalie floodiforme


Inscrit le: 14 Avr 2011
Messages: 1846
Sujets: 119
Spécialité en worldedit: fonctions paramétriques, équation de mouvement.


MessagePosté le: 27/06/12 15:13    Sujet du message: Citer

tu n'as même aps lu ce que j'ai écrit -_-"

j'vais voir pour le timer.
_________________
22:27:43<Seiraw> Bah y a deux genre de personnes
22:27:57<Seiraw> les soumis et les soumises
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
 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/06/12 15:19    Sujet du message: Citer

Ah oui, j'ai pas lu jusqu'à la fin ^^.
J'ai testé le code et ça marche chez moi. Cela vient peut-être de TimerUtils. J'ai eu un bug similaire un jour avec. Essaye de mettre CreateTimer au lieu de NewTimer pour voir ce que ça donne. S'il renvoie une variable de type timer qui n'est pas définie (même pas null), les actions suivantes ne seront pas exécutées.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 kungfu-sheep
Anomalie floodiforme


Inscrit le: 14 Avr 2011
Messages: 1846
Sujets: 119
Spécialité en worldedit: fonctions paramétriques, équation de mouvement.


MessagePosté le: 27/06/12 15:40    Sujet du message: Citer

je l'ai déjà fait, même chose.
_________________
22:27:43<Seiraw> Bah y a deux genre de personnes
22:27:57<Seiraw> les soumis et les soumises
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
 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/06/12 15:43    Sujet du message: Citer

Euh, bah alors je vois pas où peut être le problème Surprised. Mets un BJDebugMsg dans la fonction d'initialisation pour voir si elle crée bien le déclencheur.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 kungfu-sheep
Anomalie floodiforme


Inscrit le: 14 Avr 2011
Messages: 1846
Sujets: 119
Spécialité en worldedit: fonctions paramétriques, équation de mouvement.


MessagePosté le: 27/06/12 15:48    Sujet du message: Citer

déjà fait, ça s'afficeh (désolé j'aurais du le mettre tout ça on aurait gagné du temps)
_________________
22:27:43<Seiraw> Bah y a deux genre de personnes
22:27:57<Seiraw> les soumis et les soumises
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
 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/06/12 15:51    Sujet du message: Citer

Ok, c'est bon.
Tu assigne l'événement à la variable gg_trg_checkpath mais l'action à gg_trg_checkunit. Donc à la place de TriggerRegisterTimerEvent(gg_trg_checkpath, 0.05, true) mets plutôt TriggerRegisterTimerEvent(gg_trg_checkunit, 0.05, true).
Un initialisateur aurait tout évité, t'aurais créé un trigger manuellement Wink.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 kungfu-sheep
Anomalie floodiforme


Inscrit le: 14 Avr 2011
Messages: 1846
Sujets: 119
Spécialité en worldedit: fonctions paramétriques, équation de mouvement.


MessagePosté le: 27/06/12 15:57    Sujet du message: Citer

argl les deux se ressemblent trop x)

merci
_________________
22:27:43<Seiraw> Bah y a deux genre de personnes
22:27:57<Seiraw> les soumis et les soumises
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
 kungfu-sheep
Anomalie floodiforme


Inscrit le: 14 Avr 2011
Messages: 1846
Sujets: 119
Spécialité en worldedit: fonctions paramétriques, équation de mouvement.


MessagePosté le: 27/06/12 18:50    Sujet du message: Citer

ce sont les même déclos donc j'me suis dit que j'allais pas refair eun sujet même si il le faudrait, mais voila (probablement un problème dans ma structure)

à la première exécution tout ce passe bien l'unité décolle et réatterrie, seulement quan dje retourne pour sauter bin ça ne veut plus se faire. des idées ? faut-il détruire l'instance de la structure créé ?

édit >> d'après mes recherches ça vient de l'utilisation de TimerUtils que je fais, je vais créer un nouveau topic.
_________________
22:27:43<Seiraw> Bah y a deux genre de personnes
22:27:57<Seiraw> les soumis et les soumises
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
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