Author: Rich Dersheimer
Author Website: n/a
Script Name: Blacksmith NPC
Description: See script comments
Instructions on Use: See script comments

Script 1 (OnUserDefined):

//::///////////////////////////////////////////////

//:: Custom User Defined Event

//:: FileName kelin_userdefs

//:: Copyright (c) 2001 Bioware Corp.

//:://////////////////////////////////////////////

/* The smith bashes the anvil every other heartbeat

   until a PC approaches, then he stops bashing,

   turns to face the PC, and speaks a random insult.

   Put this script in your blacksmith NPC's

   OnUserDefined slot, rename and edit

   the NPC's OnSpawn script to activate

   the HEARTBEAT user event. Start the smith near

   an anvil that has the tag "ANVIL1". If the smith

   is attacked, he will fight back instead of

   bashing the anvil. If he kills the PC, he will

   return to bashing. The smith should NOT have

   a conversation assigned to it.

*/

//:://////////////////////////////////////////////

//:: Created By: Rich Dersheimer

//:: Created On: July 4, 2002

//:://////////////////////////////////////////////

void main()

{

    int nUser = GetUserDefinedEventNumber();

    if(nUser == 1001 && GetIsInCombat(OBJECT_SELF) == FALSE) //HEARTBEAT

    {

    // Find the PC who was percieved by the NPC

    object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC);

    //Get the range to the PC

    float fRange = GetDistanceToObject(oPC);

    //Get where the PC is

    vector vTarget = GetPosition(oPC);

        // Is the PC too far away to talk to?

        if (fRange > 3.0)

        {

        //Bash the object!

        DoPlaceableObjectAction(GetObjectByTag("ANVIL1"), PLACEABLE_ACTION_BASH);

        ActionDoCommand(ClearAllActions());

        }

        else

        {

        // The PC is close

        ClearAllActions();

        // Turn to face the PC

        SetFacingPoint(vTarget);

        // Speak a random insult

        int nRandomInsult = Random(6);

            switch(nRandomInsult)

            {

            case 0:

            ActionSpeakString("Can't you see I'm busy?", TALKVOLUME_TALK);

            ActionDoCommand(ClearAllActions());

            case 1:

            ActionSpeakString("If yer looking to buy, go talk to my brother!", TALKVOLUME_TALK);

            ActionDoCommand(ClearAllActions());

            case 2:

            ActionSpeakString("Go bother someone else!", TALKVOLUME_TALK);

            ActionDoCommand(ClearAllActions());

            case 3:

            ActionSpeakString("Beat it!", TALKVOLUME_TALK);

            ActionDoCommand(ClearAllActions());

            case 4:

            ActionSpeakString("Leave me be!", TALKVOLUME_TALK);

            ActionDoCommand(ClearAllActions());

            case 5:

            ActionSpeakString("GO AWAY!", TALKVOLUME_TALK);

            ActionDoCommand(ClearAllActions());

            }

        }

    }

    else if(nUser == 1002) // PERCEIVE

    {

    }

    else if(nUser == 1003) // END OF COMBAT

    {

    }

    else if(nUser == 1004) // ON DIALOGUE

    {

    }

    else if(nUser == 1005) // ATTACKED

    {

    }

    else if(nUser == 1006) // DAMAGED

    {

    }

    else if(nUser == 1007) // DEATH

    {

    }

    else if(nUser == 1008) // DISTURBED

    {

    }

}