Author Sticky: Post Working Scripts Here
Pothole Posted: Wednesday, 03 July 02:35AM
script name: bm_npc_disturb
What is does: This script will cause NPC's to defend items. Items are defended by TAG instead of customizing the script for each NPC/Container.
How to use: Create an OnDisturb script for your items to protect. This can be a generic script used for all items you want watch over.
Create an NPC. Give them a unique TAG.
Create a container that the NPC will defend.
Make it's TAG NPCTAG1234, where NPCTAG is the TAG of teh NPC, and 1234 is any number between 0001 and 9999.
It must be a 4 digit number. Make sure the container is not of the hostile faction.



In the OnDisturb script of the container put the following:
NWScript:
#include "bm_npc_disturb"

void main() {

   NPC_CheckDisturb();

}



Then create a new script and call it
bm_npc_disturb.
Put in the following:

NWScript:
//:://////////////////////////////////

//:: bm_npc_disturb

//:: Created By: Brandon Mathis

//:: Created On: July 2, 2002

//:: Inspired By: EtherDragon's ondisturb script

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

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

//:: This script provides a function

//:: that will cause NPC's to attack

//:: if items that belong to them are disturbed.

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

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

//:: To Use: Place this script in your

//:: module.  In the OnDisturb script

//:: of an object to be protected insert

//:: the following line:

//:: #include "bm_npc_disturb"

//:: Then in the void main() section of the

//:: OnDisturb script place a call to

//:: NPC_CheckDisturb();

//:: The Item must have a TAG of NPCTAG0001,

//:: where NPCTAG is the TAG of the NPC that

//:: owns the item and 0001 is a number

//:: between 0001 and 9999.  The number must

//:: be 4 digits long.

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

void NPC_CheckDisturb()

{

    // Initialize Objects

    object oPlayer = GetLastDisturbed();

    string sOwner = GetTag(OBJECT_SELF);

    sOwner = GetStringLeft(sOwner, GetStringLength(sOwner) - 4);

    object oOwner = GetObjectByTag(sOwner);

     if ((GetInventoryDisturbType() == INVENTORY_DISTURB_TYPE_REMOVED) ||

        (GetInventoryDisturbType() == INVENTORY_DISTURB_TYPE_STOLEN))

    {

        int iPCPickPocket = GetSkillRank(SKILL_PICK_POCKET, oPlayer) + GetAbilityModifier(ABILITY_DEXTERITY, oPlayer) + d20(1);

        int iNPCSpot = GetSkillRank(SKILL_SPOT, oOwner) + GetAbilityModifier(ABILITY_WISDOM, oOwner) + d20(1) + 2;

        if (iPCPickPocket > iNPCSpot)

        {

        // Theft not spotted.

          SendMessageToPC(oPlayer, "Your actions were unnoticed.");

          return;

        }

        else

        {

        // Theft was spotted.

          SendMessageToPC(oPlayer, "You were spotted!");

          AdjustReputation(oPlayer, oOwner, -20);

          AssignCommand(oOwner, ActionAttack(oPlayer));

        }

    }

}