<?xml version="1.0"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>Second Life Wiki - User contributions [en]</title>
		<link>https://wiki.secondlife.com/wiki/Special:Contributions/Maestro_Linden</link>
		<description>User contributions</description>
		<language>en</language>
		<generator>MediaWiki 1.42.1</generator>
		<lastBuildDate>Tue, 16 Jun 2026 05:31:00 GMT</lastBuildDate>
		<item>
			<title>Category:LSL Float</title>
			<link>https://wiki.secondlife.com/w/index.php?title=Category:LSL_Float&amp;diff=1218752</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=Category:LSL_Float&amp;diff=1218752</guid>
			<description>&lt;p&gt;Maestro Linden: add caveat that float equality comparison is not a good approach&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header|ml=*}}&lt;br /&gt;
{{RightToc}}{{LSLC|}}{{LSLC|Types}}&lt;br /&gt;
The LSL &amp;quot;float&amp;quot; type is a {{wikipedia|Floating point|floating point}} data type that uses 32 bit in {{Wikipedia|IEEE_floating_point|IEEE-754}} form. &lt;br /&gt;
If a number is written with a decimal point in LSL, then it is taken to be a float.&lt;br /&gt;
&lt;br /&gt;
The valid range is 1.401298464E-45 to 3.402823466E+38 &lt;br /&gt;
&lt;br /&gt;
Floats can be specified in scientific notation such as 2.6E-5.&lt;br /&gt;
&lt;br /&gt;
If a function requires a float as a parameter, and the number is an integer (e.g. 5), you can add the .0 to clearly indicate it&#039;s a float, but omitting the .0 is equally valid and actually saves bytecode space in the compiled code.&lt;br /&gt;
&lt;br /&gt;
When dividing 2 constants, defining them as floats will avoid the chance of unwanted rounding down. Better still, do the math on your calculator and save the server some cycles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;float min = 1.175494351E-38;&lt;br /&gt;
float max = 3.402823466E+38;&lt;br /&gt;
float sci = 2.6E-5;&lt;br /&gt;
float sci_a = 2.6E+3;&lt;br /&gt;
float sci_b = 2.6E3;&lt;br /&gt;
float sci_c = 26000.E-1;&lt;br /&gt;
float f = 2600; //implicitly typecast to a float&lt;br /&gt;
float E = 85.34859;&lt;br /&gt;
float cast = (float)&amp;quot;42&amp;quot;; //explicit typecast to a float&lt;br /&gt;
float hex_float = (float)&amp;quot;0x1.5p5&amp;quot;; // C99 style hex floats are allowed when cast from strings, but not as direct literals&lt;br /&gt;
float Infintity = (float)&amp;quot;inf&amp;quot;; //-- may be negative, will cause a math error if evaluated in LSO, see &#039;caveats&#039; below&lt;br /&gt;
float NotANumber = (float)&amp;quot;nan&amp;quot;; //-- may be negative, will cause a math error if evaluated in LSO, see &#039;caveats&#039; bleow&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
== Useful Snippets ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em&amp;quot;&amp;gt;&lt;br /&gt;
If you need to validate an arbitrary float without limitations then the following function is ideal:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;integer isValidFloat(string s) { return (string)((float)s) != (string)((float)(&amp;quot;-&amp;quot; + llStringTrim(s, STRING_TRIM_HEAD))); }&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, the following is more efficient, but comes with the noted caveats. If these are not an issue to you then it is the recommended option, particularly under Mono:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;integer isValidFloat(string s) { return (float)(s + &amp;quot;1&amp;quot;) != 0.0; }&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Caveats&#039;&#039;&#039;:&lt;br /&gt;
* LSO-LSL scientific notation with an exponent greater than 38 will fail (throw a Math Error). Mono is unaffected as it supports &amp;lt;code&amp;gt;infinity&amp;lt;/code&amp;gt;&lt;br /&gt;
* Under both Mono and LSO-LSL you may find strange results if dealing with strings containing more than 9 decimal places. Remember that string casting in LSL only gives up to 6 so is safe, and human input is rarely going to be that accurate, plus values that small are not usually all that useful.&lt;br /&gt;
* Due to the limited precision with which floats are stored, not all integer values can be accurately held in a float: only the values between -16,777,216 and 16,777,216 are precise. Between +/-16,777,216 and +/-33,554,432 values are rounded to even numbers, beyond +/-33,544,432 they are rounded to multiples of 4, etc. The rounding is towards the nearest value, or towards zero if both are equally far.&lt;br /&gt;
* &amp;quot;nan&amp;quot; (not-a-number), &amp;quot;inf&amp;quot; (infinity) and their negatives are special text values that can be cast from a string (with any leading spaces or trailing characters). those values will cause a math error when the variable is evaluated in LSO. If you are parsing user data, by casting a string to a float, use the following code (replacing vStrDta with your string variable name) see [https://jira.secondlife.com/browse/SVC-6847 SVC-6847]: &amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;(float)llList2String( llParseStringKeepNulls( llToLower( llStringTrim( vStrDta, STRING_TRIM ) ), [&amp;quot;inf&amp;quot;, &amp;quot;nan&amp;quot;], [] ), 0 )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Under both Mono and LSO-LSL, equality comparisons between two float values are not recommended.  Instead, consider comparison with a small tolerance value, such as: &amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;llAbs(a - b) &amp;lt; epsilon&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
However, both of the above snippets will stop validating at the first character that is not valid in a float string. The following code rigorously validates the whole of a string to ensure it represents a float (and nothing else), at the cost of speed and memory footprint.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// Validate a string containing a float value&lt;br /&gt;
// Does not handle scientific notation, or hex floats (!!)&lt;br /&gt;
// After all, this is designed for 95% of likely human entered data&lt;br /&gt;
&lt;br /&gt;
integer  ValidateSimpleFloat(string sin)&lt;br /&gt;
{&lt;br /&gt;
    sin = llToLower(sin);&lt;br /&gt;
    // Avoid run time fail (for lslEditor at least) if string looks remotely like scientific notation &lt;br /&gt;
    if (llSubStringIndex(sin, &amp;quot;e&amp;quot;) != -1)   	return FALSE; 	&lt;br /&gt;
    list temp = llParseStringKeepNulls(sin, [&amp;quot;.&amp;quot;], [] );&lt;br /&gt;
    string subs = llList2String(temp, 0);&lt;br /&gt;
    if ( (string) ( (integer) subs) != subs)    return FALSE;&lt;br /&gt;
    if ( (temp != []) &amp;gt; 2)                      return FALSE;&lt;br /&gt;
    if ( (temp != [])== 2)&lt;br /&gt;
    {&lt;br /&gt;
	subs = llList2String(temp, 1);    // extract the decimal part&lt;br /&gt;
        // must have no sign after DP, so handle first decimal discretely&lt;br /&gt;
	string first = llGetSubString(subs, 0, 0);&lt;br /&gt;
	if ( (string) ( (integer) first) != first)     return FALSE;  &lt;br /&gt;
	if ( (string) ( (integer) subs)  != subs)      return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    return TRUE;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Float-to-String ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em&amp;quot;&amp;gt;&lt;br /&gt;
There are several ways to convert a float to a string. The first of which is to typecast it to a string &amp;lt;code&amp;gt;(string)(1.0)&amp;lt;/code&amp;gt;. This however has the disadvantage of rounding and being limited to six decimal places. Several functions have been written to provide more options. They fall into two categories, lossless and lossy.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; {{Prettytable}}&lt;br /&gt;
|+ Lossy functions&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! Name &lt;br /&gt;
! title=&amp;quot;Infinity / NaN support&amp;quot; {{!}} inf/nan&lt;br /&gt;
! Rounding&lt;br /&gt;
! Truncation&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Typecast&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| &amp;lt;code&amp;gt;(string)float_value&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Mono only gives [https://jira.secondlife.com/browse/SCR-397?focusedCommentId=340847&amp;amp;page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-340847 6 digits of precision].&lt;br /&gt;
|-&lt;br /&gt;
| [[Format Decimal]]&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Float2String]]&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; {{Prettytable}}&lt;br /&gt;
|+ Lossless functions&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! Name &lt;br /&gt;
! Speed&lt;br /&gt;
! Reversible&lt;br /&gt;
! title=&amp;quot;Infinity / NaN support&amp;quot; {{!}} inf/nan support&lt;br /&gt;
! [[PI]]&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| [[Float2Hex]]&lt;br /&gt;
| Fast&lt;br /&gt;
| &amp;lt;code&amp;gt;(float)&amp;lt;/code&amp;gt;&lt;br /&gt;
| No&lt;br /&gt;
| 0x6487ED5p-25&lt;br /&gt;
| Since the output is in the Hexadecimal Scientific Notation, it&#039;s not really human readable.&lt;br /&gt;
|-&lt;br /&gt;
| [[Float2Sci]]&lt;br /&gt;
| Slow&lt;br /&gt;
| &amp;lt;code&amp;gt;(float)&amp;lt;/code&amp;gt;&lt;br /&gt;
| No&lt;br /&gt;
| 3.1415925&lt;br /&gt;
| Useful when you want the result to be lossless but also human readable, comes at the cost of speed.&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Strife_Onizuka/Float_Functions#Base64-Float|FUIS]]&lt;br /&gt;
| Fastest&lt;br /&gt;
| [[User:Strife_Onizuka/Float_Functions#Base64-Float|SIUF]]&lt;br /&gt;
| No&lt;br /&gt;
| &amp;quot;QEkP2g&amp;quot;&lt;br /&gt;
| Not at all human readable. Guarantied to always use six characters.&lt;br /&gt;
|}&lt;br /&gt;
*Infinity is only accessible in Mono. &lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</description>
			<pubDate>Tue, 31 Mar 2026 18:26:33 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Category_talk:LSL_Float</comments>
		</item>
		<item>
			<title>Template:LSL Constants/Permissions</title>
			<link>https://wiki.secondlife.com/w/index.php?title=Template:LSL_Constants/Permissions&amp;diff=1218610</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=Template:LSL_Constants/Permissions&amp;diff=1218610</guid>
			<description>&lt;p&gt;Maestro Linden: add missing (but empty) cell to table&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{{!}} {{Prettytable|style=margin-top:0;}}&lt;br /&gt;
{{!}}-{{Hl2}}&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; {{!}} Constants&lt;br /&gt;
! Action&lt;br /&gt;
! Category&lt;br /&gt;
! Granter&lt;br /&gt;
! title=&amp;quot;Automatically granted when requested if one of the specified preconditions are met.&amp;quot; {{!}} Automatically granted when&amp;amp;hellip;&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} [[PERMISSION_DEBIT]]&lt;br /&gt;
{{!}} {{LSL Hex|0x2|2}}&lt;br /&gt;
{{!}} take money from agent&#039;s account&lt;br /&gt;
{{!}} {{LSLGC|Money}}&lt;br /&gt;
{{!}} Owner&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} [[PERMISSION_TAKE_CONTROLS]]&lt;br /&gt;
{{!}} {{LSL Hex|0x4|4}}&lt;br /&gt;
{{!}} take agent&#039;s [[control|controls]]&lt;br /&gt;
{{!}} {{LSLGC|Controls|Control}}&lt;br /&gt;
{{!}} Anyone&lt;br /&gt;
{{!}} sat on, attached&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} [[PERMISSION_TRIGGER_ANIMATION]]&lt;br /&gt;
{{!}} {{LSL Hex|0x10|16}}&lt;br /&gt;
{{!}} start or stop [[llStartAnimation|Animations]] on agent&lt;br /&gt;
{{!}} {{LSLGC|Animation}}&lt;br /&gt;
{{!}} Anyone&lt;br /&gt;
{{!}} sat on, attached&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} [[PERMISSION_ATTACH]]&lt;br /&gt;
{{!}} {{LSL Hex|0x20|32}}&lt;br /&gt;
{{!}} [[llAttachToAvatar|attach]]/[[llDetachFromAvatar|detach]] from agent&lt;br /&gt;
{{!}} {{LSLGC|Attachment}}&lt;br /&gt;
{{!}} [[llAttachToAvatar|Owner]] or [[llAttachToAvatarTemp|Anyone]]&lt;br /&gt;
{{!}} attached&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} [[PERMISSION_CHANGE_LINKS]]&lt;br /&gt;
{{!}} {{LSL Hex|0x80|128}}&lt;br /&gt;
{{!}} change {{LSLGC|Link|links}}&lt;br /&gt;
{{!}} {{LSLGC|Link}}&lt;br /&gt;
{{!}} Owner&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} [[PERMISSION_TRACK_CAMERA]]&lt;br /&gt;
{{!}} {{LSL Hex|0x400|1024}}&lt;br /&gt;
{{!}} track the agent&#039;s {{LSLGC|Camera|camera}} [[Position|position]] and [[rotation]]&lt;br /&gt;
{{!}} {{LSLGC|Camera}}&lt;br /&gt;
{{!}} Anyone&lt;br /&gt;
{{!}} sat on, attached&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} [[PERMISSION_CONTROL_CAMERA]]&lt;br /&gt;
{{!}} {{LSL Hex|0x800|2048}}&lt;br /&gt;
{{!}} control the agent&#039;s camera &amp;lt;br /&amp;gt;([[LlSetCameraParams Test|must be sat on or attached; automatically revoked on stand or detach]])&lt;br /&gt;
{{!}} {{LSLGC|Camera}}&lt;br /&gt;
{{!}} Anyone&lt;br /&gt;
{{!}} sat on, attached&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} [[PERMISSION_TELEPORT]]&lt;br /&gt;
{{!}} {{LSL Hex|0x1000|4096}}&lt;br /&gt;
{{!}} [[llTeleportAgent|teleport]] the agent&lt;br /&gt;
{{!}} {{LSLGC|Teleport}}&lt;br /&gt;
{{!}} Anyone{{Footnote|handle=teleport|[[PERMISSION_TELEPORT]] cannot be held by [[llAttachToAvatarTemp|temporary attachments]].|PERMISSION_TELEPORT cannot be held be attachments.}}&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} [[PERMISSION_SILENT_ESTATE_MANAGEMENT]]&lt;br /&gt;
{{!}} {{LSL Hex|0x4000|16384}}&lt;br /&gt;
{{!}} [[llManageEstateAccess|manage estate access]] without notifying the owner of changes&lt;br /&gt;
{{!}} {{LSLGC|Estate}}&lt;br /&gt;
{{!}} Owner&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} [[PERMISSION_OVERRIDE_ANIMATIONS]]&lt;br /&gt;
{{!}} {{LSL Hex|0x8000|32768}}&lt;br /&gt;
{{!}} configure the overriding of default [[llStartAnimation|animations]] on agent&lt;br /&gt;
{{!}} {{LSLGC|Animation}}&lt;br /&gt;
{{!}} Anyone&lt;br /&gt;
{{!}} attached&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} [[PERMISSION_RETURN_OBJECTS]]&lt;br /&gt;
{{!}} {{LSL Hex|0x10000|65536}}&lt;br /&gt;
{{!}} Used by [[llReturnObjectsByOwner]] and [[llReturnObjectsByID]] to return objects from parcels&lt;br /&gt;
{{!}} {{LSLGC|Cleanup}}&lt;br /&gt;
{{!}} Owner, Group Owner&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} [[PERMISSION_PRIVILEGED_LAND_ACCESS]]&lt;br /&gt;
{{!}} {{LSL Hex|0x80000|524288}}&lt;br /&gt;
{{!}} Grants the script privileged access to land parcel functions, such as parcel sale. Used by [[llSetParcelForSale]].&lt;br /&gt;
{{!}} {{LSLGC|Land}}&lt;br /&gt;
{{!}} Owner&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{#ifeq:{{{flags|}}}|all|&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} &#039;&#039;&#039;Permissions without functions:&#039;&#039;&#039;&amp;lt;br&amp;gt;These flags lack functions that depend on them.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} [[PERMISSION_REMAP_CONTROLS]]&lt;br /&gt;
{{!}} {{LSL Hex|0x8|8}}&lt;br /&gt;
{{!}} Permission to remap agent&#039;s controls.&lt;br /&gt;
{{!}} {{LSLGC|Controls|Control}}&lt;br /&gt;
{{!}} Anyone&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} [[PERMISSION_RELEASE_OWNERSHIP]]&lt;br /&gt;
{{!}} {{LSL Hex|0x40|64}}&lt;br /&gt;
{{!}} Permission to release ownership. &amp;lt;br /&amp;gt;the concept of public objects has been removed from SL&lt;br /&gt;
{{!}} ???&lt;br /&gt;
{{!}} Owner&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} [[PERMISSION_CHANGE_JOINTS]]&lt;br /&gt;
{{!}} {{LSL Hex|0x100|256}}&lt;br /&gt;
{{!}} Permission to change joints.&lt;br /&gt;
{{!}} ???&lt;br /&gt;
{{!}} Owner&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} [[PERMISSION_CHANGE_PERMISSIONS]]&lt;br /&gt;
{{!}} {{LSL Hex|0x200|512}}&lt;br /&gt;
{{!}} Permission to change asset permissions.&lt;br /&gt;
{{!}} {{LSLGC|Permissions/Asset}}&lt;br /&gt;
{{!}} Owner&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} PERMISSION_EXPERIENCE&lt;br /&gt;
{{!}} {{LSL Hex|0x2000|8192}}&lt;br /&gt;
{{!}} Permission for object to join experience???&lt;br /&gt;
{{!}} {{LSLGC|Permissions/Experience}}&lt;br /&gt;
{{!}} Owner&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} PERMISSION_SIT&lt;br /&gt;
{{!}} {{LSL Hex|0x20000|131072}}&lt;br /&gt;
{{!}} Permission to sit on a object.&amp;lt;br/&amp;gt;This is used internally for experience permissions.&lt;br /&gt;
{{!}} {{LSLGC|Permissions/Experience}}&lt;br /&gt;
{{!}} Anyone&lt;br /&gt;
{{!}} in experience&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} PERMISSION_CHANGE_ENVIRONMENT&lt;br /&gt;
{{!}} {{LSL Hex|0x40000|262144}}&lt;br /&gt;
{{!}} Permission to change environment settings.&amp;lt;br/&amp;gt;This is used internally for experience permissions.&lt;br /&gt;
{{!}} {{LSLGC|Permissions/Experience}}&lt;br /&gt;
{{!}} Anyone&lt;br /&gt;
{{!}} in experience&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} unknown&lt;br /&gt;
{{!}} {{LSL Hex|0x1|1}}&lt;br /&gt;
{{!}} unknown&lt;br /&gt;
{{!}} ???&lt;br /&gt;
{{!}} Anyone&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} unknown&lt;br /&gt;
{{!}} {{LSL Hex|0x10000|65536}}&amp;amp;nbsp;&amp;lt;&amp;amp;nbsp;Value&lt;br /&gt;
{{!}} unknown&lt;br /&gt;
{{!}} ???&lt;br /&gt;
{{!}} Anyone&lt;br /&gt;
{{!}} &lt;br /&gt;
}}&lt;br /&gt;
{{!}}}&amp;lt;noinclude&amp;gt;{{LSL Constants/Permissions|flags=all}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Mon, 02 Feb 2026 23:29:40 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Template_talk:LSL_Constants/Permissions</comments>
		</item>
		<item>
			<title>PERMISSION PRIVILEGED LAND ACCESS</title>
			<link>https://wiki.secondlife.com/w/index.php?title=PERMISSION_PRIVILEGED_LAND_ACCESS&amp;diff=1218609</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=PERMISSION_PRIVILEGED_LAND_ACCESS&amp;diff=1218609</guid>
			<description>&lt;p&gt;Maestro Linden: create page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Constant&lt;br /&gt;
|name=PERMISSION_PRIVILEGED_LAND_ACCESS&lt;br /&gt;
|type=integer&lt;br /&gt;
|value=524288&lt;br /&gt;
|desc=Required Permission to use the llSetParcelForSale() function.&lt;br /&gt;
|examples&lt;br /&gt;
|functions=&lt;br /&gt;
{{LSL DefineRow||[[llSetParcelForSale]]|}}&lt;br /&gt;
|events&lt;br /&gt;
|cat1&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
|self&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Mon, 02 Feb 2026 23:27:04 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:PERMISSION_PRIVILEGED_LAND_ACCESS</comments>
		</item>
		<item>
			<title>LlGetInventoryKey</title>
			<link>https://wiki.secondlife.com/w/index.php?title=LlGetInventoryKey&amp;diff=1218585</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=LlGetInventoryKey&amp;diff=1218585</guid>
			<description>&lt;p&gt;Maestro Linden: Fix erroneous mention about errors being shouted on DEBUG channel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func_id=175|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llGetInventoryKey|return_type=key|p1_type=string|p1_name=name&lt;br /&gt;
|func_footnote=If {{LSLP|name}} is not [[llGetInventoryPermMask|copy, mod, trans]] then the return is {{LSL Const|NULL_KEY|key|&amp;amp;quot;00000000-0000-0000-0000-000000000000&amp;amp;quot;|c=Evaluates to false in conditionals just like invalid keys.}}.&amp;lt;br/&amp;gt;Use [[llGetInventoryType]] instead of this function to verify the existence of inventory.&lt;br /&gt;
|func_desc&lt;br /&gt;
|sort=GetInventoryKey&lt;br /&gt;
|return_text=that is the [[UUID]] of the inventory {{LSLP|name}}&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=*Inventory items are records that usually &#039;&#039;point&#039;&#039; to assets, but they are not the actual assets.&lt;br /&gt;
**Multiple inventory items can point to the same asset and return the same key.&lt;br /&gt;
**Some newly created inventory entries get default keys until they are edited and saved:&lt;br /&gt;
***Newly created notecard entries use [[NULL_KEY]] at present, until they are edited and saved.&lt;br /&gt;
***Newly created script entries point to the &amp;quot;[[Hello Avatar]]&amp;quot; script (&amp;quot;d0d40b7c-e32b-3bcb-3346-2be8470093c0&amp;quot; at this writing, not a guaranteed default) until they are edited and saved.&lt;br /&gt;
***Most other inventory entries are given unique asset keys at creation time.&lt;br /&gt;
**When an asset is &amp;quot;edited&amp;quot; a new asset key is assigned to the edit. The inventory item used to open the asset for editing is updated with the new asset key.&lt;br /&gt;
***No other inventory items that share the original asset are updated with the new asset key.&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// Put this script in an empty prim, and drag a full-perm texture into the prim&#039;s contents to find out its UUID&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_INVENTORY)    // if there has been a change to the prim&#039;s contents ...&lt;br /&gt;
        {&lt;br /&gt;
            string name = llGetInventoryName(INVENTORY_TEXTURE, 0);&lt;br /&gt;
            if (name)        // if a texture exists ...&lt;br /&gt;
            {&lt;br /&gt;
                key uuid = llGetInventoryKey(name);&lt;br /&gt;
                if (uuid)    // if the uuid is valid ...&lt;br /&gt;
                    llOwnerSay( &amp;quot;The UUID of &#039;&amp;quot; + name + &amp;quot;&#039; is &amp;quot; + (string) uuid);&lt;br /&gt;
                else         // texture was not full-perm&lt;br /&gt;
                    llOwnerSay( &amp;quot;The UUID of &#039;&amp;quot; + name + &amp;quot;&#039; could not be determined&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;string item = &amp;quot;Default&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(&amp;quot;Touch to get information about \&amp;quot;&amp;quot; + item + &amp;quot;\&amp;quot;.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        integer type = llGetInventoryType(item);&lt;br /&gt;
        integer index = llListFindList([ INVENTORY_NONE, &lt;br /&gt;
            INVENTORY_TEXTURE, INVENTORY_SOUND, INVENTORY_LANDMARK, INVENTORY_CLOTHING, &lt;br /&gt;
            INVENTORY_OBJECT, INVENTORY_NOTECARD, INVENTORY_SCRIPT, INVENTORY_BODYPART, &lt;br /&gt;
            INVENTORY_ANIMATION, INVENTORY_GESTURE], [type]);&lt;br /&gt;
        string name = llList2String([&amp;quot;does not exist&amp;quot;, &lt;br /&gt;
            &amp;quot;texture&amp;quot;, &amp;quot;sound&amp;quot;, &amp;quot;landmark&amp;quot;, &amp;quot;clothing&amp;quot;,&lt;br /&gt;
            &amp;quot;object&amp;quot;, &amp;quot;notecard&amp;quot;, &amp;quot;script&amp;quot;, &amp;quot;body part&amp;quot;,&lt;br /&gt;
            &amp;quot;animation&amp;quot;, &amp;quot;gesture&amp;quot;], index);&lt;br /&gt;
&lt;br /&gt;
        llOwnerSay(&amp;quot;Type: &amp;quot; + name);&lt;br /&gt;
        &lt;br /&gt;
        if(type == INVENTORY_NONE)&lt;br /&gt;
            return;&lt;br /&gt;
        &lt;br /&gt;
        integer owner_perms = llGetInventoryPermMask(item, MASK_OWNER);&lt;br /&gt;
        list perms;&lt;br /&gt;
        if(owner_perms &amp;amp; PERM_COPY)&lt;br /&gt;
            perms += &amp;quot;Copy&amp;quot;;&lt;br /&gt;
        &lt;br /&gt;
        if(owner_perms &amp;amp; PERM_MODIFY)&lt;br /&gt;
            perms += &amp;quot;Modify&amp;quot;;&lt;br /&gt;
        &lt;br /&gt;
        if(owner_perms &amp;amp; PERM_TRANSFER)&lt;br /&gt;
            perms += &amp;quot;Transfer&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        if(owner_perms &amp;amp; PERM_MOVE)&lt;br /&gt;
            perms += &amp;quot;Move&amp;quot;;&lt;br /&gt;
        &lt;br /&gt;
        llOwnerSay(&amp;quot;Perms: &amp;quot; + llList2CSV(perms));&lt;br /&gt;
        &lt;br /&gt;
        integer temp = PERM_COPY | PERM_MODIFY | PERM_TRANSFER;&lt;br /&gt;
        if((owner_perms &amp;amp; temp) != temp)&lt;br /&gt;
            return;&lt;br /&gt;
&lt;br /&gt;
        llOwnerSay(&amp;quot;Key: &amp;quot; + (string)llGetInventoryKey(item));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryAcquireTime]]|Returns the time the item was added to the prim&#039;s inventory}}&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryName]]|Returns the inventory item&#039;s name}}&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryType]]|Tests to see if an inventory item exists and returns its type}}&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryNumber]]|Returns the number of items of a specific type in inventory}}&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryPermMask]]|Returns the inventory item&#039;s permissions}}&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryCreator]]|Returns the inventory item&#039;s creator}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes=*The UUID returned is that of the asset to which the inventory item points, it is not the UUID of the inventory item itself. The assets themselves are immutable (they never change, they are only ever created and deleted); this allows multiple inventory handles to refer to the same asset without having to duplicate the asset. When it appears an asset is being modified, it is saved as a new asset. The consequence of this is that multiple copies of items in inventory all share the same asset UUID.&lt;br /&gt;
*It is still possible to inspect the UUID of any animation in inventory by triggering it and using [[llGetAnimationList|llGetAnimationList()]] like so:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;llStartAnimation(&amp;quot;myAnim&amp;quot;);&lt;br /&gt;
llOwnerSay(&amp;quot;myAnim&#039;s UUID is &amp;quot; + llList2String(llGetAnimationList(llGetPermissionsKey()), -1));&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|history=&lt;br /&gt;
* 0.2 - Introduced during the closed beta period.&lt;br /&gt;
* 1.2 - Restricted to full perm inventory items only.&lt;br /&gt;
* 1.24 - Objects and scripts no longer return their actual UUID but a hash (i.e. pseudo UUID which is consistent with the object/script) instead. -- {{JIRA|SVC-3670}}&lt;br /&gt;
&amp;lt;sup&amp;gt;The preceding version numbers are approximations.&amp;lt;/sup&amp;gt;&lt;br /&gt;
|cat1=Inventory&lt;br /&gt;
|cat2=Key&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Mon, 12 Jan 2026 17:26:04 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:LlGetInventoryKey</comments>
		</item>
		<item>
			<title>LlGetInventoryKey</title>
			<link>https://wiki.secondlife.com/w/index.php?title=LlGetInventoryKey&amp;diff=1218510</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=LlGetInventoryKey&amp;diff=1218510</guid>
			<description>&lt;p&gt;Maestro Linden: Remove dubious reference to &amp;#039;client cooperation&amp;#039; in caveats list.  llGetInventoryKey&amp;#039;s output should not depend on which viewer was used to add the queried item to prim inventory.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{Issues/SVC-3670}}{{Issues/SVC-4050}}{{Issues/SVC-6374}}{{LSL_Function/inventory|name|uuid=false}}&lt;br /&gt;
|func_id=175|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llGetInventoryKey|return_type=key|p1_type=string|p1_name=name&lt;br /&gt;
|func_footnote=If {{LSLP|name}} is not [[llGetInventoryPermMask|copy, mod, trans]] then the return is {{LSL Const|NULL_KEY|key|&amp;amp;quot;00000000-0000-0000-0000-000000000000&amp;amp;quot;|c=Evaluates to false in conditionals just like invalid keys.}}.&amp;lt;br/&amp;gt;Use [[llGetInventoryType]] instead of this function to verify the existence of inventory.&lt;br /&gt;
|func_desc&lt;br /&gt;
|sort=GetInventoryKey&lt;br /&gt;
|return_text=that is the [[UUID]] of the inventory {{LSLP|name}}&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=*Inventory items are records that usually &#039;&#039;point&#039;&#039; to assets, but they are not the actual assets.&lt;br /&gt;
**Multiple inventory items can point to the same asset and return the same key.&lt;br /&gt;
**Some newly created inventory entries get default keys until they are edited and saved:&lt;br /&gt;
***Newly created notecard entries use [[NULL_KEY]] at present, until they are edited and saved.&lt;br /&gt;
***Newly created script entries point to the &amp;quot;[[Hello Avatar]]&amp;quot; script (&amp;quot;d0d40b7c-e32b-3bcb-3346-2be8470093c0&amp;quot; at this writing, not a guaranteed default) until they are edited and saved.&lt;br /&gt;
***Most other inventory entries are given unique asset keys at creation time.&lt;br /&gt;
**When an asset is &amp;quot;edited&amp;quot; a new asset key is assigned to the edit. The inventory item used to open the asset for editing is updated with the new asset key.&lt;br /&gt;
***No other inventory items that share the original asset are updated with the new asset key.&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// Put this script in an empty prim, and drag a full-perm texture into the prim&#039;s contents to find out its UUID&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_INVENTORY)    // if there has been a change to the prim&#039;s contents ...&lt;br /&gt;
        {&lt;br /&gt;
            string name = llGetInventoryName(INVENTORY_TEXTURE, 0);&lt;br /&gt;
            if (name)        // if a texture exists ...&lt;br /&gt;
            {&lt;br /&gt;
                key uuid = llGetInventoryKey(name);&lt;br /&gt;
                if (uuid)    // if the uuid is valid ...&lt;br /&gt;
                    llOwnerSay( &amp;quot;The UUID of &#039;&amp;quot; + name + &amp;quot;&#039; is &amp;quot; + (string) uuid);&lt;br /&gt;
                else         // texture was not full-perm&lt;br /&gt;
                    llOwnerSay( &amp;quot;The UUID of &#039;&amp;quot; + name + &amp;quot;&#039; could not be determined&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;string item = &amp;quot;Default&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(&amp;quot;Touch to get information about \&amp;quot;&amp;quot; + item + &amp;quot;\&amp;quot;.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        integer type = llGetInventoryType(item);&lt;br /&gt;
        integer index = llListFindList([ INVENTORY_NONE, &lt;br /&gt;
            INVENTORY_TEXTURE, INVENTORY_SOUND, INVENTORY_LANDMARK, INVENTORY_CLOTHING, &lt;br /&gt;
            INVENTORY_OBJECT, INVENTORY_NOTECARD, INVENTORY_SCRIPT, INVENTORY_BODYPART, &lt;br /&gt;
            INVENTORY_ANIMATION, INVENTORY_GESTURE], [type]);&lt;br /&gt;
        string name = llList2String([&amp;quot;does not exist&amp;quot;, &lt;br /&gt;
            &amp;quot;texture&amp;quot;, &amp;quot;sound&amp;quot;, &amp;quot;landmark&amp;quot;, &amp;quot;clothing&amp;quot;,&lt;br /&gt;
            &amp;quot;object&amp;quot;, &amp;quot;notecard&amp;quot;, &amp;quot;script&amp;quot;, &amp;quot;body part&amp;quot;,&lt;br /&gt;
            &amp;quot;animation&amp;quot;, &amp;quot;gesture&amp;quot;], index);&lt;br /&gt;
&lt;br /&gt;
        llOwnerSay(&amp;quot;Type: &amp;quot; + name);&lt;br /&gt;
        &lt;br /&gt;
        if(type == INVENTORY_NONE)&lt;br /&gt;
            return;&lt;br /&gt;
        &lt;br /&gt;
        integer owner_perms = llGetInventoryPermMask(item, MASK_OWNER);&lt;br /&gt;
        list perms;&lt;br /&gt;
        if(owner_perms &amp;amp; PERM_COPY)&lt;br /&gt;
            perms += &amp;quot;Copy&amp;quot;;&lt;br /&gt;
        &lt;br /&gt;
        if(owner_perms &amp;amp; PERM_MODIFY)&lt;br /&gt;
            perms += &amp;quot;Modify&amp;quot;;&lt;br /&gt;
        &lt;br /&gt;
        if(owner_perms &amp;amp; PERM_TRANSFER)&lt;br /&gt;
            perms += &amp;quot;Transfer&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        if(owner_perms &amp;amp; PERM_MOVE)&lt;br /&gt;
            perms += &amp;quot;Move&amp;quot;;&lt;br /&gt;
        &lt;br /&gt;
        llOwnerSay(&amp;quot;Perms: &amp;quot; + llList2CSV(perms));&lt;br /&gt;
        &lt;br /&gt;
        integer temp = PERM_COPY | PERM_MODIFY | PERM_TRANSFER;&lt;br /&gt;
        if((owner_perms &amp;amp; temp) != temp)&lt;br /&gt;
            return;&lt;br /&gt;
&lt;br /&gt;
        llOwnerSay(&amp;quot;Key: &amp;quot; + (string)llGetInventoryKey(item));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryAcquireTime]]|Returns the time the item was added to the prim&#039;s inventory}}&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryName]]|Returns the inventory item&#039;s name}}&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryType]]|Tests to see if an inventory item exists and returns its type}}&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryNumber]]|Returns the number of items of a specific type in inventory}}&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryPermMask]]|Returns the inventory item&#039;s permissions}}&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryCreator]]|Returns the inventory item&#039;s creator}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes=*The UUID returned is that of the asset to which the inventory item points, it is not the UUID of the inventory item itself. The assets themselves are immutable (they never change, they are only ever created and deleted); this allows multiple inventory handles to refer to the same asset without having to duplicate the asset. When it appears an asset is being modified, it is saved as a new asset. The consequence of this is that multiple copies of items in inventory all share the same asset UUID.&lt;br /&gt;
*It is still possible to inspect the UUID of any animation in inventory by triggering it and using [[llGetAnimationList|llGetAnimationList()]] like so:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;llStartAnimation(&amp;quot;myAnim&amp;quot;);&lt;br /&gt;
llOwnerSay(&amp;quot;myAnim&#039;s UUID is &amp;quot; + llList2String(llGetAnimationList(llGetPermissionsKey()), -1));&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|history=&lt;br /&gt;
* 0.2 - Introduced during the closed beta period.&lt;br /&gt;
* 1.2 - Restricted to full perm inventory items only.&lt;br /&gt;
* 1.24 - Objects and scripts no longer return their actual UUID but a hash (i.e. pseudo UUID which is consistent with the object/script) instead. -- {{JIRA|SVC-3670}}&lt;br /&gt;
&amp;lt;sup&amp;gt;The preceding version numbers are approximations.&amp;lt;/sup&amp;gt;&lt;br /&gt;
|cat1=Inventory&lt;br /&gt;
|cat2=Key&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Tue, 04 Nov 2025 19:40:20 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:LlGetInventoryKey</comments>
		</item>
		<item>
			<title>Template:LSL Constants/Parcel</title>
			<link>https://wiki.secondlife.com/w/index.php?title=Template:LSL_Constants/Parcel&amp;diff=1218447</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=Template:LSL_Constants/Parcel&amp;diff=1218447</guid>
			<description>&lt;p&gt;Maestro Linden: Scrub references to unsupported parcel flags&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#if:{{{wrap|}}}|{{!}}}}&lt;br /&gt;
{{{!}} class=&amp;quot;sortable&amp;quot; {{Prettytable|style=margin-top:0;margin-bottom:0;}}&lt;br /&gt;
{{!}}-{{Hl2}}&lt;br /&gt;
! title=&amp;quot;Flag&amp;quot; {{!}} Flag&lt;br /&gt;
! title=&amp;quot;Value&amp;quot; {{!}} Value&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; {{!}} Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} {{LSL Const|PARCEL_FLAG_ALLOW_FLY|integer|1|hex=0x00000001|c=find if a parcel allows flying}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} {{#var:comment}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} {{LSL Const|PARCEL_FLAG_ALLOW_SCRIPTS|integer|2|hex=0x00000002|c=find if a parcel allows outside scripts}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} {{#var:comment}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} {{LSL Const|PARCEL_FLAG_ALLOW_LANDMARK|integer|8|hex=0x00000008|c=find if a parcel allows landmarks to be created}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} {{#var:comment}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} {{LSL Const|PARCEL_FLAG_ALLOW_TERRAFORM|integer|16|hex=0x00000010|c=find if a parcel allows anyone to terraform the land}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} {{#var:comment}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} {{LSL Const|PARCEL_FLAG_ALLOW_DAMAGE|integer|32|hex=0x00000020|c=find if a parcel allows damage}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} {{#var:comment}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} {{LSL Const|PARCEL_FLAG_ALLOW_CREATE_OBJECTS|integer|64|hex=0x00000040|c=find if a parcel allows anyone to create objects}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} {{#var:comment}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} {{LSL Const|PARCEL_FLAG_USE_ACCESS_GROUP|integer|256|hex=0x00000100|c=find if a parcel limits access to a group}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} {{#var:comment}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} {{LSL Const|PARCEL_FLAG_USE_ACCESS_LIST|integer|512|hex=0x00000200|c=find if a parcel limits access to a list of residents}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} {{#var:comment}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} {{LSL Const|PARCEL_FLAG_USE_BAN_LIST|integer|1024|hex=0x00000400|c=find if a parcel uses a ban list, including restricting access based on payment info}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} {{#var:comment}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} {{LSL Const|PARCEL_FLAG_USE_LAND_PASS_LIST|integer|2048|hex=0x00000800|c=find if a parcel allows passes to be purchased}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} {{#var:comment}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} {{LSL Const|PARCEL_FLAG_LOCAL_SOUND_ONLY|integer|32768|hex=0x00008000|c=find if a parcel restricts spatialized sound to the parcel}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} {{#var:comment}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}} {{LSL Const|PARCEL_FLAG_RESTRICT_PUSHOBJECT|integer|2097152|hex=0x00200000|c=find if a parcel restricts llPushObject}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} find if a parcel restricts [[llPushObject]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{LSL Const|PARCEL_FLAG_ALLOW_GROUP_SCRIPTS|integer|hex=0x02000000|c=find if a parcel allows scripts owned by group}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} {{#var:comment}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{LSL Const|PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS|integer|hex=0x04000000|c=find if a parcel allows object creation by group members or objects}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} {{#var:comment}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{LSL Const|PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY|integer|hex=0x08000000|c=find if a parcel allows all objects to enter a parcel}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} {{#var:comment}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{LSL Const|PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY|integer|hex=0x10000000|c=find if a parcel only allows group (and owner) objects to enter the parcel}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} {{#var:comment}}&lt;br /&gt;
{{!}}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{{{FULLPAGENAME}}|valid=*}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Tue, 02 Sep 2025 18:26:56 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Template_talk:LSL_Constants/Parcel</comments>
		</item>
		<item>
			<title>Template:LSL Constants/Experience Tools Errors</title>
			<link>https://wiki.secondlife.com/w/index.php?title=Template:LSL_Constants/Experience_Tools_Errors&amp;diff=1218420</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=Template:LSL_Constants/Experience_Tools_Errors&amp;diff=1218420</guid>
			<description>&lt;p&gt;Maestro Linden: Clarify that XP_ERROR_STORAGE_EXCEPTION can be triggered when calling llCreateKeyValue on a key that already exists (which is probably the cause of most cases of this error)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{{!}} class=&amp;quot;sortable&amp;quot; {{prettytable}}&lt;br /&gt;
{{!}}- {{hl2}}&lt;br /&gt;
! {{!}} LSL Constant&lt;br /&gt;
! title=&amp;quot;Value&amp;quot; {{!}}&lt;br /&gt;
! {{!}} Message returned via [[llGetExperienceErrorMessage]]&lt;br /&gt;
! {{!}} Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[XP_ERROR_NONE]]&lt;br /&gt;
{{!}} 0&lt;br /&gt;
{{!}} no error&lt;br /&gt;
{{!}} No error was detected.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[XP_ERROR_THROTTLED]]&lt;br /&gt;
{{!}} 1&lt;br /&gt;
{{!}} exceeded throttle&lt;br /&gt;
{{!}} The call failed due to too many recent calls.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[XP_ERROR_EXPERIENCES_DISABLED]]&lt;br /&gt;
{{!}} 2&lt;br /&gt;
{{!}} experiences are disabled&lt;br /&gt;
{{!}} The region currently has experiences disabled.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[XP_ERROR_INVALID_PARAMETERS]]&lt;br /&gt;
{{!}} 3&lt;br /&gt;
{{!}} invalid parameters&lt;br /&gt;
{{!}} One of the string arguments was too big to fit in the key-value store.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[XP_ERROR_NOT_PERMITTED]]&lt;br /&gt;
{{!}} 4&lt;br /&gt;
{{!}} operation not permitted&lt;br /&gt;
{{!}} Experience permissions were denied by the user.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[XP_ERROR_NO_EXPERIENCE]]&lt;br /&gt;
{{!}} 5&lt;br /&gt;
{{!}} script not associated with an experience&lt;br /&gt;
{{!}} This script is not associated with an experience.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[XP_ERROR_NOT_FOUND]]&lt;br /&gt;
{{!}} 6&lt;br /&gt;
{{!}} not found&lt;br /&gt;
{{!}} The sim was unable to verify the validity of the experience.  Retrying after a short wait is advised.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[XP_ERROR_INVALID_EXPERIENCE]]&lt;br /&gt;
{{!}} 7&lt;br /&gt;
{{!}} invalid experience&lt;br /&gt;
{{!}} The script is associated with an experience that no longer exists.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[XP_ERROR_EXPERIENCE_DISABLED]]&lt;br /&gt;
{{!}} 8&lt;br /&gt;
{{!}} experience is disabled&lt;br /&gt;
{{!}} The experience owner has temporarily disabled the experience.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[XP_ERROR_EXPERIENCE_SUSPENDED]]&lt;br /&gt;
{{!}} 9&lt;br /&gt;
{{!}} experience is suspended&lt;br /&gt;
{{!}} The experience has been suspended by Linden Lab customer support.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[XP_ERROR_UNKNOWN_ERROR]]&lt;br /&gt;
{{!}} 10&lt;br /&gt;
{{!}} unknown error&lt;br /&gt;
{{!}} An unknown error not covered by any of the other predetermined error states.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[XP_ERROR_QUOTA_EXCEEDED]]&lt;br /&gt;
{{!}} 11&lt;br /&gt;
{{!}} experience data quota exceeded&lt;br /&gt;
{{!}} An attempt to write data to the key-value store failed due to the data quota being met.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[XP_ERROR_STORE_DISABLED]]&lt;br /&gt;
{{!}} 12&lt;br /&gt;
{{!}} key-value store is disabled&lt;br /&gt;
{{!}} They key-value store is currently disabled on this region.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[XP_ERROR_STORAGE_EXCEPTION]]&lt;br /&gt;
{{!}} 13&lt;br /&gt;
{{!}} key-value store communication failed&lt;br /&gt;
{{!}} Unable to communicate with the key-value store, or attempted to create key that already exists&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[XP_ERROR_KEY_NOT_FOUND]]&lt;br /&gt;
{{!}} 14&lt;br /&gt;
{{!}} key doesn&#039;t exist&lt;br /&gt;
{{!}} They requested key does not exist.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[XP_ERROR_RETRY_UPDATE]]&lt;br /&gt;
{{!}} 15&lt;br /&gt;
{{!}} retry update&lt;br /&gt;
{{!}} A checked update failed due to an out of date request.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[XP_ERROR_MATURITY_EXCEEDED]]&lt;br /&gt;
{{!}} 16&lt;br /&gt;
{{!}} experience content rating too high&lt;br /&gt;
{{!}} The content rating of the experience exceeds that of the region.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[XP_ERROR_NOT_PERMITTED_LAND]]&lt;br /&gt;
{{!}} 17&lt;br /&gt;
{{!}} not allowed to run on this land&lt;br /&gt;
{{!}} The experience is blocked or not enabled for this land.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[XP_ERROR_REQUEST_PERM_TIMEOUT]]&lt;br /&gt;
{{!}} 18&lt;br /&gt;
{{!}} experience permissions request timed out&lt;br /&gt;
{{!}} The request for experience permissions was ignored.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}}&lt;/div&gt;</description>
			<pubDate>Wed, 13 Aug 2025 19:18:19 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Template_talk:LSL_Constants/Experience_Tools_Errors</comments>
		</item>
		<item>
			<title>LlSetLinkGLTFOverrides</title>
			<link>https://wiki.secondlife.com/w/index.php?title=LlSetLinkGLTFOverrides&amp;diff=1218191</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=LlSetLinkGLTFOverrides&amp;diff=1218191</guid>
			<description>&lt;p&gt;Maestro Linden: add note about base color and alpha overrides being coupled.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{LSL Function/color|color}}{{LSL_Function/link-face|link|face}}&lt;br /&gt;
