1) Script Name: Resting Script
2) What it does: It allows resting only if a specified ammount of time has
passed and only if the players are in possesion of a "Bedroll" item or use a
placeable that allows them to rest (a bed, a bedroll...).
3) Notes: A "Bedroll" item is any custom item tagged "Bedroll". A placeable
item requires another script that sets the LocalInt "iRestAllowed" to 1
onUsed.
4) The Main Script:
Placed in the onResting event in the Module properties.
NWScript:
int GetHourTimeZero()
{
int iHourTimeZero;
iHourTimeZero = (GetCalendarYear()-1)*12*28*24 + (GetCalendarMonth()-1)*28*24 + (GetCalendarDay()-1)*24 + GetTimeHour();
return iHourTimeZero;
}
void main()
{
object oPlayer = GetLastPCRested();
object oBedroll;
int iRestPossible;
int iRestDelay = 8;
if (GetIsObjectValid(oBedroll=GetItemPossessedBy(oPlayer,"Bedroll")))
{
SetLocalInt (oPlayer, "iRestAllowed", 1);
}
if (GetHourTimeZero() < GetLocalInt (oPlayer, "iNextRestHourTimeZero"))
{
SetLocalInt (oPlayer, "iRestAllowed", 0);
SendMessageToPC (oPlayer, "You must wait " + IntToString (GetLocalInt (oPlayer, "iNextRestHourTimeZero")-GetHourTimeZero()) + " hours before resting again.");
}
if (GetLastRestEventType() == REST_EVENTTYPE_REST_STARTED)
{
if (GetLocalInt (oPlayer, "iRestAllowed") != 1)
{
AssignCommand (oPlayer, ClearAllActions());
SendMessageToPC (oPlayer, "You may not rest now.");
}
else
{
SetLocalInt (oPlayer, "iRestAllowed", 0);
SetLocalInt (oPlayer, "iNextRestHourTimeZero", GetHourTimeZero()+iRestDelay);
}
}
}
The script placed in the onUsed event of the "Rest-allowing-placable":
NWScript:
void main()
{
object oLastUser = GetLastUsedBy();
if (GetIsPC (oLastUser) && GetIsObjectValid (oLastUser))
{
SetLocalInt (oLastUser, "iRestAllowed", 1);
AssignCommand (oLastUser, ActionRest());
}
}
|