This function is fast compared to the above variations, not other LSL functions.

Caveats

Sometimes llSetLinkPrimitiveParamsFast is too fast, i.e. the function returns and the next line of code executes & returns before the update has been processed, resulting in the updates being out of order. In most situations, there is no difference in behavior but sometimes there is. In those cases, you need to use llSetPrimitiveParams or llSetLinkPrimitiveParams.

This prim has no physics representation at all. Like phantom objects, it will not collide with avatars or other objects. Unlike phantom prims, it will also pass freely through the terrain when the parent object is physical. Like volume detect it doesn't collide with terrain. Unlike volume detect, it will not register collision events.

Caveats

The prim description is limited to 127 bytes; any string longer then that will be truncated. This truncation does not always happen when the attribute is set or read.

The pipe character '|' and the newline character '\n' are not legal in a prim's description. They will be replaced with '?'.[3]

Note that when people have "Hover Tips on All Objects" selected in the viewer's "View" menu, they'll see the object description pop-up for any object under their mouse pointer. For that reason, it is good practice to only set human-friendly information in the description, e.g. keys and such.

When an attached object is detached, changes made by script to the name and description (of the root prim) of the attachment will be lost. While the object is attached the name and description can be changed but it will not be reflected in inventory. This caveat does not apply to child prims.

If texture is missing from the prim's inventory and it is not a UUID or it is not a texture then an error is shouted on DEBUG_CHANNEL.

The resulting object develops no new usage restrictions that might have occurred if the asset had been placed in the prims inventory.

repeats is not only used to set the number of repeats but the sign of the individual components is also used to set the "Flip" attribute.

In the defaulttexture mappingmode the texturerepeats units are in texture repeats per face. In the planar texture mapping mode the texture repeats units are in texture repeats per half meter. This is in contrast to the in-world editing tool, in which the planar texture scaling units are repeats per meter.

Do not rely on Floating Text as a storage medium; it is neither secure nor finalized.

It is usually not a good idea to combine PRIM_POSITION with LINK_SET. The root will treat the coordinates as world or attachment, while the children will treat them as local, yielding inconsistent results or failure. If you want to move the object as a unit, use LINK_ROOT instead.

The range the prim can move is limited if it is an unattached root prim. The distance is capped to 10m per PRIM_POSITION call. See WarpPos. This is a very special case. Do not rely on rule duplication of other flags - the results are undefined, and things will break in the future.

Sit-target coordinates do not easily map to prim coordinates, use UpdateSitTarget.

If you have explicitally set your object as "static obstacle" for pathfinding , the function will fail with the error in the debug channel : "Unable to set prim position or scale: object contributes to the navmesh."

If position is greater than 54 meters away from the center, the repositioning will silently fail.

PRIM_OMEGA on nonphysical objects, and child prims of physical objects, is only a client side effect; the object or prim will collide as non-moving geometry.

PRIM_OMEGA cannot be used on avatars sitting on the object. It will emit the error message "PRIM_OMEGA disallowed on agent".

If PRIM_OMEGA does not appear to be working, make sure that that Develop > Network > Velocity Interpolate Objects is enabled on the viewer.

If texture is missing from the prim's inventory and it is not a UUID or it is not a texture then an error is shouted on DEBUG_CHANNEL.

In the defaulttexture mappingmode the texturerepeats units are in texture repeats per face. In the planar texture mapping mode the texture repeats units are in texture repeats per half meter. This is in contrast to the in-world editing tool, in which the planar texture scaling units are repeats per meter.

If texture is missing from the prim's inventory and it is not a UUID or it is not a texture then an error is shouted on DEBUG_CHANNEL.

In the defaulttexture mappingmode the texturerepeats units are in texture repeats per face. In the planar texture mapping mode the texture repeats units are in texture repeats per half meter. This is in contrast to the in-world editing tool, in which the planar texture scaling units are repeats per meter.

Values may drift, become truncated or be range-limited. Some limits are applied by the client during deserialization and before rendering, others are applied by the simulator before storing the values.

This function will return an error if given data of the wrong type. This is problematic when providing data from user input or notecard. To remedy this, see List Cast function.

Applying an operation to LINK_SET will apply it first to the root prim, then to each child prim.

The sim will clamp attributes before storing them.

The client will clamp attributes before rendering.

Some prim properties are reset by this function

A flexible prim will become not flexible

A sliced prim will become unsliced

In order to preserve properties they must be saved and explicitly set in the function call

