<?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=Chibbchichi+Resident</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=Chibbchichi+Resident"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/Chibbchichi_Resident"/>
	<updated>2026-06-30T07:37:06Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User_talk:Chibbchichi_Resident&amp;diff=1185925</id>
		<title>User talk:Chibbchichi Resident</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User_talk:Chibbchichi_Resident&amp;diff=1185925"/>
		<updated>2013-12-30T13:25:01Z</updated>

		<summary type="html">&lt;p&gt;Chibbchichi Resident: /* llGetAgentInfo Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== llGetAgentInfo Example ==&lt;br /&gt;
&lt;br /&gt;
I saw your recent contribution to llGetAgentInfo, but I felt it had some problems that needed addressing, so I took the liberty of moving it to here.&lt;br /&gt;
Your attach event resets the script, forcing it back through state_entry.&lt;br /&gt;
Within state_entry you assign the owner&#039;s key to the string &#039;id&#039; (strictly should be a key variable). &lt;br /&gt;
But then you attempt to test if the object is being detached by checking if id is NULL_KEY - but it can&#039;t be. That test needs to be done inside the attach() event.&lt;br /&gt;
Stopping the timer from within state_entry is pointless, as no timer will be running first time nor on script reset.&lt;br /&gt;
Within timer(), the information you gain from llGetAgentInfo() is not only about whether the agent is typing. It could for example include mouselook indication, or if they are flying. So testing this data for a change in typing status is not totally valid. You must isolate the AGENT_TYPING bit straightaway. I won&#039;t try and fix the whole script, but perhaps this would work for the timer code. The rest needs a bit of a rethink. [[User:Omei Qunhua|Omei Qunhua]] 11:18, 26 December 2013 (PST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
timer()&lt;br /&gt;
{&lt;br /&gt;
    integer TypingNow = llGetAgentInfo( llGetOwner() ) &amp;amp; AGENT_TYPING;&lt;br /&gt;
    if (TypingNow != gLastAnimation)&lt;br /&gt;
    {&lt;br /&gt;
         if (TypingNow)&lt;br /&gt;
            doStuff();&lt;br /&gt;
         else&lt;br /&gt;
            stopStuff();&lt;br /&gt;
        gLastAnimation = TypingNow;&lt;br /&gt;
    }  &lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/lsl&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
[V3]&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// A simple typing override example.&lt;br /&gt;
// Modified the example-LSL of llGetAnimation to make it work with llGetAgentInfo.&lt;br /&gt;
// Also included an easy way to hide and show the whole object depending on current typing state.&lt;br /&gt;
// For example: Show a keyboard under avatars hands when avatar types.&lt;br /&gt;
&lt;br /&gt;
key gOwner; // the wearer&#039;s key&lt;br /&gt;
integer gWasTyping; // last state of typing seen&lt;br /&gt;
 &lt;br /&gt;
// User functions&lt;br /&gt;
Initialize(key id){&lt;br /&gt;
    if (id == NULL_KEY) { // detaching&lt;br /&gt;
        llSetTimerEvent(0.0); // stop the timer&lt;br /&gt;
    }&lt;br /&gt;
    else { // attached, or reset while worn&lt;br /&gt;
        llRequestPermissions(id, PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
        gOwner = id;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Event handlers&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        // in case the script was reset while already attached&lt;br /&gt;
        if (llGetAttached() != 0) {&lt;br /&gt;
            Initialize(llGetOwner());&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        Initialize(id);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    run_time_permissions(integer perm) {&lt;br /&gt;
        if (perm &amp;amp; PERMISSION_TRIGGER_ANIMATION) {&lt;br /&gt;
            llSetTimerEvent(0.25); // start polling&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    timer() {&lt;br /&gt;
        integer typingNow = llGetAgentInfo(gOwner);&lt;br /&gt;
 &lt;br /&gt;
        if (gWasTyping != (typingNow &amp;amp; AGENT_TYPING)) { // any change?&lt;br /&gt;
            if(typingNow &amp;amp; AGENT_TYPING){ // set whole object visible when typing&lt;br /&gt;
                llSetLinkAlpha(LINK_SET, 1.0, ALL_SIDES);&lt;br /&gt;
                llStartAnimation(&amp;quot;run&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else{ // set whole object invisible if not typing&lt;br /&gt;
                llSetLinkAlpha(LINK_SET, 0.0, ALL_SIDES);&lt;br /&gt;
                llStopAnimation(&amp;quot;run&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            gWasTyping = typingNow; // store away for  net time&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:I agree with Omei here. The purpose of the examples in the wiki pages is to be educative about what the function does. This script is, at best, an example of how to put a bunch of functions and events together in order to make a typing overrider. Not really educative on what llGetAgentInfo does by itself. The individual functions are not the correct place for putting a script that requires mixing so many functions and events. The example that is already present there is enough, and serves as a good illustration of how an educational example looks like. --[[User:Pedro Oval|Pedro Oval]] 15:07, 29 December 2013 (PST)&lt;br /&gt;
&lt;br /&gt;
:I&#039;ve already told Omei, wrote it as comment in the script and i will say it here again: This script is based on the example shown in [[LlGetAnimation]]. If my script is not an good example then the [[LlGetAnimation]] example is not good enough as well. I won&#039;t try anymore to get it as an example in llGetAgentInfo. The search box is gladly able to find it when someone searches for &amp;quot;typing override&amp;quot; so i hope it will make someone happy in the future. --[[User:Chibbchichi Resident|Chibbchichi Resident]] 05:04, 30 December 2013 (PST)&lt;/div&gt;</summary>
		<author><name>Chibbchichi Resident</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User_talk:Chibbchichi_Resident&amp;diff=1185924</id>
		<title>User talk:Chibbchichi Resident</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User_talk:Chibbchichi_Resident&amp;diff=1185924"/>
		<updated>2013-12-30T13:24:04Z</updated>

		<summary type="html">&lt;p&gt;Chibbchichi Resident: /* llGetAgentInfo Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== llGetAgentInfo Example ==&lt;br /&gt;
&lt;br /&gt;
I saw your recent contribution to llGetAgentInfo, but I felt it had some problems that needed addressing, so I took the liberty of moving it to here.&lt;br /&gt;
Your attach event resets the script, forcing it back through state_entry.&lt;br /&gt;
Within state_entry you assign the owner&#039;s key to the string &#039;id&#039; (strictly should be a key variable). &lt;br /&gt;
But then you attempt to test if the object is being detached by checking if id is NULL_KEY - but it can&#039;t be. That test needs to be done inside the attach() event.&lt;br /&gt;
Stopping the timer from within state_entry is pointless, as no timer will be running first time nor on script reset.&lt;br /&gt;
Within timer(), the information you gain from llGetAgentInfo() is not only about whether the agent is typing. It could for example include mouselook indication, or if they are flying. So testing this data for a change in typing status is not totally valid. You must isolate the AGENT_TYPING bit straightaway. I won&#039;t try and fix the whole script, but perhaps this would work for the timer code. The rest needs a bit of a rethink. [[User:Omei Qunhua|Omei Qunhua]] 11:18, 26 December 2013 (PST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
timer()&lt;br /&gt;
{&lt;br /&gt;
    integer TypingNow = llGetAgentInfo( llGetOwner() ) &amp;amp; AGENT_TYPING;&lt;br /&gt;
    if (TypingNow != gLastAnimation)&lt;br /&gt;
    {&lt;br /&gt;
         if (TypingNow)&lt;br /&gt;
            doStuff();&lt;br /&gt;
         else&lt;br /&gt;
            stopStuff();&lt;br /&gt;
        gLastAnimation = TypingNow;&lt;br /&gt;
    }  &lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/lsl&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
[V3]&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// A simple typing override example.&lt;br /&gt;
// Modified the example-LSL of llGetAnimation to make it work with llGetAgentInfo.&lt;br /&gt;
// Also included an easy way to hide and show the whole object depending on current typing state.&lt;br /&gt;
// For example: Show a keyboard under avatars hands when avatar types.&lt;br /&gt;
&lt;br /&gt;
key gOwner; // the wearer&#039;s key&lt;br /&gt;
integer gWasTyping; // last state of typing seen&lt;br /&gt;
 &lt;br /&gt;
// User functions&lt;br /&gt;
Initialize(key id){&lt;br /&gt;
    // in case the script was reset while already attached&lt;br /&gt;
    if (llGetAttached() != 0) {&lt;br /&gt;
        if (id == NULL_KEY) { // detaching&lt;br /&gt;
            llSetTimerEvent(0.0); // stop the timer&lt;br /&gt;
        }&lt;br /&gt;
        else { // attached, or reset while worn&lt;br /&gt;
            llRequestPermissions(id, PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
            gOwner = id;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Event handlers&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        Initialize(llGetOwner());&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        Initialize(id);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    run_time_permissions(integer perm) {&lt;br /&gt;
        if (perm &amp;amp; PERMISSION_TRIGGER_ANIMATION) {&lt;br /&gt;
            llSetTimerEvent(0.25); // start polling&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    timer() {&lt;br /&gt;
        integer typingNow = llGetAgentInfo(gOwner);&lt;br /&gt;
 &lt;br /&gt;
        if (gWasTyping != (typingNow &amp;amp; AGENT_TYPING)) { // any change?&lt;br /&gt;
            if(typingNow &amp;amp; AGENT_TYPING){ // set whole object visible when typing&lt;br /&gt;
                llSetLinkAlpha(LINK_SET, 1.0, ALL_SIDES);&lt;br /&gt;
                llStartAnimation(&amp;quot;run&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else{ // set whole object invisible if not typing&lt;br /&gt;
                llSetLinkAlpha(LINK_SET, 0.0, ALL_SIDES);&lt;br /&gt;
                llStopAnimation(&amp;quot;run&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            gWasTyping = typingNow; // store away for  net time&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:I agree with Omei here. The purpose of the examples in the wiki pages is to be educative about what the function does. This script is, at best, an example of how to put a bunch of functions and events together in order to make a typing overrider. Not really educative on what llGetAgentInfo does by itself. The individual functions are not the correct place for putting a script that requires mixing so many functions and events. The example that is already present there is enough, and serves as a good illustration of how an educational example looks like. --[[User:Pedro Oval|Pedro Oval]] 15:07, 29 December 2013 (PST)&lt;br /&gt;
&lt;br /&gt;
:I&#039;ve already told Omei, wrote it as comment in the script and i will say it here again: This script is based on the example shown in [[LlGetAnimation]]. If my script is not an good example then the [[LlGetAnimation]] example is not good enough as well. I won&#039;t try anymore to get it as an example in llGetAgentInfo. The search box is gladly able to find it when someone searches for &amp;quot;typing override&amp;quot; so i hope it will make someone happy in the future. --[[User:Chibbchichi Resident|Chibbchichi Resident]] 05:04, 30 December 2013 (PST)&lt;/div&gt;</summary>
		<author><name>Chibbchichi Resident</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User_talk:Chibbchichi_Resident&amp;diff=1185923</id>
		<title>User talk:Chibbchichi Resident</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User_talk:Chibbchichi_Resident&amp;diff=1185923"/>
		<updated>2013-12-30T13:04:17Z</updated>

		<summary type="html">&lt;p&gt;Chibbchichi Resident: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== llGetAgentInfo Example ==&lt;br /&gt;
&lt;br /&gt;
I saw your recent contribution to llGetAgentInfo, but I felt it had some problems that needed addressing, so I took the liberty of moving it to here.&lt;br /&gt;
Your attach event resets the script, forcing it back through state_entry.&lt;br /&gt;
Within state_entry you assign the owner&#039;s key to the string &#039;id&#039; (strictly should be a key variable). &lt;br /&gt;
But then you attempt to test if the object is being detached by checking if id is NULL_KEY - but it can&#039;t be. That test needs to be done inside the attach() event.&lt;br /&gt;
Stopping the timer from within state_entry is pointless, as no timer will be running first time nor on script reset.&lt;br /&gt;
Within timer(), the information you gain from llGetAgentInfo() is not only about whether the agent is typing. It could for example include mouselook indication, or if they are flying. So testing this data for a change in typing status is not totally valid. You must isolate the AGENT_TYPING bit straightaway. I won&#039;t try and fix the whole script, but perhaps this would work for the timer code. The rest needs a bit of a rethink. [[User:Omei Qunhua|Omei Qunhua]] 11:18, 26 December 2013 (PST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
timer()&lt;br /&gt;
{&lt;br /&gt;
    integer TypingNow = llGetAgentInfo( llGetOwner() ) &amp;amp; AGENT_TYPING;&lt;br /&gt;
    if (TypingNow != gLastAnimation)&lt;br /&gt;
    {&lt;br /&gt;
         if (TypingNow)&lt;br /&gt;
            doStuff();&lt;br /&gt;
         else&lt;br /&gt;
            stopStuff();&lt;br /&gt;
        gLastAnimation = TypingNow;&lt;br /&gt;
    }  &lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/lsl&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
[V3]&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// A simple typing override example.&lt;br /&gt;
// Modified the example-LSL of llGetAnimation to make it work with llGetAgentInfo.&lt;br /&gt;
// Also included an easy way to hide and show the whole object depending on current typing state.&lt;br /&gt;
// For example: Show a keyboard under avatars hands when avatar types.&lt;br /&gt;
&lt;br /&gt;
key gOwner; // the wearer&#039;s key&lt;br /&gt;
integer gWasTyping; // last state of typing seen&lt;br /&gt;
 &lt;br /&gt;
// User functions&lt;br /&gt;
Initialize(key id){&lt;br /&gt;
    // in case the script was reset while already attached&lt;br /&gt;
    if (llGetAttached() != 0) {&lt;br /&gt;
        if (id == NULL_KEY) { // detaching&lt;br /&gt;
            llSetTimerEvent(0.0); // stop the timer&lt;br /&gt;
        }&lt;br /&gt;
        else { // attached, or reset while worn&lt;br /&gt;
            llRequestPermissions(id, PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
            gOwner = id;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Event handlers&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        Initialize(llGetOwner());&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        Initialize(id);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    run_time_permissions(integer perm) {&lt;br /&gt;
        if (perm &amp;amp; PERMISSION_TRIGGER_ANIMATION) {&lt;br /&gt;
            llSetTimerEvent(0.25); // start polling&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    timer() {&lt;br /&gt;
        integer typingNow = llGetAgentInfo(llGetOwner());&lt;br /&gt;
 &lt;br /&gt;
        if (gWasTyping != (typingNow &amp;amp; AGENT_TYPING)) { // any change?&lt;br /&gt;
            if(typingNow &amp;amp; AGENT_TYPING){ // set whole object visible when typing&lt;br /&gt;
                llSetLinkAlpha(LINK_SET, 1.0, ALL_SIDES);&lt;br /&gt;
            }&lt;br /&gt;
            else{ // set whole object invisible if not typing&lt;br /&gt;
                llSetLinkAlpha(LINK_SET, 0.0, ALL_SIDES);&lt;br /&gt;
            }&lt;br /&gt;
            gWasTyping = typingNow; // store away for  net time&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:I agree with Omei here. The purpose of the examples in the wiki pages is to be educative about what the function does. This script is, at best, an example of how to put a bunch of functions and events together in order to make a typing overrider. Not really educative on what llGetAgentInfo does by itself. The individual functions are not the correct place for putting a script that requires mixing so many functions and events. The example that is already present there is enough, and serves as a good illustration of how an educational example looks like. --[[User:Pedro Oval|Pedro Oval]] 15:07, 29 December 2013 (PST)&lt;br /&gt;
&lt;br /&gt;
:I&#039;ve already told Omei, wrote it as comment in the script and i will say it here again: This script is based on the example shown in [[LlGetAnimation]]. If my script is not an good example then the [[LlGetAnimation]] example is not good enough as well. I won&#039;t try anymore to get it as an example in llGetAgentInfo. The search box is gladly able to find it when someone searches for &amp;quot;typing override&amp;quot; so i hope it will make someone happy in the future. --[[User:Chibbchichi Resident|Chibbchichi Resident]] 05:04, 30 December 2013 (PST)&lt;/div&gt;</summary>
		<author><name>Chibbchichi Resident</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User_talk:Chibbchichi_Resident&amp;diff=1185896</id>
		<title>User talk:Chibbchichi Resident</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User_talk:Chibbchichi_Resident&amp;diff=1185896"/>
		<updated>2013-12-29T17:53:28Z</updated>

		<summary type="html">&lt;p&gt;Chibbchichi Resident: /* llGetAgentInfo Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== llGetAgentInfo Example ==&lt;br /&gt;
&lt;br /&gt;
I saw your recent contribution to llGetAgentInfo, but I felt it had some problems that needed addressing, so I took the liberty of moving it to here.&lt;br /&gt;
Your attach event resets the script, forcing it back through state_entry.&lt;br /&gt;
Within state_entry you assign the owner&#039;s key to the string &#039;id&#039; (strictly should be a key variable). &lt;br /&gt;
But then you attempt to test if the object is being detached by checking if id is NULL_KEY - but it can&#039;t be. That test needs to be done inside the attach() event.&lt;br /&gt;
Stopping the timer from within state_entry is pointless, as no timer will be running first time nor on script reset.&lt;br /&gt;
Within timer(), the information you gain from llGetAgentInfo() is not only about whether the agent is typing. It could for example include mouselook indication, or if they are flying. So testing this data for a change in typing status is not totally valid. You must isolate the AGENT_TYPING bit straightaway. I won&#039;t try and fix the whole script, but perhaps this would work for the timer code. The rest needs a bit of a rethink. [[User:Omei Qunhua|Omei Qunhua]] 11:18, 26 December 2013 (PST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
timer()&lt;br /&gt;
{&lt;br /&gt;
    integer TypingNow = llGetAgentInfo( llGetOwner() ) &amp;amp; AGENT_TYPING;&lt;br /&gt;
    if (TypingNow != gLastAnimation)&lt;br /&gt;
    {&lt;br /&gt;
         if (TypingNow)&lt;br /&gt;
            doStuff();&lt;br /&gt;
         else&lt;br /&gt;
            stopStuff();&lt;br /&gt;
        gLastAnimation = TypingNow;&lt;br /&gt;
    }  &lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/lsl&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
[V3]&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// A simple typing override example.&lt;br /&gt;
// Modified the example-LSL of llGetAnimation to make it work with llGetAgentInfo.&lt;br /&gt;
// Also included an easy way to hide and show the whole object depending on current typing state.&lt;br /&gt;
// For example: Show a keyboard under avatars hands when avatar types.&lt;br /&gt;
&lt;br /&gt;
key gOwner; // the wearer&#039;s key&lt;br /&gt;
integer gWasTyping; // last state of typing seen&lt;br /&gt;
 &lt;br /&gt;
// User functions&lt;br /&gt;
Initialize(key id){&lt;br /&gt;
    // in case the script was reset while already attached&lt;br /&gt;
    if (llGetAttached() != 0) {&lt;br /&gt;
        if (id == NULL_KEY) { // detaching&lt;br /&gt;
            llSetTimerEvent(0.0); // stop the timer&lt;br /&gt;
        }&lt;br /&gt;
        else { // attached, or reset while worn&lt;br /&gt;
            llRequestPermissions(id, PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
            gOwner = id;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Event handlers&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        Initialize(llGetOwner());&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        Initialize(id);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    run_time_permissions(integer perm) {&lt;br /&gt;
        if (perm &amp;amp; PERMISSION_TRIGGER_ANIMATION) {&lt;br /&gt;
            llSetTimerEvent(0.25); // start polling&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    timer() {&lt;br /&gt;
        integer typingNow = llGetAgentInfo(llGetOwner());&lt;br /&gt;
 &lt;br /&gt;
        if (gWasTyping != (typingNow &amp;amp; AGENT_TYPING)) { // any change?&lt;br /&gt;
            if(typingNow &amp;amp; AGENT_TYPING){ // set whole object visible when typing&lt;br /&gt;
                llSetLinkAlpha(LINK_SET, 1.0, ALL_SIDES);&lt;br /&gt;
            }&lt;br /&gt;
            else{ // set whole object invisible if not typing&lt;br /&gt;
                llSetLinkAlpha(LINK_SET, 0.0, ALL_SIDES);&lt;br /&gt;
            }&lt;br /&gt;
            gWasTyping = typingNow; // store away for  next time&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chibbchichi Resident</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User_talk:Chibbchichi_Resident&amp;diff=1185895</id>
		<title>User talk:Chibbchichi Resident</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User_talk:Chibbchichi_Resident&amp;diff=1185895"/>
		<updated>2013-12-29T17:44:24Z</updated>

		<summary type="html">&lt;p&gt;Chibbchichi Resident: /* llGetAgentInfo Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== llGetAgentInfo Example ==&lt;br /&gt;
&lt;br /&gt;
I saw your recent contribution to llGetAgentInfo, but I felt it had some problems that needed addressing, so I took the liberty of moving it to here.&lt;br /&gt;
Your attach event resets the script, forcing it back through state_entry.&lt;br /&gt;
Within state_entry you assign the owner&#039;s key to the string &#039;id&#039; (strictly should be a key variable). &lt;br /&gt;
But then you attempt to test if the object is being detached by checking if id is NULL_KEY - but it can&#039;t be. That test needs to be done inside the attach() event.&lt;br /&gt;
Stopping the timer from within state_entry is pointless, as no timer will be running first time nor on script reset.&lt;br /&gt;
Within timer(), the information you gain from llGetAgentInfo() is not only about whether the agent is typing. It could for example include mouselook indication, or if they are flying. So testing this data for a change in typing status is not totally valid. You must isolate the AGENT_TYPING bit straightaway. I won&#039;t try and fix the whole script, but perhaps this would work for the timer code. The rest needs a bit of a rethink. [[User:Omei Qunhua|Omei Qunhua]] 11:18, 26 December 2013 (PST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
timer()&lt;br /&gt;
{&lt;br /&gt;
    integer TypingNow = llGetAgentInfo( llGetOwner() ) &amp;amp; AGENT_TYPING;&lt;br /&gt;
    if (TypingNow != gLastAnimation)&lt;br /&gt;
    {&lt;br /&gt;
         if (TypingNow)&lt;br /&gt;
            doStuff();&lt;br /&gt;
         else&lt;br /&gt;
            stopStuff();&lt;br /&gt;
        gLastAnimation = TypingNow;&lt;br /&gt;
    }  &lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/lsl&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
[V3]&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// A simple typing override example.&lt;br /&gt;
// Modified the example-LSL of llGetAnimation to make it work with llGetAgentInfo.&lt;br /&gt;
// Also included an easy way to hide and show the whole object depending on current typing state.&lt;br /&gt;
// For example: Show a keyboard under avatars hands when avatar types.&lt;br /&gt;
&lt;br /&gt;
key gOwner; // the wearer&#039;s key&lt;br /&gt;
integer gWasTyping; // last state of typing seen&lt;br /&gt;
 &lt;br /&gt;
// User functions&lt;br /&gt;
Initialize(key id){&lt;br /&gt;
    // in case the script was reset while already attached&lt;br /&gt;
    if (llGetAttached() != 0) {&lt;br /&gt;
        if (id == NULL_KEY) { // detaching&lt;br /&gt;
            llSetTimerEvent(0.0); // stop the timer&lt;br /&gt;
        }&lt;br /&gt;
        else { // attached, or reset while worn&lt;br /&gt;
            llRequestPermissions(id, PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
            gOwner = id;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Event handlers&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        Initialize(llGetOwner());&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        Initialize(id);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    run_time_permissions(integer perm) {&lt;br /&gt;
        if (perm &amp;amp; PERMISSION_TRIGGER_ANIMATION) {&lt;br /&gt;
            llSetTimerEvent(0.25); // start polling&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    timer() {&lt;br /&gt;
        integer typingNow = llGetAgentInfo(llGetOwner()) &amp;amp; AGENT_TYPING;&lt;br /&gt;
 &lt;br /&gt;
        if (gWasTyping != typingNow) { // any change?&lt;br /&gt;
            if(typingNow) {&lt;br /&gt;
                llSetLinkAlpha(LINK_SET, 1.0, ALL_SIDES); // set whole object visible when typing&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
                llSetLinkAlpha(LINK_SET, 0.0, ALL_SIDES); // set whole object invisible if not typing&lt;br /&gt;
            }&lt;br /&gt;
            gWasTyping = typingNow; // store away for  next time&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chibbchichi Resident</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User_talk:Chibbchichi_Resident&amp;diff=1185894</id>
		<title>User talk:Chibbchichi Resident</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User_talk:Chibbchichi_Resident&amp;diff=1185894"/>
		<updated>2013-12-29T17:44:13Z</updated>

		<summary type="html">&lt;p&gt;Chibbchichi Resident: /* llGetAgentInfo Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== llGetAgentInfo Example ==&lt;br /&gt;
&lt;br /&gt;
I saw your recent contribution to llGetAgentInfo, but I felt it had some problems that needed addressing, so I took the liberty of moving it to here.&lt;br /&gt;
Your attach event resets the script, forcing it back through state_entry.&lt;br /&gt;
Within state_entry you assign the owner&#039;s key to the string &#039;id&#039; (strictly should be a key variable). &lt;br /&gt;
But then you attempt to test if the object is being detached by checking if id is NULL_KEY - but it can&#039;t be. That test needs to be done inside the attach() event.&lt;br /&gt;
Stopping the timer from within state_entry is pointless, as no timer will be running first time nor on script reset.&lt;br /&gt;
Within timer(), the information you gain from llGetAgentInfo() is not only about whether the agent is typing. It could for example include mouselook indication, or if they are flying. So testing this data for a change in typing status is not totally valid. You must isolate the AGENT_TYPING bit straightaway. I won&#039;t try and fix the whole script, but perhaps this would work for the timer code. The rest needs a bit of a rethink. [[User:Omei Qunhua|Omei Qunhua]] 11:18, 26 December 2013 (PST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
timer()&lt;br /&gt;
{&lt;br /&gt;
    integer TypingNow = llGetAgentInfo( llGetOwner() ) &amp;amp; AGENT_TYPING;&lt;br /&gt;
    if (TypingNow != gLastAnimation)&lt;br /&gt;
    {&lt;br /&gt;
         if (TypingNow)&lt;br /&gt;
            doStuff();&lt;br /&gt;
         else&lt;br /&gt;
            stopStuff();&lt;br /&gt;
        gLastAnimation = TypingNow;&lt;br /&gt;
    }  &lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/lsl&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
[V3]&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// A simple typing override example.&lt;br /&gt;
// Modified the example-LSL of llGetAnimation to make it work with llGetAgentInfo.&lt;br /&gt;
// Also included an easy way to hide and show the whole object depending on current typing state.&lt;br /&gt;
// For example: Show a keyboard under avatars hands when avatar types.&lt;br /&gt;
&lt;br /&gt;
key gOwner; // the wearer&#039;s key&lt;br /&gt;
integer gWasTyping; // last state of typing seen&lt;br /&gt;
 &lt;br /&gt;
// User functions&lt;br /&gt;
Initialize(key id){&lt;br /&gt;
    // in case the script was reset while already attached&lt;br /&gt;
    if (llGetAttached() != 0) {&lt;br /&gt;
        if (id == NULL_KEY) { // detaching&lt;br /&gt;
            llSetTimerEvent(0.0); // stop the timer&lt;br /&gt;
        }&lt;br /&gt;
        else { // attached, or reset while worn&lt;br /&gt;
            llRequestPermissions(id, PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
            gOwner = id;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Event handlers&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        Initialize(llGetOwner());&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        Initialize(id);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    run_time_permissions(integer perm) {&lt;br /&gt;
        if (perm &amp;amp; PERMISSION_TRIGGER_ANIMATION) {&lt;br /&gt;
            llSetTimerEvent(0.25); // start polling&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    timer() {&lt;br /&gt;
        integer typingNow = llGetAgentInfo(llGetOwner()) &amp;amp; AGENT_TYPING;&lt;br /&gt;
 &lt;br /&gt;
        if (gWasTyping != typingNow) { // any change?&lt;br /&gt;
            if(typingNow) {&lt;br /&gt;
                llSetLinkAlpha(LINK_SET, 1.0, ALL_SIDES); // set whole object visible when typing&lt;br /&gt;
                llMessageLinked( LINK_SET,1,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
                llSetLinkAlpha(LINK_SET, 0.0, ALL_SIDES); // set whole object invisible if not typing&lt;br /&gt;
                llMessageLinked( LINK_SET,0,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            gWasTyping = typingNow; // store away for  next time&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chibbchichi Resident</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User_talk:Chibbchichi_Resident&amp;diff=1185893</id>
		<title>User talk:Chibbchichi Resident</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User_talk:Chibbchichi_Resident&amp;diff=1185893"/>
		<updated>2013-12-29T17:43:19Z</updated>

		<summary type="html">&lt;p&gt;Chibbchichi Resident: /* llGetAgentInfo Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== llGetAgentInfo Example ==&lt;br /&gt;
&lt;br /&gt;
I saw your recent contribution to llGetAgentInfo, but I felt it had some problems that needed addressing, so I took the liberty of moving it to here.&lt;br /&gt;
Your attach event resets the script, forcing it back through state_entry.&lt;br /&gt;
Within state_entry you assign the owner&#039;s key to the string &#039;id&#039; (strictly should be a key variable). &lt;br /&gt;
But then you attempt to test if the object is being detached by checking if id is NULL_KEY - but it can&#039;t be. That test needs to be done inside the attach() event.&lt;br /&gt;
Stopping the timer from within state_entry is pointless, as no timer will be running first time nor on script reset.&lt;br /&gt;
Within timer(), the information you gain from llGetAgentInfo() is not only about whether the agent is typing. It could for example include mouselook indication, or if they are flying. So testing this data for a change in typing status is not totally valid. You must isolate the AGENT_TYPING bit straightaway. I won&#039;t try and fix the whole script, but perhaps this would work for the timer code. The rest needs a bit of a rethink. [[User:Omei Qunhua|Omei Qunhua]] 11:18, 26 December 2013 (PST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
timer()&lt;br /&gt;
{&lt;br /&gt;
    integer TypingNow = llGetAgentInfo( llGetOwner() ) &amp;amp; AGENT_TYPING;&lt;br /&gt;
    if (TypingNow != gLastAnimation)&lt;br /&gt;
    {&lt;br /&gt;
         if (TypingNow)&lt;br /&gt;
            doStuff();&lt;br /&gt;
         else&lt;br /&gt;
            stopStuff();&lt;br /&gt;
        gLastAnimation = TypingNow;&lt;br /&gt;
    }  &lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/lsl&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// A simple typing override example.&lt;br /&gt;
// Modified the example-LSL of llGetAnimation to make it work with llGetAgentInfo.&lt;br /&gt;
// Also included an easy way to hide and show the whole object depending on current typing state.&lt;br /&gt;
// For example: Show a keyboard under avatars hands when avatar types.&lt;br /&gt;
&lt;br /&gt;
key gOwner; // the wearer&#039;s key&lt;br /&gt;
integer gWasTyping; // last state of typing seen&lt;br /&gt;
 &lt;br /&gt;
// User functions&lt;br /&gt;
Initialize(key id){&lt;br /&gt;
    // in case the script was reset while already attached&lt;br /&gt;
    if (llGetAttached() != 0) {&lt;br /&gt;
        if (id == NULL_KEY) { // detaching&lt;br /&gt;
            llSetTimerEvent(0.0); // stop the timer&lt;br /&gt;
        }&lt;br /&gt;
        else { // attached, or reset while worn&lt;br /&gt;
            llRequestPermissions(id, PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
            gOwner = id;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Event handlers&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        Initialize(llGetOwner());&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        Initialize(id);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    run_time_permissions(integer perm) {&lt;br /&gt;
        if (perm &amp;amp; PERMISSION_TRIGGER_ANIMATION) {&lt;br /&gt;
            llSetTimerEvent(0.25); // start polling&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    timer() {&lt;br /&gt;
        integer typingNow = llGetAgentInfo(llGetOwner()) &amp;amp; AGENT_TYPING;&lt;br /&gt;
 &lt;br /&gt;
        if (gWasTyping != typingNow) { // any change?&lt;br /&gt;
            if(typingNow){ // set whole object visible when typing&lt;br /&gt;
                llSetLinkAlpha(LINK_SET, 1.0, ALL_SIDES);&lt;br /&gt;
            }&lt;br /&gt;
            else{ // set whole object invisible if not typing&lt;br /&gt;
                llSetLinkAlpha(LINK_SET, 0.0, ALL_SIDES);&lt;br /&gt;
            }&lt;br /&gt;
            gWasTyping = typingNow; // store away for  next time&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chibbchichi Resident</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User_talk:Chibbchichi_Resident&amp;diff=1185892</id>
		<title>User talk:Chibbchichi Resident</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User_talk:Chibbchichi_Resident&amp;diff=1185892"/>
		<updated>2013-12-29T17:43:04Z</updated>

		<summary type="html">&lt;p&gt;Chibbchichi Resident: /* llGetAgentInfo Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== llGetAgentInfo Example ==&lt;br /&gt;
&lt;br /&gt;
I saw your recent contribution to llGetAgentInfo, but I felt it had some problems that needed addressing, so I took the liberty of moving it to here.&lt;br /&gt;
Your attach event resets the script, forcing it back through state_entry.&lt;br /&gt;
Within state_entry you assign the owner&#039;s key to the string &#039;id&#039; (strictly should be a key variable). &lt;br /&gt;
But then you attempt to test if the object is being detached by checking if id is NULL_KEY - but it can&#039;t be. That test needs to be done inside the attach() event.&lt;br /&gt;
Stopping the timer from within state_entry is pointless, as no timer will be running first time nor on script reset.&lt;br /&gt;
Within timer(), the information you gain from llGetAgentInfo() is not only about whether the agent is typing. It could for example include mouselook indication, or if they are flying. So testing this data for a change in typing status is not totally valid. You must isolate the AGENT_TYPING bit straightaway. I won&#039;t try and fix the whole script, but perhaps this would work for the timer code. The rest needs a bit of a rethink. [[User:Omei Qunhua|Omei Qunhua]] 11:18, 26 December 2013 (PST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
timer()&lt;br /&gt;
{&lt;br /&gt;
    integer TypingNow = llGetAgentInfo( llGetOwner() ) &amp;amp; AGENT_TYPING;&lt;br /&gt;
    if (TypingNow != gLastAnimation)&lt;br /&gt;
    {&lt;br /&gt;
         if (TypingNow)&lt;br /&gt;
            doStuff();&lt;br /&gt;
         else&lt;br /&gt;
            stopStuff();&lt;br /&gt;
        gLastAnimation = TypingNow;&lt;br /&gt;
    }  &lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/lsl&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// A simple typing override example.&lt;br /&gt;
// Modified the example-LSL of llGetAnimation to make it work with llGetAgentInfo.&lt;br /&gt;
// Also included an easy way to hide and show the whole object depending on current typing state.&lt;br /&gt;
// For example: Show a keyboard under avatars hands when avatar types.&lt;br /&gt;
&lt;br /&gt;
key gOwner; // the wearer&#039;s key&lt;br /&gt;
integer gWasTyping; // last state of typing seen&lt;br /&gt;
 &lt;br /&gt;
// User functions&lt;br /&gt;
Initialize(key id){&lt;br /&gt;
    // in case the script was reset while already attached&lt;br /&gt;
    if (llGetAttached() != 0) {&lt;br /&gt;
        if (id == NULL_KEY) { // detaching&lt;br /&gt;
            llSetTimerEvent(0.0); // stop the timer&lt;br /&gt;
        }&lt;br /&gt;
        else { // attached, or reset while worn&lt;br /&gt;
            llRequestPermissions(id, PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
            gOwner = id;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Event handlers&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        Initialize(llGetOwner());&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        Initialize(id);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    run_time_permissions(integer perm) {&lt;br /&gt;
        if (perm &amp;amp; PERMISSION_TRIGGER_ANIMATION) {&lt;br /&gt;
            llSetTimerEvent(0.25); // start polling&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    timer() {&lt;br /&gt;
        integer typingNow = llGetAgentInfo(llGetOwner()) &amp;amp; AGENT_TYPING;&lt;br /&gt;
 &lt;br /&gt;
        if (gWasTyping != typingNow) { // any change?&lt;br /&gt;
            if(typingNow){ // set whole object visible when typing&lt;br /&gt;
                llSetLinkAlpha(LINK_SET, 1.0, ALL_SIDES);&lt;br /&gt;
                llMessageLinked( LINK_SET,1,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else{ // set whole object invisible if not typing&lt;br /&gt;
                llSetLinkAlpha(LINK_SET, 0.0, ALL_SIDES);&lt;br /&gt;
                llMessageLinked( LINK_SET,0,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            gWasTyping = typingNow; // store away for  next time&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chibbchichi Resident</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User_talk:Chibbchichi_Resident&amp;diff=1185891</id>
		<title>User talk:Chibbchichi Resident</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User_talk:Chibbchichi_Resident&amp;diff=1185891"/>
		<updated>2013-12-29T17:42:54Z</updated>

		<summary type="html">&lt;p&gt;Chibbchichi Resident: /* llGetAgentInfo Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== llGetAgentInfo Example ==&lt;br /&gt;
&lt;br /&gt;
I saw your recent contribution to llGetAgentInfo, but I felt it had some problems that needed addressing, so I took the liberty of moving it to here.&lt;br /&gt;
Your attach event resets the script, forcing it back through state_entry.&lt;br /&gt;
Within state_entry you assign the owner&#039;s key to the string &#039;id&#039; (strictly should be a key variable). &lt;br /&gt;
But then you attempt to test if the object is being detached by checking if id is NULL_KEY - but it can&#039;t be. That test needs to be done inside the attach() event.&lt;br /&gt;
Stopping the timer from within state_entry is pointless, as no timer will be running first time nor on script reset.&lt;br /&gt;
Within timer(), the information you gain from llGetAgentInfo() is not only about whether the agent is typing. It could for example include mouselook indication, or if they are flying. So testing this data for a change in typing status is not totally valid. You must isolate the AGENT_TYPING bit straightaway. I won&#039;t try and fix the whole script, but perhaps this would work for the timer code. The rest needs a bit of a rethink. [[User:Omei Qunhua|Omei Qunhua]] 11:18, 26 December 2013 (PST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
timer()&lt;br /&gt;
{&lt;br /&gt;
    integer TypingNow = llGetAgentInfo( llGetOwner() ) &amp;amp; AGENT_TYPING;&lt;br /&gt;
    if (TypingNow != gLastAnimation)&lt;br /&gt;
    {&lt;br /&gt;
         if (TypingNow)&lt;br /&gt;
            doStuff();&lt;br /&gt;
         else&lt;br /&gt;
            stopStuff();&lt;br /&gt;
        gLastAnimation = TypingNow;&lt;br /&gt;
    }  &lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/lsl&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// A simple typing override example.&lt;br /&gt;
// Modified the example-LSL of llGetAnimation to make it work with llGetAgentInfo.&lt;br /&gt;
// Also included an easy way to hide and show the whole object depending on current typing state.&lt;br /&gt;
// For example: Show a keyboard under avatars hands when avatar types.&lt;br /&gt;
&lt;br /&gt;
key gOwner; // the wearer&#039;s key&lt;br /&gt;
integer gWasTyping; // last state of typing seen&lt;br /&gt;
 &lt;br /&gt;
// User functions&lt;br /&gt;
Initialize(key id){&lt;br /&gt;
    // in case the script was reset while already attached&lt;br /&gt;
    if (llGetAttached() != 0) {&lt;br /&gt;
        if (id == NULL_KEY) { // detaching&lt;br /&gt;
            llSetTimerEvent(0.0); // stop the timer&lt;br /&gt;
        }&lt;br /&gt;
        else { // attached, or reset while worn&lt;br /&gt;
            llRequestPermissions(id, PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
            gOwner = id;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Event handlers&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        Initialize(llGetOwner());&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        Initialize(id);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    run_time_permissions(integer perm) {&lt;br /&gt;
        if (perm &amp;amp; PERMISSION_TRIGGER_ANIMATION) {&lt;br /&gt;
            llSetTimerEvent(0.25); // start polling&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    timer() {&lt;br /&gt;
        integer typingNow = llGetAgentInfo(llGetOwner()) &amp;amp; AGENT_TYPING;&lt;br /&gt;
 &lt;br /&gt;
        if (gWasTyping != typingNow) { // any change?&lt;br /&gt;
            if(typingNow){ // set whole object visible when typing&lt;br /&gt;
                llSetLinkAlpha(LINK_SET, 1.0, ALL_SIDES);&lt;br /&gt;
                llMessageLinked( LINK_SET,1,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else{ // set whole object invisible if not typing&lt;br /&gt;
                llSetLinkAlpha(LINK_SET, 0.0, ALL_SIDES);&lt;br /&gt;
                llMessageLinked( LINK_SET,0,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            gWasTyping = typingNow; // store away for  next time&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
   /* touch_start(integer a){&lt;br /&gt;
        llOwnerSay((string)llDetectedLinkNumber(0));&lt;br /&gt;
        llOwnerSay((string)llDetectedTouchFace(0));&lt;br /&gt;
    }*/&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chibbchichi Resident</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User_talk:Chibbchichi_Resident&amp;diff=1185784</id>
		<title>User talk:Chibbchichi Resident</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User_talk:Chibbchichi_Resident&amp;diff=1185784"/>
		<updated>2013-12-26T22:55:20Z</updated>

		<summary type="html">&lt;p&gt;Chibbchichi Resident: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== llGetAgentInfo Example ==&lt;br /&gt;
