llTeleportAgentGlobalCoords

From Second Life Wiki
Revision as of 11:03, 25 June 2013 by Miranda Umino (talk | contribs) (added date of release)
Jump to navigation Jump to search

Summary

Function: llTeleportAgentGlobalCoords( key agent, vector global_coordinates, vector region_coordinates, vector look_at );

Teleports an agent to set of a region_coordinates within a region at the specified global_coordinates. The agent lands facing the position defined by look_at local coordinates. A region's global coordinates can be retrieved using llRequestSimulatorData(region_name, DATA_SIM_POS)

• key agent avatar UUID that is in the same region (avatar to be teleported)
• vector global_coordinates Global coordinates of the destination region. Can be retrieved by using llRequestSimulatorData(region_name, DATA_SIM_POS).
• vector region_coordinates Destination position inside the target region, given in local coordinates.
• vector look_at Location avatar will face after completing the teleport, given in local coordinates.

To run this function the script must request the PERMISSION_TELEPORT permission with llRequestPermissions and it must be granted by agent. The combination of llRequestSimulatorData and llTeleportAgentGlobalCoords allows agents to be teleported to regions by region name.

Caveats

Permissions
  • Once the PERMISSION_TELEPORT permission is granted there is no way to revoke it except from inside the script (for example, with a new llRequestPermissions call) or the script is reset or deleted.
  • This function cannot be used in a script in an object attached using llAttachToAvatarTemp.
  • This function can only teleport the owner of the object.
  • Sitting avatars cannot be teleported using this function. You must llUnSit them first.

Examples

<lsl> string simName = "Help Island Public"; vector simGlobalCoords;

vector landingPoint = <128.0, 128.0, 24.0>;

key owner;


default {

   on_rez(integer start_param)
   {
       llResetScript();
   }
   changed(integer change)
   {
       if (change & CHANGED_OWNER)
           llResetScript();
   }
   state_entry()
   {
       owner = llGetOwner();
       llRequestPermissions(owner, PERMISSION_TELEPORT);
       llRequestSimulatorData(simName, DATA_SIM_POS);
   }
   touch_start(integer total_number)
   {
       key id = llDetectedKey(0);
       if (id == owner)
       {
           if (simGlobalCoords == ZERO_VECTOR)
           {
               llOwnerSay("Config error, tp request was denied. Please try again!");
               llResetScript();
           }
           else
           {
               llOwnerSay("Teleporting you to: http://maps.secondlife.com/secondlife/"
                   + llEscapeURL(simName) + "/" + (string)llRound(landingPoint.x)
                   + "/" + (string)llRound(landingPoint.y) + "/" + (string)llRound(landingPoint.z) + "/");
               llTeleportAgentGlobalCoords(owner, simGlobalCoords, landingPoint, ZERO_VECTOR);
           }
       }
       else
       {
           // llRegionSayTo is faster than llInstantMessage and we can assume
           // that the touching avatar is within the same sim
           llRegionSayTo(id, PUBLIC_CHANNEL,
               "Sorry, I can't tp you. You're NOT my owner!");
       }
   }
   run_time_permissions(integer perm)
   {
       // if permission request has been denied (read ! as not)
       if (!(perm & PERMISSION_TELEPORT))
       {
           llOwnerSay("I need permissions to teleport you!");
           llRequestPermissions(owner, PERMISSION_TELEPORT);
       }
   }

// dataserver event only called if data is returned // or in other words, if you request data for a sim that does // not exist this event will NOT be called

   dataserver(key query_id, string data)
   {
       simGlobalCoords = (vector)data;
       // llOwnerSay("Sim global coords: " + (string)simGlobalCoords);
   }

}

</lsl>

See Also

Events

•  run_time_permissions Permission receiving event

Functions

•  llGetPermissions Get the permissions granted
•  llGetPermissionsKey Get the agent who granted permissions
•  llRequestPermissions Request permissions
•  llRequestSimulatorData Useful for requesting simulator position
•  llTeleportAgent Teleporting agents to a landmark or position in the region.

Articles

•  Script permissions

Deep Notes

History

Date of Release 24/07/2012

Signature

function void llTeleportAgentGlobalCoords( key agent, vector global_coordinates, vector region_coordinates, vector look_at );