Inscrit le: 14 Oct 2009 Messages: 719 Sujets: 40 Spécialité en worldedit: Les bugs Médailles: 1 (En savoir plus...)
Posté le: 13/02/12 21:15 Sujet du message: Améliorer un déclencheur
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. _________________
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...)
Posté le: 14/02/12 17:45 Sujet du message:
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.
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 )
Inscrit le: 14 Oct 2009 Messages: 719 Sujets: 40 Spécialité en worldedit: Les bugs Médailles: 1 (En savoir plus...)
Posté le: 14/02/12 17:59 Sujet du message:
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. _________________
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...)
Posté le: 14/02/12 18:06 Sujet du message:
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. _________________
Inscrit le: 14 Oct 2009 Messages: 719 Sujets: 40 Spécialité en worldedit: Les bugs Médailles: 1 (En savoir plus...)
Posté le: 14/02/12 18:17 Sujet du message:
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. _________________
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...)
Posté le: 14/02/12 18:27 Sujet du message:
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 ? _________________
Inscrit le: 14 Avr 2011 Messages: 1846 Sujets: 119 Spécialité en worldedit: fonctions paramétriques, équation de mouvement.
Posté le: 14/02/12 18:34 Sujet du message:
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
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...)
Posté le: 14/02/12 18:39 Sujet du message:
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.
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
Posté le: 15/02/12 17:42 Sujet du message:
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. _________________
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...)
Posté le: 15/02/12 20:05 Sujet du message:
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). _________________
Toutes les heures sont au format GMT + 1 Heure Aller à la page 1, 2Suivante
Page 1 sur 2
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