&lt;br /&gt;
I saw your recent contribution to llGetAgentInfo, but I felt it had some problems that needed addressing, so I took the liberty of moving it to here.&lt;br /&gt;
Your attach event resets the script, forcing it back through state_entry.&lt;br /&gt;
Within state_entry you assign the owner&#039;s key to the string &#039;id&#039; (strictly should be a key variable). &lt;br /&gt;
But then you attempt to test if the object is being detached by checking if id is NULL_KEY - but it can&#039;t be. That test needs to be done inside the attach() event.&lt;br /&gt;
Stopping the timer from within state_entry is pointless, as no timer will be running first time nor on script reset.&lt;br /&gt;
Within timer(), the information you gain from llGetAgentInfo() is not only about whether the agent is typing. It could for example include mouselook indication, or if they are flying. So testing this data for a change in typing status is not totally valid. You must isolate the AGENT_TYPING bit straightaway. I won&#039;t try and fix the whole script, but perhaps this would work for the timer code. The rest needs a bit of a rethink. [[User:Omei Qunhua|Omei Qunhua]] 11:18, 26 December 2013 (PST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
timer()&lt;br /&gt;
{&lt;br /&gt;
    integer TypingNow = llGetAgentInfo( llGetOwner() ) &amp;amp; AGENT_TYPING;&lt;br /&gt;
    if (TypingNow != gLastAnimation)&lt;br /&gt;
    {&lt;br /&gt;
         if (TypingNow)&lt;br /&gt;
            doStuff();&lt;br /&gt;
         else&lt;br /&gt;
            stopStuff();&lt;br /&gt;
        gLastAnimation = TypingNow;&lt;br /&gt;
    }  &lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/lsl&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// A simple typing override example.&lt;br /&gt;
// Modified the example-LSL of llGetAnimation to make it work with llGetAgentInfo.&lt;br /&gt;
// Also included an easy way to hide and show the whole object depending on current typing state.&lt;br /&gt;
// For example: Show a keyboard under avatars hands when avatar types.&lt;br /&gt;
 &lt;br /&gt;
// User functions&lt;br /&gt;
doStuff(){&lt;br /&gt;
    llStartAnimation(&amp;quot;run&amp;quot;);&lt;br /&gt;
    llSetAlpha(1,ALL_SIDES);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
stopStuff(){&lt;br /&gt;
    llStopAnimation(&amp;quot;run&amp;quot;);&lt;br /&gt;
    llSetAlpha(0,ALL_SIDES);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
key gOwner; // the wearer&#039;s key&lt;br /&gt;
integer gLastAnimation; // last llGetAnimation value seen&lt;br /&gt;
 &lt;br /&gt;
// Event handlers&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        string id=llGetOwner();&lt;br /&gt;
        // in case the script was reset while already attached&lt;br /&gt;
        if (llGetAttached() != 0) {&lt;br /&gt;
            if (id == NULL_KEY) { // detaching&lt;br /&gt;
                llSetTimerEvent(0.0); // stop the timer&lt;br /&gt;
            }&lt;br /&gt;
            else { // attached, or reset while worn&lt;br /&gt;
                llRequestPermissions(id, PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
                gOwner = id;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    run_time_permissions(integer perm) {&lt;br /&gt;
        if (perm &amp;amp; PERMISSION_TRIGGER_ANIMATION) {&lt;br /&gt;
            llSetTimerEvent(0.25); // start polling&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    timer() {&lt;br /&gt;
        integer newAnimation = llGetAgentInfo(gOwner);&lt;br /&gt;
 &lt;br /&gt;
        if (gLastAnimation != newAnimation) { // any change?&lt;br /&gt;
            if(newAnimation &amp;amp; AGENT_TYPING){&lt;br /&gt;
                doStuff();&lt;br /&gt;
            }&lt;br /&gt;
            else if (gLastAnimation !=(newAnimation &amp;amp; AGENT_TYPING))  {&lt;br /&gt;
                stopStuff();&lt;br /&gt;
            }&lt;br /&gt;
            gLastAnimation = newAnimation; // store away for  next time&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[V2]&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// A simple typing override example.&lt;br /&gt;
// Modified the example-LSL of llGetAnimation to make it work with llGetAgentInfo.&lt;br /&gt;
// Also included an easy way to hide and show the whole object depending on current typing state.&lt;br /&gt;
// For example: Show a keyboard under avatars hands when avatar types.&lt;br /&gt;
 &lt;br /&gt;
key gOwner; // the wearer&#039;s key&lt;br /&gt;
integer gLastAnimation; // last llGetAnimation value seen&lt;br /&gt;
 &lt;br /&gt;
// User functions&lt;br /&gt;
doStuff(){&lt;br /&gt;
    llStartAnimation(&amp;quot;run&amp;quot;);&lt;br /&gt;
    llSetAlpha(1,ALL_SIDES);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
stopStuff(){&lt;br /&gt;
    llStopAnimation(&amp;quot;run&amp;quot;);&lt;br /&gt;
    llSetAlpha(0,ALL_SIDES);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
Initialize(key id){&lt;br /&gt;
    // in case the script was reset while already attached&lt;br /&gt;
    if (llGetAttached() != 0) {&lt;br /&gt;
        if (id == NULL_KEY) { // detaching&lt;br /&gt;
            llSetTimerEvent(0.0); // stop the timer&lt;br /&gt;
        }&lt;br /&gt;
        else { // attached, or reset while worn&lt;br /&gt;
            llRequestPermissions(id, PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
            gOwner = id;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Event handlers&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        Initialize(llGetOwner());&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        Initialize(id);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    run_time_permissions(integer perm) {&lt;br /&gt;
        if (perm &amp;amp; PERMISSION_TRIGGER_ANIMATION) {&lt;br /&gt;
            llSetTimerEvent(0.25); // start polling&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    timer() {&lt;br /&gt;
        integer newAnimation = llGetAgentInfo(gOwner);&lt;br /&gt;
        integer isTyping = newAnimation &amp;amp; AGENT_TYPING;&lt;br /&gt;
 &lt;br /&gt;
        if (gLastAnimation != newAnimation) { // any change?&lt;br /&gt;
            if(isTyping){&lt;br /&gt;
                doStuff();&lt;br /&gt;
            }&lt;br /&gt;
            else if (gLastAnimation != isTyping)  {&lt;br /&gt;
                stopStuff();&lt;br /&gt;
            }&lt;br /&gt;
            gLastAnimation = newAnimation; // store away for  next time&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chibbchichi Resident</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User_talk:Chibbchichi_Resident&amp;diff=1185783</id>
		<title>User talk:Chibbchichi Resident</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User_talk:Chibbchichi_Resident&amp;diff=1185783"/>
		<updated>2013-12-26T22:50:32Z</updated>

		<summary type="html">&lt;p&gt;Chibbchichi Resident: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== llGetAgentInfo Example ==&lt;br /&gt;
&lt;br /&gt;
I saw your recent contribution to llGetAgentInfo, but I felt it had some problems that needed addressing, so I took the liberty of moving it to here.&lt;br /&gt;
Your attach event resets the script, forcing it back through state_entry.&lt;br /&gt;
Within state_entry you assign the owner&#039;s key to the string &#039;id&#039; (strictly should be a key variable). &lt;br /&gt;
But then you attempt to test if the object is being detached by checking if id is NULL_KEY - but it can&#039;t be. That test needs to be done inside the attach() event.&lt;br /&gt;
Stopping the timer from within state_entry is pointless, as no timer will be running first time nor on script reset.&lt;br /&gt;
Within timer(), the information you gain from llGetAgentInfo() is not only about whether the agent is typing. It could for example include mouselook indication, or if they are flying. So testing this data for a change in typing status is not totally valid. You must isolate the AGENT_TYPING bit straightaway. I won&#039;t try and fix the whole script, but perhaps this would work for the timer code. The rest needs a bit of a rethink. [[User:Omei Qunhua|Omei Qunhua]] 11:18, 26 December 2013 (PST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
timer()&lt;br /&gt;
{&lt;br /&gt;
    integer TypingNow = llGetAgentInfo( llGetOwner() ) &amp;amp; AGENT_TYPING;&lt;br /&gt;
    if (TypingNow != gLastAnimation)&lt;br /&gt;
    {&lt;br /&gt;
         if (TypingNow)&lt;br /&gt;
            doStuff();&lt;br /&gt;
         else&lt;br /&gt;
            stopStuff();&lt;br /&gt;
        gLastAnimation = TypingNow;&lt;br /&gt;
    }  &lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/lsl&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// A simple typing override example.&lt;br /&gt;
// Modified the example-LSL of llGetAnimation to make it work with llGetAgentInfo.&lt;br /&gt;
// Also included an easy way to hide and show the whole object depending on current typing state.&lt;br /&gt;
// For example: Show a keyboard under avatars hands when avatar types.&lt;br /&gt;
 &lt;br /&gt;
// User functions&lt;br /&gt;
doStuff(){&lt;br /&gt;
    llStartAnimation(&amp;quot;run&amp;quot;);&lt;br /&gt;
    llSetAlpha(1,ALL_SIDES);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
stopStuff(){&lt;br /&gt;
    llStopAnimation(&amp;quot;run&amp;quot;);&lt;br /&gt;
    llSetAlpha(0,ALL_SIDES);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
key gOwner; // the wearer&#039;s key&lt;br /&gt;
integer gLastAnimation; // last llGetAnimation value seen&lt;br /&gt;
 &lt;br /&gt;
// Event handlers&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        string id=llGetOwner();&lt;br /&gt;
        // in case the script was reset while already attached&lt;br /&gt;
        if (llGetAttached() != 0) {&lt;br /&gt;
            if (id == NULL_KEY) { // detaching&lt;br /&gt;
                llSetTimerEvent(0.0); // stop the timer&lt;br /&gt;
            }&lt;br /&gt;
            else { // attached, or reset while worn&lt;br /&gt;
                llRequestPermissions(id, PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
                gOwner = id;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    run_time_permissions(integer perm) {&lt;br /&gt;
        if (perm &amp;amp; PERMISSION_TRIGGER_ANIMATION) {&lt;br /&gt;
            llSetTimerEvent(0.25); // start polling&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    timer() {&lt;br /&gt;
        integer newAnimation = llGetAgentInfo(gOwner);&lt;br /&gt;
 &lt;br /&gt;
        if (gLastAnimation != newAnimation) { // any change?&lt;br /&gt;
            if(newAnimation &amp;amp; AGENT_TYPING){&lt;br /&gt;
                doStuff();&lt;br /&gt;
            }&lt;br /&gt;
            else if (gLastAnimation !=(newAnimation &amp;amp; AGENT_TYPING))  {&lt;br /&gt;
                stopStuff();&lt;br /&gt;
            }&lt;br /&gt;
            gLastAnimation = newAnimation; // store away for  next time&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// A simple typing override example.&lt;br /&gt;
// Modified the example-LSL of llGetAnimation to make it work with llGetAgentInfo.&lt;br /&gt;
// Also included an easy way to hide and show the whole object depending on current typing state.&lt;br /&gt;
// For example: Show a keyboard under avatars hands when avatar types.&lt;br /&gt;
 &lt;br /&gt;
// User functions&lt;br /&gt;
doStuff(){&lt;br /&gt;
    llStartAnimation(&amp;quot;run&amp;quot;);&lt;br /&gt;
    llSetAlpha(1,ALL_SIDES);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
stopStuff(){&lt;br /&gt;
    llStopAnimation(&amp;quot;run&amp;quot;);&lt;br /&gt;
    llSetAlpha(0,ALL_SIDES);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
Initialize(key id){&lt;br /&gt;
    // in case the script was reset while already attached&lt;br /&gt;
    if (llGetAttached() != 0) {&lt;br /&gt;
        if (id == NULL_KEY) { // detaching&lt;br /&gt;
            llSetTimerEvent(0.0); // stop the timer&lt;br /&gt;
        }&lt;br /&gt;
        else { // attached, or reset while worn&lt;br /&gt;
            llRequestPermissions(id, PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
            gOwner = id;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
key gOwner; // the wearer&#039;s key&lt;br /&gt;
integer gLastAnimation; // last llGetAnimation value seen&lt;br /&gt;
 &lt;br /&gt;
// Event handlers&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        Initialize(llGetOwner());&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        Initialize(id);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    run_time_permissions(integer perm) {&lt;br /&gt;
        if (perm &amp;amp; PERMISSION_TRIGGER_ANIMATION) {&lt;br /&gt;
            llSetTimerEvent(0.25); // start polling&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    timer() {&lt;br /&gt;
        integer newAnimation = llGetAgentInfo(gOwner);&lt;br /&gt;
 &lt;br /&gt;
        if (gLastAnimation != newAnimation) { // any change?&lt;br /&gt;
            if(newAnimation &amp;amp; AGENT_TYPING){&lt;br /&gt;
                doStuff();&lt;br /&gt;
            }&lt;br /&gt;
            else if (gLastAnimation !=(newAnimation &amp;amp; AGENT_TYPING))  {&lt;br /&gt;
                stopStuff();&lt;br /&gt;
            }&lt;br /&gt;
            gLastAnimation = newAnimation; // store away for  next time&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chibbchichi Resident</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetAgentInfo&amp;diff=1185749</id>
		<title>LlGetAgentInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetAgentInfo&amp;diff=1185749"/>
		<updated>2013-12-26T17:04:13Z</updated>

		<summary type="html">&lt;p&gt;Chibbchichi Resident: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{Issues/SVC-91}}{{Issues/SVC-3177}}{{LSL Function/avatar|id|sim=*}}&lt;br /&gt;
|func=llGetAgentInfo&lt;br /&gt;
|sort=GetAgentInfo&lt;br /&gt;
|func_id=206|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|return_type=integer|return_subtype=bit field&lt;br /&gt;
|p1_type=key|p1_name=id&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=containing the agent information about {{LSLP|id}}.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=*[[AGENT_BUSY]] indicates that the &amp;quot;busy&amp;quot; [[Internal Animations|internal animation]] is playing, even if the user is not truly in busy mode.&lt;br /&gt;
* &#039;&#039;&#039;On server 1.40 and below&#039;&#039;&#039;, [[AGENT_TYPING]] indicated that the &amp;quot;type&amp;quot; internal animation is playing, it would not be set if the user disabled [[Debug Settings|PlayTypingAnim]]. &#039;&#039;&#039;On server 1.42 and up&#039;&#039;&#039;, it reflects [[ChatFromViewer|typing start/stop messages]] from the client and does not depend on the  animation. If the old behavior is desired, use [[llGetAnimationList]] and look for {{NoWrap|{{String|c541c47f-e0c0-058b-ad1a-d6ae3a4584d9}}}} &amp;amp;mdash; {{Jira|SVC-787}}&lt;br /&gt;
*&amp;lt;code&amp;gt;[[AGENT_ALWAYS_RUN]] {{!}} [[AGENT_WALKING]]&amp;lt;/code&amp;gt; indicates that the user requested to run using standard viewer controls. Use [[llGetAnimation]] to also detect running caused by physics.&lt;br /&gt;
*This function does not return reliable information immediately after a border crossing. Use [[llGetAnimation]] instead, if you can. &amp;amp;mdash; {{Jira|SVC-3177}}&lt;br /&gt;
|constants=&lt;br /&gt;
{{LSL Constants/llGetAgentInfo|table=*}}&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer buf)&lt;br /&gt;
    {&lt;br /&gt;
        buf = llGetAgentInfo(llDetectedKey(0));&lt;br /&gt;
        string out;&lt;br /&gt;
        if(buf &amp;amp; AGENT_FLYING)&lt;br /&gt;
            out += &amp;quot;The agent is flying.\n&amp;quot;;&lt;br /&gt;
        else&lt;br /&gt;
            out += &amp;quot;The agent is not flying.\n&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
        if(buf &amp;amp; AGENT_ATTACHMENTS)&lt;br /&gt;
        {&lt;br /&gt;
            if(buf &amp;amp; AGENT_SCRIPTED)&lt;br /&gt;
                out += &amp;quot;The agent has scripted attachments.\n&amp;quot;;&lt;br /&gt;
            else&lt;br /&gt;
                out += &amp;quot;The agent&#039;s attachments are unscripted.\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
            out += &amp;quot;The agent does not have attachments.\n&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
        if(buf &amp;amp; AGENT_MOUSELOOK)&lt;br /&gt;
            out += &amp;quot;the agent is in mouselook.&amp;quot;;&lt;br /&gt;
        else&lt;br /&gt;
            out += &amp;quot;the agent is in normal camera mode.&amp;quot;;&lt;br /&gt;
        llWhisper(0, out);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// A simple typing override example.&lt;br /&gt;
// Modified the example-LSL of llGetAnimation to make it work with llGetAgentInfo.&lt;br /&gt;
// Also included an easy way to hide and show the whole object depending on current typing state.&lt;br /&gt;
// For example: Show a keyboard under avatars hands when avatar types.&lt;br /&gt;
 &lt;br /&gt;
// User functions&lt;br /&gt;
doStuff(){&lt;br /&gt;
    llStartAnimation(&amp;quot;run&amp;quot;);&lt;br /&gt;
    llSetAlpha(1,ALL_SIDES);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
stopStuff(){&lt;br /&gt;
    llStopAnimation(&amp;quot;run&amp;quot;);&lt;br /&gt;
    llSetAlpha(0,ALL_SIDES);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
key gOwner; // the wearer&#039;s key&lt;br /&gt;
integer gLastAnimation; // last llGetAnimation value seen&lt;br /&gt;
 &lt;br /&gt;
// Event handlers&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        string id=llGetOwner();&lt;br /&gt;
        // in case the script was reset while already attached&lt;br /&gt;
        if (llGetAttached() != 0) {&lt;br /&gt;
            if (id == NULL_KEY) { // detaching&lt;br /&gt;
                llSetTimerEvent(0.0); // stop the timer&lt;br /&gt;
            }&lt;br /&gt;
            else { // attached, or reset while worn&lt;br /&gt;
                llRequestPermissions(id, PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
                gOwner = id;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    run_time_permissions(integer perm) {&lt;br /&gt;
        if (perm &amp;amp; PERMISSION_TRIGGER_ANIMATION) {&lt;br /&gt;
            llSetTimerEvent(0.25); // start polling&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    timer() {&lt;br /&gt;
        integer newAnimation = llGetAgentInfo(gOwner);&lt;br /&gt;
 &lt;br /&gt;
        if (gLastAnimation != newAnimation) { // any change?&lt;br /&gt;
            if(newAnimation &amp;amp; AGENT_TYPING){&lt;br /&gt;
                doStuff();&lt;br /&gt;
            }&lt;br /&gt;
            else if (gLastAnimation !=(newAnimation &amp;amp; AGENT_TYPING))  {&lt;br /&gt;
                stopStuff();&lt;br /&gt;
            }&lt;br /&gt;
            gLastAnimation = newAnimation; // store away for  next time&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llRequestAgentData]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetAnimation]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetAnimationList]]|}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests=&lt;br /&gt;
{{LSL DefineRow||[[llGetAgentInfo_Test]]|}}&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes=This is not a good way of testing if an avatar is in the region, use [[llGetAgentSize]] instead.&lt;br /&gt;
|history={{LSL Added|0.2.0|remote=http://secondlife.wikia.com/wiki/Version_0.2.0}} along with these flags [[AGENT_FLYING]], [[AGENT_ATTACHMENTS]], &amp;amp; [[AGENT_SCRIPTED]].&lt;br /&gt;
*[[AGENT_AUTOPILOT]] was added in {{SVN|2900|rev=136439|trunk=*|ser=1.33.0|anchor=file21}}&lt;br /&gt;
|cat1=Avatar&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Chibbchichi Resident</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetAgentInfo&amp;diff=1185748</id>
		<title>LlGetAgentInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetAgentInfo&amp;diff=1185748"/>
		<updated>2013-12-26T17:03:02Z</updated>

		<summary type="html">&lt;p&gt;Chibbchichi Resident: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{Issues/SVC-91}}{{Issues/SVC-3177}}{{LSL Function/avatar|id|sim=*}}&lt;br /&gt;
|func=llGetAgentInfo&lt;br /&gt;
|sort=GetAgentInfo&lt;br /&gt;
|func_id=206|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|return_type=integer|return_subtype=bit field&lt;br /&gt;
|p1_type=key|p1_name=id&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=containing the agent information about {{LSLP|id}}.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=*[[AGENT_BUSY]] indicates that the &amp;quot;busy&amp;quot; [[Internal Animations|internal animation]] is playing, even if the user is not truly in busy mode.&lt;br /&gt;
* &#039;&#039;&#039;On server 1.40 and below&#039;&#039;&#039;, [[AGENT_TYPING]] indicated that the &amp;quot;type&amp;quot; internal animation is playing, it would not be set if the user disabled [[Debug Settings|PlayTypingAnim]]. &#039;&#039;&#039;On server 1.42 and up&#039;&#039;&#039;, it reflects [[ChatFromViewer|typing start/stop messages]] from the client and does not depend on the  animation. If the old behavior is desired, use [[llGetAnimationList]] and look for {{NoWrap|{{String|c541c47f-e0c0-058b-ad1a-d6ae3a4584d9}}}} &amp;amp;mdash; {{Jira|SVC-787}}&lt;br /&gt;
*&amp;lt;code&amp;gt;[[AGENT_ALWAYS_RUN]] {{!}} [[AGENT_WALKING]]&amp;lt;/code&amp;gt; indicates that the user requested to run using standard viewer controls. Use [[llGetAnimation]] to also detect running caused by physics.&lt;br /&gt;
*This function does not return reliable information immediately after a border crossing. Use [[llGetAnimation]] instead, if you can. &amp;amp;mdash; {{Jira|SVC-3177}}&lt;br /&gt;
|constants=&lt;br /&gt;
{{LSL Constants/llGetAgentInfo|table=*}}&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer buf)&lt;br /&gt;
    {&lt;br /&gt;
        buf = llGetAgentInfo(llDetectedKey(0));&lt;br /&gt;
        string out;&lt;br /&gt;
        if(buf &amp;amp; AGENT_FLYING)&lt;br /&gt;
            out += &amp;quot;The agent is flying.\n&amp;quot;;&lt;br /&gt;
        else&lt;br /&gt;
            out += &amp;quot;The agent is not flying.\n&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
        if(buf &amp;amp; AGENT_ATTACHMENTS)&lt;br /&gt;
        {&lt;br /&gt;
            if(buf &amp;amp; AGENT_SCRIPTED)&lt;br /&gt;
                out += &amp;quot;The agent has scripted attachments.\n&amp;quot;;&lt;br /&gt;
            else&lt;br /&gt;
                out += &amp;quot;The agent&#039;s attachments are unscripted.\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
            out += &amp;quot;The agent does not have attachments.\n&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
        if(buf &amp;amp; AGENT_MOUSELOOK)&lt;br /&gt;
            out += &amp;quot;the agent is in mouselook.&amp;quot;;&lt;br /&gt;
        else&lt;br /&gt;
            out += &amp;quot;the agent is in normal camera mode.&amp;quot;;&lt;br /&gt;
        llWhisper(0, out);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// A simple typing override example.&lt;br /&gt;
// Modified the example-LSL of llGetAnimation to make it work with llGetAgentInfo.&lt;br /&gt;
// Also included an easy way to hide and show the whole object depending on current typing state.&lt;br /&gt;
 &lt;br /&gt;
// User functions&lt;br /&gt;
doStuff(){&lt;br /&gt;
    llStartAnimation(&amp;quot;run&amp;quot;);&lt;br /&gt;
    llSetAlpha(1,ALL_SIDES);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
stopStuff(){&lt;br /&gt;
    llStopAnimation(&amp;quot;run&amp;quot;);&lt;br /&gt;
    llSetAlpha(0,ALL_SIDES);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
key gOwner; // the wearer&#039;s key&lt;br /&gt;
integer gLastAnimation; // last llGetAnimation value seen&lt;br /&gt;
 &lt;br /&gt;
// Event handlers&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        string id=llGetOwner();&lt;br /&gt;
        // in case the script was reset while already attached&lt;br /&gt;
        if (llGetAttached() != 0) {&lt;br /&gt;
            if (id == NULL_KEY) { // detaching&lt;br /&gt;
                llSetTimerEvent(0.0); // stop the timer&lt;br /&gt;
            }&lt;br /&gt;
            else { // attached, or reset while worn&lt;br /&gt;
                llRequestPermissions(id, PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
                gOwner = id;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    run_time_permissions(integer perm) {&lt;br /&gt;
        if (perm &amp;amp; PERMISSION_TRIGGER_ANIMATION) {&lt;br /&gt;
            llSetTimerEvent(0.25); // start polling&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    timer() {&lt;br /&gt;
        integer newAnimation = llGetAgentInfo(gOwner);&lt;br /&gt;
 &lt;br /&gt;
        if (gLastAnimation != newAnimation) { // any change?&lt;br /&gt;
            if(newAnimation &amp;amp; AGENT_TYPING){&lt;br /&gt;
                doStuff();&lt;br /&gt;
            }&lt;br /&gt;
            else if (gLastAnimation !=(newAnimation &amp;amp; AGENT_TYPING))  {&lt;br /&gt;
                stopStuff();&lt;br /&gt;
            }&lt;br /&gt;
            gLastAnimation = newAnimation; // store away for  next time&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llRequestAgentData]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetAnimation]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetAnimationList]]|}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests=&lt;br /&gt;
{{LSL DefineRow||[[llGetAgentInfo_Test]]|}}&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes=This is not a good way of testing if an avatar is in the region, use [[llGetAgentSize]] instead.&lt;br /&gt;
|history={{LSL Added|0.2.0|remote=http://secondlife.wikia.com/wiki/Version_0.2.0}} along with these flags [[AGENT_FLYING]], [[AGENT_ATTACHMENTS]], &amp;amp; [[AGENT_SCRIPTED]].&lt;br /&gt;
*[[AGENT_AUTOPILOT]] was added in {{SVN|2900|rev=136439|trunk=*|ser=1.33.0|anchor=file21}}&lt;br /&gt;
|cat1=Avatar&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Chibbchichi Resident</name></author>
	</entry>
</feed>