Author Sticky: Post Working Scripts Here
Kihon Posted: Wednesday, 10 July 11:25PM
1) Script Name: Resting Script (Updated "cleaned" code)

2) What it does: It allows resting only if a specified ammount of time has passed and (now optional) 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: Just a small update. No changes to the functioning of the script itself.
A "Bedroll" item is any custom item tagged "Bedroll". A placeable item requires another script that sets the LocalInt "iRestAllowed" to 1 onUsed.
Delay Time between rest and the requirement of a "Bedroll" item can be modified by setting a variable.

4) The Main Script:
Placed in the onResting event in the Module properties.

NWScript:
//::///////////////////////////////////////////////

//:: Resting Script

//:: boz_o1_resting

//:: Copyright (c) 2002 Brotherhood of Zock

//:://////////////////////////////////////////////

/*

   This script allows the players to rest after a specified amount of hours

   has passed and only (optional) if they are in possession of a "Bedroll" or use a local

   "placeable" item that allows them to rest (and sets the LocalInt "iRestAllowed" to 1).

*/

//:://////////////////////////////////////////////

//:: Created By: Kihon

//:: Created On: July 8, 2002

//:://////////////////////////////////////////////

// Counting the actual date from Year0 Month0 Day0 Hour0 in hours

int GetHourTimeZero()

{

   int iHourTimeZero;

   iHourTimeZero = (GetCalendarYear()-1)*12*28*24 + (GetCalendarMonth()-1)*28*24 + (GetCalendarDay()-1)*24 + GetTimeHour();

   return iHourTimeZero;

}



// The main function placed in the onRest event

void main()

{

  object oPlayer = GetLastPCRested();

  int iRestDelay = 8; //The ammount of hours a player must wait between Rests

  int iBedrollRequired = 1; // 0=No requirements for resting

                            // 1=A "Bedroll" is needed in order to rest.

                            //   Optional may a "Rest-allowing-placable" be used,

                            //   that sets the value of the local "iRestAllowed"

                            //   variable on the player to "1".



  if (GetLastRestEventType() == REST_EVENTTYPE_REST_STARTED)

  {

    // Check if the Rest Dely is over.

    if (GetHourTimeZero() < GetLocalInt (oPlayer, "iNextRestHourTimeZero"))

    {

      AssignCommand (oPlayer, ClearAllActions()); // Prevent Resting

      SendMessageToPC (oPlayer, "You must wait " + IntToString (GetLocalInt (oPlayer, "iNextRestHourTimeZero")-GetHourTimeZero()) + " hour(s) before resting again.");

    }

    else   // Resting possible.

    {

      // Resting allowed if No Bedroll required or Player has a Bedroll or a Rest-allowing-placeable set the local "iRestAllowed" variable to 1

      if (iBedrollRequired == 0 || iBedrollRequired == 1 && (GetIsObjectValid (GetItemPossessedBy (oPlayer,"Bedroll")) || GetLocalInt (oPlayer,"iRestAllowed") == 1))

      {

        SetLocalInt (oPlayer, "iRestAllowed", 0);

        SetLocalInt (oPlayer, "iNextRestHourTimeZero", GetHourTimeZero()+iRestDelay);

      }

      else   // Resting not allowed

      {

        AssignCommand (oPlayer, ClearAllActions()); // Prevent Resting

        SendMessageToPC (oPlayer, "No Bed(roll) - No Rest");

      }

    }

  }

}



The script placed in the onUsed event of the "Rest-allowing- placable":

NWScript:
//Function placed on the onUsed Event of a placeable item that allows resting (a bed, or a bedroll...)

void main()

{

  object oLastUser = GetLastUsedBy();

  if (GetIsPC (oLastUser) && GetIsObjectValid (oLastUser))

  {

    SetLocalInt (oLastUser, "iRestAllowed", 1);

    AssignCommand (oLastUser, ActionRest());

  }

}