well here my own script elevator. hope it could help some. it work very well with a prim and script in.
--
//Elevator version 1
//made by okgima amat.
integer targetID;
default
{
state_entry()
{
key id = llGetOwner();
llListen(0,"",id,""

;
}
listen(integer channel, string name, key id, string message)
{
if(message == "up"

//say up for start up the elevator
{
llSay(0, "Monter"

;
llSleep(0.1);
llSetStatus(STATUS_PHYSICS, TRUE);
vector destination = llGetPos() + <0,0,4>; // x, y, z destination location. 4 = 4 m
targetID = llTarget(destination, 0 );
llMoveToTarget( destination, 3 ); // 3 is the speed of the elevator. over is slower
llSleep(20);
llSetStatus(STATUS_PHYSICS, FALSE);
llSay(0, "Arriver"

;
llSetPos(<120,50,31>

; // reset no physical pos for a better stability when not worked. change the pos from your elevator prim x y z position.
}
if(message == "down"

//say down for start up the elevator
{
llSay(0, "Desendre"

;
llSleep(0.1);
llSetStatus(STATUS_PHYSICS, TRUE);
vector destination = llGetPos() + <0,0,-4>;
targetID = llTarget( destination, 0 );
llMoveToTarget( destination, 2 );
llSleep(5);
llSetStatus(STATUS_PHYSICS, FALSE);
llSay(0, "Arriver"

;
llSetPos(<120,50,27>

;
}
}
}
// hope it will help ! Good luke
--