# No Limit Teleporter

Jump to: navigation, search

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);
}```