95 lines
3.2 KiB
Plaintext
95 lines
3.2 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: 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));
|
|
}
|
|
}
|