LlSetPrimitiveParams
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:
- How long does it force the script to sleep?
- : Zero: llSetLinkPrimitiveParamsFast
- : 200 milliseconds: llSetPrimitiveParams llSetLinkPrimitiveParams
- Does it have a
linkparameter? - : No: llSetPrimitiveParams
- : Yes: llSetLinkPrimitiveParams llSetLinkPrimitiveParamsFast
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.
- This occurs because the llSetLinkPrimitiveParamsFast payload is being executed asynchronously, while llSetPrimitiveParams and llSetLinkPrimitiveParams payloads are executed synchronously (or the delay makes it appear synchronous).
Specification
Archived set parameter table from Template:LSL Constants/PrimitiveParams. Variable-based or conditional cells retain their original syntax.
| Flag | V | Description | Usage | ||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 ]
| ||||||||||||||||||||||||||||||||||||||||||||||||
| PRIM_GLTF_BASE_COLOR | 48 | Sets the prim's GLTF Material Base Color map attributes. This parameter's arguments are GLTF overrides.
| [ 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
| [ 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.
- When testing vectors and rotations use llVecDist and llAngleBetween (respectively) to perform fuzzy tests.
- 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. |
|---|---|
| |
| Combining function calls |
|---|
|
|
// 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
- Date of release llSetLinkPrimitiveParams 21-02-2007 or 14-03-2007
- Date of release llSetLinkPrimitiveParamsFast 29-03-2010
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.
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.