Skip to content
lsl.devlsl.devLSL Dev

LlSetLinkPrimitiveParamsFast

Looking for the current API? Open the llSetLinkPrimitiveParamsFast reference →

Shared wiki article

This page transcludes LlSetPrimitiveParams. The following text is from that archived revision.

Overview

These functions are almost entirely identical. For almost all situations we recommend you use llSetLinkPrimitiveParamsFast.
These are very powerful & sharp functions. Each PRIM_* rule takes at least one parameter and has its own quirks and its own dedicated article with specific information.
There are two differences:

Function variants

llSetPrimitiveParams

Wiki description

Sets the prim's parameters according to rules.

Function guidance

Please consider using llSetLinkPrimitiveParamsFast in combination with LINK_THIS instead. You avoid the 0.2 second delay.
Although it might not seem obvious you actually can set link rules using this function in combination with PRIM_LINK_TARGET, however for your own sake please use llSetLinkPrimitiveParams or llSetLinkPrimitiveParamsFast instead.

Caveats

none

llSetLinkPrimitiveParams

Wiki description

Sets the prims parameters according to rules.

Function guidance

Please consider using llSetLinkPrimitiveParamsFast instead. You avoid the 0.2 second delay.

Caveats

none

llSetLinkPrimitiveParamsFast

Wiki description

Sets the prims parameters according to rules.

Function guidance

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.

Specification

Archived set parameter table from Template:LSL Constants/PrimitiveParams. Variable-based or conditional cells retain their original syntax.

