NWScript :
//VARIABLE MODIFIABLES
//Le nombres d'heure durant lequelles le joueurs doit attendreavant de pouvoir se reposer (defaut, 8 heures)
int TIMEBETWEENRESTING=5;
//Le nombre reel de minutes qui correspond a 1 heure dans le jeu
int REALTIMEMINUTES=1;
//FIN DES VARIABLES MODIFIABLES
int CurrentTime();
void main()
{
//initiation des varibles
object oPC = GetLastPCRested();
int iCurrentTime, iLastRestTime, iTimeSinceRest, iTimeUntilRest;
float fTimePenalty;
switch (GetLastRestEventType())
{
case REST_EVENTTYPE_REST_STARTED:
iCurrentTime = CurrentTime();
iLastRestTime = GetLocalInt(oPC,"REST_HOUR");
iTimeSinceRest = iCurrentTime-iLastRestTime;
SetLocalInt(oPC, "REST_SECOND", GetTimeSecond());
if (iLastRestTime==0 || iTimeSinceRest >= TIMEBETWEENRESTING)
{
SetLocalInt(oPC, "REST_ALLOWED", TRUE);
}
else
{
SetLocalInt(oPC, "REST_ALLOWED", FALSE);
iTimeUntilRest = TIMEBETWEENRESTING-iTimeSinceRest;
if (REALTIMEMINUTES == 1)
{
iTimeUntilRest = FloatToInt(HoursToSeconds(iTimeUntilRest)/60);
if (iTimeUntilRest == 1)
{
FloatingTextStringOnCreature("Vous devez attendre " +
" heure avant de pouvoir vous reposer", oPC);
}
else
{
FloatingTextStringOnCreature("Vous devez attendre "+
IntToString(iTimeUntilRest)+
" heures avant de pouvoir vous reposer", oPC);
}
}
else
{
if (iTimeUntilRest == 1)
{
FloatingTextStringOnCreature("Vous devez attendre " +
" heure avant de pouvoir vous reposer", oPC);
}
else
{
FloatingTextStringOnCreature("Vous devez attendre "+
IntToString(iTimeUntilRest)+
" heures avant de pouvoir vous reposer", oPC);
}
}
AssignCommand(oPC,ClearAllActions());
}
break;
case REST_EVENTTYPE_REST_CANCELLED:
if (GetLocalInt(oPC, "REST_ALLOWED") == TRUE)
{
iCurrentTime = GetTimeSecond();
iLastRestTime = GetLocalInt(oPC, "REST_SECOND");
iTimeSinceRest = iCurrentTime - iLastRestTime;
if (iTimeSinceRest<0) iTimeSinceRest+= 60;
fTimePenalty = TIMEBETWEENRESTING*(iTimeSinceRest/(0.5*GetHitDice(oPC)+10));
SetLocalInt(oPC,"REST_HOUR", CurrentTime()-(TIMEBETWEENRESTING-FloatToInt(fTimePenalty)));
}
break;
case REST_EVENTTYPE_REST_FINISHED:
SetLocalInt(oPC, "REST_HOUR", CurrentTime());
}
}
int CurrentTime()
{
return GetCalendarYear()*8064 + GetCalendarMonth()*672 + GetCalendarDay()*24 + GetTimeHour();
}Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.
//VARIABLE MODIFIABLES
//Le nombres d'heure durant lequelles le joueurs doit attendreavant de pouvoir se reposer (defaut, 8 heures)
int TIMEBETWEENRESTING=5;
//Le nombre reel de minutes qui correspond a 1 heure dans le jeu
int REALTIMEMINUTES=1;
//FIN DES VARIABLES MODIFIABLES
int CurrentTime();
void main()
{
//initiation des varibles
object oPC = GetLastPCRested();
int iCurrentTime, iLastRestTime, iTimeSinceRest, iTimeUntilRest;
float fTimePenalty;
switch (GetLastRestEventType())
{
case REST_EVENTTYPE_REST_STARTED:
iCurrentTime = CurrentTime();
iLastRestTime = GetLocalInt(oPC,"REST_HOUR");
iTimeSinceRest = iCurrentTime-iLastRestTime;
SetLocalInt(oPC, "REST_SECOND", GetTimeSecond());
if (iLastRestTime==0 || iTimeSinceRest >= TIMEBETWEENRESTING)
{
SetLocalInt(oPC, "REST_ALLOWED", TRUE);
}
else
{
SetLocalInt(oPC, "REST_ALLOWED", FALSE);
iTimeUntilRest = TIMEBETWEENRESTING-iTimeSinceRest;
if (REALTIMEMINUTES == 1)
{
iTimeUntilRest = FloatToInt(HoursToSeconds(iTimeUntilRest)/60);
if (iTimeUntilRest == 1)
{
FloatingTextStringOnCreature("Vous devez attendre " +
" heure avant de pouvoir vous reposer", oPC);
}
else
{
FloatingTextStringOnCreature("Vous devez attendre "+
IntToString(iTimeUntilRest)+
" heures avant de pouvoir vous reposer", oPC);
}
}
else
{
if (iTimeUntilRest == 1)
{
FloatingTextStringOnCreature("Vous devez attendre " +
" heure avant de pouvoir vous reposer", oPC);
}
else
{
FloatingTextStringOnCreature("Vous devez attendre "+
IntToString(iTimeUntilRest)+
" heures avant de pouvoir vous reposer", oPC);
}
}
AssignCommand(oPC,ClearAllActions());
}
break;
case REST_EVENTTYPE_REST_CANCELLED:
if (GetLocalInt(oPC, "REST_ALLOWED") == TRUE)
{
iCurrentTime = GetTimeSecond();
iLastRestTime = GetLocalInt(oPC, "REST_SECOND");
iTimeSinceRest = iCurrentTime - iLastRestTime;
if (iTimeSinceRest<0) iTimeSinceRest+= 60;
fTimePenalty = TIMEBETWEENRESTING*(iTimeSinceRest/(0.5*GetHitDice(oPC)+10));
SetLocalInt(oPC,"REST_HOUR", CurrentTime()-(TIMEBETWEENRESTING-FloatToInt(fTimePenalty)));
}
break;
case REST_EVENTTYPE_REST_FINISHED:
SetLocalInt(oPC, "REST_HOUR", CurrentTime());
}
}
int CurrentTime()
{
return GetCalendarYear()*8064 + GetCalendarMonth()*672 + GetCalendarDay()*24 + GetTimeHour();
}