DMH-Online

Dungeon Masters Helper · Est. 2005

Resting Scripts

NWN Script: rest_003.htm

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());
  }
}
⌂ All Scripts ← PreviousNext → 👁 Category List

All Resting Scripts

📄 rest_001 📄 rest_002 📄 rest_003 📄 resting 📄 resting_004 📄 resting_005 📄 resting_006