thanx...for the ideads
i've found help in the forums that i should use a joint...which makes the entire thing work...except now...the cockpit works great the first time activated...then when it returns to the original spot...it jumps away from the plane...even though i have the cockpit glass as phantom and the cylinder used to make the glass is hollowed and cut to make the shape...i'm wondering if it's because the objects are intersection...this is the code i'm using...it was from the script library...can anyone tell me what is wrong and how to correct this
---------------------------------------------------------------------------
key owner;
// Will be used to retrieve owner's key.
integer iChan = 1000;
// Channel door will listen on if other doors are touched;
// also the channel this door will broadcast on.
integer iSteps = 15;
// How many steps the door will open in, used to provide the
// illusion of sliding. Fewer steps means it opens faster,
// but more steps will make it "slide" smoother.
vector vOffset = <0.15, 0, 0.0>;
// Indicates how far the door will move with each step.
// Multiply by iSteps to calculate the total distance the
// door will move.
vector vBase;
// Used to "un-stick" the door if something blocks it.
// Not sure if this is needed since 0.5.1, objects don't
// seem to block the door any more. Leaving it in just
// in case, though. I think attempting to edit the door
// while it's moving may make it stick. This will solve
// that problem as well.
float fOpenTime = 4;
// How long the door stays open
string sSKeyword = "open1";
// Keyword door broadcasts when it's touched, to make
// other doors open. You can chain these to make multiple
// doors open when any one is touched.
// NEVER make sSKeyword and sRKeyword the same, or you may
// get some doors stuck in an infinite loop, continuously
// re-triggering each other.
string sRKeyword = "open2";
// Keyword door listens for from other doors. Will open
// when it "hears" this keyword.
// Again, NEVER make sSKeyword and sRKeyword the same.
integer bMove = FALSE;
// Is the door moving?
integer bLock = FALSE;
// Is the door locked?
integer bVerbose = FALSE;
// Confirm when owner locks/unlocks the door.
//*********************************************
// open() -- the meat and taters of the code,
// makes the door actually move.
//*********************************************
open()
{
bMove = TRUE;
integer i;
vector basepos = llGetPos();
for (i = 0; i < iSteps; i++)
{
llSetPos(basepos + i*vOffset);
}
vOffset *= -1;
llSleep(fOpenTime);
basepos = llGetPos();
for (i = 0; i < iSteps; i++)
{
llSetPos(basepos + i*vOffset);
}
vOffset *= -1;
if (llGetPos() != vBase) {
llSetTimerEvent(5);
} else {
bMove = FALSE;
}
}
default
{
//************************************************** *
// state_entry() -- set up our global variables and
// initialize the listen events.
//************************************************** *
state_entry()
{
vBase = llGetPos();
owner = llGetOwner();
llListen(0,"",owner,""

;
llListen(iChan,"",NULL_KEY,sRKeyword);
}
//************************************************** *
// listen() -- listen for other doors opening, and
// if owner wants to lock/unlock doors.
//************************************************** *
listen(integer chan, string name, key id, string msg)
{
if (chan == iChan && msg == sRKeyword) {
if (!bMove && !bLock) open();
if (bLock && bVerbose) llSay(0,"Locked!"

;
}
if (chan == 0 && id == owner && msg == "lock"

{
bLock = TRUE;
if (bVerbose) llWhisper(0,"Locked!"

;
}
if (chan == 0 && id == owner && msg == "unlock"

{
bLock = FALSE;
if (bVerbose) llWhisper(0,"Unlocked!"

;
}
}
//********************************************
// touch_start() -- what to do when someone
// touches the door.
//********************************************
touch_start(integer count)
{
if (bLock) {
llSay(0,"Locked!"

;
} else {
if (!bMove) {
llWhisper(iChan,sSKeyword);
open();
}
}
}
//************************************************** **
// timer() -- this is only used to un-stick the door
// (see vBase definition above).
//************************************************** **
timer()
{
llSetPos(vBase);
if(llGetPos() == vBase) {
llSetTimerEvent(0);
bMove = FALSE;
}
}
}