Jump to content

LlGetLinkKey

From OSgrid Wiki

Function: key llGetLinkKey( integer linknum );

Returns a key which is the key of the prim that is link number linknum in the current link set.
• integer linknum – Link number (0: unlinked, 1: root prim, >1: child prims) or a LINK_* flag

Flag Description
LINK_ROOT 1 sends to root prim in a linked set
LINK_SET -1 sends to all prims
LINK_ALL_OTHERS -2 sends to all other prims
LINK_ALL_CHILDREN -3 sends to all children, (everything but the root)
LINK_THIS -4 sends to the prim the script is in


Caveats
• Do provide a non-negative linknum between 0 and llGetNumberOfPrims inclusive, such as LINK_ROOT.
• Don't provide LINK_THIS as the linknum, instead call llGetKey, per bug SVC-600.
• Don't nonsensically provide a linknum that may refer to multiple prims, such as LINK_SET, LINK_ALL_OTHERS, or LINK_ALL_CHILDREN.

Examples
Drag this script on to linked and unlinked prims, with avatars sitting or not, to see how llGetLinkKey relates to llGetKey, llGetLinkNumber, llGetNumberOfPrims, LINK_ROOT, etc.

<source lang="lsl">

// Return the name of a link num else the empty string.

string getLinkNumName(integer link) {

   if (LINK_THIS == link) return "LINK_THIS";
   if (LINK_ALL_CHILDREN == link) return "LINK_ALL_CHILDREN";
   if (LINK_ALL_OTHERS == link) return "LINK_ALL_OTHERS";
   if (LINK_SET == link) return "LINK_SET";
   if (LINK_ROOT == link) return "LINK_ROOT";
   return "";

}

// Say the key of each linked prim.

default {

   state_entry()
   {
       integer theLink = llGetLinkNumber();

       key theLinkKey = llGetKey();
       key owner = llGetOwner();
       key creator = llGetCreator();

       // Visit each link num.

       integer link;
       integer primmed = llGetNumberOfPrims();
       for (link = -5; link <= (primmed + 5); ++link)
       {
           key linkKey = llGetLinkKey(link);

           // Detail the key at the link num.

           string line = (string) linkKey; // large constant width

           if (linkKey == owner) line += " llGetOwner";
           if (linkKey == creator) line += " llGetCreator";
           if (linkKey == theLinkKey) line += " llGetKey";

           // Detail the link num.

           line += " @ " + (string) link;
           line += " " + getLinkNumName(link);
           if (link == theLink) line += " llGetLinkNumber";
           if (link == primmed) line += " llGetNumberOfPrims";

           // Say the detail if fun.

           if (linkKey != NULL_KEY)
           {
               llOwnerSay(line);
           }
       }

       // Always count the linked prims.

       llOwnerSay((string) primmed + " llGetNumberOfPrims");
       llOwnerSay("OK");
   }

} </source>


See Also
Functions
• llGetLinkNumber – Returns the link number of the prim the script is in.
• llGetKey
• llGetLinkName
Deep Notes
Issues
Bug - A problem which impairs or prevents the functions of the product. Open - The issue is open and ready for the assignee to start work on it. SVC-600[c] llGetLinkKey returns the wrong result when passed LINK_THIS