This is a well-written sliding door script. Written by Pavl Duke of SL. Works in both SL and Opensim.
// FREE SCRIPTS - TESTED AND WORKING ON KITELY // If you paid for this script, you were ripped off. // You may use in your creations. // You may not sell it as a script or in a script collection. // Copy and paste the contents of this notecard into a new script. //By all means make any and all uses you want to of this script, just don't sell it as a script, change the name or remove this or any other of the comments. //This Script was written in a very basic form by Pavl Duke who then made the mistake of passing a copy to Robin Kierstrider who got all "nerr nerr nerr why doesnt it do more?" so now it does - Be warned!! float time = 5; //How long in seconds should the prim take to move.. float move = -3.0; //How Far to move (this can be a negative number if the door is going the wrong way) vector axis = <0,1,0>; //Mark the x y or z axis with a 1 depending on which direction you need float wait = 0.0; //how long to stay open before closing - set to 0 for no auto-close integer switch; vector home; vector moved; do_it(vector here, vector target) { float i; vector pos; vector mov = here - target; llResetTime(); do { i = llGetTime()/time; pos = (here - (mov*i)); llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_POS_LOCAL,pos]); llSleep(time/40);//divide by a smaller number if it's causing lag } while (llGetTime() < time); llSetLinkPrimitiveParams(LINK_THIS,[PRIM_POS_LOCAL,(target)]); } default { state_entry() { home = llList2Vector(llGetLinkPrimitiveParams(LINK_THIS,[PRIM_POS_LOCAL]),0); } touch_start(integer total_number) { if (axis.x > axis.y & axis.x > axis.z) moved = <move,0.0,0.0>; else if (axis.y > axis.z) moved = <0.0,move,0.0>; else moved = <0.0,0.0,move>; if (wait != 0) { do_it(home,home + moved); llSleep(wait); do_it(moved+home,home); } else if (!switch) do_it(home,home + moved); else do_it(moved+home,home); switch = !switch; } } //2012 Pavl Duke