Hello, vous reprendrez bien un p'tit timer (à consommer sans modération !) Voici une petite fonction pour simuler un "Timer" avec LUA, afin de gérer un ou plusieurs évènements (signaux, contact, panneau d'affichage, info-bulles, etc...). L'idée est la suivante : nous voulons qu'un train s'arrête devant un signal et après X secondes, redémarre et gère les signaux sur son trajet afin de respecter le cantonnement pour les autres trains derrière lui. L'idéal serait d'avoir une fonction Timer qui ne s'arrête jamais ET qui sert également à gérer autre chose qu'un train. Tant qu'à faire, autant que cette fonction soit utilisée pour d'autres trains ou objets ! Bref, récapitulons nos besoins pour ce travail : Nous voulons intervenir sur le durée d'attente d'un train en gare (ou tout autre objet), Déclencher un compteur quand nous l'avons décidé, Définir à l'avance un temps d'arrêt, Notre train doit pouvoir gérer les signaux rencontrés sur sa route. Voici le script détaillé ligne par ligne : clearlog() -- Efface l'écran de la fenêtre d'évènements -- Déclaration des variables utilisées dans le script nb_Inc = 0; -- Compteur pour l'incrémentation nb_Ecart = 200; -- 200 millisecondes (EEPMain est appelée 5 fois par seconde) nb_Sec = 0; -- Compteur des secondes bool_Contact_Franchi = null; -- Flag pour savoir si le contact n° 1 est franchi ou pas nb_Temps_Attente = 60; -- Temps d'attente du train en gare : 60 sec (exemple) nb_Compteur_Attente = 0; -- Compteur pour l'attente au signal -- FONCTION PRINCIPALE EEPMain(), appelée 5 fois par seconde function EEPMain() fnc_Calcul_Temps(); -- Appelle la fonction fnc_Calcul_Temps() return 1 end -- Fin de la fonction principale -- Fonction calcul du temps en seconde -- Cette fonction peut être utilisée comme base de calcul pour gérer plusieurs évènements à la fois function fnc_Calcul_Temps() nb_Inc = nb_Inc + nb_Ecart; -- On rajoute le nombre d'incréments de 200 millisecondes -- Opérateur modulo qui retourne la valeur 0 si nb_Inc = 1000 (1000 millisecondes = 1 seconde) if (nb_Inc % 1000 == 0) then -- additionne les secondes nb_Sec = nb_Sec + 1; -- Incrémente une seconde -- Si le contact n° 1 est franchi ET que le compteur d'attente = 0 if (int_Contact_Franchi == true and nb_Compteur_Attente == 0) then nb_Compteur_Attente = 1; -- On début le comptage avec 1 seconde écoulée -- Si le contact 1 est franchi ET que le compteur est > ou égal à 1 elseif (int_Contact_Franchi == true and nb_Compteur_Attente >= 1) then -- On incrémente le compteur d'attente d'une seconde nb_Compteur_Attente = nb_Compteur_Attente + 1; -- Si le compteur d'attente est = au temps d'attente initial if (nb_Compteur_Attente == nb_Temps_Attente) then print("Ouverture du signal n° 1");-- Pour info EEPSetSignal(1, 1); -- Ouvre le signal n° 1 nb_Compteur_Attente = 0;-- Réinitialise le compteur à 0 end end print("Nombre de secondes écoulées : ", nb_Sec); -- Pour info nb_Inc = 0; -- La seconde est écoulée (nouvelle inc...