Jump to content

Is it possible for a teleporter to work across a sim boundary?


Jennifer Boyle
 Share

You are about to reply to a thread that has been inactive for 950 days.

Please take a moment to consider if this thread is worth bumping.

Recommended Posts

Old-style sit to teleport teleporters could almost certainly be made to cross regions, as long as it's only like 1 or 2 hops away.

New style teleporters can work grid-wide, but they generally need to be associated with an experience, or else needs some not-so-user-friendly permission requests and workarounds.

 

  • Thanks 1
Link to comment
Share on other sites

Yes, very easily if you are just interested in teleporting yourself.  Use llTeleportAgent, which will let you teleport directly to any point on the grid.  The catch is that llTeleportAgent is designed to work in an Experience.  If it is not set up in an Experience, it will only teleport the person who owns the teleporter.  See the very simple examples at http://wiki.secondlife.com/wiki/LlTeleportAgent#Examples .

If you want to be able to teleport anyone who uses the thing, you will either have to set it for use in an Experience (which means that you have to be a premium member, among other things), or you have to use an old-style approach (still perfectly good, but dated).  See examples of llMapDestination at http://wiki.secondlife.com/wiki/LlMapDestination#Examples .

  • Thanks 1
Link to comment
Share on other sites

4 minutes ago, Jennifer Boyle said:

Perhaps I should have given  more detail. I am interested in teleporting members of a group between points in two adjacent regions. If the teleporter does not exclude non-group members, I can still use it.

making a thing work for only a specific group is quite straight forward, the main technical considerations are the method of transport and whether communication is needed between the two points. (If there is no communication, you would need to manually reconfigure every time either point is moved)

Teleport methods:

  • URL link. Just saying a SLURL (secondlife://<region-name>/x/y/z) in local chat or dialog box, or using llMapDestination, would allow relatively easy teleport.
  • "experience" teleport. With either llTeleportAgent or llTeleportAgentGlobalCoords. As Rolig mentioned, for this to work well, you need it to be a part of an experience, which means that the person scripting it needs to be a premium member (or have a very good premium friend) and you need to enable their experience on the parcels the teleporter is used on. This method has the advantage of fewer or no clicks though. (can activate on collision and auto teleport)
  • Sit teleport. For very specific scenarios, it could be possible to custom build a system that teleports between two /adjacent/ regions. but it would require a lot of testing to make reliable. Not recommended when there are other options available.

As for communication between the end points, the main options are Shouting (if the points are within 128 meters of each-other) email (breaks easily if one of the points gets taken back into inventory for example, not recommended for this application) or experience keys (only works in experience scripts).

 

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

2 hours ago, Jennifer Boyle said:

I am interested in teleporting members of a group between points in two adjacent regions.

You can use llSetRegionPos with coordinates that are up to +- 10 metres outside the region area, so if you can get them to sit/stand on a disk, you llSetRegionPos to get them 5 metres across the border, then a second llSetRegionPos to take them the remaining distance, and then unsit them, and llSetRegionPos back to 5 metres outside the current region, then back to the starting Point. 

 

The trick to making it seem like a TP is in two parts. 

The prim forming the TP disk is set to CLICK_ACTION_SIT, and when they sit on it, cancel the "sit" animation and play a "stand" one.

  • Like 2
Link to comment
Share on other sites

3 minutes ago, Profaitchikenz Haiku said:

You can use llSetRegionPos with coordinates that are up to +- 10 metres outside the region area, so if you can get them to sit/stand on a disk, you llSetRegionPos to get them 5 metres across the border, then a second llSetRegionPos to take them the remaining distance, and then unsit them, and llSetRegionPos back to 5 metres outside the current region, then back to the starting Point. 

Historical note: That's how the old warppos routine used to work, back in the day before we had llSetRegionPos and were constricted by the 10m range of llSetPos. All sit teleports, including ones across region boundaries, involved concatenating a string of 10m llSetPos hops.  It was a clever workaround, although easily fouled up if some parcel along the way had scripts turned off or didn't allow object entry.  

  • Like 1
Link to comment
Share on other sites

15 minutes ago, Rolig Loon said:

That's how the old warppos routine used to work

With the rather quirky

while( (count = count << 1) <= jumps)  rules = (rules = []) + rules + rules; // should tighten memory usage

I suspect this was necessary for LSL but not for mono?

Edited by Profaitchikenz Haiku
Link to comment
Share on other sites

That hack was introduced by Strife.  Here's his rationale, copypasted directly from http://wiki.secondlife.com/wiki/LSL_Hacks#myList_.3D_.28myList_.3D_.5B.5D.29_.2B_and_myStr_.3D_.28myStr_.3D_.22.22.29_.2B_Hack

This hack works equally well for both strings and lists.

Instead of using myList = myList + addition you can use myList = (myList = []) + myList + addition which will in certain situations reduce memory fragmentation. Memory fragmentation can result in what appears to be a memory leak. This works because LSL execution is Right-To-Left, it frees the value stored at the variable's memory location after copying it to the stack but before storing the return back to the location; the result can be better memory compacting.

Pros

  • Possibility of reduced memory fragmentation

Cons

  • More costly in bytecode and slower
  • Doesn't work in LSLEditor (LSLEditor uses Left-To-Right order of execution).
  • No real benefit when used in Mono
  • Possibility of slightly increasing memory fragmentation

Notes

  • Be sure to test it both ways around before using this.
  • This can also be used with any function.
    • llDeleteSubList((myList = []) + myList, x, y)
  • Like 2
Link to comment
Share on other sites

Reading some of the older bits of coding reminds me of the biblical passage "In those days there were giants in the land"

Something we ought not to forget, many of these elegant hacks came about because they accepted the limitations of the system and found ways to cope, instead of lobbying for more memory (cough-cough)

I was also impressed with the simplicity of how warpos did it, instead of calculating each intermediate 10m spot and moving to it, it just repetitively said "take me to x.y.z" knowing that if it said it enough times, it would get there. Even the method of calculating "enough times" is a work of art, using a binary doubling method.

  • Like 2
Link to comment
Share on other sites

You are about to reply to a thread that has been inactive for 950 days.

Please take a moment to consider if this thread is worth bumping.

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
 Share

×
×
  • Create New...