Difference between revisions of "LlGetLinkNumber"

From Second Life Wiki
Jump to navigation Jump to search
m (Added a note about using double negation to get a link number that can be used with an unlinked prim or the root of a linkset.)
 
(12 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{LSLFunctionAll|func_id=139|func_sleep=0.0|func_energy=10.0|func=llGetLinkNumber|return_type=integer|func_footnote=Returns what number in a link set the script is attached to (0 means no link, 1 the root, 2 or first child, &c)|return_text|spec|caveats|examples|helpers|related|also|notes}}[[Category:LSL_Functions]][[Category:LSL_Stub]]
{{LSL_Function
|func_id=139|func_sleep=0.0|func_energy=10.0
|func=llGetLinkNumber
|return_type=integer
|func_footnote=<code>0</code> means the prim is not linked, <code>1</code> the prim is the root, <code>2</code> the prim is the first child, etc. Links are numbered in the reverse order in which they were linked -- if you select a box, a sphere and a cylinder in that order, then link them, the cylinder is 1, the sphere is 2 and the box is 3. The last selected prim has the lowest link number.
|func_desc
|return_text=that is the link number of the prim containing the script.
|spec
|caveats=*By design may equal [[llGetNumberOfPrims]], ''e.g.'', when prim is last, object contains multiple prims, and no sitting avatars
|constants
|examples=<source lang="lsl2">default
{
    state_entry()
    {
        llOwnerSay((string) llGetLinkNumber());
        llOwnerSay((string) llGetNumberOfPrims());
    }
}</source>
A non-obvious feature is using double-negation to obtain a link number zero (for an unlinked prim) or one (for the root of a linkset). Unlike constants like [[LINK_ROOT]], this number can be used directly with functions like [[llGetLinkPrimitiveParams]] without first determining whether a prim is part of a linkset:
<source lang="lsl2">default
{
    state_entry()
    {
        integer rootLinkNum = !!llGetLinkNumber();
        // returns 0 in an unlinked prim, 1 in a linkset
 
        integer isFullBright = llList2Integer(llGetLinkPrimitiveParams(rootLinkNum,[PRIM_FULLBRIGHT, ALL_SIDES]),0);
        // TRUE if all sides of an unlinked prim or the root of a linkset are set to full bright, FALSE otherwise
    }
}</source>
|helpers
|also_functions={{LSL DefineRow||[[llGetKey]]}}
{{LSL DefineRow||[[llGetNumberOfPrims]]}}
|also_tests
|also_events
|also_articles
|notes
|cat1=Link
|cat2
|cat3
|cat4
}}

Latest revision as of 14:57, 25 August 2018

Summary

Function: integer llGetLinkNumber( );
0.0 Forced Delay
10.0 Energy

Returns an integer that is the link number of the prim containing the script.

0 means the prim is not linked, 1 the prim is the root, 2 the prim is the first child, etc. Links are numbered in the reverse order in which they were linked -- if you select a box, a sphere and a cylinder in that order, then link them, the cylinder is 1, the sphere is 2 and the box is 3. The last selected prim has the lowest link number.

Caveats

  • By design may equal llGetNumberOfPrims, e.g., when prim is last, object contains multiple prims, and no sitting avatars

Examples

default
{
    state_entry()
    {
        llOwnerSay((string) llGetLinkNumber());
        llOwnerSay((string) llGetNumberOfPrims());
    }
}

A non-obvious feature is using double-negation to obtain a link number zero (for an unlinked prim) or one (for the root of a linkset). Unlike constants like LINK_ROOT, this number can be used directly with functions like llGetLinkPrimitiveParams without first determining whether a prim is part of a linkset:

default
{
    state_entry()
    {
        integer rootLinkNum = !!llGetLinkNumber();
        // returns 0 in an unlinked prim, 1 in a linkset

        integer isFullBright = llList2Integer(llGetLinkPrimitiveParams(rootLinkNum,[PRIM_FULLBRIGHT, ALL_SIDES]),0);
        // TRUE if all sides of an unlinked prim or the root of a linkset are set to full bright, FALSE otherwise
    }
}

See Also

Functions

•  llGetKey
•  llGetNumberOfPrims

Deep Notes

Signature

function integer llGetLinkNumber();