From Second Life Wiki
Function: llCreateLink( key target, integer parent );
Attempt to link the script's object with target.
|| prim UUID that is in the same region
|| If FALSE, then target becomes the root. If TRUE, then the script's object becomes the root.
To run this function the script must request the PERMISSION_CHANGE_LINKS permission with llRequestPermissions and it must be granted by the owner.
target must be modifiable and have the same owner.
This object must also be modifiable.
The prims for the child object (target if parent is TRUE, script's object if parent is FALSE) are inserted into the parent object's link set starting at link number 2. For example, if the link order for the parent object is A1, A2, A3 and the link order of the child object is B1, B2, B3, then the link order of the resulting object will be A1, B1, B2, B3, A2, A3.
- This function causes the script to sleep for 1.0 seconds.
- If target is not in the region, not a prim, or is attached to an avatar, an error is shouted on DEBUG_CHANNEL.
- If either the object or the target are not modifiable or of different owners, then an error is shouted on DEBUG_CHANNEL.
- If the the parent object and target are too far apart (based on their physical size), they will fail to link.
- This function silently fails if called from a script inside an attachment.
~ Search JIRA for related Bugs
// Rez an object and link it as a child prim.
string ObjectName = "Object Name Here";
// NOTE: must be a name of an object in this object's inventory.
// When the object is touched, make sure we can do this before trying.
// Only bother rezzing the object if will be able to link it.
if (perm & PERMISSION_CHANGE_LINKS)
llRezObject(ObjectName, llGetPos() + <0,0,0.5>, ZERO_VECTOR, llGetRot(), 0);
llOwnerSay("Sorry, we can't link.");
// NOTE: under some conditions, this could fail to work.
// This is the parent object. Create a link to the newly-created child.