<?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=Asha+Vultee</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=Asha+Vultee"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/Asha_Vultee"/>
	<updated>2026-06-28T23:44:16Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:LlSensor&amp;diff=40949</id>
		<title>Talk:LlSensor</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:LlSensor&amp;diff=40949"/>
		<updated>2007-11-19T20:53:39Z</updated>

		<summary type="html">&lt;p&gt;Asha Vultee: New page: If PI/4 is a 45 degree cone: if the cone&amp;#039;s axis is 1, does the base have a diameter of 2, or a diameter of ~0.82? --~~~~&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If PI/4 is a 45 degree cone: if the cone&#039;s axis is 1, does the base have a diameter of 2, or a diameter of ~0.82? --[[User:Asha Vultee|Asha Vultee]] 12:53, 19 November 2007 (PST)&lt;/div&gt;</summary>
		<author><name>Asha Vultee</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:Array&amp;diff=40940</id>
		<title>Talk:Array</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:Array&amp;diff=40940"/>
		<updated>2007-11-19T19:00:43Z</updated>

		<summary type="html">&lt;p&gt;Asha Vultee: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is an elementary implementation of an associative array using the list datatype as a primitive storage mechanism.&lt;br /&gt;
&lt;br /&gt;
 ////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
 // Asha&#039;s Associative Array&lt;br /&gt;
 //&lt;br /&gt;
 // ______Release 0.1______&lt;br /&gt;
 // Basic functionality.&lt;br /&gt;
 // Copy this code to your script&lt;br /&gt;
 // and use the av_* functions to access&lt;br /&gt;
 //&lt;br /&gt;
 // TO SAVE DATA:&lt;br /&gt;
 // av_store_assoc( [ key, value ] );&lt;br /&gt;
 //&lt;br /&gt;
 // TO REPLACE DATA: (currently, this is a synonum for av_store_assoc)&lt;br /&gt;
 // av_replace_assoc( [ key, value ] );&lt;br /&gt;
 //&lt;br /&gt;
 // TO REMOVE DATA:&lt;br /&gt;
 // av_remove_assoc( [ key, UNUSED ] );&lt;br /&gt;
 //&lt;br /&gt;
 // TO RETRIEVE DATA:&lt;br /&gt;
 // av_assoc_get_by_key( [ key, UNUSED ] );&lt;br /&gt;
 // av_assoc_get_by_val( [ UNUSED, val ] );&lt;br /&gt;
 //&lt;br /&gt;
 // CAUTION: av_assoc_get_by_val() may return a list of more than 2 elements, where the list is&lt;br /&gt;
 // defined as [ key1, val1, key2, val2 ... keyn, valn ]&lt;br /&gt;
 //&lt;br /&gt;
 // TO WHACK THE LIST:&lt;br /&gt;
 // av_reset_assoc( string reserved );&lt;br /&gt;
 //&lt;br /&gt;
 // CAUTION: in order to maintain API compatability with future releases, use&lt;br /&gt;
 //  av_* functions instead of calling any LSL list functions or operators directly.&lt;br /&gt;
 ////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
 // START COPYING HERE&lt;br /&gt;
 list av_assoc_list_storage;&lt;br /&gt;
 integer av_assoc_list_width = 3;&lt;br /&gt;
 integer av_index_offset = 0;&lt;br /&gt;
 integer av_assoc_key_offset = 1;&lt;br /&gt;
 integer av_assoc_val_offset = 2;&lt;br /&gt;
 integer av_assoc_list_id = 0;&lt;br /&gt;
 &lt;br /&gt;
 av_reset_assoc( string rsvd )&lt;br /&gt;
 {&lt;br /&gt;
     av_assoc_list_storage = [];&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 av_store_assoc( list nvpair )&lt;br /&gt;
 {&lt;br /&gt;
     integer i;&lt;br /&gt;
     integer j;&lt;br /&gt;
     integer matched;&lt;br /&gt;
 &lt;br /&gt;
     float _currkey_float;&lt;br /&gt;
     float _currval_float;&lt;br /&gt;
     integer _currkey_integer;&lt;br /&gt;
     integer _currval_integer;&lt;br /&gt;
     string _currkey_string;&lt;br /&gt;
     string _currval_string;&lt;br /&gt;
     key _currkey_key;&lt;br /&gt;
     key _currval_key;&lt;br /&gt;
     vector _currkey_vector;&lt;br /&gt;
     vector _currval_vector;&lt;br /&gt;
     rotation _currkey_rotation;&lt;br /&gt;
     rotation _currval_rotation;&lt;br /&gt;
     &lt;br /&gt;
     integer key_type;&lt;br /&gt;
     integer inkey_type;&lt;br /&gt;
     &lt;br /&gt;
     inkey_type = llGetListEntryType( nvpair, 0 );&lt;br /&gt;
     matched = 0;&lt;br /&gt;
     &lt;br /&gt;
     j = llGetListLength( av_assoc_list_storage );&lt;br /&gt;
     &lt;br /&gt;
     if ( 0 == j )&lt;br /&gt;
     {&lt;br /&gt;
         av_assoc_list_storage += (av_assoc_list_id++);&lt;br /&gt;
         av_assoc_list_storage += nvpair;&lt;br /&gt;
         return;&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     for ( i = 0; i &amp;lt; j; i+= av_assoc_list_width )&lt;br /&gt;
     {&lt;br /&gt;
         key_type = llGetListEntryType( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
         if ( key_type == inkey_type )&lt;br /&gt;
         {&lt;br /&gt;
             if ( key_type == TYPE_INTEGER )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_integer = llList2Integer( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_integer = llList2Integer( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_integer == _currval_integer )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_STRING )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_string = llList2String( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_string = llList2String( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_string == _currval_string )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_VECTOR )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_vector = llList2Vector( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_vector = llList2Vector( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_vector == _currval_vector )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_ROTATION )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_rotation = llList2Rot( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_rotation = llList2Rot( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_rotation == _currval_rotation )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_FLOAT )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_float = llList2Float( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_float = llList2Float( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_rotation == _currval_rotation )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_KEY )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_key = llList2Key( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_key = llList2Key( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_key == _currval_key )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             &lt;br /&gt;
             if ( matched )&lt;br /&gt;
             {&lt;br /&gt;
                 av_assoc_list_storage = llListReplaceList( av_assoc_list_storage, nvpair, i+1, i+2 );&lt;br /&gt;
                 return;&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     av_assoc_list_storage += (av_assoc_list_id++);&lt;br /&gt;
     av_assoc_list_storage = av_assoc_list_storage + nvpair;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 av_replace_assoc( list nvpair )&lt;br /&gt;
 {&lt;br /&gt;
     av_store_assoc( nvpair );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 av_remove_assoc( list nvpair )&lt;br /&gt;
 {&lt;br /&gt;
     integer i;&lt;br /&gt;
     integer j;&lt;br /&gt;
     integer matched;&lt;br /&gt;
     float _currkey_float;&lt;br /&gt;
     float _currval_float;&lt;br /&gt;
     integer _currkey_integer;&lt;br /&gt;
     integer _currval_integer;&lt;br /&gt;
     string _currkey_string;&lt;br /&gt;
     string _currval_string;&lt;br /&gt;
     key _currkey_key;&lt;br /&gt;
     key _currval_key;&lt;br /&gt;
     vector _currkey_vector;&lt;br /&gt;
     vector _currval_vector;&lt;br /&gt;
     rotation _currkey_rotation;&lt;br /&gt;
     rotation _currval_rotation;&lt;br /&gt;
     &lt;br /&gt;
     integer key_type;&lt;br /&gt;
     integer inkey_type;&lt;br /&gt;
     &lt;br /&gt;
     inkey_type = llGetListEntryType( nvpair, 0 );&lt;br /&gt;
     matched = 0;&lt;br /&gt;
     &lt;br /&gt;
     j = llGetListLength( av_assoc_list_storage );&lt;br /&gt;
     &lt;br /&gt;
     if ( 0 == j )&lt;br /&gt;
     {&lt;br /&gt;
         return;&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     for ( i = 0; i &amp;lt; j; i+= av_assoc_list_width )&lt;br /&gt;
     {&lt;br /&gt;
         key_type = llGetListEntryType( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
         if ( key_type == inkey_type )&lt;br /&gt;
         {&lt;br /&gt;
             if ( key_type == TYPE_INTEGER )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_integer = llList2Integer( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_integer = llList2Integer( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_integer == _currval_integer )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_STRING )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_string = llList2String( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_string = llList2String( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_string == _currval_string )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_VECTOR )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_vector = llList2Vector( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_vector = llList2Vector( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_vector == _currval_vector )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_ROTATION )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_rotation = llList2Rot( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_rotation = llList2Rot( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_rotation == _currval_rotation )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_FLOAT )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_float = llList2Float( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_float = llList2Float( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_rotation == _currval_rotation )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_KEY )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_key = llList2Key( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_key = llList2Key( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_key == _currval_key )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             &lt;br /&gt;
             if ( matched )&lt;br /&gt;
             {&lt;br /&gt;
                 av_assoc_list_storage = llDeleteSubList( av_assoc_list_storage, i, i+2 );&lt;br /&gt;
                 return;&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 list av_assoc_get_by_key( list nvpair )&lt;br /&gt;
 {&lt;br /&gt;
     integer i;&lt;br /&gt;
     integer j;&lt;br /&gt;
     integer matched;&lt;br /&gt;
     float _currkey_float;&lt;br /&gt;
     float _currval_float;&lt;br /&gt;
     integer _currkey_integer;&lt;br /&gt;
     integer _currval_integer;&lt;br /&gt;
     string _currkey_string;&lt;br /&gt;
     string _currval_string;&lt;br /&gt;
     key _currkey_key;&lt;br /&gt;
     key _currval_key;&lt;br /&gt;
     vector _currkey_vector;&lt;br /&gt;
     vector _currval_vector;&lt;br /&gt;
     rotation _currkey_rotation;&lt;br /&gt;
     rotation _currval_rotation;&lt;br /&gt;
     &lt;br /&gt;
     integer key_type;&lt;br /&gt;
     integer inkey_type;&lt;br /&gt;
     &lt;br /&gt;
     inkey_type = llGetListEntryType( nvpair, 0 );&lt;br /&gt;
     matched = 0;&lt;br /&gt;
     &lt;br /&gt;
     j = llGetListLength( av_assoc_list_storage );&lt;br /&gt;
     &lt;br /&gt;
     if ( 0 == j )&lt;br /&gt;
     {&lt;br /&gt;
         return( [] );&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     for ( i = 0; i &amp;lt; j; i+= av_assoc_list_width )&lt;br /&gt;
     {&lt;br /&gt;
         key_type = llGetListEntryType( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
         if ( key_type == inkey_type )&lt;br /&gt;
         {&lt;br /&gt;
             if ( key_type == TYPE_INTEGER )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_integer = llList2Integer( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_integer = llList2Integer( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_integer == _currval_integer )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_STRING )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_string = llList2String( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_string = llList2String( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_string == _currval_string )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_VECTOR )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_vector = llList2Vector( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_vector = llList2Vector( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_vector == _currval_vector )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_ROTATION )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_rotation = llList2Rot( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_rotation = llList2Rot( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_rotation == _currval_rotation )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_FLOAT )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_float = llList2Float( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_float = llList2Float( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_rotation == _currval_rotation )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_KEY )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_key = llList2Key( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_key = llList2Key( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_key == _currval_key )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             &lt;br /&gt;
             if ( matched )&lt;br /&gt;
             {&lt;br /&gt;
                 list l = llList2List( av_assoc_list_storage, i+1, i+2 );&lt;br /&gt;
                 return( l );&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
     return( [] );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 list av_assoc_get_by_val( list nvpair )&lt;br /&gt;
 {&lt;br /&gt;
     integer i;&lt;br /&gt;
     integer j;&lt;br /&gt;
     integer matched;&lt;br /&gt;
     list ret;&lt;br /&gt;
     float _currkey_float;&lt;br /&gt;
     float _currval_float;&lt;br /&gt;
     integer _currkey_integer;&lt;br /&gt;
     integer _currval_integer;&lt;br /&gt;
     string _currkey_string;&lt;br /&gt;
     string _currval_string;&lt;br /&gt;
     key _currkey_key;&lt;br /&gt;
     key _currval_key;&lt;br /&gt;
     vector _currkey_vector;&lt;br /&gt;
     vector _currval_vector;&lt;br /&gt;
     rotation _currkey_rotation;&lt;br /&gt;
     rotation _currval_rotation;&lt;br /&gt;
     &lt;br /&gt;
     integer key_type;&lt;br /&gt;
     integer inkey_type;&lt;br /&gt;
     &lt;br /&gt;
     inkey_type = llGetListEntryType( nvpair, 1 );&lt;br /&gt;
     matched = 0;&lt;br /&gt;
     &lt;br /&gt;
     j = llGetListLength( av_assoc_list_storage );&lt;br /&gt;
     &lt;br /&gt;
     if ( 0 == j )&lt;br /&gt;
     {&lt;br /&gt;
         return( [] );&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     for ( i = 0; i &amp;lt; j; i+= av_assoc_list_width )&lt;br /&gt;
     {&lt;br /&gt;
         key_type = llGetListEntryType( av_assoc_list_storage, i+av_assoc_val_offset );&lt;br /&gt;
         if ( key_type == inkey_type )&lt;br /&gt;
         {&lt;br /&gt;
             if ( key_type == TYPE_INTEGER )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_integer = llList2Integer( av_assoc_list_storage, i+av_assoc_val_offset );&lt;br /&gt;
                 _currval_integer = llList2Integer( nvpair, 1 );&lt;br /&gt;
                 if ( _currkey_integer == _currval_integer )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_STRING )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_string = llList2String( av_assoc_list_storage, i+av_assoc_val_offset );&lt;br /&gt;
                 _currval_string = llList2String( nvpair, 1 );&lt;br /&gt;
                 if ( _currkey_string == _currval_string )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_VECTOR )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_vector = llList2Vector( av_assoc_list_storage, i+av_assoc_val_offset );&lt;br /&gt;
                 _currval_vector = llList2Vector( nvpair, 1 );&lt;br /&gt;
                 if ( _currkey_vector == _currval_vector )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_ROTATION )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_rotation = llList2Rot( av_assoc_list_storage, i+av_assoc_val_offset );&lt;br /&gt;
                 _currval_rotation = llList2Rot( nvpair, 1 );&lt;br /&gt;
                 if ( _currkey_rotation == _currval_rotation )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_FLOAT )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_float = llList2Float( av_assoc_list_storage, i+av_assoc_val_offset );&lt;br /&gt;
                 _currval_float = llList2Float( nvpair, 1 );&lt;br /&gt;
                 if ( _currkey_rotation == _currval_rotation )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_KEY )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_key = llList2Key( av_assoc_list_storage, i+av_assoc_val_offset );&lt;br /&gt;
                 _currval_key = llList2Key( nvpair, 1 );&lt;br /&gt;
                 if ( _currkey_key == _currval_key )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             &lt;br /&gt;
             if ( matched )&lt;br /&gt;
             {&lt;br /&gt;
                 ret += llList2List( av_assoc_list_storage, i+1, i+2 );&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
     return( ret );&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // STOP COPYING HERE&lt;br /&gt;
 ////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
 &lt;br /&gt;
 default&lt;br /&gt;
 {&lt;br /&gt;
     state_entry()&lt;br /&gt;
     {&lt;br /&gt;
         llOwnerSay( &amp;quot;Asha&#039;s Associative Array Test Ready&amp;quot; );&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     touch_start(integer total_number)&lt;br /&gt;
     {&lt;br /&gt;
     &lt;br /&gt;
         list l = [ 123, &amp;quot;Hello&amp;quot; ];&lt;br /&gt;
         list m = [ 456, &amp;quot;Wassup&amp;quot; ];&lt;br /&gt;
         list n = [ 789, &amp;quot;Yadda Yadda&amp;quot; ];&lt;br /&gt;
         list o = [ 790, &amp;quot;Yadda Yadda&amp;quot; ];&lt;br /&gt;
         list p = [ 791, &amp;quot;yadda YADDA&amp;quot; ];&lt;br /&gt;
         &lt;br /&gt;
         av_store_assoc( l );&lt;br /&gt;
         av_store_assoc( m );&lt;br /&gt;
         av_store_assoc( l );&lt;br /&gt;
         av_remove_assoc( l );&lt;br /&gt;
         &lt;br /&gt;
         l = av_assoc_get_by_key( m );&lt;br /&gt;
         llOwnerSay( llList2CSV( l ) );&lt;br /&gt;
         &lt;br /&gt;
         av_store_assoc( n );&lt;br /&gt;
         av_store_assoc( o );&lt;br /&gt;
         av_store_assoc( p );&lt;br /&gt;
         llOwnerSay( llList2CSV( av_assoc_get_by_val( [ &amp;quot;&amp;quot;, &amp;quot;Yadda Yadda&amp;quot; ] ) ) );&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
--[[User:Asha Vultee|Asha Vultee]] 12:11, 12 November 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
:That is going to be a very slow implementation. You would be better off using [[llListFindList]]. -- [[User:Strife Onizuka|Strife Onizuka]] 13:55, 12 November 2007 (PST)&lt;br /&gt;
::[[llListFindList]] may provide a faster method to locate a given value within a list, however implementing an associative array using llListFindList would yield a crippled associative array.  From the docs: &amp;quot;Returns an integer that is the index of the first instance of test in src.&amp;quot; Thus, for a given array [ k1 =&amp;gt; v1, k2 =&amp;gt; v2, k3 =&amp;gt; v3 ] you would not be able to have more than one vx with the same value, or a vx with the same value as a kx.  You couldn&#039;t use this simple data set [ 3 =&amp;gt; 1, 2 =&amp;gt; 1, 1 =&amp;gt; 1 ] without adding special cases or a more complex storage structure, which may cancel any benefit gained by using llListFindList. --[[User:Asha Vultee|Asha Vultee]] 10:59, 19 November 2007 (PST)&lt;/div&gt;</summary>
		<author><name>Asha Vultee</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:Array&amp;diff=40174</id>
		<title>Talk:Array</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:Array&amp;diff=40174"/>
		<updated>2007-11-12T20:11:20Z</updated>

		<summary type="html">&lt;p&gt;Asha Vultee: very basic associative array implementation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is an elementary implementation of an associative array using the list datatype as a primitive storage mechanism.&lt;br /&gt;
&lt;br /&gt;
 ////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
 // Asha&#039;s Associative Array&lt;br /&gt;
 //&lt;br /&gt;
 // ______Release 0.1______&lt;br /&gt;
 // Basic functionality.&lt;br /&gt;
 // Copy this code to your script&lt;br /&gt;
 // and use the av_* functions to access&lt;br /&gt;
 //&lt;br /&gt;
 // TO SAVE DATA:&lt;br /&gt;
 // av_store_assoc( [ key, value ] );&lt;br /&gt;
 //&lt;br /&gt;
 // TO REPLACE DATA: (currently, this is a synonum for av_store_assoc)&lt;br /&gt;
 // av_replace_assoc( [ key, value ] );&lt;br /&gt;
 //&lt;br /&gt;
 // TO REMOVE DATA:&lt;br /&gt;
 // av_remove_assoc( [ key, UNUSED ] );&lt;br /&gt;
 //&lt;br /&gt;
 // TO RETRIEVE DATA:&lt;br /&gt;
 // av_assoc_get_by_key( [ key, UNUSED ] );&lt;br /&gt;
 // av_assoc_get_by_val( [ UNUSED, val ] );&lt;br /&gt;
 //&lt;br /&gt;
 // CAUTION: av_assoc_get_by_val() may return a list of more than 2 elements, where the list is&lt;br /&gt;
 // defined as [ key1, val1, key2, val2 ... keyn, valn ]&lt;br /&gt;
 //&lt;br /&gt;
 // TO WHACK THE LIST:&lt;br /&gt;
 // av_reset_assoc( string reserved );&lt;br /&gt;
 //&lt;br /&gt;
 // CAUTION: in order to maintain API compatability with future releases, use&lt;br /&gt;
 //  av_* functions instead of calling any LSL list functions or operators directly.&lt;br /&gt;
 ////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
 // START COPYING HERE&lt;br /&gt;
 list av_assoc_list_storage;&lt;br /&gt;
 integer av_assoc_list_width = 3;&lt;br /&gt;
 integer av_index_offset = 0;&lt;br /&gt;
 integer av_assoc_key_offset = 1;&lt;br /&gt;
 integer av_assoc_val_offset = 2;&lt;br /&gt;
 integer av_assoc_list_id = 0;&lt;br /&gt;
 &lt;br /&gt;
 av_reset_assoc( string rsvd )&lt;br /&gt;
 {&lt;br /&gt;
     av_assoc_list_storage = [];&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 av_store_assoc( list nvpair )&lt;br /&gt;
 {&lt;br /&gt;
     integer i;&lt;br /&gt;
     integer j;&lt;br /&gt;
     integer matched;&lt;br /&gt;
 &lt;br /&gt;
     float _currkey_float;&lt;br /&gt;
     float _currval_float;&lt;br /&gt;
     integer _currkey_integer;&lt;br /&gt;
     integer _currval_integer;&lt;br /&gt;
     string _currkey_string;&lt;br /&gt;
     string _currval_string;&lt;br /&gt;
     key _currkey_key;&lt;br /&gt;
     key _currval_key;&lt;br /&gt;
     vector _currkey_vector;&lt;br /&gt;
     vector _currval_vector;&lt;br /&gt;
     rotation _currkey_rotation;&lt;br /&gt;
     rotation _currval_rotation;&lt;br /&gt;
     &lt;br /&gt;
     integer key_type;&lt;br /&gt;
     integer inkey_type;&lt;br /&gt;
     &lt;br /&gt;
     inkey_type = llGetListEntryType( nvpair, 0 );&lt;br /&gt;
     matched = 0;&lt;br /&gt;
     &lt;br /&gt;
     j = llGetListLength( av_assoc_list_storage );&lt;br /&gt;
     &lt;br /&gt;
     if ( 0 == j )&lt;br /&gt;
     {&lt;br /&gt;
         av_assoc_list_storage += (av_assoc_list_id++);&lt;br /&gt;
         av_assoc_list_storage += nvpair;&lt;br /&gt;
         return;&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     for ( i = 0; i &amp;lt; j; i+= av_assoc_list_width )&lt;br /&gt;
     {&lt;br /&gt;
         key_type = llGetListEntryType( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
         if ( key_type == inkey_type )&lt;br /&gt;
         {&lt;br /&gt;
             if ( key_type == TYPE_INTEGER )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_integer = llList2Integer( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_integer = llList2Integer( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_integer == _currval_integer )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_STRING )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_string = llList2String( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_string = llList2String( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_string == _currval_string )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_VECTOR )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_vector = llList2Vector( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_vector = llList2Vector( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_vector == _currval_vector )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_ROTATION )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_rotation = llList2Rot( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_rotation = llList2Rot( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_rotation == _currval_rotation )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_FLOAT )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_float = llList2Float( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_float = llList2Float( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_rotation == _currval_rotation )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_KEY )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_key = llList2Key( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_key = llList2Key( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_key == _currval_key )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             &lt;br /&gt;
             if ( matched )&lt;br /&gt;
             {&lt;br /&gt;
                 av_assoc_list_storage = llListReplaceList( av_assoc_list_storage, nvpair, i+1, i+2 );&lt;br /&gt;
                 return;&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     av_assoc_list_storage += (av_assoc_list_id++);&lt;br /&gt;
     av_assoc_list_storage = av_assoc_list_storage + nvpair;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 av_replace_assoc( list nvpair )&lt;br /&gt;
 {&lt;br /&gt;
     av_store_assoc( nvpair );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 av_remove_assoc( list nvpair )&lt;br /&gt;
 {&lt;br /&gt;
     integer i;&lt;br /&gt;
     integer j;&lt;br /&gt;
     integer matched;&lt;br /&gt;
     float _currkey_float;&lt;br /&gt;
     float _currval_float;&lt;br /&gt;
     integer _currkey_integer;&lt;br /&gt;
     integer _currval_integer;&lt;br /&gt;
     string _currkey_string;&lt;br /&gt;
     string _currval_string;&lt;br /&gt;
     key _currkey_key;&lt;br /&gt;
     key _currval_key;&lt;br /&gt;
     vector _currkey_vector;&lt;br /&gt;
     vector _currval_vector;&lt;br /&gt;
     rotation _currkey_rotation;&lt;br /&gt;
     rotation _currval_rotation;&lt;br /&gt;
     &lt;br /&gt;
     integer key_type;&lt;br /&gt;
     integer inkey_type;&lt;br /&gt;
     &lt;br /&gt;
     inkey_type = llGetListEntryType( nvpair, 0 );&lt;br /&gt;
     matched = 0;&lt;br /&gt;
     &lt;br /&gt;
     j = llGetListLength( av_assoc_list_storage );&lt;br /&gt;
     &lt;br /&gt;
     if ( 0 == j )&lt;br /&gt;
     {&lt;br /&gt;
         return;&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     for ( i = 0; i &amp;lt; j; i+= av_assoc_list_width )&lt;br /&gt;
     {&lt;br /&gt;
         key_type = llGetListEntryType( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
         if ( key_type == inkey_type )&lt;br /&gt;
         {&lt;br /&gt;
             if ( key_type == TYPE_INTEGER )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_integer = llList2Integer( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_integer = llList2Integer( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_integer == _currval_integer )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_STRING )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_string = llList2String( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_string = llList2String( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_string == _currval_string )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_VECTOR )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_vector = llList2Vector( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_vector = llList2Vector( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_vector == _currval_vector )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_ROTATION )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_rotation = llList2Rot( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_rotation = llList2Rot( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_rotation == _currval_rotation )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_FLOAT )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_float = llList2Float( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_float = llList2Float( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_rotation == _currval_rotation )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_KEY )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_key = llList2Key( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_key = llList2Key( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_key == _currval_key )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             &lt;br /&gt;
             if ( matched )&lt;br /&gt;
             {&lt;br /&gt;
                 av_assoc_list_storage = llDeleteSubList( av_assoc_list_storage, i, i+2 );&lt;br /&gt;
                 return;&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 list av_assoc_get_by_key( list nvpair )&lt;br /&gt;
 {&lt;br /&gt;
     integer i;&lt;br /&gt;
     integer j;&lt;br /&gt;
     integer matched;&lt;br /&gt;
     float _currkey_float;&lt;br /&gt;
     float _currval_float;&lt;br /&gt;
     integer _currkey_integer;&lt;br /&gt;
     integer _currval_integer;&lt;br /&gt;
     string _currkey_string;&lt;br /&gt;
     string _currval_string;&lt;br /&gt;
     key _currkey_key;&lt;br /&gt;
     key _currval_key;&lt;br /&gt;
     vector _currkey_vector;&lt;br /&gt;
     vector _currval_vector;&lt;br /&gt;
     rotation _currkey_rotation;&lt;br /&gt;
     rotation _currval_rotation;&lt;br /&gt;
     &lt;br /&gt;
     integer key_type;&lt;br /&gt;
     integer inkey_type;&lt;br /&gt;
     &lt;br /&gt;
     inkey_type = llGetListEntryType( nvpair, 0 );&lt;br /&gt;
     matched = 0;&lt;br /&gt;
     &lt;br /&gt;
     j = llGetListLength( av_assoc_list_storage );&lt;br /&gt;
     &lt;br /&gt;
     if ( 0 == j )&lt;br /&gt;
     {&lt;br /&gt;
         return( [] );&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     for ( i = 0; i &amp;lt; j; i+= av_assoc_list_width )&lt;br /&gt;
     {&lt;br /&gt;
         key_type = llGetListEntryType( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
         if ( key_type == inkey_type )&lt;br /&gt;
         {&lt;br /&gt;
             if ( key_type == TYPE_INTEGER )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_integer = llList2Integer( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_integer = llList2Integer( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_integer == _currval_integer )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_STRING )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_string = llList2String( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_string = llList2String( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_string == _currval_string )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_VECTOR )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_vector = llList2Vector( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_vector = llList2Vector( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_vector == _currval_vector )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_ROTATION )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_rotation = llList2Rot( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_rotation = llList2Rot( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_rotation == _currval_rotation )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_FLOAT )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_float = llList2Float( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_float = llList2Float( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_rotation == _currval_rotation )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_KEY )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_key = llList2Key( av_assoc_list_storage, i+av_assoc_key_offset );&lt;br /&gt;
                 _currval_key = llList2Key( nvpair, 0 );&lt;br /&gt;
                 if ( _currkey_key == _currval_key )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             &lt;br /&gt;
             if ( matched )&lt;br /&gt;
             {&lt;br /&gt;
                 list l = llList2List( av_assoc_list_storage, i+1, i+2 );&lt;br /&gt;
                 return( l );&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
     return( [] );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 list av_assoc_get_by_val( list nvpair )&lt;br /&gt;
 {&lt;br /&gt;
     integer i;&lt;br /&gt;
     integer j;&lt;br /&gt;
     integer matched;&lt;br /&gt;
     list ret;&lt;br /&gt;
     float _currkey_float;&lt;br /&gt;
     float _currval_float;&lt;br /&gt;
     integer _currkey_integer;&lt;br /&gt;
     integer _currval_integer;&lt;br /&gt;
     string _currkey_string;&lt;br /&gt;
     string _currval_string;&lt;br /&gt;
     key _currkey_key;&lt;br /&gt;
     key _currval_key;&lt;br /&gt;
     vector _currkey_vector;&lt;br /&gt;
     vector _currval_vector;&lt;br /&gt;
     rotation _currkey_rotation;&lt;br /&gt;
     rotation _currval_rotation;&lt;br /&gt;
     &lt;br /&gt;
     integer key_type;&lt;br /&gt;
     integer inkey_type;&lt;br /&gt;
     &lt;br /&gt;
     inkey_type = llGetListEntryType( nvpair, 1 );&lt;br /&gt;
     matched = 0;&lt;br /&gt;
     &lt;br /&gt;
     j = llGetListLength( av_assoc_list_storage );&lt;br /&gt;
     &lt;br /&gt;
     if ( 0 == j )&lt;br /&gt;
     {&lt;br /&gt;
         return( [] );&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     for ( i = 0; i &amp;lt; j; i+= av_assoc_list_width )&lt;br /&gt;
     {&lt;br /&gt;
         key_type = llGetListEntryType( av_assoc_list_storage, i+av_assoc_val_offset );&lt;br /&gt;
         if ( key_type == inkey_type )&lt;br /&gt;
         {&lt;br /&gt;
             if ( key_type == TYPE_INTEGER )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_integer = llList2Integer( av_assoc_list_storage, i+av_assoc_val_offset );&lt;br /&gt;
                 _currval_integer = llList2Integer( nvpair, 1 );&lt;br /&gt;
                 if ( _currkey_integer == _currval_integer )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_STRING )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_string = llList2String( av_assoc_list_storage, i+av_assoc_val_offset );&lt;br /&gt;
                 _currval_string = llList2String( nvpair, 1 );&lt;br /&gt;
                 if ( _currkey_string == _currval_string )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_VECTOR )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_vector = llList2Vector( av_assoc_list_storage, i+av_assoc_val_offset );&lt;br /&gt;
                 _currval_vector = llList2Vector( nvpair, 1 );&lt;br /&gt;
                 if ( _currkey_vector == _currval_vector )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_ROTATION )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_rotation = llList2Rot( av_assoc_list_storage, i+av_assoc_val_offset );&lt;br /&gt;
                 _currval_rotation = llList2Rot( nvpair, 1 );&lt;br /&gt;
                 if ( _currkey_rotation == _currval_rotation )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_FLOAT )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_float = llList2Float( av_assoc_list_storage, i+av_assoc_val_offset );&lt;br /&gt;
                 _currval_float = llList2Float( nvpair, 1 );&lt;br /&gt;
                 if ( _currkey_rotation == _currval_rotation )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             else if ( key_type == TYPE_KEY )&lt;br /&gt;
             {&lt;br /&gt;
                 _currkey_key = llList2Key( av_assoc_list_storage, i+av_assoc_val_offset );&lt;br /&gt;
                 _currval_key = llList2Key( nvpair, 1 );&lt;br /&gt;
                 if ( _currkey_key == _currval_key )&lt;br /&gt;
                 {&lt;br /&gt;
                     matched = 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             &lt;br /&gt;
             if ( matched )&lt;br /&gt;
             {&lt;br /&gt;
                 ret += llList2List( av_assoc_list_storage, i+1, i+2 );&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
     return( ret );&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // STOP COPYING HERE&lt;br /&gt;
 ////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
 &lt;br /&gt;
 default&lt;br /&gt;
 {&lt;br /&gt;
     state_entry()&lt;br /&gt;
     {&lt;br /&gt;
         llOwnerSay( &amp;quot;Asha&#039;s Associative Array Test Ready&amp;quot; );&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     touch_start(integer total_number)&lt;br /&gt;
     {&lt;br /&gt;
     &lt;br /&gt;
         list l = [ 123, &amp;quot;Hello&amp;quot; ];&lt;br /&gt;
         list m = [ 456, &amp;quot;Wassup&amp;quot; ];&lt;br /&gt;
         list n = [ 789, &amp;quot;Yadda Yadda&amp;quot; ];&lt;br /&gt;
         list o = [ 790, &amp;quot;Yadda Yadda&amp;quot; ];&lt;br /&gt;
         list p = [ 791, &amp;quot;yadda YADDA&amp;quot; ];&lt;br /&gt;
         &lt;br /&gt;
         av_store_assoc( l );&lt;br /&gt;
         av_store_assoc( m );&lt;br /&gt;
         av_store_assoc( l );&lt;br /&gt;
         av_remove_assoc( l );&lt;br /&gt;
         &lt;br /&gt;
         l = av_assoc_get_by_key( m );&lt;br /&gt;
         llOwnerSay( llList2CSV( l ) );&lt;br /&gt;
         &lt;br /&gt;
         av_store_assoc( n );&lt;br /&gt;
         av_store_assoc( o );&lt;br /&gt;
         av_store_assoc( p );&lt;br /&gt;
         llOwnerSay( llList2CSV( av_assoc_get_by_val( [ &amp;quot;&amp;quot;, &amp;quot;Yadda Yadda&amp;quot; ] ) ) );&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
--[[User:Asha Vultee|Asha Vultee]] 12:11, 12 November 2007 (PST)&lt;/div&gt;</summary>
		<author><name>Asha Vultee</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSensor&amp;diff=39762</id>
		<title>LlSensor</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSensor&amp;diff=39762"/>
		<updated>2007-11-08T20:23:28Z</updated>

		<summary type="html">&lt;p&gt;Asha Vultee: Added the TWO_PI constant, as well&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func_id=28|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|sort=Sensor|func=llSensor&lt;br /&gt;
|p1_type=string|p1_name=name&lt;br /&gt;
|p2_type=key|p2_name=id&lt;br /&gt;
|p3_type=integer|p3_name=type|p3_desc=mask&lt;br /&gt;
|p4_type=float|p4_name=range&lt;br /&gt;
|p5_type=float|p5_name=arc&lt;br /&gt;
|func_footnote=If &#039;&#039;&#039;name&#039;&#039;&#039;, &#039;&#039;&#039;id&#039;&#039;&#039;, and/or &#039;&#039;&#039;type&#039;&#039;&#039; are empty or 0, they are ignored.&amp;lt;br/&amp;gt;If &#039;&#039;&#039;id&#039;&#039;&#039; is an invalid key or [[NULL_KEY]] it is treated as empty.&lt;br /&gt;
|func_desc=Performs a single scan for &#039;&#039;&#039;name&#039;&#039;&#039; and &#039;&#039;&#039;id&#039;&#039;&#039; with &#039;&#039;&#039;type&#039;&#039;&#039; within &#039;&#039;&#039;range&#039;&#039;&#039; meters and &#039;&#039;&#039;arc&#039;&#039;&#039; radians of forward vector&lt;br /&gt;
|return_text&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|constants={{LSL Constants Sensor|type}}&lt;br /&gt;
|examples=&lt;br /&gt;
This sensor scans a 45 degree cone about the x-axis.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llSensor( &amp;quot;Gigs Taggart&amp;quot;, NULL_KEY, AGENT, 96.0, PI/4 );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[PI]]/2 or [[PI_BY_TWO]] constant is 90 degrees. [[PI]] is a hemispherical scan.  Use [[TWO_PI]] or 2 * [[PI]] for a 360 degree sensor.&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llSensorRepeat]]| Runs a sensor on a timer}}&lt;br /&gt;
{{LSL DefineRow||[[llSensorRemove]]| Stops the llSensorRepeat timer}}&lt;br /&gt;
|also_events=&lt;br /&gt;
{{LSL DefineRow||[[sensor]]|Triggered when a sensor detects something}}&lt;br /&gt;
{{LSL DefineRow||[[no_sensor]]|Triggered when a sensor detects nothing}}&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|permission&lt;br /&gt;
|negative_index&lt;br /&gt;
|cat1=Sensor&lt;br /&gt;
|cat2=Detected&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Asha Vultee</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSensor&amp;diff=39759</id>
		<title>LlSensor</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSensor&amp;diff=39759"/>
		<updated>2007-11-08T20:16:58Z</updated>

		<summary type="html">&lt;p&gt;Asha Vultee: 2*PI radians in a circle, PI radians in a semicircle.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func_id=28|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|sort=Sensor|func=llSensor&lt;br /&gt;
|p1_type=string|p1_name=name&lt;br /&gt;
|p2_type=key|p2_name=id&lt;br /&gt;
|p3_type=integer|p3_name=type|p3_desc=mask&lt;br /&gt;
|p4_type=float|p4_name=range&lt;br /&gt;
|p5_type=float|p5_name=arc&lt;br /&gt;
|func_footnote=If &#039;&#039;&#039;name&#039;&#039;&#039;, &#039;&#039;&#039;id&#039;&#039;&#039;, and/or &#039;&#039;&#039;type&#039;&#039;&#039; are empty or 0, they are ignored.&amp;lt;br/&amp;gt;If &#039;&#039;&#039;id&#039;&#039;&#039; is an invalid key or [[NULL_KEY]] it is treated as empty.&lt;br /&gt;
|func_desc=Performs a single scan for &#039;&#039;&#039;name&#039;&#039;&#039; and &#039;&#039;&#039;id&#039;&#039;&#039; with &#039;&#039;&#039;type&#039;&#039;&#039; within &#039;&#039;&#039;range&#039;&#039;&#039; meters and &#039;&#039;&#039;arc&#039;&#039;&#039; radians of forward vector&lt;br /&gt;
|return_text&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|constants={{LSL Constants Sensor|type}}&lt;br /&gt;
|examples=&lt;br /&gt;
This sensor scans a 45 degree cone about the x-axis.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llSensor( &amp;quot;Gigs Taggart&amp;quot;, NULL_KEY, AGENT, 96.0, PI/4 );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[PI]]/2 or [[PI_BY_TWO]] constant is 90 degrees. [[PI]] is a hemispherical scan.  Use 2 * [[PI]] for a 360 degree sensor.&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llSensorRepeat]]| Runs a sensor on a timer}}&lt;br /&gt;
{{LSL DefineRow||[[llSensorRemove]]| Stops the llSensorRepeat timer}}&lt;br /&gt;
|also_events=&lt;br /&gt;
{{LSL DefineRow||[[sensor]]|Triggered when a sensor detects something}}&lt;br /&gt;
{{LSL DefineRow||[[no_sensor]]|Triggered when a sensor detects nothing}}&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|permission&lt;br /&gt;
|negative_index&lt;br /&gt;
|cat1=Sensor&lt;br /&gt;
|cat2=Detected&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Asha Vultee</name></author>
	</entry>
</feed>