[Script] Heures, dates et mondes persistants

Répondre
Partager Rechercher
Hello, pour ceux qui désirent que leur module se réinitialise à la date exacte à laquelle le serveur à effectué un redémarrage, ou un plantage , je mets à leur disposition les deux scripts que vous trouverez ci-dessous.


A mettre dans le OnHeartbeat de votre module :


Code PHP:

//::///////////////////////////////////////////////
//:: Name on module heartbeat
//:: FileName on_modulehb
//:://////////////////////////////////////////////
//:: Created By: Elvorfirimathrel
//:: Created On: 19 Juin 2003
//:://////////////////////////////////////////////


void main()
{
 
// declaration des variables
 
int nHournMinutenSecondnMillisecondnCalendarYearnCalendarMonthnCalendarDay;

 
// affectation de valeurs aux variable
 
nHour GetTimeHour();
 
nMinute GetTimeMinute();
 
nSecond GetTimeSecond();
 
nMillisecond GetTimeMillisecond();
 
nCalendarDay GetCalendarDay();
 
nCalendarYear GetCalendarYear();
 
nCalendarMonth GetCalendarMonth();

 
// stockage de la valeur de chaques variables dans la base de donnees "calendar"
 
SetCampaignInt("calendar""HOUR"nHour);
 
SetCampaignInt("calendar""MINUTE"nMinute);
 
SetCampaignInt("calendar""SECOND"nSecond);
 
SetCampaignInt("calendar""MILLISECOND"nMillisecond);
 
SetCampaignInt("calendar""CALENDARDAY"nCalendarDay);
 
SetCampaignInt("calendar""CALENDARYEAR"nCalendarYear);
 
SetCampaignInt("calendar""CALENDARMONTH"nCalendarMonth);

A mettre dans le OnModuleLoad de votre module :
Code PHP:

//::///////////////////////////////////////////////
//:: Name on module load
//:: FileName on_moduleload
//:://////////////////////////////////////////////
//:: Created By: Elvorfirimathrel
//:: Created On: 19 Juin 2003
//:://////////////////////////////////////////////

void main()
{
 
// declaration des variables
 
int nHournMinutenSecondnMillisecondnCalendarYearnCalendarMonthnCalendarDay;

 
// recuperation des valeurs stockees dans la base de donnees et affectation de ces valeurs aux variables
 
nHour GetCampaignInt("calendar""HOUR");
 
nMinute GetCampaignInt("calendar""MINUTE");
 
nSecond GetCampaignInt("calendar""SECOND");
 
nMillisecond GetCampaignInt("calendar""MILLISECOND");
 
nCalendarDay GetCampaignInt("calendar""CALENDARDAY");
 
nCalendarYear GetCampaignInt("calendar""CALENDARYEAR");
 
nCalendarMonthGetCampaignInt("calendar""CALENDARMONTH");

 
// reajustement de l'heure et de la date
 
SetTimenHournMinutenSecondnMillisecond);
 
SetCalendar(nCalendarYearnCalendarMonthnCalendarDay);

ATTENTION : pour fonctionner ce script nécessite que votre logiciel Neverwinter Nights soit mis à jour en version 1.30, de plus, je déconseille fortement l'implémentation du premier script dans l'événement OnHeartbeat, je ne l'ai mis ici qu'à titre d'exemple. Il serait plus judicieux de créer un "item" appelant ce script et de fournir cet "item" à vos DM.

PS: si les scripts comportent quelques défauts, n'hésitez pas à me le faire savoir, je l'ai fait avec une paupière fermée *baille*
Hum généralement les persistant effectuent des sauvegardes toutes les 30 minutes et souvent moins... Et le premier script, comme tu l'as dit, bouffe du CPU de manière extraordinaire... En gros, toutes les secondes, ton module effectue entre deux et trois opérations. Tout ça pour la date, ça me paraît un peu exagéré. En plus les heartbeat des modules sont déjà trop pleins, alors...
Cela dit, ça serait utile dans un pseudo bâton de sauvegarde de DM... *note*
Tiens je vais aller voir la 1.30.
Disons que dans un monde persistant il peut être utile de situer des DM Quest chronologiquement, et si en cas de plantage pendant l'une des ces animations qui se déroulerait la nuit le server plante et reboot en plein jour, et bien les joueurs devront attendre que la nuit retombe pour la continuer, pas tip top.

Citation :
Cela dit, ça serait utile dans un pseudo bâton de sauvegarde de DM... *note*
Effectivement, c'est pour cela que je suggère sa création dans le premier post.
Personnellement, je conseille plutôt la mise en place d'un timestamp, mis à jour sur le OnHeartBeat (donc d'une résolution de 6 secondes) il est très léger puisqu'un seul local int, et avec une synchronisation de temps en temps (disons toutes les deux minutes) avec le calendrier du module.
L'avantage du timestamp, c'est qu'il est très pratique pour comparer deux dates.

Evidemment, on peut aussi l'utiliser pour remettre le module à l'heure lors d'un reboot.
Répondre

Connectés sur ce fil

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