Important: When wanting to change the alpha value of a face, please consider using llSetLinkAlpha(integer link, float alpha, integer face); instead of llSetLinkPrimitiveParamsFast(integer link, [ PRIM_COLOR, integer face, vector color, float alpha ]);, that way you don't have to mess with the color settings. Also don't expect llSetLinkPrimitiveParamsFast being faster than llSetText when setting a float text property within a loop like at "% loading" status bars. Measurements showed llSetText being 3-4 times faster. That also might applies for similar functions.

// And if you want to place it above your bed, to make you sleep well, and the coords// of that place are, for example, <x, y, z>llSetPrimitiveParams([PRIM_COLOR, ALL_SIDES, ZERO_VECTOR, 1.0,
PRIM_COLOR, 3, <1.0,1.0,1.0>, 1.0,
PRIM_TEXTURE, 3, "4d304955-2b01-c6c6-f545-c1ae1e618288", <1.0, 1.0, 0.0>, ZERO_VECTOR,0.0,
PRIM_FULLBRIGHT, 3, TRUE,
PRIM_POSITION, <x, y, z>]);
// You can set the texture of several sides at once, with no time penalty,// just by repeating the param for that:llSetPrimitiveParams([PRIM_TEXTURE, 3, "4d304955-2b01-c6c6-f545-c1ae1e618288", <1.0, 1.0, 0.0>, ZERO_VECTOR, 0.0,
PRIM_TEXTURE, 4, "4d304955-2b01-c6c6-f545-c1ae1e618288", <1.0, 1.0, 0.0>, ZERO_VECTOR, 0.0]);

Notes

Link Numbers

Each prim that makes up an object has an address, a link number. To access a specific prim in the object, the prim's link number must be known. In addition to prims having link numbers, avatars seated upon the object do as well.

If an object consists of only one prim, and there are no avatars seated upon it, the (root) prim's link number is zero.

However, if the object is made up of multiple prims or there is an avatar seated upon the object, the rootprim's link number is one.

When an avatar sits on an object, it is added to the end of the link set and will have the largest link number. In addition to this, while an avatar is seated upon an object, the object is unable to link or unlink prims without unseating all avatars first.

Counting Prims & Avatars

There are two functions of interest when trying to find the number of prims and avatars on an object.

integer GetPrimCount(){//always returns only the number of primsif(llGetAttached())//Is it attached?returnllGetNumberOfPrims();//returns avatars and prims but attachments can't be sat on.returnllGetObjectPrimCount(llGetKey());//returns only prims but won't work on attachments.}

Errata

If a script located in a child prim erroneously attempts to access link 0, it will get or set the property of the linkset's root prim. This bug (BUG-5049) is preserved for broken legacy scripts.
The old PRIM_TYPE interface (labeled PRIM_TYPE_LEGACY), while technically retired, can still be used.

Examples

The below example moves an avatar to x,y,z without moving the prim they are sitting on. If x,y,z is more than 54 meters away the call will silently fail. Remember x,y,z is in object relative coordinates just like any other linked prim in a set.

Avatars are always the last prims in the set, so llGetNumberOfPrims can be used for a single avatar sitting on a vehicle.

Deep Notes

top_size Explained

When the original PRIM_TYPE interface was retired (PRIM_TYPE_LEGACY, SL 1.5), the new PRIM_TYPE interface did not yet support tapering of the bottom of the prim, this feature wasn't added until SL 1.11 (two years later). Instead of retiring the new PRIM_TYPE when it was added, the range of top_size was enlarged; meanwhile in the client they redefined the parameter and it's values. This redefinition and range enlargement resulted in two interfaces that did the same thing but achieved it through different values. Meanwhile PRIM_TYPE_LEGACY's interface was not updated to support tapering of the bottom of the prim. Consequently all three interfaces have different ranges, making for a rather nasty caveat.

We need PRIM_ALPHA_MODE_DEFAULT to revert alpha to old "if the texture has an alpha mask, use alpha. If not, don't" behavior.

Footnotes

^ LINK_ROOT does not work on single primobjects. Unless there is an avatar sitting on the object.

^ When LL deprecated this flag they stripped it of it's name, however they did not remove the functionality. To aid in documenting the functionality, the value was given a new name in the documentation only. That is why PRIM_TYPE_LEGACY is not recognized by the compiler.

^ The pipe character historically has been used to separate fields in the serialized version of inventory. The field is not multi-line so the newline character holds no meaning in this context.