Difference between revisions of "LlMapDestination"

From Second Life Wiki
Jump to navigation Jump to search
m (duplicates most of the caveat)
m (Get a teleport map from the name of the first landmark in inventory.)
Line 18: Line 18:
     {
     {
           llMapDestination("Oasis", <128, 128, 0>, ZERO_VECTOR);
           llMapDestination("Oasis", <128, 128, 0>, ZERO_VECTOR);
    }
}</lsl>
<lsl>
// Get a teleport map from the name of the first landmark in inventory.
// NOTE:  Requires a landmark that contains name, region and position data.
//        The correct format is "name, region (x, y, z)".  If a landmark's
//        name is too long the position data is truncated from the end,
//        which will cause the position to be wrong.
default
{
    touch_start(integer num)
    {
          // Parse the name of the first landmark found in inventory into a list using
          // commas as separators.
          list lstTemp = llParseString2List(llGetInventoryName(
              INVENTORY_LANDMARK,0),[","],[]);
          // Get list length and subtract 3 to get the correct element containing
          // the region name.  Moving backward from the end of the list keeps
          // commas in the landmark name from giving us grief with misaligned
          // and incorrect data.
          integer intElement = llGetListLength(lstTemp)-3;
          // Get the region name from the list element, removing "(" and trimming
          // any leading and trailing spaces.
          string strSimname = llStringTrim(llGetSubString(llList2String(lstTemp,
              intElement),0,llSubStringIndex(llList2String(lstTemp,intElement),"(")-1),
              STRING_TRIM);   
          // The vector is pulled from the landmark name, based on the
          // position of "(" in the string starting with the next
          // character and ending with the second to the last character.
          vector vecVector = (vector)("<"+llGetSubString(llGetInventoryName(
              INVENTORY_LANDMARK,0),llSubStringIndex(llGetInventoryName(
              INVENTORY_LANDMARK,0),"(")+1,-2)+">");
         
          // Bring up the teleport map using the data we extracted.
          llMapDestination(strSimname,vecVector,ZERO_VECTOR);
     }
     }
}</lsl>
}</lsl>

Revision as of 08:07, 9 October 2009

Summary

Function: llMapDestination( string simname, vector pos, vector look_at );
1.0 Forced Delay
10.0 Energy

Opens world map centered on simname with pos highlighted.
Only works for scripts attached to avatar, or during touch events.

• string simname Region name
• vector pos Region coordinates
• vector look_at not used

(NOTE: look_at currently does nothing)

Caveats

  • This function causes the script to sleep for 1.0 seconds.
  • if simname is omitted or invalid, the map will open centered on object, but pos will not be highlighted. Since this function requests the client to perform a task, there is no way for script to know if it has failed.

Examples

<lsl>//Click the object this script is in and your map opens up in the middle of Oasis. default {

    touch_start(integer num)
    {
         llMapDestination("Oasis", <128, 128, 0>, ZERO_VECTOR);
    }

}</lsl> <lsl> // Get a teleport map from the name of the first landmark in inventory. // NOTE: Requires a landmark that contains name, region and position data. // The correct format is "name, region (x, y, z)". If a landmark's // name is too long the position data is truncated from the end, // which will cause the position to be wrong. default {

    touch_start(integer num)
    {
         // Parse the name of the first landmark found in inventory into a list using 
         // commas as separators.
         list lstTemp = llParseString2List(llGetInventoryName(
              INVENTORY_LANDMARK,0),[","],[]);
         // Get list length and subtract 3 to get the correct element containing
         // the region name.  Moving backward from the end of the list keeps
         // commas in the landmark name from giving us grief with misaligned
         // and incorrect data.
         integer intElement = llGetListLength(lstTemp)-3;
         // Get the region name from the list element, removing "(" and trimming 
         // any leading and trailing spaces.
         string strSimname = llStringTrim(llGetSubString(llList2String(lstTemp,
              intElement),0,llSubStringIndex(llList2String(lstTemp,intElement),"(")-1),
              STRING_TRIM);    
         // The vector is pulled from the landmark name, based on the 
         // position of "(" in the string starting with the next 
         // character and ending with the second to the last character.
         vector vecVector = (vector)("<"+llGetSubString(llGetInventoryName(
              INVENTORY_LANDMARK,0),llSubStringIndex(llGetInventoryName(
              INVENTORY_LANDMARK,0),"(")+1,-2)+">");
         
         // Bring up the teleport map using the data we extracted.
         llMapDestination(strSimname,vecVector,ZERO_VECTOR);
    }
}</lsl>

Notes

  • pos will work with Region coordinates not inside simname. (like those returned by llRequestInventoryData)
  • if called from non touch events, it only works for the owner.
  • if called from touch, it may only work for the first or last touch in the event queue (example: num_touched > 1)
  • if called inside an attachment, it only works for the owner.

See Also

Functions

•  llRequestInventoryData

Deep Notes

Signature

function void llMapDestination( string simname, vector pos, vector look_at );