Aschbourne_PRC8/_module/nss/_open_beehive.nss

159 lines
5.2 KiB
Plaintext
Raw Permalink Normal View History

2024-06-14 10:48:20 -04:00
void TimeFix();
void main()
{
PlaySound("al_an_bees1");
object oSelf = OBJECT_SELF;
// The next 2 lines check to make sure honey/honeycomb does not get created twice
// by multiple players opening same beehive, or a failure of the 'OnClose' event firing.
object oTemp = GetFirstItemInInventory(oSelf);
if (oTemp != OBJECT_INVALID) return;
TimeFix();
int iDay = GetLocalInt(oSelf,"iLastDay");
int iHour = GetLocalInt(oSelf,"iLastHour");
int iHoneyComb = GetLocalInt(oSelf,"iHoneyComb");
int iHoney = GetLocalInt(oSelf,"iHoney");
int iCurrentDay = GetCalendarDay();
int iCurrentHour = GetTimeHour();
int iTemp = 0;
//object oPC = GetLastOpenedBy();
//SendMessageToPC(oPC,"========OPENING============");
//SendMessageToPC(oPC," iDay = "+IntToString(iDay));
//SendMessageToPC(oPC," iHour = "+IntToString(iHour));
//SendMessageToPC(oPC," iHoneycomb = "+IntToString(iHoneyComb));
//SendMessageToPC(oPC," iHoney = "+IntToString(iHoney));
//SendMessageToPC(oPC," iCurrentDay = "+IntToString(iCurrentDay));
//SendMessageToPC(oPC,"iCurrentHour = "+IntToString(iCurrentHour));
if (iDay==0)
{
iDay = iCurrentDay;
iHoneyComb = d4(5);
iHoney = iHoneyComb/2;
SetLocalInt(oSelf,"iLastDay",iCurrentDay);
SetLocalInt(oSelf,"iHoney",iHoney);
SetLocalInt(oSelf,"iHoneyComb",iHoneyComb);
SetLocalInt(oSelf,"iLastHour",iCurrentHour);
}
if (iDay != iCurrentDay)
{
iHoneyComb++;
}
if (iHour != iCurrentHour)
{
//SendMessageToPC(oPC,"iHour != iCurrentHour");
if (iHoneyComb >0)
{
iHoney = iHoneyComb/2;
if (GetIsDay()==FALSE) iHoney = iHoney/2; //
iTemp = iHoney;
for (iTemp; iTemp>0; iTemp--)
{
CreateItemOnObject("honey",oSelf,1);
}
}
}
else // iHour == iCurrentHour
{
if (iHoney>0)
{
if (iDay != iCurrentDay) // same hour but different day = reset max#
{
//SendMessageToPC(oPC,"iHour = iCurrentHour but iDay != iCurrentDay");
iHoney = iHoneyComb/2;
iDay =iCurrentDay;
}
iTemp = iHoney;
if (GetIsDay()==FALSE) // If it is night, only 1/2 honey available
{
if (iHoneyComb/2 <iHoney) iHoney = iHoneyComb/2; //Max honey = 1/2 current honeycomb
}
if (iHoney>0)
{
iTemp = iHoney;
for (iTemp; iTemp>0; iTemp--)
{
CreateItemOnObject("honey",oSelf,1);
}
}
}
}
iTemp = iHoneyComb;
if (iHoneyComb >0)
{
for (iTemp; iTemp>0; iTemp--)
{
CreateItemOnObject("honeycomb",oSelf,1);
}
}
if (GetIsDawn() == TRUE)
{
if (iHoneyComb>0) CreateItemOnObject("beeswax",oSelf,1);
}
SetLocalInt(oSelf,"iLastDay",iCurrentDay);
SetLocalInt(oSelf,"iHoneyComb",iHoneyComb);
SetLocalInt(oSelf,"iHoney",iHoney);
SetLocalInt(oSelf,"iLastHour",iCurrentHour);
// SendMessageToPC(oPC,"========END OPEN============");
// SendMessageToPC(oPC," iDay = "+IntToString(iDay));
// SendMessageToPC(oPC," iHour = "+IntToString(iHour));
// SendMessageToPC(oPC," iHoneycomb = "+IntToString(iHoneyComb));
// SendMessageToPC(oPC," iHoney = "+IntToString(iHoney));
// SendMessageToPC(oPC," iCurrentDay = "+IntToString(iCurrentDay));
// SendMessageToPC(oPC,"iCurrentHour = "+IntToString(iCurrentHour));
// SendMessageToPC(oPC,"*****************************");
// SendMessageToPC(oPC,"*****************************");
}
void TimeFix()
{
// Due to the BeeHive OnOpen script relying on ingame time for its functions
// and the fact that in larger modules, the clock in the bottom right corner
// of the player client fails to update properly, this function has been
// included in the beehive OnOpen script to ensure that the player has
// accurate time/date information for the respawning of the honey/honeycomb.
//
// Optionally, you can remove this script (and the call from the above OnOpen script
// and move it into your module-level OnHeartbeat script, so that this function
// works at all times, rather than just when a player opens the beehive.
//
// Credit for this script function goes to the posters on the Bioware forums.
int iYear = GetCalendarYear();
int iMonth = GetCalendarMonth();
int iDay = GetCalendarDay();
int iHour =GetTimeHour();
int iMinute = GetTimeMinute();
int iSecond = GetTimeSecond();
int iMillisecond = GetTimeMillisecond();
// Set Calendar & Time
SetCalendar(iYear,iMonth,iDay);
SetTime(iHour,iMinute,iSecond,iMillisecond);
// Search for and destroy any hidden 'body bags' from prior incarnations of this placeable
object oSearchForBag = GetNearestObjectByTag("Body Bag",OBJECT_SELF,1);
if (oSearchForBag == OBJECT_INVALID)return;
object oBagItem = OBJECT_INVALID;
if (GetDistanceToObject(oSearchForBag)<= 0.2)
{
//SendMessageToPC(GetFirstPC(),"Body bag found.. destroying contents..");
oBagItem = GetFirstItemInInventory(oSearchForBag);
while (oBagItem != OBJECT_INVALID)
{
//SendMessageToPC(GetFirstPC(),"Destroying : "+GetName(oBagItem));
DestroyObject(oBagItem);
oBagItem = GetNextItemInInventory(oSearchForBag);
}
DestroyObject(oSearchForBag,1.0);
}
}