In 1-prim objects, root prim has link number 0. In other prims, root prim has link number 1 (
=LINK_ROOT
). This behavior should change:
  • It's a pain to make scripts work with both types of objects
  • Link numbers are
    so close
    to already using 1-based indexing, like everything else in SLua has been already changed to. This change would complete that transition
For functions that accept a link number:
  • 0
    and
    1
    should both be treated equally as the root prim number, regardless of prim count
  • This change should be made in SLua at least, but possibly in LSL and Mono as well. (it's probably easier to change both)
  • I can't think of a reason this would break existing LSL content, as it only makes the functions do something useful where they previously did nothing
For functions that return a link number:
  • In LSL, they must be left alone, as this check is somewhat common to test for 1-prim vs multi-prim:
    if (llGetLinkNumber())
  • In SLua, they should be changed to always return 1 (
    =LINK_ROOT
    ). This makes them more consistent, and SLua has no backwards compatibility concerns yet (This is the main reason this proposal is in SLua-Alpha and not Scripting Bugs)
These functions accept link numbers, and return a prim property:
  • ll.AvatarOnLinkSitTarget
  • ll.GetLinkKey
  • ll.GetLinkMedia
  • ll.GetLinkName
  • ll.GetLinkNumberOfSides
  • ll.GetLinkPrimitiveParams
  • ll.GetLinkSitFlags
  • ll.GetObjectLinkKey
  • ll.IsLinkGLTFMaterial
These functions accept link numbers, and modify them:
  • ll.BreakLink
  • ll.ClearLinkMedia
  • ll.LinkAdjustSoundVolume
  • ll.LinkParticleSystem
  • ll.LinkPlaySound
  • ll.LinkSetSoundQueueing
  • ll.LinkSetSoundRadius
  • ll.LinkSitTarget
  • ll.LinkSetSoundRadius
  • ll.MessageLinked
  • ll.SetLinkAlpha
  • ll.SetLinkCamera
  • ll.SetLinkColor
  • ll.SetLinkGLTFOverrides
  • ll.SetLinkMedia
  • ll.SetLinkPrimitiveParams
  • ll.SetLinkPrimitiveParams({PRIM_LINK_TARGET})
  • ll.SetLinkPrimitiveParamsFast
  • ll.SetLinkPrimitiveParamsFast({PRIM_LINK_TARGET})
  • ll.SetLinkRenderMaterial
  • ll.SetLinkSitFlags
  • ll.SetLinkTexture
  • ll.SetLinkTextureAnim
  • ll.SetPrimitiveParams({PRIM_LINK_TARGET})
  • ll.SitOnLink
These functions return a link number:
  • LLEvents.link_message
  • ll.CastRay
  • ll.DetectedLinkNumber
  • DetectedEvent.getLinkNumber
  • ll.GetLinkNumber
  • ll.GetObjectDetails({OBJECT_LINK_NUMBER})