<?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=Peter+Stindberg</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=Peter+Stindberg"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/Peter_Stindberg"/>
	<updated>2026-06-22T12:10:44Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:QA_Portal/Bacon_Test&amp;diff=1218883</id>
		<title>Talk:QA Portal/Bacon Test</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:QA_Portal/Bacon_Test&amp;diff=1218883"/>
		<updated>2026-06-05T06:09:31Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Created page with &amp;quot;Yum, bacon.  --~~~~&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Yum, bacon.&lt;br /&gt;
&lt;br /&gt;
--[[User:Peter Stindberg|Peter Stindberg]] ([[User talk:Peter Stindberg|talk]]) 23:09, 4 June 2026 (PDT)&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSetPrimMediaParams&amp;diff=1218436</id>
		<title>LlSetPrimMediaParams</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSetPrimMediaParams&amp;diff=1218436"/>
		<updated>2025-08-27T08:24:00Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Clarification about faces.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-1={{Issues/SVC-4939}}{{Issues/VWR-17719}}{{LSL_Function/face|face|notall=*}}&lt;br /&gt;
|func_id=350|func_sleep=1.0|func_energy=10.0|mode&lt;br /&gt;
|func=llSetPrimMediaParams|return_type=integer|return_subtype=status&lt;br /&gt;
|p1_type=integer|p1_name=face|p1_desc&lt;br /&gt;
|p2_type=list|p2_subtype=instructions|p2_name=params|p2_desc=a set of name/value pairs (in no particular order)&lt;br /&gt;
|func_footnote=&lt;br /&gt;
|func_desc=Set the media {{LSLP|params}} for a particular {{LSLP|face}}. &lt;br /&gt;
|return_text=that is a STATUS_* flag which details the success/failure of the operation(s).&lt;br /&gt;
|spec=&lt;br /&gt;
|caveats=*If prim-media is not already on this object, add it.&lt;br /&gt;
*Params not specified are unchanged, or if new media is added set to the default specified.&lt;br /&gt;
* Both width and height must be specified together to work, and they narrow the texture space while inversely widening the aperture.&lt;br /&gt;
** width and height scaled larger than 1024pixels will require the texture backdrop to be resized to fit(see [[#Useful_Snippets|Useful Snippets]])&lt;br /&gt;
*** if resized to fit, the resulting view will cut off scrolled content outside the bounds making it impossible to be viewed&lt;br /&gt;
* Face needs to be a single face. If you want the media on multiple faces (e. g. opposing sides of an object), you have to call the function multiple times with different face numbers. Bitwise AND for face numbers does not work.&lt;br /&gt;
|constants={{LSL Constants/ReturnStatus|table=*|sortable=*}}{{LSL Constants/PrimMedia|set}}&lt;br /&gt;
|examples&lt;br /&gt;
|helpers=&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;//-- expand media textures greater than 1024 pixel in a direction to fit the media face&lt;br /&gt;
//-- does exactly what the &amp;quot;align&amp;quot; button does in the edit window (width/height are in pixels)&lt;br /&gt;
//-- original by Edelman Linden (or Kate Linden), tweaked by Void Singer&lt;br /&gt;
uExpandMediaTexture( integer vIntWidth, integer vIntHeight, integer vIntFace ){&lt;br /&gt;
    integer vIntTemp;&lt;br /&gt;
    vector  vSizScale;&lt;br /&gt;
    &lt;br /&gt;
    while (vIntWidth &amp;gt;&amp;gt; ++vIntTemp);&lt;br /&gt;
    vSizScale.x = vIntWidth / (float)(1 &amp;lt;&amp;lt; vIntTemp);&lt;br /&gt;
    vIntTemp = 0;&lt;br /&gt;
    while (vIntHeight &amp;gt;&amp;gt; ++vIntTemp);&lt;br /&gt;
    vSizScale.y = vIntHeight / (float)(1 &amp;lt;&amp;lt; vIntTemp);&lt;br /&gt;
    llSetPrimitiveParams( [PRIM_TEXTURE, vIntFace] +&lt;br /&gt;
                          llListReplaceList( llGetPrimitiveParams( [PRIM_TEXTURE, vIntFace] ),&lt;br /&gt;
                                             [vSizScale, ((vSizScale - &amp;lt;1.0, 1.0, 0.0&amp;gt;) / 2.0)],&lt;br /&gt;
                                             1,&lt;br /&gt;
                                             2 ) );&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
ref: [[How_to_Align_a_Shared_Media_Texture_from_Linden_Script|original source]]&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llSetLinkMedia]]}}&lt;br /&gt;
{{LSL DefineRow||[[llGetPrimMediaParams]]}}&lt;br /&gt;
{{LSL DefineRow||[[llClearPrimMedia]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events=&lt;br /&gt;
|also_articles=&lt;br /&gt;
{{LSL DefineRow||[[/Tricks]]}}&lt;br /&gt;
|notes&lt;br /&gt;
|deepnotes&lt;br /&gt;
|history=&lt;br /&gt;
*{{SVN|2816|rev=134947|trunk=*|anchor=|ver=|ser=}}&lt;br /&gt;
*{{JIRA|SVC-4939}}&lt;br /&gt;
* Functionality available in Client 2.0&lt;br /&gt;
|haiku={{Haiku|Media in dance,|Parameters find their place,|Object&#039;s form embrace.}}&lt;br /&gt;
|cat1=Prim Media&lt;br /&gt;
|cat2=Media&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;br /&gt;
[[Category:Shared Media]]&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlLinksetDataListKeys&amp;diff=1218394</id>
		<title>LlLinksetDataListKeys</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlLinksetDataListKeys&amp;diff=1218394"/>
		<updated>2025-08-03T19:28:34Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: &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=llLinksetDataListKeys&lt;br /&gt;
|p1_type=integer|p1_name=start|p1_desc=The first key to return.&lt;br /&gt;
|p2_type=integer|p2_name=count|p2_desc=The number of keys to return.&lt;br /&gt;
|return_type=list&lt;br /&gt;
|return_text=of the keys in the datastore, ordered alphabetically.&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc=The &#039;&#039;&#039;llLinksetDataListKeys&#039;&#039;&#039; function returns a list of up to {{LSLP|count}} keys in the datastore, starting at the one indicated by {{LSLP|start}}. If {{LSLP|count}} is less than 1, then all keys between {{LSLP|start}} and the end are returned. If {{LSLP|count}} minus {{LSLP|start}} exceeds the total number of keys, the returned list will be shorter than {{LSLP|count}}, down to a zero-length list if {{LSLP|start}} equals or exceeds the total number of keys.&lt;br /&gt;
|func_footnote&lt;br /&gt;
|spec&lt;br /&gt;
&lt;br /&gt;
|examples=&lt;br /&gt;
The following code will list all the keys in a object. Only 1024 characters will be displayed due to limitations of [[llSay]].&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, llDumpList2String(llLinksetDataListKeys(0, 0), &amp;quot;\n&amp;quot;));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|caveats&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataAvailable]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataCountKeys]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataDelete]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataDeleteFound]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataFindKeys]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataRead]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataReset]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataWrite]]|}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Script&lt;br /&gt;
|cat2=LinksetData&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User_talk:Frio_Belmonte&amp;diff=1218377</id>
		<title>User talk:Frio Belmonte</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User_talk:Frio_Belmonte&amp;diff=1218377"/>
		<updated>2025-07-27T08:04:44Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Created page with &amp;quot;re-welcome  -- ~~~~&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;re-welcome&lt;br /&gt;
&lt;br /&gt;
-- [[User:Peter Stindberg|Peter Stindberg]] ([[User talk:Peter Stindberg|talk]]) 01:04, 27 July 2025 (PDT)&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSetObjectName&amp;diff=1218374</id>
		<title>LlSetObjectName</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSetObjectName&amp;diff=1218374"/>
		<updated>2025-07-25T19:50:06Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Caveat about changed event not being triggered.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Function&lt;br /&gt;
|inject-2={{LSL_Function/limits}}&lt;br /&gt;
|func_id=203&lt;br /&gt;
|func_sleep=0.0&lt;br /&gt;
|func_energy=10.0&lt;br /&gt;
|func=llSetObjectName|sort=SetObjectName&lt;br /&gt;
|p1_type=string&lt;br /&gt;
|p1_name=name&lt;br /&gt;
|func_desc=Sets the prim&#039;s name according to the {{LSLP|name}} parameter.&lt;br /&gt;
|func_footnote=If this function is called from a child prim in a linked set, it will change the name of the child prim and not the root prim.&lt;br /&gt;
|return_text&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=&lt;br /&gt;
* The name is limited to 63 characters. Longer prim names are cut short.&lt;br /&gt;
* Names can only consist of the 95 printable characters found in the [http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters ASCII-7] (non-extended) character set, with the exception of the vertical bar/pipe (&amp;quot;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;quot;) character.&lt;br /&gt;
** Invalid characters in the range 1 to 31, as well as the pipe character (124) are replaced with a question mark (&amp;quot;?&amp;quot;).&lt;br /&gt;
** Other invalid characters in the range 128 and above are replaced with two or more question marks, depending on how many bytes their UTF-8 representation requires.&lt;br /&gt;
** Objects with all-whitespace names (e.g., a space or a series of spaces) will appear as &amp;quot;(Unnamed)&amp;quot; if they emit chat via [[llSay]], [[llOwnerSay]], [[llInstantMessage]], etc., although this behaviour may vary in third-party viewers.&lt;br /&gt;
* While an object is attached, the script cannot change the name of the object as it appears in the user&#039;s inventory.{{Footnote|2=Whether or not this is a bug is still debated, regardless LL has said they will not fix it. This behavior was first recognized as a pain point in 2006 and only confirmed to be lava-flowed more recently (2011).|1=Whether or not this is a bug is still debated, regardless LL has said they will not fix it. This behavior was first recognized as a pain point in [http://forums-archive.secondlife.com/255/ab/84853/1.html 2006] and only confirmed to be lava-flowed [https://jira.secondlife.com/browse/SVC-3429?focusedCommentId=267372&amp;amp;page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-267372 more recently (2011)].}}&lt;br /&gt;
** Changes to the name of the root prim (with [[llSetObjectName]] for example) will not be saved to inventory; when the attachment is detached (to inventory, not dropped) this name change is discarded and the name in inventory is used instead.&lt;br /&gt;
** When attachment is dropped (to the ground) and taking it into inventory, the inventory item will have the new name (not the old).&lt;br /&gt;
* Changes to the names of child prims will be saved back to inventory when the object is detached to inventory. They survive detachment.&lt;br /&gt;
* Changes to the object name do not trigger a [[changed]] event.&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&lt;br /&gt;
{{{!}} width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
{{!}}- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Set this prim&#039;s name&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Set the root prim&#039;s name&#039;&#039;&#039;&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;
        llSetObjectName(&amp;quot;NEW PRIM NAME&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;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetLinkPrimitiveParamsFast(LINK_ROOT,&lt;br /&gt;
            [PRIM_NAME, &amp;quot;NEW ROOT PRIM NAME&amp;quot;]);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{!}}- {{Hl2}}&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; {{!}} &#039;&#039;&#039;Test if a string is valid as an object name&#039;&#039;&#039;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=&amp;quot;2&amp;quot; {{!}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// Returns TRUE if &#039;name&#039; is a valid object name, FALSE otherwise&lt;br /&gt;
integer isValidObjectName(string name)&lt;br /&gt;
{&lt;br /&gt;
    string original_name = llGetObjectName();&lt;br /&gt;
    llSetObjectName(name);&lt;br /&gt;
    integer valid_name = llGetObjectName() == name;&lt;br /&gt;
    llSetObjectName(original_name);&lt;br /&gt;
    return valid_name;&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||[[llGetObjectName]]|Get the prims name}}&lt;br /&gt;
{{LSL DefineRow||[[llGetLinkName]]|Get a linked prims name}}&lt;br /&gt;
{{LSL DefineRow||[[llGetObjectDesc]]|Get the prims description}}&lt;br /&gt;
{{LSL DefineRow||[[llSetObjectDesc]]|Set the prims description}}&lt;br /&gt;
{{LSL DefineRow||[[llGetObjectDetails]]|Get a list of object details}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Prim&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
|}}&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSetObjectDesc&amp;diff=1218373</id>
		<title>LlSetObjectDesc</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSetObjectDesc&amp;diff=1218373"/>
		<updated>2025-07-25T19:48:10Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Caveat about event not being tripped (but in Notes section, since somehow I can&amp;#039;t edit the caveats)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{Issues/VWR-437}}{{Issues/SVC-3429}}{{Issues/VWR-8761}}{{LSL_Function/prim-desc|set}}&lt;br /&gt;
|func=llSetObjectDesc&lt;br /&gt;
|func_id=271|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|p1_type=string|p1_name=description&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc=Sets the prims description&lt;br /&gt;
|return_text&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&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;Set this prim&#039;s description&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Set the root prim&#039;s description&#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;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetObjectDesc(&amp;quot;NEW PRIM DESCRIPTION&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;
        llSetLinkPrimitiveParamsFast(LINK_ROOT,&lt;br /&gt;
            [PRIM_DESC, &amp;quot;NEW ROOT PRIM DESCRIPTION&amp;quot;]);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{!}}}&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetObjectDesc]]|Gets the prim description.}}&lt;br /&gt;
{{LSL DefineRow||[[llGetObjectName]]|Gets the prim name.}}&lt;br /&gt;
{{LSL DefineRow||[[llSetObjectName]]|Sets the prim name.}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles&lt;br /&gt;
{{LSL DefineRow||}}&lt;br /&gt;
|notes=&lt;br /&gt;
* Object descriptions are often used to store data that needs to be protected from script resets (see, for example, [[Prim Attribute Overloading]]). However, descriptions are not immutable and can be tampered with by users or other scripts, either intentionally or accidentally, so this method should only be considered a last resort for data storage.&lt;br /&gt;
** [[llLinksetDataWrite]] and associated functions are generally better suited for this purpose, because they allow for significantly more data storage and are much more secure against tampering.&lt;br /&gt;
* Changing the object description does not trigger a [[changed]] event.&lt;br /&gt;
|cat1=Prim&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGiveInventory&amp;diff=1218296</id>
		<title>LlGiveInventory</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGiveInventory&amp;diff=1218296"/>
		<updated>2025-05-17T16:54:47Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Caveat about changed event and transfer of no-copy items&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{LSL_Function/give|destination|inventory|uuid=false|copyok=*}}{{Issues/SVC-7631}}{{Issues/BUG-5656}}&lt;br /&gt;
|func_id=150|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func_sleep_hover=If &#039;destination&#039; is an avatar the script sleeps for 2.0 seconds. (Giving to objects or attachments has no delay)&lt;br /&gt;
|func_sleep_note=If {{LSLP|destination}} is an avatar the script sleeps for 2.0 seconds. (Giving to objects or attachments has no delay)&lt;br /&gt;
|func=llGiveInventory&lt;br /&gt;
|p1_type=key|p1_name=destination|p1_desc&lt;br /&gt;
|p2_type=string|p2_name=inventory&lt;br /&gt;
|func_footnote=If {{LSLP|destination}} is an object then it must be in the same [[region]].&amp;lt;br/&amp;gt;If {{LSLP|destination}} is an avatar they do not have to be in the same region.&lt;br /&gt;
|func_desc=Give {{LSLP|inventory}} to {{LSLP|destination}}.&lt;br /&gt;
|return_text&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=&lt;br /&gt;
* There is no way to know if the transaction failed.  Unless you send a message when inventory is given to a prim and prim&#039;s script checks its inventory and sends a message back using llRegionSay.&lt;br /&gt;
* Scripts reach {{LSLP|destination}} disabled (not running, and cannot be made to run unless the destination object is taken to inventory and rezzed again, or the script is recompiled). To send a running script to a prim use [[llSetRemoteScriptAccessPin]] and [[llRemoteLoadScriptPin]].&lt;br /&gt;
* If {{LSLP|destination}} is locked then {{LSLP|inventory}} is not transferred and a &#039;&#039;&#039;Blocked by permissions&#039;&#039;&#039; error is shouted on the [[DEBUG_CHANNEL]].&lt;br /&gt;
* If {{LSLP|destination}} object is not modifiable then {{LSLP|inventory}} is not transferred and a &#039;&#039;&#039;Blocked by permissions&#039;&#039;&#039; error is shouted on the [[DEBUG_CHANNEL]].&lt;br /&gt;
* If {{LSLP|inventory}} is no-copy it is transfered to {{LSLP|destination}} without copying it. Since it is no-copy the only copy is given to {{LSLP|destination}}; removing it from the source prim&#039;s inventory.&lt;br /&gt;
** the [[changed]] event does &#039;&#039;&#039;not&#039;&#039;&#039; fire in this case&lt;br /&gt;
** To avoid this problem use [[llGetInventoryPermMask]] to check the permissions of {{LSLP|inventory}}.&lt;br /&gt;
* {{HoverLink|Attachment|Attachment - Any object that is currently attached to an avatar|Attachments}} cannot give or receive no-copy inventory. When attempted an error is shouted on [[DEBUG_CHANNEL]].&lt;br /&gt;
* When giving to an attachment that is not owned by the script owner, the receiving attachment must have [[llAllowInventoryDrop]] set to TRUE.&lt;br /&gt;
* If {{LSLP|destination}} is an avatar that refuses to accept it (by manual decline or muting), is in busy mode, or is offline with instant messages capped, it is not returned to the prim&#039;s inventory; it is deleted.&lt;br /&gt;
** It is not returned to the owner. It does not show up in their lost and found or any other inventory folder.&lt;br /&gt;
** It is not put in the target&#039;s trash folder. &lt;br /&gt;
* A successful send to an offline avatar by means of llGiveInventory() counts as an IM against that avatar’s IM cap.&lt;br /&gt;
* As of 31th January 2012, llGiveInventory now has similar throttle to instant messages. A throttle of 5k per hour per owner per region; with a maximum burst of 2.5k. This throttle only affects gives to agents, not to non-agents.&lt;br /&gt;
** &amp;quot;With 3k subscribers you will want to send slow enough that it takes ~45 minutes to send 1 item to each subscriber. A general safe way would be to send ~2k as fast as you can, then wait 31 minutes and send another 2k.&amp;quot; [https://jira.secondlife.com/browse/SVC-7631?focusedCommentId=308665&amp;amp;page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-308665 Kelly Linden on SVC-7631]&lt;br /&gt;
** Be aware that while you script a system to handle the top of these limits that other busy scripted objects can be adding up to the throttle as well, such as vendors.&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        //Gives this script to whoever touches the object.&lt;br /&gt;
        llGiveInventory(llDetectedKey(0), llGetScriptName());&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||[[llGiveInventoryList]]}}&lt;br /&gt;
{{LSL DefineRow||[[llGiveAgentInventory]]}}&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;
{{LSL DefineRow||[[llGiveInventory Test]]}}&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>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlEmail&amp;diff=1218199</id>
		<title>LlEmail</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlEmail&amp;diff=1218199"/>
		<updated>2025-04-23T17:56:39Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Added useful snippet to get region name and object position, that is much simpler than the snippets under examples.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{Issues/SVC-23}}{{Issues/SVC-391}}{{Issues/SVC-412}}{{Issues/SCR-499}}{{Issues/BUG-229767}}&lt;br /&gt;
|func_id=119|func_sleep=20.0|func_energy=10.0&lt;br /&gt;
|sort=Email|func=llEmail&lt;br /&gt;
|p1_type=string|p1_name=address&lt;br /&gt;
|p2_type=string|p2_name=subject&lt;br /&gt;
|p3_type=string|p3_name=message&lt;br /&gt;
|func_footnote=The entire message (including the address, subject and other miscellaneous fields) can&#039;t be longer than 4096 bytes combined.&lt;br /&gt;
|func_desc=Sends an email to {{LSLP|address}} with {{LSLP|subject}} and {{LSLP|message}}.&lt;br /&gt;
|return_text&lt;br /&gt;
|spec=The {{LSLP|message}} is prefixed with information about the [[Primitive|prim]] sending the email.&lt;br /&gt;
{{{!}}{{Prettytable}}&lt;br /&gt;
{{!}}-{{Hl2}}&lt;br /&gt;
!Template&lt;br /&gt;
!Example&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}&amp;lt;pre&amp;gt;&lt;br /&gt;
Object-Name: *prim*&lt;br /&gt;
Region: *simname* (*simpos.x*, *simpos.y*)&lt;br /&gt;
Local-Position: (*primpos.x*, *primpos.y*, *primpos.z*)&lt;br /&gt;
&lt;br /&gt;
*message*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{!}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Object-Name: Object&lt;br /&gt;
Region: Gibson (254976, 256000)&lt;br /&gt;
Local-Position: (117, 129, 50)&lt;br /&gt;
&lt;br /&gt;
The real message starts here.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{!}}}&lt;br /&gt;
|caveats=* If you&#039;re sending to the [[object]] [[:Category:LSL_Owner|owner]], prefer the [[llTargetedEmail]] method.&lt;br /&gt;
* There is a limit to the number of email messages an object can send in a given amount of time. &lt;br /&gt;
* There is a limit of 500 messages from a single [[agent]]&#039;s objects in a one-hour period.&lt;br /&gt;
* The 4096-byte size limit includes the subject line and automatically added text.  The practical maximum body size is approximately 3600 bytes.&lt;br /&gt;
* (Sept-2008) The Email Throttle was modified slightly, Per {{User|Prospero Linden}}&#039;s comments:&lt;br /&gt;
  {{quote|&amp;quot;there has long been a throttle that makes a single script sleep for 20 seconds after sending an email. The new throttle is per user... some were using many, many different [[scripts]] to send spam. (the new throttle applies) when the destination is outside of Second Life. I know that messages within the same [[region]] were not throttled (beyond the 20-second delay), and I *believe* that messages between different [[simulator|sims]] were not throttled (between the 20-second delay).&amp;quot;}}&lt;br /&gt;
