//::///////////////////////////////////////////////
//:: On Spawn In
//::
//:://////////////////////////////////////////////
/*
    Determines the course of action to be taken
    after having just been spawned in
*/
//:://////////////////////////////////////////////

#include "no_lib_data"
#include "no_inc"
#include "nw_o2_coninclude"

void main()
{
    //Behaviour config
    AddBehaviour( "+HEALSELF",		100 );
    AddBehaviour( "+REGROUP",		80 );
    AddBehaviour( "+FLANK",			20 );
    AddBehaviour( "+SUMMON",		40 );
    AddBehaviour( "+RAISE",			60 );
    AddBehaviour( "+GROUPHEAL",		60 );
    AddBehaviour( "+HELP",			60 );
    AddBehaviour( "+HEAL",			60 );
    AddBehaviour( "+VIS",			60 );
    AddBehaviour( "+DEFSELF",		40 );
    AddBehaviour( "+DEFSING",		40 );    
    AddBehaviour( "+GROUPENHANCE",	40 );
    AddBehaviour( "+ENHANCESING",	40 );
    AddBehaviour( "+ENHANCESELF",	40 );
    AddBehaviour( "+FEATENHANCE",	40 );
    AddBehaviour( "+DISPEL",		40 );
    AddBehaviour( "+DISPELAOE",		40 );
    AddBehaviour( "+DISMISSAL",		40 );
    AddBehaviour( "+TURN",			40 );
    AddBehaviour( "+AREA",			40 );
    AddBehaviour( "+DIRECT",		40 );
    AddBehaviour( "+TOUCH",			40 );
    AddBehaviour( "+EVACAOE",		50 );
    AddBehaviour( "+ATKMELEE",		100 );
    	
    //Other config
    //Corpse decay set up and exclusions
    SetCorpseDelay();
    /*
    if ( GetRacialType( OBJECT_SELF ) != RACIAL_TYPE_UNDEAD && GetStringLeft( GetTag( OBJECT_SELF ), 6 ) != "NO_AI_" &&
        GetName( GetItemInSlot( INVENTORY_SLOT_CARMOUR, OBJECT_SELF ) ) != "Gargoyle Properties" )
    {
        //not summoned, not undead, default decay time
        SetIsDestroyable( FALSE, TRUE, TRUE );
        SetLocalFloat( OBJECT_SELF, "#DECAYDELAY", 60.0 ); //default corpse decay time
    }
    */

	/*
    SetListening( OBJECT_SELF, TRUE );
    SetListenPattern( OBJECT_SELF, "BC_DEAD", 691 );
    SetListenPattern( OBJECT_SELF, "BC_FIGHTING", 699 );
    */

    if ( GetName( GetItemInSlot( INVENTORY_SLOT_CARMOUR, OBJECT_SELF ) ) == "Balor Properties" )
    {
        SetLocalInt( OBJECT_SELF, "BALORDEATH", 1 );
    }

    if ( GetRacialType( OBJECT_SELF ) == RACIAL_TYPE_DRAGON )
    {
        SetLocalInt( OBJECT_SELF, "FLIER", 1 );
    }

    if ( GetIsObjectValid( GetMaster( OBJECT_SELF ) ) )
    {
        //I am probably a summoned creature, possibly a henchman
        SetAssociateListenPatterns();
    }

    //set voice chat config
	SetVoiceChat( NO_VC_DEFAULT, 10 );
	
	//configure perception ranges
	SetPerceptionRanges();
	
	//set response range for fighting broadcast
	SetResponseRange( BC_FIGHTING, 50.0 );
	
	//tell creature it is ready to act
	//SetReadyStatus();
	
	//set fastbuffer status, should always be left on
	SetIsFastBuffer( TRUE );
    //SetLocalInt( OBJECT_SELF, "#FASTBUFFER", 1 );

    //log starting location
    ExecuteScript( "no_scr_logspnloc", OBJECT_SELF );

    //log loaded melee weapons
    ExecuteScript( "no_scr_logeq", OBJECT_SELF );

    // OPTIONAL BEHAVIORS (Comment In or Out to Activate ) ****************************************************************************
    //SetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION);
    //SetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION);
        // This causes the creature to say a special greeting in their conversation file
        // upon Perceiving the player. Attach the [NW_D2_GenCheck.nss] script to the desired
        // greeting in order to designate it. As the creature is actually saying this to
        // himself, don't attach any player responses to the greeting.

    //SetSpawnInCondition(NW_FLAG_SHOUT_ATTACK_MY_TARGET);
        // This will set the listening pattern on the NPC to attack when allies call
    //SetSpawnInCondition(NW_FLAG_STEALTH);
        // If the NPC has stealth and they are a rogue go into stealth mode
    //SetSpawnInCondition(NW_FLAG_SEARCH);
        // If the NPC has Search go into Search Mode
    //SetSpawnInCondition(NW_FLAG_SET_WARNINGS);
        // This will set the NPC to give a warning to non-enemies before attacking

    //SetSpawnInCondition(NW_FLAG_SLEEP);
        //Creatures that spawn in during the night will be asleep.
    //SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING);
    //SetSpawnInCondition(NW_FLAG_APPEAR_SPAWN_IN_ANIMATION);
    //SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS);
    SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS);
	// SetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED);
	 SetAnimationCondition(NW_ANIM_FLAG_CONSTANT);
	// SetAnimationCondition(NW_ANIM_FLAG_CHATTER);
	// SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE);
        //This will play Ambient Animations until the NPC sees an enemy or is cleared.
    //NOTE that these animations will play automatically for Encounter Creatures.

    // NOTE: ONLY ONE OF THE FOLOOWING ESCAPE COMMANDS SHOULD EVER BE ACTIVATED AT ANY ONE TIME.
    //SetSpawnInCondition(NW_FLAG_ESCAPE_RETURN);    // OPTIONAL BEHAVIOR (Flee to a way point and return a short time later.)
    //SetSpawnInCondition(NW_FLAG_ESCAPE_LEAVE);     // OPTIONAL BEHAVIOR (Flee to a way point and do not return.)
    //SetSpawnInCondition(NW_FLAG_TELEPORT_LEAVE);   // OPTIONAL BEHAVIOR (Teleport to safety and do not return.)
    //SetSpawnInCondition(NW_FLAG_TELEPORT_RETURN);  // OPTIONAL BEHAVIOR (Teleport to safety and return a short time later.)

    // CUSTOM USER DEFINED EVENTS
    /*
    The following settings will allow the user to fire one of the blank user defined events in the NW_D2_DefaultD.  Like the
    On Spawn In script this script is meant to be customized by the end user to allow for unique behaviors.  The user defined
    events user 1000 - 1010
    */
    //SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT);        //OPTIONAL BEHAVIOR - Fire User Defined Event 1001
    //SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT);         //OPTIONAL BEHAVIOR - Fire User Defined Event 1002
    //SetSpawnInCondition(NW_FLAG_ATTACK_EVENT);           //OPTIONAL BEHAVIOR - Fire User Defined Event 1005
    //SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT);          //OPTIONAL BEHAVIOR - Fire User Defined Event 1006
    //SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT);        //OPTIONAL BEHAVIOR - Fire User Defined Event 1008
    //SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003
    //SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT);      //OPTIONAL BEHAVIOR - Fire User Defined Event 1004
    //SetSpawnInCondition(NW_FLAG_DEATH_EVENT);            //OPTIONAL BEHAVIOR - Fire User Defined Event 1007
    
    SetListeningPatterns();    // Goes through and sets up which shouts the NPC will listen to.
    WalkWayPoints();           // Optional Parameter: void WalkWayPoints(int nRun = FALSE, float fPause = 1.0)
                               // 1. Looks to see if any Way Points in the module have the tag "WP_" + NPC TAG + "_0X", if so walk them
                               // 2. If the tag of the Way Point is "POST_" + NPC TAG the creature will return this way point after
                               //    combat.
    GenerateNPCTreasure();     //* Use this to create a small amount of treasure on the creature
}