<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sei+Lisa</id>
	<title>Second Life Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sei+Lisa"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/Sei_Lisa"/>
	<updated>2026-07-28T13:57:18Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlDerezObject&amp;diff=1217941</id>
		<title>LlDerezObject</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlDerezObject&amp;diff=1217941"/>
		<updated>2025-02-01T17:27:37Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Be more specific about the return value&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=llDerezObject&lt;br /&gt;
|return_type=integer|return_subtype=boolean&lt;br /&gt;
|p1_type=key|p1_name=id|p1_desc=The ID of an object in the region.&lt;br /&gt;
|p2_type=integer|p2_name=flag|p2_desc=Deletion options.&lt;br /&gt;
|func_desc=Derezzes an object previously rezzed from within the object containing the script.&lt;br /&gt;
|return_text=which is TRUE for success or FALSE for failure.&lt;br /&gt;
|spec=&lt;br /&gt;
Deletes, or marks temp, an object that was previously rezzed by this script. The object&#039;s root prim must have been previously rezzed from a script within this object. &lt;br /&gt;
If the object is successfully deleted this function returns TRUE, if it fails for any reason it returns false.&lt;br /&gt;
|caveats=&lt;br /&gt;
* The targeted object&#039;s rezzer must be the same as the object hosting this script&lt;br /&gt;
* The target must not be an attachment&lt;br /&gt;
* The target must be copyable&lt;br /&gt;
* The target&#039;s owner must be the same as the script&#039;s owner.&lt;br /&gt;
* When marking an object as temporary, the object must not contribute to the navmesh.&lt;br /&gt;
|examples&lt;br /&gt;
|helpers&lt;br /&gt;
|constants=&lt;br /&gt;
{{{!}} class=&amp;quot;sortable&amp;quot; {{Prettytable|style=margin-top:0;}}&lt;br /&gt;
{{!}}-{{Hl2}}&lt;br /&gt;
! Constant &lt;br /&gt;
! Value&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; {{!}}Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[DEREZ_DIE]]&lt;br /&gt;
{{!}} 0&lt;br /&gt;
{{!}} Immediately delete the object.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[DEREZ_MAKE_TEMP]]&lt;br /&gt;
{{!}} 1&lt;br /&gt;
{{!}} Mark the object as temporary so that the simulator will remove the object at a later time.&lt;br /&gt;
{{!}}}&lt;br /&gt;
&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;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlTransferOwnership&amp;diff=1217940</id>
		<title>LlTransferOwnership</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlTransferOwnership&amp;diff=1217940"/>
		<updated>2025-02-01T13:49:34Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Returns an integer with the result of the transfer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{Issues/SVC-7631}}{{Issues/BUG-5656}}&lt;br /&gt;
|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llTransferOwnership&lt;br /&gt;
|return_type=integer&lt;br /&gt;
|p1_type=key|p1_name=agent_id|p1_desc=Agent ID for the avatar to receive ownership of the object&lt;br /&gt;
|p2_type=integer|p2_name=flags|p2_desc=Flags controlling transfer behavior.&lt;br /&gt;
|p3_type=list|p3_name=options|p3_desc=Options applied to the ownership transfer. No options are defined at this time.&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc=Transfer ownership of the object containing this script to {{LSLP|agent_id}}.&lt;br /&gt;
|return_text=indicating the result of the transfer.&lt;br /&gt;
|spec=&lt;br /&gt;
Transfers ownership of an object rezzed in world to {{LSLP|agent_id}}. The object must be transferable by its current owner and must not be an attachment.&lt;br /&gt;
&lt;br /&gt;
Optionally this function may force the object to derez itself into the destination agent&#039;s inventory, or make a copy of itself directly into inventory.&lt;br /&gt;
&lt;br /&gt;
|caveats=&lt;br /&gt;
* {{LSLP|agent_id}} must be an agent in the region.&lt;br /&gt;
* There is no way to detect if the receiver ignored, rejected or blocked the transaction (aside from a [[changed]] event never occurring.)&lt;br /&gt;
* The function fails with a return code of [[TRANSFER_NO_PERMS]] if:&lt;br /&gt;
** The object is no-transfer.&lt;br /&gt;
** The object is no-copy and {{LSLP|flags}} includes the [[TRANSFER_FLAG_COPY]] flag.&lt;br /&gt;
* Calling this function from an attachment will fail and return [[TRANSFER_NO_ATTACHMENT]]&lt;br /&gt;
* WARNING: Any no-trans items in the transferred object will be removed from the object received by the target agent. If the transfer is of the object itself, these items are lost.&lt;br /&gt;
* WARNING: If the transfer is a copy, any no-copy inventory items will be present in the object received by the target agent and removed from the original.&lt;br /&gt;
&lt;br /&gt;
|constants=&lt;br /&gt;
{{LSL Constants/Transfer Flags}}&lt;br /&gt;
&lt;br /&gt;
{{LSL Constants/Transfer Errors}}&lt;br /&gt;
|examples&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGiveInventoryList]]}}&lt;br /&gt;
{{LSL DefineRow||[[llRemoteLoadScriptPin]]}}&lt;br /&gt;
{{LSL DefineRow||[[llSetRemoteScriptAccessPin]]}}&lt;br /&gt;
{{LSL DefineRow||[[llMapDestination]]}}&lt;br /&gt;
|also_events=&lt;br /&gt;
{{LSL DefineRow||[[changed]]}}&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;
|sort=GiveInventory&lt;br /&gt;
|cat1=Inventory&lt;br /&gt;
|cat2=Avatar&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=On_damage&amp;diff=1217939</id>
		<title>On damage</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=On_damage&amp;diff=1217939"/>
		<updated>2025-02-01T12:24:40Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Mention llDamage in See Also&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Event&lt;br /&gt;
|event_id=|event_delay|event=on_damage&lt;br /&gt;
|p1_type=integer|p1_name=num_detected|p1_desc=The number of damage events pending against the avatar or task.&lt;br /&gt;
|event_desc=This event is triggered when damage has been inflicted on an avatar or task in the world but before damage has been applied or distributed.&lt;br /&gt;
&lt;br /&gt;
All llDetected* functions that are normally available within a collision event are available while processing this event. Additionally the [[llDetectedDamage]] and [[llAdjustDamage]] methods may be called while processing this event.&lt;br /&gt;
|event_footnote&lt;br /&gt;
|constants&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=&lt;br /&gt;
* Requires the region to [[llGetEnv|allow damage adjustment]] for the event to run&lt;br /&gt;
|examples=&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;string damageType2String(integer type)&lt;br /&gt;
{&lt;br /&gt;
    if (type == DAMAGE_TYPE_GENERIC)&lt;br /&gt;
        return &amp;quot;generic&amp;quot;;&lt;br /&gt;
    else if (type == DAMAGE_TYPE_ACID)&lt;br /&gt;
        return &amp;quot;acid&amp;quot;;&lt;br /&gt;
    else if (type == DAMAGE_TYPE_BLUDGEONING)&lt;br /&gt;
        return &amp;quot;bludgeoning&amp;quot;;&lt;br /&gt;
    else if (type == DAMAGE_TYPE_COLD)&lt;br /&gt;
        return &amp;quot;cold&amp;quot;;&lt;br /&gt;
    else if (type == DAMAGE_TYPE_ELECTRIC)&lt;br /&gt;
        return &amp;quot;electric&amp;quot;;&lt;br /&gt;
    else if (type == DAMAGE_TYPE_FIRE)&lt;br /&gt;
        return &amp;quot;fire&amp;quot;;&lt;br /&gt;
    else if (type == DAMAGE_TYPE_FORCE)&lt;br /&gt;
        return &amp;quot;force&amp;quot;;&lt;br /&gt;
    else if (type == DAMAGE_TYPE_NECROTIC)&lt;br /&gt;
        return &amp;quot;necrotic&amp;quot;;&lt;br /&gt;
    else if (type == DAMAGE_TYPE_PIERCING)&lt;br /&gt;
        return &amp;quot;piercing&amp;quot;;&lt;br /&gt;
    else if (type == DAMAGE_TYPE_POISON)&lt;br /&gt;
        return &amp;quot;poison&amp;quot;;&lt;br /&gt;
    else if (type == DAMAGE_TYPE_PSYCHIC)&lt;br /&gt;
        return &amp;quot;psychic&amp;quot;;&lt;br /&gt;
    else if (type == DAMAGE_TYPE_RADIANT)&lt;br /&gt;
        return &amp;quot;radiant&amp;quot;;&lt;br /&gt;
    else if (type == DAMAGE_TYPE_SLASHING)&lt;br /&gt;
        return &amp;quot;slashing&amp;quot;;&lt;br /&gt;
    else if (type == DAMAGE_TYPE_SONIC)&lt;br /&gt;
        return &amp;quot;sonic&amp;quot;;&lt;br /&gt;
    else if (type == DAMAGE_TYPE_EMOTIONAL)&lt;br /&gt;
        return &amp;quot;emotional&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return &amp;quot;type &amp;quot; + (string)type;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_death()&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0, &amp;quot;I&#039;ll be back!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_damage(integer count)&lt;br /&gt;
    {&lt;br /&gt;
        integer index;&lt;br /&gt;
        for (index = 0; index &amp;lt; count; ++index)&lt;br /&gt;
        {&lt;br /&gt;
            key object = llDetectedKey(index);&lt;br /&gt;
            string object_name = llDetectedName(index);&lt;br /&gt;
            key owner = llDetectedOwner(index);&lt;br /&gt;
            key rezzer = llDetectedRezzer(index);&lt;br /&gt;
            list damage = llDetectedDamage(index);&lt;br /&gt;
            &lt;br /&gt;
            string owner_name = llKey2Name(owner);&lt;br /&gt;
            string rezzer_name = llKey2Name(rezzer);&lt;br /&gt;
            &lt;br /&gt;
            llSay(0, &amp;quot;I was struck by &amp;quot; + object_name + &amp;quot;{&amp;quot; + (string)object + &amp;quot;} owned by &amp;quot; +        &lt;br /&gt;
                owner_name + &amp;quot;{&amp;quot; + (string)owner + &amp;quot;} rezzed by &amp;quot; +&lt;br /&gt;
                rezzer_name + &amp;quot;{&amp;quot; + (string)rezzer + &amp;quot;} for &amp;quot; +&lt;br /&gt;
                (string)llList2Float(damage, 0) + &amp;quot; points of &amp;quot; + damageType2String(llList2Integer(damage, 1)) +&lt;br /&gt;
                &amp;quot; damage (originally &amp;quot; + (string)llList2Float(damage, 2));&lt;br /&gt;
            &lt;br /&gt;
            float new_damage = llList2Float(damage, 0) / 2.0;&lt;br /&gt;
            &lt;br /&gt;
            llSay(0, &amp;quot;Reducing damage by 50% to &amp;quot; + (string)new_damage);&lt;br /&gt;
            llAdjustDamage(index, new_damage);&lt;br /&gt;
            llSay(0, &amp;quot;llDetectDamage = [&amp;quot; + llDumpList2String(llDetectedDamage(index), &amp;quot;, &amp;quot;) + &amp;quot;]&amp;quot;);&lt;br /&gt;
        }&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||[[on_death]]|}}&lt;br /&gt;
{{LSL DefineRow||[[final_damage]]|}}&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llDetectedDamage]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llAdjustDamage]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llDamage]]|}}&lt;br /&gt;
|also_articles&lt;br /&gt;
|also_footer&lt;br /&gt;
|notes=&lt;br /&gt;
|mode&lt;br /&gt;
|deprecated&lt;br /&gt;
|cat1=Script&lt;br /&gt;
|cat2=Combat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlXorBase64Strings&amp;diff=1217938</id>
		<title>LlXorBase64Strings</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlXorBase64Strings&amp;diff=1217938"/>
		<updated>2025-02-01T10:50:24Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Recommend a non-broken function&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|deprecated=llXorBase64&lt;br /&gt;
|func_id=262|func_sleep=0.3|func_energy=10.0&lt;br /&gt;
|sort=XorBase64StringsCorrect&lt;br /&gt;
|func=llXorBase64Strings&lt;br /&gt;
|return_type=string&lt;br /&gt;
|p1_type=string|p1_name=str1|p1_desc=Base64 string&lt;br /&gt;
|p2_type=string|p2_name=str2|p2_desc=Base64 string&lt;br /&gt;
|func_footnote={{LSLP|s2}} repeats if it is shorter than {{LSLP|s1}}. Retained for backwards compatibility.&lt;br /&gt;
|return_text=that is a {{LSLGC|Base64}} string of {{LSLP|s1}} xor&#039;ed with {{LSLP|s2}}.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=*&#039;&#039;&#039;Incorrectly performs an exclusive or on two Base64 strings and returns a Base64 string&#039;&#039;&#039;&lt;br /&gt;
**Use [[llXorBase64]] instead.&lt;br /&gt;
|examples&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llXorBase64]]}}&lt;br /&gt;
|notes&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlListSortStrided&amp;diff=1216499</id>
		<title>LlListSortStrided</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlListSortStrided&amp;diff=1216499"/>
		<updated>2024-04-19T13:14:05Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Add caveat, add info on negative stride, fix typo in example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{Issues/SVC-2988}}{{Issues/SVC-5146}}{{LSL_Function/stride|stride}}&lt;br /&gt;
|func_id=184|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llListSortStrided|return_type=list&lt;br /&gt;
|func_complexity=O(N&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;)&lt;br /&gt;
|p1_type=list|p1_name=src|p1_desc=List to be sorted.&lt;br /&gt;
|p2_type=integer|p2_name=stride&lt;br /&gt;
|p3_type=integer|p3_name=stride_index|p3_desc=The index within the stride to sort by. stride_index is 0-indexed. The first element is 0, second 1, etc. An index of 0 is functionally identical to using [[llListSort]]. Negative indexes count from the end of the stride, e.g. -1 means the last element in the stride.&lt;br /&gt;
|p4_type=integer|p4_name=ascending|p4_desc=if [[TRUE]] then the sort order is ascending, otherwise the order is descending.&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc=llListSortStrided is llListSort with the added parameter of stride_index, adding the flexibility to sort by any item in the stride.  These routines use the same underlying code and have the same computational complexity.&lt;br /&gt;
|return_text=that is {{LSLP|src}} sorted by the {{LSLP|stride_index}} item in every {{LSLP|stride}}.&lt;br /&gt;
|spec=The sort order is affected by type. For strings and keys, it is case sensitive and sorts by Unicode character code.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;llListSortStrided([&amp;quot;a&amp;quot;, &amp;quot;á&amp;quot;, &amp;quot;B&amp;quot;, &amp;quot;C&amp;quot;, &amp;quot;d&amp;quot;, &amp;quot;e&amp;quot;], 1, 0, TRUE) // returns [&amp;quot;B&amp;quot;, &amp;quot;C&amp;quot;, &amp;quot;a&amp;quot;, &amp;quot;d&amp;quot;, &amp;quot;e&amp;quot;, &amp;quot;á&amp;quot;]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For ascending sort, each type is sorted individually and then feathered to have the same order of types.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;llListSortStrided([1, &amp;quot;C&amp;quot;, 3, &amp;quot;A&amp;quot;, 2, &amp;quot;B&amp;quot;], 1, 0, TRUE) // returns [1, &amp;quot;A&amp;quot;, 2, &amp;quot;B&amp;quot;, 3, &amp;quot;C&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
llListSortStrided([1, 3, 2, &amp;quot;C&amp;quot;, &amp;quot;A&amp;quot;, &amp;quot;B&amp;quot;], 1, 0, TRUE) // returns [1, 2, 3, &amp;quot;A&amp;quot;, &amp;quot;B&amp;quot;, &amp;quot;C&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
llListSortStrided([1, &amp;quot;C&amp;quot;, 3, &amp;quot;A&amp;quot;, 2, &amp;quot;B&amp;quot;], 2, 0, TRUE) // returns [1, &amp;quot;C&amp;quot;, 2, &amp;quot;B&amp;quot;, 3, &amp;quot;A&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
llListSortStrided([1, &amp;quot;C&amp;quot;, 3, &amp;quot;A&amp;quot;, 2, &amp;quot;B&amp;quot;], 2, 1, TRUE) // returns [3, &amp;quot;A&amp;quot;, 2, &amp;quot;B&amp;quot;, 1, &amp;quot;C&amp;quot;]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|caveats=*It uses the same unoptimized selection sort algorithm as llListSort, which is an algorithm with a Big O of N². A [[JIRA]] issue exists to improve this function, {{Jira|SVC-2988}}.&lt;br /&gt;
* Originally the wiki stated that non-zero values for the &amp;quot;ascending&amp;quot; parameter would produce an ascending sort.  That was incorrect.  For this function, the value must be exactly 1 (or TRUE) for an ascending sort.&lt;br /&gt;
* [[Vector]]s are sorted by magnitude. {{Jira|SVC-5643}}&lt;br /&gt;
* [[Rotation]]s are not sorted in any meaningful order. If a list containing only rotations is sorted in ascending order, it will be returned unchanged.&lt;br /&gt;
* For descending sort, if there are mixed types, the final order is deterministic (the same input will always produce the same output) but it can be completely useless. &amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;llListSortStrided([2, &amp;quot;B&amp;quot;, &amp;quot;C&amp;quot;, 3, 1, &amp;quot;A&amp;quot;], 1, 0, FALSE) // returns [&amp;quot;A&amp;quot;, 3, 1, &amp;quot;C&amp;quot;, &amp;quot;B&amp;quot;, 2]&amp;lt;/source&amp;gt; If there are no mixed types, however, the descending sort works just fine.&lt;br /&gt;
* When the stride is greater than 1, if the list length is not a multiple of the stride, the list will be returned unchanged.&lt;br /&gt;
* stride_index must be less than stride and greater than or equal to -stride, otherwise an empty list is returned.&lt;br /&gt;
* When strings contain numbers, the numbers are still sorted left-to-right like any other character, which may not necessarily match numeric order: &amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;llListSortStrided([&amp;quot;127&amp;quot;, &amp;quot;3&amp;quot;, &amp;quot;25&amp;quot;], 1, 0, TRUE) // returns [&amp;quot;127&amp;quot;, &amp;quot;25&amp;quot;, &amp;quot;3&amp;quot;] because the 1 in 127 is before the 2 in 25 which is before the 3&amp;lt;/source&amp;gt; To sort them in numeric order, numbers in strings can be padded with zeros: &amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;llListSortStrided([&amp;quot;127&amp;quot;, &amp;quot;003&amp;quot;, &amp;quot;025&amp;quot;], 1, 0, TRUE) // returns [&amp;quot;003&amp;quot;, &amp;quot;025&amp;quot;, &amp;quot;127&amp;quot;]&amp;lt;/source&amp;gt;&lt;br /&gt;
** This order differs from the order of items in a prim&#039;s inventory, which is &amp;quot;natural order&amp;quot; (e.g &amp;quot;New Script 2&amp;quot; is sorted before &amp;quot;New Script 11&amp;quot;).&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
list score_board = [&amp;quot;Awesome&amp;quot;, &amp;quot;Resident&amp;quot;, 200, &amp;quot;Star&amp;quot;, &amp;quot;Marxman&amp;quot;, 999, &amp;quot;Happy2&amp;quot;, &amp;quot;Survive&amp;quot;, 1];&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(&amp;quot;Unsorted: &amp;quot; + llDumpList2String(score_board, &amp;quot;,&amp;quot;));&lt;br /&gt;
        score_board = llListSortStrided(scoreboard, 3, 0, TRUE);&lt;br /&gt;
        llOwnerSay(&amp;quot;Sort by first names: &amp;quot; + llDumpList2String(numbers, &amp;quot;,&amp;quot;));&lt;br /&gt;
        // Object: Sort by first names: Awesome,Resident,200,Happy2,Survive,1,Star,Marxman,999&lt;br /&gt;
&lt;br /&gt;
        score_board = llListSortStrided(scoreboard, 3, 1, TRUE);&lt;br /&gt;
        llOwnerSay(&amp;quot;Sort by last names: &amp;quot; + llDumpList2String(numbers, &amp;quot;,&amp;quot;));&lt;br /&gt;
        // Object: Sort by first names: Star,Marxman,999,Awesome,Resident,200,Happy2,Survive,1&lt;br /&gt;
&lt;br /&gt;
        score_board = llListSortStrided(scoreboard, 3, 2, TRUE);&lt;br /&gt;
        llOwnerSay(&amp;quot;Sort by last names: &amp;quot; + llDumpList2String(numbers, &amp;quot;,&amp;quot;));&lt;br /&gt;
        // Object: Sort by first names: ,Happy2,Survive,1,Awesome,Resident,200,Star,Marxman,999&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
llListSort and llListSortStrided really only works on items of the same type. It will work on lists that hold diverse data types -- to be clear, it won&#039;t blow up your script -- but the results returned are usually meaningless.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;list mylist = [&amp;quot;brown&amp;quot;, &amp;lt;0.000000, 0.000000, 0.000000&amp;gt;, &amp;quot;house&amp;quot;, 17.005, 100, &amp;quot;cat&amp;quot;, &amp;lt;3.000000, 3.000000, 3.000000&amp;gt;, 39];&lt;br /&gt;
list tmplist = llListSortStrided(mylist, 1, 0, TRUE);&lt;br /&gt;
llSay(0, llList2CSV(tmplist));&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This returns in chat:&lt;br /&gt;
&lt;br /&gt;
 brown, &amp;lt;0.000000, 0.000000, 0.000000&amp;gt;, cat, 17.004999, 39, house, &amp;lt;3.000000, 3.000000, 3.000000&amp;gt;, 100&lt;br /&gt;
&lt;br /&gt;
The same ordered in descending order returns even more meaningless results:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;list mylist = [&amp;quot;brown&amp;quot;, &amp;lt;0.000000, 0.000000, 0.000000&amp;gt;, &amp;quot;house&amp;quot;, 17.005, 100, &amp;quot;cat&amp;quot;, &amp;lt;3.000000, 3.000000, 3.000000&amp;gt;, 39];&lt;br /&gt;
list tmplist = llListSortStrided(mylist, 1, 0, FALSE);&lt;br /&gt;
llSay(0, llList2CSV(tmplist));&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
returns in chat:&lt;br /&gt;
&lt;br /&gt;
 39, &amp;lt;3.000000, 3.000000, 3.000000&amp;gt;, cat, 100, 17.004999, house, &amp;lt;0.000000, 0.000000, 0.000000&amp;gt;, brown&lt;br /&gt;
&lt;br /&gt;
===Utilizing the Results===&lt;br /&gt;
&lt;br /&gt;
It&#039;s important to note that the source list that you are sorting will remain unchanged. Instead, a new, sorted list will be produced. So, it&#039;s important that you capture this with a variable (unless you are acting directly on the results.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;llListSortStrided(myList, 1, 0, TRUE); // You&#039;ve wasted cpu time; you didn&#039;t capture the results&lt;br /&gt;
&lt;br /&gt;
list newlist = llListSortStrided(myList, 1, 0, TRUE);// Okay. You&#039;ve captured the results.&lt;br /&gt;
&lt;br /&gt;
llSay(0,llList2CSV(llListSortStrided(myList, 1, 0, TRUE))); // No need to capture, using the results right away.&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==={{LSLPT|Stride}} parameter===&lt;br /&gt;
&lt;br /&gt;
Most times, you will want to set &amp;quot;integer stride&amp;quot; to 1 (0 also works) to tell it to sort each item in the list on its own basis. (If you are working with a strided list, though, see the special section below on sorting strides.)&lt;br /&gt;
&lt;br /&gt;
===Sort Order===&lt;br /&gt;
&lt;br /&gt;
Setting the parameter &amp;quot;integer ascending&amp;quot; to [[TRUE]] returns a sorted list that is in ascending order. &amp;lt;br/&amp;gt;&lt;br /&gt;
For example: [&amp;quot;Apples&amp;quot;, &amp;quot;Bananas&amp;quot;, &amp;quot;Oranges&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Setting the parameter &amp;quot;integer ascending&amp;quot; to [[FALSE]] returns a sorted list that is in descending order. &amp;lt;br/&amp;gt;&lt;br /&gt;
For example: [&amp;quot;Oranges&amp;quot;, &amp;quot;Bananas&amp;quot;, &amp;quot;Apples&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
===Sorting Strided Lists===&lt;br /&gt;
&lt;br /&gt;
If you have a [[List#Strided_lists|strided list]], in which you are keeping related pieces of data together in chunks, letting each list element sort on its own basis would be disastrous.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;list demographics = [&amp;quot;John Adams&amp;quot;, &amp;quot;male&amp;quot;, &amp;quot;2007-06-22&amp;quot;, &amp;quot;Shirley Bassey&amp;quot;, &amp;quot;female&amp;quot;, &amp;quot;2005-11-02&amp;quot;, &amp;quot;Matt Damon&amp;quot;, &amp;quot;male&amp;quot;, &amp;quot;2008-05-19&amp;quot;];&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Bad Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;list tmplist_1 = llListSortStrided(demographics, 1, 0, TRUE);&lt;br /&gt;
//tmplist_1 == [&amp;quot;2005-11-02&amp;quot;, &amp;quot;2007-06-22&amp;quot;, &amp;quot;2008-05-19&amp;quot;, &amp;quot;John Adams&amp;quot;, &amp;quot;Matt Damon&amp;quot;, &amp;quot;Shirley Bassey&amp;quot;, &amp;quot;female&amp;quot;, &amp;quot;male&amp;quot;, &amp;quot;male&amp;quot;]&lt;br /&gt;
//The strides have been destroyed, the sorted data is now useless&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Good Example====&lt;br /&gt;
&lt;br /&gt;
Instead, because you have the data grouped (aka &amp;quot;strided&amp;quot;) in sets of 3, you need to do this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;list tmplist_2 = llListSortStrided(demographics, 3, 0, TRUE);&lt;br /&gt;
//templist_2 = [&amp;quot;John Adams&amp;quot;, &amp;quot;male&amp;quot;, &amp;quot;2007-06-22&amp;quot;, &amp;quot;Matt Damon&amp;quot;, &amp;quot;male&amp;quot;, &amp;quot;2008-05-19&amp;quot;, &amp;quot;Shirley Bassey&amp;quot;, &amp;quot;female&amp;quot;, &amp;quot;2005-11-02&amp;quot;]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|permission&lt;br /&gt;
|negative_index&lt;br /&gt;
|sort=ListSort&lt;br /&gt;
|cat1=List&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
|location&lt;br /&gt;
|issues=&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlList2ListSlice&amp;diff=1216496</id>
		<title>LlList2ListSlice</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlList2ListSlice&amp;diff=1216496"/>
		<updated>2024-04-18T15:02:45Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Fix examples. Fix inconsistency with exclusion ranges where the description said they were supported and the caveats said they weren&amp;#039;t.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{LSL_Function/negative index|true|start|end|noExclude=}}{{LSL_Function/stride|stride|slice}}&lt;br /&gt;
|func_id=198|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llList2ListSlice&lt;br /&gt;
|return_type=list&lt;br /&gt;
|p1_type=list|p1_name=src&lt;br /&gt;
|p2_type=integer|p2_name=start&lt;br /&gt;
|p3_type=integer|p3_name=end&lt;br /&gt;
|p4_type=integer|p4_name=stride&lt;br /&gt;
|p5_type=integer|p5_name=slice_index&lt;br /&gt;
|func_footnote=The index of the first entry in the list is {{HoverText|0|zero}}&amp;lt;br&amp;gt;&lt;br /&gt;
The index of the first entry in a slice is {{HoverText|0|zero}}&amp;lt;br&amp;gt;&lt;br /&gt;
If {{LSLP|start}}, {{LSLP|end}}, or {{LSLP|slice_index}} are negative they are indexed from end of list.  -1 is last element in the list.  -list_length is the 1st element of the list.&amp;lt;br&amp;gt;&lt;br /&gt;
If {{LSLP|slice_index}} is negative it is counted from the end of its stride regardless of whether or not the stride exceeds the end of the list.  e.g:  -1 is the last element in a stride.&amp;lt;br&amp;gt;&lt;br /&gt;
If {{LSLP|start}} &amp;gt; {{LSLP|end}} the range from start to end is treated as an exclusion range.&amp;lt;br&amp;gt;&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=of the slice_index&#039;th element of every stride in [[List#Strided_lists|strided list]] whose index is a multiple of {{LSLP|stride}} in the range {{LSLP|start}} to {{LSLP|end}}.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;list mylist = [0,1,2,3,4,5,6];&lt;br /&gt;
list result_a = llList2ListSlice(mylist,0,-1,3,0); //start at first item in list, go to the end, return 1st slice of every stride of 3&lt;br /&gt;
//result_a == [0,3,6]&lt;br /&gt;
&lt;br /&gt;
list result_b = llList2ListSlice(mylist,0,-1,3,1); //start at first item in list, go to the end, return 2nd slice of every stride of 3&lt;br /&gt;
//result_b == [1,4]&lt;br /&gt;
&lt;br /&gt;
list result_c = llList2ListSlice(mylist,1,-1,3,1); //start at second item in list, go to the end, return 2nd slice of every stride of 3&lt;br /&gt;
//result_c == [2,5]&lt;br /&gt;
&lt;br /&gt;
list result_d = llList2ListSlice(mylist,2,-1,3,-1); //start at third item in list, go to the end, return last slice of every stride of 3&lt;br /&gt;
//result_d == [4]&lt;br /&gt;
&lt;br /&gt;
list result_e = llList2ListSlice(mylist,4,2,1,0); //4&amp;gt;2 so this is an exclusion. slice indices count from 0 and first element after exclusion. Return every element not in range with a stride of 1&lt;br /&gt;
//result_e == [0,1,2,4,5,6]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;list menu = [&amp;quot;1&amp;quot;, &amp;quot;one&amp;quot;, &amp;quot;2&amp;quot;, &amp;quot;two&amp;quot;, &amp;quot;3&amp;quot;, &amp;quot;three&amp;quot;];&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llListen(10, &amp;quot;&amp;quot;, llGetOwner(), &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer detected)&lt;br /&gt;
    {&lt;br /&gt;
        list buttons = llList2ListSlice(menu, 0, -1, 2, 0);&lt;br /&gt;
        llDialog(llDetectedKey(0), &amp;quot;choose a number&amp;quot;, buttons, 10); //display the digits&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer channel, string obj, key id, string message)&lt;br /&gt;
    {&lt;br /&gt;
        integer index = llListFindList(menu, [message]);&lt;br /&gt;
        if (index != -1)&lt;br /&gt;
        {&lt;br /&gt;
            list names = llList2ListSlice(menu, 0, -1, 2, 1);&lt;br /&gt;
            llOwnerSay(&amp;quot;you chose &amp;quot; + llList2String(names, index/2) + &amp;quot; (&amp;quot; + message + &amp;quot;)&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|helpers=*[[User:Fred_Gandt/Scripts/Functions#StrideOfList|StrideOfList]] - Starting from &#039;&#039;&#039;start&#039;&#039;&#039; and stopping before &#039;&#039;&#039;end&#039;&#039;&#039; exceeded it skips every &#039;&#039;&#039;stride&#039;&#039;&#039;-1 items. returns the slice_index element of the stride if its position is less than list length.&lt;br /&gt;
|also_functions=&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes= If the list is not modulo the stride, elements up to the length of the list will be returned in the final slice matching conditions.  e.g.  a list of 5 elements with a stride of 2 will return 3 elements for a 0,5 range on slice index 0 but only 2 if the slice_index is 1.&lt;br /&gt;
|permission&lt;br /&gt;
|negative_index&lt;br /&gt;
|haiku={{Haiku|Fetch me the last names|In a database of lists|Oh look columns. Neat!}}&lt;br /&gt;
|sort=List2ListSlice&lt;br /&gt;
|cat1=List&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlListFindStrided&amp;diff=1216485</id>
		<title>LlListFindStrided</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlListFindStrided&amp;diff=1216485"/>
		<updated>2024-04-14T10:17:50Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Minor typo that prevented compilation&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_c = 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; won&#039;t 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;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetNotecardLineSync&amp;diff=1216362</id>
		<title>LlGetNotecardLineSync</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetNotecardLineSync&amp;diff=1216362"/>
		<updated>2024-03-17T14:39:28Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Add link that explains the Dataserver concept. Presumably the Dataserver is what&amp;#039;s doing the caching.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{LSL_Function/negative_index|false|line}}{{LSL_Function/notecard|name|uuid=true}}&lt;br /&gt;
|func_id=|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|sort=GetNotecardLineSync&lt;br /&gt;
|func=llGetNotecardLineSync&lt;br /&gt;
|return_type=string&lt;br /&gt;
|p1_type=string|p1_name=name&lt;br /&gt;
|p2_type=integer|p2_name=line|p2_desc=Line number in a notecard (the index starts at zero).&lt;br /&gt;
|func_desc=Gets the line {{LSLP|line}} of the notecard {{LSLP|name}} from the [[Server architecture#Dataserver|dataserver]] immediately, provided it is cached, and without raising a dataserver event.&lt;br /&gt;
|Return_text=containing the text of the requested line from the notecard.&lt;br /&gt;
|func_footnote=Returns [[EOF]] if {{LSLP|line}} is past the end of the notecard.&lt;br /&gt;
|spec=&lt;br /&gt;
This function returns a string containing the requested line from a notecard in prim inventory, without the need for an asynchronous dataserver event, if the notecard is cached/known in its entirety by the simulator. This speeds up acessing notecard lines tremendously, and allows for near instantaneous random access.&lt;br /&gt;
&lt;br /&gt;
If the notecard does not exist it returns the constant [[NAK]] and will shout a message to the debug channel.  If the notecard has not been previously cached on the simulator it will return the [[NAK]] constant.&lt;br /&gt;
&lt;br /&gt;
It is not safe to assume a notecard has been previously cached.  Data for a previously cached notecard may be dropped from the cache at any time, especially on a busy server.&lt;br /&gt;
&lt;br /&gt;
|caveats=* If notecard contains embedded inventory items (such as textures and landmarks), [[EOF]] will be returned, regardless of the line requested.&lt;br /&gt;
*If the requested line is longer than 1024 bytes the returned string will be truncated to the first 1024 bytes of the line.&lt;br /&gt;
*A dataserver event does &#039;&#039;&#039;not&#039;&#039;&#039; get raised. Therefore, other scripts in the linkset are unaware of the processed notecard lines.&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;
string NOTECARD_NAME = &amp;quot;notecard&amp;quot;;&lt;br /&gt;
key READ_KEY = NULL_KEY;&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;
        READ_KEY = llGetNumberOfNotecardLines(NOTECARD_NAME);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    dataserver(key request, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if (request == READ_KEY)&lt;br /&gt;
        {&lt;br /&gt;
            integer count = (integer)data;&lt;br /&gt;
            integer index;&lt;br /&gt;
            &lt;br /&gt;
            for (index = 0; index &amp;lt; count; ++index)&lt;br /&gt;
            {&lt;br /&gt;
                string line = llGetNotecardLineSync(NOTECARD_NAME, index);&lt;br /&gt;
                if (line == NAK)&lt;br /&gt;
                {&lt;br /&gt;
                    llOwnerSay(&amp;quot;---NAK---&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else if (line == EOF)&lt;br /&gt;
                {&lt;br /&gt;
                    llOwnerSay(&amp;quot;---EOF---&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    llOwnerSay(line);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llGetNumberOfNotecardLines]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetNotecardLine]]|}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles&lt;br /&gt;
|also_tests&lt;br /&gt;
|permission&lt;br /&gt;
|cat1=Notecard&lt;br /&gt;
|cat2=&lt;br /&gt;
|cat3=&lt;br /&gt;
|cat4=&lt;br /&gt;
|history=&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LSL_Operators&amp;diff=1215417</id>
		<title>LSL Operators</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LSL_Operators&amp;diff=1215417"/>
		<updated>2023-11-18T14:21:15Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Add note about confusing precedence of || and &amp;amp;&amp;amp;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header|ml=*}}&lt;br /&gt;
Operators are used to cause an operation (or mathematical action) to be performed on one (such as !) or two operands. The easy and common example is 1 + 2 where 1 and 2 are operands, and the &#039;&#039;&#039;+&#039;&#039;&#039; is the operator. This concept can be extended much further with LSL since operands can be variables with the special case of the assignment operators requiring that the left hand side be a variable.&lt;br /&gt;
&lt;br /&gt;
The following table lists the operators in descending order of evaluation, i.e. higher in the table means higher evaluation precedence. Multiple operators on the same line share evaluation precedence. Parenthesize an expression if you need to force an evaluation order.&lt;br /&gt;
&lt;br /&gt;
{| bgcolor=&amp;quot;#FFFFFF&amp;quot; border=&amp;quot;1&amp;quot;  cellspacing=&amp;quot;2&amp;quot; cellpadding=&amp;quot;6&amp;quot;&lt;br /&gt;
|- bgColor=&amp;quot;#A7C1F2&amp;quot;&lt;br /&gt;
! Operator&lt;br /&gt;
! Description&lt;br /&gt;
! Usage Example&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;()&amp;lt;/code&amp;gt;&lt;br /&gt;
|| parentheses: grouping and evaluation precedence&lt;br /&gt;
|| &amp;lt;code&amp;gt;integer val = a * (b + c);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[]&amp;lt;/code&amp;gt;&lt;br /&gt;
|| brackets: list constructor&lt;br /&gt;
|| &amp;lt;code&amp;gt;list lst = [a, 2, &amp;quot;this&amp;quot;, 0.01];&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;(&#039;&#039;type&#039;&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|| typecasting&lt;br /&gt;
|| &amp;lt;code&amp;gt;string message = &amp;quot;The result is:&amp;quot; + (string)result;&amp;lt;/code&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;~&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;++&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;--&amp;lt;/code&amp;gt;&lt;br /&gt;
|| logical NOT, bitwise NOT, increment, decrement&lt;br /&gt;
|| &amp;lt;code&amp;gt;counter++;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt;&lt;br /&gt;
|| multiply/dot product, divide, modulus/cross product&lt;br /&gt;
|| &amp;lt;code&amp;gt;integer rollover = (count + 1) % 5;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;&lt;br /&gt;
|| subtraction, negation&lt;br /&gt;
|| &amp;lt;code&amp;gt;integer one = 3 - 2;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;integer neg_one = -1;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt;&lt;br /&gt;
|| addition, string concatenation&lt;br /&gt;
|| &amp;lt;code&amp;gt;integer two = 1 + 1;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;string text = &amp;quot;Hello&amp;quot; + &amp;quot; world&amp;quot;;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt;&lt;br /&gt;
|| list concatenation&lt;br /&gt;
|| &amp;lt;code&amp;gt;list myList = [1, 2, 3] + [4, 5];&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;list newList = oldList + addList;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|| [https://en.wikipedia.org/wiki/Arithmetic_shift arithmetic] left shift, [https://en.wikipedia.org/wiki/Arithmetic_shift arithmetic] right shift&lt;br /&gt;
|| &amp;lt;code&amp;gt;integer eight = 4 &amp;amp;lt;&amp;amp;lt; 1;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;integer neg_one = -2 &amp;amp;gt;&amp;amp;gt; 1;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;amp;lt;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;&amp;amp;lt;=&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;&amp;amp;gt;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;&amp;amp;gt;=&amp;lt;/code&amp;gt;&lt;br /&gt;
|| less than, less than or equal to, greater than, greater than or equal to&lt;br /&gt;
|| &amp;lt;code&amp;gt;integer isFalse = (6 &amp;amp;lt;= 4);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;==&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;!=&amp;lt;/code&amp;gt;&lt;br /&gt;
|| comparison: equal, not equal&lt;br /&gt;
|| &amp;lt;code&amp;gt;integer isFalse = (&amp;quot;this&amp;quot; == &amp;quot;that&amp;quot;);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;amp;&amp;lt;/code&amp;gt;&lt;br /&gt;
|| bitwise AND&lt;br /&gt;
|| &amp;lt;code&amp;gt;integer zero = 4 &amp;amp; 2;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;integer four = 4 &amp;amp; 4;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;^&amp;lt;/code&amp;gt;&lt;br /&gt;
|| bitwise XOR&lt;br /&gt;
|| &amp;lt;code&amp;gt;integer zero = 4 ^ 4;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;integer six = 4 ^ 2;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|| bitwise OR&lt;br /&gt;
|| &amp;lt;code&amp;gt;integer four = 4 &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 4;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;integer six = 4 &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;amp;&amp;amp;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|| logical AND, logical OR&lt;br /&gt;
|| &amp;lt;code&amp;gt;integer isFalse = (FALSE &amp;amp;&amp;amp; TRUE);&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;integer isTrue = (FALSE &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; TRUE);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;+=&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;-=&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;*=&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;/=&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;%=&amp;lt;/code&amp;gt;&lt;br /&gt;
|| assignment&lt;br /&gt;
|| &amp;lt;code&amp;gt;integer four = 4;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;integer eight = four; eight *= 2;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Modulus (&amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt;), like division, cause a &#039;&#039;Script run-time error. Math Error&#039;&#039; when its second operand equals zero.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The &amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt; operator only accepts integer (&amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt; as modulus) and vector (&amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt; as cross product) operands.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Unlike most other languages that use the C-style &amp;lt;code&amp;gt;&amp;amp;&amp;amp;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;||&amp;lt;/code&amp;gt; operators, &#039;&#039;&#039;both&#039;&#039;&#039; operands are &#039;&#039;&#039;always&#039;&#039;&#039; evaluated.  For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;if (TRUE || 1/0) llSay(PUBLIC_CHANNEL, &amp;quot;Aha!&amp;quot;);&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
: will cause a Math Error rather than say &amp;quot;Aha!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The &amp;lt;code&amp;gt;++&amp;lt;/code&amp;gt; (increment) and &amp;lt;code&amp;gt;--&amp;lt;/code&amp;gt; (decrement) operators have two versions, pre- and post-. The &#039;&#039;pre&#039;&#039;-increment (or &#039;&#039;pre&#039;&#039;-decrement) operator increments (or decrements) its operand by 1; the value of the expression is the incremented (or decremented) value. The &#039;&#039;post&#039;&#039;-increment (or &#039;&#039;post&#039;&#039;-decrement) operator increases (or decreases) the value of its operand by 1, but the value of the expression is the operand&#039;s original value &#039;&#039;prior&#039;&#039; to the operation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;integer count = 0;&lt;br /&gt;
if( ++count == 1 ) // &#039;count&#039; is incremented then evaluated.&lt;br /&gt;
    llSay(PUBLIC_CHANNEL, &amp;quot;Aha&amp;quot;); // message will be said.&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;integer count = 0;&lt;br /&gt;
if( count++ == 1 ) // &#039;count&#039; is evaluated then incremented.&lt;br /&gt;
    llSay(PUBLIC_CHANNEL, &amp;quot;Aha&amp;quot;); // message will not be said.&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; In most programming languages, and in the LSL bitwise operators, the AND operator has greater precedence than the OR operator. However, the LSL logical operators &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; and &amp;lt;nowiki&amp;gt;&amp;amp;&amp;amp;&amp;lt;/nowiki&amp;gt; have &#039;&#039;the same&#039;&#039; precedence. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;1 || 1 &amp;amp;&amp;amp; 0  // result: 0 because it&#039;s the same as (1 || 1) &amp;amp;&amp;amp; 0&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;1 | 1 &amp;amp; 0    // result: 1 because it&#039;s the same as 1 | (1 &amp;amp; 0)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The order of evaluation is from right to left.  If the value of x starts as 1 then the first two conditions below evaluate false and the second two evaluate true:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;(x &amp;amp;&amp;amp; (x = 0) == 0 &amp;amp;&amp;amp; x)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;(x &amp;amp;&amp;amp; (x = 0) == 0 &amp;amp;&amp;amp; x == 0)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;(x == 0 &amp;amp;&amp;amp; (x = 0) == 0)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;(x == 0 &amp;amp;&amp;amp; (x = 0) == 0 &amp;amp;&amp;amp; x)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both sides are evaluated regardless of the the truth of either side.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==+ Operator==&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Equality test on lists does not compare contents, only the length.&lt;br /&gt;
{| {{Prettytable}}&lt;br /&gt;
|+&lt;br /&gt;
&amp;lt;code&amp;gt;result = left + right&amp;lt;/code&amp;gt;&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
!Left Type&lt;br /&gt;
!Right Type&lt;br /&gt;
!Result Type&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|integer&lt;br /&gt;
|integer&lt;br /&gt;
|integer&lt;br /&gt;
|Adds &#039;&#039;&#039;left&#039;&#039;&#039; and &#039;&#039;&#039;right&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|integer&lt;br /&gt;
|float&lt;br /&gt;
|float&lt;br /&gt;
|Adds &#039;&#039;&#039;left&#039;&#039;&#039; and &#039;&#039;&#039;right&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|float&lt;br /&gt;
|integer&lt;br /&gt;
|float&lt;br /&gt;
|Adds &#039;&#039;&#039;left&#039;&#039;&#039; and &#039;&#039;&#039;right&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|string&lt;br /&gt;
|string&lt;br /&gt;
|string&lt;br /&gt;
|Concatenates &#039;&#039;&#039;right&#039;&#039;&#039; onto the end of &#039;&#039;&#039;left&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|list&lt;br /&gt;
|*&lt;br /&gt;
|list&lt;br /&gt;
|Concatenates &#039;&#039;&#039;right&#039;&#039;&#039; onto the end of &#039;&#039;&#039;left&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|*&lt;br /&gt;
|list&lt;br /&gt;
|list&lt;br /&gt;
|Affixes &#039;&#039;&#039;left&#039;&#039;&#039; onto the start of &#039;&#039;&#039;right&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|vector&lt;br /&gt;
|vector&lt;br /&gt;
|vector&lt;br /&gt;
|Adds &#039;&#039;&#039;left&#039;&#039;&#039; and &#039;&#039;&#039;right&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|rotation&lt;br /&gt;
|rotation&lt;br /&gt;
|rotation&lt;br /&gt;
|Adds &#039;&#039;&#039;left&#039;&#039;&#039; and &#039;&#039;&#039;right&#039;&#039;&#039;&amp;lt;br/&amp;gt;Not useful for combining rotations, use [[#* Operator|*]] or [[#/ Operator|/]] instead.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Shorthand Operators==&lt;br /&gt;
{| {{Prettytable}}&lt;br /&gt;
|+&lt;br /&gt;
Alternatives to the simple &#039;=&#039; operator...&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
!Simple assignment operator&lt;br /&gt;
!Shorthand operator&lt;br /&gt;
|-&lt;br /&gt;
|a = a + 1&lt;br /&gt;
|a += 1&lt;br /&gt;
|-&lt;br /&gt;
|a = a – 1&lt;br /&gt;
|a -= 1&lt;br /&gt;
|-&lt;br /&gt;
|a = a * (n+1)&lt;br /&gt;
|a *= (n+1)&lt;br /&gt;
|-&lt;br /&gt;
|a = a / (n+1)&lt;br /&gt;
|a /= (n+1)&lt;br /&gt;
|-&lt;br /&gt;
|a = a % b&lt;br /&gt;
|a %= b&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=={{Wikipedia|De Morgan&#039;s laws|w=n}}==&lt;br /&gt;
{| {{Prettytable|style=margin-top:0; float:left;}}&lt;br /&gt;
|+ Bitwise Equivalencies&lt;br /&gt;
!AND&lt;br /&gt;
!OR&lt;br /&gt;
|-&lt;br /&gt;
|| &amp;lt;code&amp;gt;~(a &amp;amp; b)&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;~a &amp;amp;#124; ~b&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| &amp;lt;code&amp;gt;~a &amp;amp; ~b&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;~(a &amp;amp;#124; b)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|| &amp;lt;code&amp;gt;a &amp;amp; ~b&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;~(~a &amp;amp;#124; b)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| &amp;lt;code&amp;gt;~(a &amp;amp; ~b)&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;~a &amp;amp;#124; b&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{| {{Prettytable|style=margin-top:0; float:left;}}&lt;br /&gt;
|+ Boolean Equivalencies&lt;br /&gt;
!AND&lt;br /&gt;
!OR&lt;br /&gt;
|-&lt;br /&gt;
|| &amp;lt;code&amp;gt;!(a &amp;amp;&amp;amp; b)&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;!a &amp;amp;#124;&amp;amp;#124; !b&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| &amp;lt;code&amp;gt;!a &amp;amp;&amp;amp; !b&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;!(a &amp;amp;#124;&amp;amp;#124; b)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|| &amp;lt;code&amp;gt;a &amp;amp;&amp;amp; !b&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;!(!a &amp;amp;#124;&amp;amp;#124; b)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| &amp;lt;code&amp;gt;!(a &amp;amp;&amp;amp; !b)&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;!a &amp;amp;#124;&amp;amp;#124; b&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
Due to {{Wikipedia|De Morgan&#039;s laws|w=n}}, by row, code in the &#039;&#039;&#039;AND&#039;&#039;&#039; column is logically equivalent to code in the &#039;&#039;&#039;OR&#039;&#039;&#039;. &#039;&#039;&#039;a&#039;&#039;&#039; and &#039;&#039;&#039;b&#039;&#039;&#039; need not be variables, they can be expressions. In certain circumstances these equivalencies can be used to simplify complex code. It is important not to confuse the two sets when using them. The first two rows depict De Morgan&#039;s laws as it is formulated, the second two build upon it.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Useful Snippets ==&lt;br /&gt;
&lt;br /&gt;
Typecasting can also be used if you have to concatenate many parts into a string:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// the following twp statements are equivalent:&lt;br /&gt;
string message1 = (string)[&amp;quot;I have &amp;quot;, 5, &amp;quot; children at the average age of &amp;quot;, 8.2, &amp;quot; years&amp;quot;];&lt;br /&gt;
string message2 = &amp;quot;I have 5 children at the average age of 8.200000 years&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{LSLC|}}{{LSLC|Syntax}}{{LSLC|Keywords}}&lt;br /&gt;
{{LSLC|FixMe}}&amp;lt;!-- This article is woefully incomplete, it needs more Operator tables --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Gwyneth_Llewelyn/sandbox&amp;diff=1214208</id>
		<title>User:Gwyneth Llewelyn/sandbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Gwyneth_Llewelyn/sandbox&amp;diff=1214208"/>
		<updated>2023-07-01T12:03:48Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Congrats! You&#039;ve found my sandbox! =&lt;br /&gt;
&lt;br /&gt;
Few people are that wiki-savvy. You&#039;ve earned my respect, I say.&lt;br /&gt;
&lt;br /&gt;
:If you say so. But you&#039;re making it really hard to track actual changes and contributions to the wiki contents, due to your spamming of the changelog page (which is where I found this one). I don&#039;t think there&#039;s a filter for removing edits from a certain person, and even if there were, I would still be interested in any potential actual content edits you make, to review them. Is that spamming on purpose? Why should anyone care about the availability of wikipedia templates that are not even in use anywhere?&lt;br /&gt;
:I maintain a database of LSL keywords and the wiki changelog is my main source of information, together with the sim keywords list which is usually slower to catch up than the wiki, so following the wiki changes is part of my job to maintain the database. I also want to review and fix incorrect information posted by users when I find it. --[[User:Sei Lisa|Sei Lisa]] ([[User talk:Sei Lisa|talk]]) 05:03, 1 July 2023 (PDT)&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:ip-num|{{#switch:{{{npl|}}}&lt;br /&gt;
	|32=1|31=2|30=4|29=8&lt;br /&gt;
	|28=16|27=32|26=64|25=128&lt;br /&gt;
	|24=256|23=512|22=1024|21=2048&lt;br /&gt;
	|20=4096|19=8192|18=16384|17=32768&lt;br /&gt;
	|16=65536|15=131072|14=262144|13=524288&lt;br /&gt;
	|12=1048576|11=2097152|10=4194304|9=8388608&lt;br /&gt;
	|8=16777216|7=33554432|6=67108864|5=134217728&lt;br /&gt;
	|4=268435456|3=536870912|2=1073741824|1=2147483648&lt;br /&gt;
	|0=4294967296|{{#expr:4294967296 - {{IP_Range/IP2Int|{{{subnet|255.255.255.255}}}}}}}&lt;br /&gt;
}}}}&lt;br /&gt;
&lt;br /&gt;
{{IP_Range/IP2Int|{{{subnet|255.255.255.255}}}}}&lt;br /&gt;
&lt;br /&gt;
{{#expr:4294967296 - {{IP_Range/IP2Int|{{{subnet|255.255.255.255}}}}}}}&lt;br /&gt;
&lt;br /&gt;
{{#var:ip-num}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;phptag&amp;gt;&lt;br /&gt;
$foo = &#039;hello world&#039;;&lt;br /&gt;
echo ucfirst( $foo . &amp;quot;!!!\n&amp;quot; );&lt;br /&gt;
&amp;lt;/phptag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#log:32|2}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlHMAC&amp;diff=1213888</id>
		<title>LlHMAC</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlHMAC&amp;diff=1213888"/>
		<updated>2023-05-07T10:31:54Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: If the input changes, so does the output&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;
|sort=HMAC&lt;br /&gt;
|func=llHMAC&lt;br /&gt;
|return_type=string&lt;br /&gt;
|p1_type=string|p1_name=private_key&lt;br /&gt;
|p2_type=string|p2_name=msg&lt;br /&gt;
|p3_type=string|p3_name=algorithm&lt;br /&gt;
|func_footnote=This function supports md5, sha1, sha224, sha256, sha384, sha512 for &#039;&#039;&#039;algorithm&#039;&#039;&#039;.&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=that is the {{Wikipedia|Base64|Base64-encoded}} {{Wikipedia|HMAC|HMAC}} hash of &#039;&#039;&#039;msg&#039;&#039;&#039; when using hash algorithm &#039;&#039;&#039;algorithm&#039;&#039;&#039; and secret key &#039;&#039;&#039;private_key&#039;&#039;&#039;.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string private_key = &amp;quot;secret key&amp;quot;;&lt;br /&gt;
        &lt;br /&gt;
        // Supported algorithims for llHMAC() include:&lt;br /&gt;
        // md5, sha1, sha224, sha256, sha384, sha512&lt;br /&gt;
        &lt;br /&gt;
        string algorithm = &amp;quot;sha1&amp;quot;;&lt;br /&gt;
        string msg = &amp;quot;Hello, Avatar!&amp;quot;;&lt;br /&gt;
        &lt;br /&gt;
        string digest = llHMAC(private_key, msg, algorithm);&lt;br /&gt;
        &lt;br /&gt;
        // For the given private_key/msg/algorithm, expect the HMAC&lt;br /&gt;
        // digest to be &#039;ffCDntkagRO5mIEtd2tYzM2Bg8I=&#039;&lt;br /&gt;
        llSay(0, &amp;quot;HMAC digest of message &#039;&amp;quot; + msg + &amp;quot;&#039; using algorithm &amp;quot;&lt;br /&gt;
            +  algorithm + &amp;quot; is &amp;quot; + digest);&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||[[llSignRSA]]}}&lt;br /&gt;
{{LSL DefineRow||[[llVerifyRSA]]}}&lt;br /&gt;
{{LSL DefineRow||[[llSHA1String]]}}&lt;br /&gt;
{{LSL DefineRow||[[llSHA256String]]}}&lt;br /&gt;
{{LSL DefineRow||[[llMD5String]]}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles=&lt;br /&gt;
|notes=&lt;br /&gt;
|cat1=Hash&lt;br /&gt;
|cat2=Encoding&lt;br /&gt;
|cat3=Encryption&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LSL_SIM_STAT_ASSET_UPLOADS&amp;diff=1213866</id>
		<title>LSL SIM STAT ASSET UPLOADS</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LSL_SIM_STAT_ASSET_UPLOADS&amp;diff=1213866"/>
		<updated>2023-04-09T08:41:59Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Wrong text for the constant, wrong page name. Change to #REDIRECT and suggest for deletion.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[SIM_STAT_ASSET_UPLOADS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Suggested_For_Deletion]]&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Category:LSL_Vector&amp;diff=1213865</id>
		<title>Category:LSL Vector</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Category:LSL_Vector&amp;diff=1213865"/>
		<updated>2023-04-08T22:12:40Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Oops, fix also the variable&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header|ml=*}}{{LSLC|}}{{LSLC|Types}}&lt;br /&gt;
==Vector==&lt;br /&gt;
&lt;br /&gt;
A vector is a data {{LSLGC|Types|type}} that contains a set of three {{LSLGC|Float|float}} values.&lt;br /&gt;
&lt;br /&gt;
===Components===&lt;br /&gt;
Each element can be accessed individually by appending .x, .y, or .z to the variable name.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
vector vec = &amp;lt;1, 2, 3&amp;gt;;&lt;br /&gt;
float x = vec.x; // 1.0&lt;br /&gt;
float y = vec.y; // 2.0&lt;br /&gt;
float z = vec.z; // 3.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Uses===&lt;br /&gt;
Vectors are often used for...&lt;br /&gt;
* {{LSLGC|Movement|Position}}: x, y, and z are in metres.&lt;br /&gt;
* {{LSLGC|Movement|Velocity}}: x, y, and z are in meters per second.&lt;br /&gt;
* {{LSLGC|Color|Colour}}: x is Red, y is Green, and z is Blue.&lt;br /&gt;
&lt;br /&gt;
===Operators===&lt;br /&gt;
Vectors support the following operations:&lt;br /&gt;
==== Addition, Operator &amp;quot;+&amp;quot; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
vector v = &amp;lt;1, 2, 3&amp;gt; + &amp;lt;0.5, 0.0, 3&amp;gt;; // &amp;lt;1.5, 2.0, 6.0&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Subtraction, Operator &amp;quot;-&amp;quot; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
vector v = &amp;lt;1, 1, 1&amp;gt; - &amp;lt;0.5, 0.0, 3&amp;gt;; // &amp;lt;0.5, 1.0, -2.0&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Dot Product, Operator &amp;quot;*&amp;quot; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
float f = &amp;lt;9, 2, 7&amp;gt; * &amp;lt;4, 8, 10&amp;gt;; // 122.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Cross Product, Operator &amp;quot;%&amp;quot; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
vector v = &amp;lt;2, 3, 4&amp;gt; % &amp;lt;5, 6, 7&amp;gt;; // &amp;lt;-3, 6, -3&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Scalar ====&lt;br /&gt;
A vector can be multiplied or divided by a [[Float]] or [[Integer]] to scale it.&lt;br /&gt;
&lt;br /&gt;
Each component of the vector will be multiplied or divided by the same value.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
vector v = &amp;lt;1, 2, 3&amp;gt; * 1.5; // &amp;lt;1.5, 3.0, 4.5&amp;gt;&lt;br /&gt;
vector v = &amp;lt;1, 2, 3&amp;gt; / 1.5; // &amp;lt;0.666667, 1.333333, 2.000000&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Rotation ====&lt;br /&gt;
A vector can be multiplied or divided by a [[Quaternion]] to rotate it.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// 45-degree rotation around the Z (up) axis&lt;br /&gt;
rotation r = llEuler2Rot(&amp;lt;0, 0, 45&amp;gt; * DEG_TO_RAD);&lt;br /&gt;
&lt;br /&gt;
// Vector whose direction is 1 meter to the east&lt;br /&gt;
vector v = &amp;lt;1, 0, 0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
// Vector whose direction is north-east&lt;br /&gt;
vector rotated = v * r; // &amp;lt;0.707107, 0.707107, 0.000000&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Vector whose direction is south-east&lt;br /&gt;
// (division performs a rotation in the opposite direction)&lt;br /&gt;
vector rotated = v / r; // &amp;lt;0.707107, -0.707107, 0.000000&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Useful Snippets===&lt;br /&gt;
Check whether a string value is a valid vector:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;integer IsVector(string s)&lt;br /&gt;
{&lt;br /&gt;
    list split = llParseString2List(s, [&amp;quot; &amp;quot;], [&amp;quot;&amp;lt;&amp;quot;, &amp;quot;&amp;gt;&amp;quot;, &amp;quot;,&amp;quot;]);&lt;br /&gt;
    if(llGetListLength(split) != 7)//we must check the list length, or the next test won&#039;t work properly.&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    return !((string)((vector)s) == (string)((vector)((string)llListInsertList(split, [&amp;quot;-&amp;quot;], 5))));&lt;br /&gt;
    //it works by trying to flip the sign on the Z element of the vector,&lt;br /&gt;
    //if it works or breaks the vector then the values won&#039;t match.&lt;br /&gt;
    //if the vector was already broken then the sign flip will have no affect and the values will match&lt;br /&gt;
    //we cast back to string so we can catch negative zero which allows for support of ZERO_VECTOR&lt;br /&gt;
}//Strife Onizuka&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Category:LSL_Vector&amp;diff=1213864</id>
		<title>Category:LSL Vector</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Category:LSL_Vector&amp;diff=1213864"/>
		<updated>2023-04-08T22:12:00Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Cross product returns a vector, not a scalar&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header|ml=*}}{{LSLC|}}{{LSLC|Types}}&lt;br /&gt;
==Vector==&lt;br /&gt;
&lt;br /&gt;
A vector is a data {{LSLGC|Types|type}} that contains a set of three {{LSLGC|Float|float}} values.&lt;br /&gt;
&lt;br /&gt;
===Components===&lt;br /&gt;
Each element can be accessed individually by appending .x, .y, or .z to the variable name.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
vector vec = &amp;lt;1, 2, 3&amp;gt;;&lt;br /&gt;
float x = vec.x; // 1.0&lt;br /&gt;
float y = vec.y; // 2.0&lt;br /&gt;
float z = vec.z; // 3.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Uses===&lt;br /&gt;
Vectors are often used for...&lt;br /&gt;
* {{LSLGC|Movement|Position}}: x, y, and z are in metres.&lt;br /&gt;
* {{LSLGC|Movement|Velocity}}: x, y, and z are in meters per second.&lt;br /&gt;
* {{LSLGC|Color|Colour}}: x is Red, y is Green, and z is Blue.&lt;br /&gt;
&lt;br /&gt;
===Operators===&lt;br /&gt;
Vectors support the following operations:&lt;br /&gt;
==== Addition, Operator &amp;quot;+&amp;quot; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
vector v = &amp;lt;1, 2, 3&amp;gt; + &amp;lt;0.5, 0.0, 3&amp;gt;; // &amp;lt;1.5, 2.0, 6.0&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Subtraction, Operator &amp;quot;-&amp;quot; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
vector v = &amp;lt;1, 1, 1&amp;gt; - &amp;lt;0.5, 0.0, 3&amp;gt;; // &amp;lt;0.5, 1.0, -2.0&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Dot Product, Operator &amp;quot;*&amp;quot; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
float f = &amp;lt;9, 2, 7&amp;gt; * &amp;lt;4, 8, 10&amp;gt;; // 122.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Cross Product, Operator &amp;quot;%&amp;quot; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
float f = &amp;lt;2, 3, 4&amp;gt; % &amp;lt;5, 6, 7&amp;gt;; // &amp;lt;-3, 6, -3&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Scalar ====&lt;br /&gt;
A vector can be multiplied or divided by a [[Float]] or [[Integer]] to scale it.&lt;br /&gt;
&lt;br /&gt;
Each component of the vector will be multiplied or divided by the same value.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
vector v = &amp;lt;1, 2, 3&amp;gt; * 1.5; // &amp;lt;1.5, 3.0, 4.5&amp;gt;&lt;br /&gt;
vector v = &amp;lt;1, 2, 3&amp;gt; / 1.5; // &amp;lt;0.666667, 1.333333, 2.000000&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Rotation ====&lt;br /&gt;
A vector can be multiplied or divided by a [[Quaternion]] to rotate it.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// 45-degree rotation around the Z (up) axis&lt;br /&gt;
rotation r = llEuler2Rot(&amp;lt;0, 0, 45&amp;gt; * DEG_TO_RAD);&lt;br /&gt;
&lt;br /&gt;
// Vector whose direction is 1 meter to the east&lt;br /&gt;
vector v = &amp;lt;1, 0, 0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
// Vector whose direction is north-east&lt;br /&gt;
vector rotated = v * r; // &amp;lt;0.707107, 0.707107, 0.000000&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Vector whose direction is south-east&lt;br /&gt;
// (division performs a rotation in the opposite direction)&lt;br /&gt;
vector rotated = v / r; // &amp;lt;0.707107, -0.707107, 0.000000&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Useful Snippets===&lt;br /&gt;
Check whether a string value is a valid vector:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;integer IsVector(string s)&lt;br /&gt;
{&lt;br /&gt;
    list split = llParseString2List(s, [&amp;quot; &amp;quot;], [&amp;quot;&amp;lt;&amp;quot;, &amp;quot;&amp;gt;&amp;quot;, &amp;quot;,&amp;quot;]);&lt;br /&gt;
    if(llGetListLength(split) != 7)//we must check the list length, or the next test won&#039;t work properly.&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    return !((string)((vector)s) == (string)((vector)((string)llListInsertList(split, [&amp;quot;-&amp;quot;], 5))));&lt;br /&gt;
    //it works by trying to flip the sign on the Z element of the vector,&lt;br /&gt;
    //if it works or breaks the vector then the values won&#039;t match.&lt;br /&gt;
    //if the vector was already broken then the sign flip will have no affect and the values will match&lt;br /&gt;
    //we cast back to string so we can catch negative zero which allows for support of ZERO_VECTOR&lt;br /&gt;
}//Strife Onizuka&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Template:Unicode&amp;diff=1213824</id>
		<title>Template:Unicode</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Template:Unicode&amp;diff=1213824"/>
		<updated>2023-03-31T06:37:20Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Replace obsolete, broken function with current, working one&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HoverText|U+{{padleft:{{{1|0}}}|4}}|Unicode character {{LSL Hex/Parse|{{{1|0}}}}}}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSetSoundQueueing&amp;diff=1213226</id>
		<title>LlSetSoundQueueing</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSetSoundQueueing&amp;diff=1213226"/>
		<updated>2023-02-03T12:29:20Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: New functions don&amp;#039;t have IDs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function/Headless&lt;br /&gt;
|inject-2={{Issues/SVC-4260}}{{LSL_Function/boolean|queue|pd=sound queuing:|bool=*|default=false}}{{LSL Function/link-face|link}}&lt;br /&gt;
&lt;br /&gt;
|head={{LSL Function/Head&lt;br /&gt;
|func=llSetSoundQueueing&lt;br /&gt;
|p1_type=integer|p1_subtype=boolean|p1_name=queue&lt;br /&gt;
|func_id=208|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text&lt;br /&gt;
}}&lt;br /&gt;
{{LSL Function/Head&lt;br /&gt;
|func=llLinkSetSoundQueueing&lt;br /&gt;
|p1_type=integer|p1_subtype=link|p1_name=link&lt;br /&gt;
|p2_type=integer|p2_subtype=boolean|p2_name=queue&lt;br /&gt;
|func_id=|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text&lt;br /&gt;
}}&lt;br /&gt;
|summary=Set whether attached sounds wait for the current sound to finish. If {{LSLP|queue}} is [[TRUE]], queuing is enabled, if [[FALSE]] queuing is disabled. Sound queuing is disabled by default.&lt;br /&gt;
|caveats=&lt;br /&gt;
*The sound queue is only 1 level deep - this means that beside the sound that is currently playing, there can only be 1 sound in reserve. The sound queue is first-come, first-serve.* [[#SVC-4260|SVC-4260]]&lt;br /&gt;
*Further to the above, the queue order is reversed when using [[llPlaySoundSlave]] - using the below example, the default behaviour would be to play SoundName1 and SoundName2, however when using the aforementioned function the order would be to play SoundName2 and SoundName3.&lt;br /&gt;
*Sound queuing is a property of the prim, not the script. It can be activated and deactivated by any script in the prim and survives script reset, re-rez and script removal.&lt;br /&gt;
*If used to make smooth transitions using slave/master sounds the sounds tend to go out of sync.&lt;br /&gt;
*Although sounds are queued, the volume of all sounds in the queue is set by the last item in the queue. If your application requires the use of differing volume values, you may wish to implement [[llAdjustSoundVolume]] alongside the sound queue&lt;br /&gt;
*There is a very small (but audible) gap of silence between sounds due to network latency and processing time.&lt;br /&gt;
*The queued sound must be fully loaded in the viewer, or else it will not play. [[llPreloadSound]] is not always reliable in doing its job.&lt;br /&gt;
*Queueing a sound that is identical to the one currently playing will fail. Use [[llLoopSound]] instead.&lt;br /&gt;
*While this function does not have a delay, enabling or disabling the sound queue is not instant. It seems to take approx ~0.1 seconds to set the queueing flag.&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;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llPreloadSound(&amp;quot;SoundName1&amp;quot;);//This loads the sounds into all in range viewers and cuts delay between sounds.&lt;br /&gt;
        llPreloadSound(&amp;quot;SoundName2&amp;quot;);//All sound parameters can be the name of a sound in the prim&#039;s inventory or a UUID of a sound&amp;quot;);&lt;br /&gt;
        llPreloadSound(&amp;quot;SoundName3&amp;quot;); //This sound will be skipped, as the queue is only 1 level deep.&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer detected)&lt;br /&gt;
    {&lt;br /&gt;
        llSetSoundQueueing(TRUE);//Set to TRUE for queueing and SoundName2 plays after the SoundName1 has ended.&lt;br /&gt;
        //Set to FALSE only the second will be played since the prim has only one sound emitter and the second was called last.&lt;br /&gt;
        //Can be set anywhere within the script (if within an event it will activate when the event is triggered.&lt;br /&gt;
        llPlaySound(&amp;quot;SoundName1&amp;quot;, 1.0);&lt;br /&gt;
        llPlaySound(&amp;quot;SoundName2&amp;quot;, 1.0);&lt;br /&gt;
        llPlaySound(&amp;quot;SoundName3&amp;quot;, 1.0); //This sound isn&#039;t played as the queue is already full, so this is discarded.&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llLoopSound]]}}&lt;br /&gt;
{{LSL DefineRow||[[llLoopSoundSlave]]|3=Plays a looped sound {{HoverText|attached|The sound moves with the prim}}, synced with the master.}}&lt;br /&gt;
{{LSL DefineRow||[[llPlaySoundSlave]]|3=Plays a sound once {{HoverText|attached|The sound moves with the prim}}, synced with the master.}}&lt;br /&gt;
{{LSL DefineRow||[[llAdjustSoundVolume]]|3=Adjusts the volume of playing sound(s).}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Sound&lt;br /&gt;
|cat2=Prim&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
|history={{LSL Added|0.2.0|remote=http://secondlife.wikia.com/wiki/Version_0.2.0}}, the queue is only one level deep.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlStopSound&amp;diff=1213225</id>
		<title>LlStopSound</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlStopSound&amp;diff=1213225"/>
		<updated>2023-02-03T12:27:53Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: New functions don&amp;#039;t have IDs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function/Headless&lt;br /&gt;
|inject-2={{LSL Function/link-face|link}}&lt;br /&gt;
&lt;br /&gt;
|head={{LSL Function/Head&lt;br /&gt;
|func=llStopSound&lt;br /&gt;
|func_id=92|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text&lt;br /&gt;
}}{{LSL Function/Head&lt;br /&gt;
|func=llLinkStopSound&lt;br /&gt;
|p1_type=integer|p1_subtype=link|p1_name=link&lt;br /&gt;
|func_id=|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text&lt;br /&gt;
}}&lt;br /&gt;
|summary=Stops the attached sound(s) currently playing, if they were started by [[llLoopSound]]&lt;br /&gt;
|caveats=&lt;br /&gt;
*There is no way to stop a specific sound.&lt;br /&gt;
*In a linked set use [[llLinkStopSound]] to stop sound in a specific prim.&lt;br /&gt;
&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;source 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;
        llLoopSound(&amp;quot;string soundname if in object inventory or UUID&amp;quot;, 1.0);&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        llStopSound();//As if by magic the sound stops!!&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||[[llSound]]|3=This function has been deprecated, please use [[llPlaySound]] instead.}}&lt;br /&gt;
{{LSL DefineRow||[[llPlaySound]]}}&lt;br /&gt;
{{LSL DefineRow||[[llPlaySoundSlave]]}}&lt;br /&gt;
{{LSL DefineRow||[[llLoopSound]]}}&lt;br /&gt;
{{LSL DefineRow||[[llLoopSoundMaster]]}}&lt;br /&gt;
{{LSL DefineRow||[[llLoopSoundSlave]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|deprecated&lt;br /&gt;
|cat1=Sound&lt;br /&gt;
|cat2=Stop&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlLinkPlaySound&amp;diff=1213224</id>
		<title>LlLinkPlaySound</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlLinkPlaySound&amp;diff=1213224"/>
		<updated>2023-02-03T12:27:07Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: New functions don&amp;#039;t have ids&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{LSL Function/link-face|link}}&lt;br /&gt;
{{LSL_Function/inventory|sound|uuid=true|type=sound|volume=volume}}{{LSL Function/link-face|link}}&lt;br /&gt;
|func_id=|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llLinkPlaySound|sort=LinkPlaySound&lt;br /&gt;
|p1_type=integer|p1_subtype=link|p1_name=link&lt;br /&gt;
|p2_type=string|p2_name=sound&lt;br /&gt;
|p3_type=float|p3_name=volume&lt;br /&gt;
|p4_type=integer|p4_name=flags|p4_desc=Bit flags used to control how the sound is played.&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc=Plays {{HoverText|attached|The sound moves with the prim}} {{LSLPT|sound}} once at {{LSLPT|volume}}&lt;br /&gt;
|return_text&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=*A call to llPlaySound replaces any other sound (so that only one sound can be played at the same time from the same prim), except sounds started with the deprecated [[llSound]] which always plays sound files till the end.&lt;br /&gt;
*Sound files must be 30 seconds or shorter.&lt;br /&gt;
*Sounds are always sampled at 44.1KHz, 16-bit, mono (stereo files will have one channel dropped--merged (as in combined)--when uploading).&lt;br /&gt;
*If the object playing the sound is a {{HoverLink|HUD|Heads Up Display}}, the sound is only heard by the user the HUD is attached to.&lt;br /&gt;
**To play a sound inworld from a HUD use [[llTriggerSound]].&lt;br /&gt;
*It is impossible to play two (or more) sounds at the same time and have them start playing at exactly the same time ~ {{JIRA|VWR-15663}}&lt;br /&gt;
**If multiple sound emitters play the same exact sound within range of the viewer at the same time, they are usually not in sync due to latency between the server/client and script execution &amp;amp; communication delays. This can produce echos, odd resonance, and other strange effects that you (probably) do not want.&lt;br /&gt;
*When used in conjunction with [[llSetSoundQueueing]], sounds may incorrectly [https://community.secondlife.com/forums/topic/443645-llplaysound-plays-the-sound-twice-or-more/ play more than once.] This can be fixed by disabling the sound queue if only a single sound sample is to be played.&lt;br /&gt;
|constants={{LSL Constants/PlaySoundFlags}}&lt;br /&gt;
|examples=&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;
          llPlaySound(&amp;quot;some_sound&amp;quot;,1.0);&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llTriggerSound]]|3=Plays a sound {{HoverText|unattached|The sound does not moves with the prim}}.}}&lt;br /&gt;
{{LSL DefineRow||[[llTriggerSoundLimited]]}}&lt;br /&gt;
{{LSL DefineRow||[[llLoopSound]]|3=Plays a sound {{HoverText|attached|The sound moves with the prim}}.}}&lt;br /&gt;
{{LSL DefineRow||[[llLoopSoundMaster]]}}&lt;br /&gt;
{{LSL DefineRow||[[llLoopSoundSlave]]}}&lt;br /&gt;
{{LSL DefineRow||[[llPlaySoundSlave]]}}&lt;br /&gt;
{{LSL DefineRow||[[llSetSoundQueueing]]|3=Sets a prim property which allows sounds to be queued, instead of overwriting eachother.}}&lt;br /&gt;
{{LSL DefineRow||[[llStopSound]]}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Sound&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Jump&amp;diff=1212925</id>
		<title>Jump</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Jump&amp;diff=1212925"/>
		<updated>2023-01-05T18:40:57Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: clarify what &amp;quot;fail silently&amp;quot; means exactly&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header|ml=*}}{{#if:&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:name|jump}}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:p_jump_target_desc|Name of a label inside the same function or event scope.}}&lt;br /&gt;
{{#vardefine:p_label_target_desc|A label that can be jumped to, if the jump is in the same scope or child scope. It isn&#039;t possible to jump between scopes (such as between functions, events or states).}}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:header_title|jump {{LSL Param|jump_target|target}};}}&lt;br /&gt;
{{#vardefine:header_text|{{{!}}&lt;br /&gt;
{{LSL DefineRow|label|target|{{#var:p_jump_target_desc}}}}&lt;br /&gt;
{{!}}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:constants_nb|&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;@{{LSL Param|label_target|target}};&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em&amp;quot;&amp;gt;&lt;br /&gt;
{{{!}}&lt;br /&gt;
{{LSL DefineRow|label|target|{{#var:p_label_target_desc}}}}&lt;br /&gt;
{{!}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:examples|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;integer a = 5;&lt;br /&gt;
jump over;&lt;br /&gt;
@in;&lt;br /&gt;
a = 6;&lt;br /&gt;
@over;&lt;br /&gt;
llOwnerSay((string)a);&lt;br /&gt;
if(a &amp;lt; 6)&lt;br /&gt;
    jump in;&lt;br /&gt;
//script will say 5 and then 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer getLinkWithName(string name)&lt;br /&gt;
{&lt;br /&gt;
    integer i = llGetLinkNumber() != 0;   // Start at zero (single prim) or 1 (two or more prims)&lt;br /&gt;
    integer x = llGetNumberOfPrims() + i; // [0, 1) or [1, llGetNumberOfPrims()]&lt;br /&gt;
    for (; i &amp;lt; x; ++i) &lt;br /&gt;
    {&lt;br /&gt;
        if (llGetLinkName(i) == name) &lt;br /&gt;
            jump break; // Found it! Exit loop early with result&lt;br /&gt;
    }&lt;br /&gt;
    i = -1; // No prim with that name, return -1.&lt;br /&gt;
    @break;&lt;br /&gt;
    return i;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
More often than not, the rather ugly &#039;jump&#039; can be avoided, especially in user defined functions, as this version of the above script demonstrates&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer getLinkWithName(string name)&lt;br /&gt;
{&lt;br /&gt;
    integer i = llGetLinkNumber() != 0;      // Start at zero (single prim) or 1 (two or more prims)&lt;br /&gt;
    integer x = llGetNumberOfPrims() + i; // [0, 1) or [1, llGetNumberOfPrims()]&lt;br /&gt;
    for (; i &amp;lt; x; ++i) &lt;br /&gt;
    {&lt;br /&gt;
        if (llGetLinkName(i) == name) &lt;br /&gt;
            return i;                    // Found it, return its index        &lt;br /&gt;
    }&lt;br /&gt;
    return -1;     // No prim with that name, return -1.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:notes|&lt;br /&gt;
It is generally considered inadvisable to use jumps (commonly know as gotos) where other flow control structures could be used.&lt;br /&gt;
* {{Wikipedia|Goto}}&lt;br /&gt;
* [http://xkcd.com/292/ XKCD:Goto]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:lso|&lt;br /&gt;
&amp;lt;h5&amp;gt;Multiple Jumps Bug&amp;lt;/h5&amp;gt;&lt;br /&gt;
The following function, &amp;lt;code&amp;gt;jumpy&amp;lt;/code&amp;gt;, demonstrates the multiple-jump-sites-to-a-single-target bug. It appears this function should result in an infinite loop, and it does when the script is compiled for the Mono VM. However when compiled for LSO VM because of this bug the second jump never happens and the function returns. LL reported they were unwilling to fix this bug as to do so would be a breaking change. This bug was fixed in the newer Mono VM.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;jumpy(){&lt;br /&gt;
    jump next;//first jump&lt;br /&gt;
    @next;&lt;br /&gt;
    jump next;//second jump - BUG never gets executed&lt;br /&gt;
    return;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:caveats|&lt;br /&gt;
*&#039;&#039;&#039;In [[LSO]] Only:&#039;&#039;&#039; If multiple jump sites are declared for the same target label within scope, then only the first (top to bottom, left to right) will function as expected, all others will silently fail.&lt;br /&gt;
*Labels are scoped at the event and function level, meaning that it is not possible to declare duplicate labels within the same event or function, even if the labels are enclosed in different if-statements, loops etc. -- {{JIRA|SVC-6712}}&lt;br /&gt;
**If you attempt this, the script will silently fail to compile.&lt;br /&gt;
*If code exists after a return that is not encapsulated in a flow control structure, the compiler will return an error about the code being dead even if the code is accessible with a jump. -- {{Jira|SVC-1929}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Issues/SVC-6712}}&lt;br /&gt;
{{Issues/SCR-256}}&lt;br /&gt;
{{Issues/SVC-1929}}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:helpers|}}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:also_header|&amp;lt;h3&amp;gt;Keywords&amp;lt;/h3&amp;gt;&lt;br /&gt;
{{{!}}&lt;br /&gt;
{{LSL DefineRow||[[return]]|}}&lt;br /&gt;
{{LSL DefineRow||[[state]]|}}&lt;br /&gt;
{{!}}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:also_footer|}}&lt;br /&gt;
{{#vardefine:also_functions|}}&lt;br /&gt;
{{#vardefine:also_events|}}&lt;br /&gt;
{{#vardefine:also_articles|}}&lt;br /&gt;
{{#vardefine:also_tests|}}&lt;br /&gt;
{{#vardefine:location|}}&lt;br /&gt;
&lt;br /&gt;
}}{{LSL Generic}}{{LSLC|Flow Control}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=PRIM_OMEGA&amp;diff=1212748</id>
		<title>PRIM OMEGA</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=PRIM_OMEGA&amp;diff=1212748"/>
		<updated>2022-11-10T20:07:01Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Fix the extra caveat to make it appear&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{{#if:&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:omega_const|{{LSL Const|PRIM_OMEGA|integer|18|c=Used to {{GetSet|{{{1|}}}|get the object&#039;s llTargetOmega settings|rotate the object at on the given axis at the given rate|/}} }}}}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:caveats|{{#var:caveats}}&lt;br /&gt;
*[[PRIM_OMEGA]] on nonphysical objects, and child prims of physical objects, is only a client side effect; the object or prim will collide as non-moving geometry.&lt;br /&gt;
*[[PRIM_OMEGA]] cannot be used on avatars sitting on the object. It will emit the error message &amp;quot;PRIM_OMEGA disallowed on agent&amp;quot;.&lt;br /&gt;
*If [[PRIM_OMEGA]] does not appear to be working, make sure that that Develop &amp;gt; Network &amp;gt; Velocity Interpolate Objects is enabled on the viewer.&lt;br /&gt;
*In the parameters returned by &amp;lt;code&amp;gt;llGetPrimitiveParams([PRIM_OMEGA])&amp;lt;/code&amp;gt;, the vector is normalized, and the spinrate is multiplied by the magnitude of the original vector.}}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:p_axis_desc|arbitrary axis to rotate the object around}}&lt;br /&gt;
{{#vardefine:p_spinrate_desc|rate of rotation in radians per second}}&lt;br /&gt;
{{#vardefine:p_gain_desc|also modulates the final spinrate and disables the rotation behavior if zero}}&lt;br /&gt;
&lt;br /&gt;
}}&amp;lt;/onlyinclude&amp;gt;{{#if:&lt;br /&gt;
&lt;br /&gt;
}}{{LSL Constant&lt;br /&gt;
|inject-2={{LSL PrimitiveParam Categorize|Prim}}&lt;br /&gt;
|name=PRIM_OMEGA&lt;br /&gt;
|type=integer&lt;br /&gt;
|value=32&lt;br /&gt;
|desc=Used to make the object spin at the specified axis and rate, or retrieve spin settings. See [[llTargetOmega]] for specification.&lt;br /&gt;
|examples=&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// Set this prim rotating&lt;br /&gt;
llTargetOmega(&amp;lt;1.0,3.0,0.5&amp;gt;, TWO_PI, 1.0);&lt;br /&gt;
&lt;br /&gt;
// Read back this prim&#039;s current target omega&lt;br /&gt;
list current_omega = llGetPrimitiveParams([PRIM_OMEGA]); // returns [axis, spinrate, gain]&lt;br /&gt;
vector axis = llList2Vector(current_omega, 0); // Should be llVecNorm(&amp;lt;1.0,3.0,0.5&amp;gt;)&lt;br /&gt;
float spinrate = llList2Float(current_omega, 1); // Should be TWO_PI*llVecMag(&amp;lt;1.0,3.0,0.5&amp;gt;)&lt;br /&gt;
float gain = llList2Float(current_omega, 2); // Should be 1.0&lt;br /&gt;
&lt;br /&gt;
// Set all child prims rotating&lt;br /&gt;
llSetLinkPrimitiveParamsFast(LINK_ALL_CHILDREN, [PRIM_OMEGA, &amp;lt;1.0,3.0,0.5&amp;gt;, TWO_PI, 1.0]);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Also, can use llSetPrimitiveParams for the root prim.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;// will need two prims linked together for this script.&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // make some sort of rotation angle for the omega...&lt;br /&gt;
        vector rotationAngle = &amp;lt;2.3, 5.5, 9.7&amp;gt; * llTan(85); &lt;br /&gt;
        &lt;br /&gt;
        // rotate the main prim slowly using the same rotataion angle, rate, and gain...&lt;br /&gt;
        llSetPrimitiveParams([ PRIM_OMEGA, rotationAngle * 0.3, 1.0, 1.0 ]);&lt;br /&gt;
        &lt;br /&gt;
        // rotate the link satellite prim separately around its own axis &lt;br /&gt;
        // it will rotate also around the main prim because the main prim is rotating.&lt;br /&gt;
        llSetLinkPrimitiveParams(2, [ PRIM_OMEGA, rotationAngle, 1.0, 1.0 ]);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|constants&lt;br /&gt;
|pa={{LSL Constant/List|i_front=[&amp;amp;#32;{{#var:omega_const}},&amp;amp;#32;|i_end=&amp;amp;nbsp;]&lt;br /&gt;
|text=When used with [[llSetPrimitiveParams]] &amp;amp; [[llSetLinkPrimitiveParams]]&lt;br /&gt;
|i1_type=vector|i1_name=axis&lt;br /&gt;
|i2_type=float|i2_name=spinrate&lt;br /&gt;
|i3_type=float|i3_name=gain&lt;br /&gt;
|toc=llSetPrimitiveParams&lt;br /&gt;
}}&lt;br /&gt;
|pb={{LSL Constant/List|i_front=[[llGetPrimitiveParams]]([&amp;amp;nbsp;{{#var:omega_const}}&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=vector|r1_name=axis&lt;br /&gt;
|r2_type=float|r2_name=spinrate&lt;br /&gt;
|r3_type=float|r3_name=gain&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||[[llTargetOmega]]|}}&lt;br /&gt;
|events&lt;br /&gt;
|location&lt;br /&gt;
|history=*Introduced in [[Release Notes/Second Life RC BlueSteel/11#11.06.20.233291|Second Life RC BlueSteel 11.06.20.233291]], June 22, 2011&lt;br /&gt;
*Rolled to main server channel the week of 7/11/2011&lt;br /&gt;
|cat1&lt;br /&gt;
|cat2=Effects&lt;br /&gt;
|cat3=Physics&lt;br /&gt;
|cat4=Rotation&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=PRIM_OMEGA&amp;diff=1212747</id>
		<title>PRIM OMEGA</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=PRIM_OMEGA&amp;diff=1212747"/>
		<updated>2022-11-10T20:05:07Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Fix a number of problems with the example and add caveat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{{#if:&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:omega_const|{{LSL Const|PRIM_OMEGA|integer|18|c=Used to {{GetSet|{{{1|}}}|get the object&#039;s llTargetOmega settings|rotate the object at on the given axis at the given rate|/}} }}}}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:caveats|{{#var:caveats}}&lt;br /&gt;
*[[PRIM_OMEGA]] on nonphysical objects, and child prims of physical objects, is only a client side effect; the object or prim will collide as non-moving geometry.&lt;br /&gt;
*[[PRIM_OMEGA]] cannot be used on avatars sitting on the object. It will emit the error message &amp;quot;PRIM_OMEGA disallowed on agent&amp;quot;.&lt;br /&gt;
*If [[PRIM_OMEGA]] does not appear to be working, make sure that that Develop &amp;gt; Network &amp;gt; Velocity Interpolate Objects is enabled on the viewer.}}&lt;br /&gt;
*In the parameters returned by &amp;lt;code&amp;gt;llGetPrimitiveParams([PRIM_OMEGA])&amp;lt;/code&amp;gt;, the vector is normalized, and the spinrate is multiplied by the magnitude of the original vector.&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:p_axis_desc|arbitrary axis to rotate the object around}}&lt;br /&gt;
{{#vardefine:p_spinrate_desc|rate of rotation in radians per second}}&lt;br /&gt;
{{#vardefine:p_gain_desc|also modulates the final spinrate and disables the rotation behavior if zero}}&lt;br /&gt;
&lt;br /&gt;
}}&amp;lt;/onlyinclude&amp;gt;{{#if:&lt;br /&gt;
&lt;br /&gt;
}}{{LSL Constant&lt;br /&gt;
|inject-2={{LSL PrimitiveParam Categorize|Prim}}&lt;br /&gt;
|name=PRIM_OMEGA&lt;br /&gt;
|type=integer&lt;br /&gt;
|value=32&lt;br /&gt;
|desc=Used to make the object spin at the specified axis and rate, or retrieve spin settings. See [[llTargetOmega]] for specification.&lt;br /&gt;
|examples=&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// Set this prim rotating&lt;br /&gt;
llTargetOmega(&amp;lt;1.0,3.0,0.5&amp;gt;, TWO_PI, 1.0);&lt;br /&gt;
&lt;br /&gt;
// Read back this prim&#039;s current target omega&lt;br /&gt;
list current_omega = llGetPrimitiveParams([PRIM_OMEGA]); // returns [axis, spinrate, gain]&lt;br /&gt;
vector axis = llList2Vector(current_omega, 0); // Should be llVecNorm(&amp;lt;1.0,3.0,0.5&amp;gt;)&lt;br /&gt;
float spinrate = llList2Float(current_omega, 1); // Should be TWO_PI*llVecMag(&amp;lt;1.0,3.0,0.5&amp;gt;)&lt;br /&gt;
float gain = llList2Float(current_omega, 2); // Should be 1.0&lt;br /&gt;
&lt;br /&gt;
// Set all child prims rotating&lt;br /&gt;
llSetLinkPrimitiveParamsFast(LINK_ALL_CHILDREN, [PRIM_OMEGA, &amp;lt;1.0,3.0,0.5&amp;gt;, TWO_PI, 1.0]);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Also, can use llSetPrimitiveParams for the root prim.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;// will need two prims linked together for this script.&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // make some sort of rotation angle for the omega...&lt;br /&gt;
        vector rotationAngle = &amp;lt;2.3, 5.5, 9.7&amp;gt; * llTan(85); &lt;br /&gt;
        &lt;br /&gt;
        // rotate the main prim slowly using the same rotataion angle, rate, and gain...&lt;br /&gt;
        llSetPrimitiveParams([ PRIM_OMEGA, rotationAngle * 0.3, 1.0, 1.0 ]);&lt;br /&gt;
        &lt;br /&gt;
        // rotate the link satellite prim separately around its own axis &lt;br /&gt;
        // it will rotate also around the main prim because the main prim is rotating.&lt;br /&gt;
        llSetLinkPrimitiveParams(2, [ PRIM_OMEGA, rotationAngle, 1.0, 1.0 ]);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|constants&lt;br /&gt;
|pa={{LSL Constant/List|i_front=[&amp;amp;#32;{{#var:omega_const}},&amp;amp;#32;|i_end=&amp;amp;nbsp;]&lt;br /&gt;
|text=When used with [[llSetPrimitiveParams]] &amp;amp; [[llSetLinkPrimitiveParams]]&lt;br /&gt;
|i1_type=vector|i1_name=axis&lt;br /&gt;
|i2_type=float|i2_name=spinrate&lt;br /&gt;
|i3_type=float|i3_name=gain&lt;br /&gt;
|toc=llSetPrimitiveParams&lt;br /&gt;
}}&lt;br /&gt;
|pb={{LSL Constant/List|i_front=[[llGetPrimitiveParams]]([&amp;amp;nbsp;{{#var:omega_const}}&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=vector|r1_name=axis&lt;br /&gt;
|r2_type=float|r2_name=spinrate&lt;br /&gt;
|r3_type=float|r3_name=gain&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||[[llTargetOmega]]|}}&lt;br /&gt;
|events&lt;br /&gt;
|location&lt;br /&gt;
|history=*Introduced in [[Release Notes/Second Life RC BlueSteel/11#11.06.20.233291|Second Life RC BlueSteel 11.06.20.233291]], June 22, 2011&lt;br /&gt;
*Rolled to main server channel the week of 7/11/2011&lt;br /&gt;
|cat1&lt;br /&gt;
|cat2=Effects&lt;br /&gt;
|cat3=Physics&lt;br /&gt;
|cat4=Rotation&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=PosJump&amp;diff=1212526</id>
		<title>PosJump</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=PosJump&amp;diff=1212526"/>
		<updated>2022-10-03T07:16:16Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Revert for historic purposes and add a clear note about the replacement&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Tip|This page contains obsolete information and is kept only for historic purposes. The exploit that allowed this method to work was fixed in 2012. Use [[llSetRegionPos]] instead.}}&lt;br /&gt;
&lt;br /&gt;
Here&#039;s an interesting method for bypassing the 10m limitation in Non-Physical movement. &#039;&#039;&#039;Be aware that IT WILL NOT WORK FOREVER, there are plans to fix this bug - for long-term use, rely on [[warpPos]].&#039;&#039;&#039;  Alternatives that offer the same functionality are being considered.  Until there&#039;s an alternative, this bug &#039;&#039;may&#039;&#039; be allowed to persist.  More information [http://jira.secondlife.com/browse/SVC-4089 here.]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A replacement function &#039;&#039;[[llSetRegionPos]]()&#039;&#039; has been released and is now live grid-wide.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;As of August 13th, 2012 there are already reported breakages of this function on some Channels.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
posJump(vector target_pos)&lt;br /&gt;
{&lt;br /&gt;
// An alternative to the warpPos trick without all the overhead.&lt;br /&gt;
// Trickery discovered by Uchi Desmoulins and Gonta Maltz.  More exact value provided by Fake Fitzgerald.&lt;br /&gt;
	llSetLinkPrimitiveParamsFast(!!llGetLinkNumber(), [PRIM_POSITION, &amp;lt;1.304382E+19, 1.304382E+19, 0.0&amp;gt;, PRIM_POSITION, target_pos]);&lt;br /&gt;
}&lt;br /&gt;
//the !!llGetLinkNumber() thing is a little trick to always point to the root regardless of where the script is or whether the linkset got only one or more prims.&lt;br /&gt;
// If you are using a single prim object, you can substitute 0 or LINK_THIS. If it is a multiple prim object, you can substitute LINK_ROOT.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If the target position turns out to be no-entry, your object will go offworld.  So Alias Turbo included a step that sends the object back to its starting position (just in case!) before trying the target position again.  So in the case that the target position is no-entry, it will either move 10m at most, or not at all.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
safe_posJump(vector target_pos)&lt;br /&gt;
{&lt;br /&gt;
// An alternative to the warpPos trick without all the overhead.&lt;br /&gt;
// Trickery discovered by Uchi Desmoulins and Gonta Maltz.  More exact value provided by Fake Fitzgerald.  Safe movement modification provided by Alias Turbo.&lt;br /&gt;
      vector start_pos = llGetPos();&lt;br /&gt;
	llSetLinkPrimitiveParamsFast(!!llGetLinkNumber(), [PRIM_POSITION, &amp;lt;1.304382E+19, 1.304382E+19, 0.0&amp;gt;, PRIM_POSITION, target_pos, PRIM_POSITION, start_pos, PRIM_POSITION, target_pos]);&lt;br /&gt;
}&lt;br /&gt;
//the !!llGetLinkNumber() thing is a little trick to always point to the root regardless of where the script is or whether the linkset got only one or more prims.&lt;br /&gt;
// If you are using a single prim object, you can substitute 0 or LINK_THIS. If it is a multiple prim object, you can substitute LINK_ROOT.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:LlTeleportAgent&amp;diff=1212525</id>
		<title>Talk:LlTeleportAgent</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:LlTeleportAgent&amp;diff=1212525"/>
		<updated>2022-10-03T06:50:44Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: uses&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Alternate version for freaky future-proofness ==&lt;br /&gt;
&lt;br /&gt;
{{LSL_Function|func_id|mode=request|func_sleep=0.1|func_energy=10.0|func=llTeleportAgent|sort=TeleportAgent|p1_type=list|p1_name=parameters||func_desc=[[User:SignpostMarv Martin|SignpostMarv Martin]]&#039;s freaky future-proofed multi-purpose take on [[llTeleportAgent]].&lt;br /&gt;
* TELEPORT_AGENT,(key) id - the key of the Resident you wish to teleport (required, also signals the start of a subset in batch queries- see the second example)&lt;br /&gt;
* TELEPORT_REGION,(string) region - the name of the region you wish to send TELEPORT_AGENT to (if missing, defaults to current region)&lt;br /&gt;
* TELEPORT_POSITION,(vector) position - the destination you wish to send TELEPORT_AGENT to, specified in local co-ordinates (if missing, defaults to &amp;lt;128.0, 128.0,0.0&amp;gt;)&lt;br /&gt;
* TELEPORT_FOCUS,(vector) focus - is intended to focus the avatar&#039;s attention on a location, specified in local co-ordinates (if missing, defaults to TELEPORT_POSITION)&lt;br /&gt;
* TELEPORT_PERMISSION_REQUIRED, (integer) boolean - supply either TRUE or FALSE (defaults to FALSE)&lt;br /&gt;
* TELEPORT_LOGINURI, (string) uri - if specified, restarts the client as if called with &#039;&#039;&#039;-url secondlife://region/x/y/z/ -loginuri TELEPORT_LOGINURI&#039;&#039;&#039; (not required, if missing doesn&#039;t do anything)&lt;br /&gt;
* TELEPORT_VALIDATE_ONLY (integer) boolean - if set to TRUE, the function only returns whether or not the supplied parameters are valid&lt;br /&gt;
|return_text=(integer) success|spec|caveats=* TELEPORT_AGENT must be the script owner or must be on script owner&#039;s land.&lt;br /&gt;
* If TELEPORT_AGENT is not on the script owner&#039;s land, PERMISSION_TELEPORT must be granted and TELEPORT_PERMISSION_REQUIRED is ignored/defaults to TRUE&lt;br /&gt;
* Aside from TELEPORT_AGENT, the order of parameters within a subset does not matter. Only the last TELEPORT_VALIDATE_ONLY in the list is processed|examples=Single-user teleportation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
teleport_to_ahern(key id)&lt;br /&gt;
{&lt;br /&gt;
    llTeleportAgent([TELEPORT_AGENT,id,TELEPORT_REGION,&amp;quot;Ahern&amp;quot;]);&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer touched)&lt;br /&gt;
    {&lt;br /&gt;
        if(llDetectedKey(0) == llGetOwner()) // Not sure of the correct way to handle things on deeded land&lt;br /&gt;
        {&lt;br /&gt;
            teleport_to_ahern(llDetectedKey(0));&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llRequestPermissions(llDetectedKey(0),PERMISSION_TELEPORT);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perms)&lt;br /&gt;
    {&lt;br /&gt;
        if(perms &amp;amp; PERMISSION_TELEPORT)&lt;br /&gt;
        {&lt;br /&gt;
            teleport_to_ahern(llGetPermissionKey());&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0,&amp;quot;Teleportation permissions must be granted.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
Star-Trek style teleportation (works on script owner&#039;s land only):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vector transporter_size = ZERO_VECTOR;&lt;br /&gt;
vector transporter_pos = ZERO_VECTOR;&lt;br /&gt;
key caller = NULL_KEY;&lt;br /&gt;
integer n = 0;&lt;br /&gt;
list away_team = [];&lt;br /&gt;
list calibration = [TELEPORT_REGION,&amp;quot;Ahern&amp;quot;];&lt;br /&gt;
vector destination = &amp;lt;128.0,128.0,0.0&amp;gt;;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        transporter_size = llGetScale();&lt;br /&gt;
        llListen(1,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;Beam me up Scotty&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer channel,string name,key id,string message)&lt;br /&gt;
    {&lt;br /&gt;
        caller = id;&lt;br /&gt;
        llSensor(&amp;quot;&amp;quot;,NULL_KEY,AGENT,transporter.x/2.0,PI_BY_TWO);&lt;br /&gt;
    }&lt;br /&gt;
    sensor(integer sensed)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0,&amp;quot;Energising&amp;quot;);&lt;br /&gt;
        n = 0;&lt;br /&gt;
        while(n &amp;lt; sensed)&lt;br /&gt;
        {&lt;br /&gt;
            away_team = (away_team=[]) + away_team + [TELEPORT_AGENT,llDetectedKey(n)] + calibration + [TELEPORT_POSITION,llDetectedPos(n) - transporter_pos];&lt;br /&gt;
            ++n;&lt;br /&gt;
        }&lt;br /&gt;
        llTeleportAgent(away_team);&lt;br /&gt;
        away_team = [];&lt;br /&gt;
    }&lt;br /&gt;
    no_sensor()&lt;br /&gt;
    {&lt;br /&gt;
        llInstantMessage(caller,&amp;quot;I canee do it Captin&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}}&lt;br /&gt;
&lt;br /&gt;
Just a note, my take on the function returns a bitfield containing any errors in execution.&lt;br /&gt;
* TELEPORT_ERROR_REGION_UNREACHABLE- would be used if the sim is offline, non-existant, teleporting to that region is disabled etc.&lt;br /&gt;
* TELEPORT_ERROR_INVALID_URI- would be used when the login URI is either malformed, blacklisted or not whitelisted at the estate or parcel level&lt;br /&gt;
** If TELEPORT_LOGINURI has been disabled &#039;&#039;entirely&#039;&#039; at the estate or parcel, this is also returned.&lt;br /&gt;
** White/Blacklisting would be useful for Residents with places on multiple grids to prevent griefers from putting a prim over their kiosk to redirect them to a phishing site.&lt;br /&gt;
* TELEPORT_INVALID_AGENT- would be used if the agent is not online, or not in the current sim. Or obviously, if the value passed along with TELEPORT_AGENT wasn&#039;t a valid UUID :-P&lt;br /&gt;
(it&#039;d be nice if someone tweaked the template to have the correct parameters for the return stuffages based on these notes)&lt;br /&gt;
&lt;br /&gt;
I&#039;m thinking that for batch queries, the ordering restrictions should be relaxed a bit to allow for optimisation- e.g. any params specified before the first TELEPORT_AGENT set the defaults for the entire list.&lt;br /&gt;
[[User:SignpostMarv Martin|SignpostMarv Martin]] 19:54, 27 April 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
:LL will never change the parameters of a function as it would break existing script and lead to confusion. Request a new function. -- [[User:Strife Onizuka|Strife Onizuka]] 08:11, 28 April 2007 (PDT)&lt;br /&gt;
::This function doesn&#039;t exist, so that rule doesn&#039;t apply.&lt;br /&gt;
::[[User:SignpostMarv Martin|SignpostMarv Martin]] 08:48, 28 April 2007 (PDT)&lt;br /&gt;
::: Internally, the llTeleportAgent project&#039;s # is SL-13078. --[[User:Torley Linden|Torley Linden]] 14:28, 30 April 2007 (PDT)&lt;br /&gt;
::: OMG I&#039;m sorry for jumping on you I seriously thought there was a function in existence with this name (think it was confusing it with [[llTeleportAgentHome]]). -- [[User:Strife Onizuka|Strife Onizuka]] 14:45, 30 April 2007 (PDT)&lt;br /&gt;
: While a nice idea I think the function as already described is fine, just needs to be actually implemented, you know, before the world ends ^^ &amp;lt;br/&amp;gt;-- &#039;&#039;&#039;[[User:Haravikk_Mistral|Haravikk]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User_talk:Haravikk_Mistral|talk]]|[[Special:Contributions/Haravikk_Mistral|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 11:25, 14 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Was recently implemented ==&lt;br /&gt;
&lt;br /&gt;
The function here (not the freaky one above, the original desired implementation) was recently implemented and seems to be recognised. Albeit disabled? --[[User:Nexii Malthus|&amp;lt;span style=&amp;quot;color: #111; text-shadow:-1px -1px #ddd, 1px 1px #888;&amp;quot;&amp;gt;Nexii Malthus&amp;lt;/span&amp;gt;]] 17:23, 4 November 2011 (PDT)&lt;br /&gt;
:Ah, okay, they are working on it, it is indeed currently limited. --[[User:Nexii Malthus|&amp;lt;span style=&amp;quot;color: #111; text-shadow:-1px -1px #ddd, 1px 1px #888;&amp;quot;&amp;gt;Nexii Malthus&amp;lt;/span&amp;gt;]] 20:54, 4 November 2011 (PDT)&lt;br /&gt;
::Limited in what way? The limitations described on the function&#039;s page are all reasonable, but I dread there being unreasonable limitations that render the function pointless.&amp;lt;br/&amp;gt;-- &#039;&#039;&#039;[[User:Haravikk_Mistral|Haravikk]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User_talk:Haravikk_Mistral|talk]]|[[Special:Contributions/Haravikk_Mistral|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 04:08, 5 November 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Automatic permission grants? ==&lt;br /&gt;
&lt;br /&gt;
Without some kind of automatic permission grants (to landowner and attachments, at least) the only advantage this has over llMapDestination is that it doesn&#039;t require one click, and (as noted below) it&#039;s more limited in other ways. Even for intra-region teleports the existing WarpMove and PosJump hacks are more useful. There were comments by Lindens that such grants were going to be included, but there&#039;s no mention of them on this page. -- [[User:Argent Stonecutter|Argent Stonecutter]] 03:30, 30 May 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
:Without landowner or estate owner waivers it is not very useful. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 08:10, 30 May 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Using this to Rotate Avatars ==&lt;br /&gt;
&lt;br /&gt;
Another often requested feature is the ability to rotate avatars. I&#039;m very curious if teleporting an avatar to it&#039;s current position in the current sim but with a different lookat would effectively rotate it. Teleports often hang or fail when attempting to teleport short distances, so I hope this would work - unless there&#039;s going to be a more formal way to rotate avatars. We don&#039;t have one![[User:Adeon Writer|Adeon Writer]] 18:36, 29 December 2011 (PST)&lt;br /&gt;
: Apparently it can do that, or something very close. It helps to have the minimap on rotate to see this example in action -- When you walk through a Linden Realms portal, you are sent to a spot in the air just above a transparent llVolumeDetect prim. On collision with the prim, you can see that your avatar is spun around to face the workshop on landing. There is still a bit of a fall after this so it&#039;s maybe not strictly a teleport to the same spot, but the rotation part seems to be working OK inside the same region.&lt;br /&gt;
&lt;br /&gt;
: Forgot to add -- It is not clear from the LR implementation if the rotation thing is possible across regions or not. The portals rely on landmarks, so they don&#039;t have enough data to set it on that end. --[[User:Cerise Sorbet|Cerise Sorbet]] 19:56, 29 December 2011 (PST)&lt;br /&gt;
&lt;br /&gt;
::Cool. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 09:36, 31 December 2011 (PST)&lt;br /&gt;
&lt;br /&gt;
== Why Even Bother Implementing this? ==&lt;br /&gt;
&lt;br /&gt;
The currently proposed implementation ([https://wiki.secondlife.com/w/index.php?title=LlTeleportAgent&amp;amp;oldid=1167818 at time of writing]) is a function apparently has ignored every word of the (lengthy) discussion upon the subject. I&#039;m posting to complain that far better proposals have been completely ignored, and wish to strongly request that [[User:Haravikk_Mistral/LlTeleportAgent|this proposed function]] be implemented instead, so that we might actually have a useable function.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take a quick comparison of the current proposal versus the one that was requested years ago:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{Prettytable|style=margin: 0px 0px 10px 1pt;}}&lt;br /&gt;
|-&lt;br /&gt;
! Feature !! [[LlTeleportAgent|Linden Proposal]] !! [[User:Haravikk_Mistral/LlTeleportAgent|Original Proposal]]&lt;br /&gt;
|-&lt;br /&gt;
| Co-ordinates || Uses static landmark requiring landmark creation, cannot be changed dynamically and requires asset retrieval. || Uses region name and co-ordinates as per [[LlMapDestination]], which can be changed dynamically by script.&lt;br /&gt;
|-&lt;br /&gt;
| Permissions || Uses inflexible script permissions system, requiring a dialogue in most common cases. || Allows the viewer to accept/decline teleport requests, allowing any mixture of automatic, dialogue-based or disabled teleport requests. Potentially allowing for different behaviour for objects on owner&#039;s land, friend&#039;s objects etc.&lt;br /&gt;
|-&lt;br /&gt;
| Implementation || Entirely new function with new permissions request and asset retrieval before teleport. || Uses existing [[llMapDestination]] implementation extended with a single bit to specify a teleport request.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And this is me being generous, and the result is pretty damning. There is literally no advantage to the Linden proposal.&lt;br /&gt;
Hell, consider some simple cases:&lt;br /&gt;
&lt;br /&gt;
{| {{Prettytable|style=margin: 0px 0px 10px 1pt;}}&lt;br /&gt;
|-&lt;br /&gt;
! Use-Case !! Description !! [[LlTeleportAgent|Linden Proposal]] !! [[User:Haravikk_Mistral/LlTeleportAgent|Original Proposal]]&lt;br /&gt;
|-&lt;br /&gt;
| Object Relay || By far the simplest system in use today, an object-relay allows an avatar to teleport between tele porters. For example from one on the ground to one in a skybox. || Requires each object in a simple teleport relay to contain a landmark (or have a list of keys) for all the other objects in the relay so that they can be selected as a teleport destination. Customer use-case; place tele porters, create landmark for each one, place set of landmarks into each teleport (excluding the one for the tele porter you&#039;re editing), use tele porters. || Can use messaging or object keys (if local) to dynamically maintain a list of active teleport relay points, and use this information to determine where to teleport the avatar. This allows a relay to be setup by anyone simply by placing the objects, and can update dynamically if the relay is changed. Customer use-case; place tele porter objects, use tele porters.&lt;br /&gt;
|-&lt;br /&gt;
| Teleport Broker || Commonly used by merchant stalls to direct avatars to their main store, but also useful for sending people to popular clubs or other useful locations. || Requires each broker to contain a landmark (or have a list of keys) for each location that a user might wish to teleport to. If a location is to be added then a new landmark must be created, so too if a destination is relocated, requiring landmarks to be replaced. || Can simply grab data from a messaging service (such as a website), which can be trivially updated without requiring the creation of a landmark. ||&lt;br /&gt;
|-&lt;br /&gt;
| Infinite corridor || More interesting case, but a simple corridor that appears to go on forever using some visual trickery. When the avatar reaches a certain &amp;quot;end&amp;quot; point they are teleported invisibly back to the &amp;quot;start&amp;quot; to continue onwards. || Requires creation of landmarks for the start and end points, such that if the corridor is moved it will stop working. If more than one avatar is using the corridor then they will both be given permissions dialogues every time the corridor loops. || End points of the corridor can dynamically link to one another, allowing the corridor to be relocated at will. Teleportation is seamless (if in same region) and requires no dialogue unless viewer uses more restrictive than normal settings.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There is literally no advantage to the Linden proposed system, other than the fact it doesn&#039;t require them to read or acknowledge the feature that was &#039;&#039;&#039;actually&#039;&#039;&#039; requested by their users.&lt;br /&gt;
&amp;lt;br/&amp;gt;-- &#039;&#039;&#039;[[User:Haravikk_Mistral|Haravikk]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User_talk:Haravikk_Mistral|talk]]|[[Special:Contributions/Haravikk_Mistral|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 03:25, 30 May 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
:The asset retrieval aspect is covered by [[llTeleportAgentGlobalCoords]]. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 08:10, 30 May 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
:Honestly I don&#039;t like that they have mixed both the intra-region and the landmark teleporter into the same function. It makes the documentation harder to write.&lt;br /&gt;
&lt;br /&gt;
::Ack, okay so I&#039;ve over-reacted a bit having missed the other function. Even so, I don&#039;t see any need to have a landmark based function, and the coords function is still pretty unwieldy; if you need to use an llRequest* function to fetch necessary data, then there&#039;s something very wrong with the implementation! The permissions issue is still backwards; receiving of teleports is already in the viewer from other users, there&#039;s simply no need for server-side permissions to handle teleports, as the viewer can easily decide whether to automatically allow or deny a request, and it gives users the control they desire. The new experience permissions will help but there&#039;s just no need for them in this case, plus in the viewer it&#039;d be possible to easily ignore requests that come too soon after the last. I just don&#039;t like anything about this implementation when we had a clear, and already exhaustively discussed solution proposed.&amp;lt;br/&amp;gt;-- &#039;&#039;&#039;[[User:Haravikk_Mistral|Haravikk]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User_talk:Haravikk_Mistral|talk]]|[[Special:Contributions/Haravikk_Mistral|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 08:36, 30 May 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
:::I think the permission is so you can grant them to an attachment so it can TP you (send you back to town when diablo smites you sort of thing). It&#039;s a good solution for Linden Realms, not so good for the rest of us. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 15:43, 30 May 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
==Only works for the owner?==&lt;br /&gt;
Where does the information that this only works for the object&#039;s owner come from?  That appears to be new restriction, and one that makes the function pretty pointless.  [[User:Innula Zenovka|Innula Zenovka]] 17:08, 17 July 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
:It is a [https://wiki.secondlife.com/w/index.php?title=LlTeleportAgent&amp;amp;diff=1170536&amp;amp;oldid=1170491 new restriction], it came after the botched roll-out. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 11:14, 18 July 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
::Does this not effectively render the function largely useless, or is it simply to prevent abuse while problems are fixed? i.e - is it restricted to the object owner only for testing purposes? &amp;lt;br/&amp;gt;-- &#039;&#039;&#039;[[User:Haravikk_Mistral|Haravikk]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User_talk:Haravikk_Mistral|talk]]|[[Special:Contributions/Haravikk_Mistral|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 12:47, 18 July 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
:::I&#039;m not in the loop, I just aggregate. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 20:14, 18 July 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
The current description of functionality in the caveats is wrong, but I can&#039;t for the life of me find the text to edit it. Says that If landmark is not an empty string and... &lt;br /&gt;
landmark is missing from the prim&#039;s inventory or it is not a landmark then it fails silently. That was true, but with the implementation of https://jira.secondlife.com/browse/SCR-342 It now gives a script error: &amp;quot;Teleport failed: landmark name provided but assets is missing or invalid.&amp;quot;  If someone can figure out how to edit that comment, please do so.&lt;br /&gt;
[[User:Darien Caldwell|Darien Caldwell]] 16:39, 18 July 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
:It&#039;s a template flag. I&#039;ve disabled it. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 20:14, 18 July 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Throttle ==&lt;br /&gt;
&lt;br /&gt;
There appears to be a throttle on this function similar to playing sounds. Calling it 2 times in a few seconds yields:&lt;br /&gt;
&amp;quot;Too many llTeleportAgent requests.  Throttled until average falls.&amp;quot;&lt;br /&gt;
Does anyone know the specifics?&lt;br /&gt;
&lt;br /&gt;
--[[User:Gregory Maurer|--Gregory Maurer]] 19:20, 31 July 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
:I don&#039;t see any Jira&#039;s mentioning a [https://jira.secondlife.com/secure/IssueNavigator.jspa?reset=true&amp;amp;jqlQuery=%28summary+%7E+%22llTeleportAgent%22+OR+description+%7E+%22llTeleportAgent%22%29+and+%28summary+%7E+%22throttle%22+OR+description+%7E+%22throttle%22+or+comment+%7E+%22throttle%22%29++ORDER+BY+votes+DESC%2C+updated+DESC throttle for llTeleportAgent] (other than unacknowledged feature suggestions). Maybe open a new Jira for it? -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 10:55, 1 August 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Caveats:  BUG 4062(or equivalent) Fixed? ==&lt;br /&gt;
&lt;br /&gt;
This bug has been closed and reopened under different numbers several times, I think, but -- at least as I understand it -- it was finally fixed in [http://wiki.secondlife.com/wiki/Release_Notes/Second_Life_RC_Magnum/14#14.04.16.289178 RC Magnum 14.04.16.289178].   Presumably that was rolled out for the whole grid shortly thereafter, but I&#039;m afraid I haven&#039;t checked. [[User:Innula Zenovka|Innula Zenovka]] 08:51, 23 June 2014 (PDT)&lt;br /&gt;
:It was fixed as SCR-382 which became {{Jira|BUG-5533}}. There are no new JIRA reports of dead scripts after teleport since then. --[[User:ObviousAltIsObvious Resident|ObviousAltIsObvious Resident]] 09:32, 23 June 2014 (PDT)&lt;br /&gt;
&lt;br /&gt;
== These days, isn&#039;t it easier to use secondlife:///app/teleport/region/x/y/z ? ==&lt;br /&gt;
&lt;br /&gt;
Even some [[Teleporter Anywhere|scripts here on the LSL Library]] just spew out {{code|secondlife:///app/teleport/region/x/y/z}} and let the user click on it; as of 2022, you even get a chance to directly teleport to the link &#039;&#039;or&#039;&#039; see it on the World Map first.&lt;br /&gt;
&lt;br /&gt;
Aye, I know, it&#039;s incredibly clunky, but almost as clunky as asking permissions to the object owner before doing a teleport (which, taking into account that the owner will be the &#039;&#039;only&#039;&#039; person to be able to use the teleporter, really makes absolutely no sense at all)...&lt;br /&gt;
&lt;br /&gt;
{{Tick}} I&#039;d vote to mark this function as well as [[llMapDestination]] as deprecated and obsolete, and get rid of them!&lt;br /&gt;
&lt;br /&gt;
— [[User:Gwyneth Llewelyn|Gwyneth Llewelyn]] ([[User talk:Gwyneth Llewelyn|talk]]) 13:50, 1 October 2022 (PDT)&lt;br /&gt;
&lt;br /&gt;
:Just because you can&#039;t figure out uses, doesn&#039;t mean there aren&#039;t. Remember that a script holds the permissions indefinitely once granted. This function allows you, for example, to make a destination HUD with pictures and whatnot; the HUD would ask for permissions only once. We&#039;re also using it (also with a HUD that only asks for permissions once) to simulate entering or exiting a cave where there&#039;s no physical room for one; the user is teleported to the entrance without clicking anywhere, giving a kind of seamless experience. Chat links are no substitutive for that usage at all. --[[User:Sei Lisa|Sei Lisa]] ([[User talk:Sei Lisa|talk]]) 23:50, 2 October 2022 (PDT)&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Template:LSL_Function/give&amp;diff=1212353</id>
		<title>Template:LSL Function/give</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Template:LSL_Function/give&amp;diff=1212353"/>
		<updated>2022-09-24T18:14:16Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Attempt to fix llGiveInventory to not say that it can give to groups&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{LSL Injection Test}}{{#if:&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:target-type|~{{#expr:{{#if:{{{avatar|}}}|1|0}}+{{#if:{{{prim|}}}{{{object|}}}|2|0}}+{{#if:{{{link|}}}|4|0}}}}}}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:pcaveats|{{#var:caveats}}}}&lt;br /&gt;
{{#vardefine:caveats}}&lt;br /&gt;
&lt;br /&gt;
{{LSL Function/{{#switch:{{#var:target-type}}|~1=avatar|~2=prim|~4=link|uuid}}|group=|object={{{object|}}}|sim={{{sim|}}}|{{{1|}}}|}}&lt;br /&gt;
&lt;br /&gt;
{{LSL Function/inventory|{{{2|}}}|type={{{type|}}}|uuid={{{uuid|}}}|full={{{full|}}}|insert={{{insert|}}}|}}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:caveats|{{#var:pcaveats}}{{#ifeq:{{#var:target-type}}|~4||&lt;br /&gt;
* If &#039;&#039;&#039;{{LSL Param|{{{1}}}}}&#039;&#039;&#039; is {{#switch:{{#var:target-type}}|~1=not the owner|~2=not owned by the same person|not the owner nor shares the same owner}}, {{#ifeq:{{{uuid|}}}|true|&#039;&#039;&#039;{{LSL Param|{{{2}}}}}&#039;&#039;&#039; is not a [[UUID]]}} and &#039;&#039;&#039;{{LSL Param|{{{2}}}}}&#039;&#039;&#039; does not have transfer permissions, an error is shouted on {{#var:DEBUG_CHANNEL}}.&lt;br /&gt;
{{#if:{{{copyok|}}}||&lt;br /&gt;
* If &#039;&#039;&#039;{{LSL Param|{{{2}}}}}&#039;&#039;&#039; {{#if:{{{full|}}}|is not {{HoverLink|:Category:LSL_Permissions/Asset|copy, mod and transfer|full permissions}}|permissions do not allow copy}}, the transfer fails and an error is shouted on {{#var:DEBUG_CHANNEL}}.{{#switch:{{#var:target-type}}&lt;br /&gt;
|~1=|* If &#039;&#039;&#039;{{LSL Param|{{{1}}}}}&#039;&#039;&#039; {{#ifeq:{{#var:target-type}}|~2||is a prim that}} is not in the same region an error is shouted on {{#var:DEBUG_CHANNEL}}.}}}}}}&lt;br /&gt;
{{#switch:{{{type|}}}|script|=* When scripts are copied or moved between inventories, their state does not survive the transfer. Memory, event queue and execution position are all discarded.|#default=}}&lt;br /&gt;
{{#var:caveats}}}}&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:pcaveats}}&lt;br /&gt;
&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Multi-lang}}&lt;br /&gt;
{{UpdateLink}}&lt;br /&gt;
{{#vardefine:caveats}}{{#vardefine:p_target_desc}}{{#vardefine:p_target_hover}}{{#vardefine:p_item_desc}}{{#vardefine:p_item_hover}}&lt;br /&gt;
{| {{Prettytable}} {{#vardefine:caveats}}&lt;br /&gt;
|+&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt;{{FULLPAGENAMEE}}&amp;lt;nowiki&amp;gt;|target|item|type=sound|uuid=true}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;{{{{FULLPAGENAMEE}}|target|item|type=sound|uuid=true}}&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
! #var&lt;br /&gt;
! value&lt;br /&gt;
|-&lt;br /&gt;
{{VarPair|caveats}}&lt;br /&gt;
|-&lt;br /&gt;
{{VarPair|p_target_desc}}&lt;br /&gt;
|-&lt;br /&gt;
{{VarPair|p_target_hover}}&lt;br /&gt;
|-&lt;br /&gt;
{{VarPair|p_item_desc}}&lt;br /&gt;
|-&lt;br /&gt;
{{VarPair|p_item_hover}}&lt;br /&gt;
|}&lt;br /&gt;
{{#vardefine:caveats}}{{#vardefine:p_target_desc}}{{#vardefine:p_target_hover}}{{#vardefine:p_item_desc}}{{#vardefine:p_item_hover}}&lt;br /&gt;
{| {{Prettytable}} {{#vardefine:caveats}}&lt;br /&gt;
|+&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt;{{FULLPAGENAMEE}}&amp;lt;nowiki&amp;gt;|target|item|type=sound|uuid=false}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;{{{{FULLPAGENAMEE}}|target|item|type=sound|uuid=false}}&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
! #var&lt;br /&gt;
! value&lt;br /&gt;
|-&lt;br /&gt;
{{VarPair|caveats}}&lt;br /&gt;
|-&lt;br /&gt;
{{VarPair|p_target_desc}}&lt;br /&gt;
|-&lt;br /&gt;
{{VarPair|p_target_hover}}&lt;br /&gt;
|-&lt;br /&gt;
{{VarPair|p_item_desc}}&lt;br /&gt;
|-&lt;br /&gt;
{{VarPair|p_item_hover}}&lt;br /&gt;
|}&lt;br /&gt;
{{#vardefine:caveats}}{{#vardefine:p_target_desc}}{{#vardefine:p_target_hover}}{{#vardefine:p_item_desc}}{{#vardefine:p_item_hover}}&lt;br /&gt;
{| {{Prettytable}} {{#vardefine:caveats}}&lt;br /&gt;
|+&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt;{{FULLPAGENAMEE}}&amp;lt;nowiki&amp;gt;|target|item|type=script|uuid=true|link=*}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;{{{{FULLPAGENAMEE}}|target|item|type=script|uuid=true|link=*}}&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
! #var&lt;br /&gt;
! value&lt;br /&gt;
|-&lt;br /&gt;
{{VarPair|caveats}}&lt;br /&gt;
|-&lt;br /&gt;
{{VarPair|p_target_desc}}&lt;br /&gt;
|-&lt;br /&gt;
{{VarPair|p_target_hover}}&lt;br /&gt;
|-&lt;br /&gt;
{{VarPair|p_item_desc}}&lt;br /&gt;
|-&lt;br /&gt;
{{VarPair|p_item_hover}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Listen&amp;diff=1212347</id>
		<title>Listen</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Listen&amp;diff=1212347"/>
		<updated>2022-09-24T18:02:06Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Groups can&amp;#039;t be listened to either&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Event|event_id=12|event_delay&lt;br /&gt;
|inject-2={{LSL Function/uuid|id|group=}}{{Issues/SVC-92}}&lt;br /&gt;
|event=listen&lt;br /&gt;
|p1_type=integer|p1_name=channel|p1_desc=channel that the message appeared on.&lt;br /&gt;
|p2_type=string|p2_name=name|p2_desc=prim name or avatar {{LSLGC|Legacy Name}}&lt;br /&gt;
|p3_type=key|p3_name=id|p3_desc&lt;br /&gt;
|p4_type=string|p4_name=message|p4_desc=text spoken&lt;br /&gt;
|event_desc=Triggered by chat, use [[llListen]] to enable and filter&lt;br /&gt;
|constants={{LSL Constants/Chat}}&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=*On [[state]] change or [[llResetScript|script reset]] all listens are [[llListenRemove|closed]] automatically.&lt;br /&gt;
*When an object changes owner any listen registered with [[llGetOwner]] will not automatically update itself until the script is reset. The scripter can catch this scenario per the example below.&lt;br /&gt;
*If a message satisfies the filters of multiple [[llListen]]s registered by the script, only one event will be raised.&lt;br /&gt;
*A prim cannot hear/listen to chat it generates.&lt;br /&gt;
*The location of the listen is not at the listening prim&#039;s location but at the root prim&#039;s location. This is to deter people using child prims for spying over parcel boundaries. {{LSLGC|Chat|Chat generating functions}} on the other hand generate chat at the calling prim&#039;s location (and not at the root prim&#039;s location).&lt;br /&gt;
*The above is not true for chat generated by avatars sitting on the same object as the listening prim.&lt;br /&gt;
|examples=&lt;br /&gt;
{{LSL Tip|Please make sure that you close open listeners where possible. You&#039;ll make the Second Life experience so much better when paying attention to details here.}}&lt;br /&gt;
Trivial example to listen to any chat from the object owner and respond once. To reduce lag and avoid spamming surrounding users, it is vastly preferable to listen on channels other than 0 and to trigger the listen event by chatting on an alternative channel such as &#039;/5 hello&#039;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// says beep to owner the first time owner says something in main chat;&lt;br /&gt;
integer listen_handle;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {   //Registers the listen to the owner of the object at the moment of the call. This does not automatically update when the owner changes.&lt;br /&gt;
        // Change 0 to another positive number to listen for &#039;/5 hello&#039; style of chat.&lt;br /&gt;
        listen_handle = llListen(0, &amp;quot;&amp;quot;, llGetOwner(), &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    listen( integer channel, string name, key id, string message )&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(&amp;quot;beep&amp;quot;);&lt;br /&gt;
        // Stop listening until script is reset&lt;br /&gt;
        llListenRemove(listen_handle);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    changed(integer mask)&lt;br /&gt;
    {   //Triggered when the object containing this script changes owner.&lt;br /&gt;
        if(mask &amp;amp; CHANGED_OWNER)&lt;br /&gt;
        {&lt;br /&gt;
            llResetScript();   // This will ensure the script listens to the new owner, and doesn&#039;t continue listening to the creator.&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_header&lt;br /&gt;
|also_events&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llListen]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llListenControl]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llListenRemove]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llDialog]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llOwnerSay]]|Sends chat to the owner only to avoid spamming the [[PUBLIC_CHANNEL]]}}&lt;br /&gt;
{{LSL DefineRow||[[llWhisper]]|Sends chat limited to 10 meters}}&lt;br /&gt;
{{LSL DefineRow||[[llSay]]|Sends chat limited to 20 meters}}&lt;br /&gt;
{{LSL DefineRow||[[llShout]]|Sends chat limited to 100 meters}}&lt;br /&gt;
{{LSL DefineRow||[[llRegionSay]]|Sends chat limited to region}}&lt;br /&gt;
|also_articles&lt;br /&gt;
|also_footer&lt;br /&gt;
|notes&lt;br /&gt;
|mode&lt;br /&gt;
|deprecated&lt;br /&gt;
|cat1=Communications&lt;br /&gt;
|cat2=Chat&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetBoundingBox&amp;diff=1212346</id>
		<title>LlGetBoundingBox</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetBoundingBox&amp;diff=1212346"/>
		<updated>2022-09-24T17:53:53Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: What is the bounding box of a group? :)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{LSL_Function/uuid|object|sim=*|group=}}&lt;br /&gt;
|func_id=277|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llGetBoundingBox|return_type=list&lt;br /&gt;
|p1_type=key|p1_name=object&lt;br /&gt;
|func_footnote=The bounding box is for the entire link set, not just the requested prim.&amp;lt;br/&amp;gt;Returns an empty list (&amp;lt;code&amp;gt;[]&amp;lt;/code&amp;gt;) if {{LSLP|object}} is not found.&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=that is the bounding box of {{LSLP|object}} relative to its root prim, in [[Viewer_coordinate_frames#local|local coordinates]].&amp;lt;br/&amp;gt;Format: &amp;lt;code&amp;gt;[ (vector) {{HoverText|min_corner|vector min_corner;}}, (vector) {{HoverText|max_corner|vector max_corner;}} ]&amp;lt;/code&amp;gt;&lt;br /&gt;
|spec=&lt;br /&gt;
The physical representation of an object is made up of the shape of the prims and avatars seated upon it. The bounding box is the smallest possible cuboid which can contain the physical representation of the object and have its faces aligned to the object&#039;s local axes.&lt;br /&gt;
|caveats=&lt;br /&gt;
* Regardless if {{LSLP|object}} is a non-root prim, the bounding box of the object is returned.  This also applies if {{LSLP|object}} is an agent sitting on an object - the bounding box of the sat-upon object (including the agent&#039;s shape) is returned.&lt;br /&gt;
* Attachments have no bounding boxes of their own (as they have no physical interaction{{Footnote|[[Phantom]] and [[VolumeDetect]] do have physics interactions, which is why they still have bounding boxes.|Phantom and VolumeDetect do have physics interactions, which is why they still have bounding boxes.}}), instead the bounding box of the avatar is returned.&lt;br /&gt;
&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;default//An avatar bounding box ruler thingy&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetStatus(STATUS_PHANTOM, TRUE);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        key target = llDetectedKey(0);&lt;br /&gt;
        list box = llGetBoundingBox(target);&lt;br /&gt;
        vector center = llDetectedPos(0) + (llList2Vector(box, 0) + llList2Vector(box, 1)) * 0.5;&lt;br /&gt;
        vector size = llList2Vector(box, 1) - llList2Vector(box, 0);&lt;br /&gt;
        llSetPrimitiveParams([PRIM_POSITION, center, PRIM_SIZE, size]);&lt;br /&gt;
        llSetText(&amp;quot;Name: &amp;quot; + llDetectedName(0) + &amp;quot;, UUID: &amp;quot; + (string)target + &lt;br /&gt;
                &amp;quot;\nBounding Box Size: &amp;quot; + (string)size, &amp;lt;1.0, 1.0, 1.0&amp;gt;, 1.0);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// Enclose a named object in the tightest possible box&lt;br /&gt;
// that is aligned with the object&#039;s root prim axes.&lt;br /&gt;
// Drop this script in a box near the object to enclose&lt;br /&gt;
// (must be in a 10m range)&lt;br /&gt;
&lt;br /&gt;
string ObjectNameToEnclose = &amp;quot;SearchMe&amp;quot;;&lt;br /&gt;
key UUID;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSensor(ObjectNameToEnclose, &amp;quot;&amp;quot;, ACTIVE | PASSIVE, 10, PI);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    sensor(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        UUID = llDetectedKey(0);&lt;br /&gt;
        llSetTimerEvent(1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        list info = llGetObjectDetails(UUID, [OBJECT_POS, OBJECT_ROT]) + llGetBoundingBox(UUID);&lt;br /&gt;
        vector pos = llList2Vector(info, 0);&lt;br /&gt;
        rotation rot = llList2Rot(info, 1);&lt;br /&gt;
        vector corner1 = llList2Vector(info, 2) * rot + pos;&lt;br /&gt;
        vector corner2 = llList2Vector(info, 3) * rot + pos;&lt;br /&gt;
        vector size = llList2Vector(info, 3) - llList2Vector(info, 2);&lt;br /&gt;
&lt;br /&gt;
        llSetPos((corner1 + corner2) * 0.5); // Set position to the midpoint (average) of the corners&lt;br /&gt;
        llSetRot(rot);&lt;br /&gt;
        llSetScale(size);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|helpers=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
//(bool) isInPrim - determines whether a given vector position in the region is within the borders of a cuboid,&lt;br /&gt;
// respecting the cuboid&#039;s rotation.&lt;br /&gt;
integer isInPrim(vector vPos)&lt;br /&gt;
{&lt;br /&gt;
    list bb = llGetBoundingBox(llGetKey());&lt;br /&gt;
    vector min = llList2Vector(bb, 0);&lt;br /&gt;
    vector max = llList2Vector(bb, 1);&lt;br /&gt;
    vPos = (vPos - llGetPos()) / llGetRot();&lt;br /&gt;
    float fTemp;&lt;br /&gt;
    if (min.x &amp;gt; max.x)&lt;br /&gt;
    {&lt;br /&gt;
        fTemp = max.x;&lt;br /&gt;
        max.x = min.x;&lt;br /&gt;
        min.x = fTemp;&lt;br /&gt;
    }&lt;br /&gt;
    if (min.y &amp;gt; max.y)&lt;br /&gt;
    {&lt;br /&gt;
        fTemp = max.y;&lt;br /&gt;
        max.y = min.y;&lt;br /&gt;
        min.y = fTemp;&lt;br /&gt;
    }&lt;br /&gt;
    if (min.z &amp;gt; max.z)&lt;br /&gt;
    {&lt;br /&gt;
        fTemp = max.z;&lt;br /&gt;
        max.z = min.z;&lt;br /&gt;
        min.z = fTemp;&lt;br /&gt;
    }&lt;br /&gt;
    if (vPos.x &amp;lt; min.x)&lt;br /&gt;
    {&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    if (vPos.y &amp;lt; min.y)&lt;br /&gt;
    {&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    if (vPos.z &amp;lt; min.z)&lt;br /&gt;
    {&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    if (vPos.x &amp;gt; max.x)&lt;br /&gt;
    {&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    if (vPos.y &amp;gt; max.y)&lt;br /&gt;
    {&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    if (vPos.z &amp;gt; max.z)&lt;br /&gt;
    {&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    return TRUE;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llGetAgentSize]]|}}&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;
===== Sitting in 1.36 =====&lt;br /&gt;
Avatars historically when they sit upon an object have been treated as part of the object, like a prim, even being assigned a link number (which can be used to detect and manipulate them to some extent). Unrelated to this, requesting the bounding box for a child prim of an object would return the bounding box for the entire object (unless it was an attachment, which point it would return the bounding box for the avatar). The first is something of a misfeature, the latter is an honest to goodness feature; the combination of these two lead to something interesting: Prior to 1.36 requesting the bounding box of an attachment while seated returned the bounding box for the object sat upon. It got reported as a bug {{JIRA|SVC-1174}}, and the behavior was changed in 1.36. The bounding box for the object sat upon is unchanged by 1.36, the avatar still counts. However when the bounding box for the seated avatar is requested it does not fall through to the object being sat upon.&lt;br /&gt;
|cat1=Physics&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlKey2Name&amp;diff=1212345</id>
		<title>LlKey2Name</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlKey2Name&amp;diff=1212345"/>
		<updated>2022-09-24T17:52:28Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Does not accept group UUIDs; remove caveat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{Issues/SVC-215}}{{Issues/SVC-4170}}{{Issues/SVC-3935}}{{LSL_Function/uuid|id|sim=*|group=}}&lt;br /&gt;
|func_id=210|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|sort=Key2Name|func=llKey2Name&lt;br /&gt;
|return_type=string|p1_type=key|p1_name=id&lt;br /&gt;
|func_footnote={{LSLP|id}} must specify a valid rezzed prim or avatar key, present in or otherwise known to the sim in which the script is running, otherwise an empty string is returned. In the case of an avatar, this function will still return a valid name if the avatar is a child agent of the sim (i.e., in an adjacent sim, but presently able to see into the one the script is in), or for a short period after the avatar leaves the sim (specifically, when the client completely disconnects from the sim, either as a main or child agent).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Keys of inventory items will not work; in the case of these, use [[llGetInventoryName]] instead.&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=that is the {{LSLGC|Avatar/Name|legacy name}} of the prim or avatar specified by {{LSLP|id}}.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=* It is difficult to tell the difference between a prim that has a name that is an empty string and a prim that is not in the sim, or because an invalid key was specified. Use [[llGetObjectDetails]] to avoid this problem.&lt;br /&gt;
* To get around the &amp;quot;avatar must be present&amp;quot; limitation, you can use the [[llRequestAgentData]] function and the [[dataserver]] event to obtain the avatar&#039;s name from a key.&lt;br /&gt;
* The opposite function ([[llName2Key]]) can be used to find the user key associated with an avatar in the same region. To find the user key of an avatar anywhere on the grid, use [[llRequestUserKey]], which triggers a [[dataserver]] event.&lt;br /&gt;
* If an avatar is &amp;quot;ghosted&amp;quot; (which occasionally happens due to a longstanding server bug), an empty string is returned even though the avatar is seemingly present and shows up in [[llSensor]] and the [[Mini-Map]].  This fact can be used as the basis of a [[Ghost Detector]] script.&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// Best viewed in Chat History (ctrl-h)&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    collision_start(integer num_detected)&lt;br /&gt;
    {&lt;br /&gt;
        key id = llDetectedKey(0);&lt;br /&gt;
        string name = llKey2Name(id);&lt;br /&gt;
&lt;br /&gt;
        string detectedName = llDetectedName(0);&lt;br /&gt;
&lt;br /&gt;
        llSay(0, &amp;quot;llKey2Name: &amp;quot; + name&lt;br /&gt;
            + &amp;quot;\nllDetectedName: &amp;quot; + detectedName);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer num_detected)&lt;br /&gt;
    {&lt;br /&gt;
        key id = llDetectedKey(0);&lt;br /&gt;
        string name = llKey2Name(id);&lt;br /&gt;
&lt;br /&gt;
        string detectedName = llDetectedName(0);&lt;br /&gt;
&lt;br /&gt;
        llSay(0, &amp;quot;llKey2Name: &amp;quot; + name&lt;br /&gt;
            + &amp;quot;\nllDetectedName: &amp;quot; + detectedName);&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||[[llGetUsername]]}}&lt;br /&gt;
{{LSL DefineRow||[[llGetDisplayName]]}}&lt;br /&gt;
{{LSL DefineRow||[[llGetObjectDetails]]}}&lt;br /&gt;
{{LSL DefineRow||[[llRequestAgentData]]|Uses the [[dataserver]] to request avatar information}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles=&lt;br /&gt;
{{LSL DefineRow||[[Prim Attribute Overloading]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|notes=&#039;&#039;&#039;World Wide Web Consortium&#039;&#039;&#039;&lt;br /&gt;
*[[N2K]] - Independent of databases or bots, this uses the [http://cgi.w3.org/cgi-bin/html2txt W3C html2text] to convert the viewer search to text and extract the key from Second Life&#039;s own services.&lt;br /&gt;
&#039;&#039;&#039;Active Name2Key Databases:&#039;&#039;&#039;&lt;br /&gt;
*[http://w-hat.com/name2key W-Hat name2key] (last names replaced with the &#039;&#039;Resident&#039;&#039; word for the {{LSLGC|Username|Usernames}})&lt;br /&gt;
*[http://kdc.ethernia.net/sys/name2key.php KDC name2key]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Dead Name2Key Databases:&#039;&#039;&#039;&lt;br /&gt;
*[http://kubwa.net/index.php?cmd=name2key Kubwa name2key] (Bot based name2key Database; Supports: {{LSLGC|Legacy Name|Legacy}} and {{LSLGC|Username}} formats; Shows related names; SSL support.) &amp;lt;font color=red&amp;gt;(Appears to be gone as of Apr 2013 [Reports Error 404])&amp;lt;/font&amp;gt;&lt;br /&gt;
*&amp;lt;s&amp;gt;http://wiki.apez.biz/Development (web-service API functions getAvatarKey and getAvatarName)&amp;lt;/s&amp;gt; &amp;lt;font color=red&amp;gt;(Apez seems to be gone ? - May 2011)&amp;lt;/font&amp;gt;&lt;br /&gt;
*&amp;lt;s&amp;gt;http://www.libsecondlife.org/protocol/index.php/Name2key&amp;lt;/s&amp;gt;&amp;lt;font color=red&amp;gt;(Appears to be gone as of Apr 2008, but search for name2key on that site for more information)&amp;lt;/font&amp;gt;&lt;br /&gt;
*&amp;lt;s&amp;gt;http://www.ulrikasheim.org/tools/name2key.html&amp;lt;/s&amp;gt;&amp;lt;font color=red&amp;gt;(Appears to be gone as of Apr 2008)&amp;lt;/font&amp;gt;&lt;br /&gt;
*&amp;lt;s&amp;gt;[http://www.db4mv.info DB4MV name2key] (Name2Key Database for Avatars ({{LSLGC|Legacy Name|Legacy Names}},{{LSLGC|Username|Usernames}}, and {{LSLGC|Display Name|Display Names}}, GroupNames and Keys, LSL API)&amp;lt;/s&amp;gt;&amp;lt;font color=red&amp;gt;(Currently listed as non-existant by host)&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Name2Key Libraries:&#039;&#039;&#039;&lt;br /&gt;
*[[Name2Key_in_LSL]]&lt;br /&gt;
*[[User:Ugleh_Ulrik/Name2Key|Ugleh Ulrik&#039;s Name2Key PHP script]]&lt;br /&gt;
*[[Failsafename2key|Failsafe name2key script]]&lt;br /&gt;
|cat1=Avatar&lt;br /&gt;
|cat2=Prim&lt;br /&gt;
|cat3=Key&lt;br /&gt;
|cat4=Avatar/Name&lt;br /&gt;
|cat5=Legacy Name&lt;br /&gt;
|haiku={{Haiku|Numbers in machines,|Faceless, inhuman, sterile.|Bleak identities.}}&lt;br /&gt;
|history={{LSL Added|0.4.0|remote=http://secondlife.wikia.com/wiki/Version_0.4.0#Scripting}} &lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlListen&amp;diff=1212341</id>
		<title>LlListen</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlListen&amp;diff=1212341"/>
		<updated>2022-09-24T17:47:13Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: llListen does not apply to groups either&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{LSL_Function/uuid|id|pd=filter for specific|group=}}{{LSL Function/chat|channel|msg|input=*|pd=filter for specific}}{{Issues/SVC-3170}}{{Issues/SVC-92}}{{Issues/BUG-3291}}&lt;br /&gt;
|func=llListen&lt;br /&gt;
|sort=Listen&lt;br /&gt;
|func_id=25|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|return_type=integer&lt;br /&gt;
|return_subtype=handle&lt;br /&gt;
|return_text=that can be used to [[llListenControl|deactivate]] or [[llListenRemove|remove]] the listen.&lt;br /&gt;
|p1_type=integer|p1_name=channel|p1_desc=&amp;amp;#32;(-2147483648 through 2147483647)|p1_hover=&amp;amp;#32;(-2147483648 through 2147483647) &lt;br /&gt;
|p2_type=string|p2_name=name|p2_desc=filter for specific prim name or avatar {{LSLGC|Avatar/Name|legacy name}}&lt;br /&gt;
|p2_hover=filter for specific prim name or avatar legacy name&lt;br /&gt;
|p3_type=key|p3_name=id&lt;br /&gt;
|p4_type=string|p4_name=msg&lt;br /&gt;
|func_desc=Sets a [http://foldoc.org/index.cgi?query=handle handle] for {{LSLP|msg}} on {{LSLP|channel}} from {{LSLP|name}} and {{LSLP|id}}.&lt;br /&gt;
|func_footnote=If {{LSLP|msg}}, {{LSLP|name}} or {{LSLP|id}} are blank (i.e. &amp;lt;code&amp;gt;&amp;quot;&amp;quot;&amp;lt;/code&amp;gt;) they are not used to filter incoming messages.&lt;br /&gt;
If {{LSLP|id}} is an invalid key or assigned the value [[NULL_KEY]], it is considered blank as well.&amp;lt;br/&amp;gt;&lt;br /&gt;
|spec=For the [[listen]] [[event]] to be triggered it must first match the criteria set forth by the filters; only when all the criteria have been met is a listen event generated. First the message must have been transmitted on {{LSLP|channel}}. If {{LSLP|id}} is both a [[key#valid|valid]] key and not a [[key#null key|null]] key, then the speaker&#039;s key must be equivalent{{Footnote|In general terms this means the matching for {{LSLP|id}} is not case sensitive. See [[key#equivalency]] for details on key equivalency.|In general terms this means the matching for id is not case sensitive.}} to {{LSLP|id}}. If {{LSLP|name}} is set, then the speaker&#039;s {{LSLGC|Avatar/Name|legacy name}} must match {{LSLP|name}} exactly (case sensitive). If {{LSLP|msg}} is set, then the spoken message must match {{LSLP|msg}} exactly (case sensitive).&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llListenRemove]]|Removes a listen}}&lt;br /&gt;
{{LSL DefineRow||[[llListenControl]]|Enables/Disables a listen}}&lt;br /&gt;
{{LSL DefineRow||[[llWhisper]]|Sends chat limited to 10 meters}}&lt;br /&gt;
{{LSL DefineRow||[[llSay]]|Sends chat limited to 20 meters}}&lt;br /&gt;
{{LSL DefineRow||[[llShout]]|Sends chat limited to 100 meters}}&lt;br /&gt;
{{LSL DefineRow||[[llRegionSay]]|Sends chat limited current sim}}&lt;br /&gt;
{{LSL DefineRow||[[llRegionSayTo]]|Sends chat region wide to a specific avatar, or their attachments, or to a rezzed object of known UUID}}&lt;br /&gt;
|also_events={{LSL DefineRow||[[listen]]|}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|haiku=&lt;br /&gt;
 {{Haiku|Choose not much to say|Someone might overhear it|Blab no big secrets}}&lt;br /&gt;
|notes=*Avoid channel zero ([[PUBLIC_CHANNEL]]) and set {{LSLP|name}} or {{LSLP|id}} where possible to avoid lag. &amp;lt;code&amp;gt;llListen(0, &amp;quot;&amp;quot;, NULL_KEY,&amp;quot;&amp;quot;)&amp;lt;/code&amp;gt; can be laggy as it listens to all chat from everyone in chat range and so should be avoided.&lt;br /&gt;
&lt;br /&gt;
*In November 2007, [[User:Kelly_Linden|Kelly Linden]] offered [https://lists.secondlife.com/pipermail/secondlifescripters/2007-November/001993.html this explanation] to help scripters plan listeners more efficiently:&lt;br /&gt;
:#Chat that is said gets added to a history.&lt;br /&gt;
:#A script that is running and has a [[listen]] [[event]] will ask the history for a chat message during its slice of run time.&lt;br /&gt;
:# When the script asks the history for a chat message the checks are done in this order:&lt;br /&gt;
:#* {{LSLP|channel}}&lt;br /&gt;
:#* self chat (prims can&#039;t hear themselves)&lt;br /&gt;
:#* distance/[[llRegionSay|RegionSay]]&lt;br /&gt;
:#* {{LSLP|id}}&lt;br /&gt;
:#* {{LSLP|name}}&lt;br /&gt;
:#* {{LSLP|msg}}&lt;br /&gt;
:# If a {{LSLP|msg}} is found then a [[listen]] [[event]] is added to the [[event]] queue.&lt;br /&gt;
:&lt;br /&gt;
:The {{LSLP|id}}/{{LSLP|name}}/{{LSLP|msg}} checks only happen at all if those are specified of course.&lt;br /&gt;
:&lt;br /&gt;
:So, the most efficient communication method is [[llRegionSay]] on a rarely used {{LSLP|channel}}.&lt;br /&gt;
:Nowadays, [[llRegionSayTo]] is to be preferred, where appropriate.&lt;br /&gt;
*The integer returned can be assigned to a variable (then called a handle) and used to control the listen via [[llListenRemove]] or [[llListenControl]]. These handles are assigned sequentially starting at &amp;lt;tt&amp;gt;+1&amp;lt;/tt&amp;gt; through to &amp;lt;tt&amp;gt;+2,147,483,647&amp;lt;/tt&amp;gt;, going beyond which, according to [[User:Simon Linden|Simon Linden]], will roll the returned integer over to &amp;lt;tt&amp;gt;−2,147,483,648&amp;lt;/tt&amp;gt;, when positive incrementation resumes. If an [[llListen]] is repeated with the exact same filters as a currently active listener, then the same handle number is returned. If an [[llListen|llListen&#039;s]] filters do not match any currently active listener, then the next handle in sequence is allocated (it will not re-allocate a recently removed handle).&lt;br /&gt;
*If you are using multiple listens in one script, each listen can be assigned its own handle with which to control it.&lt;br /&gt;
|caveats=*On [[state]] change or [[llResetScript|script reset]] all listens are removed automatically.&lt;br /&gt;
**A [[state]] change can be used as a shortcut to releasing listens.&lt;br /&gt;
*Only 65 listens can simultaneously be open in any single script.&lt;br /&gt;
**If this number is exceeded &#039;&#039;Script run-time error&#039;&#039; and &#039;&#039;Too Many Listens&#039;&#039; errors occur.&lt;br /&gt;
*For some time, the official SL viewer and several third-party viewers can use negative channels from the chat bar directly just as any other non-zero channel. Formerly, the standard SL viewer could only send chat on negative channels through [[llDialog]] or [[llTextBox]] responses, meaning negative channels were best suited for applications that did not require direct avatar chat.&lt;br /&gt;
*Be aware that if you mistakenly use an integer literal bigger than the maximum or smaller than the minimum, LSL will treat it as -1, &#039;&#039;without&#039;&#039; giving any compilation error. This means that all scripts listening to an out-of-range integer will be listening to channel -1 instead, or if the number has a minus sign in front, to channel 1. A safe rule is to never use more than 9 digits. If the channel number comes from a conversion from float (for example from [[llFrand]]), if the float is out of range for an integer, it will be converted to the number -2147483648 regardless of its sign or value.&lt;br /&gt;
*Messages sent by script on positive and negative channels are truncated to 1024 bytes. Messages sent by chat on positive channels are truncated to 1023 bytes. Messages sent by chat from negative channels are truncated to 254 bytes.&lt;br /&gt;
*Once a [[listen]] is registered its filters cannot be updated, if the listen is registered to [[llGetOwner]], the listen will remain registered to the previous owner upon owner change.&lt;br /&gt;
**[[CHANGED_OWNER|Owner change]] can be detected with the [[changed]] event.&lt;br /&gt;
**To work around this the old listen will need to be closed and a new one opened for the new owner.&lt;br /&gt;
*A prim cannot hear/listen to chat it generates. It can, however, hear a linked prim.&lt;br /&gt;
**Chat indirectly generated (as a result of [[llDialog]], [[llTextBox]] or from a [[Link|linked prim]]) can be heard if in range.&lt;br /&gt;
*You most certainly can listen to [[DEBUG_CHANNEL]], which will allow you to see all script errors no matter where in the [[region]] you are; also, you can raise your own script errors by using [[llSay]] on [[DEBUG_CHANNEL]]; however, remember that others will just see the script errors&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;dubious-[[Talk:llListen|discuss]]&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt; as the hovering &#039;script error&#039; icon — no matter if they&#039;re errors thrown by the scripting engine or your own debugging messages.&lt;br /&gt;
|examples=&lt;br /&gt;
Trivial example to listen to any chat from the object owner and respond once.&lt;br /&gt;
{{{!}} class=&amp;quot;sortable&amp;quot; width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
{{!}}- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Single listen handle&#039;&#039;&#039;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!!}}&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
//  Says beep to owner the first-time owner says something in main chat&lt;br /&gt;
//  and then stops listening&lt;br /&gt;
&lt;br /&gt;
integer listenHandle;&lt;br /&gt;
&lt;br /&gt;
remove_listen_handle()&lt;br /&gt;
{&lt;br /&gt;
    llListenRemove(listenHandle);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
//      Change the channel number to a positive integer &lt;br /&gt;
//      to listen for &#039;/5 hello&#039; style of chat.&lt;br /&gt;
&lt;br /&gt;
//      target only the owner&#039;s chat on channel 0 (PUBLIC_CHANNEL)&lt;br /&gt;
        listenHandle = llListen(0, &amp;quot;&amp;quot;, llGetOwner(), &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    listen(integer channel, string name, key id, string message)&lt;br /&gt;
    {&lt;br /&gt;
//      we filtered to only listen on channel 0&lt;br /&gt;
//      to the owner&#039;s chat in the llListen call above&lt;br /&gt;
&lt;br /&gt;
        llOwnerSay(&amp;quot;beep&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//      stop listening until script is reset&lt;br /&gt;
        remove_listen_handle();&lt;br /&gt;
    }&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;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_OWNER)&lt;br /&gt;
        {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;sortable&amp;quot; width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
{{!}}- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Two listen handles&#039;&#039;&#039;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!!}}&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
//  Opens two listen handles upon touch_start and&lt;br /&gt;
//  stops listening whenever something heard passes either filter&lt;br /&gt;
&lt;br /&gt;
integer listenHandle_a;&lt;br /&gt;
integer listenHandle_b;&lt;br /&gt;
&lt;br /&gt;
remove_listen_handles()&lt;br /&gt;
{&lt;br /&gt;
    llListenRemove(listenHandle_a);&lt;br /&gt;
    llListenRemove(listenHandle_b);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer num_detected)&lt;br /&gt;
    {&lt;br /&gt;
        key    id   = llDetectedKey(0);&lt;br /&gt;
        string name = llDetectedName(0);&lt;br /&gt;
&lt;br /&gt;
        listenHandle_a = llListen(5, &amp;quot;&amp;quot;, id, &amp;quot;&amp;quot;);&lt;br /&gt;
        listenHandle_b = llListen(6, &amp;quot;&amp;quot;, NULL_KEY, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        llSay(0, &amp;quot;Listening now to &#039;&amp;quot; + name + &amp;quot;&#039; on channel 5.&amp;quot;);&lt;br /&gt;
        llSay(0, &amp;quot;Listening now to anybody/anything on channel 6.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    listen(integer channel, string name, key id, string message)&lt;br /&gt;
    {&lt;br /&gt;
        if (channel == 5)&lt;br /&gt;
            llSay(0, name + &amp;quot; said: &#039;/5 &amp;quot; + message + &amp;quot;&#039;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        if (channel == 6)&lt;br /&gt;
            llSay(0, name + &amp;quot; said: &#039;/6 &amp;quot; + message + &amp;quot;&#039;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        remove_listen_handles();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{!}}}&lt;br /&gt;
|cat1=Communications&lt;br /&gt;
|cat2=Chat&lt;br /&gt;
|cat3=Legacy Name/As A Parameter&lt;br /&gt;
|cat4=Error&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlRegionSayTo&amp;diff=1212340</id>
		<title>LlRegionSayTo</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlRegionSayTo&amp;diff=1212340"/>
		<updated>2022-09-24T17:44:30Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Revert the previous change and fix it the right way&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{Issues/SCR-66}}&lt;br /&gt;
{{LSL_Function/uuid|target|sim=*|group=}}&lt;br /&gt;
|func_id=363&lt;br /&gt;
|func_sleep=0.0&lt;br /&gt;
|func_energy=10.0&lt;br /&gt;
|func=llRegionSayTo&lt;br /&gt;
|sort=RegionSayTo&lt;br /&gt;
|p1_type=key|p1_name=target&lt;br /&gt;
|p2_type=integer|p2_name=channel&lt;br /&gt;
|p3_type=string|p3_name=msg&lt;br /&gt;
|func_desc=Says the text supplied in string {{LSLP|msg}} on channel supplied in integer {{LSLP|channel}} to the object or avatar specified by {{LSLP|target}}&lt;br /&gt;
|return_text&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=&lt;br /&gt;
*Text is spoken directly to the object or avatar within the same region as the script.&lt;br /&gt;
*Scripts in tasks other than {{LSLP|target}} can not listen for and receive these text messages, with an exception for attachments as described below.&lt;br /&gt;
*Text can be a maximum of 1024 bytes. This can convey 1024 ASCII-7 characters, or 512 UTF-8 characters such as á&lt;br /&gt;
*A prim cannot hear itself, to prevent problems with recursion.&lt;br /&gt;
*Sending text on {{LSLP|DEBUG_CHANNEL}} is not supported&lt;br /&gt;
*Text sent to an avatar&#039;s ID on channel zero will be sent to the receiver&#039;s viewer.&lt;br /&gt;
*Text sent to an avatar&#039;s ID on non-zero channels can be heard by any attachment on the avatar&lt;br /&gt;
*A quick series of messages sent by llRegionSayTo cannot be relied on to arrive at their destination in the same order as sent.&lt;br /&gt;
*There is a per-destination throttle of 200 messages sent over 10 seconds on channel zero.   Thereafter, there is also a per-sending-object throttle of 100 messages on channel zero over 300 seconds (5 minutes).  This throttle is relevant only after the first throttle is activated.  Messages sent on channels other than zero do not trigger the throttle but, once it is triggered, the block applies to all channels. The block is region-wide and applies to all objects with the same owner. The block apparently lasts until the region is restarted.&lt;br /&gt;
|examples=&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 num_detected)&lt;br /&gt;
    {&lt;br /&gt;
        key id = llDetectedKey(0);&lt;br /&gt;
&lt;br /&gt;
        // send a message to the chat window of the avatar touching&lt;br /&gt;
        llRegionSayTo(id, 0, &amp;quot;You touched this!&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        // send a message to the attachments of the avatar touching&lt;br /&gt;
        // example channel: -12345&lt;br /&gt;
        llRegionSayTo(id, -12345, &amp;quot;Hello there attachments!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_events=&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}{{!}} style=&amp;quot;width:9em;&amp;quot; {{!}}&lt;br /&gt;
{{LSL DefineRow||[[listen]]|Receives chat}}&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}{{!}} style=&amp;quot;width:9em;&amp;quot; {{!}}&lt;br /&gt;
{{LSL DefineRow||[[llListen]]|Ask for listen events}}&lt;br /&gt;
{{LSL DefineRow||[[llInstantMessage]]|Sends chat to a specific avatar, inside our outside the current region.}}&lt;br /&gt;
{{LSL DefineRow||[[llOwnerSay]]|Sends chat to the owner only to avoid spamming the PUBLIC_CHANNEL}}&lt;br /&gt;
{{LSL DefineRow||[[llRegionSay]]|Sends chat region wide}}&lt;br /&gt;
{{LSL DefineRow||[[llSay]]|Sends chat limited to 20 meters}}&lt;br /&gt;
{{LSL DefineRow||[[llShout]]|Sends chat limited to 100 meters}}&lt;br /&gt;
{{LSL DefineRow||[[llWhisper]]|Sends chat limited to 10 meters}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles={{LSL DefineRow||[[Hello Avatar]]}}&lt;br /&gt;
|notes=&lt;br /&gt;
* If one object &#039;says&#039; something to another object (&#039;&#039;e.g&#039;&#039;., a button that, when touched, turns on a lamp), it is a good idea to use a very negative channel, &#039;&#039;e.g.&#039;&#039;,&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
    llRegionSayTo(&amp;quot;55499a64-45c3-4b81-8880-8ffb5a7c251b&amp;quot;, -5243212, &amp;quot;turn on&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Negative channels are popular for script communications because, before September 2016, the standard Second Life client was unable to chat directly on those channels (&amp;quot;/-xxxx message&amp;quot; wouldn&#039;t chat &amp;quot;message&amp;quot; on channel &amp;quot;-xxxx&amp;quot;). &lt;br /&gt;
* Messages sent on channel zero via LLRegionSayTo() are blocked after 200 messages on to the same destination in a 10 second period.  After this throttle is activated, there is a further throttle, on objects belonging to the owner of the object that triggered the first throttle, of 100 messages per object over 5 minutes (see https://jira.secondlife.com/browse/BUG-5457). The block is region-wide and applies to all objects belonging to the owner, so if a script triggers the throttle, all objects in the same region belonging to the same owner will also be blocked. Messages sent on channels other than zero do not trigger the throttles.  The throttles apparently reset only when the region is restarted. &lt;br /&gt;
&lt;br /&gt;
Therefore, llRegionSayTo() is unsuitable for (say) verbose script debugging, and even moderate use can break users&#039; content completely unrelated to the script for an indeterminate (and potentially very long) period of time.   Consider using llOwnerSay() for debugging instead or, if this not appropriate, try llRegionSayTo(avatar, non-zero-channel, message) and have an attachment relay the message using llOwnerSay(). &lt;br /&gt;
|cat1&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
|history = Date of Release  [[ Release_Notes/Second_Life_Server/11#11.04.26.227686 | 26/04/2011 ]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlRegionSayTo&amp;diff=1212338</id>
		<title>LlRegionSayTo</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlRegionSayTo&amp;diff=1212338"/>
		<updated>2022-09-24T17:27:20Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Using &amp;#039;target&amp;#039; as name automatically adds a text that says that a group is valid, and that doesn&amp;#039;t work for this funciton&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{Issues/SCR-66}}&lt;br /&gt;
{{LSL_Function/uuid|target|sim=*}}&lt;br /&gt;
|func_id=363&lt;br /&gt;
|func_sleep=0.0&lt;br /&gt;
|func_energy=10.0&lt;br /&gt;
|func=llRegionSayTo&lt;br /&gt;
|sort=RegionSayTo&lt;br /&gt;
|p1_type=key|p1_name=dest|p1_desc=avatar or prim [[UUID]]&lt;br /&gt;
|p2_type=integer|p2_name=channel&lt;br /&gt;
|p3_type=string|p3_name=msg&lt;br /&gt;
|func_desc=Says the text supplied in string {{LSLP|msg}} on channel supplied in integer {{LSLP|channel}} to the object or avatar specified by {{LSLP|dest}}&lt;br /&gt;
|return_text&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=&lt;br /&gt;
*Text is spoken directly to the object or avatar within the same region as the script.&lt;br /&gt;
*Scripts in tasks other than {{LSLP|target}} can not listen for and receive these text messages, with an exception for attachments as described below.&lt;br /&gt;
*Text can be a maximum of 1024 bytes. This can convey 1024 ASCII-7 characters, or 512 UTF-8 characters such as á&lt;br /&gt;
*A prim cannot hear itself, to prevent problems with recursion.&lt;br /&gt;
*Sending text on {{LSLP|DEBUG_CHANNEL}} is not supported&lt;br /&gt;
*Text sent to an avatar&#039;s ID on channel zero will be sent to the receiver&#039;s viewer.&lt;br /&gt;
*Text sent to an avatar&#039;s ID on non-zero channels can be heard by any attachment on the avatar&lt;br /&gt;
*A quick series of messages sent by llRegionSayTo cannot be relied on to arrive at their destination in the same order as sent.&lt;br /&gt;
*There is a per-destination throttle of 200 messages sent over 10 seconds on channel zero.   Thereafter, there is also a per-sending-object throttle of 100 messages on channel zero over 300 seconds (5 minutes).  This throttle is relevant only after the first throttle is activated.  Messages sent on channels other than zero do not trigger the throttle but, once it is triggered, the block applies to all channels. The block is region-wide and applies to all objects with the same owner. The block apparently lasts until the region is restarted.&lt;br /&gt;
|examples=&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 num_detected)&lt;br /&gt;
    {&lt;br /&gt;
        key id = llDetectedKey(0);&lt;br /&gt;
&lt;br /&gt;
        // send a message to the chat window of the avatar touching&lt;br /&gt;
        llRegionSayTo(id, 0, &amp;quot;You touched this!&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        // send a message to the attachments of the avatar touching&lt;br /&gt;
        // example channel: -12345&lt;br /&gt;
        llRegionSayTo(id, -12345, &amp;quot;Hello there attachments!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_events=&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}{{!}} style=&amp;quot;width:9em;&amp;quot; {{!}}&lt;br /&gt;
{{LSL DefineRow||[[listen]]|Receives chat}}&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}{{!}} style=&amp;quot;width:9em;&amp;quot; {{!}}&lt;br /&gt;
{{LSL DefineRow||[[llListen]]|Ask for listen events}}&lt;br /&gt;
{{LSL DefineRow||[[llInstantMessage]]|Sends chat to a specific avatar, inside our outside the current region.}}&lt;br /&gt;
{{LSL DefineRow||[[llOwnerSay]]|Sends chat to the owner only to avoid spamming the PUBLIC_CHANNEL}}&lt;br /&gt;
{{LSL DefineRow||[[llRegionSay]]|Sends chat region wide}}&lt;br /&gt;
{{LSL DefineRow||[[llSay]]|Sends chat limited to 20 meters}}&lt;br /&gt;
{{LSL DefineRow||[[llShout]]|Sends chat limited to 100 meters}}&lt;br /&gt;
{{LSL DefineRow||[[llWhisper]]|Sends chat limited to 10 meters}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles={{LSL DefineRow||[[Hello Avatar]]}}&lt;br /&gt;
|notes=&lt;br /&gt;
* If one object &#039;says&#039; something to another object (&#039;&#039;e.g&#039;&#039;., a button that, when touched, turns on a lamp), it is a good idea to use a very negative channel, &#039;&#039;e.g.&#039;&#039;,&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
    llRegionSayTo(&amp;quot;55499a64-45c3-4b81-8880-8ffb5a7c251b&amp;quot;, -5243212, &amp;quot;turn on&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Negative channels are popular for script communications because, before September 2016, the standard Second Life client was unable to chat directly on those channels (&amp;quot;/-xxxx message&amp;quot; wouldn&#039;t chat &amp;quot;message&amp;quot; on channel &amp;quot;-xxxx&amp;quot;). &lt;br /&gt;
* Messages sent on channel zero via LLRegionSayTo() are blocked after 200 messages on to the same destination in a 10 second period.  After this throttle is activated, there is a further throttle, on objects belonging to the owner of the object that triggered the first throttle, of 100 messages per object over 5 minutes (see https://jira.secondlife.com/browse/BUG-5457). The block is region-wide and applies to all objects belonging to the owner, so if a script triggers the throttle, all objects in the same region belonging to the same owner will also be blocked. Messages sent on channels other than zero do not trigger the throttles.  The throttles apparently reset only when the region is restarted. &lt;br /&gt;
&lt;br /&gt;
Therefore, llRegionSayTo() is unsuitable for (say) verbose script debugging, and even moderate use can break users&#039; content completely unrelated to the script for an indeterminate (and potentially very long) period of time.   Consider using llOwnerSay() for debugging instead or, if this not appropriate, try llRegionSayTo(avatar, non-zero-channel, message) and have an attachment relay the message using llOwnerSay(). &lt;br /&gt;
|cat1&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
|history = Date of Release  [[ Release_Notes/Second_Life_Server/11#11.04.26.227686 | 26/04/2011 ]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetStatus&amp;diff=1212333</id>
		<title>LlGetStatus</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetStatus&amp;diff=1212333"/>
		<updated>2022-09-24T17:00:57Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Add STATUS_DIE_AT_NO_ENTRY and STATUS_DIE_AT_EDGE to priority order, now that they work&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{Issues/SVC-5531}}{{Issues/SVC-1773}}{{Issues/SVC-4197}}&lt;br /&gt;
|func_id=46|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llGetStatus&lt;br /&gt;
|return_type=integer|return_subtype=boolean&lt;br /&gt;
|p1_type=integer|p1_subtype=bit mask|p1_name=status|p1_desc=A single STATUS_* flag&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=equal to the {{LSLP|status}} of the object.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=*Status is an object attribute; all prims in an object share the same status.&lt;br /&gt;
**[[STATUS_BLOCK_GRAB]] only really deals with the root prim. Try [[STATUS_BLOCK_GRAB_OBJECT]] instead.&lt;br /&gt;
*Querying for [[STATUS_CAST_SHADOWS]] always returns [[FALSE]] regardless of the setting.&lt;br /&gt;
*Only one flag should be specified at a time. As of Second Life Server 2022-09-09.574921, if more than one flag is specified, STATUS_DIE_AT_NO_ENTRY takes priority, followed by STATUS_BLOCK_GRAB_OBJECT, STATUS_DIE_AT_EDGE, STATUS_RETURN_AT_EDGE, STATUS_BLOCK_GRAB, STATUS_SANDBOX, STATUS_ROTATE_Z, STATUS_ROTATE_Y, STATUS_ROTATE_X, STATUS_PHANTOM, and STATUS_PHYSICS.&lt;br /&gt;
|constants={{LSL Constants/Status}}&lt;br /&gt;
|examples=&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;
        if (llGetStatus(STATUS_PHYSICS))&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0, &amp;quot;This object is physical&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0, &amp;quot;This object is not physical&amp;quot;);&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||[[llSetStatus]]|Sets the object status.}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Status&lt;br /&gt;
|cat2=Physics&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetStatus&amp;diff=1211549</id>
		<title>LlGetStatus</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetStatus&amp;diff=1211549"/>
		<updated>2022-09-14T22:55:06Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: STATUS_DIE_AT_* was fixed; it seems I had to write this for it to be noticed.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{Issues/SVC-5531}}{{Issues/SVC-1773}}{{Issues/SVC-4197}}&lt;br /&gt;
|func_id=46|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llGetStatus&lt;br /&gt;
|return_type=integer|return_subtype=boolean&lt;br /&gt;
|p1_type=integer|p1_subtype=bit mask|p1_name=status|p1_desc=A single STATUS_* flag&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=equal to the {{LSLP|status}} of the object.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=*Status is an object attribute; all prims in an object share the same status.&lt;br /&gt;
**[[STATUS_BLOCK_GRAB]] only really deals with the root prim. Try [[STATUS_BLOCK_GRAB_OBJECT]] instead.&lt;br /&gt;
*Querying for [[STATUS_CAST_SHADOWS]] always returns [[FALSE]] regardless of the setting.&lt;br /&gt;
*Only one flag should be specified at a time. As of Second Life Server 2022-08-12.574216, if more than one flag is specified, STATUS_BLOCK_GRAB_OBJECT takes priority, followed by STATUS_RETURN_AT_EDGE, STATUS_BLOCK_GRAB, STATUS_SANDBOX, STATUS_ROTATE_Z, STATUS_ROTATE_Y, STATUS_ROTATE_X, STATUS_PHANTOM, and STATUS_PHYSICS.&lt;br /&gt;
|constants={{LSL Constants/Status}}&lt;br /&gt;
|examples=&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;
        if (llGetStatus(STATUS_PHYSICS))&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0, &amp;quot;This object is physical&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0, &amp;quot;This object is not physical&amp;quot;);&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||[[llSetStatus]]|Sets the object status.}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Status&lt;br /&gt;
|cat2=Physics&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetStatus&amp;diff=1211076</id>
		<title>LlGetStatus</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetStatus&amp;diff=1211076"/>
		<updated>2022-08-26T10:33:28Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Add caveats&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{Issues/SVC-5531}}{{Issues/SVC-1773}}{{Issues/SVC-4197}}&lt;br /&gt;
|func_id=46|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llGetStatus&lt;br /&gt;
|return_type=integer|return_subtype=boolean&lt;br /&gt;
|p1_type=integer|p1_subtype=bit mask|p1_name=status|p1_desc=A single STATUS_* flag&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=equal to the {{LSLP|status}} of the object.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=*Status is an object attribute; all prims in an object share the same status.&lt;br /&gt;
**[[STATUS_BLOCK_GRAB]] only really deals with the root prim. Try [[STATUS_BLOCK_GRAB_OBJECT]] instead.&lt;br /&gt;
*Querying for [[STATUS_DIE_AT_EDGE]], [[STATUS_DIE_AT_NO_ENTRY]] or [[STATUS_CAST_SHADOWS]] always returns FALSE regardless of the setting.&lt;br /&gt;
*Only one flag should be specified at a time. As of Second Life Server 2022-08-12.574216, if more than one flag is specified, STATUS_BLOCK_GRAB_OBJECT takes priority, followed by STATUS_RETURN_AT_EDGE, STATUS_BLOCK_GRAB, STATUS_SANDBOX, STATUS_ROTATE_Z, STATUS_ROTATE_Y, STATUS_ROTATE_X, STATUS_PHANTOM, and STATUS_PHYSICS.&lt;br /&gt;
|constants={{LSL Constants/Status}}&lt;br /&gt;
|examples=&amp;lt;source 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;
        if (llGetStatus(STATUS_PHYSICS))&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0, &amp;quot;This object is physical&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0, &amp;quot;This object is not physical&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||[[llSetStatus]]|Sets the object status.}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Status&lt;br /&gt;
|cat2=Physics&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetHTTPHeader&amp;diff=1210934</id>
		<title>LlGetHTTPHeader</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetHTTPHeader&amp;diff=1210934"/>
		<updated>2022-07-22T00:31:53Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Works fine outside http_request as long as the key is valid&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func_id=349|func_sleep=0.0|func_energy=10.0|mode&lt;br /&gt;
|func=llGetHTTPHeader|return_type=string&lt;br /&gt;
|p1_type=key|p1_subtype=handle|p1_name=request_id|p1_desc=A valid HTTP request key.&lt;br /&gt;
|p2_type=string|p2_name=header|p2_desc=Lower case header value name.&lt;br /&gt;
|func_footnote=Returns an empty string if the header is not found, if the &#039;&#039;&#039;request_id&#039;&#039;&#039; is not a valid key received through the [[http_request]] event, or if the headers can no longer be accessed. Headers can only be accessed before [[llHTTPResponse]] is called and with-in the first 30&amp;amp;nbsp;seconds after the [[http_request]] event is queued.&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=that is the value for &#039;&#039;&#039;header&#039;&#039;&#039; for &#039;&#039;&#039;request_id&#039;&#039;&#039;.&lt;br /&gt;
|spec=&lt;br /&gt;
===Generated Headers===&lt;br /&gt;
These headers are automatically generated by the simulator, they were not actually sent by the requesting client. They supply information about the request to make parsing easier.&lt;br /&gt;
&lt;br /&gt;
Sample URL: [https://sim3015.aditi.lindenlab.com:12043/cap/a7717681-2c04-e4ac-35e3-1f01c9861322/foo/bar?arg=gra {{HoverTextStyle|style=color:green;|&amp;lt;nowiki&amp;gt;https://sim3015.aditi.lindenlab.com:12043/cap/a7717681-2c04-e4ac-35e3-1f01c9861322&amp;lt;/nowiki&amp;gt;|2={{String|x-script-url}} = {{String|https://sim3015.aditi.lindenlab.com:12043/cap/a7717681-2c04-e4ac-35e3-1f01c9861322}}}}{{HoverTextStyle|style=color:blue;|/foo/bar|2={{String|x-path-info}} = {{String|/foo/bar}}}}?{{HoverTextStyle|style=color:red;|1=arg=gra|2={{String|x-query-string}} = {{String|1=arg=gra}}}}]&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;lltable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! header&lt;br /&gt;
! description&lt;br /&gt;
! example&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;white-space: nowrap;&amp;quot; {{!}} &amp;quot;x-script-url&amp;quot;&lt;br /&gt;
{{!}} The base url, as originally received from [[llRequestURL]]/[[llRequestSecureURL]]&lt;br /&gt;
{{!}} &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;https://sim3015.aditi.lindenlab.com:12043/cap/a7717681-2c04-e4ac-35e3-1f01c9861322&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;white-space: nowrap;&amp;quot; {{!}} &amp;quot;x-path-info&amp;quot;&lt;br /&gt;
{{!}} Any trailing path information from the requested url&lt;br /&gt;
{{!}} &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;/foo/bar&amp;lt;/font&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;white-space: nowrap;&amp;quot; {{!}} &amp;quot;x-query-string&amp;quot;&lt;br /&gt;
{{!}} Any query arguments, the text past the first &amp;quot;?&amp;quot; in the url&lt;br /&gt;
{{!}} &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;arg=gra&amp;lt;/font&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;white-space: nowrap;&amp;quot; {{!}} &amp;quot;x-remote-ip&amp;quot;&lt;br /&gt;
{{!}} IP address of the host that made the request&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
===Common Headers===&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;lltable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! header&lt;br /&gt;
! description&lt;br /&gt;
! example&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} style=&amp;quot;white-space: nowrap;&amp;quot; {{!}} &amp;quot;user-agent&amp;quot;&lt;br /&gt;
{{!}} The user-agent header as reported by the requester &lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
===[[llHTTPRequest]] Headers===&lt;br /&gt;
{{LSL_Constants/HTTP_Headers|lower-case=*}}&lt;br /&gt;
|caveats=&lt;br /&gt;
* Header information becomes inaccessible after 30 seconds or if [[llHTTPResponse]] is called.&lt;br /&gt;
* Function returns an empty string in any context outside the [[http_request]] event. For instance, it cannot be used in the [[http_response]] event.&lt;br /&gt;
* Custom headers are not supported, only the headers listed in the specification are supported.&lt;br /&gt;
* LSL is not a CGI environment&lt;br /&gt;
** &amp;quot;Content-Type&amp;quot; is an example of a normal header name, in a CGI environment the name would be &amp;quot;HTTP_CONTENT_TYPE&amp;quot;.&lt;br /&gt;
* &#039;&#039;&#039;header&#039;&#039;&#039; must be lower case (or it will match nothing). All header names are converted to lower case when they are received.&lt;br /&gt;
* When making a request...&lt;br /&gt;
** The path part of the URL must be prefixed with a forward slash&lt;br /&gt;
*** Good: https://sim3015.aditi.lindenlab.com:12043/cap/a7717681-2c04-e4ac-35e3-1f01c9861322/foo&lt;br /&gt;
*** Bad: https://sim3015.aditi.lindenlab.com:12043/cap/a7717681-2c04-e4ac-35e3-1f01c9861322foo&lt;br /&gt;
** In order to use the query string, you must include a path (even if it is just a slash)&lt;br /&gt;
*** Good: https://sim3015.aditi.lindenlab.com:12043/cap/a7717681-2c04-e4ac-35e3-1f01c9861322/?arg=gra&lt;br /&gt;
*** Bad: https://sim3015.aditi.lindenlab.com:12043/cap/a7717681-2c04-e4ac-35e3-1f01c9861322?arg=gra&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
key url_request;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        url_request = llRequestURL();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    http_request(key id, string method, string body)&lt;br /&gt;
    {&lt;br /&gt;
        if (url_request == id)&lt;br /&gt;
        {&lt;br /&gt;
        //  if you&#039;re usually not resetting the query ID&lt;br /&gt;
        //  now is a good time to start!&lt;br /&gt;
            url_request = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            if (method == URL_REQUEST_GRANTED)&lt;br /&gt;
            {&lt;br /&gt;
                llOwnerSay(&amp;quot;URL: &amp;quot; + body);&lt;br /&gt;
&lt;br /&gt;
                key owner = llGetOwner();&lt;br /&gt;
                vector ownerSize = llGetAgentSize(owner);&lt;br /&gt;
&lt;br /&gt;
                if (ownerSize)//  != ZERO_VECTOR&lt;br /&gt;
                    llLoadURL(owner, &amp;quot;I got a new URL!&amp;quot;, body);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            else if (method == URL_REQUEST_DENIED)&lt;br /&gt;
                llOwnerSay(&amp;quot;Something went wrong, no url:\n&amp;quot; + body);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            list headerList = [&amp;quot;x-script-url&amp;quot;,&lt;br /&gt;
                            &amp;quot;x-path-info&amp;quot;, &amp;quot;x-query-string&amp;quot;,&lt;br /&gt;
                            &amp;quot;x-remote-ip&amp;quot;, &amp;quot;user-agent&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
            integer index = -llGetListLength(headerList);&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                string header = llList2String(headerList, index);&lt;br /&gt;
                llOwnerSay(header + &amp;quot;: &amp;quot; + llGetHTTPHeader(id, header));&lt;br /&gt;
            }&lt;br /&gt;
            while (++index);&lt;br /&gt;
&lt;br /&gt;
            llOwnerSay(&amp;quot;body:\n&amp;quot; + body);&lt;br /&gt;
            llHTTPResponse(id, 200, body);&lt;br /&gt;
        }&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||[[llGetFreeURLs]]}}&lt;br /&gt;
{{LSL DefineRow||[[llRequestURL]]}}&lt;br /&gt;
{{LSL DefineRow||[[llRequestSecureURL]]}}&lt;br /&gt;
{{LSL DefineRow||[[llReleaseURL]]}}&lt;br /&gt;
{{LSL DefineRow||[[llHTTPResponse]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events=&lt;br /&gt;
{{LSL DefineRow||[[http_request]]}}&lt;br /&gt;
|also_articles=&lt;br /&gt;
{{LSL DefineRow||[[LSL http server]]}}&lt;br /&gt;
{{LSL DefineRow||{{Wikipedia|List_of_HTTP_headers|Wikipedia:List of HTTP headers}}}}&lt;br /&gt;
|notes&lt;br /&gt;
|deepnotes=&lt;br /&gt;
|history=&lt;br /&gt;
*{{SVN|1836|rev=112899 |trunk=*|anchor=file22|ver=|ser=}}&lt;br /&gt;
|cat1=HTTP&lt;br /&gt;
|cat2=HTTP/Server&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlListen&amp;diff=1210897</id>
		<title>LlListen</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlListen&amp;diff=1210897"/>
		<updated>2022-07-07T13:35:28Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Fix inaccuracies&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{LSL_Function/uuid|id|pd=filter for specific}}{{LSL Function/chat|channel|msg|input=*|pd=filter for specific}}{{Issues/SVC-3170}}{{Issues/SVC-92}}{{Issues/BUG-3291}}&lt;br /&gt;
|func=llListen&lt;br /&gt;
|sort=Listen&lt;br /&gt;
|func_id=25|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|return_type=integer&lt;br /&gt;
|return_subtype=handle&lt;br /&gt;
|return_text=that can be used to [[llListenControl|deactivate]] or [[llListenRemove|remove]] the listen.&lt;br /&gt;
|p1_type=integer|p1_name=channel|p1_desc=&amp;amp;#32;(-2147483648 through 2147483647)|p1_hover=&amp;amp;#32;(-2147483648 through 2147483647) &lt;br /&gt;
|p2_type=string|p2_name=name|p2_desc=filter for specific prim name or avatar {{LSLGC|Avatar/Name|legacy name}}&lt;br /&gt;
|p2_hover=filter for specific prim name or avatar legacy name&lt;br /&gt;
|p3_type=key|p3_name=id&lt;br /&gt;
|p4_type=string|p4_name=msg&lt;br /&gt;
|func_desc=Sets a [http://foldoc.org/index.cgi?query=handle handle] for {{LSLP|msg}} on {{LSLP|channel}} from {{LSLP|name}} and {{LSLP|id}}.&lt;br /&gt;
|func_footnote=If {{LSLP|msg}}, {{LSLP|name}} or {{LSLP|id}} are blank (i.e. &amp;lt;code&amp;gt;&amp;quot;&amp;quot;&amp;lt;/code&amp;gt;) they are not used to filter incoming messages.&lt;br /&gt;
If {{LSLP|id}} is an invalid key or assigned the value [[NULL_KEY]], it is considered blank as well.&amp;lt;br/&amp;gt;&lt;br /&gt;
|spec=For the [[listen]] [[event]] to be triggered it must first match the criteria set forth by the filters; only when all the criteria have been met is a listen event generated. First the message must have been transmitted on {{LSLP|channel}}. If {{LSLP|id}} is both a [[key#valid|valid]] key and not a [[key#null key|null]] key, then the speaker&#039;s key must be equivalent{{Footnote|In general terms this means the matching for {{LSLP|id}} is not case sensitive. See [[key#equivalency]] for details on key equivalency.|In general terms this means the matching for id is not case sensitive.}} to {{LSLP|id}}. If {{LSLP|name}} is set, then the speaker&#039;s {{LSLGC|Avatar/Name|legacy name}} must match {{LSLP|name}} exactly (case sensitive). If {{LSLP|msg}} is set, then the spoken message must match {{LSLP|msg}} exactly (case sensitive).&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llListenRemove]]|Removes a listen}}&lt;br /&gt;
{{LSL DefineRow||[[llListenControl]]|Enables/Disables a listen}}&lt;br /&gt;
{{LSL DefineRow||[[llWhisper]]|Sends chat limited to 10 meters}}&lt;br /&gt;
{{LSL DefineRow||[[llSay]]|Sends chat limited to 20 meters}}&lt;br /&gt;
{{LSL DefineRow||[[llShout]]|Sends chat limited to 100 meters}}&lt;br /&gt;
{{LSL DefineRow||[[llRegionSay]]|Sends chat limited current sim}}&lt;br /&gt;
{{LSL DefineRow||[[llRegionSayTo]]|Sends chat region wide to a specific avatar, or their attachments, or to a rezzed object of known UUID}}&lt;br /&gt;
|also_events={{LSL DefineRow||[[listen]]|}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|haiku=&lt;br /&gt;
 {{Haiku|Choose not much to say|Someone might overhear it|Blab no big secrets}}&lt;br /&gt;
|notes=*Avoid channel zero ([[PUBLIC_CHANNEL]]) and set {{LSLP|name}} or {{LSLP|id}} where possible to avoid lag. &amp;lt;code&amp;gt;llListen(0, &amp;quot;&amp;quot;, NULL_KEY,&amp;quot;&amp;quot;)&amp;lt;/code&amp;gt; can be laggy as it listens to all chat from everyone in chat range and so should be avoided.&lt;br /&gt;
&lt;br /&gt;
*In November 2007, [[User:Kelly_Linden|Kelly Linden]] offered [https://lists.secondlife.com/pipermail/secondlifescripters/2007-November/001993.html this explanation] to help scripters plan listeners more efficiently:&lt;br /&gt;
:#Chat that is said gets added to a history.&lt;br /&gt;
:#A script that is running and has a [[listen]] [[event]] will ask the history for a chat message during its slice of run time.&lt;br /&gt;
:# When the script asks the history for a chat message the checks are done in this order:&lt;br /&gt;
:#* {{LSLP|channel}}&lt;br /&gt;
:#* self chat (prims can&#039;t hear themselves)&lt;br /&gt;
:#* distance/[[llRegionSay|RegionSay]]&lt;br /&gt;
:#* {{LSLP|id}}&lt;br /&gt;
:#* {{LSLP|name}}&lt;br /&gt;
:#* {{LSLP|msg}}&lt;br /&gt;
:# If a {{LSLP|msg}} is found then a [[listen]] [[event]] is added to the [[event]] queue.&lt;br /&gt;
:&lt;br /&gt;
:The {{LSLP|id}}/{{LSLP|name}}/{{LSLP|msg}} checks only happen at all if those are specified of course.&lt;br /&gt;
:&lt;br /&gt;
:So, the most efficient communication method is [[llRegionSay]] on a rarely used {{LSLP|channel}}.&lt;br /&gt;
:Nowadays, [[llRegionSayTo]] is to be preferred, where appropriate.&lt;br /&gt;
*The integer returned can be assigned to a variable (then called a handle) and used to control the listen via [[llListenRemove]] or [[llListenControl]]. These handles are assigned sequentially starting at &amp;lt;tt&amp;gt;+1&amp;lt;/tt&amp;gt; through to &amp;lt;tt&amp;gt;+2,147,483,647&amp;lt;/tt&amp;gt;, going beyond which, according to [[User:Simon Linden|Simon Linden]], will roll the returned integer over to &amp;lt;tt&amp;gt;−2,147,483,648&amp;lt;/tt&amp;gt;, when positive incrementation resumes. If an [[llListen]] is repeated with the exact same filters as a currently active listener, then the same handle number is returned. If an [[llListen|llListen&#039;s]] filters do not match any currently active listener, then the next handle in sequence is allocated (it will not re-allocate a recently removed handle).&lt;br /&gt;
*If you are using multiple listens in one script, each listen can be assigned its own handle with which to control it.&lt;br /&gt;
|caveats=*On [[state]] change or [[llResetScript|script reset]] all listens are removed automatically.&lt;br /&gt;
**A [[state]] change can be used as a shortcut to releasing listens.&lt;br /&gt;
*Only 65 listens can simultaneously be open in any single script.&lt;br /&gt;
**If this number is exceeded &#039;&#039;Script run-time error&#039;&#039; and &#039;&#039;Too Many Listens&#039;&#039; errors occur.&lt;br /&gt;
*For some time, the official SL viewer and several third-party viewers can use negative channels from the chat bar directly just as any other non-zero channel. Formerly, the standard SL viewer could only send chat on negative channels through [[llDialog]] or [[llTextBox]] responses, meaning negative channels were best suited for applications that did not require direct avatar chat.&lt;br /&gt;
*Be aware that if you mistakenly use an integer literal bigger than the maximum or smaller than the minimum, LSL will treat it as -1, &#039;&#039;without&#039;&#039; giving any compilation error. This means that all scripts listening to an out-of-range integer will be listening to channel -1 instead, or if the number has a minus sign in front, to channel 1. A safe rule is to never use more than 9 digits. If the channel number comes from a conversion from float (for example from [[llFrand]]), if the float is out of range for an integer, it will be converted to the number -2147483648 regardless of its sign or value.&lt;br /&gt;
*Messages sent by script on positive and negative channels are truncated to 1024 bytes. Messages sent by chat on positive channels are truncated to 1023 bytes. Messages sent by chat from negative channels are truncated to 254 bytes.&lt;br /&gt;
*Once a [[listen]] is registered its filters cannot be updated, if the listen is registered to [[llGetOwner]], the listen will remain registered to the previous owner upon owner change.&lt;br /&gt;
**[[CHANGED_OWNER|Owner change]] can be detected with the [[changed]] event.&lt;br /&gt;
**To work around this the old listen will need to be closed and a new one opened for the new owner.&lt;br /&gt;
*A prim cannot hear/listen to chat it generates. It can, however, hear a linked prim.&lt;br /&gt;
**Chat indirectly generated (as a result of [[llDialog]], [[llTextBox]] or from a [[Link|linked prim]]) can be heard if in range.&lt;br /&gt;
*You most certainly can listen to [[DEBUG_CHANNEL]], which will allow you to see all script errors no matter where in the [[region]] you are; also, you can raise your own script errors by using [[llSay]] on [[DEBUG_CHANNEL]]; however, remember that others will just see the script errors&amp;lt;sup&amp;gt;&amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;dubious-[[Talk:llListen|discuss]]&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;&amp;lt;/sup&amp;gt; as the hovering &#039;script error&#039; icon — no matter if they&#039;re errors thrown by the scripting engine or your own debugging messages.&lt;br /&gt;
|examples=&lt;br /&gt;
Trivial example to listen to any chat from the object owner and respond once.&lt;br /&gt;
{{{!}} class=&amp;quot;sortable&amp;quot; width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
{{!}}- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Single listen handle&#039;&#039;&#039;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!!}}&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
//  Says beep to owner the first-time owner says something in main chat&lt;br /&gt;
//  and then stops listening&lt;br /&gt;
&lt;br /&gt;
integer listenHandle;&lt;br /&gt;
&lt;br /&gt;
remove_listen_handle()&lt;br /&gt;
{&lt;br /&gt;
    llListenRemove(listenHandle);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
//      Change the channel number to a positive integer &lt;br /&gt;
//      to listen for &#039;/5 hello&#039; style of chat.&lt;br /&gt;
&lt;br /&gt;
//      target only the owner&#039;s chat on channel 0 (PUBLIC_CHANNEL)&lt;br /&gt;
        listenHandle = llListen(0, &amp;quot;&amp;quot;, llGetOwner(), &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    listen(integer channel, string name, key id, string message)&lt;br /&gt;
    {&lt;br /&gt;
//      we filtered to only listen on channel 0&lt;br /&gt;
//      to the owner&#039;s chat in the llListen call above&lt;br /&gt;
&lt;br /&gt;
        llOwnerSay(&amp;quot;beep&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//      stop listening until script is reset&lt;br /&gt;
        remove_listen_handle();&lt;br /&gt;
    }&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;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_OWNER)&lt;br /&gt;
        {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;sortable&amp;quot; width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
{{!}}- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Two listen handles&#039;&#039;&#039;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!!}}&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
//  Opens two listen handles upon touch_start and&lt;br /&gt;
//  stops listening whenever something heard passes either filter&lt;br /&gt;
&lt;br /&gt;
integer listenHandle_a;&lt;br /&gt;
integer listenHandle_b;&lt;br /&gt;
&lt;br /&gt;
remove_listen_handles()&lt;br /&gt;
{&lt;br /&gt;
    llListenRemove(listenHandle_a);&lt;br /&gt;
    llListenRemove(listenHandle_b);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer num_detected)&lt;br /&gt;
    {&lt;br /&gt;
        key    id   = llDetectedKey(0);&lt;br /&gt;
        string name = llDetectedName(0);&lt;br /&gt;
&lt;br /&gt;
        listenHandle_a = llListen(5, &amp;quot;&amp;quot;, id, &amp;quot;&amp;quot;);&lt;br /&gt;
        listenHandle_b = llListen(6, &amp;quot;&amp;quot;, NULL_KEY, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        llSay(0, &amp;quot;Listening now to &#039;&amp;quot; + name + &amp;quot;&#039; on channel 5.&amp;quot;);&lt;br /&gt;
        llSay(0, &amp;quot;Listening now to anybody/anything on channel 6.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    listen(integer channel, string name, key id, string message)&lt;br /&gt;
    {&lt;br /&gt;
        if (channel == 5)&lt;br /&gt;
            llSay(0, name + &amp;quot; said: &#039;/5 &amp;quot; + message + &amp;quot;&#039;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        if (channel == 6)&lt;br /&gt;
            llSay(0, name + &amp;quot; said: &#039;/6 &amp;quot; + message + &amp;quot;&#039;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        remove_listen_handles();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{!}}}&lt;br /&gt;
|cat1=Communications&lt;br /&gt;
|cat2=Chat&lt;br /&gt;
|cat3=Legacy Name/As A Parameter&lt;br /&gt;
|cat4=Error&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:LlListen&amp;diff=1210896</id>
		<title>Talk:LlListen</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:LlListen&amp;diff=1210896"/>
		<updated>2022-07-07T13:15:16Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: /* Debug messages viewable by others? */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== general usage ==&lt;br /&gt;
&lt;br /&gt;
{{QA&lt;br /&gt;
|Q=Does this function have to be called in every state?&lt;br /&gt;
|A=Yes, it&#039;s a feature.&lt;br /&gt;
}}&lt;br /&gt;
{{QA&lt;br /&gt;
|Q=How can i send commands in chat that cannot be seen by others?&lt;br /&gt;
|A=&lt;br /&gt;
{{QA&lt;br /&gt;
|Q=By other avatars?&lt;br /&gt;
|A=Use any channel other then 0 ([[PUBLIC_CHANNEL]]).&lt;br /&gt;
}}&lt;br /&gt;
{{QA&lt;br /&gt;
|Q=By other scripts?&lt;br /&gt;
|A=Can&#039;t keep other scripts from hearing what scripts or avatars say. But you can write complicated channel hopping communications that span the entire range of 4 billion channels, reducing the probability of anyone capturing a complete message.&lt;br /&gt;
}}&lt;br /&gt;
{{QA&lt;br /&gt;
|Q=What [happens] when i do configuration via public channel? There are some scripts that use commands like &#039;/99stop&#039; which cannot be seen in public channel by others&lt;br /&gt;
|A=They can be seen by other scripts, the number at the beginning indicates the channel. &#039;/99stop&#039; sends &#039;stop&#039; on channel 99. That can also be written as &#039;/99 stop&#039; and have the same effect. Any script just has to listen on channel 99 to receive the command.&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Please explain or show examples that explain what the arguments to llListen do.  specific questions: &lt;br /&gt;
&lt;br /&gt;
{{QA&lt;br /&gt;
|Q=What does it mean to filter on name?  is that the name of the speaker?  does it have to be a full exact match, or can it match a substring of the character&#039;s name? (for example, can i filter by &amp;quot;Baroque&amp;quot; or &amp;quot;Ken&amp;quot; rather than &amp;quot;Kendown Baroque&amp;quot;?)&lt;br /&gt;
|A=If you filter by name, the name must match exactly to the speaker. If it does not match in any way then no listen event is raised. There is no support for partial filtering on any of the filters.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{QA&lt;br /&gt;
|Q=similarly, I believe filtering by key means that the ID provided must be that of the speaker; is that correct? &lt;br /&gt;
|A=Correct.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{QA&lt;br /&gt;
|Q=is the message filter case-sensitive?  for that matter, is the name filter?&lt;br /&gt;
|A=The message and name filters are case sensitive; the id filter is not.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{QA&lt;br /&gt;
|Q=What happens if you create a llListen with the exact same filters as a previously set up (and still active) listener?  Does it ignore the second one?  Create two with the same filter?  Or error out?  For instance, I have a case where I set up a listener to listen to a reply to several different dialog commands.  Each command needs to make sure that the listener is open, but ideally, I could just set up the filter without checking to see if it already exists.&lt;br /&gt;
|A=Nothing bad will happen if you open two listens with the same filters or if the filters overlap; only one listen event will be raised. That said, there is a limit to the number of listens you can have open at any one time by a single script (65 per script) which means that opening multiple listens and not doing any form of tracking is very bad.}}&lt;br /&gt;
&lt;br /&gt;
== Performance and Sim impact of llListen ==&lt;br /&gt;
&lt;br /&gt;
I have heard some comments from sim owners that adding too many listens to a sim would either degrade performance, or there is a hard cap limit to the number that can be active. Is there any validity to this? There is also some discussion regarding filtered vs. unfiltered listens. Unfiltered is obviously an easy way to get aroung the 65 listener limit per script (and subsequently the number active on a sim), but may come with an overhead penalty. This seems somewhat counterintuitive as the filtering process should comsume more clock cycles than simply passing everything on a channel (or all channels?) to the script. -- {{User|Melany Lunasea}}&lt;br /&gt;
&lt;br /&gt;
:Listens do impact sim performance. It&#039;s better to have a single listen processing commands coming in on a single channel then it is to have multiple listens open all on the same channel. -- [[User:Strife Onizuka|Strife Onizuka]] 23:13, 8 March 2008 (PST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kelly Linden on 11/13/07 to Scripters mailing list:&lt;br /&gt;
&lt;br /&gt;
  You are pretty close.  The actual order of events is:&lt;br /&gt;
  1. Chat that is said gets added to a history.&lt;br /&gt;
  2. A script that is running and has a listen event will ask the history&lt;br /&gt;
  for a chat message during its slice of run time.&lt;br /&gt;
  3. When the script asks the history for a chat message the checks are&lt;br /&gt;
  done in this order:&lt;br /&gt;
   - channel&lt;br /&gt;
   - self chat (objects can&#039;t hear themselves)&lt;br /&gt;
   - distance/RegionSay&lt;br /&gt;
   - key&lt;br /&gt;
   - name&lt;br /&gt;
   - message&lt;br /&gt;
  4. If a message is found then a listen event is added to the event queue.&lt;br /&gt;
&lt;br /&gt;
  The key/name/message checks only happen at all if those are specified of&lt;br /&gt;
  course.&lt;br /&gt;
&lt;br /&gt;
  So, the most efficient way is llRegionSay on a rarely used channel.&lt;br /&gt;
( above comment by [[User:Winter Seale]] 19:32, 8 February 2009 )&lt;br /&gt;
: Hee, i think i was adding this to the article while you were adding it to the talk page. Now we all know! --[[User:Cerise Sorbet|Cerise Sorbet]] 20:04, 8 February 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Trivia ==&lt;br /&gt;
The listen id can loop similar to a standard integer, such that it may become negative and then theoretically&lt;br /&gt;
overlap. Although it would take months of straight opening/closing. Yes, I did just test this. -.-&lt;br /&gt;
[[User:Gregory Maurer|--Gregory Maurer]] 01:42, 16 January 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Queen&#039;s English ==&lt;br /&gt;
&lt;br /&gt;
Sorry Omei but I highly disagree with your judgement on the matter of the readability and grammar of this page. I would like a couple third-parties to judge the differences first before we keep this reverted. [[User:DonFabuuk Resident|DonFabuuk Resident]] 20:19, 8 December 2013 (PST)&lt;br /&gt;
&lt;br /&gt;
:I mostly ignore grammar changes unless some nuance is lost or it becomes factually inaccurate. Furthermore short of [http://en.wikipedia.org/wiki/Engrish Engrish], I will ignore minor grammar uglinesses unless I can add technical value to the content. I recommend this approach to all editors as it reduces conflict. Preaching done, onto the disputed territory.&lt;br /&gt;
:#&amp;quot;channel &#039;&#039;&#039;channel&#039;&#039;&#039;&amp;quot; - Repetition is repetitive, there isn&#039;t much gained by having it and it&#039;s a bit tacky. I&#039;m more on the side of chucking it then keeping it.&lt;br /&gt;
:#&amp;quot;If {{LSLP|id}} is a valid and not a [[NULL_KEY|null key]] then...&amp;quot; is not grammatical (&amp;quot;is a valid and&amp;quot;?) I think what you meant was &amp;quot;If {{LSLP|id}} is a valid key and not a [[NULL_KEY|null key]] then...&amp;quot;. Part of the reason for making it &amp;quot;[[NULL_KEY|null]] key&amp;quot; vs. &amp;quot;[[NULL_KEY|null key]]&amp;quot; vs. &amp;quot;[[NULL_KEY]]&amp;quot; is that a key can be effectively null without being NULL_KEY.&lt;br /&gt;
:#&amp;quot;the speaker&#039;s key must match exactly.&amp;quot; vs &amp;quot;the speaker&#039;s key must be equivalent.&amp;quot; The thing is, keys aren&#039;t case sensitive in this context. &amp;quot;equivalent&amp;quot; is the better word, however this does bring up the point that we don&#039;t expose this idiosyncrasy of keys anywhere in the documentation. This will have to go on the ToDo list.&lt;br /&gt;
::I&#039;ll accept &#039;equivalent&#039; then [[User:Omei Qunhua|Omei Qunhua]] 01:30, 9 December 2013 (PST)&lt;br /&gt;
:#&amp;quot;If {{LSLP|name}} is set then the speaker&#039;s name; then {{LSLP|name}} must match exactly.&amp;quot; I don&#039;t see what grammar rule makes that work, it&#039;s an odd place to put a pause and using two &amp;quot;then&amp;quot;s in a sentence is kinda passe.&lt;br /&gt;
:I can understand why Omei would not like the changes, they are awkward. In an ideal situation, reverting would only be used when an edit was entirely wrong but this is reality. Normally when a situation like this would happen we (the community, yourself included) would review the final product make any corrections, and fix any awkward parts. If it were a little more obvious what you were trying to achieve with your edit, what nuance you were trying to elucidate, we would fix your edit, but your edit is sufficiently deficient the only way we can make the content make sense again is to revert your changes. I am not in love with the current content, I have no attachment to it, if you could explain what is wrong with it, I will help you change it.&lt;br /&gt;
:-- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:05, 8 December 2013 (PST)&lt;br /&gt;
&lt;br /&gt;
:Being the busy body that I am, I couldn&#039;t leave well enough alone and had to edit the article (I have a cold, I was tired, not a good combination). I hope the changes are acceptable. I am aware the links to key don&#039;t lead anywhere (I&#039;ll work on them later). Any thoughts? -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 10:00, 9 December 2013 (PST)&lt;br /&gt;
&lt;br /&gt;
== Debug messages viewable by others? ==&lt;br /&gt;
&lt;br /&gt;
In this edit [https://wiki.secondlife.com/w/index.php?title=LlListen&amp;amp;curid=3298&amp;amp;diff=1210856&amp;amp;oldid=1209721] it is stated that &amp;lt;i&amp;gt;&amp;quot;you can raise your own script errors by using [[llSay]] on [[DEBUG_CHANNEL]]; however, remember that others will just see the script errors as the hovering &#039;script error&#039; icon&amp;quot;.&amp;lt;/i&amp;gt; That&#039;s not true for my viewer, which filters out debug messages coming from scripts in objects that I don&#039;t own. Is there any modern viewer for which that sentence is correct? If not, it should be removed. --[[User:Sei Lisa|Sei Lisa]] ([[User talk:Sei Lisa|talk]]) 06:15, 7 July 2022 (PDT)&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LSL_Style_Guide&amp;diff=1210830</id>
		<title>LSL Style Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LSL_Style_Guide&amp;diff=1210830"/>
		<updated>2022-06-12T11:52:56Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: /* Script Structure */ Variables do not need to come before UDFs; mention event handlers as a mandatory part of states&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header|ml=*}}{{RightToc}}&lt;br /&gt;
&lt;br /&gt;
Every major open-source project has its own style guide: a &#039;&#039;&#039;set of conventions&#039;&#039;&#039; (sometimes arbitrary) about how to write code for that project. It is much easier to understand a large codebase when all the code in it is in a &#039;&#039;&#039;consistent style&#039;&#039;&#039;. These guidelines, referred to collectively as a Style Guide, are not as rigid as the rules required by the language compiler but nonetheless are critical to creating maintainable code. The most critical aspect of a style is that you apply it consistently to the code you write.&lt;br /&gt;
&lt;br /&gt;
Effective programming in [[LSL Portal|LSL]] requires that developers use a disciplined approach towards formatting and other conventions in their scripts.&lt;br /&gt;
&lt;br /&gt;
{{LSL Tip| Applying a style guide to your code does not only help others read your code. &#039;&#039;&#039;It helps you as well&#039;&#039;&#039;, because in future when you return to the code you wrote before, you&#039;ll appreciate reading formatted and annotated code.}}&lt;br /&gt;
&lt;br /&gt;
== Use third party editors: ==&lt;br /&gt;
&lt;br /&gt;
There are many [[LSL Alternate Editors|third party editors]] with [[LSL Portal|LSL]] syntax files available. See an example below of what your workflow would look like using an editor that has syntax highlighting and autocomplete and also applies an indent style to your code.&lt;br /&gt;
&lt;br /&gt;
Using [[LSL Alternate Editors|third party editors]] has a few advantages over using the editor in the viewers:&lt;br /&gt;
* Autocompletion helps you avoid typos.&lt;br /&gt;
* Autocompletion sometimes not only does a linear autocompletion as in autocompleting &amp;lt;code&amp;gt;llS&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;llSay&amp;lt;/code&amp;gt; but sometimes works even with fuzzy search by autocompleting &amp;lt;code&amp;gt;llslppf&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;llSetLinkPrimitiveParamsFast&amp;lt;/code&amp;gt;.&lt;br /&gt;
* The syntax highlighting file colors the code exactly like the code you see in the official Linden Lab viewer making you not having to learn or adapt to a different coloring scheme.&lt;br /&gt;
* Autocompletion might also preformat code with indent styles when autocompleting states, events, conditional clauses etc.&lt;br /&gt;
&lt;br /&gt;
== [http://en.wikipedia.org/wiki/Indent_style Indent styles]: ==&lt;br /&gt;
&lt;br /&gt;
Most people, when they start programming on their own, will have programs that are UGLY to look at - to put it nicely, sometimes mistakenly thinking that such scripts occupy less space when compiled. Such scripts typically look like the following:&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;unstyled source code&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;default {state_entry(){llSay(0,&amp;quot;Hello World.&amp;quot;);}}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
However, that code is difficult to read (or at least to &#039;&#039;&#039;follow&#039;&#039;&#039;) - even more so when one is writing a couple hundred lines program. There are several [http://en.wikipedia.org/wiki/Indent_style indent styles] with the two most common styles being:&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;[http://en.wikipedia.org/wiki/Indent_style#K.26R_style K&amp;amp;R style] (used in Javascript based languages)&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;[http://en.wikipedia.org/wiki/Indent_style#Allman_style Allman style] (used in C based languages)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
default {&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        llSay(0, &amp;quot;Hello World.&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;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0, &amp;quot;Hello World.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;K&amp;amp;R style&#039;&#039;&#039; conserves space - IN THE SOURCE CODE ONLY, however the &#039;&#039;&#039;Allman style&#039;&#039;&#039; is easier to read and easier to visually bracket-match. Once a scripter is in the practice of using a particular style, reading code in that style will become easier.&lt;br /&gt;
&lt;br /&gt;
Consistent indenting makes reading both styles easier that&#039;s why it &#039;&#039;&#039;really comes down to whatever works for you&#039;&#039;&#039;. In both methods, indenting is the key indicating factor of levels of scope.&lt;br /&gt;
&lt;br /&gt;
== Naming conventions: ==&lt;br /&gt;
&lt;br /&gt;
There are many naming conventions in Second Life. Only the most used ones will be listed below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Global Variables (variables used throughout the entire program) should be lowercase. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer index = 0;&lt;br /&gt;
string  name  = &amp;quot;Please set one&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Others prefer to distinguish between global and local variables by prefixing variable names with a character, defining globals in the following manner:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer gIndex;&lt;br /&gt;
string  gName  = &amp;quot;Please set one&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Constant variables should be in ALL CAPS following the style guide used by Linden Labs. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer DIALOG_CHANNEL = -517265;&lt;br /&gt;
vector  RED            = &amp;lt;1.0, 0.0, 0.0&amp;gt;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments used within a [[Category:LSL User-Defined Functions|user defined function]] or one of the standard [[Event|events]] should be named with &#039;&#039;&#039;easily readable and meaningful&#039;&#039;&#039; names. When using [[Event|events]], please use the standard names as listed here on the official wiki. An [[Event|overview of all events can be found here]]. Below is an example as can be found for the [[Listen|listen event]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
//  ...&lt;br /&gt;
&lt;br /&gt;
    listen(integer channel, string name, key id, string message)&lt;br /&gt;
    {&lt;br /&gt;
        key OwnerKey = llGetOwner();&lt;br /&gt;
    &lt;br /&gt;
        if (channel == 1 &amp;amp;&amp;amp; id == OwnerKey)&lt;br /&gt;
            llOwnerSay(&amp;quot;Hello Avatar&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
//  ...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Separating code: ==&lt;br /&gt;
Some people put too many function calls on one line. As shown in this example, too many function calls on a single line makes the code hard to read and almost impossible to debug.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
list    lst;&lt;br /&gt;
integer NUM_DIGITS = 10;&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    touch_start(integer n) {&lt;br /&gt;
        string name = llToLower(llGetSubString(llList2String(llParseString2List(llDetectedName(0), [&amp;quot; &amp;quot;], []), 0), 0, NUM_DIGITS - 1));&lt;br /&gt;
        if (!~llListFindList(lst, (list)name))&lt;br /&gt;
            lst += name;&lt;br /&gt;
//      send a message to the owner, only reaches owner if online and within the same sim&lt;br /&gt;
        llOwnerSay(llList2CSV(lst));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now here is the code, with the exact same features, in a simpler way. While hardly anyone could tell you what the above code did, almost everyone can figure out what the below code does.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
list    listOfStrings;&lt;br /&gt;
integer NUM_DIGITS = 10;&lt;br /&gt;
&lt;br /&gt;
default &lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer n) &lt;br /&gt;
    {&lt;br /&gt;
        string  name       = llDetectedName(0);&lt;br /&gt;
        list    nameAsList = llParseString2List(name, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        string  firstName  = llList2String(nameAsList, 0);&lt;br /&gt;
        string  startPart  = llToLower(llGetSubString(firstName, 0, NUM_DIGITS - 1));&lt;br /&gt;
        integer index      = llListFindList(listOfStrings, [startPart]);&lt;br /&gt;
&lt;br /&gt;
        if (index == -1)&lt;br /&gt;
            listOfStrings += startPart;&lt;br /&gt;
&lt;br /&gt;
//      send a message to the owner, only reaches owner if online and within the same sim&lt;br /&gt;
        llOwnerSay(llList2CSV(listOfStrings));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LSL lacks an optimizing compiler. For this reason, it may be necessary to balance the two styles to get faster, more compact executable code. Line combination optimization should only be done after the code is working &amp;amp; bug free. Improper optimization can lead to wrong results. Always test optimized code thoroughly.&lt;br /&gt;
&lt;br /&gt;
==Script Structure==&lt;br /&gt;
LSL scripts are comprised of expressions, functions, statements, event handlers and states. The LSL compiler mandates a certain structure to scripts:&lt;br /&gt;
&lt;br /&gt;
#User Defined Variables and Functions (see [[LSL Variables]] and [[User-defined functions]])&lt;br /&gt;
#[[default]] State  (see [[State]]) with at least one [[LSL Events|Event Handler]].&lt;br /&gt;
#User Defined States, each with at least one Event Handler.&lt;br /&gt;
&lt;br /&gt;
==LSL Portal Style==&lt;br /&gt;
&lt;br /&gt;
Here in the [[LSL Portal]] we expect consistent white-spacing, and it should look similar to either &#039;&#039;&#039;K&amp;amp;R&#039;&#039;&#039; or &#039;&#039;&#039;Allman&#039;&#039;&#039;. We do not require strict adherence to either. We do not use tabs (as they take up an exorbitant amount of screen space) but some number of spaces, usually between 2 and 6, 4 being the most popular value and the value you will see almost everywhere. Generally speaking, it&#039;s taboo to edit an article just to fix the white-spacing, unless it&#039;s inconsistent (the edit should make it consistent, it should not change the style). Generally speaking, it&#039;s taboo to edit an article to change the style. Exceptions do exist, if you are making substantial changes to most of the code in the article, and it makes sense to change the style of the rest of the code (such that it all matches), you may do so. The purpose of this restriction is to keep the peace, some people are really quite attached to their style. Considering that style is a personal preference of little consequence, nothing is gained by forcing one style onto the community, especially when they will go ahead and use whatever style they want disregarding what we mandate. When in doubt or conflict please use the discussion page, a majority are monitored and will be responded to.&lt;br /&gt;
&lt;br /&gt;
If you find yourself desiring to make small changes to white-space despite it being frowned upon, we will ask you to first consider adding an example to one of the articles that [[:Category:LSL_Needs_Example|needs an example]] or is missing some [[:Category:LSL FixMe|key content]].&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LSL_Style_Guide&amp;diff=1210829</id>
		<title>LSL Style Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LSL_Style_Guide&amp;diff=1210829"/>
		<updated>2022-06-12T11:41:42Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: /* Separating code: */ Fix the examples&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header|ml=*}}{{RightToc}}&lt;br /&gt;
&lt;br /&gt;
Every major open-source project has its own style guide: a &#039;&#039;&#039;set of conventions&#039;&#039;&#039; (sometimes arbitrary) about how to write code for that project. It is much easier to understand a large codebase when all the code in it is in a &#039;&#039;&#039;consistent style&#039;&#039;&#039;. These guidelines, referred to collectively as a Style Guide, are not as rigid as the rules required by the language compiler but nonetheless are critical to creating maintainable code. The most critical aspect of a style is that you apply it consistently to the code you write.&lt;br /&gt;
&lt;br /&gt;
Effective programming in [[LSL Portal|LSL]] requires that developers use a disciplined approach towards formatting and other conventions in their scripts.&lt;br /&gt;
&lt;br /&gt;
{{LSL Tip| Applying a style guide to your code does not only help others read your code. &#039;&#039;&#039;It helps you as well&#039;&#039;&#039;, because in future when you return to the code you wrote before, you&#039;ll appreciate reading formatted and annotated code.}}&lt;br /&gt;
&lt;br /&gt;
== Use third party editors: ==&lt;br /&gt;
&lt;br /&gt;
There are many [[LSL Alternate Editors|third party editors]] with [[LSL Portal|LSL]] syntax files available. See an example below of what your workflow would look like using an editor that has syntax highlighting and autocomplete and also applies an indent style to your code.&lt;br /&gt;
&lt;br /&gt;
Using [[LSL Alternate Editors|third party editors]] has a few advantages over using the editor in the viewers:&lt;br /&gt;
* Autocompletion helps you avoid typos.&lt;br /&gt;
* Autocompletion sometimes not only does a linear autocompletion as in autocompleting &amp;lt;code&amp;gt;llS&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;llSay&amp;lt;/code&amp;gt; but sometimes works even with fuzzy search by autocompleting &amp;lt;code&amp;gt;llslppf&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;llSetLinkPrimitiveParamsFast&amp;lt;/code&amp;gt;.&lt;br /&gt;
* The syntax highlighting file colors the code exactly like the code you see in the official Linden Lab viewer making you not having to learn or adapt to a different coloring scheme.&lt;br /&gt;
* Autocompletion might also preformat code with indent styles when autocompleting states, events, conditional clauses etc.&lt;br /&gt;
&lt;br /&gt;
== [http://en.wikipedia.org/wiki/Indent_style Indent styles]: ==&lt;br /&gt;
&lt;br /&gt;
Most people, when they start programming on their own, will have programs that are UGLY to look at - to put it nicely, sometimes mistakenly thinking that such scripts occupy less space when compiled. Such scripts typically look like the following:&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;unstyled source code&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;default {state_entry(){llSay(0,&amp;quot;Hello World.&amp;quot;);}}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
However, that code is difficult to read (or at least to &#039;&#039;&#039;follow&#039;&#039;&#039;) - even more so when one is writing a couple hundred lines program. There are several [http://en.wikipedia.org/wiki/Indent_style indent styles] with the two most common styles being:&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;[http://en.wikipedia.org/wiki/Indent_style#K.26R_style K&amp;amp;R style] (used in Javascript based languages)&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;[http://en.wikipedia.org/wiki/Indent_style#Allman_style Allman style] (used in C based languages)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
default {&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        llSay(0, &amp;quot;Hello World.&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;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0, &amp;quot;Hello World.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;K&amp;amp;R style&#039;&#039;&#039; conserves space - IN THE SOURCE CODE ONLY, however the &#039;&#039;&#039;Allman style&#039;&#039;&#039; is easier to read and easier to visually bracket-match. Once a scripter is in the practice of using a particular style, reading code in that style will become easier.&lt;br /&gt;
&lt;br /&gt;
Consistent indenting makes reading both styles easier that&#039;s why it &#039;&#039;&#039;really comes down to whatever works for you&#039;&#039;&#039;. In both methods, indenting is the key indicating factor of levels of scope.&lt;br /&gt;
&lt;br /&gt;
== Naming conventions: ==&lt;br /&gt;
&lt;br /&gt;
There are many naming conventions in Second Life. Only the most used ones will be listed below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Global Variables (variables used throughout the entire program) should be lowercase. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer index = 0;&lt;br /&gt;
string  name  = &amp;quot;Please set one&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Others prefer to distinguish between global and local variables by prefixing variable names with a character, defining globals in the following manner:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer gIndex;&lt;br /&gt;
string  gName  = &amp;quot;Please set one&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Constant variables should be in ALL CAPS following the style guide used by Linden Labs. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer DIALOG_CHANNEL = -517265;&lt;br /&gt;
vector  RED            = &amp;lt;1.0, 0.0, 0.0&amp;gt;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments used within a [[Category:LSL User-Defined Functions|user defined function]] or one of the standard [[Event|events]] should be named with &#039;&#039;&#039;easily readable and meaningful&#039;&#039;&#039; names. When using [[Event|events]], please use the standard names as listed here on the official wiki. An [[Event|overview of all events can be found here]]. Below is an example as can be found for the [[Listen|listen event]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
//  ...&lt;br /&gt;
&lt;br /&gt;
    listen(integer channel, string name, key id, string message)&lt;br /&gt;
    {&lt;br /&gt;
        key OwnerKey = llGetOwner();&lt;br /&gt;
    &lt;br /&gt;
        if (channel == 1 &amp;amp;&amp;amp; id == OwnerKey)&lt;br /&gt;
            llOwnerSay(&amp;quot;Hello Avatar&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
//  ...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Separating code: ==&lt;br /&gt;
Some people put too many function calls on one line. As shown in this example, too many function calls on a single line makes the code hard to read and almost impossible to debug.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
list    lst;&lt;br /&gt;
integer NUM_DIGITS = 10;&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    touch_start(integer n) {&lt;br /&gt;
        string name = llToLower(llGetSubString(llList2String(llParseString2List(llDetectedName(0), [&amp;quot; &amp;quot;], []), 0), 0, NUM_DIGITS - 1));&lt;br /&gt;
        if (!~llListFindList(lst, (list)name))&lt;br /&gt;
            lst += name;&lt;br /&gt;
//      send a message to the owner, only reaches owner if online and within the same sim&lt;br /&gt;
        llOwnerSay(llList2CSV(lst));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now here is the code, with the exact same features, in a simpler way. While hardly anyone could tell you what the above code did, almost everyone can figure out what the below code does.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
list    listOfStrings;&lt;br /&gt;
integer NUM_DIGITS = 10;&lt;br /&gt;
&lt;br /&gt;
default &lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer n) &lt;br /&gt;
    {&lt;br /&gt;
        string  name       = llDetectedName(0);&lt;br /&gt;
        list    nameAsList = llParseString2List(name, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        string  firstName  = llList2String(nameAsList, 0);&lt;br /&gt;
        string  startPart  = llToLower(llGetSubString(firstName, 0, NUM_DIGITS - 1));&lt;br /&gt;
        integer index      = llListFindList(listOfStrings, [startPart]);&lt;br /&gt;
&lt;br /&gt;
        if (index == -1)&lt;br /&gt;
            listOfStrings += startPart;&lt;br /&gt;
&lt;br /&gt;
//      send a message to the owner, only reaches owner if online and within the same sim&lt;br /&gt;
        llOwnerSay(llList2CSV(listOfStrings));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LSL lacks an optimizing compiler. For this reason, it may be necessary to balance the two styles to get faster, more compact executable code. Line combination optimization should only be done after the code is working &amp;amp; bug free. Improper optimization can lead to wrong results. Always test optimized code thoroughly.&lt;br /&gt;
&lt;br /&gt;
==Script Structure==&lt;br /&gt;
LSL scripts are comprised of expressions, functions, statements, event handlers and states. The LSL compiler mandates a certain structure to scripts:&lt;br /&gt;
&lt;br /&gt;
#User Defined Variables  (see [[LSL_Variables]])&lt;br /&gt;
#User Defined Functions (see [[User-defined_functions]])&lt;br /&gt;
#[[default]] State  (see [[State]])&lt;br /&gt;
#User Defined States&lt;br /&gt;
&lt;br /&gt;
==LSL Portal Style==&lt;br /&gt;
&lt;br /&gt;
Here in the [[LSL Portal]] we expect consistent white-spacing, and it should look similar to either &#039;&#039;&#039;K&amp;amp;R&#039;&#039;&#039; or &#039;&#039;&#039;Allman&#039;&#039;&#039;. We do not require strict adherence to either. We do not use tabs (as they take up an exorbitant amount of screen space) but some number of spaces, usually between 2 and 6, 4 being the most popular value and the value you will see almost everywhere. Generally speaking, it&#039;s taboo to edit an article just to fix the white-spacing, unless it&#039;s inconsistent (the edit should make it consistent, it should not change the style). Generally speaking, it&#039;s taboo to edit an article to change the style. Exceptions do exist, if you are making substantial changes to most of the code in the article, and it makes sense to change the style of the rest of the code (such that it all matches), you may do so. The purpose of this restriction is to keep the peace, some people are really quite attached to their style. Considering that style is a personal preference of little consequence, nothing is gained by forcing one style onto the community, especially when they will go ahead and use whatever style they want disregarding what we mandate. When in doubt or conflict please use the discussion page, a majority are monitored and will be responded to.&lt;br /&gt;
&lt;br /&gt;
If you find yourself desiring to make small changes to white-space despite it being frowned upon, we will ask you to first consider adding an example to one of the articles that [[:Category:LSL_Needs_Example|needs an example]] or is missing some [[:Category:LSL FixMe|key content]].&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:LSL_Style_Guide&amp;diff=1210828</id>
		<title>Talk:LSL Style Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:LSL_Style_Guide&amp;diff=1210828"/>
		<updated>2022-06-12T11:33:02Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Reply to Gwyneth&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Changes to the Style Guide==&lt;br /&gt;
I would like to propose that any amendments to the style guide page should FIRST be discussed and approved by others here in this discussion page. Otherwise we can have individuals imposing their eccentric practices willy-nilly. [[User:Omei Qunhua|Omei Qunhua]] 04:35, 24 December 2013 (PST)&lt;br /&gt;
&lt;br /&gt;
:Yeah. The latest change is a prime example of this. It will take some work to neuter it. I don&#039;t want to outright revert it. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 19:22, 6 September 2014 (PDT)&lt;br /&gt;
&lt;br /&gt;
::Reverting it is a good starting point. From there, the additions can be discussed, as they should have been in the first place, and the relevant parts added. --[[User:Pedro Oval|Pedro Oval]] 10:33, 7 September 2014 (PDT)&lt;br /&gt;
&lt;br /&gt;
==Script Formatting==&lt;br /&gt;
I&#039;ve recently looked more at ways to keep SL scripts easily readable, and I found that good formatting can be a very positive influence on readability.&lt;br /&gt;
Would it be worthwhile to advertise it? basic example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl&amp;quot;&amp;gt;integer number = 14;&lt;br /&gt;
string something = &amp;quot;test&amp;quot;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
and instead, with formatting:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl&amp;quot;&amp;gt;integer number    = 14;&lt;br /&gt;
string  something = &amp;quot;test&amp;quot;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
I personally find this a lot faster to take in, and this might be good to pick up for the wiki, possibly making the code pieces here easier readable for the beginning scripter.&lt;br /&gt;
especially the article on [[LSL_Variables|variables]] has a block of definitions right at the start, for example, which is a bit confusing to read, but significantly improved by formatting - compare to earlier versions, I went and formatted the text, which, imho, greatly helped readability in that particular case. feel free to revert if theres issues, I consider it a good improvement however, and wouldnt mind bringing more articles to that kind of formatting style if its approved on.&lt;br /&gt;
its a thought i wanted to throw in here, and might improve the experience for the readers in general.&lt;br /&gt;
&lt;br /&gt;
[[User:Psistorm Ikura|Psistorm Ikura]] 15:28, 15 April 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I agree with the above,and illustrate it further here, tho&#039; I would have my doubts that others could be persuaded to follow suit. Rigorous alignment makes it so much easier to take in the code&#039;s effects quickly. I also prefer to have a space following any comma, for readability. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
string    name    = &amp;quot;The Name&amp;quot;;&lt;br /&gt;
integer   index   = 1;&lt;br /&gt;
list      days    = [&amp;quot;Mon&amp;quot;, &amp;quot;Tue&amp;quot;, &amp;quot;Wed&amp;quot;, &amp;quot;Thu&amp;quot;, &amp;quot;Fri&amp;quot;, &amp;quot;Sat&amp;quot;];&lt;br /&gt;
rotation  MyRot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    if      (msg == &amp;quot;Vol+&amp;quot;)          ++gVol;&lt;br /&gt;
    else if (msg == &amp;quot;Vol-&amp;quot;)          --gVol;  &lt;br /&gt;
 &lt;br /&gt;
    else if (msg == &amp;quot;Red&amp;quot;)           gColour = &amp;lt;1, 0, 0&amp;gt;;&lt;br /&gt;
    else if (msg == &amp;quot;Green&amp;quot;)         gColour = &amp;lt;0, 1, 0&amp;gt;;&lt;br /&gt;
    else if (msg == &amp;quot;Blue&amp;quot;)          gColour = &amp;lt;0, 0, 1&amp;gt;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[User:Omei Qunhua|Omei Qunhua]] 04:35, 24 December 2013 (PST)&lt;br /&gt;
&lt;br /&gt;
:::Space following comma: Good. Putting your conditional execution blocks on the same line as your condition: THE GOGGLES! THEY DO NOTHING! I just find the latter makes my brain itch. It complicates the parsing for me. That said, it&#039;s a personal preference thing... and I would have trouble not going through and putting them on their own line. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 01:43, 25 December 2013 (PST)&lt;br /&gt;
&lt;br /&gt;
:But it&#039;s soooooo beautiful! Like a mini-database, the columnar nature giving it such regularity, such clarity, such a poetic architectural feel! The format you wants breaks up the logic unnecessarily, confusing the eye. But then ... I&#039;ve only been programming for 52 years. (I have to pull that one out from time to time ^^ ) [[User:Omei Qunhua|Omei Qunhua]] 16:16, 26 December 2013 (PST)&lt;br /&gt;
&lt;br /&gt;
::It makes me think of Basic when I see it (QBasic actually) where THEN is like &amp;quot;{&amp;quot;, and ENDIF is like &amp;quot;}&amp;quot;. If there wasn&#039;t a new line following your THEN you don&#039;t need an ENDIF and you give the appearance of an unclosed block.&lt;br /&gt;
::I&#039;ve come up with a reason for why I shouldn&#039;t like it. It has to do with Order of Execution in LSL, which is to say, it is backwards. Every other language I have seen executes the left operand first and then the right, LSL is the complete opposite, which means that you execute statements right to left. If your expression has side-effects, they will happen in right to left order (though a literal list elements expressions and function parameter expressions are executed in left to right order (though the actual execution of each expression is still executed in right to left order)). This means a paranoid LSL scripter reads their expressions right to left, and if you place two expressions on the same line, you run the risk of reading the later expressions before it should be read. I don&#039;t think (but I could be wrong) this really describes how I work. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 23:45, 26 December 2013 (PST)&lt;br /&gt;
&lt;br /&gt;
==Script Structure==&lt;br /&gt;
Mandating event order seems a little retentive to me. I don&#039;t think any scripter who is going to post code onto the wiki is going to be keen on rewriting their code to fit the pattern. Being flexible to other scripters styles is a key to success (especially with regards to collaborative projects). They should be grouped in a fashion that makes sense to the script and scripter. Seeing as this section is going to be a hot topic, maybe it shouldn&#039;t be included or make it very short? [[User:Strife Onizuka|Strife Onizuka]] 22:29, 14 February 2007 (PST)&lt;br /&gt;
: I agree that mandating event order would be a pain in the ass.&lt;br /&gt;
: I personally put events in the order they&#039;re first used throughout the process of a script&#039;s life cycle.&lt;br /&gt;
: If a Resident is learning to script from a [[:Category:LSL Mentors|mentor]] or [[:Category:LSL Teachers|teacher]], they&#039;re likely to be using snippets of code they&#039;re sent in-world. For them to see a different structure in LSL Library code would be confusing&lt;br /&gt;
:[[User:SignpostMarv Martin|SignpostMarv Martin]] 05:44, 15 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
::Residents start with the default &amp;quot;Hello World&amp;quot; script with touch event. Finding the Wiki examples at odds with that script (through the use of PUBIC_CHANNEL for example) will be confusing for them The Wiki should follow the pattern of the vast majority, unless it&#039;s clearly wrong in some way. [[User:Omei Qunhua|Omei Qunhua]] 04:35, 24 December 2013 (PST)&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039; Re: General Guidelines&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Would suggest that the virtues of the second style shown be amended.  Saving space is a pointless exercise if LSL code is truly compiled rather than interpreted.  The overhead needed to compile a few extra carriage returns has to be trivial in all but the most monumentally huge scripts.&lt;br /&gt;
&lt;br /&gt;
Second virtue of the &amp;quot;parallel brackets&amp;quot; style (the second type shown) is that the nesting of logical modules is far more clear, and is effectively a form of self-documentation that is often more effective than text comments, especially when code is likely to be rewritten, revised or adapted to another purpose by individuals other than the original author.  It can even help the original author understand her own code better, faster, if she is returning to a bit of code written in the relatively dim past.&lt;br /&gt;
&lt;br /&gt;
Would take a shot at saying this more concisely, but first want to see if there are other views that should also be reflected in any revision to the text.  &lt;br /&gt;
&lt;br /&gt;
This is my first contribution here.  Please forgive any unintentional breeches of protocol and etiquette.&lt;br /&gt;
--[[User:Azadine Umarov|Azadine Umarov]] 17:49, 7 May 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
: Good comment. Bracketing style is an old debate in programing (20 years at least). Both styles have their advantages as long as the scripter is consistent with the style they pick. The key in programing is consistency in style, not so much what the style is. -- [[User:Strife Onizuka|Strife Onizuka]] 12:11, 8 May 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
:: I wonder if we should just show the two ways of bracketing and let the readers decide which to use, with out giving any description of which one is &amp;quot;Better&amp;quot;, even though everyone knows the brackets go on the same line as the code. ;P [[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
&lt;br /&gt;
== Some of my pet peeves with this article... ==&lt;br /&gt;
&lt;br /&gt;
Hey there, fellow LSLwiktors!&lt;br /&gt;
&lt;br /&gt;
So, I&#039;ve done the unthinkable: edited the Style Guide &#039;&#039;without discussing it first&#039;&#039;. 😅&lt;br /&gt;
&lt;br /&gt;
Rest assured, everything is just a simple revert away. Also, essentially, I get annoyed by an article being flagged for using the obsolete &amp;lt;code&amp;gt;&amp;lt;source&amp;gt;&amp;lt;/code&amp;gt; tag, so I simply change it to the current &amp;lt;code&amp;gt;&amp;lt;syntaxhighlight&amp;gt;&amp;lt;/code&amp;gt; tag instead. Why? Well, I actually &#039;&#039;like&#039;&#039; the &amp;lt;code&amp;gt;&amp;lt;source&amp;gt;&amp;lt;/code&amp;gt; tag more. Long story, but I come from the days when SGML/HTML tags were about &#039;&#039;structure&#039;&#039;, not &#039;&#039;visual rendering&#039;&#039; — &amp;lt;code&amp;gt;&amp;lt;source&amp;gt;&amp;lt;/code&amp;gt; &#039;&#039;describes&#039;&#039; the content within those tags (it&#039;s source code!), while &amp;lt;code&amp;gt;&amp;lt;syntaxhighlight&amp;gt;&amp;lt;/code&amp;gt; implies a specific type of rendering; it would be something to avoid in Ye Olde Days and banned to [[the Corn Field]] together with the [https://www.w3docs.com/learn-html/html-blink-tag.html &amp;lt;code&amp;gt;&amp;lt;blink&amp;gt;&amp;lt;/code&amp;gt;] tag and similar Cthulhuesque abominations.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Colon after section headers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Personally, I dislike the colons at the end of some of the headers; they look terrible on the ToC. But this is a matter of personal opinion. So, I suggest that either &#039;&#039;all&#039;&#039; headers have colons at the end (for consistency&#039;s sake), or &#039;&#039;none&#039;&#039; have colons, just like all other headers in the Wiki. A third alternative would be disabling the ToC, to get rid of those annoying violation of æsthetic rules...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Use third party editors&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Regarding this section, I propose a very slight (but reasonable!) change, namely, adding that one advantage &#039;&#039;today&#039;&#039; of 3rd-party editors is that it&#039;s far easier (and faster) to edit long sections of code, and just keep loading and saving the file from/to the local disk.&lt;br /&gt;
&lt;br /&gt;
Under the Firestorm Viewer, it&#039;s even better — you can open the script &#039;&#039;directly&#039;&#039; on an external editor, and, when saving, you get a button to save directly to that external file; conversely, you can do all your edits on the external editor, and, when saving, those changes will immediately reflect on the in-world LSL script (at least, that&#039;s the result from my experiments).&lt;br /&gt;
&lt;br /&gt;
The ability to integrate with a 3rd-party editor so closely means that, in areas with high lag, you can continue to do all your scripting in the &#039;&#039;external?? editor — thus, not being subjected to the fickleness of the built-in LSL editor, which will become more and more lagged, so far as conditions continue to deteriorate in the region. It takes not much lag to reach a certain threshold that makes scripting inside SL a prefect nightmare... while external editors, of course, are not affected by in-world lag.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LSL lacks an optimizing compiler.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Are we really sure about this? It&#039;s just because that LL originally used their own, home-grown interpreter/compiler for [[LSO]] bytecode, which was deemed not to be very good at its job. Nowadays, however, I would say that the Mono compiler makes a respectable job of optimizing things, and, as such, this comment should be revised/redacted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fixing old-style &amp;lt;code&amp;gt;&amp;lt;lsl&amp;gt;&amp;lt;/code&amp;gt; tags in the &#039;&#039;comments&#039;&#039; section&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I felt tempted, for more than once, to break the Wiki taboo of &#039;never changing someone else&#039;s comments&#039;, but decided to ask first. :)&lt;br /&gt;
&lt;br /&gt;
Here is my dilemma: on this talk page, there are a few examples that are of historic value, they came from the earlier Wiki, which used the tag &amp;lt;code&amp;gt;&amp;lt;lsl&amp;gt;&amp;lt;/code&amp;gt; to do the syntax highlighting. This tag does not work anymore under the current MediaWiki version. As a consequence, those examples, which illustrate some formatting styles, are next to unreadable.&lt;br /&gt;
&lt;br /&gt;
I therefore propose to (exceptionally) allow these to be edited in order to show those lines of code in context, formatted according to what the original intention of the commenter was. But this is a violation of the trust they placed in the community, that nobody would change their comments, no matter what.&lt;br /&gt;
&lt;br /&gt;
What do you think?&lt;br /&gt;
&lt;br /&gt;
— [[User:Gwyneth Llewelyn|Gwyneth Llewelyn]] ([[User talk:Gwyneth Llewelyn|talk]]) 02:37, 15 April 2022 (PDT)&lt;br /&gt;
&lt;br /&gt;
:I&#039;m neutral about most of your post and won&#039;t comment on it. Things have changed since Linden Lab made the wiki closed due to a fierce spam attack some years ago, and there&#039;s very few people remaining to enforce any rules. I totally agree that editing &amp;amp;lt;lsl&amp;gt; tags is clearly an exception to the rule not to edit anyone&#039;s comments; I&#039;ve gone ahead and made that change.&lt;br /&gt;
&lt;br /&gt;
:What I can tell you for sure is that LSL &#039;&#039;does&#039;&#039; indeed lack an optimizing compiler. That&#039;s the very reason why [http://lsl.blacktulip-virtual.com/lsl-pyoptimizer/ LSL-PyOptimizer] exists. It optimizes for size only and is designed for Mono only; for LSO it can make programs grow instead of reduce in size, or even stop working due to triggering LSO bugs. The point is that Mono is definitively affected. I studied Mono bytecode in depth while writing the optimizer, and was horrified by what I found.&lt;br /&gt;
&lt;br /&gt;
:Linden Lab&#039;s compiler generates bytecode for basically everything you write, except labels. Even the &#039;&#039;names&#039;&#039; of global variables, functions, events, parameters or states use up code memory; only the names of local variables and labels are free from that madness. Given the 64KB limit imposed to Mono scripts, saving memory is crucial for some applications.&lt;br /&gt;
&lt;br /&gt;
:Anyway, the example about optimization vs readability is crap and I&#039;m going to edit it. It declares a variable and then uses it without assigning any value to it; it assigns a long expression to another variable that it doesn&#039;t use either, and repeats a long common subexpression twice that anyone would realize is wasting, rather than saving, memory. It also uses llKey2Name(llDetectedKey(x)) instead of llDetectedName(x); if it&#039;s an example of the loss of readability when optimizing code, it&#039;s not a good example of such optimization.&lt;br /&gt;
&lt;br /&gt;
:--[[User:Sei Lisa|Sei Lisa]] ([[User talk:Sei Lisa|talk]]) 04:33, 12 June 2022 (PDT)&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:UUID&amp;diff=1210413</id>
		<title>Talk:UUID</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:UUID&amp;diff=1210413"/>
		<updated>2022-02-02T00:52:39Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: /* UUIDs are v4... or not!? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;RFC specification website is changed. Link appears to want https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.3&lt;br /&gt;
&lt;br /&gt;
== UUIDs are v4... or not!? ==&lt;br /&gt;
&lt;br /&gt;
This page claims:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;SL uses Version 4 UUIDs as defined in RFC-4122, though there are some that are not V4.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Except for &amp;lt;code&amp;gt;NULL_KEY&amp;lt;/code&amp;gt; (which is separately defined in RFC-4122), what are those UUIDs that are not V4? Where are they used? When were they generated, and for which purpose? What version do they conform to, if not 4?&lt;br /&gt;
&lt;br /&gt;
The issue is only important for me to validate UUIDs coming from SL and making sure they conform to whatever UUID specification SL uses. The statement on this page implies that SL uses UUIDs from different sources, possibly different versions, and possibly even UUIDs which are not technically UUIDs (as understood by RFC-4122), they just &#039;&#039;look&#039;&#039; like UUIDs (humans may not be able to spot the difference visually).&lt;br /&gt;
&lt;br /&gt;
How, then, can we validate if an UUID is valid? :)&lt;br /&gt;
&lt;br /&gt;
[[User:Gwyneth Llewelyn|Gwyneth Llewelyn]] ([[User talk:Gwyneth Llewelyn|talk]]) 12:33, 27 January 2022 (PST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;p&amp;gt;Most, but not all, avatar UUIDs are V4. A few of the earliest ones aren&#039;t, like 3de27254-3baa-31fd-2d41-4ff10c86717e.&amp;lt;/p&amp;gt;&lt;br /&gt;
:&amp;lt;p&amp;gt;Most other UUIDs are NOT v4, including groups, animations, textures, sounds, inworld object IDs...&amp;lt;/p&amp;gt;&lt;br /&gt;
:&amp;lt;p&amp;gt;The only way to validate them, besides checking the 8-4-4-4-12 format (&amp;lt;code&amp;gt;if (my_key_value)&amp;lt;/code&amp;gt; in LSL comes handy for that), is checking if they exist in the database. A certain UUID may not be valid today and may be valid tomorrow.&amp;lt;/p&amp;gt;&lt;br /&gt;
:&lt;br /&gt;
:[[User:Sei Lisa|Sei Lisa]] ([[User talk:Sei Lisa|talk]]) 16:52, 1 February 2022 (PST)&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:Listen&amp;diff=1210082</id>
		<title>Talk:Listen</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:Listen&amp;diff=1210082"/>
		<updated>2021-06-04T01:35:36Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Reply to Joanne&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;It has come up in Script Academy that listen events cannot receive group chat messages, and thus the key parameter description is incorrect. I&#039;ve been trying to update this description, but I don&#039;t know where to find the UUID description page/template that is used for the key parameter. Can someone explain how to find it? [[User:Joanne Furlough|Joanne Furlough]] ([[User talk:Joanne Furlough|talk]]) 04:08, 31 May 2021 (PDT)&lt;br /&gt;
&lt;br /&gt;
: There are several hoops. I couldn&#039;t trace them all, but the immediate one is that Template:LSL_Event introduces it. It can be worked around by changing this:&lt;br /&gt;
: &amp;lt;code&amp;gt;|p3_type=key|p3_name=id|p3_desc&amp;lt;/code&amp;gt;&lt;br /&gt;
: so that p3_name is no longer id, and then you can add a description with p3_desc=&amp;lt;free text&amp;gt;.&lt;br /&gt;
: Hope that helps. [[User:Sei Lisa|Sei Lisa]] ([[User talk:Sei Lisa|talk]]) 18:35, 3 June 2021 (PDT)&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlHash&amp;diff=1210062</id>
		<title>LlHash</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlHash&amp;diff=1210062"/>
		<updated>2021-05-21T16:42:40Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: fix link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Function&lt;br /&gt;
|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llHash|sort=Hash&lt;br /&gt;
|func_desc=Returns a 32bit hash for the provided string.  Returns 0 if the input string is empty.&lt;br /&gt;
|return_type=integer&lt;br /&gt;
|p1_type=string|p1_name=val|p1_desc=String to hash.&lt;br /&gt;
|p1_hover=String to hash.&lt;br /&gt;
|return_text=&lt;br /&gt;
|func_footnote=&lt;br /&gt;
|spec=&lt;br /&gt;
The SDBM algorithm provides a good general purpose hash function with a fairly even distribution across the 32 bit space in the general case. &lt;br /&gt;
The characters fed into the hash function are 32bit wide. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
U32 SDBMHash(const std::wstring &amp;amp;val)&lt;br /&gt;
{&lt;br /&gt;
    U32 hash(0);&lt;br /&gt;
&lt;br /&gt;
    for(const wchar_t &amp;amp;c: val)&lt;br /&gt;
    {&lt;br /&gt;
        hash = c + (hash &amp;lt;&amp;lt; 6) + (hash &amp;lt;&amp;lt; 16) - hash;&lt;br /&gt;
    }&lt;br /&gt;
    return hash;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In LSL:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer llSDBMHash(string value)&lt;br /&gt;
{&lt;br /&gt;
    integer hash = 0;&lt;br /&gt;
    integer index = 0;&lt;br /&gt;
    for (index = 0; index &amp;lt; llStringLength(value); ++index)&lt;br /&gt;
    {&lt;br /&gt;
        hash = llOrd(value, index) + (hash &amp;lt;&amp;lt; 6) + (hash &amp;lt;&amp;lt; 16) - hash;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return hash;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|caveats=&lt;br /&gt;
This hash value is not cryptographically secure and should not be used as part of any security protocol. &lt;br /&gt;
SDBM provides a good distribution of hash values across its range, however with only &lt;br /&gt;
32 bits the chance of a collision is unacceptably high.(with 1000 entries, the odds for a collision are about 1 in 10000.)&lt;br /&gt;
|examples=&lt;br /&gt;
Given the combination of the object name and the owner&#039;s key generate a unique number.  This number could be used for things&lt;br /&gt;
like selecting a chat channel that has a low probability of colliding with another object. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer pickIDForObject()&lt;br /&gt;
{&lt;br /&gt;
    /* Generate an arbitrary integer ID for the combination of the&lt;br /&gt;
     * object name and the ower&#039;s key.  This value could be used &lt;br /&gt;
     * for selecting a chat/listen channel. &lt;br /&gt;
     */&lt;br /&gt;
    string obj_name = llGetObjectName();&lt;br /&gt;
    key obj_owner = llGetOwner();&lt;br /&gt;
    &lt;br /&gt;
    integer hash = llHash(obj_name + (string)obj_owner);&lt;br /&gt;
    &lt;br /&gt;
    return hash;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|helpers|related&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow|[[llOrd]]|Convert a character into an ordinal}}&lt;br /&gt;
{{LSL DefineRow|[[llChar]]|Convert an ordinal into a character}}&lt;br /&gt;
|also_articles={{LSL DefineRow||{{wikipedia|List of hash functions}}|}}&lt;br /&gt;
{{LSL DefineRow||[https://preshing.com/20110504/hash-collision-probabilities/ Hash Collision Probabilities]|}}&lt;br /&gt;
|notes&lt;br /&gt;
|cat1&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Template:LSL_Constants/PrimitiveParams&amp;diff=1209842</id>
		<title>Template:LSL Constants/PrimitiveParams</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Template:LSL_Constants/PrimitiveParams&amp;diff=1209842"/>
		<updated>2021-01-25T23:54:39Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: add missing params&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{multi-lang}}&amp;lt;/noinclude&amp;gt;{{#if:&lt;br /&gt;
&lt;br /&gt;
{{Footnote|When LL deprecated this flag they stripped it of it&#039;s name, however they did not remove the functionality. To aid in documenting the functionality, the value was given a new name in the documentation only. That is why PRIM_TYPE_LEGACY is not recognized by the compiler.|handle=ptl}}&lt;br /&gt;
&lt;br /&gt;
{{:PRIM_NAME|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_DESC|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_SLICE|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_COLOR|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_GLOW|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_TEXGEN|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_TEXTURE|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_TEXT|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_FULLBRIGHT|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_BUMP_SHINY|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_MATERIAL|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_TYPE|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_TYPE_BOX|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_TYPE_SCULPT|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_PHANTOM|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_TEMP_ON_REZ|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_PHYSICS|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_SIZE|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_POSITION|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_POS_LOCAL|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_ROTATION|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_ROT_LOCAL|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_FLEXIBLE|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_POINT_LIGHT|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_OMEGA|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_PHYSICS_SHAPE_TYPE|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_NORMAL|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_SPECULAR|{{{1|}}}}}&lt;br /&gt;
{{:PRIM_ALPHA_MODE|{{{1|}}}}}&lt;br /&gt;
&amp;lt;!--{{:PRIM_PHYSICS_MATERIAL|{{{1|}}}}}--&amp;gt;&lt;br /&gt;
{{:PRIM_LINK_TARGET|{{{1|}}}|{{{2|}}}}}&amp;lt;--Must be last--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{LSL_Function/color|color}}&lt;br /&gt;
{{LSL_Function/alpha|alpha}}&lt;br /&gt;
{{LSL_Function/boolean|boolean}}&lt;br /&gt;
{{LSL_Function/face|face|flag|!footer=*|returns={{#ifeq:{{{1|&amp;lt;noinclude&amp;gt;get&amp;lt;/noinclude&amp;gt;}}}|get|nothing.}}}}&lt;br /&gt;
&lt;br /&gt;
}}{{#ifeq:{{{1|&amp;lt;noinclude&amp;gt;set&amp;lt;/noinclude&amp;gt;}}}|set|&lt;br /&gt;
{{{!}} class=&amp;quot;sortable&amp;quot; {{Prettytable|style=margin: 0px 0px 10px 1pt;}}&lt;br /&gt;
{{!}}- {{Hl2}}&lt;br /&gt;
! class=&amp;quot;sortable&amp;quot; {{!}}Flag&lt;br /&gt;
! class=&amp;quot;sortable&amp;quot; title=&amp;quot;Value&amp;quot; style=&amp;quot;cursor: help;&amp;quot; {{!}}&amp;lt;span style=&amp;quot;border-bottom: 1px dotted;&amp;quot;&amp;gt;V&amp;lt;/span&amp;gt;&lt;br /&gt;
! class=&amp;quot;sortable&amp;quot; {{!}}Description&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; {{!}}Usage&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_NAME|PRIM_NAME]]&lt;br /&gt;
{{!}} 27&lt;br /&gt;
{{!}} Sets the prim&#039;s name.&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:name_const}}, [[string]]&amp;amp;nbsp;{{LSL Param|name}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_DESC|PRIM_DESC]]&lt;br /&gt;
{{!}} 28&lt;br /&gt;
{{!}} Sets the prim&#039;s description.&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:desc_const}}, [[string]]&amp;amp;nbsp;{{LSL Param|description}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_TYPE|PRIM_TYPE]]&lt;br /&gt;
{{!}} 9&lt;br /&gt;
{{!}} Sets the prim&#039;s shape.&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:type_const}}, [[integer]]&amp;amp;nbsp;{{HoverText|flag|PRIM_TYPE_* flag}}&amp;amp;nbsp;]&amp;amp;nbsp;+ {{HoverLink|#PRIM_TYPE_flag_parameters|Additional parameters required by the flag|flag_parameters}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_SLICE|PRIM_SLICE]]&lt;br /&gt;
{{!}} 35&lt;br /&gt;
{{!}} Sets the prim&#039;s slice (a shape attribute).&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:slice_const}}, [[vector]]&amp;amp;nbsp;{{LSL Param|cut|slice}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_PHYSICS_SHAPE_TYPE|PRIM_PHYSICS_SHAPE_TYPE]]&lt;br /&gt;
{{!}} 30&lt;br /&gt;
{{!}} Sets the prim&#039;s physics shape type.&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:physics_shape_type_const}}, [[integer]]&amp;amp;nbsp;{{LSL Param|pstype|type}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_MATERIAL|PRIM_MATERIAL]]&lt;br /&gt;
{{!}} 2&lt;br /&gt;
{{!}} Sets the prim&#039;s material.&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:material_const}}, [[integer]]&amp;amp;nbsp;{{HoverText|flag|PRIM_MATERIAL_* flag}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
&amp;lt;!--{{!}} [[#PRIM_PHYSICS_MATERIAL|PRIM_PHYSICS_MATERIAL]]&lt;br /&gt;
{{!}} 31&lt;br /&gt;
{{!}} Sets the prim&#039;s physics material properties.&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:physics_material_const}}, [[integer]]&amp;amp;nbsp;{{LSL Param|material_bits}}, [[float]]&amp;amp;nbsp;{{LSL Param|gravity_multiplier}}, [[float]]&amp;amp;nbsp;{{LSL Param|restitution}}, [[float]]&amp;amp;nbsp;{{LSL Param|friction}}, [[float]]&amp;amp;nbsp;{{LSL Param|density}}&amp;amp;nbsp;]--&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_PHYSICS|PRIM_PHYSICS]]&lt;br /&gt;
{{!}} 3&lt;br /&gt;
{{!}} Sets the object&#039;s physics status.&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:physics_const}}, [[integer]]&amp;amp;nbsp;{{LSL Param|boolean}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_TEMP_ON_REZ|PRIM_TEMP_ON_REZ]]&lt;br /&gt;
{{!}} 4&lt;br /&gt;
{{!}} Sets the object&#039;s {{LSLGC|Temporary|temporary}} attribute.&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:temponrez_const}}, [[integer]]&amp;amp;nbsp;{{LSL Param|boolean}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_PHANTOM|PRIM_PHANTOM]]&lt;br /&gt;
{{!}} 5&lt;br /&gt;
{{!}} Sets the object&#039;s phantom status.&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:phantom_const}}, [[integer]]&amp;amp;nbsp;{{LSL Param|boolean}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_POSITION|PRIM_POSITION]]&lt;br /&gt;
{{!}} 6&lt;br /&gt;
{{!}} Sets the prim&#039;s position.&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:position_const}}, [[vector]]&amp;amp;nbsp;{{LSL Param|position{{{1|}}}|position}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_POS_LOCAL|PRIM_POS_LOCAL]]&lt;br /&gt;
{{!}} 33&lt;br /&gt;
{{!}} Sets the prim&#039;s local position. &lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:pos_local_const}}, [[vector]]&amp;amp;nbsp;{{LSL Param|pos|position}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_ROTATION|PRIM_ROTATION]]&lt;br /&gt;
{{!}} 8&lt;br /&gt;
{{!}} Sets the prim&#039;s global rotation.&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:rotation_const}}, [[rotation]]&amp;amp;nbsp;{{LSL Param|rot}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_ROT_LOCAL|PRIM_ROT_LOCAL]]&lt;br /&gt;
{{!}} 29&lt;br /&gt;
{{!}} Sets the prim&#039;s local rotation.&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:rot_local_const}}, [[rotation]]&amp;amp;nbsp;{{LSL Param|rot_local|rot}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_SIZE|PRIM_SIZE]]&lt;br /&gt;
{{!}} 7&lt;br /&gt;
{{!}} Sets the prim&#039;s size.&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:size_const}}, [[vector]]&amp;amp;nbsp;{{LSL Param|size}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_TEXTURE|PRIM_TEXTURE]]&lt;br /&gt;
{{!}} 17&lt;br /&gt;
{{!}} Sets the prim&#039;s texture attributes.&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:texture_const}}, [[integer]]&amp;amp;nbsp;{{LSL Param|face}}, [[string]]&amp;amp;nbsp;{{LSL Param|texture}}, [[vector]]&amp;amp;nbsp;{{LSL Param|repeats}}, [[vector]]&amp;amp;nbsp;{{LSL Param|offsets}}, [[float]]&amp;amp;nbsp;{{LSL Param|rotation_in_radians}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_TEXT|PRIM_TEXT]]&lt;br /&gt;
{{!}} 26&lt;br /&gt;
{{!}} Sets the prim&#039;s floating text.&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:text_const}}, [[string]]&amp;amp;nbsp;{{LSL Param|text}}, [[vector]]&amp;amp;nbsp;{{LSL Param|color}}, [[float]]&amp;amp;nbsp;{{LSL Param|alpha}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_COLOR|PRIM_COLOR]]&lt;br /&gt;
{{!}} 18&lt;br /&gt;
{{!}} Sets the face&#039;s color.&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:color_const}}, [[integer]]&amp;amp;nbsp;{{LSL Param|face}}, [[vector]]&amp;amp;nbsp;{{LSL Param|color}}, [[float]]&amp;amp;nbsp;{{LSL Param|alpha}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_BUMP_SHINY|PRIM_BUMP_SHINY]]&lt;br /&gt;
{{!}} 19&lt;br /&gt;
{{!}} Sets the face&#039;s shiny &amp;amp; bump.&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:bumpshiny_const}}, [[integer]]&amp;amp;nbsp;{{LSL Param|face}}, [[integer]]&amp;amp;nbsp;{{LSL Param|shiny}}, [[integer]]&amp;amp;nbsp;{{LSL Param|bump}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_POINT_LIGHT|PRIM_POINT_LIGHT]]&lt;br /&gt;
{{!}} 23&lt;br /&gt;
{{!}} Sets the prim as a point light.&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:light_const}}, [[integer]]&amp;amp;nbsp;{{LSL Param|boolean}}, [[vector]]&amp;amp;nbsp;{{LSL Param|color}}, [[float]]&amp;amp;nbsp;{{LSL Param|intensity}}, [[float]]&amp;amp;nbsp;{{LSL Param|radius}}, [[float]]&amp;amp;nbsp;{{LSL Param|falloff}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_FULLBRIGHT|PRIM_FULLBRIGHT]]&lt;br /&gt;
{{!}} 20&lt;br /&gt;
{{!}} Sets the face&#039;s full bright flag.&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:fullbright_const}}, [[integer]]&amp;amp;nbsp;{{LSL Param|face}}, [[integer]]&amp;amp;nbsp;{{LSL Param|boolean}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_FLEXIBLE|PRIM_FLEXIBLE]]&lt;br /&gt;
{{!}} 21&lt;br /&gt;
{{!}} Sets the prim as flexible.&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:flexible_const}}, [[integer]]&amp;amp;nbsp;{{LSL Param|boolean}}, [[integer]]&amp;amp;nbsp;{{LSL Param|softness}}, [[float]]&amp;amp;nbsp;{{LSL Param|flex_float|gravity}}, [[float]]&amp;amp;nbsp;{{LSL Param|flex_float|friction}}, [[float]]&amp;amp;nbsp;{{LSL Param|flex_float|wind}}, [[float]]&amp;amp;nbsp;{{LSL Param|flex_float|tension}}, [[vector]]&amp;amp;nbsp;{{LSL Param|force}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_TEXGEN|PRIM_TEXGEN]]&lt;br /&gt;
{{!}} 22&lt;br /&gt;
{{!}} Sets the face&#039;s texture mode.&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:texgen_const}}, [[integer]]&amp;amp;nbsp;{{LSL Param|face}}, [[integer]]&amp;amp;nbsp;{{HoverText|type|PRIM_TEXGEN_* flag}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_GLOW|PRIM_GLOW]]&lt;br /&gt;
{{!}} 25&lt;br /&gt;
{{!}} Sets the face&#039;s glow attribute.&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:glow_const}}, [[integer]]&amp;amp;nbsp;{{LSL Param|face}}, [[float]]&amp;amp;nbsp;{{LSL Param|intensity}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_OMEGA|PRIM_OMEGA]]&lt;br /&gt;
{{!}} 32&lt;br /&gt;
{{!}} Sets the prim&#039;s spin to the specified axis and rate.&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:omega_const}}, [[vector]]&amp;amp;nbsp;{{LSL Param|axis}}, [[float]]&amp;amp;nbsp;{{LSL Param|spinrate}}, [[float]]&amp;amp;nbsp;{{LSL Param|gain}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_NORMAL|PRIM_NORMAL]]&lt;br /&gt;
{{!}} 37&lt;br /&gt;
{{!}} Sets the prim&#039;s normal map attributes.&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:normal_const}}, [[integer]]&amp;amp;nbsp;{{LSL Param|face}}, [[string]]&amp;amp;nbsp;{{LSL Param|texture}}, [[vector]]&amp;amp;nbsp;{{LSL Param|repeats}}, [[vector]]&amp;amp;nbsp;{{LSL Param|offsets}}, [[float]]&amp;amp;nbsp;{{LSL Param|rotation_in_radians}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_SPECULAR|PRIM_SPECULAR]]&lt;br /&gt;
{{!}} 36&lt;br /&gt;
{{!}} Sets the prim&#039;s specular map attributes.&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:specular_const}}, [[integer]]&amp;amp;nbsp;{{LSL Param|face}}, [[string]]&amp;amp;nbsp;{{LSL Param|texture}}, [[vector]]&amp;amp;nbsp;{{LSL Param|repeats}}, [[vector]]&amp;amp;nbsp;{{LSL Param|offsets}}, [[float]]&amp;amp;nbsp;{{LSL Param|rotation_in_radians}}, [[vector]]&amp;amp;nbsp;{{LSL Param|color}}, [[integer]]&amp;amp;nbsp;{{LSL Param|glossiness}}, [[integer]]&amp;amp;nbsp;{{LSL Param|environment}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_ALPHA_MODE|PRIM_ALPHA_MODE]]&lt;br /&gt;
{{!}} 38&lt;br /&gt;
{{!}} Sets the prim&#039;s diffuse texture alpha rendering mode attributes.&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:alpha_mode_const}}, [[integer]]&amp;amp;nbsp;{{LSL Param|face}}, [[integer]]&amp;amp;nbsp;{{LSL Param|alpha_mode}}, [[integer]]&amp;amp;nbsp;{{LSL Param|mask_cutoff}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_LINK_TARGET|PRIM_LINK_TARGET]]&lt;br /&gt;
{{!}} 34&lt;br /&gt;
{{!}} Sets the next linknumber to use in the linkset.&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{#var:link_target_const}}, [[integer]]&amp;amp;nbsp;{{LSL Param|link_target}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_CAST_SHADOWS|PRIM_CAST_SHADOWS]]&lt;br /&gt;
{{!}} 24&lt;br /&gt;
{{!}} Sets the prim&#039;s cast shadow attribute. (&#039;&#039;&#039;DEPRECATED&#039;&#039;&#039;)&lt;br /&gt;
{{!}} [&amp;amp;nbsp;{{LSL Const|PRIM_CAST_SHADOWS|integer|24}}, [[integer]]&amp;amp;nbsp;{{LSL Param|boolean}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[#PRIM_TYPE_LEGACY|PRIM_TYPE_LEGACY]]{{Footnote|handle=ptl}}&lt;br /&gt;
{{!}} 1&lt;br /&gt;
{{!}} Sets the prim&#039;s shape  (legacy mode, &#039;&#039;&#039;DEPRECATED&#039;&#039;&#039;).&lt;br /&gt;
{{!}} [&amp;amp;nbsp;1, [[integer]]&amp;amp;nbsp;{{HoverText|flag|PRIM_TYPE_* flag}}&amp;amp;nbsp;]&amp;amp;nbsp;+ {{HoverLink|#PRIM_TYPE_LEGACY_flag_parameters|Additional parameters required by the flag|flag_parameters}}	&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[PRIM_ALLOW_UNSIT]]&lt;br /&gt;
{{!}} 39&lt;br /&gt;
{{!}} Avatars are allowed to manually stand up when seated on this prim.  Only valid for prims in a valid experience.&lt;br /&gt;
{{!}} [ PRIM_ALLOW_UNSIT, [[integer]]&amp;amp;nbsp;{{LSL Param|boolean}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[PRIM_SCRIPTED_SIT_ONLY]]&lt;br /&gt;
{{!}} 40&lt;br /&gt;
{{!}} Avatars are not permitted to manually sit on this prim.&lt;br /&gt;
{{!}} [ PRIM_SCRIPTED_SIT_ONLY, [[integer]]&amp;amp;nbsp;{{LSL Param|boolean}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[PRIM_SIT_TARGET]]&lt;br /&gt;
{{!}} 41&lt;br /&gt;
{{!}} The sit target, if any defined for this prim.&lt;br /&gt;
{{!}} [ PRIM_SIT_TARGET, [[integer]]&amp;amp;nbsp;{{LSL Param|boolean}}, [[vector]]&amp;amp;nbsp;{{LSL Param|pos|offset}}, [[rotation]]&amp;amp;nbsp;{{LSL Param|rot}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}} }}&lt;br /&gt;
{{{!}} {{Prettytable|style=margin: 0px 0px 10px 1pt;}} {{#switch:{{NAMESPACE}}|Template=|User=|{{LSLC|Light}}}}&lt;br /&gt;
{{!}}- {{Hl2}}&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; {{!}} Parameter&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; {{!}} {{GetSet|{{{1|}}}|Return&amp;amp;nbsp;Values|Additional&amp;amp;nbsp;Parameters}}&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; {{!}} Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_NAME|integer|27|b=[&amp;amp;nbsp;|e=&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_NAME&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} [ [[string]]&amp;amp;nbsp;{{LSL Param|name}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} Name: {{GetSet|{{{1|}}}|[[llGetObjectName]]|[[llSetObjectName]]}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_DESC|integer|28|b=[&amp;amp;nbsp;|e=&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_DESC&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} [ [[string]]&amp;amp;nbsp;{{LSL Param|description}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} Description: {{GetSet|{{{1|}}}|[[llGetObjectDesc]]|[[llSetObjectDesc]]}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_TYPE|integer|9|b=[&amp;amp;nbsp;|e=&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_TYPE&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;2&amp;quot; {{!}} [ [[integer]]&amp;amp;nbsp;{{HoverText|flag|PRIM_TYPE_* flag}}&amp;amp;nbsp;]&amp;amp;nbsp;+ flag_parameters&lt;br /&gt;
{{!}} colspan=&amp;quot;6&amp;quot; {{!}} {{GetSet|{{{1|}}}|Gets|Sets}} the prim shape. {{CustomToggle|PRIM_TYPE|show=Would&amp;amp;nbsp;you&amp;amp;nbsp;like&amp;amp;nbsp;to&amp;amp;nbsp;know&amp;amp;nbsp;more?|link=PRIM_TYPE}}&lt;br /&gt;
{{!}}- {{CustomToggle/Collapsible|PRIM_TYPE}}&lt;br /&gt;
{{!}} colspan=&amp;quot;2&amp;quot; {{!}}&lt;br /&gt;
{{!}} colspan=&amp;quot;8&amp;quot; {{!}}&lt;br /&gt;
{{LSL Constants/PrimitiveParams/type|{{{1|}}}|table=*|sortable=*}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_SLICE|integer|35|b=[&amp;amp;nbsp;|e=&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_SLICE&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;2&amp;quot; {{!}} [ [[vector]]&amp;amp;nbsp;{{LSL Param|cut|slice}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;6&amp;quot; {{!}} {{GetSet|{{{1|}}}|Gets|Sets}} the prim&#039;s slice (a shape attribute).&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_PHYSICS_SHAPE_TYPE|integer|30|b=[&amp;amp;nbsp;|e=&amp;amp;nbsp;]|s=rowspan=&amp;quot;5&amp;quot;|s1=id=&amp;quot;PRIM_PHYSICS_SHAPE_TYPE&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;2&amp;quot; {{!}} [ [[integer]]&amp;amp;nbsp;{{LSL Param|pstype|type}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;6&amp;quot; {{!}} {{GetSet|{{{1|}}}|Gets|Sets}} the prim&#039;s physics shape type.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{#var:physics_shape_type_rows}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_MATERIAL|integer|2|b=[&amp;amp;nbsp;|e=&amp;amp;nbsp;]|s=rowspan=&amp;quot;10&amp;quot;|s1=id=&amp;quot;PRIM_MATERIAL&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;2&amp;quot; {{!}} [ [[integer]]&amp;amp;nbsp;{{LSL Param|material}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;6&amp;quot; {{!}} {{GetSet|{{{1|}}}|Gets|Sets}} the prim&#039;s material. The material determines the default [[llCollisionSound|collision sound]], [[llCollisionSprite|sprite]], [[llSetPhysicsMaterial|{{LSLP|friction}} coefficient and {{LSLP|restitution}} coefficient]].&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL Constants/PrimitiveParams/materials}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
&amp;lt;!--{{LSL ConstTB|PRIM_PHYSICS_MATERIAL|integer|31|b=[&amp;amp;nbsp;|e=&amp;amp;nbsp;]|s=rowspan=&amp;quot;6&amp;quot;|s1=id=&amp;quot;PRIM_PHYSICS_SHAPE_TYPE&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} [ [[integer]]&amp;amp;nbsp;{{LSL Param|material_bits}}, [[float]]&amp;amp;nbsp;{{LSL Param|gravity_multiplier}}, [[float]]&amp;amp;nbsp;{{LSL Param|restitution}}, [[float]]&amp;amp;nbsp;{{LSL Param|friction}}, [[float]]&amp;amp;nbsp;{{LSL Param|density}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} Physics material properties {{GetSet|{{{1|}}}|[[llGetPhysicsMaterial]]|[[llSetPhysicsMaterial]]}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{#var:physics_material_rows}}--&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_PHYSICS|integer|3|b=[&amp;amp;nbsp;|e=&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_PHYSICS&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} [ [[integer]]&amp;amp;nbsp;{{LSL Param|boolean}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} Physics status {{GetSet|{{{1|}}}|[[llGetStatus]]|[[llSetStatus]]}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_TEMP_ON_REZ|integer|4|b=[&amp;amp;nbsp;|e=&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_TEMP_ON_REZ&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} [ [[integer]]&amp;amp;nbsp;{{LSL Param|boolean}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} {{LSLGC|Temporary}} attribute&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_PHANTOM|integer|5|b=[&amp;amp;nbsp;|e=&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_PHANTOM&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} [ [[integer]]&amp;amp;nbsp;{{LSL Param|boolean}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} Phantom status {{GetSet|{{{1|}}}|[[llGetStatus]]|[[llSetStatus]]}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_POSITION|integer|6|b=[&amp;amp;nbsp;|e=&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_POSITION&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} [ [[vector]]&amp;amp;nbsp;{{LSL Param|position{{{1|}}}|position}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} Position, {{GetSet|{{{1|}}}|[[llGetPos]]|[[llSetPos]]}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_POS_LOCAL|integer|33|b=[&amp;amp;nbsp;|e=&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_POS_LOCAL&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} [ [[vector]]&amp;amp;nbsp;{{LSL Param|pos|position}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} Local position, {{GetSet|{{{1|}}}|[[llGetLocalPos]]|[[llSetPos]]}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_ROTATION|integer|8|b=[&amp;amp;nbsp;|e=&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_ROTATION&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} [ [[rotation]]&amp;amp;nbsp;{{LSL Param|rot}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} Global rotation, {{GetSet|{{{1|}}}|[[llGetRot]]|[[llSetRot]] (broken for child prims)}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_ROT_LOCAL|integer|29|b=[&amp;amp;nbsp;|e=&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_ROT_LOCAL&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} [ [[rotation]]&amp;amp;nbsp;{{LSL Param|rot_local|rot}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} Local rotation, {{GetSet|{{{1|}}}|[[llGetLocalRot]]|[[llSetLocalRot]]}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_SIZE|integer|7|b=[&amp;amp;nbsp;|e=&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_SIZE&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} [ [[vector]]&amp;amp;nbsp;{{LSL Param|size}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} Size, {{GetSet|{{{1|}}}|[[llGetScale]]|[[llSetScale]]}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_TEXTURE|integer|17|b=[&amp;amp;nbsp;|e=, [[integer]]&amp;amp;nbsp;{{LSL Param|face}}&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_TEXTURE&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} [ [[string]]&amp;amp;nbsp;{{LSL Param|texture}}, [[vector]]&amp;amp;nbsp;{{LSL Param|repeats}}, [[vector]]&amp;amp;nbsp;{{LSL Param|offsets}}, [[float]]&amp;amp;nbsp;{{LSL Param|rotation_in_radians}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}}&lt;br /&gt;
{{{!}} style=&amp;quot;background-color:#F9F9F9;&amp;quot;&lt;br /&gt;
{{!}}{{!}}{{LSLGC|Texture}}: {{!}}{{!}} {{#ifeq:{{{1|get}}}|get|[[llGetTexture]]}} {{!}}{{!}} {{#ifeq:{{{1|set}}}|set|[[llSetTexture]]}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!!}}Repeats: {{!}}{{!}} {{#ifeq:{{{1|get}}}|get|[[llGetTextureScale]]}} {{!}}{{!}} {{#ifeq:{{{1|set}}}|set|[[llScaleTexture]]}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!!}}Offset: {{!}}{{!}} {{#ifeq:{{{1|get}}}|get|[[llGetTextureOffset]]}} {{!}}{{!}} {{#ifeq:{{{1|set}}}|set|[[llOffsetTexture]]}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!!}}Rotation: {{!}}{{!}} {{#ifeq:{{{1|get}}}|get|[[llGetTextureRot]]}} {{!}}{{!}} {{#ifeq:{{{1|set}}}|set|[[llRotateTexture]]}}&lt;br /&gt;
{{!}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_TEXT|integer|26|b=[&amp;amp;nbsp;|e=&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_TEXT&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} [ [[string]]&amp;amp;nbsp;{{LSL Param|text}}, [[vector]]&amp;amp;nbsp;{{LSL Param|color}}, [[float]]&amp;amp;nbsp;{{LSL Param|alpha}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} Floating Text: {{GetSet|{{{1|}}}|NA|[[llSetText]]}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_COLOR|integer|18|b=[&amp;amp;nbsp;|e=, [[integer]]&amp;amp;nbsp;{{LSL Param|face}}&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_COLOR&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} [ [[vector]]&amp;amp;nbsp;{{LSL Param|color}}, [[float]]&amp;amp;nbsp;{{LSL Param|alpha}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} &lt;br /&gt;
{{{!}} style=&amp;quot;background-color:#F9F9F9;&amp;quot;&lt;br /&gt;
{{!!}}{{LSLGC|Alpha}}: {{!}}{{!}} {{#ifeq:{{{1|get}}}|get|[[llGetAlpha]]}} {{!}}{{!}} {{#ifeq:{{{1|set}}}|set|[[llSetAlpha]]}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!!}}{{LSLGC|Color}}: {{!}}{{!}} {{#ifeq:{{{1|get}}}|get|[[llGetColor]]}} {{!}}{{!}} {{#ifeq:{{{1|set}}}|set|[[llSetColor]]}}&lt;br /&gt;
{{!}}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_BUMP_SHINY|integer|19|b=[&amp;amp;nbsp;|e=, [[integer]]&amp;amp;nbsp;{{LSL Param|face}}&amp;amp;nbsp;]|s=rowspan=&amp;quot;25&amp;quot;|s1=id=&amp;quot;PRIM_BUMP_SHINY&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} [&amp;amp;nbsp;[[integer]]&amp;amp;nbsp;{{LSL Param|shiny}}, [[integer]]&amp;amp;nbsp;{{LSL Param|bump}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL_Constants/PrimitiveParams/bumpshiny}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_FULLBRIGHT|integer|20|b=[&amp;amp;nbsp;|e=, [[integer]]&amp;amp;nbsp;{{LSL Param|face}}&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_FULLBRIGHT&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} [ [[integer]]&amp;amp;nbsp;{{LSL Param|boolean}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} &lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_FLEXIBLE|integer|21|b=[&amp;amp;nbsp;|e=&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_FLEXIBLE&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} [ [[integer]]&amp;amp;nbsp;{{LSL Param|boolean}}, [[integer]]&amp;amp;nbsp;{{LSL Param|softness}}, [[float]]&amp;amp;nbsp;{{LSL Param|flex_float|gravity}}, [[float]]&amp;amp;nbsp;{{LSL Param|flex_float|friction}}, [[float]]&amp;amp;nbsp;{{LSL Param|flex_float|wind}}, [[float]]&amp;amp;nbsp;{{LSL Param|flex_float|tension}}, [[vector]]&amp;amp;nbsp;{{LSL Param|force}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} &lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_TEXGEN|integer|22|b=[&amp;amp;nbsp;|e=, [[integer]]&amp;amp;nbsp;{{LSL Param|face}}&amp;amp;nbsp;]|s=rowspan=&amp;quot;4&amp;quot;|s1=id=&amp;quot;PRIM_TEXGEN&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} [ [[integer]]&amp;amp;nbsp;{{LSL Param|tg_type|mode}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} &lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL Constants/PrimitiveParams/texgen}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_POINT_LIGHT|integer|23|b=[&amp;amp;nbsp;|e=&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_POINT_LIGHT&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} [ [[integer]]&amp;amp;nbsp;{{LSL Param|boolean}}, [[vector]]&amp;amp;nbsp;{{LSL Param|color}}, [[float]]&amp;amp;nbsp;{{LSL Param|intensity}}, [[float]]&amp;amp;nbsp;{{LSL Param|radius}}, [[float]]&amp;amp;nbsp;{{LSL Param|falloff}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} &lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_GLOW|integer|25|b=[&amp;amp;nbsp;|e=, [[integer]]&amp;amp;nbsp;{{LSL Param|face}}&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_GLOW&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} [ [[float]]&amp;amp;nbsp;{{LSL Param|intensity}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} &lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_OMEGA|integer|32|b=[&amp;amp;nbsp;|e=&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_OMEGA&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} [&amp;amp;nbsp;[[vector]]&amp;amp;nbsp;{{LSL Param|axis}}, [[float]]&amp;amp;nbsp;{{LSL Param|spinrate}}, [[float]]&amp;amp;nbsp;{{LSL Param|gain}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;4&amp;quot; {{!}} [[llTargetOmega]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_NORMAL|integer|37|b=[&amp;amp;nbsp;|e=, [[integer]]&amp;amp;nbsp;{{LSL Param|face}}&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_NORMAL&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} [&amp;amp;nbsp;[[string]]&amp;amp;nbsp;{{LSL Param|texture}}, [[vector]]&amp;amp;nbsp;{{LSL Param|repeats}}, [[vector]]&amp;amp;nbsp;{{LSL Param|offsets}}, [[float]]&amp;amp;nbsp;{{LSL Param|rotation_in_radians}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_SPECULAR|integer|36|b=[&amp;amp;nbsp;|e=, [[integer]]&amp;amp;nbsp;{{LSL Param|face}}&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_SPECULAR&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} [&amp;amp;nbsp;[[string]]&amp;amp;nbsp;{{LSL Param|texture}}, [[vector]]&amp;amp;nbsp;{{LSL Param|repeats}}, [[vector]]&amp;amp;nbsp;{{LSL Param|offsets}}, [[float]]&amp;amp;nbsp;{{LSL Param|rotation_in_radians}}, [[vector]]&amp;amp;nbsp;{{LSL Param|color}}, [[integer]]&amp;amp;nbsp;{{LSL Param|glossiness}} [[integer]]&amp;amp;nbsp;{{LSL Param|environment}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_ALPHA_MODE|integer|38|b=[&amp;amp;nbsp;|e=, [[integer]]&amp;amp;nbsp;{{LSL Param|face}}&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_ALPHA_MODE&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} [&amp;amp;nbsp;[[integer]]&amp;amp;nbsp;{{LSL Param|alpha_mode}}, [[integer]]&amp;amp;nbsp;{{LSL Param|mask_cutoff}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_LINK_TARGET|integer|34|b=[&amp;amp;nbsp;|e=, [[integer]]&amp;amp;nbsp;{{LSL Param|link_target}}&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_LINK_TARGET&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} []&lt;br /&gt;
{{!}} colspan=&amp;quot;4&amp;quot; {{!}} Multiple {{GetSet|{{{1|}}}|[[llGetLinkPrimitiveParams]]|[[llSetLinkPrimitiveParams]]}} calls.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_CAST_SHADOWS|integer|24|b=[&amp;amp;nbsp;&amp;lt;s&amp;gt;|e=&amp;lt;/s&amp;gt;&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_CAST_SHADOWS&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;2&amp;quot; {{!}} [ [[integer]]&amp;amp;nbsp;{{LSL Param|boolean}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;6&amp;quot; {{!}} &#039;&#039;&#039;DEPRECATED&#039;&#039;&#039;: Shadow casting for the primitive&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{#ifeq:{{{1|set}}}|set|&lt;br /&gt;
{{!}} rowspan=&amp;quot;8&amp;quot; id=&amp;quot;PRIM_TYPE_LEGACY&amp;quot;{{!}} [ 1 ]&amp;lt;br/&amp;gt;&amp;lt;s&amp;gt;{{LSL Const|PRIM_TYPE_LEGACY|integer|1|nolink=*|c=The value is real, the name is not, merely a placeholder.}}&amp;lt;/s&amp;gt;{{Footnote|handle=ptl}}&lt;br /&gt;
{{!}} rowspan=&amp;quot;8&amp;quot; {{!}} {{#var:value}}&lt;br /&gt;
{{!}} colspan=&amp;quot;8&amp;quot; {{!}} [ [[integer]]&amp;amp;nbsp;{{HoverText|flag|PRIM_TYPE_* flag}}]&amp;amp;nbsp;+ flag_parameters&lt;br /&gt;
{{!}}-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; {{!}} {{HoverText|flag|PRIM_TYPE_* flag}} Constants&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; id=&amp;quot;PRIM_TYPE_LEGACY_flag_parameters&amp;quot;{{!}} Flag Parameters&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_TYPE_BOX|integer|0}}&lt;br /&gt;
{{!}} colspan=&amp;quot;6&amp;quot; {{!}} [ [[vector]]&amp;amp;nbsp;{{LSL Param|cut}}, [[float]]&amp;amp;nbsp;{{LSL Param|hollow}}, [[float]]&amp;amp;nbsp;{{LSL Param|twist_end}}, [[vector]]&amp;amp;nbsp;{{LSL Param|top_size}}, [[vector]]&amp;amp;nbsp;{{LSL Param|top_shear}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_TYPE_CYLINDER|integer|1}}&lt;br /&gt;
{{!}} colspan=&amp;quot;6&amp;quot; {{!}} [ [[vector]]&amp;amp;nbsp;{{LSL Param|cut}}, [[float]]&amp;amp;nbsp;{{LSL Param|hollow}}, [[float]]&amp;amp;nbsp;{{LSL Param|twist_end}}, [[vector]]&amp;amp;nbsp;{{LSL Param|top_size}}, [[vector]]&amp;amp;nbsp;{{LSL Param|top_shear}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_TYPE_PRISM|integer|2}}&lt;br /&gt;
{{!}} colspan=&amp;quot;6&amp;quot; {{!}} [ [[vector]]&amp;amp;nbsp;{{LSL Param|cut}}, [[float]]&amp;amp;nbsp;{{LSL Param|hollow}}, [[float]]&amp;amp;nbsp;{{LSL Param|twist_end}}, [[vector]]&amp;amp;nbsp;{{LSL Param|top_size}}, [[vector]]&amp;amp;nbsp;{{LSL Param|top_shear}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_TYPE_SPHERE|integer|3}}&lt;br /&gt;
{{!}} colspan=&amp;quot;6&amp;quot; {{!}} [ [[vector]]&amp;amp;nbsp;{{LSL Param|cut}}, [[float]]&amp;amp;nbsp;{{LSL Param|hollow}}, [[vector]]&amp;amp;nbsp;{{LSL Param|cut|dimple}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_TYPE_TORUS|integer|4}}&lt;br /&gt;
{{!}} colspan=&amp;quot;6&amp;quot; {{!}} [ [[vector]]&amp;amp;nbsp;{{LSL Param|cut}}, [[float]]&amp;amp;nbsp;{{LSL Param|hollow}}, [[float]]&amp;amp;nbsp;{{LSL Param|twist_end}}, [[float]]&amp;amp;nbsp;{{LSL Param|hole_size_y}}, [[vector]]&amp;amp;nbsp;{{LSL Param|top_shear}}, [[vector]]&amp;amp;nbsp;{{LSL Param|cut|advanced_cut}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_TYPE_TUBE|integer|5}}&lt;br /&gt;
{{!}} colspan=&amp;quot;6&amp;quot; {{!}} [ [[vector]]&amp;amp;nbsp;{{LSL Param|cut}}, [[float]]&amp;amp;nbsp;{{LSL Param|hollow}}, [[float]]&amp;amp;nbsp;{{LSL Param|twist_end}}, [[float]]&amp;amp;nbsp;{{LSL Param|topshear_x}}&amp;amp;nbsp;]&lt;br /&gt;
}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_ALLOW_UNSIT|integer|39|b=[&amp;amp;nbsp;|e=&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_ALLOW_UNSIT&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} [ [[integer]]&amp;amp;nbsp;{{LSL Param|boolean}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_SCRIPTED_SIT_ONLY|integer|40|b=[&amp;amp;nbsp;|e=&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_SCRIPTED_SIT_ONLY&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} [ [[integer]]&amp;amp;nbsp;{{LSL Param|boolean}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{LSL ConstTB|PRIM_SIT_TARGET|integer|41|b=[&amp;amp;nbsp;|e=&amp;amp;nbsp;]|s1=id=&amp;quot;PRIM_SIT_TARGET&amp;quot;}}&lt;br /&gt;
{{!}} colspan=&amp;quot;5&amp;quot; {{!}} [ [[integer]]&amp;amp;nbsp;{{LSL Param|boolean}}&amp;amp;nbsp;, [[vector]]&amp;amp;nbsp;{{LSL Param|pos|offset}}, [[rotation]]&amp;amp;nbsp;{{LSL Param|rot}}&amp;amp;nbsp;]&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; {{!}} Sit target, [[llSitTarget]]. The position can be [[ZERO_VECTOR]].&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
== Caveats ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
{{#var:caveats}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Limits&amp;diff=1209819</id>
		<title>Limits</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Limits&amp;diff=1209819"/>
		<updated>2021-01-12T14:31:14Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: /* Animation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{KBmaster}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
== Summary ==&lt;br /&gt;
{{RightToc}}&lt;br /&gt;
The Second Life Viewer and simulators have a division of labor, keeping track of the data that makes Second Life run. The Viewer&#039;s job is to:&lt;br /&gt;
&lt;br /&gt;
* Handle locations of objects.&lt;br /&gt;
* Get velocities and other physics information, and does simple physics to keep track of what is moving where.&lt;br /&gt;
&lt;br /&gt;
The simulator&#039;s job is to:&lt;br /&gt;
&lt;br /&gt;
* Run the physics engine.&lt;br /&gt;
* Detect collisions.&lt;br /&gt;
* Keep track of where everything is&lt;br /&gt;
* Send locations of content to the Viewer along with updates when certain changes occur.&lt;br /&gt;
&lt;br /&gt;
Limits are necessary for all of these components to work together. The list below outlines many of the &#039;&#039;&#039;Second Life numerical limits that affect your inworld experience&#039;&#039;&#039;. Some of these will likely change over time, so if you spot something incorrect/outdated, please take a moment to update it.&lt;br /&gt;
&lt;br /&gt;
{{KBcaution|1=The scope of this page is focused on Linden Lab&#039;s official Viewers, keeping in mind [[Third_Party_Viewer_Directory|3rd-party viewers may differ]]. Cite sources and provide substantiation for limits that aren&#039;t provided by Linden Lab. Also, unconfirmed speculation [[Talk:Limits|goes on this discussion page]]. Don&#039;t add data without a hard limit, and don&#039;t add obscure trivia that doesn&#039;t practically affect the general inworld experience.|width=80%}}&lt;br /&gt;
&lt;br /&gt;
== [[Avatar]] ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Max. # of attachments&#039;&#039;&#039; - 38 combined [[HUD]] or body attachments.&lt;br /&gt;
** They can be viewed by right-clicking your avatar and choosing &#039;&#039;&#039;Edit My Outfit&#039;&#039;&#039;.&lt;br /&gt;
** With the formal introduction of [[multiple attachments|multiple attachments to a single point]] in Viewer 2.4, you can attach up to 38 total objects, and they can all be attached to a single point. &lt;br /&gt;
** With the introduction of the Bento armature, there are 47 attachment points available.&lt;br /&gt;
** With the introduction of Animesh, there is a limit of 1 Animesh attachment, 2 if the resident has premium.&lt;br /&gt;
* &#039;&#039;&#039;Max. # of clothing layers&#039;&#039;&#039; - 60 including alpha, tattoo, shoe base, physics, socks, gloves, undershirt, underpants, shirt, pants, jacket, skirt&lt;br /&gt;
** On viewers before Second Life Release 3.7.29.301305, the potential total was still 60, but limited to 5 items of each type.&lt;br /&gt;
** In any case, only one each of shape, skin, eyes and hair base may be worn. These 4 basic body parts are in addition to the 60 clothing layers.&lt;br /&gt;
* &#039;&#039;&#039;Max Clothing Texture&#039;&#039;&#039; - 1024x1024 px (except 128x128 px for eyes) - Server Side Appearance (and legacy baking on outside grids) will downsize larger textures.&lt;br /&gt;
* &#039;&#039;&#039;Max. unassisted fly height&#039;&#039;&#039; - Stable hover at current ground elevation &#039;&#039;plus&#039;&#039; 5020m.&lt;br /&gt;
** You can easily acquire a flight attachment to fly high. Also see [[flight limit]] and [[Limits#Navigation|the Navigation section]] below.&lt;br /&gt;
* &#039;&#039;&#039;Common shoe sizes&#039;&#039;&#039; - Traditionally, most women&#039;s shoes were designed for a size 0 (zero) foot. Men&#039;s generally scale up to 14. Newer items (mesh and some sculpted) replace the system feet or conform to the avatar&#039;s shape, so adjustments may be necessary.&lt;br /&gt;
** You can check this by going to Edit menu &amp;gt; Appearance and clicking on the Shape &amp;gt; Legs tab.&lt;br /&gt;
&amp;lt;!--Can someone verify the following?&lt;br /&gt;
* &#039;&#039;&#039;Min. length of avatar name&#039;&#039;&#039; - 2 for the first name, 2 for the last name, 5 in total (including the space).--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Max. length of avatar name&#039;&#039;&#039; - 31 for first name, 31 for last name, 63 in total (including the space).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Max. length of {{LSLGC|Username}}&#039;&#039;&#039; - All lower case and a maximum of 63 including the &#039;.&#039;(eg; firstname.lastname)&lt;br /&gt;
**Older account user names are a combination of the First and last name in lower case separated by a period(.)(eg; lilmix.pixelmaid)&lt;br /&gt;
**Modern user names are a single name(no period)(eg; john1234) - &#039;&#039;&#039;Max.&#039;&#039;&#039; length is 31 characters&lt;br /&gt;
**The {{LSLGC|Legacy Name}}s for modern user names always shows Resident as the last name. So the Max is 40 characters in total for a new avatar&#039;s legacy name(including the space and last name &#039;Resident&#039;)&lt;br /&gt;
*&#039;&#039;&#039;Min. length of [[Display_Names]]&#039;&#039;&#039; - At least one script character&lt;br /&gt;
*&#039;&#039;&#039;Max. length of Display Names&#039;&#039;&#039; - 31 characters&lt;br /&gt;
**Display Names can include most Unicode script characters, spaces, and some punctuation.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Max. avatar speed&#039;&#039;&#039; - 250m/s (with only attachments to assist)&lt;br /&gt;
* &#039;&#039;&#039;Max. teleport speed&#039;&#039;&#039;&amp;lt;!-- - 3 teleports per 15 seconds (server 1.27.0) and 10 teleports per 15 seconds (server 1.27.1)--&amp;gt; - 10 teleports per 15 seconds, since SL server 1.27.1&lt;br /&gt;
&lt;br /&gt;
== [[Animation]] ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Limit affects&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Lower limit&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Upper limit&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Comment&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;More coverage&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||Length of animation&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|60.0 seconds}}&lt;br /&gt;
| Limited by length or Size, whichever is reached first&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Size of Animation&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|250k bytes}}&lt;br /&gt;
| Limited by length or Size, whichever is reached first. Size is after conversion to SL [[Internal Animation Format|internal animaton format]], not BVH source which can be much larger.&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Distance an Animation Can Travel&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|10 meters}}&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
||animation priority&lt;br /&gt;
| {{no|0}}&lt;br /&gt;
| {{no|4, with custom tools 6}}&lt;br /&gt;
| n/a&lt;br /&gt;
| [[Animation_Priority]]&lt;br /&gt;
|-&lt;br /&gt;
||Number of unique joints per animation&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|216}}&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Number of simultaneous animations playing&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|30}}&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [http://community.secondlife.com/t5/English-Knowledge-Base/Build-Tools/ta-p/700039 Building] ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Limit affects&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Lower limit&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Upper limit&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Comment&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;More coverage&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||[[Prim]] dimensions&lt;br /&gt;
| {{no|&amp;lt;0.01,&amp;amp;nbsp;0.01,&amp;amp;nbsp;0.01&amp;gt;}}&lt;br /&gt;
| {{no|&amp;lt;64.0, 64.0, 64.0&amp;gt;}}&lt;br /&gt;
| Used to be &amp;lt;10.0, 10.0, 10.0&amp;gt; prior to Second Life Server version 11.08.17.238770&lt;br /&gt;
| [[llSetScale]], [[PRIM_SIZE]] and [[Megaprim]]&lt;br /&gt;
|-&lt;br /&gt;
||Number of prims in a linkset&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|256 prims}}&lt;br /&gt;
| Used to be 255 prior to Second Life Server version 1.26&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Linking distance&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|[[Linkability_Rules]]}}&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||[[Mesh/Mesh_physics#Physics_Resource_Cost|Physics cost]] for a physical object&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|32.0}}&lt;br /&gt;
||Additional notes:&lt;br /&gt;
* If you try to link more, it&#039;ll either say &amp;quot;Can&#039;t enable physics for objects with more than 32 primitives&amp;quot; or &amp;quot;Object has too many primitives -- its dynamics have been disabled.&amp;quot;.&lt;br /&gt;
* On server versions 1.38 and below, each sitting avatar counted as 1 prim. From 1.40.2 the limit is only on actual prims.&lt;br /&gt;
| [[OBJECT_PHYSICS_COST]]&lt;br /&gt;
|-&lt;br /&gt;
||Build or rez height&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|4096.0 meters}}&lt;br /&gt;
| 768.0 meters for Viewers prior to version 1.20&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Prim name length&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|63 bytes UTF-8 [[String|string]]}}&lt;br /&gt;
| same limit for {{LSLGC|Avatar/Name|avatar names}}, although the character set for avatar names is significantly limited.&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Prim description length&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|127 bytes UTF-8 [[String|string]]}}&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Temporary prims&#039; lifetime&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|up to around 60 seconds}}&lt;br /&gt;
| depends upon when the next garbage collector cycle is&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Number of temporary prims&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|RegionPrimLimit - NumberOfPrimsInRegion + Minimum(0.5*RegionPrimLimit, 1000)}}&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Length of hovertext&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|254 bytes UTF-8 [[String|string]]}}&lt;br /&gt;
| n/a&lt;br /&gt;
| [[llSetText]] and [[PRIM_TEXT]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [https://community.secondlife.com/knowledgebase/english/lighting-and-shadows-r331/ Lighting] ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Limit affects&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Lower limit&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Upper limit&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Comment&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;More coverage&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||Number of projectors rendered at full detail&lt;br /&gt;
| n/a&lt;br /&gt;
| 2&lt;br /&gt;
| Only the 2 projectors closest to an object will cause it to cast shadows. &lt;br /&gt;
| [https://community.secondlife.com/knowledgebase/english/lighting-and-shadows-r331/#Projectors Knowledge Base &amp;gt; Lighting &amp;gt; Projectors]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[Communication]] ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Limit affects&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Lower limit&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Upper limit&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Comment&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;More coverage&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||Whisper distance&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|10 meters}}&lt;br /&gt;
| &amp;lt;code&amp;gt;/whisper&amp;lt;/code&amp;gt; as the first few characters in a message can be used in viewer-2-code based viewers in local chat.&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Chat distance&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|20 meters}}&lt;br /&gt;
| text spoken as a &amp;quot;chat&amp;quot; step &#039;&#039;&#039;within gestures&#039;&#039;&#039; cannot be shouted or whispered. /whisper and /shout &#039;&#039;can&#039;&#039; be used in the &amp;quot;Replace with&amp;quot; field.&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Shout distance&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|100 meters}}&lt;br /&gt;
| &amp;lt;code&amp;gt;/shout&amp;lt;/code&amp;gt; as the first few characters in a message can be used in viewer-2-code based viewers in local chat.&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Length of a chat message and whether or not it is truncated&lt;br /&gt;
| {{no|1 byte or single-byte character}}&lt;br /&gt;
| {{no|1024 bytes or single-byte characters}}&lt;br /&gt;
| Limit does not apply to instant messages via [[llInstantMessage]] and communication between IM and email, the limit there is 1023 bytes or single-byte characters.&lt;br /&gt;
The viewer-to-server communication on &#039;&#039;negative&#039;&#039; channels is truncated to 254 bytes, and on &#039;&#039;positive&#039;&#039; channels, to 1023 bytes. These limits do not affect communication between scripts.&lt;br /&gt;
| [[llInstantMessage]]&lt;br /&gt;
|-&lt;br /&gt;
||Maximum events&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|64 events}}&lt;br /&gt;
| Events are stored in a 64 bit bitmap. Events happening when the bitmap is full, will get discarded.&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Number of offline messages&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|Capped at 15 messages, unless the account has a Premium Subscription, in which case the cap raises to 80 messages.}}&lt;br /&gt;
| Number of offline messages (involving [[IM|IMs]], inventory offers, group notices, group invitations) received before messages get capped. Note: If autoAcceptNewInventory (debug setting) is set to TRUE (the default is FALSE), then all inventory offers, even above 15 (or 80 in the case of Premium members), go directly to inventory and do not count against the cap on offline messages. &lt;br /&gt;
| [[IM]] - [https://community.secondlife.com/blogs/entry/2559-group-limits-update-no-changes-for-basic-members/ Blog Post]&lt;br /&gt;
|-&lt;br /&gt;
||Length of a properly delivered email reply to an [[IM]]&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|1023 bytes or single-byte characters}}&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Time after which a reply to an [[IM]] can be sent via email.&lt;br /&gt;
| {{no|when receiving the IM via email.}}&lt;br /&gt;
| {{no|5 days after receiving the offline IM via email.}}&lt;br /&gt;
| n/a&lt;br /&gt;
| [https://blogs.secondlife.com/community/features/blog/2007/02/06/im-to-e-mail-return-addresses-changing Second Life Blogs]&lt;br /&gt;
|-&lt;br /&gt;
||Time period for which [[IM|IMs]] are stored within Second Life.&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|31 days after receiving the [[IM]]}}&lt;br /&gt;
| [[User:Torley_Linden|Torley Linden]] confirmed this with [[User:Kelly_Linden|Kelly Linden]]&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Number of [[IM|IMs]] sent by an object within an hour&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|5000 per hour}}&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[Gesture]]s ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Limit affects&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Lower limit&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Upper limit&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Comment&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;More coverage&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||Shortcut key mappings&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|33 unique combinations, since {{K|F2}}&amp;amp;ndash;{{K|F12}} can be used with the {{K|Ctrl}} or {{K|Shift}} modifiers.}}&lt;br /&gt;
| n/a&lt;br /&gt;
| [[All_keyboard_shortcut_keys]] and [http://community.secondlife.com/t5/English-Knowledge-Base/Keyboard-shortcuts/ta-p/1086557 the knowledge base]&lt;br /&gt;
|-&lt;br /&gt;
||Chat step length&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|127 bytes or single-byte characters}}&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Wait time&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|3600 seconds (which is one hour)}}&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| Maximum steps data&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|1000 bytes}} of packed data; saving with more data returns the message &amp;quot;Gesture save failed. This gesture has too many steps. Try removing some steps, then save again.&amp;quot; Shorter text, for example, will allow more steps.&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Length of included assets&lt;br /&gt;
| n/a&lt;br /&gt;
| see sections for [[#Animation|animation]], [[#Sound|sound]]&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[Group]]s ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Maximum number of groups you can belong to:&#039;&#039;&#039; 42 for Basic accounts, 70 for Premium accounts.&lt;br /&gt;
** After downgrading from a Premium account to a Basic account, you may not join any new groups until you are a member of fewer than 42 groups.&lt;br /&gt;
** Roles within groups are sort of like sub-groups. In many cases, you can use them instead of creating new groups.&lt;br /&gt;
* &#039;&#039;&#039;Minimum number of members in a group:&#039;&#039;&#039; 2&lt;br /&gt;
** A group with only 1 person for 48 hours will be disbanded (cancelled). Unless the group owns land.&lt;br /&gt;
* &#039;&#039;&#039;Maximum number of roles allowed in a group:&#039;&#039;&#039; 10 (including &amp;quot;Owners&amp;quot; and &amp;quot;Everyone&amp;quot;, which cannot be deleted)&lt;br /&gt;
* &#039;&#039;&#039;Maximum Group Name:&#039;&#039;&#039; 35 single-byte characters.&lt;br /&gt;
* &#039;&#039;&#039;Maximum Group Title:&#039;&#039;&#039; 20 single-byte characters.&lt;br /&gt;
* &#039;&#039;&#039;Maximum Length of a Group Notice:&#039;&#039;&#039; 512 single-byte characters.&lt;br /&gt;
* &#039;&#039;&#039;Maximum Age of a Group Notice:&#039;&#039;&#039; 14 days.&lt;br /&gt;
&lt;br /&gt;
== [[Inventory]] ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Maximum number of inventory items that can be sent in a folder:&#039;&#039;&#039; 42&lt;br /&gt;
** Folders count as items too. This has more to do with packet size limits than cheeky Douglas Adams references.&lt;br /&gt;
* &#039;&#039;&#039;Maximum number of inventory items that can be contained in a prim:&#039;&#039;&#039; 10,000&lt;br /&gt;
* &#039;&#039;&#039;Maximum characters in an inventory item name:&#039;&#039;&#039; 63&lt;br /&gt;
* &#039;&#039;&#039;Maximum notecard line:&#039;&#039;&#039; None, but scripts can only read the first 255 bytes.&lt;br /&gt;
* &#039;&#039;&#039;Maximum notecard size:&#039;&#039;&#039; 65,536 bytes&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* &#039;&#039;&#039;Number of items in the Library:&#039;&#039;&#039; 1,248 as of 2010-06-17&lt;br /&gt;
* &#039;&#039;&#039;Number of items in the Library:&#039;&#039;&#039; 2,210 as of 2012-11-04 --&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Number of items in the Library:&#039;&#039;&#039; 3,500 as of 2019-08-10&lt;br /&gt;
** Verified by [[How_does_the_Library_work|hiding the Library]] and counting the difference.&lt;br /&gt;
* &#039;&#039;&#039;Maximum number of inventory items displayed in a single inventory folder:&#039;&#039;&#039; Several thousand. &amp;lt;!-- not a specific item count, because the data is variable size, but still useful to document that there is a limit. --&amp;gt;&lt;br /&gt;
** This was discussed during [http://wiki.secondlife.com/wiki/Simulator_User_Group/Transcripts/2011.03.08] &amp;quot;the folder will load up to the limit number of items, and remaining ones won&#039;t show up in the viewer. you still own them, they aren&#039;t lost, but they will be hidden until the folder size is reduced.&amp;quot;&lt;br /&gt;
** There is no specified limit for total avatar inventory, very large folders can be split.&lt;br /&gt;
** There was discussion in the Third Party Developers&#039; UG (4/10/2015) meeting about new inventory and login problems from having large numbers of items in a single folder. AISv3 &#039;&#039;removed&#039;&#039; server-side limits on the number of items in a folder. Flat inventories are bad. No one is certain at what number of items in a folder cause a login problem. The fix is to clear the inventory cache (not the viewer cache) and log into a deserted, empty region then move inventory items into folders and sub-folders. - The problem appears at different a number of items depending on your computer and connection speed. Hopefully being on an empty region will give one enough edge to get logged in and do some corrective work before being dropped. If not, you will need to contact support for help. They will divide large folders into smaller groups so you can log in.&lt;br /&gt;
&lt;br /&gt;
== [[Land]] ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Maximum [[Land#Parcel|parcel]] size:&#039;&#039;&#039; 65,536 meters²&lt;br /&gt;
** Covering a whole region, or square on the World Map.&lt;br /&gt;
* &#039;&#039;&#039;Minimum parcel size:&#039;&#039;&#039; 16 meters²&lt;br /&gt;
* &#039;&#039;&#039;Maximum parcel name length:&#039;&#039;&#039; 63 single-byte characters&lt;br /&gt;
* &#039;&#039;&#039;Maximum parcel description length:&#039;&#039;&#039; 255 characters&lt;br /&gt;
* &#039;&#039;&#039;Region name length:&#039;&#039;&#039; Linden Concierge policy states a minimum of 3 characters, and a maximum of 25 characters (including spaces). See [[Linden Lab Official:Guidelines for Private Region Naming|Guidelines for Private Region Naming]]. However, the technical maximum limit is 35 characters, and exceptions to the concierge policy do exist (e.g [http://maps.secondlife.com/secondlife/Sandbox%20-%20Weapons%20testing%20%28no%20damag/128/128/2 Sandbox - Weapons testing (no damag] and [http://slurl.com/secondlife/X/128/128/24 X])&lt;br /&gt;
* &#039;&#039;&#039;Ban line height for &amp;quot;no entry&amp;quot; or &amp;quot;pay to access&amp;quot;&#039;&#039;&#039; (in other words, &amp;quot;allow public access&amp;quot; is turned off, or &amp;quot;allow group access&amp;quot; is turned on, in the parcel options) is the parcel&#039;s ground elevation &#039;&#039;plus&#039;&#039; 50 meters (except, if the region has been set to &amp;quot;Block Parcel Fly Over&amp;quot; in which case the access controls extend to at least 4096 meters). If a user is &#039;&#039;&#039;explicitly banned by name&#039;&#039;&#039;, the height is the parcel&#039;s ground elevation &#039;&#039;plus&#039;&#039; 5000 meters. On current viewers this is visible to the full extent.&lt;br /&gt;
* &#039;&#039;&#039;Maximum prims in a [[Land#Region|region]]:&#039;&#039;&#039;&lt;br /&gt;
** &amp;quot;Mainland / Full Region&amp;quot; and &amp;quot;Linden Homes / Full Region&amp;quot;: 22,500&lt;br /&gt;
** Full Regions in private estates: 20,000 with an [https://community.secondlife.com/t5/Featured-News/Upgrade-Your-Full-Private-Region-to-30-000-Land-Impact-Today/ba-p/3086162 option for 30,000]&lt;br /&gt;
** Homestead: 5,000&lt;br /&gt;
** Openspace : 1,000&lt;br /&gt;
:: To check a region&#039;s capacity, use &amp;lt;tt&amp;gt;[[llGetEnv]](&amp;quot;region_max_prims&amp;quot;)&amp;lt;/tt&amp;gt;.&lt;br /&gt;
::&#039;&#039;(Region types are as found in the General tab of World &amp;gt; About Land, or returned by &#039;&#039;&amp;lt;tt&amp;gt;llGetEnv(&amp;quot;region_product_name&amp;quot;)&amp;lt;/tt&amp;gt;&#039;&#039;)&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Maximum auto return value&#039;&#039;&#039;: Besides &amp;quot;0&amp;quot; (which means &#039;&#039;never&#039;&#039;), {{HoverText|999,999|Almost 23 months}} minutes is the highest auto return value.&lt;br /&gt;
* &#039;&#039;&#039;Terraforming limits:&#039;&#039;&#039;&lt;br /&gt;
** Most mainland can be raised/lowered by 4 meters (+/-).&lt;br /&gt;
** Some mainland cannot be terraformed, including: Bay City regions, Boardman, Brown, De Haro, Horizons, Kama City regions, Nautilus City regions, Nova Albion regions, and Shermerville regions.&lt;br /&gt;
** [http://community.secondlife.com/t5/English-Knowledge-Base/Linden-Homes/ta-p/700103 Linden Homes] do not allow terraforming.&lt;br /&gt;
** A few, very old mainland Regions like Da Boom have a terraform range of 40 meters (+/-).&lt;br /&gt;
** Estate (private island) terraformability is settable to a maximum of 100 meters (+/-) by the estate owner or managers.&lt;br /&gt;
* &#039;&#039;&#039;Maximum water height:&#039;&#039;&#039; 100 meters using inworld controls, 255 meters by using a *.raw file upload.&lt;br /&gt;
** Region water height is usually 20 meters, and adjacent regions should have the same water height, or else they will look discontinuous.&lt;br /&gt;
* &#039;&#039;&#039;Maximum terrain height:&#039;&#039;&#039; 255 meters using inworld controls (mainland limit), 510 meters by using a *.raw file upload.&lt;br /&gt;
* &#039;&#039;&#039;Miscellaneous estate limits:&#039;&#039;&#039; You can have a maximum of 15 estate managers, 500 allowed Residents, 63 allowed groups, and 500 banned Residents.&lt;br /&gt;
** See World menu &amp;gt; Region/Estate &amp;gt; Estate tab.&lt;br /&gt;
* &#039;&#039;&#039;Maximum number of agents&#039;&#039;&#039;&lt;br /&gt;
** Full region: 100 (Typically set to 40 on mainland, 55 on Linden Homes regions, but this does vary. Some meeting areas have this set to 60 and higher.)&lt;br /&gt;
*** Recent server performance improvements make regions with 60 agents in them perform quite well.&lt;br /&gt;
** [[Land#Homestead|Homestead]]: 20&lt;br /&gt;
** [[Land#Openspace|Openspace]]: 10&lt;br /&gt;
* &#039;&#039;&#039;Freeze Time:&#039;&#039;&#039; Land owners can [[freeze]] other Residents for up to 30 seconds.  Members of land owning groups can also be granted this ability.&lt;br /&gt;
* &#039;&#039;&#039;Minimum parcel that can be listed in Places or All search:&#039;&#039;&#039; 144 meters² &amp;lt;!-- 128 and under are disabled --&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Minimum parcel that can be listed in Events:&#039;&#039;&#039; 512 meters²&lt;br /&gt;
* &#039;&#039;&#039;Maximum altitude for event listings:&#039;&#039;&#039;  768 meters ({{JIRA|WEB-814}})&lt;br /&gt;
* &#039;&#039;&#039;Maximum heights that objects can be seen on the [[World Map]]:&#039;&#039;&#039; 400.005m&lt;br /&gt;
&lt;br /&gt;
== [[Mesh]] ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Limit affects&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Lower limit&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Upper limit&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Comment&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;More coverage&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||Number of vertices&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|65536 vertices per LOD for each [[mesh]] - See [[Talk:Limits#Mesh_Limits|discussion page]]}}&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||COLLADA file size&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|Maximum mesh asset size after compression is 8 MB, roughly equivalent to a 256 MB Raw COLLADA file.}}&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Bone influence weights per vertex&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|4}}&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Number of materials per mesh&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|8}}&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Number of materials per face&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|1}}&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Physics weight for a vehicle&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|32.0}}&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Maximum number of triangles for Animesh&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|10000}}&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===User Found Temporary Mesh limits:===&lt;br /&gt;
&#039;&#039;Because of an apparent bug in the importer stay within these limits.&#039;&#039;&lt;br /&gt;
* 174,752 triangles, beyond which additional triangles will appear as holes.&lt;br /&gt;
* The 64k vertices per material is pre-empted by a limit of 21,844 triangles per material, which is presently reported as {{Jira|BUG-1001}}. (4/2014 - See [[Talk:Limits#Mesh_Limits|discussion page]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:: The import process will continue making new materials beyond 8 x 21,844 (=174,752) triangles, but the extra triangles then get dropped by the limitation to 8 materials, causing holes in the resulting object. Over the 21,844 triangle limit, the vertex count will start to climb steeply, even with smooth shading, because the materials get highly interspersed. So the same vertices have to appear in multiple material lists. So the moral of the story is to stay below 21,844 triangles per material, for now, if you want to avoid some unexpected effects.&lt;br /&gt;
&lt;br /&gt;
::Since viewer release 3.8.4, processing of meshes in the Collada file that have faces assigned to more than 8 materials has changed. Instead of simply dropping the extra material faces, the uploader now creates a new object to accommodate them. The result is that the single mesh is divided into multiple objects (prims) in a linkset. Thus the limitation to 8 materials is removed as far as input is concerned, but still applies to each of the resulting linked objects actually uploaded. As a consequence it is now possible to upload a mesh with more than 174,752 triangles, although it will be divided into multiple objects.&lt;br /&gt;
&lt;br /&gt;
== Misc. ==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;[https://secondlife.com/currency/describe-limits.php Billing and Trading Limits]&#039;&#039;&#039; - Includes [https://secondlife.com/whatis/economy-market.php LindeX] currency exchange limits.&lt;br /&gt;
&lt;br /&gt;
== Navigation ==&lt;br /&gt;
&lt;br /&gt;
[[File:Max Alt.jpg|thumb|right|435px|&#039;&#039;&#039;Height counter error above 2147483647 meters&#039;&#039;&#039;]]&lt;br /&gt;
* &#039;&#039;&#039;Absolute height limit:&#039;&#039;&#039; [http://en.wikipedia.org/wiki/2147483647#2147483647_in_computing 2147483647]&amp;amp;nbsp;=&amp;amp;nbsp;2&amp;lt;sup&amp;gt;31&amp;lt;/sup&amp;gt;&amp;amp;nbsp;−&amp;amp;nbsp;1 meters, which causes the altitude counter to roll over. Altitudes well below this cause graphics errors probably due to limited floating point number precision.&lt;br /&gt;
* &#039;&#039;&#039;Highest z-value of an [[SLurl]], that will still teleport you to a positive altitude:&#039;&#039;&#039; 4096&lt;br /&gt;
** This used to be much higher, but is clamped in late model viewers.&lt;br /&gt;
&lt;br /&gt;
== [[Profile]] ==&lt;br /&gt;
&lt;br /&gt;
Each 7-bit ASCII character is encoded in one byte. International characters might need more bytes. When pasting text instead of typing, you can get in one byte more into each of the below.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;2nd Life tab&#039;s About field&#039;&#039;&#039; - 510 bytes&lt;br /&gt;
* &#039;&#039;&#039;Picks tab&#039;&#039;&#039; - 10 picks with 1022 bytes each&lt;br /&gt;
* &#039;&#039;&#039;1st Life tab&#039;s Info field&#039;&#039;&#039; - 253 bytes&lt;br /&gt;
* &#039;&#039;&#039;Classified tab&#039;&#039;&#039; - 100 listings with x bytes each&lt;br /&gt;
* &#039;&#039;&#039;My Notes&#039;&#039;&#039; - 1022 bytes&lt;br /&gt;
&lt;br /&gt;
== Performance ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Healthy Viewer FPS&#039;&#039;&#039; - Generally, FPS above 15 is good. The higher it gets, the smoother. You can check via [[Advanced]] menu &amp;gt; Performance Tools &amp;gt; Lag Meter, or for more advanced usage, see Advanced &amp;gt; Performance Tools &amp;gt; Statistics Bar.&lt;br /&gt;
* &#039;&#039;&#039;Avatar Rendering Cost scores&#039;&#039;&#039; - [[Avatar Rendering Cost|Learn all about it!]]&lt;br /&gt;
&lt;br /&gt;
== [[Scripting]] == &amp;lt;!-- Important scripting limits should be placed here, less important ones should be in the articles Caveats or Specification sections --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Height at which scripts reactivate on a no-script parcel&#039;&#039;&#039; - 50 m above terrain mesh. Scripted objects that take controls will keep running when you fly down or enter a no-script parcel. (If scripts are disabled in the region debug panel, they will not run at any height.)&lt;br /&gt;
* &#039;&#039;&#039;Maximum height where scripts can run&#039;&#039;&#039; - none, as long as the object remains rezzed or attached.&lt;br /&gt;
* &#039;&#039;&#039;Maximum script source code size&#039;&#039;&#039; - 65536 single byte characters (that&#039;s a viewer limit and can be changed in the config file &#039;panel_script_ed.xml&#039;).&lt;br /&gt;
* &#039;&#039;&#039;Maximum script memory size (LSO)&#039;&#039;&#039; - 16384 bytes.&lt;br /&gt;
* &#039;&#039;&#039;Maximum script memory size (Mono)&#039;&#039;&#039; - 65536 bytes (the maximum memory available to Mono scripts can be constrained via [[llSetMemoryLimit]]).&lt;br /&gt;
* &#039;&#039;&#039;Maximum active [[llListen|listeners]] per script&#039;&#039;&#039; - 65.&lt;br /&gt;
** &#039;&#039;&#039;Usable channel for each listener&#039;&#039;&#039; - &#039;&#039;min.&#039;&#039; -2147483648, &#039;&#039;max.&#039;&#039; 2147483647, including the following special channels: [[PUBLIC_CHANNEL]] &#039;&#039;and&#039;&#039; [[DEBUG_CHANNEL]].&lt;br /&gt;
* For specific scripting limits, look up calls in the &#039;&#039;&#039;[[LSL Portal]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== [[Sound]] ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Limit affects&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Lower limit&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Upper limit&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Comment&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;More coverage&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||Sound length&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|10.00000 seconds (441,000 samples)}}&lt;br /&gt;
| 441,001 samples (10.00002 seconds) won&#039;t work. You&#039;re advised to cut longer sounds into 9.9-second-pieces.&lt;br /&gt;
| n/a&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[Textures]] ==&lt;br /&gt;
* &#039;&#039;&#039;[http://en.wikipedia.org/wiki/Aspect_ratio Aspect ratios]&#039;&#039;&#039; of profile, place, etc. pictures — all of these were measured at UI size (Edit menu &amp;gt; Preferences &amp;gt; General tab &amp;gt; UI Size) = 1.000:&lt;br /&gt;
&lt;br /&gt;
=== Second Life Viewer 3.6 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Search &amp;gt; Classifieds thumbnail&#039;&#039;&#039; - ~3:2 (101&amp;amp;times;69 pixels)&lt;br /&gt;
* &#039;&#039;&#039;Search &amp;gt; Classifieds expanded&#039;&#039;&#039; - ~4:3 (159&amp;amp;times;120 pixels)&lt;br /&gt;
* &#039;&#039;&#039;Search &amp;gt; Classifieds expanded &amp;gt; More Info&#039;&#039;&#039; - native aspect ratio&lt;br /&gt;
* &#039;&#039;&#039;Search &amp;gt; Destination Guide thumbnail&#039;&#039;&#039; - ~3:2 (101&amp;amp;times;69 pixels) &lt;br /&gt;
* &#039;&#039;&#039;Search &amp;gt; Destination Guide expanded&#039;&#039;&#039; - ~4:3 (159&amp;amp;times;120 pixels)&lt;br /&gt;
* &#039;&#039;&#039;Search &amp;gt; People&#039;&#039;&#039; - 1:1 (100&amp;amp;times;100 pixels)&lt;br /&gt;
* &#039;&#039;&#039;Search &amp;gt; Places expanded&#039;&#039;&#039; ~4:3 (159&amp;amp;times;120 pixels)&lt;br /&gt;
* &#039;&#039;&#039;Place Profile&#039;&#039;&#039; - ~3:2 (290&amp;amp;times;197 pixels)&lt;br /&gt;
* &#039;&#039;&#039;About Land &amp;gt; Options tab&#039;&#039;&#039; - ~4:3 (195&amp;amp;times;150 pixels)&lt;br /&gt;
* &#039;&#039;&#039;Profile &amp;gt; Picture&#039;&#039;&#039; - native aspect ratio; thumbnail cropped to 72&amp;amp;times;72 pixels; zoomed uncropped up to 300&amp;amp;times;300 pixels&lt;br /&gt;
* &#039;&#039;&#039;Profile &amp;gt; Real world picture&#039;&#039;&#039; - native aspect ratio; thumbnail cropped to 45&amp;amp;times;45 pixels; zoomed uncropped up to 300&amp;amp;times;300 pixels&lt;br /&gt;
* &#039;&#039;&#039;Profile &amp;gt; Picks thumbnail&#039;&#039;&#039; - 4:3 (60&amp;amp;times;45 pixels)&lt;br /&gt;
* &#039;&#039;&#039;Profile &amp;gt; Pick expanded&#039;&#039;&#039; - 4:3 (320&amp;amp;times;240 pixels)&lt;br /&gt;
&lt;br /&gt;
=== 1.x Series Viewers ===&lt;br /&gt;
(official Viewer up to 1.23.5, still used by some [[Alternate viewers|Third Party Viewers]])&lt;br /&gt;
* &#039;&#039;&#039;Search &amp;gt; All for &amp;quot;Classifieds&amp;quot;, &amp;quot;People&amp;quot;, and &amp;quot;Places&amp;quot;&#039;&#039;&#039; - 4:3 (256&amp;amp;times;192 pi&amp;amp;times;els)&lt;br /&gt;
* &#039;&#039;&#039;Search &amp;gt; Places and Classified tabs&#039;&#039;&#039; - ~7:5 (398&amp;amp;times;282 pixels)&lt;br /&gt;
* &#039;&#039;&#039;Search &amp;gt; Land tab&#039;&#039;&#039; - ~7:5 (358&amp;amp;times;252 pixels)&lt;br /&gt;
* &#039;&#039;&#039;Profile &amp;gt; 2nd Life tab&#039;&#039;&#039; - ~4:3 (178&amp;amp;times;133 pixels)&lt;br /&gt;
* &#039;&#039;&#039;Profile &amp;gt; Picks tab&#039;&#039;&#039; - 16:9 (288&amp;amp;times;162 pixels)&lt;br /&gt;
* &#039;&#039;&#039;Profile &amp;gt; 1st Life tab&#039;&#039;&#039; - 1:1 (133&amp;amp;times;133 pixels)&lt;br /&gt;
* &#039;&#039;&#039;Profile &amp;gt; Classifieds tab&#039;&#039;&#039; - ~3:2 (206&amp;amp;times;137 pixels)&lt;br /&gt;
* &#039;&#039;&#039;Profile &amp;gt; Web tab&#039;&#039;&#039; - 1:1 (400&amp;amp;times;400 pixels)&lt;br /&gt;
** A scrollbar uses 15 pixels on the right-hand side.&lt;br /&gt;
* &#039;&#039;&#039;About Land &amp;gt; Options tab&#039;&#039;&#039; - ~3:2 (178&amp;amp;times;117 pixels)&lt;br /&gt;
* &#039;&#039;&#039;Group Information &amp;gt; General tab&#039;s &amp;quot;Group Insignia&amp;quot;&#039;&#039;&#039; - 1:1 (126&amp;amp;times;126 pixels)&lt;br /&gt;
** Some of these textures are shared (for example, Search &amp;gt; All place pages, Search &amp;gt; Places, and About Land &amp;gt; Options use the same image), so you should pick a well-balanced ratio and size.&lt;br /&gt;
** [[Texture_aspect_ratios|Learn how to get correct texture aspect ratios when editing images.]]&lt;br /&gt;
&lt;br /&gt;
=== All Viewers ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Maximum texture size&#039;&#039;&#039; - 1024&amp;amp;times;1024 pixels&lt;br /&gt;
** All Second Life textures are constrained to [http://en.wikipedia.org/wiki/Power_of_2 powers of 2] (e.g., 128, 256, 512).&lt;br /&gt;
** Some textures inworld have a resolution as high as 2048&amp;amp;times;2048; this is due to a previous limit that was higher.&lt;br /&gt;
** We strongly recommend you use as small textures as possible because larger ones consume more memory and take substantially longer to load.&lt;br /&gt;
** Where large textures are being forced by import to only 512&amp;amp;times;512, lower your ...&amp;gt; Preferences &amp;gt;...&amp;gt; UI Size under 1.0, to increase import size to the max 1024&amp;amp;times;1024.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Minimum texture size&#039;&#039;&#039; - 4&amp;amp;times;4 pixels&lt;br /&gt;
** This means that there are nine possible image dimensions: 4, 8, 16, 32, 64, 128, 256, 512, and 1024 pixels, either horizontal or vertical.&lt;br /&gt;
&lt;br /&gt;
[[Category:Creation]] [[Category:Tutorials]] [[Category:Lists]]&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
In general 1 byte is enough to contain one character.&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Sei_Lisa&amp;diff=1209550</id>
		<title>User:Sei Lisa</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Sei_Lisa&amp;diff=1209550"/>
		<updated>2020-09-13T16:50:44Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Add regex engine, fix minor stuff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Scripter. SL is currently my job. I take custom orders.&lt;br /&gt;
&lt;br /&gt;
I am the maintainer of the following tools for scripters:&lt;br /&gt;
&lt;br /&gt;
* [http://lsl.blacktulip-virtual.com/lsl-pyoptimizer/ LSL-PyOptimizer], a tool written in Python that optimizes scripts for size.&lt;br /&gt;
* [http://lsl.blacktulip-virtual.com/lslcalc/lslcalc.php LSL Calculator] calculates expressions using LSL syntax. It is able to perform calculations with all LSL types.&lt;br /&gt;
* [https://bitbucket.org/Sei_Lisa/kwdb kwdb], a LSL keywords database that can generate syntax for various editors and tools, for SL and OpenSim.&lt;br /&gt;
* [http://lsl.blacktulip-virtual.com/lsl/ Unofficial LSL Reference Wiki], an alternative wiki for LSL reference. Work-in-progress. Sort of stalled at present.&lt;br /&gt;
* [http://lsl.blacktulip-virtual.com/lsl/articles/regex Regular expression engine] for LSL.&lt;br /&gt;
&lt;br /&gt;
I am not the maintainer of this one, but kind of a &amp;quot;de-facto maintainer&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/makopo/lslint lslint], a tool to check your script for errors and common mistakes, catching them all in one go instead of stopping at the first one. I was told there was a plug-in for SublimeText but it seems to no longer be usable.&lt;br /&gt;
&lt;br /&gt;
My store in Marketplace is [https://marketplace.secondlife.com/stores/92293 &amp;amp;lt;SeiS&amp;amp;gt;].&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSetClickAction&amp;diff=1209377</id>
		<title>LlSetClickAction</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSetClickAction&amp;diff=1209377"/>
		<updated>2020-06-12T18:47:25Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Implemented now - Undo revision 1209352 by XylaAodha Resident (talk)&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.  The viewer always behaves as though an attached object has [[CLICK_ACTION_TOUCH]] set.&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 unpaking 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;source 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;/source&amp;gt;&lt;br /&gt;
{{!!}}&lt;br /&gt;
&amp;lt;source 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;/source&amp;gt;&lt;br /&gt;
{{!!}}&lt;br /&gt;
&amp;lt;source 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;/source&amp;gt;&lt;br /&gt;
{{!}}}&lt;br /&gt;
&amp;lt;source 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_BUY);&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;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source 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;/source&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}}&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;
&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;
&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;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Internal_Textures&amp;diff=1208763</id>
		<title>Internal Textures</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Internal_Textures&amp;diff=1208763"/>
		<updated>2019-10-03T17:59:05Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Multi-lang|category=LSL}}{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
Various Textures built into the viewer&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; {{prettytable}}&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
!Texture Name&lt;br /&gt;
![[UUID]]&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|[[TEXTURE_DEFAULT]]&lt;br /&gt;
|89556747-24cb-43ed-920b-47caed15465f&lt;br /&gt;
|Default plywood texture&lt;br /&gt;
|-&lt;br /&gt;
|[[TEXTURE_PLYWOOD]]&lt;br /&gt;
|89556747-24cb-43ed-920b-47caed15465f&lt;br /&gt;
|Default plywood texture&lt;br /&gt;
|-&lt;br /&gt;
|[[TEXTURE_BLANK]]&lt;br /&gt;
|5748decc-f629-461c-9a36-a35a221fe21f&lt;br /&gt;
|Blank, all white texture in the Texture window&lt;br /&gt;
|-&lt;br /&gt;
|[[TEXTURE_TRANSPARENT]]&lt;br /&gt;
|8dcd4a48-2d37-4909-9f78-f7a9eb4ef903&lt;br /&gt;
|*Default Transparent Texture&lt;br /&gt;
|-&lt;br /&gt;
|[[TEXTURE_MEDIA]]&lt;br /&gt;
|8b5fec65-8d8d-9dc5-cda8-8fdf2716e361&lt;br /&gt;
|Also triggers targeting&lt;br /&gt;
|-&lt;br /&gt;
|[[Invisiprim]] 1&lt;br /&gt;
|38b86f85-2575-52a9-a531-23108d8da837&lt;br /&gt;
|Hides alpha textures behind it&lt;br /&gt;
|-&lt;br /&gt;
|[[Invisiprim]] 2&lt;br /&gt;
|e97cf410-8e61-7005-ec06-629eba4cd1fb&lt;br /&gt;
|Hides alpha textures behind it&lt;br /&gt;
|-&lt;br /&gt;
|IMG_USE_BAKED_HEAD&lt;br /&gt;
|5a9f4a74-30f2-821c-b88d-70499d3e7183&lt;br /&gt;
|Sets face to use specified channel for [https://community.secondlife.com/knowledgebase/english/bakes-on-mesh-r1512/ Bakes on Mesh]&lt;br /&gt;
|-&lt;br /&gt;
|IMG_USE_BAKED_UPPER&lt;br /&gt;
|ae2de45c-d252-50b8-5c6e-19f39ce79317&lt;br /&gt;
|Sets face to use specified channel for [https://community.secondlife.com/knowledgebase/english/bakes-on-mesh-r1512/ Bakes on Mesh]&lt;br /&gt;
|-&lt;br /&gt;
|IMG_USE_BAKED_LOWER&lt;br /&gt;
|24daea5f-0539-cfcf-047f-fbc40b2786ba&lt;br /&gt;
|Sets face to use specified channel for [https://community.secondlife.com/knowledgebase/english/bakes-on-mesh-r1512/ Bakes on Mesh]&lt;br /&gt;
|-&lt;br /&gt;
|IMG_USE_BAKED_EYES&lt;br /&gt;
|52cc6bb6-2ee5-e632-d3ad-50197b1dcb8a&lt;br /&gt;
|Sets face to use specified channel for [https://community.secondlife.com/knowledgebase/english/bakes-on-mesh-r1512/ Bakes on Mesh]&lt;br /&gt;
|-&lt;br /&gt;
|IMG_USE_BAKED_SKIRT&lt;br /&gt;
|43529ce8-7faa-ad92-165a-bc4078371687&lt;br /&gt;
|Sets face to use specified channel for [https://community.secondlife.com/knowledgebase/english/bakes-on-mesh-r1512/ Bakes on Mesh]&lt;br /&gt;
|-&lt;br /&gt;
|IMG_USE_BAKED_HAIR&lt;br /&gt;
|09aac1fb-6bce-0bee-7d44-caac6dbb6c63&lt;br /&gt;
|Sets face to use specified channel for [https://community.secondlife.com/knowledgebase/english/bakes-on-mesh-r1512/ Bakes on Mesh]&lt;br /&gt;
|-&lt;br /&gt;
|IMG_USE_BAKED_LEFTARM&lt;br /&gt;
|ff62763f-d60a-9855-890b-0c96f8f8cd98&lt;br /&gt;
|Sets face to use specified channel for [https://community.secondlife.com/knowledgebase/english/bakes-on-mesh-r1512/ Bakes on Mesh]&lt;br /&gt;
|-&lt;br /&gt;
|IMG_USE_BAKED_LEFTLEG&lt;br /&gt;
|8e915e25-31d1-cc95-ae08-d58a47488251&lt;br /&gt;
|Sets face to use specified channel for [https://community.secondlife.com/knowledgebase/english/bakes-on-mesh-r1512/ Bakes on Mesh]&lt;br /&gt;
|-&lt;br /&gt;
|IMG_USE_BAKED_AUX1&lt;br /&gt;
|9742065b-19b5-297c-858a-29711d539043&lt;br /&gt;
|Sets face to use specified channel for [https://community.secondlife.com/knowledgebase/english/bakes-on-mesh-r1512/ Bakes on Mesh]&lt;br /&gt;
|-&lt;br /&gt;
|IMG_USE_BAKED_AUX2&lt;br /&gt;
|03642e83-2bd1-4eb9-34b4-4c47ed586d2d&lt;br /&gt;
|Sets face to use specified channel for [https://community.secondlife.com/knowledgebase/english/bakes-on-mesh-r1512/ Bakes on Mesh]&lt;br /&gt;
|-&lt;br /&gt;
|IMG_USE_BAKED_AUX3&lt;br /&gt;
|edd51b77-fc10-ce7a-4b3d-011dfc349e4f&lt;br /&gt;
|Sets face to use specified channel for [https://community.secondlife.com/knowledgebase/english/bakes-on-mesh-r1512/ Bakes on Mesh]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
&lt;br /&gt;
* [[llSetTexture]]&lt;br /&gt;
&lt;br /&gt;
[[Category:LSL Texture]]&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSetVelocity&amp;diff=1208722</id>
		<title>LlSetVelocity</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSetVelocity&amp;diff=1208722"/>
		<updated>2019-09-12T23:43:05Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Rename argument, removing confusing references to force&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{LSL_Function/velocity|velocity|local=local}}{{LSL_Function/physical}}&lt;br /&gt;
|func=llSetVelocity&lt;br /&gt;
|func_id=???|func_sleep=0.0|func_energy=???&lt;br /&gt;
|p1_type=vector|p1_name=velocity&lt;br /&gt;
|p2_type=integer|p2_subtype=boolean|p2_name=local&lt;br /&gt;
|func_footnote=Instantaneous velocity not dependent on object energy or mass.&lt;br /&gt;
|func_desc=Applies velocity to object&lt;br /&gt;
|return_text|spec&lt;br /&gt;
|caveats=&lt;br /&gt;
|examples=&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llSetAngularVelocity]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llApplyImpulse]]}}&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Physics&lt;br /&gt;
|cat2=Movement&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
|history = Date of Release  [[ Release_Notes/Second_Life_Server/11#11.08.10.238207 | 10/08/2011 ]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlJsonSetValue&amp;diff=1208545</id>
		<title>LlJsonSetValue</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlJsonSetValue&amp;diff=1208545"/>
		<updated>2019-06-20T09:56:46Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: Undo misleading caveat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Function&lt;br /&gt;
|inject-2={{Issues/BUG-3692}}&lt;br /&gt;
|inject-3={{LSL_Function/negative index|false|specifiers|nc=*}}&lt;br /&gt;
|func_id=|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llJsonSetValue&lt;br /&gt;
|return_type=string&lt;br /&gt;
|p1_type=string|p1_name=json|p1_desc=source JSON data&lt;br /&gt;
|p2_type=list|p2_name=specifiers|p2_desc=location of the of the value to be added, updated or deleted.&lt;br /&gt;
|p3_type=string|p3_name=value|p3_desc=new value or [[JSON_DELETE]] flag.|p3_hover=new value or JSON_DELETE flag.&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc=Returns, if successful, a new [http://json.org JSON] text &#039;&#039;string&#039;&#039; which is {{LSLPT|json}} with the value indicated by the {{LSLPT|specifiers}} list set to {{LSLPT|value}}.&lt;br /&gt;
&lt;br /&gt;
If unsuccessful (usually because of specifying an out of range array index) it returns [[JSON_INVALID]].&lt;br /&gt;
&lt;br /&gt;
An &amp;quot;out of range array index&amp;quot; is defined to be any Integer {{LSLPT|specifiers}} greater than the length of an existing array at that level within the Json text or greater than 0 (zero) at a level an array doesn&#039;t exist.&lt;br /&gt;
&lt;br /&gt;
A special {{LSLPT|specifiers}}, [[JSON_APPEND]], is accepted which appends the {{LSLPT|value}} to the end of the array at the {{LSLPT|specifiers}} level. Care should be taken- if that level is not an array, the existing Value there will be overwritten and replaced with an array containing {{LSLPT|value}} at it&#039;s first (0) index.&lt;br /&gt;
&lt;br /&gt;
Contrary to [[list]]s and [[string]]s, negative indexing of Json arrays is &#039;&#039;&#039;not&#039;&#039;&#039; supported.&lt;br /&gt;
&lt;br /&gt;
If an existing &amp;quot;Key&amp;quot; is {{LSLPT|specifiers}} at that level, its Value will be overwritten by {{LSLPT|value}} unless {{LSLPT|value}} is the magic value [[JSON_DELETE]]. If a value does not exist at {{LSLPT|specifiers}}, a new Key:Value pair will be formed within the Json object. &lt;br /&gt;
&lt;br /&gt;
To delete an existing value at {{LSLPT|specifiers}}, use [[JSON_DELETE]] as the {{LSLPT|value}}. Note it will not prune empty objects or arrays at higher levels.&lt;br /&gt;
&lt;br /&gt;
If {{LSLPT|value}} is [[JSON_TRUE]], [[JSON_FALSE]] or [[JSON_NULL]], the Value set will be the bare words &#039;true&#039;, &#039;false&#039; or &#039;null&#039;, respectively, at the {{LSLPT|specifiers}} location within {{LSLPT|json}}.&lt;br /&gt;
|return_text=&lt;br /&gt;
|spec=See [[Json_usage_in_LSL]]&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
string TEST_STRING_JSON;&lt;br /&gt;
&lt;br /&gt;
init()&lt;br /&gt;
{&lt;br /&gt;
    TEST_STRING_JSON = &amp;quot;[9,\&amp;quot;&amp;lt;1,1,1&amp;gt;\&amp;quot;,false,{\&amp;quot;A\&amp;quot;:8,\&amp;quot;Z\&amp;quot;:9}]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//  [9,&amp;quot;&amp;lt;1,1,1&amp;gt;&amp;quot;,false,{&amp;quot;A&amp;quot;:8,&amp;quot;Z&amp;quot;:9}]&lt;br /&gt;
    say(&amp;quot;Original TEST_STRING_JSON: &amp;quot; + TEST_STRING_JSON);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
run_json_test(string input)&lt;br /&gt;
{&lt;br /&gt;
    string output;&lt;br /&gt;
&lt;br /&gt;
//  changing values within the json string&lt;br /&gt;
&lt;br /&gt;
//  change the first value in the array to 10&lt;br /&gt;
    output = llJsonSetValue(input, [0], &amp;quot;10&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//  [10,&amp;quot;&amp;lt;1,1,1&amp;gt;&amp;quot;,false,{&amp;quot;A&amp;quot;:8,&amp;quot;Z&amp;quot;:9}]&lt;br /&gt;
    say(&amp;quot;( 1): &amp;quot; + output);&lt;br /&gt;
&lt;br /&gt;
//  change the third value in the array to &#039;true&#039;&lt;br /&gt;
    output = llJsonSetValue(input, [2], JSON_TRUE);&lt;br /&gt;
&lt;br /&gt;
//  [9,&amp;quot;&amp;lt;1,1,1&amp;gt;&amp;quot;,true,{&amp;quot;A&amp;quot;:8,&amp;quot;Z&amp;quot;:9}]&lt;br /&gt;
    say(&amp;quot;( 2): &amp;quot; + output);&lt;br /&gt;
&lt;br /&gt;
//  change the value of &amp;quot;A&amp;quot; within the Json object to 3&lt;br /&gt;
    output = llJsonSetValue(input, [3, &amp;quot;A&amp;quot;], &amp;quot;3&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//  [9,&amp;quot;&amp;lt;1,1,1&amp;gt;&amp;quot;,false,{&amp;quot;A&amp;quot;:3,&amp;quot;Z&amp;quot;:9}]&lt;br /&gt;
    say(&amp;quot;( 3): &amp;quot; + output);&lt;br /&gt;
&lt;br /&gt;
//  adding a value or new key-value-pair within the input&lt;br /&gt;
&lt;br /&gt;
//  add the value &amp;quot;Hello&amp;quot; to the end of the array&lt;br /&gt;
//      NOTE: One cannot insert, only add to the end&lt;br /&gt;
    output = llJsonSetValue(input, [JSON_APPEND], &amp;quot;Hello&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//  [9,&amp;quot;&amp;lt;1,1,1&amp;gt;&amp;quot;,false,{&amp;quot;A&amp;quot;:8,&amp;quot;Z&amp;quot;:9},&amp;quot;Hello&amp;quot;]&lt;br /&gt;
    say(&amp;quot;( 4): &amp;quot; + output);&lt;br /&gt;
&lt;br /&gt;
//  add the key-value-pair &amp;quot;B&amp;quot;:10 to the object&lt;br /&gt;
    output = llJsonSetValue(input, [3, &amp;quot;B&amp;quot;], &amp;quot;10&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//  [9,&amp;quot;&amp;lt;1,1,1&amp;gt;&amp;quot;,false,{&amp;quot;A&amp;quot;:8,&amp;quot;B&amp;quot;:10,&amp;quot;Z&amp;quot;:9}]&lt;br /&gt;
    say(&amp;quot;( 5): &amp;quot; + output);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//  Things to look out for when modifying Json text&lt;br /&gt;
//      ~!~ Be careful when using this function ~!~&lt;br /&gt;
&lt;br /&gt;
//  out of bounds array assignment:&lt;br /&gt;
//      defined as attempting to add a value to a position ...&lt;br /&gt;
//      ...greater than the length of the array (which may be 0)&lt;br /&gt;
//      JSON_APPEND is ALWAYS the preferred way to add to an array&lt;br /&gt;
    output = llJsonSetValue(input, [5], &amp;quot;10&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//  %EF%B7%90 (URL escaped JSON_INVALID)&lt;br /&gt;
    say(&amp;quot;( 6): &amp;quot; + llEscapeURL(output));&lt;br /&gt;
&lt;br /&gt;
//  BUT, this works, since it is in bounds&lt;br /&gt;
//      (eqivalent to JSON_APPEND in this case)&lt;br /&gt;
    output = llJsonSetValue(input, [4], &amp;quot;10&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//  [9,&amp;quot;&amp;lt;1,1,1&amp;gt;&amp;quot;,false,{&amp;quot;A&amp;quot;:8,&amp;quot;Z&amp;quot;:9},10]&lt;br /&gt;
    say(&amp;quot;( 7): &amp;quot; + output);&lt;br /&gt;
&lt;br /&gt;
//  careless formation of new arrays&lt;br /&gt;
//      ( the 4 and all subsequent 0&#039;s are all in bounds.)&lt;br /&gt;
    output = llJsonSetValue(input, [4, 0, 0, 0], &amp;quot;10&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//  [9,&amp;quot;&amp;lt;1,1,1&amp;gt;&amp;quot;,false,{&amp;quot;A&amp;quot;:8,&amp;quot;Z&amp;quot;:9},[[[10]]]]&lt;br /&gt;
    say(&amp;quot;( 8): &amp;quot; + output);&lt;br /&gt;
&lt;br /&gt;
//  overwriting an object with an array:&lt;br /&gt;
//      ~!~ mistaken use of JSON_APPEND on an object ~!~&lt;br /&gt;
    output = llJsonSetValue(input, [3, JSON_APPEND], &amp;quot;10&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//  [9,&amp;quot;&amp;lt;1,1,1&amp;gt;&amp;quot;,false,[10]]&lt;br /&gt;
    say(&amp;quot;( 9): &amp;quot; + output);&lt;br /&gt;
&lt;br /&gt;
//  careless formation of new objects&lt;br /&gt;
//      NOTE: &amp;quot;Key&amp;quot; assignemts will NEVER result in a return of JSON_INVALID!&lt;br /&gt;
    output = llJsonSetValue(input, [3, &amp;quot;W&amp;quot;, &amp;quot;X&amp;quot;], &amp;quot;10&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//  [9,&amp;quot;&amp;lt;1,1,1&amp;gt;&amp;quot;,false,{&amp;quot;A&amp;quot;:8,&amp;quot;W&amp;quot;:{&amp;quot;X&amp;quot;:10},&amp;quot;Z&amp;quot;:9}]&lt;br /&gt;
    say(&amp;quot;(10): &amp;quot; + output);&lt;br /&gt;
&lt;br /&gt;
    output = llJsonSetValue(input, [3, &amp;quot;W&amp;quot;, &amp;quot;X&amp;quot;, &amp;quot;Y&amp;quot;], &amp;quot;10&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//  [9,&amp;quot;&amp;lt;1,1,1&amp;gt;&amp;quot;,false,{&amp;quot;A&amp;quot;:8,&amp;quot;W&amp;quot;:{&amp;quot;X&amp;quot;:{&amp;quot;Y&amp;quot;:10}},&amp;quot;Z&amp;quot;:9}]&lt;br /&gt;
    say(&amp;quot;(11): &amp;quot; + output);&lt;br /&gt;
&lt;br /&gt;
//  overwriting an array with an object&lt;br /&gt;
    output = llJsonSetValue(input, [&amp;quot;X&amp;quot;], &amp;quot;10&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//  {&amp;quot;X&amp;quot;:10}&lt;br /&gt;
    say(&amp;quot;(12): &amp;quot; + output);&lt;br /&gt;
&lt;br /&gt;
//  special case considerations:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//  BUG-3692: (NOTE: Corrected in release 13.09.21.281328!)&lt;br /&gt;
//      a bug where, instead of JSON_INVALID being returned, if the out of&lt;br /&gt;
//      bounds index is at a lower level than the topmost (root) level, a&lt;br /&gt;
//      non-compliant JSON text would be formed&lt;br /&gt;
    output = llJsonSetValue(input, [1, 7], &amp;quot;Disappearing Text&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//  Note the &amp;quot;empty&amp;quot; second position that resulted in the returned array&lt;br /&gt;
//  [9,,false,{&amp;quot;A&amp;quot;:8,&amp;quot;Z&amp;quot;:9}]&lt;br /&gt;
// (But now correctly shows JSON_INVALID)&lt;br /&gt;
    say(&amp;quot;(13): &amp;quot; + output);&lt;br /&gt;
&lt;br /&gt;
//  though there is no way to directly delete a key-value-pair &lt;br /&gt;
//  nor remove a value from an array,&lt;br /&gt;
//  the use of JSON_NULL may prove adequate&lt;br /&gt;
    output = llJsonSetValue(input, [3, &amp;quot;A&amp;quot;], JSON_NULL);&lt;br /&gt;
&lt;br /&gt;
//  [9,&amp;quot;&amp;lt;1,1,1&amp;gt;&amp;quot;,false,{&amp;quot;A&amp;quot;:null,&amp;quot;Z&amp;quot;:9}]&lt;br /&gt;
    say(&amp;quot;(14): &amp;quot; + output);&lt;br /&gt;
&lt;br /&gt;
//  if a JSON text object has been formed with llList2Json()&lt;br /&gt;
//  that contains one or more duplicated &amp;quot;Keys&amp;quot;, (allowable&lt;br /&gt;
//  but NOT recommended!) ANY change&lt;br /&gt;
//  made to that object will correct the condition,&lt;br /&gt;
//  with all but the last such &amp;quot;Key&amp;quot; being removed&lt;br /&gt;
    output = llList2Json(JSON_OBJECT, [&amp;quot;A&amp;quot;, 1, &amp;quot;A&amp;quot;, 2, &amp;quot;A&amp;quot;, 3, &amp;quot;B&amp;quot;, 4, &amp;quot;B&amp;quot;, 4]);&lt;br /&gt;
&lt;br /&gt;
//  both Keys &amp;quot;A&amp;quot; and &amp;quot;B&amp;quot; are duplicated&lt;br /&gt;
//  {&amp;quot;A&amp;quot;:1,&amp;quot;A&amp;quot;:2,&amp;quot;A&amp;quot;:3,&amp;quot;B&amp;quot;:4,&amp;quot;B&amp;quot;:4}&lt;br /&gt;
    say(&amp;quot;(15): &amp;quot; + output);&lt;br /&gt;
&lt;br /&gt;
//  only the last value of the duplications is accessable though&lt;br /&gt;
&lt;br /&gt;
//  3&lt;br /&gt;
    say(&amp;quot;(16): &amp;quot; + llJsonGetValue(output, [&amp;quot;A&amp;quot;]));&lt;br /&gt;
&lt;br /&gt;
//  condition corrected by adding a key-value-pair...&lt;br /&gt;
&lt;br /&gt;
//  {&amp;quot;A&amp;quot;:3,&amp;quot;B&amp;quot;:4,&amp;quot;Z&amp;quot;:5}&lt;br /&gt;
    say(&amp;quot;(17): &amp;quot; + llJsonSetValue(output, [&amp;quot;Z&amp;quot;], &amp;quot;5&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
//  ... or by changing a value&lt;br /&gt;
&lt;br /&gt;
// {&amp;quot;A&amp;quot;:5,&amp;quot;B&amp;quot;:4}&lt;br /&gt;
    say(&amp;quot;(18): &amp;quot; + llJsonSetValue(output, [&amp;quot;A&amp;quot;], &amp;quot;5&amp;quot;));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
say(string message)&lt;br /&gt;
{&lt;br /&gt;
    llOwnerSay(message);&lt;br /&gt;
//  llRegionSayTo(llGetOwner(), PUBLIC_CHANNEL, message);&lt;br /&gt;
//  llWhisper(PUBLIC_CHANNEL, message);&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;
        init();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_end(integer num_detected)&lt;br /&gt;
    {&lt;br /&gt;
//      copy &#039;TEST_STRING_JSON&#039; from the following function call&lt;br /&gt;
//      to the string &#039;input&#039; in the function declaration&lt;br /&gt;
//      and run a test on &#039;input&#039; to not (!) modify &#039;TEST_STRING_JSON&#039;&lt;br /&gt;
//      but its copy instead&lt;br /&gt;
        run_json_test(TEST_STRING_JSON);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|caveats=&lt;br /&gt;
&lt;br /&gt;
llListReplaceList() is roughly 2,8x as fast in replacing a single value of a list than LlJsonSetValue() is to replace a single value in a json.&lt;br /&gt;
The length of the list/json are irrelevant here.&lt;br /&gt;
&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llList2Json]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llJson2List]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llJsonGetValue]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llJsonValueType]]|}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles={{LSL DefineRow||[[Typecast]]|}}&lt;br /&gt;
|notes=&lt;br /&gt;
|permission&lt;br /&gt;
|negative_index&lt;br /&gt;
|sort=JsonSetValue&lt;br /&gt;
|cat1=List&lt;br /&gt;
|cat2=String&lt;br /&gt;
|cat3=Data Conversion&lt;br /&gt;
|cat4=JSON&lt;br /&gt;
|history = Date of Release  [[ Release_Notes/Second_Life_Server/13#13.05.20.276191 | 20/05/2013 ]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:LlGetTime&amp;diff=1208455</id>
		<title>Talk:LlGetTime</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:LlGetTime&amp;diff=1208455"/>
		<updated>2019-05-11T21:51:21Z</updated>

		<summary type="html">&lt;p&gt;Sei Lisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The last edit lost the point that llGetTime returns results more precise than whole seconds, such as results that differ by more than zero yet less than one. -- [[User:Ppaatt Lynagh|Ppaatt Lynagh]] 13:26, 24 October 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
== svc-3293 ==&lt;br /&gt;
&lt;br /&gt;
is there any special reason we&#039;re keeping a reference to this jira (which was marked expected behavior)?&amp;lt;br/&amp;gt;-- &#039;&#039;&#039;[[User:Void_Singer|Void]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User_talk:Void_Singer|talk]]|[[Special:Contributions/Void_Singer|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 03:50, 17 October 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
:[[Template:Issues/SVC-3293]] just needed updating so that it would only show in the All Issues section. The reason for keeping dead bugs listed in the documentation is so that anyone who knew about the bug can find out from the documentation the status of the bug. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 11:47, 17 October 2011 (PDT)&lt;br /&gt;
:P.S. We should also prune them periodically but only as needed.&lt;br /&gt;
&lt;br /&gt;
that makes sense, and now I know what to change to keep it in the deep notes, thanks =)&amp;lt;br/&amp;gt;-- &#039;&#039;&#039;[[User:Void_Singer|Void]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User_talk:Void_Singer|talk]]|[[Special:Contributions/Void_Singer|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:11, 19 October 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
:It isn&#039;t advertised but there is a field that can force it to show in Caveats or for it to not show in Caveats. Everything always shows up in Deep Notes. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 20:40, 21 October 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Conflict in descriptions ==&lt;br /&gt;
&lt;br /&gt;
The page for llGetRegionTimeDilation says &amp;quot;affects llGetTime &amp;amp; llGetAndResetTime&amp;quot;.  However, the pages for llGetTime &amp;amp; llGetAndResetTime say that &amp;quot;script time [as returned by these two functions] is unaffected by time dilation.  Unless I misunderstand something, these two statements conflict.&lt;br /&gt;
[[User:Len Lectar|Len Lectar]] 19:17, 14 November 2012 (PST)&lt;br /&gt;
:Honestly don&#039;t know why why it says that... one of them is wrong, someone can feel free to test which by comparing to a time/date function under heavy lag and report back. &amp;lt;br/&amp;gt;-- &#039;&#039;&#039;[[User:Void_Singer|Void]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User_talk:Void_Singer|talk]]|[[Special:Contributions/Void_Singer|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 16:40, 10 May 2019 (PDT)&lt;br /&gt;
&lt;br /&gt;
::[[llGetRegionTimeDilation]] is wrong. Only [[llSensorRepeat]] is affected. [[llSetTimerEvent]] and [[llGetTime]] aren&#039;t. [[User:Sei Lisa|Sei Lisa]] ([[User talk:Sei Lisa|talk]]) 14:51, 11 May 2019 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Accuracy loss ==&lt;br /&gt;
&amp;quot;at Best&amp;quot; implies that it can be worse. Suggest wording change to &amp;quot;x/y Sec under z days&amp;quot; with no qualifiers. Don&#039;t have time for an edit war over minutiae &amp;lt;br/&amp;gt;-- &#039;&#039;&#039;[[User:Void_Singer|Void]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User_talk:Void_Singer|talk]]|[[Special:Contributions/Void_Singer|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 16:40, 10 May 2019 (PDT)&lt;br /&gt;
&lt;br /&gt;
:Agreed. I was thinking of simulator frame time on top of that, but 1/45 is anyway &amp;amp;lt; 1/32 so the precision is still around 1/32. [[User:Sei Lisa|Sei Lisa]] ([[User talk:Sei Lisa|talk]]) 11:49, 11 May 2019 (PDT)&lt;/div&gt;</summary>
		<author><name>Sei Lisa</name></author>
	</entry>
</feed>