FlagVDescriptionUsage
PRIM_NAME 27 Sets the prim's name. [ PRIM_NAME, string name ]
PRIM_DESC 28 Sets the prim's description. [ PRIM_DESC, string description ]
PRIM_TYPE 9 Sets the prim's shape. [ PRIM_TYPE, integer flag ] + flag_parameters
PRIM_SLICE 35 Sets the prim's slice (a shape attribute). [ PRIM_SLICE, vector slice ]
PRIM_PHYSICS_SHAPE_TYPE 30 Sets the prim's physics shape type. [ PRIM_PHYSICS_SHAPE_TYPE, integer type ]
PRIM_MATERIAL 2 Sets the prim's material. [ PRIM_MATERIAL, integer flag ]
PRIM_PHYSICS 3 Sets the object's physics status. [ PRIM_PHYSICS, integer boolean ]
PRIM_TEMP_ON_REZ 4 Sets the object's temporary attribute. [ PRIM_TEMP_ON_REZ, integer boolean ]
PRIM_PHANTOM 5 Sets the object's phantom status. [ PRIM_PHANTOM, integer boolean ]
PRIM_POSITION 6 Sets the prim's position. [ PRIM_POSITION, vector position ]
PRIM_POS_LOCAL 33 Sets the prim's local position. [ PRIM_POS_LOCAL, vector position ]
PRIM_ROTATION 8 Sets the prim's global rotation. [ PRIM_ROTATION, rotation rot ]
PRIM_ROT_LOCAL 29 Sets the prim's local rotation. [ LSL Const/ja: {{LSL Const/ja|PRIM_ROT_LOCAL|integer|29|c=Used to {{GetSet||get|set|/}} the prim's local rotation}}, rotation rot ]
PRIM_SIZE 7 Sets the prim's size. [ PRIM_SIZE, vector size ]
PRIM_TEXTURE 17 Sets the prim's texture attributes. [ PRIM_TEXTURE, integer face, string texture, vector repeats, vector offsets, float rotation_in_radians ]
PRIM_RENDER_MATERIAL 49 Sets the prim's render_material. Setting this param will also clear most PRIM_GLTF_* properties on the face, with the exceptions of repeats, offsets, and rotation_in_radians [ PRIM_RENDER_MATERIAL, integer face, string render_material ]
PRIM_TEXT 26 Sets the prim's floating text. [ PRIM_TEXT, string text, vector color, float alpha ]
PRIM_COLOR 18 Sets the face's color. [ PRIM_COLOR, integer face, vector color, float alpha ]
PRIM_BUMP_SHINY 19 Sets the face's shiny & bump. [ PRIM_BUMP_SHINY, integer face, integer shiny, integer bump ]
PRIM_POINT_LIGHT 23 Sets the prim as a point light. [ PRIM_POINT_LIGHT, integer boolean, vector linear_color, float intensity, float radius, float falloff ]
PRIM_REFLECTION_PROBE 44 Sets the prim as a reflection probe. [ PRIM_REFLECTION_PROBE, integer boolean, float ambiance, float clip_distance, integer flags ]
PRIM_FULLBRIGHT 20 Sets the face's full bright flag. [ PRIM_FULLBRIGHT, integer face, integer boolean ]
PRIM_FLEXIBLE 21 Sets the prim as flexible. [ PRIM_FLEXIBLE, integer boolean, integer softness, float gravity, float friction, float wind, float tension, vector force ]
PRIM_TEXGEN 22 Sets the face's texture mode. [ PRIM_TEXGEN, integer face, integer type ]
PRIM_GLOW 25 Sets the face's glow attribute. [ PRIM_GLOW, integer face, float intensity ]
PRIM_OMEGA 32 Sets the prim's spin to the specified axis and rate. [ PRIM_OMEGA, vector axis, float spinrate, float gain ]
PRIM_NORMAL 37 Sets the prim's normal map attributes. [ , integer face, string texture, vector repeats, vector offsets, float rotation_in_radians ]
PRIM_SPECULAR 36 Sets the prim's specular map attributes. [ PRIM_SPECULAR, integer face, string texture, vector repeats, vector offsets, float rotation_in_radians, vector color, integer glossiness, integer environment ]
PRIM_ALPHA_MODE 38 Sets the prim's diffuse texture alpha rendering mode attributes. [ PRIM_ALPHA_MODE, integer face, integer alpha_mode, integer mask_cutoff ]
PRIM_LINK_TARGET 34 Sets the next linknumber to use in the linkset. [ PRIM_LINK_TARGET, integer link_target ]
PRIM_CAST_SHADOWS 24 Sets the prim's cast shadow attribute. (DEPRECATED) [ PRIM_CAST_SHADOWS, integer boolean ]
PRIM_TYPE_LEGACYFootnote: {{Footnote|handle=ptl}} 1 Sets the prim's shape (legacy mode, DEPRECATED). [ 1, integer flag ] + flag_parameters
PRIM_ALLOW_UNSIT 39 Avatars are allowed to manually stand up when seated on this prim. Only valid for prims in a valid experience. [ PRIM_ALLOW_UNSIT, integer boolean ]
PRIM_SCRIPTED_SIT_ONLY 40 Avatars are not permitted to manually sit on this prim. [ PRIM_SCRIPTED_SIT_ONLY, integer boolean ]
PRIM_SIT_TARGET 41 The sit target, if any defined for this prim. [ PRIM_SIT_TARGET, integer boolean, vector offset, rotation rot ]
PRIM_PROJECTOR 42 Light projector settings for this prim. [ PRIM_PROJECTOR, string texture, float fov, float focus, float ambiance ]
PRIM_CLICK_ACTION 43 Click action for this prim [ PRIM_CLICK_ACTION, integer action ]
Flag Description Cursor
CLICK_ACTION_NONE0Performs the default action: when the prim is touched, touch events are triggered
CLICK_ACTION_TOUCH0When the prim is touched, touch events are triggered
CLICK_ACTION_SIT1When the prim is touched, the avatar sits upon itFile:SitActionCursor.png‎
CLICK_ACTION_BUY2When the prim is touched, the buy dialog is openedFile:SaleOneclickCursor.png
CLICK_ACTION_PAY3When the prim is touched, the pay dialog is openedFile:SaleOneclickCursor.png
CLICK_ACTION_OPEN4When the prim is touched, the object inventory dialog is openedFile:OpenOneclickCursor.png
CLICK_ACTION_PLAY5Play or pause parcel media on touchImage:Toolplay.png
CLICK_ACTION_OPEN_MEDIA6Play parcel media on touch, no pauseImage:Toolmediaopen.png
CLICK_ACTION_ZOOM7Zoom the avatar camera on this object (Viewer 2)Image:Toolzoom.png
CLICK_ACTION_DISABLED8No click action. No touches detected or passed.
CLICK_ACTION_IGNORE9Clicks go through the object to whatever is behind it. No touches detected.
PRIM_GLTF_BASE_COLOR 48 Sets the prim's GLTF Material Base Color map attributes. This parameter's arguments are GLTF overrides.
gltf_alpha_mode Flags V Description
PRIM_GLTF_ALPHA_MODE_OPAQUE 0 Ignore the alpha value and render the material as opaque.
PRIM_GLTF_ALPHA_MODE_BLEND 1 Render the material with transparency determined by the alpha value. Blending is done in linear color space. As is the case for Blinn-Phong as well, this mode suffers from depth sorting and performance issues. Use alpha mask instead when possible.
PRIM_GLTF_ALPHA_MODE_MASK 2 Render the material as fully opaque where the alpha value is greater than the alpha cutoff, and otherwise render the material as fully transparent.
[ PRIM_GLTF_BASE_COLOR, integer face, string texture, vector repeats, vector offsets, float rotation_in_radians, vector linear_color, float alpha, integer gltf_alpha_mode, float alpha_mask_cutoff, integer double_sided ]
PRIM_GLTF_NORMAL 45 Sets the prim's GLTF Material Normal map attributes. This parameter's arguments are GLTF overrides. [ PRIM_GLTF_NORMAL, integer face, string texture, vector repeats, vector offsets, float rotation_in_radians ]
PRIM_GLTF_METALLIC_ROUGHNESS 47 Sets the prim's GLTF ORM map attributes (Occlusion, Roughness, Metallic). This parameter's arguments are GLTF overrides. [ PRIM_GLTF_METALLIC_ROUGHNESS, integer face, string texture, vector repeats, vector offsets, float rotation_in_radians, float metallic_factor, float roughness_factor ]
PRIM_GLTF_EMISSIVE 46 Sets the prim's GLTF Material Emissive map attributes. This parameter's arguments are GLTF overrides. [ PRIM_GLTF_EMISSIVE, integer face, string texture, vector repeats, vector offsets, float rotation_in_radians, vector linear_emissive_tint ]
PRIM_SIT_FLAGS 50 Sets the flags on the prim's sit target
Flag Description
SIT_FLAG_SIT_TARGETRead-only flag to indicate whether the link has a sit target. Use llSitTarget, llLinkSitTarget, or PRIM_SIT_TARGET to disable or enable this flag. Use llGetLinkSitFlags, or llGetLinkPrimitiveParams with PRIM_SIT_FLAGS to read this flag.
SIT_FLAG_ALLOW_UNSITAllow an avatar to manually unsit from a sit target. Only applies to agents who had been seated via an LSL script. See llSitOnLink.
SIT_FLAG_SCRIPTED_ONLYOnly allow scripted sits on this sit target.
SIT_FLAG_NO_COLLIDEDisable the avatar's collision volume when they are seated on this sit target.
SIT_FLAG_NO_DAMAGEDo not distribute damage to agents sitting on this sit target.
[ PRIM_SIT_FLAGS, integer flags ]
PRIM_DAMAGE 51 Sets the damage and damage type delivered by a prim on collision. [ PRIM_DAMAGE, float damage, integer damage_type ]
PRIM_HEALTH 52 Sets the health value for this prim. [ PRIM_HEALTH, float health ]