* Due to the bug {{Jira|SVC-23}} (present since 2005), objects may stop receiving emails completely until either the region is restarted or the object crosses a region boundary (resetting the script doesn&#039;t help).  Emails sent may eventually be received after a restart/region-cross.  Hence, don&#039;t rely on this function for reliable inter-region messaging.&lt;br /&gt;
* Due to bug {{JIRA|BUG-229767}}, an object&#039;s email queue can still become suspended until the object crosses a region border (neither a region restart nor a script reset helps). First analysis has revealed a potential workaround, by implementing a delay of about 30 seconds before first trying to send email to a freshly rezzed script - apparently registering the [[email|email(...)]] event handler can take quite some time, and emails arriving prior to said registry process is what gets the entire queue stuck. Official Linden Lab response still pending.&lt;br /&gt;
* Due to the bug {{Jira|SVC-391}}, [[llEmail]] will silently fail (no mail will arrive) when {{Wikipedia|ASCII|non-ASCII}} characters are present in the subject. However, non-ASCII characters in the message body will be replaced by {{mono|&amp;quot;?&amp;quot;}}.&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 emailAddress = &amp;quot;somebody@example.com&amp;quot;;&lt;br /&gt;
string emailHeader = &amp;quot;Someone touched me!&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer num_detected)&lt;br /&gt;
    {&lt;br /&gt;
        // llSay(PUBLIC_CHANNEL, &amp;quot;Sending eMail report now, this will take ~20 seconds.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        key id = llDetectedKey(0);&lt;br /&gt;
        string name = llDetectedName(0);&lt;br /&gt;
&lt;br /&gt;
        llEmail(emailAddress, emailHeader,&lt;br /&gt;
            &amp;quot;I was touched by: &#039;&amp;quot; + name + &amp;quot;&#039; (&amp;quot; + (string)id + &amp;quot;).&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        // llSay(PUBLIC_CHANNEL, &amp;quot;Email has been sent.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetNextEmail]]}}&lt;br /&gt;
{{LSL DefineRow||[[llMessageLinked]]}}&lt;br /&gt;
|also_events=&lt;br /&gt;
{{LSL DefineRow||[[email]]}}&lt;br /&gt;
{{LSL DefineRow||[[link message]]}}&lt;br /&gt;
|also_tests={{LSL DefineRow|[https://osiris.lindenlab.com/mediawiki/index.php/Email_Test internal test]&amp;lt;ref&amp;gt;Probably broken (last tested Feb 2023); the server still exists but is password-protected.&amp;lt;/ref&amp;gt;}}&lt;br /&gt;
|also_articles={{LSL DefineRow||[[IM to email]]}}&lt;br /&gt;
{{LSL DefineRow||[[Postcards]]}}&lt;br /&gt;
|notes=* Because of the long delay on this function, it is often called from a second script triggered by [[link_message]].&lt;br /&gt;
* If you are sending email to a prim within Second Life, its address is {{mono|&#039;&#039;[key]&#039;&#039;@lsl.secondlife.com}}&lt;br /&gt;
** Which means if the key returned by [[llGetKey]] is &amp;quot;{{mono|a2e76fcd-9360-4f6d-a924-000000000003}}&amp;quot;, then its email address is &amp;quot;{{mono|a2e76fcd-9360-4f6d-a924-000000000003@lsl.secondlife.com}}&amp;quot;.&lt;br /&gt;
** Agents do not have fixed email addresses, use [[llInstantMessage]] or [[llOwnerSay]]&amp;lt;ref&amp;gt;If the agent or object are &#039;&#039;known&#039;&#039; to be in the same region, then you can use [[llRegionSayTo]] instead.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Prim2Prim Email===&lt;br /&gt;
&lt;br /&gt;
In LSL you can both send email with [[llEmail]] and receive it with the [[email]] event.&lt;br /&gt;
&lt;br /&gt;
The email event is triggered with five pieces of information:&lt;br /&gt;
{{{!}}&lt;br /&gt;
{{LSL DefineRow|string|time|When the message was sent, in the &amp;lt;code&amp;gt;(string)[[llGetUnixTime]]&amp;lt;/code&amp;gt; format}}&lt;br /&gt;
{{LSL DefineRow|string|address|Who sent the message}}&lt;br /&gt;
{{LSL DefineRow|string|subject|Subject of the message}}&lt;br /&gt;
{{LSL DefineRow|string|message|Body of the message}}&lt;br /&gt;
{{LSL DefineRow|integer|num_left|The number of emails left in the email queue}}&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
When receiving a message sent with [[llEmail]] it helps to separate the message from the prefixed header. The header and original message body are separated by {{mono|&amp;quot;\n\n&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;integer divide = llSubStringIndex(message, &amp;quot;\n\n&amp;quot;);&lt;br /&gt;
string header = llDeleteSubString(message, divide, -1);&lt;br /&gt;
message = llDeleteSubString(message, 0, divide + 1);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get just one of the header items, do this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;list lines = llParseStringKeepNulls(header, [&amp;quot;\n&amp;quot;], []);&lt;br /&gt;
string objname_line  = llList2String(lines, 0);&lt;br /&gt;
string region_line   = llList2String(lines, 1);&lt;br /&gt;
string localpos_line = llList2String(lines, 2);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get a pure region name, do this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;string region_name = llStringTrim(&lt;br /&gt;
            (string)llDeleteSubList(&lt;br /&gt;
                llParseStringKeepNulls(&lt;br /&gt;
                    llDeleteSubString(region_line, 0, 12),&lt;br /&gt;
                    [], &lt;br /&gt;
                    [&amp;quot;(&amp;quot;]&lt;br /&gt;
                ), -2, -1), STRING_TRIM);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This application uses email to have objects check with a central server to see if the owner has the latest version. In the objects:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;string version = &amp;quot;1&amp;quot;; //&lt;br /&gt;
string type = &amp;quot;lolcube&amp;quot;;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer start_param)&lt;br /&gt;
    {&lt;br /&gt;
        llEmail(&amp;quot;5a634b27-f032-283f-2df2-55ead7724b23@lsl.secondlife.com&amp;quot;,&lt;br /&gt;
            version,&lt;br /&gt;
            (string)llGetOwner() + &amp;quot;,&amp;quot; + type);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The server:&lt;br /&gt;
&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;
        llSetTimerEvent(15.0);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llGetNextEmail(&amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    email(string time, string address, string version, string message, integer num_left)&lt;br /&gt;
    {    &lt;br /&gt;
        if ((integer)version &amp;lt; 2)&lt;br /&gt;
        {&lt;br /&gt;
            list info = llCSV2List(llDeleteSubString(message, 0, llSubStringIndex(message, &amp;quot;\n\n&amp;quot;) + 1));&lt;br /&gt;
            llGiveInventory(llList2Key(info, 0), llList2String(info, 1));&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        if (num_left)&lt;br /&gt;
            llGetNextEmail(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|helpers=&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
email(string time, string address, string subj, string message, integer num_left)&lt;br /&gt;
{&lt;br /&gt;
    if (llGetSubString(address, -19, -1) == &amp;quot;@lsl.secondlife.com&amp;quot;) //trim the header&lt;br /&gt;
        message = llDeleteSubString(message, 0, llSubStringIndex(message, &amp;quot;\n\n&amp;quot;) + 1);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Get the region name and object position of the object that sent the email:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
string region = llList2String(llParseString2List(message, [&amp;quot;Region: &amp;quot;,&amp;quot; (&amp;quot;], []),1);&lt;br /&gt;
vector position = (vector) (&amp;quot;&amp;lt;&amp;quot; + llList2String(llParseString2List(message, [&amp;quot;Local-Position: (&amp;quot;,&amp;quot;)\n\n&amp;quot;], []),1) + &amp;quot;&amp;gt;&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|permission&lt;br /&gt;
|negative_index&lt;br /&gt;
|cat1=Communications&lt;br /&gt;
|cat2=Email&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlRequestSecureURL&amp;diff=1218161</id>
		<title>LlRequestSecureURL</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlRequestSecureURL&amp;diff=1218161"/>
		<updated>2025-04-07T15:34:37Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Someone more knowledgable please rephrase this. New certificates as of Spring 2025.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{KBwarning|[[llRequestSecureURL]] uses a self-issued certificate, which can cause all kinds of spurious errors. If you are encountering issues, check that your remote is configured to recognize the Linden Lab Certificate Authority. Check the [[#Caveats|Caveats]] section below for details.}}&lt;br /&gt;
{{LSL_Function&lt;br /&gt;
|func_id=346|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llRequestSecureURL&lt;br /&gt;
|return_type=key|return_subtype=handle&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc=Requests one {{mono|HTTPS://}} ({{Wikipedia|SSL}}) {{Wikipedia|URL}} for use by this [[object]]. The [[http_request]] [[event]] is triggered with result of the request. [[LSL_HTTP_server#Introduction|HTTPS-in]] uses port {{mono|12043}}.&lt;br /&gt;
|return_text=used for identifying the result of the request in the [[http_request]] [[event]].&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=*HTTPS-in uses port {{mono|12043}} (that port is in the URL returned by this method).&lt;br /&gt;
*When a [[region]] is (re)started all [[http_request|HTTP server]] URLs are automatically released and invalidated.&lt;br /&gt;
**Use [[CHANGED_REGION_START]] to detect this so a new URL can be requested.&lt;br /&gt;
* The {{Wikipedia|Public key certificate|server certificate}} is {{Wikipedia|Self-signed certificate|signed}} by our own Linden Lab {{Wikipedia|Certificate Authority}}. In order for your [[Second Life Viewer|client]] to validate the server certificate, you will need to download and install our CA certificate and add it to the CA store on your system: you can download it from https://raw.githubusercontent.com/secondlife/llca/master/LindenLab.crt&amp;lt;ref&amp;gt;Note that Linden Lab has moved from the old BitBucket repository to GitHub; the link is to the [https://github.com/secondlife/llca new official repository].&amp;lt;/ref&amp;gt;&lt;br /&gt;
* As of Spring 2025, new certificate handling is being rolled out. This might change the whole process. See https://community.secondlife.com/forums/topic/521090-grid-ssl-cert-updates-coming-soon/&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&lt;br /&gt;
{{LSL Tip|Never ever forget to release a URL again which you have requested! URLs are region resources just like prims. If you take them all you can get into big trouble with the [[Private Region|region owner]] and/or [[Estate Manager|estate managers]].}}&lt;br /&gt;
Requesting a secure URL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
string secureUrl;&lt;br /&gt;
key urlRequestId;&lt;br /&gt;
key selfCheckRequestId;&lt;br /&gt;
 &lt;br /&gt;
request_secure_url()&lt;br /&gt;
{&lt;br /&gt;
    llReleaseURL(secureUrl);&lt;br /&gt;
    secureUrl = &amp;quot;&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    urlRequestId = llRequestSecureURL();&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
throw_exception(string inputString)&lt;br /&gt;
{&lt;br /&gt;
    key owner = llGetOwner();&lt;br /&gt;
    llInstantMessage(owner, inputString);&lt;br /&gt;
 &lt;br /&gt;
    // yeah, bad way to handle exceptions by restarting.&lt;br /&gt;
    // However this is just a demo script...&lt;br /&gt;
 &lt;br /&gt;
    llResetScript();&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;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; (CHANGED_OWNER | CHANGED_INVENTORY))&lt;br /&gt;
        {&lt;br /&gt;
            llReleaseURL(secureUrl);&lt;br /&gt;
            secureUrl = &amp;quot;&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        if (change &amp;amp; (CHANGED_REGION | CHANGED_REGION_START | CHANGED_TELEPORT))&lt;br /&gt;
            request_secure_url();&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        request_secure_url();&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    http_request(key id, string method, string body)&lt;br /&gt;
    {&lt;br /&gt;
        integer responseStatus = 400;&lt;br /&gt;
        string responseBody = &amp;quot;Unsupported method&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
        if (method == URL_REQUEST_DENIED)&lt;br /&gt;
            throw_exception(&amp;quot;The following error occurred while attempting to get a free URL for this device:\n \n&amp;quot; + body);&lt;br /&gt;
 &lt;br /&gt;
        else if (method == URL_REQUEST_GRANTED)&lt;br /&gt;
        {&lt;br /&gt;
            secureUrl = body;&lt;br /&gt;
            key owner = llGetOwner();&lt;br /&gt;
            llLoadURL(owner, &amp;quot;Click to visit my URL!&amp;quot;, secureUrl);&lt;br /&gt;
 &lt;br /&gt;
            // check every 5 mins for dropped URL&lt;br /&gt;
            llSetTimerEvent(300.0);&lt;br /&gt;
        }&lt;br /&gt;
        else if (method == &amp;quot;GET&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            responseStatus = 200;&lt;br /&gt;
            responseBody = &amp;quot;Hello world!&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        // else if (method == &amp;quot;POST&amp;quot;) ...;&lt;br /&gt;
        // else if (method == &amp;quot;PUT&amp;quot;) ...;&lt;br /&gt;
        // else if (method == &amp;quot;DELETE&amp;quot;) { responseStatus = 403; responseBody = &amp;quot;forbidden&amp;quot;; }&lt;br /&gt;
 &lt;br /&gt;
        llHTTPResponse(id, responseStatus, responseBody);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    http_response(key id, integer status, list metaData, string body)&lt;br /&gt;
    {&lt;br /&gt;
        if (id == selfCheckRequestId)&lt;br /&gt;
        {&lt;br /&gt;
            // If you&#039;re not usually doing this,&lt;br /&gt;
            // now is a good time to get used to doing it!&lt;br /&gt;
            selfCheckRequestId = NULL_KEY;&lt;br /&gt;
 &lt;br /&gt;
            if (status != 200)&lt;br /&gt;
                request_secure_url();&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        else if (id == NULL_KEY)&lt;br /&gt;
            throw_exception(&amp;quot;Too many HTTP requests too fast!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        selfCheckRequestId = llHTTPRequest(secureUrl,&lt;br /&gt;
                                [HTTP_METHOD, &amp;quot;GET&amp;quot;,&lt;br /&gt;
                                    HTTP_VERBOSE_THROTTLE, FALSE,&lt;br /&gt;
                                    HTTP_BODY_MAXLENGTH, 16384],&lt;br /&gt;
                                &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|mode=&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llRequestURL]]}}&lt;br /&gt;
{{LSL DefineRow||[[llGetFreeURLs]]}}&lt;br /&gt;
{{LSL DefineRow||[[llReleaseURL]]}}&lt;br /&gt;
{{LSL DefineRow||[[llHTTPResponse]]}}&lt;br /&gt;
{{LSL DefineRow||[[llGetHTTPHeader]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles=&lt;br /&gt;
{{LSL DefineRow||[[LSL http server]]}}&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>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGiveInventoryList&amp;diff=1218154</id>
		<title>LlGiveInventoryList</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGiveInventoryList&amp;diff=1218154"/>
		<updated>2025-04-06T10:39:38Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Added llGiveAgentInventory to see-also&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{Issues/SVC-868}}&lt;br /&gt;
{{LSL_Function/give|target|inventory|sim=*|uuid=false|insert=list of items}}&lt;br /&gt;
|func_id=231|func_sleep=3.0|func_energy=10.0&lt;br /&gt;
|func=llGiveInventoryList&lt;br /&gt;
|p1_type=key|p1_name=target|p1_desc&lt;br /&gt;
|p2_type=string|p2_name=folder|p2_desc=folder name to use&lt;br /&gt;
|p3_type=list|p3_name=inventory&lt;br /&gt;
|func_footnote&lt;br /&gt;
|return_text&lt;br /&gt;
|func_desc=Gives &#039;&#039;&#039;inventory&#039;&#039;&#039; items to &#039;&#039;&#039;target&#039;&#039;&#039;, creating a new &#039;&#039;&#039;folder&#039;&#039;&#039; to put them in.&lt;br /&gt;
|spec=&lt;br /&gt;
===target types===&lt;br /&gt;
Depending upon the type of &#039;&#039;&#039;target&#039;&#039;&#039; this function works differently.&lt;br /&gt;
* Avatar&lt;br /&gt;
** Must be in or able to see into the same Region as the sending object, or recently have been so. [[#SVC-868|SVC-868]]&lt;br /&gt;
** Places the inventory items in a newly created folder in the avatars inventory (even if there is a folder by the same name, a new one is created).&lt;br /&gt;
* Prim / Object&lt;br /&gt;
** The prim &#039;&#039;must&#039;&#039; be in the same region.&lt;br /&gt;
** Does &#039;&#039;not&#039;&#039; create a folder.&lt;br /&gt;
|caveats=&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 n)&lt;br /&gt;
    {&lt;br /&gt;
        key toucher = llDetectedKey(0);&lt;br /&gt;
        string folder = &amp;quot;Item Folder&amp;quot;;&lt;br /&gt;
        list inventory = [&amp;quot;item&amp;quot;, &amp;quot;another item&amp;quot;];&lt;br /&gt;
        llGiveInventoryList(toucher, folder, inventory);&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;&lt;br /&gt;
//  when the prim is touched, the script checks all other inventory items whether or not they&#039;re copiable&lt;br /&gt;
//  copiable items are added to a list, if the list is not empty when all items have been checked&lt;br /&gt;
//  the prim gives them to the touching avatar within a single folder&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer num_detected)&lt;br /&gt;
    {&lt;br /&gt;
        string thisScript = llGetScriptName();&lt;br /&gt;
        list inventoryItems;&lt;br /&gt;
        integer inventoryNumber = llGetInventoryNumber(INVENTORY_ALL);&lt;br /&gt;
&lt;br /&gt;
        integer index;&lt;br /&gt;
        for ( ; index &amp;lt; inventoryNumber; ++index )&lt;br /&gt;
        {&lt;br /&gt;
            string itemName = llGetInventoryName(INVENTORY_ALL, index);&lt;br /&gt;
&lt;br /&gt;
            if (itemName != thisScript)&lt;br /&gt;
            {&lt;br /&gt;
                if (llGetInventoryPermMask(itemName, MASK_OWNER) &amp;amp; PERM_COPY)&lt;br /&gt;
                {&lt;br /&gt;
                    inventoryItems += itemName;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    llSay(0, &amp;quot;Unable to copy the item named &#039;&amp;quot; + itemName + &amp;quot;&#039;.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (inventoryItems == [] )&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0, &amp;quot;No copiable items found, sorry.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llGiveInventoryList(llDetectedKey(0), llGetObjectName(), inventoryItems);    // 3.0 seconds delay&lt;br /&gt;
        }&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;&lt;br /&gt;
//  script gives items to owner only&lt;br /&gt;
//  all copiable items are given within a single folder&lt;br /&gt;
//  all no-copy items are transferred separately (only one time, right? right!)&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 owner = llGetOwner();&lt;br /&gt;
        if (llDetectedKey(0) != owner)&lt;br /&gt;
            return;&lt;br /&gt;
&lt;br /&gt;
        list inventoryItems;&lt;br /&gt;
        integer inventoryNumber = llGetInventoryNumber(INVENTORY_ALL);&lt;br /&gt;
&lt;br /&gt;
        integer index;&lt;br /&gt;
        for ( ; index &amp;lt; inventoryNumber; ++index )&lt;br /&gt;
        {&lt;br /&gt;
            string itemName = llGetInventoryName(INVENTORY_ALL, index);&lt;br /&gt;
            if (itemName != llGetScriptName() )&lt;br /&gt;
            {&lt;br /&gt;
                if (llGetInventoryPermMask(itemName, MASK_OWNER) &amp;amp; PERM_COPY)&lt;br /&gt;
                {&lt;br /&gt;
                    inventoryItems += itemName;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    llGiveInventory(owner, itemName);    // 2.0 seconds delay&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (inventoryItems != [] )&lt;br /&gt;
            llGiveInventoryList(owner, llGetObjectName(), inventoryItems);    // 3.0 seconds delay&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llGiveInventory]]}}&lt;br /&gt;
{{LSL DefineRow||[[llGiveAgentInventory]]}}&lt;br /&gt;
|also_events={{LSL DefineRow||[[changed]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes|cat1=Inventory&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGiveInventory&amp;diff=1218153</id>
		<title>LlGiveInventory</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGiveInventory&amp;diff=1218153"/>
		<updated>2025-04-06T10:38:38Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Added llGiveAgentInventory to see-also&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{LSL_Function/give|destination|inventory|uuid=false|copyok=*}}{{Issues/SVC-7631}}{{Issues/BUG-5656}}&lt;br /&gt;
|func_id=150|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func_sleep_hover=If &#039;destination&#039; is an avatar the script sleeps for 2.0 seconds. (Giving to objects or attachments has no delay)&lt;br /&gt;
|func_sleep_note=If {{LSLP|destination}} is an avatar the script sleeps for 2.0 seconds. (Giving to objects or attachments has no delay)&lt;br /&gt;
|func=llGiveInventory&lt;br /&gt;
|p1_type=key|p1_name=destination|p1_desc&lt;br /&gt;
|p2_type=string|p2_name=inventory&lt;br /&gt;
|func_footnote=If {{LSLP|destination}} is an object then it must be in the same [[region]].&amp;lt;br/&amp;gt;If {{LSLP|destination}} is an avatar they do not have to be in the same region.&lt;br /&gt;
|func_desc=Give {{LSLP|inventory}} to {{LSLP|destination}}.&lt;br /&gt;
|return_text&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=&lt;br /&gt;
* There is no way to know if the transaction failed.  Unless you send a message when inventory is given to a prim and prim&#039;s script checks its inventory and sends a message back using llRegionSay.&lt;br /&gt;
* Scripts reach {{LSLP|destination}} disabled (not running, and cannot be made to run unless the destination object is taken to inventory and rezzed again, or the script is recompiled). To send a running script to a prim use [[llSetRemoteScriptAccessPin]] and [[llRemoteLoadScriptPin]].&lt;br /&gt;
* If {{LSLP|destination}} is locked then {{LSLP|inventory}} is not transferred and a &#039;&#039;&#039;Blocked by permissions&#039;&#039;&#039; error is shouted on the [[DEBUG_CHANNEL]].&lt;br /&gt;
* If {{LSLP|destination}} object is not modifiable then {{LSLP|inventory}} is not transferred and a &#039;&#039;&#039;Blocked by permissions&#039;&#039;&#039; error is shouted on the [[DEBUG_CHANNEL]].&lt;br /&gt;
* If {{LSLP|inventory}} is no-copy it is transfered to {{LSLP|destination}} without copying it. Since it is no-copy the only copy is given to {{LSLP|destination}}; removing it from the source prim&#039;s inventory.&lt;br /&gt;
** To avoid this problem use [[llGetInventoryPermMask]] to check the permissions of {{LSLP|inventory}}.&lt;br /&gt;
* {{HoverLink|Attachment|Attachment - Any object that is currently attached to an avatar|Attachments}} cannot give or receive no-copy inventory. When attempted an error is shouted on [[DEBUG_CHANNEL]].&lt;br /&gt;
* When giving to an attachment that is not owned by the script owner, the receiving attachment must have [[llAllowInventoryDrop]] set to TRUE.&lt;br /&gt;
* If {{LSLP|destination}} is an avatar that refuses to accept it (by manual decline or muting), is in busy mode, or is offline with instant messages capped, it is not returned to the prim&#039;s inventory; it is deleted.&lt;br /&gt;
** It is not returned to the owner. It does not show up in their lost and found or any other inventory folder.&lt;br /&gt;
** It is not put in the target&#039;s trash folder. &lt;br /&gt;
* A successful send to an offline avatar by means of llGiveInventory() counts as an IM against that avatar’s IM cap.&lt;br /&gt;
* As of 31th January 2012, llGiveInventory now has similar throttle to instant messages. A throttle of 5k per hour per owner per region; with a maximum burst of 2.5k. This throttle only affects gives to agents, not to non-agents.&lt;br /&gt;
** &amp;quot;With 3k subscribers you will want to send slow enough that it takes ~45 minutes to send 1 item to each subscriber. A general safe way would be to send ~2k as fast as you can, then wait 31 minutes and send another 2k.&amp;quot; [https://jira.secondlife.com/browse/SVC-7631?focusedCommentId=308665&amp;amp;page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-308665 Kelly Linden on SVC-7631]&lt;br /&gt;
** Be aware that while you script a system to handle the top of these limits that other busy scripted objects can be adding up to the throttle as well, such as vendors.&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        //Gives this script to whoever touches the object.&lt;br /&gt;
        llGiveInventory(llDetectedKey(0), llGetScriptName());&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||[[llGiveInventoryList]]}}&lt;br /&gt;
{{LSL DefineRow||[[llGiveAgentInventory]]}}&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;
{{LSL DefineRow||[[llGiveInventory Test]]}}&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>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User_talk:WolfGang_Senizen&amp;diff=1218144</id>
		<title>User talk:WolfGang Senizen</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User_talk:WolfGang_Senizen&amp;diff=1218144"/>
		<updated>2025-04-04T05:30:49Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Created page with &amp;quot;Welcome to the wiki!  --~~~~&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the wiki!&lt;br /&gt;
&lt;br /&gt;
--[[User:Peter Stindberg|Peter Stindberg]] ([[User talk:Peter Stindberg|talk]]) 22:30, 3 April 2025 (PDT)&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Limits&amp;diff=1217991</id>
		<title>Limits</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Limits&amp;diff=1217991"/>
		<updated>2025-02-21T07:47:22Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: /* Avatar */  New animesh attachment limits for PPlus members&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]] and 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 for Basic &amp;amp; Plus members, 2 for Premium members, and 3 for Premium Plus members.&lt;br /&gt;
* &#039;&#039;&#039;Max. attachment position&#039;&#039;&#039; - 3.5m in a sphere around &amp;lt;0, 0, 0&amp;gt;.&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*. (Support for 2K textures &amp;amp; Bakes on Mesh is in development but not yet supported)&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; - 6 teleports per minute&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|{{HoverText|250,000 bytes|250 KB (decimal), 244 KB (binary)}}}}&lt;br /&gt;
| Limited by length or Size, whichever is reached first. Size is after conversion to [[Internal Animation Format|.anim]]. {{KBtip|custom=Tip for Blender users:|1=You can use a built-in function called &amp;quot;&#039;&#039;Decimate&#039;&#039;&amp;quot; to simplify your animation. See [https://www.youtube.com/watch?v=lScwEYJZy1M this tutorial]}}&lt;br /&gt;
| [[Internal Animation Format]]&lt;br /&gt;
|-&lt;br /&gt;
||Distance an Animation Can Travel&lt;br /&gt;
| {{no|-5 meters (per axis)}}&lt;br /&gt;
| {{no|+5 meters (per axis)}}&lt;br /&gt;
| 10 meters per axis cumulatively (travelling from -5 to +5).&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|.bvh: 4, [[Internal Animation Format|.anim]]: 6}}&lt;br /&gt;
| [[Internal Animation Format|.anim]] uses per-joint priorities, meaning it&#039;s possible to have a mix of joint priorities in the same animation.&lt;br /&gt;
| [[Animation_Priority|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;
| [[Internal Animation Format|.anim]], unlike .bvh, uses a flat structure, meaning that only the bones animated are stored, and bones which would otherwise be kept by .bvh (to keep hierarchy structure) are deleted.&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|64 meters}}&lt;br /&gt;
| distance has changed on [https://community.secondlife.com/blogs/entry/13626-coming-soon-server-release-202306/ 2023.06 update]. The old max distance was 54 meters.&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Local offset (avatars)&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|1000 meters per axis}}&lt;br /&gt;
| Unlike regular [[Linkability_Rules|Linkability Rules]] for linksets, an avatar sitting on an object may be moved significantly further by scripts.&lt;br /&gt;
| [[llSetLinkPrimitiveParams]] with [[PRIM_POS_LOCAL]]&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;
| {{no|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;
||Number of lights rendered on Alpha Blended surfaces&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|8}}&lt;br /&gt;
| 8 including the Sun and Moon. The viewer will attempt to select the &amp;quot;most significant&amp;quot; lights to render, however these blended surfaces will look different as a result of these lighting limitations.&lt;br /&gt;
| [[Alpha Modes Do&#039;s and Don&#039;ts#Alpha_blending|Alpha Blending]]&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 30 messages for Basic members, 40 for Plus members, 120 for Premium members, and 240 for Premium Plus members.}}&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 the cap allowed by membership, 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; 50 for Basic members, 55 for Plus members, 80 for Premium members, 150 for Premium Plus members.&lt;br /&gt;
** After downgrading from a higher limit membership to a lower one, you may not join any new groups until you are a member of fewer than your current subscriptions&#039;s group limit. For example, if you downgrade from Premium (70 groups allowed) to Basic (42 groups allowed), you can&#039;t join any new groups until you&#039;re 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 accounts that an inventory item can be shared with at once:&#039;&#039;&#039; The limit is unknown, but tests show that it is more than 35. No documentation has been found. One third-party viewer developer says that the code doesn&#039;t seem to look for a limit. It just builds the list and sends it to each avatar individually.&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 1024 bytes (was 255 bytes before server version [https://releasenotes.secondlife.com/simulator/2021-10-25.565008.html 2021-10-25.565008]).&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 {{code|0}} (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 regions 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 {{code|*.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 {{code|*.raw}} file upload.&lt;br /&gt;
* &#039;&#039;&#039;Miscellaneous estate limits:&#039;&#039;&#039; You can have a maximum of 20 estate managers, 500 allowed Residents, 63 allowed groups, and 750 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;
** [https://second.life/eventregions Event Regions]: 175 agents&lt;br /&gt;
** Full region: 100 basic account users plus 10 additional available to premium accounts. (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 (plus 5 additional available to premium accounts)&lt;br /&gt;
** [[Land#Openspace|Openspace]]: 10 (plus 2 additional available to premium accounts)&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}}&lt;br /&gt;
| per [[mesh]] - See [[Talk:Limits#Mesh_Limits|discussion page]]&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||COLLADA file size&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|8 MB}}&lt;br /&gt;
| Maximum mesh asset size after compression, roughly equivalent to a 256 MB Raw COLLADA file.&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;
||Bone influence weights per mesh&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|110}}&lt;br /&gt;
| some folk have reported needing to go as low as about 99 in rare cases&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|100,000}}&lt;br /&gt;
| Server uses estimated triangles (streaming cost calculated), not visual triangles.&lt;br /&gt;
| [[Animesh User Guide|Animesh_User_Guide]]&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;
== [[Lag|Performance]] ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Healthy Viewer FPS&#039;&#039;&#039; - Generally, FPS equal to or above 24 is good. The higher it gets, the smoother&#039;&#039;&#039;*&#039;&#039;&#039;. 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;
&#039;&#039;&#039;*&#039;&#039;&#039; Only until your framerate reaches your monitor&#039;s refresh rate, after this point there will be very little benefit.&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 memory for [[:Category:LSL LinksetData|Linkset data]]&#039;&#039;&#039; key/value pairs - 128 KiB &lt;br /&gt;
* &#039;&#039;&#039;Maximum memory for [[:Category:Experience Tools|Experience]]&#039;&#039;&#039; key/value pairs- 128 MiB &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;
* &#039;&#039;&#039;Maximum number of scripts that can be rezzed at once&#039;&#039;&#039; – 1,000. (Refer to [https://community.secondlife.com/knowledgebase/english/building-tips-r13/ Building Tips, by Jeremy Linden].)&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;
&amp;lt;!-- TODO: add link to modemworld.me summary of CCUG from 15/12/22 regarding sound max length --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{KBtip|Second Life will accept sounds that are encoded following &amp;quot;[https://en.wikipedia.org/wiki/Compact_Disc_Digital_Audio CD Quality]&amp;quot; encoding presets present in many {{Abbr|DAW|Digital Audio Workstation}}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;
||Sound length&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|less than 30 seconds or precisely 1,323,000 samples}}&lt;br /&gt;
| The advice is typically to upload sounds less than 30.0 and that 29.99 seconds is fine. However if you do wish to be able upload sounds that are 30 seconds precisely then the .WAV file must have exactly 1,323,000 samples (44,100Hz * 30 seconds). Specifically anything above 1,323,000 samples fails to upload.&lt;br /&gt;
| &#039;&#039;&#039;[https://community.secondlife.com/knowledgebase/english/uploading-assets-r75/ Uploading Assets]&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||Bit depth&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|16 bit}}&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Sample rate&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|44.100 kHz}}&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Audio channels&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|1 channel (mono)}}&lt;br /&gt;
| Channels will be &#039;&#039;&#039;merged&#039;&#039;&#039; at upload time for dual-channel (stereo) audio.&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; - ~16:9 (~516&amp;amp;times;~270 pixels as measured on screen; the ratio seems closer to 16:8.5)&lt;br /&gt;
* &#039;&#039;&#039;Profile &amp;gt; Pick expanded&#039;&#039;&#039; - Unknown as of 2022-11-13 (viewer 6.6.7.576223); the Pick image does not expand.&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 pixels)&amp;lt;ref&amp;gt;As of {{#time: r|2024-02-26T18:00:00}}, this seems to be one of the very few sizes supported by the [[Picture Service]].&amp;lt;/ref&amp;gt;&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; - 2048&amp;amp;times;2048 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;
** 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 2048&amp;amp;times;2048.&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 ten possible image dimensions: 4, 8, 16, 32, 64, 128, 256, 512, 1024 &amp;amp; 2048 pixels, either horizontal or vertical.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Texture resizing&#039;&#039;&#039;&lt;br /&gt;
** Uploaded textures will be resized to the dimensions above. &lt;br /&gt;
** Each dimension is resized independently (for instance, a 1024 x 999 image will be resized to 1024 x 1024).&lt;br /&gt;
** A dimension that is already a power of two will not be resized.&lt;br /&gt;
** The uploader “prefers” to round down rather than up. The threshold for rounding down/up is .75 of the distance between powers of two. &lt;br /&gt;
*** For example, given a dimension of x, if x / 512 is larger than 1.75, x will be resized to 1024, else 512.&lt;br /&gt;
*** Another example:  If x / 256 is larger than 1.75, x will be resized to 512. &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.&amp;lt;ref&amp;gt;Except in .NET-based applications, and those related to .NET development — which is the case of the SL viewer — which essentially use UTF-16 everywhere, i.e., every character is encoded in &#039;&#039;two&#039;&#039; bytes, not just one.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{References}}&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Limits&amp;diff=1217990</id>
		<title>Limits</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Limits&amp;diff=1217990"/>
		<updated>2025-02-21T07:45:42Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: /* Communication */ New offline IM limits as of February 2025&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]] and 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 for Basic &amp;amp; Plus members, 2 if the resident has Premium or Premium Plus.&lt;br /&gt;
* &#039;&#039;&#039;Max. attachment position&#039;&#039;&#039; - 3.5m in a sphere around &amp;lt;0, 0, 0&amp;gt;.&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*. (Support for 2K textures &amp;amp; Bakes on Mesh is in development but not yet supported)&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; - 6 teleports per minute&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|{{HoverText|250,000 bytes|250 KB (decimal), 244 KB (binary)}}}}&lt;br /&gt;
| Limited by length or Size, whichever is reached first. Size is after conversion to [[Internal Animation Format|.anim]]. {{KBtip|custom=Tip for Blender users:|1=You can use a built-in function called &amp;quot;&#039;&#039;Decimate&#039;&#039;&amp;quot; to simplify your animation. See [https://www.youtube.com/watch?v=lScwEYJZy1M this tutorial]}}&lt;br /&gt;
| [[Internal Animation Format]]&lt;br /&gt;
|-&lt;br /&gt;
||Distance an Animation Can Travel&lt;br /&gt;
| {{no|-5 meters (per axis)}}&lt;br /&gt;
| {{no|+5 meters (per axis)}}&lt;br /&gt;
| 10 meters per axis cumulatively (travelling from -5 to +5).&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|.bvh: 4, [[Internal Animation Format|.anim]]: 6}}&lt;br /&gt;
| [[Internal Animation Format|.anim]] uses per-joint priorities, meaning it&#039;s possible to have a mix of joint priorities in the same animation.&lt;br /&gt;
| [[Animation_Priority|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;
| [[Internal Animation Format|.anim]], unlike .bvh, uses a flat structure, meaning that only the bones animated are stored, and bones which would otherwise be kept by .bvh (to keep hierarchy structure) are deleted.&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|64 meters}}&lt;br /&gt;
| distance has changed on [https://community.secondlife.com/blogs/entry/13626-coming-soon-server-release-202306/ 2023.06 update]. The old max distance was 54 meters.&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Local offset (avatars)&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|1000 meters per axis}}&lt;br /&gt;
| Unlike regular [[Linkability_Rules|Linkability Rules]] for linksets, an avatar sitting on an object may be moved significantly further by scripts.&lt;br /&gt;
| [[llSetLinkPrimitiveParams]] with [[PRIM_POS_LOCAL]]&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;
| {{no|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;
||Number of lights rendered on Alpha Blended surfaces&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|8}}&lt;br /&gt;
| 8 including the Sun and Moon. The viewer will attempt to select the &amp;quot;most significant&amp;quot; lights to render, however these blended surfaces will look different as a result of these lighting limitations.&lt;br /&gt;
| [[Alpha Modes Do&#039;s and Don&#039;ts#Alpha_blending|Alpha Blending]]&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 30 messages for Basic members, 40 for Plus members, 120 for Premium members, and 240 for Premium Plus members.}}&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 the cap allowed by membership, 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; 50 for Basic members, 55 for Plus members, 80 for Premium members, 150 for Premium Plus members.&lt;br /&gt;
** After downgrading from a higher limit membership to a lower one, you may not join any new groups until you are a member of fewer than your current subscriptions&#039;s group limit. For example, if you downgrade from Premium (70 groups allowed) to Basic (42 groups allowed), you can&#039;t join any new groups until you&#039;re 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 accounts that an inventory item can be shared with at once:&#039;&#039;&#039; The limit is unknown, but tests show that it is more than 35. No documentation has been found. One third-party viewer developer says that the code doesn&#039;t seem to look for a limit. It just builds the list and sends it to each avatar individually.&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 1024 bytes (was 255 bytes before server version [https://releasenotes.secondlife.com/simulator/2021-10-25.565008.html 2021-10-25.565008]).&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 {{code|0}} (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 regions 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 {{code|*.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 {{code|*.raw}} file upload.&lt;br /&gt;
* &#039;&#039;&#039;Miscellaneous estate limits:&#039;&#039;&#039; You can have a maximum of 20 estate managers, 500 allowed Residents, 63 allowed groups, and 750 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;
** [https://second.life/eventregions Event Regions]: 175 agents&lt;br /&gt;
** Full region: 100 basic account users plus 10 additional available to premium accounts. (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 (plus 5 additional available to premium accounts)&lt;br /&gt;
** [[Land#Openspace|Openspace]]: 10 (plus 2 additional available to premium accounts)&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}}&lt;br /&gt;
| per [[mesh]] - See [[Talk:Limits#Mesh_Limits|discussion page]]&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||COLLADA file size&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|8 MB}}&lt;br /&gt;
| Maximum mesh asset size after compression, roughly equivalent to a 256 MB Raw COLLADA file.&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;
||Bone influence weights per mesh&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|110}}&lt;br /&gt;
| some folk have reported needing to go as low as about 99 in rare cases&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|100,000}}&lt;br /&gt;
| Server uses estimated triangles (streaming cost calculated), not visual triangles.&lt;br /&gt;
| [[Animesh User Guide|Animesh_User_Guide]]&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;
== [[Lag|Performance]] ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Healthy Viewer FPS&#039;&#039;&#039; - Generally, FPS equal to or above 24 is good. The higher it gets, the smoother&#039;&#039;&#039;*&#039;&#039;&#039;. 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;
&#039;&#039;&#039;*&#039;&#039;&#039; Only until your framerate reaches your monitor&#039;s refresh rate, after this point there will be very little benefit.&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 memory for [[:Category:LSL LinksetData|Linkset data]]&#039;&#039;&#039; key/value pairs - 128 KiB &lt;br /&gt;
* &#039;&#039;&#039;Maximum memory for [[:Category:Experience Tools|Experience]]&#039;&#039;&#039; key/value pairs- 128 MiB &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;
* &#039;&#039;&#039;Maximum number of scripts that can be rezzed at once&#039;&#039;&#039; – 1,000. (Refer to [https://community.secondlife.com/knowledgebase/english/building-tips-r13/ Building Tips, by Jeremy Linden].)&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;
&amp;lt;!-- TODO: add link to modemworld.me summary of CCUG from 15/12/22 regarding sound max length --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{KBtip|Second Life will accept sounds that are encoded following &amp;quot;[https://en.wikipedia.org/wiki/Compact_Disc_Digital_Audio CD Quality]&amp;quot; encoding presets present in many {{Abbr|DAW|Digital Audio Workstation}}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;
||Sound length&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|less than 30 seconds or precisely 1,323,000 samples}}&lt;br /&gt;
| The advice is typically to upload sounds less than 30.0 and that 29.99 seconds is fine. However if you do wish to be able upload sounds that are 30 seconds precisely then the .WAV file must have exactly 1,323,000 samples (44,100Hz * 30 seconds). Specifically anything above 1,323,000 samples fails to upload.&lt;br /&gt;
| &#039;&#039;&#039;[https://community.secondlife.com/knowledgebase/english/uploading-assets-r75/ Uploading Assets]&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||Bit depth&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|16 bit}}&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Sample rate&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|44.100 kHz}}&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Audio channels&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|1 channel (mono)}}&lt;br /&gt;
| Channels will be &#039;&#039;&#039;merged&#039;&#039;&#039; at upload time for dual-channel (stereo) audio.&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; - ~16:9 (~516&amp;amp;times;~270 pixels as measured on screen; the ratio seems closer to 16:8.5)&lt;br /&gt;
* &#039;&#039;&#039;Profile &amp;gt; Pick expanded&#039;&#039;&#039; - Unknown as of 2022-11-13 (viewer 6.6.7.576223); the Pick image does not expand.&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 pixels)&amp;lt;ref&amp;gt;As of {{#time: r|2024-02-26T18:00:00}}, this seems to be one of the very few sizes supported by the [[Picture Service]].&amp;lt;/ref&amp;gt;&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; - 2048&amp;amp;times;2048 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;
** 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 2048&amp;amp;times;2048.&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 ten possible image dimensions: 4, 8, 16, 32, 64, 128, 256, 512, 1024 &amp;amp; 2048 pixels, either horizontal or vertical.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Texture resizing&#039;&#039;&#039;&lt;br /&gt;
** Uploaded textures will be resized to the dimensions above. &lt;br /&gt;
** Each dimension is resized independently (for instance, a 1024 x 999 image will be resized to 1024 x 1024).&lt;br /&gt;
** A dimension that is already a power of two will not be resized.&lt;br /&gt;
** The uploader “prefers” to round down rather than up. The threshold for rounding down/up is .75 of the distance between powers of two. &lt;br /&gt;
*** For example, given a dimension of x, if x / 512 is larger than 1.75, x will be resized to 1024, else 512.&lt;br /&gt;
*** Another example:  If x / 256 is larger than 1.75, x will be resized to 512. &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.&amp;lt;ref&amp;gt;Except in .NET-based applications, and those related to .NET development — which is the case of the SL viewer — which essentially use UTF-16 everywhere, i.e., every character is encoded in &#039;&#039;two&#039;&#039; bytes, not just one.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{References}}&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Limits&amp;diff=1217989</id>
		<title>Limits</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Limits&amp;diff=1217989"/>
		<updated>2025-02-21T07:41:48Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: /* Groups */ New limits as of February 2025&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]] and 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 for Basic &amp;amp; Plus members, 2 if the resident has Premium or Premium Plus.&lt;br /&gt;
* &#039;&#039;&#039;Max. attachment position&#039;&#039;&#039; - 3.5m in a sphere around &amp;lt;0, 0, 0&amp;gt;.&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*. (Support for 2K textures &amp;amp; Bakes on Mesh is in development but not yet supported)&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; - 6 teleports per minute&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|{{HoverText|250,000 bytes|250 KB (decimal), 244 KB (binary)}}}}&lt;br /&gt;
| Limited by length or Size, whichever is reached first. Size is after conversion to [[Internal Animation Format|.anim]]. {{KBtip|custom=Tip for Blender users:|1=You can use a built-in function called &amp;quot;&#039;&#039;Decimate&#039;&#039;&amp;quot; to simplify your animation. See [https://www.youtube.com/watch?v=lScwEYJZy1M this tutorial]}}&lt;br /&gt;
| [[Internal Animation Format]]&lt;br /&gt;
|-&lt;br /&gt;
||Distance an Animation Can Travel&lt;br /&gt;
| {{no|-5 meters (per axis)}}&lt;br /&gt;
| {{no|+5 meters (per axis)}}&lt;br /&gt;
| 10 meters per axis cumulatively (travelling from -5 to +5).&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|.bvh: 4, [[Internal Animation Format|.anim]]: 6}}&lt;br /&gt;
| [[Internal Animation Format|.anim]] uses per-joint priorities, meaning it&#039;s possible to have a mix of joint priorities in the same animation.&lt;br /&gt;
| [[Animation_Priority|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;
| [[Internal Animation Format|.anim]], unlike .bvh, uses a flat structure, meaning that only the bones animated are stored, and bones which would otherwise be kept by .bvh (to keep hierarchy structure) are deleted.&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|64 meters}}&lt;br /&gt;
| distance has changed on [https://community.secondlife.com/blogs/entry/13626-coming-soon-server-release-202306/ 2023.06 update]. The old max distance was 54 meters.&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Local offset (avatars)&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|1000 meters per axis}}&lt;br /&gt;
| Unlike regular [[Linkability_Rules|Linkability Rules]] for linksets, an avatar sitting on an object may be moved significantly further by scripts.&lt;br /&gt;
| [[llSetLinkPrimitiveParams]] with [[PRIM_POS_LOCAL]]&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;
| {{no|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;
||Number of lights rendered on Alpha Blended surfaces&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|8}}&lt;br /&gt;
| 8 including the Sun and Moon. The viewer will attempt to select the &amp;quot;most significant&amp;quot; lights to render, however these blended surfaces will look different as a result of these lighting limitations.&lt;br /&gt;
| [[Alpha Modes Do&#039;s and Don&#039;ts#Alpha_blending|Alpha Blending]]&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 for Basic &amp;amp; Plus members, 80 for Premium members, and 160 for Premium Plus members.}}&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 the cap allowed by membership, 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; 50 for Basic members, 55 for Plus members, 80 for Premium members, 150 for Premium Plus members.&lt;br /&gt;
** After downgrading from a higher limit membership to a lower one, you may not join any new groups until you are a member of fewer than your current subscriptions&#039;s group limit. For example, if you downgrade from Premium (70 groups allowed) to Basic (42 groups allowed), you can&#039;t join any new groups until you&#039;re 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 accounts that an inventory item can be shared with at once:&#039;&#039;&#039; The limit is unknown, but tests show that it is more than 35. No documentation has been found. One third-party viewer developer says that the code doesn&#039;t seem to look for a limit. It just builds the list and sends it to each avatar individually.&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 1024 bytes (was 255 bytes before server version [https://releasenotes.secondlife.com/simulator/2021-10-25.565008.html 2021-10-25.565008]).&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 {{code|0}} (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 regions 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 {{code|*.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 {{code|*.raw}} file upload.&lt;br /&gt;
* &#039;&#039;&#039;Miscellaneous estate limits:&#039;&#039;&#039; You can have a maximum of 20 estate managers, 500 allowed Residents, 63 allowed groups, and 750 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;
** [https://second.life/eventregions Event Regions]: 175 agents&lt;br /&gt;
** Full region: 100 basic account users plus 10 additional available to premium accounts. (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 (plus 5 additional available to premium accounts)&lt;br /&gt;
** [[Land#Openspace|Openspace]]: 10 (plus 2 additional available to premium accounts)&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}}&lt;br /&gt;
| per [[mesh]] - See [[Talk:Limits#Mesh_Limits|discussion page]]&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||COLLADA file size&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|8 MB}}&lt;br /&gt;
| Maximum mesh asset size after compression, roughly equivalent to a 256 MB Raw COLLADA file.&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;
||Bone influence weights per mesh&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|110}}&lt;br /&gt;
| some folk have reported needing to go as low as about 99 in rare cases&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|100,000}}&lt;br /&gt;
| Server uses estimated triangles (streaming cost calculated), not visual triangles.&lt;br /&gt;
| [[Animesh User Guide|Animesh_User_Guide]]&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;
== [[Lag|Performance]] ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Healthy Viewer FPS&#039;&#039;&#039; - Generally, FPS equal to or above 24 is good. The higher it gets, the smoother&#039;&#039;&#039;*&#039;&#039;&#039;. 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;
&#039;&#039;&#039;*&#039;&#039;&#039; Only until your framerate reaches your monitor&#039;s refresh rate, after this point there will be very little benefit.&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 memory for [[:Category:LSL LinksetData|Linkset data]]&#039;&#039;&#039; key/value pairs - 128 KiB &lt;br /&gt;
* &#039;&#039;&#039;Maximum memory for [[:Category:Experience Tools|Experience]]&#039;&#039;&#039; key/value pairs- 128 MiB &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;
* &#039;&#039;&#039;Maximum number of scripts that can be rezzed at once&#039;&#039;&#039; – 1,000. (Refer to [https://community.secondlife.com/knowledgebase/english/building-tips-r13/ Building Tips, by Jeremy Linden].)&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;
&amp;lt;!-- TODO: add link to modemworld.me summary of CCUG from 15/12/22 regarding sound max length --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{KBtip|Second Life will accept sounds that are encoded following &amp;quot;[https://en.wikipedia.org/wiki/Compact_Disc_Digital_Audio CD Quality]&amp;quot; encoding presets present in many {{Abbr|DAW|Digital Audio Workstation}}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;
||Sound length&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|less than 30 seconds or precisely 1,323,000 samples}}&lt;br /&gt;
| The advice is typically to upload sounds less than 30.0 and that 29.99 seconds is fine. However if you do wish to be able upload sounds that are 30 seconds precisely then the .WAV file must have exactly 1,323,000 samples (44,100Hz * 30 seconds). Specifically anything above 1,323,000 samples fails to upload.&lt;br /&gt;
| &#039;&#039;&#039;[https://community.secondlife.com/knowledgebase/english/uploading-assets-r75/ Uploading Assets]&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||Bit depth&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|16 bit}}&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Sample rate&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|44.100 kHz}}&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Audio channels&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|1 channel (mono)}}&lt;br /&gt;
| Channels will be &#039;&#039;&#039;merged&#039;&#039;&#039; at upload time for dual-channel (stereo) audio.&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; - ~16:9 (~516&amp;amp;times;~270 pixels as measured on screen; the ratio seems closer to 16:8.5)&lt;br /&gt;
* &#039;&#039;&#039;Profile &amp;gt; Pick expanded&#039;&#039;&#039; - Unknown as of 2022-11-13 (viewer 6.6.7.576223); the Pick image does not expand.&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 pixels)&amp;lt;ref&amp;gt;As of {{#time: r|2024-02-26T18:00:00}}, this seems to be one of the very few sizes supported by the [[Picture Service]].&amp;lt;/ref&amp;gt;&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; - 2048&amp;amp;times;2048 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;
** 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 2048&amp;amp;times;2048.&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 ten possible image dimensions: 4, 8, 16, 32, 64, 128, 256, 512, 1024 &amp;amp; 2048 pixels, either horizontal or vertical.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Texture resizing&#039;&#039;&#039;&lt;br /&gt;
** Uploaded textures will be resized to the dimensions above. &lt;br /&gt;
** Each dimension is resized independently (for instance, a 1024 x 999 image will be resized to 1024 x 1024).&lt;br /&gt;
** A dimension that is already a power of two will not be resized.&lt;br /&gt;
** The uploader “prefers” to round down rather than up. The threshold for rounding down/up is .75 of the distance between powers of two. &lt;br /&gt;
*** For example, given a dimension of x, if x / 512 is larger than 1.75, x will be resized to 1024, else 512.&lt;br /&gt;
*** Another example:  If x / 256 is larger than 1.75, x will be resized to 512. &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.&amp;lt;ref&amp;gt;Except in .NET-based applications, and those related to .NET development — which is the case of the SL viewer — which essentially use UTF-16 everywhere, i.e., every character is encoded in &#039;&#039;two&#039;&#039; bytes, not just one.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{References}}&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSetObjectMass&amp;diff=1217857</id>
		<title>LlSetObjectMass</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSetObjectMass&amp;diff=1217857"/>
		<updated>2025-01-07T17:34:27Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Changed source tag&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;llSetObjectMass()&#039;&#039;&#039; doesn&#039;t exist, however it is possible to adjust the mass of an object to what you want by adjusting the density of one large prim.  Unfortunately it is a little tricky for multi-prim objects.  Here is an example script which tries to adjust the total mass of a potentially multi-prim object plus a sitting avatar to a standard mass, no matter the avatar&#039;s size.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// adjust_root_density_to_hit_target_mass.lsl&lt;br /&gt;
//&lt;br /&gt;
// Put this script on the root prim of an object.  When an avatar sits on it&lt;br /&gt;
// this script will try to adjust the mass of the root prim to make the total&lt;br /&gt;
// final mass of the object+avatar an known quantity no matter the avatar&#039;s mass.&lt;br /&gt;
//&lt;br /&gt;
// Note: this will only work of the root prim has more mass than the largest&lt;br /&gt;
// avatar expected to sit.&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
float DEBUG = FALSE;&lt;br /&gt;
float EXPECTED_AVATAR_MASS = 1.6;  // mass of an &amp;quot;average&amp;quot; avatar&lt;br /&gt;
float prim_density = 1000.0;&lt;br /&gt;
float prim_volume = 1.0;&lt;br /&gt;
float obj_mass = 1.0;&lt;br /&gt;
float target_mass_with_sitter = 1.0;&lt;br /&gt;
float mass_of_other_parts = 1.0;&lt;br /&gt;
integer obj_num_prims = 1;&lt;br /&gt;
key prim_key;&lt;br /&gt;
&lt;br /&gt;
measure_prim_volume()&lt;br /&gt;
{&lt;br /&gt;
    // In order to do the adjustment math we need to know the effective volume&lt;br /&gt;
    // of the root prim.  Unfortunately this is not exposed in LSL, however we&lt;br /&gt;
    // can measure it by adjusting the root prim&#039;s density and doing some math.&lt;br /&gt;
    list material = llGetPhysicsMaterial();&lt;br /&gt;
    prim_density = llList2Float(material, 3);&lt;br /&gt;
    obj_mass = llGetObjectMass(llGetKey());&lt;br /&gt;
    target_mass_with_sitter = obj_mass + EXPECTED_AVATAR_MASS;&lt;br /&gt;
&lt;br /&gt;
    float test_density = 2.0 * prim_density;&lt;br /&gt;
    llSetPhysicsMaterial(DENSITY, 0.0, 0.0, 0.0, test_density);&lt;br /&gt;
&lt;br /&gt;
    // check to make sure our density setting took effect (it can fail if the prim is&lt;br /&gt;
    // already near max density).&lt;br /&gt;
    material = llGetPhysicsMaterial();&lt;br /&gt;
    float actual_test_density = llList2Float(material, 3);&lt;br /&gt;
    if (actual_test_density != test_density)&lt;br /&gt;
    {&lt;br /&gt;
        // density setting failed --&amp;gt; try a lower density instead&lt;br /&gt;
        test_density = 0.5 * prim_density;&lt;br /&gt;
        llSetPhysicsMaterial(DENSITY, 0.0, 0.0, 0.0, test_density);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // we can now compute prim_volume&lt;br /&gt;
    float test_mass = llGetObjectMass(llGetKey());&lt;br /&gt;
    prim_volume = (test_mass - obj_mass) / (test_density - prim_density);&lt;br /&gt;
    if (DEBUG)&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(&amp;quot;prim_volume=&amp;quot; + (string)(prim_volume));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // we also need to know the total mass of the non-root prims of the original object&lt;br /&gt;
    mass_of_other_parts = test_mass - (prim_volume * test_density);&lt;br /&gt;
&lt;br /&gt;
    // restore original density&lt;br /&gt;
    llSetPhysicsMaterial(DENSITY, 0.0, 0.0, 0.0, prim_density);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
adjust_prim_density()&lt;br /&gt;
{&lt;br /&gt;
    llSleep(1.0);&lt;br /&gt;
    // When an avatar sits down the formula for mass becomes:&lt;br /&gt;
    //&lt;br /&gt;
    //     obj_mass = avatar_mass + mass_of_other_parts + prim_density * prim_volume&lt;br /&gt;
    //&lt;br /&gt;
    // Let obj_mass equal target_mass_with_sitter and solve for density:&lt;br /&gt;
    //&lt;br /&gt;
    //     prim_density = (target_mass_with_sitter - avatar_mass - mass_of_other_parts) / prim_volume&lt;br /&gt;
    //&lt;br /&gt;
&lt;br /&gt;
    // adjust density to achieve target_mass_with_sitter&lt;br /&gt;
    float mass = llGetObjectMass(prim_key);&lt;br /&gt;
    float avatar_mass = mass - obj_mass;;&lt;br /&gt;
    float target_density = (target_mass_with_sitter - (avatar_mass + mass_of_other_parts)) / prim_volume;&lt;br /&gt;
    float MIN_DENSITY = 1.0;&lt;br /&gt;
    if (target_density &amp;lt; MIN_DENSITY)&lt;br /&gt;
    {&lt;br /&gt;
        if (DEBUG)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;extra_mass is too heavy&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        target_density = MIN_DENSITY;&lt;br /&gt;
    }&lt;br /&gt;
    llSetPhysicsMaterial(DENSITY, 0.0, 0.0, 0.0, target_density);&lt;br /&gt;
&lt;br /&gt;
    // check to see how well we succeeded&lt;br /&gt;
    if (DEBUG)&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay( &amp;quot;original_mass=&amp;quot; + (string)(obj_mass) + &amp;quot; sit_mass=&amp;quot; + (string)(mass) + &amp;quot; avatar_mass=&amp;quot; + (string)(avatar_mass));&lt;br /&gt;
        float final_mass = llGetObjectMass(prim_key);&lt;br /&gt;
        float mass_error = target_mass_with_sitter - final_mass;&lt;br /&gt;
        llOwnerSay(&amp;quot;target_mass=&amp;quot; + (string)(target_mass_with_sitter) + &amp;quot;, after density adjustment: mass_error=&amp;quot; + (string)(mass_error));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
reset_prim_density()&lt;br /&gt;
{&lt;br /&gt;
    llSetPhysicsMaterial(DENSITY, 0.0, 0.0, 0.0, prim_density);&lt;br /&gt;
    list materials = llGetPhysicsMaterial();&lt;br /&gt;
    prim_density = llList2Float(materials, 3);&lt;br /&gt;
    if (DEBUG)&lt;br /&gt;
    {&lt;br /&gt;
        float mass = llGetObjectMass(prim_key);&lt;br /&gt;
        llOwnerSay(&amp;quot;prim_density=&amp;quot; + (string)(prim_density) + &amp;quot; mass=&amp;quot; + (string)(mass));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // measure the object&#039;s initial properties&lt;br /&gt;
        prim_key = llGetKey();&lt;br /&gt;
        obj_num_prims = llGetNumberOfPrims();&lt;br /&gt;
        obj_mass = llGetObjectMass(prim_key);&lt;br /&gt;
        list material = llGetPhysicsMaterial();&lt;br /&gt;
        prim_density = llList2Float(material, 3);&lt;br /&gt;
&lt;br /&gt;
        measure_prim_volume();&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;
            integer num_prims = llGetNumberOfPrims();&lt;br /&gt;
            if (num_prims != obj_num_prims)&lt;br /&gt;
            {&lt;br /&gt;
                if (DEBUG)&lt;br /&gt;
                {&lt;br /&gt;
                    float mass = llGetObjectMass(prim_key);&lt;br /&gt;
                    float extra_mass = mass - obj_mass;&lt;br /&gt;
                    llOwnerSay(&amp;quot;extra_mass=&amp;quot; + (string)(extra_mass));&lt;br /&gt;
                }&lt;br /&gt;
                adjust_prim_density();&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                reset_prim_density();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:LlReplaceSubString&amp;diff=1217855</id>
		<title>Talk:LlReplaceSubString</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:LlReplaceSubString&amp;diff=1217855"/>
		<updated>2025-01-06T07:01:09Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: /* About time! */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= About time! =&lt;br /&gt;
It&#039;s not rolled out fully yet. You can start using it in your code already now though, using Firestom&#039;s conditional compiles:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
#define no577942&lt;br /&gt;
&lt;br /&gt;
#ifdef no577942&lt;br /&gt;
string llReplaceSubString(string str, string search, string replace, integer count) {&lt;br /&gt;
    return llDumpList2String(llParseStringKeepNulls((str = &amp;quot;&amp;quot;) + str, [search], []), replace);&lt;br /&gt;
}&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once it&#039;s rolled out in your region, simply remove the #define statement.&lt;br /&gt;
&lt;br /&gt;
— [[User:Peter Stindberg|Peter Stindberg]] ([[User talk:Peter Stindberg|talk]]) 08:31, 01 February 2023 (PDT)&lt;br /&gt;
&lt;br /&gt;
: {{Mention|Peter Stindberg|p=,}} I had no idea this took 20 years to be implemented! I just learned his week that it existed, by &#039;naturally&#039; using it — I cannot even remember what we used before this! — [[User:Gwyneth Llewelyn|Gwyneth Llewelyn]] ([[User talk:Gwyneth Llewelyn|talk]]) 14:41, 5 January 2025 (PST)&lt;br /&gt;
&lt;br /&gt;
:: You still find code galore - even on this wiki - that uses user-defined functions for this. I have changed a few occurances, but there are certainly more. The Linden Lab implementation goes nicely beyond the most popular udf by providing the count variable, which is VERY useful!&lt;br /&gt;
&lt;br /&gt;
:: — [[User:Peter Stindberg|Peter Stindberg]] ([[User talk:Peter Stindberg|talk]]) 23:01, 5 January 2025 (PST)&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:SLetanque&amp;diff=1217852</id>
		<title>Talk:SLetanque</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:SLetanque&amp;diff=1217852"/>
		<updated>2025-01-04T15:43:27Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: /* So, what exactly does this pair of scripts do? How to use them? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== So, what exactly does this pair of scripts do? How to use them? ==&lt;br /&gt;
&lt;br /&gt;
I&#039;m well aware that {{Mention|Babbage Linden|p=}} is not part of LL any longer, and he left some of his legacy scripts around for us to interpret, but... what exactly is a &#039;&#039;SLetanque&#039;&#039; and how do we assemble it?&lt;br /&gt;
&lt;br /&gt;
It seems that it&#039;s something that will launch an avatar (?) pushed with some force, but how does it work? Is the first script for an avatar attachment? (in that case, why does it only check for touching)?&lt;br /&gt;
&lt;br /&gt;
Baffled. Puzzled.&lt;br /&gt;
&lt;br /&gt;
— [[User:Gwyneth Llewelyn|Gwyneth Llewelyn]] ([[User talk:Gwyneth Llewelyn|talk]]) 03:55, 4 January 2025 (PST)&lt;br /&gt;
&lt;br /&gt;
: https://en.wikipedia.org/wiki/P%C3%A9tanque&lt;br /&gt;
&lt;br /&gt;
: — [[User:Peter Stindberg|Peter Stindberg]] ([[User talk:Peter Stindberg|talk]]) 07:43, 4 January 2025 (PST)&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LSL_HTTP_server&amp;diff=1217834</id>
		<title>LSL HTTP server</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LSL_HTTP_server&amp;diff=1217834"/>
		<updated>2024-12-24T22:29:58Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: XMP-RPC is discontinued&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header|ml=*}}&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This is the counterpart to [[llHTTPRequest]]. While [[llHTTPRequest]] enables [[Script|LSL scripts]] to request data from HTTP-accessible sources, HTTP-in enables outside sources to request data from [[Script|LSL scripts]] in Second Life. The key difference is that [[llHTTPRequest]] exchanges data when the script in SL wants; HTTP-in allows outside sources to determine when they need to communicate with [[Script|LSL scripts]] in SL.&lt;br /&gt;
&lt;br /&gt;
Prior to HTTP-in, similar functionality could be achieved by [[HTTP Polling|polling]] with [[llHTTPRequest]], [[llEmail]] and [[:Category:LSL_XML-RPC|XML-RPC]]. All three are cumbersome and the latter two have serious scalability bottlenecks, with XML-RPC being discontinued altogether since June 2023.&lt;br /&gt;
&lt;br /&gt;
It is important to note that [[LSL HTTP server|LSL HTTP servers]] cannot use [[llSetContentType]] with [[CONTENT_TYPE_HTML]] for an [[llHTTPResponse]] except in very limited circumstances. See [[#Other_Limitations|Other Limitations]] for details.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This section forms the [[:Category:LSL HTTP#Understanding_LSL_HTTP_Communications | Incoming]] HTTP pipeline.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Uses =&lt;br /&gt;
&lt;br /&gt;
* Easily get data from [[Script|LSL scripts]] to outside viewers, [[Script|LSL scripts]] or servers.&lt;br /&gt;
** Web front end for a visitor counter or other statistics accumulator.&lt;br /&gt;
* Easily get data into [[Script|LSL scripts]] from outside viewers, [[Script|LSL scripts]] or servers.&lt;br /&gt;
** A store with a web front end that communicates to an in-world object to exchange L$ and inventory items.&lt;br /&gt;
** Inworld game for which an external program handles the primary game logic that needs to manipulate inworld items.&lt;br /&gt;
* HUD UI when used with [[llSetContentType]]. See [[HTML HUD Demo]].&lt;br /&gt;
Gory Technical Details follow. Or jump straight to the [[LSL_http_server/examples | Script Examples]].&lt;br /&gt;
&lt;br /&gt;
= Script API =&lt;br /&gt;
&lt;br /&gt;
== Events ==&lt;br /&gt;
* &#039;&#039;&#039;[[http_request|http_request(key id, string method, string body)]]&#039;&#039;&#039;&lt;br /&gt;
: Event triggered when an URL is hit:&lt;br /&gt;
:* id is unique to this request&lt;br /&gt;
:* Supported methods are &amp;lt;code&amp;gt;&amp;quot;GET&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;POST&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;PUT&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;DELETE&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
:* body: The body of the request.&lt;br /&gt;
: Event also triggered with response to [[llRequestURL]] and [[llRequestSecureURL]]&lt;br /&gt;
:* id matches the key returned by [[llRequestURL]] or [[llRequestSecureURL]]&lt;br /&gt;
:* method == [[URL_REQUEST_GRANTED]] for success, [[URL_REQUEST_DENIED]] for failure to get an URL&lt;br /&gt;
:* body is the public URL. If unable to get a public URL body will be empty.&lt;br /&gt;
* &#039;&#039;&#039;[[Changed|changed(integer change)]]&#039;&#039;&#039;&lt;br /&gt;
:* [[CHANGED_REGION_START]]: New [[changed]] [[event]] triggered on region startup.&lt;br /&gt;
:* [[CHANGED_REGION]]: New [[changed]] [[event]] triggered when crossing regions or teleporting. Please read [[CHANGED_REGION]] for more info.&lt;br /&gt;
:* [[CHANGED_TELEPORT]]: New [[changed]] [[event]] triggered when the avatar teleports. Please read [[CHANGED_TELEPORT]] for more info.&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
{{LSL Function/Head&lt;br /&gt;
|func_id=345|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llRequestURL&lt;br /&gt;
|func_desc=Requests one HTTP:// url for use by the script. The [[http_request]] [[event]] is triggered with the result of the request. HTTP-in uses port 12046.&lt;br /&gt;
|return_type=key|return_text=that is the handle used for identifying the result in the [[http_request]] [[event]].&lt;br /&gt;
|func_footer&lt;br /&gt;
|caveats=none&lt;br /&gt;
}}&lt;br /&gt;
{{LSL Function/Head&lt;br /&gt;
|func_id=346|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llRequestSecureURL&lt;br /&gt;
|func_desc=Requests one HTTPS:// (SSL) url for use by the script. The [[http_request]] [[event]] is triggered with the result of the request. HTTPS-in uses port 12043.&lt;br /&gt;
|return_type=key|return_text=that is the handle used for identifying the result in the [[http_request]] [[event]].&lt;br /&gt;
|func_footer&lt;br /&gt;
|caveats=none&lt;br /&gt;
}}&lt;br /&gt;
{{LSL Function/Head&lt;br /&gt;
|func_id=347|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llReleaseURL&lt;br /&gt;
|p1_type=string|p1_name=url|p1_desc=URL to release&lt;br /&gt;
|func_desc=Releases the specified URL, it will no longer be usable.&lt;br /&gt;
|func_footer&lt;br /&gt;
|caveats=none&lt;br /&gt;
}}&lt;br /&gt;
{{LSL Function/Head&lt;br /&gt;
|func_id=348|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llHTTPResponse&lt;br /&gt;
|p1_type=key|p1_name=request_id|p1_desc=A valid HTTP request key&lt;br /&gt;
|p2_type=integer|p2_name=status|p2_desc=[http://en.wikipedia.org/wiki/List_of_HTTP_status_codes HTTP_Status] (200, 400, 404, etc)&lt;br /&gt;
|p3_type=string|p3_name=body|p3_desc=Contents of the response.&lt;br /&gt;
|func_desc=Responds to {{LSLP|request_id}} with {{LSLP|status}} and {{LSLP|body}}.&lt;br /&gt;
|func_footer=The response need not be made inside the [[http_request]] [[event]] but if it does not happen in a timely fashion the request will time out (within 25 seconds).&lt;br /&gt;
|caveats=none&lt;br /&gt;
}}&lt;br /&gt;
{{LSL Function/Head&lt;br /&gt;
|func_id=344|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llGetFreeURLs&lt;br /&gt;
|return_type=integer|return_text=that is the number of available URLs.&lt;br /&gt;
|caveats=none&lt;br /&gt;
}}&lt;br /&gt;
{{LSL Function/Head&lt;br /&gt;
|func_id=349|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llGetHTTPHeader&lt;br /&gt;
|p1_type=key|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;
|return_type=string|return_text=that is the value for {{LSLP|header}} for {{LSLP|request_id}}.&lt;br /&gt;
|func_footer=Returns an empty [[string]] if the {{LSLP|header}} is not found or if the headers can no longer be accessed. Headers can only be accessed before [[llHTTPResponse]] is called and with-in the first 30 seconds after the [[http_request]] [[event]] is queued.&lt;br /&gt;
&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=none&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= URL Lifetime Limitations =&lt;br /&gt;
* URLs are &#039;&#039;&#039;temporary&#039;&#039;&#039;!&lt;br /&gt;
* URLs will be lost in the following cases, all detectable by the script events listed with them.&lt;br /&gt;
** On object derez/rez: [[on_rez]]&lt;br /&gt;
** On script save/reset: &#039;&#039;[[default]] [[state_entry]] (trickier in multi-state [[Script|LSL scripts]])&lt;br /&gt;
** On region cross or TP(attachments): [[changed]] {{LSLGC|Events|event}}, [[CHANGED_REGION]] and [[CHANGED_TELEPORT]]. Testing the latter event, it has been found that teleports within a region DO NOT cause a URL to be lost, therefore you do not need to request a new URL on [[CHANGED_TELEPORT]], because [[CHANGED_REGION]] will handle a teleport to a different region. If you choose to request a URL after a teleport, it is recommended to release the old URL to be sure you don&#039;t have too many used. (Stone Tremont Aug 8th 2010)&lt;br /&gt;
** On region restart: [[changed]] [[event]], flag [[CHANGED_REGION_START]]&lt;br /&gt;
* When urls are &#039;lost&#039; it means that all public urls for that script are gone, new ones will need to be requested and the new urls will &#039;&#039;&#039;not&#039;&#039;&#039; resemble the old ones.&lt;br /&gt;
* Maintaining persistent URLs will require building or using an external service similar to how [http://en.wikipedia.org/wiki/Dynamic_DNS Dynamic DNS] services work for tying domain names to dynamic IP addresses.&lt;br /&gt;
&lt;br /&gt;
Contributed HTTP-in URL mapping implementations and services:&lt;br /&gt;
* A Dynamic DNS service running on Google App Engine (contributed as an example) can be found in the forums [http://wiki.secondlife.com/wiki/User:Darien_Caldwell/HTTP-DNS here].&lt;br /&gt;
* Yet another one, running on GAE, with password protected and private domains. http://wiki.secondlife.com/wiki/Public_Object_DNS&lt;br /&gt;
* The [http://www.silverday.net/sqndns SilverDay ObjectDNS] is an easy to use dns-mapping-service with many configurable options (password protection, write protection, etc.) and an optional web-interface. The [[Script|LSL scripts]] are available here on the wiki (LSL-Script Library/[[Silverday ObjectDNS]]).&lt;br /&gt;
&lt;br /&gt;
= Resource Limitations =&lt;br /&gt;
* There are a limited number of URLs available in each [[region]], split by land ownership exactly like prim limits.&lt;br /&gt;
** Use [[llGetFreeURLs]] to get the exact number of available URLs for the script.&lt;br /&gt;
** The number of allowed URLs is the same as the number of allowed [[prim|prims]] on the [[Land#Parcel|parcel]] the [[object]] is over.&lt;br /&gt;
**: &#039;&#039;Object owner does not matter, all objects over a [[Land#Parcel|parcel]] will use the resource pool for that [[Land#Parcel|parcel]].&#039;&#039;&lt;br /&gt;
**: &#039;&#039;Like [[prim|prims]], all the [[Land#Parcel|parcels]] owned by the same owner and in the same [[region]] share the same pool of resources.&#039;&#039;&lt;br /&gt;
**: &#039;&#039;If you have two [[Land#Parcel|parcels]] in a [[region]] that each support 100 URLs, then you could use all 200 in object(s) on a single [[Land#Parcel|parcel]].&#039;&#039;&lt;br /&gt;
** The [[region]]&#039;s [[object]] bonus factor does not apply to available URLs.&lt;br /&gt;
**: &#039;&#039;If a [[Land#Parcel|parcel]] has a max of 300 [[prim|prims]] in a [[region]] with a 2x bonus factor there will only be 150 urls allowed.&#039;&#039;&lt;br /&gt;
* Each resident has their own unique pool of available URLs with a max of 38 URLs per resident.&lt;br /&gt;
** This is 1 per attachment point, but all 38 could be used by a single attachment for example.&lt;br /&gt;
* Vehicles are special and lazily moved to resident pools by the following logic:&lt;br /&gt;
** Any [[object]] that has a resident sitting on it is a &#039;vehicle&#039;&lt;br /&gt;
** Vehicles will use the url resources from the [[Land#Parcel|parcel]] they are over until the cross a [[Land#Parcel|parcel]] border.&lt;br /&gt;
**: &#039;&#039;Specifically this prevents anyone from breaking your vending machine by sitting on it and making it a &#039;vehicle&#039;.&#039;&#039;&lt;br /&gt;
** When any [[object]] using URL resources with a resident sitting on it crosses a [[Land#Parcel|parcel]] boundary the resources will switch to the first sitting resident with enough resources. If no sitting agents have enough resources then the resources from the [[Land#Parcel|parcel]] being moved onto will be used. If even then there are not enough resources to use then the vehicle will be blocked from moving.&lt;br /&gt;
**: &#039;&#039;In short we do everything we can to find a pool to host the resources needed by the vehicle, but will block movement if we can&#039;t.&#039;&#039;&lt;br /&gt;
* Parcel Sale: When a [[Land#Parcel|parcel]] is sold such that it changes the total available URLs in the [[region]] for either resident (seller or buyer) such that more URLs are being used than are available some objects will be returned.&lt;br /&gt;
** The objects returned will be from youngest [[object]] to oldest [[object]] of those using URLs in each category in order of [[object]] category: Temporary, Other, Group, Owner, Selected/Sat upon.&lt;br /&gt;
**: &#039;&#039;The &#039;&#039;&#039;only&#039;&#039;&#039; time objects are possibly returned is when [[Land#Parcel|parcels]] change owner, and only if more resources are being used than allowed.&#039;&#039;&lt;br /&gt;
**: &#039;&#039;We return youngest temporary objects before older temporary objects before younger &#039;other&#039; (owned by non-group, non-[[Land#Parcel|parcel]]-owner) objects etc.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Other Limitations =&lt;br /&gt;
* Size of the body of requests on the &#039;&#039;&#039;[[:Category:LSL HTTP#Understanding_LSL_HTTP_Communications | Incoming pipeline]]&#039;&#039;&#039; will be [[limit]]ed to 2k [[bytes]], and cannot currently be changed.&lt;br /&gt;
* Size of headers of requests will be limited to 255 bytes per header, not total.&lt;br /&gt;
* The size of responses to requests is not currently limited, but this is subject to review during testing.&lt;br /&gt;
* By default the content type of the returned data is always &amp;lt;code&amp;gt;&amp;quot;text/plain; charset=utf-8&amp;quot;&amp;lt;/code&amp;gt;, this however can be changed via [[llSetContentType]] for all subsequent responses via [[llHTTPResponse]].&lt;br /&gt;
* There is a cap of 64 in flight requests per script. This is based on the maximum number of pending [[event|events]] in LSL. After hitting the 64 request limit, the simulator cap server returns &amp;lt;code&amp;gt;{{String|503 Service Unavailable}}&amp;lt;/code&amp;gt; to the inbound request.&lt;br /&gt;
* &#039;&#039;We may throttle the rate we accept hits at the CAP server level as well. This is possible, but has not yet been decided.&#039;&#039;&lt;br /&gt;
* HTML can be used to in-client browser, including media on a prim, with some restrictions. See [[llSetContentType]] and [[CONTENT_TYPE_HTML]] for further details.&lt;br /&gt;
* If making a parser, remember that you should probably restrict access to only Linden Lab HTML URLs as to not have your bandwith stolen. See [[Simulator_IP_Addresses]] for details.&lt;br /&gt;
* It is important to note that when appending a query string to a cap URL there &#039;&#039;&#039;MUST&#039;&#039;&#039; be a trailing slash between the cap guid and the query string token &amp;lt;code&amp;gt;&amp;quot;?&amp;quot;&amp;lt;/code&amp;gt;. For example: [https://sim3015.aditi.lindenlab.com:12043/cap/a7717681-2c04-e4ac-35e3-1f01c9861322?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:red;|1=arg=gra|2={{String|x-query-string}} = {{String|1=arg=gra}}}}] will return a 500 HTTP status {{Wikipedia|List_of_HTTP_status_codes#5xx_Server_Error|Server Error code}}, but [https://sim3015.aditi.lindenlab.com:12043/cap/a7717681-2c04-e4ac-35e3-1f01c9861322/?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;|/|2={{String|x-path-info}} = {{String|/}}}}?{{HoverTextStyle|style=color:red;|1=arg=gra|2={{String|x-query-string}} = {{String|1=arg=gra}}}}] will succeed.&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [[LSL_http_server/examples | Script Examples]]&lt;br /&gt;
* [[LSL_http_server/design | Design Document]]&lt;br /&gt;
* Design Jira:{{jira|SVC-1086}}&lt;br /&gt;
&lt;br /&gt;
{{LSLC|HTTP}}&lt;br /&gt;
{{LSLC|Communications}}&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGiveAgentInventory&amp;diff=1217831</id>
		<title>LlGiveAgentInventory</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGiveAgentInventory&amp;diff=1217831"/>
		<updated>2024-12-19T16:04:29Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Added example after testing it on ADITI&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2=&lt;br /&gt;
{{LSL_Function/give|target|inventory|sim=*|uuid=false|insert=list of items}}&lt;br /&gt;
|func_id=|func_sleep=3.0|func_energy=10.0|return_type=integer&lt;br /&gt;
|func=llGiveAgentInventory&lt;br /&gt;
|p1_type=key|p1_name=agent|p1_desc=agent to receive inventory offer.&lt;br /&gt;
|p2_type=string|p2_name=folder|p2_desc=destination folder name to use.&lt;br /&gt;
|p3_type=list|p3_name=inventory|p3_desc=list of inventory items to give to the agent&lt;br /&gt;
|p4_type=list|p4_name=options|p4_desc=list of options for inventory transfer.&lt;br /&gt;
|func_footnote&lt;br /&gt;
|return_text&lt;br /&gt;
|func_desc=Gives &#039;&#039;&#039;inventory&#039;&#039;&#039; items to &#039;&#039;&#039;target&#039;&#039;&#039;, creating a new &#039;&#039;&#039;folder&#039;&#039;&#039; to put them in.&lt;br /&gt;
|spec=&lt;br /&gt;
* The target must be an avatar in the same region as the sending object, or must have recently been in the region.&lt;br /&gt;
* Places the inventory items in a newly created folder in the avatar&#039;s inventory (even if there is a folder by the same name, a new one is created).&lt;br /&gt;
* If a path of root folders has been specified, the function will ensure that those folders exist but will not recreate them if they already exist.&lt;br /&gt;
|constants={{LSL Constants/Transfer Inventory}}&lt;br /&gt;
&lt;br /&gt;
{{LSL Constants/Transfer Errors}}&lt;br /&gt;
&lt;br /&gt;
|caveats&lt;br /&gt;
|examples=&lt;br /&gt;
In this example, the object inventory needs to contain two objects named &#039;&#039;Item 1&#039;&#039; and &#039;&#039;Item 2&#039;&#039;. The destination folder will be named &#039;&#039;Destination Folder&#039;&#039; and will be created under the main folder &#039;&#039;Objects&#039;&#039;, in the sub-folder &#039;&#039;Subfolder&#039;&#039;. If &#039;&#039;Subfolder&#039;&#039; does not exist, it will be created.&lt;br /&gt;
&lt;br /&gt;
If the object gets touched for a second time, the sub-folder &#039;&#039;Subfolder&#039;&#039; will &#039;&#039;&#039;not&#039;&#039;&#039; be duplicated, however the destination folder &#039;&#039;Destination Folder&#039;&#039; &#039;&#039;&#039;will&#039;&#039;&#039; be duplicated.&lt;br /&gt;
&lt;br /&gt;
If &#039;&#039;Item 1&#039;&#039; and/or &#039;&#039;Item 2&#039;&#039; do not exist, the transfer will silently fail partially or completely.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        llGiveAgentInventory(llDetectedKey(0), &amp;quot;Destination Folder&amp;quot;, [&amp;quot;Item 1&amp;quot;,&amp;quot;Item 2&amp;quot;], [0, &amp;quot;Objects|Subfolder&amp;quot;] );&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llGiveInventory]]}}&lt;br /&gt;
{{LSL DefineRow||[[llGiveInventoryList]]}}&lt;br /&gt;
|also_events={{LSL DefineRow||[[changed]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes|cat1=Inventory&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Breedables_Guide_For_Second_Life&amp;diff=1217792</id>
		<title>Breedables Guide For Second Life</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Breedables_Guide_For_Second_Life&amp;diff=1217792"/>
		<updated>2024-12-07T09:42:13Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Keep the headline structure clean please.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{help|Misc=*}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; This is a wiki. Everyone can add to it. The information below comes from volunteers as well as developers and enthusiasts of a specific system. The information provided should best be regarded as advertisement and is &#039;&#039;&#039;not&#039;&#039;&#039; routinely fact-checked. Fact-checks happen more or less randomly and are done by volunteers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Breedable Animals Guide For Second Life =&lt;br /&gt;
&lt;br /&gt;
One of the most popular{{Citation needed|reason=Source needed for this statement.|date=March 2024}} pastimes in Second Life is the caring for, feeding and breeding of virtual animals in Second Life. Over the years these animals have developed and a whole community of breeders and traders has emerged. Some players become so good at breeding animals that they are able to earn linden dollar profits from the buying and selling of them.&lt;br /&gt;
&lt;br /&gt;
= Breedables List =&lt;br /&gt;
&lt;br /&gt;
== ADS Company == &lt;br /&gt;
&lt;br /&gt;
====Snuffles====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Snuffles_site_promo.png|thumb|alt=breedable animal second life|[http://www.goldtokens.net/index.php?title=Snuffles Snuffles] is an example of another breedable animal in Second Life.]]&lt;br /&gt;
&lt;br /&gt;
Most aptly described as squirrel type creatures, [http://www.snufflesbreedables.com Snuffles] are a breedable animal in Second Life with a thriving secondary market for the breeding and trading of Snuffle Burrows.&lt;br /&gt;
&lt;br /&gt;
====Shubbies====&lt;br /&gt;
&lt;br /&gt;
[http://www.goldtokens.net/index.php?title=Shubbies Shubbies] are a breedable pet that act as companions in the [http://www.goldtokens.net/index.php?title=Fish_Hunt Fish Hunt]&lt;br /&gt;
&lt;br /&gt;
== AEON PETS ==&lt;br /&gt;
&lt;br /&gt;
offer a variety of breedable pets for all ages.&lt;br /&gt;
Happy Hamster,&lt;br /&gt;
Happy Elephants,&lt;br /&gt;
Exotics,&lt;br /&gt;
E-Cats,&lt;br /&gt;
Silly Ghost,&lt;br /&gt;
Amazing Spiders,&lt;br /&gt;
Patchworx,&lt;br /&gt;
Crazy Eggs,&lt;br /&gt;
Silly Mice,&lt;br /&gt;
Pengi,&lt;br /&gt;
and much more.&lt;br /&gt;
&lt;br /&gt;
Visit the [http://maps.secondlife.com/secondlife/Fama/42/79/1001 AEON Pets Mainstore]&lt;br /&gt;
&lt;br /&gt;
== Amaretto Breedables== &lt;br /&gt;
[[File:AmarettoLogo.jpg|300px|right]]&lt;br /&gt;
====Amaretto Horses====&lt;br /&gt;
Amaretto Ranch Breedables released Amaretto Breedable Horses in Second Life in September of 2010 and very quickly became a leader in the breedables industry.  Amaretto Breedable Horses are an interactive breedable that you can pet, ride, race and breed based on genetics.  Amaretto Breedable Horses have a large secondary market for breeding, studding, racing, selling, trading and much more.  The Amaretto Horses Main Store is located here&lt;br /&gt;
&lt;br /&gt;
[http://maps.secondlife.com/secondlife/Horses%20and%20Ponie%20Pals/247/32/21 Horse Main Store]&lt;br /&gt;
&lt;br /&gt;
====Amaretto K-9s====&lt;br /&gt;
Amaretto Ranch Breedables released its 2nd breedable, Amaretto Breedable K-9s in Second Life in August of 2011.  Amaretto Breedable K-9s are an interactive breedable that you can walk, play with and breed based on genetics.  Amaretto Breedable K-9s also have a secondary market for breeding, studding, selling and trading. &lt;br /&gt;
The Amaretto K-9s Main Store is located here.&lt;br /&gt;
&lt;br /&gt;
[http://maps.secondlife.com/secondlife/K9s%20and%20Birds/16/19/23 K-9 Main Store]&lt;br /&gt;
&lt;br /&gt;
====Amaretto Barnyard Birds====&lt;br /&gt;
Amaretto Ranch Breedables released its 3rd breedable, Amaretto Barnyard Birds in Second Life in May of 2012.  Amaretto Barnyard Birds are an interactive breedable that you can hold and breed based on genetics.  Amaretto Barnyard Birds have a secondary market for breeding, studding, selling and trading. &lt;br /&gt;
The Amaretto Barnyard Bird Store is located here. &lt;br /&gt;
[http://maps.secondlife.com/secondlife/K9s%20and%20Birds/16/19/23  Amaretto Ranch Breedables Barnyard Bird Main Store]&lt;br /&gt;
[http://amarettobreedables.com/ Amaretto Ranch Breedables Main Website]&lt;br /&gt;
&lt;br /&gt;
== BattleBeast Breedables ==&lt;br /&gt;
* Website: [http://www.battlebeastbreedables.com]&lt;br /&gt;
&lt;br /&gt;
==== BattleBeast Dragons ====&lt;br /&gt;
&lt;br /&gt;
BattleBeast Breedables Dragons were released in Spring of 2012, as the first breedable in Second Life where battle (aka combat) can affect the dragons&#039; genetic offspring. BattleBeast Breedables dragons have enjoyed a wide following in Second Life with people who like to breed, collect, fly, ride, and Role-Play (RP) with them.&lt;br /&gt;
* Dragons Main Store: [http://maps.secondlife.com/secondlife/Dragons/226/167/23]&lt;br /&gt;
&lt;br /&gt;
==== BattleBeast Kitsune ====&lt;br /&gt;
&lt;br /&gt;
BattleBeast Breedables Kitsune are a new project from BattleBeast Breedables, which was released in Spring of 2017, bringing the mythical and magical Japanese fox (&amp;quot;kitsune&amp;quot;) to Second Life. In their many-tailed forms, and steeped in mythos, lore and legend, the Kitsune can be your guides in Questing to earn Wisdom and other rewards throughout SL.&lt;br /&gt;
* Kitsune Main Store: [http://maps.secondlife.com/secondlife/Dragons/26/65/37]&lt;br /&gt;
&lt;br /&gt;
== BioBreeds ==&lt;br /&gt;
[[File:BioBreeds_Logo.jpg|300px|right]]&lt;br /&gt;
* Website: [http://BioBreeds.com]&lt;br /&gt;
* BioBreeds Main Store: [http://maps.secondlife.com/secondlife/BioBreeds/75/179/32]&lt;br /&gt;
&lt;br /&gt;
==== BioBreeds Dogs ====&lt;br /&gt;
&lt;br /&gt;
BioBreeds Dogs are realistically created breedable dogs in Second Life. BioBreeds launched in February of 2011 and prides itself on being a leader in innovation in the breedable community. The dogs respond to commands, breed, hunt and interact with BioBreeds horses. The Biobreeds genetic system mirrors real life. BioBreeds also provides a system for the owners to create unique attachments. BioBreeds users have built a strong secondary market, selling not only their dogs with unique traits, but also attachments, snacks, pets and other dog related items. You can view the existing traits on the website:  [http://biobreeds.com/Traitopia.aspx]&lt;br /&gt;
&lt;br /&gt;
==== BioBreeds Pal Ponies ====&lt;br /&gt;
&lt;br /&gt;
BioBreeds Ponies were released in November of 2011. BioBreeds Ponies are a realistic looking ridable pony that follows commands, breeds and interacts with its owners and BioBreeds Dogs. Like the BioBreeds Dogs, an owner can create their own unique attachments.  Its genetic system, and the rare traits that it produces, has spawned a strong secondary market for its breeders. You can view the existing traits on the website:  [http://www.biobreeds.com/Traitopia.aspx?breed=Pony]&lt;br /&gt;
&lt;br /&gt;
==== BioBreeds Exotics ====&lt;br /&gt;
&lt;br /&gt;
BioBreeds Exotics introduced fantasy into the BioBreeds line of breedables. The ridable Exotics follow commands, breed, interact with their owners and also with Biobreeds Dogs. Like the BioBreeds Dogs, an owner can create their own unique attachments. Using the same genetic system as the BioBreeds Ponies, an owner can choose to crossbreed the Exotics with BioBreeds Ponies, infusing the Ponies traits into the genetic system of the Exotics, and vice versa. You can view the existing traits on the website:  [http://biobreeds.com/Traitopia.aspx?breed=Exotic]&lt;br /&gt;
&lt;br /&gt;
==== BioBreeds Wild Ones ====&lt;br /&gt;
&lt;br /&gt;
BioBreeds continued its expansion of available types of animals in February 2014 releasing &amp;quot;Wild Ones.&amp;quot;  The Wild Ones are realistic versions of a wolf, fox, coyote and tiger. Like the BioBreeds Dogs, an owner can create their own unique attachments. The Wild Ones also have unique and applicable animations, poses and user commands. As with other BioBreeds products, they can be bred for specific traits. You can view the existing known traits here: [http://biobreeds.com/Traitopia.aspx?breed=Wolf]&lt;br /&gt;
&lt;br /&gt;
== Buildables (Robots)==&lt;br /&gt;
&lt;br /&gt;
[http://mybuildables.com/ Buildables]Those of you that have taken part in the old form of breedables, will LOVE what the Buildables system is capable of!  This is the ONLY system on SL that has the ability to &amp;quot;breed&amp;quot;(build) DIFFERENT styles of &amp;quot;Buildables&amp;quot; (bots) with over 50 types of bots and too many variants to count!  At the time of this posting there are almost 600 kinds of bots!  And with the HIGH QUALITY designs and amazing textures that make the bots come to life, there is a bot for ANY genre!&lt;br /&gt;
&lt;br /&gt;
Another very attractive point is their AFFORDABILITY.  This is one of the most affordable breedable to maintain.  Unlike other breedables that require food to keep them alive, if you get the unlimited power and unlimited oil (1000L each, so 2000L investment) that&#039;s all you need to fuel/&amp;quot;feed&amp;quot; your bots.  A small investment that fuels/feeds your all your bots.  You can have 1 or a million bots and if you get the unlimited power and oil it will feed/fuel all your bots FOREVER.  After that the only other expenses you will incur are the building pods (the mega pod is 499L for up to 25 builds) for the bots to build new bots and crates (25 crates for 100L) to crate up rezzed bots.&lt;br /&gt;
&lt;br /&gt;
[https://buildablesblog.wordpress.com/ Buildables Blog]&lt;br /&gt;
&lt;br /&gt;
Official Buildables Vendor [http://maps.secondlife.com/secondlife/Light%20Heaven/196/16/23 here].&lt;br /&gt;
&lt;br /&gt;
== Digital Farm System (DFS) ==&lt;br /&gt;
&lt;br /&gt;
[[File:DFS Logo -With Bevel.png|thumb|alt=breedables second life|[https://www.digitalfarmsystem.com]  [http://maps.secondlife.com/secondlife/DFS/126/149/24 Official Digital Farming System (DFS) Sim]]]&lt;br /&gt;
&lt;br /&gt;
[https://www.digitalfarmsystem.com] Digital Farm System (DFS), established October 3rd, 2016, is a farming simulation system, which allows players to experience the depths of farming life by planning their farming goals, breeding different types of farm animals, and grow their own crops, plants and trees.  The DFS community uses the system in various ways to further enhance their (SL) experiences.&lt;br /&gt;
&lt;br /&gt;
Many DFS users conduct trades with other farmers and users in marketplaces and roles playing structures. This further supports the role-playing experience and their individual or group goals for DFS. DFS creators offer a wide range of content, from Mayan farmers to post-apocalyptic earth.&lt;br /&gt;
&lt;br /&gt;
DFS has resizable equipment to fit avatars of any sizes. Several of the equipment is sold in regular and tiny size, which is intended for [[ToddleeDoos]], but can also be used to accommodate smaller space or multiple equipment needs.&lt;br /&gt;
&lt;br /&gt;
The system is constantly being developed and promises timely updates and fix system issues quickly to guarantee everything runs smoothly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your avatar must be at least 30 days old to use the Digital Farm System and to visit the DFS Main store.&lt;br /&gt;
&lt;br /&gt;
More information can be found on the [[DFS - Digital Farm System]] promotional wiki page, and at the [http://maps.secondlife.com/secondlife/DFS/126/149/24 Official Digital Farming System (DFS) Sim].&lt;br /&gt;
&lt;br /&gt;
== EVO Breeding Co ==&lt;br /&gt;
&lt;br /&gt;
[http://Evosl.com EVO Portal]&lt;br /&gt;
Come check EVO Breeding CO at our mainstore SIM Remood United - http://maps.secondlife.com/secondlife/REMOOD%20UNITED/92/226/25&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===GOFishin===&lt;br /&gt;
&lt;br /&gt;
Fishing system, with contests and different rarities of fishes and other prizes. You can also win breedable fishes.&lt;br /&gt;
&lt;br /&gt;
===GoFishin Breedables=== &lt;br /&gt;
&lt;br /&gt;
Some of the fishes you catch on GoFishin game, can be bred to get other fishes.&lt;br /&gt;
&lt;br /&gt;
===Fairies===&lt;br /&gt;
&lt;br /&gt;
Fairies are one of our most know pet, they have pretty buildings, they fly and feed, give prizes, and lay eggs to give you new faes. At the moment we have around 500 different faes, and we are in a constant production of new ones.&lt;br /&gt;
&lt;br /&gt;
===Arborea===&lt;br /&gt;
&lt;br /&gt;
Arborea is for all the botanics of second life. You drop the seed on the vase, you water them and wait for them to bloom and polynise each other.&lt;br /&gt;
&lt;br /&gt;
===Shoals===&lt;br /&gt;
&lt;br /&gt;
Shoals came as an addition to the &amp;quot;sea&amp;quot; department of pets. They have their own clam lab which you can have in your living room filled with water, or you can empty it and have it on the water. They grow and reproduce, but sometimes they are closed and you will need to play, and open them in order to get prizes.&lt;br /&gt;
&lt;br /&gt;
===Hammies===&lt;br /&gt;
&lt;br /&gt;
Hammies are cute little rodents, they were updated to a mesh shape, and rescripted recently (April 2016) they hop around their stump, eating their petmix. There&#039;s different colour coats, ears, eyes and tails. &lt;br /&gt;
&lt;br /&gt;
===Yukas===&lt;br /&gt;
&lt;br /&gt;
Yukas are our most recent project, they are not yet out, but will be pretty soon. Yukas are little mamoths which you&#039;ll have the opurtunity to unfroze and care for. They will be super fun. Keep tuned.&lt;br /&gt;
&lt;br /&gt;
== Fawns ==&lt;br /&gt;
&lt;br /&gt;
[http://www.fawns.org/ Fawns Breedables] feature dueling, racing, hand-painted unique coats and so much more. You can walk around with your Fawns, hold them in your arms, at your side, etc. &lt;br /&gt;
&lt;br /&gt;
Online market for Fawns: [http://www.fawns.org/market Fawns Market].&lt;br /&gt;
&lt;br /&gt;
Visit the [http://maps.secondlife.com/secondlife/PayHUD/150/134/23 Fawns Official SLURL].&lt;br /&gt;
&lt;br /&gt;
[[File:Fennux-and-Fawns.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Fennux ==&lt;br /&gt;
&lt;br /&gt;
The [http://www.fennux.com/ Fennux] are breedable pets that feature dueling, crafting of adapted Fennux with rare coats, community events and more. You can walk your Fennux, wear them on your shoulder, carry them around, feed them, breed them, and even duel your friends (or enemies). Come see The Fennux in-world by visiting the main sim location today!&lt;br /&gt;
&lt;br /&gt;
Online market for Fennux: [http://www.fennux.com/market Fennux Market].&lt;br /&gt;
&lt;br /&gt;
Visit the [http://maps.secondlife.com/secondlife/PayHUD/115/163/23 Fennux Official SLURL].&lt;br /&gt;
&lt;br /&gt;
== JingJings ==&lt;br /&gt;
&lt;br /&gt;
[[File:JINGJING Breedables powered by Teulu Breedables 512.jpg|thumb|alt=breedables second life|[http://jingjing.info] Visit us at the [http://maps.secondlife.com/secondlife/Urban%20Paradise/42/183/27 Official JingJing&#039;s powered by Teulu Breedables Main Sim]are JingJings first landed on the grid for sale to public on October 1st, 2012 owned by 亗ღ Twstd ღ亗™ (twstd.ruggles). Change of Ownership happened on September 24, 2023 to Siâи ĐaяΚƑµƦץ тєµℓµ (welshgoddess) to add to her Teulu Breedables business. (Furbs, Teulu Horses, and Teulu Dogs are the first Animesh breedable on Second Life Grid Currently with many more to come.)]]&lt;br /&gt;
&lt;br /&gt;
[http://jingjing.info] First landed on Second Life Grid on October 1st, 2012 owned by 亗ღ Twstd ღ亗™ (twstd.ruggles) who now sold the company to Siâи ĐaяΚƑµƦץ тєµℓµ (welshgoddess) who owns Teulu Breedables. First animesh breedables on grid in March 2020 followed by Teulu Horses in November 2022 then our latest Teulu Dogs in April 2023. Teulu Breedables can be attached to avatar center to be worn on avatar as a pets or to ride them!&lt;br /&gt;
&lt;br /&gt;
Visit the [http://maps.secondlife.com/secondlife/Urban%20Paradise/42/183/27].&lt;br /&gt;
&lt;br /&gt;
== KittyCatS ==&lt;br /&gt;
&lt;br /&gt;
[[File:Square_kitty.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
[https://www.kittycats.ws/forum/ KittyCatS] are highly interactive cats that can be petted, cuddled and held. Owners and non-owners alike can interact with the adorable cats. KittyCatS are the first{{fact}} to take breeding OUTSIDE of SL with their [https://kittycats.ws/online/ KittyCatS Cattery]. The Cattery is is a section of their website thus making breeding available to internet browsing devices, such as iPads.&lt;br /&gt;
&lt;br /&gt;
KittyCatS won the Avi Choice Award 2012 for Favorite Breedable in Second Life. &lt;br /&gt;
&lt;br /&gt;
== Krafties ==&lt;br /&gt;
&lt;br /&gt;
[http://krafties.com Krafties] are fantasy based creatures with an interesting backstory. They are the center of a free, in depth MMORPG type game in which the players can battle creatures and other players, catch new creatures and then combine them with many varieties of elemental souls, craft and enchant powerful items, and much much more. There are many species of creatures to choose from, all with different strengths and weaknesses. Visit the Krafties Island to start the journey for free.&lt;br /&gt;
&lt;br /&gt;
[[File:Krafties-Screenshot2.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Kreatures ==&lt;br /&gt;
&lt;br /&gt;
[[File:Kreatures_Breedable_Pets_498x444.jpg|thumb|alt=breedables second life|[http://www.kreatures.net/ Kreatures] are one of many varieties of breedable pets in Second life. (Fennux and Fawns are also featured in this image.)]]&lt;br /&gt;
&lt;br /&gt;
[http://www.kreatures.net/ Kreatures] is a breedable pet game that officially launched April 2022. The creators of this also produced The Fennux and Fawns. Kreatures feature bear cubs, lion cubs and wolf pups. The different species can be crossbred so you can pass, for example, a tiger striped coat from a lion onto a bear or a wolf. Kreatures will require food to breed, just like The Fennux. Kreatures can be attached to various attachment points to enable holdable pets, running pets, rideable pets and more!&lt;br /&gt;
&lt;br /&gt;
Visit the [http://slurl.com/secondlife/Kreatures/ Official Kreatures Sim].&lt;br /&gt;
&lt;br /&gt;
[[File:Kreatures-Limited-Editions.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Meeroos ==&lt;br /&gt;
&lt;br /&gt;
[http://www.worldofmeeroos.com/ Meeroos] are a fantasy animal somewhat resembling a meerkat, with an elaborate backstory of their mythological origins. The first chapter of the story introduced the ground-based diurnal Meeroos, the second chapter introduces nocturnal Meeroos who emerged from caverns. &lt;br /&gt;
&lt;br /&gt;
== Mossms ==&lt;br /&gt;
&lt;br /&gt;
[[File:Mossm.jpg|text-top|frame|200px]]&lt;br /&gt;
&lt;br /&gt;
[http://mossms.com/ Mossms] are fun and zany space creatures that have come to our world to gather certain resources that appear to be in short supply or no longer exist in their space communities. &lt;br /&gt;
&lt;br /&gt;
In order to mate, Mossms must return to space. Of course, space travel and the courting ritual both require resources. In other words, your Mossms will need to work for a living into a [http://www.infosafe.fr security safe]!&lt;br /&gt;
&lt;br /&gt;
Mossms are incredibly interactive. Mossms know when an avatar is near and will respond to the avatar&#039;s presence. In addition, Mossms interact with other Mossms as well as their surroundings.&lt;br /&gt;
&lt;br /&gt;
Mossms have a complex DNA system. Each newly born Mossm possesses genetics from its earliest ancestors. In addition, space exploration can cause genetic anomalies. The end result is an extensive array of possible breeds just waiting to be discovered.&lt;br /&gt;
&lt;br /&gt;
Mossms are new to SL, arriving on scene in mid 2013 and are the first breedable to make use of several new SL technologies including: mesh, static pathfinding, keyframe movement and ray cast.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== oYo Breedables ==&lt;br /&gt;
&lt;br /&gt;
oYo started in 2014 to bring their breedables to SL from InWorldz. &lt;br /&gt;
&lt;br /&gt;
Main shop: http://maps.secondlife.com/secondlife/Majestic%20Paradise/154/129/23&lt;br /&gt;
Web Page: http://oyobreedables.org/&lt;br /&gt;
&lt;br /&gt;
They are offerering 3 types of breeds at the moment:&lt;br /&gt;
&lt;br /&gt;
====Dodos====&lt;br /&gt;
&lt;br /&gt;
[http://oyobreedables.org/index.php/dodo The dodos] were the first breed oYo offered. You can attach them for riding if they are grown up or sit on them.&lt;br /&gt;
&lt;br /&gt;
====Fuzzy Buzzies====&lt;br /&gt;
&lt;br /&gt;
[http://oyobreedables.org/index.php/fuzzy These little pets] look like a mix of gremlins and teddy bears. They are sweet and love to play and eat sweets. A set of toys is available for them to play and collect happiness poynts to get more toys.&lt;br /&gt;
&lt;br /&gt;
====Pigs====&lt;br /&gt;
&lt;br /&gt;
[http://oyobreedables.org/index.php/pig Pigs] complete the list of breeds. Female pigs send out a free food after 30 days.&lt;br /&gt;
&lt;br /&gt;
== Ozimals ==&lt;br /&gt;
&lt;br /&gt;
====Bunnies====&lt;br /&gt;
Ozimals&#039; flagship Bunny product was officially released on Jan 9 2010. The product was the first successful breedable product to rely upon real genetic principles as part of its gameplay.&lt;br /&gt;
&lt;br /&gt;
====Pufflings====&lt;br /&gt;
Pufflings are small stylized birds which can be raised and bred for rare traits using similar genetic breeding principles as the other Ozimals product, bunnies. &lt;br /&gt;
&lt;br /&gt;
== Papillon Breedables ==&lt;br /&gt;
&lt;br /&gt;
[http://papillon.wikidot.com Papillons] are a collection of breedable butterflies, dragonflies, fireflies and plants. All the various insects and plants interact, along with accessories, to create an interdependent ecosystem. There is also an optional Adventure Game that can be played with the flutters.&lt;br /&gt;
&lt;br /&gt;
==Pet Peddlers==&lt;br /&gt;
&lt;br /&gt;
[http://petpeddlersl.com/ Pet Peddlers] was released in Dec. 2010 as the first shape changing breedable{{Fact}}. All of Pet Peddles fish and seahorses (released Spring 2013) look like the real life version of that species. Pet Peddlers uses a unique predator system that allows you to load a food bowl and feed your predators with unwanted or breed out fish and seahorses. At present there are over 150 current fish breeds and 26 current seahorses. Pet Peddlers also has fishing game in beta now that will be released in the near future.&lt;br /&gt;
&lt;br /&gt;
== Stray Cats Breedable ==&lt;br /&gt;
&lt;br /&gt;
[http://slstraycats.com/ Stray Cats] are breedable cats in Second Life. They come in many shapes, features, breeds and colors, including a fantasy line of &#039;cats&#039;. Animations include pathfinding. Once they are finished with their breedings, they automatically become permanent pets and do not require feedings anymore.  They are safe to keep in inventory too at any time.  They never die.&lt;br /&gt;
&lt;br /&gt;
Visit our home sim sometime and learn more: http://maps.secondlife.com/secondlife/Bast/180/40/3500&lt;br /&gt;
&lt;br /&gt;
== Teulu Breedables ==&lt;br /&gt;
&lt;br /&gt;
[[File:Teulu Breedables Logo.jpg|thumb|alt=breedables second life|[https://portal7.teulubreedables.com] Visit us at the [http://maps.secondlife.com/secondlife/Urban%20Paradise/75/70/27 Official Teulu Breedables Sim]are The First Animesh Breedables in Second Life. (Furbs, Teulu Horses and Teulu Dogs are available on the Second Life Grid Currently with many more to come.)]]&lt;br /&gt;
&lt;br /&gt;
[https://portal7.teulubreedables.com] are the first{{Citation needed|reason=Source for statement required.|date=March 2024}} Animesh Breedable on second life grid. Furbs was first released in March 2020 followed by Teulu Horses in November 2022 then followed by Teulu Dogs in April 2023. Teulu Breedables can be attached to the avatar center and be worn, or are rideable.&lt;br /&gt;
&lt;br /&gt;
Visit the [http://maps.secondlife.com/secondlife/Urban%20Paradise/75/70/27 Official Teulu Breedables Sim].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ludens powered by Teulu Breedables===&lt;br /&gt;
&lt;br /&gt;
[[File:Ludens powered by Teulu Breedables 512.jpg|thumb|alt=breedables second life|https://ludens.world/] Visit us at the [http://maps.secondlife.com/secondlife/Urban%20Paradise/208/213/27 Official Ludens powered by Teulu Breedables Main Sim]are Ludens first landed on the grid for Beta June 26th 2023 sale to the public on September 28th, 2023 owned by Mystia (mystery.doge). Change of Ownership happened on March 15, 2024, to Siâи ĐaяΚƑµƦץ тєµℓµ (welshgoddess) to add to her Teulu Breedables business. (Furbs, Teulu Horses, and Teulu Dogs &amp;amp; JingJings (not Animesh) the first Animesh breedable on Second Life Grid Currently with many more to come.)]]&lt;br /&gt;
&lt;br /&gt;
[https://ludens.world/] is an Animesh Breedable on the second life grid. Ludens first landed on the grid for Beta June 26th 2023 sale to the public on September 28th, 2023 owned by Mystia (mystery.doge). Change of Ownership happened on March 15, 2024, to Siâи ĐaяΚƑµƦץ тєµℓµ (welshgoddess) to add to her Teulu Breedables business. (Furbs, Teulu Horses, and Teulu Dogs &amp;amp; JingJings (not Animesh) the first Animesh breedable on Second Life Grid Currently with many more to come.)&lt;br /&gt;
Visit the [http://maps.secondlife.com/secondlife/Urban%20Paradise/208/213/27 Official Teulu Breedables Sim].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Unique Breedables ==&lt;br /&gt;
&lt;br /&gt;
[[File:Unique_breedables.jpg|thumb|]]&lt;br /&gt;
&lt;br /&gt;
[http://www.ub-monkeys.de Unique Breedables] is a company dedicated to creating breedables that are fun and unique, with a fresh approach to how breeding in Second Life works. They listen to their customers and staff and welcome input on how they can improve the overall experience of breeding animals. Their goal is to innovate and improve upon the breeding and the community in order to foster a more enjoyable environment for anyone to join.&lt;br /&gt;
So if you are a breeding pro, or a new breeder just looking to get into the game, they have what you need.&lt;br /&gt;
&lt;br /&gt;
= External Articles &amp;amp; Sites =&lt;br /&gt;
&lt;br /&gt;
Lawsuits between Ozimals and Amaretto have been in progress since 2010. Wikipedia has an article on [http://en.wikipedia.org/wiki/Amaretto_Ranch_Breedables,_LLC_v._Ozimals,_Inc. Amaretto Ranch Breedables, LLC v. Ozimals, Inc.]&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:Resident&amp;diff=1217699</id>
		<title>Talk:Resident</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:Resident&amp;diff=1217699"/>
		<updated>2024-11-30T15:01:45Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Fun after-the-fact fact ==&lt;br /&gt;
&lt;br /&gt;
One thing I just realised today was that &#039;resident&#039; includes the sound &#039;rez&#039; in it.&lt;br /&gt;
&lt;br /&gt;
In other words: &#039;resident&#039; is &#039;&#039;someone who &#039;[[:Category:LSL_Rez|rezzes]]&#039; objects in-world&#039;&#039; (or whose avatar gets rezzed in-world, which is also common jargon in SL).&lt;br /&gt;
&lt;br /&gt;
This is purely coincidental, of course, but nevertheless fun — especially 20 years after the designation was created!&lt;br /&gt;
&lt;br /&gt;
Technically speaking, with an American English twist, we ought to be called &#039;re&#039;&#039;&#039;zz&#039;&#039;&#039;idents&#039; (two &#039;zz&#039; to make the analogy more obvious), which, of course, is a homophone of &#039;resident&#039;.&lt;br /&gt;
&lt;br /&gt;
— [[User:Gwyneth Llewelyn|Gwyneth Llewelyn]] ([[User talk:Gwyneth Llewelyn|talk]]) 06:48, 30 November 2024 (PST)&lt;br /&gt;
&lt;br /&gt;
: 😲&lt;br /&gt;
&lt;br /&gt;
: --[[User:Peter Stindberg|Peter Stindberg]] ([[User talk:Peter Stindberg|talk]]) 07:01, 30 November 2024 (PST)&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Breedables_Guide_For_Second_Life&amp;diff=1217685</id>
		<title>Breedables Guide For Second Life</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Breedables_Guide_For_Second_Life&amp;diff=1217685"/>
		<updated>2024-11-26T08:10:58Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: /* DFS - Digital Farm System */ The wiki is neither a brochure nor a SEO text. Aged 8 years it is not really &amp;quot;new&amp;quot; anymore either. Removed the hyperbole, and stripped it to info only.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{help|Misc=*}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; This is a wiki. Everyone can add to it. The information below comes from volunteers as well as developers and enthusiasts of a specific system. The information provided should best be regarded as advertisement and is &#039;&#039;&#039;not&#039;&#039;&#039; routinely fact-checked. Fact-checks happen more or less randomly and are done by volunteers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Breedable Animals Guide For Second Life =&lt;br /&gt;
&lt;br /&gt;
One of the most popular{{Citation needed|reason=Source needed for this statement.|date=March 2024}} pastimes in Second Life is the caring for, feeding and breeding of virtual animals in Second Life. Over the years these animals have developed and a whole community of breeders and traders has emerged. Some players become so good at breeding animals that they are able to earn linden dollar profits from the buying and selling of them.&lt;br /&gt;
&lt;br /&gt;
= Breedables List =&lt;br /&gt;
&lt;br /&gt;
== ADS Company == &lt;br /&gt;
&lt;br /&gt;
====Snuffles====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Snuffles_site_promo.png|thumb|alt=breedable animal second life|[http://www.goldtokens.net/index.php?title=Snuffles Snuffles] is an example of another breedable animal in Second Life.]]&lt;br /&gt;
&lt;br /&gt;
Most aptly described as squirrel type creatures, [http://www.snufflesbreedables.com Snuffles] are a breedable animal in Second Life with a thriving secondary market for the breeding and trading of Snuffle Burrows.&lt;br /&gt;
&lt;br /&gt;
====Shubbies====&lt;br /&gt;
&lt;br /&gt;
[http://www.goldtokens.net/index.php?title=Shubbies Shubbies] are a breedable pet that act as companions in the [http://www.goldtokens.net/index.php?title=Fish_Hunt Fish Hunt]&lt;br /&gt;
&lt;br /&gt;
== AEON PETS ==&lt;br /&gt;
&lt;br /&gt;
offer a variety of breedable pets for all ages.&lt;br /&gt;
Happy Hamster,&lt;br /&gt;
Happy Elephants,&lt;br /&gt;
Exotics,&lt;br /&gt;
E-Cats,&lt;br /&gt;
Silly Ghost,&lt;br /&gt;
Amazing Spiders,&lt;br /&gt;
Patchworx,&lt;br /&gt;
Crazy Eggs,&lt;br /&gt;
Silly Mice,&lt;br /&gt;
Pengi,&lt;br /&gt;
and much more.&lt;br /&gt;
&lt;br /&gt;
Visit the [http://maps.secondlife.com/secondlife/Fama/42/79/1001 AEON Pets Mainstore]&lt;br /&gt;
&lt;br /&gt;
== Amaretto Breedables== &lt;br /&gt;
[[File:AmarettoLogo.jpg|300px|right]]&lt;br /&gt;
====Amaretto Horses====&lt;br /&gt;
Amaretto Ranch Breedables released Amaretto Breedable Horses in Second Life in September of 2010 and very quickly became a leader in the breedables industry.  Amaretto Breedable Horses are an interactive breedable that you can pet, ride, race and breed based on genetics.  Amaretto Breedable Horses have a large secondary market for breeding, studding, racing, selling, trading and much more.  The Amaretto Horses Main Store is located here&lt;br /&gt;
&lt;br /&gt;
[http://maps.secondlife.com/secondlife/Horses%20and%20Ponie%20Pals/247/32/21 Horse Main Store]&lt;br /&gt;
&lt;br /&gt;
====Amaretto K-9s====&lt;br /&gt;
Amaretto Ranch Breedables released its 2nd breedable, Amaretto Breedable K-9s in Second Life in August of 2011.  Amaretto Breedable K-9s are an interactive breedable that you can walk, play with and breed based on genetics.  Amaretto Breedable K-9s also have a secondary market for breeding, studding, selling and trading. &lt;br /&gt;
The Amaretto K-9s Main Store is located here.&lt;br /&gt;
&lt;br /&gt;
[http://maps.secondlife.com/secondlife/K9s%20and%20Birds/16/19/23 K-9 Main Store]&lt;br /&gt;
&lt;br /&gt;
====Amaretto Barnyard Birds====&lt;br /&gt;
Amaretto Ranch Breedables released its 3rd breedable, Amaretto Barnyard Birds in Second Life in May of 2012.  Amaretto Barnyard Birds are an interactive breedable that you can hold and breed based on genetics.  Amaretto Barnyard Birds have a secondary market for breeding, studding, selling and trading. &lt;br /&gt;
The Amaretto Barnyard Bird Store is located here. &lt;br /&gt;
[http://maps.secondlife.com/secondlife/K9s%20and%20Birds/16/19/23  Amaretto Ranch Breedables Barnyard Bird Main Store]&lt;br /&gt;
[http://amarettobreedables.com/ Amaretto Ranch Breedables Main Website]&lt;br /&gt;
&lt;br /&gt;
== BattleBeast Breedables ==&lt;br /&gt;
* Website: [http://www.battlebeastbreedables.com]&lt;br /&gt;
&lt;br /&gt;
==== BattleBeast Dragons ====&lt;br /&gt;
&lt;br /&gt;
BattleBeast Breedables Dragons were released in Spring of 2012, as the first breedable in Second Life where battle (aka combat) can affect the dragons&#039; genetic offspring. BattleBeast Breedables dragons have enjoyed a wide following in Second Life with people who like to breed, collect, fly, ride, and Role-Play (RP) with them.&lt;br /&gt;
* Dragons Main Store: [http://maps.secondlife.com/secondlife/Dragons/226/167/23]&lt;br /&gt;
&lt;br /&gt;
==== BattleBeast Kitsune ====&lt;br /&gt;
&lt;br /&gt;
BattleBeast Breedables Kitsune are a new project from BattleBeast Breedables, which was released in Spring of 2017, bringing the mythical and magical Japanese fox (&amp;quot;kitsune&amp;quot;) to Second Life. In their many-tailed forms, and steeped in mythos, lore and legend, the Kitsune can be your guides in Questing to earn Wisdom and other rewards throughout SL.&lt;br /&gt;
* Kitsune Main Store: [http://maps.secondlife.com/secondlife/Dragons/26/65/37]&lt;br /&gt;
&lt;br /&gt;
== BioBreeds ==&lt;br /&gt;
[[File:BioBreeds_Logo.jpg|300px|right]]&lt;br /&gt;
* Website: [http://BioBreeds.com]&lt;br /&gt;
* BioBreeds Main Store: [http://maps.secondlife.com/secondlife/BioBreeds/75/179/32]&lt;br /&gt;
&lt;br /&gt;
==== BioBreeds Dogs ====&lt;br /&gt;
&lt;br /&gt;
BioBreeds Dogs are realistically created breedable dogs in Second Life. BioBreeds launched in February of 2011 and prides itself on being a leader in innovation in the breedable community. The dogs respond to commands, breed, hunt and interact with BioBreeds horses. The Biobreeds genetic system mirrors real life. BioBreeds also provides a system for the owners to create unique attachments. BioBreeds users have built a strong secondary market, selling not only their dogs with unique traits, but also attachments, snacks, pets and other dog related items. You can view the existing traits on the website:  [http://biobreeds.com/Traitopia.aspx]&lt;br /&gt;
&lt;br /&gt;
==== BioBreeds Pal Ponies ====&lt;br /&gt;
&lt;br /&gt;
BioBreeds Ponies were released in November of 2011. BioBreeds Ponies are a realistic looking ridable pony that follows commands, breeds and interacts with its owners and BioBreeds Dogs. Like the BioBreeds Dogs, an owner can create their own unique attachments.  Its genetic system, and the rare traits that it produces, has spawned a strong secondary market for its breeders. You can view the existing traits on the website:  [http://www.biobreeds.com/Traitopia.aspx?breed=Pony]&lt;br /&gt;
&lt;br /&gt;
==== BioBreeds Exotics ====&lt;br /&gt;
&lt;br /&gt;
BioBreeds Exotics introduced fantasy into the BioBreeds line of breedables. The ridable Exotics follow commands, breed, interact with their owners and also with Biobreeds Dogs. Like the BioBreeds Dogs, an owner can create their own unique attachments. Using the same genetic system as the BioBreeds Ponies, an owner can choose to crossbreed the Exotics with BioBreeds Ponies, infusing the Ponies traits into the genetic system of the Exotics, and vice versa. You can view the existing traits on the website:  [http://biobreeds.com/Traitopia.aspx?breed=Exotic]&lt;br /&gt;
&lt;br /&gt;
==== BioBreeds Wild Ones ====&lt;br /&gt;
&lt;br /&gt;
BioBreeds continued its expansion of available types of animals in February 2014 releasing &amp;quot;Wild Ones.&amp;quot;  The Wild Ones are realistic versions of a wolf, fox, coyote and tiger. Like the BioBreeds Dogs, an owner can create their own unique attachments. The Wild Ones also have unique and applicable animations, poses and user commands. As with other BioBreeds products, they can be bred for specific traits. You can view the existing known traits here: [http://biobreeds.com/Traitopia.aspx?breed=Wolf]&lt;br /&gt;
&lt;br /&gt;
== Buildables (Robots)==&lt;br /&gt;
&lt;br /&gt;
[http://mybuildables.com/ Buildables]Those of you that have taken part in the old form of breedables, will LOVE what the Buildables system is capable of!  This is the ONLY system on SL that has the ability to &amp;quot;breed&amp;quot;(build) DIFFERENT styles of &amp;quot;Buildables&amp;quot; (bots) with over 50 types of bots and too many variants to count!  At the time of this posting there are almost 600 kinds of bots!  And with the HIGH QUALITY designs and amazing textures that make the bots come to life, there is a bot for ANY genre!&lt;br /&gt;
&lt;br /&gt;
Another very attractive point is their AFFORDABILITY.  This is one of the most affordable breedable to maintain.  Unlike other breedables that require food to keep them alive, if you get the unlimited power and unlimited oil (1000L each, so 2000L investment) that&#039;s all you need to fuel/&amp;quot;feed&amp;quot; your bots.  A small investment that fuels/feeds your all your bots.  You can have 1 or a million bots and if you get the unlimited power and oil it will feed/fuel all your bots FOREVER.  After that the only other expenses you will incur are the building pods (the mega pod is 499L for up to 25 builds) for the bots to build new bots and crates (25 crates for 100L) to crate up rezzed bots.&lt;br /&gt;
&lt;br /&gt;
[https://buildablesblog.wordpress.com/ Buildables Blog]&lt;br /&gt;
&lt;br /&gt;
Official Buildables Vendor [http://maps.secondlife.com/secondlife/Light%20Heaven/196/16/23 here].&lt;br /&gt;
&lt;br /&gt;
== [[DFS - Digital Farm System]] ==&lt;br /&gt;
&lt;br /&gt;
[[File:DFS Logo -With Bevel.png|thumb|alt=breedables second life|[https://www.digitalfarmsystem.com]  [http://maps.secondlife.com/secondlife/DFS/126/149/24 Official Digital Farming System (DFS) Sim]]]&lt;br /&gt;
&lt;br /&gt;
[https://www.digitalfarmsystem.com] Digital Farm System (DFS), established October 3rd, 2016, is a farming simulation system, which allows players to experience the depths of farming life by planning their farming goals, breeding different types of farm animals, and grow their own crops, plants and trees.  The DFS community uses the system in various ways to further enhance their (SL) experiences.&lt;br /&gt;
&lt;br /&gt;
Many DFS users conduct trades with other farmers and users in marketplaces and roles playing structures. This further supports the role-playing experience and their individual or group goals for DFS. DFS creators offer a wide range of content, from Mayan farmers to post-apocalyptic earth.&lt;br /&gt;
&lt;br /&gt;
DFS has resizable equipment to fit avatars of any sizes. Several of the equipment is sold in regular and tiny size, which is intended for [[ToddleeDoos]], but can also be used to accommodate smaller space or multiple equipment needs.&lt;br /&gt;
&lt;br /&gt;
The system is constantly being developed and promises timely updates and fix system issues quickly to guarantee everything runs smoothly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your avatar must be at least 30 days old to use the Digital Farm System and to visit the DFS Main store.&lt;br /&gt;
&lt;br /&gt;
Visit the [http://maps.secondlife.com/secondlife/DFS/126/149/24 Official Digital Farming System (DFS) Sim].&lt;br /&gt;
&lt;br /&gt;
== EVO Breeding Co ==&lt;br /&gt;
&lt;br /&gt;
[http://Evosl.com EVO Portal]&lt;br /&gt;
Come check EVO Breeding CO at our mainstore SIM Remood United - http://maps.secondlife.com/secondlife/REMOOD%20UNITED/92/226/25&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===GOFishin===&lt;br /&gt;
&lt;br /&gt;
Fishing system, with contests and different rarities of fishes and other prizes. You can also win breedable fishes.&lt;br /&gt;
&lt;br /&gt;
===GoFishin Breedables=== &lt;br /&gt;
&lt;br /&gt;
Some of the fishes you catch on GoFishin game, can be bred to get other fishes.&lt;br /&gt;
&lt;br /&gt;
===Fairies===&lt;br /&gt;
&lt;br /&gt;
Fairies are one of our most know pet, they have pretty buildings, they fly and feed, give prizes, and lay eggs to give you new faes. At the moment we have around 500 different faes, and we are in a constant production of new ones.&lt;br /&gt;
&lt;br /&gt;
===Arborea===&lt;br /&gt;
&lt;br /&gt;
Arborea is for all the botanics of second life. You drop the seed on the vase, you water them and wait for them to bloom and polynise each other.&lt;br /&gt;
&lt;br /&gt;
===Shoals===&lt;br /&gt;
&lt;br /&gt;
Shoals came as an addition to the &amp;quot;sea&amp;quot; department of pets. They have their own clam lab which you can have in your living room filled with water, or you can empty it and have it on the water. They grow and reproduce, but sometimes they are closed and you will need to play, and open them in order to get prizes.&lt;br /&gt;
&lt;br /&gt;
===Hammies===&lt;br /&gt;
&lt;br /&gt;
Hammies are cute little rodents, they were updated to a mesh shape, and rescripted recently (April 2016) they hop around their stump, eating their petmix. There&#039;s different colour coats, ears, eyes and tails. &lt;br /&gt;
&lt;br /&gt;
===Yukas===&lt;br /&gt;
&lt;br /&gt;
Yukas are our most recent project, they are not yet out, but will be pretty soon. Yukas are little mamoths which you&#039;ll have the opurtunity to unfroze and care for. They will be super fun. Keep tuned.&lt;br /&gt;
&lt;br /&gt;
== Fawns ==&lt;br /&gt;
&lt;br /&gt;
[http://www.fawns.org/ Fawns Breedables] feature dueling, racing, hand-painted unique coats and so much more. You can walk around with your Fawns, hold them in your arms, at your side, etc. &lt;br /&gt;
&lt;br /&gt;
Online market for Fawns: [http://www.fawns.org/market Fawns Market].&lt;br /&gt;
&lt;br /&gt;
Visit the [http://maps.secondlife.com/secondlife/PayHUD/150/134/23 Fawns Official SLURL].&lt;br /&gt;
&lt;br /&gt;
[[File:Fennux-and-Fawns.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Fennux ==&lt;br /&gt;
&lt;br /&gt;
The [http://www.fennux.com/ Fennux] are breedable pets that feature dueling, crafting of adapted Fennux with rare coats, community events and more. You can walk your Fennux, wear them on your shoulder, carry them around, feed them, breed them, and even duel your friends (or enemies). Come see The Fennux in-world by visiting the main sim location today!&lt;br /&gt;
&lt;br /&gt;
Online market for Fennux: [http://www.fennux.com/market Fennux Market].&lt;br /&gt;
&lt;br /&gt;
Visit the [http://maps.secondlife.com/secondlife/PayHUD/115/163/23 Fennux Official SLURL].&lt;br /&gt;
&lt;br /&gt;
== JingJings ==&lt;br /&gt;
&lt;br /&gt;
[[File:JINGJING Breedables powered by Teulu Breedables 512.jpg|thumb|alt=breedables second life|[http://jingjing.info] Visit us at the [http://maps.secondlife.com/secondlife/Urban%20Paradise/42/183/27 Official JingJing&#039;s powered by Teulu Breedables Main Sim]are JingJings first landed on the grid for sale to public on October 1st, 2012 owned by 亗ღ Twstd ღ亗™ (twstd.ruggles). Change of Ownership happened on September 24, 2023 to Siâи ĐaяΚƑµƦץ тєµℓµ (welshgoddess) to add to her Teulu Breedables business. (Furbs, Teulu Horses, and Teulu Dogs are the first Animesh breedable on Second Life Grid Currently with many more to come.)]]&lt;br /&gt;
&lt;br /&gt;
[http://jingjing.info] First landed on Second Life Grid on October 1st, 2012 owned by 亗ღ Twstd ღ亗™ (twstd.ruggles) who now sold the company to Siâи ĐaяΚƑµƦץ тєµℓµ (welshgoddess) who owns Teulu Breedables. First animesh breedables on grid in March 2020 followed by Teulu Horses in November 2022 then our latest Teulu Dogs in April 2023. Teulu Breedables can be attached to avatar center to be worn on avatar as a pets or to ride them!&lt;br /&gt;
&lt;br /&gt;
Visit the [http://maps.secondlife.com/secondlife/Urban%20Paradise/42/183/27].&lt;br /&gt;
&lt;br /&gt;
== KittyCatS ==&lt;br /&gt;
&lt;br /&gt;
[[File:Square_kitty.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
[https://www.kittycats.ws/forum/ KittyCatS] are highly interactive cats that can be petted, cuddled and held. Owners and non-owners alike can interact with the adorable cats. KittyCatS are the first{{fact}} to take breeding OUTSIDE of SL with their [https://kittycats.ws/online/ KittyCatS Cattery]. The Cattery is is a section of their website thus making breeding available to internet browsing devices, such as iPads.&lt;br /&gt;
&lt;br /&gt;
KittyCatS won the Avi Choice Award 2012 for Favorite Breedable in Second Life. &lt;br /&gt;
&lt;br /&gt;
== Krafties ==&lt;br /&gt;
&lt;br /&gt;
[http://krafties.com Krafties] are fantasy based creatures with an interesting backstory. They are the center of a free, in depth MMORPG type game in which the players can battle creatures and other players, catch new creatures and then combine them with many varieties of elemental souls, craft and enchant powerful items, and much much more. There are many species of creatures to choose from, all with different strengths and weaknesses. Visit the Krafties Island to start the journey for free.&lt;br /&gt;
&lt;br /&gt;
[[File:Krafties-Screenshot2.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Kreatures ==&lt;br /&gt;
&lt;br /&gt;
[[File:Kreatures_Breedable_Pets_498x444.jpg|thumb|alt=breedables second life|[http://www.kreatures.net/ Kreatures] are one of many varieties of breedable pets in Second life. (Fennux and Fawns are also featured in this image.)]]&lt;br /&gt;
&lt;br /&gt;
[http://www.kreatures.net/ Kreatures] is a breedable pet game that officially launched April 2022. The creators of this also produced The Fennux and Fawns. Kreatures feature bear cubs, lion cubs and wolf pups. The different species can be crossbred so you can pass, for example, a tiger striped coat from a lion onto a bear or a wolf. Kreatures will require food to breed, just like The Fennux. Kreatures can be attached to various attachment points to enable holdable pets, running pets, rideable pets and more!&lt;br /&gt;
&lt;br /&gt;
Visit the [http://slurl.com/secondlife/Kreatures/ Official Kreatures Sim].&lt;br /&gt;
&lt;br /&gt;
[[File:Kreatures-Limited-Editions.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Meeroos ==&lt;br /&gt;
&lt;br /&gt;
[http://www.worldofmeeroos.com/ Meeroos] are a fantasy animal somewhat resembling a meerkat, with an elaborate backstory of their mythological origins. The first chapter of the story introduced the ground-based diurnal Meeroos, the second chapter introduces nocturnal Meeroos who emerged from caverns. &lt;br /&gt;
&lt;br /&gt;
== Mossms ==&lt;br /&gt;
&lt;br /&gt;
[[File:Mossm.jpg|text-top|frame|200px]]&lt;br /&gt;
&lt;br /&gt;
[http://mossms.com/ Mossms] are fun and zany space creatures that have come to our world to gather certain resources that appear to be in short supply or no longer exist in their space communities. &lt;br /&gt;
&lt;br /&gt;
In order to mate, Mossms must return to space. Of course, space travel and the courting ritual both require resources. In other words, your Mossms will need to work for a living into a [http://www.infosafe.fr security safe]!&lt;br /&gt;
&lt;br /&gt;
Mossms are incredibly interactive. Mossms know when an avatar is near and will respond to the avatar&#039;s presence. In addition, Mossms interact with other Mossms as well as their surroundings.&lt;br /&gt;
&lt;br /&gt;
Mossms have a complex DNA system. Each newly born Mossm possesses genetics from its earliest ancestors. In addition, space exploration can cause genetic anomalies. The end result is an extensive array of possible breeds just waiting to be discovered.&lt;br /&gt;
&lt;br /&gt;
Mossms are new to SL, arriving on scene in mid 2013 and are the first breedable to make use of several new SL technologies including: mesh, static pathfinding, keyframe movement and ray cast.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== oYo Breedables ==&lt;br /&gt;
&lt;br /&gt;
oYo started in 2014 to bring their breedables to SL from InWorldz. &lt;br /&gt;
&lt;br /&gt;
Main shop: http://maps.secondlife.com/secondlife/Majestic%20Paradise/154/129/23&lt;br /&gt;
Web Page: http://oyobreedables.org/&lt;br /&gt;
&lt;br /&gt;
They are offerering 3 types of breeds at the moment:&lt;br /&gt;
&lt;br /&gt;
====Dodos====&lt;br /&gt;
&lt;br /&gt;
[http://oyobreedables.org/index.php/dodo The dodos] were the first breed oYo offered. You can attach them for riding if they are grown up or sit on them.&lt;br /&gt;
&lt;br /&gt;
====Fuzzy Buzzies====&lt;br /&gt;
&lt;br /&gt;
[http://oyobreedables.org/index.php/fuzzy These little pets] look like a mix of gremlins and teddy bears. They are sweet and love to play and eat sweets. A set of toys is available for them to play and collect happiness poynts to get more toys.&lt;br /&gt;
&lt;br /&gt;
====Pigs====&lt;br /&gt;
&lt;br /&gt;
[http://oyobreedables.org/index.php/pig Pigs] complete the list of breeds. Female pigs send out a free food after 30 days.&lt;br /&gt;
&lt;br /&gt;
== Ozimals ==&lt;br /&gt;
&lt;br /&gt;
====Bunnies====&lt;br /&gt;
Ozimals&#039; flagship Bunny product was officially released on Jan 9 2010. The product was the first successful breedable product to rely upon real genetic principles as part of its gameplay.&lt;br /&gt;
&lt;br /&gt;
====Pufflings====&lt;br /&gt;
Pufflings are small stylized birds which can be raised and bred for rare traits using similar genetic breeding principles as the other Ozimals product, bunnies. &lt;br /&gt;
&lt;br /&gt;
== Papillon Breedables ==&lt;br /&gt;
&lt;br /&gt;
[http://papillon.wikidot.com Papillons] are a collection of breedable butterflies, dragonflies, fireflies and plants. All the various insects and plants interact, along with accessories, to create an interdependent ecosystem. There is also an optional Adventure Game that can be played with the flutters.&lt;br /&gt;
&lt;br /&gt;
==Pet Peddlers==&lt;br /&gt;
&lt;br /&gt;
[http://petpeddlersl.com/ Pet Peddlers] was released in Dec. 2010 as the first shape changing breedable{{Fact}}. All of Pet Peddles fish and seahorses (released Spring 2013) look like the real life version of that species. Pet Peddlers uses a unique predator system that allows you to load a food bowl and feed your predators with unwanted or breed out fish and seahorses. At present there are over 150 current fish breeds and 26 current seahorses. Pet Peddlers also has fishing game in beta now that will be released in the near future.&lt;br /&gt;
&lt;br /&gt;
== Stray Cats Breedable ==&lt;br /&gt;
&lt;br /&gt;
[http://slstraycats.com/ Stray Cats] are breedable cats in Second Life. They come in many shapes, features, breeds and colors, including a fantasy line of &#039;cats&#039;. Animations include pathfinding. Once they are finished with their breedings, they automatically become permanent pets and do not require feedings anymore.  They are safe to keep in inventory too at any time.  They never die.&lt;br /&gt;
&lt;br /&gt;
Visit our home sim sometime and learn more: http://maps.secondlife.com/secondlife/Bast/180/40/3500&lt;br /&gt;
&lt;br /&gt;
== Teulu Breedables ==&lt;br /&gt;
&lt;br /&gt;
[[File:Teulu Breedables Logo.jpg|thumb|alt=breedables second life|[https://portal7.teulubreedables.com] Visit us at the [http://maps.secondlife.com/secondlife/Urban%20Paradise/75/70/27 Official Teulu Breedables Sim]are The First Animesh Breedables in Second Life. (Furbs, Teulu Horses and Teulu Dogs are available on the Second Life Grid Currently with many more to come.)]]&lt;br /&gt;
&lt;br /&gt;
[https://portal7.teulubreedables.com] are the first{{Citation needed|reason=Source for statement required.|date=March 2024}} Animesh Breedable on second life grid. Furbs was first released in March 2020 followed by Teulu Horses in November 2022 then followed by Teulu Dogs in April 2023. Teulu Breedables can be attached to the avatar center and be worn, or are rideable.&lt;br /&gt;
&lt;br /&gt;
Visit the [http://maps.secondlife.com/secondlife/Urban%20Paradise/75/70/27 Official Teulu Breedables Sim].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ludens powered by Teulu Breedables===&lt;br /&gt;
&lt;br /&gt;
[[File:Ludens powered by Teulu Breedables 512.jpg|thumb|alt=breedables second life|https://ludens.world/] Visit us at the [http://maps.secondlife.com/secondlife/Urban%20Paradise/208/213/27 Official Ludens powered by Teulu Breedables Main Sim]are Ludens first landed on the grid for Beta June 26th 2023 sale to the public on September 28th, 2023 owned by Mystia (mystery.doge). Change of Ownership happened on March 15, 2024, to Siâи ĐaяΚƑµƦץ тєµℓµ (welshgoddess) to add to her Teulu Breedables business. (Furbs, Teulu Horses, and Teulu Dogs &amp;amp; JingJings (not Animesh) the first Animesh breedable on Second Life Grid Currently with many more to come.)]]&lt;br /&gt;
&lt;br /&gt;
[https://ludens.world/] is an Animesh Breedable on the second life grid. Ludens first landed on the grid for Beta June 26th 2023 sale to the public on September 28th, 2023 owned by Mystia (mystery.doge). Change of Ownership happened on March 15, 2024, to Siâи ĐaяΚƑµƦץ тєµℓµ (welshgoddess) to add to her Teulu Breedables business. (Furbs, Teulu Horses, and Teulu Dogs &amp;amp; JingJings (not Animesh) the first Animesh breedable on Second Life Grid Currently with many more to come.)&lt;br /&gt;
Visit the [http://maps.secondlife.com/secondlife/Urban%20Paradise/208/213/27 Official Teulu Breedables Sim].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Unique Breedables ==&lt;br /&gt;
&lt;br /&gt;
[[File:Unique_breedables.jpg|thumb|]]&lt;br /&gt;
&lt;br /&gt;
[http://www.ub-monkeys.de Unique Breedables] is a company dedicated to creating breedables that are fun and unique, with a fresh approach to how breeding in Second Life works. They listen to their customers and staff and welcome input on how they can improve the overall experience of breeding animals. Their goal is to innovate and improve upon the breeding and the community in order to foster a more enjoyable environment for anyone to join.&lt;br /&gt;
So if you are a breeding pro, or a new breeder just looking to get into the game, they have what you need.&lt;br /&gt;
&lt;br /&gt;
= External Articles &amp;amp; Sites =&lt;br /&gt;
&lt;br /&gt;
Lawsuits between Ozimals and Amaretto have been in progress since 2010. Wikipedia has an article on [http://en.wikipedia.org/wiki/Amaretto_Ranch_Breedables,_LLC_v._Ozimals,_Inc. Amaretto Ranch Breedables, LLC v. Ozimals, Inc.]&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User_talk:Soap_Frenzy&amp;diff=1217661</id>
		<title>User talk:Soap Frenzy</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User_talk:Soap_Frenzy&amp;diff=1217661"/>
		<updated>2024-11-19T18:49:20Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Created page with &amp;quot;Welcome to the wiki.  -- ~~~~&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the wiki.&lt;br /&gt;
&lt;br /&gt;
-- [[User:Peter Stindberg|Peter Stindberg]] ([[User talk:Peter Stindberg|talk]]) 10:49, 19 November 2024 (PST)&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlIsFriend&amp;diff=1217651</id>
		<title>LlIsFriend</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlIsFriend&amp;diff=1217651"/>
		<updated>2024-11-15T18:03:20Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Bugfix in 2024-11-12.11802108395&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Function&lt;br /&gt;
|inject-2={{LSL Function/uuid|uuid|sim=*}}&lt;br /&gt;
|func=llIsFriend&lt;br /&gt;
|sort=IsFriend&lt;br /&gt;
|func_id=0|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|return_type=integer&lt;br /&gt;
|return_subtype=boolean&lt;br /&gt;
|p1_type=key|p1_name=agent_id&lt;br /&gt;
|func_desc=&lt;br /&gt;
|return_text=that is [[TRUE]] if {{LSLP|agent_id}} and the owner of the [[prim]] the [[script]] is in are friends, otherwise [[FALSE]].&lt;br /&gt;
|func_footnote&lt;br /&gt;
|spec=&lt;br /&gt;
&lt;br /&gt;
* If the prim is owned by a group this function behaves identically to [[llSameGroup]]&lt;br /&gt;
* This function will return [[FALSE]] under the following edge cases:&lt;br /&gt;
** If neither the owner, nor the target agent are in the region.&lt;br /&gt;
** If the agent_id does not specify an agent.&lt;br /&gt;
&lt;br /&gt;
|caveats=&lt;br /&gt;
* You are not your own friend.&lt;br /&gt;
* &amp;lt;s&amp;gt;Currently a faulty result is given if the owner of the object the script resides in has moved to an adjacant region shortly before the query (see [https://feedback.secondlife.com/scripting-bugs/p/llisfriend-fails-if-owner-is-not-present-on-region llIsFriend fails if owner is not present on region] on Canny). First noticed on server version 2024-01-19.7590161929, last checked (and still not fixed) in server version 2024-09-13.10853867644.&amp;lt;/s&amp;gt; Fixed in server version 2024-11-12.11802108395.&lt;br /&gt;
&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;
        llSensorRepeat(&amp;quot;&amp;quot;, NULL_KEY, AGENT, 95, PI, 10);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    sensor(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;
            string is_is_not = &amp;quot; is NOT &amp;quot;;&lt;br /&gt;
            if (llIsFriend(llDetectedKey(index)))&lt;br /&gt;
            {&lt;br /&gt;
                is_is_not = &amp;quot; is &amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
            llSay(0, llDetectedName(index) + is_is_not + &amp;quot;a friend.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llDetectedGroup]]}}&lt;br /&gt;
{{LSL DefineRow||[[llSameGroup]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Avatar&lt;br /&gt;
|cat2=Group&lt;br /&gt;
|haiku&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User_talk:Coffee_Pancake&amp;diff=1217584</id>
		<title>User talk:Coffee Pancake</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User_talk:Coffee_Pancake&amp;diff=1217584"/>
		<updated>2024-11-04T19:26:05Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Created page with &amp;quot;Welcome!  --~~~~&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome!&lt;br /&gt;
&lt;br /&gt;
--[[User:Peter Stindberg|Peter Stindberg]] ([[User talk:Peter Stindberg|talk]]) 11:26, 4 November 2024 (PST)&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User_talk:Quinn_Elara&amp;diff=1217480</id>
		<title>User talk:Quinn Elara</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User_talk:Quinn_Elara&amp;diff=1217480"/>
		<updated>2024-10-08T04:41:13Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Created page with &amp;quot;Welcome! So the wiki does not allow for a name change? How peculiar.  -- ~~~~&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome! So the wiki does not allow for a name change? How peculiar.&lt;br /&gt;
&lt;br /&gt;
-- [[User:Peter Stindberg|Peter Stindberg]] ([[User talk:Peter Stindberg|talk]]) 21:41, 7 October 2024 (PDT)&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:LlSetRemoteScriptAccessPin&amp;diff=1217473</id>
		<title>Talk:LlSetRemoteScriptAccessPin</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:LlSetRemoteScriptAccessPin&amp;diff=1217473"/>
		<updated>2024-10-07T10:14:45Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: /* The PIN is a characteristic of the primitive, right? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The PIN is a characteristic of the primitive, right? ==&lt;br /&gt;
&lt;br /&gt;
I have a few questions —&lt;br /&gt;
&lt;br /&gt;
# The PIN is one of the many properties assigned to the prim where the script runs, is that correct? (like hover text set via [[llSetText]]) In other words, you can reset every script you wish inside the prim, or remove them, or give the prim away, restart the current region, whatever, so long as no script changes the PIN again (or sets it to zero), it will remain forever set to the original value?&lt;br /&gt;
## Yes, but it is instanced. It will not survive shift-drag, but will survive Take Copy, re-rezzing, transfer, etc. It appears to be the same rules as texture animations or particles as a prim property. &lt;br /&gt;
# When making a copy of a prim which had its PIN set (but assume that its inventory is now empty), the PIN persists?&lt;br /&gt;
##Taking a copy yes, shift-drag no.&lt;br /&gt;
# What if the original creator changes permissions and/or ownership (i.e., sells or transfers the original prim without retaining the right to copy it), will the PIN also persist? Again, I&#039;m not considering the many levels of checks required for [[LlRemoteLoadScriptPin]] to actually &#039;&#039;work&#039;&#039;, just what happens with the PIN in those edge cases.&lt;br /&gt;
##The use-case of this function is updating scripts externally, after transfer to another. While I don&#039;t have underlying knowledge of the pin in no-modify situations, I do know because product updaters exist and work, that the pin survives transfer to another.&lt;br /&gt;
# When another script does a [[LlRemoteLoadScriptPin]], will it affect scripts in child prims as well, or only those on the root prims?&lt;br /&gt;
##Pins are not inherited, a child prim needs its own pin set.&lt;br /&gt;
# What happens when two prims, each with their own PIN, are linked together? Will the PIN of the new root prim prevail, while the other prims will get their PINs reset? Or will each prim retain their individual PINs?&lt;br /&gt;
##Rearranging link orders has no effect on pins. Each link has its own settable pin. This includes when it becomes unlinked, and when it becomes the link/root of another linkset with different pins.&lt;br /&gt;
Well, there are more questions like these, and I have in mind several different scenarios, all of which have the same assumption: that the PIN is really a property of the prim, not something somehow written to the script&#039;s &amp;quot;memory&amp;quot; (or state, or whatever).&lt;br /&gt;
&lt;br /&gt;
I suppose that one might be able to save the PIN in the KVP store, these days, and thus provide a way to guarantee that a prim has persistent PIN storage. A script &#039;&#039;expecting&#039;&#039; the PIN to be set might be able to check first if the PIN is not zero, but, if it is, attempt to load it from a well-known key/value pair on the KVP store, and set it using [[LlSetRemoteScriptAccessPin]], if needed.&lt;br /&gt;
#It may be wiser to just set the pin after getting a handshake, must like a chat channel tends to be, if you fear the pin may have been reset. &lt;br /&gt;
— [[User:Gwyneth Llewelyn|Gwyneth Llewelyn]] ([[User talk:Gwyneth Llewelyn|talk]]) 23:38, 22 September 2024 (PDT)&lt;br /&gt;
&lt;br /&gt;
:Added responses after testing these myself. I do wish they&#039;d survive shift-drag, but for products I can avoid this by putting a no copy item in my copyable products so they cant shift-drag. -Paz&lt;br /&gt;
&lt;br /&gt;
::Interweaving your answers with Gwyneth&#039;s the way you did is considered bad practice in a wiki environment.&lt;br /&gt;
::-- [[User:Peter Stindberg|Peter Stindberg]] ([[User talk:Peter Stindberg|talk]]) 03:14, 7 October 2024 (PDT)&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:LlSetRemoteScriptAccessPin&amp;diff=1217472</id>
		<title>Talk:LlSetRemoteScriptAccessPin</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:LlSetRemoteScriptAccessPin&amp;diff=1217472"/>
		<updated>2024-10-07T10:14:10Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: /* The PIN is a characteristic of the primitive, right? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The PIN is a characteristic of the primitive, right? ==&lt;br /&gt;
&lt;br /&gt;
I have a few questions —&lt;br /&gt;
&lt;br /&gt;
# The PIN is one of the many properties assigned to the prim where the script runs, is that correct? (like hover text set via [[llSetText]]) In other words, you can reset every script you wish inside the prim, or remove them, or give the prim away, restart the current region, whatever, so long as no script changes the PIN again (or sets it to zero), it will remain forever set to the original value?&lt;br /&gt;
## Yes, but it is instanced. It will not survive shift-drag, but will survive Take Copy, re-rezzing, transfer, etc. It appears to be the same rules as texture animations or particles as a prim property. &lt;br /&gt;
# When making a copy of a prim which had its PIN set (but assume that its inventory is now empty), the PIN persists?&lt;br /&gt;
##Taking a copy yes, shift-drag no.&lt;br /&gt;
# What if the original creator changes permissions and/or ownership (i.e., sells or transfers the original prim without retaining the right to copy it), will the PIN also persist? Again, I&#039;m not considering the many levels of checks required for [[LlRemoteLoadScriptPin]] to actually &#039;&#039;work&#039;&#039;, just what happens with the PIN in those edge cases.&lt;br /&gt;
##The use-case of this function is updating scripts externally, after transfer to another. While I don&#039;t have underlying knowledge of the pin in no-modify situations, I do know because product updaters exist and work, that the pin survives transfer to another.&lt;br /&gt;
# When another script does a [[LlRemoteLoadScriptPin]], will it affect scripts in child prims as well, or only those on the root prims?&lt;br /&gt;
##Pins are not inherited, a child prim needs its own pin set.&lt;br /&gt;
# What happens when two prims, each with their own PIN, are linked together? Will the PIN of the new root prim prevail, while the other prims will get their PINs reset? Or will each prim retain their individual PINs?&lt;br /&gt;
##Rearranging link orders has no effect on pins. Each link has its own settable pin. This includes when it becomes unlinked, and when it becomes the link/root of another linkset with different pins.&lt;br /&gt;
Well, there are more questions like these, and I have in mind several different scenarios, all of which have the same assumption: that the PIN is really a property of the prim, not something somehow written to the script&#039;s &amp;quot;memory&amp;quot; (or state, or whatever).&lt;br /&gt;
&lt;br /&gt;
I suppose that one might be able to save the PIN in the KVP store, these days, and thus provide a way to guarantee that a prim has persistent PIN storage. A script &#039;&#039;expecting&#039;&#039; the PIN to be set might be able to check first if the PIN is not zero, but, if it is, attempt to load it from a well-known key/value pair on the KVP store, and set it using [[LlSetRemoteScriptAccessPin]], if needed.&lt;br /&gt;
#It may be wiser to just set the pin after getting a handshake, must like a chat channel tends to be, if you fear the pin may have been reset. &lt;br /&gt;
— [[User:Gwyneth Llewelyn|Gwyneth Llewelyn]] ([[User talk:Gwyneth Llewelyn|talk]]) 23:38, 22 September 2024 (PDT)&lt;br /&gt;
&lt;br /&gt;
Added responses after testing these myself. I do wish they&#039;d survive shift-drag, but for products I can avoid this by putting a no copy item in my copyable products so they cant shift-drag. -Paz&lt;br /&gt;
&lt;br /&gt;
:Interweaving your answers with Gwyneth&#039;s the way you did is considered bad practice in a wiki environment.&lt;br /&gt;
:-- [[User:Peter Stindberg|Peter Stindberg]] ([[User talk:Peter Stindberg|talk]]) 03:14, 7 October 2024 (PDT)&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSetRemoteScriptAccessPin&amp;diff=1217471</id>
		<title>LlSetRemoteScriptAccessPin</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSetRemoteScriptAccessPin&amp;diff=1217471"/>
		<updated>2024-10-07T10:12:23Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Added caveat about not being able to find out of a script pin has been set (aka as &amp;quot;The day I broke the CasperLet Updates of a customer&amp;quot;)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Function&lt;br /&gt;
|func_id=252|func_sleep=0.2|func_energy=10.0&lt;br /&gt;
|func=llSetRemoteScriptAccessPin&lt;br /&gt;
|p1_type=integer|p1_name=pin|p1_desc=zero disables (ie [[llRemoteLoadScriptPin]] will fail), non-zero enables.&lt;br /&gt;
|func_desc=Allows a prim to have scripts remotely loaded via [[llRemoteLoadScriptPin]] when it is passed the correct pin and the prim is set mod.&lt;br /&gt;
|func_footnote&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=*A prim has only one pin for remotely loading scripts.&lt;br /&gt;
**By changing the pin, a script can deny other scripts the ability to load scripts into the prim.&lt;br /&gt;
***This could result in unintentionally breaking a products ability to be updated by an upstream creator.&lt;br /&gt;
***This can be used to intentionally stop an upstream creator from updating a product.&lt;br /&gt;
***There is no way to find out wether a script pin has been set by another script in the prim. If the prim contains scripts from other developers, the safe approach is to assume a script pin has been set by an upstream creator.&lt;br /&gt;
|constants&lt;br /&gt;
|examples&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llRemoteLoadScriptPin]]|Used to load a script into a remote prim}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles&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>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlIsFriend&amp;diff=1217429</id>
		<title>LlIsFriend</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlIsFriend&amp;diff=1217429"/>
		<updated>2024-10-03T08:22:34Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Caveat about a bug in the function as confirmed by Maestro Linden in March&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Function&lt;br /&gt;
|inject-2={{LSL Function/uuid|uuid|sim=*}}&lt;br /&gt;
|func=llIsFriend&lt;br /&gt;
|sort=IsFriend&lt;br /&gt;
|func_id=0|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|return_type=integer&lt;br /&gt;
|return_subtype=boolean&lt;br /&gt;
|p1_type=key|p1_name=agent_id&lt;br /&gt;
|func_desc=&lt;br /&gt;
|return_text=that is [[TRUE]] if {{LSLP|agent_id}} and the owner of the [[prim]] the [[script]] is in are friends, otherwise [[FALSE]].&lt;br /&gt;
|func_footnote&lt;br /&gt;
|spec=&lt;br /&gt;
&lt;br /&gt;
* If the prim is owned by a group this function behaves identically to [[llSameGroup]]&lt;br /&gt;
* This function will return [[FALSE]] under the following edge cases:&lt;br /&gt;
** If neither the owner, nor the target agent are in the region.&lt;br /&gt;
** If the agent_id does not specify an agent.&lt;br /&gt;
&lt;br /&gt;
|caveats=&lt;br /&gt;
* You are not your own friend.&lt;br /&gt;
* Currently a faulty result is given if the owner of the object the script resides in has moved to an adjacant region shortly before the query (see [https://feedback.secondlife.com/scripting-bugs/p/llisfriend-fails-if-owner-is-not-present-on-region llIsFriend fails if owner is not present on region] on Canny). First noticed on server version 2024-01-19.7590161929, last checked (and still not fixed) in server version 2024-09-13.10853867644.&lt;br /&gt;
&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;
        llSensorRepeat(&amp;quot;&amp;quot;, NULL_KEY, AGENT, 95, PI, 10);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    sensor(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;
            string is_is_not = &amp;quot; is NOT &amp;quot;;&lt;br /&gt;
            if (llIsFriend(llDetectedKey(index)))&lt;br /&gt;
            {&lt;br /&gt;
                is_is_not = &amp;quot; is &amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
            llSay(0, llDetectedName(index) + is_is_not + &amp;quot;a friend.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llDetectedGroup]]}}&lt;br /&gt;
{{LSL DefineRow||[[llSameGroup]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Avatar&lt;br /&gt;
|cat2=Group&lt;br /&gt;
|haiku&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetAttached&amp;diff=1217275</id>
		<title>LlGetAttached</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetAttached&amp;diff=1217275"/>
		<updated>2024-09-11T21:15:19Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Replaced source with syntaxhighlight&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func_id=224|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llGetAttached|return_type=integer|return_subtype=attach_point&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc&lt;br /&gt;
|Return_text=the object is attached to or {{HoverText|zero|0}} if it is either not attached or is pending detachment.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|constants={{LSL_Constants_Attachment}}&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;default&lt;br /&gt;
{&lt;br /&gt;
    attach(key id)&lt;br /&gt;
    {&lt;br /&gt;
        if(id)//it&#039;s attached&lt;br /&gt;
        {&lt;br /&gt;
            if(llGetAttached() != ATTACH_LHAND)&lt;br /&gt;
            {&lt;br /&gt;
                llOwnerSay(&amp;quot;Please attach me only to the left hand&amp;quot;);&lt;br /&gt;
                llRequestPermissions(id, PERMISSION_ATTACH);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer a)&lt;br /&gt;
    {&lt;br /&gt;
        if(a &amp;amp; PERMISSION_ATTACH)&lt;br /&gt;
            llDetachFromAvatar();&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This snippet will make a prim invisible when attached, but visible when rezzed unattached&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
    on_rez(integer p)&lt;br /&gt;
    {&lt;br /&gt;
        // !llGetAttached() has the value 0 when attached, and 1 when unattached&lt;br /&gt;
        llSetAlpha( !llGetAttached(), ALL_SIDES);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llAttachToAvatar]]}}&lt;br /&gt;
{{LSL DefineRow||[[llDetachFromAvatar]]}}&lt;br /&gt;
{{LSL DefineRow||[[llGetAttachedList]]}}&lt;br /&gt;
{{LSL DefineRow||[[llGetObjectDetails]]|[[OBJECT_ATTACHED_POINT]]}}&lt;br /&gt;
|also_events={{LSL DefineRow||[[attach]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|permission&lt;br /&gt;
|negative_index&lt;br /&gt;
|cat1=Attachment&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Project_talk:About&amp;diff=1217229</id>
		<title>Project talk:About</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Project_talk:About&amp;diff=1217229"/>
		<updated>2024-09-07T18:45:06Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: /* How to: Get write access to the wiki */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I don&#039;t understand why there are so many wikis. What was wrong with the original one? Why did LL decide to completely scrap that one and start a new one so that all us scripters would have to scrounge through several sources for relevant data?{{unsigned|Nynthan Folsom|10:38, 26 May 2007}}&lt;br /&gt;
: {{reply to|Nynthan Folsom}} Now there is only one :-) — [[User:Gwyneth Llewelyn|Gwyneth Llewelyn]] ([[User talk:Gwyneth Llewelyn|talk]]) 08:56, 23 August 2022 (PDT) &lt;br /&gt;
&lt;br /&gt;
If this is like real life, why is there not a death area. I have had my heart ripped out by my boyfriend and i want my avatar to die and all of sl to get the article of the death. Why is there not a place for death. That way for people that do die there real life people can come here and let us know this has really happened to. Thank you[[User:Nini Danitz|Nini Danitz]] 19:24, 30 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== multi-lang ==&lt;br /&gt;
&lt;br /&gt;
Eu acho que falta colocar na página a predefinição ou o gabarito: &amp;lt;nowiki&amp;gt;{{multi-lang}}&amp;lt;/nowiki&amp;gt;. I think missing template &amp;lt;nowiki&amp;gt;{{multi-lang}}&amp;lt;/nowiki&amp;gt; on the page: --[[User:Gianinni_Babenco|Gianinni Babenco]]&amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Gianinni_Babenco|talk]]|[[Special:Contributions/Gianinni_Babenco|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 15:40, 2 September 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
I just started on SecondLife and i dont know how to get out of the place you are put when you get on for the first time evar. I would appreciate some help.{{Unsigned|NuttyHorseLuver Resident}}&lt;br /&gt;
&lt;br /&gt;
== How to: Get write access to the wiki ==&lt;br /&gt;
&lt;br /&gt;
Since the page is locked, this will need to suffice: If you want to contribute to the wiki, you need to [https://lindenlab.freshdesk.com/support/tickets/new file a ticket] and request write access.&lt;br /&gt;
&lt;br /&gt;
-- [[User:Peter Stindberg|Peter Stindberg]] ([[User talk:Peter Stindberg|talk]]) 14:56, 10 May 2024 (PDT)&lt;br /&gt;
&lt;br /&gt;
: Check here: https://wiki.secondlife.com/wiki/Project:Editing_Guidelines#How_can_I_contribute.3F&lt;br /&gt;
: -- [[User:Peter Stindberg|Peter Stindberg]] ([[User talk:Peter Stindberg|talk]]) 11:45, 7 September 2024 (PDT)&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LSL_Alternate_Editors&amp;diff=1217202</id>
		<title>LSL Alternate Editors</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LSL_Alternate_Editors&amp;diff=1217202"/>
		<updated>2024-08-29T19:55:01Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: /* Visual Studio Code */ added another LSL plugin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header|ml=*}}&lt;br /&gt;
&lt;br /&gt;
There are several off-world editors available for free or to purchase.  Some have syntax highlighting for LSL that will make your code easier to follow.  At least two will compile and execute a large subset of LSL. Below are some of the more popular editors for use with LSL.  &lt;br /&gt;
&lt;br /&gt;
If you have a favorite that is missing from the list, &#039;&#039;&#039;please&#039;&#039;&#039; feel free to add it.&lt;br /&gt;
&lt;br /&gt;
==Opening scripts in another editor directly from the viewer:==&lt;br /&gt;
&lt;br /&gt;
* Enable: Preferences &amp;gt; Advanced &amp;gt; Show [[Advanced_menu]].&lt;br /&gt;
* Go to: Advanced &amp;gt; Show [[Debug_Settings]].&lt;br /&gt;
* Edit: &amp;quot;ExternalEditor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
As the description tells you, enter 3 params:&lt;br /&gt;
* Path to editor (enclose in quotes, if path has spaces).&lt;br /&gt;
* Optional command line params (you can ignore these if you like).&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;quot;%s&amp;quot;&amp;lt;/code&amp;gt; will paste script path automatically (dont change this).&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* Linux (opens script in new window if already open): &amp;lt;code&amp;gt;/usr/bin/gedit --new-window &amp;quot;%s&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* Windows (path has spaces &amp;gt; enclosed in quotes): &amp;lt;code&amp;gt;&amp;quot;C:\Users\FirstName LastName\Notepad\notepad++.exe&amp;quot; &amp;quot;%s&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then click the &amp;lt;code&amp;gt;&amp;quot;Edit...&amp;quot;&amp;lt;/code&amp;gt; button in the script edit window. Save and close editor when done.&lt;br /&gt;
&lt;br /&gt;
==Making your own files for syntax highlighting and autocompletion:==&lt;br /&gt;
&lt;br /&gt;
Please refer to the page [[Making_your_own_LSL_syntax_and_autocompletion_files]] for a list of colors used by Linden Labs for the editor in their viewer as well as a list with current keywords.&lt;br /&gt;
&lt;br /&gt;
== Online LSL Generators ==&lt;br /&gt;
Online LSL generators create and edit LSL scripts via a website, some may have syntax highlighting for better reading.&lt;br /&gt;
Sites are multi-platform editors without downloads:&lt;br /&gt;
*[http://conwylie.co.uk/ScriptGenerator/ Con Wylie&#039;s LSL Script Generator]&lt;br /&gt;
&lt;br /&gt;
== Syntax Highlighting Files ==&lt;br /&gt;
These projects may have more current LSL highlighting files:&lt;br /&gt;
*[http://hilitelsl.googlecode.com HiLiteLSL.GoogleCode.com]&lt;br /&gt;
&lt;br /&gt;
== Syntax highlighting, autocompletion and snippet files by the [http://www.buildersbrewery.com Builder&#039;s Brewery]: ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 85%; text-align: center; width: auto; border=1px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &#039;&#039;&#039;Software:&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;URL for download:&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Issue tracker:&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Commercial:&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Windows:&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Mac:&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Linux:&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Browser&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Syntax:&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Autocompletion:&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Snippets:&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Tooltips:&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [http://ace.c9.io Ace]&lt;br /&gt;
| rowspan=&amp;quot;19&amp;quot; | [https://github.com/buildersbrewery/linden-scripting-language/ Download files]&lt;br /&gt;
| rowspan=&amp;quot;19&amp;quot; | [https://github.com/buildersbrewery/linden-scripting-language/issues/ Issue tracker]&lt;br /&gt;
| {{no}}&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{maybe|requires a browser}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{maybe|LL viewer theme not included}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.atom.io/ AtomEditor]&lt;br /&gt;
| {{no}}&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{yes}}&lt;br /&gt;
| {{yes|Atom is built upon Chrome}}&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.contexteditor.org/ ConTEXT]&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.gnu.org/software/emacs/ Emacs]&lt;br /&gt;
| {{no}}&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{maybe|Work in progress}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{maybe|included for [https://github.com/capitaomorte/yasnippet YASnippet]}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|-&lt;br /&gt;
| [http://projects.gnome.org/gedit/ gedit]&lt;br /&gt;
| {{no}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{yes}}&lt;br /&gt;
| {{maybe|for GNOME}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{yes}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{no}}&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi GeSHi - wikimedia extension]&lt;br /&gt;
| {{no}}&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{maybe|requires a browser}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{yes}}&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{no}}&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.highlightjs.org/ Highlight.js]&lt;br /&gt;
| {{no}}&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{maybe|requires a browser}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{yes}}&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{no}}&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.jedit.org/ jEdit]&lt;br /&gt;
| {{no}}&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{maybe|requires JavaVM}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{maybe|LL viewer theme not included}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{no}}&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.kate-editor.org/ Kate]&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{maybe|via KDE for Windows}}&lt;br /&gt;
| {{maybe|via KDE for Mac}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{yes}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{no}}&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.nano-editor.org/ Nano]&lt;br /&gt;
| {{no}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{no}}&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.notepad-plus-plus.org/ Notepad++]&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{yes}}&lt;br /&gt;
| {{maybe|included for [https://github.com/erinata/FingerText FingerText]}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.pygments.org/ Pygments]&lt;br /&gt;
| {{no}}&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{maybe|requires a browser}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{yes}}&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{no}}&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.codingmonkeys.de/subethaedit/ SubEthaEdit]&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{no}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{yes}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{no}}&lt;br /&gt;
|-&lt;br /&gt;
| Sublime Text [http://www.sublimetext.com/2 ST 2 stable], [http://www.sublimetext.com/dev ST 2 dev], [http://www.sublimetext.com/3 ST 3 stable], [http://www.sublimetext.com/3dev ST 3 dev]&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.textasticapp.com/ Textastic]&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes|Supports Mac OS and iOS versions of Textastic}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{no}}&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.smilesoftware.com/TextExpander/ TextExpander] and [https://www.smilesoftware.com/TextExpander/touch/ TextExpander touch]&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{no}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.ultraedit.com/ UltraEdit]&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.vim.org/ Vim]&lt;br /&gt;
| {{no}}&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{maybe|LL viewer theme not included}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{maybe|included for [https://github.com/garbas/vim-snipmate Snipmate] and [https://github.com/SirVer/ultisnips Ultisnips]}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|-&lt;br /&gt;
| [https://code.visualstudio.com/ Visual Studio Code]&lt;br /&gt;
| {{no}}&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==LSL Integrated Development Environments (coding and testing environments) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[Con-Wylies-Script-Generator]]===&lt;br /&gt;
&lt;br /&gt;
*[http://conwylie.co.uk/ScriptGenerator/ Con Wylie&#039;s LSL Script Generator] has been ported from a website into a free downloadable program, anyone can use the program as it is very easy to use.&lt;br /&gt;
&lt;br /&gt;
Con Wylie&#039;s LSL program is multi-platform on Windows, Linux and Mac. The generator, editor and compiler have been built from the ground up to give the user ease of use.&lt;br /&gt;
&lt;br /&gt;
===[[LslPre]]===&lt;br /&gt;
* &amp;lt;s&amp;gt;[http://lsl.dreamjammers.net http://lsl.dreamjammers.net]&amp;lt;/s&amp;gt;{{dead link}}&lt;br /&gt;
[[LslPre]] is a full featured LSL script editor, preprocessor and optimiser for windows.&lt;br /&gt;
&lt;br /&gt;
===[[LSL Editor Community Edition]]===&lt;br /&gt;
&lt;br /&gt;
LSL Editor Community Edition &#039;&#039;&#039;for Windows&#039;&#039;&#039; is a standalone LSL script &#039;&#039;&#039;editor, compiler and debugger&#039;&#039;&#039;. Binary and Source as of 2013-03-14.&lt;br /&gt;
&lt;br /&gt;
Its compiler and debugger are already now reasonably accurate. Please blog any LSL-Editor bugs you find into such places as our [[LSLEditorBugs|LSL-Editor Bugs]] article or via the project&#039;s SourceForge bug tracker located at: [http://sourceforge.net/tracker/?group_id=319248 Bug Tracker].&lt;br /&gt;
&lt;br /&gt;
*  Alphons van der Heijden, author of LSLEditor, the great off-line editor and debugging tool for scripting in Second Life, has donated his opus magnum to the free and open source community where it can grow and keep pace with the SL platform!&lt;br /&gt;
&lt;br /&gt;
*Details, executable and source can be found at [http://sourceforge.net/projects/lsleditor/ http://sourceforge.net/projects/lsleditor/] &lt;br /&gt;
&lt;br /&gt;
Development of LSL-Editor was originally done by Alphons van der Heijden at [http://www.lsleditor.org/ http://www.lsleditor.org/].&lt;br /&gt;
&lt;br /&gt;
=== [[LSL-Plus]] ===&lt;br /&gt;
&lt;br /&gt;
[http://lslplus.sourceforge.net/ LSL PLus Eclipse Plugin]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;For Windows, Mac, and Linux&#039;&#039;&#039;, the LSL Plus Eclipse plugin is a Editor/Unit Test environment for LSL implemented in Eclipse. It is a FLOSS project (Free/Libre Open Source Software). The latest release (0.13.0 - 2010-01-06) features multi-script execution with &#039;&#039;&#039;source level debugging&#039;&#039;&#039; (setting breakpoints, single stepping through code, examining variables on the call stack, etc.), making it unique among LSL IDEs.  It now supports both multi-script execution in a simulated environment (with avatars, prims, inventory, (limited) physics, etc.) and &#039;&#039;&#039;unit&#039;&#039;&#039; testing - allowing you to test individual handlers and functions by precisely controlling the setup/teardown and interaction with the execution environment (including support for &#039;mocking&#039; the LL function call that interact with the script environment).  It also has some additional code management features that encourage code re-use without having to cut-and-paste, as well as code &#039;&#039;&#039;optimization&#039;&#039;&#039; (inlining, constant folding).&lt;br /&gt;
&lt;br /&gt;
By using the Eclipse IDE you get features such as integration with source code control systems like CVS or Subversion, task management, integration with 3rd party bug tracking software, and so on.  It supports development on Windows, Mac, and Linux platforms.&lt;br /&gt;
* Missing bracket matching and certain highlighting features.&lt;br /&gt;
&lt;br /&gt;
=== [[LSLForge]] ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LSLForge Eclipse for Windows/Linux/OS X&#039;&#039;&#039;, is a derivative of [[LSL-Plus]], forked in September 2011.  LSLForge aims to further advance and mature the LSL-Plus project and support the Eclipse LSL developer community.&lt;br /&gt;
&lt;br /&gt;
This project was initially maintained [https://github.com/elnewfie/lslforge here], but is abandoned/orphaned. The currently most active (as of 04/2024) fork can be found [https://github.com/KoolLSL/lslforge here].&lt;br /&gt;
&lt;br /&gt;
=== [[MiceOnABeam Visual Scripting Tool]] [{{HoverText|&#039;&#039;C&#039;&#039;|Commercial Software}}]===&lt;br /&gt;
&lt;br /&gt;
* [http://www.miceonabeam.com/ MiceOnABeam Visual Scripting Tool]&lt;br /&gt;
MiceOnABeam is a visual programming tool (for Windows only) that generates LSL scripts for SL. You choose among graphical modelling components to specify the program flow of your script in terms of states and the events that transition between the states. You can then use the built-in LSL Action Wizard or insert your own LSL code to specify what happens when an event occurs. The program then generates the LSL code for the model to form a complete script for the SL environment. Check out the demo video &#039;&#039;&#039;[https://bit.ly/ihCqyf here]&#039;&#039;&#039; or on &#039;&#039;&#039;[https://www.youtube.com/watch?v=LBA8wvoA9EI YouTube]&#039;&#039;&#039;. A Free version can be downloaded from &#039;&#039;&#039;[http://www.miceonabeam.com here]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{warning|This project was unfortunately abandoned &#039;&#039;circa&#039;&#039; 2016, but you can still download v1.0.5 as well as a professional license for free from the original developers.}}&lt;br /&gt;
&lt;br /&gt;
=== [[LSL plugin for JetBrains IDEs]] ===&lt;br /&gt;
&lt;br /&gt;
[https://plugins.jetbrains.com/plugin/21002-linden-script-lsl- LSL plugin] for [https://www.jetbrains.com/ JetBrains IDEs] (IntelliJ IDEA, PyCharm, Android Studio etc.)&lt;br /&gt;
&lt;br /&gt;
Supports syntax highlighting, code style formatting, autocompletion, hints, references, plus everything that provides IDE itself.&lt;br /&gt;
&lt;br /&gt;
The plugin is in early access and any contain bugs.&lt;br /&gt;
&lt;br /&gt;
==A build system that uses cpp and make==&lt;br /&gt;
&lt;br /&gt;
A build system for LSL scripts is described [[How_to_make_writing_LSL_scripts_easier|here.]]  Sources are available from [https://github.com/Ratany/lsl-repo here].&lt;br /&gt;
&lt;br /&gt;
[[User:Ratany Resident|Ratany Resident]] 09:38, 13 January 2014 (PST)&lt;br /&gt;
&lt;br /&gt;
==Off-world syntax checker==&lt;br /&gt;
You can build a syntax checker yourself and hook it into whatever editor you fancy if you have the viewer source installed and compiled on your machine. The C++ source to build one yourself is [[User:JB_Kraft#Offline_LSL_Syntax_Checker|here (JB Kraft)]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Multi-platform Editors==&lt;br /&gt;
&lt;br /&gt;
===ByronStar SL===&lt;br /&gt;
Based on [http://eclipse.org Eclipse], the [http://byronstar-sl.sourceforge.net/ ByronStar SL IDE] includes most modern program editor features.  It also includes custom features for LSL, such as variable checking, error markers, and code formatting.  Eclipse is available for Macintosh, Linux, Windows, and many UNIX flavors.&lt;br /&gt;
* No longer maintained.&lt;br /&gt;
&lt;br /&gt;
===Emacs===&lt;br /&gt;
There is an [[Emacs LSL Mode]] available on this wiki, which provides syntax highlighting and indentation features.  For tips on writing LSL in emacs, read [http://xahlee.org/sl/ls-emacs.html Xah Lee&#039;s page].  Emacs is available for many Unix flavors, Macintosh and Windows.&lt;br /&gt;
&lt;br /&gt;
You may come across (and attempt to use) Gary Evan&#039;s &#039;&#039;&#039;LSL major mode&#039;&#039;&#039;. It won&#039;t work with the Linden Scripting Language, as Gary wrote it for the [http://www.cs.cmu.edu/afs/cs/usr/wing/www/publications/LarchBook.pdf Larch Shared Language].&lt;br /&gt;
* Last updated 5 January 2014&lt;br /&gt;
&lt;br /&gt;
===vim===&lt;br /&gt;
[http://www.vim.org/ vim:] vi improved. A multi-platform evolution of the most classical of the editors: vi. GPL code.&lt;br /&gt;
&amp;lt;br&amp;gt;[http://www.secondlifelab.it/index.php?option=com_remository&amp;amp;Itemid=77&amp;amp;func=select&amp;amp;id=7 Plugins for VIM] for install the syntax, autocompletion, autoident for LSL script into vim&lt;br /&gt;
* Plugin link is dead&lt;br /&gt;
&lt;br /&gt;
===JOE===&lt;br /&gt;
[http://joe-editor.sourceforge.net/ Joe&#039;s Own Editor (a.k.a. Joe)] is a comand line editor for unixoid systems. See [[User:Zai Lynch/LSL highlighting in Joe]] for a manual and syntax file download.&lt;br /&gt;
&lt;br /&gt;
===SciTE===&lt;br /&gt;
Easy to use, features syntax highlighting, folding, auto complete, help that opens the appropriate wiki page, and is setup to use the c preprocessor, and [[lslint]].&amp;lt;br&amp;gt;&lt;br /&gt;
Windows only [https://sdfjkl.org/hack/scite-ez/]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;!-- old side ( http://sl.sdfjkl.org/secondlife/scite/ ) not longer possible --&amp;gt;&lt;br /&gt;
Files for Linux or Windows [http://forums.secondlife.com/showthread.php?t=209219 Forum thread] [http://dimension128.homelinux.net/scite_lsl.tar.gz scite_lsl.tar.gz]&lt;br /&gt;
* LSL file links are dead&lt;br /&gt;
&lt;br /&gt;
===jEdit===&lt;br /&gt;
Developed in Java, this mature, cross-platform editor runs on any operating system with a Java 2 version 1.3 or higher virtual machine. It has all the features you&#039;d expect from a full-GUI text editor. Syntax highlighting and tailored editing behavior is supported through &amp;quot;modes.&amp;quot; (You can get the LSL &#039;modes&#039; file [https://gist.github.com/GitSkunk/5327522 here] .) The editor supports a rich plug-in API; many third-party plug-ins exist to facility editing, formatting, communications, etc.&amp;lt;br&amp;gt;&lt;br /&gt;
You can find jEdit [http://www.jedit.org/ here].&lt;br /&gt;
*LSL Files last updated june 2013&lt;br /&gt;
&lt;br /&gt;
===Midnight Commander===&lt;br /&gt;
[http://www.midnight-commander.org/ GNU Midnight Commander (mc)] is a free cross-platform orthodox file manager and a clone of Norton Commander.&amp;lt;br&amp;gt;&lt;br /&gt;
Midnight Commander is a console application with a text user interface.&amp;lt;br&amp;gt;&lt;br /&gt;
OS: Unix-like, Microsoft Windows&amp;lt;br&amp;gt;&lt;br /&gt;
For Linux see [[User:Kuraiko_Yoshikawa/sandbox/LSL_Goodies/mc]] for a manual and syntax file download.&lt;br /&gt;
*LSL files last updated in 2009&lt;br /&gt;
&lt;br /&gt;
===UltraEdit-32/UEStudio [{{HoverText|&#039;&#039;C&#039;&#039;|Commercial Software}}]===&lt;br /&gt;
Very outdated&lt;br /&gt;
[http://www.ultraedit.com/ UltraEdit-32/UEStudio] is a powerful text, HTML, and HEX editor.  This is a commercial editor with a 30 day trial version available at the website.  Important features:&lt;br /&gt;
* column/block mode editing&lt;br /&gt;
* brackets/braces matching&lt;br /&gt;
* code-folding&lt;br /&gt;
* configurable syntax highlighting via custom  [http://www.ultraedit.com/index.php?name=Content&amp;amp;pa=showpage&amp;amp;pid=40#wordfiles wordfiles]&lt;br /&gt;
* autocomplete (using keywords defined in the wordfile)&lt;br /&gt;
* bookmarks, incremental searching, CTAG support&lt;br /&gt;
* automatic conversion between Unix/Dos/MAC/UTF-8, etc&lt;br /&gt;
* built-in FTP/SFTP client&lt;br /&gt;
&lt;br /&gt;
OS: Linux, Mac and Windows. &lt;br /&gt;
&lt;br /&gt;
The following syntax files are available for UltraEdit&lt;br /&gt;
* [[User:Lum Pfohl/LSL Syntax Highlighting For UltraEdit]] &lt;br /&gt;
* Last updated 28 November 2007.&lt;br /&gt;
&lt;br /&gt;
===Sublime Text [{{HoverText|&#039;&#039;C&#039;&#039;|Commercial Software}}]===&lt;br /&gt;
[http://www.sublimetext.com/ Sublime Text] is a sophisticated text editor for code, markup and prose.&lt;br /&gt;
You&#039;ll love the slick user interface, extraordinary features and amazing performance. Key Bindings, Menus, Snippets, Macros, Completions and more - just about everything in Sublime Text is customizable with simple JSON files. This system gives you flexibility as settings can be specified on a per-file type and per-project basis. Sublime Text uses a custom UI toolkit, optimized for speed and beauty, while taking advantage of native functionality on each platform. &lt;br /&gt;
&lt;br /&gt;
Sublime Text is available for OS X, Windows and Linux.&lt;br /&gt;
&lt;br /&gt;
Sublime Text may be downloaded and evaluated for free, however a license must be purchased for continued use. There is no enforced time limit for the evaluation. &lt;br /&gt;
&lt;br /&gt;
The following syntax highlighting files are available for Sublime Text.&lt;br /&gt;
* [https://github.com/JKolya/sublime-text-2-lsl Sublime Text 2 LSL Syntex] Last updated October 28, 2012.&lt;br /&gt;
&lt;br /&gt;
What you will get via Package Control is the following. Simply go &amp;quot;Package Control: Install Package&amp;quot; and search for &amp;quot;LSL&amp;quot;.&amp;lt;br/&amp;gt;(including not only syntax highlighting, but also smooth LSL functions/events/constants completions, [[lslint]] as build system, and inworld editor look-and-feel theme)&lt;br /&gt;
* [https://github.com/Makopo/sublime-text-lsl LSL Bundle for Sublime Text 2] &lt;br /&gt;
*Active as of 27 September 2015&lt;br /&gt;
&lt;br /&gt;
===Visual Studio Code===&lt;br /&gt;
[https://code.visualstudio.com/ Visual Studio Code] - sometimes called VS Code - is the free editor component of the otherwise commercial Visual Studio package by Microsoft. Visual Studio Code  is a full editing environment with projects support, syntax highlighting, editing timeline, autocomplete, GitHub connection, diff, etc.&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code can be extended with a wide range of extension. There are a handful of extensions for LSL, in various stages of actuality. The most recently maintained ones being [https://marketplace.visualstudio.com/items?itemName=MinuitFerina.lsl-tools LSL Tools] and [https://marketplace.visualstudio.com/items?itemName=DalGhost.lsl-fp LSL-FP], or the realtively new [https://marketplace.visualstudio.com/items?itemName=jyaoma.lsl-lsp LSL Language Server], all available for free via the [https://marketplace.visualstudio.com/search?term=lsl&amp;amp;target=VSCode&amp;amp;category=All%20categories&amp;amp;sortBy=Relevance VS Code Marketplace].&lt;br /&gt;
&lt;br /&gt;
Visual Studio Code has built-in provisions for make and build workflows, so tools like an external linter, prrprocessor or optimizer can be included into the development workflow.&lt;br /&gt;
* Active as of 11 September 2023&lt;br /&gt;
&lt;br /&gt;
==Windows Editors==&lt;br /&gt;
&amp;lt;!-- Add your text editors in the following format --&amp;gt;&lt;br /&gt;
===e===&lt;br /&gt;
The [https://github.com/etexteditor/e e Editor] is a port of TextMate to Windows, and can use the TextMate LSL bundle listed below.&lt;br /&gt;
&lt;br /&gt;
===Notepad++===&lt;br /&gt;
[http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] is probably one of the best Windows editor around. Packed with features, extremely powerful and easy to use for beginners too. Best of all, it is GPL code.&lt;br /&gt;
&lt;br /&gt;
Shan Bright&#039;s Notepad++ LSL syntax file &#039;BrightLSL&#039; is at the Bright Corporation website: [http://www.brightcorporation.net/brightlsl BrightLSL] (Updated December 10, 2010)&lt;br /&gt;
&lt;br /&gt;
Nexii Malthus&#039;s Notepad++ LSL syntax file, includes latest functions and constants [http://c438644.r44.cf2.rackcdn.com/userDefineLang.xml] (3rd December, 2011)&lt;br /&gt;
&lt;br /&gt;
WhiteStar Magic&#039;s Notepad++ LSL syntax file is being updated regularly, and is available on Github: [https://github.com/WhiteStar-Magic/NotePad---userdef/archives/master NotePad---userdef] (Last Update: May.03.2012)&lt;br /&gt;
&lt;br /&gt;
Gwen Setzer&#039;s Notepad++ (6.3 and above) LSL Syntax Files: (Generated from Firestorm 4.4.0)&lt;br /&gt;
Language description: [http://pastebin.com/2AsRuKjh lslLanguage.xml] (Language-&amp;gt;Define your Language-&amp;gt;Import)&lt;br /&gt;
Autocompletion support: [http://pastebin.com/FcjNVDyb lsl.xml] (Copy the file lsl.xml in the API plugin directory of Notepad++. ex: C:\Program Files\Notepad++\plugins\APIs, I also recommend enabling Settings-&amp;gt;Preferences-&amp;gt;Autocompletion-&amp;gt;Function parameters hint on input)&lt;br /&gt;
&lt;br /&gt;
Dari&#039;s Better Highlighting for Notepad++ (6.3 and above): [http://home.comcast.net/~volfin/LSL.XML LSL.XML] (updated 11/22/2013) [[User:Darien Caldwell|Darien Caldwell]] 12:11, 9 July 2013 (PDT)&lt;br /&gt;
&lt;br /&gt;
Hint: to ensure code folding works properly, change line endings to Windows style if they are not already set as such. (Edit / EOL conversion / Windows format)&lt;br /&gt;
&lt;br /&gt;
===ConTEXT===&lt;br /&gt;
[http://www.context.cx/component/option,com_frontpage/Itemid,1/ ConTEXT] is a small, fast and powerful freeware text editor, developed mainly to serve as secondary tool for software developers.&lt;br /&gt;
&lt;br /&gt;
The following syntax files are available for ConTEXT.&lt;br /&gt;
* [http://blogic14.blogspot.com/ Last Activity] July 2012&lt;br /&gt;
* [http://archive.is/Wm3B Last Announcement by developer of ConTEXT] Friday, 07 September 2007&lt;br /&gt;
* [http://www.contexteditor.org/ Site and Newsletter Sign Up - &#039;&#039;&#039;DOWNLOAD&#039;&#039;&#039;] September 2007&lt;br /&gt;
* [http://forum.context.cx/index.php?action=dlattach;topic=1775.0;id=359 Shyan Graves] Last updated March 01, 2007.&lt;br /&gt;
* [http://adammarker.org/shill/context/lsl.chl Sir.Grelling] Last updated July 10, 2006.&lt;br /&gt;
&lt;br /&gt;
===Crimson Editor===&lt;br /&gt;
[http://www.crimsoneditor.com/ Crimson Editor] is a professional source code editor for Windows.&lt;br /&gt;
The following syntax files are available for Crimson Editor.&lt;br /&gt;
&amp;lt;!--* [http://www.crimsoneditor.com/english/board/CrazyWWWBoard.cgi?db=file3&amp;amp;mode=read&amp;amp;num=1791 Broken Link - Aakanaar] Last updated September 10, 2006 for Second Life version 1.10.0. --&amp;gt;&lt;br /&gt;
* Aakanaar - Last updated September 10, 2006 for Second Life version 1.10.0.&lt;br /&gt;
* [http://sourceforge.net/projects/emeraldeditor/files/crimsoneditor/ Emerald Editor] &#039;&#039;&#039;2011&#039;&#039;&#039; Open Source version of Crimson Editor&lt;br /&gt;
&lt;br /&gt;
===[[LSL-Editor]]===&lt;br /&gt;
&lt;br /&gt;
* This project is no longer maintained. Instead, consider LSL Editor Community Edition. See below.&lt;br /&gt;
&lt;br /&gt;
===LSL Editor Community Edition===&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/projects/lsleditor/ Source Forge: LSL Editor]&lt;br /&gt;
&lt;br /&gt;
[[LSL-Editor]] is the &#039;&#039;&#039;frequently&#039;&#039;&#039; updated version of the LSL Editor with editing, compiling, and debugging abilities.&lt;br /&gt;
When the path to the editor is added to the viewer&#039;s Debug Setting: &#039;&#039;ExternalEditor&#039;&#039; one can have a nice round trip external editor. See the LSL-Editor entry just above, or see above in the Integrated section, or the wiki page [[LSL-Editor]] for more information.&lt;br /&gt;
&lt;br /&gt;
===TextPad [{{HoverText|&#039;&#039;C&#039;&#039;|Commercial Software}}]===&lt;br /&gt;
[http://www.textpad.com/products/textpad/index.html TextPad] is a powerful, but easy to use general purpose text editor.  It is a commercial product, but there is a 30 day trial version available for free on the website.&lt;br /&gt;
&lt;br /&gt;
The following syntax files are available for TextPad.&lt;br /&gt;
* [[LSL_Editor_TextPad_ClipBook_Events | Events ClipBook]] Last updated March 5, 2007.  Based on the LSL Portal event entries.&lt;br /&gt;
* [[LSL_Editor_TextPad_Syntax | Prodigal Maeterlinck &amp;amp; Patrick2 Chama]] Last updated February 20, 2007.  Extracted from the Second Life viewer source code.&lt;br /&gt;
* [http://www.textpad.com/add-ons/files/syntax/lsl_.zip Ben Gray] Last updated August 23, 2006. As of version 1.12.0, with the deprecated functions in a separate keyword list.&lt;br /&gt;
* [http://www.textpad.com/add-ons/files/syntax/lsl.zip Matthias Huber] Last updated September 23, 2004.&lt;br /&gt;
&lt;br /&gt;
===EditPad Pro [{{HoverText|&#039;&#039;C&#039;&#039;|Commercial Software}}]===&lt;br /&gt;
[http://www.editpadpro.com/ EditPad Pro] is a text editor with many great features for programming. It is a commercial program, with a demo version available. There is also a Lite version, but that has no syntax-highlighting support.&lt;br /&gt;
&lt;br /&gt;
There is an LSL syntax file available for download from inside the program. However, it is from October 2006 so some new features may not be available.&lt;br /&gt;
&lt;br /&gt;
===LSLCCEditor===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Teriks/LibLSLCC/releases LSLCCEditor] is an open-source LSL editor for Windows with autocomplete, off world syntax checking, common code analysis warnings, and code formatting. It was built as part of an improved OpenSim compiler project, and is also able to compile LSL into OpenSim compatible C# code.  The editor is released along side a cross platform C# library (LibLSLCC), which implements a reusable LSL compiler frontend and OpenSim compatible transpiler.&lt;br /&gt;
&lt;br /&gt;
Library Data (highlighting data) is provided for both Linden LSL, and OpenSim LSL + OpenSim LSL extensions. &lt;br /&gt;
The dialect of LSL is configurable via the editor menu. Some editor usage information is provided on the project&#039;s [https://github.com/Teriks/LibLSLCC/wiki Wiki].&lt;br /&gt;
&lt;br /&gt;
==Macintosh Editors==&lt;br /&gt;
===TextMate [{{HoverText|&#039;&#039;C&#039;&#039;|Commercial Software}}]===&lt;br /&gt;
&lt;br /&gt;
TextMate is a commercial text/program editor from [http://macromates.com/ Macromates] (30 day trial available). You can find details about Piero Padar&#039;s well-maintained LSL bundle in the [http://forums-archive.secondlife.com/54/ae/89389/1.html Scripting Tips forum archive].&lt;br /&gt;
&lt;br /&gt;
===SubEthaEdit [{{HoverText|&#039;&#039;C&#039;&#039;|Commercial Software}}]===&lt;br /&gt;
This a great text editor with extensible language support.  It also happens to be an incredible collaborative editor. Info at: http://www.subethaedit.net/&lt;br /&gt;
&lt;br /&gt;
There is a contributed LSL mode by Zarf Vantongerloo.  The mode is a little out of date and could use some love.  But in general works great, doing syntax hilighting of LSL funcitons and adding a pop-up menu of all functions, states and event handlers to the top of the window.&lt;br /&gt;
&lt;br /&gt;
An updated LSL mode by Mark Lentczner is available now from the SubEthaEditor [http://www.subethaedit.net/modes.html User contributed modes Repository].&lt;br /&gt;
&lt;br /&gt;
An updated (but still out of date) version of Mark Lentczner&#039;s mode is available on Solo Mornington&#039;s Github: https://github.com/SoloMornington/LSL_mode Note that this mode was developed for Coda 1.&lt;br /&gt;
&lt;br /&gt;
===Coda [{{HoverText|&#039;&#039;C&#039;&#039;|Commercial Software}}]===&lt;br /&gt;
&lt;br /&gt;
Coda is &#039;one-window web development,&#039; but it&#039;s a very pleasing text editor for a wide variety of uses. You can set up &#039;sites&#039; which are web sites, but can represent any remote filesystem, which is echoed locally through ftp and/or subversion.&lt;br /&gt;
&lt;br /&gt;
Coda can use SubEthaEdit syntax coloring &#039;modes,&#039; so LSL is supported. Also available is a plug-in editor which lets you run arbitrary scripts on the selection or document.&lt;br /&gt;
&lt;br /&gt;
https://library.panic.com/coda/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note: Coda was [https://library.panic.com/coda/purchase-faq/ discontinued] as of September 16th, 2020. However, it&#039;s still available for download for customers with a valid license who are running ancient versions of macOS. It was replaced by Nova; see below.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Nova [{{HoverText|&#039;&#039;C&#039;&#039;|Commercial Software}}]===&lt;br /&gt;
&lt;br /&gt;
[https://nova.app/ Nova] is Panic Inc.&#039;s next generation code editor. It has been rewritten from scratch, and, except for allowing importing old Coda 2 projects (what it used to be called &#039;sites&#039;), it&#039;s not compatible with Coda plugins or themes. By contrast, it&#039;s a far more sophisticated code editor (tenderly referred to as &#039;a lightweight IDE&#039; by its fans), aiming to directly compete with VS Code on the macOS platform, offering much more.&lt;br /&gt;
&lt;br /&gt;
Because the old SubEthaEdit syntax colouring modes used by Coda aren&#039;t supported any longer (the new syntax highlighting engine uses Panic&#039;s own variant of a [https://markdown-all-in-one.github.io/docs/contributing/textmate-language-grammar.html#introduction TextMate grammar]), Nova requires the development of new &#039;language extensions&#039; from scratch by volunteers; starting with Nova 10, it also supports grammars written with [https://docs.nova.app/syntax-reference/tree-sitter/ Tree-sitter Extensions], but [https://tree-sitter.github.io/tree-sitter/ there isn&#039;t yet a Tree-sitter grammar for LSL].&lt;br /&gt;
&lt;br /&gt;
There is an [https://extensions.panic.com/extensions/gwynethllewelyn/gwynethllewelyn.LindenScriptingLanguage/ LSL language extension on the Nova Extension Library] which features not just syntax highlighting/colouring, but also auto-completion, scope context and tooltips, although many features are still under development. The colours used for actual syntax highlighting are &#039;&#039;&#039;not&#039;&#039;&#039; the [[Making your own LSL syntax and autocompletion files|official ones]], but they&#039;re specified by whatever is set to the current &#039;&#039;theme&#039;&#039;, not by the language extension itself; there is, at the time of writing, no LSL-specific theme for Nova (but it&#039;s not too hard to do one).&lt;br /&gt;
&lt;br /&gt;
Nova is a fully commercial code editor with a 30-day trial period and a license fee that gets you one year of updates, after which you can just keep the copy you&#039;ve got forever without paying anything else (or, alternatively, buy another year of updates, at a discount).&lt;br /&gt;
&lt;br /&gt;
===BBEdit and TextWrangler ===&lt;br /&gt;
&lt;br /&gt;
You can get an LSL language plugin for all versions of BBEdit and TextWrangler at [http://blog.elitecoderz.net/lsl-linden-script-language-plugin-for-bbedit/2008/12/ Erik Scholtz&#039; Blog]&lt;br /&gt;
&lt;br /&gt;
For older versions of BBEdit (7.0 or less) and TextWrangler (1.0 only), there is a module available at [http://adammarker.org/bbedit http://adammarker.org/bbedit]&lt;br /&gt;
&lt;br /&gt;
==Linux Editors==&lt;br /&gt;
===Kate===&lt;br /&gt;
[http://kate-editor.org/ Kate] is an advanced text editor for KDE. Usually included in all KDE based distributions.&amp;lt;br&amp;gt;&lt;br /&gt;
A [[Kate LSL Mode]] is available on this wiki.&lt;br /&gt;
===Gedit===&lt;br /&gt;
[http://www.gnome.org/projects/gedit/ Gedit] is an advanced text editor for GNOME.&amp;lt;br&amp;gt;&lt;br /&gt;
See [[User:Kuraiko_Yoshikawa/sandbox/LSL_Goodies/gedit]] for a manual, syntax file and Color Theme download. &lt;br /&gt;
===Nano===&lt;br /&gt;
Nano is a curses-based text editor for Unix and Unix-like systems.&amp;lt;br&amp;gt;&lt;br /&gt;
Nano has been an official part of the GNU Project since February 2001.&amp;lt;br&amp;gt;&lt;br /&gt;
See [[User:Kuraiko_Yoshikawa/sandbox/LSL_Goodies/nano]] for a manual and syntax file download.&lt;br /&gt;
===Vim===&lt;br /&gt;
Based on the vi editor common to Unix-like systems, [http://vim.sourceforge.net/ Vim] is designed for use both from a command line interface and as a standalone application in a graphical user interface.&amp;lt;br&amp;gt;&lt;br /&gt;
Vim comes standard with LSL highlighting support.&lt;br /&gt;
&lt;br /&gt;
== Features Table ==&lt;br /&gt;
&amp;lt;!-- Needs to be in alpha order --&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;font-size: 85%; text-align: center; width: auto; border=1px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Integrated development environment&lt;br /&gt;
! Windows&lt;br /&gt;
! Mac OS&lt;br /&gt;
! Linux&lt;br /&gt;
! Code Completion&lt;br /&gt;
! Highlighting&lt;br /&gt;
! Actively Maintained&lt;br /&gt;
|-&lt;br /&gt;
! [[LSL_Alternate_Editors#Con-Wylies-Script-Generator|Con-Wylies-Script-Generator]]&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{no|No since 2.x}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{Yes}}&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! [[LSL_Alternate_Editors#LSL-Plus|LSL-Plus]]&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! [[LSL_Alternate_Editors#LSLForge|LSLForge]]&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! [[LSL_Alternate_Editors#LSL Editor Community Edition|LSL Editor Community Edition]]&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{no}}&lt;br /&gt;
| {{yes | Custom Vars and Functions also}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! [[LSL_Alternate_Editors#LslPre|LslPre]]&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{maybe|Windows (.NET)}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{maybe|All links and references down as of 2023}}&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! [[LSL_Alternate_Editors#MiceOnABeam Visual Scripting Tool|MiceOnABeam Visual Scripting Tool]]&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{maybe|Windows (.NET)}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{no}}&lt;br /&gt;
| {{yes | Custom Vars and Functions also}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no|Old licensees can still download code}}&lt;br /&gt;
|-&lt;br /&gt;
! [[LSL_Alternate_Editors#LSLCCEditor|LSLCCEditor]]&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{maybe|Windows (.NET)}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{no}}&lt;br /&gt;
| {{yes | Custom Vars and Functions also}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! [[LSL_Alternate_Editors#LSL_plugin_for_JetBrains_IDEs|LSL plugin for JetBrains IDEs]]&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlLinksetDataWrite&amp;diff=1217154</id>
		<title>LlLinksetDataWrite</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlLinksetDataWrite&amp;diff=1217154"/>
		<updated>2024-08-14T18:57:00Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Function/Headless&lt;br /&gt;
|default={{{default|}}}&lt;br /&gt;
|inject-2=&lt;br /&gt;
|summary=The &#039;&#039;&#039;llLinksetDataWrite&#039;&#039;&#039; and &#039;&#039;&#039;llLinksetDataWriteProtected&#039;&#039;&#039; functions create or update a &#039;&#039;&#039;name:value&#039;&#039;&#039; pair in the linkset datastore. The linkset datastore is a semi-permanent key-value store that is retained as a prim property regardless of whether the script is deleted or reset (via manual reset, [[llResetScript]], [[llResetOtherScript]], or cloning the object). If {{LSLP|value}} is an empty string, the pair is deleted.&lt;br /&gt;
&lt;br /&gt;
This function returns 0 on success or an error code on failure.&lt;br /&gt;
&lt;br /&gt;
When these functions are called, the [[linkset_data]] event is triggered in all scripts running in the linkset with an action of [[Template:LSL_Constants_Linkset_Data|LINKSETDATA_UPDATE]], or [[Template:LSL_Constants_Linkset_Data|LINKSETDATA_DELETE]] if the pair is deleted.&lt;br /&gt;
&lt;br /&gt;
The linkset datastore can contain up to 131072 bytes (128 KiB) of data and has no impact on script memory usage aside from the functions and events used to interact with it.  Every pair written to the datastore consumes a number of bytes in the datastore equal to the length of {{LSLP|name}} plus the length of {{LSLP|value}}, plus an additional 32 bytes if written using &#039;&#039;&#039;llLinksetDataWriteProtected&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
|constants={{LSL Constants Linkset_Data Returns}}&lt;br /&gt;
&lt;br /&gt;
|func=llLinksetDataWrite|sort={{{sort|LinksetDataWrite}}}&lt;br /&gt;
|head={{LSL Function/Head&lt;br /&gt;
|func_id=|func_sleep=0|func_energy=10.0&lt;br /&gt;
|func=llLinksetDataWrite&lt;br /&gt;
|return_type=integer&lt;br /&gt;
|return_text=success or failure code.&lt;br /&gt;
|p1_type=string|p1_name=name|p1_desc=The key of the &#039;&#039;&#039;name:value&#039;&#039;&#039; pair in the datastore to be updated or created.&lt;br /&gt;
|p2_type=string|p2_name=value|p2_desc=The &#039;&#039;&#039;value&#039;&#039;&#039; of the &#039;&#039;&#039;name:value&#039;&#039;&#039; pair.&lt;br /&gt;
|func_desc=Creates or updates an unprotected &#039;&#039;&#039;name:value&#039;&#039;&#039; pair from the linkset&#039;s datastore.&lt;br /&gt;
}}{{LSL_Function/Head&lt;br /&gt;
|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llLinksetDataWriteProtected&lt;br /&gt;
|p1_type=string|p1_name=name|p1_desc=&lt;br /&gt;
|p2_type=string|p2_name=value|p2_desc=&lt;br /&gt;
|p3_type=string|p3_name=pass|p3_desc=A pass phrase used to protect the &#039;&#039;&#039;name:value&#039;&#039;&#039; pair.&lt;br /&gt;
|return_type=integer&lt;br /&gt;
|return_text=success or failure code.&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc=Creates or updates a protected &#039;&#039;&#039;name:value&#039;&#039;&#039; pair from the linkset&#039;s datastore. Further attempts to read, write or update the &#039;&#039;&#039;name:value&#039;&#039;&#039; pair must use the protected versions of those functions and must supply the same string that was used in {{LSLP|pass}}.&lt;br /&gt;
|func_footnote&lt;br /&gt;
|caveats=&lt;br /&gt;
* Protecting a &#039;&#039;&#039;name:value&#039;&#039;&#039; pair adds an additional 32 bytes to its size in the datastore regardless of the length of {{LSLP|pass}}. The length of {{LSLP|pass}} itself is not counted against the data storage limit.&lt;br /&gt;
* When writing a protected name, the [[linkset_data]] event fires as normal, however the value parameter will be an empty string.&lt;br /&gt;
}}&lt;br /&gt;
|caveats=&lt;br /&gt;
* Events are only fired if the linkset&#039;s datastore is changed.&lt;br /&gt;
** Rewriting an existing value to a &#039;&#039;&#039;name:value&#039;&#039;&#039; pair returns LINKSETDATA_NOUPDATE.&lt;br /&gt;
** Writing an empty string to a nonexistent name in the datastore returns LINKSETDATA_NOTFOUND.&lt;br /&gt;
* There is currently no way to write to or read from a linkset datastore from another linkset.&lt;br /&gt;
* The datastore is accessible from the entire linkset but acts as a property of the root prim alone. Therefore, linking and unlinking prims produces the following results:&lt;br /&gt;
** When linking one linkset to another linkset, the combined linkset datastore includes all pairs from both datastores.&lt;br /&gt;
*** If any pairs have conflicting {{LSLP|name}}s, the combined linkset datastore will keep the pair from the original linkset and will silently drop conflicting pairs from newly added prim(s).&lt;br /&gt;
*** If the combined linkset datastore would exceed 131072 bytes, pairs from the newly linked prim(s) will be added to the combined linkset datastore up to the limit. It is not currently clear in what order pairs are added, so there is no way to predict which will be dropped.&lt;br /&gt;
** When unlinking a child prim from a linkset, the datastore remains in the original linkset and the child prim (now its own root prim) has an empty datastore.&lt;br /&gt;
*** If the datastore is too large to cache in a script to be rewritten after unlinking, you may need to devise a custom method of porting the datastore from the original linkset to the child prim, if necessary.&lt;br /&gt;
** When unlinking a root prim from a linkset, the datastore remains in the newly-unlinked root prim and the remaining prims in the original linkset have an empty datastore.&lt;br /&gt;
* There is no limit on the size of {{LSLP|value}} aside from the total datastore limit, so care should be taken when writing very large values that could crash other scripts in the linkset via [[linkset_data]].&lt;br /&gt;
** If a script does not define a [[linkset_data]] event, it will not load any event parameters into its memory when the datastore is written to, so the script should not crash from another script in the linkset writing to the datastore.&lt;br /&gt;
** If this is a possible risk, consider using &#039;&#039;&#039;llLinksetDataWriteProtected&#039;&#039;&#039;, which does not send {{LSLP|value}} in [[linkset_data]], with a static {{LSLP|pass}}.&lt;br /&gt;
* It is possible for data to be rolled back to a previous state if the datastore is stored in an object that is restored via a simulator rollback, or in an attachment that is not properly saved back to the server on logout.&lt;br /&gt;
** Viewer crashes can cause attachment states to not be saved, so care should be taken when using these functions in attachments, because datastore rollbacks are likely to occur on occasion for attachments.&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;
    touch_start(integer num_detected)&lt;br /&gt;
    {&lt;br /&gt;
        llLinksetDataWrite(&amp;quot;test-name&amp;quot;, &amp;quot;See you on the other side!&amp;quot;);&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(llLinksetDataRead(&amp;quot;test-name&amp;quot;)); // Should print &amp;quot;See you on the other side!&amp;quot; to the owner&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|helpers=&lt;br /&gt;
=== Securing Against Tampering ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// While there is no &amp;quot;standard&amp;quot; for names, it&#039;s a good idea to take some steps to prevent against other scripts accidentally overwriting your data.&lt;br /&gt;
// Since the datastore is shared among the entire linkset, one way to avoid name conflicts is to include the prim&#039;s UUID in the data pair&#039;s name.&lt;br /&gt;
// This example also monitors for llLinksetDataReset/unlinks and refreshes the datastore in response, which is usually good practice if you want to keep your data!&lt;br /&gt;
&lt;br /&gt;
key this_uuid;&lt;br /&gt;
string lsd_data;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        this_uuid = llGetKey(); // Save the current key into this_uuid for checking later&lt;br /&gt;
        lsd_data = &amp;quot;bar&amp;quot;; // Store the data locally so it can be rewritten if the datastore gets erased for whatever reason&lt;br /&gt;
        llLinksetDataWrite((string)llGetKey() + &amp;quot;-foo&amp;quot;, lsd_data); // Write the data&lt;br /&gt;
    }&lt;br /&gt;
    on_rez(integer start_param)&lt;br /&gt;
    {&lt;br /&gt;
        if (llGetKey() != this_uuid)&lt;br /&gt;
        {&lt;br /&gt;
            // Prim UUID has changed!&lt;br /&gt;
            // This should always be the case when on_rez is called, but is included here for clarity.&lt;br /&gt;
            llLinksetDataWrite((string)llGetKey() + &amp;quot;-foo&amp;quot;, llLinksetDataRead((string)this_uuid + &amp;quot;-foo&amp;quot;)); // Read the data from the last prim UUID&#039;s pair and write it into this prim UUID&#039;s pair&lt;br /&gt;
            // Note that you could also just write the lsd_data string instead of calling llLinksetDataRead, but this method is theoretically a little more robust if you expect other scripts to manipulate the data.&lt;br /&gt;
            llLinksetDataDelete((string)this_uuid + &amp;quot;-foo&amp;quot;); // Erase the original data to free up memory&lt;br /&gt;
            this_uuid = llGetKey(); // Update the UUID variable to the new UUID&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    linkset_data(integer action, string name, string value)&lt;br /&gt;
    {&lt;br /&gt;
        if (action == LINKSETDATA_UPDATE || action == LINKSETDATA_DELETE)&lt;br /&gt;
        {&lt;br /&gt;
            if (name == (string)llGetKey() + &amp;quot;-foo&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                // Somebody else wrote to our pair - we&#039;ll just save it in case we need it later, but you could re-write the original data instead if desired.&lt;br /&gt;
                lsd_data = value; // Note that in the case of LINKSETDATA_DELETE, value will be an empty string (&amp;quot;&amp;quot;), which may or may not be how you want to handle that case&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (action == LINKSETDATA_RESET) &lt;br /&gt;
        {&lt;br /&gt;
            // Linkset datastore has been reset!&lt;br /&gt;
            llLinksetDataWrite((string)llGetKey() + &amp;quot;-foo&amp;quot;, lsd_data); // Write the lsd_data string into this prim UUID&#039;s pair - in this case we can&#039;t use llLinksetDataRead because the datastore is empty&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;
            // Linkset has changed!&lt;br /&gt;
            // Generally, this can happen for a few reasons (see Caveats above), including when an avatar sits on the object. In certain circumstances, this resets the datastore.&lt;br /&gt;
            // However, since the linkset data functions are very quick, it is easier to just write the data on every change to be safe for this example whether or not the datastore was reset.&lt;br /&gt;
            llLinksetDataWrite((string)llGetKey() + &amp;quot;-foo&amp;quot;, lsd_data); // Write the lsd_data string into this prim UUID&#039;s pair - in this case we can&#039;t use llLinksetDataRead because the datastore might be empty&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Simple blacklist management ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;integer gDialogChannel;&lt;br /&gt;
integer gDialogHandle;&lt;br /&gt;
integer gManagingBlocks;&lt;br /&gt;
&lt;br /&gt;
startDialog(key person)&lt;br /&gt;
{&lt;br /&gt;
    gManagingBlocks = 0;&lt;br /&gt;
    gDialogHandle = llListen(gDialogChannel, &amp;quot;&amp;quot;, person, &amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(person, &amp;quot;\nSelect action&amp;quot;, [&amp;quot;List blocks&amp;quot;, &amp;quot;Add block&amp;quot;, &amp;quot;Remove block&amp;quot;], gDialogChannel);&lt;br /&gt;
    llSetTimerEvent(60);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
stopDialog()&lt;br /&gt;
{&lt;br /&gt;
    llSetTimerEvent(0);&lt;br /&gt;
    llListenRemove(gDialogHandle);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    on_rez(integer sp)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        gDialogChannel = (integer)(llFrand(-10000000)-10000000);&lt;br /&gt;
        llListen(PUBLIC_CHANNEL, &amp;quot;&amp;quot;, NULL_KEY, &amp;quot;&amp;quot;);;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        stopDialog();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer nd)&lt;br /&gt;
    {&lt;br /&gt;
        key toucherKey = llDetectedKey(0);&lt;br /&gt;
        if (toucherKey == llGetOwner())&lt;br /&gt;
        {&lt;br /&gt;
            startDialog(toucherKey);&lt;br /&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;
&lt;br /&gt;
        if (llGetAgentSize(id) == ZERO_VECTOR)&lt;br /&gt;
        {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (channel == gDialogChannel)&lt;br /&gt;
        {&lt;br /&gt;
            stopDialog();&lt;br /&gt;
            if (gManagingBlocks)&lt;br /&gt;
            {&lt;br /&gt;
                message = llStringTrim(message, STRING_TRIM);&lt;br /&gt;
                if ((key)message)&lt;br /&gt;
                {&lt;br /&gt;
                    if (gManagingBlocks == 1)&lt;br /&gt;
                    {&lt;br /&gt;
                        llOwnerSay(&amp;quot;Addition request has been sent to the blacklist storage&amp;quot;);&lt;br /&gt;
                        llLinksetDataWrite(&amp;quot;blocklist:&amp;quot; + message, &amp;quot;1&amp;quot;);&lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        llOwnerSay(&amp;quot;Removal request has been sent to the blacklist storage.&amp;quot;);&lt;br /&gt;
                        llLinksetDataDelete(&amp;quot;blocklist:&amp;quot; + message);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    llOwnerSay(&amp;quot;The UUID &#039;&amp;quot; + message + &amp;quot;&#039; appears to be invalid.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                startDialog(id);&lt;br /&gt;
            }&lt;br /&gt;
            else if (message == &amp;quot;List blocks&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                list blocks = llLinksetDataFindKeys(&amp;quot;^blocklist:&amp;quot;, 0, 0);&lt;br /&gt;
                integer listLength = llGetListLength(blocks);&lt;br /&gt;
                llOwnerSay(&amp;quot;Blacklist items: &amp;quot; + (string)listLength);&lt;br /&gt;
                integer i;&lt;br /&gt;
                while (i &amp;lt; listLength)&lt;br /&gt;
                {&lt;br /&gt;
                    string record = llGetSubString(llList2String(blocks, i), 10, -1);&lt;br /&gt;
                    llOwnerSay(&amp;quot;- secondlife:///app/agent/&amp;quot; + record + &amp;quot;/about&amp;quot; + &amp;quot; - &amp;quot; + record);&lt;br /&gt;
                    ++i;&lt;br /&gt;
                }&lt;br /&gt;
                blocks = [];&lt;br /&gt;
                startDialog(id);&lt;br /&gt;
            }&lt;br /&gt;
            else if (message == &amp;quot;Add block&amp;quot; || message == &amp;quot;Remove block&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                string label = &amp;quot;add to&amp;quot;;&lt;br /&gt;
                gManagingBlocks = 1;&lt;br /&gt;
                if (message == &amp;quot;Remove block&amp;quot;)&lt;br /&gt;
                {&lt;br /&gt;
                    gManagingBlocks = 2;&lt;br /&gt;
                    label = &amp;quot;remove from&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
                gDialogHandle = llListen(gDialogChannel, &amp;quot;&amp;quot;, id, &amp;quot;&amp;quot;);&lt;br /&gt;
                llTextBox(id, &amp;quot;\nPlease specify one single avatar UUID you&#039;d like to &amp;quot; + label + &amp;quot; the blacklist storage.&amp;quot;, gDialogChannel);&lt;br /&gt;
                llSetTimerEvent(60);&lt;br /&gt;
            }&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (llGetListLength(llLinksetDataFindKeys(&amp;quot;blocklist:&amp;quot; + (string)id, 0, 1)) &amp;gt; 0)&lt;br /&gt;
        {&lt;br /&gt;
            llRegionSayTo(id, 0, &amp;quot;You&#039;re blacklisted.&amp;quot;);&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        llRegionSayTo(id, 0, &amp;quot;Hello there, secondlife:///app/agent/&amp;quot; + (string)id + &amp;quot;/about - your message: &amp;quot; + message);&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    linkset_data(integer action, string name, string value)&lt;br /&gt;
    {&lt;br /&gt;
        if (action == LINKSETDATA_RESET || action == LINKSETDATA_DELETE || action == LINKSETDATA_UPDATE)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Blacklist storage modified.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataAvailable]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataCountKeys]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataDelete]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataDeleteProtected]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataDeleteFound]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataFindKeys]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataListKeys]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataRead]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataReadProtected]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataReset]]|}}&lt;br /&gt;
|also_events=&lt;br /&gt;
{{LSL DefineRow||[[linkset_data]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes=&lt;br /&gt;
* Linkset datastore operations are synchronous and are usually processed within one server frame. Therefore, it is possible to synchronize variables between multiple scripts using the datastore alone without resorting to [[llMessageLinked]], or to use the datastore directly as extended memory for specific workloads that need to work with extremely large datasets.&lt;br /&gt;
|cat1=Script&lt;br /&gt;
|cat2=LinksetData&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlLinksetDataReset&amp;diff=1217153</id>
		<title>LlLinksetDataReset</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlLinksetDataReset&amp;diff=1217153"/>
		<updated>2024-08-14T18:56:33Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: &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=llLinksetDataReset&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc=The &#039;&#039;&#039;llLinksetDataReset&#039;&#039;&#039; function erases all &#039;&#039;&#039;name:value&#039;&#039;&#039; pairs stored in the linkset&#039;s datastore.  When this function is called the [[linkset_data]] event is triggered in all scripts running in the linkset with an action of [[Template:LSL_Constants_Linkset_Data|LINKSETDATA_RESET]].&lt;br /&gt;
|func_footnote&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=&lt;br /&gt;
llLinksetDataReset removes all keys. Even those that were created by llLinksetDataWriteProtected.&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataAvailable]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataCountKeys]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataDelete]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataDeleteFound]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataFindKeys]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataListKeys]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataRead]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataWrite]]|}}&lt;br /&gt;
|also_events=&lt;br /&gt;
{{LSL DefineRow||[[linkset_data]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Script&lt;br /&gt;
|cat2=LinksetData&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlLinksetDataRead&amp;diff=1217152</id>
		<title>LlLinksetDataRead</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlLinksetDataRead&amp;diff=1217152"/>
		<updated>2024-08-14T18:56:07Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Function/Headless&lt;br /&gt;
|default={{{default|}}}&lt;br /&gt;
|inject-2=&lt;br /&gt;
|summary=The &#039;&#039;&#039;llLinksetDataRead&#039;&#039;&#039; and &#039;&#039;&#039;llLinksetDataReadProtected&#039;&#039;&#039; functions return the &#039;&#039;&#039;value&#039;&#039;&#039; in the linkset&#039;s datastore for the provided {{LSLP|name}}. If {{LSLP|name}} is not found, these functions return an empty string.&lt;br /&gt;
|func=llLinksetDataRead|sort={{{sort|LinksetDataRead}}}&lt;br /&gt;
|head={{LSL Function/Head&lt;br /&gt;
|func_id=|func_sleep=0|func_energy=10.0&lt;br /&gt;
|func=llLinksetDataRead&lt;br /&gt;
|p1_type=string|p1_name=name|p1_desc=The key of the linkset &#039;&#039;&#039;name:value&#039;&#039;&#039; pair to be read.&lt;br /&gt;
|return_type=string&lt;br /&gt;
|return_text=&#039;&#039;&#039;value&#039;&#039;&#039; corresponding to {{LSLP|name}}&lt;br /&gt;
|func_desc=Reads an unprotected &#039;&#039;&#039;name:value&#039;&#039;&#039; pair from the linkset&#039;s datastore.&lt;br /&gt;
|caveats=If the {{LSLP|name}} is an empty string, or the &#039;&#039;&#039;name:value&#039;&#039;&#039; pair was created with [[llLinksetDataWriteProtected]] this function returns an empty string.&lt;br /&gt;
}}{{LSL_Function/Head&lt;br /&gt;
|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llLinksetDataReadProtected&lt;br /&gt;
|p1_type=string|p1_name=name|p1_desc=The &#039;&#039;&#039;key&#039;&#039;&#039; of the &#039;&#039;&#039;name:value&#039;&#039;&#039; pair to be read.&lt;br /&gt;
|p2_type=string|p2_name=pass|p2_desc=The pass phrase protecting the &#039;&#039;&#039;name:value&#039;&#039;&#039; pair.&lt;br /&gt;
|return_type=string&lt;br /&gt;
|return_text=&#039;&#039;&#039;value&#039;&#039;&#039; corresponding to {{LSLP|name}}&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc=Reads a protected &#039;&#039;&#039;name:value&#039;&#039;&#039; pair from the datastore.&lt;br /&gt;
|func_footnote&lt;br /&gt;
|caveats=If the {{LSLP|pass}} parameter does not match, this function returns an empty string.&lt;br /&gt;
|spec&lt;br /&gt;
}}&lt;br /&gt;
|caveats&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataAvailable]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataCountKeys]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataDelete]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataDeleteProtected]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataDeleteFound]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataFindKeys]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataListKeys]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataReset]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataWrite]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataWriteProtected]]|}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Script&lt;br /&gt;
|cat2=LinksetData&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlLinksetDataListKeys&amp;diff=1217151</id>
		<title>LlLinksetDataListKeys</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlLinksetDataListKeys&amp;diff=1217151"/>
		<updated>2024-08-14T18:55:51Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: &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=llLinksetDataListKeys&lt;br /&gt;
|p1_type=integer|p1_name=start|p1_desc=The first key to return.&lt;br /&gt;
|p2_type=integer|p2_name=count|p2_desc=The number of keys to return.&lt;br /&gt;
|return_type=list&lt;br /&gt;
|return_text=of the keys in the datastore, ordered alphabetically.&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc=The &#039;&#039;&#039;llLinksetDataListKeys&#039;&#039;&#039; function returns a list of up to {{LSLP|count}} keys in the datastore, starting at the one indicated by {{LSLP|start}}. If {{LSLP|count}} is less than 1, then all keys between {{LSLP|start}} and the end are returned. If {{LSLP|count}} minus {{LSLP|start}} exceeds the total number of keys, the returned list will be shorter than {{LSLP|count}}, down to a zero-length list if {{LSLP|start}} equals or exceeds the total number of keys.&lt;br /&gt;
|func_footnote&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataAvailable]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataCountKeys]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataDelete]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataDeleteFound]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataFindKeys]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataRead]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataReset]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataWrite]]|}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Script&lt;br /&gt;
|cat2=LinksetData&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlLinksetDataDelete&amp;diff=1217150</id>
		<title>LlLinksetDataDelete</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlLinksetDataDelete&amp;diff=1217150"/>
		<updated>2024-08-14T18:55:08Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Function/Headless&lt;br /&gt;
|default={{{default|}}}&lt;br /&gt;
|inject-2=&lt;br /&gt;
|summary=The &#039;&#039;&#039;llLinksetDataDelete&#039;&#039;&#039; and &#039;&#039;&#039;llLinksetDataDeleteProtected&#039;&#039;&#039; functions erases a &#039;&#039;&#039;name:value&#039;&#039;&#039; pair from the linkset&#039;s datastore.  &lt;br /&gt;
&lt;br /&gt;
When this function successfully removes a &#039;&#039;&#039;name:value&#039;&#039;&#039; pair a [[linkset_data]] event is triggered in all scripts running in the linkset with an action of [[Template:LSL_Constants_Linkset_Data|LINKSETDATA_DELETE]] and the &#039;&#039;&#039;name&#039;&#039;&#039; parameter set to the {{LSLP|name}} that was removed. The &#039;&#039;&#039;value&#039;&#039;&#039; parameter in the event is set to an empty string. &lt;br /&gt;
&lt;br /&gt;
|func=llLinksetDataDelete|sort={{{sort|LinksetDataDelete}}}&lt;br /&gt;
|head={{LSL Function/Head&lt;br /&gt;
|func_id=|func_sleep=0|func_energy=10.0&lt;br /&gt;
|func=llLinksetDataDelete&lt;br /&gt;
|return_type=integer&lt;br /&gt;
|return_text=success or failure code.&lt;br /&gt;
|p1_type=string|p1_name=name|p1_desc=The key of the linkset &#039;&#039;&#039;name:value&#039;&#039;&#039; pair to be deleted.&lt;br /&gt;
|func_desc=Removes an unprotected &#039;&#039;&#039;name:value&#039;&#039;&#039; pair from the linkset&#039;s datastore. If the pair was created &lt;br /&gt;
}}{{LSL_Function/Head&lt;br /&gt;
|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llLinksetDataDeleteProtected&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc=The &#039;&#039;&#039;llLinksetDataDeleteProtected&#039;&#039;&#039; function erases a protected &#039;&#039;&#039;name:value&#039;&#039;&#039; pair from the linkset&#039;s datastore. &lt;br /&gt;
&lt;br /&gt;
|func_footnote&lt;br /&gt;
|return_type=integer&lt;br /&gt;
|return_text=success or failure code.&lt;br /&gt;
|p1_type=string|p1_name=name|p1_desc=The key of the linkset &#039;&#039;&#039;name:value&#039;&#039;&#039; pair to be deleted.&lt;br /&gt;
|p2_type=string|p2_name=pass|p2_desc=A pass phrase previously used to protect the &#039;&#039;&#039;name:value&#039;&#039;&#039; pair.&lt;br /&gt;
|spec&lt;br /&gt;
}}&lt;br /&gt;
|caveats=&lt;br /&gt;
* If the {{LSLP|name}} does not exist or the {{LSLP|pass}} does not match, no event is triggered.&lt;br /&gt;
|constants={{LSL Constants Linkset_Data Returns}}&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataAvailable]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataCountKeys]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataFindKeys]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataListKeys]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataDeleteFound]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataRead]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataReadProtected]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataReset]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataWrite]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataWriteProtected]]|}}&lt;br /&gt;
|also_events=&lt;br /&gt;
{{LSL DefineRow||[[linkset_data]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|examples=&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;// Simple blacklist management.&lt;br /&gt;
&lt;br /&gt;
integer gDialogChannel;&lt;br /&gt;
integer gDialogHandle;&lt;br /&gt;
integer gManagingBlocks;&lt;br /&gt;
&lt;br /&gt;
startDialog(key person)&lt;br /&gt;
{&lt;br /&gt;
    gManagingBlocks = 0;&lt;br /&gt;
    gDialogHandle = llListen(gDialogChannel, &amp;quot;&amp;quot;, person, &amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(person, &amp;quot;\nSelect action&amp;quot;, [&amp;quot;List blocks&amp;quot;, &amp;quot;Add block&amp;quot;, &amp;quot;Remove block&amp;quot;], gDialogChannel);&lt;br /&gt;
    llSetTimerEvent(60);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
stopDialog()&lt;br /&gt;
{&lt;br /&gt;
    llSetTimerEvent(0);&lt;br /&gt;
    llListenRemove(gDialogHandle);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    on_rez(integer sp)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        gDialogChannel = (integer)(llFrand(-10000000)-10000000);&lt;br /&gt;
        llListen(PUBLIC_CHANNEL, &amp;quot;&amp;quot;, NULL_KEY, &amp;quot;&amp;quot;);;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        stopDialog();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer nd)&lt;br /&gt;
    {&lt;br /&gt;
        key toucherKey = llDetectedKey(0);&lt;br /&gt;
        if (toucherKey == llGetOwner())&lt;br /&gt;
        {&lt;br /&gt;
            startDialog(toucherKey);&lt;br /&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;
&lt;br /&gt;
        if (llGetAgentSize(id) == ZERO_VECTOR)&lt;br /&gt;
        {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (channel == gDialogChannel)&lt;br /&gt;
        {&lt;br /&gt;
            stopDialog();&lt;br /&gt;
            if (gManagingBlocks)&lt;br /&gt;
            {&lt;br /&gt;
                message = llStringTrim(message, STRING_TRIM);&lt;br /&gt;
                if ((key)message)&lt;br /&gt;
                {&lt;br /&gt;
                    if (gManagingBlocks == 1)&lt;br /&gt;
                    {&lt;br /&gt;
                        llOwnerSay(&amp;quot;Addition request has been sent to the blacklist storage&amp;quot;);&lt;br /&gt;
                        llLinksetDataWrite(&amp;quot;blocklist:&amp;quot; + message, &amp;quot;1&amp;quot;);&lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        llOwnerSay(&amp;quot;Removal request has been sent to the blacklist storage.&amp;quot;);&lt;br /&gt;
                        llLinksetDataDelete(&amp;quot;blocklist:&amp;quot; + message);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    llOwnerSay(&amp;quot;The UUID &#039;&amp;quot; + message + &amp;quot;&#039; appears to be invalid.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                startDialog(id);&lt;br /&gt;
            }&lt;br /&gt;
            else if (message == &amp;quot;List blocks&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                list blocks = llLinksetDataFindKeys(&amp;quot;^blocklist:&amp;quot;, 0, 0);&lt;br /&gt;
                integer listLength = llGetListLength(blocks);&lt;br /&gt;
                llOwnerSay(&amp;quot;Blacklist items: &amp;quot; + (string)listLength);&lt;br /&gt;
                integer i;&lt;br /&gt;
                while (i &amp;lt; listLength)&lt;br /&gt;
                {&lt;br /&gt;
                    string record = llGetSubString(llList2String(blocks, i), 10, -1);&lt;br /&gt;
                    llOwnerSay(&amp;quot;- secondlife:///app/agent/&amp;quot; + record + &amp;quot;/about&amp;quot; + &amp;quot; - &amp;quot; + record);&lt;br /&gt;
                    ++i;&lt;br /&gt;
                }&lt;br /&gt;
                blocks = [];&lt;br /&gt;
                startDialog(id);&lt;br /&gt;
            }&lt;br /&gt;
            else if (message == &amp;quot;Add block&amp;quot; || message == &amp;quot;Remove block&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                string label = &amp;quot;add to&amp;quot;;&lt;br /&gt;
                gManagingBlocks = 1;&lt;br /&gt;
                if (message == &amp;quot;Remove block&amp;quot;)&lt;br /&gt;
                {&lt;br /&gt;
                    gManagingBlocks = 2;&lt;br /&gt;
                    label = &amp;quot;remove from&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
                gDialogHandle = llListen(gDialogChannel, &amp;quot;&amp;quot;, id, &amp;quot;&amp;quot;);&lt;br /&gt;
                llTextBox(id, &amp;quot;\nPlease specify one single avatar UUID you&#039;d like to &amp;quot; + label + &amp;quot; the blacklist storage.&amp;quot;, gDialogChannel);&lt;br /&gt;
                llSetTimerEvent(60);&lt;br /&gt;
            }&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (llGetListLength(llLinksetDataFindKeys(&amp;quot;blocklist:&amp;quot; + (string)id, 0, 1)) &amp;gt; 0)&lt;br /&gt;
        {&lt;br /&gt;
            llRegionSayTo(id, 0, &amp;quot;You&#039;re blacklisted.&amp;quot;);&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        llRegionSayTo(id, 0, &amp;quot;Hello there, secondlife:///app/agent/&amp;quot; + (string)id + &amp;quot;/about - your message: &amp;quot; + message);&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    linkset_data(integer action, string name, string value)&lt;br /&gt;
    {&lt;br /&gt;
        if (action == LINKSETDATA_RESET || action == LINKSETDATA_DELETE || action == LINKSETDATA_UPDATE)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Blacklist storage modified.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|cat1=Script&lt;br /&gt;
|cat2=LinksetData&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlLinksetDataCountKeys&amp;diff=1217149</id>
		<title>LlLinksetDataCountKeys</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlLinksetDataCountKeys&amp;diff=1217149"/>
		<updated>2024-08-14T18:54:29Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: &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=llLinksetDataCountKeys&lt;br /&gt;
|return_type=integer&lt;br /&gt;
|return_text=number of keys used in the linkset store.&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc=The &#039;&#039;&#039;llLinksetDataCountKeys&#039;&#039;&#039; returns the number of unique keys that have been stored in the linkset&#039;s datastore.&lt;br /&gt;
|func_footnote&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataAvailable]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataDelete]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataDeleteFound]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataFindKeys]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataListKeys]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataRead]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataReset]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataWrite]]|}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Script&lt;br /&gt;
|cat2=LinksetData&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlLinksetDataAvailable&amp;diff=1217148</id>
		<title>LlLinksetDataAvailable</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlLinksetDataAvailable&amp;diff=1217148"/>
		<updated>2024-08-14T18:54:17Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: &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=llLinksetDataAvailable&lt;br /&gt;
|return_type=integer&lt;br /&gt;
|return_text=number of bytes available in the linkset store.&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc=The &#039;&#039;&#039;llLinksetDataAvailable&#039;&#039;&#039; returns the number of bytes available in the linkset&#039;s datastore.&lt;br /&gt;
|func_footnote&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataCountKeys]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataDelete]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataDeleteFound]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataFindKeys]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataListKeys]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataRead]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataReset]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llLinksetDataWrite]]|}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Script&lt;br /&gt;
|cat2=LinksetData&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User_talk:Rhet0rica_Resident/RLVa_Protocol&amp;diff=1216939</id>
		<title>User talk:Rhet0rica Resident/RLVa Protocol</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User_talk:Rhet0rica_Resident/RLVa_Protocol&amp;diff=1216939"/>
		<updated>2024-07-25T14:54:18Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Created page with &amp;quot;Awesome, thank you!  -- ~~~~&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Awesome, thank you!&lt;br /&gt;
&lt;br /&gt;
-- [[User:Peter Stindberg|Peter Stindberg]] ([[User talk:Peter Stindberg|talk]]) 07:54, 25 July 2024 (PDT)&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User_talk:GoSpeed_Racer&amp;diff=1216925</id>
		<title>User talk:GoSpeed Racer</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User_talk:GoSpeed_Racer&amp;diff=1216925"/>
		<updated>2024-07-22T15:52:49Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Created page with &amp;quot;Welcome to the wiki, neighbor.  -- ~~~~&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the wiki, neighbor.&lt;br /&gt;
&lt;br /&gt;
-- [[User:Peter Stindberg|Peter Stindberg]] ([[User talk:Peter Stindberg|talk]]) 08:52, 22 July 2024 (PDT)&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:How_to_Earn_Linden_Dollars_in_Second_Life&amp;diff=1216921</id>
		<title>Talk:How to Earn Linden Dollars in Second Life</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:How_to_Earn_Linden_Dollars_in_Second_Life&amp;diff=1216921"/>
		<updated>2024-07-20T08:35:03Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Pointing out the page is a blatant promotion page for traffic tools.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Is it just me, or is this whole page primarily geared at promoting traffic tools for SL? The topic is so wide, it deserves a structural in-depth approach. Instead, this page uses exactly TWO sentences on saying that you can work a job or start your own business, yet paragraph after paragraph are used to mention games (traffic tools). &lt;br /&gt;
&lt;br /&gt;
Not to mention an edit history where the majority of editors did not even bother to create their own &amp;quot;about&amp;quot; page and whose edits solely focus on this page (or traffic related pages). This seems all rather fishy to me.&lt;br /&gt;
&lt;br /&gt;
Yes, I know, I can change it. Probably will, if I get annoyed enough. For now some feedback would be welcome.&lt;br /&gt;
&lt;br /&gt;
-- [[User:Peter Stindberg|Peter Stindberg]] ([[User talk:Peter Stindberg|talk]]) 01:35, 20 July 2024 (PDT)&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User_talk:Thunder_Rahja&amp;diff=1216920</id>
		<title>User talk:Thunder Rahja</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User_talk:Thunder_Rahja&amp;diff=1216920"/>
		<updated>2024-07-19T19:08:16Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Created page with &amp;quot;Welcome to the wiki!  -- ~~~~&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the wiki!&lt;br /&gt;
&lt;br /&gt;
-- [[User:Peter Stindberg|Peter Stindberg]] ([[User talk:Peter Stindberg|talk]]) 12:08, 19 July 2024 (PDT)&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:LlFindNotecardTextSync&amp;diff=1216863</id>
		<title>Talk:LlFindNotecardTextSync</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:LlFindNotecardTextSync&amp;diff=1216863"/>
		<updated>2024-07-01T20:32:08Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Created page with &amp;quot;Oh, fancy. We&amp;#039;re getting slowly to the point where we can sensibly use notecards as ROM.  -- ~~~~&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Oh, fancy. We&#039;re getting slowly to the point where we can sensibly use notecards as ROM.&lt;br /&gt;
&lt;br /&gt;
-- [[User:Peter Stindberg|Peter Stindberg]] ([[User talk:Peter Stindberg|talk]]) 13:32, 1 July 2024 (PDT)&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Limits&amp;diff=1216793</id>
		<title>Limits</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Limits&amp;diff=1216793"/>
		<updated>2024-06-12T16:12:05Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Added LSD and Experience memory limits&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 for Basic &amp;amp; Plus members, 2 if the resident has Premium or Premium Plus.&lt;br /&gt;
* &#039;&#039;&#039;Max. attachment position&#039;&#039;&#039; - 3.5m in a sphere around &amp;lt;0, 0, 0&amp;gt;.&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*. (Support for 2K textures &amp;amp; Bakes on Mesh is in development but not yet supported)&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; - 6 teleports per minute&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|{{HoverText|250,000 bytes|250 KB (decimal), 244 KB (binary)}}}}&lt;br /&gt;
| Limited by length or Size, whichever is reached first. Size is after conversion to [[Internal Animation Format|.anim]]. {{KBtip|custom=Tip for Blender users:|1=You can use a built-in function called &amp;quot;&#039;&#039;Decimate&#039;&#039;&amp;quot; to simplify your animation. See [https://www.youtube.com/watch?v=lScwEYJZy1M this tutorial]}}&lt;br /&gt;
| [[Internal Animation Format]]&lt;br /&gt;
|-&lt;br /&gt;
||Distance an Animation Can Travel&lt;br /&gt;
| {{no|-5 meters (per axis)}}&lt;br /&gt;
| {{no|+5 meters (per axis)}}&lt;br /&gt;
| 10 meters per axis cumulatively (travelling from -5 to +5).&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|.bvh: 4, [[Internal Animation Format|.anim]]: 6}}&lt;br /&gt;
| [[Internal Animation Format|.anim]] uses per-joint priorities, meaning it&#039;s possible to have a mix of joint priorities in the same animation.&lt;br /&gt;
| [[Animation_Priority|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;
| [[Internal Animation Format|.anim]], unlike .bvh, uses a flat structure, meaning that only the bones animated are stored, and bones which would otherwise be kept by .bvh (to keep hierarchy structure) are deleted.&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|64 meters}}&lt;br /&gt;
| distance has changed on [https://community.secondlife.com/blogs/entry/13626-coming-soon-server-release-202306/ 2023.06 update]. The old max distance was 54 meters.&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Local offset (avatars)&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|1000 meters per axis}}&lt;br /&gt;
| Unlike regular [[Linkability_Rules|Linkability Rules]] for linksets, an avatar sitting on an object may be moved significantly further by scripts.&lt;br /&gt;
| [[llSetLinkPrimitiveParams]] with [[PRIM_POS_LOCAL]]&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;
| {{no|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;
||Number of lights rendered on Alpha Blended surfaces&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|8}}&lt;br /&gt;
| 8 including the Sun and Moon. The viewer will attempt to select the &amp;quot;most significant&amp;quot; lights to render, however these blended surfaces will look different as a result of these lighting limitations.&lt;br /&gt;
| [[Alpha Modes Do&#039;s and Don&#039;ts#Alpha_blending|Alpha Blending]]&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 for Basic &amp;amp; Plus members, 80 for Premium members, and 160 for Premium Plus members.}}&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 the cap allowed by membership, 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 members, 50 for Plus members, 70 for Premium members, 140 for Premium Plus members.&lt;br /&gt;
** After downgrading from a higher limit membership to a lower one, you may not join any new groups until you are a member of fewer than your current subscriptions&#039;s group limit. For example, if you downgrade from Premium (70 groups allowed) to Basic (42 groups allowed), you can&#039;t join any new groups until you&#039;re 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 accounts that an inventory item can be shared with at once:&#039;&#039;&#039; The limit is unknown, but tests show that it is more than 35. No documentation has been found. One third-party viewer developer says that the code doesn&#039;t seem to look for a limit. It just builds the list and sends it to each avatar individually.&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 1024 bytes (was 255 bytes before server version [https://releasenotes.secondlife.com/simulator/2021-10-25.565008.html 2021-10-25.565008]).&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 {{code|0}} (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 regions 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 {{code|*.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 {{code|*.raw}} file upload.&lt;br /&gt;
* &#039;&#039;&#039;Miscellaneous estate limits:&#039;&#039;&#039; You can have a maximum of 20 estate managers, 500 allowed Residents, 63 allowed groups, and 750 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;
** [https://second.life/eventregions Event Regions]: 175 agents&lt;br /&gt;
** Full region: 100 basic account users plus 10 additional available to premium accounts. (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 (plus 5 additional available to premium accounts)&lt;br /&gt;
** [[Land#Openspace|Openspace]]: 10 (plus 2 additional available to premium accounts)&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}}&lt;br /&gt;
| per [[mesh]] - See [[Talk:Limits#Mesh_Limits|discussion page]]&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||COLLADA file size&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|8 MB}}&lt;br /&gt;
| Maximum mesh asset size after compression, roughly equivalent to a 256 MB Raw COLLADA file.&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;
||Bone influence weights per mesh&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|110}}&lt;br /&gt;
| some folk have reported needing to go as low as about 99 in rare cases&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|100,000}}&lt;br /&gt;
| Server uses estimated triangles (streaming cost calculated), not visual triangles.&lt;br /&gt;
| [[Animesh User Guide|Animesh_User_Guide]]&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;
== [[Lag|Performance]] ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Healthy Viewer FPS&#039;&#039;&#039; - Generally, FPS equal to or above 24 is good. The higher it gets, the smoother&#039;&#039;&#039;*&#039;&#039;&#039;. 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;
&#039;&#039;&#039;*&#039;&#039;&#039; Only until your framerate reaches your monitor&#039;s refresh rate, after this point there will be very little benefit.&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 memory for [[:Category:LSL LinksetData|Linkset data]]&#039;&#039;&#039; key/value pairs - 128 KiB &lt;br /&gt;
* &#039;&#039;&#039;Maximum memory for [[:Category:Experience Tools|Experience]]&#039;&#039;&#039; key/value pairs- 128 MiB &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;
* &#039;&#039;&#039;Maximum number of scripts that can be rezzed at once&#039;&#039;&#039; – 1,000. (Refer to [https://community.secondlife.com/knowledgebase/english/building-tips-r13/)|Building Tips, by Jeremy Linden].)&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;
&amp;lt;!-- TODO: add link to modemworld.me summary of CCUG from 15/12/22 regarding sound max length --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{KBtip|Second Life will accept sounds that are encoded following &amp;quot;[https://en.wikipedia.org/wiki/Compact_Disc_Digital_Audio CD Quality]&amp;quot; encoding presets present in many {{Abbr|DAW|Digital Audio Workstation}}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;
||Sound length&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|less than 30 seconds}}&lt;br /&gt;
| 29.99 seconds is fine, but 30.0 will fail to upload. See the knowledge base article.&lt;br /&gt;
| &#039;&#039;&#039;[https://community.secondlife.com/knowledgebase/english/uploading-assets-r75/ Uploading Assets]&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||Bit depth&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|16 bit}}&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Sample rate&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|44.100 kHz}}&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
||Audio channels&lt;br /&gt;
| n/a&lt;br /&gt;
| {{no|1 channel (mono)}}&lt;br /&gt;
| Channels will be &#039;&#039;&#039;merged&#039;&#039;&#039; at upload time for dual-channel (stereo) audio.&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; - ~16:9 (~516&amp;amp;times;~270 pixels as measured on screen; the ratio seems closer to 16:8.5)&lt;br /&gt;
* &#039;&#039;&#039;Profile &amp;gt; Pick expanded&#039;&#039;&#039; - Unknown as of 2022-11-13 (viewer 6.6.7.576223); the Pick image does not expand.&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 pixels)&amp;lt;ref&amp;gt;As of {{#time: r|2024-02-26T18:00:00}}, this seems to be one of the very few sizes supported by the [[Picture Service]].&amp;lt;/ref&amp;gt;&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; - 2048&amp;amp;times;2048 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;
** 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 2048&amp;amp;times;2048.&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 ten possible image dimensions: 4, 8, 16, 32, 64, 128, 256, 512, 1024 &amp;amp; 2048 pixels, either horizontal or vertical.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Texture resizing&#039;&#039;&#039;&lt;br /&gt;
** Uploaded textures will be resized to the dimensions above. &lt;br /&gt;
** Each dimension is resized independently (for instance, a 1024 x 999 image will be resized to 1024 x 1024).&lt;br /&gt;
** A dimension that is already a power of two will not be resized.&lt;br /&gt;
** The uploader “prefers” to round down rather than up. The threshold for rounding down/up is .75 of the distance between powers of two. &lt;br /&gt;
*** For example, given a dimension of x, if x / 512 is larger than 1.75, x will be resized to 1024, else 512.&lt;br /&gt;
*** Another example:  If x / 256 is larger than 1.75, x will be resized to 512. &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.&amp;lt;ref&amp;gt;Except in .NET-based applications, and those related to .NET development — which is the case of the SL viewer — which essentially use UTF-16 everywhere, i.e., every character is encoded in &#039;&#039;two&#039;&#039; bytes, not just one.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{References}}&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlDerezObject&amp;diff=1216788</id>
		<title>LlDerezObject</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlDerezObject&amp;diff=1216788"/>
		<updated>2024-06-08T06:28:14Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: Copy/paste error by Rider :p&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|return_type=integer&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=Returns success or failure.&lt;br /&gt;
|spec=&lt;br /&gt;
Deletes, or marks temp, an object that was previously rezzed by this script. The object 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>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User_talk:Ivanova_Shostakovich&amp;diff=1216776</id>
		<title>User talk:Ivanova Shostakovich</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User_talk:Ivanova_Shostakovich&amp;diff=1216776"/>
		<updated>2024-06-06T17:18:17Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Collision Caveat ==&lt;br /&gt;
&lt;br /&gt;
You added &amp;quot;Will not detect collisions between the [[avatar]] sitting on the task.&amp;quot; but it doesn&#039;t make sense. Do you mean: &amp;quot;Will not detect collisions while an [[avatar]] is sitting on the task.&amp;quot; or &amp;quot;Will not detect collisions between the [[avatar]] sitting on the task and the task.&amp;quot; or something else altogether? -- &#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; 17:59, 21 January 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Welcome back to the wiki ==&lt;br /&gt;
&lt;br /&gt;
It&#039;s been a while! Glad to see you back on the wiki.&lt;br /&gt;
&lt;br /&gt;
-- [[User:Peter Stindberg|Peter Stindberg]] ([[User talk:Peter Stindberg|talk]]) 10:18, 6 June 2024 (PDT)&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Project_talk:About&amp;diff=1216641</id>
		<title>Project talk:About</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Project_talk:About&amp;diff=1216641"/>
		<updated>2024-05-10T21:56:21Z</updated>

		<summary type="html">&lt;p&gt;Peter Stindberg: How to get write access for the wiki.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I don&#039;t understand why there are so many wikis. What was wrong with the original one? Why did LL decide to completely scrap that one and start a new one so that all us scripters would have to scrounge through several sources for relevant data?{{unsigned|Nynthan Folsom|10:38, 26 May 2007}}&lt;br /&gt;
: {{reply to|Nynthan Folsom}} Now there is only one :-) — [[User:Gwyneth Llewelyn|Gwyneth Llewelyn]] ([[User talk:Gwyneth Llewelyn|talk]]) 08:56, 23 August 2022 (PDT) &lt;br /&gt;
&lt;br /&gt;
If this is like real life, why is there not a death area. I have had my heart ripped out by my boyfriend and i want my avatar to die and all of sl to get the article of the death. Why is there not a place for death. That way for people that do die there real life people can come here and let us know this has really happened to. Thank you[[User:Nini Danitz|Nini Danitz]] 19:24, 30 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== multi-lang ==&lt;br /&gt;
&lt;br /&gt;
Eu acho que falta colocar na página a predefinição ou o gabarito: &amp;lt;nowiki&amp;gt;{{multi-lang}}&amp;lt;/nowiki&amp;gt;. I think missing template &amp;lt;nowiki&amp;gt;{{multi-lang}}&amp;lt;/nowiki&amp;gt; on the page: --[[User:Gianinni_Babenco|Gianinni Babenco]]&amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Gianinni_Babenco|talk]]|[[Special:Contributions/Gianinni_Babenco|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 15:40, 2 September 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
I just started on SecondLife and i dont know how to get out of the place you are put when you get on for the first time evar. I would appreciate some help.{{Unsigned|NuttyHorseLuver Resident}}&lt;br /&gt;
&lt;br /&gt;
== How to: Get write access to the wiki ==&lt;br /&gt;
&lt;br /&gt;
Since the page is locked, this will need to suffice: If you want to contribute to the wiki, you need to [https://lindenlab.freshdesk.com/support/tickets/new file a ticket] and request write access.&lt;br /&gt;
&lt;br /&gt;
-- [[User:Peter Stindberg|Peter Stindberg]] ([[User talk:Peter Stindberg|talk]]) 14:56, 10 May 2024 (PDT)&lt;/div&gt;</summary>
		<author><name>Peter Stindberg</name></author>
	</entry>
</feed>