59 lines
1.8 KiB
Plaintext
Raw Permalink Normal View History

2023-08-08 16:22:17 -04:00
float DISTANCE_TO_HAUNT = 4.0; // in meters
void ToggleLight(int iState = 0, object oObject = OBJECT_SELF)
{
switch (iState)
{
case 1 : // HAUNT_ON
AssignCommand(oObject, ActionPlayAnimation(ANIMATION_PLACEABLE_ACTIVATE));
DelayCommand(0.4,SetPlaceableIllumination(oObject, TRUE));
SetLocalInt(oObject,"NW_L_AMION",1);
DelayCommand(0.5,RecomputeStaticLighting(GetArea(oObject)));
break;
case -1 : //HAUNT_OFF
AssignCommand(oObject, ActionPlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE));
DelayCommand(0.4,SetPlaceableIllumination(oObject, FALSE));;
SetLocalInt(oObject,"NW_L_AMION",0);
DelayCommand(0.9,RecomputeStaticLighting(GetArea(oObject)));
break;
default :
// Execute "nw_02_onoff" as the toggle
// Calls RecomputeStaticLighting each time, so no...
ExecuteScript("nw_02_onoff", oObject);
break;
}
}
void main()
{
if (!GetLocalInt(OBJECT_SELF,"haunt_once"))
{
SetLocalInt(OBJECT_SELF,"NW_L_AMION",1);
ToggleLight();
SetLocalInt(OBJECT_SELF,"haunt_once",1);
}
int iHaunt = FALSE;
object oPC = GetFirstPC();
while (GetIsObjectValid(oPC) == TRUE)
{
float fNewDist = GetDistanceToObject(oPC);
if (fNewDist>-1.0 && fNewDist<=DISTANCE_TO_HAUNT)
iHaunt=1;
oPC = GetNextPC();
}
if (iHaunt != GetLocalInt(OBJECT_SELF,"haunting") || GetLocalInt(OBJECT_SELF,"haunting")!=GetLocalInt(OBJECT_SELF,"NW_L_AMION") )
{
SetLocalInt(OBJECT_SELF,"NW_L_AMION",!iHaunt);
ToggleLight();
SetLocalInt(OBJECT_SELF,"haunting",iHaunt);
}
}