//::///////////////////////////////////////////////
//:: Persistent Container OnOpen Script
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
    usage:
    attach this script to the OnOpen event of a container

    info:

    you can customize several parameters:

      specify maximum capacity using WillSafe property

      choose object TAG for ID generation (ReflexSafe = 0)
        !! use this to share inventories
        !! use this for moving inventories (like creatures)

      choose automatic ID generation for stationary containers (ReflexSafe = 1).
        !! probably the best, coz container does not need a specific tag

      use player for ID generation (ReflexSafe = 2)
        !! use this for player vaults. each player gets his own inventory
        !! from the same container

    you can easily map those properties to something else, in case you use
    this include file for creature/merchant inventory..

*/
//:://////////////////////////////////////////////
//:: Created By: Knat
//:: Created On: 28.4.03
//:://////////////////////////////////////////////

#include "PINV_inc"

void main()
{
  object oUser = GetLastOpenedBy();

  if(!GetIsPC(oUser)) return;

  // one time initialization
  if(!GetLocalInt(OBJECT_SELF,"INIT"))
  {
    // no longer needed thanks to patch 1.30
    //PINV_BlockItemByType(BASE_ITEM_MAGICROD);
    //PINV_BlockItemByType(BASE_ITEM_MAGICWAND);
    //PINV_BlockItemByType(BASE_ITEM_MAGICSTAFF);

    // reject items with "NODROP" anywhere in the tag
    PINV_BlockItemByFilter("**NODROP**");

    SetLocalInt(OBJECT_SELF,"INIT",TRUE);
  }

  if(!GetLocalInt(OBJECT_SELF,"IMBUSY!"))
  {
    // lock container
    SetLocalInt(OBJECT_SELF,"IMBUSY!",TRUE);

    // create inventory from DB
    // "Reflex Safe" serves as ID_FLAG
    // reflex = 0
    //   non unique container ID. it will just use the placeable tag as container index
    //   multiple containers can share the same space this way
    // reflex = 1
    //   unique container ID. area-tag + location used as container index. each container gets
    //   his own space, tag is irrelevant.
    //   placeable must be stationary !!!!
    // reflex = 2
    //   ID based on GetPCPlayerName() and GetName()
    //   container inventory depends on opener
    //   this is useful for player vaults
    int nID = (GetReflexSavingThrow(OBJECT_SELF) == 2) ? PINV_GetID(oUser,2) : PINV_GetID(OBJECT_SELF,GetReflexSavingThrow(OBJECT_SELF));
    if( PINV_RetrieveInventory(nID, OBJECT_SELF) == -1 )
      SendMessageToPC(oUser, "You can't retrieve items from this container. Your name contains malicious characters...");
  }
  else
    SendMessageToPC(oUser,"Container is busy, try again later...");

}