Battledale_PRC8/_module/nss/jw_homelife.nss
Jaysyn904 e5b3f6ad61 Finished PRC8 integration
Finished PRC8 integration.  Moved creature abilities to top hak.  Setup tooling.  Created release archive
2024-03-12 21:27:23 -04:00

567 lines
15 KiB
Plaintext

#include "NW_I0_GENERIC"
#include "prc_inc_spells"
////
void jw_woken();
void jw_sleep();
void jw_wake();
void jw_general();
void jw_cook();
void jw_endcook();
void Homelife();
void Homelife()
{
int nTime=GetLocalInt(OBJECT_SELF,"jw_time");
if ((nTime>7)&&(nTime<23))
{
SetLocalInt(OBJECT_SELF,"njw_current",3);
}
if (((nTime>=23)||(nTime<=6))&&(GetLocalInt(OBJECT_SELF,"njw_completed")!=1))
{
SetLocalInt(OBJECT_SELF,"njw_current",1);
}
if (((nTime>=7)&&(nTime<=12))&&(GetLocalInt(OBJECT_SELF,"njw_completed")==1))
{
SetLocalInt(OBJECT_SELF,"njw_current",2);
}
if (((nTime>=13)&&(nTime<14))&&(GetLocalInt(OBJECT_SELF,"njw_completed")!=4))
{
SetLocalInt(OBJECT_SELF,"njw_current",4);
}
if (((nTime>=14)&&(nTime<15))&&(GetLocalInt(OBJECT_SELF,"njw_completed")!=5))
{
SetLocalInt(OBJECT_SELF,"njw_current",5);
}
if (GetLocalInt(OBJECT_SELF,"njw_current")==1)
{jw_general();}
if ((GetLocalInt(OBJECT_SELF,"njw_completed")==1)&&(GetLocalInt(OBJECT_SELF,"njw_current")==0))
{jw_general();}
if (GetLocalInt(OBJECT_SELF,"njw_current")==2)
{ jw_general();}
if (GetLocalInt(OBJECT_SELF,"njw_current")==3)
{ jw_general();}
if (GetLocalInt(OBJECT_SELF,"njw_current")==4)
{ jw_cook();}
if (GetLocalInt(OBJECT_SELF,"njw_current")==5)
{ jw_endcook();}
}
void jw_sleep()
{
int nCounter;
object oObject;
if ((!IsInConversation(OBJECT_SELF))&&(!GetIsInCombat(OBJECT_SELF)))
{
if (GetLocalInt(OBJECT_SELF,"njw_steps")==0)
{
ClearAllActions();
ActionSpeakString("Time for bed.");
ActionDoCommand(SetLocalInt(OBJECT_SELF,"njw_steps",1));
}
if (GetLocalInt(OBJECT_SELF,"njw_steps")==1)
{
nCounter=0;
oObject=GetNearestObjectByTag("jw_"+GetTag(OBJECT_SELF)+"_candle1",OBJECT_SELF,nCounter);
while ((GetIsObjectValid(oObject))&&(GetLocalInt(oObject,"NW_L_AMION")!=2))
{
ActionMoveToObject(oObject);
ActionInteractObject(oObject);
ActionPlayAnimation(ANIMATION_LOOPING_GET_MID,1.0,0.5);
nCounter++;
oObject=GetNearestObjectByTag("jw_"+GetTag(OBJECT_SELF)+"_candle1",OBJECT_SELF,nCounter);
}
ActionDoCommand(SetLocalInt(OBJECT_SELF,"njw_steps",2));
}
if (GetLocalInt(OBJECT_SELF,"njw_steps")==2)
{
ActionMoveToObject(GetNearestObjectByTag("WP_jw_"+GetTag(OBJECT_SELF)+"up_at"),0,0.1);
ActionMoveToObject(GetNearestObjectByTag("WP_jw_"+GetTag(OBJECT_SELF)+"down_at"),0,0.1);
ActionDoCommand(SetLocalInt(OBJECT_SELF,"njw_steps",3));
}
// else
// if (GetLocalInt(OBJECT_SELF,"njw_steps")==2)
//{
// ActionJumpToObject(GetNearestObjectByTag("WP_jw_"+GetTag(OBJECT_SELF)+"down_at"));
// ActionDoCommand(SetLocalInt(OBJECT_SELF,"njw_steps",3));
// }
if (GetLocalInt(OBJECT_SELF,"njw_steps")==3)
{
oObject=GetNearestObjectByTag("jw_"+GetTag(OBJECT_SELF)+"_candle2");
if ((GetIsObjectValid(oObject))&&(GetLocalInt(oObject,"NW_L_AMION")!=2))
{
ActionMoveToObject(oObject);
ActionInteractObject(oObject);
ActionPlayAnimation(ANIMATION_LOOPING_GET_MID,1.0,0.5);
}
ActionDoCommand(SetLocalInt(OBJECT_SELF,"njw_steps",4));
}
if (GetLocalInt(OBJECT_SELF,"njw_steps")==4)
{
ActionMoveToObject(GetNearestObjectByTag("jw_"+GetTag(OBJECT_SELF)+"_door"),0,0.1);
ActionOpenDoor(GetNearestObjectByTag("jw_"+GetTag(OBJECT_SELF)+"_door"));
ActionDoCommand(SetLocalInt(OBJECT_SELF,"njw_steps",5));
}
if (GetLocalInt(OBJECT_SELF,"njw_steps")==5)
{
ActionMoveToLocation(GetLocation(GetNearestObjectByTag("jw_"+GetTag(OBJECT_SELF)+"sleep2_wp")));
ActionDoCommand(SetLocalInt(OBJECT_SELF,"njw_steps",6));
}
if (GetLocalInt(OBJECT_SELF,"njw_steps")==6)
{
for (nCounter=0;nCounter<=1;nCounter++)
{
oObject=GetNearestObjectByTag("jw_"+GetTag(OBJECT_SELF)+"_candle3",OBJECT_SELF,nCounter);
if (GetIsObjectValid(oObject)&&(GetLocalInt(oObject,"NW_L_AMION")!=2))
{
ActionMoveToObject(oObject);
ActionInteractObject(oObject);
ActionPlayAnimation(ANIMATION_LOOPING_GET_MID,1.0,0.5);
}
}
ActionMoveToLocation(GetLocation(GetNearestObjectByTag("jw_"+GetTag(OBJECT_SELF)+"sleep2_wp")));
ActionDoCommand(SetFacing(DIRECTION_NORTH));
ActionRest();
ActionPlayAnimation(ANIMATION_LOOPING_MEDITATE,1.0,3.0);
effect eLieDown = EffectSleep();
effect eSnore = EffectVisualEffect (VFX_IMP_SLEEP);
effect eSleep = EffectLinkEffects (eLieDown, eSnore);
ActionDoCommand(SetLocalInt(OBJECT_SELF,"njw_steps",0));
ActionDoCommand(SetLocalInt(OBJECT_SELF,"njw_completed",1));
ActionDoCommand(SetLocalInt(OBJECT_SELF,"njw_current",0));
DelayCommand(1.0,ActionDoCommand(ApplyEffectToObject (DURATION_TYPE_PERMANENT, eSleep, OBJECT_SELF)));
DelayCommand(2.0,ActionDoCommand(ClearAllActions()));
}
}
}
void jw_woken()
{ int nWoken=0;
object oTarget;
//
if ((!IsInConversation(OBJECT_SELF))&&(!GetIsInCombat(OBJECT_SELF)))
{
// if I am asleep
if (PRCGetHasEffect(EFFECT_TYPE_SLEEP))
{
// get the nearest enemy creature to me
oTarget = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR,PLAYER_CHAR_IS_PC);
// and if there is one and it is less than 5 meters away
if ((GetDistanceToObject(oTarget) < 3.0) && (GetIsObjectValid(oTarget)))
{
effect eSleep = GetFirstEffect(OBJECT_SELF);
// scroll through my current effects
while (GetIsEffectValid(eSleep))
{
// and if one of them if the effect sleep but but didn't come from a sleep spell
if ((GetEffectType(eSleep) == EFFECT_TYPE_SLEEP) && (GetEffectSpellId(eSleep) != SPELL_SLEEP))
{
// remove it
RemoveEffect(OBJECT_SELF, eSleep);
nWoken=1;
}
eSleep = GetNextEffect(OBJECT_SELF);
}
}
}
if (nWoken==1)
{
SpeakString("You woke me up - please leave");
DelayCommand(2.0,ActionDoCommand(SetLocalInt(OBJECT_SELF,"njw_steps",4)));
DelayCommand(2.1,ActionDoCommand(SetLocalInt(OBJECT_SELF,"njw_completed",0)));
}
}
}
void jw_wake()
{
object oTarget;
int nCounter;
object oObject;
if ((!IsInConversation(OBJECT_SELF))&&(!GetIsInCombat(OBJECT_SELF)))
{
if (GetSittingCreature(GetLocalObject(OBJECT_SELF,"currentchair"))==OBJECT_SELF)
{ClearAllActions();}
if (PRCGetHasEffect(EFFECT_TYPE_SLEEP))
{
effect eSleep = GetFirstEffect(OBJECT_SELF);
// scroll through my current effects
while (GetIsEffectValid(eSleep))
{
// and if one of them if the effect sleep but but didn't come from a sleep spell
if ((GetEffectType(eSleep) == EFFECT_TYPE_SLEEP) && (GetEffectSpellId(eSleep) != SPELL_SLEEP))
{
// remove it
RemoveEffect(OBJECT_SELF, eSleep);
}
eSleep = GetNextEffect(OBJECT_SELF);
}
} // is now awake
/// do candle3s
for (nCounter=0;nCounter<=1;nCounter++)
{
oObject=GetNearestObjectByTag("jw_"+GetTag(OBJECT_SELF)+"_candle3",OBJECT_SELF,nCounter);
if (GetIsObjectValid(oObject)&&(GetLocalInt(oObject,"NW_L_AMION")!=1))
{
ActionMoveToObject(oObject);
ActionInteractObject(oObject);
ActionPlayAnimation(ANIMATION_LOOPING_GET_MID,1.0,0.5);
}
}
// open door
ActionMoveToObject(GetNearestObjectByTag("jw_"+GetTag(OBJECT_SELF)+"_door"),0,0.1);
ActionOpenDoor(GetNearestObjectByTag("jw_"+GetTag(OBJECT_SELF)+"_door"));
// turn off candle2
oObject=GetNearestObjectByTag("jw_"+GetTag(OBJECT_SELF)+"_candle2");
if ((GetIsObjectValid(oObject))&&(GetLocalInt(oObject,"NW_L_AMION")!=1))
{
ActionMoveToObject(oObject);
ActionInteractObject(oObject);
ActionPlayAnimation(ANIMATION_LOOPING_GET_MID,1.0,0.5);
}
// go to upstairs waypoint
ActionMoveToObject(GetNearestObjectByTag("WP_jw_"+GetTag(OBJECT_SELF)+"down_at"),0,0.1);
// move to downstairs waypoint
ActionMoveToObject(GetNearestObjectByTag("WP_jw_"+GetTag(OBJECT_SELF)+"up_at"));
// move to living room centre
ActionMoveToObject(GetNearestObjectByTag("jw_"+GetTag(OBJECT_SELF)+"living_wp"),0,0.1);
ActionSpeakString("What a beautiful morning");
// turn off all the candles
for (nCounter=0;nCounter<=4;nCounter++)
{
oObject=GetNearestObjectByTag("jw_"+GetTag(OBJECT_SELF)+"_candle1",OBJECT_SELF,nCounter);
if ((GetIsObjectValid(oObject))&&(GetLocalInt(oObject,"NW_L_AMION")!=1))
{
ActionMoveToObject(oObject);
ActionInteractObject(oObject);
ActionPlayAnimation(ANIMATION_LOOPING_GET_MID,1.0,0.5);
}
}
// say it is all done
ActionMoveToObject(GetNearestObjectByTag("jw_"+GetTag(OBJECT_SELF)+"living_wp"),0,1.0);
ActionDoCommand(SetLocalInt(OBJECT_SELF,"njw_completed",2));
ActionDoCommand(SetLocalInt(OBJECT_SELF,"njw_current",3));
ActionDoCommand(SetLocalInt(OBJECT_SELF,"njw_steps",0));
ActionDoCommand(ClearAllActions());
}
}
void jw_general()
{
////one in 10 chance of changing behaviour
int nRandom=Random(10);
object oChair;
int nCounter=1;
int nFoundchair=0;
if ((!IsInConversation(OBJECT_SELF))&&(!GetIsInCombat(OBJECT_SELF)))
{
if (nRandom==1)
{
nRandom=Random(5);
ClearAllActions();
switch (nRandom)
{
case 0:
ActionMoveToObject(GetNearestObjectByTag("jw_"+GetTag(OBJECT_SELF)+"_bookshelf"),0,0.1);
ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0,1.0);
oChair =GetNearestObjectByTag ("jw_"+GetTag(OBJECT_SELF)+"_couch", OBJECT_SELF);
if (GetIsObjectValid(GetSittingCreature(oChair)))
{ break;}
else
{
ActionMoveToObject(oChair,0);
ActionSit(oChair);
break;
}
case 1:
ActionRandomWalk();
break;
case 2:
ActionMoveToObject(GetNearestObjectByTag("jw_"+GetTag(OBJECT_SELF)+"_bookshelf"),0,0.1);
ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0,1.0);
oChair =GetNearestObjectByTag ("jw_"+GetTag(OBJECT_SELF)+"_chair", OBJECT_SELF,nCounter);
while (GetIsObjectValid(oChair)&&(nFoundchair==0))
{
if (!GetIsObjectValid(GetSittingCreature(oChair)))
{
nFoundchair=1;
ActionMoveToObject(oChair,0);
ActionSit(oChair);
break;
}
else
{
nCounter++;
oChair=GetNearestObjectByTag ("jw_"+GetTag(OBJECT_SELF)+"_chair", OBJECT_SELF,nCounter);
}
}
if (nFoundchair==0)
{
ActionSpeakString("Hmm . . . it's busy in here today");
break;
}
case 3:
ActionPlayAnimation(ANIMATION_FIREFORGET_HEAD_TURN_LEFT);
ActionPlayAnimation(ANIMATION_FIREFORGET_HEAD_TURN_RIGHT);
ActionPlayAnimation(ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD);
ActionMoveToObject(GetNearestObjectByTag("jw_"+GetTag(OBJECT_SELF)+"_cabinet"),0,0.1);
ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0,1.0);
ActionWait(1.0);
ActionPlayAnimation(ANIMATION_FIREFORGET_DRINK);
ActionWait(1.0);
ActionRandomWalk();
case 4:
ActionMoveToObject(GetNearestObjectByTag("jw_"+GetTag(OBJECT_SELF)+"_bookshelf"),0,0.1);
ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0,1.0);
oChair =GetNearestObjectByTag ("jw_"+GetTag(OBJECT_SELF)+"_couch", OBJECT_SELF);
if (GetIsObjectValid(GetSittingCreature(oChair)))
{ break;}
else
{
ActionMoveToObject(oChair,0);
ActionSit(oChair);
break;
}
SetLocalInt(OBJECT_SELF,"njw_steps",0);
}
///ended switch
}
}
}
void jw_cook()
{
if ((!IsInConversation(OBJECT_SELF))&&(!GetIsInCombat(OBJECT_SELF)))
{
if (GetLocalInt(OBJECT_SELF,"njw_steps")==0)
{
ClearAllActions();
ActionSpeakString("Time to make some food");
ActionDoCommand( SetLocalInt(OBJECT_SELF,"njw_steps",1));
}
if (GetLocalInt(OBJECT_SELF,"njw_steps")==1)
{
ActionMoveToObject(GetNearestObjectByTag("jw_"+GetTag(OBJECT_SELF)+"_oven"),0,0.1);
ActionDoCommand(SetFacing(DIRECTION_SOUTH));
ActionDoCommand( SetLocalInt(OBJECT_SELF,"njw_steps",2));
}
if (GetLocalInt(OBJECT_SELF,"njw_steps")==2)
{
if (GetLocalInt(GetNearestObjectByTag("jw_"+GetTag(OBJECT_SELF)+"_oven"),"NW_L_AMION") != 1)
{
ActionInteractObject(GetNearestObjectByTag("jw_"+GetTag(OBJECT_SELF)+"_oven"));
}
ActionDoCommand(SetLocalInt(OBJECT_SELF,"njw_steps",3));
}
if (GetLocalInt(OBJECT_SELF,"njw_steps")==3)
{
ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0,2.0);
ActionPlayAnimation(ANIMATION_FIREFORGET_PAUSE_BORED);
ActionMoveToObject(GetNearestObjectByTag("jw_"+GetTag(OBJECT_SELF)+"living_wp"));
ActionDoCommand(SetLocalInt(OBJECT_SELF,"njw_completed",4));
ActionDoCommand( SetLocalInt(OBJECT_SELF,"njw_current",3));
ActionDoCommand(SetLocalInt(OBJECT_SELF,"njw_steps",0));
ActionDoCommand(ClearAllActions());
}
}
}
void jw_endcook()
{
object oChair;
int nCounter;
int nFoundchair;
if ((!IsInConversation(OBJECT_SELF))&&(!GetIsInCombat(OBJECT_SELF)))
{
if (GetLocalInt(OBJECT_SELF,"njw_steps")==0)
{
ClearAllActions();
ActionSpeakString("Time to get the food out of the oven");
ActionDoCommand(SetLocalInt(OBJECT_SELF,"njw_steps",1));
}
if (GetLocalInt(OBJECT_SELF,"njw_steps")==1)
{
ActionMoveToObject(GetNearestObjectByTag("jw_"+GetTag(OBJECT_SELF)+"_oven"),0,0.1);
ActionDoCommand(SetFacing(DIRECTION_SOUTH));
ActionDoCommand(SetLocalInt(OBJECT_SELF,"njw_steps",2));
}
if (GetLocalInt(OBJECT_SELF,"njw_steps")==2)
{
if (GetLocalInt(GetNearestObjectByTag("jw_"+GetTag(OBJECT_SELF)+"_oven"),"NW_L_AMION") != 2)
{
ActionInteractObject(GetNearestObjectByTag("jw_"+GetTag(OBJECT_SELF)+"_oven"));
}
ActionDoCommand(SetLocalInt(OBJECT_SELF,"njw_steps",3));
}
if (GetLocalInt(OBJECT_SELF,"njw_steps")==3)
{
ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0,2.0);
ActionPlayAnimation(ANIMATION_FIREFORGET_HEAD_TURN_RIGHT);
ActionMoveToObject(GetNearestObjectByTag("jw_"+GetTag(OBJECT_SELF)+"living_wp"));
oChair =GetNearestObjectByTag ("jw_"+GetTag(OBJECT_SELF)+"_chair", OBJECT_SELF,nCounter);
while (GetIsObjectValid(oChair)&&(nFoundchair==0))
{
if (!GetIsObjectValid(GetSittingCreature(oChair)))
{
nFoundchair=1;
ActionMoveToObject(oChair,0);
ActionDoCommand(DelayCommand(15.0,SetLocalInt(OBJECT_SELF,"njw_completed",5)));
ActionDoCommand(DelayCommand(15.0,SetLocalInt(OBJECT_SELF,"njw_current",3)));
ActionDoCommand(DelayCommand(15.0,SetLocalInt(OBJECT_SELF,"njw_steps",0)));
ActionSit(oChair);
}
else
{
nCounter++;
oChair=GetNearestObjectByTag ("jw_"+GetTag(OBJECT_SELF)+"_chair", OBJECT_SELF,nCounter);
}
}
if (nFoundchair==0)
{
ActionSpeakString("Well, there's nowhere to sit");
}
ActionDoCommand(SetLocalInt(OBJECT_SELF,"njw_completed",5));
ActionDoCommand( SetLocalInt(OBJECT_SELF,"njw_current",3));
ActionDoCommand(SetLocalInt(OBJECT_SELF,"njw_steps",0));
ActionDoCommand(ClearAllActions());
}
}
}