Difference between revisions of "LlMapDestination"

From Second Life Wiki
Jump to navigation Jump to search
m
 
(10 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{Issues/SVC-1038}}{{Issues/SVC-1795}}{{Issues/VWR-2060}}{{Issues/VWR-7331}}{{LSL_Function
{{LSL_Function
|inject-2={{Issues/SVC-3455}}{{Issues/SVC-1038}}{{Issues/SVC-1795}}{{Issues/VWR-2060}}{{Issues/VWR-7331}}
{{LSL Function/position|pos|region=*}}
{{LSL Function/position|look_at|local=*}}
|func_id=309|func_sleep=1.0|func_energy=10.0
|func_id=309|func_sleep=1.0|func_energy=10.0
|func=llMapDestination|sort=MapDestination
|func=llMapDestination|sort=MapDestination
|p1_type=string|p1_name=simname|p1_desc=Region name
|p1_type=string|p1_name=simname|p1_desc=Region name
|p2_type=vector|p2_name=pos|p2_desc=[[Viewer_coordinate_frames#Region|Region]] coordinates
|p2_type=vector|p2_name=pos
|p3_type=vector|p3_name=look_at|p3_desc=not used
|p3_type=vector|p3_name=look_at|p3_desc= (not used)
|func_footnote=(NOTE: '''look_at''' currently does nothing)
|func_footnote=(NOTE: {{LSLP|look_at}} currently does nothing)
|func_desc=Opens world map centered on '''simname''' with '''pos''' highlighted.<br />Only works for scripts [[attach]]ed to avatar, or during {{LSLGC|Touch|touch}} events.
|func_desc=Opens world map centered on {{LSLP|simname}} with {{LSLP|pos}} highlighted.<br />Only works for scripts [[attach]]ed to avatar, or during {{LSLGC|Touch|touch}} events.
|return_text
|return_text
|spec
|spec
|caveats=
|caveats=
* if '''simname''' is {{HoverText|omitted|an empty string: {{String}}}} 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.
* if {{LSLP|simname}} is {{HoverText|omitted|an empty string: {{String}}}} or invalid, the map will open centered on object, but {{LSLP|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.
|constants
|constants
|examples=<lsl>//Click the object this script is in and your map opens up in the middle of Oasis.
|examples=
<syntaxhighlight lang="lsl2">
string simName = "Help Island Public";
vector tpDest = <128.0, 128.0, 24.0>;
vector lookAt = ZERO_VECTOR;
 
default
default
{
{
    touch_start(integer num)
    state_entry()
    {
    {
          llMapDestination("Oasis", <128, 128, 0>, ZERO_VECTOR);
        // set white, opaque floattext with teleport destination
    }
        llSetText("click to teleport\nto '" + simName + "'", <1.0, 1.0, 1.0>, (float)TRUE);
}</lsl>
    }
<lsl>
 
// Get a teleport map, via touch_start, from the name of the first landmark in inventory.
    touch_start(integer num_detected)
// NOTE:  Requires a landmark that contains name, region and position data.
    {
//        The correct format is "name, region (x, y, z)".  If a landmark's
        key id = llDetectedKey(0);
//        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
        string oldSlurlPrefix = "http://slurl.com/secondlife/";
          // the region name. Moving backward from the end of the list keeps
        string newSlurlPrefix = "http://maps.secondlife.com/secondlife/";
          // commas in the landmark name from giving us grief with misaligned
        string slurlSuffix = llEscapeURL(simName)
          // and incorrect data.
            + "/" + (string)llRound(tpDest.x)
          integer intElement = llGetListLength(lstTemp)-3;
            + "/" + (string)llRound(tpDest.y)
            + "/" + (string)llRound(tpDest.z);


          // Get the region name from the list element, eliminating unneeded
        llInstantMessage(id, oldSlurlPrefix + slurlSuffix);
          // characters in the string and trimming leading/trailing spaces.
        llInstantMessage(id, newSlurlPrefix + slurlSuffix);
          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
        llMapDestination(simName, tpDest, lookAt);
          // position of "(" in the string starting with the next
    }
          // character and ending with the second to the last character.
}
          vector vecVector = (vector)("<"+llGetSubString(llGetInventoryName(
</syntaxhighlight>
              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>
|helpers
|helpers
|also_functions=
|also_functions=
{{LSL DefineRow||[[llRequestInventoryData]]|}}
{{LSL DefineRow||[[llRequestInventoryData]]|}}
{{LSL DefineRow||[[llMapBeacon]]|}}
|also_tests
|also_tests
|also_events
|also_events
|also_articles
|also_articles
|notes=
|notes=
* '''pos''' will work with [[Viewer_coordinate_frames#Region|Region]] coordinates not inside '''simname'''. (like those returned by [[llRequestInventoryData]])
* {{LSLP|pos}} will work with [[Viewer_coordinate_frames#Region|Region]] coordinates not inside {{LSLP|simname}}. (like those returned by [[llRequestInventoryData]])
* if called from non {{LSLGC|Touch|touch}} events, it only works for the {{LSLGC|Owner|owner}}.
* if called from non {{LSLGC|Touch|touch}} events, it only works for the {{LSLGC|Owner|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 from touch, it may only work for the first or last touch in the event queue (example: {{Mono|num_touched > 1}})
* if called inside an [[attachment]], it only works for the owner.
* if called inside an [[attachment]], it only works for the owner.
|permission
|permission

Latest revision as of 12:36, 14 October 2024

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 position in region coordinates
• vector look_at position in local coordinates (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

string simName = "Help Island Public";
vector tpDest = <128.0, 128.0, 24.0>;
vector lookAt = ZERO_VECTOR;

default
{
    state_entry()
    {
        // set white, opaque floattext with teleport destination
        llSetText("click to teleport\nto '" + simName + "'", <1.0, 1.0, 1.0>, (float)TRUE);
    }

    touch_start(integer num_detected)
    {
        key id = llDetectedKey(0);

        string oldSlurlPrefix = "http://slurl.com/secondlife/";
        string newSlurlPrefix = "http://maps.secondlife.com/secondlife/";
        string slurlSuffix = llEscapeURL(simName)
            + "/" + (string)llRound(tpDest.x)
            + "/" + (string)llRound(tpDest.y)
            + "/" + (string)llRound(tpDest.z);

        llInstantMessage(id, oldSlurlPrefix + slurlSuffix);
        llInstantMessage(id, newSlurlPrefix + slurlSuffix);

        llMapDestination(simName, tpDest, lookAt);
    }
}

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
•  llMapBeacon

Deep Notes

Signature

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