<?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=Phate+Shepherd</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=Phate+Shepherd"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/Phate_Shepherd"/>
	<updated>2026-07-23T21:37:43Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlListen&amp;diff=1209721</id>
		<title>LlListen</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlListen&amp;diff=1209721"/>
		<updated>2020-11-12T06:05:30Z</updated>

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

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

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

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

		<summary type="html">&lt;p&gt;Phate Shepherd: Undo revision 1209701 by Phate Shepherd (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About ==&lt;br /&gt;
&lt;br /&gt;
[[File:HexText_Sample_Display.png]]&lt;br /&gt;
&lt;br /&gt;
HexText is an LSL script to display Unicode text on 8 faced prims within Second Life. Supported is included for Japanese/Chinese, as well as many other languages  and symbols. It is not all-inclusive. There are some code pages that are missing. It does cover the majority of characters that avatars use in Unicode enhanced display names.&lt;br /&gt;
&lt;br /&gt;
There are two display scripts. One is optimized for general usage, the other is optimized for Japanese/Chinese.&lt;br /&gt;
&lt;br /&gt;
The primary font used is Google&#039;s Noto Monospace (Bold &amp;amp; Regular), supplemented with other open source or public domain fonts for code pages not covered by Noto.&lt;br /&gt;
&lt;br /&gt;
The character set is broken up into ~113 individual textures for each supported Unicode code page, covering roughly 28,000 characters. Each texture is a 16 x 16 matrix of characters. To minimize texture memory usage, the majority of textures are rendered at 512 x 256 pixels. Kanji is rendered at 512 x 384 which gets reduced to 512 x 256 at upload. As the textures are 512 x 256, it takes 8 of them to equal the amount of GPU texture memory used by a single 1024 x 1024 texture. I have found that unless you are displaying Kanji, it is rare to use more memory than 2 - 1024 x 1024 textures.&lt;br /&gt;
&lt;br /&gt;
== Acknowledgments ==&lt;br /&gt;
&lt;br /&gt;
Thanks go to Ochi Wolfe for his excellent [[FURWARE_text]] display sytem and documentation. Without his, and his contributors efforts, HexText would have been significantly more difficult to create.&lt;br /&gt;
&lt;br /&gt;
HexText is released under the MIT license.&lt;br /&gt;
&lt;br /&gt;
HexText uses a subset of the [[FURWARE_text/Reference]] command set. HexText does not support virtual text boxes, inline styles or touch queries.&lt;br /&gt;
&lt;br /&gt;
HexText can use displays set up by the [[FURWARE_text/Tutorial#Creating_displays]], however it can only use the 8 faced prim displays. HexText uses display prims with the same description format used by FURWARE text. HexText only supports a single display set per linkset, unlike FURWARE text that can handle multiple displays per linkset. &lt;br /&gt;
&lt;br /&gt;
The HexText texture set was created with [[FURWARE_text/TextureCreator]].&lt;br /&gt;
&lt;br /&gt;
Use of both HexText and the FURWARE text scripts in the same linkset is not recommended.&lt;br /&gt;
&lt;br /&gt;
Although it is technically possible to combine the FURWARE text engine, and HexText to create a Unicode display system with the features of both, I was concerned that it would not fit in a single script, and would therefore suffer performance issues.&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
The following was taken from the FURWARE text manual, edited to remove limitations imposed by HexText. All credit for FURWARE text tools to Ochi Wolfe and his contributors. Hexadeci Mole is only responsible for the alternative HexText Unicode display script and its documentation.&lt;br /&gt;
&lt;br /&gt;
=== Creating displays ===&lt;br /&gt;
&lt;br /&gt;
HexText uses displays created with the FURWARE text display creator available here: https://marketplace.secondlife.com/p/FURWARE-text/141379&lt;br /&gt;
&lt;br /&gt;
You may (and should) use the &amp;quot;&#039;&#039;&#039;FURWARE display creator&#039;&#039;&#039;&amp;quot; to have a perfectly aligned grid of display prims automatically created for you. Every prim will be automatically assigned a special object name that is used internally by the text script so that it knows how to order them correctly, independently of the link order.&lt;br /&gt;
&lt;br /&gt;
Creating a display is simple:&lt;br /&gt;
&lt;br /&gt;
* Rez the display creator on a parcel where you have sufficient permissions.&lt;br /&gt;
* Touch the creator object. A dialog appears where you can set some parameters of the new display:&lt;br /&gt;
** A &#039;&#039;&#039;name&#039;&#039;&#039; for the display. You will use this name to identify which display you wish to manipulate when using multiple displays within one linkset.&lt;br /&gt;
** The number of &#039;&#039;&#039;rows and columns&#039;&#039;&#039; of the display (the columns are counted in prims here, not in characters).&lt;br /&gt;
** The number of &#039;&#039;&#039;faces per prim&#039;&#039;&#039;. There are mesh prims from 1 to 8 faces available. HexText can only use the 8 face display prims.&lt;br /&gt;
* When you&#039;re happy with the settings, click &amp;quot;Create&amp;quot; to start rezzing the prims. Link them to your creation as appropriate. (I would not recommend that any display prim be link #1 in a linkset)&lt;br /&gt;
&lt;br /&gt;
=== Setup and initialization ===&lt;br /&gt;
&lt;br /&gt;
When you have created your display and linked it together with your creation,  put &#039;&#039;&#039;a single copy&#039;&#039;&#039; of the HexText Script (listed below) into the linkset instead of the FURWARE text script. The script does &#039;&#039;&#039;not&#039;&#039;&#039; have to be in the root prim.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important hint:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You may wish to send some initial commands to the text script as soon as its initialization is done. A reset of the text script may happen in a number of cases:&lt;br /&gt;
&lt;br /&gt;
* The script was just put into the object.&lt;br /&gt;
* The object in which the script resides was shift-copied.&lt;br /&gt;
* The linkset has changed (then the script needs to search for display prims again).&lt;br /&gt;
* The script was reset manually (for instance using the &amp;quot;fw_reset&amp;quot; command).&lt;br /&gt;
&lt;br /&gt;
In order to know when exactly the script is ready to take commands, it sends a link message to the whole set with the &amp;quot;id&amp;quot; parameter set to &amp;quot;fw_ready&amp;quot;. It is &#039;&#039;&#039;good practice&#039;&#039;&#039; to watch for these messages and send your initialization commands when receiving this message. Your code could look something like this:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
link_message(integer sender, integer num, string str, key id) {&lt;br /&gt;
    if (id == &amp;quot;fw_ready&amp;quot;) {&lt;br /&gt;
        // Set your default color, alignment, wrapping, trim, etc.&lt;br /&gt;
        llMessageLinked(sender, 0, &amp;quot;c=red;a=center;w=word&amp;quot;, &amp;quot;fw_conf&amp;quot;);&lt;br /&gt;
         // If your default display is not blank, send the default text&lt;br /&gt;
        llMessageLinked(sender, 0, &amp;quot;Default text&amp;quot;, &amp;quot;fw_data&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        // ...&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LSL Scripts ===&lt;br /&gt;
&lt;br /&gt;
There are two variants of HexText. The generic version allocates one prim face for each character. The 2XKanji version allocates 2 faces for Kanji/Katakana. This makes C/J/K characters easier to read, but the script is a little more convoluted. Oddly, performance of the 2XKanji version sometimes surpasses the Generic version. Only use one of the scripts below in your linkset. Do not use the FURWARE text script in the same linkset that one of these scripts occupy.&lt;br /&gt;
&lt;br /&gt;
* Generic Script (LSL Mono): [[HexText/HexText_Generic]]&lt;br /&gt;
* 2XKanji Script (LSL Mono): [[HexText/HexText_2XKanji]]&lt;br /&gt;
&lt;br /&gt;
== Reference Manual ==&lt;br /&gt;
&lt;br /&gt;
Commands supported in HexText (a subset of the FURWARE text command set.)&lt;br /&gt;
&lt;br /&gt;
=== Commands ===&lt;br /&gt;
&lt;br /&gt;
The following commands can be issued from other scripts in your linkset to control HexText.&lt;br /&gt;
==== fw_data ====&lt;br /&gt;
&lt;br /&gt;
Display a string on the screen. The entire screen is overwritten with the text message. If you wish to only overwrite a portion of the display, consider fw_direct.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, 0, &amp;quot;Some text to draw.&amp;quot;, &amp;quot;fw_data&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== fw_direct ====&lt;br /&gt;
&lt;br /&gt;
This command is not supported by FURWARE text. It is unique to HexText to display text at specific display coordinates. It does not erase the display when called, instead, it overwrites existing characters in the display. Trim is ignored with fw_direct.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, 0, &amp;quot;Some text to draw.&amp;quot;, &amp;quot;fw_direct:10:2&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Display the string &amp;quot;Some text to draw.&amp;quot; starting at the 11th column, 3rd row (Column/Row numbering starts at 0.)&lt;br /&gt;
&lt;br /&gt;
==== fw_conf &amp;amp; fw_defaultconf ====&lt;br /&gt;
&lt;br /&gt;
Sets the global style preference for the display. Unlike FURWARE text, fw_conf is treated the same as fw_defaultconf.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, 0, &amp;quot;c=red; a=center&amp;quot;, &amp;quot;fw_conf&amp;quot;);&lt;br /&gt;
llMessageLinked(LINK_SET, 0, &amp;quot;c=red; a=center&amp;quot;, &amp;quot;fw_defaultconf&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== fw_notify ====&lt;br /&gt;
&lt;br /&gt;
Enable or disable link message notifications when the script has completed rendering. Off by default.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, 0, &amp;quot;on&amp;quot;, &amp;quot;fw_notify&amp;quot;);&lt;br /&gt;
llMessageLinked(LINK_SET, 0, &amp;quot;off&amp;quot;, &amp;quot;fw_notify&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A link message will be sent to the linkset after rendering is complete with the key value of &amp;quot;fw_done&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== fw_memory ====&lt;br /&gt;
&lt;br /&gt;
Tells the owner how much memory is available.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, 0, &amp;quot;&amp;quot;, &amp;quot;fw_memory&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== fw_reset ====&lt;br /&gt;
&lt;br /&gt;
Performs a full reset on the text script.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, 0, &amp;quot;&amp;quot;, &amp;quot;fw_reset&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A link message will be sent to the linkset after reset is complete with the key value of &amp;quot;fw_ready&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Style settings ===&lt;br /&gt;
&lt;br /&gt;
Text styles and format settings are specified using special strings. They are used for global settings (&amp;quot;fw_conf&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
A single setting is given as a &#039;&#039;&#039;key=value&#039;&#039;&#039; pair, for example &#039;&#039;&#039;c=red&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Multiple settings are separated by &amp;quot;&#039;&#039;&#039;;&#039;&#039;&#039;&amp;quot;, for example &#039;&#039;&#039;c=red; a=center; w=none&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In the following table: &#039;&#039;Italic&#039;&#039; = Default&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
! Setting&lt;br /&gt;
! Key&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Font color&lt;br /&gt;
| c&lt;br /&gt;
| R,G,B&lt;br /&gt;
| Font color as red, green, blue (each in range 0.0-1.0)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| R,G,B,A&lt;br /&gt;
| Font color as red, green, blue, alpha (each in range 0.0-1.0)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| rand&lt;br /&gt;
| Random color (with alpha = 1)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| (predefined)&lt;br /&gt;
| Predefined color, see table below (default is White)&lt;br /&gt;
|-&lt;br /&gt;
| Alignment&lt;br /&gt;
| a&lt;br /&gt;
| &#039;&#039;left&#039;&#039;&lt;br /&gt;
| Alignment left&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| center&lt;br /&gt;
| Alignment centered&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| right&lt;br /&gt;
| Alignment right&lt;br /&gt;
|-&lt;br /&gt;
| Wrapping&lt;br /&gt;
| w&lt;br /&gt;
| &#039;&#039;word&#039;&#039;&lt;br /&gt;
| Wrap after words, if possible&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| char&lt;br /&gt;
| Wrap at any position&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| none&lt;br /&gt;
| No wrapping; cuts overlong lines&lt;br /&gt;
|-&lt;br /&gt;
| Trimming&lt;br /&gt;
| t&lt;br /&gt;
| &#039;&#039;on&#039;&#039;&lt;br /&gt;
| Trims whitespace from beginning and end of lines&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| off&lt;br /&gt;
| Keeps whitespace (except with wrap=word)&lt;br /&gt;
|-&lt;br /&gt;
| Force refresh&lt;br /&gt;
| force&lt;br /&gt;
| on&lt;br /&gt;
| Enables forced refresh of all faces (disables optimizations!)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;off&#039;&#039;&lt;br /&gt;
| Disables forced refresh of all faces (enables optimizations)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Predefined colors ===&lt;br /&gt;
&lt;br /&gt;
You may use the following names in place of color vectors in styles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellspacing=&amp;quot;4&amp;quot; cellpadding=&amp;quot;8&amp;quot; style=&amp;quot;border:black solid 1px;&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#FF0000; color:black; text-align:center;&amp;quot;&amp;gt;red&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#00FF00; color:black; text-align:center;&amp;quot;&amp;gt;green&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#0000FF; color:white; text-align:center;&amp;quot;&amp;gt;blue&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#00FFFF; color:black; text-align:center;&amp;quot;&amp;gt;cyan&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#FF00FF; color:black; text-align:center;&amp;quot;&amp;gt;magenta&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#FFFF00; color:black; text-align:center;&amp;quot;&amp;gt;yellow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#FFFFFF; color:black; text-align:center;&amp;quot;&amp;gt;white&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#C0C0C0; color:white; text-align:center;&amp;quot;&amp;gt;silver&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#800000; color:white; text-align:center;&amp;quot;&amp;gt;darkred&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#008000; color:white; text-align:center;&amp;quot;&amp;gt;darkgreen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#000080; color:white; text-align:center;&amp;quot;&amp;gt;darkblue&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#008080; color:white; text-align:center;&amp;quot;&amp;gt;darkcyan&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#800080; color:white; text-align:center;&amp;quot;&amp;gt;darkmagenta&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#808000; color:white; text-align:center;&amp;quot;&amp;gt;darkyellow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#000000; color:white; text-align:center;&amp;quot;&amp;gt;black&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#808080; color:white; text-align:center;&amp;quot;&amp;gt;gray&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
Probably a lot. Let Hexadeci Mole know.&lt;/div&gt;</summary>
		<author><name>Phate Shepherd</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=HexText&amp;diff=1209701</id>
		<title>HexText</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=HexText&amp;diff=1209701"/>
		<updated>2020-11-03T20:49:08Z</updated>

		<summary type="html">&lt;p&gt;Phate Shepherd: /* Style settings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About ==&lt;br /&gt;
&lt;br /&gt;
[[File:HexText_Sample_Display.png]]&lt;br /&gt;
&lt;br /&gt;
HexText is an LSL script to display Unicode text on 8 faced prims within Second Life. Supported is included for Japanese/Chinese, as well as many other languages  and symbols. It is not all-inclusive. There are some code pages that are missing. It does cover the majority of characters that avatars use in Unicode enhanced display names.&lt;br /&gt;
&lt;br /&gt;
There are two display scripts. One is optimized for general usage, the other is optimized for Japanese/Chinese.&lt;br /&gt;
&lt;br /&gt;
The primary font used is Google&#039;s Noto Monospace (Bold &amp;amp; Regular), supplemented with other open source or public domain fonts for code pages not covered by Noto.&lt;br /&gt;
&lt;br /&gt;
The character set is broken up into ~113 individual textures for each supported Unicode code page, covering roughly 28,000 characters. Each texture is a 16 x 16 matrix of characters. To minimize texture memory usage, the majority of textures are rendered at 512 x 256 pixels. Kanji is rendered at 512 x 384 which gets reduced to 512 x 256 at upload. As the textures are 512 x 256, it takes 8 of them to equal the amount of GPU texture memory used by a single 1024 x 1024 texture. I have found that unless you are displaying Kanji, it is rare to use more memory than 2 - 1024 x 1024 textures.&lt;br /&gt;
&lt;br /&gt;
== Acknowledgments ==&lt;br /&gt;
&lt;br /&gt;
Thanks go to Ochi Wolfe for his excellent [[FURWARE_text]] display sytem and documentation. Without his, and his contributors efforts, HexText would have been significantly more difficult to create.&lt;br /&gt;
&lt;br /&gt;
HexText is released under the MIT license.&lt;br /&gt;
&lt;br /&gt;
HexText uses a subset of the [[FURWARE_text/Reference]] command set. HexText does not support virtual text boxes, inline styles or touch queries.&lt;br /&gt;
&lt;br /&gt;
HexText can use displays set up by the [[FURWARE_text/Tutorial#Creating_displays]], however it can only use the 8 faced prim displays. HexText uses display prims with the same description format used by FURWARE text. HexText only supports a single display set per linkset, unlike FURWARE text that can handle multiple displays per linkset. &lt;br /&gt;
&lt;br /&gt;
The HexText texture set was created with [[FURWARE_text/TextureCreator]].&lt;br /&gt;
&lt;br /&gt;
Use of both HexText and the FURWARE text scripts in the same linkset is not recommended.&lt;br /&gt;
&lt;br /&gt;
Although it is technically possible to combine the FURWARE text engine, and HexText to create a Unicode display system with the features of both, I was concerned that it would not fit in a single script, and would therefore suffer performance issues.&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
The following was taken from the FURWARE text manual, edited to remove limitations imposed by HexText. All credit for FURWARE text tools to Ochi Wolfe and his contributors. Hexadeci Mole is only responsible for the alternative HexText Unicode display script and its documentation.&lt;br /&gt;
&lt;br /&gt;
=== Creating displays ===&lt;br /&gt;
&lt;br /&gt;
HexText uses displays created with the FURWARE text display creator available here: https://marketplace.secondlife.com/p/FURWARE-text/141379&lt;br /&gt;
&lt;br /&gt;
You may (and should) use the &amp;quot;&#039;&#039;&#039;FURWARE display creator&#039;&#039;&#039;&amp;quot; to have a perfectly aligned grid of display prims automatically created for you. Every prim will be automatically assigned a special object name that is used internally by the text script so that it knows how to order them correctly, independently of the link order.&lt;br /&gt;
&lt;br /&gt;
Creating a display is simple:&lt;br /&gt;
&lt;br /&gt;
* Rez the display creator on a parcel where you have sufficient permissions.&lt;br /&gt;
* Touch the creator object. A dialog appears where you can set some parameters of the new display:&lt;br /&gt;
** A &#039;&#039;&#039;name&#039;&#039;&#039; for the display. You will use this name to identify which display you wish to manipulate when using multiple displays within one linkset.&lt;br /&gt;
** The number of &#039;&#039;&#039;rows and columns&#039;&#039;&#039; of the display (the columns are counted in prims here, not in characters).&lt;br /&gt;
** The number of &#039;&#039;&#039;faces per prim&#039;&#039;&#039;. There are mesh prims from 1 to 8 faces available. HexText can only use the 8 face display prims.&lt;br /&gt;
* When you&#039;re happy with the settings, click &amp;quot;Create&amp;quot; to start rezzing the prims. Link them to your creation as appropriate. (I would not recommend that any display prim be link #1 in a linkset)&lt;br /&gt;
&lt;br /&gt;
=== Setup and initialization ===&lt;br /&gt;
&lt;br /&gt;
When you have created your display and linked it together with your creation,  put &#039;&#039;&#039;a single copy&#039;&#039;&#039; of the HexText Script (listed below) into the linkset instead of the FURWARE text script. The script does &#039;&#039;&#039;not&#039;&#039;&#039; have to be in the root prim.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important hint:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You may wish to send some initial commands to the text script as soon as its initialization is done. A reset of the text script may happen in a number of cases:&lt;br /&gt;
&lt;br /&gt;
* The script was just put into the object.&lt;br /&gt;
* The object in which the script resides was shift-copied.&lt;br /&gt;
* The linkset has changed (then the script needs to search for display prims again).&lt;br /&gt;
* The script was reset manually (for instance using the &amp;quot;fw_reset&amp;quot; command).&lt;br /&gt;
&lt;br /&gt;
In order to know when exactly the script is ready to take commands, it sends a link message to the whole set with the &amp;quot;id&amp;quot; parameter set to &amp;quot;fw_ready&amp;quot;. It is &#039;&#039;&#039;good practice&#039;&#039;&#039; to watch for these messages and send your initialization commands when receiving this message. Your code could look something like this:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
link_message(integer sender, integer num, string str, key id) {&lt;br /&gt;
    if (id == &amp;quot;fw_ready&amp;quot;) {&lt;br /&gt;
        // Set your default color, alignment, wrapping, trim, etc.&lt;br /&gt;
        llMessageLinked(sender, 0, &amp;quot;c=red;a=center;w=word&amp;quot;, &amp;quot;fw_conf&amp;quot;);&lt;br /&gt;
         // If your default display is not blank, send the default text&lt;br /&gt;
        llMessageLinked(sender, 0, &amp;quot;Default text&amp;quot;, &amp;quot;fw_data&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        // ...&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LSL Scripts ===&lt;br /&gt;
&lt;br /&gt;
There are two variants of HexText. The generic version allocates one prim face for each character. The 2XKanji version allocates 2 faces for Kanji/Katakana. This makes C/J/K characters easier to read, but the script is a little more convoluted. Oddly, performance of the 2XKanji version sometimes surpasses the Generic version. Only use one of the scripts below in your linkset. Do not use the FURWARE text script in the same linkset that one of these scripts occupy.&lt;br /&gt;
&lt;br /&gt;
* Generic Script (LSL Mono): [[HexText/HexText_Generic]]&lt;br /&gt;
* 2XKanji Script (LSL Mono): [[HexText/HexText_2XKanji]]&lt;br /&gt;
&lt;br /&gt;
== Reference Manual ==&lt;br /&gt;
&lt;br /&gt;
Commands supported in HexText (a subset of the FURWARE text command set.)&lt;br /&gt;
&lt;br /&gt;
=== Commands ===&lt;br /&gt;
&lt;br /&gt;
The following commands can be issued from other scripts in your linkset to control HexText.&lt;br /&gt;
==== fw_data ====&lt;br /&gt;
&lt;br /&gt;
Display a string on the screen. The entire screen is overwritten with the text message. If you wish to only overwrite a portion of the display, consider fw_direct.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, 0, &amp;quot;Some text to draw.&amp;quot;, &amp;quot;fw_data&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== fw_direct ====&lt;br /&gt;
&lt;br /&gt;
This command is not supported by FURWARE text. It is unique to HexText to display text at specific display coordinates. It does not erase the display when called, instead, it overwrites existing characters in the display. Trim is ignored with fw_direct.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, 0, &amp;quot;Some text to draw.&amp;quot;, &amp;quot;fw_direct:10:2&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Display the string &amp;quot;Some text to draw.&amp;quot; starting at the 11th column, 3rd row (Column/Row numbering starts at 0.)&lt;br /&gt;
&lt;br /&gt;
==== fw_conf &amp;amp; fw_defaultconf ====&lt;br /&gt;
&lt;br /&gt;
Sets the global style preference for the display. Unlike FURWARE text, fw_conf is treated the same as fw_defaultconf.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, 0, &amp;quot;c=red; a=center&amp;quot;, &amp;quot;fw_conf&amp;quot;);&lt;br /&gt;
llMessageLinked(LINK_SET, 0, &amp;quot;c=red; a=center&amp;quot;, &amp;quot;fw_defaultconf&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== fw_notify ====&lt;br /&gt;
&lt;br /&gt;
Enable or disable link message notifications when the script has completed rendering. Off by default.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, 0, &amp;quot;on&amp;quot;, &amp;quot;fw_notify&amp;quot;);&lt;br /&gt;
llMessageLinked(LINK_SET, 0, &amp;quot;off&amp;quot;, &amp;quot;fw_notify&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A link message will be sent to the linkset after rendering is complete with the key value of &amp;quot;fw_done&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== fw_memory ====&lt;br /&gt;
&lt;br /&gt;
Tells the owner how much memory is available.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, 0, &amp;quot;&amp;quot;, &amp;quot;fw_memory&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== fw_reset ====&lt;br /&gt;
&lt;br /&gt;
Performs a full reset on the text script.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, 0, &amp;quot;&amp;quot;, &amp;quot;fw_reset&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A link message will be sent to the linkset after reset is complete with the key value of &amp;quot;fw_ready&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Style settings ===&lt;br /&gt;
&lt;br /&gt;
Text styles and format settings are specified using special strings. They are used for global settings (&amp;quot;fw_conf&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
A single setting is given as a &#039;&#039;&#039;key=value&#039;&#039;&#039; pair, for example &#039;&#039;&#039;c=red&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Multiple settings are separated by &amp;quot;&#039;&#039;&#039;;&#039;&#039;&#039;&amp;quot;, for example &#039;&#039;&#039;c=red; a=center; w=none&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In the following table: &#039;&#039;&#039;Bold&#039;&#039;&#039; = Default&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
! Setting&lt;br /&gt;
! Key&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Font color&lt;br /&gt;
| c&lt;br /&gt;
| R,G,B&lt;br /&gt;
| Font color as red, green, blue (each in range 0.0-1.0)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| R,G,B,A&lt;br /&gt;
| Font color as red, green, blue, alpha (each in range 0.0-1.0)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| rand&lt;br /&gt;
| Random color (with alpha = 1)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| (predefined)&lt;br /&gt;
| Predefined color, see table below (default is White)&lt;br /&gt;
|-&lt;br /&gt;
| Alignment&lt;br /&gt;
| a&lt;br /&gt;
| &#039;&#039;&#039;left&#039;&#039;&#039;&lt;br /&gt;
| Alignment left&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| center&lt;br /&gt;
| Alignment centered&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| right&lt;br /&gt;
| Alignment right&lt;br /&gt;
|-&lt;br /&gt;
| Wrapping&lt;br /&gt;
| w&lt;br /&gt;
| &#039;&#039;&#039;word&#039;&#039;&#039;&lt;br /&gt;
| Wrap after words, if possible&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| char&lt;br /&gt;
| Wrap at any position&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| none&lt;br /&gt;
| No wrapping; cuts overlong lines&lt;br /&gt;
|-&lt;br /&gt;
| Trimming&lt;br /&gt;
| t&lt;br /&gt;
| &#039;&#039;&#039;on&#039;&#039;&#039;&lt;br /&gt;
| Trims whitespace from beginning and end of lines&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| off&lt;br /&gt;
| Keeps whitespace (except with wrap=word)&lt;br /&gt;
|-&lt;br /&gt;
| Force refresh&lt;br /&gt;
| force&lt;br /&gt;
| on&lt;br /&gt;
| Enables forced refresh of all faces (disables optimizations!)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;off&#039;&#039;&#039;&lt;br /&gt;
| Disables forced refresh of all faces (enables optimizations)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Predefined colors ===&lt;br /&gt;
&lt;br /&gt;
You may use the following names in place of color vectors in styles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellspacing=&amp;quot;4&amp;quot; cellpadding=&amp;quot;8&amp;quot; style=&amp;quot;border:black solid 1px;&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#FF0000; color:black; text-align:center;&amp;quot;&amp;gt;red&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#00FF00; color:black; text-align:center;&amp;quot;&amp;gt;green&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#0000FF; color:white; text-align:center;&amp;quot;&amp;gt;blue&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#00FFFF; color:black; text-align:center;&amp;quot;&amp;gt;cyan&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#FF00FF; color:black; text-align:center;&amp;quot;&amp;gt;magenta&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#FFFF00; color:black; text-align:center;&amp;quot;&amp;gt;yellow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#FFFFFF; color:black; text-align:center;&amp;quot;&amp;gt;white&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#C0C0C0; color:white; text-align:center;&amp;quot;&amp;gt;silver&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#800000; color:white; text-align:center;&amp;quot;&amp;gt;darkred&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#008000; color:white; text-align:center;&amp;quot;&amp;gt;darkgreen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#000080; color:white; text-align:center;&amp;quot;&amp;gt;darkblue&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#008080; color:white; text-align:center;&amp;quot;&amp;gt;darkcyan&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#800080; color:white; text-align:center;&amp;quot;&amp;gt;darkmagenta&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#808000; color:white; text-align:center;&amp;quot;&amp;gt;darkyellow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#000000; color:white; text-align:center;&amp;quot;&amp;gt;black&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background:#808080; color:white; text-align:center;&amp;quot;&amp;gt;gray&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
Probably a lot. Let Hexadeci Mole know.&lt;/div&gt;</summary>
		<author><name>Phate Shepherd</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User_talk:Strife_Onizuka&amp;diff=1172938</id>
		<title>User talk:Strife Onizuka</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User_talk:Strife_Onizuka&amp;diff=1172938"/>
		<updated>2012-09-28T19:58:13Z</updated>

		<summary type="html">&lt;p&gt;Phate Shepherd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:User:Zai_Lynch/Award}}You found my talk page... Find old discussions take a look at the archives: [[User:Strife_Onizuka/Talkpage_Archive_01|1]] [[User:Strife_Onizuka/Talkpage_Archive_02|2]]&lt;br /&gt;
&lt;br /&gt;
== JIRA issues on LSL function pages ==&lt;br /&gt;
&lt;br /&gt;
Okay, as I&#039;ve made no headway deciphering your templates (not that I&#039;m familiar in the least with the more complex wiki functions in the first place...) I decided just to cut my losses and ask! Basically I was wondering if there&#039;s a reason why [[Template:LSL_Generic/Issues]] doesn&#039;t appear to list all issues, but instead seems to just list bugs only in the same way as [[Template:LSL_Generic/Caveats]]?&lt;br /&gt;
&lt;br /&gt;
I just think it&#039;d be nice if function pages would also summarise popular proposals relating to them in the deep notes section, which is what I believed was intended but it doesn&#039;t appear to do this right now.&lt;br /&gt;
&lt;br /&gt;
For example, if you go to the [[LlStartAnimation]] page, in the deep notes you&#039;ll notice that there are zero issues listed, however, clicking the &amp;quot;Search JIRA for related Issues&amp;quot; link returns quite a few. It might be nice to see the deep notes tweaked to display these, but perhaps with a limit on how many are shown (though llStartAnimation is a fairly popular one to see JIRA issues for and only has 17 issues listed). Anyway, just though I&#039;d ask/request, please poke my talk page if you respond to be sure I remember and look! --[[User:Haravikk Mistral|Haravikk Mistral]] 15:26, 12 September 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:The template is not automatic. Take for example [[llBreakLink]], it lists a single issue in the article, it does this by including the template [[Template:Issues/SVC-3510]]. There are many stub templates like [[Template:Issues/SVC-3510]] that work this way, they contain the information about the issue and pass it along to a template that does the heavy lifting. The value of this method is that a single template exists for the Issue and if the issue is sited on multiple pages, they can all be quickly updated by modifying the template. From an organizational standpoint, it also makes it possible to see what all pertains to a particular issue.&lt;br /&gt;
&lt;br /&gt;
:The thing is, if you want all the issues on the wiki, they need to be imported to the wiki, and regularly updated as changes are made... but that could all be done with a bot. Wonder if [[User:Gigs Taggart|Gigs]] could be enticed to incorporate it into [http://www.sljirastats.com SLJiraStats]?&lt;br /&gt;
&lt;br /&gt;
:The goal of the Deep Notes: Issues section was to contain dead bugs and interesting feature suggestions. I never intended it to contain all issues pertaining to a feature. We don&#039;t add any value by duplicated the JIRA search engine results; the value we can add is by filtering them. Some of the bugs aren&#039;t bugs, and some of the feature suggestions are unworkable; I don&#039;t think these should be given screen space. Considering the resources required to manually include and update the issues, triage has to happen.&lt;br /&gt;
&lt;br /&gt;
:Unfortunately I do not have the free time to work on this, work and other responsibilities eat all my time. *wonders just how true that is* -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 03:10, 16 September 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Ah yeah, seems I&#039;ve completely misunderstood what it was doing! I wasn&#039;t thinking to list everything, just an automatic, and hopefully useful summary of say...the top ten bugs and issues? It sounds like way more work than it&#039;s likely to be worth though so probably better just to forget about it, unless there&#039;s some way to just embed an iframe with a portion of a JIRA search or something similar? But that would probably cause an unacceptable increase in JIRA page requests from people just popping over to look something up. But now I know how it does work I can at least pop useful relevant issues on manually, thanks! -- [[User:Haravikk Mistral|Haravikk Mistral]] 12:36, 18 September 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:A related problem, I&#039;ve tried to add a few top issues of interest to me onto my user page under Key Issues, however, I&#039;ve tried to create two [[Template:IssueTable]] instances, but they both have the same content, despite the value of #issues being different for both. Is this some peculiarity in using this template more than once? If you could take a look at let me know it&#039;d be handy, as IssueTable doesn&#039;t have any documentation =( -- [[User:Haravikk Mistral|Haravikk Mistral]] 11:36, 22 September 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::You are hitting one of the caveats/bugs of the new parser engine. I forget how to get around it. I beleive the issue is intermediate caching, and the way around it is to make the template call dynamic or something like that. Without spending a bunch of time debugging the problem, I just don&#039;t remember how to work around it. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 14:37, 22 September 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::It just struck me what the problem is, it&#039;s caching IssueTable. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 18:27, 22 September 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::Aha! The &amp;quot;subst:&amp;quot; keyword seems to be for this (e.g - &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{subst:User:Haravikk_Mistral/JIRA/Issues/SVC}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;), as I believe it fetches the pre-processed contents of a page rather than the source. In any event, this works in my case as I created sub-pages for each category, I don&#039;t believe it would help for a page with multiple IssueTable instances though, as using subst: for any of them would just create a blank gap, but it solves my problem at least! -- [[User:Haravikk Mistral|Haravikk Mistral]] 11:29, 23 September 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== [[Ghost Detector]] ==&lt;br /&gt;
Thanks.  I discovered that property of [[llKey2Name]] by accident.  It&#039;s odd because, for instance, [[llDetectedName]] gives a non-empty string for ghosted avatars. -- [[User:Something Something|Something Something]] 05:21, 10 November 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Friendly greetings ==&lt;br /&gt;
You seem to have found a &amp;quot;fix&amp;quot; for my horrible script and....messed it up. Please compare my original to yours and do some testing. They are different in the result. I would appreciate you fixing your &amp;quot;fix&amp;quot;. Best regards --[[User:Kireji Haiku|Kireji Haiku]] 02:42, 14 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I&#039;m sorry you took the edit personally it was not intended that way. The example you contributed is valuable and nontrivial, however examples are held to high standards and it didn&#039;t meet them. I was faced with two options: rewriting it or deleting it, I felt it had merit so I rewrote it. My goal as always is to provide the most useful content to our users, and in this case down compatibility needed to be sacrificed. The script as it was designed required every prim to have at least one face have full glow, that didn&#039;t sound entirely useful, so I changed it to accept some glow (I notice that I also changed it to require every face have glow... which doesn&#039;t sound useful, so I&#039;m going to revert that).&lt;br /&gt;
:Examples have one major goal: Be educational, teach good coding practices and problem solving. Here is where the script went awry:&lt;br /&gt;
:# Names should be descriptive. The function names were a bit generic but single letter variables are definitely not descriptive, especially when they are globals, they really should describe the purpose they fulfill. &lt;br /&gt;
:# Using globals instead of locals &amp;amp; parameters may be efficient, but it degrades readability and adds a new vector for script bugs. This sort of optimization has no place in examples (except in an article on optimization techniques). The situation is made even worse by using non-descriptive variable names.&lt;br /&gt;
:# The script contained code that complicated it without aiding readability or improving functionality. Examples need to be streamline, having it meander requires the reader to needlessly keep track of more things.&lt;br /&gt;
:# I felt that the functionality provided had too narrow an audience, that by changing how it functioned that it would be more useful to more people. Down compatibility is a secondary consideration for examples, not a primary consideration.&lt;br /&gt;
&lt;br /&gt;
:P.S. I take it you didn&#039;t noticed there is a bug in your script: A single prim object with at least one avatar sitting on it could return the wrong result. IMO examples should not be attributed in the script text, it&#039;s what the history page is for after all, but I know the community and I don&#039;t always agree so I don&#039;t fight it. Personally I don&#039;t want my name associated with buggy code, so if you really want the script to be 100% compatible I&#039;ll have to remove my name and give you all the credit.&lt;br /&gt;
&lt;br /&gt;
:P.S.S. I think we may have different notions of wiki content ownership. When I post content on the wiki, I do so with the full expectation that it will be edited, that it will mutate into something I did not envision, into something I may not entirely agree with. We do not control the content after we have posted it. It&#039;s why there is the text below the edit box: &amp;quot;If you don&#039;t want your writing to be edited mercilessly and redistributed at will, then don&#039;t submit it here.&amp;quot; Wiki culture is different. I may own my contributions but I don&#039;t control their fate. They are my children, being changed and influenced by the people around them, being made stronger in the process. But I digress&lt;br /&gt;
&lt;br /&gt;
:P.S.S.S. In the future if you want to convince someone they should do something, don&#039;t insult them first, it&#039;s counter productive. A better way to approach this situation would have been to say: &amp;quot;I disagree with some of the changes you made, specifically blah blah blah, could you please look into it? I did not appreciate your tone and I am quite insulted.&amp;quot; It&#039;s a mistake to mix the two messages, people are prone to take offense and not do what you want out of spite. In a situation like this being snarky just isn&#039;t productive (though it does blow off a bit of steam which can feel good in the moment). Just FYI, nothing more. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 07:43, 14 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I didn&#039;t take it personally and was just trying to make you aware of your rewrite not doing the same like my script. Maybe you don&#039;t read in-world messages, as I had sent you a message thanking you for your rewrite and trying to point out the differences between the two. The script I had provided would check a link-set on whether or not it has glow. And yes, that would return a false result if avatars sit on it, but I thought nobody would use the script to check if a link-set is glowing while sitting on it, but I might be wrong and should have pointed that out in the description. So I see your point there and support your critique on that. However my script would return &amp;quot;glowing&amp;quot; for a prim if ANY number of faces have SOME glow (not 1.0, as you said it would do). Maybe you now understand my view when I see your rewrite as being more streamlined and easier to read, however you limit the script down in its original ability of detecting glow by forcing it to return positive only with all faces of a prim glowing. Anyway, I&#039;m not up for a fight and to be quite frank just too lazy for it, a builder inside of SL asked me if it&#039;s possible to detect whether or not there&#039;s a bit of glow on all prims inside a link-set of his build and I just felt like sharing my approach of writing a script for that. If that script doesn&#039;t meet wiki standards in terms of streamlining it towards being absolutely foolproof and readable for just about anybody, I&#039;ll have to refrain from doing so in future.--[[User:Kireji Haiku|Kireji Haiku]] 18:13, 14 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::First I need to apologize, when I wrote my last comment I hadn&#039;t carefully reread your script, if I had I would have noticed your use of llCeil, which does as you point out return true for some glow. So my argument on that point is baseless. Between work and other obligations, I had forgotten about that aspect of the script and just went on my memory of what I thought the script was doing. As to fighting, I agree it&#039;s a waste of time and effort. However I hope you do continue to contribute to the wiki, every contribution is valuable as they grow the understanding and knowledge base of the community. Standards evolve and the content does as well, content has to be nurtured, given room to grow. Immature content just needs to mature is all; the only time stuff gets deleted is if it&#039;s factually inaccurate or needlessly repetitive. If I thought the contribution was trivial and obvious I would have stripped your name from it (attribution on one liners is blatant self ego boosting and makes the wiki look unprofessional).  The only reason I attached my name was so that you wouldn&#039;t be forced to shoulder the costs of supporting code that you did not write. Please don&#039;t take away from this that your contribution was without value, or that I had no respect for it or you.&lt;br /&gt;
&lt;br /&gt;
:::I should mention the reason for my terse comment in the edit was for a simple reason: I couldn&#039;t be verbose with the text limits of the field. &lt;br /&gt;
&lt;br /&gt;
:::As to messaging me, all my IMs get sent to an email account I rarely check, I only ever go inworld to keep my accounts active and go to meetings (pretty rare) because my internet connect is total suckage. I had no idea you IMed me; for all correspondence I use the wiki and email. &lt;br /&gt;
&lt;br /&gt;
:::You would be quite ticked at me if I were to describe my scripting habits with regards to code I post. I know I was when I saw people do what I do, but I don&#039;t really have the option. It&#039;s an ROI equation, should I make possibly buggy contributions or make no contributions at all? I wish I weren&#039;t forced to make the choice. If I weren&#039;t here doing this who would take up the mantel? Who would look after the templates? It would avoid problems like this maybe but would the community be better off? I honestly don&#039;t know but I suspect not.&lt;br /&gt;
&lt;br /&gt;
:::If you&#039;re still reading, what changes or improvements would you like to see made to the documentation? An upcoming project is to incorporate collapsible sections into the documentation, I&#039;m just not sure yet how to do so, I could do with some input. I haven&#039;t called for input from the community yet because I haven&#039;t rolled out the new Constants template yet (which will revolutionize the {{LSLGC|PrimitiveParams}} documentation). Given the potential of collapsible sections we are at a point in time where we should consider redesigning the documentation from the ground up. Maybe a contest? -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:33, 14 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::P.S. Does it work as it did before now? -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 23:48, 14 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::Hi, no it doesn&#039;t. The first problem is your thing with the double exclamation mark, that always returns 1 for me. And the second being you&#039;re still stuck with [PRIM_GLOW,ALL_SIDES], you don&#039;t do a loop through the sides. I will post a re-do of mine again, if you find a way to do what you wanted to do with the double exclamation mark thing, let me know.[[User:Kireji Haiku|Kireji Haiku]] 21:16, 17 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::::&amp;lt;code&amp;gt;!![[llGetLinkNumber]]()&amp;lt;/code&amp;gt; returns 1 for multiprim objects or 0 for single prim objects; It&#039;s logically equivalent to &amp;lt;code&amp;gt;llGetLinkNumber() != 0&amp;lt;/code&amp;gt; however it requires less bytecode to express (you would not be without base to berate me for perpetrating this optimization/shorthand in an example script). You shouldn&#039;t need to loop through the sides, by using [[ALL_SIDES]] it should return a list containing the glow values for every side of the prim (not a very useful feature, in most cases uses it&#039;s better to loop through the sides). We then feed that list to the list stat function to get the max. I&#039;ll see if I can log in later to test it but right now I really need to fix the LSL documentation templates (the wiki upgrade broke at least one template, which in turn broke a lot of the LSL documentation; I&#039;m trying to both find and fix the broken templates; and I don&#039;t know the precise cause). -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 21:37, 17 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::::Fixed it finally, thanks again for the ideas and the input. &amp;lt;code&amp;gt;!![[llGetLinkNumber]]()&amp;lt;/code&amp;gt; doesn&#039;t seem to work, I know exactly what you&#039;re trying to do by writing it that way, but that always returns 1. Have tested it. And your return was a bit too fast to return a result, wouldn&#039;t wait until the end. If you can simplify it even further, go ahead. That&#039;s as far as I could get.[[User:Kireji Haiku|Kireji Haiku]] 21:12, 23 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::::::Is &amp;lt;code&amp;gt;!![[llGetLinkNumber]]&amp;lt;/code&amp;gt; returning one for a single prim object with no avatars sitting on it? That is the only time it should return zero. A single prim object with a seated avatar should return one. As to the early exit, once we find a prim with no glow, we can exit without checking the other prims. Logically speaking, we do not need to know precisely what the minimum is, just if it is less than or equal to zero. So instead of calculating the minimum we can exit as soon as we know the minimum is going to be less than or equal to zero. We know it will be less than or equal to zero if we have a value that is zero or less. The code should exit as soon as it knows the answer so as to not waste simulator resources (after all we need to encourage responsible coding). -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 05:08, 25 December 2010 (UTC)&lt;br /&gt;
::::::::Personally, I would prefer that examples intended to educate and demonstrate functionality NOT have obfuscating optimizations in them, unless the purpose of the example is to demonstrate such. It makes it harder for non-gurus to understand what is going on in the script, thus limiting the &amp;quot;educational value&amp;quot; of the example and obviating the purpose which it was intended. That said, I do believe it is important for people to know about them as well as how/when to use them, but I also believe teaching good programming habits is also valuable. (I don&#039;t know if the script in question qualifies as such; just wanted to point this out since it came up as an ancillary issue) [[User:Talarus Luan|Talarus Luan]] 07:35, 15 January 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Help with template issue ==&lt;br /&gt;
&lt;br /&gt;
Hi Strife,&lt;br /&gt;
I&#039;m hoping you can help to shed some light on a problem we have just discovered that has started to occur since we redployed the wiki yesterday.  The symptom is that SOME pages, e.g. [[LlKey2Name]] display differently when you are not logged in versus logged in.  Compare&lt;br /&gt;
* Logged in: http://screencast.com/t/e3K85IGni&lt;br /&gt;
* Not logged in: http://screencast.com/t/4OwWfihvhi&lt;br /&gt;
I &#039;&#039;think&#039;&#039; that this may be happening due to issues around templates, which is why I am contacting you.  However, I don&#039;t really know the cause.   The strange thing is that most other LSL function pages appear to display just fine when you are logged out; so there must be something in that page causing an issue.  We would greatly appreciate any help!  P.S. Here is the whole list of known issues: [[Second Life Wiki Known Issues]].&lt;br /&gt;
&lt;br /&gt;
Thanks&lt;br /&gt;
--[[User:Rand Linden|Rand Linden]] 17:15, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I think it was generated before the extensions were installed. I purged the page (?action=purge) and it now renders properly for me (though I did see it the way you described but only when i was not logged in). It&#039;s weird. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 21:22, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Maybe the cache just needs to be invalidated? -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 21:24, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Some triangulation: &amp;lt;nowiki&amp;gt;|constants={{LSL Constants/PrimitiveParams|get}}&amp;lt;/nowiki&amp;gt; does &#039;&#039;not&#039;&#039; cause trouble on a test copy of llSetLinkPrimitiveParams, &amp;lt;nowiki&amp;gt;|constants={{LSL Constants/PrimitiveParams|set}}&amp;lt;/nowiki&amp;gt; triggers the bug. Off to try on simpler stuff to see if there is a consistent pattern of some kind ... --[[User:Cerise Sorbet|Cerise Sorbet]] 21:47, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::The cache is not invalidating or refreshing. Check the mod date at the bottom of [[http://wiki.secondlife.com/wiki/LlSetLinkPrimitiveParamsFast]] and [[https://wiki.secondlife.com/wiki/LlSetLinkPrimitiveParamsFast]]. They are different. If you go into the history page and look at a previous version it will displays properly because it doesn&#039;t have a cached version but if you look at the current version (even with the version number, it does not display properly). Not even action=purge can budge it. A possible explanation is that the PrimitiveParams article is causing it to time out during rebuild. The new version of the template I&#039;m hoping to get done by new year should be more sane and less time consuming (we hope). -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:00, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:: I thought it was only cache too but more appears to be going on. [[llKey2Name]] is displaying OK with a pair of Issue templates commented out. --[[User:Cerise Sorbet|Cerise Sorbet]] 22:22, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::The time issue I was seeing was caused by me having my account report the times in GMT+5 (which is weird seeing as i&#039;m GMT-5) -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:31, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I&#039;ve had a thought, I think it might have something to do with how bugs are duplicated (in both Issues and Important Issues). It looks to be the difference between the Get and Set primitive Params functions (Get are too new to have any flag bugs). -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:42, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::It&#039;s not [[Template:Issues]] that is doing it, it&#039;s something about [[Template:Issue]]. I have this terrible feeling it&#039;s a problem with how #switch is parsed. When are we getting the new parser function extension? -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:55, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::Oh it&#039;s definitely [[Template:Issue]]. I can&#039;t access it when logged out. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:55, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::I&#039;ve disabled the code that detects if an issue is a bug, which appears to have fixed [[llKey2Name]]. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 23:14, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
: #switch is not the cause, just the trigger. Maybe it&#039;s content duplication that is the problem? -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:28, 17 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
: Mediawiki 1.14 added a |link= option for Image: tags. This would let you skip the imagemap for most uses that don&#039;t really need coordinates. --[[User:Cerise Resident|Cerise]] 03:38, 18 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:: There is a god ^_^ thanks for the tip. I&#039;ll deploy it post hast. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 03:40, 18 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::: Thanks so much for tracking this down, Strife and Cerise!  This move/upgrade has certainly been more problematic than we expected.... :-(&lt;br /&gt;
:::--[[User:Rand Linden|Rand Linden]] 19:05, 19 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::: They always are more problematic than anticipated. I&#039;m sorry I didn&#039;t pay more attention to it earlier, I did notice the blanking on the test wiki briefly but not the common factor (since I spend all my time logged in, the first thing I always do when I connect is log in). I spent my time looking at differences between the highlighting. Never thought to look for differences between HTTP &amp;amp; HTTPS. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 19:30, 19 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Different versions of UTF-8 libraries ==&lt;br /&gt;
&lt;br /&gt;
Hi Strife, it seems that there are two different versions of both UTF8ToUnicodeInteger() and UnicodeIntegerToUTF8() at [[Combined_Library#Unicode_functions]] and [[UTF-8]]. Maybe those could be moved to a template - or just manually synced as you feel appropriate. --[[User:Opensource Obscure|oobscure]] 03:17, 2 May 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
There is a good point. Will do. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 09:12, 12 May 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Issues/SCR-137 ==&lt;br /&gt;
&lt;br /&gt;
Sorry for [[Template:Issues/SCR-137]], force of habit since most of the time I&#039;m suggesting new functions that aren&#039;t on the wiki, rather than changes to existing ones ;) -- &amp;lt;br/&amp;gt;-- &#039;&#039;&#039;[[User:Haravikk_Mistral|Haravikk]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User_talk:Haravikk_Mistral|talk]]|[[Special:Contributions/Haravikk_Mistral|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 01:43, 9 July 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
:No need to apologize. In my diminished capacity these days (being cut off from SL due to network restrictions for such a long time) there is little I can do besides act as editor, and theoretical scripting. So you gave me something to do. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 09:10, 9 July 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
== llCastRay Docs ==&lt;br /&gt;
&lt;br /&gt;
Thanks, Strife. Your improvement to the llCastRay docs look great.&lt;br /&gt;
&lt;br /&gt;
[[User:Falcon Linden|Falcon Linden]] 11:57, 1 September 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
== User Functions ==&lt;br /&gt;
&lt;br /&gt;
Heya Strife,&lt;br /&gt;
Could you give me a headsup how the wiki format for Mode=User LSL Functions are meant to be used like?&lt;br /&gt;
&lt;br /&gt;
https://wiki.secondlife.com/wiki/Interpolation/Linear/Float&lt;br /&gt;
&lt;br /&gt;
I&#039;m not sure why I can&#039;t get rid off the &amp;quot;Deep Notes&amp;quot; section, which seems sorta empty and useless?&lt;br /&gt;
&lt;br /&gt;
[[User:Nexii Malthus|&amp;lt;span style=&amp;quot;color: #111; text-shadow:-1px -1px #ddd, 1px 1px #888;&amp;quot;&amp;gt;Nexii Malthus&amp;lt;/span&amp;gt;]] 11:48, 17 September 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
:Sure -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 13:36, 18 September 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Video Documentations / Tutorials ==&lt;br /&gt;
forgot who the king of confirming stuff on this wiki is, I haven&#039;t been an editor for like a year or two if you remember me or not, but I thought I might add video documentations and tutorials on functions that could be confusing on the wikis page, so I guess the question is how should I add the videos, should I add a new category or just put it in the examples category, and if video documentation is a good idea toward you, since you are the #1 editor on this wiki haha, and I know nothing about style D:&lt;br /&gt;
--&amp;lt;b&amp;gt;--&amp;lt;/b&amp;gt;[[File:Uglehsig.png|53px|link=User:Ugleh_Ulrik]]([[User_talk:Ugleh_Ulrik|talk]]) 19:45, 11 October 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
:I&#039;m tickled that you would consult me but I really have no idea on this one. I think it&#039;s a great idea and until we get more of them to get a feel as to how they can be best incorporated into the documentation, they can be included any way you see fit. I might suggested posting the question to the script forums and mailing list (if you do, maybe post a link so I can follow along?). I can imagine putting them in See Also, Examples, Deep Notes, Helpers, Specification (maybe?), Newbie Notes, Notes. I have trouble seeing them in the Summary/Description, Caveats or Constants. Maybe float them on the right (like in [[PRIM_MATERIAL]])? Keep up the good work. ^_^ -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 12:21, 12 October 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Hi ==&lt;br /&gt;
&lt;br /&gt;
Just caught the comment over on the blog and wanted to say hi. I haven&#039;t left, just withdrawn from the official forums. Actually I hopped over to SLU, although their scripting forums are dead as doornails, so I&#039;ve been amusing myself in their PRS section. Sent in an NDA for the latest inworld beta review project, no reply yet ::shrug:: hope all is good on your end, and was pleasantly surprised you stopped by. Cheers&amp;lt;br/&amp;gt;-- &#039;&#039;&#039;[[User:Void_Singer|Void]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User_talk:Void_Singer|talk]]|[[Special:Contributions/Void_Singer|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 07:52, 22 December 2011 (PST)&lt;br /&gt;
&lt;br /&gt;
: Things are going well here. beta? do they have a page describing it anywhere? I always loved betas. I stay mostly here on the wiki, wish I could get in world more, I hate writing documentation without being able to test the functionality. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 23:22, 22 December 2011 (PST)&lt;br /&gt;
:P.S. You are a braver soul than I to go into PRS.&lt;br /&gt;
&lt;br /&gt;
No wiki page that I&#039;m aware of, e-mail invitation letters (which seem to have been dispersed to many forumites, and turned down by a few) describe it as pre-release feedback review, of what specifically, I couldn&#039;t say (even if I knew yet). I&#039;ll ask if they&#039;ll bounce you a late entry since you seem interested. and yeah PRS is madness, but I&#039;m largely word-proof so the invective is more like warm glow instead of singing flame for me, something to kill break time. happy new years and all that jazz&amp;lt;br/&amp;gt;-- &#039;&#039;&#039;[[User:Void_Singer|Void]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User_talk:Void_Singer|talk]]|[[Special:Contributions/Void_Singer|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 10:00, 26 December 2011 (PST)&lt;br /&gt;
&lt;br /&gt;
:Thank you for offering but It&#039;s better if you don&#039;t. I wish I could thou I have no time (nor the internet connection) for it. If they sent me an invitation I&#039;d feel obliged to accept and then not be able to do it justice. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 21:55, 26 December 2011 (PST)&lt;br /&gt;
&lt;br /&gt;
Understood, I&#039;ll try to remember to ping ya when it goes live then, could be a bit, dunno quite how far they are out on it. &amp;lt;br/&amp;gt;-- &#039;&#039;&#039;[[User:Void_Singer|Void]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User_talk:Void_Singer|talk]]|[[Special:Contributions/Void_Singer|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 16:22, 27 December 2011 (PST)&lt;br /&gt;
&lt;br /&gt;
== http_response event only be triggered for the originating script or triggered for all scripts ==&lt;br /&gt;
&lt;br /&gt;
Hello Strife,&lt;br /&gt;
&lt;br /&gt;
I just read the [http://wiki.secondlife.com/w/index.php?title=LlHTTPRequest&amp;amp;diff=1157547&amp;amp;oldid=1157508 note] you added concerning [[llHTTPRequest]].&lt;br /&gt;
Although this is of course a sane behavior, I was a bit surprised when I read it because I knew it wasn&#039;t the case before, I also have some script that depends on the old behavior and I didn&#039;t received any complaints concerning them.&lt;br /&gt;
So, I&#039;ve just checked and I can confirm that, at least on my home sim which use the main server version, the event is still triggered on all scripts of the object which made the request.&lt;br /&gt;
&lt;br /&gt;
By pure curiosity, I wonder if you have any additional information about this change.&lt;br /&gt;
&lt;br /&gt;
Many thanks,&lt;br /&gt;
[[User:Elena Bouscario|Elena]] 11:45, 11 February 2012 (PST)&lt;br /&gt;
&lt;br /&gt;
:I have no information on this unfortunately. My edit was a rewrite of the [https://wiki.secondlife.com/w/index.php?title=LlHTTPRequest&amp;amp;diff=1157508&amp;amp;oldid=1153608 previous edit] so that everything would read more clearly. Sounds like both edits should be reverted. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 10:45, 12 February 2012 (PST)&lt;br /&gt;
&lt;br /&gt;
== capturing caveats in constants pages? ==&lt;br /&gt;
&lt;br /&gt;
I&#039;m trying to figure out the proper way to include a caveat in the [[DEBUG_CHANNEL]] and [[PUBLIC_CHANNEL]] pages, so that it properly inserts into articles referencing those two pages. The caveat is as follows&lt;br /&gt;
* Messages on channel_name are throttled to a rate of &amp;lt;200/2sec, per region, per owner/user.&lt;br /&gt;
** Once the rate is exceeded, all messages on channel_name will be dropped until the send rate is again below 200/2sec for the previous 2 sec.&lt;br /&gt;
not quite sure how to go about it though?&amp;lt;br/&amp;gt;-- &#039;&#039;&#039;[[User:Void_Singer|Void]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User_talk:Void_Singer|talk]]|[[Special:Contributions/Void_Singer|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 23:27, 21 August 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
:I&#039;d be inclined to work it into [[Template:LSL_Function/chat]] as well. No time now (and likely won&#039;t be able to see later, going to the eye doctor). -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 08:30, 22 August 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
:Arrg it&#039;s a rats nest. I&#039;ll work on it later. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 08:31, 22 August 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
:I&#039;ve put it in the template so now it&#039;s now everywhere... but still needs some tweaking. back later -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thanks, didn&#039;t mean to give you headaches over it =( I&#039;ll take a look at how you did it so maybe next time I can sort it myself&amp;lt;br/&amp;gt;-- &#039;&#039;&#039;[[User:Void_Singer|Void]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User_talk:Void_Singer|talk]]|[[Special:Contributions/Void_Singer|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 21:47, 22 August 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
:It wasn&#039;t as bad as I thought it would be, no worries. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 08:48, 23 August 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
== llGetTime/llResetTime ==&lt;br /&gt;
I saw you made a distinction between Mono and LSO for whether or not it&#039;s affected by dilation. However, empirical evidence doesn&#039;t seem to support this.  While this may have been true in the past, it doesn&#039;t seem to be anymore. [[User:Darien Caldwell|Darien Caldwell]] 11:08, 13 September 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
:That is great. :) I&#039;ll revert it. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 21:20, 13 September 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Another world, another wiki ==&lt;br /&gt;
&lt;br /&gt;
I don&#039;t suppose you have any tips for a budding documentor? I&#039;m just learning mediawiki, and started function documentation over at Cloud Party (I didn&#039;t create the templates) http://wiki.cloudpartytime.com&lt;br /&gt;
BTW, do you use avisynth, or work on wiki docs for it? Still enjoy tinkering with avisyth scripts! [[User:Phate Shepherd|Phate Shepherd]] 16:43, 16 September 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
:I&#039;m sorry it&#039;s been taking me so long to respond, I&#039;m working on articulating the my thoughts. I haven&#039;t forgotten you. I want to do the questions justice. Watch this space for an update soon.  -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 20:29, 19 September 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
::No worries... So much to do and learn here! Thanks![[User:Phate Shepherd|Phate Shepherd]] 22:06, 21 September 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
:I had a partial response all ready written and then my computer crashed. Here is a reconstruction:&lt;br /&gt;
:# Find some documentation you really like, and copy it&#039;s good features. Find some bad documentation and figure out what you don&#039;t like.&lt;br /&gt;
:# Write a mission statement for you wiki based documentation project. It should be short and concise. Then write a longer description after it as to what it means. As a matter of course your project will attract people sooner or later who won&#039;t share your vision. Having something in writing you can beat them over the head with will help reduce the toll the drama will have upon you. I&#039;d give you more advise along these lines but it might be too specific and never crop up (it&#039;s the subtle difference between keeping a loaded gun and keeping a loaded cross bow that shoots wooden stakes). Be sure to have a well spelled out contribution policy, specifically content must be licensed under a wiki specified license but that doesn&#039;t mean the author cannot dual license it under another license if they so choose (they just can&#039;t choose to not license it under the wiki license).&lt;br /&gt;
:# Don&#039;t feel you need to do everything. You are a volunteer. You volunteer. You do it for free. You aren&#039;t obligated to do anything. It&#039;s not like they are paying you. So when you feel stressed, that it is going to hell, remember this, take a deep breath and relax, if they want to avert catastrophe they can spend money. If the catastrophe can&#039;t be averted with money then there is nothing you could do about it, so there is no reason for you to be stressed about it. It&#039;s not your problem.&lt;br /&gt;
:#* I have many wiki projects, in various states of completion. Some have been in the works for years, that is to say, I haven&#039;t really done anything with them for a considerable amount of time.&lt;br /&gt;
:# If you want something done, you will probably have to do it yourself. You won&#039;t be able to convince anyone else to do it. {{LSLGC|Needs_Example}} grows, it doesn&#039;t shrink.&lt;br /&gt;
:# Engage your community. Ask them what they want out of the documentation. Ask them how to make it better. This will encourage them to help you. Be prepared to hold their hands and show them how to edit the documentation. This is how you cultivate contributors. This is how you cultivate a contributor community.&lt;br /&gt;
:# The quality of documentation is determined by the audience. You should choose an audience to server and put that in your mission or goal statement. Serving a diverse audience is going to require negotiating some very complex tradeoffs.&lt;br /&gt;
:#* The LSL documentation have [[LSL_Portal_Guidelines|mission and goal statements]] that are at odds with each other. The type of help a beginner needs is not the same as that of an expert. A beginner needs it simple, an expert needs it precise. The solution is a layout that tries to divide the problem into manageable chunks. However getting that solution realized has been difficult.&lt;br /&gt;
:# If you have an issue tracker, add links in your documentation to pertinent issue in the tracker. Update them on a regular basis. If you can make it auto-update.&lt;br /&gt;
:P.S. Those templates are cool. I&#039;ve been trying to mimic some of those features for years (not impossible but I run the risk of killing the wiki).&lt;br /&gt;
:-- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 21:10, 27 September 2012 (PDT)&lt;br /&gt;
::Thanks for taking to the time to write that out... I&#039;ll try and take it to heart. As for the &amp;quot;Find a wiki you like....&amp;quot; Well, that&#039;s why I came to you ;-) [[User:Phate Shepherd|Phate Shepherd]] 12:58, 28 September 2012 (PDT)&lt;/div&gt;</summary>
		<author><name>Phate Shepherd</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User_talk:Strife_Onizuka&amp;diff=1172814</id>
		<title>User talk:Strife Onizuka</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User_talk:Strife_Onizuka&amp;diff=1172814"/>
		<updated>2012-09-22T05:06:14Z</updated>

		<summary type="html">&lt;p&gt;Phate Shepherd: /* Another world, another wiki */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:User:Zai_Lynch/Award}}You found my talk page... Find old discussions take a look at the archives: [[User:Strife_Onizuka/Talkpage_Archive_01|1]] [[User:Strife_Onizuka/Talkpage_Archive_02|2]]&lt;br /&gt;
&lt;br /&gt;
== JIRA issues on LSL function pages ==&lt;br /&gt;
&lt;br /&gt;
Okay, as I&#039;ve made no headway deciphering your templates (not that I&#039;m familiar in the least with the more complex wiki functions in the first place...) I decided just to cut my losses and ask! Basically I was wondering if there&#039;s a reason why [[Template:LSL_Generic/Issues]] doesn&#039;t appear to list all issues, but instead seems to just list bugs only in the same way as [[Template:LSL_Generic/Caveats]]?&lt;br /&gt;
&lt;br /&gt;
I just think it&#039;d be nice if function pages would also summarise popular proposals relating to them in the deep notes section, which is what I believed was intended but it doesn&#039;t appear to do this right now.&lt;br /&gt;
&lt;br /&gt;
For example, if you go to the [[LlStartAnimation]] page, in the deep notes you&#039;ll notice that there are zero issues listed, however, clicking the &amp;quot;Search JIRA for related Issues&amp;quot; link returns quite a few. It might be nice to see the deep notes tweaked to display these, but perhaps with a limit on how many are shown (though llStartAnimation is a fairly popular one to see JIRA issues for and only has 17 issues listed). Anyway, just though I&#039;d ask/request, please poke my talk page if you respond to be sure I remember and look! --[[User:Haravikk Mistral|Haravikk Mistral]] 15:26, 12 September 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:The template is not automatic. Take for example [[llBreakLink]], it lists a single issue in the article, it does this by including the template [[Template:Issues/SVC-3510]]. There are many stub templates like [[Template:Issues/SVC-3510]] that work this way, they contain the information about the issue and pass it along to a template that does the heavy lifting. The value of this method is that a single template exists for the Issue and if the issue is sited on multiple pages, they can all be quickly updated by modifying the template. From an organizational standpoint, it also makes it possible to see what all pertains to a particular issue.&lt;br /&gt;
&lt;br /&gt;
:The thing is, if you want all the issues on the wiki, they need to be imported to the wiki, and regularly updated as changes are made... but that could all be done with a bot. Wonder if [[User:Gigs Taggart|Gigs]] could be enticed to incorporate it into [http://www.sljirastats.com SLJiraStats]?&lt;br /&gt;
&lt;br /&gt;
:The goal of the Deep Notes: Issues section was to contain dead bugs and interesting feature suggestions. I never intended it to contain all issues pertaining to a feature. We don&#039;t add any value by duplicated the JIRA search engine results; the value we can add is by filtering them. Some of the bugs aren&#039;t bugs, and some of the feature suggestions are unworkable; I don&#039;t think these should be given screen space. Considering the resources required to manually include and update the issues, triage has to happen.&lt;br /&gt;
&lt;br /&gt;
:Unfortunately I do not have the free time to work on this, work and other responsibilities eat all my time. *wonders just how true that is* -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 03:10, 16 September 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Ah yeah, seems I&#039;ve completely misunderstood what it was doing! I wasn&#039;t thinking to list everything, just an automatic, and hopefully useful summary of say...the top ten bugs and issues? It sounds like way more work than it&#039;s likely to be worth though so probably better just to forget about it, unless there&#039;s some way to just embed an iframe with a portion of a JIRA search or something similar? But that would probably cause an unacceptable increase in JIRA page requests from people just popping over to look something up. But now I know how it does work I can at least pop useful relevant issues on manually, thanks! -- [[User:Haravikk Mistral|Haravikk Mistral]] 12:36, 18 September 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:A related problem, I&#039;ve tried to add a few top issues of interest to me onto my user page under Key Issues, however, I&#039;ve tried to create two [[Template:IssueTable]] instances, but they both have the same content, despite the value of #issues being different for both. Is this some peculiarity in using this template more than once? If you could take a look at let me know it&#039;d be handy, as IssueTable doesn&#039;t have any documentation =( -- [[User:Haravikk Mistral|Haravikk Mistral]] 11:36, 22 September 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::You are hitting one of the caveats/bugs of the new parser engine. I forget how to get around it. I beleive the issue is intermediate caching, and the way around it is to make the template call dynamic or something like that. Without spending a bunch of time debugging the problem, I just don&#039;t remember how to work around it. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 14:37, 22 September 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::It just struck me what the problem is, it&#039;s caching IssueTable. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 18:27, 22 September 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::Aha! The &amp;quot;subst:&amp;quot; keyword seems to be for this (e.g - &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{subst:User:Haravikk_Mistral/JIRA/Issues/SVC}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;), as I believe it fetches the pre-processed contents of a page rather than the source. In any event, this works in my case as I created sub-pages for each category, I don&#039;t believe it would help for a page with multiple IssueTable instances though, as using subst: for any of them would just create a blank gap, but it solves my problem at least! -- [[User:Haravikk Mistral|Haravikk Mistral]] 11:29, 23 September 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== [[Ghost Detector]] ==&lt;br /&gt;
Thanks.  I discovered that property of [[llKey2Name]] by accident.  It&#039;s odd because, for instance, [[llDetectedName]] gives a non-empty string for ghosted avatars. -- [[User:Something Something|Something Something]] 05:21, 10 November 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Friendly greetings ==&lt;br /&gt;
You seem to have found a &amp;quot;fix&amp;quot; for my horrible script and....messed it up. Please compare my original to yours and do some testing. They are different in the result. I would appreciate you fixing your &amp;quot;fix&amp;quot;. Best regards --[[User:Kireji Haiku|Kireji Haiku]] 02:42, 14 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I&#039;m sorry you took the edit personally it was not intended that way. The example you contributed is valuable and nontrivial, however examples are held to high standards and it didn&#039;t meet them. I was faced with two options: rewriting it or deleting it, I felt it had merit so I rewrote it. My goal as always is to provide the most useful content to our users, and in this case down compatibility needed to be sacrificed. The script as it was designed required every prim to have at least one face have full glow, that didn&#039;t sound entirely useful, so I changed it to accept some glow (I notice that I also changed it to require every face have glow... which doesn&#039;t sound useful, so I&#039;m going to revert that).&lt;br /&gt;
:Examples have one major goal: Be educational, teach good coding practices and problem solving. Here is where the script went awry:&lt;br /&gt;
:# Names should be descriptive. The function names were a bit generic but single letter variables are definitely not descriptive, especially when they are globals, they really should describe the purpose they fulfill. &lt;br /&gt;
:# Using globals instead of locals &amp;amp; parameters may be efficient, but it degrades readability and adds a new vector for script bugs. This sort of optimization has no place in examples (except in an article on optimization techniques). The situation is made even worse by using non-descriptive variable names.&lt;br /&gt;
:# The script contained code that complicated it without aiding readability or improving functionality. Examples need to be streamline, having it meander requires the reader to needlessly keep track of more things.&lt;br /&gt;
:# I felt that the functionality provided had too narrow an audience, that by changing how it functioned that it would be more useful to more people. Down compatibility is a secondary consideration for examples, not a primary consideration.&lt;br /&gt;
&lt;br /&gt;
:P.S. I take it you didn&#039;t noticed there is a bug in your script: A single prim object with at least one avatar sitting on it could return the wrong result. IMO examples should not be attributed in the script text, it&#039;s what the history page is for after all, but I know the community and I don&#039;t always agree so I don&#039;t fight it. Personally I don&#039;t want my name associated with buggy code, so if you really want the script to be 100% compatible I&#039;ll have to remove my name and give you all the credit.&lt;br /&gt;
&lt;br /&gt;
:P.S.S. I think we may have different notions of wiki content ownership. When I post content on the wiki, I do so with the full expectation that it will be edited, that it will mutate into something I did not envision, into something I may not entirely agree with. We do not control the content after we have posted it. It&#039;s why there is the text below the edit box: &amp;quot;If you don&#039;t want your writing to be edited mercilessly and redistributed at will, then don&#039;t submit it here.&amp;quot; Wiki culture is different. I may own my contributions but I don&#039;t control their fate. They are my children, being changed and influenced by the people around them, being made stronger in the process. But I digress&lt;br /&gt;
&lt;br /&gt;
:P.S.S.S. In the future if you want to convince someone they should do something, don&#039;t insult them first, it&#039;s counter productive. A better way to approach this situation would have been to say: &amp;quot;I disagree with some of the changes you made, specifically blah blah blah, could you please look into it? I did not appreciate your tone and I am quite insulted.&amp;quot; It&#039;s a mistake to mix the two messages, people are prone to take offense and not do what you want out of spite. In a situation like this being snarky just isn&#039;t productive (though it does blow off a bit of steam which can feel good in the moment). Just FYI, nothing more. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 07:43, 14 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I didn&#039;t take it personally and was just trying to make you aware of your rewrite not doing the same like my script. Maybe you don&#039;t read in-world messages, as I had sent you a message thanking you for your rewrite and trying to point out the differences between the two. The script I had provided would check a link-set on whether or not it has glow. And yes, that would return a false result if avatars sit on it, but I thought nobody would use the script to check if a link-set is glowing while sitting on it, but I might be wrong and should have pointed that out in the description. So I see your point there and support your critique on that. However my script would return &amp;quot;glowing&amp;quot; for a prim if ANY number of faces have SOME glow (not 1.0, as you said it would do). Maybe you now understand my view when I see your rewrite as being more streamlined and easier to read, however you limit the script down in its original ability of detecting glow by forcing it to return positive only with all faces of a prim glowing. Anyway, I&#039;m not up for a fight and to be quite frank just too lazy for it, a builder inside of SL asked me if it&#039;s possible to detect whether or not there&#039;s a bit of glow on all prims inside a link-set of his build and I just felt like sharing my approach of writing a script for that. If that script doesn&#039;t meet wiki standards in terms of streamlining it towards being absolutely foolproof and readable for just about anybody, I&#039;ll have to refrain from doing so in future.--[[User:Kireji Haiku|Kireji Haiku]] 18:13, 14 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::First I need to apologize, when I wrote my last comment I hadn&#039;t carefully reread your script, if I had I would have noticed your use of llCeil, which does as you point out return true for some glow. So my argument on that point is baseless. Between work and other obligations, I had forgotten about that aspect of the script and just went on my memory of what I thought the script was doing. As to fighting, I agree it&#039;s a waste of time and effort. However I hope you do continue to contribute to the wiki, every contribution is valuable as they grow the understanding and knowledge base of the community. Standards evolve and the content does as well, content has to be nurtured, given room to grow. Immature content just needs to mature is all; the only time stuff gets deleted is if it&#039;s factually inaccurate or needlessly repetitive. If I thought the contribution was trivial and obvious I would have stripped your name from it (attribution on one liners is blatant self ego boosting and makes the wiki look unprofessional).  The only reason I attached my name was so that you wouldn&#039;t be forced to shoulder the costs of supporting code that you did not write. Please don&#039;t take away from this that your contribution was without value, or that I had no respect for it or you.&lt;br /&gt;
&lt;br /&gt;
:::I should mention the reason for my terse comment in the edit was for a simple reason: I couldn&#039;t be verbose with the text limits of the field. &lt;br /&gt;
&lt;br /&gt;
:::As to messaging me, all my IMs get sent to an email account I rarely check, I only ever go inworld to keep my accounts active and go to meetings (pretty rare) because my internet connect is total suckage. I had no idea you IMed me; for all correspondence I use the wiki and email. &lt;br /&gt;
&lt;br /&gt;
:::You would be quite ticked at me if I were to describe my scripting habits with regards to code I post. I know I was when I saw people do what I do, but I don&#039;t really have the option. It&#039;s an ROI equation, should I make possibly buggy contributions or make no contributions at all? I wish I weren&#039;t forced to make the choice. If I weren&#039;t here doing this who would take up the mantel? Who would look after the templates? It would avoid problems like this maybe but would the community be better off? I honestly don&#039;t know but I suspect not.&lt;br /&gt;
&lt;br /&gt;
:::If you&#039;re still reading, what changes or improvements would you like to see made to the documentation? An upcoming project is to incorporate collapsible sections into the documentation, I&#039;m just not sure yet how to do so, I could do with some input. I haven&#039;t called for input from the community yet because I haven&#039;t rolled out the new Constants template yet (which will revolutionize the {{LSLGC|PrimitiveParams}} documentation). Given the potential of collapsible sections we are at a point in time where we should consider redesigning the documentation from the ground up. Maybe a contest? -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:33, 14 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::P.S. Does it work as it did before now? -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 23:48, 14 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::Hi, no it doesn&#039;t. The first problem is your thing with the double exclamation mark, that always returns 1 for me. And the second being you&#039;re still stuck with [PRIM_GLOW,ALL_SIDES], you don&#039;t do a loop through the sides. I will post a re-do of mine again, if you find a way to do what you wanted to do with the double exclamation mark thing, let me know.[[User:Kireji Haiku|Kireji Haiku]] 21:16, 17 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::::&amp;lt;code&amp;gt;!![[llGetLinkNumber]]()&amp;lt;/code&amp;gt; returns 1 for multiprim objects or 0 for single prim objects; It&#039;s logically equivalent to &amp;lt;code&amp;gt;llGetLinkNumber() != 0&amp;lt;/code&amp;gt; however it requires less bytecode to express (you would not be without base to berate me for perpetrating this optimization/shorthand in an example script). You shouldn&#039;t need to loop through the sides, by using [[ALL_SIDES]] it should return a list containing the glow values for every side of the prim (not a very useful feature, in most cases uses it&#039;s better to loop through the sides). We then feed that list to the list stat function to get the max. I&#039;ll see if I can log in later to test it but right now I really need to fix the LSL documentation templates (the wiki upgrade broke at least one template, which in turn broke a lot of the LSL documentation; I&#039;m trying to both find and fix the broken templates; and I don&#039;t know the precise cause). -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 21:37, 17 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::::Fixed it finally, thanks again for the ideas and the input. &amp;lt;code&amp;gt;!![[llGetLinkNumber]]()&amp;lt;/code&amp;gt; doesn&#039;t seem to work, I know exactly what you&#039;re trying to do by writing it that way, but that always returns 1. Have tested it. And your return was a bit too fast to return a result, wouldn&#039;t wait until the end. If you can simplify it even further, go ahead. That&#039;s as far as I could get.[[User:Kireji Haiku|Kireji Haiku]] 21:12, 23 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::::::Is &amp;lt;code&amp;gt;!![[llGetLinkNumber]]&amp;lt;/code&amp;gt; returning one for a single prim object with no avatars sitting on it? That is the only time it should return zero. A single prim object with a seated avatar should return one. As to the early exit, once we find a prim with no glow, we can exit without checking the other prims. Logically speaking, we do not need to know precisely what the minimum is, just if it is less than or equal to zero. So instead of calculating the minimum we can exit as soon as we know the minimum is going to be less than or equal to zero. We know it will be less than or equal to zero if we have a value that is zero or less. The code should exit as soon as it knows the answer so as to not waste simulator resources (after all we need to encourage responsible coding). -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 05:08, 25 December 2010 (UTC)&lt;br /&gt;
::::::::Personally, I would prefer that examples intended to educate and demonstrate functionality NOT have obfuscating optimizations in them, unless the purpose of the example is to demonstrate such. It makes it harder for non-gurus to understand what is going on in the script, thus limiting the &amp;quot;educational value&amp;quot; of the example and obviating the purpose which it was intended. That said, I do believe it is important for people to know about them as well as how/when to use them, but I also believe teaching good programming habits is also valuable. (I don&#039;t know if the script in question qualifies as such; just wanted to point this out since it came up as an ancillary issue) [[User:Talarus Luan|Talarus Luan]] 07:35, 15 January 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Help with template issue ==&lt;br /&gt;
&lt;br /&gt;
Hi Strife,&lt;br /&gt;
I&#039;m hoping you can help to shed some light on a problem we have just discovered that has started to occur since we redployed the wiki yesterday.  The symptom is that SOME pages, e.g. [[LlKey2Name]] display differently when you are not logged in versus logged in.  Compare&lt;br /&gt;
* Logged in: http://screencast.com/t/e3K85IGni&lt;br /&gt;
* Not logged in: http://screencast.com/t/4OwWfihvhi&lt;br /&gt;
I &#039;&#039;think&#039;&#039; that this may be happening due to issues around templates, which is why I am contacting you.  However, I don&#039;t really know the cause.   The strange thing is that most other LSL function pages appear to display just fine when you are logged out; so there must be something in that page causing an issue.  We would greatly appreciate any help!  P.S. Here is the whole list of known issues: [[Second Life Wiki Known Issues]].&lt;br /&gt;
&lt;br /&gt;
Thanks&lt;br /&gt;
--[[User:Rand Linden|Rand Linden]] 17:15, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I think it was generated before the extensions were installed. I purged the page (?action=purge) and it now renders properly for me (though I did see it the way you described but only when i was not logged in). It&#039;s weird. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 21:22, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Maybe the cache just needs to be invalidated? -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 21:24, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Some triangulation: &amp;lt;nowiki&amp;gt;|constants={{LSL Constants/PrimitiveParams|get}}&amp;lt;/nowiki&amp;gt; does &#039;&#039;not&#039;&#039; cause trouble on a test copy of llSetLinkPrimitiveParams, &amp;lt;nowiki&amp;gt;|constants={{LSL Constants/PrimitiveParams|set}}&amp;lt;/nowiki&amp;gt; triggers the bug. Off to try on simpler stuff to see if there is a consistent pattern of some kind ... --[[User:Cerise Sorbet|Cerise Sorbet]] 21:47, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::The cache is not invalidating or refreshing. Check the mod date at the bottom of [[http://wiki.secondlife.com/wiki/LlSetLinkPrimitiveParamsFast]] and [[https://wiki.secondlife.com/wiki/LlSetLinkPrimitiveParamsFast]]. They are different. If you go into the history page and look at a previous version it will displays properly because it doesn&#039;t have a cached version but if you look at the current version (even with the version number, it does not display properly). Not even action=purge can budge it. A possible explanation is that the PrimitiveParams article is causing it to time out during rebuild. The new version of the template I&#039;m hoping to get done by new year should be more sane and less time consuming (we hope). -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:00, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:: I thought it was only cache too but more appears to be going on. [[llKey2Name]] is displaying OK with a pair of Issue templates commented out. --[[User:Cerise Sorbet|Cerise Sorbet]] 22:22, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::The time issue I was seeing was caused by me having my account report the times in GMT+5 (which is weird seeing as i&#039;m GMT-5) -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:31, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I&#039;ve had a thought, I think it might have something to do with how bugs are duplicated (in both Issues and Important Issues). It looks to be the difference between the Get and Set primitive Params functions (Get are too new to have any flag bugs). -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:42, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::It&#039;s not [[Template:Issues]] that is doing it, it&#039;s something about [[Template:Issue]]. I have this terrible feeling it&#039;s a problem with how #switch is parsed. When are we getting the new parser function extension? -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:55, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::Oh it&#039;s definitely [[Template:Issue]]. I can&#039;t access it when logged out. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:55, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::I&#039;ve disabled the code that detects if an issue is a bug, which appears to have fixed [[llKey2Name]]. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 23:14, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
: #switch is not the cause, just the trigger. Maybe it&#039;s content duplication that is the problem? -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:28, 17 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
: Mediawiki 1.14 added a |link= option for Image: tags. This would let you skip the imagemap for most uses that don&#039;t really need coordinates. --[[User:Cerise Resident|Cerise]] 03:38, 18 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:: There is a god ^_^ thanks for the tip. I&#039;ll deploy it post hast. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 03:40, 18 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::: Thanks so much for tracking this down, Strife and Cerise!  This move/upgrade has certainly been more problematic than we expected.... :-(&lt;br /&gt;
:::--[[User:Rand Linden|Rand Linden]] 19:05, 19 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::: They always are more problematic than anticipated. I&#039;m sorry I didn&#039;t pay more attention to it earlier, I did notice the blanking on the test wiki briefly but not the common factor (since I spend all my time logged in, the first thing I always do when I connect is log in). I spent my time looking at differences between the highlighting. Never thought to look for differences between HTTP &amp;amp; HTTPS. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 19:30, 19 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Different versions of UTF-8 libraries ==&lt;br /&gt;
&lt;br /&gt;
Hi Strife, it seems that there are two different versions of both UTF8ToUnicodeInteger() and UnicodeIntegerToUTF8() at [[Combined_Library#Unicode_functions]] and [[UTF-8]]. Maybe those could be moved to a template - or just manually synced as you feel appropriate. --[[User:Opensource Obscure|oobscure]] 03:17, 2 May 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
There is a good point. Will do. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 09:12, 12 May 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Issues/SCR-137 ==&lt;br /&gt;
&lt;br /&gt;
Sorry for [[Template:Issues/SCR-137]], force of habit since most of the time I&#039;m suggesting new functions that aren&#039;t on the wiki, rather than changes to existing ones ;) -- &amp;lt;br/&amp;gt;-- &#039;&#039;&#039;[[User:Haravikk_Mistral|Haravikk]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User_talk:Haravikk_Mistral|talk]]|[[Special:Contributions/Haravikk_Mistral|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 01:43, 9 July 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
:No need to apologize. In my diminished capacity these days (being cut off from SL due to network restrictions for such a long time) there is little I can do besides act as editor, and theoretical scripting. So you gave me something to do. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 09:10, 9 July 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
== llCastRay Docs ==&lt;br /&gt;
&lt;br /&gt;
Thanks, Strife. Your improvement to the llCastRay docs look great.&lt;br /&gt;
&lt;br /&gt;
[[User:Falcon Linden|Falcon Linden]] 11:57, 1 September 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
== User Functions ==&lt;br /&gt;
&lt;br /&gt;
Heya Strife,&lt;br /&gt;
Could you give me a headsup how the wiki format for Mode=User LSL Functions are meant to be used like?&lt;br /&gt;
&lt;br /&gt;
https://wiki.secondlife.com/wiki/Interpolation/Linear/Float&lt;br /&gt;
&lt;br /&gt;
I&#039;m not sure why I can&#039;t get rid off the &amp;quot;Deep Notes&amp;quot; section, which seems sorta empty and useless?&lt;br /&gt;
&lt;br /&gt;
[[User:Nexii Malthus|&amp;lt;span style=&amp;quot;color: #111; text-shadow:-1px -1px #ddd, 1px 1px #888;&amp;quot;&amp;gt;Nexii Malthus&amp;lt;/span&amp;gt;]] 11:48, 17 September 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
:Sure -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 13:36, 18 September 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Video Documentations / Tutorials ==&lt;br /&gt;
forgot who the king of confirming stuff on this wiki is, I haven&#039;t been an editor for like a year or two if you remember me or not, but I thought I might add video documentations and tutorials on functions that could be confusing on the wikis page, so I guess the question is how should I add the videos, should I add a new category or just put it in the examples category, and if video documentation is a good idea toward you, since you are the #1 editor on this wiki haha, and I know nothing about style D:&lt;br /&gt;
--&amp;lt;b&amp;gt;--&amp;lt;/b&amp;gt;[[File:Uglehsig.png|53px|link=User:Ugleh_Ulrik]]([[User_talk:Ugleh_Ulrik|talk]]) 19:45, 11 October 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
:I&#039;m tickled that you would consult me but I really have no idea on this one. I think it&#039;s a great idea and until we get more of them to get a feel as to how they can be best incorporated into the documentation, they can be included any way you see fit. I might suggested posting the question to the script forums and mailing list (if you do, maybe post a link so I can follow along?). I can imagine putting them in See Also, Examples, Deep Notes, Helpers, Specification (maybe?), Newbie Notes, Notes. I have trouble seeing them in the Summary/Description, Caveats or Constants. Maybe float them on the right (like in [[PRIM_MATERIAL]])? Keep up the good work. ^_^ -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 12:21, 12 October 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Hi ==&lt;br /&gt;
&lt;br /&gt;
Just caught the comment over on the blog and wanted to say hi. I haven&#039;t left, just withdrawn from the official forums. Actually I hopped over to SLU, although their scripting forums are dead as doornails, so I&#039;ve been amusing myself in their PRS section. Sent in an NDA for the latest inworld beta review project, no reply yet ::shrug:: hope all is good on your end, and was pleasantly surprised you stopped by. Cheers&amp;lt;br/&amp;gt;-- &#039;&#039;&#039;[[User:Void_Singer|Void]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User_talk:Void_Singer|talk]]|[[Special:Contributions/Void_Singer|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 07:52, 22 December 2011 (PST)&lt;br /&gt;
&lt;br /&gt;
: Things are going well here. beta? do they have a page describing it anywhere? I always loved betas. I stay mostly here on the wiki, wish I could get in world more, I hate writing documentation without being able to test the functionality. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 23:22, 22 December 2011 (PST)&lt;br /&gt;
:P.S. You are a braver soul than I to go into PRS.&lt;br /&gt;
&lt;br /&gt;
No wiki page that I&#039;m aware of, e-mail invitation letters (which seem to have been dispersed to many forumites, and turned down by a few) describe it as pre-release feedback review, of what specifically, I couldn&#039;t say (even if I knew yet). I&#039;ll ask if they&#039;ll bounce you a late entry since you seem interested. and yeah PRS is madness, but I&#039;m largely word-proof so the invective is more like warm glow instead of singing flame for me, something to kill break time. happy new years and all that jazz&amp;lt;br/&amp;gt;-- &#039;&#039;&#039;[[User:Void_Singer|Void]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User_talk:Void_Singer|talk]]|[[Special:Contributions/Void_Singer|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 10:00, 26 December 2011 (PST)&lt;br /&gt;
&lt;br /&gt;
:Thank you for offering but It&#039;s better if you don&#039;t. I wish I could thou I have no time (nor the internet connection) for it. If they sent me an invitation I&#039;d feel obliged to accept and then not be able to do it justice. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 21:55, 26 December 2011 (PST)&lt;br /&gt;
&lt;br /&gt;
Understood, I&#039;ll try to remember to ping ya when it goes live then, could be a bit, dunno quite how far they are out on it. &amp;lt;br/&amp;gt;-- &#039;&#039;&#039;[[User:Void_Singer|Void]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User_talk:Void_Singer|talk]]|[[Special:Contributions/Void_Singer|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 16:22, 27 December 2011 (PST)&lt;br /&gt;
&lt;br /&gt;
== http_response event only be triggered for the originating script or triggered for all scripts ==&lt;br /&gt;
&lt;br /&gt;
Hello Strife,&lt;br /&gt;
&lt;br /&gt;
I just read the [http://wiki.secondlife.com/w/index.php?title=LlHTTPRequest&amp;amp;diff=1157547&amp;amp;oldid=1157508 note] you added concerning [[llHTTPRequest]].&lt;br /&gt;
Although this is of course a sane behavior, I was a bit surprised when I read it because I knew it wasn&#039;t the case before, I also have some script that depends on the old behavior and I didn&#039;t received any complaints concerning them.&lt;br /&gt;
So, I&#039;ve just checked and I can confirm that, at least on my home sim which use the main server version, the event is still triggered on all scripts of the object which made the request.&lt;br /&gt;
&lt;br /&gt;
By pure curiosity, I wonder if you have any additional information about this change.&lt;br /&gt;
&lt;br /&gt;
Many thanks,&lt;br /&gt;
[[User:Elena Bouscario|Elena]] 11:45, 11 February 2012 (PST)&lt;br /&gt;
&lt;br /&gt;
:I have no information on this unfortunately. My edit was a rewrite of the [https://wiki.secondlife.com/w/index.php?title=LlHTTPRequest&amp;amp;diff=1157508&amp;amp;oldid=1153608 previous edit] so that everything would read more clearly. Sounds like both edits should be reverted. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 10:45, 12 February 2012 (PST)&lt;br /&gt;
&lt;br /&gt;
== capturing caveats in constants pages? ==&lt;br /&gt;
&lt;br /&gt;
I&#039;m trying to figure out the proper way to include a caveat in the [[DEBUG_CHANNEL]] and [[PUBLIC_CHANNEL]] pages, so that it properly inserts into articles referencing those two pages. The caveat is as follows&lt;br /&gt;
* Messages on channel_name are throttled to a rate of &amp;lt;200/2sec, per region, per owner/user.&lt;br /&gt;
** Once the rate is exceeded, all messages on channel_name will be dropped until the send rate is again below 200/2sec for the previous 2 sec.&lt;br /&gt;
not quite sure how to go about it though?&amp;lt;br/&amp;gt;-- &#039;&#039;&#039;[[User:Void_Singer|Void]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User_talk:Void_Singer|talk]]|[[Special:Contributions/Void_Singer|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 23:27, 21 August 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
:I&#039;d be inclined to work it into [[Template:LSL_Function/chat]] as well. No time now (and likely won&#039;t be able to see later, going to the eye doctor). -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 08:30, 22 August 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
:Arrg it&#039;s a rats nest. I&#039;ll work on it later. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 08:31, 22 August 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
:I&#039;ve put it in the template so now it&#039;s now everywhere... but still needs some tweaking. back later -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thanks, didn&#039;t mean to give you headaches over it =( I&#039;ll take a look at how you did it so maybe next time I can sort it myself&amp;lt;br/&amp;gt;-- &#039;&#039;&#039;[[User:Void_Singer|Void]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User_talk:Void_Singer|talk]]|[[Special:Contributions/Void_Singer|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 21:47, 22 August 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
:It wasn&#039;t as bad as I thought it would be, no worries. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 08:48, 23 August 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
== llGetTime/llResetTime ==&lt;br /&gt;
I saw you made a distinction between Mono and LSO for whether or not it&#039;s affected by dilation. However, empirical evidence doesn&#039;t seem to support this.  While this may have been true in the past, it doesn&#039;t seem to be anymore. [[User:Darien Caldwell|Darien Caldwell]] 11:08, 13 September 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
:That is great. :) I&#039;ll revert it. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 21:20, 13 September 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Another world, another wiki ==&lt;br /&gt;
&lt;br /&gt;
I don&#039;t suppose you have any tips for a budding documentor? I&#039;m just learning mediawiki, and started function documentation over at Cloud Party (I didn&#039;t create the templates) http://wiki.cloudpartytime.com&lt;br /&gt;
BTW, do you use avisynth, or work on wiki docs for it? Still enjoy tinkering with avisyth scripts! [[User:Phate Shepherd|Phate Shepherd]] 16:43, 16 September 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
:I&#039;m sorry it&#039;s been taking me so long to respond, I&#039;m working on articulating the my thoughts. I haven&#039;t forgotten you. I want to do the questions justice. Watch this space for an update soon.  -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 20:29, 19 September 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
::No worries... So much to do and learn here! Thanks![[User:Phate Shepherd|Phate Shepherd]] 22:06, 21 September 2012 (PDT)&lt;/div&gt;</summary>
		<author><name>Phate Shepherd</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User_talk:Strife_Onizuka&amp;diff=1172707</id>
		<title>User talk:Strife Onizuka</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User_talk:Strife_Onizuka&amp;diff=1172707"/>
		<updated>2012-09-16T23:43:33Z</updated>

		<summary type="html">&lt;p&gt;Phate Shepherd: /* Another world, another wiki */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:User:Zai_Lynch/Award}}You found my talk page... Find old discussions take a look at the archives: [[User:Strife_Onizuka/Talkpage_Archive_01|1]] [[User:Strife_Onizuka/Talkpage_Archive_02|2]]&lt;br /&gt;
&lt;br /&gt;
== JIRA issues on LSL function pages ==&lt;br /&gt;
&lt;br /&gt;
Okay, as I&#039;ve made no headway deciphering your templates (not that I&#039;m familiar in the least with the more complex wiki functions in the first place...) I decided just to cut my losses and ask! Basically I was wondering if there&#039;s a reason why [[Template:LSL_Generic/Issues]] doesn&#039;t appear to list all issues, but instead seems to just list bugs only in the same way as [[Template:LSL_Generic/Caveats]]?&lt;br /&gt;
&lt;br /&gt;
I just think it&#039;d be nice if function pages would also summarise popular proposals relating to them in the deep notes section, which is what I believed was intended but it doesn&#039;t appear to do this right now.&lt;br /&gt;
&lt;br /&gt;
For example, if you go to the [[LlStartAnimation]] page, in the deep notes you&#039;ll notice that there are zero issues listed, however, clicking the &amp;quot;Search JIRA for related Issues&amp;quot; link returns quite a few. It might be nice to see the deep notes tweaked to display these, but perhaps with a limit on how many are shown (though llStartAnimation is a fairly popular one to see JIRA issues for and only has 17 issues listed). Anyway, just though I&#039;d ask/request, please poke my talk page if you respond to be sure I remember and look! --[[User:Haravikk Mistral|Haravikk Mistral]] 15:26, 12 September 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:The template is not automatic. Take for example [[llBreakLink]], it lists a single issue in the article, it does this by including the template [[Template:Issues/SVC-3510]]. There are many stub templates like [[Template:Issues/SVC-3510]] that work this way, they contain the information about the issue and pass it along to a template that does the heavy lifting. The value of this method is that a single template exists for the Issue and if the issue is sited on multiple pages, they can all be quickly updated by modifying the template. From an organizational standpoint, it also makes it possible to see what all pertains to a particular issue.&lt;br /&gt;
&lt;br /&gt;
:The thing is, if you want all the issues on the wiki, they need to be imported to the wiki, and regularly updated as changes are made... but that could all be done with a bot. Wonder if [[User:Gigs Taggart|Gigs]] could be enticed to incorporate it into [http://www.sljirastats.com SLJiraStats]?&lt;br /&gt;
&lt;br /&gt;
:The goal of the Deep Notes: Issues section was to contain dead bugs and interesting feature suggestions. I never intended it to contain all issues pertaining to a feature. We don&#039;t add any value by duplicated the JIRA search engine results; the value we can add is by filtering them. Some of the bugs aren&#039;t bugs, and some of the feature suggestions are unworkable; I don&#039;t think these should be given screen space. Considering the resources required to manually include and update the issues, triage has to happen.&lt;br /&gt;
&lt;br /&gt;
:Unfortunately I do not have the free time to work on this, work and other responsibilities eat all my time. *wonders just how true that is* -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 03:10, 16 September 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Ah yeah, seems I&#039;ve completely misunderstood what it was doing! I wasn&#039;t thinking to list everything, just an automatic, and hopefully useful summary of say...the top ten bugs and issues? It sounds like way more work than it&#039;s likely to be worth though so probably better just to forget about it, unless there&#039;s some way to just embed an iframe with a portion of a JIRA search or something similar? But that would probably cause an unacceptable increase in JIRA page requests from people just popping over to look something up. But now I know how it does work I can at least pop useful relevant issues on manually, thanks! -- [[User:Haravikk Mistral|Haravikk Mistral]] 12:36, 18 September 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:A related problem, I&#039;ve tried to add a few top issues of interest to me onto my user page under Key Issues, however, I&#039;ve tried to create two [[Template:IssueTable]] instances, but they both have the same content, despite the value of #issues being different for both. Is this some peculiarity in using this template more than once? If you could take a look at let me know it&#039;d be handy, as IssueTable doesn&#039;t have any documentation =( -- [[User:Haravikk Mistral|Haravikk Mistral]] 11:36, 22 September 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::You are hitting one of the caveats/bugs of the new parser engine. I forget how to get around it. I beleive the issue is intermediate caching, and the way around it is to make the template call dynamic or something like that. Without spending a bunch of time debugging the problem, I just don&#039;t remember how to work around it. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 14:37, 22 September 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::It just struck me what the problem is, it&#039;s caching IssueTable. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 18:27, 22 September 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::Aha! The &amp;quot;subst:&amp;quot; keyword seems to be for this (e.g - &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{subst:User:Haravikk_Mistral/JIRA/Issues/SVC}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;), as I believe it fetches the pre-processed contents of a page rather than the source. In any event, this works in my case as I created sub-pages for each category, I don&#039;t believe it would help for a page with multiple IssueTable instances though, as using subst: for any of them would just create a blank gap, but it solves my problem at least! -- [[User:Haravikk Mistral|Haravikk Mistral]] 11:29, 23 September 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== [[Ghost Detector]] ==&lt;br /&gt;
Thanks.  I discovered that property of [[llKey2Name]] by accident.  It&#039;s odd because, for instance, [[llDetectedName]] gives a non-empty string for ghosted avatars. -- [[User:Something Something|Something Something]] 05:21, 10 November 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Friendly greetings ==&lt;br /&gt;
You seem to have found a &amp;quot;fix&amp;quot; for my horrible script and....messed it up. Please compare my original to yours and do some testing. They are different in the result. I would appreciate you fixing your &amp;quot;fix&amp;quot;. Best regards --[[User:Kireji Haiku|Kireji Haiku]] 02:42, 14 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I&#039;m sorry you took the edit personally it was not intended that way. The example you contributed is valuable and nontrivial, however examples are held to high standards and it didn&#039;t meet them. I was faced with two options: rewriting it or deleting it, I felt it had merit so I rewrote it. My goal as always is to provide the most useful content to our users, and in this case down compatibility needed to be sacrificed. The script as it was designed required every prim to have at least one face have full glow, that didn&#039;t sound entirely useful, so I changed it to accept some glow (I notice that I also changed it to require every face have glow... which doesn&#039;t sound useful, so I&#039;m going to revert that).&lt;br /&gt;
:Examples have one major goal: Be educational, teach good coding practices and problem solving. Here is where the script went awry:&lt;br /&gt;
:# Names should be descriptive. The function names were a bit generic but single letter variables are definitely not descriptive, especially when they are globals, they really should describe the purpose they fulfill. &lt;br /&gt;
:# Using globals instead of locals &amp;amp; parameters may be efficient, but it degrades readability and adds a new vector for script bugs. This sort of optimization has no place in examples (except in an article on optimization techniques). The situation is made even worse by using non-descriptive variable names.&lt;br /&gt;
:# The script contained code that complicated it without aiding readability or improving functionality. Examples need to be streamline, having it meander requires the reader to needlessly keep track of more things.&lt;br /&gt;
:# I felt that the functionality provided had too narrow an audience, that by changing how it functioned that it would be more useful to more people. Down compatibility is a secondary consideration for examples, not a primary consideration.&lt;br /&gt;
&lt;br /&gt;
:P.S. I take it you didn&#039;t noticed there is a bug in your script: A single prim object with at least one avatar sitting on it could return the wrong result. IMO examples should not be attributed in the script text, it&#039;s what the history page is for after all, but I know the community and I don&#039;t always agree so I don&#039;t fight it. Personally I don&#039;t want my name associated with buggy code, so if you really want the script to be 100% compatible I&#039;ll have to remove my name and give you all the credit.&lt;br /&gt;
&lt;br /&gt;
:P.S.S. I think we may have different notions of wiki content ownership. When I post content on the wiki, I do so with the full expectation that it will be edited, that it will mutate into something I did not envision, into something I may not entirely agree with. We do not control the content after we have posted it. It&#039;s why there is the text below the edit box: &amp;quot;If you don&#039;t want your writing to be edited mercilessly and redistributed at will, then don&#039;t submit it here.&amp;quot; Wiki culture is different. I may own my contributions but I don&#039;t control their fate. They are my children, being changed and influenced by the people around them, being made stronger in the process. But I digress&lt;br /&gt;
&lt;br /&gt;
:P.S.S.S. In the future if you want to convince someone they should do something, don&#039;t insult them first, it&#039;s counter productive. A better way to approach this situation would have been to say: &amp;quot;I disagree with some of the changes you made, specifically blah blah blah, could you please look into it? I did not appreciate your tone and I am quite insulted.&amp;quot; It&#039;s a mistake to mix the two messages, people are prone to take offense and not do what you want out of spite. In a situation like this being snarky just isn&#039;t productive (though it does blow off a bit of steam which can feel good in the moment). Just FYI, nothing more. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 07:43, 14 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I didn&#039;t take it personally and was just trying to make you aware of your rewrite not doing the same like my script. Maybe you don&#039;t read in-world messages, as I had sent you a message thanking you for your rewrite and trying to point out the differences between the two. The script I had provided would check a link-set on whether or not it has glow. And yes, that would return a false result if avatars sit on it, but I thought nobody would use the script to check if a link-set is glowing while sitting on it, but I might be wrong and should have pointed that out in the description. So I see your point there and support your critique on that. However my script would return &amp;quot;glowing&amp;quot; for a prim if ANY number of faces have SOME glow (not 1.0, as you said it would do). Maybe you now understand my view when I see your rewrite as being more streamlined and easier to read, however you limit the script down in its original ability of detecting glow by forcing it to return positive only with all faces of a prim glowing. Anyway, I&#039;m not up for a fight and to be quite frank just too lazy for it, a builder inside of SL asked me if it&#039;s possible to detect whether or not there&#039;s a bit of glow on all prims inside a link-set of his build and I just felt like sharing my approach of writing a script for that. If that script doesn&#039;t meet wiki standards in terms of streamlining it towards being absolutely foolproof and readable for just about anybody, I&#039;ll have to refrain from doing so in future.--[[User:Kireji Haiku|Kireji Haiku]] 18:13, 14 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::First I need to apologize, when I wrote my last comment I hadn&#039;t carefully reread your script, if I had I would have noticed your use of llCeil, which does as you point out return true for some glow. So my argument on that point is baseless. Between work and other obligations, I had forgotten about that aspect of the script and just went on my memory of what I thought the script was doing. As to fighting, I agree it&#039;s a waste of time and effort. However I hope you do continue to contribute to the wiki, every contribution is valuable as they grow the understanding and knowledge base of the community. Standards evolve and the content does as well, content has to be nurtured, given room to grow. Immature content just needs to mature is all; the only time stuff gets deleted is if it&#039;s factually inaccurate or needlessly repetitive. If I thought the contribution was trivial and obvious I would have stripped your name from it (attribution on one liners is blatant self ego boosting and makes the wiki look unprofessional).  The only reason I attached my name was so that you wouldn&#039;t be forced to shoulder the costs of supporting code that you did not write. Please don&#039;t take away from this that your contribution was without value, or that I had no respect for it or you.&lt;br /&gt;
&lt;br /&gt;
:::I should mention the reason for my terse comment in the edit was for a simple reason: I couldn&#039;t be verbose with the text limits of the field. &lt;br /&gt;
&lt;br /&gt;
:::As to messaging me, all my IMs get sent to an email account I rarely check, I only ever go inworld to keep my accounts active and go to meetings (pretty rare) because my internet connect is total suckage. I had no idea you IMed me; for all correspondence I use the wiki and email. &lt;br /&gt;
&lt;br /&gt;
:::You would be quite ticked at me if I were to describe my scripting habits with regards to code I post. I know I was when I saw people do what I do, but I don&#039;t really have the option. It&#039;s an ROI equation, should I make possibly buggy contributions or make no contributions at all? I wish I weren&#039;t forced to make the choice. If I weren&#039;t here doing this who would take up the mantel? Who would look after the templates? It would avoid problems like this maybe but would the community be better off? I honestly don&#039;t know but I suspect not.&lt;br /&gt;
&lt;br /&gt;
:::If you&#039;re still reading, what changes or improvements would you like to see made to the documentation? An upcoming project is to incorporate collapsible sections into the documentation, I&#039;m just not sure yet how to do so, I could do with some input. I haven&#039;t called for input from the community yet because I haven&#039;t rolled out the new Constants template yet (which will revolutionize the {{LSLGC|PrimitiveParams}} documentation). Given the potential of collapsible sections we are at a point in time where we should consider redesigning the documentation from the ground up. Maybe a contest? -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:33, 14 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::P.S. Does it work as it did before now? -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 23:48, 14 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::Hi, no it doesn&#039;t. The first problem is your thing with the double exclamation mark, that always returns 1 for me. And the second being you&#039;re still stuck with [PRIM_GLOW,ALL_SIDES], you don&#039;t do a loop through the sides. I will post a re-do of mine again, if you find a way to do what you wanted to do with the double exclamation mark thing, let me know.[[User:Kireji Haiku|Kireji Haiku]] 21:16, 17 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::::&amp;lt;code&amp;gt;!![[llGetLinkNumber]]()&amp;lt;/code&amp;gt; returns 1 for multiprim objects or 0 for single prim objects; It&#039;s logically equivalent to &amp;lt;code&amp;gt;llGetLinkNumber() != 0&amp;lt;/code&amp;gt; however it requires less bytecode to express (you would not be without base to berate me for perpetrating this optimization/shorthand in an example script). You shouldn&#039;t need to loop through the sides, by using [[ALL_SIDES]] it should return a list containing the glow values for every side of the prim (not a very useful feature, in most cases uses it&#039;s better to loop through the sides). We then feed that list to the list stat function to get the max. I&#039;ll see if I can log in later to test it but right now I really need to fix the LSL documentation templates (the wiki upgrade broke at least one template, which in turn broke a lot of the LSL documentation; I&#039;m trying to both find and fix the broken templates; and I don&#039;t know the precise cause). -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 21:37, 17 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::::Fixed it finally, thanks again for the ideas and the input. &amp;lt;code&amp;gt;!![[llGetLinkNumber]]()&amp;lt;/code&amp;gt; doesn&#039;t seem to work, I know exactly what you&#039;re trying to do by writing it that way, but that always returns 1. Have tested it. And your return was a bit too fast to return a result, wouldn&#039;t wait until the end. If you can simplify it even further, go ahead. That&#039;s as far as I could get.[[User:Kireji Haiku|Kireji Haiku]] 21:12, 23 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::::::Is &amp;lt;code&amp;gt;!![[llGetLinkNumber]]&amp;lt;/code&amp;gt; returning one for a single prim object with no avatars sitting on it? That is the only time it should return zero. A single prim object with a seated avatar should return one. As to the early exit, once we find a prim with no glow, we can exit without checking the other prims. Logically speaking, we do not need to know precisely what the minimum is, just if it is less than or equal to zero. So instead of calculating the minimum we can exit as soon as we know the minimum is going to be less than or equal to zero. We know it will be less than or equal to zero if we have a value that is zero or less. The code should exit as soon as it knows the answer so as to not waste simulator resources (after all we need to encourage responsible coding). -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 05:08, 25 December 2010 (UTC)&lt;br /&gt;
::::::::Personally, I would prefer that examples intended to educate and demonstrate functionality NOT have obfuscating optimizations in them, unless the purpose of the example is to demonstrate such. It makes it harder for non-gurus to understand what is going on in the script, thus limiting the &amp;quot;educational value&amp;quot; of the example and obviating the purpose which it was intended. That said, I do believe it is important for people to know about them as well as how/when to use them, but I also believe teaching good programming habits is also valuable. (I don&#039;t know if the script in question qualifies as such; just wanted to point this out since it came up as an ancillary issue) [[User:Talarus Luan|Talarus Luan]] 07:35, 15 January 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Help with template issue ==&lt;br /&gt;
&lt;br /&gt;
Hi Strife,&lt;br /&gt;
I&#039;m hoping you can help to shed some light on a problem we have just discovered that has started to occur since we redployed the wiki yesterday.  The symptom is that SOME pages, e.g. [[LlKey2Name]] display differently when you are not logged in versus logged in.  Compare&lt;br /&gt;
* Logged in: http://screencast.com/t/e3K85IGni&lt;br /&gt;
* Not logged in: http://screencast.com/t/4OwWfihvhi&lt;br /&gt;
I &#039;&#039;think&#039;&#039; that this may be happening due to issues around templates, which is why I am contacting you.  However, I don&#039;t really know the cause.   The strange thing is that most other LSL function pages appear to display just fine when you are logged out; so there must be something in that page causing an issue.  We would greatly appreciate any help!  P.S. Here is the whole list of known issues: [[Second Life Wiki Known Issues]].&lt;br /&gt;
&lt;br /&gt;
Thanks&lt;br /&gt;
--[[User:Rand Linden|Rand Linden]] 17:15, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I think it was generated before the extensions were installed. I purged the page (?action=purge) and it now renders properly for me (though I did see it the way you described but only when i was not logged in). It&#039;s weird. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 21:22, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Maybe the cache just needs to be invalidated? -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 21:24, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Some triangulation: &amp;lt;nowiki&amp;gt;|constants={{LSL Constants/PrimitiveParams|get}}&amp;lt;/nowiki&amp;gt; does &#039;&#039;not&#039;&#039; cause trouble on a test copy of llSetLinkPrimitiveParams, &amp;lt;nowiki&amp;gt;|constants={{LSL Constants/PrimitiveParams|set}}&amp;lt;/nowiki&amp;gt; triggers the bug. Off to try on simpler stuff to see if there is a consistent pattern of some kind ... --[[User:Cerise Sorbet|Cerise Sorbet]] 21:47, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::The cache is not invalidating or refreshing. Check the mod date at the bottom of [[http://wiki.secondlife.com/wiki/LlSetLinkPrimitiveParamsFast]] and [[https://wiki.secondlife.com/wiki/LlSetLinkPrimitiveParamsFast]]. They are different. If you go into the history page and look at a previous version it will displays properly because it doesn&#039;t have a cached version but if you look at the current version (even with the version number, it does not display properly). Not even action=purge can budge it. A possible explanation is that the PrimitiveParams article is causing it to time out during rebuild. The new version of the template I&#039;m hoping to get done by new year should be more sane and less time consuming (we hope). -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:00, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:: I thought it was only cache too but more appears to be going on. [[llKey2Name]] is displaying OK with a pair of Issue templates commented out. --[[User:Cerise Sorbet|Cerise Sorbet]] 22:22, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::The time issue I was seeing was caused by me having my account report the times in GMT+5 (which is weird seeing as i&#039;m GMT-5) -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:31, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I&#039;ve had a thought, I think it might have something to do with how bugs are duplicated (in both Issues and Important Issues). It looks to be the difference between the Get and Set primitive Params functions (Get are too new to have any flag bugs). -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:42, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::It&#039;s not [[Template:Issues]] that is doing it, it&#039;s something about [[Template:Issue]]. I have this terrible feeling it&#039;s a problem with how #switch is parsed. When are we getting the new parser function extension? -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:55, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::Oh it&#039;s definitely [[Template:Issue]]. I can&#039;t access it when logged out. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:55, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::I&#039;ve disabled the code that detects if an issue is a bug, which appears to have fixed [[llKey2Name]]. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 23:14, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
: #switch is not the cause, just the trigger. Maybe it&#039;s content duplication that is the problem? -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:28, 17 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
: Mediawiki 1.14 added a |link= option for Image: tags. This would let you skip the imagemap for most uses that don&#039;t really need coordinates. --[[User:Cerise Resident|Cerise]] 03:38, 18 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:: There is a god ^_^ thanks for the tip. I&#039;ll deploy it post hast. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 03:40, 18 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::: Thanks so much for tracking this down, Strife and Cerise!  This move/upgrade has certainly been more problematic than we expected.... :-(&lt;br /&gt;
:::--[[User:Rand Linden|Rand Linden]] 19:05, 19 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::: They always are more problematic than anticipated. I&#039;m sorry I didn&#039;t pay more attention to it earlier, I did notice the blanking on the test wiki briefly but not the common factor (since I spend all my time logged in, the first thing I always do when I connect is log in). I spent my time looking at differences between the highlighting. Never thought to look for differences between HTTP &amp;amp; HTTPS. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 19:30, 19 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Different versions of UTF-8 libraries ==&lt;br /&gt;
&lt;br /&gt;
Hi Strife, it seems that there are two different versions of both UTF8ToUnicodeInteger() and UnicodeIntegerToUTF8() at [[Combined_Library#Unicode_functions]] and [[UTF-8]]. Maybe those could be moved to a template - or just manually synced as you feel appropriate. --[[User:Opensource Obscure|oobscure]] 03:17, 2 May 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
There is a good point. Will do. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 09:12, 12 May 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Issues/SCR-137 ==&lt;br /&gt;
&lt;br /&gt;
Sorry for [[Template:Issues/SCR-137]], force of habit since most of the time I&#039;m suggesting new functions that aren&#039;t on the wiki, rather than changes to existing ones ;) -- &amp;lt;br/&amp;gt;-- &#039;&#039;&#039;[[User:Haravikk_Mistral|Haravikk]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User_talk:Haravikk_Mistral|talk]]|[[Special:Contributions/Haravikk_Mistral|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 01:43, 9 July 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
:No need to apologize. In my diminished capacity these days (being cut off from SL due to network restrictions for such a long time) there is little I can do besides act as editor, and theoretical scripting. So you gave me something to do. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 09:10, 9 July 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
== llCastRay Docs ==&lt;br /&gt;
&lt;br /&gt;
Thanks, Strife. Your improvement to the llCastRay docs look great.&lt;br /&gt;
&lt;br /&gt;
[[User:Falcon Linden|Falcon Linden]] 11:57, 1 September 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
== User Functions ==&lt;br /&gt;
&lt;br /&gt;
Heya Strife,&lt;br /&gt;
Could you give me a headsup how the wiki format for Mode=User LSL Functions are meant to be used like?&lt;br /&gt;
&lt;br /&gt;
https://wiki.secondlife.com/wiki/Interpolation/Linear/Float&lt;br /&gt;
&lt;br /&gt;
I&#039;m not sure why I can&#039;t get rid off the &amp;quot;Deep Notes&amp;quot; section, which seems sorta empty and useless?&lt;br /&gt;
&lt;br /&gt;
[[User:Nexii Malthus|&amp;lt;span style=&amp;quot;color: #111; text-shadow:-1px -1px #ddd, 1px 1px #888;&amp;quot;&amp;gt;Nexii Malthus&amp;lt;/span&amp;gt;]] 11:48, 17 September 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
:Sure -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 13:36, 18 September 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Video Documentations / Tutorials ==&lt;br /&gt;
forgot who the king of confirming stuff on this wiki is, I haven&#039;t been an editor for like a year or two if you remember me or not, but I thought I might add video documentations and tutorials on functions that could be confusing on the wikis page, so I guess the question is how should I add the videos, should I add a new category or just put it in the examples category, and if video documentation is a good idea toward you, since you are the #1 editor on this wiki haha, and I know nothing about style D:&lt;br /&gt;
--&amp;lt;b&amp;gt;--&amp;lt;/b&amp;gt;[[File:Uglehsig.png|53px|link=User:Ugleh_Ulrik]]([[User_talk:Ugleh_Ulrik|talk]]) 19:45, 11 October 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
:I&#039;m tickled that you would consult me but I really have no idea on this one. I think it&#039;s a great idea and until we get more of them to get a feel as to how they can be best incorporated into the documentation, they can be included any way you see fit. I might suggested posting the question to the script forums and mailing list (if you do, maybe post a link so I can follow along?). I can imagine putting them in See Also, Examples, Deep Notes, Helpers, Specification (maybe?), Newbie Notes, Notes. I have trouble seeing them in the Summary/Description, Caveats or Constants. Maybe float them on the right (like in [[PRIM_MATERIAL]])? Keep up the good work. ^_^ -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 12:21, 12 October 2011 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Hi ==&lt;br /&gt;
&lt;br /&gt;
Just caught the comment over on the blog and wanted to say hi. I haven&#039;t left, just withdrawn from the official forums. Actually I hopped over to SLU, although their scripting forums are dead as doornails, so I&#039;ve been amusing myself in their PRS section. Sent in an NDA for the latest inworld beta review project, no reply yet ::shrug:: hope all is good on your end, and was pleasantly surprised you stopped by. Cheers&amp;lt;br/&amp;gt;-- &#039;&#039;&#039;[[User:Void_Singer|Void]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User_talk:Void_Singer|talk]]|[[Special:Contributions/Void_Singer|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 07:52, 22 December 2011 (PST)&lt;br /&gt;
&lt;br /&gt;
: Things are going well here. beta? do they have a page describing it anywhere? I always loved betas. I stay mostly here on the wiki, wish I could get in world more, I hate writing documentation without being able to test the functionality. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 23:22, 22 December 2011 (PST)&lt;br /&gt;
:P.S. You are a braver soul than I to go into PRS.&lt;br /&gt;
&lt;br /&gt;
No wiki page that I&#039;m aware of, e-mail invitation letters (which seem to have been dispersed to many forumites, and turned down by a few) describe it as pre-release feedback review, of what specifically, I couldn&#039;t say (even if I knew yet). I&#039;ll ask if they&#039;ll bounce you a late entry since you seem interested. and yeah PRS is madness, but I&#039;m largely word-proof so the invective is more like warm glow instead of singing flame for me, something to kill break time. happy new years and all that jazz&amp;lt;br/&amp;gt;-- &#039;&#039;&#039;[[User:Void_Singer|Void]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User_talk:Void_Singer|talk]]|[[Special:Contributions/Void_Singer|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 10:00, 26 December 2011 (PST)&lt;br /&gt;
&lt;br /&gt;
:Thank you for offering but It&#039;s better if you don&#039;t. I wish I could thou I have no time (nor the internet connection) for it. If they sent me an invitation I&#039;d feel obliged to accept and then not be able to do it justice. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 21:55, 26 December 2011 (PST)&lt;br /&gt;
&lt;br /&gt;
Understood, I&#039;ll try to remember to ping ya when it goes live then, could be a bit, dunno quite how far they are out on it. &amp;lt;br/&amp;gt;-- &#039;&#039;&#039;[[User:Void_Singer|Void]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User_talk:Void_Singer|talk]]|[[Special:Contributions/Void_Singer|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 16:22, 27 December 2011 (PST)&lt;br /&gt;
&lt;br /&gt;
== http_response event only be triggered for the originating script or triggered for all scripts ==&lt;br /&gt;
&lt;br /&gt;
Hello Strife,&lt;br /&gt;
&lt;br /&gt;
I just read the [http://wiki.secondlife.com/w/index.php?title=LlHTTPRequest&amp;amp;diff=1157547&amp;amp;oldid=1157508 note] you added concerning [[llHTTPRequest]].&lt;br /&gt;
Although this is of course a sane behavior, I was a bit surprised when I read it because I knew it wasn&#039;t the case before, I also have some script that depends on the old behavior and I didn&#039;t received any complaints concerning them.&lt;br /&gt;
So, I&#039;ve just checked and I can confirm that, at least on my home sim which use the main server version, the event is still triggered on all scripts of the object which made the request.&lt;br /&gt;
&lt;br /&gt;
By pure curiosity, I wonder if you have any additional information about this change.&lt;br /&gt;
&lt;br /&gt;
Many thanks,&lt;br /&gt;
[[User:Elena Bouscario|Elena]] 11:45, 11 February 2012 (PST)&lt;br /&gt;
&lt;br /&gt;
:I have no information on this unfortunately. My edit was a rewrite of the [https://wiki.secondlife.com/w/index.php?title=LlHTTPRequest&amp;amp;diff=1157508&amp;amp;oldid=1153608 previous edit] so that everything would read more clearly. Sounds like both edits should be reverted. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 10:45, 12 February 2012 (PST)&lt;br /&gt;
&lt;br /&gt;
== capturing caveats in constants pages? ==&lt;br /&gt;
&lt;br /&gt;
I&#039;m trying to figure out the proper way to include a caveat in the [[DEBUG_CHANNEL]] and [[PUBLIC_CHANNEL]] pages, so that it properly inserts into articles referencing those two pages. The caveat is as follows&lt;br /&gt;
* Messages on channel_name are throttled to a rate of &amp;lt;200/2sec, per region, per owner/user.&lt;br /&gt;
** Once the rate is exceeded, all messages on channel_name will be dropped until the send rate is again below 200/2sec for the previous 2 sec.&lt;br /&gt;
not quite sure how to go about it though?&amp;lt;br/&amp;gt;-- &#039;&#039;&#039;[[User:Void_Singer|Void]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User_talk:Void_Singer|talk]]|[[Special:Contributions/Void_Singer|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 23:27, 21 August 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
:I&#039;d be inclined to work it into [[Template:LSL_Function/chat]] as well. No time now (and likely won&#039;t be able to see later, going to the eye doctor). -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 08:30, 22 August 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
:Arrg it&#039;s a rats nest. I&#039;ll work on it later. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 08:31, 22 August 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
:I&#039;ve put it in the template so now it&#039;s now everywhere... but still needs some tweaking. back later -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thanks, didn&#039;t mean to give you headaches over it =( I&#039;ll take a look at how you did it so maybe next time I can sort it myself&amp;lt;br/&amp;gt;-- &#039;&#039;&#039;[[User:Void_Singer|Void]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User_talk:Void_Singer|talk]]|[[Special:Contributions/Void_Singer|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 21:47, 22 August 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
:It wasn&#039;t as bad as I thought it would be, no worries. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 08:48, 23 August 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
== llGetTime/llResetTime ==&lt;br /&gt;
I saw you made a distinction between Mono and LSO for whether or not it&#039;s affected by dilation. However, empirical evidence doesn&#039;t seem to support this.  While this may have been true in the past, it doesn&#039;t seem to be anymore. [[User:Darien Caldwell|Darien Caldwell]] 11:08, 13 September 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
:That is great. :) I&#039;ll revert it. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 21:20, 13 September 2012 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Another world, another wiki ==&lt;br /&gt;
&lt;br /&gt;
I don&#039;t suppose you have any tips for a budding documentor? I&#039;m just learning mediawiki, and started function documentation over at Cloud Party (I didn&#039;t create the templates) http://wiki.cloudpartytime.com&lt;br /&gt;
BTW, do you use avisynth, or work on wiki docs for it? Still enjoy tinkering with avisyth scripts! [[User:Phate Shepherd|Phate Shepherd]] 16:43, 16 September 2012 (PDT)&lt;/div&gt;</summary>
		<author><name>Phate Shepherd</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Nyx_Linden/Mesh_Office_Hours_Agenda&amp;diff=1132908</id>
		<title>User:Nyx Linden/Mesh Office Hours Agenda</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Nyx_Linden/Mesh_Office_Hours_Agenda&amp;diff=1132908"/>
		<updated>2011-01-31T19:09:34Z</updated>

		<summary type="html">&lt;p&gt;Phate Shepherd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Mesh Team&#039;s Office Hours Agenda==&lt;br /&gt;
&lt;br /&gt;
Office hours are on Mondays at 11 AM in Pacific time (SL standard time) located on the beta grid (Aditi) in Mesh HQ 1 at: [secondlife://Aditi/secondlife/MeshHQ%201/251/250/24  Mesh HQ on Aditi]&lt;br /&gt;
&lt;br /&gt;
Topics are focused on anything related to the mesh import project. Feature requests, bug reports, design feedback, questions, comments, or example content are welcome.&lt;br /&gt;
&lt;br /&gt;
Please add topics for discussion / agenda items to the end of the list below prior to 10:50 AM. Priority will be given to topics that are posted in advance and are relevant to the goals of the office hour. Feel free to include relevant links to JIRA or wiki pages. Contact Nyx Linden or Runitai Linden if you are unsure if your topic is relevant or appropriate.&lt;br /&gt;
&lt;br /&gt;
Archived agendas can be found at the [[User:Nyx_Linden/Mesh_Office_Hours_Agenda_Archive|agenda archive]].&lt;br /&gt;
&lt;br /&gt;
Next meeting scheduled for: January 31, 2011.&lt;br /&gt;
&lt;br /&gt;
===Agenda===&lt;br /&gt;
&lt;br /&gt;
== January 31, 2011 ==&lt;br /&gt;
# Can you give us an update on recent progress, what your priorities are right now, and what (if anything) you need us to test and report on right now?&lt;br /&gt;
# Are we there yet?&lt;br /&gt;
# Could someone fix the links for changesets in the automatic build page from the non-working codeticket.lindenlab.com back to hg.secondlife.com links?&lt;br /&gt;
# Is it possible to translate the avatar OBJ files in second life Wiki into Collada file?&lt;br /&gt;
# Can we expect to see an official API for third party mesh importers ? (Or does the API already exist ?)&lt;br /&gt;
# What are the chances for getting rigged mesh scaling after the initial release? https://jira.secondlife.com/browse/CTS-452&lt;br /&gt;
# Joint position import: Or... I Own a Horse&lt;br /&gt;
# Your topic here&lt;/div&gt;</summary>
		<author><name>Phate Shepherd</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Nyx_Linden/Mesh_Office_Hours_Agenda&amp;diff=1132904</id>
		<title>User:Nyx Linden/Mesh Office Hours Agenda</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Nyx_Linden/Mesh_Office_Hours_Agenda&amp;diff=1132904"/>
		<updated>2011-01-31T19:02:14Z</updated>

		<summary type="html">&lt;p&gt;Phate Shepherd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Mesh Team&#039;s Office Hours Agenda==&lt;br /&gt;
&lt;br /&gt;
Office hours are on Mondays at 11 AM in Pacific time (SL standard time) located on the beta grid (Aditi) in Mesh HQ 1 at: [secondlife://Aditi/secondlife/MeshHQ%201/251/250/24  Mesh HQ on Aditi]&lt;br /&gt;
&lt;br /&gt;
Topics are focused on anything related to the mesh import project. Feature requests, bug reports, design feedback, questions, comments, or example content are welcome.&lt;br /&gt;
&lt;br /&gt;
Please add topics for discussion / agenda items to the end of the list below prior to 10:50 AM. Priority will be given to topics that are posted in advance and are relevant to the goals of the office hour. Feel free to include relevant links to JIRA or wiki pages. Contact Nyx Linden or Runitai Linden if you are unsure if your topic is relevant or appropriate.&lt;br /&gt;
&lt;br /&gt;
Archived agendas can be found at the [[User:Nyx_Linden/Mesh_Office_Hours_Agenda_Archive|agenda archive]].&lt;br /&gt;
&lt;br /&gt;
Next meeting scheduled for: January 31, 2011.&lt;br /&gt;
&lt;br /&gt;
===Agenda===&lt;br /&gt;
&lt;br /&gt;
== January 31, 2011 ==&lt;br /&gt;
# Can you give us an update on recent progress, what your priorities are right now, and what (if anything) you need us to test and report on right now?&lt;br /&gt;
# Are we there yet?&lt;br /&gt;
# Could someone fix the links for changesets in the automatic build page from the non-working codeticket.lindenlab.com back to hg.secondlife.com links?&lt;br /&gt;
# Is it possible to translate the avatar OBJ files in second life Wiki into Collada file?&lt;br /&gt;
# Can we expect to see an official API for third party mesh importers ? (Or does the API already exist ?)&lt;br /&gt;
# Your topic here&lt;/div&gt;</summary>
		<author><name>Phate Shepherd</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Nyx_Linden/Mesh_Office_Hours_Agenda&amp;diff=1132889</id>
		<title>User:Nyx Linden/Mesh Office Hours Agenda</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Nyx_Linden/Mesh_Office_Hours_Agenda&amp;diff=1132889"/>
		<updated>2011-01-31T16:58:31Z</updated>

		<summary type="html">&lt;p&gt;Phate Shepherd: /* January 31, 2011 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Mesh Team&#039;s Office Hours Agenda==&lt;br /&gt;
&lt;br /&gt;
Office hours are on Mondays at 11 AM in Pacific time (SL standard time) located on the beta grid (Aditi) in Mesh HQ 1 at: [secondlife://Aditi/secondlife/MeshHQ%201/251/250/24  Mesh HQ on Aditi]&lt;br /&gt;
&lt;br /&gt;
Topics are focused on anything related to the mesh import project. Feature requests, bug reports, design feedback, questions, comments, or example content are welcome.&lt;br /&gt;
&lt;br /&gt;
Please add topics for discussion / agenda items to the end of the list below prior to 10:50 AM. Priority will be given to topics that are posted in advance and are relevant to the goals of the office hour. Feel free to include relevant links to JIRA or wiki pages. Contact Nyx Linden or Runitai Linden if you are unsure if your topic is relevant or appropriate.&lt;br /&gt;
&lt;br /&gt;
Archived agendas can be found at the [[User:Nyx_Linden/Mesh_Office_Hours_Agenda_Archive|agenda archive]].&lt;br /&gt;
&lt;br /&gt;
Next meeting scheduled for: January 31, 2011.&lt;br /&gt;
&lt;br /&gt;
===Agenda===&lt;br /&gt;
&lt;br /&gt;
== January 31, 2011 ==&lt;br /&gt;
# Can you give us an update on recent progress, what your priorities are right now, and what (if anything) you need us to test and report on right now?&lt;br /&gt;
# Are we there yet?&lt;br /&gt;
# Skeleton import issues... AKA: I Own A Horse.&lt;br /&gt;
# Your topic here&lt;/div&gt;</summary>
		<author><name>Phate Shepherd</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Nyx_Linden/Mesh_Office_Hours_Agenda&amp;diff=1132888</id>
		<title>User:Nyx Linden/Mesh Office Hours Agenda</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Nyx_Linden/Mesh_Office_Hours_Agenda&amp;diff=1132888"/>
		<updated>2011-01-31T16:58:11Z</updated>

		<summary type="html">&lt;p&gt;Phate Shepherd: /* January 31, 2011 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Mesh Team&#039;s Office Hours Agenda==&lt;br /&gt;
&lt;br /&gt;
Office hours are on Mondays at 11 AM in Pacific time (SL standard time) located on the beta grid (Aditi) in Mesh HQ 1 at: [secondlife://Aditi/secondlife/MeshHQ%201/251/250/24  Mesh HQ on Aditi]&lt;br /&gt;
&lt;br /&gt;
Topics are focused on anything related to the mesh import project. Feature requests, bug reports, design feedback, questions, comments, or example content are welcome.&lt;br /&gt;
&lt;br /&gt;
Please add topics for discussion / agenda items to the end of the list below prior to 10:50 AM. Priority will be given to topics that are posted in advance and are relevant to the goals of the office hour. Feel free to include relevant links to JIRA or wiki pages. Contact Nyx Linden or Runitai Linden if you are unsure if your topic is relevant or appropriate.&lt;br /&gt;
&lt;br /&gt;
Archived agendas can be found at the [[User:Nyx_Linden/Mesh_Office_Hours_Agenda_Archive|agenda archive]].&lt;br /&gt;
&lt;br /&gt;
Next meeting scheduled for: January 31, 2011.&lt;br /&gt;
&lt;br /&gt;
===Agenda===&lt;br /&gt;
&lt;br /&gt;
== January 31, 2011 ==&lt;br /&gt;
# Can you give us an update on recent progress, what your priorities are right now, and what (if anything) you need us to test and report on right now?&lt;br /&gt;
# Skeleton import issues... AKA: I Own A Horse.&lt;br /&gt;
# Are we there yet?&lt;br /&gt;
# Your topic here&lt;/div&gt;</summary>
		<author><name>Phate Shepherd</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Internal_Animation_Format&amp;diff=1026973</id>
		<title>Internal Animation Format</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Internal_Animation_Format&amp;diff=1026973"/>
		<updated>2010-09-06T20:16:05Z</updated>

		<summary type="html">&lt;p&gt;Phate Shepherd: /* Joint Rotation Keys */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
From a programming perspective, there are several steps to uploading an [[Animation|animation]] from a BVH (BioVision Hierarchy) file:&lt;br /&gt;
&lt;br /&gt;
# Read and parse the BVH file, creating an LLKeyframeMotion object containing the motion data.&lt;br /&gt;
# Gather input from the user (via the upload preview floater) for things like animation priority, facial expression, and looping; these settings are stored in the LLKeyframeMotion object.&lt;br /&gt;
# Serialize the LLKeyframeMotion object as [[LLSD]].&lt;br /&gt;
# Upload the serialized data to the asset server.&lt;br /&gt;
&lt;br /&gt;
Before other viewers can play an animation, they must:&lt;br /&gt;
&lt;br /&gt;
# Download the serialized data from the asset server.&lt;br /&gt;
# Deserialize it to an LLKeyframeMotion object.&lt;br /&gt;
&lt;br /&gt;
Relevant source files:&lt;br /&gt;
* &#039;&#039;linden/indra/llcharacter/llbvhloader.cpp&#039;&#039;&lt;br /&gt;
* &#039;&#039;linden/indra/llcharacter/llkeyframemotion.cpp&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Header==&lt;br /&gt;
&lt;br /&gt;
The first part of the animation data is a header describing various details about the animation as a whole. The elements, in order, are:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=version|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=sub_version|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=base_priority|llsd=integer|cpp=S32}}&lt;br /&gt;
{{LLSD Field Entry|name=duration|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=emote_name|llsd=string|cpp=std::string}}&lt;br /&gt;
{{LLSD Field Entry|name=loop_in_point|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=loop_out_point|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=loop|llsd=integer|cpp=S32|note=0: not looped, 1: looped}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_in_duration|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_out_duration|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=hand_pose|llsd=integer|cpp=U32}}&lt;br /&gt;
{{LLSD Field Entry|name=num_joints|llsd=integer|cpp=U32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Joint Data==&lt;br /&gt;
&lt;br /&gt;
After the header is data for each joint in the skeleton:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=joint_name|llsd=string|cpp=std::string}}&lt;br /&gt;
{{LLSD Field Entry|name=joint_priority|llsd=integer|cpp=S32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Joint Rotation Keys===&lt;br /&gt;
&lt;br /&gt;
At the start of the rotation data is the total number of rotation keys:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=num_rot_keys|llsd=integer|cpp=S32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then, for each rotation key:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=time|llsd=integer|cpp=U16|note=0: first frame, 65535: last frame}}&lt;br /&gt;
{{LLSD Field Entry|name=rot_angle_x|llsd=integer|cpp=U16|note=32767: 0°, 0: 180° (Non linear!)}}&lt;br /&gt;
{{LLSD Field Entry|name=rot_angle_y|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=rot_angle_z|llsd=integer|cpp=U16}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Joint Position Keys===&lt;br /&gt;
&lt;br /&gt;
At the start of the position data is the total number of position keys:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=num_pos_keys|llsd=integer|cpp=S32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, for each position key:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=time|llsd=integer|cpp=U16|note=0: first frame, 65535: last frame}}&lt;br /&gt;
{{LLSD Field Entry|name=pos_x|llsd=integer|cpp=U16|note=0: -5M, 32767: 0M, 65535: +5M}}&lt;br /&gt;
{{LLSD Field Entry|name=pos_y|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=pos_z|llsd=integer|cpp=U16}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Constraints==&lt;br /&gt;
&lt;br /&gt;
After the joint data are a number of entries for joint constraints. Constraints can target an avatar&#039;s parts in relation to each other or the ground.&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=num_constraints|llsd=integer|cpp=S32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then, for each joint constraint:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=chain_length|llsd=integer|cpp=U8|note=number of attached joints to include}}&lt;br /&gt;
{{LLSD Field Entry|name=constraint_type|llsd=integer|cpp=U8|note=0: point, 1: plane}}&lt;br /&gt;
{{LLSD Field Entry|name=source_volume|llsd=string |cpp=U8[16] array|note=skeleton collision volume name}}&lt;br /&gt;
{{LLSD Field Entry|name=source_offset|llsd=string (?)|cpp=LLVector3}}&lt;br /&gt;
{{LLSD Field Entry|name=target_volume|llsd=string|cpp= U8[16] array|note=skeleton collision volume name}}&lt;br /&gt;
{{LLSD Field Entry|name=target_offset|llsd=string (?)|cpp=LLVector3}}&lt;br /&gt;
{{LLSD Field Entry|name=target_dir|llsd=string (?)|cpp=LLVector3|note=value is currently ignored}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_in_start|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_in_stop|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_out_start|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_out_stop|llsd=real|cpp=F32}}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phate Shepherd</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Internal_Animation_Format&amp;diff=1026963</id>
		<title>Internal Animation Format</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Internal_Animation_Format&amp;diff=1026963"/>
		<updated>2010-09-06T20:13:56Z</updated>

		<summary type="html">&lt;p&gt;Phate Shepherd: /* Joint Position Keys */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
From a programming perspective, there are several steps to uploading an [[Animation|animation]] from a BVH (BioVision Hierarchy) file:&lt;br /&gt;
&lt;br /&gt;
# Read and parse the BVH file, creating an LLKeyframeMotion object containing the motion data.&lt;br /&gt;
# Gather input from the user (via the upload preview floater) for things like animation priority, facial expression, and looping; these settings are stored in the LLKeyframeMotion object.&lt;br /&gt;
# Serialize the LLKeyframeMotion object as [[LLSD]].&lt;br /&gt;
# Upload the serialized data to the asset server.&lt;br /&gt;
&lt;br /&gt;
Before other viewers can play an animation, they must:&lt;br /&gt;
&lt;br /&gt;
# Download the serialized data from the asset server.&lt;br /&gt;
# Deserialize it to an LLKeyframeMotion object.&lt;br /&gt;
&lt;br /&gt;
Relevant source files:&lt;br /&gt;
* &#039;&#039;linden/indra/llcharacter/llbvhloader.cpp&#039;&#039;&lt;br /&gt;
* &#039;&#039;linden/indra/llcharacter/llkeyframemotion.cpp&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Header==&lt;br /&gt;
&lt;br /&gt;
The first part of the animation data is a header describing various details about the animation as a whole. The elements, in order, are:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=version|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=sub_version|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=base_priority|llsd=integer|cpp=S32}}&lt;br /&gt;
{{LLSD Field Entry|name=duration|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=emote_name|llsd=string|cpp=std::string}}&lt;br /&gt;
{{LLSD Field Entry|name=loop_in_point|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=loop_out_point|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=loop|llsd=integer|cpp=S32|note=0: not looped, 1: looped}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_in_duration|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_out_duration|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=hand_pose|llsd=integer|cpp=U32}}&lt;br /&gt;
{{LLSD Field Entry|name=num_joints|llsd=integer|cpp=U32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Joint Data==&lt;br /&gt;
&lt;br /&gt;
After the header is data for each joint in the skeleton:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=joint_name|llsd=string|cpp=std::string}}&lt;br /&gt;
{{LLSD Field Entry|name=joint_priority|llsd=integer|cpp=S32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Joint Rotation Keys===&lt;br /&gt;
&lt;br /&gt;
At the start of the rotation data is the total number of rotation keys:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=num_rot_keys|llsd=integer|cpp=S32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then, for each rotation key:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=time|llsd=integer|cpp=U16|note=0: first frame, 65535: last frame}}&lt;br /&gt;
{{LLSD Field Entry|name=rot_angle_x|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=rot_angle_y|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=rot_angle_z|llsd=integer|cpp=U16}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Joint Position Keys===&lt;br /&gt;
&lt;br /&gt;
At the start of the position data is the total number of position keys:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=num_pos_keys|llsd=integer|cpp=S32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, for each position key:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=time|llsd=integer|cpp=U16|note=0: first frame, 65535: last frame}}&lt;br /&gt;
{{LLSD Field Entry|name=pos_x|llsd=integer|cpp=U16|note=0: -5M, 32767: 0M, 65535: +5M}}&lt;br /&gt;
{{LLSD Field Entry|name=pos_y|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=pos_z|llsd=integer|cpp=U16}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Constraints==&lt;br /&gt;
&lt;br /&gt;
After the joint data are a number of entries for joint constraints. Constraints can target an avatar&#039;s parts in relation to each other or the ground.&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=num_constraints|llsd=integer|cpp=S32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then, for each joint constraint:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=chain_length|llsd=integer|cpp=U8|note=number of attached joints to include}}&lt;br /&gt;
{{LLSD Field Entry|name=constraint_type|llsd=integer|cpp=U8|note=0: point, 1: plane}}&lt;br /&gt;
{{LLSD Field Entry|name=source_volume|llsd=string |cpp=U8[16] array|note=skeleton collision volume name}}&lt;br /&gt;
{{LLSD Field Entry|name=source_offset|llsd=string (?)|cpp=LLVector3}}&lt;br /&gt;
{{LLSD Field Entry|name=target_volume|llsd=string|cpp= U8[16] array|note=skeleton collision volume name}}&lt;br /&gt;
{{LLSD Field Entry|name=target_offset|llsd=string (?)|cpp=LLVector3}}&lt;br /&gt;
{{LLSD Field Entry|name=target_dir|llsd=string (?)|cpp=LLVector3|note=value is currently ignored}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_in_start|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_in_stop|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_out_start|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_out_stop|llsd=real|cpp=F32}}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phate Shepherd</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Internal_Animation_Format&amp;diff=1025752</id>
		<title>Internal Animation Format</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Internal_Animation_Format&amp;diff=1025752"/>
		<updated>2010-09-05T19:59:30Z</updated>

		<summary type="html">&lt;p&gt;Phate Shepherd: /* Joint Rotation Keys */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
From a programming perspective, there are several steps to uploading an [[Animation|animation]] from a BVH (BioVision Hierarchy) file:&lt;br /&gt;
&lt;br /&gt;
# Read and parse the BVH file, creating an LLKeyframeMotion object containing the motion data.&lt;br /&gt;
# Gather input from the user (via the upload preview floater) for things like animation priority, facial expression, and looping; these settings are stored in the LLKeyframeMotion object.&lt;br /&gt;
# Serialize the LLKeyframeMotion object as [[LLSD]].&lt;br /&gt;
# Upload the serialized data to the asset server.&lt;br /&gt;
&lt;br /&gt;
Before other viewers can play an animation, they must:&lt;br /&gt;
&lt;br /&gt;
# Download the serialized data from the asset server.&lt;br /&gt;
# Deserialize it to an LLKeyframeMotion object.&lt;br /&gt;
&lt;br /&gt;
Relevant source files:&lt;br /&gt;
* &#039;&#039;linden/indra/llcharacter/llbvhloader.cpp&#039;&#039;&lt;br /&gt;
* &#039;&#039;linden/indra/llcharacter/llkeyframemotion.cpp&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Header==&lt;br /&gt;
&lt;br /&gt;
The first part of the animation data is a header describing various details about the animation as a whole. The elements, in order, are:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=version|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=sub_version|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=base_priority|llsd=integer|cpp=S32}}&lt;br /&gt;
{{LLSD Field Entry|name=duration|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=emote_name|llsd=string|cpp=std::string}}&lt;br /&gt;
{{LLSD Field Entry|name=loop_in_point|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=loop_out_point|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=loop|llsd=integer|cpp=S32|note=0: not looped, 1: looped}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_in_duration|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_out_duration|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=hand_pose|llsd=integer|cpp=U32}}&lt;br /&gt;
{{LLSD Field Entry|name=num_joints|llsd=integer|cpp=U32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Joint Data==&lt;br /&gt;
&lt;br /&gt;
After the header is data for each joint in the skeleton:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=joint_name|llsd=string|cpp=std::string}}&lt;br /&gt;
{{LLSD Field Entry|name=joint_priority|llsd=integer|cpp=S32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Joint Rotation Keys===&lt;br /&gt;
&lt;br /&gt;
At the start of the rotation data is the total number of rotation keys:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=num_rot_keys|llsd=integer|cpp=S32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then, for each rotation key:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=time|llsd=integer|cpp=U16|note=0: first frame, 65535: last frame}}&lt;br /&gt;
{{LLSD Field Entry|name=rot_angle_x|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=rot_angle_y|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=rot_angle_z|llsd=integer|cpp=U16}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Joint Position Keys===&lt;br /&gt;
&lt;br /&gt;
At the start of the position data is the total number of position keys:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=num_pos_keys|llsd=integer|cpp=S32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, for each position key:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=time|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=pos_x|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=pos_y|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=pos_z|llsd=integer|cpp=U16}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Constraints==&lt;br /&gt;
&lt;br /&gt;
After the joint data are a number of entries for joint constraints. Constraints can target an avatar&#039;s parts in relation to each other or the ground.&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=num_constraints|llsd=integer|cpp=S32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then, for each joint constraint:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=chain_length|llsd=integer|cpp=U8|note=number of attached joints to include}}&lt;br /&gt;
{{LLSD Field Entry|name=constraint_type|llsd=integer|cpp=U8|note=0: point, 1: plane}}&lt;br /&gt;
{{LLSD Field Entry|name=source_volume|llsd=string |cpp=U8[16] array|note=skeleton collision volume name}}&lt;br /&gt;
{{LLSD Field Entry|name=source_offset|llsd=string (?)|cpp=LLVector3}}&lt;br /&gt;
{{LLSD Field Entry|name=target_volume|llsd=string|cpp= U8[16] array|note=skeleton collision volume name}}&lt;br /&gt;
{{LLSD Field Entry|name=target_offset|llsd=string (?)|cpp=LLVector3}}&lt;br /&gt;
{{LLSD Field Entry|name=target_dir|llsd=string (?)|cpp=LLVector3|note=value is currently ignored}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_in_start|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_in_stop|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_out_start|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_out_stop|llsd=real|cpp=F32}}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phate Shepherd</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Internal_Animation_Format&amp;diff=1025742</id>
		<title>Internal Animation Format</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Internal_Animation_Format&amp;diff=1025742"/>
		<updated>2010-09-05T19:40:52Z</updated>

		<summary type="html">&lt;p&gt;Phate Shepherd: /* Header */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
From a programming perspective, there are several steps to uploading an [[Animation|animation]] from a BVH (BioVision Hierarchy) file:&lt;br /&gt;
&lt;br /&gt;
# Read and parse the BVH file, creating an LLKeyframeMotion object containing the motion data.&lt;br /&gt;
# Gather input from the user (via the upload preview floater) for things like animation priority, facial expression, and looping; these settings are stored in the LLKeyframeMotion object.&lt;br /&gt;
# Serialize the LLKeyframeMotion object as [[LLSD]].&lt;br /&gt;
# Upload the serialized data to the asset server.&lt;br /&gt;
&lt;br /&gt;
Before other viewers can play an animation, they must:&lt;br /&gt;
&lt;br /&gt;
# Download the serialized data from the asset server.&lt;br /&gt;
# Deserialize it to an LLKeyframeMotion object.&lt;br /&gt;
&lt;br /&gt;
Relevant source files:&lt;br /&gt;
* &#039;&#039;linden/indra/llcharacter/llbvhloader.cpp&#039;&#039;&lt;br /&gt;
* &#039;&#039;linden/indra/llcharacter/llkeyframemotion.cpp&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Header==&lt;br /&gt;
&lt;br /&gt;
The first part of the animation data is a header describing various details about the animation as a whole. The elements, in order, are:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=version|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=sub_version|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=base_priority|llsd=integer|cpp=S32}}&lt;br /&gt;
{{LLSD Field Entry|name=duration|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=emote_name|llsd=string|cpp=std::string}}&lt;br /&gt;
{{LLSD Field Entry|name=loop_in_point|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=loop_out_point|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=loop|llsd=integer|cpp=S32|note=0: not looped, 1: looped}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_in_duration|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_out_duration|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=hand_pose|llsd=integer|cpp=U32}}&lt;br /&gt;
{{LLSD Field Entry|name=num_joints|llsd=integer|cpp=U32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Joint Data==&lt;br /&gt;
&lt;br /&gt;
After the header is data for each joint in the skeleton:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=joint_name|llsd=string|cpp=std::string}}&lt;br /&gt;
{{LLSD Field Entry|name=joint_priority|llsd=integer|cpp=S32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Joint Rotation Keys===&lt;br /&gt;
&lt;br /&gt;
At the start of the rotation data is the total number of rotation keys:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=num_rot_keys|llsd=integer|cpp=S32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then, for each rotation key:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=time|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=rot_angle_x|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=rot_angle_y|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=rot_angle_z|llsd=integer|cpp=U16}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Joint Position Keys===&lt;br /&gt;
&lt;br /&gt;
At the start of the position data is the total number of position keys:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=num_pos_keys|llsd=integer|cpp=S32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, for each position key:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=time|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=pos_x|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=pos_y|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=pos_z|llsd=integer|cpp=U16}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Constraints==&lt;br /&gt;
&lt;br /&gt;
After the joint data are a number of entries for joint constraints. Constraints can target an avatar&#039;s parts in relation to each other or the ground.&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=num_constraints|llsd=integer|cpp=S32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then, for each joint constraint:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=chain_length|llsd=integer|cpp=U8|note=number of attached joints to include}}&lt;br /&gt;
{{LLSD Field Entry|name=constraint_type|llsd=integer|cpp=U8|note=0: point, 1: plane}}&lt;br /&gt;
{{LLSD Field Entry|name=source_volume|llsd=string |cpp=U8[16] array|note=skeleton collision volume name}}&lt;br /&gt;
{{LLSD Field Entry|name=source_offset|llsd=string (?)|cpp=LLVector3}}&lt;br /&gt;
{{LLSD Field Entry|name=target_volume|llsd=string|cpp= U8[16] array|note=skeleton collision volume name}}&lt;br /&gt;
{{LLSD Field Entry|name=target_offset|llsd=string (?)|cpp=LLVector3}}&lt;br /&gt;
{{LLSD Field Entry|name=target_dir|llsd=string (?)|cpp=LLVector3|note=value is currently ignored}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_in_start|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_in_stop|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_out_start|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_out_stop|llsd=real|cpp=F32}}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phate Shepherd</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Internal_Animation_Format&amp;diff=1025732</id>
		<title>Internal Animation Format</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Internal_Animation_Format&amp;diff=1025732"/>
		<updated>2010-09-05T19:37:14Z</updated>

		<summary type="html">&lt;p&gt;Phate Shepherd: /* Joint Position Keys */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
From a programming perspective, there are several steps to uploading an [[Animation|animation]] from a BVH (BioVision Hierarchy) file:&lt;br /&gt;
&lt;br /&gt;
# Read and parse the BVH file, creating an LLKeyframeMotion object containing the motion data.&lt;br /&gt;
# Gather input from the user (via the upload preview floater) for things like animation priority, facial expression, and looping; these settings are stored in the LLKeyframeMotion object.&lt;br /&gt;
# Serialize the LLKeyframeMotion object as [[LLSD]].&lt;br /&gt;
# Upload the serialized data to the asset server.&lt;br /&gt;
&lt;br /&gt;
Before other viewers can play an animation, they must:&lt;br /&gt;
&lt;br /&gt;
# Download the serialized data from the asset server.&lt;br /&gt;
# Deserialize it to an LLKeyframeMotion object.&lt;br /&gt;
&lt;br /&gt;
Relevant source files:&lt;br /&gt;
* &#039;&#039;linden/indra/llcharacter/llbvhloader.cpp&#039;&#039;&lt;br /&gt;
* &#039;&#039;linden/indra/llcharacter/llkeyframemotion.cpp&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Header==&lt;br /&gt;
&lt;br /&gt;
The first part of the animation data is a header describing various details about the animation as a whole. The elements, in order, are:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=version|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=sub_version|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=base_priority|llsd=integer|cpp=S32}}&lt;br /&gt;
{{LLSD Field Entry|name=duration|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=emote_name|llsd=string|cpp=std::string}}&lt;br /&gt;
{{LLSD Field Entry|name=loop_in_point|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=loop_out_point|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=loop|llsd=integer|cpp=S32}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_in_duration|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_out_duration|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=hand_pose|llsd=integer|cpp=U32}}&lt;br /&gt;
{{LLSD Field Entry|name=num_joints|llsd=integer|cpp=U32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Joint Data==&lt;br /&gt;
&lt;br /&gt;
After the header is data for each joint in the skeleton:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=joint_name|llsd=string|cpp=std::string}}&lt;br /&gt;
{{LLSD Field Entry|name=joint_priority|llsd=integer|cpp=S32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Joint Rotation Keys===&lt;br /&gt;
&lt;br /&gt;
At the start of the rotation data is the total number of rotation keys:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=num_rot_keys|llsd=integer|cpp=S32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then, for each rotation key:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=time|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=rot_angle_x|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=rot_angle_y|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=rot_angle_z|llsd=integer|cpp=U16}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Joint Position Keys===&lt;br /&gt;
&lt;br /&gt;
At the start of the position data is the total number of position keys:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=num_pos_keys|llsd=integer|cpp=S32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, for each position key:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=time|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=pos_x|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=pos_y|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=pos_z|llsd=integer|cpp=U16}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Constraints==&lt;br /&gt;
&lt;br /&gt;
After the joint data are a number of entries for joint constraints. Constraints can target an avatar&#039;s parts in relation to each other or the ground.&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=num_constraints|llsd=integer|cpp=S32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then, for each joint constraint:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=chain_length|llsd=integer|cpp=U8|note=number of attached joints to include}}&lt;br /&gt;
{{LLSD Field Entry|name=constraint_type|llsd=integer|cpp=U8|note=0: point, 1: plane}}&lt;br /&gt;
{{LLSD Field Entry|name=source_volume|llsd=string |cpp=U8[16] array|note=skeleton collision volume name}}&lt;br /&gt;
{{LLSD Field Entry|name=source_offset|llsd=string (?)|cpp=LLVector3}}&lt;br /&gt;
{{LLSD Field Entry|name=target_volume|llsd=string|cpp= U8[16] array|note=skeleton collision volume name}}&lt;br /&gt;
{{LLSD Field Entry|name=target_offset|llsd=string (?)|cpp=LLVector3}}&lt;br /&gt;
{{LLSD Field Entry|name=target_dir|llsd=string (?)|cpp=LLVector3|note=value is currently ignored}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_in_start|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_in_stop|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_out_start|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_out_stop|llsd=real|cpp=F32}}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phate Shepherd</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Internal_Animation_Format&amp;diff=1025722</id>
		<title>Internal Animation Format</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Internal_Animation_Format&amp;diff=1025722"/>
		<updated>2010-09-05T19:36:51Z</updated>

		<summary type="html">&lt;p&gt;Phate Shepherd: /* Joint Rotation Keys */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
