Difference between revisions of "LlGetLinkName"

From Second Life Wiki
Jump to navigation Jump to search
m (not properly set)
m (NULL_KEY is returned is link input is out of bounds.)
 
(8 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{Issues/SVC-600}}{{LSL_Function/link|linknum|nogroup=*}}{{LSL_Function/limits}}
{{LSL_Function
{{LSL_Function
|inject-2={{Issues/SVC-600}}{{LSL_Function/link|link|nogroup=*}}{{LSL_Function/limits}}
|func_id=145|func_sleep=0.0|func_energy=10.0
|func_id=145|func_sleep=0.0|func_energy=10.0
|func=llGetLinkName
|func=llGetLinkName
|return_type=string|p1_type=integer|p1_name=linknum
|return_type=string
|func_footnote
|p1_type=integer|p1_subtype=link|p1_name=link
|func_footnote=
|func_desc
|func_desc
|return_text=that is the name of '''linknum''' in link set
|return_text=that is the name of {{LSLP|link}} in link set
|spec
|spec
|caveats=*The prim name attribute is limited to 63 bytes, any string longer then that will be truncated. This truncation does not always happen when the attribute is set or read.
|caveats=*If '''link''' is out of bounds, NULL_KEY is returned.
*The prim name attribute is limited to 63 bytes, any string longer then that will be truncated. This truncation does not always happen when the attribute is set or read.
*There is no corresponding '''llSetLinkName''', use <code>llSetLinkPrimitiveParamsFast(link, [PRIM_NAME, name]);</code> instead.
|constants
|constants
|examples=Listen on channel 10 for a name; check if a prim with that name is part of this object
|examples=Listen on channel 10 for a name; check if a prim with that name is part of this object
<lsl>
<source lang="lsl2">
integer check_for_prim(string name)
integer check_for_prim(string name)
{
{
Line 41: Line 44:
         }
         }
     }
     }
}</lsl>
}</source>
|helpers=
|helpers=
<lsl>integer getLinkWithName(string name) {
<source lang="lsl2">integer getLinkWithName(string name) {
     integer i = llGetLinkNumber() != 0;  // Start at zero (single prim) or 1 (two or more prims)
     integer i = llGetLinkNumber() != 0;  // Start at zero (single prim) or 1 (two or more prims)
     integer x = llGetNumberOfPrims() + i; // [0, 1) or [1, llGetNumberOfPrims()]
     integer x = llGetNumberOfPrims() + i; // [0, 1) or [1, llGetNumberOfPrims()]
Line 50: Line 53:
             return i; // Found it! Exit loop early with result
             return i; // Found it! Exit loop early with result
     return -1; // No prim with that name, return -1.
     return -1; // No prim with that name, return -1.
}</lsl>
}</source>
|also_functions=
|also_functions=
{{LSL DefineRow||[[llGetLinkKey]]|Gets the instance UUID of the link}}
{{LSL DefineRow||[[llGetLinkKey]]|Gets the instance UUID of the link}}

Latest revision as of 09:39, 23 November 2017

Summary

Function: string llGetLinkName( integer link );
0.0 Forced Delay
10.0 Energy

Returns a string that is the name of link in link set

• integer link Link number (0: unlinked, 1: root prim, >1: child prims and seated avatars) or a LINK_* flag
Flag Description
LINK_ROOT 1 refers to the root prim in a multi-prim linked set[1]
Flag Description
LINK_THIS -4 refers to the prim the script is in

Caveats

  • link needs to be either an actual link number or a link constants that equate to a single prim, such as LINK_ROOT and LINK_THIS.
  • If link is out of bounds, NULL_KEY is returned.
  • The prim name attribute is limited to 63 bytes, any string longer then that will be truncated. This truncation does not always happen when the attribute is set or read.
  • There is no corresponding llSetLinkName, use llSetLinkPrimitiveParamsFast(link, [PRIM_NAME, name]); instead.

Examples

Listen on channel 10 for a name; check if a prim with that name is part of this object

integer check_for_prim(string name)
{
    integer i = llGetNumberOfPrims();
    for (; i >= 0; --i)
    {
        if (llGetLinkName(i) == name)
        {
            return TRUE;
        }
    }
    return FALSE;
}
default
{
    state_entry()
    {
        llListen(10, "", llGetOwner(), "");
    }
    listen(integer chan, string obj, key id, string msg)
    {
        if (check_for_prim(msg))
        {
            llOwnerSay("found a linked prim named \"" + msg + "\"");
        }
        else
        {
            llOwnerSay("this object does not have any linked prims named \"" + msg + "\"");
        }
    }
}

Useful Snippets

integer getLinkWithName(string name) {
    integer i = llGetLinkNumber() != 0;   // Start at zero (single prim) or 1 (two or more prims)
    integer x = llGetNumberOfPrims() + i; // [0, 1) or [1, llGetNumberOfPrims()]
    for (; i < x; ++i)
        if (llGetLinkName(i) == name) 
            return i; // Found it! Exit loop early with result
    return -1; // No prim with that name, return -1.
}

Notes

Link Numbers

Each prim that makes up an object has an address, a link number. To access a specific prim in the object, the prim's link number must be known. In addition to prims having link numbers, avatars seated upon the object do as well.

  • If an object consists of only one prim, and there are no avatars seated upon it, the (root) prim's link number is zero.
  • However, if the object is made up of multiple prims or there is an avatar seated upon the object, the root prim's link number is one.

When an avatar sits on an object, it is added to the end of the link set and will have the largest link number. In addition to this, while an avatar is seated upon an object, the object is unable to link or unlink prims without unseating all avatars first.

Counting Prims & Avatars

There are two functions of interest when trying to find the number of prims and avatars on an object.

integer GetPrimCount() { //always returns only the number of prims
    if(llGetAttached())//Is it attached?
        return llGetNumberOfPrims();//returns avatars and prims but attachments can't be sat on.
    return llGetObjectPrimCount(llGetKey());//returns only prims but won't work on attachments.
}
See llGetNumberOfPrims for more about counting prims and avatars.

Errata

If a script located in a child prim erroneously attempts to access link 0, it will get or set the property of the linkset's root prim. This bug (BUG-5049) is preserved for broken legacy scripts.

See Also

Functions

•  llGetLinkNumber Returns the link number of the prim the script is in.
•  llGetLinkKey Gets the instance UUID of the link
•  llGetObjectName Get the prims name
•  llSetObjectName Set the prims name
•  llGetObjectDesc Get the prims description
•  llSetObjectDesc Set the prims description
•  llGetObjectDetails

Articles

•  Limits SL limits and constrictions
•  Prim Attribute Overloading

Deep Notes

Footnotes

  1. ^ LINK_ROOT does not work on single prim objects. Unless there is an avatar sitting on the object.

Signature

function string llGetLinkName( integer link );