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=f98211b88e2502a9cfe5e6040a2ced2dMé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

Améliorer un déclencheur
Aller à la page 1, 2  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
 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: 13/02/12 21:15    Sujet du message: Améliorer un déclencheur Citer

Bonjour, j'aimerais beaucoup améliorer ce sort, étant donné que répété une dizaine de fois, ça lag un peu beaucoup...
Jass:
 local unit lanceur = LoadUnitHandle( udg_TableSorts, GetHandleId( GetExpiredTimer() ), 0 )
    local real Xlanceur = GetUnitX( lanceur )
    local real Ylanceur = GetUnitY( lanceur )
    local real a = LoadReal( udg_TableSorts, GetHandleId( GetExpiredTimer() ), 1 )
    local real distance = LoadReal( udg_TableSorts, GetHandleId( GetExpiredTimer() ), 2 )
    local real X = Xlanceur + distance * Cos( a * 0.017 )
    local real Y = Ylanceur + distance * Sin( a * 0.017 )
    local group g = CreateGroup()
    local unit u
    local unit dummy
    call GroupEnumUnitsInRange( g, X, Y, 100.00, null )
    if distance > 5.00 then
        set dummy = CreateUnit( GetOwningPlayer( lanceur ), 'h002', X, Y, 0.00 )
        call KillUnit( dummy )
        loop
        set u = FirstOfGroup( g )
        exitwhen u == null
        if IsUnitEnemy( u, GetOwningPlayer(( lanceur ))) == true and GetUnitState( u, UNIT_STATE_LIFE) > 0 and IsUnitType( u, UNIT_TYPE_STRUCTURE ) == false then
            call UnitDamageTarget( lanceur, u, 50.00, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_DIVINE, WEAPON_TYPE_WHOKNOWS)
        endif
        call GroupRemoveUnit( g, u )
        endloop
        call SaveReal( udg_TableSorts, GetHandleId( GetExpiredTimer() ), 1, a + 12 )
        call SaveReal( udg_TableSorts, GetHandleId( GetExpiredTimer() ), 2, distance - 5 )
    else
        call FlushChildHashtable( udg_TableSorts, GetHandleId( GetExpiredTimer() ))
        call DestroyTimer( GetExpiredTimer() )
    endif
    set lanceur = null
    call DestroyGroup( g )
    set u = null
    set dummy = null


Premièrement au niveau de hashtables, comment s'en passer? J'ai cru comprendre que c'était gourmand comme action, mais pour faire passer des infos d'un déclencheur à un autre, ça me parait indispensable.

Ensuite la création d'unité répété juste pour l'animation de mort. J'aurais pu utiliser des effets spéciaux mais ni la hauteur, ni la taille ne sont ajustés. Quelqu'un a une solution?

Et si vous avez d'autres suggestions, je suis preneur.
_________________
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: 13/02/12 21:41    Sujet du message: Citer

sur ce trigger, je ne vois pas ce qui pourrait être fait.

tu peux peut être nous donner le reste ? voir si une modification plus profonde est à envisager.

il y a beaucoup d'unité dans ta boucle ?
_________________
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: 14/02/12 14:00    Sujet du message: Citer

Eh bien c'est la totalité du déclencheur qui lag, mais je te passe le premier si tu veux:
Jass:
function Trig_Tourbillon_de_lumiere_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A001'
endfunction

function Trig_Tourbillon_de_lumiere_Actions takes nothing returns nothing
    local timer t = CreateTimer()
    call SaveUnitHandle( udg_TableSorts, GetHandleId( t ), 0, GetTriggerUnit() )
    call SaveReal( udg_TableSorts, GetHandleId( t ), 1, 0.00 )
    call SaveReal( udg_TableSorts, GetHandleId( t ), 2, 600.00 )
    call TimerStart( t, 0.03, true, null )
    call TriggerRegisterTimerExpireEventBJ( gg_trg_Tourbillon_de_lumiere_timer, t )
endfunction

//===========================================================================
function InitTrig_Tourbillon_de_lumiere takes nothing returns nothing
    set gg_trg_Tourbillon_de_lumiere = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Tourbillon_de_lumiere, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Tourbillon_de_lumiere, Condition( function Trig_Tourbillon_de_lumiere_Conditions ) )
    call TriggerAddAction( gg_trg_Tourbillon_de_lumiere, function Trig_Tourbillon_de_lumiere_Actions )
endfunction



Donc il détecte l'évènement, lance un timer, enregistre les infos, etc...

Citation:
il y a beaucoup d'unité dans ta boucle ?


Oui, plutôt, toute les 0.03 secondes, pendant 3.6 secondes.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7143
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: 14/02/12 17:45    Sujet du message: Citer

On peut certes encore améliorer le code, mais c'est clair que c'est la création/destruction d'unité le réel problème.
C'est tout simplement l'opération la plus coûteuse en jass.

Si tu ne peux vraiment pas utiliser d'effets spéciaux à la place tu peux envisager de pré-créer les unités, puis de les réutiliser.

Aussi :

Jass:
call TimerStart( t, 0.03, true, null )
    call TriggerRegisterTimerExpireEventBJ( gg_trg_Tourbillon_de_lumiere_timer, t )


