//::///////////////////////////////////////////////
//:: ZEP_OPENCLOSE.nss
//:: Copyright (c) 2001 Bioware Corp.
//:: Modified by Dan Heidel 1/14/04 for CEP
//:://////////////////////////////////////////////
/*
    This function goes in the OnUse function of an
    openable placeable or door.  Do not use for
    placeables which have an inventory, only for those
    where clicking should trigger the open/close anim
    without opening up an inventory.  Eg: sarcophagii,
    grandfather clock and iron maiden.  If you wish for
    these items to have an inventory make a copy of the
    placeable with this function removed and the 'has
    inventory' box checked.

    No local variables are needed if the placeable is
    not a door.

    If the placeable is a door, CEP_L_GATEBLOCK is a
    local string containing the blueprint resref of the
    gateblock corresponding to the particular door.

    A gateblock is an invisible placeable with a walkmesh
    of the size, shape and orientation of the door.  In
    the case of CEP Door 01-11, there is a corresponding
    Gateblock 01-11.  Therefore, for Door01, the CEP_L_GATEBLOCK
    should be gateblock001 - the resref for Gateblock 01.

    When the door is closed, a gateblock placeable is created
    so that the door is impassable.  When the door is opened,
    the gateblock is destroyed so the gate is passable.

    GateBlock is a local object that stores the gateblock
    being used by a particular door.  No user intervention is
    needed other than to not create a local variable with the same
    name.

    In addition, zep_doorspawn must be placed in the heartbeat
    function of the door and zep_doorkill must be placed in the
    OnDestruct function of the door.

*/
//:://////////////////////////////////////////////
//:: Created By:  Brent
//:: Created On:  January 2002
//:: Modified by: Dan Heidel 1-21-04 for CEP
//:://////////////////////////////////////////////

#include "zep_inc_scrptdlg"

void main()
{
    string sGateBlock = GetLocalString(OBJECT_SELF, "CEP_L_GATEBLOCK");
    location lSelfLoc = GetLocation(OBJECT_SELF);
    int nIsOpen = GetIsOpen(OBJECT_SELF);

    if (GetLocked(OBJECT_SELF) == 1){
        //FloatingTextStringOnCreature("Locked", OBJECT_SELF);
        string sLockedMSG = GetStringByStrRef(nZEPDoorLocked,GENDER_MALE);
        SpeakString(sLockedMSG);
        return;
    }
    //if the object is locked, it cannot be opened or closed

    if (sGateBlock == ""){    // if the item is not a door
        if (nIsOpen == 0)
        {
            PlayAnimation(ANIMATION_PLACEABLE_OPEN);
        }
        else
        {
             PlayAnimation(ANIMATION_PLACEABLE_CLOSE);
         }
        return;
    }

    if (nIsOpen == 0)   //if the item is a door
    {
        object oSelf = OBJECT_SELF;
        PlayAnimation(ANIMATION_PLACEABLE_OPEN);
        if (GetLocalObject(oSelf, "GateBlock")!= OBJECT_INVALID)
        {
            DestroyObject(GetLocalObject(oSelf, "GateBlock"));
            SetLocalObject(oSelf, "GateBlock", OBJECT_INVALID);
        }
    }
    else
    {
        object oSelf = OBJECT_SELF;
        PlayAnimation(ANIMATION_PLACEABLE_CLOSE);
        SetLocalObject(oSelf, "GateBlock", CreateObject(OBJECT_TYPE_PLACEABLE, sGateBlock, lSelfLoc));
    }
}