Always treat both 0 and 1 as root prim
Tapple Gao
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 closeto 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:
- 0and1should 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})
Log In
Lou Netizen
Modifying functions that return a link number to always return LINK_ROOT in single-prim objects will break a good deal of existing scripting. Testing if a link number is zero is a very common way to test if a script is in a single-prim object.
Tapple Gao
Lou Netizen Added a note to only consider doing that in SLua