[script] date et heure persistantes

Répondre
Partager Rechercher
Bonsoir tout le monde

Voilà j'ai rencontré un problème avec des scripts qui son censés sauvegarder l'heure et la date afin de les rendre persistantes, pris sur Maskado

ça marchait bien mais des fois la date avançait d'un jour sans raison..
Bon j'ai trouvé alors je mets la solution ici
Il faut avant tout mettre l'heure de départ du module à 0, car la fonction SetTime ne peut pas reculer le temps, elle avance l'heure jusqu'à l'heure voulue le jour suivant

le premier script sur le OHB du module
Code PHP:

void main()
{
    
object oMod=GetModule();
    
int iCurrentHour GetTimeHour();
    
int nCurrentMinute GetTimeMinute();
    
int nCurrentSecond GetTimeSecond();
    
int nCurrentMilli GetTimeMillisecond();
    
SetTime(iCurrentHournCurrentMinutenCurrentSecondnCurrentMilli);

    
//Sauvegarde a chaque heure
    
if (GetLocalInt(oMod"CheckHour") != GetTimeHour())
    {
        
SetLocalInt(oMod"CheckHour"GetTimeHour());
        
ExecuteScript("temp_sauv"oMod);
    }

le script "temp_sauv"

Code PHP:

void main()
{

    
// Met a jour le nouveau temps
    
object oMod=GetModule();
    
SetCampaignInt("Dates","TIMEHOUR",GetTimeHour(),oMod);
    
    
SetCampaignInt("Dates","TIMEDAY",GetCalendarDay(),oMod);
    
SetCampaignInt("Dates","TIMEMONTH",GetCalendarMonth(),oMod);
    
SetCampaignInt("Dates","TIMEYEAR",GetCalendarYear(),oMod);

et les lignes que j'ai mises dans le OnModuleLoad

Code PHP:

// mettre l'heure de départ du module à 0 (prorpiétés du module)
// en effet, si l'on ne met pas 0, le module risque de sauter un jour
// La fonction SetTime ne peut qu'avancer, donc si l'on veut 4h00
// alors que le module est à 5h00 dans ces propriétés, l'heure sera 4h00 
// le jour suivant (donc +1 jour au calendrier, sans raison)

    
object oMod=GetModule();
    
int nHour,  nDaynMonthnYear;
    if (
GetCampaignInt("Dates","TIMEYEAR"oMod) != 0)
    {
        
nHour GetCampaignInt("Dates","TIMEHOUR",oMod);
        
nDay GetCampaignInt("Dates","TIMEDAY",oMod);
        
nMonth GetCampaignInt("Dates","TIMEMONTH",oMod);
        
nYear GetCampaignInt("Dates","TIMEYEAR",oMod);
        
SetLocalInt(oMod,"HourStart"nHour);
        
SetLocalInt(oMod,"DayStart"nDay);
        
SetLocalInt(oMod,"MonthStart"nMonth);
        
SetLocalInt(oMod,"YearStart"nYear);
        
        
SetCalendar(nYearnMonthnDay);
        if (
nHour != 0SetTime(nHour000);
    }
    else
    {
        
SetLocalInt(oMod,"HourStart"GetTimeHour());
        
SetLocalInt(oMod,"DayStart"GetCalendarDay());
        
SetLocalInt(oMod,"MonthStart"GetCalendarMonth());
        
SetLocalInt(oMod,"YearStart"GetCalendarYear());
    }


et voilà
__________________
http://img91.imageshack.us/img91/9666/yingyangwm8jt3.gif
http://simaon.free.fr/
Il me semble que sur un script du module, tu peux remplacer "GetModule()" par "OBJECT_SELF".

Par contre j'ai du mal à comprendre ton script dans le "OnModuleLoad". Pourquoi mettre l'heure en variable locale ? Je dis ça car rien dans tes autres scripts ne fait allusion aux variables "HourStart", "DayStart", "MonthStart", et "YearStart".

Sinon tu peux te passer du script "temp_sauv" et le mettre directement dans le "OnHeartBeat" du module. Ca t'épargnera de charger un script juste pour ça.

Juste cette partie te suffirait, dans le "OnModuleLoad" :
Code PHP:

int nHour GetCampaignInt("Dates","TIMEHOUR");
 
int nDay GetCampaignInt("Dates","TIMEDAY");
 
int nMonth GetCampaignInt("Dates","TIMEMONTH");
 
int nYear GetCampaignInt("Dates","TIMEYEAR");

 
SetCalendar(nYear,nMonth,nDay);
 
SetTime(nHour,0,0,0); 
Et ça dans le "OnHeartBeat" :
Code PHP:

void main()
 {
     
object oMod OBJECT_SELF// à vérifier, sinon "GetModule()"

     // Si l'heure a avancé d'un cran
     
int nHour GetTimeHour();
     if(
GetLocalInt(oMod,"CheckHour") != nHour)
     {
         
// Je mets à jour mon repère
         
SetLocalInt(oMod,"CheckHour",nHour);

         
// Et je sauvegarde ma date
         
SetCampaignInt("Dates","TIMEHOUR",nHour);
         
SetCampaignInt("Dates","TIMEDAY",GetCalendarDay());
         
SetCampaignInt("Dates","TIMEMONTH",GetCalendarMonth());
         
SetCampaignInt("Dates","TIMEYEAR",GetCalendarYear());
     }
 } 
__________________
ah oui j'avais oublié des lignes de codes en trop pour mes variables
Sinon n'oublions pas de faire le test de l'heure pour ne pas que la fonction SetTime engendre le passage au jour suivant

Code PHP:

// OnModuleLoad
object oMod=GetModule(); // ou OBJECT_SELF donc
    
int nHour,  nDaynMonthnYear;
    if (
GetCampaignInt("Dates","TIMEYEAR"oMod) != 0)
    {
        
nHour GetCampaignInt("Dates","TIMEHOUR",oMod);
        
nDay GetCampaignInt("Dates","TIMEDAY",oMod);
        
nMonth GetCampaignInt("Dates","TIMEMONTH",oMod);
        
nYear GetCampaignInt("Dates","TIMEYEAR",oMod);
        
        
SetCalendar(nYearnMonthnDay);
        if (
nHour != 0SetTime(nHour000);
    } 

Pour ce qui est du script, j'ai l'habitude de mettre ExecuteScript dans les OHB plutôt que de charger du code inutile en fait, et le script que j'ai trouvé le faisant, ça m'a paru bien donc j'ai gardé
Bonjour à tous!

Etant gérant d'un module persistant, j'aurais aimé mettre la date et l'heure persistante également.

Suite à la recherche sur ce site, j'ai trouvé ce message, mais au vues des nombreux exemples donnés, je ne sais pas quels scripts récupérer.

Donc si quelqu'un a les scripts fonctionnels et entiers, merci de me le signaler.

bonne journée.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés