From: Accasbel Barrymore
Maybe the wrong forum for this, but seeing the discussion is slightly tech:
I've played with simple llSitTarget TPs.
I find a randomness of behaviour on arrival - sometimes bouncing all over the place at the UnSit.
It appears that the avatar is in collision with the prims and absolute havoc (sic) can result.
What gets me is that the results are not consistent. I can stand in the same spot relative to the TP before clicking but a series of tests gives results ranging from graceful alighting to blue-arsed fly emulation. In addition, the camera is sometimes left behind, sometimes not.
Sorry for necropost, but I just finished fixing this for me and thot I'd pass it on. Script with shorter sleep time works fine, no flying, little delay. This one also adjusts automatically when you move the prim its in, and lets you set the destination x,y,z in the object description field.
// Short-range teleport script, with no flying after TP
//----------------------------------
// Script substitutes the "sit" pie postion with name of object containing script
// and reads target position from object description field, e.g.:
// Description 169,158,600.25 (spaces within position string ok)
// If you change the description/position, must reset script (or move the object)
// There is little error checking. If you type just text into the description field
// instead of x,y,z coords, you will get an error. But if you type in 150,7000;32 you
// will end up lost when you TP.
// Max distance that sit target can be from TP object is 300m along any one axis.
// If TP object is moved, it will recalculate the TP target.
// For best results, make sure teleport destination is far enough away from
// other objects so avatar does not collide after tp (end up flying).
// Setting Z point to .25 meter above actual landing seems to help.
vector targetPos;
reset() //resets target position, pie name, etc.
{
vector target;
list destination;
destination = llParseString2List(llGetObjectDesc(),[","],[]);
targetPos.x = llList2Float(destination,0);
targetPos.y = llList2Float(destination,1);
targetPos.z = llList2Float(destination,2);
if (targetPos == ZERO_VECTOR) { // user probably typed in a text desc
targetPos = llGetPos();
llSay(0, "Bad destination in object description: use format x,y,z"

;
}
llSay(0,"TP target set to " + (string)targetPos);
target = (targetPos- llGetPos()) * (ZERO_ROTATION / llGetRot());
llSitTarget(target, ZERO_ROTATION);
llSetSitText(llGetObjectName());
} // endreset
default
{
state_entry()
{
reset();
}
on_rez(integer startup_param)
{
llResetScript();
}
changed(integer change)
{
if (change & CHANGED_LINK)
{
if (llAvatarOnSitTarget() != NULL_KEY)
{
llSleep(0.15); // delay to avoid flying on unsit
llUnSit(llAvatarOnSitTarget());
} // end of avatar was sitting
}
else //some other prim change event
{
reset();
}
} // end changed event
moving_end()
{
reset(); // try to compensate for object movement
}
} // end default