generated from Jaysyn/ModuleTemplate
Initial commit
Initial commit
This commit is contained in:
145
_module/nss/runeresting.nss
Normal file
145
_module/nss/runeresting.nss
Normal file
@@ -0,0 +1,145 @@
|
||||
//:: Name: Zimero's Limited Resting v1.2
|
||||
//:: FileName: z_mod_onrest
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
What does it do?
|
||||
The player must wait x hours between resting.
|
||||
If the player(or someone else) cancels the rest
|
||||
the waiting time is proportional to the amount of
|
||||
time which passed before it was canceled.
|
||||
For example, with the default setting, if the
|
||||
player only rests 1/6 of the rest, he/she only has
|
||||
to wait one hour, before he/she can rest again.
|
||||
|
||||
The formula for the resting time used:
|
||||
0,5X + 10 (seconds) where x is the total level of the player.
|
||||
|
||||
How to use:
|
||||
Assign this script to the onrest event of your module.
|
||||
|
||||
Thanks to the NWN Lexicon, it helped me alot!
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Jonas Boberg aka. zimero
|
||||
//:: Created On: 20021212
|
||||
//:: Modified On: 20030107
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
//USER ADJUSTABLE VARIABLES
|
||||
//the number of hours the players must wait between full rests
|
||||
int TIMEBETWEENRESTING=10;
|
||||
//do you want to display the time until next rest in real world minutes?
|
||||
//(default: game hours)
|
||||
int REALTIMEMINUTES=0;
|
||||
//END USER ADJUSTABLE VARIABLES
|
||||
|
||||
int CurrentTime();
|
||||
|
||||
void main()
|
||||
{
|
||||
//initiate the variables
|
||||
object oPC = GetLastPCRested();
|
||||
int iCurrentTime, iLastRestTime, iTimeSinceRest, iTimeUntilRest;
|
||||
float fTimePenalty;
|
||||
|
||||
switch (GetLastRestEventType())
|
||||
{
|
||||
case REST_EVENTTYPE_REST_STARTED:
|
||||
//get the current time
|
||||
iCurrentTime = CurrentTime();
|
||||
//gets the last time the player rested
|
||||
iLastRestTime = GetLocalInt(oPC,"REST_HOUR");
|
||||
//the time (in hours) since the last rest
|
||||
iTimeSinceRest = iCurrentTime-iLastRestTime;
|
||||
|
||||
//stores the second the player begins to rest
|
||||
SetLocalInt(oPC, "REST_SECOND", GetTimeSecond());
|
||||
|
||||
//if the player has never rested before or if the
|
||||
//necessary time has passed, allow the player to rest
|
||||
if (iLastRestTime==0 || iTimeSinceRest >= TIMEBETWEENRESTING)
|
||||
{
|
||||
SetLocalInt(oPC, "REST_ALLOWED", TRUE);
|
||||
}
|
||||
//else display a message and cancel the rest
|
||||
else
|
||||
{
|
||||
SetLocalInt(oPC, "REST_ALLOWED", FALSE);
|
||||
//count the time until next rest
|
||||
iTimeUntilRest = TIMEBETWEENRESTING-iTimeSinceRest;
|
||||
//if the script is configured to display the time in
|
||||
//real minutes, do that
|
||||
if (REALTIMEMINUTES == 1)
|
||||
{
|
||||
iTimeUntilRest = FloatToInt(HoursToSeconds(iTimeUntilRest)/60);
|
||||
//if there is just one minute to wait, change the message
|
||||
//a bit
|
||||
if (iTimeUntilRest == 1)
|
||||
{
|
||||
FloatingTextStringOnCreature("You must wait another" +
|
||||
" minute before you can rest again", oPC);
|
||||
}
|
||||
else
|
||||
{
|
||||
FloatingTextStringOnCreature("You must wait another "+
|
||||
IntToString(iTimeUntilRest)+
|
||||
" minutes before you can rest again", oPC);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//if there is just one minute to wait, change the message
|
||||
//a bit
|
||||
if (iTimeUntilRest == 1)
|
||||
{
|
||||
FloatingTextStringOnCreature("You must wait another" +
|
||||
" minute before you can rest again", oPC);
|
||||
}
|
||||
else
|
||||
{
|
||||
FloatingTextStringOnCreature("You must wait another "+
|
||||
IntToString(iTimeUntilRest)+
|
||||
" minutes before you can rest again", oPC);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
//cancel the rest
|
||||
AssignCommand(oPC,ClearAllActions());
|
||||
}
|
||||
break;
|
||||
|
||||
case REST_EVENTTYPE_REST_CANCELLED:
|
||||
//variable to check that the player was allowed to rest
|
||||
if (GetLocalInt(oPC, "REST_ALLOWED") == TRUE)
|
||||
{
|
||||
//get the current second
|
||||
iCurrentTime = GetTimeSecond();
|
||||
//get the second the rest beginned
|
||||
iLastRestTime = GetLocalInt(oPC, "REST_SECOND");
|
||||
//the time (in seconds) the rest lasted
|
||||
iTimeSinceRest = iCurrentTime - iLastRestTime;
|
||||
//if the time is negative, add 60 to it
|
||||
if (iTimeSinceRest<0) iTimeSinceRest+= 60;
|
||||
|
||||
//formula for the time which the player must wait
|
||||
//until next rest
|
||||
fTimePenalty = TIMEBETWEENRESTING*(iTimeSinceRest/(0.5*GetHitDice(oPC)+10));
|
||||
|
||||
//set the variable which controlles when the player may rest again
|
||||
SetLocalInt(oPC,"REST_HOUR", CurrentTime()-(TIMEBETWEENRESTING-FloatToInt(fTimePenalty)));
|
||||
}
|
||||
break;
|
||||
|
||||
case REST_EVENTTYPE_REST_FINISHED:
|
||||
//set the variable which controlles when the player may rest again
|
||||
SetLocalInt(oPC, "REST_HOUR", CurrentTime());
|
||||
}
|
||||
}
|
||||
|
||||
int CurrentTime()
|
||||
{
|
||||
//converts current year, month, day and hour to hours
|
||||
return GetCalendarYear()*483840 + GetCalendarMonth()*40320 + GetCalendarDay()*1440 + GetTimeHour()*60 + GetTimeMinute();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user