Caveats

  • PRIM_SIZE has similar constraints to llSetScale and fails silently on physical prims/links. One workaround is to set items to non-physical before changing their size, then changing them back to physical; this can be accomplished in a single llSetLinkPrimitiveParamsFast command using PRIM_LINK_TARGET.
  • PRIM_PHANTOM, PRIM_PHYSICS and PRIM_TEMP_ON_REZ applies to the entire object (linkset).
  • 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.
  • PRIM_LINK_TARGET is a special parameter which can be inserted to perform actions on multiple prims on the linkset with one call.
  • Scripts written before September 2004 that use PRIM_TYPE depend on PRIM_TYPE to have the value 1; if these scripts are recompiled, the new value of PRIM_TYPE will be used, causing errors at runtime.
    • To fix this, replace the PRIM_TYPE flag with the value 1 or update to the newer PRIM_TYPE syntax.
  • PRIM_ROTATION is bugged in child prims. See Useful Snippets for a workaround, or the linked SVC-93 issue below.
  • 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
  • Attempting to change PRIM_TYPE of a mesh object has no effect.
    • Keeping the PRIM_TYPE as PRIM_TYPE_SCULPT and trying to set a different sculpt map or sculpt flags on a mesh also does nothing. Additionally, a script residing inside a mesh type prim cannot change the sculpt parameters of any prim in the linkset.
  • The caveats described at llSetClickAction all apply to PRIM_CLICK_ACTION.

