User:Toy Wylie/RLV Documentation/tpto

From Second Life Wiki
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.


@tpto

Type

General

Implemented

Implemented since RLV version 1.12

Usage

@tpto:<location>=force

Purpose

Teleports the user to the destination immediately, without questions. @tploc=n and @unsit=n will block this attempt. The location format is:
  • X/Y/Z
The X, Y and Z coordinates are in grid coordinates, so you need to calculate them from the region coordinates first before attempting to teleport the user anywhere.


Example 1

<lsl>// simple example with a fixed, pre-calculated destination

default {

   state_entry()
   {
       llOwnerSay("Touch this box to teleport to Toy's Toys.");
   }
   touch_start(integer num)
   {
       if(llDetectedKey(0)==llGetOwner())
       {
           llOwnerSay("@tpto:179068/254564/24=force");
       }
   }

}

</lsl>

Example 2

<lsl>// a more complex example to teleport to any location on the grid

integer listener; integer channel;

key regionRequest;

string location; vector position;

removeListener() {

   if(listener!=0)
   {
       llListenRemove(listener);
       listener=0;
   }
   llSetTimerEvent(0.0);

}

init() {

   listener=0;
   regionRequest=NULL_KEY;
   llOwnerSay("Touch this box to set your teleport location.");

}

default {

   on_rez(integer num)
   {
       llResetScript();
   }
   state_entry()
   {
       init();
   }
   touch_start(integer num)
   {
       if(llDetectedKey(0)!=llGetOwner())
           return;
       if(location!="")
       {
           llOwnerSay("@tpto:"+location+"=force");
           init();
           return;
       }
       if(listener!=0)
       {
           llOwnerSay("We are still waiting for a location to be teleported to.");
           return;
       }
       if(regionRequest!=NULL_KEY)
       {
           llOwnerSay("We are still waiting for the region data to arrive.");
           return;
       }
       channel=(integer) (llFrand(100)+10);
       listener=llListen(channel,"",llDetectedKey(0),"");
       llSetTimerEvent(30.0);
       llOwnerSay("Please say your teleport location on channel "+(string) channel+" within the next 30 seconds. For example: /"+(string) channel+" Mode/124/100/24");
   }
   listen(integer channel,string name,key sender,string message)
   {
       list params=llParseString2List(message,["/"],[]);
       if(llGetListLength(params)!=4)
       {
           llOwnerSay("Please make sure to say your destination in the following format: Region/X/Y/Z where X, Y and Z are the coordinates in the region you want to teleport to.");
           return;
       }
       removeListener();
       position.x=llList2Float(params,1);
       position.y=llList2Float(params,2);
       position.z=llList2Float(params,3);
       string region=llList2String(params,0);
       regionRequest=llRequestSimulatorData(region,DATA_SIM_POS);
   }
   dataserver(key k,string data)
   {
       if(k==regionRequest)
       {
           regionRequest=NULL_KEY;
if(data==""