//::///////////////////////////////////////////////
//:: Default On Heartbeat
//:: NW_C2_DEFAULT1
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
    This script will have people perform default
    animations.
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Nov 23, 2001
//:://////////////////////////////////////////////
#include "NW_I0_GENERIC"

void main()
{
    object oFollow = GetLocalObject(OBJECT_SELF, "dmfi_follow");
    int iLoiter = GetLocalInt(OBJECT_SELF, "dmfi_Loiter");

    // Will fire ONE time only - makes the thing hard to see
    if (!GetLocalInt(OBJECT_SELF, "hls_invis"))
    {
        SetListenPattern(OBJECT_SELF, "**", 20600); //listen to all text
        SetLocalInt(OBJECT_SELF, "hls_Listening", 1); //listen to all text
        SetListening(OBJECT_SELF, TRUE);      //be sure NPC is listening

        //leave it here rather than add the one time loop to EVERY creature through a OS script change
        ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY), OBJECT_SELF);
        ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectCutsceneGhost(), OBJECT_SELF);
        SetLocalInt(OBJECT_SELF, "hls_invis",1);
    }

    if (GetIsObjectValid(oFollow))
        {
        if (GetArea(oFollow)==GetArea(OBJECT_SELF))
            {
            AssignCommand(OBJECT_SELF, ClearAllActions(TRUE));
            AssignCommand(OBJECT_SELF, ActionForceFollowObject(oFollow));
            }
            else
            {
            AssignCommand(OBJECT_SELF, ClearAllActions(TRUE));
            AssignCommand(OBJECT_SELF, ActionJumpToObject(oFollow));
            AssignCommand(OBJECT_SELF, ActionForceFollowObject(oFollow));
            }
        }
    // If just following and listening, then return.
    if (!iLoiter)
        return;

    // If in loiter mode, look for a PC and make the announcement when appropraite
    object oPC = GetFirstObjectInShape(SHAPE_SPHERE, 10.0f, GetLocation(OBJECT_SELF), TRUE);
    while(GetIsObjectValid(oPC))
    {
        if (GetIsPC(oPC) &&
            !GetIsDM(oPC) &&
            iLoiter)
            {
                SpeakString(GetLocalString(OBJECT_SELF, "dmfi_LoiterSay"));
                DestroyObject(OBJECT_SELF);
            }
        oPC = GetNextObjectInShape(SHAPE_SPHERE, 10.0f, GetLocation(OBJECT_SELF), TRUE);
    }
}