Examples

A simple script to light up a prim in a linkset when touched, and unlight the others using llSetLinkPrimitiveParams, when script is installed in the root prim of the linkset.
// Turn all prims off and the one touched turn on

default
{
    touch_start(integer num_detected)
    {
        llSetLinkPrimitiveParamsFast(LINK_SET, [
                PRIM_FULLBRIGHT, ALL_SIDES, FALSE,
            PRIM_LINK_TARGET, llDetectedLinkNumber(0),
                PRIM_FULLBRIGHT, ALL_SIDES, TRUE]);
    }
}
A simple script which moves all child prims .25m forward on the root's Z axis, when touched.
default
{
    touch_start(integer total_number)
    {
        integer numberOfPrims = llGetNumberOfPrims();

        if (numberOfPrims < 2) return;

        vector  link_pos;
        list    params;

        integer link = 2;// start with first child prim
        do
        {
//          get a child prim's local position (i.e, relative to the root prim)
            link_pos = llList2Vector(llGetLinkPrimitiveParams(link, [PRIM_POS_LOCAL]), 0);

            link_pos.z += 0.25;// relative to root's local z-axis !!!

            params += [PRIM_LINK_TARGET, link,
                            PRIM_POS_LOCAL, link_pos];
        }
        while (++link <= numberOfPrims);

        if (!llGetListLength(params)) return;

//      the params list starts with a PRIM_LINK_TARGET (a hack so we can start
//      with the first child prim), so it doesn't really matter which number you
//      put as first parameter in this function call
        llSetLinkPrimitiveParamsFast(2, params);
    }
}
Preferred method using PRIM_LINK_TARGET Second method does the same effect-wise.
//  color the root prim red and the first linked-prim green

default
{
    touch_start(integer num_detected)
    {
        llSetLinkPrimitiveParamsFast(LINK_ROOT, [
                PRIM_COLOR, ALL_SIDES, <1.0, 0.0, 0.0>, 1.0,
            PRIM_LINK_TARGET, 2,
                PRIM_COLOR, ALL_SIDES, <0.0, 1.0, 0.0>, 1.0]);
    }
}
//  color the root prim red and the first linked-prim green

default
{
    touch_start(integer num_detected)
    {
        llSetLinkPrimitiveParamsFast(LINK_ROOT, [
                PRIM_COLOR, ALL_SIDES, <1.0, 0.0, 0.0>, 1.0]);
        llSetLinkPrimitiveParamsFast(2, [
                PRIM_COLOR, ALL_SIDES, <0.0, 1.0, 0.0>, 1.0]);
    }
}
Combining function calls
// Combined function calls

default
{
    touch_start(integer num_detected)
    {
        // color prim faces, set texture and set fullbright
        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]);
    }
}
// Single function calls

default
{
    touch_start(integer num_detected)
    {
        // color prim faces
        llSetPrimitiveParams([
            PRIM_COLOR, ALL_SIDES, ZERO_VECTOR, 1,
            PRIM_COLOR, 3, <1.0, 1.0, 1.0>, 1.0]);

        // set texture
        llSetPrimitiveParams([
            PRIM_TEXTURE, 3, "4d304955-2b01-c6c6-f545-c1ae1e618288", <1.0, 1.0, 0.0>, ZERO_VECTOR, 0.0]);

        // set fullbright
        llSetPrimitiveParams([
            PRIM_FULLBRIGHT, 3, TRUE]);
    }
}
// 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]);

Top-size (taper)

