No Limit Teleporter

From Second Life Wiki
Revision as of 00:23, 25 January 2015 by ObviousAltIsObvious Resident (talk | contribs) (<lsl> tag to <source>)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Simple Teleporter - No Limitation


Zero - Lag
You can do anything, change the code and all more... To use:
[+] Set stapos (end of script) to the object position (where to back when the destination is reach).
[+] Set dest (end of script) to the object destination.


//Leave that here
//Script created by Morgam Biedermann
vector posnow;
vector stapos;
rotation rotnow;
teleport(vector dest)
{
    if(llGetPos() != dest)
    {
        llSetPos(dest);
        teleport(dest);
    }
    else
    {
        llUnSit(llAvatarOnSitTarget());
        teleports(stapos);
    }
}
teleports(vector dest)
{
    if(llGetPos() != stapos)
    {
        llSetPos(stapos);
        teleports(stapos);
    }
}
default
{
    state_entry()
    {
        stapos = <141,19,30>;
    }
    touch_start(integer vez)
    {
        if(llDetectedKey(0) == llGetOwner())
        teleport(<141,19,505>);
    }
}

The above example is a really bad approach to use for many reasons. Not least of which is that lag is precisely what it *will* generate.

An equivalency check that respects SLs somewhat wiggly precision system, and isn't trying to match a movement to EXACTLY 6 decimal places of precision is needed.

if(llGetPos() != dest)
//is bad
if(llVecDist(llGetPos(),dest)<0.001)
//is MUCH better

ie:

teleports(vector dest)
{
//    if(llGetPos() != stapos) 
// This an inherently bad approach; given 6 decimal places on 3 floats in a vector its 
// very UNlikely the equivalency will be precisely equal even if its VERY close, this 
// will become especially evident at high altitude. It'll look  like its stopped, 
// but the llSetPos() will be still thrashing away. Possibly for quite some time/forever.
//
// the below will stop in a timely manner.
    if(llVecDist(llGetPos(),dest) <= 0.001)
    {   llSetPos(dest); //corrected variable
        teleports(dest); //corrected variable
    }
}

And a system that has a user function call itself from within itself is probably not good. This is MUCH Better. [MUST be compiled in MONO]

teleports(vector dest)
{   list l=[PRIM_POSITION,dest];
    l+=l;l+=l;l+=l;l+=l;l+=l;l+=l;l+=l;l+=l;l+=l;
    llSetPrimitiveParams(l);
}