From a programming perspective, there are several steps to uploading an [[Animation|animation]] from a BVH (BioVision Hierarchy) file:&lt;br /&gt;
&lt;br /&gt;
# Read and parse the BVH file, creating an LLKeyframeMotion object containing the motion data.&lt;br /&gt;
# Gather input from the user (via the upload preview floater) for things like animation priority, facial expression, and looping; these settings are stored in the LLKeyframeMotion object.&lt;br /&gt;
# Serialize the LLKeyframeMotion object as [[LLSD]].&lt;br /&gt;
# Upload the serialized data to the asset server.&lt;br /&gt;
&lt;br /&gt;
Before other viewers can play an animation, they must:&lt;br /&gt;
&lt;br /&gt;
# Download the serialized data from the asset server.&lt;br /&gt;
# Deserialize it to an LLKeyframeMotion object.&lt;br /&gt;
&lt;br /&gt;
Relevant source files:&lt;br /&gt;
* &#039;&#039;linden/indra/llcharacter/llbvhloader.cpp&#039;&#039;&lt;br /&gt;
* &#039;&#039;linden/indra/llcharacter/llkeyframemotion.cpp&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Header==&lt;br /&gt;
&lt;br /&gt;
The first part of the animation data is a header describing various details about the animation as a whole. The elements, in order, are:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=version|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=sub_version|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=base_priority|llsd=integer|cpp=S32}}&lt;br /&gt;
{{LLSD Field Entry|name=duration|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=emote_name|llsd=string|cpp=std::string}}&lt;br /&gt;
{{LLSD Field Entry|name=loop_in_point|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=loop_out_point|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=loop|llsd=integer|cpp=S32}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_in_duration|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_out_duration|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=hand_pose|llsd=integer|cpp=U32}}&lt;br /&gt;
{{LLSD Field Entry|name=num_joints|llsd=integer|cpp=U32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Joint Data==&lt;br /&gt;
&lt;br /&gt;
After the header is data for each joint in the skeleton:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=joint_name|llsd=string|cpp=std::string}}&lt;br /&gt;
{{LLSD Field Entry|name=joint_priority|llsd=integer|cpp=S32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Joint Rotation Keys===&lt;br /&gt;
&lt;br /&gt;
At the start of the rotation data is the total number of rotation keys:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=num_rot_keys|llsd=integer|cpp=S32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then, for each rotation key:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=time|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=rot_angle_x|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=rot_angle_y|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=rot_angle_z|llsd=integer|cpp=U16}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Joint Position Keys===&lt;br /&gt;
&lt;br /&gt;
At the start of the position data is the total number of position keys:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=num_pos_keys|llsd=integer|cpp=S32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, for each position key:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=time|llsd=integer|cpp=U32}}&lt;br /&gt;
{{LLSD Field Entry|name=pos_x|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=pos_y|llsd=integer|cpp=U16}}&lt;br /&gt;
{{LLSD Field Entry|name=pos_z|llsd=integer|cpp=U16}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Constraints==&lt;br /&gt;
&lt;br /&gt;
After the joint data are a number of entries for joint constraints. Constraints can target an avatar&#039;s parts in relation to each other or the ground.&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=num_constraints|llsd=integer|cpp=S32}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then, for each joint constraint:&lt;br /&gt;
&lt;br /&gt;
{|{{LLSD Field Table}}&lt;br /&gt;
{{LLSD Field Entry|name=chain_length|llsd=integer|cpp=U8|note=number of attached joints to include}}&lt;br /&gt;
{{LLSD Field Entry|name=constraint_type|llsd=integer|cpp=U8|note=0: point, 1: plane}}&lt;br /&gt;
{{LLSD Field Entry|name=source_volume|llsd=string |cpp=U8[16] array|note=skeleton collision volume name}}&lt;br /&gt;
{{LLSD Field Entry|name=source_offset|llsd=string (?)|cpp=LLVector3}}&lt;br /&gt;
{{LLSD Field Entry|name=target_volume|llsd=string|cpp= U8[16] array|note=skeleton collision volume name}}&lt;br /&gt;
{{LLSD Field Entry|name=target_offset|llsd=string (?)|cpp=LLVector3}}&lt;br /&gt;
{{LLSD Field Entry|name=target_dir|llsd=string (?)|cpp=LLVector3|note=value is currently ignored}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_in_start|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_in_stop|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_out_start|llsd=real|cpp=F32}}&lt;br /&gt;
{{LLSD Field Entry|name=ease_out_stop|llsd=real|cpp=F32}}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phate Shepherd</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=How_to_create_animations&amp;diff=336473</id>
		<title>How to create animations</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=How_to_create_animations&amp;diff=336473"/>
		<updated>2009-04-27T17:59:14Z</updated>

		<summary type="html">&lt;p&gt;Phate Shepherd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Help&lt;br /&gt;
|Object=*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
An animation, in Second Life lingo, is a set of instructions that cause an [[avatar]] to engage in a sequence of motions.&lt;br /&gt;
You can use animations to make your avatar clap their hands, dance, blow someone a kiss, and much more. &lt;br /&gt;
&lt;br /&gt;
Check out [http://www.gup.uni-linz.ac.at/~gk/Diplom/CART-Martin.pdf Martin Garstenauer&#039;s thesis] for a good introduction to the principles of character animation.  Find out what a quaternion is.  See [[Internal Animation Format]] for a description of the animation data format.&lt;br /&gt;
&lt;br /&gt;
Custom animations can be created in programs such as Poser, Blender, and others. In 2005, one resident-made program was relased, called [http://caladan.nanosoft.ca/c4/software/posemaker.php Posemaker]([http://forums.secondlife.com/showthread.php?t=44734 ref-thread]). And in 2006, two Free ones were released: [http://www.avimator.com/ Avimator] ([http://forums.secondlife.com/showthread.php?t=81886 ref-thread]) and [http://sourceforge.net/projects/free-bvh-editor slat] ([http://forums.secondlife.com/showthread.php?t=83702 ref-thread]). In-World tools such as AnyPose ([http://forums.secondlife.com/showthread.php?t=307718 ref-thread]) and U-Poser ([http://forums.secondlife.com/showthread.php?t=170129 ref-thread]) can also be used to create animations for Second Life. Animations can be imported from these programs into Second Life by storing them as Biovision Hierarchy files, which have a file extension of BVH, and using the main menu &#039;&#039;&#039;File &amp;amp;gt; Upload Animation&#039;&#039;&#039; command. There is a L$10 fee for uploading an animation. Animations can be previewed prior to uploading.&lt;br /&gt;
&lt;br /&gt;
Animations can be used in [[gestures]] in Second Life but should not be confused with gestures.&lt;br /&gt;
&lt;br /&gt;
Animations in one&#039;s [[inventory]] can be activated by double clicking the animation name in the inventory list, or by right-clicking the animation name and selecting &#039;&#039;&#039;Open&#039;&#039;&#039; from the context menu. This will produce a dialog box with the animation name, a field in which to see or enter a description of the animation, and two buttons: &#039;&#039;&#039;Play in World&#039;&#039;&#039; and &#039;&#039;&#039;Play Locally&#039;&#039;&#039;. &#039;&#039;&#039;Play Locally&#039;&#039;&#039; will cause the user to see the animation but it will not will be visible to other Residents. This is useful to make sure the animation is really something you want others to see your avatar doing. &#039;&#039;&#039;Play in World&#039;&#039;&#039; will cause the Residents within visual range to see your avatar perform the animation.&lt;br /&gt;
&lt;br /&gt;
There are many animations available inworld, both free and for sale. You can get started locating some by pressing the &#039;&#039;&#039;Search&#039;&#039;&#039; button in the bottom of the SL screen, selecting the &#039;&#039;&#039;All&#039;&#039;&#039; tab, and entering &amp;quot;animation&amp;quot; as a search term.&lt;br /&gt;
&lt;br /&gt;
== Basic Knowlege For Creating SL Animations ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. The BVH file&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
The BVH is the text data that describes each figure part&#039;s rotation and position along a timeline.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Hip is the top&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Hip is the top of the hierarchy construction of figure in BVH. So, if you want to move the whole body, you have to move the hip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Keyframe&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Animation is created by keyframe animation. It is an animation technique which builds the frame that sets up the position and rotation angle of the part called a keyframe. A computer carries out a complementary automatic calculation and creates the motions in frames between keyframes. A keyframe is built for every part.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4. The first frame&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
You can create a stationary posture just by one frame animation, but note that you cannot move the whole body and cannot assign multiple priorities. This is convenient when you want an absolutely stiffened posture. The first frame of the animation that you created is used as reference information for the root part (hip) between BVH and SL. The first frame&#039;s posture doesn&#039;t appear inworld at all, but is recognized as a keyframe. Inworld animation only occurs after there is a difference from the position of the first frame and a rotation angle. Therefore, a stationary pose is actually composed to two separate frames. It is a good idea to set at zero on every parts&#039; rotation and position at the first frame (a &amp;quot;T&amp;quot; pose) because it makes it easier to keep track of which parts you moved.&lt;br /&gt;
&lt;br /&gt;
To recap: The first frame of an animation is a reference frame and is not shown in-world; any deviation from the first frame, however, will be interpreted as an avatar animation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;5. Spline interpolation&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
If the tool has a spline interpolation feature, you may encounter some frustration until you knew how to control it. Use the cutting spline option which should be implemented too, such as &amp;lt;s&amp;gt;&amp;quot;[http://forums.secondlife.com/attachment.php?attachmentid=21043 Break spline]&amp;quot;&amp;lt;/s&amp;gt;(link broken).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;6. [http://en.wikipedia.org/wiki/Inverse_kinematics Inverse Kinematics]&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
If the tool has the inverse kinematics feature and it&#039;s turned on, you might find it frustrating until you knew how to turn it off. Find it and learn how to turn it on/off.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;7. Speed of the animation&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
The default speed of animation is 30 FPS, that is it takes 1 second to play 30 frames. If you want 10-second animation, you need to create 300 frames. But you may also be able to change FPS value on each tool. And note that SL allows you to upload an animation up to 30 seconds.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8. Priority&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
8-1: [[Internal_Animations|The default built-in animations]] are always available to your avatar in-world. They may have different priorities on each keyframed part, unlike uploaded animations which always have the same animation on the whole body. Unless you give a higher priority to your animations, your animations will be overriden by them in-world. Priorities range from 0 to 4, with 4 being the highest priority. See [[Internal_Animations|the default built-in animations]] page to make sure what kind of priority each animation has.&amp;lt;br /&amp;gt;&lt;br /&gt;
8-2: Priority for uploaded animations is only given for the whole avatar, and is set in the uploading window. However, unless you animate each individual part of the avatar in your animation, some parts may be overridden by default animations (breathing, walking, etc.)&amp;lt;br /&amp;gt;&lt;br /&gt;
8-3: A later playing animation is given priority over the former one when their priorities are the same.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;9. Optimization&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
SL&#039;s BVH importer does optimization of animation data prior to upload into SL. Joint rotations with very slight changes from keyframe to keyframe will be interpreted as *not* changing and thus aren&#039;t stored. This is done intentionally since custom animation data is stored on our servers and downloaded to each viewer as it is needed in real time, and needs to be fairly terse.&amp;lt;br /&amp;gt;&lt;br /&gt;
The potential side effect of the optimization is what you have observed; joints with very subtle movement might have their animation data dropped entirely on upload. The threshold formula is complex, and involves comparing all three axes of data per joint, the distance moved between keyframes, as well as the joint&#039;s position in the skeletal hierachy.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;10. Scale of the avatars&#039; parts&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
There is a difference between the scale of the figure&#039;s parts on the tool and your avatars in-world. Even if you adjust the position of parts on the tool, it may show you incorrectly in-world. You may see the avatar sitting while hovering or sinking under ground. The hip moves by the absolute value. Meanwhile, your avatar&#039;s height depends on the body shape of the avatar. You cannot help but keep in mind how they are suitable for the position and go back to the tool. Then you have to tweak them again while ignoring the shape of figure on the tool.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;11. Facial and Hands morph&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Unfortunately, you cannot customize these animations. You can just select the built-in ones and add them to your animation on the uploading window. You can also evoke the built-in facial animations by script.&lt;br /&gt;
&lt;br /&gt;
It is said those options [http://jira.secondlife.com/browse/VWR-1793 are] [http://jira.secondlife.com/browse/VWR-5587 broken] for a long time, however.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;12. Uploading window&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
1. Name: Your animation file&#039;s name.&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Description: You can write something here as a note.&amp;lt;br /&amp;gt;&lt;br /&gt;
3. Priority: The range is 0-4. 4 is the highest value.&amp;lt;br /&amp;gt;&lt;br /&gt;
4. Preview while: You can select several [[Internal Animations|internal animations]] to make sure your animation while playing.&amp;lt;br /&amp;gt;&lt;br /&gt;
5. Loop: Click and put the check mark here to get a looping animation. It is not used when you create a stationary pose.&amp;lt;br /&amp;gt;&lt;br /&gt;
6. In(%) &amp;amp;amp; Out(%): You can select the range where you want to loop your animation in the whole timeline. Note, it starts from the first frame first, and then loops. So when you set 100% in the both fields, you can get an animation that starts moving and stops with the stationary pose at the last frame.&amp;lt;br /&amp;gt;&lt;br /&gt;
7. Hand Pose: You can select and add one of the several hand morphs to your animation here (broken).&amp;lt;br /&amp;gt;&lt;br /&gt;
8. Expression: You can select and add one of the several facial morphs to your animation here (broken too).&amp;lt;br /&amp;gt;&lt;br /&gt;
9. Ease In(sec) &amp;amp;amp; Ease Out(sec): This setting allows you to set the amount of time for your avatar to realistically ease (or morph or tween) into an animation from it&#039;s current pose, or out from the end of the animation into the next.  A setting of 0.000 will cause your avatar to snap instantly into the new pose, instead of smoothly transitioning there.  This setting is measured in seconds.&amp;lt;br /&amp;gt;&lt;br /&gt;
10. Play &amp;amp;amp; Stop buttons: You can play your animation to make sure before uploading here.&amp;lt;br /&amp;gt;&lt;br /&gt;
11. Pose screen: Just click and drag up-down on the screen, the camera moves zoom in/out. Drag left-right, the camera turns around the figure. Hold &#039;&#039;&#039;Ctrl&#039;&#039;&#039;, &#039;&#039;&#039;Shift&#039;&#039;&#039; or &#039;&#039;&#039;Alt&#039;&#039;&#039; and drag, and the camera can move in all directions.&lt;br /&gt;
&lt;br /&gt;
== Creating Animations in Qavimator ==&lt;br /&gt;
Qavimator can be download here : http://www.qavimator.org/&amp;lt;br/&amp;gt;&lt;br /&gt;
A beginner&#039;s guide is also available [http://wiki.qavimator.org/index.php/Beginner%27s_Guide here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;videoflash&amp;gt;h_-3c_aC-O4|250|206&amp;lt;/videoflash&amp;gt;&lt;br /&gt;
[[Video Tutorial/Creating &amp;amp; uploading animations|Creating &amp;amp; uploading animations with Qavimator (normal video size)]]&lt;br /&gt;
== Creating Animations in Poser ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This addition to the Wiki is very Poser-5/6 centric.&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The default Poser 6 has a lot of bugs including bvh exporting.You have to get the latest updated patch, SR2 or at least SR1 from [http://www.e-frontier.com/go/downloads Updates &amp;amp;amp; Documentations].&lt;br /&gt;
&lt;br /&gt;
=== Setting up Poser ===&lt;br /&gt;
First, you will want to get the Poser characters from [http://secondlife.com/community/avatar.php here].The ZIP file includes a BVH of the &amp;quot;default pose&amp;quot;. Be sure to have that where you can find it easily. There are directions in the ZIP file for installing the characters so you can use them on Poser.&lt;br /&gt;
&lt;br /&gt;
On the &#039;&#039;&#039;POSE&#039;&#039;&#039; tab screen of Poser, you should usually open the following windows. They are under the pull-down &#039;&#039;&#039;Window&#039;&#039;&#039; menu:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameter Dials: You can move or rotate the selected part by using these dials or inputting digits directly after clicking the value text.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Animation Palette&#039;&#039;&#039;: You can add and edit the whole frames and keyframes on each part. And you can play and make sure your animation from here.&lt;br /&gt;
&lt;br /&gt;
Now you can see mainly three windows, the Preview in where the SL figure you added is, the &#039;&#039;&#039;Parameter Dials&#039;&#039;&#039; and the &#039;&#039;&#039;Animation Palette&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
On the &#039;&#039;&#039;Animation Palette&#039;&#039;&#039;,you&#039;ll find all parts&#039; name of the figure on the left side of the window. Green dots means keyframes. You will see them on the first frame. You can click and select any frame and add a keyframe by pressing the &amp;quot;plus&amp;quot; button on the upper side of the window. You can also delete it by the &amp;quot;minus&amp;quot; button. Click any frame and drag cursor, and you can select multiple frames of parts.&amp;lt;br /&amp;gt;&lt;br /&gt;
You see &amp;quot;&#039;&#039;&#039;Play range&#039;&#039;&#039;&amp;quot; on the bottom of the &#039;&#039;&#039;Animation Palette&#039;&#039;&#039;. Tweak the range from the second frame to the end to play and make sure your animation without the first frame pose.&amp;lt;br /&amp;gt;&lt;br /&gt;
Select &#039;&#039;&#039;General Preferences&#039;&#039;&#039; which is found under &amp;quot;Edit&amp;quot; on the main poser window. Click the interface tab and choose &amp;quot;&#039;&#039;&#039;Meters&#039;&#039;&#039;&amp;quot; instead of &amp;quot;&#039;&#039;&#039;Feet&#039;&#039;&#039;&amp;quot; . This is because SL uses meters as the standard unit. Then select &amp;quot;&#039;&#039;&#039;Launch to previous state&#039;&#039;&#039;&amp;quot; in the &#039;&#039;&#039;Launch Behavior&#039;&#039;&#039; section of the same tab and press &amp;quot;&#039;&#039;&#039;OK&#039;&#039;&#039;&amp;quot;. Now you can get this state whenever you start Poser.&lt;br /&gt;
&lt;br /&gt;
=== Creating a sitting pose ===&lt;br /&gt;
1. Input the value &amp;quot;2&amp;quot; in the right side field of &amp;quot;Of&amp;quot; where is theright top of the Animation Palette window to set up two frames as thewhole frame.&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Make sure when you select the second value of any part on theAnimation Palette or input the value &amp;quot;2&amp;quot; in the field between &amp;quot;Frame:&amp;quot;and &amp;quot;Of&amp;quot;, it turns to be &amp;quot;Frame: 00002 Of 00002&amp;quot;. This second frame becomes the starting frame in SL.&amp;lt;br /&amp;gt;&lt;br /&gt;
3. Make sure you turn off Inverse Kinematics on the both of legs under &amp;quot;Figure&amp;quot; pull-down menu to move the whole body freely.&amp;lt;br /&amp;gt;&lt;br /&gt;
4. Select Hip. You can select it by clicking the figure&#039;s hip directly on Preview window or clicking the second frame of Hip on the Animation Palette.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note1: Hip is the top of the hierarchy construction of figure in SL(bvh). And &amp;quot;Body&amp;quot; and &amp;quot;CenterOfMass&amp;quot; parts aren&#039;t translated into BVH, so that they won&#039;t show any movement in world at all. What is worse that when you touch them, you&#039;ll be confused a lot because thegap of Poser and SL becomes large. You&#039;d better not to move the both&amp;quot;Body&amp;quot; and &amp;quot;CenterOfMass&amp;quot;.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
5. Input &amp;quot;-0.4&amp;quot; in the field of &amp;quot;move down-up&amp;quot; on the Parameter Dials window.&amp;lt;br /&amp;gt;&lt;br /&gt;
6. Select Left Thigh and input &amp;quot;-90&amp;quot; in the xRotate field on the Parameter Dials window.&amp;lt;br /&amp;gt;&lt;br /&gt;
7. Select Left Shin and input &amp;quot;90&amp;quot; in the xRotate field on the Parameter Dials window.&amp;lt;br /&amp;gt;&lt;br /&gt;
8. Select Left Foot and input &amp;quot;1&amp;quot; in the xRotate field on the Parameter Dials window so it&#039;s not to be overridden. (rf. Priority of The Basic Knowledge)&amp;lt;br /&amp;gt;&lt;br /&gt;
9. Using &amp;quot;Symmetry&amp;quot; which is under the pull-down &amp;quot;Figure&amp;quot; menu and copy left legs to right legs. The dialog box doesn&#039;t matter which you selectbecause you&#039;re using symmetric scale parts figure.&amp;lt;br /&amp;gt;&lt;br /&gt;
10. Save this file as a Poser file (pz3) because you might change this later.&amp;lt;br /&amp;gt;&lt;br /&gt;
11. Select &amp;quot;Export/BVH motion...&amp;quot; under the pull-down &amp;quot;File&amp;quot; menu. And select &amp;quot;Scale automatically&amp;quot; on the dialog box before creating BVH file.&lt;br /&gt;
&lt;br /&gt;
=== Uploading your animation ===&lt;br /&gt;
&lt;br /&gt;
1. Select &amp;quot;Uplaod Animation&amp;quot; under the pull-down &amp;quot;File&amp;quot; menu where is the top of screen in world.&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Select your BVH file which you created.&amp;lt;br /&amp;gt;&lt;br /&gt;
3. The upload window opens. You have to set the followings on the window.&amp;lt;br /&amp;gt;&lt;br /&gt;
Priority: &amp;quot;4&amp;quot; (rf. Priority of The Basic Knowledge)&amp;lt;br /&amp;gt;&lt;br /&gt;
4. Insert the check mark next to &amp;quot;Loop&amp;quot; by clicking. Pose is just the looping animation of the second frame.&amp;lt;br /&amp;gt;&lt;br /&gt;
5. &amp;quot;In(%)&amp;quot; &amp;amp;amp; &amp;quot;Out(%)&amp;quot; are from where start and to where end to play your animation in the whole frame. Now this doesn&#039;t matter because you created just one frame.&amp;lt;br /&amp;gt;&lt;br /&gt;
6. &amp;quot;Pose Hand&amp;quot; &amp;amp;amp; &amp;quot;Expression&amp;quot; are options. They are hand and face morph.&amp;lt;br /&amp;gt;&lt;br /&gt;
7. In &amp;quot;Ease In(sec)&amp;quot; &amp;amp;amp; &amp;quot;Ease Out(sec)&amp;quot;, you can add time dilation to play and stop your animation. If you put &amp;quot;1&amp;quot;(sec) in &amp;quot;Ease In(sec)&amp;quot;field, the avatar will take 1 sec to sit while morphing.&amp;lt;br /&amp;gt;&lt;br /&gt;
8. Press Play button and make sure how your animation is good. You can select &amp;quot;Preview while&amp;quot; pull-down menu, such as walking, sitting and so on.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note2: You&#039;ll find the upper body moves while walking. It is because you didn&#039;t move them at all on Poser and the priority is set at the lowest.&#039;&#039;&#039; (rf. Priority of The Basic Knowledge)&lt;br /&gt;
&lt;br /&gt;
9. Press &amp;quot;Upload(L$10)&amp;quot; button and get your animation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note3: You may see the avatar sitting while hovering or sinking underground. The hip moves by the absolute value. Meanwhile, your avatar&#039;s height depends on how you created them. The length of legs is up to avatars. Keep in mind how it is suitable for the height and go back to Poser. Then you have to create again while ignoring the shape of figure on Poser.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== The simple whole body spinning animation : about priorities ====&lt;br /&gt;
&lt;br /&gt;
1. Set the whole frames at 30 frames.&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Just create a keyframe on the hip at the 2nd frame. It becomes the 1st frame of animation in world.&amp;lt;br /&amp;gt;&lt;br /&gt;
3. Make sure you turn off Inverse Kinematics on the both legs.&amp;lt;br /&amp;gt;&lt;br /&gt;
4. Select the last frame and input value 360 in the &amp;quot;spin right-left&amp;quot; field on the Parameter Dials.&amp;lt;br /&amp;gt;&lt;br /&gt;
5. You can see your proper aniamtion on Poser.&amp;lt;br /&amp;gt;6. Uplodad your animation with Priority set at 4 and with Loop on.&lt;br /&gt;
&lt;br /&gt;
Now, you&#039;ll find your animation odd. It spins but the head is doing a reverse rotation and looks in the state of still seeing the front. It is because the default built-in standing animation has a higher priority on its neck and head parts. You didn&#039;t move those parts in the process of creating it above and those parts are set at the lowest priority. They are thus overridden by the default standing animation.&lt;br /&gt;
&lt;br /&gt;
Solution&lt;br /&gt;
&lt;br /&gt;
Set the neck of the xRotate at 1(degree) and the head of the xRotate at -1(degree) on Poser.&lt;br /&gt;
&lt;br /&gt;
=== The usage of Inverse Kinematics ===&lt;br /&gt;
&lt;br /&gt;
Inverse Kinematics is one of the most useful tool to create animation.&amp;lt;br /&amp;gt;&lt;br /&gt;
Let&#039;s learn how to use while you actually create animations. This sample is &amp;quot;Push-ups animation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The female figure is used in this animation.&amp;lt;br /&amp;gt;&lt;br /&gt;
1. Prepare 30 frames as the whole frame and select the 2nd frame to start to create your animation.&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Make sure you turn off Inverse Kinematics on all of the parts.&amp;lt;br /&amp;gt;&lt;br /&gt;
3. Select Hip and input &amp;quot;90&amp;quot; in the &amp;quot;pitch up - down&amp;quot; field.&amp;lt;br /&amp;gt;&lt;br /&gt;
4. You&#039;d better see your figure from the side by Camera Control.&amp;lt;br /&amp;gt;&lt;br /&gt;
5. Input &amp;quot;-0.4&amp;quot; in the &amp;quot;move up-down&amp;quot; field.&amp;lt;br /&amp;gt;&lt;br /&gt;
6. Select Left Thigh and input &amp;quot;-20&amp;quot; in the &amp;quot;xRotate&amp;quot; field for its tiptoe to reach the floor.&amp;lt;br /&amp;gt;&lt;br /&gt;
7. Control camera and see your figure from the front.&amp;lt;br /&amp;gt;&lt;br /&gt;
8. Select Left Collar and input &amp;quot;-20&amp;quot; in the &amp;quot;forward - back&amp;quot; field.&amp;lt;br /&amp;gt;&lt;br /&gt;
9. Select Left Shoulder and input &amp;quot;-60&amp;quot; in the &amp;quot;reach down - up&amp;quot; field.&amp;lt;br /&amp;gt;&lt;br /&gt;
10. Select Left Forearm and input &amp;quot;-5&amp;quot; in the &amp;quot;bend front - back&amp;quot; field.&amp;lt;br /&amp;gt;&lt;br /&gt;
11. Control camera and see your figure from the side again.&amp;lt;br /&amp;gt;&lt;br /&gt;
12. Select Left Hand and input &amp;quot;90&amp;quot; in the &amp;quot;bend front - back&amp;quot; field.&amp;lt;br /&amp;gt;&lt;br /&gt;
13. Now that you see the hand is floating from the floor a bit, select Abdomen and input &amp;quot;15&amp;quot; in the &amp;quot;bend back - forward&amp;quot; field.&amp;lt;br /&amp;gt;&lt;br /&gt;
14. Select Chest and input &amp;quot;-10&amp;quot; in the &amp;quot;bend back -forward&amp;quot; field.&amp;lt;br /&amp;gt;&lt;br /&gt;
15. And &amp;quot;-10&amp;quot; in the &amp;quot;bend up - down&amp;quot; field of both Neck and Head.&amp;lt;br /&amp;gt;&lt;br /&gt;
16. Use &amp;quot;Symmetry&amp;quot; and copy the left side body to the right side one.&amp;lt;br /&amp;gt;&lt;br /&gt;
17. &#039;&#039;&#039;Now turn on Inverse Kinematics on all of arms and legs.&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
18. Select Hip and go to the 15th frame.&amp;lt;br /&amp;gt;&lt;br /&gt;
19. Input &amp;quot;-0.7&amp;quot; in the &amp;quot;move down - up&amp;quot; field.&amp;lt;br /&amp;gt;&lt;br /&gt;
20. You see legs and arms are also bent.&amp;lt;br /&amp;gt;&lt;br /&gt;
21. Input &amp;quot;0.03&amp;quot; in the &amp;quot;move backwards - forwards&amp;quot; field to unbend legs.&amp;lt;br /&amp;gt;&lt;br /&gt;
22. Select Abdomen and input &amp;quot;-5&amp;quot; in the &amp;quot;move back - forward&amp;quot; field.&amp;lt;br /&amp;gt;&lt;br /&gt;
23. Input &amp;quot;-20&amp;quot; in the &amp;quot;back - forward&amp;quot; field of Chest, &amp;quot;bend up - down&amp;quot; field of Neck and Head.&amp;lt;br /&amp;gt;&lt;br /&gt;
24. Select and copy Hip, Abdomen, Chest, Neck and Head at the second frame to the last frame.&amp;lt;br /&amp;gt;&lt;br /&gt;
25. Go back to the second frame and &#039;&#039;break spline&#039;&#039; on those five keyframes.&amp;lt;br /&amp;gt;&lt;br /&gt;
26. Delete the unnecessary camera&#039;s keyframes.&amp;lt;br /&amp;gt;&lt;br /&gt;
27. Play your animation.&amp;lt;br /&amp;gt;&lt;br /&gt;
28. You may notice the leg movements are a little bit odd.&amp;lt;br /&amp;gt;&lt;br /&gt;
29. Select Hip and go to the 8th frame, and input &amp;quot;0.03&amp;quot; in the &amp;quot;move backwards - forwards&amp;quot; field to unbend legs.&amp;lt;br /&amp;gt;&lt;br /&gt;
30. Go to the 23th frame, and input &amp;quot;0.03&amp;quot; in the &amp;quot;move backwards - forwards&amp;quot; field to shift the median point to forward a tad.&amp;lt;br /&amp;gt;&lt;br /&gt;
31. Now you can see your figure do push-ups well on Poser. And you are sure to notice that you can make an animation with tweaking just a few parts of keyframes.&amp;lt;br /&amp;gt;&lt;br /&gt;
32. Save it as the pz3 and export it into BVH. Upload it in world with Priority at 4 and Loop on.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Note that you may find this animation looks bad for your Avatar inworld, such as hands are floating, legs are shivering. It is the exact scale issue. Try to change to several sizes&#039; avatar and make sure it.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Animations]]&lt;br /&gt;
* [[Create Animations with Poser]]&lt;br /&gt;
* [[Internal Animations]]&lt;/div&gt;</summary>
		<author><name>Phate Shepherd</name></author>
	</entry>
</feed>