02-07-2023, 02:02 PM
ExamplesBasic example with a landmark called Destination in the object's inventory: Basic example without a landmark in the object's inventory, while facing the avatar towards the center of the region:How to use this function in an ExperienceBelow is an example of properly handling the look_at value based on whether the destination is the current region or a different one. This ensures that the avatar will always be facing the same direction regardless of whether they're teleporting within the region or to another one.The script keeps track of the landmark's destination coordinate in the state_entry and changed events, which is later used to calculate the total distance of the teleport.
Code:
````
```
[color=#0000ff]default[/color]
{
[color=#bbbbbb] [/color][color=#008000]touch_start[/color]([color=#b00040]integer[/color][color=#bbbbbb] [/color][color=#19177c]num_detected[/color])
[color=#bbbbbb] [/color]{
[color=#bbbbbb] [/color][color=#0000ff]llRequestPermissions[/color]([color=#0000ff]llGetOwner[/color](),[color=#bbbbbb] [/color][color=#008000]PERMISSION_TELEPORT[/color]);
[color=#bbbbbb] [/color]}
[color=#bbbbbb] [/color][color=#008000]run_time_permissions[/color]([color=#b00040]integer[/color][color=#bbbbbb] [/color][color=#19177c]perm[/color])
[color=#bbbbbb] [/color]{
[color=#bbbbbb] [/color][color=#008000]if[/color][color=#bbbbbb] [/color]([color=#008000]PERMISSION_TELEPORT[/color][color=#bbbbbb] [/color][color=#666666]&[/color][color=#bbbbbb] [/color][color=#19177c]perm[/color])
[color=#bbbbbb] [/color]{
[color=#bbbbbb] [/color][color=#0000ff]llTeleportAgent[/color]([color=#0000ff]llGetPermissionsKey[/color](),[color=#bbbbbb] [/color][color=#ba2121]"Destination"[/color],[color=#bbbbbb] [/color][color=#008000]ZERO_VECTOR[/color],[color=#bbbbbb] [/color][color=#008000]ZERO_VECTOR[/color]);
[color=#bbbbbb] [/color]}
[color=#bbbbbb] [/color]}
}
```
````
Code:
[color=#0000ff]default[/color]
{
[color=#bbbbbb] [/color][color=#008000]touch_start[/color]([color=#b00040]integer[/color][color=#bbbbbb] [/color][color=#19177c]num_detected[/color])
[color=#bbbbbb] [/color]{
[color=#bbbbbb] [/color][color=#0000ff]llRequestPermissions[/color]([color=#0000ff]llGetOwner[/color](),[color=#bbbbbb] [/color][color=#008000]PERMISSION_TELEPORT[/color]);
[color=#bbbbbb] [/color]}
[color=#bbbbbb] [/color][color=#008000]run_time_permissions[/color]([color=#b00040]integer[/color][color=#bbbbbb] [/color][color=#19177c]perm[/color])
[color=#bbbbbb] [/color]{
[color=#bbbbbb] [/color][color=#008000]if[/color][color=#bbbbbb] [/color]([color=#008000]PERMISSION_TELEPORT[/color][color=#bbbbbb] [/color][color=#666666]&[/color][color=#bbbbbb] [/color][color=#19177c]perm[/color])
[color=#bbbbbb] [/color]{
[color=#bbbbbb] [/color][color=#b00040]vector[/color][color=#bbbbbb] [/color][color=#19177c]region_pos[/color][color=#bbbbbb] [/color][color=#666666]=[/color][color=#bbbbbb] [/color][color=#666666]<[/color][color=#666666]100[/color],[color=#bbbbbb] [/color][color=#666666]130[/color],[color=#bbbbbb] [/color][color=#666666]40[/color][color=#666666]>[/color];
[color=#bbbbbb] [/color][color=#b00040]vector[/color][color=#bbbbbb] [/color][color=#19177c]look_at[/color][color=#bbbbbb] [/color][color=#666666]=[/color][color=#bbbbbb] [/color][color=#666666]<[/color][color=#666666]128[/color],[color=#666666]128[/color],[color=#666666]40[/color][color=#666666]>[/color];
[color=#bbbbbb] [/color][color=#0000ff]llTeleportAgent[/color]([color=#0000ff]llGetPermissionsKey[/color](),[color=#bbbbbb] [/color][color=#ba2121]""[/color],[color=#bbbbbb] [/color][color=#19177c]region_pos[/color],[color=#bbbbbb] [/color][color=#19177c]look_at[/color]);
[color=#bbbbbb] [/color]}
[color=#bbbbbb] [/color]}
}
Code:
[color=#3d7b7b]// A SIMPLE SCRIPT that implements an Experience based teleport.[/color]
[color=#3d7b7b]// Compile with the "Use Experience" box cnecked and an experience key you own selected.[/color]
[color=#3d7b7b]// The prim containing this script must contain a landmark named "Landmark" in its contents[/color]
[color=#3d7b7b]//[/color]
[color=#3d7b7b]// If the person touching this box has not previously accepted an invitation to your experience,[/color]
[color=#3d7b7b]// that person will be offered that opportunity when this prim is touched, and if the invitations[/color]
[color=#3d7b7b]// is accepted, will be immediately teleported to the target of the landmark.[/color]
[color=#3d7b7b]//[/color]
[color=#3d7b7b]// If the toucher has previously accepted an invitation, the person will be immediately teleported[/color]
[color=#3d7b7b]// with no interruption.[/color]
[color=#3d7b7b]//[/color]
[color=#3d7b7b]// The script has no safety features, e.g., will simply fail if the prim contains no landmark.[/color]
[color=#3d7b7b]//[/color]
[color=#3d7b7b]// Thanks to Rolig Loon for her help in figuring out how to do this[/color]
[color=#3d7b7b]// See https://community.secondlife.com/t5/English-Knowledge-Base/Experiences-in-Second-Life/ta-p/2744686[/color]
[color=#3d7b7b]// to read what the Lindens think is an adequate explanation of all this.[/color]
[color=#0000ff]default[/color]
{
[color=#bbbbbb] [/color][color=#008000]touch_start[/color]([color=#b00040]integer[/color][color=#bbbbbb] [/color][color=#19177c]n[/color])
[color=#bbbbbb] [/color]{
[color=#bbbbbb] [/color][color=#19177c]llRequestExperiencePermissions[/color]([color=#0000ff]llDetectedKey[/color]([color=#666666]0[/color]),[color=#bbbbbb] [/color][color=#ba2121]""[/color]);
[color=#bbbbbb] [/color]}
[color=#bbbbbb] [/color][color=#19177c]experience_permissions[/color]([color=#b00040]key[/color][color=#bbbbbb] [/color][color=#19177c]agent[/color])
[color=#bbbbbb] [/color]{
[color=#bbbbbb] [/color][color=#0000ff]llTeleportAgent[/color]([color=#19177c]agent[/color],[color=#bbbbbb] [/color][color=#ba2121]"Landmark"[/color],[color=#bbbbbb] [/color][color=#008000]ZERO_VECTOR[/color],[color=#bbbbbb] [/color][color=#008000]ZERO_VECTOR[/color]);
[color=#bbbbbb] [/color]}
}
Code:
[color=#b00040]string[/color][color=#bbbbbb] [/color][color=#19177c]landmark[/color];
[color=#b00040]vector[/color][color=#bbbbbb] [/color][color=#19177c]destination[/color];
[color=#0000ff]default[/color]
{
[color=#bbbbbb] [/color][color=#008000]state_entry[/color]()
[color=#bbbbbb] [/color]{
[color=#bbbbbb] [/color][color=#3d7b7b]// Get data about the first landmark in object inventory when script starts.[/color]
[color=#bbbbbb] [/color][color=#008000]if[/color][color=#bbbbbb] [/color]([color=#0000ff]llGetInventoryNumber[/color]([color=#008000]INVENTORY_LANDMARK[/color])[color=#bbbbbb] [/color][color=#666666]>[/color][color=#bbbbbb] [/color][color=#666666]0[/color])[color=#bbbbbb] [/color]{
[color=#bbbbbb] [/color][color=#19177c]landmark[/color][color=#bbbbbb] [/color][color=#666666]=[/color][color=#bbbbbb] [/color][color=#0000ff]llGetInventoryName[/color]([color=#008000]INVENTORY_LANDMARK[/color],[color=#bbbbbb] [/color][color=#666666]0[/color]);
[color=#bbbbbb] [/color][color=#0000ff]llRequestInventoryData[/color]([color=#19177c]landmark[/color]);
[color=#bbbbbb] [/color]}
[color=#bbbbbb] [/color]}
[color=#bbbbbb] [/color][color=#008000]changed[/color]([color=#b00040]integer[/color][color=#bbbbbb] [/color][color=#19177c]change[/color])
[color=#bbbbbb] [/color]{
[color=#bbbbbb] [/color][color=#008000]if[/color][color=#bbbbbb] [/color]([color=#666666]![/color]([color=#19177c]change[/color][color=#bbbbbb] [/color][color=#666666]&[/color][color=#bbbbbb] [/color]([color=#008000]CHANGED_INVENTORY[/color][color=#666666]|[/color][color=#008000]CHANGED_REGION[/color])))[color=#bbbbbb] [/color][color=#008000]return[/color];
[color=#bbbbbb] [/color][color=#3d7b7b]// Get data about the first landmark in object inventory when inventory changes.[/color]
[color=#bbbbbb] [/color][color=#008000]if[/color][color=#bbbbbb] [/color]([color=#0000ff]llGetInventoryNumber[/color]([color=#008000]INVENTORY_LANDMARK[/color])[color=#bbbbbb] [/color][color=#666666]>[/color][color=#bbbbbb] [/color][color=#666666]0[/color])[color=#bbbbbb] [/color]{
[color=#bbbbbb] [/color][color=#19177c]landmark[/color][color=#bbbbbb] [/color][color=#666666]=[/color][color=#bbbbbb] [/color][color=#0000ff]llGetInventoryName[/color]([color=#008000]INVENTORY_LANDMARK[/color],[color=#bbbbbb] [/color][color=#666666]0[/color]);
[color=#bbbbbb] [/color][color=#0000ff]llRequestInventoryData[/color]([color=#19177c]landmark[/color]);
[color=#bbbbbb] [/color]}
[color=#bbbbbb] [/color]}
[color=#bbbbbb] [/color][color=#008000]dataserver[/color]([color=#b00040]key[/color][color=#bbbbbb] [/color][color=#19177c]query[/color],[color=#bbbbbb] [/color][color=#b00040]string[/color][color=#bbbbbb] [/color][color=#19177c]data[/color])
[color=#bbbbbb] [/color]{
[color=#bbbbbb] [/color][color=#3d7b7b]// Save llRequestInventoryData response.[/color]
[color=#bbbbbb] [/color][color=#19177c]destination[/color][color=#bbbbbb] [/color][color=#666666]=[/color][color=#bbbbbb] [/color]([color=#b00040]vector[/color])[color=#19177c]data[/color];
[color=#bbbbbb] [/color]}
[color=#bbbbbb] [/color][color=#008000]touch_start[/color]([color=#b00040]integer[/color][color=#bbbbbb] [/color][color=#19177c]num_detected[/color])
[color=#bbbbbb] [/color]{
[color=#bbbbbb] [/color][color=#0000ff]llRequestPermissions[/color]([color=#0000ff]llGetOwner[/color](),[color=#bbbbbb] [/color][color=#008000]PERMISSION_TELEPORT[/color]);
[color=#bbbbbb] [/color]}
[color=#bbbbbb] [/color][color=#008000]run_time_permissions[/color]([color=#b00040]integer[/color][color=#bbbbbb] [/color][color=#19177c]perm[/color])
[color=#bbbbbb] [/color]{
[color=#bbbbbb] [/color][color=#008000]if[/color][color=#bbbbbb] [/color]([color=#666666]![/color]([color=#008000]PERMISSION_TELEPORT[/color][color=#bbbbbb] [/color][color=#666666]&[/color][color=#bbbbbb] [/color][color=#19177c]perm[/color]))[color=#bbbbbb] [/color][color=#008000]return[/color];
[color=#bbbbbb] [/color][color=#b00040]float[/color][color=#bbbbbb] [/color][color=#19177c]angle[/color][color=#bbbbbb] [/color][color=#666666]=[/color][color=#bbbbbb] [/color][color=#666666]45[/color][color=#bbbbbb] [/color][color=#666666]*[/color][color=#bbbbbb] [/color][color=#008000]DEG_TO_RAD[/color];
[color=#bbbbbb] [/color][color=#3d7b7b]// When teleporting to another region, we need a direction vector.[/color]
[color=#bbbbbb] [/color][color=#b00040]vector[/color][color=#bbbbbb] [/color][color=#19177c]look_at[/color][color=#bbbbbb] [/color][color=#666666]=[/color][color=#bbbbbb] [/color][color=#666666]<[/color][color=#0000ff]llCos[/color]([color=#19177c]angle[/color]),[color=#bbbbbb] [/color][color=#0000ff]llSin[/color]([color=#19177c]angle[/color]),[color=#bbbbbb] [/color][color=#666666]0[/color][color=#666666]>[/color];
[color=#bbbbbb] [/color][color=#b00040]float[/color][color=#bbbbbb] [/color][color=#19177c]sim_size[/color][color=#bbbbbb] [/color][color=#666666]=[/color][color=#bbbbbb] [/color][color=#0000ff]llVecMag[/color]([color=#666666]<[/color][color=#666666]1[/color],[color=#666666]1[/color],[color=#666666]1[/color][color=#666666]>[/color]);
[color=#bbbbbb] [/color][color=#b00040]float[/color][color=#bbbbbb] [/color][color=#19177c]distance[/color][color=#bbbbbb] [/color][color=#666666]=[/color][color=#bbbbbb] [/color][color=#0000ff]llVecDist[/color]([color=#666666]<[/color][color=#666666]1[/color],[color=#666666]1[/color],[color=#666666]1[/color][color=#666666]>[/color],[color=#bbbbbb] [/color][color=#19177c]destination[/color][color=#bbbbbb] [/color][color=#666666]/[/color][color=#bbbbbb] [/color][color=#666666]256[/color]);
[color=#bbbbbb] [/color][color=#008000]if[/color][color=#bbbbbb] [/color]([color=#19177c]distance[/color][color=#bbbbbb] [/color][color=#666666]<[/color][color=#bbbbbb] [/color][color=#19177c]sim_size[/color])[color=#bbbbbb] [/color]{
[color=#bbbbbb] [/color][color=#3d7b7b]// When teleporting within the current region, we should use a position within the region instead.[/color]
[color=#bbbbbb] [/color][color=#19177c]look_at[/color][color=#bbbbbb] [/color][color=#666666]=[/color][color=#bbbbbb] [/color][color=#19177c]destination[/color][color=#bbbbbb] [/color][color=#666666]+[/color][color=#bbbbbb] [/color][color=#19177c]look[/color][color=#bbbbbb] [/color][color=#19177c]AT[/color];
[color=#bbbbbb] [/color]}
[color=#bbbbbb] [/color][color=#0000ff]llTeleportAgent[/color]([color=#0000ff]llGetPermissionsKey[/color](),[color=#bbbbbb] [/color][color=#19177c]landmark[/color],[color=#bbbbbb] [/color][color=#008000]ZERO_VECTOR[/color],[color=#bbbbbb] [/color][color=#19177c]look_at[/color]);
[color=#bbbbbb] [/color]}
}