|func=llSetLinkGLTFOverrides&lt;br /&gt;
|func_desc=Sets or removes individual overrides applied to a PBR texture on a face&lt;br /&gt;
|p1_type= integer|p1_name= link|p1_desc= &lt;br /&gt;
|p2_type= integer|p2_name= face|p2_desc= &lt;br /&gt;
|p3_type= list|p3_name= params|p3_desc= List of overrides and override values.&lt;br /&gt;
|constants=&lt;br /&gt;
{{LSL Constants/GLTF Overrides}}&lt;br /&gt;
|caveats=&lt;br /&gt;
* {{LSLP|OVERRIDE_GLTF_BASE_COLOR_FACTOR}} and {{LSLP|OVERRIDE_GLTF_BASE_ALPHA}} parameters are coupled.  If an override is set for one parameter, then the other is automatically given an override.  The default {{LSLP|OVERRIDE_GLTF_BASE_COLOR_FACTOR}} is &amp;lt;1,1,1&amp;gt;, and the default {{LSLP|OVERRIDE_GLTF_BASE_ALPHA}} is 1.0.&lt;br /&gt;
|examples&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[LlSetPrimitiveParams]]|Sets the parameters for a prim}}&lt;br /&gt;
{{LSL DefineRow||[[LlGetPrimitiveParams]]|Gets the parameters set on a prim}}&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Experience&lt;br /&gt;
|cat2=Permissions/Experience&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Mon, 21 Apr 2025 19:49:56 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:LlSetLinkGLTFOverrides</comments>
		</item>
		<item>
			<title>PRIM GLTF BASE COLOR</title>
			<link>https://wiki.secondlife.com/w/index.php?title=PRIM_GLTF_BASE_COLOR&amp;diff=1218190</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=PRIM_GLTF_BASE_COLOR&amp;diff=1218190</guid>
			<description>&lt;p&gt;Maestro Linden: add caveat about tint_color and alpha overrides being coupled&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:glTF]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;{{#if:&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:normal_return|an empty list.}}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:normal_const|{{LSL Const|PRIM_GLTF_BASE_COLOR|integer|48|c=Used to {{GetSet|{{{1|}}}|get|set|/}} the [[GLTF Overrides|GLTF]] base color override of an object&#039;s face}}}}&lt;br /&gt;
&lt;br /&gt;
{{LSL_Function/angle|rotation_in_radians}}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:p_repeats_desc|x and y range from -10000.0 to 10000.0. Negative values flip the texture (z is ignored)}}&lt;br /&gt;
{{#vardefine:p_offsets_desc|x and y range from -1.0 to 1.0. (z is ignored)}}&lt;br /&gt;
{{#vardefine:p_tint_color_desc|tint color in linear RGB}}&lt;br /&gt;
{{#vardefine:p_alpha_desc|opacity in the range 0.0 to 1.0}}&lt;br /&gt;
{{#vardefine:p_alpha_mode_desc|alpha mode: [[PRIM_GLTF_ALPHA_MODE_OPAQUE]], [[PRIM_GLTF_ALPHA_MODE_BLEND]] or [[PRIM_GLTF_ALPHA_MODE_MASK]]}}&lt;br /&gt;
{{#vardefine:p_alpha_mask_cutoff_desc|cutoff value for alpha masking mode in the range 0.0 to 1.0}}&lt;br /&gt;
{{#vardefine:p_double_sided_desc|render material as double sided}}&lt;br /&gt;
&lt;br /&gt;
{{LSL_Function/inventory|texture|uuid=true|type=texture|no_caveat={{#ifeq:{{{1|}}}|get|true|&amp;lt;noinclude&amp;gt;*&amp;lt;/noinclude&amp;gt;}}|full={{{remote|}}}|remote={{#ifeq:{{{1|set}}}|get|*}}|target=PRIM_GLTF_BASE_COLOR#Target}}&lt;br /&gt;
&lt;br /&gt;
{{#ifeq:{{{1|}}}|none||&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:facetable|{{#var:facetable}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [ {{#var:normal_const}} ]&lt;br /&gt;
{{!}} {{#var:normal_return}} }}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:caveats_get|&lt;br /&gt;
* {{LSLP|repeats}} is not only used to get the number of repeats but the sign of the individual components indicate if &amp;quot;Flip&amp;quot; is set.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:caveats_set|&lt;br /&gt;
* {{LSLP|repeats}} is not only used to set the number of repeats but the sign of the individual components is also used to set the &amp;quot;Flip&amp;quot; attribute.&lt;br /&gt;
* To clear any override parameters, supply an empty string (&amp;quot;&amp;quot;) in the parameter slot.&lt;br /&gt;
* {{LSLP|tint_color}} is in linear RGB color space, unlike legacy tint that uses sRGB. Use [[llsRGB2Linear]] and [[llLinear2sRGB]] to perform conversions.&lt;br /&gt;
}}&lt;br /&gt;
* {{LSLP|tint_color}} and {{LSLP|alpha}} parameters are coupled.  If an override is set for one parameter, then the other is automatically given an override.  The default {{LSLP|tint_color}} is &amp;lt;1,1,1&amp;gt;, and the default {{LSLP|alpha}} is 1.0.&lt;br /&gt;
&lt;br /&gt;
{{#ifeq:{{{1|}}}|get|&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:caveats|{{#var:caveats}}&lt;br /&gt;
{{#var:caveats_get}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:caveats|{{#var:caveats}}&lt;br /&gt;
{{#var:caveats_set}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{:PRIM TEXGEN|{{{1|}}}}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:shared_caveat|* In the [[PRIM_TEXGEN_DEFAULT|default]] [[PRIM_TEXGEN|texture mapping]] {{LSLP|tg_type|mode}} the [[PRIM_GLTF_BASE_COLOR|texture]] {{LSLP|repeats}} units are in texture repeats per face. In the [[PRIM_TEXGEN_PLANAR|planar]] texture mapping mode the texture {{LSLP|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.}}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:caveats|{{#var:caveats}}&lt;br /&gt;
{{#var:shared_caveat}}}}&lt;br /&gt;
&lt;br /&gt;
}}&amp;lt;/onlyinclude&amp;gt;{{#if:&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:caveats_set|{{#var:caveats}}{{#vardefine:caveats|}}}}&lt;br /&gt;
{{#vardefine:issues_set|{{#var:issues}}{{#vardefine:issues|}}}}&lt;br /&gt;
&lt;br /&gt;
{{LSL_Function/face|face|{{#var:normal_const}}|!footer=*|return={{#var:normal_return}}}}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:caveats_get|{{#var:caveats}}{{#vardefine:caveats|}}&lt;br /&gt;
{{#var:caveats_get}}&lt;br /&gt;
{{#var:shared_caveat}}}}&lt;br /&gt;
{{#vardefine:issues_get|{{#var:issues}}{{#vardefine:issues|}}}}&lt;br /&gt;
&lt;br /&gt;
}}{{LSL Constant&lt;br /&gt;
|inject-2={{LSL PrimitiveParam Categorize|Face}}&lt;br /&gt;
|name=PRIM_GLTF_BASE_COLOR&lt;br /&gt;
|type=integer&lt;br /&gt;
|value=48&lt;br /&gt;
|desc=Used to get or set the [[GLTF Overrides|GLTF]] base color override of an object&#039;s {{LSLP|face}}.&lt;br /&gt;
|examples=&lt;br /&gt;
|pa={{LSL Constant/List|i_front=[&amp;amp;#32;{{#var:normal_const}},&amp;amp;#32;|i_end=&amp;amp;nbsp;]|&lt;br /&gt;
|inject-1={{#vardefine:p_texture_desc|}}&lt;br /&gt;
{{#vardefine:p_texture_hover|}}&lt;br /&gt;
{{#vardefine:direction|_set}}&lt;br /&gt;
{{LSL_Function/inventory|texture|uuid=true|type=texture}}&lt;br /&gt;
|text=Used with [[llSetPrimitiveParams]] &amp;amp; [[llSetLinkPrimitiveParams]].&lt;br /&gt;
&lt;br /&gt;
{{LSL Generic/Caveats|issues={{#var:issues_set}}|title=*|h=4}}&lt;br /&gt;
&lt;br /&gt;
|toc=llSetPrimitiveParams&lt;br /&gt;
|i1_type=integer|i1_name=face&lt;br /&gt;
|i2_type=string|i2_name=texture&lt;br /&gt;
|i3_type=vector|i3_name=repeats&lt;br /&gt;
|i4_type=vector|i4_name=offsets&lt;br /&gt;
|i5_type=float|i5_name=rotation_in_radians|i5_disp=rot&lt;br /&gt;
|i6_type=vector|i6_name=tint_color&lt;br /&gt;
|i7_type=float|i7_name=alpha&lt;br /&gt;
|i8_type=integer|i8_name=alpha_mode&lt;br /&gt;
|i9_type=float|i9_name=alpha_mask_cutoff&lt;br /&gt;
|i10_type=integer|i10_name=double_sided&lt;br /&gt;
}}&lt;br /&gt;
|pb={{LSL Constant/List|i_front=[[llGetPrimitiveParams]]([&amp;amp;nbsp;{{#var:normal_const}},&amp;amp;#32;|i_end=&amp;amp;nbsp;]);|&lt;br /&gt;
|inject-1={{#vardefine:p_texture_desc|}}&lt;br /&gt;
{{#vardefine:p_texture_hover|}}&lt;br /&gt;
{{#vardefine:direction|_get}}&lt;br /&gt;
{{LSL_Function/inventory|texture|uuid=true|type=texture|no_caveat=true|full={{{remote|}}}|remote=*|target=#Target}}&lt;br /&gt;
{{LSL Function/link|link|nogroup=*|nocaveats=*}}&lt;br /&gt;
|r_front=Returns the list [&amp;amp;nbsp;|r_end=&amp;amp;nbsp;]&lt;br /&gt;
|text=&lt;br /&gt;
{{LSL Generic/Caveats|caveats={{#var:caveats_get}}{{#vardefine:caveats_get}}|issues={{#var:issues_get}}|title=*|h=4}}&lt;br /&gt;
====Target====&lt;br /&gt;
In the case of llGetPrimitiveParams is either the prim the script resides in, or the prim specified by the immediately prior [[PRIM_LINK_TARGET]] call. However in the case of llGetLinkPrimitiveParams, it is either the value of the {{LSLP|link}} parameter, or the prim specified by the immediately prior [[PRIM_LINK_TARGET]] call.&lt;br /&gt;
|toc=llGetPrimitiveParams&lt;br /&gt;
|i1_type=integer|i1_name=face&lt;br /&gt;
|r1_type=string|r1_name=texture&lt;br /&gt;
|r2_type=vector|r2_name=repeats&lt;br /&gt;
|r3_type=vector|r3_name=offsets&lt;br /&gt;
|r4_type=float|r4_name=rotation_in_radians|r4_disp=rot&lt;br /&gt;
|r5_type=vector|r5_name=tint_color&lt;br /&gt;
|r6_type=float|r6_name=alpha&lt;br /&gt;
|r7_type=integer|r7_name=alpha_mode&lt;br /&gt;
|r8_type=float|r8_name=alpha_mask_cutoff&lt;br /&gt;
|r9_type=integer|r9_name=double_sided&lt;br /&gt;
}}&lt;br /&gt;
|functions=&lt;br /&gt;
{{LSL DefineRow||[[llSetPrimitiveParams]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llSetLinkPrimitiveParams]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetPrimitiveParams]]|}}&lt;br /&gt;
|events&lt;br /&gt;
|location&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Texture&lt;br /&gt;
|cat2=&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Mon, 21 Apr 2025 19:45:04 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:PRIM_GLTF_BASE_COLOR</comments>
		</item>
		<item>
			<title>LlIsLinkGLTFMaterial</title>
			<link>https://wiki.secondlife.com/w/index.php?title=LlIsLinkGLTFMaterial&amp;diff=1218163</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=LlIsLinkGLTFMaterial&amp;diff=1218163</guid>
			<description>&lt;p&gt;Maestro Linden: Clarify link number behavior&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func_id=|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llIsLinkGLTFMaterial&lt;br /&gt;
|return_type=integer&lt;br /&gt;
|p1_type=integer|p1_name=link|p1_desc=Link to inspect for PBR, may be [[LINK_THIS]] or [[LINK_ROOT]]&lt;br /&gt;
|p2_type=integer|p2_name=face|p2_desc=&#039;&#039;&#039;Face&#039;&#039;&#039; to examine for PBR, or [[ALL_SIDES]]&lt;br /&gt;
|return_text=that is [[TRUE]] if the material is PBR and [[FALSE]] if it is [[PBR_Materials#Nomenclature_changes|Blinn-Phong]] diffuse texture on &#039;&#039;&#039;face&#039;&#039;&#039;&lt;br /&gt;
|func_footnote&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=&lt;br /&gt;
* Returns [[FALSE]] if link does not exist or refers to a multi-link target (such as [[LINK_SET]]).&lt;br /&gt;
* Returns [[FALSE]] if face does not exist.&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
//Tells (on chat) if the materials are PBR&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        integer i = 0;&lt;br /&gt;
        integer max = llGetNumberOfSides();&lt;br /&gt;
        while(i &amp;lt; max)&lt;br /&gt;
        {&lt;br /&gt;
            string message = &amp;quot;Side &amp;quot; + (string)i + &amp;quot; material is &amp;quot;;&lt;br /&gt;
            if (llIsLinkGLTFMaterial(LINK_THIS, i))&lt;br /&gt;
                message += &amp;quot;GLTF/PBR&amp;quot;;&lt;br /&gt;
            else&lt;br /&gt;
                message += &amp;quot;Blinn-Phong&amp;quot;;&lt;br /&gt;
            llSay(0, message);&lt;br /&gt;
            ++i;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (llIsLinkGLTFMaterial(LINK_THIS, ALL_SIDES))&lt;br /&gt;
            llSay(0, &amp;quot;All sides are PBR&amp;quot;);&lt;br /&gt;
        else&lt;br /&gt;
            llSay(0, &amp;quot;Some sides are not PBR&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetNumberOfSides]]|Gets the number of faces on the prim}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|history&lt;br /&gt;
|cat1&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Wed, 09 Apr 2025 00:04:25 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:LlIsLinkGLTFMaterial</comments>
		</item>
		<item>
			<title>Template:LSL Constants/GroundTexture</title>
			<link>https://wiki.secondlife.com/w/index.php?title=Template:LSL_Constants/GroundTexture&amp;diff=1218143</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=Template:LSL_Constants/GroundTexture&amp;diff=1218143</guid>
			<description>&lt;p&gt;Maestro Linden: Clarify that TERRAIN_PBR_ROTATION_ uses radians as a unit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;padding: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
{{{!}} class=&amp;quot;sortable&amp;quot; {{Prettytable}}&lt;br /&gt;
{{!}}- {{Hl2}}&lt;br /&gt;
! {{!}} Constant&lt;br /&gt;
! title=&amp;quot;Value&amp;quot; {{!}}&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; {{!}} Format&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; {{!}} Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|TERRAIN_DETAIL_1|integer|0|c=Changes texture used to draw terrain level 1.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}} rowspan=&amp;quot;4&amp;quot; {{!}} [ TERRAIN_DETAIL_#, texture_id ] &lt;br /&gt;
{{!}} rowspan=&amp;quot;4&amp;quot; {{!}} &lt;br /&gt;
Sets the texture to use for the current terrain detail layer. texture_id must be the UUID of a texture or material, or the name of a texture or material in the object&#039;s inventory.&lt;br /&gt;
&lt;br /&gt;
Passing NULL_KEY or an empty string will set the terrain texture to the default.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|TERRAIN_DETAIL_2|integer|1|c=Changes texture used to draw terrain level 2.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|TERRAIN_DETAIL_3|integer|2|c=Changes texture used to draw terrain level 3.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|TERRAIN_DETAIL_4|integer|3|c=Changes texture used to draw terrain level 4.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|TERRAIN_HEIGHT_RANGE_SW|integer|4|c=Changes the south west blend range.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}} rowspan=&amp;quot;4&amp;quot; {{!}} [ TERRAIN_HEIGHT_RANGE_XX, float low, float high ]&lt;br /&gt;
{{!}} rowspan=&amp;quot;4&amp;quot; {{!}} &lt;br /&gt;
Sets the height range for terrain for texture blending in the region. low is the maximum height for texture 1 and high is the minimum height for texture 4, textures 2 and 3 will mix in between these values.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|TERRAIN_HEIGHT_RANGE_SE|integer|5|c=Changes the south east blend range.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|TERRAIN_HEIGHT_RANGE_NW|integer|6|c=Changes the north west blend range.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|TERRAIN_HEIGHT_RANGE_NE|integer|7|c=Changes the north east blend range.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|TERRAIN_PBR_SCALE_1|integer|8|c=Scales terrain texture 1.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}} rowspan=&amp;quot;4&amp;quot; {{!}} [ TERRAIN_PBR_SCALE_#, vector uv_scale ]&lt;br /&gt;
{{!}} rowspan=&amp;quot;4&amp;quot; {{!}} &lt;br /&gt;
Sets the UV scale used for each layer&#039;s terrain texture in repeats per meter. &lt;br /&gt;
&lt;br /&gt;
* The Z value of the vector is ignored. &lt;br /&gt;
* Only works for PBR textures.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|TERRAIN_PBR_SCALE_2|integer|9|c=Scales terrain texture 2.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|TERRAIN_PBR_SCALE_3|integer|10|c=Scales terrain texture 3.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|TERRAIN_PBR_SCALE_4|integer|11|c=Scales terrain texture 4.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|TERRAIN_PBR_ROTATION_1|integer|12|c=Rotates terrain texture 1.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}} rowspan=&amp;quot;4&amp;quot; {{!}} [ TERRAIN_PBR_ROTATION_#, float rotation ]&lt;br /&gt;
{{!}} rowspan=&amp;quot;4&amp;quot; {{!}} &lt;br /&gt;
Sets the rotation of the PBR texture for each layer, in radians.  &lt;br /&gt;
&lt;br /&gt;
* Only works for PBR textures.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|TERRAIN_PBR_ROTATION_2|integer|13|c=Rotates terrain texture 2.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|TERRAIN_PBR_ROTATION_3|integer|14|c=Rotates terrain texture 3.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|TERRAIN_PBR_ROTATION_4|integer|15|c=Rotates terrain texture 4.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|TERRAIN_PBR_OFFSET_1|integer|16|c=Offsets terrain texture 1.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}} rowspan=&amp;quot;4&amp;quot; {{!}} [ TERRAIN_PBR_OFFSET_#, vector uv_offset ]&lt;br /&gt;
{{!}} rowspan=&amp;quot;4&amp;quot; {{!}} &lt;br /&gt;
Sets the UV offset for drawing each terrain layer.&lt;br /&gt;
&lt;br /&gt;
* The Z value of the vector is ignored. &lt;br /&gt;
* Only works for PBR textures.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|TERRAIN_PBR_OFFSET_2|integer|17|c=Offsets terrain texture 2.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|TERRAIN_PBR_OFFSET_3|integer|18|c=Offsets terrain texture 3.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|TERRAIN_PBR_OFFSET_4|integer|19|c=Offsets terrain texture 4.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
&lt;br /&gt;
{{!}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 03 Apr 2025 22:57:40 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Template_talk:LSL_Constants/GroundTexture</comments>
		</item>
		<item>
			<title>Template:LSL Constants/Transfer Inventory</title>
			<link>https://wiki.secondlife.com/w/index.php?title=Template:LSL_Constants/Transfer_Inventory&amp;diff=1217998</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=Template:LSL_Constants/Transfer_Inventory&amp;diff=1217998</guid>
			<description>&lt;p&gt;Maestro Linden: add newline&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Transfer Options===&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;sortable&amp;quot; {{Prettytable|style=margin-top:0;}}&lt;br /&gt;
{{!}}-{{Hl2}}&lt;br /&gt;
! {{!}} Flags&lt;br /&gt;
! title=&amp;quot;Value&amp;quot; {{!}}&lt;br /&gt;
{{!}} Parameters&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot;{{!}} Description &lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|TRANSFER_DEST|integer|0|c=Destination root path in inventory.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}} [ TRANSFER_DEST, string ]&lt;br /&gt;
{{!}}Sets a root path that will be used as the parent for folder. If the root path does not exist it will be created.&lt;br /&gt;
If it already exists in the target inventory it will be reused. Path folders are separated by a &amp;quot;|&amp;quot; character. The path&lt;br /&gt;
may have have up to 4 folders in it.&lt;br /&gt;
&lt;br /&gt;
Note that transfers to certain system folders (such as &#039;Trash&#039;) are disallowed.&lt;br /&gt;
&lt;br /&gt;
Examples:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;Objects|Vehicles|My Motorcycle Company&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;Clothing|Shoes|Breedables&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;My Store|Home &amp;amp; Garden|&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|TRANSFER_FLAGS|integer|1|c=Flags for inventory transfer}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}} [ TRANSFER_FLAGS, integer ]&lt;br /&gt;
{{!}} There are no flags defined at this time.&lt;br /&gt;
{{!}}}&lt;/div&gt;</description>
			<pubDate>Fri, 28 Feb 2025 19:20:09 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Template_talk:LSL_Constants/Transfer_Inventory</comments>
		</item>
		<item>
			<title>Template:LSL Constants/Transfer Inventory</title>
			<link>https://wiki.secondlife.com/w/index.php?title=Template:LSL_Constants/Transfer_Inventory&amp;diff=1217997</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=Template:LSL_Constants/Transfer_Inventory&amp;diff=1217997</guid>
			<description>&lt;p&gt;Maestro Linden: Added note that some system folders can&amp;#039;t be transferred to&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Transfer Options===&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;sortable&amp;quot; {{Prettytable|style=margin-top:0;}}&lt;br /&gt;
{{!}}-{{Hl2}}&lt;br /&gt;
! {{!}} Flags&lt;br /&gt;
! title=&amp;quot;Value&amp;quot; {{!}}&lt;br /&gt;
{{!}} Parameters&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot;{{!}} Description &lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|TRANSFER_DEST|integer|0|c=Destination root path in inventory.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}} [ TRANSFER_DEST, string ]&lt;br /&gt;
{{!}}Sets a root path that will be used as the parent for folder. If the root path does not exist it will be created.&lt;br /&gt;
If it already exists in the target inventory it will be reused. Path folders are separated by a &amp;quot;|&amp;quot; character. The path&lt;br /&gt;
may have have up to 4 folders in it. Note that transfers to certain system folders (such as &#039;Trash&#039;) are disallowed.&lt;br /&gt;
&lt;br /&gt;
Examples:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;Objects|Vehicles|My Motorcycle Company&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;Clothing|Shoes|Breedables&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;My Store|Home &amp;amp; Garden|&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|TRANSFER_FLAGS|integer|1|c=Flags for inventory transfer}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}} [ TRANSFER_FLAGS, integer ]&lt;br /&gt;
{{!}} There are no flags defined at this time.&lt;br /&gt;
{{!}}}&lt;/div&gt;</description>
			<pubDate>Fri, 28 Feb 2025 19:19:34 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Template_talk:LSL_Constants/Transfer_Inventory</comments>
		</item>
		<item>
			<title>LlGiveAgentInventory</title>
			<link>https://wiki.secondlife.com/w/index.php?title=LlGiveAgentInventory&amp;diff=1217996</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=LlGiveAgentInventory&amp;diff=1217996</guid>
			<description>&lt;p&gt;Maestro Linden: Remove reference to Template:LSL_Function/give , which introduces a bunch of misleading caveats for the function, and added applicable caveats&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func_id=|func_sleep=3.0|func_energy=10.0|return_type=integer&lt;br /&gt;
|func=llGiveAgentInventory&lt;br /&gt;
|p1_type=key|p1_name=agent|p1_desc=agent to receive inventory offer.&lt;br /&gt;
|p2_type=string|p2_name=folder|p2_desc=destination folder name to use.&lt;br /&gt;
|p3_type=list|p3_name=inventory|p3_desc=list of inventory items to give to the agent&lt;br /&gt;
|p4_type=list|p4_name=options|p4_desc=list of options for inventory transfer.&lt;br /&gt;
|func_footnote&lt;br /&gt;
|return_text&lt;br /&gt;
|func_desc=Gives &#039;&#039;&#039;inventory&#039;&#039;&#039; items to &#039;&#039;&#039;agent&#039;&#039;&#039;, creating a new &#039;&#039;&#039;folder&#039;&#039;&#039; to put them in.&lt;br /&gt;
|spec=&lt;br /&gt;
* The target must be an avatar in the same region as the sending object, or must have recently been in the region.&lt;br /&gt;
* Places the inventory items in a newly created folder in the avatar&#039;s inventory (even if there is a folder by the same name, a new one is created).&lt;br /&gt;
* If a path of root folders has been specified, the function will ensure that those folders exist but will not recreate them if they already exist.&lt;br /&gt;
|constants={{LSL Constants/Transfer Inventory}}&lt;br /&gt;
&lt;br /&gt;
{{LSL Constants/Transfer Errors}}&lt;br /&gt;
&lt;br /&gt;
|caveats=* Any no-copy items in &#039;&#039;&#039;inventory&#039;&#039;&#039; will be excluded from transfer.&lt;br /&gt;
* Any no-transfer items in &#039;&#039;&#039;inventory&#039;&#039;&#039; will be excluded from transfer if &#039;&#039;&#039;agent&#039;&#039;&#039; is not the script owner.&lt;br /&gt;
|examples=&lt;br /&gt;
In this example, the object inventory needs to contain two objects named &#039;&#039;Item 1&#039;&#039; and &#039;&#039;Item 2&#039;&#039;. The destination folder will be named &#039;&#039;Destination Folder&#039;&#039; and will be created under the main folder &#039;&#039;Objects&#039;&#039;, in the sub-folder &#039;&#039;Subfolder&#039;&#039;. If &#039;&#039;Subfolder&#039;&#039; does not exist, it will be created.&lt;br /&gt;
&lt;br /&gt;
If the object gets touched for a second time, the sub-folder &#039;&#039;Subfolder&#039;&#039; will &#039;&#039;&#039;not&#039;&#039;&#039; be duplicated, however the destination folder &#039;&#039;Destination Folder&#039;&#039; &#039;&#039;&#039;will&#039;&#039;&#039; be duplicated.&lt;br /&gt;
&lt;br /&gt;
If &#039;&#039;Item 1&#039;&#039; and/or &#039;&#039;Item 2&#039;&#039; do not exist, the transfer will silently fail partially or completely.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        llGiveAgentInventory(llDetectedKey(0), &amp;quot;Destination Folder&amp;quot;, [&amp;quot;Item 1&amp;quot;,&amp;quot;Item 2&amp;quot;], [0, &amp;quot;Objects|Subfolder&amp;quot;] );&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llGiveInventory]]}}&lt;br /&gt;
{{LSL DefineRow||[[llGiveInventoryList]]}}&lt;br /&gt;
|also_events={{LSL DefineRow||[[changed]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes|cat1=Inventory&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 28 Feb 2025 19:16:45 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:LlGiveAgentInventory</comments>
		</item>
		<item>
			<title>LlSetClickAction</title>
			<link>https://wiki.secondlife.com/w/index.php?title=LlSetClickAction&amp;diff=1217909</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=LlSetClickAction&amp;diff=1217909</guid>
			<description>&lt;p&gt;Maestro Linden: Fixed a caveat point that mentioned CLICK_ACTION_NONE but should have said CLICK_ACTION_DISABLED instead.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{Issues/VWR-640}}{{Issues/VWR-10829}}&lt;br /&gt;
|func_id=333|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llSetClickAction&lt;br /&gt;
|p1_type=integer|p1_subtype=click_action|p1_name=action|p1_desc=CLICK_ACTION_* flag&lt;br /&gt;
|func_desc=Sets the action performed when a prim is clicked upon (aka [[click action]]).&lt;br /&gt;
|func_footnote=When the cursor hovers over the prim, its image changes to reflect the action.&lt;br /&gt;
|caveats= *When set in the root of an object the chosen CLICK_ACTION_* will be that for the children also even if they have their own [[llSetClickAction]] set (it will be over-ridden). However (in the case of [[touch]] for example) if the CLICK_ACTION_* is set in the root but not at all in the children (including not having [[touch]] [[event]] [[script]]s in them (this creates a default [[CLICK_ACTION_TOUCH]])) the effect of the roots CLICK_ACTION_* is not &#039;&#039;seen&#039;&#039; but the CLICK_ACTION_* is &#039;&#039;used&#039;&#039; on clicking. To both use &#039;&#039;&#039;and see&#039;&#039;&#039; the correct cursor the CLICK_ACTION_* flags must match in the children and root.&lt;br /&gt;
*If [[llSetClickAction]] is [[CLICK_ACTION_PAY]] then you must have a [[money]] event, or it will revert to [[CLICK_ACTION_NONE]].&lt;br /&gt;
*While this function works or attached objects (click action can be changed), the configured click action of an attachment is ignored by the viewer (with exceptions).  The viewer always* behaves as though an attached object has [[CLICK_ACTION_TOUCH]] set.&lt;br /&gt;
**The only exception to the above rule is when the chosen click action is [[CLICK_ACTION_DISABLED]], which will disable the cursor changing from the standard pointer arrow to the touch pointer.&lt;br /&gt;
* [[llSetClickAction]] has to be called &#039;&#039;&#039;before&#039;&#039;&#039; an avatar clicks on an object. Calling it while an avatar is clicking (click &amp;amp; holding) will cause this function to silently fail. You &#039;&#039;can&#039;&#039; set the click action after an avatar touches an object, but bear in mind that there may be some delay before the given avatar&#039;s viewer will update due to ping times, etc.&lt;br /&gt;
|examples={{{!}} width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
{{!}}- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;make sitting easier&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;make unpacking for next owner easier&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;make buying for customers easier&#039;&#039;&#039;&lt;br /&gt;
{{!}}- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
{{!!}}&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetClickAction(CLICK_ACTION_SIT);&lt;br /&gt;
        llRemoveInventory(llGetScriptName());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{!!}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetClickAction(CLICK_ACTION_OPEN);&lt;br /&gt;
        llRemoveInventory(llGetScriptName());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{!!}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
//  remember you&#039;ll have to set a price&lt;br /&gt;
//  in the general tab of the edit window&lt;br /&gt;
//  for your object before using this script&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetClickAction(CLICK_ACTION_BUY);&lt;br /&gt;
        llRemoveInventory(llGetScriptName());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{!}}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
//  simple tipjar&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetClickAction(CLICK_ACTION_PAY);&lt;br /&gt;
&lt;br /&gt;
    //  enabled edit field to put own amount, all quick-pay-buttons hidden&lt;br /&gt;
        llSetPayPrice(PAY_DEFAULT, [PAY_HIDE, PAY_HIDE, PAY_HIDE, PAY_HIDE]);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    money(key id, integer amount)&lt;br /&gt;
    {&lt;br /&gt;
        string name = llKey2Name(id);&lt;br /&gt;
&lt;br /&gt;
        llInstantMessage(id, &amp;quot;Thank you for the tip, &amp;quot; + name + &amp;quot;!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
//Sit Only with Permission&lt;br /&gt;
&lt;br /&gt;
list gAvWhitelist = [&amp;quot;953d10f1-44ce-462a-8bc1-f634333ee031&amp;quot;, &amp;quot;599dce91-a2b8-48c5-b96d-54965433022b&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, 0.5&amp;gt;, ZERO_ROTATION);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            list Properties = llGetObjectDetails(llGetKey(), [OBJECT_CLICK_ACTION]);&lt;br /&gt;
            integer Click = llList2Integer(Properties, 0);&lt;br /&gt;
            key Av = llAvatarOnSitTarget();&lt;br /&gt;
            if ((Av != NULL_KEY) &amp;amp;&amp;amp; (!Click))&lt;br /&gt;
            {&lt;br /&gt;
                llSay(0, &amp;quot;Please click first for permission to sit.&amp;quot;);&lt;br /&gt;
                llUnSit(Av);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        list Properties = llGetObjectDetails(llGetKey(), [OBJECT_CLICK_ACTION]);&lt;br /&gt;
        integer Click = llList2Integer(Properties, 0);&lt;br /&gt;
        if (!Click &amp;amp;&amp;amp; (~llListFindList(gAvWhitelist, [(string)llDetectedKey(0)])))&lt;br /&gt;
        {&lt;br /&gt;
            llSetClickAction(CLICK_ACTION_SIT);&lt;br /&gt;
            llSetTimerEvent(10.0);&lt;br /&gt;
            llSay(0, &amp;quot;Please take a seat.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llSetClickAction(CLICK_ACTION_TOUCH);&lt;br /&gt;
            if (llAvatarOnSitTarget() != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                llSay(0, &amp;quot;Good bye!&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llSay(0, &amp;quot;Sorry.  You are not allowed to sit here.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            llUnSit(llDetectedKey(0));&lt;br /&gt;
        }            &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
        llSetClickAction(CLICK_ACTION_TOUCH);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|spec&lt;br /&gt;
|constants=&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
==Constants==&lt;br /&gt;
{{LSL Constants/ClickAction}}&lt;br /&gt;
|signature=&lt;br /&gt;
{{LSL Const/Signature|CLICK_ACTION_ZOOM|integer|7|c=Zoom}}&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llPassTouches]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events=&lt;br /&gt;
{{LSL DefineRow||[[touch_start]]}}&lt;br /&gt;
{{LSL DefineRow||[[touch]]}}&lt;br /&gt;
{{LSL DefineRow||[[touch_end]]}}&lt;br /&gt;
|also_articles={{LSL DefineRow||{{LSLGC|Detected}}}}&lt;br /&gt;
|deepnotes=*When using [[CLICK_ACTION_SIT]], an avatar who clicks the object and sits down and then clicks the object again will fire a [[touch]] event with the second click.&lt;br /&gt;
|history=&lt;br /&gt;
* Introduced in SL Client 1.19.1(0)&lt;br /&gt;
* [[CLICK_ACTION_ZOOM]] added in SL Server 1.32 and [[Viewer_2_Help|Viewer 2]]&lt;br /&gt;
|cat1=Prim&lt;br /&gt;
|cat2=Touch&lt;br /&gt;
|cat3=Sit&lt;br /&gt;
|cat4=Money&lt;br /&gt;
|cat5=Media&lt;br /&gt;
|cat6=Effects&lt;br /&gt;
|cat7=Click Action&lt;br /&gt;
|cat8&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Tue, 28 Jan 2025 18:56:46 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:LlSetClickAction</comments>
		</item>
		<item>
			<title>Template:LSL Constants/Object Details</title>
			<link>https://wiki.secondlife.com/w/index.php?title=Template:LSL_Constants/Object_Details&amp;diff=1217907</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=Template:LSL_Constants/Object_Details&amp;diff=1217907</guid>
			<description>&lt;p&gt;Maestro Linden: remove trailing comma from OBJECT_PERMS results list&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{{!}} class=&amp;quot;sortable&amp;quot; {{Prettytable|style=margin-top:0;}}&lt;br /&gt;
{{!}}-{{Hl2}}&lt;br /&gt;
! {{!}} Flags&lt;br /&gt;
! title=&amp;quot;Value&amp;quot; {{!}}&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot;{{!}} Description&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot;{{!}} Length when [[typecast]] to a [[string]]&lt;br /&gt;
! Return&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot;{{!}} Alternatives&lt;br /&gt;
! Local&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_NAME|integer|1|c=Gets the prim&#039;s name.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&amp;lt;br/&amp;gt;If &#039;&#039;&#039;id&#039;&#039;&#039; is an avatar, the {{LSLGC|Legacy Name}} is returned. &lt;br /&gt;
{{!}}max. 63 characters&lt;br /&gt;
{{!}}[[string]] {{LSL PL|type=string|name}}&lt;br /&gt;
{{!}}&lt;br /&gt;
*[[llKey2Name]]&lt;br /&gt;
*[[llDetectedName]]&lt;br /&gt;
{{!}} [[llGetObjectName]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_DESC|integer|2|c=Gets the prim&#039;s description.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&amp;lt;br/&amp;gt;If &#039;&#039;&#039;id&#039;&#039;&#039; is an avatar, an empty string is returned.&lt;br /&gt;
{{!}}max. 127 characters&lt;br /&gt;
{{!}}[[string]] {{LSL PL|type=string|desc}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}} [[llGetObjectDesc]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_POS|integer|3|c=Gets the prim&#039;s position in region coordinates.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the prim&#039;s position in [[Viewer_coordinate_frames#Region|region coordinates]].&amp;lt;br/&amp;gt;If &#039;&#039;&#039;id&#039;&#039;&#039; is an avatar outside the region (see above), this position is relative to the region the script is [[llGetRegionName|running in]].&lt;br /&gt;
{{!}}max. 37 characters&lt;br /&gt;
{{!}}[[vector]] {{LSL PL|type=vector|pos}}&lt;br /&gt;
{{!}}&lt;br /&gt;
*[[llDetectedPos]]&lt;br /&gt;
{{!}} [[llGetPos]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_ROT|integer|4|c=Gets the prim&#039;s rotation.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}max. 48 characters&lt;br /&gt;
{{!}}[[rotation]] {{LSL PL|type=rotation|rot}}&lt;br /&gt;
{{!}}&lt;br /&gt;
*[[llDetectedRot]]&lt;br /&gt;
{{!}} [[llGetRot]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_VELOCITY|integer|5|c=Gets the object&#039;s velocity.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}36 characters&lt;br /&gt;
{{!}}[[vector]] {{LSL PL|type=vector|vel}}&lt;br /&gt;
{{!}}&lt;br /&gt;
*[[llDetectedVel]]&lt;br /&gt;
{{!}} [[llGetVel]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_OWNER|integer|6|c=Gets the object&#039;s owner key.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets an object&#039;s {{LSLGC|Owner|owner}} key.&amp;lt;br/&amp;gt;If &#039;&#039;&#039;id&#039;&#039;&#039; is an avatar, that avatar&#039;s key is returned (which is the same as &#039;&#039;&#039;id&#039;&#039;&#039;).&amp;lt;br/&amp;gt;If &#039;&#039;&#039;id&#039;&#039;&#039; is group-owned, a {{LSL Constant/NULL_KEY}} is returned.&lt;br /&gt;
{{!}}36 characters&lt;br /&gt;
{{!}}[[key]] {{LSL PL|type=key|subtype=owner}}&lt;br /&gt;
{{!}}&lt;br /&gt;
*[[llDetectedOwner]]&lt;br /&gt;
*[[llGetOwnerKey]]&lt;br /&gt;
{{!}} [[llGetOwner]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_GROUP|integer|7|c=Gets the prim&#039;s group key.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the prim&#039;s {{LSLGC|Group|group}} key.&amp;lt;br/&amp;gt;If &#039;&#039;&#039;id&#039;&#039;&#039; is an avatar, a {{LSL Constant/NULL_KEY}} is returned.{{Footnote|There are at least 3 JIRA&#039;s about OBJECT_GROUP and avatars, LL has refused all of them. Most recently on December 5th 2013 in {{JIRA|BUG-4654}}.|There are at least 3 JIRA&#039;s about OBJECT_GROUP and avatars, LL has refused all of them. Most recently on December 5th 2013 in BUG-4654.}}&lt;br /&gt;
{{!}}36 characters&lt;br /&gt;
{{!}}[[key]] {{LSL PL|type=key|group}}&lt;br /&gt;
{{!}}{{LSLGC|Group}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_CREATOR|integer|8|c=Gets the prim&#039;s creator key.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the prim&#039;s {{LSLGC|Creator|creator}} key.&amp;lt;br/&amp;gt;If &#039;&#039;&#039;id&#039;&#039;&#039; is an avatar, a {{LSL Constant/NULL_KEY}} is returned.&lt;br /&gt;
{{!}}36 characters&lt;br /&gt;
{{!}}[[key]] {{LSL PL|creator}}&lt;br /&gt;
{{!}}{{LSLGC|Creator}}&lt;br /&gt;
{{!}} [[llGetCreator]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_RUNNING_SCRIPT_COUNT|integer|9|c=Gets the number of running scripts attached to the object or agent.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the number of [[llGetScriptState|running]] scripts attached to the object or agent.&lt;br /&gt;
{{!}}max. 11 characters&lt;br /&gt;
{{!}}[[integer]] {{LSL PL|script_count|disp=count}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}[[llGetScriptState]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_TOTAL_SCRIPT_COUNT|integer|10|c=Gets the number of scripts, both running and stopped, attached to the object or agent.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the number of scripts, both running and stopped, attached to the object or agent.&lt;br /&gt;
{{!}}max. 11 characters&lt;br /&gt;
{{!}}[[integer]] {{LSL PL|script_count|disp=count}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}[[llGetInventoryNumber]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_SCRIPT_MEMORY|integer|11|c=Gets the total amount of script memory allocated to the object or agent, in bytes.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the total amount of [[LSL Script Memory|script memory]] allocated to the object or agent, in bytes. [[OBJECT_SCRIPT_MEMORY|See page for more info.]]&lt;br /&gt;
{{!}}max. 11 characters&lt;br /&gt;
{{!}}[[integer]] {{LSL PL|bytes}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_SCRIPT_TIME|integer|12|c=Gets the total amount of average script CPU time used by the object or agent, in seconds.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the total amount of average script CPU time used by the object or agent, in seconds. [[OBJECT_SCRIPT_TIME|See page for more info.]]&lt;br /&gt;
{{!}}max. 15 characters&lt;br /&gt;
{{!}}[[float]] {{LSL PL|seconds}}&lt;br /&gt;
{{!}}[[Viewerhelp:Top_Colliders_and_Top_Scripts|Top Scripts]]&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_PRIM_EQUIVALENCE|integer|13|c=Gets the prim equivalence of the object.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the prim equivalence of the object.&lt;br /&gt;
{{!}}max. 11 characters&lt;br /&gt;
{{!}}[[integer]] {{LSL PL|prim_count|disp=count}}&lt;br /&gt;
{{!}}[http://community.secondlife.com/t5/English-Knowledge-Base/Calculating-land-impact/ta-p/974163 Calculating land impact]&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_SERVER_COST|integer|14|c=Gets the server cost of the object.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the [[Mesh/Mesh_Server_Weight|server cost]] of the object.&lt;br /&gt;
{{!}}max. 15 characters&lt;br /&gt;
{{!}}[[float]] {{LSL PL|type=float|cost}}&lt;br /&gt;
{{!}}[[Mesh/Mesh_Server_Weight|Server cost]]&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_STREAMING_COST|integer|15|c=Gets the streaming (download) cost of the object.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the [[Mesh/Mesh_Streaming_Cost|streaming (download) cost]] of the object.&lt;br /&gt;
{{!}}max. 15 characters&lt;br /&gt;
{{!}}[[float]] {{LSL PL|cost}}&lt;br /&gt;
{{!}}[[Mesh/Mesh_Streaming_Cost|Streaming (download) cost]]&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_PHYSICS_COST|integer|16|c=Gets the physics cost of the object.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the [[Mesh/Mesh_physics#Physics_Resource_Cost|physics cost]] of the object.&lt;br /&gt;
{{!}}max. 15 characters&lt;br /&gt;
{{!}}[[float]] {{LSL PL|cost}}&lt;br /&gt;
{{!}}[[Mesh/Mesh_physics|Physics cost]]&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_CHARACTER_TIME|integer|17|c=Gets the average CPU time (in seconds) used by the object for navigation, if the object is a pathfinding character.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the average CPU time (in seconds) used by the object for navigation, if the object is a pathfinding character. Returns 0 for non-characters.&lt;br /&gt;
{{!}}max. 15 characters&lt;br /&gt;
{{!}}[[float]] {{LSL PL|seconds}}&lt;br /&gt;
{{!}}[[Viewerhelp:Pathfinding_characters|Pathfinding characters]]&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_ROOT|integer|18|c=Gets the id of the root prim of the object requested.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the id of the [[Link#Root_Prim|root prim]] of the object requested.&amp;lt;br/&amp;gt;If &#039;&#039;&#039;id&#039;&#039;&#039; is an avatar, returns the id of the [[Link#Root_Prim|root prim]] of the [[Link#Link_Set|linkset]] the avatar is sitting on and linked to (or the avatar&#039;s own id if the avatar is not sitting on an object within the region).&lt;br /&gt;
{{!}}36 characters&lt;br /&gt;
{{!}}[[key]] {{LSL PL|root|type=key}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}[[llGetLinkKey]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_ATTACHED_POINT|integer|19|c=Gets the attachment point to which the object is attached.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the attachment point to which the object is attached. It returns an integer matching one of the {{LSLGC|Integer/attach point|ATTACH_*}} constants.&lt;br /&gt;
{{!}}max. 11 characters&lt;br /&gt;
{{!}}[[integer]] {{LSL PL|type=integer|subtype=attach_point}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}[[llGetAttached]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_PATHFINDING_TYPE|integer|20|c=Gets the pathfinding setting of the object in the region. It returns an integer matching one of the OPT_* constants.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the pathfinding setting of the object in the region. It returns an integer matching one of the {{LSLGC|Pathfinding Types|OPT_*}} constants.&lt;br /&gt;
{{!}}max. 11 characters&lt;br /&gt;
{{!}}[[integer]] {{LSL PL|pathfinding_type|type=integer|disp=type}}&lt;br /&gt;
{{!}}[[Pathfinding_Quick_Start_Guide|Pathfinding types]]&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_PHYSICS|integer|21|c=Gets the boolean detailing if physics is enabled or disabled on the object.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the integer boolean detailing if physics is enabled or disabled on the object.&amp;lt;br/&amp;gt;If &#039;&#039;&#039;id&#039;&#039;&#039; is an {{LSLGC|Avatar|avatar}} or {{LSLGC|Attachment|attachment}}, {{HoverText|0|FALSE aka, Zero}} is returned.&lt;br /&gt;
{{!}}1 character&lt;br /&gt;
{{!}}[[integer]] {{LSL PL|type=integer|subtype=boolean}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}[[llGetStatus]] [[PRIM_PHYSICS]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_PHANTOM|integer|22|c=Gets the boolean detailing if phantom is enabled or disabled on the object.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the integer boolean detailing if phantom is enabled or disabled on the object.&amp;lt;br/&amp;gt;If &#039;&#039;&#039;id&#039;&#039;&#039; is an {{LSLGC|Avatar|avatar}} or {{LSLGC|Attachment|attachment}}, {{HoverText|0|FALSE aka, Zero}} is returned.&lt;br /&gt;
{{!}}1 character&lt;br /&gt;
{{!}}[[integer]] {{LSL PL|type=integer|subtype=boolean}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}[[llGetStatus]] [[PRIM_PHANTOM]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_TEMP_ON_REZ|integer|23|c=Gets the boolean detailing if temporary is enabled or disabled on the object.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the integer boolean detailing if temporary is enabled or disabled on the object.&lt;br /&gt;
{{!}}1 character&lt;br /&gt;
{{!}}[[integer]] {{LSL PL|type=integer|subtype=boolean}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}[[PRIM_TEMP_ON_REZ]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_RENDER_WEIGHT|integer|24|c=Gets the avatar&#039;s render weight.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&amp;lt;br/&amp;gt;If &#039;&#039;&#039;id&#039;&#039;&#039; is an object, {{HoverText|0|FALSE aka, Zero}} is returned.  If &#039;&#039;&#039;id&#039;&#039;&#039; is an avatar whose render weight is unknown to the simulator, -1 is returned.  The maximum render weight reported by the server is 500000&amp;lt;ref&amp;gt;On July 2016, {{u|Rolig Loon}} commented on [[Talk:LlGetObjectDetails#new_constants_Sep._2013|the talk page for llGetObjectDetails()]] that allegedly SL viewers are showing render weights of 1,300,000.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
{{!}}max. 6 characters&lt;br /&gt;
{{!}}[[integer]] {{LSL PL|type=integer|weight}}&lt;br /&gt;
{{!}} [[Avatar_Rendering_Cost]]&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_HOVER_HEIGHT|integer|25|c=Gets the hover height of the avatar.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the [[Hover Height|hover height]] of the avatar.&amp;lt;br&amp;gt;If &#039;&#039;&#039;id&#039;&#039;&#039; is not an avatar, 0.0 is returned. Normal values are in the range {{Interval|gte=-2.0|lte=2.0|center=hover_height}} with a default of 0.0. This value does &#039;&#039;not&#039;&#039; reflect the avatar shape&#039;s &amp;quot;Hover&amp;quot; slider, only the dynamic viewer setting.&lt;br /&gt;
{{!}}max. 9 characters&lt;br /&gt;
{{!}}[[float]] {{LSL PL|type=float|height}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_BODY_SHAPE_TYPE|integer|26|c=Gets a float which describes the sex of the body shape of the avatar.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets a float which describes the sex setting of the avatar&#039;s currently worn shape.&amp;lt;br&amp;gt;If &#039;&#039;&#039;id&#039;&#039;&#039; is not an avatar, -1.0 is returned.&amp;lt;br&amp;gt;Normal operational values are in the range {{Interval|gte=0.0|lte=1.0|center=shape}}. &lt;br /&gt;
* 0.0 is standard female setting, &lt;br /&gt;
* 1.0 is standard male setting. &lt;br /&gt;
Intermediate values with visible differences are possible with manually crafted shapes.&lt;br /&gt;
{{!}}max. 9 characters&lt;br /&gt;
{{!}}[[float]] {{LSL PL|type=float|body_shape|disp=shape}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_LAST_OWNER_ID|integer|27|c=Gets the UUID of the object&#039;s previous owner, if known.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the UUID of the object&#039;s previous owner, if known.&lt;br /&gt;
* For group-owned objects, this is the avatar that deeded the object.&lt;br /&gt;
* Returns [[NULL_KEY]] for avatars, or objects that were never transferred.&lt;br /&gt;
* A rezzed object taken back to inventory, then re-rezzed, will return its current owner key.&lt;br /&gt;
{{!}}36 characters&lt;br /&gt;
{{!}}[[key]] {{LSL PL|type=key|subtype=owner|last_owner}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_CLICK_ACTION|integer|28|c=Gets the click action of the prim.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the [[llSetClickAction|click action]] of the prim. It returns an integer matching one of the {{LSLGC|Click Action|CLICK_ACTION_*}} constants.&lt;br /&gt;
{{!}}max. 3 characters&lt;br /&gt;
{{!}}[[integer]] {{LSL PL|type=integer|subtype=click_action|action}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_OMEGA|integer|29|c=Gets the object&#039;s omega.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the object&#039;s rotational velocity (radians per second).&lt;br /&gt;
{{!}}36 characters&lt;br /&gt;
{{!}}[[vector]] {{LSL PL|type=vector|omega}}&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}} [[llGetOmega]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_PRIM_COUNT|integer|30|c=Gets the object&#039;s prim count.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the object&#039;s prim count&lt;br /&gt;
{{!}}max. 3 characters&lt;br /&gt;
{{!}}[[integer]] {{LSL PL|type=integer|count}}&lt;br /&gt;
{{!}} [[llGetObjectPrimCount]]&lt;br /&gt;
{{!}} [[llGetNumberOfPrims]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_TOTAL_INVENTORY_COUNT|integer|31|c=Gets the object&#039;s total number of inventory items.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the object&#039;s total number of [[llGetInventoryNumber|inventory items]].&lt;br /&gt;
{{!}}max. 10 characters&lt;br /&gt;
{{!}}[[integer]] {{LSL PL|type=integer|count}}&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}} [[llGetInventoryNumber]]{{PBR}}([[INVENTORY_ALL]])&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_REZZER_KEY|integer|32|c=Gets the key of the object that rezzed the object.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the key of the object that rezzed this object be it an object or an avatar.&lt;br /&gt;
{{!}}36 characters&lt;br /&gt;
{{!}}[[key]] {{LSL PL|type=key|rezzer}}&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_GROUP_TAG|integer|33|c=Gets the avatar&#039;s group tag text.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the avatar&#039;s group tag text.&amp;lt;br&amp;gt;If &#039;&#039;&#039;id&#039;&#039;&#039; is not an avatar, an empty string is returned.&lt;br /&gt;
{{!}}max. 20 bytes&lt;br /&gt;
{{!}}[[string]] {{LSL PL|type=string|text}}&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_TEMP_ATTACHED|integer|34|c=Gets the integer boolean detailing if the object is temporarily attached.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the integer boolean detailing if the object is [[llAttachToAvatarTemp|temporarily attached]].&lt;br /&gt;
{{!}}1 character&lt;br /&gt;
{{!}}[[integer]] {{LSL PL|type=integer|subtype=boolean}}&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_ATTACHED_SLOTS_AVAILABLE|integer|35|c=Gets the avatar&#039;s available attachment slot count.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the avatar&#039;s available attachment slot count.&amp;lt;br&amp;gt;If &#039;&#039;&#039;id&#039;&#039;&#039; is not an avatar, 0 is returned.&lt;br /&gt;
{{!}}max. 2 characters&lt;br /&gt;
{{!}}[[integer]] {{LSL PL|type=integer|count}}&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_CREATION_TIME|integer|36|c=Gets the object&#039;s creation time.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the object&#039;s creation time. This time is established with raw material rezzing through the build menu and with mesh uploads.&amp;lt;br&amp;gt;This time is NOT established with inventory rezzes, scripted rezzes, object modifying, copying or transferring.&amp;lt;br&amp;gt;If &#039;&#039;&#039;id&#039;&#039;&#039; is an avatar, an empty string is returned.&lt;br /&gt;
{{!}}max. 27 bytes&lt;br /&gt;
{{!}}[[string]] {{LSL PL|type=string|timestamp}}&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_SELECT_COUNT|integer|37|c=Gets the total number of agents selecting any links in the object.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the total number of agents selecting any links in the object.&amp;lt;br&amp;gt;If &#039;&#039;&#039;id&#039;&#039;&#039; is an avatar, 0 is returned.&lt;br /&gt;
{{!}}max. 3 characters&lt;br /&gt;
{{!}}[[integer]] {{LSL PL|type=integer|count}}&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_SIT_COUNT|integer|38|c=Gets the total number of agents sitting on any links in the object.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the total number of agents sitting on any links in the object.&amp;lt;br&amp;gt;If &#039;&#039;&#039;id&#039;&#039;&#039; is an avatar, 0 is returned.&lt;br /&gt;
{{!}}max. 3 characters&lt;br /&gt;
{{!}}[[integer]] {{LSL PL|type=integer|count}}&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_ANIMATED_COUNT|integer|39|c=Gets the integer boolean detailing if the object&#039;root is set to &amp;quot;Animated Mesh&amp;quot; or gets the total number of &amp;quot;Animated Mesh&amp;quot; attachments worn by an agent.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the integer boolean detailing if the object&#039;s root is set to &amp;quot;Animated Mesh&amp;quot; or gets the total number of &amp;quot;Animated Mesh&amp;quot; attachments worn by an agent.&lt;br /&gt;
{{!}}max. 1 character&lt;br /&gt;
{{!}}[[integer]] {{LSL PL|type=integer|count}}&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_ANIMATED_SLOTS_AVAILABLE|integer|40|c=Gets the avatar&#039;s available &amp;quot;Animated Mesh&amp;quot; attachment slot count.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the avatar&#039;s available &amp;quot;Animated Mesh&amp;quot; attachment slot count.&amp;lt;br&amp;gt;If &#039;&#039;&#039;id&#039;&#039;&#039; is not an avatar, 0 is returned.&lt;br /&gt;
{{!}}max. 2 characters&lt;br /&gt;
{{!}}[[integer]] {{LSL PL|type=integer|count}}&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_ACCOUNT_LEVEL|integer|41|c=Gets the account level of an avatar.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the account level of an avatar.&amp;lt;br&amp;gt;If &#039;&#039;&#039;id&#039;&#039;&#039; is not an avatar, -1 is returned.&lt;br /&gt;
* 0 is Basic account level. &lt;br /&gt;
* 1 is Premium account level.&lt;br /&gt;
* 5 is Plus account level. &lt;br /&gt;
* 10 is Premium Plus account level. &lt;br /&gt;
{{!}}max. 1 character&lt;br /&gt;
{{!}}[[integer]] {{LSL PL|type=integer|level}}&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_MATERIAL|integer|42|c=Gets the physics material for this object.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Retrieves the physics material set on this object. It returns an integer matching one of the {{LSLGC|Prim/Materials|PRIM_MATERIAL_*}} constants.&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}[[integer]] {{LSL PL|type=integer|material}}&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}} [[llGetPrimitiveParams]]&amp;lt;br&amp;gt;[[PRIM_MATERIAL]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_MASS|integer|43|c=Gets the physics mass of this object&#039;s linkset.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the mass (in Kilograms) of this object&#039;s linkset.&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}[[float]] {{LSL PL|type=float|mass}}&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}} [[llGetMassMKS]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_TEXT|integer|44|c=Gets the floating text string on this object.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Gets the floating text displayed above this object.&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}[[string]] {{LSL PL|type=string|text}}&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}} [[llGetPrimitiveParams]]&amp;lt;br&amp;gt;[[PRIM_TEXT]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_REZ_TIME|integer|45|c=Retrieves the time that this object was rezzed.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}[[string]] time&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_LINK_NUMBER|integer|46|c=Get this object&#039;s index in the linkset.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}[[integer]] link_number&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}} [[llGetLinkNumber]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_SCALE|integer|47|c=Get the size of this object.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}[[vector]] scale &lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}} [[llGetScale]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_TEXT_COLOR|integer|48|c=Gets the color of the floating text displayed above this object.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}[[vector]] color&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}} [[llGetPrimitiveParams]]&amp;lt;br&amp;gt;[[PRIM_TEXT]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_TEXT_ALPHA|integer|49|c=Gets the alpha value of the floating text displayed above this object.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}[[float]] alpha&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}} [[llGetPrimitiveParams]]&amp;lt;br&amp;gt;[[PRIM_TEXT]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_HEALTH|integer|50|c=Retrieves the health of an avatar or prim.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}[[float]] health&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}} [[llGetPrimitiveParams]]&amp;lt;br&amp;gt;[[PRIM_HEALTH]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[llGetHealth]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_DAMAGE|integer|51|c=Retrieves the amount of damage a prim inflicts on collision.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}[[float]] damage&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}} [[llGetPrimitiveParams]]&amp;lt;br&amp;gt;[[PRIM_DAMAGE]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_DAMAGE_TYPE|integer|52|c=Retrieves the type of damage a prim inflicts on collision.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}Retrieves the type of damage a prim inflicts on collision. It returns an integer that can match one of the [[:Category:LSL_Combat2#Damage_Types|DAMAGE_TYPE_*]] constants, be a custom damage type or be repurposed by a combat system.&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}[[integer]] damage_type&lt;br /&gt;
{{!}} &lt;br /&gt;
{{!}} [[llGetPrimitiveParams]]&amp;lt;br&amp;gt;[[PRIM_DAMAGE]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_PERMS|integer|53|c=Retrieves the permissions for this object.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}} Retrieves the permissions for this object as 5 integers.&lt;br /&gt;
{{!}} rowspan=2 |&lt;br /&gt;
{{!}} rowspan=2 |[[integer]] base, [[integer]] owner, [[integer]] group, [[integer]] everyone, [[integer]] next_owner&lt;br /&gt;
{{!}} rowspan=2 |&lt;br /&gt;
{{!}} rowspan=2 | [[llGetObjectPermMask]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|OBJECT_PERMS_COMBINED|integer|54|c=Retrieves the permissions for this object and all of its contents.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}} Retrieves the permissions for this object combined with all of its inventory items as 5 integers.&lt;br /&gt;
&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}}&lt;/div&gt;</description>
			<pubDate>Thu, 23 Jan 2025 23:38:08 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Template_talk:LSL_Constants/Object_Details</comments>
		</item>
		<item>
			<title>LlGetInventoryPermMask</title>
			<link>https://wiki.secondlife.com/w/index.php?title=LlGetInventoryPermMask&amp;diff=1217906</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=LlGetInventoryPermMask&amp;diff=1217906</guid>
			<description>&lt;p&gt;Maestro Linden: added note that MASK_COMBINED is not meaningful to this function - it exists for llGetObjectPermMask&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{LSL_Function/inventory|item|uuid=false}}&lt;br /&gt;
|func_id=289|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llGetInventoryPermMask|return_type=integer|return_subtype=bit field&lt;br /&gt;
|p1_type=string|p1_name=item&lt;br /&gt;
|p2_type=integer|p2_name=category|p2_desc=MASK_* flag&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=of the requested permission {{LSLP|category}} for the inventory {{LSLP|item}}&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=&lt;br /&gt;
* Note that including the [[MASK_COMBINED]] bit does not impact the output of this function, as the combined permissions are the only accessible permissions for inventory items.&lt;br /&gt;
|constants={{LSL Constants Perm Mask}}&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
if ((permsYouHave &amp;amp; permsYouWant) == permsYouWant)&lt;br /&gt;
    llSay(PUBLIC_CHANNEL, &amp;quot;You have the perms you want.&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
    llSay(PUBLIC_CHANNEL, &amp;quot;You don&#039;t have the perms you want.&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer ownerPerms = llGetInventoryPermMask(&amp;quot;inventory item name goes here&amp;quot;, MASK_OWNER);&lt;br /&gt;
integer copyAndModPerms = PERM_COPY | PERM_MODIFY;&lt;br /&gt;
&lt;br /&gt;
if ((ownerPerms &amp;amp; copyAndModPerms) == copyAndModPerms)&lt;br /&gt;
    llSay(PUBLIC_CHANNEL, &amp;quot;Owner has copy &amp;amp; modify perms.&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
    llSay(PUBLIC_CHANNEL, &amp;quot;Owner does not have copy &amp;amp; modify perms.&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
string getPermsAsReadableString(integer perm)&lt;br /&gt;
{&lt;br /&gt;
    integer fullPerms = PERM_COPY | PERM_MODIFY | PERM_TRANSFER;&lt;br /&gt;
    integer copyModPerms = PERM_COPY | PERM_MODIFY;&lt;br /&gt;
    integer copyTransPerms = PERM_COPY | PERM_TRANSFER;&lt;br /&gt;
    integer modTransPerms = PERM_MODIFY | PERM_TRANSFER;&lt;br /&gt;
 &lt;br /&gt;
    string output = &amp;quot; perms: &amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    if ((perm &amp;amp; fullPerms) == fullPerms)&lt;br /&gt;
        output += &amp;quot;full&amp;quot;;&lt;br /&gt;
    else if ((perm &amp;amp; copyModPerms) == copyModPerms)&lt;br /&gt;
        output += &amp;quot;copy &amp;amp; modify&amp;quot;;&lt;br /&gt;
    else if ((perm &amp;amp; copyTransPerms) == copyTransPerms)&lt;br /&gt;
        output += &amp;quot;copy &amp;amp; transfer&amp;quot;;&lt;br /&gt;
    else if ((perm &amp;amp; modTransPerms) == modTransPerms)&lt;br /&gt;
        output += &amp;quot;modify &amp;amp; transfer&amp;quot;;&lt;br /&gt;
    else if ((perm &amp;amp; PERM_COPY) == PERM_COPY)&lt;br /&gt;
        output += &amp;quot;copy&amp;quot;;&lt;br /&gt;
    else if ((perm &amp;amp; PERM_TRANSFER) == PERM_TRANSFER)&lt;br /&gt;
        output += &amp;quot;transfer&amp;quot;;&lt;br /&gt;
    else&lt;br /&gt;
        output += &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    //  Remember, items in Second Life must have either&lt;br /&gt;
    //  PERM_COPY or PERM_TRANSFER when &amp;quot;talking about&amp;quot;&lt;br /&gt;
    //  owner perms or perms for next owner.&lt;br /&gt;
&lt;br /&gt;
    return  output;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string inventoryItemName = &amp;quot;inventory item name goes here&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        integer basePerms      = llGetInventoryPermMask(inventoryItemName, MASK_BASE);&lt;br /&gt;
        integer ownerPerms     = llGetInventoryPermMask(inventoryItemName, MASK_OWNER);&lt;br /&gt;
        integer nextOwnerPerms = llGetInventoryPermMask(inventoryItemName, MASK_NEXT);&lt;br /&gt;
        integer groupPerms     = llGetInventoryPermMask(inventoryItemName, MASK_GROUP);&lt;br /&gt;
        integer everyonePerms  = llGetInventoryPermMask(inventoryItemName, MASK_EVERYONE);&lt;br /&gt;
&lt;br /&gt;
        llSay(0, &amp;quot;/me [&amp;quot; + inventoryItemName&lt;br /&gt;
            + &amp;quot;]: base&amp;quot; + getPermsAsReadableString(basePerms));&lt;br /&gt;
        llSay(0, &amp;quot;/me [&amp;quot; + inventoryItemName&lt;br /&gt;
            + &amp;quot;]: owner&amp;quot; + getPermsAsReadableString(ownerPerms));&lt;br /&gt;
        llSay(0, &amp;quot;/me [&amp;quot; + inventoryItemName&lt;br /&gt;
            + &amp;quot;]: next owner&amp;quot; + getPermsAsReadableString(nextOwnerPerms));&lt;br /&gt;
        llSay(0, &amp;quot;/me [&amp;quot; + inventoryItemName&lt;br /&gt;
            + &amp;quot;]: group&amp;quot; + getPermsAsReadableString(groupPerms));&lt;br /&gt;
        llSay(0, &amp;quot;/me [&amp;quot; + inventoryItemName&lt;br /&gt;
            + &amp;quot;]: everyone&amp;quot; + getPermsAsReadableString(everyonePerms));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
To test for the opposite (e.g. to see if something is NOT copy):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
    if (!(PERM_COPY &amp;amp; llGetInventoryPermMask(myitem, MASK_OWNER)))&lt;br /&gt;
        llSay(PUBLIC_CHANNEL, &amp;quot;/me [&amp;quot; + myitem + &amp;quot;]: owner doesn&#039;t have copy perms.&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To remind the next owner what permissions to set before selling on&lt;br /&gt;
choose which need to be set;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
CheckPerms()&lt;br /&gt;
{        &lt;br /&gt;
    string item = llGetScriptName();&lt;br /&gt;
    integer nextOwnerPerms = llGetInventoryPermMask(item, MASK_NEXT);&lt;br /&gt;
&lt;br /&gt;
    if(PERM_COPY &amp;amp; nextOwnerPerms)&lt;br /&gt;
        llOwnerSay(&amp;quot;Set no copy&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    if(PERM_MODIFY &amp;amp; nextOwnerPerms)&lt;br /&gt;
        llOwnerSay(&amp;quot;Set no mod&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    if(PERM_TRANSFER &amp;amp; nextOwnerPerms)&lt;br /&gt;
        llOwnerSay(&amp;quot;Set no transfer&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer start_param)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        if(llGetOwner() != llGetInventoryCreator(llGetScriptName()))&lt;br /&gt;
            CheckPerms();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetObjectPermMask]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryAcquireTime]]|Returns the time the item was added to the prim&#039;s inventory}}&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryName]]|Returns the inventory item&#039;s name}}&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryType]]|Tests to see if an inventory item exists and returns its type}}&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryNumber]]|Returns the number of items of a specific type in inventory}}&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryKey]]|Returns the inventory item&#039;s [[UUID]] (if full perm)}}&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryCreator]]|Returns the inventory item&#039;s creator}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests=&lt;br /&gt;
{{LSL DefineRow||[[llGetInventoryPermMask Test]]}}&lt;br /&gt;
|also_articles=&lt;br /&gt;
{{LSL DefineRow||[[hex]]}}&lt;br /&gt;
|notes=&lt;br /&gt;
* In effect, the perms for articles published on this Wiki are [[PERM_COPY]] and [[PERM_TRANSFER]] until you log in, then [[PERM_MODIFY]], [[PERM_MOVE]], [[PERM_COPY]] and [[PERM_TRANSFER]].&lt;br /&gt;
* The default perms of a newly created script are: Base = [[PERM_ALL]], Owner = [[PERM_ALL]], Next = [[PERM_MOVE]] or [[PERM_TRANSFER]], Group = 0 (none), Everyone = 0 (none). These perms are the same, no matter if the script is created in user inventory or in an object.&lt;br /&gt;
** However, an option in the &#039;&#039;[[Preferences window|Preferences]] &amp;gt; Advanced&#039;&#039; menu allows to set the &#039;&#039;&#039;Default Creation Permissions&#039;&#039;&#039; of all items that can be created or uploaded in-world.&lt;br /&gt;
|cat1=Inventory&lt;br /&gt;
|cat2=Permissions/Asset&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Thu, 23 Jan 2025 23:28:49 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:LlGetInventoryPermMask</comments>
		</item>
		<item>
			<title>Template:LSL Constants Sensor</title>
			<link>https://wiki.secondlife.com/w/index.php?title=Template:LSL_Constants_Sensor&amp;diff=1217215</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=Template:LSL_Constants_Sensor&amp;diff=1217215</guid>
			<description>&lt;p&gt;Maestro Linden: Clarify that the DAMAGEABLE bit can be set on agents.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#if:{{{no_wrapper|}}}||{{{!}} }}&lt;br /&gt;
{{!}}- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
{{!}} &amp;lt;div style=&amp;quot;display:inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{{{!}} {{Prettytable|style=margin-bottom:0;{{{tstyle|}}}}}&lt;br /&gt;
{{!}}-{{Hl2}}&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; {{!}} &#039;&#039;&#039;{{{1|}}} Flag Mask&#039;&#039;&#039; &lt;br /&gt;
! &#039;&#039;&#039;Description ([[llDetectedType]]())&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description ([[llSensor]]() and [[llSensorRepeat]]() mask)&#039;&#039;&#039;&lt;br /&gt;
{{!}}-{{#if:&lt;br /&gt;
{{!}} {{#vardefine:AGENT_BY_LEGACY_NAME|{{LSL Const|AGENT_BY_LEGACY_NAME|integer|1|hex=0x1|c=Agents}}}}{{#var:AGENT_BY_LEGACY_NAME}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} {{#var:comment}}&lt;br /&gt;
{{!}} This is used to find agents by {{LSLGC|Avatar/Name|legacy name}}.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{#vardefine:AGENT|{{LSL Const|AGENT|integer|1|hex=0x1|c=Agents}}}}{{#var:AGENT}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} {{#var:comment}}&lt;br /&gt;
{{!}} This is also used to find agents by {{LSLGC|Avatar/Name|legacy name}}, and is functionally identical to [[AGENT_BY_LEGACY_NAME]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{#vardefine:AGENT_BY_USERNAME|{{LSL Const|AGENT_BY_USERNAME|integer|16|hex=0x10|c=Agents}}}}{{#var:AGENT_BY_USERNAME}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} &#039;&#039;{{HoverText|Reserved|This value is currently not used by llDetectedType}}&#039;&#039;&lt;br /&gt;
{{!}} This is used to find agents by {{LSLGC|Avatar/Name|username}}.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{#vardefine:ACTIVE|{{LSL Const|ACTIVE|integer|2|hex=0x2|c=Physical tasks. (Physical objects &amp;amp; agents) }}}}{{#var:ACTIVE}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} {{#var:comment}}&lt;br /&gt;
{{!}} Physical objects that are moving or objects containing an active script. Thus, it is using SL server resources now.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{#vardefine:PASSIVE|{{LSL Const|PASSIVE|integer|4|hex=0x4|c=Non-physical objects.}}}}{{#var:PASSIVE}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} {{#var:comment}}&lt;br /&gt;
{{!}} Non-scripted or script is inactive and non-physical or, if physical, not moving. Thus, it is not using SL server resources now.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{#vardefine:SCRIPTED|{{LSL Const|SCRIPTED|integer|8|hex=0x8|c=Objects containing any active script.}}}}{{#var:SCRIPTED}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} {{#var:comment}}&lt;br /&gt;
{{!}} Objects that has any script, which is doing anything in simulator just now.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{#vardefine:DAMAGEABLE|{{LSL Const|DAMAGEABLE|integer|32|hex=0x20|c=Objects &amp;amp; agents that are able to process damage.}}}}{{#var:DAMAGEABLE}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} {{#var:comment}}&lt;br /&gt;
{{!}} Filter for objects in world that have a script with [[on_damage]] or a [[final_damage]] event (able to process damage)&lt;br /&gt;
{{!}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{{{!}} {{Prettytable}}&lt;br /&gt;
{{!}}-{{Hl2}}&lt;br /&gt;
![[llDetectedType]]()&lt;br /&gt;
!Scripted&lt;br /&gt;
!Not Scripted&lt;br /&gt;
!Agent Standing&lt;br /&gt;
!title=&amp;quot;Agent sitting on object&amp;quot;|Agent Sitting&lt;br /&gt;
{{!}}-&lt;br /&gt;
! Physical Movement&lt;br /&gt;
{{!}} 10 ({{#var:ACTIVE}}|{{#var:SCRIPTED}})&lt;br /&gt;
{{!}} 2 ({{#var:ACTIVE}})&lt;br /&gt;
{{!}} 3 ({{#var:ACTIVE}}|{{#var:AGENT}})&lt;br /&gt;
{{!}} 3 ({{#var:ACTIVE}}|{{#var:AGENT}})&lt;br /&gt;
{{!}}-&lt;br /&gt;
! title=&amp;quot;Not moving&amp;quot; | Non-Physical&lt;br /&gt;
{{!}} 12 ({{#var:PASSIVE}}|{{#var:SCRIPTED}})&lt;br /&gt;
{{!}} 4 ({{#var:PASSIVE}})&lt;br /&gt;
{{!}} 1 ({{#var:AGENT}})&lt;br /&gt;
{{!}} 5 ({{#var:PASSIVE}}|{{#var:AGENT}})&lt;br /&gt;
{{!}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
{{#if:{{{no_wrapper|}}}||{{!}}} }}{{#if:&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:also_articles|{{#var:also_articles}}&lt;br /&gt;
{{LSL DefineRow|2=[http://lslwiki.net/lslwiki/wakka.php?wakka=ObjectType Object Type]}}}}&lt;br /&gt;
&lt;br /&gt;
{{#if:{{{examples|}}}&amp;lt;noinclude&amp;gt;*&amp;lt;/noinclude&amp;gt;|&lt;br /&gt;
{{#vardefine:examples|{{#var:examples}}&lt;br /&gt;
&#039;&#039;&#039;Using [[llDetectedType]] in [[collision]] event:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer type;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llVolumeDetect(TRUE);&lt;br /&gt;
    }&lt;br /&gt;
    collision_start(integer detected)&lt;br /&gt;
    {&lt;br /&gt;
        type = llDetectedType(0);&lt;br /&gt;
        if (type == AGENT)// = 1&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0, &amp;quot;This is impossible. Since there is no avatar who doesn&#039;t require the physical calculation.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else if (type == ACTIVE)// = 2&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0, &amp;quot;I have been struck by a physical object not containing any script.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else if (type == PASSIVE)// = 4&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0, &amp;quot;This is impossible. Non-physical objects cannot trigger this event.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else if (type == SCRIPTED)// = 8&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0, &amp;quot;This is impossible. Since there is no object which isn&#039;t physical nor non-physical.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else if (type == (AGENT | ACTIVE) ) // 1 + 2&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0, &amp;quot;I have been struck by an avatar.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else if (type == (SCRIPTED | ACTIVE) ) // = 8 + 2&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0, &amp;quot;I have been struck by a physical object containing any script.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else if (type == (SCRIPTED | PASSIVE) ) // = 8 + 4&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0, &amp;quot;This is impossible. Non-physical objects cannot trigger this event.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Using [[llDetectedType]] in [[sensor]] event:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer numberDetected)&lt;br /&gt;
    {&lt;br /&gt;
         llSensor(&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, ACTIVE | PASSIVE | AGENT, 20.0, PI); // activates the sensor.&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    sensor (integer numberDetected)&lt;br /&gt;
    {&lt;br /&gt;
        integer i;&lt;br /&gt;
        while(i &amp;lt; numberDetected)&lt;br /&gt;
        {&lt;br /&gt;
            integer type = llDetectedType(i);&lt;br /&gt;
            string message;&lt;br /&gt;
            message += (string)i + &amp;quot;, &amp;quot; + llDetectedName(i) + &amp;quot;, &amp;quot;;&lt;br /&gt;
            list typeList;&lt;br /&gt;
            if (type &amp;amp; AGENT)&lt;br /&gt;
            {&lt;br /&gt;
                typeList += &amp;quot;AGENT&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
            if (type &amp;amp; ACTIVE)&lt;br /&gt;
            {&lt;br /&gt;
                typeList += &amp;quot;ACTIVE&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
            if (type &amp;amp; PASSIVE)&lt;br /&gt;
            {&lt;br /&gt;
                typeList += &amp;quot;PASSIVE&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
            if (type &amp;amp; SCRIPTED)&lt;br /&gt;
            {&lt;br /&gt;
                typeList += &amp;quot;SCRIPTED&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
            message += llDumpList2String(typeList, &amp;quot;|&amp;quot;);&lt;br /&gt;
            llWhisper(0, message);&lt;br /&gt;
            ++i;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    no_sensor()&lt;br /&gt;
    {&lt;br /&gt;
        // This is impossible if range = 20.0 and you are standing within 10m!&lt;br /&gt;
        llWhisper(0, &amp;quot;Nothing is near me at present.&amp;quot;); &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Using filter in {{LSLGC|Sensor|llSensor*}} functions:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// Report nearby sensed objects and avatars under sundry categories&lt;br /&gt;
&lt;br /&gt;
list     SenseTypes;&lt;br /&gt;
integer  gIndex;&lt;br /&gt;
&lt;br /&gt;
SenseNextType()&lt;br /&gt;
{&lt;br /&gt;
    string  text = llList2String( SenseTypes, gIndex);&lt;br /&gt;
    integer tipe = llList2Integer(SenseTypes, gIndex + 1);&lt;br /&gt;
    if (tipe)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, text);&lt;br /&gt;
        llSensor(&amp;quot;&amp;quot;, NULL_KEY, tipe, 20.0, PI);&lt;br /&gt;
        gIndex += 2;   // increment by stride&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
        llWhisper(0, &amp;quot;--- Finished ---&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer detected)&lt;br /&gt;
    {&lt;br /&gt;
        // Make a Strided list of text and sensor type combinations&lt;br /&gt;
        // (Can&#039;t use &#039;|&#039; in Global, unfortunately)&lt;br /&gt;
        SenseTypes = [&lt;br /&gt;
            &amp;quot;AGENT_BY_LEGACY_NAME&amp;quot;, AGENT_BY_LEGACY_NAME,&lt;br /&gt;
            &amp;quot;ACTIVE&amp;quot;, ACTIVE,&lt;br /&gt;
            &amp;quot;AGENT_BY_LEGACY_NAME|ACTIVE&amp;quot;, AGENT_BY_LEGACY_NAME|ACTIVE,&lt;br /&gt;
            &amp;quot;PASSIVE&amp;quot;, PASSIVE,&lt;br /&gt;
            &amp;quot;AGENT_BY_LEGACY_NAME|PASSIVE&amp;quot;, AGENT_BY_LEGACY_NAME|PASSIVE,&lt;br /&gt;
            &amp;quot;ACTIVE|PASSIVE&amp;quot;, ACTIVE|PASSIVE,&lt;br /&gt;
            &amp;quot;AGENT_BY_LEGACY_NAME|ACTIVE|PASSIVE&amp;quot;, AGENT_BY_LEGACY_NAME|ACTIVE|PASSIVE,&lt;br /&gt;
            &amp;quot;SCRIPTED&amp;quot;, SCRIPTED,&lt;br /&gt;
            &amp;quot;AGENT|SCRIPTED&amp;quot;, AGENT|SCRIPTED,&lt;br /&gt;
            &amp;quot;ACTIVE|SCRIPTED&amp;quot;, ACTIVE|SCRIPTED,&lt;br /&gt;
            &amp;quot;AGENT_BY_LEGACY_NAME|ACTIVE|SCRIPTED&amp;quot;, AGENT_BY_LEGACY_NAME|ACTIVE|SCRIPTED,&lt;br /&gt;
            &amp;quot;PASSIVE|SCRIPTED&amp;quot;, PASSIVE|SCRIPTED,&lt;br /&gt;
            &amp;quot;&amp;quot;, 0 ];&lt;br /&gt;
        gIndex = 0;&lt;br /&gt;
        SenseNextType();        // Kick off the sensing sequence&lt;br /&gt;
    }&lt;br /&gt;
    sensor(integer detected)&lt;br /&gt;
    {&lt;br /&gt;
        integer x;&lt;br /&gt;
        while (x &amp;lt; detected)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, (string) (x+1) + &amp;quot;: &amp;quot; + llDetectedName(x) );&lt;br /&gt;
            ++x;&lt;br /&gt;
        }&lt;br /&gt;
        SenseNextType();&lt;br /&gt;
    }&lt;br /&gt;
    no_sensor()&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;none&amp;quot;);&lt;br /&gt;
        SenseNextType();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
See [http://lslwiki.net/lslwiki/wakka.php?wakka=ObjectType Object Type] for details&lt;br /&gt;
}}}}&lt;br /&gt;
&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;{{#var:examples}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 05 Sep 2024 21:10:35 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Template_talk:LSL_Constants_Sensor</comments>
		</item>
		<item>
			<title>DAMAGEABLE</title>
			<link>https://wiki.secondlife.com/w/index.php?title=DAMAGEABLE&amp;diff=1217214</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=DAMAGEABLE&amp;diff=1217214</guid>
			<description>&lt;p&gt;Maestro Linden: Created page with &amp;quot;{{LSL Constant |name=DAMAGEABLE |type=integer |hvalue=0x20 |desc=If it is contained in the result of llDetectedType(), it means what was detected is either an agent th...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Constant&lt;br /&gt;
|name=DAMAGEABLE&lt;br /&gt;
|type=integer&lt;br /&gt;
|hvalue=0x20&lt;br /&gt;
|desc=If it is contained in the result of [[llDetectedType]](), it means what was detected is either an [[agent]] that can take damage, or is an object containing a script with either [[on_damage]]() or [[final_damage]]() events (able to process damage).&amp;lt;br /&amp;gt;If it is used as a filter of [[llSensor]]() or [[llSensorRepeat]](), it will search for agents or objects which match the same criteria mentioned above.  &lt;br /&gt;
|constants={{LSL Constants Sensor|no_wrapper=true|examples=*}}&lt;br /&gt;
|functions=&lt;br /&gt;
{{LSL DefineRow||[[llDetectedType]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llSensor]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llSensorRepeat]]|}}&lt;br /&gt;
|events=&lt;br /&gt;
|cat1=Sensor&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Thu, 05 Sep 2024 21:06:43 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:DAMAGEABLE</comments>
		</item>
		<item>
			<title>Template:LSL Constants/Vehicle Flags</title>
			<link>https://wiki.secondlife.com/w/index.php?title=Template:LSL_Constants/Vehicle_Flags&amp;diff=1217196</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=Template:LSL_Constants/Vehicle_Flags&amp;diff=1217196</guid>
			<description>&lt;p&gt;Maestro Linden: add VEHICLE_FLAG_BLOCK_INTERFERENCE&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#if:{{{no_wrapper|}}}||{{{!}} class=&amp;quot;sortable&amp;quot; {{Prettytable}}&lt;br /&gt;
{{!}}-{{Hl2}}&lt;br /&gt;
! Flags&lt;br /&gt;
! title=&amp;quot;Value&amp;quot; {{!}}&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; {{!}}Description&lt;br /&gt;
{{!}}-}}&lt;br /&gt;
{{!}} {{LSL Const|VEHICLE_FLAG_NO_DEFLECTION_UP|integer|hex=0x001|ihex=1}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} This flag prevents linear deflection parallel to world z-axis. This is useful for preventing ground vehicles with large linear deflection, like {{Wikipedia|Bumper car|bumper cars}}, from climbing their linear deflection into the sky.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{LSL Const|VEHICLE_FLAG_LIMIT_ROLL_ONLY|integer|hex=0x002|ihex=2}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} For vehicles with vertical attractor that want to be able to climb/dive, for instance, airplanes that want to use the banking feature.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{LSL Const|VEHICLE_FLAG_HOVER_WATER_ONLY|integer|hex=0x004|ihex=4}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} Ignore terrain height when hovering.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{LSL Const|VEHICLE_FLAG_HOVER_TERRAIN_ONLY|integer|hex=0x008|ihex=8}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} Ignore water height when hovering.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{LSL Const|VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT|integer|hex=0x010|ihex=16}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} Hover at global height instead of height above ground or water.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{LSL Const|VEHICLE_FLAG_HOVER_UP_ONLY|integer|hex=0x020|ihex=32}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} Hover doesn&#039;t push down. Use this flag for hovering vehicles that should be able to jump above their hover height. &lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{LSL Const|VEHICLE_FLAG_LIMIT_MOTOR_UP|integer|hex=0x040|ihex=64}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} Prevents ground vehicles from motoring into the sky. This flag has a subtle effect when used with conjunction with banking: the strength of the banking will decay when the vehicle no longer experiences collisions. The decay timescale is the same as [[VEHICLE_BANKING_TIMESCALE]]. This is to help prevent ground vehicles from steering when they are in mid jump. &lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{LSL Const|VEHICLE_FLAG_MOUSELOOK_STEER|integer|hex=0x080|ihex=128}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} Steer the vehicle using the mouse. Use this flag to make the angular motor try to make the vehicle turn such that its local x-axis points in the same direction as the client-side camera.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{LSL Const|VEHICLE_FLAG_MOUSELOOK_BANK|integer|hex=0x100|ihex=256}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} Same as above, but relies on banking. It remaps left-right motions of the client camera (also known as &amp;quot;yaw&amp;quot;) to rotations about the vehicle&#039;s local x-axis. &lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{LSL Const|VEHICLE_FLAG_CAMERA_DECOUPLED|integer|hex=0x200|ihex=512}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} Makes [[mouselook]] {{LSLGC|Camera|camera}} rotate independently of the vehicle. By default the client mouselook camera will rotate about with the vehicle, however when this flag is set the camera direction is independent of the vehicle&#039;s rotation.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{LSL Const| VEHICLE_FLAG_BLOCK_INTERFERENCE|integer|hex=0x400|ihex=1024}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} Prevents attachments worn by the vehicle&#039;s passengers from pushing the vehicle via [[llPushObject]] and similar functions.&lt;br /&gt;
{{#if:{{{no_wrapper|}}}||{{!}}} }}&lt;/div&gt;</description>
			<pubDate>Tue, 27 Aug 2024 20:14:04 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Template_talk:LSL_Constants/Vehicle_Flags</comments>
		</item>
		<item>
			<title>VEHICLE FLAG BLOCK INTERFERENCE</title>
			<link>https://wiki.secondlife.com/w/index.php?title=VEHICLE_FLAG_BLOCK_INTERFERENCE&amp;diff=1217195</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=VEHICLE_FLAG_BLOCK_INTERFERENCE&amp;diff=1217195</guid>
			<description>&lt;p&gt;Maestro Linden: comma&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Constant&lt;br /&gt;
|name=VEHICLE_FLAG_BLOCK_INTERFERENCE&lt;br /&gt;
|type=integer&lt;br /&gt;
|value=0x400&lt;br /&gt;
|desc=When set, this flag prevents the vehicle you&#039;re sitting on from being pushed by an attachment you&#039;re wearing.&lt;br /&gt;
|example&lt;br /&gt;
|functions=&lt;br /&gt;
{{LSL DefineRow||[[llSetVehicleFlags]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llRemoveVehicleFlags]]|}}&lt;br /&gt;
|events=&lt;br /&gt;
&amp;lt;!--{{LSL DefineRow||[[changed]]|}}--&amp;gt;&lt;br /&gt;
|articles={{LSL DefineRow||[[Linden Vehicle Tutorial]]}}&lt;br /&gt;
|cat1=Vehicle/Flags&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Tue, 27 Aug 2024 20:09:05 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:VEHICLE_FLAG_BLOCK_INTERFERENCE</comments>
		</item>
		<item>
			<title>Estate Manager</title>
			<link>https://wiki.secondlife.com/w/index.php?title=Estate_Manager&amp;diff=1217166</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=Estate_Manager&amp;diff=1217166</guid>
			<description>&lt;p&gt;Maestro Linden: Corrected relationship between &amp;#039;allow damage&amp;#039; setting and per-parcel damage settings&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Help|LandSim=*|Glossary=*}}&amp;lt;div style=&amp;quot;float:right;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
An Estate Manager is a land manager for a privately owned island, much like a landlord. Estate managers have control over settings for the entire island (sim) which they manage, and settings that they change occur on a global level, therefore affecting all parcels of land on that particular island. &lt;br /&gt;
&lt;br /&gt;
== Appointment ==&lt;br /&gt;
Estate Managers are employed by owners of private islands (estate owners) to assist in the day-to-day operations of managing their island(s).&lt;br /&gt;
&lt;br /&gt;
== Responsibilities ==&lt;br /&gt;
While individual responsibilities differ from island to island, many estate managers share a basic set of common responsibilities, as listed below...&lt;br /&gt;
&lt;br /&gt;
=== Covenant Enforcement ===&lt;br /&gt;
Most privately owned islands have established covenants which describe to the Residents that occupy the parcels within which types of activities are acceptable, and which are not. It is often the responsibility of the estate manager to monitor the island(s) for violations of this covenant and not only notify the owner of the parcel which is in violation, but also provide consequences if the violation is not remedied in a acceptable amount of time from said notification. In some cases, the estate manager is also responsible for assisting the parcel owner in resolving the violation in any way they can.&lt;br /&gt;
&lt;br /&gt;
=== Land Sales ===&lt;br /&gt;
Many estate managers are responsible for selling available parcels of land on islands which they manage. This is generally only required when a privately owned island is first placed on the market, as once the parcels have been purchased by individual users, it commonly becomes their responsibility to sell the parcel when they desire to move away from it.&lt;br /&gt;
=== Dispute Resolution ===&lt;br /&gt;
As privately owned islands are commonly divided into separate parcels of land for purchase by many different residents, those occupying neighboring parcels of land can have complaints to lodge against one another, or even worse, get into disputes with each other. The estate manager is often bestowed the responsibility of mediating such disputes so that an acceptable resolution for all parties is reached. &lt;br /&gt;
&lt;br /&gt;
=== Performance Monitoring ===&lt;br /&gt;
Since many parcel owners use an abundance of scripts and/or physical objects on their land, issues which affect the overall performance of the island can arise. An island which performs poorly not only becomes unattractive to potential buyers, but to its current Residents as well. As a result, it is often the responsibility of an estate manager to detect what is causing these performance issues and rectify the situation immediately.&lt;br /&gt;
&lt;br /&gt;
=== Combating Griefers ===&lt;br /&gt;
Griefers are a common occurrence in Second Life, and they can wreak havoc on an island should they choose to do so. An essential responsibility of an estate manager is to identify, and remove, griefers that may be attacking the island(s) they manage, whether it is a particular parcel of land, or the island as a whole.&lt;br /&gt;
&lt;br /&gt;
== Abilities ==&lt;br /&gt;
As abilities for estate managers are assigned by the estate owner, they vary from position to position. Many of these abilities are described below, but may not be available to all estate managers. Each of these abilities apply to the estate as a whole, and &#039;&#039;&#039;every parcel&#039;&#039;&#039; on the estate (island) is affected when enabling/disabling these options...&lt;br /&gt;
*&#039;&#039;&#039;Kick User&#039;&#039;&#039; - Ejects a user from the estate&lt;br /&gt;
*&#039;&#039;&#039;Ban User&#039;&#039;&#039; - Bans a user from the estate. The user is ejected and banned, and should the user try to return to any parcel on the estate, they will be denied access&lt;br /&gt;
*&#039;&#039;&#039;Send Message&#039;&#039;&#039; - Sends a message to the entire estate, which will cause all users currently on the island to receive the message in a blue popup window in the upper right corner of their screen&lt;br /&gt;
*&#039;&#039;&#039;Public Access&#039;&#039;&#039; - Toggles whether or not avatars which do not own parcels on the estate are allowed to teleport to the island&lt;br /&gt;
*&#039;&#039;&#039;Allow Voice Chat&#039;&#039;&#039; - Toggles whether or not parcel owners have the ability to enable voice chat on their parcels&lt;br /&gt;
*&#039;&#039;&#039;Deny Access On Payment Status&#039;&#039;&#039; - Allows the estate manager to restrict access to the island to those who meet certain payment status requirements, such as &amp;quot;payment information on file&amp;quot;, or &amp;quot;payment information used&amp;quot;, etc&lt;br /&gt;
*&#039;&#039;&#039;Block Terraform&#039;&#039;&#039; - Prevents parcel owners from being able to terraform the parcels that they occupy&lt;br /&gt;
*&#039;&#039;&#039;Block Fly&#039;&#039;&#039; - Prevents all visitors and parcel owners from being able to fly; overrides any individual parcel settings when disabled&lt;br /&gt;
*&#039;&#039;&#039;Allow Damage&#039;&#039;&#039; - Toggles the whether or not damage can be inflicted on avatars either visiting or occupying parcels on the island.  Individual parcels may override this setting&lt;br /&gt;
*&#039;&#039;&#039;Restrict Pushing&#039;&#039;&#039; - Toggles whether or not physical objects have the ability to &amp;quot;push&amp;quot;, or move, avatars on the island; overrides any individual parcel settings when disabled&lt;br /&gt;
*&#039;&#039;&#039;Allow Land Resell&#039;&#039;&#039; - Toggles whether or not parcel owners have the ability to place their individual parcels for sale to others&lt;br /&gt;
*&#039;&#039;&#039;Allow Parcel Join/Divide&#039;&#039;&#039; - Toggles whether or not parcel owners have the ability to join two or more parcels they own into one, or to split a parcel into multiple separate parcels &lt;br /&gt;
*&#039;&#039;&#039;Agent Limit&#039;&#039;&#039; - Allows the estate manager to set the number of agents (avatars) that are allowed to be on the island simultaneously. If the agent limit has been reached, avatars will not be permitted to teleport to the island&lt;br /&gt;
*&#039;&#039;&#039;Teleport Home&#039;&#039;&#039; - Allows the estate manager to teleport an avatar that is presently on the island back to their Home Location&lt;br /&gt;
*&#039;&#039;&#039;Disable Scripts&#039;&#039;&#039; - Disables all running scripts on the island. If a script is causing issues, but cannot be reached to be disabled, disabling all scripts will allow the estate manager to get to the object containing the script which is causing the issue and return it to its owner, then re-enable all running scripts on the island&lt;br /&gt;
*&#039;&#039;&#039;Disable Collisions&#039;&#039;&#039; - Prevents objects from colliding into one another, which is often a cause of lag on the island&lt;br /&gt;
*&#039;&#039;&#039;Disable Physics&#039;&#039;&#039; - Allows Physical Objects to be disabled. Griefers typically use an abundance of physical objects to slow island performance, as having many physical objects present causes the server on which the island resides to become very bogged down with commands to process, causing severe lag to the point where avatars on the island cannot even move&lt;br /&gt;
*&#039;&#039;&#039;Return Scripted Objects&#039;&#039;&#039; - Returns all scripted objects owned by a specified user from an island&lt;br /&gt;
*&#039;&#039;&#039;Get Top Colliders&#039;&#039;&#039; - Lists all of the colliding objects on the island which may be causing severe lag. Each object has an associated &amp;quot;collision score&amp;quot;; the higher this number, the more likely the object is to cause lag&lt;br /&gt;
*&#039;&#039;&#039;Get Top Scripts&#039;&#039;&#039; - Lists all of the scripts on the island which may be causing lag. Each script has an associated &amp;quot;time&amp;quot; in milliseconds; the higher this time, the more lag the script creates&lt;br /&gt;
*&#039;&#039;&#039;Restart Region&#039;&#039;&#039; - Allows the estate manager to restart the computer on which the island resides, thus rectifying performance issues. This is what is done to each island when Linden Lab performs their &amp;quot;rolling restarts&amp;quot;, and all avatars on the island will receive a warning that the region is being restarted and that they will be logged out if they are present during the restart. The typical restart takes the island offline for 5 minutes or less.&lt;br /&gt;
*&#039;&#039;&#039;Terrain Edit Limits&#039;&#039;&#039; - Allows the estate manager to set limits as to how far up or down terrain on the island can be adjusted by parcel owners, in meters. The &amp;quot;Block Terraform&amp;quot; setting explained above must not be checked in order for this setting to have an effect&lt;br /&gt;
*&#039;&#039;&#039;Water Height&#039;&#039;&#039; - Sets the water height for the entire island&lt;br /&gt;
*&#039;&#039;&#039;Covenant&#039;&#039;&#039; - Allows the estate manager to edit the island&#039;s established covenant, if permitted by the estate owner.&lt;/div&gt;</description>
			<pubDate>Fri, 23 Aug 2024 19:17:30 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:Estate_Manager</comments>
		</item>
		<item>
			<title>Game control</title>
			<link>https://wiki.secondlife.com/w/index.php?title=Game_control&amp;diff=1216848</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=Game_control&amp;diff=1216848</guid>
			<description>&lt;p&gt;Maestro Linden: Try to clarify default alignment of axes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Event|event_id=40|event_delay|event=game_control&lt;br /&gt;
|p1_type=key|p1_name=id|p1_desc=avatar UUID&lt;br /&gt;
|p2_type=integer|p2_name=button_levels|p2_desc=bitfield of buttons held down&lt;br /&gt;
|p3_type=list|p3_name=axes|p3_desc=list of axes float values in range [-1, 1]&lt;br /&gt;
|event_desc=&#039;&#039;&#039;Experimental&#039;&#039;&#039; event only available in some testing regions (soon).  Triggered when compatible viewer sends fresh &#039;&#039;&#039;GameControlInput&#039;&#039;&#039; message, but only for scripts on attachments or seat.&lt;br /&gt;
|constants={{LSL Constants/GameControlButtonFlags}} {{LSL Constants/GameControlAxisIndices}}&lt;br /&gt;
|spec={{LSL Warnings/Game Control}}&lt;br /&gt;
|caveats=* If enabled at the client: unhandled keystrokes will be treated as button presses.&lt;br /&gt;
* There is room for 32 buttons [bits 0 through 31] however at most only 16 buttons can be simultaneously held down at any one time.&lt;br /&gt;
* There are always 6 &#039;&#039;&#039;axes&#039;&#039;&#039; values, even when the controller device has more or less&lt;br /&gt;
** All &#039;&#039;&#039;axes&#039;&#039;&#039; elements will be in range [-1,1] except for &#039;&#039;&#039;GAME_CONTROL_AXIS_TRIGGERLEFT&#039;&#039;&#039; and &#039;&#039;&#039;GAME_CONTROL_AXIS_TRIGGERRIGHT&#039;&#039;&#039; which range [0, 1]&lt;br /&gt;
** By default, &lt;br /&gt;
*** Left-tilting a thumbstick on &#039;&#039;&#039;GAME_CONTROL_AXIS_LEFTX&#039;&#039;&#039; or &#039;&#039;&#039;GAME_CONTROL_AXIS_RIGHTX&#039;&#039;&#039; yields a positive value, while right-tilting yields a negative value&lt;br /&gt;
*** Up-tilting a thumbstick on &#039;&#039;&#039;GAME_CONTROL_AXIS_LEFTY&#039;&#039;&#039; or &#039;&#039;&#039;GAME_CONTROL_AXIS_RIGHTY&#039;&#039;&#039; yields a positive value, while down-tilting yields a negative value&lt;br /&gt;
*** Pulling a trigger will increase the value of &#039;&#039;&#039;GAME_CONTROL_AXIS_TRIGGERLEFT&#039;&#039;&#039; or &#039;&#039;&#039;GAME_CONTROL_AXIS_TRIGGERRIGHT&#039;&#039;&#039;, while releasing will decrease the value&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer prev_button_levels = 0;&lt;br /&gt;
integer print_list(string name, integer type, list data)&lt;br /&gt;
{&lt;br /&gt;
    integer data_length = llGetListLength(data);&lt;br /&gt;
    string text = name + &amp;quot; : &amp;quot;;&lt;br /&gt;
    if (data_length &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        integer use_comma = FALSE;&lt;br /&gt;
        integer i = 0;&lt;br /&gt;
        for (i = 0; i &amp;lt; data_length; i++)&lt;br /&gt;
        {&lt;br /&gt;
            if (!use_comma)&lt;br /&gt;
            {&lt;br /&gt;
                use_comma = TRUE;&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                text += &amp;quot;,&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
            if (type == TYPE_INTEGER)&lt;br /&gt;
            {&lt;br /&gt;
                integer b = (llList2Integer(data, i));&lt;br /&gt;
                text += (string)(b);&lt;br /&gt;
                llOwnerSay(&amp;quot;pack i=&amp;quot; + (string)(i) + &amp;quot; b=&amp;quot; + (string)(b));&lt;br /&gt;
            }&lt;br /&gt;
            else if (type == TYPE_FLOAT)&lt;br /&gt;
            {&lt;br /&gt;
                text += (string)(llList2Float(data, i));&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    llOwnerSay(text); &lt;br /&gt;
    return data_length;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string bits2nybbles(integer bits)&lt;br /&gt;
{&lt;br /&gt;
    integer lsn; // least significant nybble&lt;br /&gt;
    string nybbles = &amp;quot;&amp;quot;;&lt;br /&gt;
    do&lt;br /&gt;
        nybbles = llGetSubString(&amp;quot;0123456789ABCDEF&amp;quot;, lsn = (bits &amp;amp; 0xF), lsn) + nybbles;&lt;br /&gt;
    while (bits = (0xfffFFFF &amp;amp; (bits &amp;gt;&amp;gt; 4)));&lt;br /&gt;
    return nybbles;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(&amp;quot;Ready for game_control events&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    game_control(key id, integer button_levels, list axes)&lt;br /&gt;
    {&lt;br /&gt;
        integer button_edges = button_levels ^ prev_button_levels;&lt;br /&gt;
        prev_button_levels = button_levels;&lt;br /&gt;
&lt;br /&gt;
        string button_levels_hex = bits2nybbles(button_levels);&lt;br /&gt;
        string button_edges_hex = bits2nybbles(button_edges);&lt;br /&gt;
        llOwnerSay(&amp;quot;game_control :&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;  button_levels=0x&amp;quot; + button_levels_hex);&lt;br /&gt;
        llOwnerSay(&amp;quot;  button_edges=0x&amp;quot; + button_edges_hex);&lt;br /&gt;
        print_list(&amp;quot;  axes&amp;quot;, TYPE_FLOAT, axes);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_header&lt;br /&gt;
|also_events={{LSL DefineRow||[[control]]|}}&lt;br /&gt;
|also_functions&lt;br /&gt;
|also_articles=[[LSL Game Control Beta]]&lt;br /&gt;
|also_footer&lt;br /&gt;
|notes&lt;br /&gt;
|mode&lt;br /&gt;
|deprecated&lt;br /&gt;
|cat1=Controls&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 28 Jun 2024 21:23:32 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:Game_control</comments>
		</item>
		<item>
			<title>PRIM REFLECTION PROBE MIRROR</title>
			<link>https://wiki.secondlife.com/w/index.php?title=PRIM_REFLECTION_PROBE_MIRROR&amp;diff=1216510</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=PRIM_REFLECTION_PROBE_MIRROR&amp;diff=1216510</guid>
			<description>&lt;p&gt;Maestro Linden: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Constant&lt;br /&gt;
|type=integer&lt;br /&gt;
|name=PRIM_REFLECTION_PROBE_MIRROR&lt;br /&gt;
|value=4&lt;br /&gt;
|desc=Used with [[PRIM_REFLECTION_PROBE]]. When enabled, objects with low-roughness PBR materials objects act as a mirror. Note that mirrors do not reflect avatars unless [[PRIM_REFLECTION_PROBE_DYNAMIC]] is also set. Rendering mirrors has a performance cost.&lt;br /&gt;
|examples&lt;br /&gt;
|constants&lt;br /&gt;
|functions&lt;br /&gt;
|events&lt;br /&gt;
|location&lt;br /&gt;
|cat1=Prim&lt;br /&gt;
|cat2=ReflectionProbe&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:glTF]]&lt;/div&gt;</description>
			<pubDate>Mon, 22 Apr 2024 22:15:48 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:PRIM_REFLECTION_PROBE_MIRROR</comments>
		</item>
		<item>
			<title>PRIM REFLECTION PROBE MIRROR</title>
			<link>https://wiki.secondlife.com/w/index.php?title=PRIM_REFLECTION_PROBE_MIRROR&amp;diff=1216509</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=PRIM_REFLECTION_PROBE_MIRROR&amp;diff=1216509</guid>
			<description>&lt;p&gt;Maestro Linden: initial version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Constant&lt;br /&gt;
|type=integer&lt;br /&gt;
|name=PRIM_REFLECTION_PROBE_MIRROR&lt;br /&gt;
|value=2&lt;br /&gt;
|desc=Used with [[PRIM_REFLECTION_PROBE]]. When enabled, objects with low-roughness PBR materials objects act as a mirror. Note that mirrors do not reflect avatars unless [[PRIM_REFLECTION_PROBE_DYNAMIC]] is also set. Rendering mirrors has a performance cost.&lt;br /&gt;
|examples&lt;br /&gt;
|constants&lt;br /&gt;
|functions&lt;br /&gt;
|events&lt;br /&gt;
|location&lt;br /&gt;
|cat1=Prim&lt;br /&gt;
|cat2=ReflectionProbe&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:glTF]]&lt;/div&gt;</description>
			<pubDate>Mon, 22 Apr 2024 22:15:36 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:PRIM_REFLECTION_PROBE_MIRROR</comments>
		</item>
		<item>
			<title>PRIM REFLECTION PROBE</title>
			<link>https://wiki.secondlife.com/w/index.php?title=PRIM_REFLECTION_PROBE&amp;diff=1216508</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=PRIM_REFLECTION_PROBE&amp;diff=1216508</guid>
			<description>&lt;p&gt;Maestro Linden: Add PRIM_REFLECTION_PROBE_MIRROR flag&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{{#if:&lt;br /&gt;
{{LSL_Function/boolean|boolean}}&lt;br /&gt;
{{#vardefine:reflection_probe_const|{{LSL Const|PRIM_REFLECTION_PROBE|integer|44|c=Used to {{GetSet|{{{1|}}}|get|set|/}} the prim&#039;s reflection probe configuration}}}}&lt;br /&gt;
{{#vardefine:p_ambiance_desc|Ranges from 0.0 to 100.0. Is the brightness of lighting effects from the probe, but not reflection effects. If the environment settings has nonzero reflection probe ambiance, the effective probe ambiance is the greater of the two. }}&lt;br /&gt;
{{#vardefine:p_clip_distance_desc|Ranges from 0.0 to 1024.0. Is the minimum distance from the probe&#039;s center where the surroundings are included for imaging.}}&lt;br /&gt;
{{#vardefine:p_flags_desc|PRIM_REFLECTION_PROBE_* flags}}&lt;br /&gt;
}}&lt;br /&gt;
{{#vardefine:reflection_probe_flags_rows|&lt;br /&gt;
!{{!}} {{LSLPT|pstype|type}} Flags&lt;br /&gt;
! title=&amp;quot;value&amp;quot; {{!}} V&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; {{!}} Description&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; {{!}} Notes&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{LSL Const|PRIM_REFLECTION_PROBE_BOX|integer|1|c=Determines if the reflection probe is a box or a sphere.}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} {{#var:comment}}&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} Unset by default (probe is a sphere)&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{LSL Const|PRIM_REFLECTION_PROBE_DYNAMIC|integer|2|c=Determines if avatars are included by the probe for imaging.}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} {{#var:comment}}&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} Unset by default (probe does not image avatars). Imaging avatars in probes has a performance cost.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{LSL Const|PRIM_REFLECTION_PROBE_MIRROR|integer|4|c=Determines if objects intersecting the probe act as a mirror.}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} {{#var:comment}}&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} Unset by default (probe does not act as a mirror). Rendering mirrors has a performance cost.&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
{{LSL Constant&lt;br /&gt;
|inject-2={{LSL PrimitiveParam Categorize|Prim}}&lt;br /&gt;
|name=PRIM_REFLECTION_PROBE&lt;br /&gt;
|type=integer&lt;br /&gt;
|value=44&lt;br /&gt;
|desc=PRIM_REFLECTION_PROBE is used to change the reflection probe configuration of the prim.&lt;br /&gt;
&lt;br /&gt;
A reflection probe is a volume used for image-based lighting (IBL). It takes an image of its surroundings and uses it as the basis for reflection effects (shiny surfaces) and ambiance effects (light bouncing).&lt;br /&gt;
&lt;br /&gt;
Typically, the viewer automatically places reflection probes. Prim-based probes enable artists to provide hints to the render engine to improve the quality of image based lighting. Only objects in the probe&#039;s influence volume are affected.&lt;br /&gt;
&lt;br /&gt;
Lighting is most accurate when the edges of a probe volume are near the geometry that appears in reflections. For example, objects inside a room with a box shaped reflection probe that hugs the walls, floor, and ceiling would show accurate reflections and ambient lighting from the walls of the room.&lt;br /&gt;
|pa={{LSL Constant/List|i_front=[&amp;amp;#32;{{#var:reflection_probe_const}},&amp;amp;#32;|i_end=&amp;amp;nbsp;]&lt;br /&gt;
|text=When used with [[llSetPrimitiveParams]] &amp;amp; [[llSetLinkPrimitiveParams]] &amp;amp; [[llSetLinkPrimitiveParamsFast]]&lt;br /&gt;
|toc=llSetPrimitiveParams&lt;br /&gt;
|i1_type=integer|i1_subtype=boolean|i1_name=boolean&lt;br /&gt;
|i2_type=float|i2_name=ambiance&lt;br /&gt;
|i3_type=float|i3_name=clip_distance&lt;br /&gt;
|i4_type=integer|i4_name=flags&lt;br /&gt;
|pc=&lt;br /&gt;
{{{!}} class=&amp;quot;sortable&amp;quot; {{Prettytable|style=margin-top:0;}}&lt;br /&gt;
{{!}}- {{Hl2}}&lt;br /&gt;
{{#var:reflection_probe_flags_rows}}&lt;br /&gt;
{{!}}}&lt;br /&gt;
}}&lt;br /&gt;
|pb={{LSL Constant/List|i_front=[[llGetPrimitiveParams]]([&amp;amp;nbsp;{{#var:reflection_probe_const}}|i_end=&amp;amp;nbsp;]);|&lt;br /&gt;
|r_front=Returns the list [&amp;amp;nbsp;|r_end=&amp;amp;nbsp;]&lt;br /&gt;
|text&lt;br /&gt;
|toc=llGetPrimitiveParams&lt;br /&gt;
|r1_type=integer|r1_subtype=boolean|r1_name=boolean&lt;br /&gt;
|r2_type=float|r2_name=ambiance&lt;br /&gt;
|r3_type=float|r3_name=clip_distance&lt;br /&gt;
|r4_type=integer|r4_name=flags&lt;br /&gt;
}}&lt;br /&gt;
|pc=&lt;br /&gt;
{{{!}} class=&amp;quot;sortable&amp;quot; {{Prettytable|style=margin-top:0;}}&lt;br /&gt;
{{!}}- {{Hl2}}&lt;br /&gt;
{{#var:reflection_probe_flags_rows}}&lt;br /&gt;
{{!}}}&lt;br /&gt;
|examples=&lt;br /&gt;
Increase the prim&#039;s reflection probe ambiance when an agent is detected in the sensor range of the prim. Decrease the probe ambiance when an agent is no longer detected.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer probe_enabled = TRUE;&lt;br /&gt;
float probe_no_agent_ambiance = 0.0;&lt;br /&gt;
float probe_agent_ambiance = 1.0;&lt;br /&gt;
float probe_clip_distance = 0.0;&lt;br /&gt;
integer probe_flags = 0;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        integer sensor_type = AGENT;&lt;br /&gt;
        float sensor_range = 3.0;&lt;br /&gt;
        float sensor_rate = 5.0;&lt;br /&gt;
        llSensorRepeat(&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, sensor_type, sensor_range, PI, sensor_rate);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    sensor(integer num_detected)&lt;br /&gt;
    {&lt;br /&gt;
        llSetPrimitiveParams([PRIM_REFLECTION_PROBE, probe_enabled, probe_agent_ambiance, probe_clip_distance, probe_flags]);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    no_sensor()&lt;br /&gt;
    {&lt;br /&gt;
        llSetPrimitiveParams([PRIM_REFLECTION_PROBE, probe_enabled, probe_no_agent_ambiance, probe_clip_distance, probe_flags]);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|constants&lt;br /&gt;
|caveats= &lt;br /&gt;
* A viewer must have reflections enabled to see the effects of reflection probes.&lt;br /&gt;
* By default, the viewer auto-places reflection probes with 0.0 ambiance. Environment settings for the region or parcel can be adjusted to increase reflection probe ambiance for these auto-placed probes.&lt;br /&gt;
* Automatically-placed reflection probes do not image avatars. Imaging avatars in probes has a performance cost.&lt;br /&gt;
|functions=&lt;br /&gt;
{{LSL DefineRow||[[LlSetEnvironment]]|}}&lt;br /&gt;
{{LSL DefineRow||[[LlReplaceEnvironment]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llSetPrimitiveParams]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llSetLinkPrimitiveParams]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llSetLinkPrimitiveParamsFast]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetPrimitiveParams]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetLinkPrimitiveParams]]|}}&lt;br /&gt;
|events&lt;br /&gt;
|location&lt;br /&gt;
|cat1=ReflectionProbe&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:glTF]]&lt;/div&gt;</description>
			<pubDate>Mon, 22 Apr 2024 22:11:33 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:PRIM_REFLECTION_PROBE</comments>
		</item>
		<item>
			<title>PRIM RENDER MATERIAL</title>
			<link>https://wiki.secondlife.com/w/index.php?title=PRIM_RENDER_MATERIAL&amp;diff=1216478</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=PRIM_RENDER_MATERIAL&amp;diff=1216478</guid>
			<description>&lt;p&gt;Maestro Linden: fixed reference to INVENTORY_MATERIAL constant in examples&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:glTF]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;{{#if:&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:render_material_return|an empty list.}}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:render_material_const|{{LSL Const|PRIM_RENDER_MATERIAL|integer|49|c=Used to {{GetSet|{{{1|}}}|get|set|/}} the material settings of a prim&#039;s face}}}}&lt;br /&gt;
&lt;br /&gt;
{{LSL_Function/inventory|render_material|uuid=true|type=material|no_caveat={{#ifeq:{{{1|}}}|get|true|&amp;lt;noinclude&amp;gt;*&amp;lt;/noinclude&amp;gt;}}|full={{{remote|}}}|remote={{#ifeq:{{{1|set}}}|get|*}}|target=PRIM_RENDER_MATERIAL#Target}}&lt;br /&gt;
&lt;br /&gt;
{{#ifeq:{{{1|}}}|none||&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:facetable|{{#var:facetable}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [ {{#var:render_material_const}} ]&lt;br /&gt;
{{!}} {{#var:render_material_return}} }}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:caveats_set|&lt;br /&gt;
* If {{LSLP|render_material}} is provided as [[NULL_KEY]], the [[PBR_Materials|glTF Material]] is removed from {{LSLP|face}}, reverting back to any underlying [[PBR_Materials#Nomenclature_changes|Blinn-Phong]] materials.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:caveats_get|&lt;br /&gt;
* With {{LSLP|render_material}} as with [[llGetRenderMaterial]], {{LSL Constant/NULL KEY}} is returned when the {{LSLGC|Owner|owner}} does not have {{LSLGC|Permissions/Asset|full permissions}} to the object and the [[PRIM_RENDER_MATERIAL|material]] is not in the prim&#039;s inventory.}}&lt;br /&gt;
&lt;br /&gt;
{{#ifeq:{{{1|}}}|get|&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:caveats|{{#var:caveats}}&lt;br /&gt;
{{#var:caveats_get}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
{{Issues/SVC-914}}&lt;br /&gt;
{{#vardefine:caveats|{{#var:caveats}}&lt;br /&gt;
{{#var:caveats_set}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{:PRIM TEXGEN|{{{1|}}}}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:caveats|{{#var:caveats}}&lt;br /&gt;
{{#var:shared_caveat}}}}&lt;br /&gt;
&lt;br /&gt;
}}&amp;lt;/onlyinclude&amp;gt;{{#if:&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:caveats_set|{{#var:caveats}}{{#vardefine:caveats|}}}}&lt;br /&gt;
{{#vardefine:issues_set|{{#var:issues}}{{#vardefine:issues|}}}}&lt;br /&gt;
&lt;br /&gt;
{{LSL_Function/face|face|{{#var:render_material_const}}|!footer=*|return={{#var:render_material_return}}}}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:caveats_get|{{#var:caveats}}{{#vardefine:caveats|}}&lt;br /&gt;
{{#var:caveats_get}}&lt;br /&gt;
{{#var:shared_caveat}}}}&lt;br /&gt;
{{#vardefine:issues_get|{{#var:issues}}{{#vardefine:issues|}}}}&lt;br /&gt;
&lt;br /&gt;
}}{{LSL Constant&lt;br /&gt;
|inject-2={{LSL PrimitiveParam Categorize|Face}}&lt;br /&gt;
|name=PRIM_RENDER_MATERIAL&lt;br /&gt;
|type=integer&lt;br /&gt;
|value=49&lt;br /&gt;
|desc=Used to get or set the material settings of a prim&#039;s {{LSLP|face}}.&lt;br /&gt;
|examples=&lt;br /&gt;
|pa={{LSL Constant/List|i_front=[&amp;amp;#32;{{#var:render_material_const}},&amp;amp;#32;|i_end=&amp;amp;nbsp;]|&lt;br /&gt;
|inject-1={{#vardefine:p_render_material_desc|}}&lt;br /&gt;
{{#vardefine:p_render_material_hover|}}&lt;br /&gt;
{{#vardefine:direction|_set}}&lt;br /&gt;
{{LSL_Function/inventory|render_material|uuid=true|type=material}}&lt;br /&gt;
|text=Used with [[llSetPrimitiveParams]] &amp;amp; [[llSetLinkPrimitiveParams]].&lt;br /&gt;
&lt;br /&gt;
{{LSL Generic/Caveats|caveats={{#var:caveats_set}}{{#vardefine:caveats_set}}|issues={{#var:issues_set}}|title=*|h=4}}&lt;br /&gt;
&lt;br /&gt;
====Examples====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;llSetPrimitiveParams([ PRIM_RENDER_MATERIAL, ALL_SIDES, my_render_material ]);&lt;br /&gt;
llSetPrimitiveParams([ PRIM_RENDER_MATERIAL, ALL_SIDES, llGetInventoryName(INVENTORY_MATERIAL, 0) ]);&lt;br /&gt;
llSetPrimitiveParams([ PRIM_RENDER_MATERIAL, 0, my_render_material ]);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|toc=llSetPrimitiveParams&lt;br /&gt;
|i1_type=integer|i1_name=face&lt;br /&gt;
|i2_type=string|i2_name=render_material&lt;br /&gt;
}}&lt;br /&gt;
|pb={{LSL Constant/List|i_front=[[llGetPrimitiveParams]]([&amp;amp;nbsp;{{#var:render_material_const}},&amp;amp;#32;|i_end=&amp;amp;nbsp;]);|&lt;br /&gt;
|inject-1={{#vardefine:p_render_material_desc|}}&lt;br /&gt;
{{#vardefine:p_render_material_hover|}}&lt;br /&gt;
{{#vardefine:direction|_get}}&lt;br /&gt;
{{LSL_Function/inventory|render_material|uuid=true|type=material|no_caveat=true|full={{{remote|}}}|remote=*|target=#Target}}&lt;br /&gt;
{{LSL Function/link|link|nogroup=*|nocaveats=*}}&lt;br /&gt;
|r_front=Returns the list [&amp;amp;nbsp;|r_end=&amp;amp;nbsp;]&lt;br /&gt;
|text=&lt;br /&gt;
{{LSL Generic/Caveats|caveats={{#var:caveats_get}}{{#vardefine:caveats_get}}|issues={{#var:issues_get}}|title=*|h=4}}&lt;br /&gt;
====Target====&lt;br /&gt;
In the case of llGetPrimitiveParams is either the prim the script resides in, or the prim specified by the immediately prior [[PRIM_LINK_TARGET]] call. However in the case of llGetLinkPrimitiveParams, it is either the value of the {{LSLP|link}} parameter, or the prim specified by the immediately prior [[PRIM_LINK_TARGET]] call.&lt;br /&gt;
|toc=llGetPrimitiveParams&lt;br /&gt;
|i1_type=integer|i1_name=face&lt;br /&gt;
|r1_type=string|r1_name=render_material&lt;br /&gt;
}}&lt;br /&gt;
|constants=&lt;br /&gt;
{{LSL DefineRow||[[CHANGED_RENDER_MATERIAL]]|}}&lt;br /&gt;
|functions=&lt;br /&gt;
{{LSL DefineRow||[[llSetPrimitiveParams]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llSetLinkPrimitiveParams]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetPrimitiveParams]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llSetRenderMaterial]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llSetLinkRenderMaterial]]|}}&lt;br /&gt;
|events=&lt;br /&gt;
{{LSL DefineRow||[[changed]]|}}&lt;br /&gt;
|location&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=RenderMaterial&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Sat, 13 Apr 2024 00:00:43 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:PRIM_RENDER_MATERIAL</comments>
		</item>
		<item>
			<title>PRIM REFLECTION PROBE DYNAMIC</title>
			<link>https://wiki.secondlife.com/w/index.php?title=PRIM_REFLECTION_PROBE_DYNAMIC&amp;diff=1216459</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=PRIM_REFLECTION_PROBE_DYNAMIC&amp;diff=1216459</guid>
			<description>&lt;p&gt;Maestro Linden: Remove future feature warning&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Constant&lt;br /&gt;
|type=integer&lt;br /&gt;
|name=PRIM_REFLECTION_PROBE_DYNAMIC&lt;br /&gt;
|value=2&lt;br /&gt;
|desc=Used with [[PRIM_REFLECTION_PROBE]]. A reflection probe does not image avatars by default, otherwise it images avatars if this flag is set on the corresponding prim. Imaging avatars in reflection probes has a performance cost.&lt;br /&gt;
|examples&lt;br /&gt;
|constants&lt;br /&gt;
|functions&lt;br /&gt;
|events&lt;br /&gt;
|location&lt;br /&gt;
|cat1=Prim&lt;br /&gt;
|cat2=ReflectionProbe&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:glTF]]&lt;/div&gt;</description>
			<pubDate>Thu, 04 Apr 2024 19:35:17 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:PRIM_REFLECTION_PROBE_DYNAMIC</comments>
		</item>
		<item>
			<title>PRIM REFLECTION PROBE BOX</title>
			<link>https://wiki.secondlife.com/w/index.php?title=PRIM_REFLECTION_PROBE_BOX&amp;diff=1216458</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=PRIM_REFLECTION_PROBE_BOX&amp;diff=1216458</guid>
			<description>&lt;p&gt;Maestro Linden: Remove future feature warning&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Constant&lt;br /&gt;
|type=integer&lt;br /&gt;
|name=PRIM_REFLECTION_PROBE_BOX&lt;br /&gt;
|value=1&lt;br /&gt;
|desc=Used with [[PRIM_REFLECTION_PROBE]]. A reflection probe is a sphere by default, otherwise a box if this flag is set on the corresponding prim.&lt;br /&gt;
|examples&lt;br /&gt;
|constants&lt;br /&gt;
|functions&lt;br /&gt;
|events&lt;br /&gt;
|location&lt;br /&gt;
|cat1=Prim&lt;br /&gt;
|cat2=ReflectionProbe&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:glTF]]&lt;/div&gt;</description>
			<pubDate>Thu, 04 Apr 2024 19:34:53 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:PRIM_REFLECTION_PROBE_BOX</comments>
		</item>
		<item>
			<title>PRIM REFLECTION PROBE</title>
			<link>https://wiki.secondlife.com/w/index.php?title=PRIM_REFLECTION_PROBE&amp;diff=1216457</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=PRIM_REFLECTION_PROBE&amp;diff=1216457</guid>
			<description>&lt;p&gt;Maestro Linden: Remove warning about the feature being experimental&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{{#if:&lt;br /&gt;
{{LSL_Function/boolean|boolean}}&lt;br /&gt;
{{#vardefine:reflection_probe_const|{{LSL Const|PRIM_REFLECTION_PROBE|integer|44|c=Used to {{GetSet|{{{1|}}}|get|set|/}} the prim&#039;s reflection probe configuration}}}}&lt;br /&gt;
{{#vardefine:p_ambiance_desc|Ranges from 0.0 to 100.0. Is the brightness of lighting effects from the probe, but not reflection effects. If the environment settings has nonzero reflection probe ambiance, the effective probe ambiance is the greater of the two. }}&lt;br /&gt;
{{#vardefine:p_clip_distance_desc|Ranges from 0.0 to 1024.0. Is the minimum distance from the probe&#039;s center where the surroundings are included for imaging.}}&lt;br /&gt;
{{#vardefine:p_flags_desc|PRIM_REFLECTION_PROBE_* flags}}&lt;br /&gt;
}}&lt;br /&gt;
{{#vardefine:reflection_probe_flags_rows|&lt;br /&gt;
!{{!}} {{LSLPT|pstype|type}} Flags&lt;br /&gt;
! title=&amp;quot;value&amp;quot; {{!}} V&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; {{!}} Description&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; {{!}} Notes&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{LSL Const|PRIM_REFLECTION_PROBE_BOX|integer|1|c=Determines if the reflection probe is a box or a sphere.}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} {{#var:comment}}&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} Unset by default (probe is a sphere)&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{LSL Const|PRIM_REFLECTION_PROBE_DYNAMIC|integer|2|c=Determines if avatars are included by the probe for imaging.}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} {{#var:comment}}&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} Unset by default (probe does not image avatars). Imaging avatars in probes has a performance cost.&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
{{LSL Constant&lt;br /&gt;
|inject-2={{LSL PrimitiveParam Categorize|Prim}}&lt;br /&gt;
|name=PRIM_REFLECTION_PROBE&lt;br /&gt;
|type=integer&lt;br /&gt;
|value=44&lt;br /&gt;
|desc=PRIM_REFLECTION_PROBE is used to change the reflection probe configuration of the prim.&lt;br /&gt;
&lt;br /&gt;
A reflection probe is a volume used for image-based lighting (IBL). It takes an image of its surroundings and uses it as the basis for reflection effects (shiny surfaces) and ambiance effects (light bouncing).&lt;br /&gt;
&lt;br /&gt;
Typically, the viewer automatically places reflection probes. Prim-based probes enable artists to provide hints to the render engine to improve the quality of image based lighting. Only objects in the probe&#039;s influence volume are affected.&lt;br /&gt;
&lt;br /&gt;
Lighting is most accurate when the edges of a probe volume are near the geometry that appears in reflections. For example, objects inside a room with a box shaped reflection probe that hugs the walls, floor, and ceiling would show accurate reflections and ambient lighting from the walls of the room.&lt;br /&gt;
|pa={{LSL Constant/List|i_front=[&amp;amp;#32;{{#var:reflection_probe_const}},&amp;amp;#32;|i_end=&amp;amp;nbsp;]&lt;br /&gt;
|text=When used with [[llSetPrimitiveParams]] &amp;amp; [[llSetLinkPrimitiveParams]] &amp;amp; [[llSetLinkPrimitiveParamsFast]]&lt;br /&gt;
|toc=llSetPrimitiveParams&lt;br /&gt;
|i1_type=integer|i1_subtype=boolean|i1_name=boolean&lt;br /&gt;
|i2_type=float|i2_name=ambiance&lt;br /&gt;
|i3_type=float|i3_name=clip_distance&lt;br /&gt;
|i4_type=integer|i4_name=flags&lt;br /&gt;
|pc=&lt;br /&gt;
{{{!}} class=&amp;quot;sortable&amp;quot; {{Prettytable|style=margin-top:0;}}&lt;br /&gt;
{{!}}- {{Hl2}}&lt;br /&gt;
{{#var:reflection_probe_flags_rows}}&lt;br /&gt;
{{!}}}&lt;br /&gt;
}}&lt;br /&gt;
|pb={{LSL Constant/List|i_front=[[llGetPrimitiveParams]]([&amp;amp;nbsp;{{#var:reflection_probe_const}}|i_end=&amp;amp;nbsp;]);|&lt;br /&gt;
|r_front=Returns the list [&amp;amp;nbsp;|r_end=&amp;amp;nbsp;]&lt;br /&gt;
|text&lt;br /&gt;
|toc=llGetPrimitiveParams&lt;br /&gt;
|r1_type=integer|r1_subtype=boolean|r1_name=boolean&lt;br /&gt;
|r2_type=float|r2_name=ambiance&lt;br /&gt;
|r3_type=float|r3_name=clip_distance&lt;br /&gt;
|r4_type=integer|r4_name=flags&lt;br /&gt;
}}&lt;br /&gt;
|pc=&lt;br /&gt;
{{{!}} class=&amp;quot;sortable&amp;quot; {{Prettytable|style=margin-top:0;}}&lt;br /&gt;
{{!}}- {{Hl2}}&lt;br /&gt;
{{#var:reflection_probe_flags_rows}}&lt;br /&gt;
{{!}}}&lt;br /&gt;
|examples=&lt;br /&gt;
Increase the prim&#039;s reflection probe ambiance when an agent is detected in the sensor range of the prim. Decrease the probe ambiance when an agent is no longer detected.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer probe_enabled = TRUE;&lt;br /&gt;
float probe_no_agent_ambiance = 0.0;&lt;br /&gt;
float probe_agent_ambiance = 1.0;&lt;br /&gt;
float probe_clip_distance = 0.0;&lt;br /&gt;
integer probe_flags = 0;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        integer sensor_type = AGENT;&lt;br /&gt;
        float sensor_range = 3.0;&lt;br /&gt;
        float sensor_rate = 5.0;&lt;br /&gt;
        llSensorRepeat(&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, sensor_type, sensor_range, PI, sensor_rate);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    sensor(integer num_detected)&lt;br /&gt;
    {&lt;br /&gt;
        llSetPrimitiveParams([PRIM_REFLECTION_PROBE, probe_enabled, probe_agent_ambiance, probe_clip_distance, probe_flags]);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    no_sensor()&lt;br /&gt;
    {&lt;br /&gt;
        llSetPrimitiveParams([PRIM_REFLECTION_PROBE, probe_enabled, probe_no_agent_ambiance, probe_clip_distance, probe_flags]);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|constants&lt;br /&gt;
|caveats= &lt;br /&gt;
* A viewer must have reflections enabled to see the effects of reflection probes.&lt;br /&gt;
* By default, the viewer auto-places reflection probes with 0.0 ambiance. Environment settings for the region or parcel can be adjusted to increase reflection probe ambiance for these auto-placed probes.&lt;br /&gt;
* Automatically-placed reflection probes do not image avatars. Imaging avatars in probes has a performance cost.&lt;br /&gt;
|functions=&lt;br /&gt;
{{LSL DefineRow||[[LlSetEnvironment]]|}}&lt;br /&gt;
{{LSL DefineRow||[[LlReplaceEnvironment]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llSetPrimitiveParams]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llSetLinkPrimitiveParams]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llSetLinkPrimitiveParamsFast]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetPrimitiveParams]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetLinkPrimitiveParams]]|}}&lt;br /&gt;
|events&lt;br /&gt;
|location&lt;br /&gt;
|cat1=ReflectionProbe&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:glTF]]&lt;/div&gt;</description>
			<pubDate>Thu, 04 Apr 2024 19:34:28 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:PRIM_REFLECTION_PROBE</comments>
		</item>
		<item>
			<title>LlReplaceEnvironment</title>
			<link>https://wiki.secondlife.com/w/index.php?title=LlReplaceEnvironment&amp;diff=1216419</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=LlReplaceEnvironment&amp;diff=1216419</guid>
			<description>&lt;p&gt;Maestro Linden: Clarify that modifying a group parcel requires the script to be group-owned or for the owner to have the appropriate ability and be present in the sim.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func=llReplaceEnvironment&lt;br /&gt;
|func_desc=The llReplaceEnvironment function replaces the environment in a parcel or a region. Either for a single elevation track or the entire environment. The owner of the script must have permission to edit the environment on the destination parcel, or be an estate manage in the case of an entire region.&lt;br /&gt;
In most cases errors are reported as a return value from the function (see table below). However, issues with the environment assets may be reported in the debug chat.&lt;br /&gt;
|return_type=Integer&lt;br /&gt;
|p1_type=vector|p1_name=position|p1_desc=The position in the region of the parcel that will receive the new environment. To change the entire region use &amp;amp;lt;-1, -1, -1&amp;amp;gt;. The z component of the vector is ignored.&lt;br /&gt;
|p2_type=string|p2_name=environment|p2_desc=The name of an environmental setting in the object&#039;s inventory or the asset ID for an environment. NULL_KEY or empty string to remove the environment.&lt;br /&gt;
|p3_type=integer|p3_name=track_no|p3_desc=The elevation zone to change. 0 for water, 1 for ground level, 2 for sky 1000m, 3 for sky 2000m, 4 for sky 3000m. -1 to change all tracks.&lt;br /&gt;
|p4_type=integer|p4_name=day_length|p4_desc=The length in seconds for the day cycle. -1 to leave unchanged.&lt;br /&gt;
|p5_type=integer|p5_name=day_offset|p5_desc=The offset in seconds from UTC. -1 to leave unchanged.&lt;br /&gt;
|constants=&lt;br /&gt;
{{{!}} class=&amp;quot;sortable&amp;quot; {{Prettytable|style=margin-top:0;}}&lt;br /&gt;
{{!}}+ &#039;&#039;&#039;Return Values&#039;&#039;&#039;&lt;br /&gt;
{{!}}-{{Hl2}}&lt;br /&gt;
!Value&lt;br /&gt;
!Constant&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{!!}} 1 {{!!}} The parcel or region will attempt to change the applied environment.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} ENV_NO_ENVIRONMENT {{!!}} -3 {{!!}} The environment inventory object could not be found.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} ENV_THROTTLE {{!!}} -8 {{!!}} The scripts have exceeded the throttle.  Wait and retry the request.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} ENV_NO_PERMISSIONS{{!!}} -9 {{!!}} The script does not have permission to change the environment at the selected location. &amp;lt;br&amp;gt;OR&amp;lt;br&amp;gt; there was an attempt to remove altitude track 0 or 1 (in this case a message will also be chatted to the debug channel).&lt;br /&gt;
{{!}}}&lt;br /&gt;
|caveats=&lt;br /&gt;
* An environment set locally on the viewer will override any environment set from this function.&lt;br /&gt;
* A parameter override set by [[llSetEnvironment]] will be preserved after the environment is replaced by this function.  Call [[llSetEnvironment]] with an empty list parameter to clear any straggling overrides.&lt;br /&gt;
* The environment specified by this function is applied asynchronously, as the simulator must download the environment asset before applying it. This means that [[llGetEnvironment]] will not immediately reflect the new environment&#039;s parameters, although the delay is typically quite small.&lt;br /&gt;
* If a UUID is passed as the environment parameter and that UUID does not specify an environment setting or one can not be constructed, the function will return success (1) but will post a message to the debug channel.&lt;br /&gt;
* If the parcel is group-owned, the script must either be deeded to the group, or the script owner must have &amp;quot;Modify environment settings and day cycle&amp;quot; group ability &#039;&#039;&#039;and&#039;&#039;&#039; have an active agent in the sim.&lt;br /&gt;
|examples=&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
//  Will set the entire region to the &amp;quot;Tropicalia&amp;quot; EEP from the Linden inventory when touched. &lt;br /&gt;
//  It will set all the tracks to the same EEP with 24 hour day and a -8 hour Day Offset.&lt;br /&gt;
//  The &amp;quot;Tropicalia&amp;quot; must be in the prims inventory with the script.  &lt;br /&gt;
//&lt;br /&gt;
//  Limited to Estate Managers or Region owners.&lt;br /&gt;
//  Madi Perth - 4/17/2023&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        llReplaceEnvironment(&amp;lt;-1, -1, -1&amp;gt;, &amp;quot;Tropicalia&amp;quot;, -1, 86400, (86400-28800));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llSetAgentEnvironment]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetEnvironment]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llSetEnvironment]]|}}&lt;br /&gt;
|notes&lt;br /&gt;
|history = Date of Release  [https://releasenotes.secondlife.com/simulator/2022-08-12.574216.html 12/08/2022]&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Wed, 27 Mar 2024 18:41:39 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:LlReplaceEnvironment</comments>
		</item>
		<item>
			<title>LlSetEnvironment</title>
			<link>https://wiki.secondlife.com/w/index.php?title=LlSetEnvironment&amp;diff=1216418</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=LlSetEnvironment&amp;diff=1216418</guid>
			<description>&lt;p&gt;Maestro Linden: Clarify that modifying a group parcel requires the script to be group-owned or for the owner to have the appropriate ability and be present in the sim.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func=llSetEnvironment&lt;br /&gt;
|func_desc=This function overrides the environmental settings for a region or a parcel. The owner of the script must have permission to modify the environment on the parcel or be an estate manager to change the entire region.&lt;br /&gt;
&lt;br /&gt;
An override for a given parameter can be set at the region scope or parcel scope.  It can also be set for a single sky track, all sky tracks, or both.  If an override of a given parameter is specified for both an individual track and all tracks, the individual track&#039;s override takes priority.&lt;br /&gt;
&lt;br /&gt;
Note that the list of valid parameters differs from those available for [[llGetEnvironment]].&lt;br /&gt;
|return_type=Integer&lt;br /&gt;
|p1_type= vector|p1_name= position|p1_desc= The location on the region of the parcel to be changed. Use &amp;amp;lt;-1, -1, z&amp;amp;gt; for the entire region.  The z-component specifies which sky track to change, based on elevation.  Use z=-1 to set an override on the special &#039;all tracks&#039; slot.&lt;br /&gt;
|p2_type= list|p2_name= params|p2_desc= A list of parameters to change for the parcel or region. Passing an empty list will remove any modifications from previous calls to llSetEnvironment.&lt;br /&gt;
|constants=&lt;br /&gt;
{{{!}} class=&amp;quot;sortable&amp;quot; {{Prettytable|style=margin-top:0;}}&lt;br /&gt;
{{!}}+ &#039;&#039;&#039;Return Values&#039;&#039;&#039;&lt;br /&gt;
{{!}}-{{Hl2}}&lt;br /&gt;
!Value&lt;br /&gt;
!Constant&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{!!}} 1 {{!!}} The parcel or region will attempt to change the applied environment.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} ENV_NO_ENVIRONMENT {{!!}} -3 {{!!}} There is no environment on this parcel to modify.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} ENV_INVALID_RULE {{!!}} -5 {{!!}} There was an issue with one of the rules.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} ENV_VALIDATION_FAIL {{!!}} -6 {{!!}} Unable to validate values passed.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} ENV_THROTTLE {{!!}} -8 {{!!}} The scripts have exceeded the throttle.  Wait and retry the request.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} ENV_NO_PERMISSIONS {{!!}} -9 {{!!}} The script does not have rights to modify this parcel or region.&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
{{:LSL Constants/llSetEnvironment}}&lt;br /&gt;
&lt;br /&gt;
|caveats= &lt;br /&gt;
* An environment set locally on the viewer will override any environment set from this function.&lt;br /&gt;
* When changing a parcel&#039;s environment it must first have had an environment set.&lt;br /&gt;
* If the parcel is group-owned, the script must either be deeded to the group, or the script owner must have &amp;quot;Modify environment settings and day cycle&amp;quot; group ability &#039;&#039;&#039;and&#039;&#039;&#039; have an active agent in the sim.&lt;br /&gt;
|examples=&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llReplaceAgentEnvironment]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetEnvironment]]|}}&lt;br /&gt;
|notes&lt;br /&gt;
|history = Date of Release  [https://releasenotes.secondlife.com/simulator/2022-08-12.574216.html 12/08/2022]&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Wed, 27 Mar 2024 18:41:24 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:LlSetEnvironment</comments>
		</item>
		<item>
			<title>LlSetLinkSitFlags</title>
			<link>https://wiki.secondlife.com/w/index.php?title=LlSetLinkSitFlags&amp;diff=1216353</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=LlSetLinkSitFlags&amp;diff=1216353</guid>
			<description>&lt;p&gt;Maestro Linden: Added note that SIT_FLAG_NO_COLLIDE is applied at sit time only.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{LSL Function/link-face|link}}&lt;br /&gt;
|func_id=|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llSetLinkSitFlags|return_type=&lt;br /&gt;
|p1_type=integer|p1_name=link|p1_desc=The link ID &lt;br /&gt;
|p2_type=integer|p2_name=flags|p2_desc=Flags to set &lt;br /&gt;
|func_desc=Sets flags on the link&#039;s sittarget.&lt;br /&gt;
|return_text&lt;br /&gt;
|spec=Sets the sit flags for the sit target in the link.  Sit flags only apply when a sit target is present in the link.&lt;br /&gt;
{{LSL Constants/SitFlags}}&lt;br /&gt;
|caveats=&lt;br /&gt;
* [[SIT_FLAG_NO_COLLIDE]] is applied at the time of sitting.  Updating this flag will not change the collision behavior of an agent that was previously seated on the sit target.&lt;br /&gt;
|examples&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions&lt;br /&gt;
|also&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Script&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Thu, 14 Mar 2024 20:30:21 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:LlSetLinkSitFlags</comments>
		</item>
		<item>
			<title>LlSetLinkSitFlags</title>
			<link>https://wiki.secondlife.com/w/index.php?title=LlSetLinkSitFlags&amp;diff=1216352</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=LlSetLinkSitFlags&amp;diff=1216352</guid>
			<description>&lt;p&gt;Maestro Linden: Clarify that llSetLinkSitFlags does not fail when there is no sit target present, but that various sit flags simply are not applied in that case (but will be applied if a sit target is added later on)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{LSL Function/link-face|link}}&lt;br /&gt;
|func_id=|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llSetLinkSitFlags|return_type=&lt;br /&gt;
|p1_type=integer|p1_name=link|p1_desc=The link ID &lt;br /&gt;
|p2_type=integer|p2_name=flags|p2_desc=Flags to set &lt;br /&gt;
|func_desc=Sets flags on the link&#039;s sittarget.&lt;br /&gt;
|return_text&lt;br /&gt;
|spec=Sets the sit flags for the sit target in the link.  Sit flags only apply when a sit target is present in the link.&lt;br /&gt;
{{LSL Constants/SitFlags}}&lt;br /&gt;
|caveats=&lt;br /&gt;
|examples&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions&lt;br /&gt;
|also&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Script&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Thu, 14 Mar 2024 18:30:16 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:LlSetLinkSitFlags</comments>
		</item>
		<item>
			<title>Template:LSL Constants/SitFlags</title>
			<link>https://wiki.secondlife.com/w/index.php?title=Template:LSL_Constants/SitFlags&amp;diff=1216351</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=Template:LSL_Constants/SitFlags&amp;diff=1216351</guid>
			<description>&lt;p&gt;Maestro Linden: Add notes about limitations of SIT_FLAG_ALLOW_UNSIT and SIT_FLAG_SIT_TARGET&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;padding: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
{{{!}} class=&amp;quot;sortable&amp;quot; {{Prettytable}}&lt;br /&gt;
{{!}}- {{Hl2}}&lt;br /&gt;
! {{!}} Flag&lt;br /&gt;
! title=&amp;quot;Value&amp;quot; {{!}}&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; {{!}} Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|SIT_FLAG_SIT_TARGET|integer|1|ihex=1|c=Read-only flag to indicate whether the link has a sit target.  Use [[llSitTarget]], [[llLinkSitTarget]], or [[PRIM_SIT_TARGET]] to disable or enable this flag.}}&lt;br /&gt;
{{!}}{{#var:hvalue}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|SIT_FLAG_ALLOW_UNSIT|integer|2|ihex=2|c=Allow an avatar to manually unsit from a sit target.  Only applies to agents who had been seated via an LSL script.}}&lt;br /&gt;
{{!}}{{#var:hvalue}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|SIT_FLAG_SCRIPTED_ONLY|integer|4|ihex=4|c=Only allow scripted sits on this sit target.}}&lt;br /&gt;
{{!}}{{#var:hvalue}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|SIT_FLAG_NO_COLLIDE|integer|16|ihex=16|c=Disable the avatar&#039;s collision volume when they are seated on this sit target.}}&lt;br /&gt;
{{!}}{{#var:hvalue}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 14 Mar 2024 18:13:15 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Template_talk:LSL_Constants/SitFlags</comments>
		</item>
		<item>
			<title>PRIM ALLOW UNSIT</title>
			<link>https://wiki.secondlife.com/w/index.php?title=PRIM_ALLOW_UNSIT&amp;diff=1216350</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=PRIM_ALLOW_UNSIT&amp;diff=1216350</guid>
			<description>&lt;p&gt;Maestro Linden: Clarify that this flag only affects agents who were seated on the object using experience permissions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Constant&lt;br /&gt;
|name=PRIM_ALLOW_UNSIT&lt;br /&gt;
|type=integer&lt;br /&gt;
|value= 39&lt;br /&gt;
|desc=When set on a prim that is running a script as part of an experience an avatar that is seated on the sit target and has agreed to participate in the experience will be unable to stand or select another prim to sit on.  The restriction remains in place until one of the following conditions is met:&lt;br /&gt;
* PRIM_ALLOW_UNSIT is changed to TRUE&lt;br /&gt;
* llUnSit( ) is called forcing the avatar to stand.&lt;br /&gt;
* llSitOnLink( ) is called moving this avatar to a new sit target. &lt;br /&gt;
* The avatar teleports or is teleported by the experience.&lt;br /&gt;
* The agent signs off.&lt;br /&gt;
* The agent disables the experience.&lt;br /&gt;
* The prim the avatar is seated on is destroyed.&lt;br /&gt;
* The agent is unseated for any reason.&lt;br /&gt;
&lt;br /&gt;
This flag has no effect on agents who had seated manually (i.e. &#039;&#039;&#039;not&#039;&#039;&#039; via [[llSitOnLink]] using experience permissions).&lt;br /&gt;
&lt;br /&gt;
If the linkset moves to a region that has not enabled the experience this value will be ignored and standing will behave as normal, without restriction.  If the linkset moves to a parcel that the avatar does not have access to, the avatar will be forced to stand and the unsit restriction will be removed.&lt;br /&gt;
&lt;br /&gt;
|functions=&lt;br /&gt;
{{LSL DefineRow||[[llSetPrimitiveParams]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llSetLinkPrimitiveParams]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetPrimitiveParams]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetLinkPrimitiveParams]]|}}&lt;br /&gt;
|cat1=Experience&lt;br /&gt;
|cat2=Permissions/Experience&lt;br /&gt;
}}&lt;br /&gt;
[[Category:Experience Tools]]&lt;/div&gt;</description>
			<pubDate>Thu, 14 Mar 2024 17:55:10 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:PRIM_ALLOW_UNSIT</comments>
		</item>
		<item>
			<title>GLTF Overrides</title>
			<link>https://wiki.secondlife.com/w/index.php?title=GLTF_Overrides&amp;diff=1215422</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=GLTF_Overrides&amp;diff=1215422</guid>
			<description>&lt;p&gt;Maestro Linden: removed &amp;#039;terrain&amp;#039; typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{hint&lt;br /&gt;
 |mode=warning&lt;br /&gt;
 |title_desc=Future feature&lt;br /&gt;
 |desc=This function will be supported in the upcoming PBR project.&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;Currently it will only work in supported testing areas with a supported test viewer.&lt;br /&gt;
 }}&lt;br /&gt;
&lt;br /&gt;
[[Category:glTF]]&lt;br /&gt;
&lt;br /&gt;
== What are they? ==&lt;br /&gt;
&lt;br /&gt;
GLTF overrides are an implementation detail of [[PBR_Materials|PBR materials]], which only makes sense when a GLTF material is applied to a face of a prim.&lt;br /&gt;
&lt;br /&gt;
A GLTF override is a collection of changes applied on top of a GLTF material asset, plus texture transforms.&lt;br /&gt;
&lt;br /&gt;
== Texture transforms ==&lt;br /&gt;
&lt;br /&gt;
GLTF texture transforms behave differently than their Blinn-Phong counterparts, and instead follow the [[https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_texture_transform KHR_texture_transform spec]]. Because of this, [[LlSetTextureAnim|texture animations]] are animated independently of the texture transforms.&lt;br /&gt;
&lt;br /&gt;
== Applying a GLTF material from LSL ==&lt;br /&gt;
&lt;br /&gt;
These prim params affect the GLTF material on a face:&lt;br /&gt;
&lt;br /&gt;
* [[PRIM_RENDER_MATERIAL]]&lt;br /&gt;
* [[PRIM_GLTF_BASE_COLOR]]&lt;br /&gt;
* [[PRIM_GLTF_NORMAL]]&lt;br /&gt;
* [[PRIM_GLTF_METALLIC_ROUGHNESS]]&lt;br /&gt;
* [[PRIM_GLTF_EMISSIVE]]&lt;br /&gt;
&lt;br /&gt;
When setting [[PRIM_RENDER_MATERIAL]] on a face, most of the GLTF overrides will be cleared on that face, with the exception of texture transforms (repeats, offsets, and rotation_in_radians).&lt;br /&gt;
&lt;br /&gt;
The rest of these prim params are for GLTF overrides. For example, [[PRIM_GLTF_BASE_COLOR]] includes the GLTF base color property overrides as well as the base color texture transform. Setting nearly any GLTF override to the empty string (&amp;quot;&amp;quot;) will unset it, causing the property of the underlying GLTF material asset to be used instead. Currently, setting a texture transform to empty strings (&amp;quot;&amp;quot;) will set them to the default value instead.&lt;br /&gt;
&lt;br /&gt;
Note that it is not possible to read properties of the underlying GLTF material asset from scripts. If a property is unset, it will be the empty string (&amp;quot;&amp;quot;) when read from a script.&lt;br /&gt;
&lt;br /&gt;
Attempting to set a GLTF override when [[PRIM_RENDER_MATERIAL]] is [[NULL_KEY]] will clear most GLTF overrides on that face, with the exceptions of texture transforms.&lt;br /&gt;
&lt;br /&gt;
== Permissions ==&lt;br /&gt;
&lt;br /&gt;
When a no-mod GLTF material is applied to a prim face, its GLTF overrides cannot be modified, with the exception of texture transforms.&lt;/div&gt;</description>
			<pubDate>Tue, 21 Nov 2023 16:12:23 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:GLTF_Overrides</comments>
		</item>
		<item>
			<title>PRIM GLTF EMISSIVE</title>
			<link>https://wiki.secondlife.com/w/index.php?title=PRIM_GLTF_EMISSIVE&amp;diff=1215179</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=PRIM_GLTF_EMISSIVE&amp;diff=1215179</guid>
			<description>&lt;p&gt;Maestro Linden: Redirected page to GLTF Overrides&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[GLTF_Overrides]]&lt;/div&gt;</description>
			<pubDate>Fri, 27 Oct 2023 18:59:55 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:PRIM_GLTF_EMISSIVE</comments>
		</item>
		<item>
			<title>PRIM GLTF METALLIC ROUGHNESS</title>
			<link>https://wiki.secondlife.com/w/index.php?title=PRIM_GLTF_METALLIC_ROUGHNESS&amp;diff=1215178</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=PRIM_GLTF_METALLIC_ROUGHNESS&amp;diff=1215178</guid>
			<description>&lt;p&gt;Maestro Linden: Redirected page to GLTF Overrides&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[GLTF_Overrides]]&lt;/div&gt;</description>
			<pubDate>Fri, 27 Oct 2023 18:59:49 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:PRIM_GLTF_METALLIC_ROUGHNESS</comments>
		</item>
		<item>
			<title>PRIM GLTF NORMAL</title>
			<link>https://wiki.secondlife.com/w/index.php?title=PRIM_GLTF_NORMAL&amp;diff=1215177</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=PRIM_GLTF_NORMAL&amp;diff=1215177</guid>
			<description>&lt;p&gt;Maestro Linden: Redirected page to GLTF Overrides&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[GLTF_Overrides]]&lt;/div&gt;</description>
			<pubDate>Fri, 27 Oct 2023 18:59:42 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:PRIM_GLTF_NORMAL</comments>
		</item>
		<item>
			<title>PRIM GLTF BASE COLOR</title>
			<link>https://wiki.secondlife.com/w/index.php?title=PRIM_GLTF_BASE_COLOR&amp;diff=1215176</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=PRIM_GLTF_BASE_COLOR&amp;diff=1215176</guid>
			<description>&lt;p&gt;Maestro Linden: Redirected page to GLTF Overrides&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[GLTF_Overrides]]&lt;/div&gt;</description>
			<pubDate>Fri, 27 Oct 2023 18:59:34 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:PRIM_GLTF_BASE_COLOR</comments>
		</item>
		<item>
			<title>Template:LSL Constants/PrimitiveParams/sculpt types</title>
			<link>https://wiki.secondlife.com/w/index.php?title=Template:LSL_Constants/PrimitiveParams/sculpt_types&amp;diff=1215170</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=Template:LSL_Constants/PrimitiveParams/sculpt_types&amp;diff=1215170</guid>
			<description>&lt;p&gt;Maestro Linden: Added note that PRIM_SCULPT_FLAG_ANIMESH is read-only&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#if:{{{table|}}}&amp;lt;noinclude&amp;gt;1&amp;lt;/noinclude&amp;gt;|&lt;br /&gt;
{{{!}} {{#if:{{{sortable|}}}&amp;lt;noinclude&amp;gt;1&amp;lt;/noinclude&amp;gt;|class=&amp;quot;sortable&amp;quot;}} {{Prettytable|style={{{style|}}}}}}}&lt;br /&gt;
{{!}}- {{#if:{{{table|}}}&amp;lt;noinclude&amp;gt;1&amp;lt;/noinclude&amp;gt;|{{Hl2}}}}&lt;br /&gt;
! {{#if:{{{sortable|}}}&amp;lt;noinclude&amp;gt;1&amp;lt;/noinclude&amp;gt;||colspan=&amp;quot;2&amp;quot;}} {{!}} {{LSL Param|type}}&amp;amp;nbsp;Flags&lt;br /&gt;
{{#if:{{{sortable|}}}&amp;lt;noinclude&amp;gt;1&amp;lt;/noinclude&amp;gt;|! title=&amp;quot;Value&amp;quot; {{!}}}}&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; {{!}} Style&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; class=&amp;quot;unsortable&amp;quot; {{!}} Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_SCULPT_TYPE_SPHERE|integer|1}}&lt;br /&gt;
{{!!}}Sphere&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} Converge top &amp;amp; bottom, stitch left side to right&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_SCULPT_TYPE_TORUS|integer|2}}&lt;br /&gt;
{{!!}}Torus&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} Stitch top to bottom, stitch left side to right&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_SCULPT_TYPE_PLANE|integer|3}}&lt;br /&gt;
{{!!}}Plane&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} No stitching or converging&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_SCULPT_TYPE_CYLINDER|integer|4}}&lt;br /&gt;
{{!!}}Cylinder&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} Stitch left side to right.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_SCULPT_TYPE_MESH|integer|5}}&lt;br /&gt;
{{!!}}[[Mesh]] model&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} See: [[Mesh]]&lt;br /&gt;
{{!}}- style=&amp;quot;background-color: rgba(0, 0, 0, 0.1);&amp;quot; &lt;br /&gt;
{{LSL ConstTB|PRIM_SCULPT_FLAG_ZZZZZZZZ|integer|63|s=style=&amp;quot;display:none;&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;6&amp;quot; {{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_SCULPT_FLAG_ANIMESH|integer|hex=0x20}}&lt;br /&gt;
{{!!}}Animesh&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} Read-only flag to query [[Animesh_User_Guide|Animated mesh]] status.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_SCULPT_FLAG_INVERT|integer|hex=0x40}}&lt;br /&gt;
{{!!}}Invert&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} Render inside out (inverts the normals).&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_SCULPT_FLAG_MIRROR|integer|hex=0x80}}&lt;br /&gt;
{{!!}}Mirror&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} Render an X axis mirror of the sculpty.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{#if:{{{table|}}}&amp;lt;noinclude&amp;gt;1&amp;lt;/noinclude&amp;gt;|{{!}}} }}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{| {{Prettytable}}&lt;br /&gt;
{{LSL_Constants/PrimitiveParams/sculpt_types}}&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; {{Prettytable}}&lt;br /&gt;
{{LSL_Constants/PrimitiveParams/sculpt_types|sortable=*}}&lt;br /&gt;
|}&lt;br /&gt;
{{LSL_Constants/PrimitiveParams/sculpt_types|table=*|sortable=*}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 26 Oct 2023 17:46:41 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Template_talk:LSL_Constants/PrimitiveParams/sculpt_types</comments>
		</item>
		<item>
			<title>CLICK ACTION IGNORE</title>
			<link>https://wiki.secondlife.com/w/index.php?title=CLICK_ACTION_IGNORE&amp;diff=1214563</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=CLICK_ACTION_IGNORE&amp;diff=1214563</guid>
			<description>&lt;p&gt;Maestro Linden: Create page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Constant&lt;br /&gt;
|name=CLICK_ACTION_IGNORE&lt;br /&gt;
|type=integer&lt;br /&gt;
|value=9&lt;br /&gt;
|desc&lt;br /&gt;
|examples&lt;br /&gt;
|functions=&lt;br /&gt;
{{LSL DefineRow||[[llSetClickAction]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetObjectDetails]]|}}&lt;br /&gt;
|events&lt;br /&gt;
|cat1=Click Action&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
|self&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Wed, 06 Sep 2023 16:37:10 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:CLICK_ACTION_IGNORE</comments>
		</item>
		<item>
			<title>LlSetClickAction</title>
			<link>https://wiki.secondlife.com/w/index.php?title=LlSetClickAction&amp;diff=1214562</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=LlSetClickAction&amp;diff=1214562</guid>
			<description>&lt;p&gt;Maestro Linden: Fixed table formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{Issues/VWR-640}}{{Issues/VWR-10829}}&lt;br /&gt;
|func_id=333|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llSetClickAction&lt;br /&gt;
|p1_type=integer|p1_subtype=click_action|p1_name=action|p1_desc=CLICK_ACTION_* flag&lt;br /&gt;
|func_desc=Sets the action performed when a prim is clicked upon (aka [[click action]]).&lt;br /&gt;
|func_footnote=When the cursor hovers over the prim, its image changes to reflect the action.&lt;br /&gt;
|caveats= *When set in the root of an object the chosen CLICK_ACTION_* will be that for the children also even if they have their own [[llSetClickAction]] set (it will be over-ridden). However (in the case of [[touch]] for example) if the CLICK_ACTION_* is set in the root but not at all in the children (including not having [[touch]] [[event]] [[script]]s in them (this creates a default [[CLICK_ACTION_TOUCH]])) the effect of the roots CLICK_ACTION_* is not &#039;&#039;seen&#039;&#039; but the CLICK_ACTION_* is &#039;&#039;used&#039;&#039; on clicking. To both use &#039;&#039;&#039;and see&#039;&#039;&#039; the correct cursor the CLICK_ACTION_* flags must match in the children and root.&lt;br /&gt;
*If [[llSetClickAction]] is [[CLICK_ACTION_PAY]] then you must have a [[money]] event, or it will revert to [[CLICK_ACTION_NONE]].&lt;br /&gt;
*While this function works or attached objects (click action can be changed), the configured click action of an attachment is ignored by the viewer (with exceptions).  The viewer always* behaves as though an attached object has [[CLICK_ACTION_TOUCH]] set.&lt;br /&gt;
*The only exception to the above rule is when the chosen click action is [[CLICK_ACTION_NONE]], which will disable the cursor changing from the standard pointer arrow to the touch pointer.&lt;br /&gt;
* [[llSetClickAction]] has to be called &#039;&#039;&#039;before&#039;&#039;&#039; an avatar clicks on an object. Calling it while an avatar is clicking (click &amp;amp; holding) will cause this function to silently fail. You &#039;&#039;can&#039;&#039; set the click action after an avatar touches an object, but bear in mind that there may be some delay before the given avatar&#039;s viewer will update due to ping times, etc.&lt;br /&gt;
|examples={{{!}} width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
{{!}}- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;make sitting easier&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;make unpacking for next owner easier&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;make buying for customers easier&#039;&#039;&#039;&lt;br /&gt;
{{!}}- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
{{!!}}&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetClickAction(CLICK_ACTION_SIT);&lt;br /&gt;
        llRemoveInventory(llGetScriptName());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{!!}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetClickAction(CLICK_ACTION_OPEN);&lt;br /&gt;
        llRemoveInventory(llGetScriptName());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{!!}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
//  remember you&#039;ll have to set a price&lt;br /&gt;
//  in the general tab of the edit window&lt;br /&gt;
//  for your object before using this script&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetClickAction(CLICK_ACTION_BUY);&lt;br /&gt;
        llRemoveInventory(llGetScriptName());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{!}}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
//  simple tipjar&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetClickAction(CLICK_ACTION_PAY);&lt;br /&gt;
&lt;br /&gt;
    //  enabled edit field to put own amount, all quick-pay-buttons hidden&lt;br /&gt;
        llSetPayPrice(PAY_DEFAULT, [PAY_HIDE, PAY_HIDE, PAY_HIDE, PAY_HIDE]);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    money(key id, integer amount)&lt;br /&gt;
    {&lt;br /&gt;
        string name = llKey2Name(id);&lt;br /&gt;
&lt;br /&gt;
        llInstantMessage(id, &amp;quot;Thank you for the tip, &amp;quot; + name + &amp;quot;!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
//Sit Only with Permission&lt;br /&gt;
&lt;br /&gt;
list gAvWhitelist = [&amp;quot;953d10f1-44ce-462a-8bc1-f634333ee031&amp;quot;, &amp;quot;599dce91-a2b8-48c5-b96d-54965433022b&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, 0.5&amp;gt;, ZERO_ROTATION);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            list Properties = llGetObjectDetails(llGetKey(), [OBJECT_CLICK_ACTION]);&lt;br /&gt;
            integer Click = llList2Integer(Properties, 0);&lt;br /&gt;
            key Av = llAvatarOnSitTarget();&lt;br /&gt;
            if ((Av != NULL_KEY) &amp;amp;&amp;amp; (!Click))&lt;br /&gt;
            {&lt;br /&gt;
                llSay(0, &amp;quot;Please click first for permission to sit.&amp;quot;);&lt;br /&gt;
                llUnSit(Av);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        list Properties = llGetObjectDetails(llGetKey(), [OBJECT_CLICK_ACTION]);&lt;br /&gt;
        integer Click = llList2Integer(Properties, 0);&lt;br /&gt;
        if (!Click &amp;amp;&amp;amp; (~llListFindList(gAvWhitelist, [(string)llDetectedKey(0)])))&lt;br /&gt;
        {&lt;br /&gt;
            llSetClickAction(CLICK_ACTION_SIT);&lt;br /&gt;
            llSetTimerEvent(10.0);&lt;br /&gt;
            llSay(0, &amp;quot;Please take a seat.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llSetClickAction(CLICK_ACTION_TOUCH);&lt;br /&gt;
            if (llAvatarOnSitTarget() != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                llSay(0, &amp;quot;Good bye!&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llSay(0, &amp;quot;Sorry.  You are not allowed to sit here.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            llUnSit(llDetectedKey(0));&lt;br /&gt;
        }            &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
        llSetClickAction(CLICK_ACTION_TOUCH);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|spec&lt;br /&gt;
|constants=&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
==Constants==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
{{{!}} class=&amp;quot;sortable&amp;quot; {{Prettytable}}&lt;br /&gt;
{{!}}- {{Hl2}}&lt;br /&gt;
! {{!}} Flag&lt;br /&gt;
! title=&amp;quot;Value&amp;quot; {{!}}&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; {{!}} Description&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; {{!}} Cursor&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|CLICK_ACTION_NONE|integer|0|c=Performs the default action: when the prim is touched, touch events are triggered}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}&amp;lt;!--[[Image:]]--&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|CLICK_ACTION_TOUCH|integer|0|c=When the prim is touched, touch events are triggered}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}&amp;lt;!--[[Image:]]--&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|CLICK_ACTION_SIT|integer|1|c=When the prim is touched, the avatar sits upon it}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}[[File:SitActionCursor.png‎]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|CLICK_ACTION_BUY|integer|2|c=When the prim is touched, the buy dialog is opened}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}[[File:SaleOneclickCursor.png]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|CLICK_ACTION_PAY|integer|3|c=When the prim is touched, the pay dialog is opened}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}[[File:SaleOneclickCursor.png]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|CLICK_ACTION_OPEN|integer|4|c=When the prim is touched, the object inventory dialog is opened}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}[[File:OpenOneclickCursor.png]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|CLICK_ACTION_PLAY|integer|5|c=Play or pause parcel media on touch}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}[[Image:Toolplay.png]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|CLICK_ACTION_OPEN_MEDIA|integer|6|c=Play parcel media on touch, no pause}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}[[Image:Toolmediaopen.png]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|CLICK_ACTION_ZOOM|integer|7|c=Zoom the avatar camera on this object}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}} ([[Viewer_2_Help|Viewer 2]])&lt;br /&gt;
{{!}}[[Image:Toolzoom.png]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|CLICK_ACTION_DISABLED|integer|8|c=No click action. No touches detected or passed.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}&amp;lt;!--[[Image:]]--&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|CLICK_ACTION_IGNORE|integer|9|c=Clicks go through the object to whatever is behind it. No touches detected.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}&amp;lt;!--[[Image:]]--&amp;gt;&lt;br /&gt;
{{!}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
|signature=&lt;br /&gt;
{{LSL Const/Signature|CLICK_ACTION_ZOOM|integer|7|c=Zoom}}&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llPassTouches]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events=&lt;br /&gt;
{{LSL DefineRow||[[touch_start]]}}&lt;br /&gt;
{{LSL DefineRow||[[touch]]}}&lt;br /&gt;
{{LSL DefineRow||[[touch_end]]}}&lt;br /&gt;
|also_articles={{LSL DefineRow||{{LSLGC|Detected}}}}&lt;br /&gt;
|deepnotes=*When using [[CLICK_ACTION_SIT]], an avatar who clicks the object and sits down and then clicks the object again will fire a [[touch]] event with the second click.&lt;br /&gt;
|history=&lt;br /&gt;
* Introduced in SL Client 1.19.1(0)&lt;br /&gt;
* [[CLICK_ACTION_ZOOM]] added in SL Server 1.32 and [[Viewer_2_Help|Viewer 2]]&lt;br /&gt;
|cat1=Prim&lt;br /&gt;
|cat2=Touch&lt;br /&gt;
|cat3=Sit&lt;br /&gt;
|cat4=Money&lt;br /&gt;
|cat5=Media&lt;br /&gt;
|cat6=Effects&lt;br /&gt;
|cat7=Click Action&lt;br /&gt;
|cat8&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Wed, 06 Sep 2023 16:34:24 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:LlSetClickAction</comments>
		</item>
		<item>
			<title>LlSetClickAction</title>
			<link>https://wiki.secondlife.com/w/index.php?title=LlSetClickAction&amp;diff=1214561</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=LlSetClickAction&amp;diff=1214561</guid>
			<description>&lt;p&gt;Maestro Linden: added CLICK_ACTION_IGNORE description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{Issues/VWR-640}}{{Issues/VWR-10829}}&lt;br /&gt;
|func_id=333|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llSetClickAction&lt;br /&gt;
|p1_type=integer|p1_subtype=click_action|p1_name=action|p1_desc=CLICK_ACTION_* flag&lt;br /&gt;
|func_desc=Sets the action performed when a prim is clicked upon (aka [[click action]]).&lt;br /&gt;
|func_footnote=When the cursor hovers over the prim, its image changes to reflect the action.&lt;br /&gt;
|caveats= *When set in the root of an object the chosen CLICK_ACTION_* will be that for the children also even if they have their own [[llSetClickAction]] set (it will be over-ridden). However (in the case of [[touch]] for example) if the CLICK_ACTION_* is set in the root but not at all in the children (including not having [[touch]] [[event]] [[script]]s in them (this creates a default [[CLICK_ACTION_TOUCH]])) the effect of the roots CLICK_ACTION_* is not &#039;&#039;seen&#039;&#039; but the CLICK_ACTION_* is &#039;&#039;used&#039;&#039; on clicking. To both use &#039;&#039;&#039;and see&#039;&#039;&#039; the correct cursor the CLICK_ACTION_* flags must match in the children and root.&lt;br /&gt;
*If [[llSetClickAction]] is [[CLICK_ACTION_PAY]] then you must have a [[money]] event, or it will revert to [[CLICK_ACTION_NONE]].&lt;br /&gt;
*While this function works or attached objects (click action can be changed), the configured click action of an attachment is ignored by the viewer (with exceptions).  The viewer always* behaves as though an attached object has [[CLICK_ACTION_TOUCH]] set.&lt;br /&gt;
*The only exception to the above rule is when the chosen click action is [[CLICK_ACTION_NONE]], which will disable the cursor changing from the standard pointer arrow to the touch pointer.&lt;br /&gt;
* [[llSetClickAction]] has to be called &#039;&#039;&#039;before&#039;&#039;&#039; an avatar clicks on an object. Calling it while an avatar is clicking (click &amp;amp; holding) will cause this function to silently fail. You &#039;&#039;can&#039;&#039; set the click action after an avatar touches an object, but bear in mind that there may be some delay before the given avatar&#039;s viewer will update due to ping times, etc.&lt;br /&gt;
|examples={{{!}} width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
{{!}}- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;make sitting easier&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;make unpacking for next owner easier&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;make buying for customers easier&#039;&#039;&#039;&lt;br /&gt;
{{!}}- valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
{{!!}}&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetClickAction(CLICK_ACTION_SIT);&lt;br /&gt;
        llRemoveInventory(llGetScriptName());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{!!}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetClickAction(CLICK_ACTION_OPEN);&lt;br /&gt;
        llRemoveInventory(llGetScriptName());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{!!}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
//  remember you&#039;ll have to set a price&lt;br /&gt;
//  in the general tab of the edit window&lt;br /&gt;
//  for your object before using this script&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetClickAction(CLICK_ACTION_BUY);&lt;br /&gt;
        llRemoveInventory(llGetScriptName());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{!}}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
//  simple tipjar&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetClickAction(CLICK_ACTION_PAY);&lt;br /&gt;
&lt;br /&gt;
    //  enabled edit field to put own amount, all quick-pay-buttons hidden&lt;br /&gt;
        llSetPayPrice(PAY_DEFAULT, [PAY_HIDE, PAY_HIDE, PAY_HIDE, PAY_HIDE]);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    money(key id, integer amount)&lt;br /&gt;
    {&lt;br /&gt;
        string name = llKey2Name(id);&lt;br /&gt;
&lt;br /&gt;
        llInstantMessage(id, &amp;quot;Thank you for the tip, &amp;quot; + name + &amp;quot;!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
//Sit Only with Permission&lt;br /&gt;
&lt;br /&gt;
list gAvWhitelist = [&amp;quot;953d10f1-44ce-462a-8bc1-f634333ee031&amp;quot;, &amp;quot;599dce91-a2b8-48c5-b96d-54965433022b&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, 0.5&amp;gt;, ZERO_ROTATION);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            list Properties = llGetObjectDetails(llGetKey(), [OBJECT_CLICK_ACTION]);&lt;br /&gt;
            integer Click = llList2Integer(Properties, 0);&lt;br /&gt;
            key Av = llAvatarOnSitTarget();&lt;br /&gt;
            if ((Av != NULL_KEY) &amp;amp;&amp;amp; (!Click))&lt;br /&gt;
            {&lt;br /&gt;
                llSay(0, &amp;quot;Please click first for permission to sit.&amp;quot;);&lt;br /&gt;
                llUnSit(Av);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        list Properties = llGetObjectDetails(llGetKey(), [OBJECT_CLICK_ACTION]);&lt;br /&gt;
        integer Click = llList2Integer(Properties, 0);&lt;br /&gt;
        if (!Click &amp;amp;&amp;amp; (~llListFindList(gAvWhitelist, [(string)llDetectedKey(0)])))&lt;br /&gt;
        {&lt;br /&gt;
            llSetClickAction(CLICK_ACTION_SIT);&lt;br /&gt;
            llSetTimerEvent(10.0);&lt;br /&gt;
            llSay(0, &amp;quot;Please take a seat.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llSetClickAction(CLICK_ACTION_TOUCH);&lt;br /&gt;
            if (llAvatarOnSitTarget() != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                llSay(0, &amp;quot;Good bye!&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llSay(0, &amp;quot;Sorry.  You are not allowed to sit here.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            llUnSit(llDetectedKey(0));&lt;br /&gt;
        }            &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
        llSetClickAction(CLICK_ACTION_TOUCH);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|spec&lt;br /&gt;
|constants=&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
==Constants==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
{{{!}} class=&amp;quot;sortable&amp;quot; {{Prettytable}}&lt;br /&gt;
{{!}}- {{Hl2}}&lt;br /&gt;
! {{!}} Flag&lt;br /&gt;
! title=&amp;quot;Value&amp;quot; {{!}}&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; {{!}} Description&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; {{!}} Cursor&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|CLICK_ACTION_NONE|integer|0|c=Performs the default action: when the prim is touched, touch events are triggered}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}&amp;lt;!--[[Image:]]--&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|CLICK_ACTION_TOUCH|integer|0|c=When the prim is touched, touch events are triggered}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}&amp;lt;!--[[Image:]]--&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|CLICK_ACTION_SIT|integer|1|c=When the prim is touched, the avatar sits upon it}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}[[File:SitActionCursor.png‎]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|CLICK_ACTION_BUY|integer|2|c=When the prim is touched, the buy dialog is opened}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}[[File:SaleOneclickCursor.png]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|CLICK_ACTION_PAY|integer|3|c=When the prim is touched, the pay dialog is opened}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}[[File:SaleOneclickCursor.png]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|CLICK_ACTION_OPEN|integer|4|c=When the prim is touched, the object inventory dialog is opened}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}[[File:OpenOneclickCursor.png]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|CLICK_ACTION_PLAY|integer|5|c=Play or pause parcel media on touch}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}[[Image:Toolplay.png]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|CLICK_ACTION_OPEN_MEDIA|integer|6|c=Play parcel media on touch, no pause}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}[[Image:Toolmediaopen.png]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|CLICK_ACTION_ZOOM|integer|7|c=Zoom the avatar camera on this object}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}} ([[Viewer_2_Help|Viewer 2]])&lt;br /&gt;
{{!}}[[Image:Toolzoom.png]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|CLICK_ACTION_DISABLED|integer|8|c=No click action. No touches detected or passed.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}&amp;lt;!--[[Image:]]--&amp;gt;&lt;br /&gt;
{{!}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{LSL Const|CLICK_ACTION_IGNORE|integer|9|c=Clicks go through the object to whatever is behind it. No touches detected.}}&lt;br /&gt;
{{!}}{{#var:value}}&lt;br /&gt;
{{!}}{{#var:comment}}&lt;br /&gt;
{{!}}&amp;lt;!--[[Image:]]--&amp;gt;&lt;br /&gt;
{{!}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
|signature=&lt;br /&gt;
{{LSL Const/Signature|CLICK_ACTION_ZOOM|integer|7|c=Zoom}}&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llPassTouches]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events=&lt;br /&gt;
{{LSL DefineRow||[[touch_start]]}}&lt;br /&gt;
{{LSL DefineRow||[[touch]]}}&lt;br /&gt;
{{LSL DefineRow||[[touch_end]]}}&lt;br /&gt;
|also_articles={{LSL DefineRow||{{LSLGC|Detected}}}}&lt;br /&gt;
|deepnotes=*When using [[CLICK_ACTION_SIT]], an avatar who clicks the object and sits down and then clicks the object again will fire a [[touch]] event with the second click.&lt;br /&gt;
|history=&lt;br /&gt;
* Introduced in SL Client 1.19.1(0)&lt;br /&gt;
* [[CLICK_ACTION_ZOOM]] added in SL Server 1.32 and [[Viewer_2_Help|Viewer 2]]&lt;br /&gt;
|cat1=Prim&lt;br /&gt;
|cat2=Touch&lt;br /&gt;
|cat3=Sit&lt;br /&gt;
|cat4=Money&lt;br /&gt;
|cat5=Media&lt;br /&gt;
|cat6=Effects&lt;br /&gt;
|cat7=Click Action&lt;br /&gt;
|cat8&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Wed, 06 Sep 2023 16:33:14 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:LlSetClickAction</comments>
		</item>
		<item>
			<title>LlGetTimeOfDay</title>
			<link>https://wiki.secondlife.com/w/index.php?title=LlGetTimeOfDay&amp;diff=1214418</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=LlGetTimeOfDay&amp;diff=1214418</guid>
			<description>&lt;p&gt;Maestro Linden: Made some edits to reflect how this function operates under custom environment settings&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func=llGetTimeOfDay&lt;br /&gt;
|func_id=80&lt;br /&gt;
|func_sleep=0.0&lt;br /&gt;
|func_energy=10.0&lt;br /&gt;
|return_type=float&lt;br /&gt;
|func_footnote=By default (without custom environment settings), Second Life day cycles are 4 hours long (3 hours of light, 1 hour of dark). The sunrise and sunset time varies slowly.&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=that is the time in seconds with subsecond precision since Second Life midnight (per the parcel-scoped day cycle settings) or region up-time (time since when the region was brought online/rebooted); whichever is smaller. If the parcel is configured so the sun stays in a constant position, then the returned value is the region up-time.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;//Time will be less than 4 hours unless the sun is locked.&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        float tod = llGetTimeOfDay( );&lt;br /&gt;
        llOwnerSay(&amp;quot;Time since last region restart or SL midnight (based on SL 4 hour day):&amp;quot;);&lt;br /&gt;
        integer hours = ((integer)tod / 3600) ;&lt;br /&gt;
        integer minutes = ((integer)tod / 60) - (hours * 60);&lt;br /&gt;
        llOwnerSay((string) tod + &amp;quot; seconds which is &amp;quot;+(string) hours+&amp;quot;h &amp;quot;+(string) minutes+&amp;quot;m&amp;quot;); &lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetSunDirection]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetRegionTimeOfDay]]|}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Time&lt;br /&gt;
|cat2=Region&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Tue, 29 Aug 2023 17:46:54 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:LlGetTimeOfDay</comments>
		</item>
		<item>
			<title>LlGetRegionTimeOfDay</title>
			<link>https://wiki.secondlife.com/w/index.php?title=LlGetRegionTimeOfDay&amp;diff=1214417</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=LlGetRegionTimeOfDay&amp;diff=1214417</guid>
			<description>&lt;p&gt;Maestro Linden: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func=llGetRegionTimeOfDay&lt;br /&gt;
|func_id=80&lt;br /&gt;
|func_sleep=0.0&lt;br /&gt;
|func_energy=10.0&lt;br /&gt;
|return_type=float&lt;br /&gt;
|func_footnote=By default (without custom environment settings), Second Life day cycles are 4 hours long (3 hours of light, 1 hour of dark). The sunrise and sunset time varies slowly.&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=that is the time in seconds with subsecond precision since Second Life midnight (per the region-scoped day cycle settings) or region up-time (time since when the region was brought online/rebooted); whichever is smaller. If the region is configured so the sun stays in a constant position, then the returned value is the region up-time.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;//Time will be less than 4 hours unless the sun is locked.&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        float tod = llGetRegionTimeOfDay( );&lt;br /&gt;
        llOwnerSay(&amp;quot;Time since last region restart or SL midnight (based on SL 4 hour day):&amp;quot;);&lt;br /&gt;
        integer hours = ((integer)tod / 3600) ;&lt;br /&gt;
        integer minutes = ((integer)tod / 60) - (hours * 60);&lt;br /&gt;
        llOwnerSay((string) tod + &amp;quot; seconds which is &amp;quot;+(string) hours+&amp;quot;h &amp;quot;+(string) minutes+&amp;quot;m&amp;quot;); &lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetSunDirection]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetTimeOfDay]]|}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Time&lt;br /&gt;
|cat2=Region&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Tue, 29 Aug 2023 17:45:20 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:LlGetRegionTimeOfDay</comments>
		</item>
		<item>
			<title>LlGetRegionTimeOfDay</title>
			<link>https://wiki.secondlife.com/w/index.php?title=LlGetRegionTimeOfDay&amp;diff=1214415</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=LlGetRegionTimeOfDay&amp;diff=1214415</guid>
			<description>&lt;p&gt;Maestro Linden: This function was created years ago but didn&amp;#039;t have a wiki page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func=llGetRegionTimeOfDay&lt;br /&gt;
|func_id=80&lt;br /&gt;
|func_sleep=0.0&lt;br /&gt;
|func_energy=10.0&lt;br /&gt;
|return_type=float&lt;br /&gt;
|func_footnote=By default (without custom environment settings), Second Life day cycles are 4 hours long (3 hours of light, 1 hour of dark). The sunrise and sunset time varies slowly.&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=that is the time in seconds with subsecond precision since Second Life midnight (per the region-scoped day cycle settings) or region up-time (time since when the region was brought online/rebooted); whichever is smaller. If the region is configured so the sun stays in a constant position, then the returned value is the region up-time.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;//Time will be less than 4 hours unless the sun is locked.&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        float tod = llGetRegionTimeOfDay( );&lt;br /&gt;
        llOwnerSay(&amp;quot;Time since last region restart or SL midnight (based on SL 4 hour day):&amp;quot;);&lt;br /&gt;
        integer hours = ((integer)tod / 3600) ;&lt;br /&gt;
        integer minutes = ((integer)tod / 60) - (hours * 60);&lt;br /&gt;
        llOwnerSay((string) tod + &amp;quot; seconds which is &amp;quot;+(string) hours+&amp;quot;h &amp;quot;+(string) minutes+&amp;quot;m&amp;quot;); &lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetSunDirection]]|}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Time&lt;br /&gt;
|cat2=Region&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Tue, 29 Aug 2023 17:44:41 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:LlGetRegionTimeOfDay</comments>
		</item>
		<item>
			<title>LlPushObject</title>
			<link>https://wiki.secondlife.com/w/index.php?title=LlPushObject&amp;diff=1214320</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=LlPushObject&amp;diff=1214320</guid>
			<description>&lt;p&gt;Maestro Linden: Added a caveat about energy use per BUG-234232&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{LSL_Function/uuid|target|sim=*|object=*|group=}}&lt;br /&gt;
|func_id=165|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llPushObject&lt;br /&gt;
|p1_type=key|p1_name=target|p1_desc&lt;br /&gt;
|p2_type=vector|p2_name=impulse|p2_desc=Direction and force of push. Direction is affected by {{LSLP|local}}.|p2_hover=Direction and force of push. Direction is affected by &#039;local&#039;.&lt;br /&gt;
|p3_type=vector|p3_name=ang_impulse|p3_desc=Rotational force.&lt;br /&gt;
|p4_type=integer|p4_name=local|p4_desc=boolean, if {{LSL Const|TRUE|integer|1}} uses the [[Viewer coordinate frames#Local|local]] axis of {{LSLP|target}}, if {{LSL Const|FALSE|integer|0}} uses the [[Viewer coordinate frames#Region|region]] axis.|p4_hover=boolean, if TRUE uses the local axis of &#039;target&#039;, if FALSE uses the region axis.&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc=Applies {{LSLP|impulse}} and {{LSLP|ang_impulse}} to object {{LSLP|target}}&lt;br /&gt;
|return_text&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=*Only works on land where Push is not restricted or where the script is owned by the land owner.&lt;br /&gt;
**If the land is owned by a group, the scripted object must be deeded to the same group.&lt;br /&gt;
*The effectiveness of Push is modulated by the amount of [[Energy|script energy]] available.&lt;br /&gt;
**There is a [[LlPushObject/Havok4Implementation|simplified code snippet]] describing how Push is implemented in the Havok4 project and reveals some of the details of how the energy budget affects the final Push magnitude.&lt;br /&gt;
*In no-push areas an object can only push its owner.&lt;br /&gt;
*{{LSLP|ang_impulse}} is ignored when applying to agents or their attachments.&lt;br /&gt;
*[[Energy]] is fully depleted by this function when either {{LSLP|impulse}} or {{LSLP|ang_impulse}} is nonzero.  If {{LSLP|impulse}} is nonzero, it will drain all energy in the object before {{LSLP|ang_impulse}} is processed, causing the push to be purely linear.&lt;br /&gt;
*The push impact is diminished with distance by a factor of distance cubed.&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;// Pushes the collided object or avatar.&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    collision_start(integer num_detected)&lt;br /&gt;
    {&lt;br /&gt;
        llPushObject(llDetectedKey(0),&amp;lt;0,0,100&amp;gt;, &amp;lt;0,0,100&amp;gt;, TRUE);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|permission&lt;br /&gt;
|negative_index&lt;br /&gt;
|cat1=Physics&lt;br /&gt;
|cat2=Movement&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Tue, 15 Aug 2023 18:46:09 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:LlPushObject</comments>
		</item>
		<item>
			<title>LlListFindStrided</title>
			<link>https://wiki.secondlife.com/w/index.php?title=LlListFindStrided&amp;diff=1213862</link>
			<guid isPermaLink="false">https://wiki.secondlife.com/w/index.php?title=LlListFindStrided&amp;diff=1213862</guid>
			<description>&lt;p&gt;Maestro Linden: Clarified stride parameter meaning&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func=llListFindStrided&lt;br /&gt;
|func_id=201|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|return_type=integer&lt;br /&gt;
|Return_text=index of the first instance of {{LSLP|test}} in {{LSLP|src}} matching conditions.&lt;br /&gt;
|p1_type=list|p1_name=src|p1_desc=what to search in (haystack)&lt;br /&gt;
|p2_type=list|p2_name=test|p2_desc=what to search for (needle)&lt;br /&gt;
|p3_type=integer|p3_name=start|p3_desc=Start of range to search&lt;br /&gt;
|p4_type=integer|p4_name=end|p4_desc=End of range to search&lt;br /&gt;
|p5_type=integer|p5_name=stride|p5_desc=Number of entries per stride within src&lt;br /&gt;
&lt;br /&gt;
|func_footnote=If {{LSLP|test}} matching range and stride conditions is not found in {{LSLP|src}}, -1 is returned.&amp;lt;br/&amp;gt;&lt;br /&gt;
The length of {{LSLP|test}} may be equal to or less than {{LSLP|stride}} in order to generate a match.&amp;lt;br/&amp;gt;&lt;br /&gt;
The index of the first entry in the list is {{HoverText|0|zero}}&amp;lt;br&amp;gt;&lt;br /&gt;
If {{LSLP|test}} is found at the last index in {{LSLP|src}} the positive index is returned (5th entry of 5 returns 4).&amp;lt;br&amp;gt;&lt;br /&gt;
If {{LSLP|start}} or {{LSLP|end}} is negative, it is counted from the end list. The last element in the list is -1, the first is -list_length &lt;br /&gt;
|func_desc&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=&lt;br /&gt;
* Strict type matching and case sensitivity is enforced.&lt;br /&gt;
** &amp;quot;1&amp;quot; != 1&lt;br /&gt;
** &amp;quot;1.0&amp;quot; != 1.0&lt;br /&gt;
** 1 != 1.0&lt;br /&gt;
** &amp;quot;a822ff2b-ff02-461d-b45d-dcd10a2de0c2&amp;quot; != (key)&amp;quot;a822ff2b-ff02-461d-b45d-dcd10a2de0c2&amp;quot;&lt;br /&gt;
** &amp;quot;Justice&amp;quot; != &amp;quot;justice&amp;quot;&lt;br /&gt;
* If {{LSLP|test}} is an {{HoverText|empty list|[]}} the value returned is {{HoverText|0|zero}} rather than -1.&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;list mylist = [&amp;quot;a&amp;quot;,0,&amp;quot;b&amp;quot;,1,&amp;quot;c&amp;quot;,2,&amp;quot;b&amp;quot;,1];&lt;br /&gt;
&lt;br /&gt;
integer result_a = llListFindStrided(mylist, [&amp;quot;b&amp;quot;], 0, -1, 1); //Stride 1 full range functionally equivalent to llListFindList(mylist,&amp;quot;b&amp;quot;);&lt;br /&gt;
//result_a = 2&lt;br /&gt;
&lt;br /&gt;
integer result_b = llListFindStrided(mylist, [&amp;quot;b&amp;quot;,1], 2, -1, 1); //Inclusive range for start and end will find 2nd list in list&lt;br /&gt;
//result_b = 2&lt;br /&gt;
&lt;br /&gt;
integer result_e = llListFindStrided(mylist, [&amp;quot;b&amp;quot;], 3, -1, 1); //The first &amp;quot;b&amp;quot; is at index 2 and will be skipped by starting at 3&lt;br /&gt;
//result_c = 6&lt;br /&gt;
&lt;br /&gt;
integer result_d = llListFindStrided(mylist, [&amp;quot;b&amp;quot;,1], 2, -1, 1); //Inclusive range for start and end will find 2nd item in list&lt;br /&gt;
//result_d = 2&lt;br /&gt;
&lt;br /&gt;
integer result_e = llListFindStrided(mylist, [&amp;quot;b&amp;quot;,1], 3, -1, 1); //The first &amp;quot;b&amp;quot;,1 series is at index 2 and will be skipped by starting at 3&lt;br /&gt;
//result_e = 6&lt;br /&gt;
&lt;br /&gt;
integer result_f = llListFindStrided(mylist, [&amp;quot;b&amp;quot;,1], 3, -2, 1); //The first &amp;quot;b&amp;quot;,1 series is at index 2 and will be skipped by starting at 3.  The second [&amp;quot;b&amp;quot;,1] set exceeds the range criteria of the search.&lt;br /&gt;
//result_f = -1&lt;br /&gt;
&lt;br /&gt;
integer result_g = llListFindStrided(mylist, [&amp;quot;b&amp;quot;,2], 0, -1, 1); //No consecutive elements match [&amp;quot;b&amp;quot;,2]&lt;br /&gt;
//result_g = -1&lt;br /&gt;
&lt;br /&gt;
integer result_h = llListFindStrided(mylist, [&amp;quot;c&amp;quot;], 0, -1, 2); //With a stride of 2, &amp;quot;c&amp;quot; will be found.&lt;br /&gt;
//result_h = 4&lt;br /&gt;
&lt;br /&gt;
integer result_i = llListFindStrided(mylist, [&amp;quot;c&amp;quot;], 0, -1, 3); //With a stride of 3, &amp;quot;c&amp;quot; will be found.&lt;br /&gt;
//result_i = -1&lt;br /&gt;
&lt;br /&gt;
integer result_j = llListFindStrided(mylist, [&amp;quot;c&amp;quot;], 0, -1, 4); //With a stride of 4, &amp;quot;c&amp;quot; will be found.&lt;br /&gt;
//result_j = 4&lt;br /&gt;
&lt;br /&gt;
integer result_k = llListFindStrided(mylist, [&amp;quot;c&amp;quot;], 1, -1, 2); //While the stride is even, starting at the 2nd element will miss this stride.&lt;br /&gt;
//result_k = -1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;list numbers = [1, 2, 3, 4, 5];&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        integer index = llListFindStrided(numbers, [3], 0, -1, 1);  //Functionally identical to llListFindList(numbers, [3]);&lt;br /&gt;
        if (index != -1)&lt;br /&gt;
        {&lt;br /&gt;
            list three_four = llList2List(numbers, index, index + 1);&lt;br /&gt;
            llOwnerSay(llDumpList2String(three_four, &amp;quot;,&amp;quot;));&lt;br /&gt;
            // Object: 3,4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;//You can also search for two items at once to find a pattern in a list&lt;br /&gt;
list avatarsWhoFoundMagicLeaves = [&amp;quot;Water Duck&amp;quot;, &amp;quot;Green Ham&amp;quot;, &amp;quot;Fire Centaur&amp;quot;,&amp;quot;Red Leaf&amp;quot;];&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        integer index = llListFindStrided(avatarsWhoFoundMagicLeaves, [&amp;quot;Fire Centaur&amp;quot;,&amp;quot;Red Leaf&amp;quot;],0,-1,2);&lt;br /&gt;
        if (index != -1)&lt;br /&gt;
        {&lt;br /&gt;
            list output = llList2List(avatarsWhoFoundMagicLeaves, index, index + 1);&lt;br /&gt;
            llOwnerSay(llDumpList2String(output, &amp;quot;,&amp;quot;));&lt;br /&gt;
            // Object: Fire Centaur, Red Leaf&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;//It&#039;s nearly a database&lt;br /&gt;
list food_db = [&amp;quot;FIRSTNAME&amp;quot;, &amp;quot;LASTNAME&amp;quot;, &amp;quot;FAVORITE FOOD&amp;quot;, &amp;quot;ALLERGIES&amp;quot;, &lt;br /&gt;
                                   &amp;quot;Awesome&amp;quot;, &amp;quot;Resident&amp;quot;,&amp;quot;Apples&amp;quot;,0,&lt;br /&gt;
                                   &amp;quot;Charlie&amp;quot;, &amp;quot;Kites&amp;quot;, &amp;quot;Peanuts&amp;quot;, &amp;quot;dogs&amp;quot;,&lt;br /&gt;
                                   &amp;quot;Cool&amp;quot;, &amp;quot;McLastname&amp;quot;, &amp;quot;Burgers&amp;quot;,&amp;quot;peanuts&amp;quot;];&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        list potential_allergen = [&amp;quot;peanuts&amp;quot;];&lt;br /&gt;
        integer any_allergies = llListFindStrided(food_db, potential_allergen,4,-1,4);&lt;br /&gt;
        if (any_allergies != -1)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Every can eat it&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            list output = llList2List(food_db, any_allergens - 3, any_allergens - 2);&lt;br /&gt;
            llOwnerSay(llDumpList2String(output, &amp;quot; &amp;quot;)+&amp;quot; is allergic to it!&amp;quot;);&lt;br /&gt;
            // Object: Cool McLastName is allergic to peanuts&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|helpers=&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llSubStringIndex]]|Find a string in another string}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|sort=ListFindList&lt;br /&gt;
|cat1=List&lt;br /&gt;
|haiku={{Haiku|I made a database|Using Only Some Lists|Find by last name.}}&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Fri, 07 Apr 2023 00:24:58 GMT</pubDate>
			<dc:creator>Maestro Linden</dc:creator>
			<comments>https://wiki.secondlife.com/wiki/Talk:LlListFindStrided</comments>
		</item>
</channel></rss>