Au lieu d'utiliser null, utilisement simplement la function Actions de ton déclencheur gg_trg_Tourbillon_de_lumiere_timer.
Tu n'as d'ailleurs pas besoin de ce trigger (à moins que tu utilises d'autres events avec celui ci).

Jass:
call TimerStart( t, 0.03, true, function NomDeTaFonction )

_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 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: 14/02/12 17:59    Sujet du message: Citer

Oui, j'avais remarqué ça après avoir poster, j'ai tout rassemblé en un seul déclencheur.
Sinon, je ne peux pas pré-créer les unités, je ne peux pas anticiper le fait qu'un joueur utilise un sort.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7143
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: 14/02/12 18:06    Sujet du message: Citer

Je me demande ce qu'il se passe quand on utilise un modèle d'unité invisible (le fameux dummy modèle que l'on trouve un peu partout) , qu'on lui ajoute un attachement (le modèle voulu) et qu'on lui joue l'animation "death".

Si cela fonctionne comme voulu, tu peux pré-créer un nombre suffisant d'unités, puis gérer les unités et leur effets.
Tu pourras ainsi les utiliser pour n'importe quel effet.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 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: 14/02/12 18:17    Sujet du message: Citer

Oui, mais je ne suis pas sûr que ça puisse résoudre le problème, il faudrait que j'en ai en permanence 120 en stock, et je quand un joueur utilise le sort, j'en recrée 120...
Je pense que je vais plutôt ne créer qu'une seule unité et lui imprimer le mouvement souhaité, en essayant de trouver un modèle qui puisse se rapprocher.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7143
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: 14/02/12 18:27    Sujet du message: Citer

Il est certain que la meilleure solution serait d'utiliser une seule unité, si c'est possible.

Toutefois avoir 120 unités en stock ne devrait pas être un problème en soi, maintenant si c'est 120*12 c'est déjà plus problématique, mais ça pourrait peut être toujours le faire.

Mais en fait pourquoi forcément 120, a moins qu'un effet doit durer plus longtemps que 3.6 s ?
_________________
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: 14/02/12 18:34    Sujet du message: Citer

bin 3.6/0.03 ça fait 120. et il dit que c'est 0.03 la période de création d'unité pendant 3.6 secondes.

sinon, ne serait il pas possible de créer une seule unité que ut déplaces aux endroits que tu veux, et à ces endroits y mettre l'effet de ton choix ? ainsi même en altitude cela marcherait non ?
on aurait beaucoup de déplacement, mais c'est moins couteux qu'une unité créé/remove exécuté mass de fois.
_________________
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
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7143
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: 14/02/12 18:39    Sujet du message: Citer

fulldragon a écrit:
bin 3.6/0.03 ça fait 120. et il dit que c'est 0.03 la période de création d'unité pendant 3.6 secondes.


J'avais bien compris, mais ca ne change pas le fait que si l'animation de mort doit durer moins que 3.6 secondes, tu n'as pas besoin de 120 unités simultanément.

Citation:
sinon, ne serait il pas possible de créer une seule unité que ut déplaces aux endroits que tu veux, et à ces endroits y mettre l'effet de ton choix ? ainsi même en altitude cela marcherait non ?
on aurait beaucoup de déplacement, mais c'est moins couteux qu'une unité créé/remove exécuté mass de fois.


C'est ce qu'il a dit ...
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Tirlititi



Inscrit le: 21 Fév 2010
Messages: 1785
Sujets: 22
Spécialité en worldedit: La modestie
Médailles: 1 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 15/02/12 17:42    Sujet du message: Citer

Faire jouer l'animation "Death" à une unité ne fait pas jouer les animations "Death" à ses attachements. Par contre, détruire l'attachement lui fait jouer cette animations.

Au lieu de créer 120 unités, tu créerais donc 120 effets spéciaux. Ce sera déjà mieux.
_________________
Warcraft III, c'était mieux avant. Y'avait des purs chefs-d'oeuvres du mapping !
Road Of Glory (par moi)
Casse-briques (par moi)
Temple de Glace (par moi)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 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: 15/02/12 17:52    Sujet du message: Citer

Oui, bonne idée, mais est-tu sûr que l'effet conserve les dimensions de l'unité?
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Tirlititi



Inscrit le: 21 Fév 2010
Messages: 1785
Sujets: 22
Spécialité en worldedit: La modestie
Médailles: 1 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 15/02/12 17:55    Sujet du message: Citer

Je suis sûr que c'est possible d'augmenter/diminuer la taille de l'effet en augmentant/diminuant la taille de l'unité.

Maintenant, peut-être qu'il faut modifier la taille de l'unité dans l'éditeur d'objet seulement ou par déclencheur seulement...
_________________
Warcraft III, c'était mieux avant. Y'avait des purs chefs-d'oeuvres du mapping !
Road Of Glory (par moi)
Casse-briques (par moi)
Temple de Glace (par moi)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 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: 15/02/12 17:57    Sujet du message: Citer

Ok Smile Je vais essayer ça.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7143
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: 15/02/12 20:05    Sujet du message: Citer

Je me disais bien qu'il y avait un truc.
J'avais jamais entendu parler du besoin de créer autant d'unités (hormis pour un système de projectiles).
_________________
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  Suivante
Page 1 sur 2

 
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