Aller au contenu


[Script] Timers et gestion du temps


  • Veuillez vous connecter pour répondre
Aucune réponse à ce sujet

#1 Virgo

Virgo

    ménagère Dremora


Posté 19 avril 2003 - 16:07

[size=18]Timers et gestion du temps

Utiliser un timer pour que les instructions s'exécutent une seule fois au bout de n secondes (ici n = 10):

float timer

short done



If ( done == 1 )

    return

EndIf



If ( timer >= 10 )

    [instructions ici]

    Set done to 1

Else

    Set timer to ( timer + GetSecondsPassed )

EndIf

Utiliser un timer pour que les instructions s'exécutent au bout de n secondes à chaque fois qu'un objet est activé:

float timer



If ( OnActivate == 1 )

    If ( timer >= 10 )

         [instructions ici]

         Set timer to 0

    EndIf

    Set timer to ( timer + GetSecondsPassed )

EndIf
Attendre un certain nombre de jours avant qu'un évènement intervienne

Deux méthodes, une simple mais inexacte, l'autre plus compliquée mais exacte. Dans les 2 exemples, on fait passer 1 jour:

short localDaysPassed

short currentDay



If ( currentDay != Day )

     Set currentDay to Day

     Set localDaysPassed to ( localDaysPassed + 1 )

EndIf



If ( localDaysPassed >= 2 )

     [instructions ici]

EndIf
La méthode ci-dessus utilise la variable globale Day, qui est le jour dans le mois. Donc, si le jour est le même mais le mois est différent, il considèrera qu'aucun jour n'a passé.

La condition est "2" est non 1, car la première fois que le script est exécuté currentDay = 0, est donc != Day et localDaysPassed est incrémenté. La condition doit donc être nombre de jours + 1.

Méthode plus compliquée, mais exacte:

short localDaysPassed

long baseDay

long currentDay



Set currentDay to ( ( Year * 10000 ) + ( Month * 100 ) + Day )

If ( baseDay == 0 )

    Set baseDay to currentDay

EndIf

If ( baseDay != currentDay )

      Set localDaysPassed to ( localDaysPassed + 1 )

EndIf



If ( localDaysPassed >= 1 )

    [instructions ici]

EndIf

Ici, baseDay et currentDay sont des valeurs uniques, basées sur les variables globales Year, Month et Day. Par exemple pour le 1 /4/ 527, ils seront égaux à 5270000 + 400 + 1 soit 5270401

baseDay (le jour de référence) est initialisé une seule fois. currentDay (le jour en cours) l'est à chaque frame.
Les mots s'arrêtent à ALMSIVI
(Exceptés ceux qui ont la priorité à droite -- Nérévar)




0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)