<?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=Kaluura+Boa</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=Kaluura+Boa"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/Kaluura_Boa"/>
	<updated>2026-07-24T10:45:37Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlHTTPRequest&amp;diff=1166851</id>
		<title>LlHTTPRequest</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlHTTPRequest&amp;diff=1166851"/>
		<updated>2012-05-04T17:15:19Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: Added a link to llHTTPResponse&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func=llHTTPRequest&lt;br /&gt;
|func_id=230&lt;br /&gt;
|func_energy=10.0&lt;br /&gt;
|func_sleep=0.0&lt;br /&gt;
|func_desc=Sends an HTTP request to the specified URL with the body of the request and parameters. &lt;br /&gt;
|sort=HTTPRequest&lt;br /&gt;
|func_footnote=&lt;br /&gt;
|return_type=key&lt;br /&gt;
|return_text= that is a handle identifying the HTTP request made.&lt;br /&gt;
|p1_type=string|p1_name=url|p1_desc=A valid HTTP/HTTPS URL.&lt;br /&gt;
|p2_type=list|p2_name=parameters|p2_desc=configuration parameters, specified as HTTP_* flag-value pairs&lt;br /&gt;
[ parameter1, value1, parameter2, value2, . . . parameterN, valueN]&lt;br /&gt;
|p3_type=string|p3_name=body|p3_desc=Contents of the request.&lt;br /&gt;
|constants={{LSL_Constants_HTTP}}&lt;br /&gt;
{{LSL_Constants/HTTP_Headers}}&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=&lt;br /&gt;
*If there is a space in &#039;&#039;&#039;url&#039;&#039;&#039;, the [[http_response]] status code will be 499.&lt;br /&gt;
*The corresponding [[http_response]] event will be triggered in all scripts in the [[prim]], not just in the requesting script.&lt;br /&gt;
*Requests must fully complete after 60 seconds, or else the response will be thrown away and the [[http_response]] status code will be 499.&lt;br /&gt;
*The response body is limited to 2048 bytes; if it is longer it will be truncated.&lt;br /&gt;
*Requests are throttled on a per [[object]] basis (not per prim or script).&lt;br /&gt;
**Requests are throttled to a maximum of 25 requests per 20 seconds.  This is to support a sustained rate of 1 per second or a burst of up to 25.&lt;br /&gt;
**[[NULL_KEY]] is returned if the request is throttled.&lt;br /&gt;
***See [http://forums-archive.secondlife.com/139/72/108960/1.html this thread] and [http://forums-archive.secondlife.com/139/2c/109571/1.html this thread] for more details.&lt;br /&gt;
*Cannot be used to load textures or images from the internet, for more information see [[Web Textures]].&lt;br /&gt;
*If the accessed site is relying on the LSL script to report L$ transactions, then it &#039;&#039;&#039;must&#039;&#039;&#039; check the X-SecondLife-Shard header to see if the script is running on the beta grid.&lt;br /&gt;
* Some servers will return a 405 error if you send POST to a file that can&#039;t accept metadata, such as a text or HTML file. Make sure you use the GET method to ensure success in any environment.&lt;br /&gt;
* While the HTTP status code from the server is provided to the script, redirect codes such as 302 will result in the redirect being automatically and transparently followed ONLY IF the HTTP_METHOD is GET, with the resulting response being returned.  If the HTTP_METHOD is anything other then GET then you&#039;ll get back an http_response with a status code of 302, but without any way to view the headers, you can&#039;t know where you were being redirected to unless that was also included in the body.&lt;br /&gt;
* The following applies when making a request to a script using HTTP-In:&lt;br /&gt;
** When appending a query string to a cap URL there MUST be a trailing slash between the cap guid and the query string token &#039;?&#039;. IE https://sim123.agni.lindenlab.com/cap/f23b4b94-012d-44f2-bd0c-16c328321221?arg=gra will return an HTTP 500, but https://sim123.agni.lindenlab.com/cap/f23b4b94-012d-44f2-bd0c-16c328321221/?arg=gra will succeed.&lt;br /&gt;
* X-SecondLife-Owner-Name may return &amp;quot;(Loading...)&amp;quot; instead of owner name (still true, 18th of July, 2011)&lt;br /&gt;
* Requests made at approx 0625 SLT may fail with a 503 status code, with &amp;quot;ERROR: The requested URL could not be retrieved&amp;quot;, and &amp;quot;(111) Connection refused&amp;quot; in the body of the response.  This has been confirmed as expected behaviour by Kelly, due to the nightly maint &amp;amp; log rotation.  It does reliably impact object to object HTTP at that time, and quite probably may impact object to/from web around the same time.  The interruption in service is fairly brief, and the precise timing may vary as LL adjust their nightly maint processes, or due to server load.&lt;br /&gt;
|examples=&amp;lt;lsl&amp;gt;key http_request_id;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        http_request_id = llHTTPRequest(&amp;quot;url&amp;quot;, [], &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    http_response(key request_id, integer status, list metadata, string body)&lt;br /&gt;
    {&lt;br /&gt;
        if (request_id == http_request_id)&lt;br /&gt;
        {&lt;br /&gt;
            llSetText(body, &amp;lt;0,0,1&amp;gt;, 1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example PHP test script:&lt;br /&gt;
&amp;lt;php&amp;gt;&amp;lt;?php header(&amp;quot;content-type: text/plain; charset=utf-8&amp;quot;); ?&amp;gt;&lt;br /&gt;
Headers received:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @author Wouter Hobble&lt;br /&gt;
 * @copyright 2008&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
foreach ($_SERVER as $k =&amp;gt; $v)&lt;br /&gt;
{&lt;br /&gt;
	if( substr($k, 0, 5) == &#039;HTTP_&#039;)&lt;br /&gt;
	{&lt;br /&gt;
		print &amp;quot;\n&amp;quot;. $k. &amp;quot;\t&amp;quot;. $v;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&amp;lt;/php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
example wrapper script Both capturing apache headers and global methodes&lt;br /&gt;
&amp;lt;php&amp;gt;&lt;br /&gt;
&amp;lt;?PHP&lt;br /&gt;
	// Author Waster Skronski.&lt;br /&gt;
	// General Public License (GPL).&lt;br /&gt;
	// Mind that some headers are not included because they&#039;re either useless or unreliable.&lt;br /&gt;
	$USE_APACHE_HEADERS = TRUE; // switch to false if you need cgi methods&lt;br /&gt;
	if ($USE_APACHE_HEADERS)&lt;br /&gt;
	{&lt;br /&gt;
		$headers 	= apache_request_headers();&lt;br /&gt;
		$objectgrid 	= $headers[&amp;quot;X-SecondLife-Shard&amp;quot;];&lt;br /&gt;
		$objectname 	= $headers[&amp;quot;X-SecondLife-Object-Name&amp;quot;];&lt;br /&gt;
		$objectkey     	= $headers[&amp;quot;X-SecondLife-Object-Key&amp;quot;];&lt;br /&gt;
		$objectpos 	= $headers[&amp;quot;X-SecondLife-Local-Position&amp;quot;];&lt;br /&gt;
		$ownerkey     	= $headers[&amp;quot;X-SecondLife-Owner-Key&amp;quot;];&lt;br /&gt;
		$ownername 	= $headers[&amp;quot;X-SecondLife-Owner-Name&amp;quot;];&lt;br /&gt;
		$regiondata     = $headers[&amp;quot;X-SecondLife-Region&amp;quot;];&lt;br /&gt;
		$regiontmp 	= explode (&amp;quot;(&amp;quot;,$regiondata); // cut cords off &lt;br /&gt;
		$regionpos 	= explode (&amp;quot;)&amp;quot;,$regiontmp[1]); //&lt;br /&gt;
		$regionname 	= substr($regiontmp[0],0,-1); // cut last space from simname&lt;br /&gt;
	} else {&lt;br /&gt;
		$db = $GLOBALS;&lt;br /&gt;
		$headers 		= $db[&#039;HTTP_ENV_VARS&#039;];&lt;br /&gt;
		$objectgrid 	= $headers[&amp;quot;HTTP_X_SECONDLIFE_SHARD&amp;quot;]; &lt;br /&gt;
		$objectname 	= $headers[&amp;quot;HTTP_X_SECONDLIFE_OBJECT_NAME&amp;quot;];&lt;br /&gt;
		$objectkey     	= $headers[&amp;quot;HTTP_X_SECONDLIFE_OBJECT_KEY&amp;quot;];&lt;br /&gt;
		$ownerkey     	= $headers[&amp;quot;HTTP_X_SECONDLIFE_OWNER_KEY&amp;quot;];&lt;br /&gt;
		$objectpos     	= $headers[&amp;quot;HTTP_X_SECONDLIFE_LOCAL_POSITION&amp;quot;];&lt;br /&gt;
		$ownername 	= $headers[&amp;quot;HTTP_X_SECONDLIFE_OWNER_NAME&amp;quot;];&lt;br /&gt;
		$regiondata     = $headers[&amp;quot;HTTP_X_SECONDLIFE_REGION&amp;quot;];&lt;br /&gt;
		$regiontmp 	= explode (&amp;quot;(&amp;quot;,$regiondata); &lt;br /&gt;
		$regionpos 	= explode (&amp;quot;)&amp;quot;,$regiontmp[1]);&lt;br /&gt;
		$regionname 	= substr($regiontmp[0],0,-1);&lt;br /&gt;
	}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;lsl&amp;gt;&amp;lt;/lsl&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_header&lt;br /&gt;
|also_events={{LSL DefineRow||[[http_response]]}}&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llEscapeURL]]}}&lt;br /&gt;
{{LSL DefineRow||[[llHTTPResponse]]}}&lt;br /&gt;
{{LSL DefineRow||[[llUnescapeURL]]}}&lt;br /&gt;
|also_articles={{LSL DefineRow||[[Simulator IP Addresses]]}}&lt;br /&gt;
|also_footer&lt;br /&gt;
|notes=If for some reason while using llHTTPRequest/http_response you are unable to parse a known good RSS feed or some other form of web contents, you will need to work around it outside of SecondLife. This is unlikely to change in the near future since checking the headers requires more overhead at the simulator level.&lt;br /&gt;
&lt;br /&gt;
You may find that some web servers return either a null or a nonsensical result when llHTTPRequest is used, even though the same URL in a PC web browser returns the expected result. This may be due to the fact that the llHTTPRequest User Agent string is not recognised by some web servers as it does not contain &amp;quot;Mozilla&amp;quot;, which would identify it as a web browser instead of, for example, a Shoutcast or an RSS client. A workaround is to append &amp;quot; HTTP/1.0\nUser-Agent: LSL Script (Mozilla Compatible)\n\n&amp;quot; or similar to the URL string, which will kludge the HTTP request to look like it originates from a web browser. This is also true when the PHP relays on $_COOKIE. LSL http request can neither set cookie nor retrieve them.&lt;br /&gt;
&lt;br /&gt;
CGI environments may place the headers into variables by capitalizing the entire name, replacing dashes with underscores, and prefixing the name with &amp;quot;HTTP_&amp;quot;, e.g. &amp;quot;HTTP_X_SECONDLIFE_OBJECT_NAME&amp;quot;. PHP $_SERVER variables do this as well.&lt;br /&gt;
&lt;br /&gt;
Apache can include the headers in its logs, using the CustomLog and LogFormat directives.  See [http://httpd.apache.org/docs/2.0/mod/mod_log_config.html#formats the docs] for details on the syntax.&lt;br /&gt;
&lt;br /&gt;
|mode&lt;br /&gt;
|deprecated&lt;br /&gt;
|permission&lt;br /&gt;
|cat1=HTTP&lt;br /&gt;
|cat2=XML-RPC&lt;br /&gt;
|cat3=Communications&lt;br /&gt;
|cat4=HTTP/Client&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Http_response&amp;diff=1166850</id>
		<title>Http response</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Http_response&amp;diff=1166850"/>
		<updated>2012-05-04T17:13:44Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: Typo!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Event|event_id=32|event_delay|event=http_response&lt;br /&gt;
|p1_type=key|p1_name=request_id|p1_desc=Matches return from [[llHTTPRequest]]&lt;br /&gt;
|p2_type=integer|p2_name=status|p2_desc=HTTP code (like 404 or 200)&lt;br /&gt;
|p3_type=list|p3_name=metadata|p3_desc=List of HTTP_* constants and attributes&lt;br /&gt;
|p4_type=string|p4_name=body|p4_desc&lt;br /&gt;
|event_desc=Triggered when task receives a response to one of its [[llHTTPRequest]]&amp;lt;nowiki&amp;gt;s&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|constants={{{!}}{{Prettytable|style=margin-top:0;}}&lt;br /&gt;
{{!}}-{{Hl2}}&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; {{!}} Constant&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[HTTP_BODY_TRUNCATED]]&lt;br /&gt;
{{!}} 0&lt;br /&gt;
{{!}} integer&lt;br /&gt;
{{!}} Truncation point in bytes&lt;br /&gt;
{{!}}}&lt;br /&gt;
|spec=&amp;lt;h3&amp;gt;Status 415 &amp;quot;Unsupported or unknown Content-Type&amp;quot;&amp;lt;/h3&amp;gt;&lt;br /&gt;
The remote server did reply to your request but the Content-Type of the reply (such as XML, JSON, Atom, RSS, PLS) is not recognized by the LL server and so is not passed back to the script. You can assume that 415 means the server heard your request and did reply.&lt;br /&gt;
&amp;lt;h3&amp;gt;Status 499&amp;lt;/h3&amp;gt;&lt;br /&gt;
Besides the usual HTTP status codes, SL implements a special &#039;&#039;&#039;status&#039;&#039;&#039; code 499.  This code isn&#039;t generated by the remote web server but by SL&#039;s servers, it can indicate:&lt;br /&gt;
*Request timeout (60 seconds)&lt;br /&gt;
*SSL failure&lt;br /&gt;
*A space was present in the url (escape your URL with [[llEscapeURL]]).&lt;br /&gt;
&amp;lt;h3&amp;gt;Status 502&amp;lt;/h3&amp;gt;&lt;br /&gt;
The proxy server received an invalid response from an upstream server. This error occurs when you send an [[llHTTPRequest]] to an object in-world, and it does not reply with an [[llHTTPResponse]].&lt;br /&gt;
|caveats=*This events will be triggered in every script in the prim, not just in the [[llHTTPRequest|requesting]] script.&lt;br /&gt;
*It is &#039;&#039;not&#039;&#039; guaranteed that there will be an [[http_response]] for every [[llHTTPRequest]]().&lt;br /&gt;
**If the script moves to a different region before the remote HTTP server can respond, the response will be lost. [https://lists.secondlife.com/pipermail/secondlifescripters/2011-August/006309.html]&lt;br /&gt;
|examples=&amp;lt;lsl&amp;gt;key http_request_id;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        http_request_id = llHTTPRequest(&amp;quot;url&amp;quot;, [], &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    http_response(key request_id, integer status, list metadata, string body)&lt;br /&gt;
    {&lt;br /&gt;
        if (request_id == http_request_id)&lt;br /&gt;
        {&lt;br /&gt;
            llSetText(body, &amp;lt;0,0,1&amp;gt;, 1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To parse POST content:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
string get_post_value(string content, string returns){&lt;br /&gt;
    //This parses application/x-www-form-urlencoded POST data&lt;br /&gt;
    &lt;br /&gt;
    //For instance if the webserver posts &#039;data1=hi&amp;amp;data2=blah&#039; then &lt;br /&gt;
    //calling get_post_value(&amp;quot;data1=hi&amp;amp;data2=blah&amp;quot;,&amp;quot;data1&amp;quot;); would return &amp;quot;hi&amp;quot;&lt;br /&gt;
    //Written by MichaelRyan Allen, Unrevoked Clarity&lt;br /&gt;
&lt;br /&gt;
    list p =  llParseString2List(content,[&amp;quot;&amp;amp;&amp;quot;],[]);&lt;br /&gt;
    integer n = llGetListLength(p);&lt;br /&gt;
    integer i;&lt;br /&gt;
    list names;&lt;br /&gt;
    list values;&lt;br /&gt;
    for(i=0;i!=n;i++){&lt;br /&gt;
        list p2 =  llParseString2List(llList2String(p,i),[&amp;quot;=&amp;quot;],[]);&lt;br /&gt;
        names += llUnescapeURL(llList2String(p2,0));&lt;br /&gt;
        values += llUnescapeURL(llList2String(p2,1));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if(llListFindList(names,(list)returns) == -1){&lt;br /&gt;
        return &amp;quot;&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
        return llList2String(values,llListFindList(names,(list)returns));&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_header&lt;br /&gt;
|also_events&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llHTTPRequest]]}}&lt;br /&gt;
{{LSL DefineRow||[[llHTTPResponse]]}}&lt;br /&gt;
|also_articles&lt;br /&gt;
|also_footer&lt;br /&gt;
|notes=&lt;br /&gt;
===Parsing Problems===&lt;br /&gt;
If for some reason while using [[llHTTPRequest]]/[[http_response]] you are unable to parse a known good RSS feed or some other form of web contents, you will need to work around it outside of SecondLife. This is unlikely to change in the near future since checking the headers requires more overhead at the simulator level.&lt;br /&gt;
&lt;br /&gt;
===Unicode===&lt;br /&gt;
&lt;br /&gt;
When serving content with UTF-8 characters be sure your server sets the outgoing &amp;quot;Content-Type&amp;quot; header so that it includes &amp;quot;charset=utf-8&amp;quot; otherwise it will be interpreted incorrectly. See [http://www.w3.org/International/O-HTTP-charset W3C:Setting the HTTP charset parameter] for further details.&lt;br /&gt;
&lt;br /&gt;
===Request Headers===&lt;br /&gt;
&lt;br /&gt;
{{LSL Constants/HTTP Headers}}&lt;br /&gt;
|mode&lt;br /&gt;
|deprecated&lt;br /&gt;
|cat1=HTTP&lt;br /&gt;
|cat2=XML-RPC&lt;br /&gt;
|cat3=HTTP/Client&lt;br /&gt;
|cat4=Events/Prim&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Http_response&amp;diff=1166849</id>
		<title>Http response</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Http_response&amp;diff=1166849"/>
		<updated>2012-05-04T17:13:04Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: Added a link to llHTTPResponse&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Event|event_id=32|event_delay|event=http_response&lt;br /&gt;
|p1_type=key|p1_name=request_id|p1_desc=Matches return from [[llHTTPRequest]]&lt;br /&gt;
|p2_type=integer|p2_name=status|p2_desc=HTTP code (like 404 or 200)&lt;br /&gt;
|p3_type=list|p3_name=metadata|p3_desc=List of HTTP_* constants and attributes&lt;br /&gt;
|p4_type=string|p4_name=body|p4_desc&lt;br /&gt;
|event_desc=Triggered when task receives a response to one of its [[llHTTPRequest]]&amp;lt;nowiki&amp;gt;s&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|constants={{{!}}{{Prettytable|style=margin-top:0;}}&lt;br /&gt;
{{!}}-{{Hl2}}&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; {{!}} Constant&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[HTTP_BODY_TRUNCATED]]&lt;br /&gt;
{{!}} 0&lt;br /&gt;
{{!}} integer&lt;br /&gt;
{{!}} Truncation point in bytes&lt;br /&gt;
{{!}}}&lt;br /&gt;
|spec=&amp;lt;h3&amp;gt;Status 415 &amp;quot;Unsupported or unknown Content-Type&amp;quot;&amp;lt;/h3&amp;gt;&lt;br /&gt;
The remote server did reply to your request but the Content-Type of the reply (such as XML, JSON, Atom, RSS, PLS) is not recognized by the LL server and so is not passed back to the script. You can assume that 415 means the server heard your request and did reply.&lt;br /&gt;
&amp;lt;h3&amp;gt;Status 499&amp;lt;/h3&amp;gt;&lt;br /&gt;
Besides the usual HTTP status codes, SL implements a special &#039;&#039;&#039;status&#039;&#039;&#039; code 499.  This code isn&#039;t generated by the remote web server but by SL&#039;s servers, it can indicate:&lt;br /&gt;
*Request timeout (60 seconds)&lt;br /&gt;
*SSL failure&lt;br /&gt;
*A space was present in the url (escape your URL with [[llEscapeURL]]).&lt;br /&gt;
&amp;lt;h3&amp;gt;Status 502&amp;lt;/h3&amp;gt;&lt;br /&gt;
The proxy server received an invalid response from an upstream server. This error occurs when you send an [[llHTTPRequest]] to an object in-world, and it does not reply with an [[llHTTPResponse]].&lt;br /&gt;
|caveats=*This events will be triggered in every script in the prim, not just in the [[llHTTPRequest|requesting]] script.&lt;br /&gt;
*It is &#039;&#039;not&#039;&#039; guaranteed that there will be an [[http_response]] for every [[llHTTPRequest]]().&lt;br /&gt;
**If the script moves to a different region before the remote HTTP server can respond, the response will be lost. [https://lists.secondlife.com/pipermail/secondlifescripters/2011-August/006309.html]&lt;br /&gt;
|examples=&amp;lt;lsl&amp;gt;key http_request_id;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        http_request_id = llHTTPRequest(&amp;quot;url&amp;quot;, [], &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    http_response(key request_id, integer status, list metadata, string body)&lt;br /&gt;
    {&lt;br /&gt;
        if (request_id == http_request_id)&lt;br /&gt;
        {&lt;br /&gt;
            llSetText(body, &amp;lt;0,0,1&amp;gt;, 1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To parse POST content:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
string get_post_value(string content, string returns){&lt;br /&gt;
    //This parses application/x-www-form-urlencoded POST data&lt;br /&gt;
    &lt;br /&gt;
    //For instance if the webserver posts &#039;data1=hi&amp;amp;data2=blah&#039; then &lt;br /&gt;
    //calling get_post_value(&amp;quot;data1=hi&amp;amp;data2=blah&amp;quot;,&amp;quot;data1&amp;quot;); would return &amp;quot;hi&amp;quot;&lt;br /&gt;
    //Written by MichaelRyan Allen, Unrevoked Clarity&lt;br /&gt;
&lt;br /&gt;
    list p =  llParseString2List(content,[&amp;quot;&amp;amp;&amp;quot;],[]);&lt;br /&gt;
    integer n = llGetListLength(p);&lt;br /&gt;
    integer i;&lt;br /&gt;
    list names;&lt;br /&gt;
    list values;&lt;br /&gt;
    for(i=0;i!=n;i++){&lt;br /&gt;
        list p2 =  llParseString2List(llList2String(p,i),[&amp;quot;=&amp;quot;],[]);&lt;br /&gt;
        names += llUnescapeURL(llList2String(p2,0));&lt;br /&gt;
        values += llUnescapeURL(llList2String(p2,1));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if(llListFindList(names,(list)returns) == -1){&lt;br /&gt;
        return &amp;quot;&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
        return llList2String(values,llListFindList(names,(list)returns));&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_header&lt;br /&gt;
|also_events&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llHTTPRequest]]}}&lt;br /&gt;
{{LSL DefineRow||[[llHTTPResponset]]}}&lt;br /&gt;
|also_articles&lt;br /&gt;
|also_footer&lt;br /&gt;
|notes=&lt;br /&gt;
===Parsing Problems===&lt;br /&gt;
If for some reason while using [[llHTTPRequest]]/[[http_response]] you are unable to parse a known good RSS feed or some other form of web contents, you will need to work around it outside of SecondLife. This is unlikely to change in the near future since checking the headers requires more overhead at the simulator level.&lt;br /&gt;
&lt;br /&gt;
===Unicode===&lt;br /&gt;
&lt;br /&gt;
When serving content with UTF-8 characters be sure your server sets the outgoing &amp;quot;Content-Type&amp;quot; header so that it includes &amp;quot;charset=utf-8&amp;quot; otherwise it will be interpreted incorrectly. See [http://www.w3.org/International/O-HTTP-charset W3C:Setting the HTTP charset parameter] for further details.&lt;br /&gt;
&lt;br /&gt;
===Request Headers===&lt;br /&gt;
&lt;br /&gt;
{{LSL Constants/HTTP Headers}}&lt;br /&gt;
|mode&lt;br /&gt;
|deprecated&lt;br /&gt;
|cat1=HTTP&lt;br /&gt;
|cat2=XML-RPC&lt;br /&gt;
|cat3=HTTP/Client&lt;br /&gt;
|cat4=Events/Prim&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Template:LSL_Constants_HTTP&amp;diff=1166848</id>
		<title>Template:LSL Constants HTTP</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Template:LSL_Constants_HTTP&amp;diff=1166848"/>
		<updated>2012-05-04T17:04:50Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{{!}} class=&amp;quot;sortable&amp;quot; {{Prettytable|style=margin-top:0;}}&lt;br /&gt;
{{!}}-{{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Flag&#039;&#039;&#039;&lt;br /&gt;
! title=&amp;quot;Value&amp;quot; {{!}}&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; {{!}} &#039;&#039;&#039;Value Type&#039;&#039;&#039;&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; {{!}} &#039;&#039;&#039;Default&#039;&#039;&#039;&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; {{!}} &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{LSL Const|HTTP_METHOD|integer|0}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} [[string]]&lt;br /&gt;
{{!}} &amp;quot;GET&amp;quot;&lt;br /&gt;
{{!}} &#039;GET&#039;, &#039;POST&#039;, &#039;PUT&#039; and &#039;DELETE&#039;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{LSL Const|HTTP_MIMETYPE|integer|1}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} [[string]]&lt;br /&gt;
{{!}} &amp;quot;text/plain;charset=utf-8&amp;quot;&lt;br /&gt;
{{!}} text/* MIME types should specify a charset. To emulate HTML forms use application/x-www-form-urlencoded. This allows you to set the body to a properly escaped ([[llEscapeURL]]) sequence of &amp;amp;lt;name,value&amp;amp;gt; pairs in the form var=value&amp;amp;amp;var2=value2 and have them automatically parsed by web frameworks&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{LSL Const|HTTP_BODY_MAXLENGTH|integer|2}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} [[integer]]&lt;br /&gt;
{{!}} 2048&lt;br /&gt;
{{!}} Sets the maximum (UTF-8 encoded) byte length of the HTTP body. The maximum that can be set depends upon which VM is used.&lt;br /&gt;
* &#039;&#039;&#039;[[Mono]] Max:&#039;&#039;&#039; 16384 (16 KB)&lt;br /&gt;
* &#039;&#039;&#039;[[LSO]] Max:&#039;&#039;&#039; 4096 (4 KB)&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{LSL Const|HTTP_VERIFY_CERT|integer|3}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} [[integer]] {{HoverText|boolean|TRUE or FALSE}}&lt;br /&gt;
{{!}} [[TRUE]]&lt;br /&gt;
{{!}} If [[TRUE]], the server SSL certificate must be verifiable using one of the standard certificate authorities when making HTTPS requests. If [[FALSE]], any server SSL certificate will be accepted.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{LSL Const|HTTP_VERBOSE_THROTTLE|integer|4}}&lt;br /&gt;
{{!}} {{#var:value}}&lt;br /&gt;
{{!}} [[integer]]&lt;br /&gt;
{{!}} [[TRUE]]&lt;br /&gt;
{{!}} If [[TRUE]], shout error messages to [[DEBUG_CHANNEL]] if the outgoing request rate exceeds the server limit. If [[FALSE]], the error messages are suppressed (llHTTPRequest will still return [[NULL_KEY]]).&lt;br /&gt;
{{!}}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlForceMouselook&amp;diff=1166088</id>
		<title>LlForceMouselook</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlForceMouselook&amp;diff=1166088"/>
		<updated>2012-04-22T14:24:43Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: Added a link to llGetCameraRot()&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func_id=294|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llForceMouselook&lt;br /&gt;
|p1_type=integer&lt;br /&gt;
|p1_name=mouselook&lt;br /&gt;
|p1_desc=boolean, if [[TRUE]] when an avatar sits on the prim, the avatar will be forced into [[mouselook]] mode. [[FALSE]] is the default setting and will undo a previously set [[TRUE]] or do nothing.&lt;br /&gt;
|func_footnote=A [[llSitTarget|sit target]] is not necessary for this function to work.&lt;br /&gt;
|func_desc=Sets if a sitting avatar should be forced into [[mouselook]] when they sit on this prim.&lt;br /&gt;
|return_text&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=&lt;br /&gt;
*This function has no effect on avatars already seated.&lt;br /&gt;
*The user may exit mouselook mode at any time.&lt;br /&gt;
**This can be detected by polling [[llGetAgentInfo]].&lt;br /&gt;
*There is nothing stopping someone from modifying or making a client that ignores this.&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&lt;br /&gt;
&#039;&#039;&#039;Force Mouselook on Sit&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;lsl&amp;gt;default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llForceMouselook(TRUE); // Forces sitting avatars into mouselook.&lt;br /&gt;
&lt;br /&gt;
        llForceMouselook(FALSE); // Reverts the setting to the default...&lt;br /&gt;
                                 // ...as with a newly created prim.&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llAvatarOnSitTarget]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetAgentInfo]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetCameraRot]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llSetCameraAtOffset]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llSetCameraEyeOffset]]|}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests=&lt;br /&gt;
{{LSL DefineRow||[[llForceMouseLook Test]]|}}&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|permission&lt;br /&gt;
|negative_index&lt;br /&gt;
|cat1=Sit&lt;br /&gt;
|cat2=Vehicle&lt;br /&gt;
|cat3=Camera&lt;br /&gt;
|cat4=Prim&lt;br /&gt;
|cat5=Mouselook&lt;br /&gt;
|cat6=Status&lt;br /&gt;
|cat7&lt;br /&gt;
|cat8&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlDetectedTouchUV&amp;diff=1160105</id>
		<title>LlDetectedTouchUV</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlDetectedTouchUV&amp;diff=1160105"/>
		<updated>2011-12-23T14:37:19Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: Added interval and origin of the returned value.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function/detected|index|TouchUV|simple=*}}{{LSL_Function&lt;br /&gt;
|func_id=337|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llDetectedTouchUV&lt;br /&gt;
|return_type=vector|return_text=that is the texture coordinates for where the prim was touched. The x &amp;amp; y vector positions contain the u &amp;amp; v face coordinates respectively (&#039;&#039;&#039;{{NoWrap|{{LSL_VR|u|v|0.0}}}}&#039;&#039;&#039;). Each component is in the interval [0.0, 1.0] with the origin in the bottom left corner.&lt;br /&gt;
&lt;br /&gt;
{{LSL Const|TOUCH_INVALID_TEXCOORD|vector|{{LSL_VR|-1.0|-1.0|0.0}}}} is returned when the touch UV coordinates cannot be determined. See [[#Caveats|Caveats]] for further details.&lt;br /&gt;
|p1_type=integer|p1_name=index&lt;br /&gt;
|func_footnote=For the {{LSLGC|Touch|touch}} category of events only. The prim that was touched may not be the prim receiving the event, use [[llDetectedLinkNumber]] to check for this; likewise you can use [[llDetectedTouchFace]] to determine which face was touched.&lt;br /&gt;
|func_desc&lt;br /&gt;
|spec=&lt;br /&gt;
|caveats=&lt;br /&gt;
*{{LSL Const|TOUCH_INVALID_TEXCOORD|vector|{{LSL_VR|-1.0|-1.0|0.0}}}} is returned when...&lt;br /&gt;
** The avatar&#039;s viewer does not support face touch detection.&lt;br /&gt;
*** To check if face touch detection is supported check the return of [[llDetectedTouchFace]].&lt;br /&gt;
** The touch has moved off the surface of the prim.&lt;br /&gt;
** The touch happened too close to the edge of the face to determine a location.&lt;br /&gt;
** The event triggered is not a {{LSLGC|Touch|touch}} event.&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer UV_detected)&lt;br /&gt;
    {&lt;br /&gt;
        integer i = 0;&lt;br /&gt;
        for(; i&amp;lt;UV_detected; ++i)&lt;br /&gt;
            llWhisper(0, &amp;quot;UV clicked: &amp;quot; + (string)llDetectedTouchUV(i));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        vector UV = llDetectedTouchUV(0);&lt;br /&gt;
        float U = UV.x;&lt;br /&gt;
        float V = UV.y;&lt;br /&gt;
        // Now you can report U and V separately, or you can compare them separately with IF statements.&lt;br /&gt;
        // You of course do not need to store the vector components to separate variables,&lt;br /&gt;
        // you can access them from the vector that used as an intermediate, like this:&lt;br /&gt;
        // llSay(0, (string) UV.x);&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|related&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llDetectedLinkNumber]]}}&lt;br /&gt;
{{LSL DefineRow||[[llDetectedTouchFace]]}}&lt;br /&gt;
{{LSL DefineRow||[[llDetectedTouchST]]}}&lt;br /&gt;
{{LSL DefineRow||[[llDetectedTouchPos]]}}&lt;br /&gt;
{{LSL DefineRow||[[llDetectedTouchNormal]]}}&lt;br /&gt;
{{LSL DefineRow||[[llDetectedTouchBinormal]]}}&lt;br /&gt;
|also_events=&lt;br /&gt;
{{LSL DefineRow||[[touch_start]]|}}&lt;br /&gt;
{{LSL DefineRow||[[touch]]|}}&lt;br /&gt;
{{LSL DefineRow||[[touch_end]]|}}&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|history=*Introduced in {{SVN|870|rev=92872|trunk=*|anchor=file14|date=Wednesday, 23 July 2008}}.&lt;br /&gt;
*Server support available in Second Life Server 1.24.7.98039, client support in Release Candidate viewer 1.21.4 (98167).&lt;br /&gt;
|cat1=Touch&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlDetectedTouchST&amp;diff=1160104</id>
		<title>LlDetectedTouchST</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlDetectedTouchST&amp;diff=1160104"/>
		<updated>2011-12-23T14:34:55Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function/detected|index|TouchST|simple=*}}{{LSL_Function&lt;br /&gt;
|func_id=342|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llDetectedTouchST&lt;br /&gt;
|return_type=vector|return_text=that is the surface coordinates for where the prim was touched. The x &amp;amp; y vector positions contain the horizontal (&#039;&#039;&#039;s&#039;&#039;&#039;) &amp;amp; vertical (&#039;&#039;&#039;t&#039;&#039;&#039;) face coordinates respectively (&#039;&#039;&#039;{{NoWrap|{{LSL_VR|s|t|0.0}}}}&#039;&#039;&#039;). Each component is in the interval [0.0, 1.0] with the origin in the bottom left corner.&lt;br /&gt;
&lt;br /&gt;
{{LSL Const|TOUCH_INVALID_TEXCOORD|vector|{{LSL_VR|-1.0|-1.0|0.0}}}} is returned when the surface coordinates cannot be determined. See [[#Caveats|Caveats]] for further details.&lt;br /&gt;
|p1_type=integer|p1_name=index&lt;br /&gt;
|func_footnote=For the {{LSLGC|Touch|touch}} category of events only. The prim that was touched may not be the prim receiving the event, use [[llDetectedLinkNumber]] to check for this; likewise you can use [[llDetectedTouchFace]] to determine which face was touched.&lt;br /&gt;
|func_desc&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=&lt;br /&gt;
*{{LSL Const|TOUCH_INVALID_TEXCOORD|vector|{{LSL_VR|-1.0|-1.0|0.0}}}} is returned when...&lt;br /&gt;
** The avatar&#039;s viewer does not support face touch detection.&lt;br /&gt;
*** To check if face touch detection is supported check the return of [[llDetectedTouchFace]].&lt;br /&gt;
** The touch has moved off the surface of the prim.&lt;br /&gt;
** The touch happened too close to the edge of the face to determine a location.&lt;br /&gt;
** The event triggered is not a {{LSLGC|Touch|touch}} event.&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;lsl&amp;gt;default {&lt;br /&gt;
 &lt;br /&gt;
    touch_start(integer num_detected) {&lt;br /&gt;
        integer i = 0;&lt;br /&gt;
        for(; i &amp;lt; num_detected; ++i ) {&lt;br /&gt;
            vector touchedpos = llDetectedTouchST(i);      &lt;br /&gt;
            &lt;br /&gt;
            if (llDetectedTouchFace(i) == -1) {&lt;br /&gt;
                llWhisper(0, &amp;quot;Sorry, your viewer doesn&#039;t support touched faces.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else if ( touchedpos == TOUCH_INVALID_TEXCOORD ) {&lt;br /&gt;
                llWhisper(0, &amp;quot;Sorry, the surface touch position could not be determined.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
                llWhisper(0, (string) touchedpos);&lt;br /&gt;
            }&lt;br /&gt;
        } // while ...&lt;br /&gt;
    } // touch_start&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;lsl&amp;gt;vector touchedLoc;&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
 //Draws a cross-hair at the detected Location on the detected face.&lt;br /&gt;
&lt;br /&gt;
    touch(integer num_detected) {&lt;br /&gt;
        integer i;&lt;br /&gt;
        for (i = 0; i &amp;lt; num_detected; i++) {&lt;br /&gt;
            touchedLoc = llDetectedTouchST(i); //What location has been touched?&lt;br /&gt;
            llSetPrimitiveParams([PRIM_TEXTURE, llDetectedTouchFace(i), &amp;quot;5ac7995c-4c24-8b60-ae61-6a837619dc75&amp;quot;,&lt;br /&gt;
                          &amp;lt;1.0,1.0,0.0&amp;gt;, touchedLoc, 180*DEG_TO_RAD]); //Set the Texture Location at the touched location&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Sets a grid of WIDTH by HEIGHT and returns a unique number.&lt;br /&gt;
// The cases of the grid are numbered line by line, left to right, &lt;br /&gt;
// starting from the bottom.&lt;br /&gt;
&lt;br /&gt;
integer WIDTH = 12;&lt;br /&gt;
integer HEIGHT = 12;&lt;br /&gt;
// With a grid of 12x12 (144 cases), you get a number from 0 to 143.&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        vector st = llDetectedTouchST(0);&lt;br /&gt;
        integer x = llFloor(st.x * WIDTH);&lt;br /&gt;
        integer y = llFloor(st.y * HEIGHT);&lt;br /&gt;
        integer button = (y * WIDTH) + x;        &lt;br /&gt;
        llOwnerSay(&amp;quot;(&amp;quot; + (string)x + &amp;quot;,&amp;quot; + (string)y + &amp;quot;) --&amp;gt; &amp;quot; + (string)button);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|helpers&lt;br /&gt;
|related&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llDetectedLinkNumber]]}}&lt;br /&gt;
{{LSL DefineRow||[[llDetectedTouchFace]]}}&lt;br /&gt;
{{LSL DefineRow||[[llDetectedTouchUV]]}}&lt;br /&gt;
{{LSL DefineRow||[[llDetectedTouchPos]]}}&lt;br /&gt;
{{LSL DefineRow||[[llDetectedTouchNormal]]}}&lt;br /&gt;
{{LSL DefineRow||[[llDetectedTouchBinormal]]}}&lt;br /&gt;
|also_events=&lt;br /&gt;
{{LSL DefineRow||[[touch_start]]|}}&lt;br /&gt;
{{LSL DefineRow||[[touch]]|}}&lt;br /&gt;
{{LSL DefineRow||[[touch_end]]|}}&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|history=Introduced in Viewer {{SVN|870|rev=92872|branch=Release|anchor=file14|date=Wednesday, 23 July 2008}}, Supported by Beta Server 1.24.0.93754 (Wenesday 6th August 2008), and viewer binary 1.20.15 (93532).&lt;br /&gt;
|cat1=Touch&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSetKeyframedMotion&amp;diff=1157709</id>
		<title>LlSetKeyframedMotion</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSetKeyframedMotion&amp;diff=1157709"/>
		<updated>2011-11-13T17:07:18Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func=llSetKeyframedMotion&lt;br /&gt;
|func_id=?&lt;br /&gt;
|func_desc=Specify a list of times, positions, and orientations to be followed by an object. The object will be smoothly moved between keyframes by the simulator. Collisions with other nonphysical or keyframed objects will be ignored (no script events will fire and collision processing will not occur). Collisions with physical objects will be computed and reported, but the keyframed object will be unaffected by those collisions. (The physical object will be affected, however.)&lt;br /&gt;
|func_sleep&lt;br /&gt;
|func_energy&lt;br /&gt;
&lt;br /&gt;
|func_footnote&lt;br /&gt;
|p1_type=list|p1_name=keyframes|p1_hover=Strided keyframe list of the form: [vector position, rotation orientation, float time]&lt;br /&gt;
|p1_desc=Strided keyframe list of the form:&lt;br /&gt;
* &#039;&#039;vector&#039;&#039; position (optional via KFM_TRANSLATION and KFM_DATA)&lt;br /&gt;
* &#039;&#039;rotation&#039;&#039; orientation (optional via KFM_ROTATION and KFM_DATA)&lt;br /&gt;
* &#039;&#039;float&#039;&#039; time&lt;br /&gt;
&lt;br /&gt;
Each keyframe is interpreted relative to the previous transform of the object. For example, consider the following list of keyframes: [&amp;lt;0, 0, 10&amp;gt;, [[ZERO_ROTATION]], 5, &amp;lt;0, 0, 0&amp;gt;, [[ZERO_ROTATION]], 5, &amp;lt;0, 0, -10&amp;gt;, [[ZERO_ROTATION]], 5]. This would cause the object to move up 10m over the course of 5s. It would then remain at the location for 5s before moving down 10m over the course of another 5s.&lt;br /&gt;
Time values must be greater than 0.1s.&lt;br /&gt;
Linear and angular velocities will be clamped to limits set by the simulator (values TBD).&lt;br /&gt;
An empty list will terminate any keyframed animation currently playing. &lt;br /&gt;
&lt;br /&gt;
|p2_type=list|p2_name=options|p2_desc=modifiers and future options &lt;br /&gt;
&lt;br /&gt;
|spec=&lt;br /&gt;
The following flags will be supported within the &#039;&#039;options&#039;&#039; list:&lt;br /&gt;
*KFM_MODE followed by one of: KFM_LOOP, KFM_REVERSE, KFM_FORWARD, or KFM_PING_PONG will specify the playback mode. Defaults to KFM_FORWARD. Must be specified when the keyframe list is provided.&lt;br /&gt;
*KFM_DATA followed by a bitwise combination of: KFM_TRANSLATION and KFM_ROTATION. By default both rotations and translations must be provided. If you specify one or the other, you should only include translations or rotations in your keyframe list. Must be specified at the time the keyframe list is provided.&lt;br /&gt;
*KFM_COMMAND followed by one of: KFM_CMD_STOP, KFM_CMD_PLAY, KFM_CMD_PAUSE. STOP will pause the animation AND reset it to the beginning. PAUSE will pause the animation without resetting. PLAY will resume a paused or stopped animation. &lt;br /&gt;
Note that if KFM_COMMAND is provided in the options list, it must be the only option in the list, and cannot be specified in the same function call that sets the keyframes list.&lt;br /&gt;
&lt;br /&gt;
Inter-region are supported.&lt;br /&gt;
&lt;br /&gt;
|caveats=&lt;br /&gt;
*This function can only be called on NON-physical objects. In the future it could be extended to support physical objects, but this is more complicated as collisions could prevent the object from reaching its goal positions on time.&lt;br /&gt;
*This function can only be called on the root prim of a linkset.&lt;br /&gt;
*This function requires the linkset to use the Prim Equivalency system. However, it keyframed objects will not receive the dynamics penalty and can have a physics {{HoverText|PE|Prim Equivalency}} of up to 64.&lt;br /&gt;
*llSetKeyframedMotion is implemented in terms of frames and not real time. To avoid a drift from the expected positions and rotations, use times which are integer multiples of 1/45, e.g. 20.0/45.0, 40.0/45.0, 90.0/45.0, etc.&lt;br /&gt;
*There are a few bugs in the avatar animation system that may cause strange looking animations to play when standing on a moving platform (e.g., walking in place, feet-at-pelvis). We hope to fix these in the future, but doing so is out of scope for this feature.&lt;br /&gt;
*As with dynamic objects, objects moving using this function are paused when they are selected by an avatar with adequate permissions (object owner, passenger, etc). When such an avatar deselects the object, motion resumes, even if the object had been paused using KFM_CMD_PAUSE.&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;code&amp;gt;// If your client is not mesh-aware use the following line:&lt;br /&gt;
&lt;br /&gt;
llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_PHYSICS_SHAPE_TYPE, PRIM_PHYSICS_SHAPE_CONVEX]);&lt;br /&gt;
&lt;br /&gt;
//&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;llSetKeyframedMotion([&amp;lt;0,0,10&amp;gt;, 5, &amp;lt;0,0,-10&amp;gt;, 5], [KFM_DATA, KFM_TRANSLATION, KFM_MODE, KFM_PING_PONG]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;llSetKeyframedMotion([&amp;lt;0,0,10&amp;gt;, llEuler2Rot(&amp;lt;90, 45, 180&amp;gt; * DEG_TO_RAD), 5, &amp;lt;0,0,-10&amp;gt;, llEuler2Rot(&amp;lt;270, 225, 360&amp;gt; * DEG_TO_RAD), 5], [KFM_MODE, KFM_REVERSE]);&amp;lt;/code&amp;gt;&lt;br /&gt;
|notes=&lt;br /&gt;
Potential Use Cases:&lt;br /&gt;
* Elevators&lt;br /&gt;
* Moving platforms&lt;br /&gt;
* Trains/Fixed-Track Vehicles&lt;br /&gt;
* Moving doors/walls/gates&lt;br /&gt;
* Windmills and other machines&lt;br /&gt;
&lt;br /&gt;
|cat1=Physics}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSetKeyframedMotion&amp;diff=1157708</id>
		<title>LlSetKeyframedMotion</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSetKeyframedMotion&amp;diff=1157708"/>
		<updated>2011-11-13T17:03:56Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: Added PRIM_PHYSICS_SHAPE_TYPE switch in the examples.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func=llSetKeyframedMotion&lt;br /&gt;
|func_id=?&lt;br /&gt;
|func_desc=Specify a list of times, positions, and orientations to be followed by an object. The object will be smoothly moved between keyframes by the simulator. Collisions with other nonphysical or keyframed objects will be ignored (no script events will fire and collision processing will not occur). Collisions with physical objects will be computed and reported, but the keyframed object will be unaffected by those collisions. (The physical object will be affected, however.)&lt;br /&gt;
|func_sleep&lt;br /&gt;
|func_energy&lt;br /&gt;
&lt;br /&gt;
|func_footnote&lt;br /&gt;
|p1_type=list|p1_name=keyframes|p1_hover=Strided keyframe list of the form: [vector position, rotation orientation, float time]&lt;br /&gt;
|p1_desc=Strided keyframe list of the form:&lt;br /&gt;
* &#039;&#039;vector&#039;&#039; position (optional via KFM_TRANSLATION and KFM_DATA)&lt;br /&gt;
* &#039;&#039;rotation&#039;&#039; orientation (optional via KFM_ROTATION and KFM_DATA)&lt;br /&gt;
* &#039;&#039;float&#039;&#039; time&lt;br /&gt;
&lt;br /&gt;
Each keyframe is interpreted relative to the previous transform of the object. For example, consider the following list of keyframes: [&amp;lt;0, 0, 10&amp;gt;, [[ZERO_ROTATION]], 5, &amp;lt;0, 0, 0&amp;gt;, [[ZERO_ROTATION]], 5, &amp;lt;0, 0, -10&amp;gt;, [[ZERO_ROTATION]], 5]. This would cause the object to move up 10m over the course of 5s. It would then remain at the location for 5s before moving down 10m over the course of another 5s.&lt;br /&gt;
Time values must be greater than 0.1s.&lt;br /&gt;
Linear and angular velocities will be clamped to limits set by the simulator (values TBD).&lt;br /&gt;
An empty list will terminate any keyframed animation currently playing. &lt;br /&gt;
&lt;br /&gt;
|p2_type=list|p2_name=options|p2_desc=modifiers and future options &lt;br /&gt;
&lt;br /&gt;
|spec=&lt;br /&gt;
The following flags will be supported within the &#039;&#039;options&#039;&#039; list:&lt;br /&gt;
*KFM_MODE followed by one of: KFM_LOOP, KFM_REVERSE, KFM_FORWARD, or KFM_PING_PONG will specify the playback mode. Defaults to KFM_FORWARD. Must be specified when the keyframe list is provided.&lt;br /&gt;
*KFM_DATA followed by a bitwise combination of: KFM_TRANSLATION and KFM_ROTATION. By default both rotations and translations must be provided. If you specify one or the other, you should only include translations or rotations in your keyframe list. Must be specified at the time the keyframe list is provided.&lt;br /&gt;
*KFM_COMMAND followed by one of: KFM_CMD_STOP, KFM_CMD_PLAY, KFM_CMD_PAUSE. STOP will pause the animation AND reset it to the beginning. PAUSE will pause the animation without resetting. PLAY will resume a paused or stopped animation. &lt;br /&gt;
Note that if KFM_COMMAND is provided in the options list, it must be the only option in the list, and cannot be specified in the same function call that sets the keyframes list.&lt;br /&gt;
&lt;br /&gt;
Inter-region are supported.&lt;br /&gt;
&lt;br /&gt;
|caveats=&lt;br /&gt;
*This function can only be called on NON-physical objects. In the future it could be extended to support physical objects, but this is more complicated as collisions could prevent the object from reaching its goal positions on time.&lt;br /&gt;
*This function can only be called on the root prim of a linkset.&lt;br /&gt;
*This function requires the linkset to use the Prim Equivalency system. However, it keyframed objects will not receive the dynamics penalty and can have a physics {{HoverText|PE|Prim Equivalency}} of up to 64.&lt;br /&gt;
*llSetKeyframedMotion is implemented in terms of frames and not real time. To avoid a drift from the expected positions and rotations, use times which are integer multiples of 1/45, e.g. 20.0/45.0, 40.0/45.0, 90.0/45.0, etc.&lt;br /&gt;
*There are a few bugs in the avatar animation system that may cause strange looking animations to play when standing on a moving platform (e.g., walking in place, feet-at-pelvis). We hope to fix these in the future, but doing so is out of scope for this feature.&lt;br /&gt;
*As with dynamic objects, objects moving using this function are paused when they are selected by an avatar with adequate permissions (object owner, passenger, etc). When such an avatar deselects the object, motion resumes, even if the object had been paused using KFM_CMD_PAUSE.&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;code&amp;gt;// If your client is not mesh-aware use the following line:&lt;br /&gt;
llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_PHYSICS_SHAPE_TYPE, PRIM_PHYSICS_SHAPE_CONVEX]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;llSetKeyframedMotion([&amp;lt;0,0,10&amp;gt;, 5, &amp;lt;0,0,-10&amp;gt;, 5], [KFM_DATA, KFM_TRANSLATION, KFM_MODE, KFM_PING_PONG]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;llSetKeyframedMotion([&amp;lt;0,0,10&amp;gt;, llEuler2Rot(&amp;lt;90, 45, 180&amp;gt; * DEG_TO_RAD), 5, &amp;lt;0,0,-10&amp;gt;, llEuler2Rot(&amp;lt;270, 225, 360&amp;gt; * DEG_TO_RAD), 5], [KFM_MODE, KFM_REVERSE]);&amp;lt;/code&amp;gt;&lt;br /&gt;
|notes=&lt;br /&gt;
Potential Use Cases:&lt;br /&gt;
* Elevators&lt;br /&gt;
* Moving platforms&lt;br /&gt;
* Trains/Fixed-Track Vehicles&lt;br /&gt;
* Moving doors/walls/gates&lt;br /&gt;
* Windmills and other machines&lt;br /&gt;
&lt;br /&gt;
|cat1=Physics}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSetKeyframedMotion&amp;diff=1157707</id>
		<title>LlSetKeyframedMotion</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSetKeyframedMotion&amp;diff=1157707"/>
		<updated>2011-11-13T16:58:49Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: Added time caveat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func=llSetKeyframedMotion&lt;br /&gt;
|func_id=?&lt;br /&gt;
|func_desc=Specify a list of times, positions, and orientations to be followed by an object. The object will be smoothly moved between keyframes by the simulator. Collisions with other nonphysical or keyframed objects will be ignored (no script events will fire and collision processing will not occur). Collisions with physical objects will be computed and reported, but the keyframed object will be unaffected by those collisions. (The physical object will be affected, however.)&lt;br /&gt;
|func_sleep&lt;br /&gt;
|func_energy&lt;br /&gt;
&lt;br /&gt;
|func_footnote&lt;br /&gt;
|p1_type=list|p1_name=keyframes|p1_hover=Strided keyframe list of the form: [vector position, rotation orientation, float time]&lt;br /&gt;
|p1_desc=Strided keyframe list of the form:&lt;br /&gt;
* &#039;&#039;vector&#039;&#039; position (optional via KFM_TRANSLATION and KFM_DATA)&lt;br /&gt;
* &#039;&#039;rotation&#039;&#039; orientation (optional via KFM_ROTATION and KFM_DATA)&lt;br /&gt;
* &#039;&#039;float&#039;&#039; time&lt;br /&gt;
&lt;br /&gt;
Each keyframe is interpreted relative to the previous transform of the object. For example, consider the following list of keyframes: [&amp;lt;0, 0, 10&amp;gt;, [[ZERO_ROTATION]], 5, &amp;lt;0, 0, 0&amp;gt;, [[ZERO_ROTATION]], 5, &amp;lt;0, 0, -10&amp;gt;, [[ZERO_ROTATION]], 5]. This would cause the object to move up 10m over the course of 5s. It would then remain at the location for 5s before moving down 10m over the course of another 5s.&lt;br /&gt;
Time values must be greater than 0.1s.&lt;br /&gt;
Linear and angular velocities will be clamped to limits set by the simulator (values TBD).&lt;br /&gt;
An empty list will terminate any keyframed animation currently playing. &lt;br /&gt;
&lt;br /&gt;
|p2_type=list|p2_name=options|p2_desc=modifiers and future options &lt;br /&gt;
&lt;br /&gt;
|spec=&lt;br /&gt;
The following flags will be supported within the &#039;&#039;options&#039;&#039; list:&lt;br /&gt;
*KFM_MODE followed by one of: KFM_LOOP, KFM_REVERSE, KFM_FORWARD, or KFM_PING_PONG will specify the playback mode. Defaults to KFM_FORWARD. Must be specified when the keyframe list is provided.&lt;br /&gt;
*KFM_DATA followed by a bitwise combination of: KFM_TRANSLATION and KFM_ROTATION. By default both rotations and translations must be provided. If you specify one or the other, you should only include translations or rotations in your keyframe list. Must be specified at the time the keyframe list is provided.&lt;br /&gt;
*KFM_COMMAND followed by one of: KFM_CMD_STOP, KFM_CMD_PLAY, KFM_CMD_PAUSE. STOP will pause the animation AND reset it to the beginning. PAUSE will pause the animation without resetting. PLAY will resume a paused or stopped animation. &lt;br /&gt;
Note that if KFM_COMMAND is provided in the options list, it must be the only option in the list, and cannot be specified in the same function call that sets the keyframes list.&lt;br /&gt;
&lt;br /&gt;
Inter-region are supported.&lt;br /&gt;
&lt;br /&gt;
|caveats=&lt;br /&gt;
*This function can only be called on NON-physical objects. In the future it could be extended to support physical objects, but this is more complicated as collisions could prevent the object from reaching its goal positions on time.&lt;br /&gt;
*This function can only be called on the root prim of a linkset.&lt;br /&gt;
*This function requires the linkset to use the Prim Equivalency system. However, it keyframed objects will not receive the dynamics penalty and can have a physics {{HoverText|PE|Prim Equivalency}} of up to 64.&lt;br /&gt;
*llSetKeyframedMotion is implemented in terms of frames and not real time. To avoid a drift from the expected positions and rotations, use times which are integer multiples of 1/45, e.g. 20.0/45.0, 40.0/45.0, 90.0/45.0, etc.&lt;br /&gt;
*There are a few bugs in the avatar animation system that may cause strange looking animations to play when standing on a moving platform (e.g., walking in place, feet-at-pelvis). We hope to fix these in the future, but doing so is out of scope for this feature.&lt;br /&gt;
*As with dynamic objects, objects moving using this function are paused when they are selected by an avatar with adequate permissions (object owner, passenger, etc). When such an avatar deselects the object, motion resumes, even if the object had been paused using KFM_CMD_PAUSE.&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;code&amp;gt;llSetKeyframedMotion([&amp;lt;0,0,10&amp;gt;, 5, &amp;lt;0,0,-10&amp;gt;, 5], [KFM_DATA, KFM_TRANSLATION, KFM_MODE, KFM_PING_PONG]);&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;llSetKeyframedMotion([&amp;lt;0,0,10&amp;gt;, llEuler2Rot(&amp;lt;90, 45, 180&amp;gt; * DEG_TO_RAD), 5, &amp;lt;0,0,-10&amp;gt;, llEuler2Rot(&amp;lt;270, 225, 360&amp;gt; * DEG_TO_RAD), 5], [KFM_MODE, KFM_REVERSE]);&amp;lt;/code&amp;gt;&lt;br /&gt;
|notes=&lt;br /&gt;
Potential Use Cases:&lt;br /&gt;
* Elevators&lt;br /&gt;
* Moving platforms&lt;br /&gt;
* Trains/Fixed-Track Vehicles&lt;br /&gt;
* Moving doors/walls/gates&lt;br /&gt;
* Windmills and other machines&lt;br /&gt;
&lt;br /&gt;
|cat1=Physics}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=UuLinuxTime&amp;diff=1152587</id>
		<title>UuLinuxTime</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=UuLinuxTime&amp;diff=1152587"/>
		<updated>2011-08-29T13:32:04Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header|[[:Category:LSL_User-Defined_Functions|User-Defined Functions]]|[[User:Kaluura Boa|Kaluura&#039;s User Page]]}}&lt;br /&gt;
&amp;lt;!-- please do not remove added links --&amp;gt;&lt;br /&gt;
{{void-box&lt;br /&gt;
|title=&amp;lt;div style=&amp;quot;display:none&amp;quot;&amp;gt;&amp;lt;h2&amp;gt;Summary&amp;lt;/h2&amp;gt;&amp;lt;/div&amp;gt;[[:Category:LSL_User-Defined_Functions|User-Defined Function]]: [[integer]] uuLinuxTime( [[integer]] &#039;&#039;year&#039;&#039;, [[integer]] &#039;&#039;mon&#039;&#039;, [[integer]] &#039;&#039;day&#039;&#039;, [[integer]] &#039;&#039;hour&#039;&#039;, [[integer]] &#039;&#039;min&#039;&#039;, [[integer]] &#039;&#039;sec&#039;&#039; );&lt;br /&gt;
|content=&lt;br /&gt;
Returns an integer that is the Unix time code representing the input date&lt;br /&gt;
* &#039;&#039;year&#039;&#039;&lt;br /&gt;
* &#039;&#039;mon&#039;&#039;: month&lt;br /&gt;
* &#039;&#039;day&#039;&#039;&lt;br /&gt;
* &#039;&#039;hour&#039;&#039;: hours (0 to 23)&lt;br /&gt;
* &#039;&#039;min&#039;&#039;: minutes&lt;br /&gt;
* &#039;&#039;sec&#039;&#039;: seconds&lt;br /&gt;
&lt;br /&gt;
(This function was converted to LSL from Linux kernel&#039;s sources: /usr/src/*/kernel/time.c)&lt;br /&gt;
&lt;br /&gt;
It excepts a date/time in UTC. ([[http://en.wikipedia.org/wiki/Coordinated_Universal_Time Coordinated Universal Time]])&lt;br /&gt;
* PST = UTC - 8 hours&lt;br /&gt;
* PDT = UTC - 7 hours&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;// Contributed Freely to the Public Domain without limitation.&lt;br /&gt;
// 2011 (CC0) [ http://creativecommons.org/publicdomain/zero/1.0 ]&lt;br /&gt;
// Kaluura Boa [ https://wiki.secondlife.com/wiki/User:Kaluura_Boa ]&lt;br /&gt;
//&lt;br /&gt;
integer uuLinuxTime(integer year, integer mon, integer day, integer hour, integer min, integer sec)&lt;br /&gt;
{&lt;br /&gt;
    mon -= 2;&lt;br /&gt;
    if (mon &amp;lt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        mon += 12;&lt;br /&gt;
        --year;&lt;br /&gt;
    }&lt;br /&gt;
    return ((((year/4 - year/100 + year/400 + (367*mon)/12 + day) + year*365 - 719499)*24 &lt;br /&gt;
        + hour)*60 + min)*60 + sec;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(&amp;quot;1970-01-01 00:00:00 --&amp;gt; &amp;quot; + (string)uuLinuxTime(1970, 1, 1, 0, 0, 0));&lt;br /&gt;
        llOwnerSay(&amp;quot;2005-03-18 01:58:31 --&amp;gt; &amp;quot; + (string)uuLinuxTime(2005, 3, 18, 1, 58, 31));&lt;br /&gt;
        llOwnerSay(&amp;quot;2009-02-13 23:31:30 --&amp;gt; &amp;quot; + (string)uuLinuxTime(2009, 2, 13, 23, 31, 30));&lt;br /&gt;
        llOwnerSay(&amp;quot;2038-01-19 03:14:07 --&amp;gt; &amp;quot; + (string)uuLinuxTime(2038, 1, 19, 3, 14, 7));&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{void-box&lt;br /&gt;
|title=Notes&lt;br /&gt;
|content=&lt;br /&gt;
* This function does not check if the input values are valid.&lt;br /&gt;
* Valid dates are from 1970-01-01 00:00:00 to 2038-01-19 03:14:07.&lt;br /&gt;
* Beyond this date, the returned value will be negative since LSL integers are always signed.&lt;br /&gt;
* It will also restart to zero for any date beyond 2106-02-07 06:28:15.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=UuLinuxTime&amp;diff=1152585</id>
		<title>UuLinuxTime</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=UuLinuxTime&amp;diff=1152585"/>
		<updated>2011-08-29T13:29:13Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header|[[:Category:LSL_User-Defined_Functions|User-Defined Functions]]|[[User:Kaluura Boa|Kaluura&#039;s User Page]]}}&lt;br /&gt;
&amp;lt;!-- please do not remove added links --&amp;gt;&lt;br /&gt;
{{void-box&lt;br /&gt;
|title=&amp;lt;div style=&amp;quot;display:none&amp;quot;&amp;gt;&amp;lt;h2&amp;gt;Summary&amp;lt;/h2&amp;gt;&amp;lt;/div&amp;gt;[[:Category:LSL_User-Defined_Functions|User-Defined Function]]: [[integer]] uuLinuxTime( [[integer]] &#039;&#039;year&#039;&#039;, [[integer]] &#039;&#039;mon&#039;&#039;, [[integer]] &#039;&#039;day&#039;&#039;, [[integer]] &#039;&#039;hour&#039;&#039;, [[integer]] &#039;&#039;min&#039;&#039;, [[integer]] &#039;&#039;sec&#039;&#039; );&lt;br /&gt;
|content=&lt;br /&gt;
Returns an integer that is the Unix time code representing the input date&lt;br /&gt;
* &#039;&#039;year&#039;&#039;&lt;br /&gt;
* &#039;&#039;mon&#039;&#039;: month&lt;br /&gt;
* &#039;&#039;day&#039;&#039;&lt;br /&gt;
* &#039;&#039;hour&#039;&#039;: hours (0 to 23)&lt;br /&gt;
* &#039;&#039;min&#039;&#039;: minutes&lt;br /&gt;
* &#039;&#039;sec&#039;&#039;: seconds&lt;br /&gt;
&lt;br /&gt;
(This function was converted to LSL from Linux kernel&#039;s sources: /usr/src/*/kernel/time.c)&lt;br /&gt;
&lt;br /&gt;
It excepts a date/time in UTC. ([[http://en.wikipedia.org/wiki/Coordinated_Universal_Time Coordinated Universal Time]])&lt;br /&gt;
* PST = UTC - 8 hours&lt;br /&gt;
* PDT = UTC - 7 hours&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;// Contributed Freely to the Public Domain without limitation.&lt;br /&gt;
// 2011 (CC0) [ http://creativecommons.org/publicdomain/zero/1.0 ]&lt;br /&gt;
// Kaluura Boa [ https://wiki.secondlife.com/wiki/User:Kaluura_Boa ]&lt;br /&gt;
//&lt;br /&gt;
integer uuLinuxTime(integer year, integer mon, integer day, integer hour, integer min, integer sec)&lt;br /&gt;
{&lt;br /&gt;
    mon -= 2;&lt;br /&gt;
    if (mon &amp;lt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        mon += 12;&lt;br /&gt;
        --year;&lt;br /&gt;
    }&lt;br /&gt;
    return ((((year/4 - year/100 + year/400 + (367*mon)/12 + day) + year*365 - 719499)*24 &lt;br /&gt;
        + hour)*60 + min)*60 + sec;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(&amp;quot;1970-01-01 00:00:00 --&amp;gt; &amp;quot; + (string)uuLinuxTime(1970, 1, 1, 0, 0, 0));&lt;br /&gt;
        llOwnerSay(&amp;quot;2005-03-18 02:58:31 --&amp;gt; &amp;quot; + (string)uuLinuxTime(2005, 3, 18, 1, 58, 31));&lt;br /&gt;
        llOwnerSay(&amp;quot;2009-02-13 23:31:30 --&amp;gt; &amp;quot; + (string)uuLinuxTime(2009, 2, 13, 23, 31, 30));&lt;br /&gt;
        llOwnerSay(&amp;quot;2038-01-19 03:14:07 --&amp;gt; &amp;quot; + (string)uuLinuxTime(2038, 1, 19, 3, 14, 7));&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{void-box&lt;br /&gt;
|title=Notes&lt;br /&gt;
|content=&lt;br /&gt;
* This function does not check if the input values are valid.&lt;br /&gt;
* Valid dates are from 1970-01-01 00:00:00 to 2038-01-19 03:14:07.&lt;br /&gt;
* Beyond this date, the returned value will be negative since LSL integers are always signed.&lt;br /&gt;
* It will also restart to zero for any date beyond 2106-02-07 06:28:15.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=UuLinuxTime&amp;diff=1152584</id>
		<title>UuLinuxTime</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=UuLinuxTime&amp;diff=1152584"/>
		<updated>2011-08-29T13:28:10Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header|[[:Category:LSL_User-Defined_Functions|User-Defined Functions]]|[[User:Kaluura Boa|Kaluura&#039;s User Page]]}}&lt;br /&gt;
&amp;lt;!-- please do not remove added links --&amp;gt;&lt;br /&gt;
{{void-box&lt;br /&gt;
|title=&amp;lt;div style=&amp;quot;display:none&amp;quot;&amp;gt;&amp;lt;h2&amp;gt;Summary&amp;lt;/h2&amp;gt;&amp;lt;/div&amp;gt;[[:Category:LSL_User-Defined_Functions|User-Defined Function]]: [[integer]] uuLinuxTime( [[integer]] &#039;&#039;year&#039;&#039;, [[integer]] &#039;&#039;mon&#039;&#039;, [[integer]] &#039;&#039;day&#039;&#039;, [[integer]] &#039;&#039;hour&#039;&#039;, [[integer]] &#039;&#039;min&#039;&#039;, [[integer]] &#039;&#039;sec&#039;&#039; );&lt;br /&gt;
|content=&lt;br /&gt;
Returns an integer that is the Unix time code representing the input date&lt;br /&gt;
* &#039;&#039;year&#039;&#039;&lt;br /&gt;
* &#039;&#039;mon&#039;&#039;: month&lt;br /&gt;
* &#039;&#039;day&#039;&#039;&lt;br /&gt;
* &#039;&#039;hour&#039;&#039;: hours (0 to 23)&lt;br /&gt;
* &#039;&#039;min&#039;&#039;: minutes&lt;br /&gt;
* &#039;&#039;sec&#039;&#039;: seconds&lt;br /&gt;
&lt;br /&gt;
(This function was converted to LSL from Linux kernel&#039;s source: /usr/src/*/kernel/time.c)&lt;br /&gt;
&lt;br /&gt;
It excepts a date/time in UTC. ([[http://en.wikipedia.org/wiki/Coordinated_Universal_Time Coordinated Universal Time]])&lt;br /&gt;
* PST = UTC - 8 hours&lt;br /&gt;
* PDT = UTC - 7 hours&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;// Contributed Freely to the Public Domain without limitation.&lt;br /&gt;
// 2011 (CC0) [ http://creativecommons.org/publicdomain/zero/1.0 ]&lt;br /&gt;
// Kaluura Boa [ https://wiki.secondlife.com/wiki/User:Kaluura_Boa ]&lt;br /&gt;
//&lt;br /&gt;
integer uuLinuxTime(integer year, integer mon, integer day, integer hour, integer min, integer sec)&lt;br /&gt;
{&lt;br /&gt;
    mon -= 2;&lt;br /&gt;
    if (mon &amp;lt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        mon += 12;&lt;br /&gt;
        --year;&lt;br /&gt;
    }&lt;br /&gt;
    return ((((year/4 - year/100 + year/400 + (367*mon)/12 + day) + year*365 - 719499)*24 &lt;br /&gt;
        + hour)*60 + min)*60 + sec;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(&amp;quot;1970-01-01 00:00:00 --&amp;gt; &amp;quot; + (string)uuLinuxTime(1970, 1, 1, 0, 0, 0));&lt;br /&gt;
        llOwnerSay(&amp;quot;2005-03-18 02:58:31 --&amp;gt; &amp;quot; + (string)uuLinuxTime(2005, 3, 18, 1, 58, 31));&lt;br /&gt;
        llOwnerSay(&amp;quot;2009-02-13 23:31:30 --&amp;gt; &amp;quot; + (string)uuLinuxTime(2009, 2, 13, 23, 31, 30));&lt;br /&gt;
        llOwnerSay(&amp;quot;2038-01-19 03:14:07 --&amp;gt; &amp;quot; + (string)uuLinuxTime(2038, 1, 19, 3, 14, 7));&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{void-box&lt;br /&gt;
|title=Notes&lt;br /&gt;
|content=&lt;br /&gt;
* This function does not check if the input values are valid.&lt;br /&gt;
* Valid dates are from 1970-01-01 00:00:00 to 2038-01-19 03:14:07.&lt;br /&gt;
* Beyond this date, the returned value will be negative since LSL integers are always signed.&lt;br /&gt;
* It will also restart to zero for any date beyond 2106-02-07 06:28:15.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=UuLinuxTime&amp;diff=1152582</id>
		<title>UuLinuxTime</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=UuLinuxTime&amp;diff=1152582"/>
		<updated>2011-08-29T13:26:19Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: Created page with &amp;quot;{{LSL Header|User-Defined Functions|Kaluura&amp;#039;s User Page}} &amp;lt;!-- please do not remove added links --&amp;gt; {{void-box |titl…&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header|[[:Category:LSL_User-Defined_Functions|User-Defined Functions]]|[[User:Kaluura Boa|Kaluura&#039;s User Page]]}}&lt;br /&gt;
&amp;lt;!-- please do not remove added links --&amp;gt;&lt;br /&gt;
{{void-box&lt;br /&gt;
|title=&amp;lt;div style=&amp;quot;display:none&amp;quot;&amp;gt;&amp;lt;h2&amp;gt;Summary&amp;lt;/h2&amp;gt;&amp;lt;/div&amp;gt;[[:Category:LSL_User-Defined_Functions|User-Defined Function]]: [[integer]] uuLinuxTime( [[integer]] &#039;&#039;year&#039;&#039;, [[integer]] &#039;&#039;mon&#039;&#039;, [[integer]] &#039;&#039;day&#039;&#039;, [[integer]] &#039;&#039;hour&#039;&#039;, [[integer]] &#039;&#039;min&#039;&#039;, [[integer]] &#039;&#039;sec&#039;&#039; );&lt;br /&gt;
|content=&lt;br /&gt;
Returns an integer that is the Unix time code representing the input date&lt;br /&gt;
* &#039;&#039;year&#039;&#039;&lt;br /&gt;
* &#039;&#039;mon&#039;&#039;: month&lt;br /&gt;
* &#039;&#039;day&#039;&#039;&lt;br /&gt;
* &#039;&#039;hour&#039;&#039;: hours (0 to 23)&lt;br /&gt;
* &#039;&#039;min&#039;&#039;: minutes&lt;br /&gt;
* &#039;&#039;sec&#039;&#039;: seconds&lt;br /&gt;
&lt;br /&gt;
This function was converted to LSL from Linux kernel&#039;s source: /usr/src/*/kernel/time.c&lt;br /&gt;
It excepts a date/time in UTC. ([[http://en.wikipedia.org/wiki/Coordinated_Universal_Time Coordinated Universal Time]])&lt;br /&gt;
* PST = UTC - 8 hours&lt;br /&gt;
* PDT = UTC - 7 hours&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;// Contributed Freely to the Public Domain without limitation.&lt;br /&gt;
// 2011 (CC0) [ http://creativecommons.org/publicdomain/zero/1.0 ]&lt;br /&gt;
// Kaluura Boa [ https://wiki.secondlife.com/wiki/User:Kaluura_Boa ]&lt;br /&gt;
//&lt;br /&gt;
integer uuLinuxTime(integer year, integer mon, integer day, integer hour, integer min, integer sec)&lt;br /&gt;
{&lt;br /&gt;
    mon -= 2;&lt;br /&gt;
    if (mon &amp;lt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        mon += 12;&lt;br /&gt;
        --year;&lt;br /&gt;
    }&lt;br /&gt;
    return ((((year/4 - year/100 + year/400 + (367*mon)/12 + day) + year*365 - 719499)*24 &lt;br /&gt;
        + hour)*60 + min)*60 + sec;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(&amp;quot;1970-01-01 00:00:00 --&amp;gt; &amp;quot; + (string)uuLinuxTime(1970, 1, 1, 0, 0, 0));&lt;br /&gt;
        llOwnerSay(&amp;quot;2005-03-18 02:58:31 --&amp;gt; &amp;quot; + (string)uuLinuxTime(2005, 3, 18, 1, 58, 31));&lt;br /&gt;
        llOwnerSay(&amp;quot;2009-02-13 23:31:30 --&amp;gt; &amp;quot; + (string)uuLinuxTime(2009, 2, 13, 23, 31, 30));&lt;br /&gt;
        llOwnerSay(&amp;quot;2038-01-19 03:14:07 --&amp;gt; &amp;quot; + (string)uuLinuxTime(2038, 1, 19, 3, 14, 7));&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{void-box&lt;br /&gt;
|title=Notes&lt;br /&gt;
|content=&lt;br /&gt;
* This function does not check if the input values are valid.&lt;br /&gt;
* Valid dates are from 1970-01-01 00:00:00 to 2038-01-19 03:14:07.&lt;br /&gt;
* Beyond this date, the returned value will be negative since LSL integers are always signed.&lt;br /&gt;
* It will also restart to zero for any date beyond 2106-02-07 06:28:15.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetUnixTime&amp;diff=1152580</id>
		<title>LlGetUnixTime</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetUnixTime&amp;diff=1152580"/>
		<updated>2011-08-29T12:33:42Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Issues/SVC-6357}}{{LSL_Function&lt;br /&gt;
|func_id=316|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|sort=GetUnixTime|func=llGetUnixTime|return_type=integer&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=that is the number of seconds elapsed since 00:00 hours, Jan 1, 1970 {{Wikipedia|Coordinated_Universal_Time|UTC}} from the system clock.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=*{{Wikipedia|Year_2038_problem}}&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Reset tracker&lt;br /&gt;
integer BOOT_TIME;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        BOOT_TIME = llGetUnixTime(); &lt;br /&gt;
        llSetTimerEvent(0.1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llSetText((string)(llGetUnixTime() - BOOT_TIME) + &amp;quot; Seconds since boot.\n\n &amp;quot;, &amp;lt;1,0,0&amp;gt;, 1.0);&lt;br /&gt;
        llSetTimerEvent(1);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers=&lt;br /&gt;
=== Helper Functions ===&lt;br /&gt;
* [[Unix2StampLst]] - Converts Unix Time stamp to a list. ex: 1234567890 to [2009, 2, 13, 23, 31, 30]&lt;br /&gt;
* [[Stamp2UnixInt]] - Converts date to Unix Time stamp. ex: [2009, 2, 13, 23, 31, 30] to 1234567890&lt;br /&gt;
* [[uuLinuxTime]] - Converts date to Unix Time stamp (from Linux kernel&#039;s sources)&lt;br /&gt;
* [[Unix2WeekdayStr]] - Gets the weekday from a Unix Time stamp. ex: &amp;quot;Friday&amp;quot; from 1234567890&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetTimestamp]]|Human Readable UTC Date and time}}&lt;br /&gt;
{{LSL DefineRow||[[llGetDate]]|Human Readable UTC Date}}&lt;br /&gt;
{{LSL DefineRow||[[llGetTime]]|Elapsed script-time.}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests={{LSL DefineRow||[[llGetUnixTime/test|llGetUnixTime Conformance Test]]|}}&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|permission&lt;br /&gt;
|negative_index&lt;br /&gt;
|cat1=Time&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Kaluura_Boa&amp;diff=1152578</id>
		<title>User:Kaluura Boa</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Kaluura_Boa&amp;diff=1152578"/>
		<updated>2011-08-29T12:20:25Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{void-box&lt;br /&gt;
|title=About:&lt;br /&gt;
|content=&lt;br /&gt;
* Think of Attila when you read my name. Where I step, the scripting problems never grow back.&lt;br /&gt;
* And I&#039;m not a furry, just a cat...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{void-box&lt;br /&gt;
|title=More to come:&lt;br /&gt;
|content=&lt;br /&gt;
One day, I&#039;ll take the time...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripter]]&lt;br /&gt;
[[Category:Builder]]&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Kaluura_Boa&amp;diff=1152577</id>
		<title>User:Kaluura Boa</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Kaluura_Boa&amp;diff=1152577"/>
		<updated>2011-08-29T12:16:06Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{void-box&lt;br /&gt;
|title=About:&lt;br /&gt;
|content=&lt;br /&gt;
☢ Think of Attila when you read my name. Where I step, the scripting problems never grow back. ☢&lt;br /&gt;
&lt;br /&gt;
⚠ And I&#039;m not a furry, just a cat...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{void-box&lt;br /&gt;
|title=More to come:&lt;br /&gt;
|content=&lt;br /&gt;
One day, I&#039;ll take the time...&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Kaluura_Boa&amp;diff=1152576</id>
		<title>User:Kaluura Boa</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Kaluura_Boa&amp;diff=1152576"/>
		<updated>2011-08-29T12:14:32Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: Created page with &amp;quot;{{void-box |title=About: |content= ☢ Think of Attila when you read my name. Where I step, the scripting problems never grow back. ☢  ⚠ And I&amp;#039;m not a furry, just a cat... }}…&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{void-box&lt;br /&gt;
|title=About:&lt;br /&gt;
|content=&lt;br /&gt;
☢ Think of Attila when you read my name. Where I step, the scripting problems never grow back. ☢&lt;br /&gt;
&lt;br /&gt;
⚠ And I&#039;m not a furry, just a cat...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{void-box&lt;br /&gt;
|title=More to come&lt;br /&gt;
|content=&lt;br /&gt;
One day, I&#039;ll take the time...&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetUnixTime&amp;diff=1152575</id>
		<title>LlGetUnixTime</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetUnixTime&amp;diff=1152575"/>
		<updated>2011-08-29T11:47:22Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: To undo the corrections on the helper functions examples&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Issues/SVC-6357}}{{LSL_Function&lt;br /&gt;
|func_id=316|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|sort=GetUnixTime|func=llGetUnixTime|return_type=integer&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=that is the number of seconds elapsed since 00:00 hours, Jan 1, 1970 {{Wikipedia|Coordinated_Universal_Time|UTC}} from the system clock.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=*{{Wikipedia|Year_2038_problem}}&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Reset tracker&lt;br /&gt;
integer BOOT_TIME;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        BOOT_TIME = llGetUnixTime(); &lt;br /&gt;
        llSetTimerEvent(0.1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llSetText((string)(llGetUnixTime() - BOOT_TIME) + &amp;quot; Seconds since boot.\n\n &amp;quot;, &amp;lt;1,0,0&amp;gt;, 1.0);&lt;br /&gt;
        llSetTimerEvent(1);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers=&lt;br /&gt;
=== Helper Functions ===&lt;br /&gt;
* [[Unix2StampLst]] - Converts Unix Time stamp to a list. ex: 1234567890 to [2009, 2, 13, 23, 31, 30]&lt;br /&gt;
* [[Stamp2UnixInt]] - Converts date to Unix Time stamp. ex: [2009, 2, 13, 23, 31, 30] to 1234567890&lt;br /&gt;
* [[Unix2WeekdayStr]] - Gets the weekday from a Unix Time stamp. ex: &amp;quot;Friday&amp;quot; from 1234567890&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetTimestamp]]|Human Readable UTC Date and time}}&lt;br /&gt;
{{LSL DefineRow||[[llGetDate]]|Human Readable UTC Date}}&lt;br /&gt;
{{LSL DefineRow||[[llGetTime]]|Elapsed script-time.}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests={{LSL DefineRow||[[llGetUnixTime/test|llGetUnixTime Conformance Test]]|}}&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|permission&lt;br /&gt;
|negative_index&lt;br /&gt;
|cat1=Time&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetUnixTime&amp;diff=1152574</id>
		<title>LlGetUnixTime</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetUnixTime&amp;diff=1152574"/>
		<updated>2011-08-29T11:15:21Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: Correction of the examples of the helper functions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Issues/SVC-6357}}{{LSL_Function&lt;br /&gt;
|func_id=316|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|sort=GetUnixTime|func=llGetUnixTime|return_type=integer&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=that is the number of seconds elapsed since 00:00 hours, Jan 1, 1970 {{Wikipedia|Coordinated_Universal_Time|UTC}} from the system clock.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=*{{Wikipedia|Year_2038_problem}}&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Reset tracker&lt;br /&gt;
integer BOOT_TIME;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        BOOT_TIME = llGetUnixTime(); &lt;br /&gt;
        llSetTimerEvent(0.1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llSetText((string)(llGetUnixTime() - BOOT_TIME) + &amp;quot; Seconds since boot.\n\n &amp;quot;, &amp;lt;1,0,0&amp;gt;, 1.0);&lt;br /&gt;
        llSetTimerEvent(1);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers=&lt;br /&gt;
=== Helper Functions ===&lt;br /&gt;
* [[Unix2StampLst]] - Converts Unix Time stamp to a list. ex: 1234567890 to [2009, 2, 14, 0, 31, 30]&lt;br /&gt;
* [[Stamp2UnixInt]] - Converts date to Unix Time stamp. ex: [2009, 2, 14, 0, 31, 30] to 1234567890&lt;br /&gt;
* [[Unix2WeekdayStr]] - Gets the weekday from a Unix Time stamp. ex: &amp;quot;Saturday&amp;quot; from 1234567890&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetTimestamp]]|Human Readable UTC Date and time}}&lt;br /&gt;
{{LSL DefineRow||[[llGetDate]]|Human Readable UTC Date}}&lt;br /&gt;
{{LSL DefineRow||[[llGetTime]]|Elapsed script-time.}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests={{LSL DefineRow||[[llGetUnixTime/test|llGetUnixTime Conformance Test]]|}}&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|permission&lt;br /&gt;
|negative_index&lt;br /&gt;
|cat1=Time&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetUnixTime&amp;diff=1152573</id>
		<title>LlGetUnixTime</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetUnixTime&amp;diff=1152573"/>
		<updated>2011-08-29T11:08:22Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: Added: Helper function Stamp2UnixInt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Issues/SVC-6357}}{{LSL_Function&lt;br /&gt;
|func_id=316|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|sort=GetUnixTime|func=llGetUnixTime|return_type=integer&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=that is the number of seconds elapsed since 00:00 hours, Jan 1, 1970 {{Wikipedia|Coordinated_Universal_Time|UTC}} from the system clock.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=*{{Wikipedia|Year_2038_problem}}&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Reset tracker&lt;br /&gt;
integer BOOT_TIME;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        BOOT_TIME = llGetUnixTime(); &lt;br /&gt;
        llSetTimerEvent(0.1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llSetText((string)(llGetUnixTime() - BOOT_TIME) + &amp;quot; Seconds since boot.\n\n &amp;quot;, &amp;lt;1,0,0&amp;gt;, 1.0);&lt;br /&gt;
        llSetTimerEvent(1);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers=&lt;br /&gt;
=== Helper Functions ===&lt;br /&gt;
* [[Unix2StampLst]] - Converts Unix Time stamp to a list. ex: 1234567890 to [2009, 2, 14, 0, 31, 30]&lt;br /&gt;
* [[Stamp2UnixInt]] - Converts date to Unix Time stamp. ex: [2009, 2, 14, 0, 31, 30] to 1234567890&lt;br /&gt;
* [[Unix2WeekdayStr]] - Gets the weekday from a Unix Time stamp. ex: &amp;quot;Friday&amp;quot; from 1234567890&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetTimestamp]]|Human Readable UTC Date and time}}&lt;br /&gt;
{{LSL DefineRow||[[llGetDate]]|Human Readable UTC Date}}&lt;br /&gt;
{{LSL DefineRow||[[llGetTime]]|Elapsed script-time.}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests={{LSL DefineRow||[[llGetUnixTime/test|llGetUnixTime Conformance Test]]|}}&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|permission&lt;br /&gt;
|negative_index&lt;br /&gt;
|cat1=Time&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetObjectPrimCount&amp;diff=1150444</id>
		<title>LlGetObjectPrimCount</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetObjectPrimCount&amp;diff=1150444"/>
		<updated>2011-08-04T07:53:21Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-1={{LSL_Function/prim|prim|sim=*|}}&lt;br /&gt;
|func_id=323|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llGetObjectPrimCount&lt;br /&gt;
|return_type=integer&lt;br /&gt;
|p1_type=key|p1_name=prim|p1_desc&lt;br /&gt;
|func_footnote=Avatars sitting on the object are not counted{{Footnote|[[llGetNumberOfPrims]] on the other hand does count avatars sitting on the object.|llGetNumberOfPrims on the other hand does count avatars sitting on the object.}}. Zero is returned if &#039;&#039;&#039;prim&#039;&#039;&#039; {{HoverText|(1)|is not found}} is not found, {{HoverText|(2)|is part of an attachment}} is part of an attachment{{Footnote|Weather the attachment exception is a bug or a feature is unclear.|handle=attachment}}, or {{HoverText|(3)|is not a prim}} is not a prim.&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=that is the total number of prims in the object that contains &#039;&#039;&#039;prim&#039;&#039;&#039;.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=&lt;br /&gt;
* This cannot be used to detect if an avatar is seated (by checking for a non-zero return), use [[llGetAgentInfo]] instead.&lt;br /&gt;
* The prim count for attachments are not returned{{Footnote|handle=attachment}}. If possible use [[llGetNumberOfPrims]] instead.&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;lsl&amp;gt;default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer num)&lt;br /&gt;
    {&lt;br /&gt;
        integer prims = llGetObjectPrimCount(llGetKey());&lt;br /&gt;
        if (prims == 0)&lt;br /&gt;
        {&lt;br /&gt;
            // llGetObjectPrimCount returns zero for attachments.&lt;br /&gt;
            prims = llGetNumberOfPrims();&lt;br /&gt;
            // Avatars can&#039;t sit on attachments so this is ok.&lt;br /&gt;
        }&lt;br /&gt;
        llOwnerSay(&amp;quot;This object has &amp;quot;&lt;br /&gt;
                    + (string)prims&lt;br /&gt;
                    + &amp;quot; prims and &amp;quot;&lt;br /&gt;
                    + (string)(llGetNumberOfPrims() - prims)&lt;br /&gt;
                    + &amp;quot; avatars.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetNumberOfPrims]]|Returns the number of prims in the current object.}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Object&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetObjectPrimCount&amp;diff=1150443</id>
		<title>LlGetObjectPrimCount</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetObjectPrimCount&amp;diff=1150443"/>
		<updated>2011-08-04T07:52:43Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-1={{LSL_Function/prim|prim|sim=*|}}&lt;br /&gt;
|func_id=323|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llGetObjectPrimCount&lt;br /&gt;
|return_type=integer&lt;br /&gt;
|p1_type=key|p1_name=prim|p1_desc&lt;br /&gt;
|func_footnote=Avatars sitting on the object are not counted{{Footnote|[[llGetNumberOfPrims]] on the other hand does count avatars sitting on the object.|llGetNumberOfPrims on the other hand does count avatars sitting on the object.}}. Zero is returned if &#039;&#039;&#039;prim&#039;&#039;&#039; {{HoverText|(1)|is not found}} is not found, {{HoverText|(2)|is part of an attachment}} is part of an attachment{{Footnote|Weather the attachment exception is a bug or a feature is unclear.|handle=attachment}}, or {{HoverText|(3)|is not a prim}} is not a prim.&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=that is the total number of prims in the object that contains &#039;&#039;&#039;prim&#039;&#039;&#039;.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=&lt;br /&gt;
* This cannot be used to detect if an avatar is seated (by checking for a non-zero return), use [[llGetAgentInfo]] instead.&lt;br /&gt;
* The prim count for attachments are not returned{{Footnote|handle=attachment}}. If possible use [[llGetNumberOfPrims]] instead.&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;&amp;lt;lsl&amp;gt;default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer num)&lt;br /&gt;
    {&lt;br /&gt;
        integer prims = llGetObjectPrimCount(llGetKey());&lt;br /&gt;
        if (prims == 0)&lt;br /&gt;
        {&lt;br /&gt;
            // llGetObjectPrimCount returns zero for attachments.&lt;br /&gt;
            prims = llGetNumberOfPrims();&lt;br /&gt;
            // Avatars can&#039;t sit on attachments so this is ok.&lt;br /&gt;
        }&lt;br /&gt;
        llOwnerSay(&amp;quot;This object has &amp;quot;&lt;br /&gt;
                    + (string)prims&lt;br /&gt;
                    + &amp;quot; prims and &amp;quot;&lt;br /&gt;
                    + (string)(llGetNumberOfPrims() - prims)&lt;br /&gt;
                    + &amp;quot; avatars.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetNumberOfPrims]]|Returns the number of prims in the current object.}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Object&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetNumberOfPrims&amp;diff=1150442</id>
		<title>LlGetNumberOfPrims</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetNumberOfPrims&amp;diff=1150442"/>
		<updated>2011-08-04T07:45:06Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: Lazy bracing fixed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func_id=275|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llGetNumberOfPrims&lt;br /&gt;
|return_type=integer&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=that is the number of prims in a link set the script is attached to.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=*The number of prims returned also includes the number of avatars sitting on the object.&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&amp;lt;lsl&amp;gt;default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay((string)llGetLinkNumber());&lt;br /&gt;
        llOwnerSay((string)llGetNumberOfPrims());&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers=&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Returns the number of prims in the object, ignoring sitted avatars&lt;br /&gt;
integer GetNumberOfPrims()&lt;br /&gt;
{&lt;br /&gt;
    if (llGetAttached())&lt;br /&gt;
    {&lt;br /&gt;
        // llGetObjectPrimCount fails on attachments, but you can&#039;t sit on an attachment&lt;br /&gt;
        return llGetNumberOfPrims();&lt;br /&gt;
    }&lt;br /&gt;
    return llGetObjectPrimCount(llGetKey());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Returns the number of agents on the object&lt;br /&gt;
integer GetNumberOfAgents()&lt;br /&gt;
{&lt;br /&gt;
    return llGetNumberOfPrims() - GetNumberOfPrims();&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetObjectPrimCount]]|Returns the number of prims in any object.}}&lt;br /&gt;
{{LSL DefineRow||[[llGetLinkNumber]]|Returns the link number of the prim the script is in.}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Link&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlAvatarOnSitTarget&amp;diff=1150441</id>
		<title>LlAvatarOnSitTarget</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlAvatarOnSitTarget&amp;diff=1150441"/>
		<updated>2011-08-04T07:32:19Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: Double-checked, triple-checked!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function|func_id=239|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llAvatarOnSitTarget&lt;br /&gt;
|return_type=key&lt;br /&gt;
|return_text=that is the [[UUID]] of the user seated on the prim.&lt;br /&gt;
|func_footnote=If the prim lacks a [[llSitTarget|sit target]] or there is no avatar sitting on the prim, then {{LSL Const|NULL_KEY|key|&amp;amp;quot;00000000-0000-0000-0000-000000000000&amp;amp;quot;|c=Evaluates to false in conditionals just like invalid keys.}} is returned.&lt;br /&gt;
|caveats=*A prim does not have a sit target unless [[llSitTarget]] has been called with a &#039;&#039;&#039;nonzero&#039;&#039;&#039; vector as the first argument.&lt;br /&gt;
*If the prim lacks a sit target or the avatar is seated upon a different prim, the only way to determine how many and which avatars are seated upon the object is to scan the link set (for an example of this, see [[llGetNumberOfPrims#Useful_Snippets|llGetNumberOfPrims]]).&lt;br /&gt;
|spec&lt;br /&gt;
|examples=&amp;lt;lsl&amp;gt;default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // set sit target, otherwise this will not work &lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, 0.1&amp;gt;, ZERO_ROTATION);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        { &lt;br /&gt;
            key av = llAvatarOnSitTarget();&lt;br /&gt;
            if (av) // evaluated as true if key is valid and not NULL_KEY&lt;br /&gt;
            {&lt;br /&gt;
                llSay(0, &amp;quot;Hello &amp;quot; + llKey2Name(av) + &amp;quot;, thank you for sitting down&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers=&amp;lt;lsl&amp;gt;//Gets the link number of a seated avatar&lt;br /&gt;
integer GetAgentLinkNumber(key avatar)&lt;br /&gt;
{&lt;br /&gt;
    integer link_num = llGetNumberOfPrims();&lt;br /&gt;
    while (link_num &amp;gt; 1) // Check only child prims.&lt;br /&gt;
    {&lt;br /&gt;
        if (llGetLinkKey(link_num) == avatar) // If it is the avatar we want&lt;br /&gt;
        {&lt;br /&gt;
            return link_num; // then return the link number&lt;br /&gt;
        }&lt;br /&gt;
        --link_num; // else go on with next child.&lt;br /&gt;
    }&lt;br /&gt;
    // Avatar wasn&#039;t found&lt;br /&gt;
    return FALSE; // 0 (zero) for easy testing.&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|related&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events={{LSL DefineRow||[[changed]]|}}&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llSitTarget]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetLinkKey]]}}&lt;br /&gt;
|also_articles={{LSL DefineRow||[[CHANGED_LINK]]|}}&lt;br /&gt;
|notes=The position of an avatar on a sit target can be determined with the use of [[llGetObjectDetails]] (see [[llSitTarget#Useful_Snippets|llSitTarget]] for an example).&lt;br /&gt;
|cat1=Avatar&lt;br /&gt;
|cat2=Prim&lt;br /&gt;
|cat3=Sit&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlAvatarOnSitTarget&amp;diff=1150440</id>
		<title>LlAvatarOnSitTarget</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlAvatarOnSitTarget&amp;diff=1150440"/>
		<updated>2011-08-04T07:29:32Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: Grumble, tabs, grumble, whitespaces, grumble...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function|func_id=239|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llAvatarOnSitTarget&lt;br /&gt;
|return_type=key&lt;br /&gt;
|return_text=that is the [[UUID]] of the user seated on the prim.&lt;br /&gt;
|func_footnote=If the prim lacks a [[llSitTarget|sit target]] or there is no avatar sitting on the prim, then {{LSL Const|NULL_KEY|key|&amp;amp;quot;00000000-0000-0000-0000-000000000000&amp;amp;quot;|c=Evaluates to false in conditionals just like invalid keys.}} is returned.&lt;br /&gt;
|caveats=*A prim does not have a sit target unless [[llSitTarget]] has been called with a &#039;&#039;&#039;nonzero&#039;&#039;&#039; vector as the first argument.&lt;br /&gt;
*If the prim lacks a sit target or the avatar is seated upon a different prim, the only way to determine how many and which avatars are seated upon the object is to scan the link set (for an example of this, see [[llGetNumberOfPrims#Useful_Snippets|llGetNumberOfPrims]]).&lt;br /&gt;
|spec&lt;br /&gt;
|examples=&amp;lt;lsl&amp;gt;default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // set sit target, otherwise this will not work &lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, 0.1&amp;gt;, ZERO_ROTATION);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        { &lt;br /&gt;
            key av = llAvatarOnSitTarget();&lt;br /&gt;
            if (av) // evaluated as true if key is valid and not NULL_KEY&lt;br /&gt;
            {&lt;br /&gt;
                llSay(0, &amp;quot;Hello &amp;quot; + llKey2Name(av) + &amp;quot;, thank you for sitting down&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers=&amp;lt;lsl&amp;gt;//Gets the link number of a seated avatar&lt;br /&gt;
integer GetAgentLinkNumber(key avatar)&lt;br /&gt;
{&lt;br /&gt;
    integer link_num = llGetNumberOfPrims();&lt;br /&gt;
    while (link_num &amp;gt; 1) // Check only child prims.&lt;br /&gt;
    {&lt;br /&gt;
    if (llGetLinkKey(link_num) == avatar) // If it is the avatar we want&lt;br /&gt;
        {&lt;br /&gt;
        return link_num; // then return the link number&lt;br /&gt;
        }&lt;br /&gt;
        --link_num; // else go on with next child.&lt;br /&gt;
    }&lt;br /&gt;
    // Avatar wasn&#039;t found&lt;br /&gt;
    return FALSE; // 0 (zero) for easy testing.&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|related&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events={{LSL DefineRow||[[changed]]|}}&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llSitTarget]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetLinkKey]]}}&lt;br /&gt;
|also_articles={{LSL DefineRow||[[CHANGED_LINK]]|}}&lt;br /&gt;
|notes=The position of an avatar on a sit target can be determined with the use of [[llGetObjectDetails]] (see [[llSitTarget#Useful_Snippets|llSitTarget]] for an example).&lt;br /&gt;
|cat1=Avatar&lt;br /&gt;
|cat2=Prim&lt;br /&gt;
|cat3=Sit&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlAvatarOnSitTarget&amp;diff=1150439</id>
		<title>LlAvatarOnSitTarget</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlAvatarOnSitTarget&amp;diff=1150439"/>
		<updated>2011-08-04T07:27:14Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: De-optimization of the helper script&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function|func_id=239|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llAvatarOnSitTarget&lt;br /&gt;
|return_type=key&lt;br /&gt;
|return_text=that is the [[UUID]] of the user seated on the prim.&lt;br /&gt;
|func_footnote=If the prim lacks a [[llSitTarget|sit target]] or there is no avatar sitting on the prim, then {{LSL Const|NULL_KEY|key|&amp;amp;quot;00000000-0000-0000-0000-000000000000&amp;amp;quot;|c=Evaluates to false in conditionals just like invalid keys.}} is returned.&lt;br /&gt;
|caveats=*A prim does not have a sit target unless [[llSitTarget]] has been called with a &#039;&#039;&#039;nonzero&#039;&#039;&#039; vector as the first argument.&lt;br /&gt;
*If the prim lacks a sit target or the avatar is seated upon a different prim, the only way to determine how many and which avatars are seated upon the object is to scan the link set (for an example of this, see [[llGetNumberOfPrims#Useful_Snippets|llGetNumberOfPrims]]).&lt;br /&gt;
|spec&lt;br /&gt;
|examples=&amp;lt;lsl&amp;gt;default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // set sit target, otherwise this will not work &lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, 0.1&amp;gt;, ZERO_ROTATION);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        { &lt;br /&gt;
            key av = llAvatarOnSitTarget();&lt;br /&gt;
            if (av) // evaluated as true if key is valid and not NULL_KEY&lt;br /&gt;
            {&lt;br /&gt;
                llSay(0, &amp;quot;Hello &amp;quot; + llKey2Name(av) + &amp;quot;, thank you for sitting down&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers=&amp;lt;lsl&amp;gt;//Gets the link number of a seated avatar&lt;br /&gt;
integer GetAgentLinkNumber(key avatar)&lt;br /&gt;
{&lt;br /&gt;
    integer link_num = llGetNumberOfPrims();&lt;br /&gt;
	while (link_num &amp;gt; 1) // Check only child prims.&lt;br /&gt;
	{&lt;br /&gt;
		if (llGetLinkKey(link_num) == avatar) // If it is the avatar we want&lt;br /&gt;
		{&lt;br /&gt;
			return link_num; // then return the link number&lt;br /&gt;
		}&lt;br /&gt;
		--link_num; // else go on with next child.&lt;br /&gt;
	}&lt;br /&gt;
	// Avatar wasn&#039;t found&lt;br /&gt;
    return FALSE; // 0 (zero) for easy testing.&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|related&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events={{LSL DefineRow||[[changed]]|}}&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llSitTarget]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetLinkKey]]}}&lt;br /&gt;
|also_articles={{LSL DefineRow||[[CHANGED_LINK]]|}}&lt;br /&gt;
|notes=The position of an avatar on a sit target can be determined with the use of [[llGetObjectDetails]] (see [[llSitTarget#Useful_Snippets|llSitTarget]] for an example).&lt;br /&gt;
|cat1=Avatar&lt;br /&gt;
|cat2=Prim&lt;br /&gt;
|cat3=Sit&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlHTTPResponse&amp;diff=1150438</id>
		<title>LlHTTPResponse</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlHTTPResponse&amp;diff=1150438"/>
		<updated>2011-08-04T06:40:49Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func_id=348|func_sleep=0.0|func_energy=10.0|mode&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 Status (200, 400, 404, etc)&lt;br /&gt;
|p3_type=string|p3_name=body|p3_desc=Contents of the response.&lt;br /&gt;
|func_footnote=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;
|func_desc=Responds to &#039;&#039;&#039;request_id&#039;&#039;&#039; with &#039;&#039;&#039;status&#039;&#039;&#039; and &#039;&#039;&#039;body&#039;&#039;&#039;.&lt;br /&gt;
|return_text&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=* This call must be made by the script containing the [[http_request]] event where the &#039;&#039;&#039;request_id&#039;&#039;&#039; was received.&lt;br /&gt;
* If &#039;&#039;&#039;body&#039;&#039;&#039; content greater than 2048 bytes, sent in response to [[llHTTPRequest]], will be truncated to 2048 bytes by [[http_response]] in the receiving script&lt;br /&gt;
** This limit does not apply to shared media {{HoverText|MOAP|Media On A Prim}} &lt;br /&gt;
|constants&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;lsl&amp;gt;key url_request;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        url_request = llRequestURL();&lt;br /&gt;
    }&lt;br /&gt;
    http_request(key id, string method, string body)&lt;br /&gt;
    {&lt;br /&gt;
        if (url_request == id)&lt;br /&gt;
        {&lt;br /&gt;
            url_request = &amp;quot;&amp;quot;;&lt;br /&gt;
            if (method == URL_REQUEST_GRANTED)&lt;br /&gt;
            {&lt;br /&gt;
                llOwnerSay(&amp;quot;URL: &amp;quot; + body);&lt;br /&gt;
            }&lt;br /&gt;
            else if (method == URL_REQUEST_DENIED)&lt;br /&gt;
            {&lt;br /&gt;
                llOwnerSay(&amp;quot;Something went wrong, no url. &amp;quot; + body);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llHTTPResponse(id, 200, body);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetFreeURLs]]}}&lt;br /&gt;
{{LSL DefineRow||[[llRequestURL]]}}&lt;br /&gt;
{{LSL DefineRow||[[llRequestSecureURL]]}}&lt;br /&gt;
{{LSL DefineRow||[[llReleaseURL]]}}&lt;br /&gt;
{{LSL DefineRow||[[llGetHTTPHeader]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events=&lt;br /&gt;
{{LSL DefineRow||[[http_request]]}}&lt;br /&gt;
|also_articles=&lt;br /&gt;
{{LSL DefineRow||[[LSL http server]]}}&lt;br /&gt;
|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>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Guide_to_Jobs_in_Second_Life&amp;diff=1149993</id>
		<title>Guide to Jobs in Second Life</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Guide_to_Jobs_in_Second_Life&amp;diff=1149993"/>
		<updated>2011-08-01T10:27:54Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: Correction of the bad wording of the scripter paragraph.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{KBmaster}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{RightToc}}Second Life is somewhat like an [http://en.wikipedia.org/wiki/MMORPG MMORPG] in the sense that you need skills to get a job -- or rather, make a living in Second Life -- but, unlike MMORPGs, the skills you need are your own real life skills!&lt;br /&gt;
&lt;br /&gt;
So: There are no buttons to press in dialog boxes that make you &amp;quot;instantly&amp;quot; upgrade an artificial skill that will bump your character into the world of professional services. Instead, you have to apply your own real life skills in Second Life in order to succeed. In this article, we&#039;ll try to cover a few different types of jobs.&lt;br /&gt;
&lt;br /&gt;
{{KBnote|1= This article cannot cover &#039;&#039;every&#039;&#039; job or type of job available in Second Life. As is true in real life, the variety of employment you can find is potentially vast and unknowable.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Unskilled Jobs=&lt;br /&gt;
&lt;br /&gt;
Unskilled jobs are those that don&#039;t require any &amp;quot;outside&amp;quot; skill (i.e. Real-life-related) to be hired. Unsurprisingly, there aren&#039;t many around, and they don&#039;t pay very well.&lt;br /&gt;
&lt;br /&gt;
==Dancer==&lt;br /&gt;
&lt;br /&gt;
The first type of unskilled job is the night club dancer. Since club owners rely on traffic -- through a complex formula that converts the time and number of people inside their club for a period of time into a popularity rating -- it&#039;s natural for them to hire people to attract these crowds and make sure they stay there as long as possible. Dancers are one way to do that.&lt;br /&gt;
&lt;br /&gt;
To become a dancer, you have three alternatives:&lt;br /&gt;
&lt;br /&gt;
* Sometimes, jobs are offered on the [https://blogs.secondlife.com/community/commerce/employment?view=discussions Employment section] of the forums. You can browse the forum groups to see if someone is hiring.&lt;br /&gt;
* Some clubs sometimes announce special events just to hire dancers. This has become slightly more rare in later months, so perhaps you should try one of the other ways.&lt;br /&gt;
* Go to a club you like, try to get in touch with a club owner, and ask him if a job is available.&lt;br /&gt;
&lt;br /&gt;
Some club owners pay a fixed salary, but expect you to be at their club for a certain amount of hours per week (including mostly all announced events at the club, to get a &amp;quot;full house&amp;quot;). Others rely on tips -- either paid directly to the dancers, or through tip boxes. Some dancers also do stripping or offer escort services.&lt;br /&gt;
&lt;br /&gt;
==Model==&lt;br /&gt;
&lt;br /&gt;
Another very glamorous unskilled job is becoming a model. Hiring is done in a similar way as with dancers, but the truth is, there are not many modelling job opportunities. There are a few modelling agencies around, and clothes designers usually contact them to organize big fashion events, just as in real life. These attract very large crowds and are certainly one of the best and more fun ways to present your clothing lines to the Second Life public.&lt;br /&gt;
&lt;br /&gt;
To become a professional model, you&#039;ll have to do a serious investment in yourself. To earn a large amount of L$, you not only need a gorgeous avatar, but highly-priced items like a special skin, hair (often prim hair, which is expensive), good make-up techniques, and catwalking animations, preferably unique (thus, often you have to pay someone to create them for you). To become a famous model, expect a recurring investment in more animations. Still, the job usually pays well. And you get the glamour and fame that comes with the job.&lt;br /&gt;
&lt;br /&gt;
==Shop Attendant==&lt;br /&gt;
&lt;br /&gt;
Lately, shop attendants have become fashionable again, as a counterpoint to automated vendors. Humans always sell much better than machines, so some brands have been hiring people to do the sales for them. Sales reps have the advantage of not being tied to a specific location. An agreement is made upon sales comissions, and, if the shopowner expects you to stay at the same place for a few hours per week, they usually pay you a small salary as well.&lt;br /&gt;
&lt;br /&gt;
==Bouncer/Security Agent==&lt;br /&gt;
&lt;br /&gt;
With the recent increase of griefers inworld -- people whose source of amusement is to destroy events by disrupting them -- there has also been a rise in the market for bouncers or security agents. When someone is concentrating all of their efforts on running an event, it&#039;s always handy to have a few people around that target the griefers and make them leave the place, instead of having to deal with them as well.&lt;br /&gt;
&lt;br /&gt;
In any case -- with the occasional exception of models and [[escorts]] -- unskilled jobs don&#039;t really pay well, so lets take a look at skilled jobs.&lt;br /&gt;
&lt;br /&gt;
=Skilled Jobs=&lt;br /&gt;
&lt;br /&gt;
Skilled jobs are of two types:&lt;br /&gt;
&lt;br /&gt;
* Classical skilled jobs, where you employ one of your real life skills directly towards an activity in Second Life.&lt;br /&gt;
* Freelancers/business owners, where you bring in other skills that don&#039;t relate directly to Second Life, but which can be employed successfully to give you a steady income.&lt;br /&gt;
&lt;br /&gt;
==Builder/Modeller==&lt;br /&gt;
&lt;br /&gt;
The first job is building -- using Second Life&#039;s 3D modeling interface to create unique objects that you can sell. This is probably one area of Second Life that everybody has tried at least once: Sticking prims together to build new objects. There are several sorts of builders:&lt;br /&gt;
&lt;br /&gt;
* Architects, who specialize in building homes&lt;br /&gt;
* Furniture designers&lt;br /&gt;
* Weaponeers&lt;br /&gt;
* Vehicle designers&lt;br /&gt;
* Creators of miscellaneous objects (this may include artists, who use the 3D modeling tools of Second Life to create sculptures or similar artistic objects)&lt;br /&gt;
&lt;br /&gt;
While everybody is able to learn the 3D modeling interface of Second Life -- and there are classes teaching both beginner and advanced levels -- the truth is, to become successful in this business, you need an aesthetic sense much more than a thorough knowledge of the tools. It&#039;s not surprising that the best architects/designers in Second Life are actually architects in real life, or graphic designers, industrial designers, 3D modelers, or even people from the motion picture special effects or videogame industries. For them, Second Life is just another tool to be learned, like a different word processor for a talented writer. As soon as they grasp the way Second Life&#039;s modeling tool works, they can easily create fantastic pieces of art that they can sell very well -- much faster than someone who has no talent but has been inworld for a year or two and really knows all the tricks of the modeling interface. Technique is not a substitute for imagination, creativity, and a well-developed aesthetic sense.&lt;br /&gt;
&lt;br /&gt;
Lately, as Second Life&#039;s society complexifies, we see a specialization of builders. A talented architect probably won&#039;t design vehicles or furniture, and the reverse is also true. Some people concentrate their efforts on building tiny objects like jewelry or gadgets, and would probably do a bad job of creating a large building. If you&#039;re talented, pick up a niche in Second Life building, and focus your efforts on producing objects for that niche. Trying to compete with the well-established masters with solid reputations is very, very hard -- unless you wish to work for them instead of competing. Teams of builders work often together to meet deadlines (and also have more fun together!).&lt;br /&gt;
&lt;br /&gt;
==Texture Artist==&lt;br /&gt;
&lt;br /&gt;
Associated with builders we often see texturer artists. Due to the nature of 3D worlds, you can&#039;t really have good builds if you don&#039;t have wonderful textures, and these are much harder to do properly -- it&#039;s not a question of simply uploading a freebie texture, applying it to a building, and expecting it to work! Textures are done with external programs, like Adobe Photoshop, Paint Shop Pro, or the open-source GIMP -- you&#039;ll need to be proficient with at least one of those tools in order to create good-looking textures. Professional graphic designers or artists will have a much easier time entering the texturing market -- colleges often teach semester-long courses just on texturing. Some of the best examples in Second Life go even one step further: You create 3D models outside Second Life, apply the proper lighting to make your 3D model realistic, and grab the textures to upload them into Second Life. These kinds of builds achieve a higher level of outstanding realism.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fashion Designer==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A slightly different type of specialized texturing is clothing design. Clothes in Second Life are designed using special templates -- which you can get for free [http://secondlife.com/community/fashion.php at the Second Life web site] -- to which you apply your skills and creativity, again using an external tool like the ones mentioned before. Clothes are perhaps easier to do than textures, but to do them &#039;&#039;well&#039;&#039; takes a lot of time and patience. Simply grabbing a picture from a Web site and tweaking it in Photoshop expecting to make a lot of Linden Dollars won&#039;t work -- the highly-acclaimed top clothiers in Second Life do their own designs from scratch. They make L$ for being unique, and for the high quality of their finished work; it&#039;s very, very hard to do the seams properly (that is, aligning the front, back and sleeves), for example. People will pay a premium for &amp;quot;perfect&amp;quot; clothes, but next to nothing for crude attempts.&lt;br /&gt;
&lt;br /&gt;
As with building, clothiers are starting to specialize on certain styles. The very big brands usually have all sorts of clothes, but smaller designers concentrate on a specific niche -- say, lingerie, vampire clothing, T-shirts, or shoes. There are thousands of clothing designers in Second Life, and it&#039;s quite hard to build your reputation quickly (but there certainly are a few that succeeded). You will also need to own several shops to advertise your products -- unlike architects, who are often hired by the hour -- and sponsor some events where you can show off your new clothes lines. There are even a very few &amp;quot;real world&amp;quot; brands designing clothes for Second Life avatars, so the competition is really increasing.&lt;br /&gt;
&lt;br /&gt;
==Scripter==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
One type of job that doesn&#039;t require any external tool is scripting. Second Life has a built-in language, called Linden Scripting Language ([http://support.secondlife.com/ics/support/default.asp?deptID=4417&amp;amp;task=knowledge&amp;amp;questionID=4216 LSL]), which is used to &amp;quot;program&amp;quot; all objects to make them react to and interact with avatars and the environment. Scripting is not hard for a professional programmer -- it&#039;s just another language to be learned, and it&#039;s relatively easy to learn and master. However, in general, you don&#039;t sell scripts directly but mostly scripted objects. This means that if you can&#039;t build, you&#039;ll have to partner up with architects or builders and split the profit from scripted objects. Experienced scripters will also be very proficient in creating scripts that reduce lag (which is not obvious for a beginning scripter). If you can make a reputation by selling a few good scripted objects, it&#039;s not unusual that you may get hired as a free-lancer on a large-scale project. Remember, a large part of Second Life&#039;s population are professional programmers in real life, so this is a field with lots of competition from professionals. As usual, creativity and imagination are the key to success!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Animator==&lt;br /&gt;
&lt;br /&gt;
A type of job -- which pays well and has relatively less competition -- is the animator. Animations are done in an external program, usually Poser from Curious Labs -- an expensive, semi-professional tool which Linden Lab has favored (you can use some open-source or free tools like Blender,but you probably need to tweak the final animation in Poser to import it properly into Second Life). Poser is fun to learn and relatively easy to use for simple animations. Complex, realistic animations like walking or dancing are another matter entirely -- to get good results, you need to use a very expensive technology called &amp;quot;motion capturing,&amp;quot; involving complex devices, harnesses, and several video cameras. Not surprisingly, there are just a handful of good animators in Second Life, and they can almost make a real life living from the animations they do (one of the leading dance animators has over 10,000 happy customers, and each of his animations sells for L$350 -- many buy several!). This is a very specialized job and one that certainly has lots of room for new players!&lt;br /&gt;
&lt;br /&gt;
==Event Host==&lt;br /&gt;
&lt;br /&gt;
Event hosts are a type of job that has suffered from a big change in Second Life&#039;s economic model. To attract people to your place, the best way is to announce events in the [http://secondlife.com/events/ Events list], where everybody inworld can see the announcements. Event hosting relies upon your own real life communications skills, your ability to entertain other people and make them have fun by attending your events, and your degree of imagination in coming up with new ideas. Events can be simple things like discussions -- no need for much preparation! -- or highly complex, like a fashion show, a boxing or chess competition, or a medieval tournament. In the latter cases, this can mean coordinating a team of builders and scripters to create lots of objects that will interact with the people attending your event. Classes are also a type of event that need some preparation, as well as some experience in teaching.&lt;br /&gt;
&lt;br /&gt;
==DJ==&lt;br /&gt;
&lt;br /&gt;
A different type of event hoster enriches a certain environment. The typical example is a DJ, who streams live music into a night club. While almost anybody with a large music collection, a tool like [http://www.winamp.com/ WinAmp], and access to a streaming server like [http://www.shoutcast.com/ Shoutcast] is technically able to DJ, good DJs have a talent for entertaining people for a few hours by reacting to the audience&#039;s moods and being able to adjust the musical selection accordingly. Some DJs have their own clubs; others roam Second Life offering their talents.&lt;br /&gt;
&lt;br /&gt;
Other similar jobs include stand-up comedians or trivia event hosters.&lt;br /&gt;
&lt;br /&gt;
=Freelancers &amp;amp;amp; Entrepreneurs=&lt;br /&gt;
&lt;br /&gt;
We come now to other types of jobs that use skills not directly related to things inworld but that can be surprisingly employed to make a living.&lt;br /&gt;
&lt;br /&gt;
==Land Baron==&lt;br /&gt;
&lt;br /&gt;
The first and more obvious one is the real estate agent -- also nicknamed Land Baron by the Residents of Second Life. Land Barons buy land wholesale, either from auctions or directly, parcel it out, and announce it for resale. Sometimes they act merely as intermediaries between buyers and sellers, charging a fee. In order to make continued sales, this job requires:&lt;br /&gt;
&lt;br /&gt;
* Good taste to pick up good spots&lt;br /&gt;
* An understanding of how the market works and which plots will sell well&lt;br /&gt;
* The ability to establish an unblemished reputation&lt;br /&gt;
&lt;br /&gt;
Some Land Barons rent land instead of selling. Renting is a good choice if you don&#039;t want to pay tier, have a Basic account, or just need a temporary piece of land for some particular reason. There are basically three types of renting:&lt;br /&gt;
&lt;br /&gt;
# You can rent un-terraformed land free of buildings and set up your place however you want.&lt;br /&gt;
# You can rent some land with the buildings already set up for your use, like prefab houses.&lt;br /&gt;
# You can rent space in a mall, where get a very small place to set up a shop, and expect that the mall owner sets up events and advertising to attract people to the mall.&lt;br /&gt;
&lt;br /&gt;
==Linden Dollar Brokers==&lt;br /&gt;
&lt;br /&gt;
You also have people making a living by exchanging their L$ for real-world currency (USD$, Euros, etc), as covered by the [https://secondlife.com/currency/ Linden Dollar Exchange site]. Making a profit by buying cheap and selling high is not for the faint of heart -- you&#039;re dealing with &#039;&#039;real money&#039;&#039; and need to have a very good understanding of how a stock exchange works. Other external jobs include web sites that sell Second Life items and charge a comission on sales -- the best examples being [http://www.slexchange.com/ SL Exchange] and [http://www.secondserver.net/ Second Server] from the Gigas group. In this case, the &amp;quot;job&amp;quot; is completely out of Second Life and is just plain e-commerce, using Second Life as the marketplace but using real life tools, real life programming, and real life advertising (or discussions on the [http://forums.secondlife.com/ Second Life forums]) to promote their business.&lt;br /&gt;
&lt;br /&gt;
=Unclassified Jobs=&lt;br /&gt;
&lt;br /&gt;
Other jobs are not so clearly defined. For instance, there are all sorts of people organizing companies, groups, associations, even cartels. They have skills organizing people together. There are people using their marketing or advertising skills inworld. There are even lawyers and economists! All carve their niches in their Second Lives, using all sorts of skills they have IRL, and putting them to use. Every one of us is talented in a special way. Some of us discover new talents while inworld. The trick for having fun in Second Life, and even earning some Linden dollars while having fun, is learning about our own talents and skills, applying our imagination and creativity, and making the most of everything!&lt;br /&gt;
&lt;br /&gt;
[[Category:Getting Started]]&lt;br /&gt;
[[Category:Social]]&lt;br /&gt;
[[Category:Linden Dollars (L$)]]&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetWallclock&amp;diff=1074372</id>
		<title>LlGetWallclock</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetWallclock&amp;diff=1074372"/>
		<updated>2010-10-26T10:55:14Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func_id=81|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llGetWallclock|return_type=float&lt;br /&gt;
|func_footnote=For GMT use [[llGetGMTclock]]&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=that is the time in seconds since midnight Pacific time (PST/PDT), truncated to whole seconds.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&amp;lt;lsl&amp;gt;// Real World Sun&lt;br /&gt;
integer Flag;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        Flag = -1;&lt;br /&gt;
        llSetTimerEvent(0.1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        float time = llGetWallclock();&lt;br /&gt;
        if (Flag == -1)&lt;br /&gt;
        {&lt;br /&gt;
            llSetTimerEvent(60.0);&lt;br /&gt;
        }&lt;br /&gt;
        if (time &amp;lt; 21600)&lt;br /&gt;
        {&lt;br /&gt;
            if (Flag)&lt;br /&gt;
            {&lt;br /&gt;
                llSetText(&amp;quot;The Sun is coming! :)&amp;quot;, &amp;lt;1,1,0&amp;gt;, 1.0);&lt;br /&gt;
                Flag = 0;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (time &amp;lt; 64800)&lt;br /&gt;
        {&lt;br /&gt;
            if (Flag != 1)&lt;br /&gt;
            {&lt;br /&gt;
                llSetText(&amp;quot;Sun has risen. :(&amp;quot;, &amp;lt;1,0,0&amp;gt;, 1.0);&lt;br /&gt;
                Flag = 1;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (Flag != 2)&lt;br /&gt;
        {&lt;br /&gt;
            llSetText(&amp;quot;Goodbye Sun. :(&amp;quot;, &amp;lt;1,0,0&amp;gt;, 1.0);&lt;br /&gt;
            Flag = 2;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;// Convert to human-readable HH:MM:SS format&lt;br /&gt;
string ConvertWallclockToTime()&lt;br /&gt;
{&lt;br /&gt;
    integer now = (integer)llGetWallclock();&lt;br /&gt;
    integer seconds = now % 60;&lt;br /&gt;
    integer minutes = ((now - seconds) % 3600) / 60;&lt;br /&gt;
    integer hours = (now - minutes - seconds) / 3600;&lt;br /&gt;
    return llGetSubString(&amp;quot;0&amp;quot; + (string)hours, -2, -1) + &amp;quot;:&amp;quot; &lt;br /&gt;
        + llGetSubString(&amp;quot;0&amp;quot; + (string)minutes, -2, -1) + &amp;quot;:&amp;quot; &lt;br /&gt;
        + llGetSubString(&amp;quot;0&amp;quot; + (string)seconds, -2, -1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0, ConvertWallclockToTime());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetGMTclock]]|Seconds since midnight GMT}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|permission&lt;br /&gt;
|negative_index&lt;br /&gt;
|sort=GetWallclock&lt;br /&gt;
|cat1=Time&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetWallclock&amp;diff=1074362</id>
		<title>LlGetWallclock</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetWallclock&amp;diff=1074362"/>
		<updated>2010-10-26T10:44:52Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func_id=81|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llGetWallclock|return_type=float&lt;br /&gt;
|func_footnote=For GMT use [[llGetGMTclock]]&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=that is the time in seconds since midnight Pacific time (PST/PDT), truncated to whole seconds.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&amp;lt;lsl&amp;gt;// Real World Sun&lt;br /&gt;
integer Flag;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        Flag = -1;&lt;br /&gt;
        llSetTimerEvent(0.1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        float time = llGetWallclock();&lt;br /&gt;
        if (Flag == -1)&lt;br /&gt;
        {&lt;br /&gt;
            llSetTimerEvent(60.0);&lt;br /&gt;
        }&lt;br /&gt;
        if (time &amp;lt; 21600)&lt;br /&gt;
        {&lt;br /&gt;
            if (Flag)&lt;br /&gt;
            {&lt;br /&gt;
                llSetText(&amp;quot;The Sun is coming! :)&amp;quot;, &amp;lt;1,1,0&amp;gt;, 1.0);&lt;br /&gt;
                Flag = 0;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (time &amp;lt; 64800)&lt;br /&gt;
        {&lt;br /&gt;
            if (Flag != 1)&lt;br /&gt;
            {&lt;br /&gt;
                llSetText(&amp;quot;Sun has risen. :(&amp;quot;, &amp;lt;1,0,0&amp;gt;, 1.0);&lt;br /&gt;
                Flag = 1;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (Flag != 2)&lt;br /&gt;
        {&lt;br /&gt;
            llSetText(&amp;quot;Goodbye Sun. :(&amp;quot;, &amp;lt;1,0,0&amp;gt;, 1.0);&lt;br /&gt;
            Flag = 2;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;// Convert to human-readable HH:MM:SS format&lt;br /&gt;
string ConvertWallclockToTime(float wall_clock)&lt;br /&gt;
{&lt;br /&gt;
    integer now = (integer)wall_clock;&lt;br /&gt;
    integer seconds = now % 60;&lt;br /&gt;
    integer minutes = ((now - seconds) % 3600) / 60;&lt;br /&gt;
    integer hours = (now - minutes - seconds) / 3600;&lt;br /&gt;
    return llGetSubString(&amp;quot;0&amp;quot; + (string)hours, -2, -1) + &amp;quot;:&amp;quot; &lt;br /&gt;
        + llGetSubString(&amp;quot;0&amp;quot; + (string)minutes, -2, -1) + &amp;quot;:&amp;quot; &lt;br /&gt;
        + llGetSubString(&amp;quot;0&amp;quot; + (string)seconds, -2, -1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        ConvertWallclockToTime(llGetWallclock());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetGMTclock]]|Seconds since midnight GMT}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|permission&lt;br /&gt;
|negative_index&lt;br /&gt;
|sort=GetWallclock&lt;br /&gt;
|cat1=Time&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSameGroupOfficer&amp;diff=250662</id>
		<title>LlSameGroupOfficer</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSameGroupOfficer&amp;diff=250662"/>
		<updated>2009-02-20T08:58:40Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Function&lt;br /&gt;
|func=llSameGroupOfficer&lt;br /&gt;
|sort=SameGroupOfficer&lt;br /&gt;
|func_id|mode=request|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|return_type=integer&lt;br /&gt;
|p1_type=key&lt;br /&gt;
|p1_name=agent&lt;br /&gt;
|p1_desc=must be in the same sim and must carry the appropriate group tag&lt;br /&gt;
|func_desc&lt;br /&gt;
|func_footnote=Also returns [[TRUE]] if the object is deeded to the group in which &#039;&#039;&#039;agent&#039;&#039;&#039; is an officer&lt;br /&gt;
|return_text=boolean, that is [[TRUE]] if &#039;&#039;&#039;agent&#039;&#039;&#039; is officer in the same group than the object, otherwise [[FALSE]]&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&amp;lt;lsl&amp;gt;// Gives inventory object only to officers of the same group than the object&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer number)&lt;br /&gt;
    {&lt;br /&gt;
        do&lt;br /&gt;
        {&lt;br /&gt;
            key avatar = llDetectedKey(--number);&lt;br /&gt;
            if (llSameGroupOfficer(avatar))&lt;br /&gt;
            {&lt;br /&gt;
                llGiveInventory(avatar, llGetInventoryName(INVENTORY_OBJECT, 0));&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llSay(0, &amp;quot;You are not an officer of my group!&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }while(number);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llDetectedGroup]]|Used in conjunction with {{LSLGC|Detected|detection}} events}}&lt;br /&gt;
{{LSL DefineRow||[[llSameGroup]]}}&lt;br /&gt;
{{LSL DefineRow||[[llSameGroupOwner]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSameGroupOwner&amp;diff=250652</id>
		<title>LlSameGroupOwner</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSameGroupOwner&amp;diff=250652"/>
		<updated>2009-02-20T08:57:51Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Function&lt;br /&gt;
|func=llSameGroupOwner&lt;br /&gt;
|sort=SameGroupOwner&lt;br /&gt;
|func_id|mode=request|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|return_type=integer&lt;br /&gt;
|p1_type=key&lt;br /&gt;
|p1_name=agent&lt;br /&gt;
|p1_desc=must be in the same sim and must carry the appropriate group tag&lt;br /&gt;
|func_desc&lt;br /&gt;
|func_footnote=Also returns [[TRUE]] if the object is deeded to the group of which &#039;&#039;&#039;agent&#039;&#039;&#039; is an owner&lt;br /&gt;
|return_text=boolean, that is [[TRUE]] if &#039;&#039;&#039;agent&#039;&#039;&#039; is owner of the same group than the object, otherwise [[FALSE]]&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&amp;lt;lsl&amp;gt;// Gives inventory object only to owners of the same group than the object&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer number)&lt;br /&gt;
    {&lt;br /&gt;
        do&lt;br /&gt;
        {&lt;br /&gt;
            key avatar = llDetectedKey(--number);&lt;br /&gt;
            if (llSameGroupOwner(avatar))&lt;br /&gt;
            {&lt;br /&gt;
                llGiveInventory(avatar, llGetInventoryName(INVENTORY_OBJECT, 0));&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llSay(0, &amp;quot;You are not an owner of my group!&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }while(number);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llDetectedGroup]]|Used in conjunction with {{LSLGC|Detected|detection}} events}}&lt;br /&gt;
{{LSL DefineRow||[[llSameGroup]]}}&lt;br /&gt;
{{LSL DefineRow||[[llSameGroupOfficer]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LSL_Useful_Function_WishList&amp;diff=202163</id>
		<title>LSL Useful Function WishList</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LSL_Useful_Function_WishList&amp;diff=202163"/>
		<updated>2009-01-19T13:57:33Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header|ml=*}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
NOTE: Please also add your feature requests to the [http://jira.secondlife.com/ JIRA] and create crosslinks between the wiki and the JIRA for voting, and assignment to projects.&lt;br /&gt;
&lt;br /&gt;
==A==&lt;br /&gt;
[[llAddToEstateBanList]]&lt;br /&gt;
&lt;br /&gt;
[[llAddCameraView]]&lt;br /&gt;
&lt;br /&gt;
==C==&lt;br /&gt;
llDetectedDrop?&lt;br /&gt;
&lt;br /&gt;
event: Dropped&lt;br /&gt;
&lt;br /&gt;
(To prevent spamming of objects with llAllowInvenoryDrop)&lt;br /&gt;
[[CHANGED_ALLOWED_DROP]]&lt;br /&gt;
&lt;br /&gt;
[[llChangeLandPassPrice]]&lt;br /&gt;
&lt;br /&gt;
[[llChildPrims2List]]&lt;br /&gt;
&lt;br /&gt;
==D==&lt;br /&gt;
&lt;br /&gt;
==E==&lt;br /&gt;
{{LSLG|llExecuteMenuCommand}}&lt;br /&gt;
&lt;br /&gt;
==F==&lt;br /&gt;
{{LSLG|llForeach}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;s&amp;gt;llFrandom&amp;lt;/s&amp;gt; use llFrand&lt;br /&gt;
&lt;br /&gt;
==G==&lt;br /&gt;
{{LSLG|llGetAgentHealth}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetAgentPreferedLanguage}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetAvatarKeysOnEstate}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetAvatarKeysOnParcel}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetCreatorKey}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetEstateBanList}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetGender}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetGroup}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetGroupTitle}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetInventoryDesc}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetLinkPrimitiveParams}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetMyAccountBalance}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetNotecard}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetParcelBanList}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetParcelPopulation}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetPowerThirst}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetPrice}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;s&amp;gt;llGetScriptCreatorKey&amp;lt;/s&amp;gt; - use [[llGetInventoryCreator]]([[llGetScriptName]]()) instead&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetWorldPopulation}}&lt;br /&gt;
&lt;br /&gt;
==H==&lt;br /&gt;
{{LSLG|llHsv2Rgb}}&lt;br /&gt;
&lt;br /&gt;
==I==&lt;br /&gt;
{{LSLG|llInstantMessageGroup}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llInviteToGroup}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llIsValidIntegerString}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llIsValidFloatString}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llIsValidVectorString}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llIsValidRotationString}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|ignored}}&lt;br /&gt;
&lt;br /&gt;
==L==&lt;br /&gt;
{{LSLG|llLBETMB}}&lt;br /&gt;
&lt;br /&gt;
==M==&lt;br /&gt;
{{LSLG|llMapTouch}}&lt;br /&gt;
&lt;br /&gt;
==N==&lt;br /&gt;
{{LSLG|llName2Key}}&lt;br /&gt;
&lt;br /&gt;
==O==&lt;br /&gt;
{{LSLG|llOnRegionReset}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|OverParcel}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|on_error}}&lt;br /&gt;
&lt;br /&gt;
==P==&lt;br /&gt;
{{LSLG|llParcelSay}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llPizza}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llPosition_change}}&lt;br /&gt;
&lt;br /&gt;
==R==&lt;br /&gt;
{{LSLG|llRaiseError}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llRemoveFromEstateBanList}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llRequestClientData}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llReturnObject}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llReturnOwnersObjects}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llRgb2hsv}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llRotateAgent}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llRequestPermissions(llGetOwner(), PERMISSION_REFUND);}}&lt;br /&gt;
&lt;br /&gt;
==S==&lt;br /&gt;
{{LSLG|llSameGroupOfficer}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSameGroupOwner}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetFaceText}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetLinkMotorParam}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetLinkText}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetCOG}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetNotecard}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetParcelDetails}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetParcelFlags}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetLinkPrimitiveParams(PRIM_TEXTURE_ANIM_%26_PRIM_TEXT)}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSoundex}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSpeakText}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSpeech2Text}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSpeech2TextRemove}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llStringUTF16ToUTF8}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSayWithinRange}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetSunDirection}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetWaterMark}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetCloudLevel}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetTouch}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|stopwatch(float precision_time)}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSayTo}}&lt;br /&gt;
&lt;br /&gt;
==T==&lt;br /&gt;
{{LSLG|llTargetOffsetOmega}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llTeleportAgent}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llTriggerLandmark}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llTrackTouches}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llTreeSystem}}&lt;br /&gt;
&lt;br /&gt;
==W==&lt;br /&gt;
{{LSLG|llWriteToNotecard}}&lt;br /&gt;
&lt;br /&gt;
==Other functionality==&lt;br /&gt;
{{LSLG|Block comments}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|True tab-stops}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Code Folding}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Windowed Scripting}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Switch Statement}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Array}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|on_unrez|Event: Unrez / Delete}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Conditionals}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|State variables}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Object Orientation aka OOP or OO}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Various C++ aspects should be implemented in LSL, Classes, Switch Statements, pointers, etc.}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Receive instant messages}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|money transfer denied for stale Event}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Nestable lists}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Nesting of Child Prims in a Parent}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Linden_Vehicle_Tutorial&amp;diff=95046</id>
		<title>Linden Vehicle Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Linden_Vehicle_Tutorial&amp;diff=95046"/>
		<updated>2008-10-10T08:49:38Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: Corrected example vector for VEHICLE_LINEAR_FRICTION_TIMESCALE&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Multi-lang}}{{LSL_Header}}&lt;br /&gt;
{{RightToc}}&lt;br /&gt;
== Vehicles ==&lt;br /&gt;
&lt;br /&gt;
Vehicles are a new feature now available for use through LSL. This chapter will cover the basics of how vehicles work, the terms used when describing vehicles, and a more thorough examination of the API available.&lt;br /&gt;
&lt;br /&gt;
There are several ways to make scripted objects move themselves around. One way is to turn the object into a &amp;quot;vehicle&amp;quot;. This feature is versatile enough to make things that slide, hover, fly, and float. Some of the behaviors that can be enabled are:&lt;br /&gt;
&lt;br /&gt;
*deflection of linear and angular velocity to preferred axis of motion&lt;br /&gt;
*asymmetric linear and angular friction&lt;br /&gt;
*hovering over terrain/water or at a global height&lt;br /&gt;
*banking on turns&lt;br /&gt;
*linear and angular motor for push and turning&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Each scripted object can have one vehicle behavior that is configurable through the [[llSetVehicleType]], llSetVehicleFloatParam, llSetVehicleVectorParam, llSetVehicleRotationParam, llSetVehicleFlags, and llRemoveVehicleFlags library calls.&lt;br /&gt;
&lt;br /&gt;
These script calls are described in more detail below, but the important thing to notice here is that the vehicle behavior has several parameters that can be adjusted to change how the vehicle handles. Depending on the values chosen the vehicle can veer like a boat in water, or ride like a sled on rails.&lt;br /&gt;
&lt;br /&gt;
Setting the vehicle flags allow you to make exceptions to some default behaviors. Some of these flags only have an effect when certain behaviors are enabled. For example, the [[VEHICLE_FLAG_HOVER_WATER_ONLY]] will make the vehicle ignore the height of the terrain, however it only makes a difference if the vehicle is hovering.&lt;br /&gt;
&lt;br /&gt;
== Warnings ==&lt;br /&gt;
&lt;br /&gt;
Vehicles are new in Second Life 1.1 and some of the details of their behavior may be changed as necessary to ensure stability and user safety. In particular, many of the limits and defaults described in the appendices will probably change and should not be relied upon in the long term.&lt;br /&gt;
&lt;br /&gt;
It is not recommended that you mix vehicle behavior with some of the other script calls that provide impulse and forces to the object, especially [[llSetBuoyancy]], [[llSetForce]], [[llSetTorque]], and [[llSetHoverHeight]].&lt;br /&gt;
&lt;br /&gt;
While the following methods probably do not cause any instabilities, their behavior may conflict with vehicles and cause undesired or inconsistent results, so use [[llLookAt]], [[llRotLookAt]], [[llMoveToTarget]], and [[llTargetOmega]] at your own risk.&lt;br /&gt;
&lt;br /&gt;
If you think you have found a bug relating to how vehicle&#039;s work, one way to submit the problem is to give a copy of the vehicle and script to Andrew Linden with comments or a notecard describing the problem. Please name all submissions &amp;quot;Bugged Vehicle XX&amp;quot; where XX are your Second Life initials. The vehicle and script will be examined at the earliest convenience.&lt;br /&gt;
&lt;br /&gt;
==  Definitions ==&lt;br /&gt;
&lt;br /&gt;
The terms &amp;quot;roll&amp;quot;, &amp;quot;pitch&amp;quot;, and &amp;quot;yaw&amp;quot; are often used to describe the modes of rotations that can happen to a airplane or boat. They correspond to rotations about the local x-, y-, and z-axis respectively.&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Tait-Bryan_angles&lt;br /&gt;
&lt;br /&gt;
The right-hand-rule, often introduced in beginning physics courses, is used to define the direction of positive rotation about any axis. As an example of how to use the right hand rule, consider a positive rotation about the roll axis. To help visualize how such a rotation would move the airplane, place your right thumb parallel to the plane&#039;s roll-axis such that the thumb points in the positive x-direction, then curl the four fingers into a fist. Your fingers will be pointing in the direction that the plane will spin.&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Right_hand_rule&lt;br /&gt;
&lt;br /&gt;
Many of the parameters that control a vehicle&#039;s behavior are of the form:&lt;br /&gt;
&lt;br /&gt;
VEHICLE_&#039;&#039;&#039;BEHAVIOR&#039;&#039;&#039;_TIMESCALE&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;BEHAVIOR&#039;&#039;&#039; &#039;s &amp;quot;timescale&amp;quot; can usually be understood as the time for the behavior to push, twist, or otherwise affect the vehicle such that the difference between what it is doing, and what it is supposed to be doing, has been reduced to 1/e of what it was, where &amp;quot;e&amp;quot; is the natural exponent (approximately 2.718281828). In other words, it is the timescale for exponential decay toward full compliance to the desired behavior. When you want the vehicle to be very responsive use a short timescale of one second or less, and if you want to disable a behavior then set the timescale to a very large number like 300 (5 minutes) or more. Note, for stability reasons, there is usually a limit to how small a timescale is allowed to be, and is usually on the order of a tenth of a second. Setting a timescale to zero is safe and is always equivalent to setting it to its minimum. Any feature with a timescale can be effectively disabled by setting the timescale so large that it would take them all day to have any effect.&lt;br /&gt;
&lt;br /&gt;
==  Setting the Vehicle Type ==&lt;br /&gt;
&lt;br /&gt;
Before any vehicle parameters can be set the vehicle behavior must first be enabled. It is enabled by calling [[llSetVehicleType]] with any &#039;&#039;&#039;VEHICLE_TYPE_*&#039;&#039;&#039;, except [[VEHICLE_TYPE_NONE]] which will disable the vehicle. See the {{LSLGC|Vehicle|vehicle types}} constants section for currently available types. More types will be available soon.&lt;br /&gt;
&lt;br /&gt;
Setting the vehicle type is necessary for enabling the vehicle behavior and sets all of the parameters to its default values. For each vehicle type listed we provide the corresponding equivalent code in long format. Is is important to realize that the defaults are not the optimal settings for any of these vehicle types and that they will definitely be changed in the future. Do not rely on these values to be constant until specified.&lt;br /&gt;
&lt;br /&gt;
Should you want to make a unique or experimental vehicle you will still have to enable the vehicle behavior with one of the default types first, after which you will be able to change any of the parameters or flags within the allowed ranges.&lt;br /&gt;
&lt;br /&gt;
Setting the vehicle type does not automatically take controls or otherwise move the object. However should you enable the vehicle behavior while the object is free to move and parked on a hill then it may start to slide away.&lt;br /&gt;
&lt;br /&gt;
We are looking for new and better default vehicle types. If you think you have found a set of parameters that make a better car, boat, or any other default type of vehicle then you may submit your proposed list of settings to {{User|Andrew Linden}} via a script, notecard or [https://jira.secondlife.com/ JIRA].&lt;br /&gt;
{{LSL Constants/Vehicle Types}}&lt;br /&gt;
&lt;br /&gt;
==  Linear and Angular Deflection ==&lt;br /&gt;
&lt;br /&gt;
A common feature of real vehicles is their tendency to move along &amp;quot;preferred axes of motion&amp;quot;. That is, due to their wheels, wings, shape, or method of propulsion they tend to push or redirect themselves along axes that are static in the vehicle&#039;s local frame. This general feature defines a class of vehicles and included in this category a&lt;br /&gt;
common dart is a &amp;quot;vehicle&amp;quot;: it has fins in the back such that if it were to tumble in the air it would eventually align itself to move point-forward--we call this alignment effect angular deflection.&lt;br /&gt;
&lt;br /&gt;
A wheeled craft exhibits a different effect: when a skateboard is pushed in some direction it will tend to redirect the resultant motion along that which it is free to roll--we call this effect linear deflection.&lt;br /&gt;
&lt;br /&gt;
So a typical Second Life vehicle is an object that exhibits linear and/or angular deflection along the &amp;quot;preferential axes of motion&amp;quot;. The default preferential axes of motion are the local x- (at), y- (left), and z- (up) axes of the local frame of the vehicle&#039;s root primitive. The deflection behaviors relate to the x-axis (at): linear deflection will tend to rotate its velocity until it points along its positive local x-axis while the angular deflection will tend to reorient the vehicle such that its x-axis points in the direction that it is moving. The other axes are relevant to vehicle behaviors that are described later, such as the vertical attractor which tries to keep a vehicle&#039;s local z-axis pointed toward the world z-axis (up). The vehicle axes can be rotated relative to the object&#039;s actual local axes by using the [[VEHICLE_REFERENCE_FRAME]] parameter, however that is an advanced feature and is covered in detail in a later section of these documents.&lt;br /&gt;
&lt;br /&gt;
Depending on the vehicle it might be desirable to have lots of linear and/or angular deflection or not. The speed of the deflections are controlled by setting the relevant parameters using the [[llSetVehicleFloatParam]] script call.&lt;br /&gt;
&lt;br /&gt;
Each variety of deflection has a &amp;quot;timescale&amp;quot; parameter that determines how quickly a full deflection happens.&lt;br /&gt;
&lt;br /&gt;
Basically the timescale it the time coefficient for exponential decay toward full deflection. So, a vehicle that deflects quickly should have a small timescale. For instance, a typical dart might have a angular deflection timescale of a couple of seconds but a linear deflection of several seconds; it will tend to reorient itself before it changes direction. To set the deflection timescales of a dart you might use the lines below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llSetVehicleFloatParam(VEHICLE_ANGULAR_DEFLECTION_TIMESCALE, 2.0);&lt;br /&gt;
llSetVehicleFloatParam(VEHICLE_LINEAR_DEFLECTION_TIMESCALE, 6.0);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each variety of deflection has an &amp;quot;efficiency&amp;quot; parameter that is a slider between 0.0 and 1.0. Unlike the other efficiency parameter of other vehicle behaviors, the deflection efficiencies do not slide between &amp;quot;bouncy&amp;quot; and &amp;quot;damped&amp;quot;, but instead slide from &amp;quot;no deflection whatsoever&amp;quot; (0.0) to &amp;quot;maximum deflection&amp;quot; (1.0). That is, they behave much like the deflection timescales, however they are normalized to the range between 0.0 and 1.0.&lt;br /&gt;
&lt;br /&gt;
==  Moving the Vehicle ==&lt;br /&gt;
&lt;br /&gt;
Once enabled, a vehicle can be pushed and rotated by external forces and/or from script calls such as [[llApplyImpulse]], however linear and angular motors have been built in to make motion easier and smoother. Their directions can be set using the[[llSetVehicleVectorParam]] call. For example, to make the vehicle try to move at 5 meters/second along its local x-axis (the default look-at direction) you would put the following line in your script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_LINEAR_MOTOR_DIRECTION, &amp;lt;5, 0, 0&amp;gt;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To prevent vehicles from moving too fast the magnitude of the linear motor is clamped to be no larger than about 30 meters/second. Note that this is clamped mostly because of limitations of the physics engine, and may be raised later when possible.&lt;br /&gt;
&lt;br /&gt;
Setting the motor speed is not enough to enable all interesting vehicles. For example, some will want a car that immediately gets up to the speed they want, while others will want a boat that slowly climbs up to its maximum velocity. To control this effect you can use the [[VEHICLE_LINEAR_MOTOR_TIMESCALE]] parameter.&lt;br /&gt;
&lt;br /&gt;
Basically the &amp;quot;timescale&amp;quot; of a motor is the time constant for the vehicle to exponentially accelerate toward its full speed.&lt;br /&gt;
&lt;br /&gt;
What would happen if you were to accidentally set the vehicle&#039;s linear velocity to maximum possible speed and then let go? It would run away and never stop, right? Not necessarily: an automatic &amp;quot;motor decay&amp;quot; has been built in such that all motors will gradually decrease their effectiveness after being set.&lt;br /&gt;
&lt;br /&gt;
Each time the linear motor&#039;s vector is set its &amp;quot;grip&amp;quot; immediately starts to decay exponentially with a timescale determined by the [[VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE]], such that after enough time the motor ceases to have any effect. This decay timescale serves two purposes. First, since it cannot be set longer than 120 seconds, and is always enabled it guarantees that a vehicle will not push itself about forever in the absence of active control (from keyboard commands or some logic loop in the script). Second, it can be used to push some vehicles around using a simple impulse model. That is, rather than setting the motor &amp;quot;on&amp;quot; or &amp;quot;off&amp;quot; depending on whether a particular key is pressed &amp;quot;down&amp;quot; or &amp;quot;up&amp;quot; the decay timescale can be set short and the motor can be set &amp;quot;on&amp;quot; whenever the key transitions from &amp;quot;up&amp;quot; to &amp;quot;down&amp;quot; and allowed to automatically decay.&lt;br /&gt;
&lt;br /&gt;
Since the motor&#039;s effectiveness is reset whenever the motor&#039;s vector is set, then setting it to a vector of length zero is different from allowing it to decay completely. The first case will cause the vehicle to try to reach zero velocity, while the second will leave the motor impotent.&lt;br /&gt;
&lt;br /&gt;
The two motor timescales have very similar names, but have different effects, so try not to get them confused.&lt;br /&gt;
&lt;br /&gt;
::[[VEHICLE_LINEAR_MOTOR_TIMESCALE]] is the time for motor to &amp;quot;win&amp;quot;, and&lt;br /&gt;
&lt;br /&gt;
::[[VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE]] is the time for the motor&#039;s &amp;quot;effectiveness&amp;quot; to decay toward zero. If you set one when you think you are changing the other you will have frustrating results. Also, if the motor&#039;s decay timescale is shorter than the regular timescale, then the effective magnitude of the motor vector will be diminished.&lt;br /&gt;
&lt;br /&gt;
==  Steering the Vehicle ==&lt;br /&gt;
&lt;br /&gt;
Much like the linear motor, there is also an angular motor that is always on, and whose direction and magnitude can be set. For example, to make a vehicle turn at 5 degrees/sec around its local z-axis (its up-axis) you might add the following lines to its script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
vector angular_velocity = &amp;lt;0, 0, 5 * PI / 180&amp;gt;;&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_ANGULAR_MOTOR_DIRECTION, angular_velocity);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The magnitude of the angular motor is capped to be no more than two rotations per second (4 * [[PI]] radians/sec).&lt;br /&gt;
&lt;br /&gt;
Also like the linear motor it has an efficiency parameter, [[VEHICLE_ANGULAR_MOTOR_TIMESCALE]], and a motor decay parameter, [[VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE]], which is set to the maximum possible value of 120 seconds by default.&lt;br /&gt;
&lt;br /&gt;
When steering a vehicle you probably do not want it to turn very far or for very long. One way to do it using the angular motor would be to leave the decay timescale long, enable a significant amount of angular friction (to quickly slow the vehicle down when the motor is turned off) then set the angular motor to a large vector on a key&lt;br /&gt;
press, and set it to zero when the key is released. Another way to do it is to set the [[VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE]] to a short value and push the vehicle about with a more impulsive method that sets the motor fast on a key press down (and optionally setting the motor to zero on a key up) relying on the automatic exponential decay of the motor&#039;s effectiveness rather than a constant angular friction.&lt;br /&gt;
&lt;br /&gt;
Setting the angular motor to zero magnitude is different from allowing it to decay. When the motor completely decays it no longer affects the motion of the vehicle, however setting it to zero will reset the &amp;quot;grip&amp;quot; of the vehicle and will make the vehicle try to achieve zero angular velocity.&lt;br /&gt;
&lt;br /&gt;
For some vehicles it will be possible to use the &amp;quot;banking feature&amp;quot; to turn. &amp;quot;Banking&amp;quot; is what airplanes and motorcycles do when they turn. When a banking vehicle twists about its roll-axis there is a resultant spin around its yaw-axis. Banking is only available when using the &amp;quot;vertical attractor&amp;quot; which is described below.&lt;br /&gt;
&lt;br /&gt;
==  The Vertical Attractor ==&lt;br /&gt;
&lt;br /&gt;
Some vehicles, like boats, should always keep their up-side up. This can be done by enabling the &amp;quot;vertical attractor&amp;quot; behavior that springs the vehicle&#039;s local z-axis to the world z-axis (a.k.a. &amp;quot;up&amp;quot;). To take advantage of this feature you would set the [[VEHICLE_VERTICAL_ATTRACTION_TIMESCALE]] to control the period of the spring frequency, and then set the [[VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY]] to control the damping. An efficiency of 0.0 will cause the spring to wobble around its equilibrium, while an efficiency of 1.0 will cause the spring to reach its equilibrium with exponential decay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 4.0);&lt;br /&gt;
llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.5);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The vertical attractor is disabled by setting its timescale to anything larger than 300 seconds.&lt;br /&gt;
&lt;br /&gt;
Note that by default the vertical attractor will prevent the vehicle from diving and climbing. So, if you wanted to make a airplane you would probably want to unlock the attractor around the pitch axis by setting the [[VEHICLE_FLAG_LIMIT_ROLL_ONLY]] bit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llSetVehicleFlags(VEHICLE_FLAG_LIMIT_ROLL_ONLY);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  Banking ==&lt;br /&gt;
&lt;br /&gt;
The vertical attractor feature must be enabled in order for the banking behavior to function. The way banking works is this: a rotation around the vehicle&#039;s roll-axis will produce a angular velocity around the yaw-axis, causing the vehicle to turn. The magnitude of the yaw effect will be proportional to the&lt;br /&gt;
&lt;br /&gt;
::[[VEHICLE_BANKING_EFFICIENCY]], the angle of the roll rotation, and sometimes the vehicle&#039;s velocity along its preferred axis of motion.&lt;br /&gt;
&lt;br /&gt;
::The [[VEHICLE_BANKING_EFFICIENCY]] can vary between -1 and +1. When it is positive then any positive rotation (by the right-hand rule) about the roll-axis will effect a (negative) torque around the yaw-axis, making it turn to the right--that is the vehicle will lean into the turn, which is how real airplanes and motorcycle&#039;s work. Negating the banking coefficient will make it so that the vehicle leans to the outside of the turn (not very &amp;quot;physical&amp;quot; but might allow interesting vehicles so why not?).&lt;br /&gt;
&lt;br /&gt;
::The [[VEHICLE_BANKING_MIX]] is a fake (i.e. non-physical) parameter that is useful for making banking vehicles do what you want rather than what the laws of physics allow. For example, consider a real motorcycle...it must be moving forward in order for it to turn while banking, however video-game motorcycles are often configured to turn in place when at a dead stop--because they are often easier to control that way using the limited interface of the keyboard or game controller. The [[VEHICLE_BANKING_MIX]] enables combinations of both realistic and non-realistic banking by functioning as a slider between a banking that is correspondingly totally static (0.0) and totally dynamic (1.0). By &amp;quot;static&amp;quot; we mean that the banking effect depends only on the vehicle&#039;s rotation about its roll-axis compared to &amp;quot;dynamic&amp;quot; where the banking is also proportional to its velocity along its roll-axis. Finding the best value of the &amp;quot;mixture&amp;quot; will probably require trial and error.&lt;br /&gt;
&lt;br /&gt;
The time it takes for the banking behavior to defeat a preexisting angular velocity about the world z-axis is determined by the [[VEHICLE_BANKING_TIMESCALE]]. So if you want the vehicle to bank quickly then give it a banking timescale of about a second or less, otherwise you can make a sluggish vehicle by giving it a timescale of several seconds.&lt;br /&gt;
&lt;br /&gt;
==  Friction Timescales ==&lt;br /&gt;
&lt;br /&gt;
[[VEHICLE_LINEAR_FRICTION_TIMESCALE]] is a vector parameter that defines the timescales for the vehicle to come to a complete stop along the three local axes of the vehicle&#039;s reference frame. The timescale along each axis is independent of the others. For example, a sliding ground car would probably have very little friction along its x- and z-axes (so it can easily slide forward and fall down) while there would usually significant friction along its y-axis:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, &amp;lt;1000, 3, 1000&amp;gt;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remember that a longer timescale corresponds to a weaker friction, hence to effectively disable all linear friction you would set all of the timescales to large values.&lt;br /&gt;
&lt;br /&gt;
Setting the linear friction as a scalar is allowed, and has the effect of setting all of the timescales to the same value. Both code snippets below are equivalent, and both make friction negligible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// set all linear friction timescales to 1000&lt;br /&gt;
llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, &amp;lt;1000, 1000, 1000&amp;gt;);&lt;br /&gt;
// same as above, but fewer characters&lt;br /&gt;
llSetVehicleFloatParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, 1000);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[VEHICLE_ANGULAR_FRICTION_TIMESCALE]] is a vector parameter that defines the timescales for the vehicle to stop rotating about the x-, y-, and z-axes, and are set and disabled in the same way as the linear friction.&lt;br /&gt;
&lt;br /&gt;
==  Buoyancy ==&lt;br /&gt;
&lt;br /&gt;
The vehicle has a built-in buoyancy feature that is independent of the[[llSetBuoyancy]] call. It is recommended that the two buoyancies do not mix! To make a vehicle buoyant, set the [[VEHICLE_BUOYANCY]] parameter to something between 0.0 (no buoyancy whatsoever) to 1.0 (full anti-gravity).&lt;br /&gt;
&lt;br /&gt;
The buoyancy behavior is not independent of hover when the [[VEHICLE_FLAG_HOVER_UP_ONLY]] flag is used.  When buyancy, hover, and VEHICLE_FLAG_HOVER_UP_ONLY are used together the buoyancy effect vanishes when the vehicle is above its hover height.  That is, you would expect the vehicle to be buoyant above its hover height, however it is not.  This was not by design, but was a bug that has been around so long that it can no longer be changed -- it would break a great deal to content that unwittingly relies on this behavior.&lt;br /&gt;
&lt;br /&gt;
You may be able to mix vehicle buoyancy with the[[llSetBuoyancy]] script call, which is an independent feature. In some circumstances you may end up with a net buoyancy effect that is greater than unity, and you&#039;ll have an object that accelerates up without stopping.  Experiment at your own risk.&lt;br /&gt;
&lt;br /&gt;
==  Hover ==&lt;br /&gt;
&lt;br /&gt;
The hover behavior is enabled by setting the [[VEHICLE_HOVER_TIMESCALE]] to a value less than 300 seconds; larger timescales totally disable it. Most vehicles will work best with short hover timescales of a few seconds or less. The shorter the timescale, the faster the vehicle will slave to is target height. Note, that if the values of [[VEHICLE_LINEAR_FRICTION_TIMESCALE]] may affect the speed of the hover.&lt;br /&gt;
&lt;br /&gt;
Hover is independent of buoyancy, however the [[VEHICLE_BUOYANCY]] should be set to 1.0, otherwise the vehicle will not lift itself off of the ground until the [[VEHICLE_HOVER_HEIGHT]] is made large enough to counter the acceleration of gravity, and the vehicle will never float all the way to its target height.&lt;br /&gt;
&lt;br /&gt;
The [[VEHICLE_HOVER_EFFICIENCY]] can be thought of as a slider between bouncy (0.0) and smoothed (1.0).&lt;br /&gt;
&lt;br /&gt;
When in the bouncy range the vehicle will tend to hover a little lower than its target height and the [[VEHICLE_HOVER_TIMESCALE]] will be approximately the oscillation period of the bounce (the real period will tend to be a little longer than the timescale).&lt;br /&gt;
&lt;br /&gt;
For performance reasons, until improvements are made to the Second Life physics engine the vehicles can only hover over the terrain and water, so they will not be able to hover above objects made out of primitives, such as bridges and houses. By default the hover behavior will float over terrain and water, however this can be changed&lt;br /&gt;
by setting some flags:&lt;br /&gt;
&lt;br /&gt;
If you wanted to make a boat you should set the [[VEHICLE_HOVER_WATER_ONLY]] flag, or if you wanted to drive a hover tank under water you would use the [[VEHICLE_HOVER_TERRAIN_ONLY]] flag instead. Finally, if you wanted to make a submarine or a balloon you would use the [[VEHICLE_HOVER_GLOBAL_HEIGHT]].&lt;br /&gt;
&lt;br /&gt;
Note that the flags are independent of each other and that setting two contradictory flags will have undefined behavior (and that behavior should not be depended upon to stay constant!). The flags are set using the script call [[llSetVehicleFlags]]().&lt;br /&gt;
&lt;br /&gt;
The [[VEHICLE_HOVER_HEIGHT]] determines how high the vehicle will hover over the terrain and/or water, or the global height, and has a maximum value of 100 meters. Note that for hovering purposes the &amp;quot;center&amp;quot; of the vehicle is its &amp;quot;center of mass&amp;quot; which is not always obvious to the untrained eye, and it changes when avatars sit on the vehicle.&lt;br /&gt;
&lt;br /&gt;
==  Reference Frame ==&lt;br /&gt;
&lt;br /&gt;
The vehicle relies on the x- (at), y- (left), and z- (up) axes in order to figure out which way it prefers to move and which end is up. By default these axes are identical to the local axes of the root primitive of the object, however this means that the vehicle&#039;s root primitive must, by default, be oriented to agree with the designed at, left, and up axes of the vehicle. But, what if the vehicle object was already pre-built with the root primitive in some non-trivial orientation relative to where the vehicle as a whole should move? This is where the&lt;br /&gt;
&lt;br /&gt;
[[VEHICLE_REFERENCE_FRAME]] parameter becomes useful; the vehicle&#039;s axes can be arbitrarily reoriented by setting this parameter.&lt;br /&gt;
&lt;br /&gt;
As an example, suppose you had built a rocket out of a big cylinder, a cone for the nose, and some stretched cut boxes for the fins, then linked them all together with the cylinder as the root primitive. Ideally the rocket would move nose-first, however the cylinder&#039;s axis of symmetry is its local z-axis while the default &amp;quot;at-axis&amp;quot; of the vehicle, the axis it will want to deflect to forward under angular deflection, is the local x-axis and points out from the curved surface of the cylinder. The script code below will rotate the vehicle&#039;s axes such that the local z-axis becomes the &amp;quot;at-axis&amp;quot; and the local negative x-axis becomes the &amp;quot;up-axis&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// rotate the vehicle frame -PI/2 about the local y-axis (left-axis)&lt;br /&gt;
rotation rot =llEuler2Rot(&amp;lt;0, PI/2, 0&amp;gt;);&lt;br /&gt;
llSetVehicleRotationParam(VEHICLE_REFERENCE_FRAME, rot);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another example of how the reference frame parameter could be used is to consider flying craft that uses the vertical attractor for stability during flying but wants to use VTOL (vertical takeoff and landing). During flight the craft&#039;s dorsal axis should point up, but during landing its nose-axis should be up. To land the vehicle: while the vertical attractor is in effect, rotate the existing [[VEHICLE_REFERENCE_FRAME]] by +PI/2 about the left-axis, then the vehicle will pitch up such that its nose points toward the sky. The vehicle could be allowed to fall to the landing pad under friction, or a decreasing hover effect.&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Vehicle|Tutorial}} {{LSLC|Tutorials|Vehicle}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:Conditionals&amp;diff=89882</id>
		<title>Talk:Conditionals</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:Conditionals&amp;diff=89882"/>
		<updated>2008-09-06T00:54:34Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Not so important, actually. This style makes for less readable code. I&#039;d rather see &amp;quot;case&amp;quot; conditional added before C style conditionals. --[[User:Clang Bailey|Clang Bailey]] 16:48, 19 December 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
You can already do such a thing with regular LSL:&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSay(1, &amp;quot;This is &amp;quot; + llList2String([&amp;quot;false&amp;quot;, &amp;quot;true&amp;quot;], (a == 0)) );&amp;lt;/lsl&amp;gt;&lt;br /&gt;
--[[User:Kaluura Boa|Kaluura Boa]]&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Conditionals&amp;diff=89881</id>
		<title>Conditionals</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Conditionals&amp;diff=89881"/>
		<updated>2008-09-06T00:49:55Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;C style conditionals would also be useful, i.e. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSay(1, &amp;quot;This is &amp;quot; + (a == 0) ? &amp;quot;false&amp;quot; : &amp;quot;true&amp;quot;);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Easy to implement in the compiler, no changes to the bytecode needed. [[User:Strife Onizuka|Strife Onizuka]] 02:52, 8 April 2007 (PDT)&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Conditionals&amp;diff=89880</id>
		<title>Conditionals</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Conditionals&amp;diff=89880"/>
		<updated>2008-09-06T00:48:52Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;C style conditionals would also be useful, i.e. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSay(1, &amp;quot;This is &amp;quot; + (a == 0) ? &amp;quot;false&amp;quot; : &amp;quot;true&amp;quot;);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Easy to implement in the compiler, no changes to the bytecode needed. [[User:Strife Onizuka|Strife Onizuka]] 02:52, 8 April 2007 (PDT)&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSetLinkText&amp;diff=82904</id>
		<title>LlSetLinkText</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSetLinkText&amp;diff=82904"/>
		<updated>2008-08-05T07:25:10Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: (Sigh of dispair)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Function/link|linknumber|}}{{LSL Function/color|color}}{{LSL Function/alpha|alpha}}&lt;br /&gt;
{{LSL_Function&lt;br /&gt;
|func=llSetLinkText&lt;br /&gt;
|sort=SetLinkText&lt;br /&gt;
|func_id|mode=request|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|p1_type=integer|p1_name=linknumber&lt;br /&gt;
|p2_type=string|p2_name=text|p2_desc=text to display&lt;br /&gt;
|p3_type=vector|p3_name=color&lt;br /&gt;
|p4_type=float|p4_name=alpha&lt;br /&gt;
|func_desc=If a prim exists in the link chain at &#039;&#039;&#039;linknumber&#039;&#039;&#039;, displays &#039;&#039;&#039;text&#039;&#039;&#039; that hovers over the prim with specific &#039;&#039;&#039;color&#039;&#039;&#039; and translucency (specified with &#039;&#039;&#039;alpha&#039;&#039;&#039;). &lt;br /&gt;
|func_footnote=See: {{Jira|SVC-2367}}&lt;br /&gt;
|return_text&lt;br /&gt;
|spec=&lt;br /&gt;
|caveats=&lt;br /&gt;
*&#039;&#039;&#039;text&#039;&#039;&#039; is limited to 254 bytes, if the string is longer it will be truncated to 254 bytes.&lt;br /&gt;
*Floating text can be seen through walls and other object. Be considerate of neighbors in malls and apartment buildings.&lt;br /&gt;
*There is no way for a script to determine the prims current floating text or detect when it is changed.&lt;br /&gt;
**There is no [[llGetText]] function or [[CHANGED_TEXT]] [[changed]] event flag.&lt;br /&gt;
*Removing the script or deactivating it will not remove the prims floating text.&lt;br /&gt;
**Floating text is a prim property and does not depend on the script which set it to continue to exist.&lt;br /&gt;
*To remove floating text from the prim number &#039;&#039;&#039;linknumber&#039;&#039;&#039;, use the following:&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(linknumber, &amp;quot;&amp;quot;, &amp;lt;1.0, 1.0, 1.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
*Vertical whitespace is removed from the end of the text string, so if you want vertical whitespace put any character (like a space) on the last line:&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS, &amp;quot;Doesn&#039;t work...\n&amp;quot;, &amp;lt;1.0, 0.0, 0.0&amp;gt;, 1.0);&lt;br /&gt;
llSetLinkText(LINK_THIS, &amp;quot;It works!\n &amp;quot;, &amp;lt;0.0, 1.0, 0.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|examples=&lt;br /&gt;
Example of how llSetLinkText could be used to show prims names and link numbers in red text:&lt;br /&gt;
&amp;lt;lsl&amp;gt;default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
         integer link = llGetNumberOfPrims();&lt;br /&gt;
	 for (; link &amp;gt;= 0; --link)&lt;br /&gt;
	 {&lt;br /&gt;
             llSetLinkText(link, (string)link + &amp;quot;: &amp;quot; + llGetLinkName(link), &amp;lt;1.0, 0.0, 0.0&amp;gt;, 1.0);&lt;br /&gt;
         }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
By default the floating text will appear on a single line. However, the floating text can be spread over multiple lines by using a line break &amp;quot;\n&amp;quot; (read [[SplitLine]] in section &#039;See Also&#039;).&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS, &amp;quot;First line\nSecond line&amp;quot;, &amp;lt;1.0, 1.0, 1.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
===Color &amp;amp; Alpha===&lt;br /&gt;
{{{!}} class=&amp;quot;sortable&amp;quot; {{Prettytable|style=float:right; margin-top:0;}}&lt;br /&gt;
{{!}}- {{Hl2}}&lt;br /&gt;
! Color&lt;br /&gt;
! Code&lt;br /&gt;
{{!}}- style=&amp;quot;background:white&amp;quot;&lt;br /&gt;
{{!}}White &lt;br /&gt;
{{!}}&amp;lt;1.0, 1.0, 1.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:grey&amp;quot;&lt;br /&gt;
{{!}}Grey &lt;br /&gt;
{{!}}&amp;lt;0.5, 0.5, 0.5&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:black; color:white;&amp;quot;&lt;br /&gt;
{{!}}{{!}}Black &lt;br /&gt;
{{!}}&amp;lt;0.0, 0.0, 0.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:red; color:white;&amp;quot;&lt;br /&gt;
{{!}}Red&lt;br /&gt;
{{!}}&amp;lt;1.0, 0.0, 0.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:green; color:white;&amp;quot;&lt;br /&gt;
{{!}}Green&lt;br /&gt;
{{!}}&amp;lt;0.0, 1.0, 0.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:blue; color:white;&amp;quot;&lt;br /&gt;
{{!}}Blue&lt;br /&gt;
{{!}}&amp;lt;0.0, 0.0, 1.0&amp;gt;&lt;br /&gt;
{{!}}}&lt;br /&gt;
The x, y &amp;amp; z components of the vector are used to represent red, green, and blue respectively. The range is different then traditional RGB, instead of being 0 -&amp;gt; 255, LSL uses 0 -&amp;gt; 1. &amp;lt;1.0, 1.0, 1.0&amp;gt;, means &amp;quot;white&amp;quot; and &amp;lt;0.0, 0.0, 0.0&amp;gt; means &amp;quot;black&amp;quot;:&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS,&amp;quot;White&amp;quot;, &amp;lt;1.0, 1.0, 1.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS, &amp;quot;Black&amp;quot;, &amp;lt;0.0, 0.0, 0.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
The 1.0 is the alpha setting. 1.0 means fully opaque, and 0.0 would be completely transparent (invisible):&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS, &amp;quot;Half transparent green&amp;quot;, &amp;lt;0.0, 1.0, 0.0&amp;gt;, 0.5);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers=&lt;br /&gt;
Create this script in inventory and drag it onto an object to erase all its set texts:&lt;br /&gt;
&amp;lt;lsl&amp;gt;// http://wiki.secondlife.com/wiki/llSetLinkText&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetLinkText(LINK_SET, &amp;quot;&amp;quot;, &amp;lt;1.0, 1.0, 1.0&amp;gt;, 1.0);&lt;br /&gt;
        llRemoveInventory(llGetScriptName());&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|notes=If you use [[LINK_THIS]] as &#039;&#039;&#039;linknumber&#039;&#039;&#039;, this function will have the same effect than [[llSetText]]&lt;br /&gt;
|also&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llSetText]]}}&lt;br /&gt;
|also_articles=&lt;br /&gt;
{{LSL DefineRow||[[:Category:LSL Examples|Examples]]: [[SplitLine]]|Insert &#039;new line&#039; escape codes at certain positions of a string}}&lt;br /&gt;
|cat1=Effects&lt;br /&gt;
|cat2=Prim&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSetLinkText&amp;diff=82903</id>
		<title>LlSetLinkText</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSetLinkText&amp;diff=82903"/>
		<updated>2008-08-05T07:13:59Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: Translation from Typonese&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Function/link|linknumber|}}{{LSL Function/color|color}}{{LSL Function/alpha|alpha}}&lt;br /&gt;
{{LSL_Function&lt;br /&gt;
|func=llSetLinkText&lt;br /&gt;
|sort=SetLinkText&lt;br /&gt;
|func_id|mode=request|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|p1_type=integer|p1_name=linknumber&lt;br /&gt;
|p2_type=string|p2_name=text|p2_desc=text to display&lt;br /&gt;
|p3_type=vector|p3_name=color&lt;br /&gt;
|p4_type=float|p4_name=alpha&lt;br /&gt;
|func_desc=If a prim exists in the link chain at &#039;&#039;&#039;linknumber&#039;&#039;&#039;, displays &#039;&#039;&#039;text&#039;&#039;&#039; that hovers over the prim with specific &#039;&#039;&#039;color&#039;&#039;&#039; and translucency (specified with &#039;&#039;&#039;alpha&#039;&#039;&#039;). &lt;br /&gt;
|func_footnote=See: {{Jira|SVC-2367}}&lt;br /&gt;
|return_text&lt;br /&gt;
|spec=&lt;br /&gt;
|caveats=&lt;br /&gt;
*&#039;&#039;&#039;text&#039;&#039;&#039; is limited to 254 bytes, if the string is longer it will be truncated to 254 bytes.&lt;br /&gt;
*Floating text can be seen through walls and other object. Be considerate of neighbors in malls and apartment buildings.&lt;br /&gt;
*There is no way for a script to determine the prims current floating text or detect when it is changed.&lt;br /&gt;
**There is no [[llGetText]] function or [[CHANGED_TEXT]] [[changed]] event flag.&lt;br /&gt;
*Removing the script or deactivating it will not remove the prims floating text.&lt;br /&gt;
**Floating text is a prim property and does not depend on the script which set it to continue to exist.&lt;br /&gt;
*To remove floating text from the prim number &#039;&#039;&#039;linknumber&#039;&#039;&#039;, use the following:&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetText(linknumber, &amp;quot;&amp;quot;, &amp;lt;1.0, 1.0, 1.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
*Vertical whitespace is removed from the end of the text string, so if you want vertical whitespace put any character (like a space) on the last line:&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS, &amp;quot;Doesn&#039;t work...\n&amp;quot;, &amp;lt;1.0, 0.0, 0.0&amp;gt;, 1.0);&lt;br /&gt;
llSetLinkText(LINK_THIS, &amp;quot;It works!\n &amp;quot;, &amp;lt;0.0, 1.0, 0.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|examples=&lt;br /&gt;
Example of how llSetLinkText could be used to show prims names and link numbers in red text:&lt;br /&gt;
&amp;lt;lsl&amp;gt;default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
         integer link = llGetNumberOfPrims();&lt;br /&gt;
	 for (; link &amp;gt;= 0; --link)&lt;br /&gt;
	 {&lt;br /&gt;
             llSetLinkText(link, (string)link + &amp;quot;: &amp;quot; + llGetLinkName(link), &amp;lt;1.0, 0.0, 0.0&amp;gt;, 1.0);&lt;br /&gt;
         }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
By default the floating text will appear on a single line. However, the floating text can be spread over multiple lines by using a line break &amp;quot;\n&amp;quot; (read [[SplitLine]] in section &#039;See Also&#039;).&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS, &amp;quot;First line\nSecond line&amp;quot;, &amp;lt;1.0, 1.0, 1.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
===Color &amp;amp; Alpha===&lt;br /&gt;
{{{!}} class=&amp;quot;sortable&amp;quot; {{Prettytable|style=float:right; margin-top:0;}}&lt;br /&gt;
{{!}}- {{Hl2}}&lt;br /&gt;
! Color&lt;br /&gt;
! Code&lt;br /&gt;
{{!}}- style=&amp;quot;background:white&amp;quot;&lt;br /&gt;
{{!}}White &lt;br /&gt;
{{!}}&amp;lt;1.0, 1.0, 1.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:grey&amp;quot;&lt;br /&gt;
{{!}}Grey &lt;br /&gt;
{{!}}&amp;lt;0.5, 0.5, 0.5&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:black; color:white;&amp;quot;&lt;br /&gt;
{{!}}{{!}}Black &lt;br /&gt;
{{!}}&amp;lt;0.0, 0.0, 0.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:red; color:white;&amp;quot;&lt;br /&gt;
{{!}}Red&lt;br /&gt;
{{!}}&amp;lt;1.0, 0.0, 0.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:green; color:white;&amp;quot;&lt;br /&gt;
{{!}}Green&lt;br /&gt;
{{!}}&amp;lt;0.0, 1.0, 0.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:blue; color:white;&amp;quot;&lt;br /&gt;
{{!}}Blue&lt;br /&gt;
{{!}}&amp;lt;0.0, 0.0, 1.0&amp;gt;&lt;br /&gt;
{{!}}}&lt;br /&gt;
The x, y &amp;amp; z components of the vector are used to represent red, green, and blue respectively. The range is different then traditional RGB, instead of being 0 -&amp;gt; 255, LSL uses 0 -&amp;gt; 1. &amp;lt;1.0, 1.0, 1.0&amp;gt;, means &amp;quot;white&amp;quot; and &amp;lt;0.0, 0.0, 0.0&amp;gt; means &amp;quot;black&amp;quot;:&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS,&amp;quot;White&amp;quot;, &amp;lt;1.0, 1.0, 1.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS, &amp;quot;Black&amp;quot;, &amp;lt;0.0, 0.0, 0.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
The 1.0 is the alpha setting. 1.0 means fully opaque, and 0.0 would be completely transparent (invisible):&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS, &amp;quot;Half transparent green&amp;quot;, &amp;lt;0.0, 1.0, 0.0&amp;gt;, 0.5);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers=&lt;br /&gt;
Create this script in inventory and drag it onto an object to erase all its set texts:&lt;br /&gt;
&amp;lt;lsl&amp;gt;// http://wiki.secondlife.com/wiki/llSetLinkText&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetLinkText(LINK_SET, &amp;quot;&amp;quot;, &amp;lt;1.0, 1.0, 1.0&amp;gt;, 1.0);&lt;br /&gt;
        llRemoveInventory(llGetScriptName());&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|notes=If you use [[LINK_THIS]] as &#039;&#039;&#039;linknumber&#039;&#039;&#039;, this function will have the same effect than [[llSetText]]&lt;br /&gt;
|also&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llSetText]]}}&lt;br /&gt;
|also_articles=&lt;br /&gt;
{{LSL DefineRow||[[:Category:LSL Examples|Examples]]: [[SplitLine]]|Insert &#039;new line&#039; escape codes at certain positions of a string}}&lt;br /&gt;
|cat1=Effects&lt;br /&gt;
|cat2=Prim&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSetLinkText&amp;diff=82900</id>
		<title>LlSetLinkText</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSetLinkText&amp;diff=82900"/>
		<updated>2008-08-05T07:11:23Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Function/link|linknumber|}}{{LSL Function/color|color}}{{LSL Function/alpha|alpha}}&lt;br /&gt;
{{LSL_Function&lt;br /&gt;
|func=llSetLinkText&lt;br /&gt;
|sort=SetLinkText&lt;br /&gt;
|func_id|mode=request|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|p1_type=integer|p1_name=linknumber&lt;br /&gt;
|p2_type=string|p2_name=text|p2_desc=text to display&lt;br /&gt;
|p3_type=vector|p3_name=color&lt;br /&gt;
|p4_type=float|p4_name=alpha&lt;br /&gt;
|func_desc=If a prim exists in the link chain at &#039;&#039;&#039;linknumber&#039;&#039;&#039;, displays &#039;&#039;&#039;text&#039;&#039;&#039; that hovers over the prim with specific &#039;&#039;&#039;color&#039;&#039;&#039; and translucency (specified with &#039;&#039;&#039;alpha&#039;&#039;&#039;). &lt;br /&gt;
|func_footnote=See: {{Jira|SVC-2367}}&lt;br /&gt;
|return_text&lt;br /&gt;
|spec=&lt;br /&gt;
|caveats=&lt;br /&gt;
*&#039;&#039;&#039;text&#039;&#039;&#039; is limited to 254 bytes, if the string is longer it will be truncated to 254 bytes.&lt;br /&gt;
*Floating text can be seen through walls and other object. Be considerate of neighbors in malls and apartment buildings.&lt;br /&gt;
*There is no way for a script to determine the prims current floating text or detect when it is changed.&lt;br /&gt;
**There is no [[llGetText]] function or [[CHANGED_TEXT]] [[changed]] event flag.&lt;br /&gt;
*Removing the script or deactivating it will not remove the prims floating text.&lt;br /&gt;
**Floating text is a prim property and does not depend on the script which set it to continue to exist.&lt;br /&gt;
*To remove floating text from the prim number &#039;&#039;&#039;linknumber&#039;&#039;&#039;, use the following:&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetText(linknumber, &amp;quot;&amp;quot;, &amp;lt;1.0, 1.0, 1.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
*Vertical whitespace is removed from the end of the text string, so if you want vertical whitespace put any character (like a space) on the last line:&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS, &amp;quot;Doesn&#039;t work...\n&amp;quot;, &amp;lt;1.0, 0.0, 0.0&amp;gt;, 1.0);&lt;br /&gt;
llSetLinkText(LINK_THIS, &amp;quot;It works!\n &amp;quot;, &amp;lt;0.0, 1.0, 0.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|examples=&lt;br /&gt;
Example of how llSetLinkText could be used to show prims names and link numbers in red text:&lt;br /&gt;
&amp;lt;lsl&amp;gt;default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
         integer link = llGetNumberOfPrims();&lt;br /&gt;
	 for (; link &amp;gt;= 0; --link)&lt;br /&gt;
	 {&lt;br /&gt;
             llSetLinkText(link, (string)link + &amp;quot;: &amp;quot; + llGetLinkName(link), &amp;lt;1.0, 0.0, 0.0&amp;gt;, 1.0);&lt;br /&gt;
         }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
By default the floating text will appear on a single line. However, the floating text can be spread over multiple lines by using a line break &amp;quot;\n&amp;quot; (read [[SplitLine]] in section &#039;See Also&#039;).&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS, &amp;quot;First line\nSecond lines&amp;quot;, &amp;lt;1.0, 1.0, 1.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
===Color &amp;amp; Alpha===&lt;br /&gt;
{{{!}} class=&amp;quot;sortable&amp;quot; {{Prettytable|style=float:right; margin-top:0;}}&lt;br /&gt;
{{!}}- {{Hl2}}&lt;br /&gt;
! Color&lt;br /&gt;
! Code&lt;br /&gt;
{{!}}- style=&amp;quot;background:white&amp;quot;&lt;br /&gt;
{{!}}White &lt;br /&gt;
{{!}}&amp;lt;1.0, 1.0, 1.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:grey&amp;quot;&lt;br /&gt;
{{!}}Grey &lt;br /&gt;
{{!}}&amp;lt;0.5, 0.5, 0.5&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:black; color:white;&amp;quot;&lt;br /&gt;
{{!}}{{!}}Black &lt;br /&gt;
{{!}}&amp;lt;0.0, 0.0, 0.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:red; color:white;&amp;quot;&lt;br /&gt;
{{!}}Red&lt;br /&gt;
{{!}}&amp;lt;1.0, 0.0, 0.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:green; color:white;&amp;quot;&lt;br /&gt;
{{!}}Green&lt;br /&gt;
{{!}}&amp;lt;0.0, 1.0, 0.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:blue; color:white;&amp;quot;&lt;br /&gt;
{{!}}Blue&lt;br /&gt;
{{!}}&amp;lt;0.0, 0.0, 1.0&amp;gt;&lt;br /&gt;
{{!}}}&lt;br /&gt;
The x, y &amp;amp; z components of the vector are used to represent red, green, and blue respectively. The range is different then traditional RGB, instead of being 0 -&amp;gt; 255, LSL uses 0 -&amp;gt; 1. &amp;lt;1.0, 1.0, 1.0&amp;gt;, means &amp;quot;white&amp;quot; and &amp;lt;0.0, 0.0, 0.0&amp;gt; means &amp;quot;black&amp;quot;:&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS,&amp;quot;White&amp;quot;, &amp;lt;1.0, 1.0, 1.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS, &amp;quot;Black&amp;quot;, &amp;lt;0.0, 0.0, 0.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
The 1.0 is the alpha setting. 1.0 means fully opaque, and 0.0 would be completely transparent (invisible):&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS, &amp;quot;Half transparent green&amp;quot;, &amp;lt;0.0, 1.0, 0.0&amp;gt;, 0.5);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers=&lt;br /&gt;
Create this script in inventory and drag it onto an object to erase all its set texts:&lt;br /&gt;
&amp;lt;lsl&amp;gt;// http://wiki.secondlife.com/wiki/llSetLinkText&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetLinkText(LINK_SET, &amp;quot;&amp;quot;, &amp;lt;1.0, 1.0, 1.0&amp;gt;, 1.0);&lt;br /&gt;
        llRemoveInventory(llGetScriptName());&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|notes=If you use [[LINK_THIS]] as &#039;&#039;&#039;linknumber&#039;&#039;&#039;, this function will have the same effect than [[llSetText]]&lt;br /&gt;
|also&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llSetText]]}}&lt;br /&gt;
|also_articles=&lt;br /&gt;
{{LSL DefineRow||[[:Category:LSL Examples|Examples]]: [[SplitLine]]|Insert &#039;new line&#039; escape codes at certain positions of a string}}&lt;br /&gt;
|cat1=Effects&lt;br /&gt;
|cat2=Prim&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSetLinkText&amp;diff=82899</id>
		<title>LlSetLinkText</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSetLinkText&amp;diff=82899"/>
		<updated>2008-08-05T07:08:05Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: Added related Jira page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Function/link|linknumber|}}{{LSL Function/color|color}}{{LSL Function/alpha|alpha}}&lt;br /&gt;
{{LSL_Function&lt;br /&gt;
|func=llSetLinkText&lt;br /&gt;
|sort=SetLinkText&lt;br /&gt;
|func_id|mode=request|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|p1_type=integer|p1_name=linknumber&lt;br /&gt;
|p2_type=string|p2_name=text|p2_desc=text to display&lt;br /&gt;
|p3_type=vector|p3_name=color&lt;br /&gt;
|p4_type=float|p4_name=alpha&lt;br /&gt;
|func_desc=If a prim exists in the link chain at &#039;&#039;&#039;linknumber&#039;&#039;&#039;, displays &#039;&#039;&#039;text&#039;&#039;&#039; that hovers over the prim with specific &#039;&#039;&#039;color&#039;&#039;&#039; and translucency (specified with &#039;&#039;&#039;alpha&#039;&#039;&#039;). &lt;br /&gt;
|func_footnote=See: {{Jira|SVC-2367}}&lt;br /&gt;
|return_text&lt;br /&gt;
|spec=&lt;br /&gt;
|caveats=&lt;br /&gt;
*&#039;&#039;&#039;text&#039;&#039;&#039; is limited to 254 bytes, if the string is longer it will be truncated to 254 bytes.&lt;br /&gt;
*Floating text can be seen through walls and other object. Be considerate of neighbors in malls and apartment buildings.&lt;br /&gt;
*There is no way for a script to determine the prims current floating text or detect when it is changed.&lt;br /&gt;
**There is no [[llGetText]] function or [[CHANGED_TEXT]] [[changed]] event flag.&lt;br /&gt;
*Removing the script or deactivating it will not remove the prims floating text.&lt;br /&gt;
**Floating text is a prim property and does not depend on the script which set it to continue to exist.&lt;br /&gt;
*To remove floating text from the prim number &#039;&#039;&#039;linknumber&#039;&#039;&#039;, use the following:&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetText(linknumber, &amp;quot;&amp;quot;, &amp;lt;1.0, 1.0, 1.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
*Vertical whitespace is removed from the end of the text string, so if you want vertical whitespace put any character (like a space) on the last line:&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS, &amp;quot;Doesn&#039;t work...\n&amp;quot;, &amp;lt;1.0, 0.0, 0.0&amp;gt;, 1.0);&lt;br /&gt;
llSetLinkText(LINK_THIS, &amp;quot;It works!\n &amp;quot;, &amp;lt;0.0, 1.0, 0.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|examples=&lt;br /&gt;
Example of how llSetLinkText could be used to show prims names and link numbers in red text:&lt;br /&gt;
&amp;lt;lsl&amp;gt;default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
         integer link = llGetNumberOfPrims();&lt;br /&gt;
	 for (; link &amp;gt;= 0; --link)&lt;br /&gt;
	 {&lt;br /&gt;
             llSetLinkText(link, (string)link + &amp;quot;: &amp;quot; + llGetLinkName(link), &amp;lt;1.0, 0.0, 0.0&amp;gt;, 1.0);&lt;br /&gt;
         }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
By default the floating text will appear on a single line. However, the floating text can be spread over multiple lines by using a line break &amp;quot;\n&amp;quot; (read [[SplitLine]] in section &#039;See Also&#039;).&lt;br /&gt;
===Color &amp;amp; Alpha===&lt;br /&gt;
{{{!}} class=&amp;quot;sortable&amp;quot; {{Prettytable|style=float:right; margin-top:0;}}&lt;br /&gt;
{{!}}- {{Hl2}}&lt;br /&gt;
! Color&lt;br /&gt;
! Code&lt;br /&gt;
{{!}}- style=&amp;quot;background:white&amp;quot;&lt;br /&gt;
{{!}}White &lt;br /&gt;
{{!}}&amp;lt;1.0, 1.0, 1.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:grey&amp;quot;&lt;br /&gt;
{{!}}Grey &lt;br /&gt;
{{!}}&amp;lt;0.5, 0.5, 0.5&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:black; color:white;&amp;quot;&lt;br /&gt;
{{!}}{{!}}Black &lt;br /&gt;
{{!}}&amp;lt;0.0, 0.0, 0.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:red; color:white;&amp;quot;&lt;br /&gt;
{{!}}Red&lt;br /&gt;
{{!}}&amp;lt;1.0, 0.0, 0.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:green; color:white;&amp;quot;&lt;br /&gt;
{{!}}Green&lt;br /&gt;
{{!}}&amp;lt;0.0, 1.0, 0.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:blue; color:white;&amp;quot;&lt;br /&gt;
{{!}}Blue&lt;br /&gt;
{{!}}&amp;lt;0.0, 0.0, 1.0&amp;gt;&lt;br /&gt;
{{!}}}&lt;br /&gt;
The x, y &amp;amp; z components of the vector are used to represent red, green, and blue respectively. The range is different then traditional RGB, instead of being 0 -&amp;gt; 255, LSL uses 0 -&amp;gt; 1. &amp;lt;1.0, 1.0, 1.0&amp;gt;, means &amp;quot;white&amp;quot; and &amp;lt;0.0, 0.0, 0.0&amp;gt; means &amp;quot;black&amp;quot;:&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS,&amp;quot;White&amp;quot;, &amp;lt;1.0, 1.0, 1.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS, &amp;quot;Black&amp;quot;, &amp;lt;0.0, 0.0, 0.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
The 1.0 is the alpha setting. 1.0 means fully opaque, and 0.0 would be completely transparent (invisible):&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS, &amp;quot;Half transparent green&amp;quot;, &amp;lt;0.0, 1.0, 0.0&amp;gt;, 0.5);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
===Multiple lines===&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS, &amp;quot;One line\nTwo lines&amp;quot;, &amp;lt;1.0, 1.0, 0.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers=&lt;br /&gt;
Create this script in inventory and drag it onto an object to erase all its set texts:&lt;br /&gt;
&amp;lt;lsl&amp;gt;// http://wiki.secondlife.com/wiki/llSetLinkText&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetLinkText(LINK_SET, &amp;quot;&amp;quot;, &amp;lt;1.0, 1.0, 1.0&amp;gt;, 1.0);&lt;br /&gt;
        llRemoveInventory(llGetScriptName());&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|notes=If you use [[LINK_THIS]] as &#039;&#039;&#039;linknumber&#039;&#039;&#039;, this function will have the same effect than [[llSetText]]&lt;br /&gt;
|also&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llSetText]]}}&lt;br /&gt;
|also_articles=&lt;br /&gt;
{{LSL DefineRow||[[:Category:LSL Examples|Examples]]: [[SplitLine]]|Insert &#039;new line&#039; escape codes at certain positions of a string}}&lt;br /&gt;
|cat1=Effects&lt;br /&gt;
|cat2=Prim&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSetLinkText&amp;diff=82898</id>
		<title>LlSetLinkText</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSetLinkText&amp;diff=82898"/>
		<updated>2008-08-05T07:04:09Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: Grumble, grumble, grumble&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Function/link|linknumber|}}{{LSL Function/color|color}}{{LSL Function/alpha|alpha}}&lt;br /&gt;
{{LSL_Function&lt;br /&gt;
|func=llSetLinkText&lt;br /&gt;
|sort=SetLinkText&lt;br /&gt;
|func_id|mode=request|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|p1_type=integer|p1_name=linknumber&lt;br /&gt;
|p2_type=string|p2_name=text|p2_desc=text to display&lt;br /&gt;
|p3_type=vector|p3_name=color&lt;br /&gt;
|p4_type=float|p4_name=alpha&lt;br /&gt;
|func_desc=If a prim exists in the link chain at &#039;&#039;&#039;linknumber&#039;&#039;&#039;, displays &#039;&#039;&#039;text&#039;&#039;&#039; that hovers over the prim with specific &#039;&#039;&#039;color&#039;&#039;&#039; and translucency (specified with &#039;&#039;&#039;alpha&#039;&#039;&#039;). &lt;br /&gt;
|return_text&lt;br /&gt;
|spec=&lt;br /&gt;
|caveats=&lt;br /&gt;
*&#039;&#039;&#039;text&#039;&#039;&#039; is limited to 254 bytes, if the string is longer it will be truncated to 254 bytes.&lt;br /&gt;
*Floating text can be seen through walls and other object. Be considerate of neighbors in malls and apartment buildings.&lt;br /&gt;
*There is no way for a script to determine the prims current floating text or detect when it is changed.&lt;br /&gt;
**There is no [[llGetText]] function or [[CHANGED_TEXT]] [[changed]] event flag.&lt;br /&gt;
*Removing the script or deactivating it will not remove the prims floating text.&lt;br /&gt;
**Floating text is a prim property and does not depend on the script which set it to continue to exist.&lt;br /&gt;
*To remove floating text from the prim number &#039;&#039;&#039;linknumber&#039;&#039;&#039;, use the following:&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetText(linknumber, &amp;quot;&amp;quot;, &amp;lt;1.0, 1.0, 1.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
*Vertical whitespace is removed from the end of the text string, so if you want vertical whitespace put any character (like a space) on the last line:&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS, &amp;quot;Doesn&#039;t work...\n&amp;quot;, &amp;lt;1.0, 0.0, 0.0&amp;gt;, 1.0);&lt;br /&gt;
llSetLinkText(LINK_THIS, &amp;quot;It works!\n &amp;quot;, &amp;lt;0.0, 1.0, 0.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|examples=&lt;br /&gt;
Example of how llSetLinkText could be used to show prims names and link numbers in red text:&lt;br /&gt;
&amp;lt;lsl&amp;gt;default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
         integer link = llGetNumberOfPrims();&lt;br /&gt;
	 for (; link &amp;gt;= 0; --link)&lt;br /&gt;
	 {&lt;br /&gt;
             llSetLinkText(link, (string)link + &amp;quot;: &amp;quot; + llGetLinkName(link), &amp;lt;1.0, 0.0, 0.0&amp;gt;, 1.0);&lt;br /&gt;
         }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
By default the floating text will appear on a single line. However, the floating text can be spread over multiple lines by using a line break &amp;quot;\n&amp;quot; (read [[SplitLine]] in section &#039;See Also&#039;).&lt;br /&gt;
===Color &amp;amp; Alpha===&lt;br /&gt;
{{{!}} class=&amp;quot;sortable&amp;quot; {{Prettytable|style=float:right; margin-top:0;}}&lt;br /&gt;
{{!}}- {{Hl2}}&lt;br /&gt;
! Color&lt;br /&gt;
! Code&lt;br /&gt;
{{!}}- style=&amp;quot;background:white&amp;quot;&lt;br /&gt;
{{!}}White &lt;br /&gt;
{{!}}&amp;lt;1.0, 1.0, 1.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:grey&amp;quot;&lt;br /&gt;
{{!}}Grey &lt;br /&gt;
{{!}}&amp;lt;0.5, 0.5, 0.5&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:black; color:white;&amp;quot;&lt;br /&gt;
{{!}}{{!}}Black &lt;br /&gt;
{{!}}&amp;lt;0.0, 0.0, 0.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:red; color:white;&amp;quot;&lt;br /&gt;
{{!}}Red&lt;br /&gt;
{{!}}&amp;lt;1.0, 0.0, 0.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:green; color:white;&amp;quot;&lt;br /&gt;
{{!}}Green&lt;br /&gt;
{{!}}&amp;lt;0.0, 1.0, 0.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:blue; color:white;&amp;quot;&lt;br /&gt;
{{!}}Blue&lt;br /&gt;
{{!}}&amp;lt;0.0, 0.0, 1.0&amp;gt;&lt;br /&gt;
{{!}}}&lt;br /&gt;
The x, y &amp;amp; z components of the vector are used to represent red, green, and blue respectively. The range is different then traditional RGB, instead of being 0 -&amp;gt; 255, LSL uses 0 -&amp;gt; 1. &amp;lt;1.0, 1.0, 1.0&amp;gt;, means &amp;quot;white&amp;quot; and &amp;lt;0.0, 0.0, 0.0&amp;gt; means &amp;quot;black&amp;quot;:&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS,&amp;quot;White&amp;quot;, &amp;lt;1.0, 1.0, 1.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS, &amp;quot;Black&amp;quot;, &amp;lt;0.0, 0.0, 0.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
The 1.0 is the alpha setting. 1.0 means fully opaque, and 0.0 would be completely transparent (invisible):&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS, &amp;quot;Half transparent green&amp;quot;, &amp;lt;0.0, 1.0, 0.0&amp;gt;, 0.5);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
===Multiple lines===&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS, &amp;quot;One line\nTwo lines&amp;quot;, &amp;lt;1.0, 1.0, 0.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers=&lt;br /&gt;
Create this script in inventory and drag it onto an object to erase all its set texts:&lt;br /&gt;
&amp;lt;lsl&amp;gt;// http://wiki.secondlife.com/wiki/llSetLinkText&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetLinkText(LINK_SET, &amp;quot;&amp;quot;, &amp;lt;1.0, 1.0, 1.0&amp;gt;, 1.0);&lt;br /&gt;
        llRemoveInventory(llGetScriptName());&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|notes=If you use [[LINK_THIS]] as &#039;&#039;&#039;linknumber&#039;&#039;&#039;, this function will have the same effect than [[llSetText]]&lt;br /&gt;
|also&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llSetText]]}}&lt;br /&gt;
|also_articles=&lt;br /&gt;
{{LSL DefineRow||[[:Category:LSL Examples|Examples]]: [[SplitLine]]|Insert &#039;new line&#039; escape codes at certain positions of a string}}&lt;br /&gt;
|cat1=Effects&lt;br /&gt;
|cat2=Prim&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSetLinkText&amp;diff=82897</id>
		<title>LlSetLinkText</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSetLinkText&amp;diff=82897"/>
		<updated>2008-08-05T07:01:16Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Function/link|linknumber|}}{{LSL Function/color|color}}{{LSL Function/alpha|alpha}}&lt;br /&gt;
{{LSL_Function&lt;br /&gt;
|func=llSetLinkText&lt;br /&gt;
|sort=SetLinkText&lt;br /&gt;
|func_id|mode=request|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|p1_type=integer|p1_name=linknumber&lt;br /&gt;
|p2_type=string|p2_name=text|p2_desc=text to display&lt;br /&gt;
|p3_type=vector|p3_name=color&lt;br /&gt;
|p4_type=float|p4_name=alpha&lt;br /&gt;
|func_desc=If a prim exists in the link chain at &#039;&#039;&#039;linknumber&#039;&#039;&#039;, displays &#039;&#039;&#039;text&#039;&#039;&#039; that hovers over the prim with specific &#039;&#039;&#039;color&#039;&#039;&#039; and translucency (specified with &#039;&#039;&#039;alpha&#039;&#039;&#039;). &lt;br /&gt;
|return_text&lt;br /&gt;
|spec=&lt;br /&gt;
|caveats=&lt;br /&gt;
*&#039;&#039;&#039;text&#039;&#039;&#039; is limited to 254 bytes, if the string is longer it will be truncated to 254 bytes.&lt;br /&gt;
*Floating text can be seen through walls and other object. Be considerate of neighbors in malls and apartment buildings.&lt;br /&gt;
*There is no way for a script to determine the prims current floating text or detect when it is changed.&lt;br /&gt;
**There is no [[llGetText]] function or [[CHANGED_TEXT]] [[changed]] event flag.&lt;br /&gt;
*Removing the script or deactivating it will not remove the prims floating text.&lt;br /&gt;
**Floating text is a prim property and does not depend on the script which set it to continue to exist.&lt;br /&gt;
*To remove floating text from the prim number &#039;&#039;&#039;linknumber&#039;&#039;&#039;, use the following:&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetText(linknumber, &amp;quot;&amp;quot;, &amp;lt;1.0, 1.0, 1.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
*Vertical whitespace is removed from the end of the text string, so if you want vertical whitespace put any character (like a space) on the last line:&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS, &amp;quot;Doesn&#039;t work...\n&amp;quot;, &amp;lt;1.0, 0.0, 0.0&amp;gt;, 1.0);&lt;br /&gt;
llSetLinkText(LINK_THIS, &amp;quot;It works!\n &amp;quot;, &amp;lt;0.0, 1.0, 0.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|examples=&lt;br /&gt;
Example of how llSetLinkText could be used to show prims names and link numbers in red text:&lt;br /&gt;
&amp;lt;lsl&amp;gt;default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
         integer link = llGetNumberOfPrims();&lt;br /&gt;
	 for (; link &amp;gt;= 0; --link)&lt;br /&gt;
	 {&lt;br /&gt;
             llSetLinkText(link, (string)link + &amp;quot;: &amp;quot; + llGetLinkName(link), &amp;lt;1.0, 0.0, 0.0&amp;gt;, 1.0);&lt;br /&gt;
         }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
By default the floating text will appear on a single line. However, the floating text can be spread over multiple lines by using a line break &amp;quot;\n&amp;quot; (read [[SplitLine]] in section &#039;See Also&#039;).&lt;br /&gt;
===Color &amp;amp; Alpha===&lt;br /&gt;
{{{!}} class=&amp;quot;sortable&amp;quot; {{Prettytable|style=float:right; margin-top:0;}}&lt;br /&gt;
{{!}}- {{Hl2}}&lt;br /&gt;
! Color&lt;br /&gt;
! Code&lt;br /&gt;
{{!}}- style=&amp;quot;background:white&amp;quot;&lt;br /&gt;
{{!}}White &lt;br /&gt;
{{!}}&amp;lt;1.0, 1.0, 1.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:grey&amp;quot;&lt;br /&gt;
{{!}}Grey &lt;br /&gt;
{{!}}&amp;lt;0.5, 0.5, 0.5&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:black; color:white;&amp;quot;&lt;br /&gt;
{{!}}{{!}}Black &lt;br /&gt;
{{!}}&amp;lt;0.0, 0.0, 0.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:red; color:white;&amp;quot;&lt;br /&gt;
{{!}}Red&lt;br /&gt;
{{!}}&amp;lt;1.0, 0.0, 0.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:green; color:white;&amp;quot;&lt;br /&gt;
{{!}}Green&lt;br /&gt;
{{!}}&amp;lt;0.0, 1.0, 0.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:blue; color:white;&amp;quot;&lt;br /&gt;
{{!}}Blue&lt;br /&gt;
{{!}}&amp;lt;0.0, 0.0, 1.0&amp;gt;&lt;br /&gt;
{{!}}}&lt;br /&gt;
The x, y &amp;amp; z components of the vector are used to represent red, green, and blue respectively. The range is different then traditional RGB, instead of being 0 -&amp;gt; 255, LSL uses 0 -&amp;gt; 1. &amp;lt;1.0, 1.0, 1.0&amp;gt;, means &amp;quot;white&amp;quot; and &amp;lt;0.0, 0.0, 0.0&amp;gt; means &amp;quot;black&amp;quot;:&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS,&amp;quot;White&amp;quot;, &amp;lt;1.0, 1.0, 1.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS, &amp;quot;Black&amp;quot;, &amp;lt;0.0, 0.0, 0.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
The 1.0 is the alpha setting. 1.0 means fully opaque, and 0.0 would be completely transparent (invisible):&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS, &amp;quot;Half transparent green&amp;quot;, &amp;lt;0.0, 1.0, 0.0&amp;gt;, 0.5);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
===Multiple lines===&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(&amp;quot;One line\nTwo lines&amp;quot;, &amp;lt;0.0, 1.0, 0.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers=&lt;br /&gt;
Create this script in inventory and drag it onto an object to erase all its set texts:&lt;br /&gt;
&amp;lt;lsl&amp;gt;// http://wiki.secondlife.com/wiki/llSetLinkText&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetLinkText(LINK_SET, &amp;quot;&amp;quot;, &amp;lt;1.0, 1.0, 1.0&amp;gt;, 1.0);&lt;br /&gt;
        llRemoveInventory(llGetScriptName());&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|notes=If you use [[LINK_THIS]] as &#039;&#039;&#039;linknumber&#039;&#039;&#039;, this function will have the same effect than [[llSetText]]&lt;br /&gt;
|also&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llSetText]]}}&lt;br /&gt;
|also_articles=&lt;br /&gt;
{{LSL DefineRow||[[:Category:LSL Examples|Examples]]: [[SplitLine]]|Insert &#039;new line&#039; escape codes at certain positions of a string}}&lt;br /&gt;
|cat1=Effects&lt;br /&gt;
|cat2=Prim&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSetLinkText&amp;diff=82896</id>
		<title>LlSetLinkText</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSetLinkText&amp;diff=82896"/>
		<updated>2008-08-05T06:57:45Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: New page: {{LSL Function/link|linknumber|}}{{LSL Function/color|color}}{{LSL Function/alpha|alpha}} {{LSL_Function |func=llSetLinkText |sort=SetLinkText |func_id|mode=request|func_sleep=0.0|func_ene...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Function/link|linknumber|}}{{LSL Function/color|color}}{{LSL Function/alpha|alpha}}&lt;br /&gt;
{{LSL_Function&lt;br /&gt;
|func=llSetLinkText&lt;br /&gt;
|sort=SetLinkText&lt;br /&gt;
|func_id|mode=request|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|p1_type=integer|p1_name=linknumber&lt;br /&gt;
|p2_type=string|p2_name=text|p2_desc=text to display&lt;br /&gt;
|p3_type=vector|p3_name=color&lt;br /&gt;
|p4_type=float|p4_name=alpha&lt;br /&gt;
|func_desc=If a prim exists in the link chain at &#039;&#039;&#039;linknumber&#039;&#039;&#039;, displays &#039;&#039;&#039;text&#039;&#039;&#039; that hovers over the prim with specific &#039;&#039;&#039;color&#039;&#039;&#039; and translucency (specified with &#039;&#039;&#039;alpha&#039;&#039;&#039;). &lt;br /&gt;
|return_text&lt;br /&gt;
|spec=&lt;br /&gt;
|caveats=&lt;br /&gt;
*&#039;&#039;&#039;text&#039;&#039;&#039; is limited to 254 bytes, if the string is longer it will be truncated to 254 bytes.&lt;br /&gt;
*Floating text can be seen through walls and other object. Be considerate of neighbors in malls and apartment buildings.&lt;br /&gt;
*There is no way for a script to determine the prims current floating text or detect when it is changed.&lt;br /&gt;
**There is no [[llGetText]] function or [[CHANGED_TEXT]] [[changed]] event flag.&lt;br /&gt;
*Removing the script or deactivating it will not remove the prims floating text.&lt;br /&gt;
**Floating text is a prim property and does not depend on the script which set it to continue to exist.&lt;br /&gt;
*To remove floating text from the prim number &#039;&#039;&#039;linknumber&#039;&#039;&#039;, use the following:&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetText(linknumber, &amp;quot;&amp;quot;, &amp;lt;1.0, 1.0, 1.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
*Vertical whitespace is removed from the end of the text string, so if you want vertical whitespace put any character (like a space) on the last line:&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS, &amp;quot;Doesn&#039;t work...\n&amp;quot;, &amp;lt;1.0, 0.0, 0.0&amp;gt;, 1.0);&lt;br /&gt;
llSetLinkText(LINK_THIS, &amp;quot;It works!\n &amp;quot;, &amp;lt;0.0, 1.0, 0.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|examples=&lt;br /&gt;
Example of how llSetLinkText could be used to show prims names and link numbers in green text:&lt;br /&gt;
&amp;lt;lsl&amp;gt;default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
         integer link = llGetNumberOfPrims();&lt;br /&gt;
		 for (; link &amp;gt;= 0; --link)&lt;br /&gt;
		 {&lt;br /&gt;
         	llSetLinkText(link, (string)link + &amp;quot;: &amp;quot; + llGetLinkName(link), &amp;lt;0.0, 1.0, 0.0&amp;gt;, 1.0);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
By default the floating text will appear on a single line. However, the floating text can be spread over multiple lines by using a line break &amp;quot;\n&amp;quot; (read [[SplitLine]] in section &#039;See Also&#039;).&lt;br /&gt;
===Color &amp;amp; Alpha===&lt;br /&gt;
{{{!}} class=&amp;quot;sortable&amp;quot; {{Prettytable|style=float:right; margin-top:0;}}&lt;br /&gt;
{{!}}- {{Hl2}}&lt;br /&gt;
! Color&lt;br /&gt;
! Code&lt;br /&gt;
{{!}}- style=&amp;quot;background:white&amp;quot;&lt;br /&gt;
{{!}}White &lt;br /&gt;
{{!}}&amp;lt;1.0, 1.0, 1.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:grey&amp;quot;&lt;br /&gt;
{{!}}Grey &lt;br /&gt;
{{!}}&amp;lt;0.5, 0.5, 0.5&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:black; color:white;&amp;quot;&lt;br /&gt;
{{!}}{{!}}Black &lt;br /&gt;
{{!}}&amp;lt;0.0, 0.0, 0.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:red; color:white;&amp;quot;&lt;br /&gt;
{{!}}Red&lt;br /&gt;
{{!}}&amp;lt;1.0, 0.0, 0.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:green; color:white;&amp;quot;&lt;br /&gt;
{{!}}Green&lt;br /&gt;
{{!}}&amp;lt;0.0, 1.0, 0.0&amp;gt;&lt;br /&gt;
{{!}}- style=&amp;quot;background:blue; color:white;&amp;quot;&lt;br /&gt;
{{!}}Blue&lt;br /&gt;
{{!}}&amp;lt;0.0, 0.0, 1.0&amp;gt;&lt;br /&gt;
{{!}}}&lt;br /&gt;
The x, y &amp;amp; z components of the vector are used to represent red, green, and blue respectively. The range is different then traditional RGB, instead of being 0 -&amp;gt; 255, LSL uses 0 -&amp;gt; 1. &amp;lt;1.0, 1.0, 1.0&amp;gt;, means &amp;quot;white&amp;quot; and &amp;lt;0.0, 0.0, 0.0&amp;gt; means &amp;quot;black&amp;quot;:&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS,&amp;quot;White&amp;quot;, &amp;lt;1.0, 1.0, 1.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS, &amp;quot;Black&amp;quot;, &amp;lt;0.0, 0.0, 0.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
The 1.0 is the alpha setting. 1.0 means fully opaque, and 0.0 would be completely transparent (invisible):&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(LINK_THIS, &amp;quot;Half transparent green&amp;quot;, &amp;lt;0.0, 1.0, 0.0&amp;gt;, 0.5);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
===Multiple lines===&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetLinkText(&amp;quot;One line\nTwo lines&amp;quot;, &amp;lt;0.0, 1.0, 0.0&amp;gt;, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers=&lt;br /&gt;
Create this script in inventory and drag it onto an object to erase all its set texts:&lt;br /&gt;
&amp;lt;lsl&amp;gt;// http://wiki.secondlife.com/wiki/llSetLinkText&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetLinkText(LINK_SET, &amp;quot;&amp;quot;, &amp;lt;1.0, 1.0, 1.0&amp;gt;, 1.0);&lt;br /&gt;
        llRemoveInventory(llGetScriptName());&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|notes=If you use [[LINK_THIS]] as &#039;&#039;&#039;linknumber&#039;&#039;&#039;, this function will have the same effect than [[llSetText]]&lt;br /&gt;
|also&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llSetText]]}}&lt;br /&gt;
|also_articles=&lt;br /&gt;
{{LSL DefineRow||[[:Category:LSL Examples|Examples]]: [[SplitLine]]|Insert &#039;new line&#039; escape codes at certain positions of a string}}&lt;br /&gt;
|cat1=Effects&lt;br /&gt;
|cat2=Prim&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlParcelSay&amp;diff=82455</id>
		<title>LlParcelSay</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlParcelSay&amp;diff=82455"/>
		<updated>2008-08-03T06:46:42Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: New page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function/chat|channel|msg}}{{LSL_Function&lt;br /&gt;
|func=llParcelSay&lt;br /&gt;
|sort=ParcelSay&lt;br /&gt;
|func_id&lt;br /&gt;
|mode=request&lt;br /&gt;
|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|p1_type=integer|p1_name=channel|p1_desc&lt;br /&gt;
|p2_type=string|p2_name=msg|p2_desc&lt;br /&gt;
|func_desc=Says the string &#039;&#039;&#039;msg&#039;&#039;&#039; on channel number &#039;&#039;&#039;channel&#039;&#039;&#039; that can be &lt;br /&gt;
heard anywhere in the [[parcel]] by an agent (when on the {{#var:PUBLIC_CHANNEL}}) &lt;br /&gt;
or by a script [[listen|listening]] on &#039;&#039;&#039;channel&#039;&#039;&#039;.&lt;br /&gt;
|func_footnote=Regardless of where the prim is, the message will not travel over parcel borders.&lt;br /&gt;
&lt;br /&gt;
See: Jira SVC-1224.&lt;br /&gt;
|return_text&lt;br /&gt;
|spec&lt;br /&gt;
|constants&lt;br /&gt;
|caveats=*If &#039;&#039;&#039;msg&#039;&#039;&#039; is longer than 1023 bytes it is truncated to 1023 bytes.&lt;br /&gt;
*A prim can &#039;&#039;&#039;not&#039;&#039;&#039; hear itself, to prevent problems with recursion.&lt;br /&gt;
|examples=&amp;lt;lsl&amp;gt;default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llParcelSay(0, &amp;quot;Abandon ship! This is not a drill!&amp;quot; );&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_events=&lt;br /&gt;
{{LSL DefineRow||[[listen]]|}}&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llListen]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llOwnerSay]]|Sends chat to the owner only}}&lt;br /&gt;
{{LSL DefineRow||[[llWhisper]]|Sends chat limited to 10 meters}}&lt;br /&gt;
{{LSL DefineRow||[[llSay]]|Sends chat limited to 20 meters}}&lt;br /&gt;
{{LSL DefineRow||[[llShout]]|Sends chat limited to 100 meters}}&lt;br /&gt;
{{LSL DefineRow||[[llRegionSay]]|Sends chat region wide}}&lt;br /&gt;
{{LSL DefineRow||[[llInstantMessage]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llDialog]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llTextBox]]|}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes=If one object &#039;says&#039; something to another object (e.g., a button that, when touched,&lt;br /&gt;
turns on a lamp), it is a good idea to use a very negative channel, e.g.,&lt;br /&gt;
&amp;lt;lsl&amp;gt;    llParcelSay(-654321, &amp;quot;light on&amp;quot;);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
Negative channels are popular for script communications because the client is unable to chat directly on those channels (&amp;quot;/-xxxx message&amp;quot; won&#039;t chat &amp;quot;message&amp;quot; on channel &amp;quot;-xxxx&amp;quot;, it will chat &amp;quot;/-xxxx message&amp;quot; on channel zero).&lt;br /&gt;
&lt;br /&gt;
If {{#var:DEBUG_CHANNEL}} is used as &#039;&#039;&#039;channel&#039;&#039;&#039;, the script will say &#039;&#039;&#039;msg&#039;&#039;&#039; to the Script Warning/Error window. &lt;br /&gt;
|cat1=Communications&lt;br /&gt;
|cat2=Chat&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LSL_Useful_Function_WishList&amp;diff=82454</id>
		<title>LSL Useful Function WishList</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LSL_Useful_Function_WishList&amp;diff=82454"/>
		<updated>2008-08-03T06:09:57Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Multi-lang}}&lt;br /&gt;
{{LSL Header}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
NOTE: Please also add your feature requests to the [http://jira.secondlife.com/ JIRA] and create crosslinks between the wiki and the JIRA for voting, and assignment to projects.&lt;br /&gt;
&lt;br /&gt;
==A==&lt;br /&gt;
[[llAddToEstateBanList]]&lt;br /&gt;
&lt;br /&gt;
[[llAddCameraView]]&lt;br /&gt;
&lt;br /&gt;
==C==&lt;br /&gt;
llDetectedDrop?&lt;br /&gt;
&lt;br /&gt;
event: Dropped&lt;br /&gt;
&lt;br /&gt;
(To prevent spamming of objects with llAllowInvenoryDrop)&lt;br /&gt;
[[CHANGED_ALLOWED_DROP]]&lt;br /&gt;
&lt;br /&gt;
[[llChangeLandPassPrice]]&lt;br /&gt;
&lt;br /&gt;
[[llChildPrims2List]]&lt;br /&gt;
&lt;br /&gt;
==D==&lt;br /&gt;
{{LSLG|llDetectedFace}}&lt;br /&gt;
&lt;br /&gt;
==E==&lt;br /&gt;
{{LSLG|llExecuteMenuCommand}}&lt;br /&gt;
&lt;br /&gt;
==F==&lt;br /&gt;
{{LSLG|llForeach}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llFrandom}}&lt;br /&gt;
&lt;br /&gt;
==G==&lt;br /&gt;
{{LSLG|llGetAgentHealth}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetAgentPreferedLanguage}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetAvatarKeysOnEstate}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetAvatarKeysOnParcel}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetCreatorKey}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetEstateBanList}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetGender}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetGroup}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetGroupTitle}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetInventoryDesc}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetLinkPrimitiveParams}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetMyAccountBalance}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetNotecard}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetParcelBanList}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetParcelPopulation}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetPowerThirst}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetPrice}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;s&amp;gt;llGetScriptCreatorKey&amp;lt;/s&amp;gt; - use [[llGetInventoryCreator]]([[llGetScriptName]]()) instead&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetWorldPopulation}}&lt;br /&gt;
&lt;br /&gt;
==I==&lt;br /&gt;
{{LSLG|llInstantMessageGroup}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llInviteToGroup}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llIsValidIntegerString}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llIsValidFloatString}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llIsValidVectorString}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llIsValidRotationString}}&lt;br /&gt;
&lt;br /&gt;
==L==&lt;br /&gt;
{{LSLG|llLBETMB}}&lt;br /&gt;
&lt;br /&gt;
==M==&lt;br /&gt;
{{LSLG|llMapTouch}}&lt;br /&gt;
&lt;br /&gt;
==N==&lt;br /&gt;
{{LSLG|llName2Key}}&lt;br /&gt;
&lt;br /&gt;
==O==&lt;br /&gt;
{{LSLG|llOnRegionReset}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|OverParcel}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|on_error}}&lt;br /&gt;
&lt;br /&gt;
==P==&lt;br /&gt;
{{LSLG|llParcelSay}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llPizza}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llPosition_change}}&lt;br /&gt;
&lt;br /&gt;
==R==&lt;br /&gt;
{{LSLG|llRaiseError}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llRemoveFromEstateBanList}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llRequestClientData}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llReturnObject}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llReturnOwnersObjects}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llRotateAgent}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llRequestPermissions(llGetOwner(), PERMISSION_REFUND);}}&lt;br /&gt;
&lt;br /&gt;
==S==&lt;br /&gt;
{{LSLG|llSameGroupOfficer}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSameGroupOwner}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetLinkMotorParam}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetLinkText}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetCOG}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetNotecard}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetParcelDetails}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetParcelFlags}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSoundex}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSpeakText}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSpeech2Text}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSpeech2TextRemove}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llStringUTF16ToUTF8}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSayWithinRange}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetSunDirection}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetWaterMark}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetCloudLevel}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetTouch}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|stopwatch(float precision_time)}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSayTo}}&lt;br /&gt;
&lt;br /&gt;
==T==&lt;br /&gt;
{{LSLG|llTargetOffsetOmega}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llTeleportAgent}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llTriggerLandmark}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llTrackTouches}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llTreeSystem}}&lt;br /&gt;
&lt;br /&gt;
==W==&lt;br /&gt;
{{LSLG|llWriteToNotecard}}&lt;br /&gt;
&lt;br /&gt;
==Other functionality==&lt;br /&gt;
{{LSLG|Block comments}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|True tab-stops}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Code Folding}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Windowed Scripting}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Switch Statement}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Array}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|on_unrez|Event: Unrez / Delete}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Conditionals}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|State variables}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Object Orientation aka OOP or OO}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Various C++ aspects should be implemented in LSL, Classes, Switch Statements, pointers, etc.}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Receive instant messages}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|money transfer denied for stale Event}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Nestable lists}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Nesting of Child Prims in a Parent}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LSL_Useful_Function_WishList&amp;diff=82453</id>
		<title>LSL Useful Function WishList</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LSL_Useful_Function_WishList&amp;diff=82453"/>
		<updated>2008-08-03T05:50:06Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Multi-lang}}&lt;br /&gt;
{{LSL Header}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
NOTE: Please also add your feature requests to the [http://jira.secondlife.com/ JIRA] and create crosslinks between the wiki and the JIRA for voting, and assignment to projects.&lt;br /&gt;
&lt;br /&gt;
==A==&lt;br /&gt;
[[llAddToEstateBanList]]&lt;br /&gt;
&lt;br /&gt;
[[llAddCameraView]]&lt;br /&gt;
&lt;br /&gt;
==C==&lt;br /&gt;
llDetectedDrop?&lt;br /&gt;
&lt;br /&gt;
event: Dropped&lt;br /&gt;
&lt;br /&gt;
(To prevent spamming of objects with llAllowInvenoryDrop)&lt;br /&gt;
[[CHANGED_ALLOWED_DROP]]&lt;br /&gt;
&lt;br /&gt;
[[llChangeLandPassPrice]]&lt;br /&gt;
&lt;br /&gt;
[[llChildPrims2List]]&lt;br /&gt;
&lt;br /&gt;
==D==&lt;br /&gt;
{{LSLG|llDetectedFace}}&lt;br /&gt;
&lt;br /&gt;
==E==&lt;br /&gt;
{{LSLG|llExecuteMenuCommand}}&lt;br /&gt;
&lt;br /&gt;
==F==&lt;br /&gt;
{{LSLG|llForeach}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llFrandom}}&lt;br /&gt;
&lt;br /&gt;
==G==&lt;br /&gt;
{{LSLG|llGetAgentHealth}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetAgentPreferedLanguage}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetAvatarKeysOnEstate}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetAvatarKeysOnParcel}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetCreatorKey}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetEstateBanList}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetGender}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetGroup}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetGroupTitle}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetInventoryDesc}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetLinkPrimitiveParams}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetMyAccountBalance}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetNotecard}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetParcelBanList}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetParcelPopulation}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetPowerThirst}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetPrice}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;s&amp;gt;llGetScriptCreatorKey&amp;lt;/s&amp;gt; - use [[llGetInventoryCreator]]([[llGetScriptName]]()) instead&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llGetWorldPopulation}}&lt;br /&gt;
&lt;br /&gt;
==I==&lt;br /&gt;
{{LSLG|llInstantMessageGroup}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llInviteToGroup}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llIsValidIntegerString}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llIsValidFloatString}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llIsValidVectorString}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llIsValidRotationString}}&lt;br /&gt;
&lt;br /&gt;
==L==&lt;br /&gt;
{{LSLG|llLBETMB}}&lt;br /&gt;
&lt;br /&gt;
==M==&lt;br /&gt;
{{LSLG|llMapTouch}}&lt;br /&gt;
&lt;br /&gt;
==N==&lt;br /&gt;
{{LSLG|llName2Key}}&lt;br /&gt;
&lt;br /&gt;
==O==&lt;br /&gt;
{{LSLG|llOnRegionReset}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|OverParcel}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|on_error}}&lt;br /&gt;
&lt;br /&gt;
==P==&lt;br /&gt;
{{LSLG|llPizza}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llPosition_change}}&lt;br /&gt;
&lt;br /&gt;
==R==&lt;br /&gt;
{{LSLG|llRaiseError}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llRemoveFromEstateBanList}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llRequestClientData}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llReturnObject}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llReturnOwnersObjects}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llRotateAgent}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llRequestPermissions(llGetOwner(), PERMISSION_REFUND);}}&lt;br /&gt;
&lt;br /&gt;
==S==&lt;br /&gt;
{{LSLG|llSameGroupOfficer}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSameGroupOwner}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetLinkMotorParam}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetLinkText}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetCOG}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetNotecard}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetParcelDetails}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetParcelFlags}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSoundex}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSpeakText}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSpeech2Text}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSpeech2TextRemove}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llStringUTF16ToUTF8}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSayWithinRange}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetSunDirection}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetWaterMark}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetCloudLevel}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSetTouch}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|stopwatch(float precision_time)}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llSayTo}}&lt;br /&gt;
&lt;br /&gt;
==T==&lt;br /&gt;
{{LSLG|llTargetOffsetOmega}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llTeleportAgent}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llTriggerLandmark}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llTrackTouches}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|llTreeSystem}}&lt;br /&gt;
&lt;br /&gt;
==W==&lt;br /&gt;
{{LSLG|llWriteToNotecard}}&lt;br /&gt;
&lt;br /&gt;
==Other functionality==&lt;br /&gt;
{{LSLG|Block comments}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|True tab-stops}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Code Folding}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Windowed Scripting}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Switch Statement}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Array}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|on_unrez|Event: Unrez / Delete}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Conditionals}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|State variables}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Object Orientation aka OOP or OO}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Various C++ aspects should be implemented in LSL, Classes, Switch Statements, pointers, etc.}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Receive instant messages}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|money transfer denied for stale Event}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Nestable lists}}&lt;br /&gt;
&lt;br /&gt;
{{LSLG|Nesting of Child Prims in a Parent}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSameGroupOfficer&amp;diff=79119</id>
		<title>LlSameGroupOfficer</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSameGroupOfficer&amp;diff=79119"/>
		<updated>2008-07-18T05:44:33Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: Correction of an error in the script&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Function&lt;br /&gt;
|func=llSameGroupOfficer&lt;br /&gt;
|sort=SameGroupOfficer&lt;br /&gt;
|func_id|mode=request|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|return_type=integer&lt;br /&gt;
|p1_type=key&lt;br /&gt;
|p1_name=agent&lt;br /&gt;
|p1_desc=must be in the same sim and must carry the appropriate group tag&lt;br /&gt;
|func_desc&lt;br /&gt;
|func_footnote=Also returns [[TRUE]] if the object is deeded to the group in which &#039;&#039;&#039;agent&#039;&#039;&#039; is an officer&lt;br /&gt;
|return_text=boolean, that is [[TRUE]] if &#039;&#039;&#039;agent&#039;&#039;&#039; is officer in the same group than the object, otherwise [[FALSE]]&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&amp;lt;lsl&amp;gt;// Gives inventory object only to officers of the same group than the object&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer number)&lt;br /&gt;
    {&lt;br /&gt;
        --number;&lt;br /&gt;
        for (; number &amp;gt;= 0; --number)&lt;br /&gt;
        {&lt;br /&gt;
            key avatar = llDetectedKey(number);&lt;br /&gt;
&lt;br /&gt;
            if (llSameGroupOfficer(avatar))&lt;br /&gt;
            {&lt;br /&gt;
              llGiveInventory(avatar, llGetInventoryName(INVENTORY_OBJECT, 0));&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
              llSay(0, &amp;quot;You are not an officer of my group!&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llDetectedGroup]]|Used in conjunction with {{LSLGC|Detected|detection}} events}}&lt;br /&gt;
{{LSL DefineRow||[[llSameGroup]]}}&lt;br /&gt;
{{LSL DefineRow||[[llSameGroupOwner]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSameGroupOwner&amp;diff=79118</id>
		<title>LlSameGroupOwner</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSameGroupOwner&amp;diff=79118"/>
		<updated>2008-07-18T05:43:28Z</updated>

		<summary type="html">&lt;p&gt;Kaluura Boa: Correction of an error in the script&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Function&lt;br /&gt;
|func=llSameGroupOwner&lt;br /&gt;
|sort=SameGroupOwner&lt;br /&gt;
|func_id|mode=request|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|return_type=integer&lt;br /&gt;
|p1_type=key&lt;br /&gt;
|p1_name=agent&lt;br /&gt;
|p1_desc=must be in the same sim and must carry the appropriate group tag&lt;br /&gt;
|func_desc&lt;br /&gt;
|func_footnote=Also returns [[TRUE]] if the object is deeded to the group of which &#039;&#039;&#039;agent&#039;&#039;&#039; is an owner&lt;br /&gt;
|return_text=boolean, that is [[TRUE]] if &#039;&#039;&#039;agent&#039;&#039;&#039; is owner of the same group than the object, otherwise [[FALSE]]&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&amp;lt;lsl&amp;gt;// Gives inventory object only to owners of the same group than the object&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer number)&lt;br /&gt;
    {&lt;br /&gt;
        --number;&lt;br /&gt;
        for (; number &amp;gt;= 0; --number)&lt;br /&gt;
        {&lt;br /&gt;
            key avatar = llDetectedKey(number);&lt;br /&gt;
&lt;br /&gt;
            if (llSameGroupOwner(avatar))&lt;br /&gt;
            {&lt;br /&gt;
              llGiveInventory(avatar, llGetInventoryName(INVENTORY_OBJECT, 0));&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
              llSay(0, &amp;quot;You are not an owner of my group!&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llDetectedGroup]]|Used in conjunction with {{LSLGC|Detected|detection}} events}}&lt;br /&gt;
{{LSL DefineRow||[[llSameGroup]]}}&lt;br /&gt;
{{LSL DefineRow||[[llSameGroupOfficer]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kaluura Boa</name></author>
	</entry>
</feed>