default
{
    state_entry()
    {
        vector scale = llGetScale();
        float  X     = scale.x;
        float  Y     = scale.y;

        llSetPrimitiveParams([
            PRIM_SIZE, <X, Y, 0.1>, // keep the prim thin
            PRIM_TYPE, PRIM_TYPE_BOX, 0, <0.0,1.0,0.0>, 0.0, ZERO_VECTOR,
                <1.0 - (0.4 / X), 1.0 - (0.4 / Y), 0.0>, ZERO_VECTOR]);
        // We used the equation "answer = 1 - desired_taper"

        // The proportions of the top-size (taper) will be maintained (as close as possible)
        // whenever the prim is resized. The proportion above will produce a reasonably
        // pleasing picture frame kinda thing.
    }

    changed(integer change)
    {
        if(change & CHANGED_SCALE)
        {
            llResetScript();
        }
    }
}

Helper functions

//-- PRIM_ROTATION workaround for child prims (works in unattached objects only)
llSetLinkPrimitiveParamsFast(linknumber, [
    PRIM_ROT_LOCAL, rot*llGetRootRotation()]);

//-- PRIM_ROTATION workaround for child prims (works in linked objects only)
llSetLinkPrimitiveParamsFast(linknumber, [
    PRIM_ROT_LOCAL, rot*llList2Rot(llGetLinkPrimitiveParams(LINK_ROOT, [PRIM_ROT_LOCAL]), 0)]);

//-- PRIM_ROTATION workaround for child prims (works in all scenarios)
llSetLinkPrimitiveParamsFast(linknumber, [
    PRIM_ROT_LOCAL, rot*llList2Rot(llGetLinkPrimitiveParams(!!llGetLinkNumber(), [PRIM_ROT_LOCAL]), 0)]);

Notes

The old PRIM_TYPE interface (labeled PRIM_TYPE_LEGACY), while technically retired, can still be used.

PRIM_POSITION

Avatars sitting on the object can be moved with llSetLinkPrimitiveParams and PRIM_POSITION. This was originally a mis-feature but according to Andrew Linden LL has decided to support it.
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.
Example:
llSetLinkPrimitiveParams(llGetNumberOfPrims(), [PRIM_POSITION, <x,y,z>]);

See also: functions

See also: articles

History

Shared wiki helpers

The original page also injects shared parameter notes, caveats or issue information through these helpers. Their conditional MediaWiki logic is not reproduced here; inspect the preserved helper source for additional material.

Template:Issues/SVC-2105

Original shared helper source (conditional wiki logic is not evaluated)
{{Issues|SVC-2105|'''llSetLinkListPrimitiveParams'''() for setting multiple, specific linked items|type=nf|resolution=wont}}

Template:LSL Function/link-face

Original shared helper source (conditional wiki logic is not evaluated)
{{LSL Injection Test}}{{#if:{{{1|}}}|{{LSL Function/link|{{{1}}}|nogroup={{{nogroup|}}}}}}}{{#if:{{{2|}}}|{{LSL_Function/face|{{{2}}}}}}}{{#if:

{{#vardefine:also_functions|{{#var:also_functions}}
{{LSL DefineRow||[[llGetLinkNumberOfSides]]|Returns the number of faces of the linked prim.}}}}

}}

Template:LSL PrimitiveParam Categorize

Original shared helper source (conditional wiki logic is not evaluated)
{{#if:{{#pos:{{#var:moded}}|r}}{{#pos:{{#var:moded}}|u}}||{{#vardefine:hidden-text|{{#var:hidden-text}}
{{#ifexist:Template:LSLC{{#var:lang}}|
 {{LSLC{{#var:lang}}|PrimitiveParams}}
 {{LSLC{{#var:lang}}|PrimitiveParams/{{{1}}}}}
 {{LSLC{{#var:lang}}|{{{1}}}}}
|
 {{LSLC|PrimitiveParams{{#var:lang}}}}
 {{LSLC|PrimitiveParams/{{{1}}}{{#var:lang}}}}
 {{LSLC|{{{1}}}{{#var:lang}}}}
}}
}}}}
Original wiki source

Some wiki templates and tables need their original context. View this article on the Second Life Wiki. Technical wording and examples are retained from the source; historical guidance may differ from current behavior.