Posté le: 12/10/08 15:46 Sujet du message: Eviter les boucles inutiles
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
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 _________________
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: 12/10/08 16:59 Sujet du message:
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 ... _________________
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 ? _________________
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: 12/10/08 18:39 Sujet du message:
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. _________________
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? _________________
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: 12/10/08 20:12 Sujet du message:
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. _________________
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 e = AddSpecialEffectTarget( "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
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: 13/10/08 18:10 Sujet du message:
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 _________________
j'ai encore un probleme
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 _________________
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: 13/10/08 21:32 Sujet du message:
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é , il faudrait d'abord te l'expliquer avant d'aller plus loin. _________________
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. _________________
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: 13/10/08 21:42 Sujet du message:
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) _________________
Toutes les heures sont au format GMT + 1 Heure Aller à la page 1, 2, 3, 4Suivante
Page 1 sur 4 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