<?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=OddesE+Oh</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=OddesE+Oh"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/OddesE_Oh"/>
	<updated>2026-07-27T01:34:47Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlRequestPermissions(llGetOwner(),_PERMISSION_REFUND);&amp;diff=23199</id>
		<title>LlRequestPermissions(llGetOwner(), PERMISSION REFUND);</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlRequestPermissions(llGetOwner(),_PERMISSION_REFUND);&amp;diff=23199"/>
		<updated>2007-06-12T18:36:22Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Currently, any script that processes payment TO an avatar needs DEBIT permission to be able to refund the paying avatar if the amount payed was incorrect or something else went wrong. Apart from the problem that PERMISSION_DEBIT is currently limitless, meaning a vendor processing L$ 10 payments needs permission to llGiveMoney(to_some_avatar, unlimited_amount), there is also conceptually a big difference between REFUNDING money or GIVING money. I don&#039;t think a function llRefundMoney is needed, but it would be very good if the difference could be expressed in permissions. You could consider changing the color of the dialog box for request DEBIT permission from blue to red (after all, it&#039;s abuse sensitive.. blue can be a bit misleading). You could then have a yellow box for request REFUND permission. You would then restrict llGiveMoney, when called under REFUND permission, to&lt;br /&gt;
a) Only be called from within a money event context&lt;br /&gt;
b) Limit the amount given to the amount received in the money event.&lt;br /&gt;
&lt;br /&gt;
Furthermore I suggest you add a &#039;budget&#039; parameter to DEBIT permission, so any scripts that need to give money at will to operate can be restricted in their money-giving abilities.&lt;br /&gt;
&lt;br /&gt;
For an illustration of the problems we currently have with DEBIT_PERMISSION, here are possible fraud scenarios:&lt;br /&gt;
&lt;br /&gt;
Disguised-request-debit fraud&lt;br /&gt;
&lt;br /&gt;
* Create an object for which it makes sense that it needs DEBIT permission, a slots machine, sploderball or vendor machine will do&lt;br /&gt;
* Create an algorithm to steal as much money as possible and let it run periodically&lt;br /&gt;
&lt;br /&gt;
Users will give the DEBIT permission because it is expected that the object will ask for it. We need to have a budget parameter here so the dialog can say: .. wants to: Take a maximum of L$ 25 from you. Is this ok?&lt;br /&gt;
&lt;br /&gt;
Request-debit-on-payment fraud&lt;br /&gt;
&lt;br /&gt;
* Create a nice looking object that says: &amp;quot;Freebie: L$ 0&amp;quot;&lt;br /&gt;
* Do not set it &#039;For Sale&#039;, but instead llSetPayPrice(0, [DEFAULT,HIDDEN,HIDDEN,HIDDEN]);&lt;br /&gt;
* Create a money event and llSetPayText(&amp;quot;Buy&amp;quot;);&lt;br /&gt;
* Inside the money event, do a llRequestPermissions(id, [PERMISSION_DEBIT]);&lt;br /&gt;
&lt;br /&gt;
The user will see: &lt;br /&gt;
&lt;br /&gt;
* An object marked &amp;quot;Freebie: L$ 0&amp;quot; &lt;br /&gt;
* Upon rightclick, a pie menu item marked &amp;quot;Buy&amp;quot;&lt;br /&gt;
* Upon selection of the menu item, a dialog that says &amp;quot;Pay L$ to object &amp;quot;Freebie&amp;quot; owned by OddesE Oh?&amp;quot; with button &amp;quot;L$ 0&amp;quot;&lt;br /&gt;
* Upon payment, another dialog that says &amp;quot;Object &amp;quot;Freebie&amp;quot; owned by OddesE Oh wants to: Take L$ from you. Is this ok?&amp;quot; with buttons &amp;quot;Yes&amp;quot; and &amp;quot;No&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
How many users do you trust with your money and this series of events?&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlRequestPermissions(llGetOwner(),_PERMISSION_REFUND);&amp;diff=23197</id>
		<title>LlRequestPermissions(llGetOwner(), PERMISSION REFUND);</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlRequestPermissions(llGetOwner(),_PERMISSION_REFUND);&amp;diff=23197"/>
		<updated>2007-06-12T18:34:10Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Currently, any script that processes payment TO an avatar needs DEBIT permission to be able to refund the paying avatar if the amount payed was incorrect or something else went wrong. Apart from the problem that PERMISSION_DEBIT is currently limitless, meaning a vendor processing L$ 10 payments needs permission to llGiveMoney(to_some_avatar, unlimited_amount), there is also conceptually a big difference between REFUNDING money or GIVING money. I don&#039;t think a function llRefundMoney is needed, but it would be very good if the difference could be expressed in permissions. You could consider changing the color of the dialog box for request DEBIT permission from blue to red (after all, it&#039;s abuse sensitive.. blue can be a bit misleading). You could then have a yellow box for request REFUND permission. You would then restrict llGiveMoney, when called under REFUND permission, to&lt;br /&gt;
a) Only be called from within a money event context&lt;br /&gt;
b) Limit the amount given to the amount received in the money event.&lt;br /&gt;
&lt;br /&gt;
Furthermore I suggest you add a &#039;budget&#039; parameter to DEBIT permission, so any scripts that need to give money at will to operate can be restricted in their money-giving abilities.&lt;br /&gt;
&lt;br /&gt;
For an illustration of the problems we currently have with DEBIT_PERMISSION, here are possible fraud scenarios:&lt;br /&gt;
&lt;br /&gt;
Disguised-request-debit&lt;br /&gt;
&lt;br /&gt;
* Create an object for which it makes sense that it needs DEBIT permission, a slots machine, sploderball or vendor machine will do&lt;br /&gt;
* Create an algorithm to steal as much money as possible and let it run periodically&lt;br /&gt;
&lt;br /&gt;
Users will give the DEBIT permission because it is expected that the object will ask for it. We need to have a budget parameter here so the dialog can say: .. wants to: Take a maximum of L$ 25 from you. Is this ok?&lt;br /&gt;
&lt;br /&gt;
Request-debit-on-payment fraud&lt;br /&gt;
&lt;br /&gt;
* Create a nice looking object that says: &amp;quot;Freebie: L$ 0&amp;quot;&lt;br /&gt;
* Do not set it &#039;For Sale&#039;, but instead llSetPayPrice(0, [DEFAULT,HIDDEN,HIDDEN,HIDDEN]);&lt;br /&gt;
* Create a money event and llSetPayText(&amp;quot;Buy&amp;quot;);&lt;br /&gt;
* Inside the money event, do a llRequestPermissions(id, [PERMISSION_DEBIT]);&lt;br /&gt;
&lt;br /&gt;
The user will see: &lt;br /&gt;
&lt;br /&gt;
* An object marked &amp;quot;Freebie: L$ 0&amp;quot; &lt;br /&gt;
* Upon rightclick, a pie menu item marked &amp;quot;Buy&amp;quot;&lt;br /&gt;
* Upon selection of the menu item, a dialog that says &amp;quot;Pay L$ to object &amp;quot;Freebie&amp;quot; owned by OddesE Oh?&amp;quot; with button &amp;quot;L$ 0&amp;quot;&lt;br /&gt;
* Upon payment, another dialog that says &amp;quot;Object &amp;quot;Freebie&amp;quot; owned by OddesE Oh wants to: Take L$ from you. Is this ok?&amp;quot; with buttons &amp;quot;Yes&amp;quot; and &amp;quot;No&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
How many users do you trust with your money and this series of events?&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlRequestPermissions(llGetOwner(),_PERMISSION_REFUND);&amp;diff=23196</id>
		<title>LlRequestPermissions(llGetOwner(), PERMISSION REFUND);</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlRequestPermissions(llGetOwner(),_PERMISSION_REFUND);&amp;diff=23196"/>
		<updated>2007-06-12T18:32:17Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Currently, any script that processes payment TO an avatar needs DEBIT permission to be able to refund the paying avatar if the amount payed was incorrect or something else went wrong. Apart from the problem that PERMISSION_DEBIT is currently limitless, meaning a vendor processing L$ 10 payments needs permission to llGiveMoney(to_some_avatar, unlimited_amount), there is also conceptually a big difference between REFUNDING money or GIVING money. I don&#039;t think a function llRefundMoney is needed, but it would be very good if the difference could be expressed in permissions. You could consider changing the color of the dialog box for request DEBIT permission from blue to red (after all, it&#039;s abuse sensitive.. blue can be a bit misleading). You could then have a yellow box for request REFUND permission. You would then restrict llGiveMoney, when called under REFUND permission, to&lt;br /&gt;
a) Only be called from within a money event context&lt;br /&gt;
b) Limit the amount given to the amount received in the money event.&lt;br /&gt;
&lt;br /&gt;
Furthermore I suggest you add a &#039;budget&#039; parameter to DEBIT permission, so any scripts that need to give money at will to operate can be restricted in their money-giving abilities.&lt;br /&gt;
&lt;br /&gt;
For an illustration of the problems we currently have with DEBIT_PERMISSION, here are possible fraud scenarios:&lt;br /&gt;
&lt;br /&gt;
Disguised-request-debit&lt;br /&gt;
&lt;br /&gt;
* Create an object for which it makes sense that it needs DEBIT permission, a slots machine, sploderball or vendor machine will do&lt;br /&gt;
* Create an algorithm to steal as much money as possible and let it run periodically&lt;br /&gt;
&lt;br /&gt;
Users will give the DEBIT permission because it is expected that the object will ask for it. We need to have a budget parameter here so the dialog can say: .. wants to: Take a maximum of L$ 25 from you. Is this ok?&lt;br /&gt;
&lt;br /&gt;
Request-debit-on-payment fraud&lt;br /&gt;
&lt;br /&gt;
* Create a nice looking object that says: &amp;quot;Freebie: L$ 0&amp;quot;&lt;br /&gt;
* Do not set it &#039;For Sale&#039;, but instead llSetPayPrice(0, [DEFAULT,HIDDEN,HIDDEN,HIDDEN]);&lt;br /&gt;
* Create a money event and llSetPayText(&amp;quot;Buy&amp;quot;);&lt;br /&gt;
* Inside the money event, do a llRequestPermissions(id, [PERMISSION_DEBIT]);&lt;br /&gt;
&lt;br /&gt;
The user will see: &lt;br /&gt;
&lt;br /&gt;
  An object marked &amp;quot;Freebie: L$ 0&amp;quot; &lt;br /&gt;
  Upon rightclick, a pie menu item marked &amp;quot;Buy&amp;quot;&lt;br /&gt;
  Upon selection of the menu item, a dialog that says &amp;quot;Pay L$ to object &amp;quot;Freebie&amp;quot; owned by OddesE Oh?&amp;quot; with button &amp;quot;L$ 0&amp;quot;&lt;br /&gt;
  Upon payment, another dialog that says &amp;quot;Object &amp;quot;Freebie&amp;quot; owned by OddesE Oh wants to: Take L$ from you. Is this ok?&amp;quot; with buttons &amp;quot;Yes&amp;quot; and &amp;quot;No&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
How many users do you trust with your money and this series of events?&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlRequestPermissions(llGetOwner(),_PERMISSION_REFUND);&amp;diff=23189</id>
		<title>LlRequestPermissions(llGetOwner(), PERMISSION REFUND);</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlRequestPermissions(llGetOwner(),_PERMISSION_REFUND);&amp;diff=23189"/>
		<updated>2007-06-12T18:03:37Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Currently, any script that processes payment TO an avatar needs DEBIT permission to be able to refund the paying avatar if the amount payed was incorrect or something else went wrong. Apart from the problem that PERMISSION_DEBIT is currently limitless, meaning a vendor processing L$ 10 payments needs permission to llGiveMoney(to_some_avatar, unlimited_amount), there is also conceptually a big difference between REFUNDING money or GIVING money. I don&#039;t think a function llRefundMoney is needed, but it would be very good if the difference could be expressed in permissions. You could consider changing the color of the dialog box for request DEBIT permission from blue to red (after all, it&#039;s abuse sensitive.. blue can be a bit misleading). You could then have a yellow box for request REFUND permission. You would then restrict llGiveMoney, when called under REFUND permission, to&lt;br /&gt;
a) Only be called from within a money event context&lt;br /&gt;
b) Limit the amount given to the amount received in the money event.&lt;br /&gt;
&lt;br /&gt;
Furthermore I suggest you add a &#039;budget&#039; parameter to DEBIT permission, so any scripts that need to give money at will to operate can be restricted in their money-giving abilities.&lt;br /&gt;
&lt;br /&gt;
For an illustration of the problems we currently have with DEBIT_PERMISSION, here is a possible fraud scenario:&lt;br /&gt;
&lt;br /&gt;
Request-debit-on-payment fraud&lt;br /&gt;
&lt;br /&gt;
  * Create a nice looking object that says: &amp;quot;Freebie: L$ 0&amp;quot;&lt;br /&gt;
  * Do not set it &#039;For Sale&#039;, but instead llSetPayPrice(0, [DEFAULT,HIDDEN,HIDDEN,HIDDEN]);&lt;br /&gt;
  * Create a money event and llSetPayText(&amp;quot;Buy&amp;quot;);&lt;br /&gt;
  * Inside the money event, do a llRequestPermissions(id, [PERMISSION_DEBIT]);&lt;br /&gt;
&lt;br /&gt;
The user will see: &lt;br /&gt;
&lt;br /&gt;
  An object marked &amp;quot;Freebie: L$ 0&amp;quot; &lt;br /&gt;
  Upon rightclick, a pie menu item marked &amp;quot;Buy&amp;quot;&lt;br /&gt;
  Upon selection of the menu item, a dialog that says &amp;quot;Pay L$ to object &amp;quot;Freebie&amp;quot; owned by OddesE Oh?&amp;quot; with button &amp;quot;L$ 0&amp;quot;&lt;br /&gt;
  Upon payment, another dialog that says &amp;quot;Object &amp;quot;Freebie&amp;quot; owned by OddesE Oh wants to: Take L$ from you. Is this ok?&amp;quot; with buttons &amp;quot;Yes&amp;quot; and &amp;quot;No&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
How many users do you trust with your money and this series of events?&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlRequestPermissions(llGetOwner(),_PERMISSION_REFUND);&amp;diff=23188</id>
		<title>LlRequestPermissions(llGetOwner(), PERMISSION REFUND);</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlRequestPermissions(llGetOwner(),_PERMISSION_REFUND);&amp;diff=23188"/>
		<updated>2007-06-12T18:02:51Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Currently, any script that processes payment TO an avatar needs DEBIT permission to be able to refund the paying avatar if the amount payed was incorrect or something else went wrong. Apart from the problem that PERMISSION_DEBIT is currently limitless, meaning a vendor processing L$ 10 payments needs permission to llGiveMoney(to_some_avatar, unlimited_amount), there is also conceptually a big difference between REFUNDING money or GIVING money. I don&#039;t think a function llRefundMoney is needed, but it would be very good if the difference could be expressed in permissions. You could consider changing the color of the dialog box for request DEBIT permission from blue to red (after all, it&#039;s abuse sensitive.. blue can be a bit misleading). You could then have a yellow box for request REFUND permission. You would then restrict llGiveMoney, when called under REFUND permission, to&lt;br /&gt;
a) Only be called from within a money event context&lt;br /&gt;
b) Limit the amount given to the amount received in the money event.&lt;br /&gt;
&lt;br /&gt;
Furthermore I suggest you add a &#039;budget&#039; parameter to DEBIT permission, so any scripts that need to give money at will to operate can be restricted in their money-giving abilities.&lt;br /&gt;
&lt;br /&gt;
For an illustration of the problems we currently have with DEBIT_PERMISSION, here is a possible fraud scenario:&lt;br /&gt;
&lt;br /&gt;
  Request-debit-on-payment fraud&lt;br /&gt;
&lt;br /&gt;
  * Create a nice looking object that says: &amp;quot;Freebie: L$ 0&amp;quot;&lt;br /&gt;
  * Do not set it &#039;For Sale&#039;, but instead llSetPayPrice(0, [DEFAULT,HIDDEN,HIDDEN,HIDDEN]);&lt;br /&gt;
  * Create a money event and llSetPayText(&amp;quot;Buy&amp;quot;);&lt;br /&gt;
  * Inside the money event, do a llRequestPermissions(id, [PERMISSION_DEBIT]);&lt;br /&gt;
&lt;br /&gt;
The user will see: &lt;br /&gt;
&lt;br /&gt;
  An object marked &amp;quot;Freebie: L$ 0&amp;quot; &lt;br /&gt;
  Upon rightclick, a pie menu item marked &amp;quot;Buy&amp;quot;&lt;br /&gt;
  Upon selection of the menu item, a dialog that says &amp;quot;Pay L$ to object &amp;quot;Freebie&amp;quot; owned by OddesE Oh?&amp;quot; with button &amp;quot;L$ 0&amp;quot;&lt;br /&gt;
  Upon payment, another dialog that says &amp;quot;Object &amp;quot;Freebie&amp;quot; owned by OddesE Oh wants to: Take L$ from you. Is this ok?&amp;quot; with buttons &amp;quot;Yes&amp;quot; and &amp;quot;No&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
How many users do you trust with your money and this series of events?&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LSL_Useful_Function_WishList&amp;diff=23186</id>
		<title>LSL Useful Function WishList</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LSL_Useful_Function_WishList&amp;diff=23186"/>
		<updated>2007-06-12T17:49:55Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: /* R */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{LSL Header}}&lt;br /&gt;
==A==&lt;br /&gt;
[[llAddToEstateBanList]]&lt;br /&gt;
==C==&lt;br /&gt;
[[llChangeLandPassPrice]]&lt;br /&gt;
&lt;br /&gt;
==E==&lt;br /&gt;
{{LSLG|llExecuteMenuCommand}}&lt;br /&gt;
&lt;br /&gt;
==F==&lt;br /&gt;
{{LSLG|llFrandom}}&lt;br /&gt;
&lt;br /&gt;
==G==&lt;br /&gt;
{{LSLG|llGetParcelBanList}}&lt;br /&gt;
{{LSLG|llGetEstateBanList}}&lt;br /&gt;
{{LSLG|llGetAvatarKeysOnParcel}}&lt;br /&gt;
{{LSLG|llGetAvatarKeysOnEstate}}&lt;br /&gt;
{{LSLG|llGetMyAccountBalance}}&lt;br /&gt;
{{LSLG|llGetGroup}}&lt;br /&gt;
{{LSLG|llGetGender}}&lt;br /&gt;
&amp;lt;s&amp;gt;llGetScriptCreatorKey&amp;lt;/s&amp;gt; - use [[llGetInventoryCreator]]([[llGetScriptName]]()) instead&lt;br /&gt;
{{LSLG|llGetRegionPopulation}}&lt;br /&gt;
{{LSLG|llGetParcelPopulation}}&lt;br /&gt;
{{LSLG|llGetWorldPopulation}}&lt;br /&gt;
{{LSLG|llGetPrice}}&lt;br /&gt;
{{LSLG|llGetAgentPreferedLanguage}}&lt;br /&gt;
&lt;br /&gt;
==I==&lt;br /&gt;
{{LSLG|llInstantMessageGroup}}&lt;br /&gt;
{{LSLG|llInviteToGroup}}&lt;br /&gt;
{{LSLG|llIsValidIntegerString}}&lt;br /&gt;
{{LSLG|llIsValidFloatString}}&lt;br /&gt;
{{LSLG|llIsValidVectorString}}&lt;br /&gt;
{{LSLG|llIsValidRotationString}}&lt;br /&gt;
&lt;br /&gt;
==L==&lt;br /&gt;
{{LSLG|llLBETMB}}&lt;br /&gt;
==M==&lt;br /&gt;
{{LSLG|llMapTouch}}&lt;br /&gt;
&lt;br /&gt;
==N==&lt;br /&gt;
{{LSLG|llName2Key}}&lt;br /&gt;
&lt;br /&gt;
==O==&lt;br /&gt;
{{LSLG|llOnRegionReset}}&lt;br /&gt;
&lt;br /&gt;
==P==&lt;br /&gt;
{{LSLG|llPizza}}&lt;br /&gt;
{{LSLG|position_change}}&lt;br /&gt;
&lt;br /&gt;
==R==&lt;br /&gt;
{{LSLG|llRaiseError}}&lt;br /&gt;
{{LSLG|llRemoveFromEstateBanList}}&lt;br /&gt;
{{LSLG|llReturnObject}}&lt;br /&gt;
{{LSLG|llReturnOwnersObjects}}&lt;br /&gt;
{{LSLG|llRotateAgent}}&lt;br /&gt;
{{LSLG|llRequestPermissions(llGetOwner(), PERMISSION_REFUND);}}&lt;br /&gt;
&lt;br /&gt;
==S==&lt;br /&gt;
{{LSLG|llSoundex}}&lt;br /&gt;
{{LSLG|llSpeakText}}&lt;br /&gt;
{{LSLG|llSpeech2Text}}&lt;br /&gt;
{{LSLG|llSpeech2TextRemove}}&lt;br /&gt;
{{LSLG|llSayWithinRange}}&lt;br /&gt;
&lt;br /&gt;
==T==&lt;br /&gt;
{{LSLG|llTargetOffsetOmega}}&lt;br /&gt;
{{LSLG|llTeleportAgent}}&lt;br /&gt;
{{LSLG|llTriggerLandmark}}&lt;br /&gt;
{{LSLG|llTrackTouches}}&lt;br /&gt;
&lt;br /&gt;
==Other functionality==&lt;br /&gt;
{{LSLG|Block comments}}&lt;br /&gt;
{{LSLG|True tab-stops}}&lt;br /&gt;
{{LSLG|Code Folding}}&lt;br /&gt;
{{LSLG|Windowed Scripting}}&lt;br /&gt;
{{LSLG|Switch Statement}}&lt;br /&gt;
{{LSLG|Array}}&lt;br /&gt;
{{LSLG|on_unrez|Event: Unrez / Delete}}&lt;br /&gt;
{{LSLG|Conditionals}}&lt;br /&gt;
{{LSLG|State variables}}&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LSL_Useful_Function_WishList&amp;diff=23185</id>
		<title>LSL Useful Function WishList</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LSL_Useful_Function_WishList&amp;diff=23185"/>
		<updated>2007-06-12T17:49:10Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: /* S */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{LSL Header}}&lt;br /&gt;
==A==&lt;br /&gt;
[[llAddToEstateBanList]]&lt;br /&gt;
==C==&lt;br /&gt;
[[llChangeLandPassPrice]]&lt;br /&gt;
&lt;br /&gt;
==E==&lt;br /&gt;
{{LSLG|llExecuteMenuCommand}}&lt;br /&gt;
&lt;br /&gt;
==F==&lt;br /&gt;
{{LSLG|llFrandom}}&lt;br /&gt;
&lt;br /&gt;
==G==&lt;br /&gt;
{{LSLG|llGetParcelBanList}}&lt;br /&gt;
{{LSLG|llGetEstateBanList}}&lt;br /&gt;
{{LSLG|llGetAvatarKeysOnParcel}}&lt;br /&gt;
{{LSLG|llGetAvatarKeysOnEstate}}&lt;br /&gt;
{{LSLG|llGetMyAccountBalance}}&lt;br /&gt;
{{LSLG|llGetGroup}}&lt;br /&gt;
{{LSLG|llGetGender}}&lt;br /&gt;
&amp;lt;s&amp;gt;llGetScriptCreatorKey&amp;lt;/s&amp;gt; - use [[llGetInventoryCreator]]([[llGetScriptName]]()) instead&lt;br /&gt;
{{LSLG|llGetRegionPopulation}}&lt;br /&gt;
{{LSLG|llGetParcelPopulation}}&lt;br /&gt;
{{LSLG|llGetWorldPopulation}}&lt;br /&gt;
{{LSLG|llGetPrice}}&lt;br /&gt;
{{LSLG|llGetAgentPreferedLanguage}}&lt;br /&gt;
&lt;br /&gt;
==I==&lt;br /&gt;
{{LSLG|llInstantMessageGroup}}&lt;br /&gt;
{{LSLG|llInviteToGroup}}&lt;br /&gt;
{{LSLG|llIsValidIntegerString}}&lt;br /&gt;
{{LSLG|llIsValidFloatString}}&lt;br /&gt;
{{LSLG|llIsValidVectorString}}&lt;br /&gt;
{{LSLG|llIsValidRotationString}}&lt;br /&gt;
&lt;br /&gt;
==L==&lt;br /&gt;
{{LSLG|llLBETMB}}&lt;br /&gt;
==M==&lt;br /&gt;
{{LSLG|llMapTouch}}&lt;br /&gt;
&lt;br /&gt;
==N==&lt;br /&gt;
{{LSLG|llName2Key}}&lt;br /&gt;
&lt;br /&gt;
==O==&lt;br /&gt;
{{LSLG|llOnRegionReset}}&lt;br /&gt;
&lt;br /&gt;
==P==&lt;br /&gt;
{{LSLG|llPizza}}&lt;br /&gt;
{{LSLG|position_change}}&lt;br /&gt;
&lt;br /&gt;
==R==&lt;br /&gt;
{{LSLG|llRaiseError}}&lt;br /&gt;
{{LSLG|llRemoveFromEstateBanList}}&lt;br /&gt;
{{LSLG|llReturnObject}}&lt;br /&gt;
{{LSLG|llReturnOwnersObjects}}&lt;br /&gt;
{{LSLG|llRotateAgent}}&lt;br /&gt;
&lt;br /&gt;
==S==&lt;br /&gt;
{{LSLG|llSoundex}}&lt;br /&gt;
{{LSLG|llSpeakText}}&lt;br /&gt;
{{LSLG|llSpeech2Text}}&lt;br /&gt;
{{LSLG|llSpeech2TextRemove}}&lt;br /&gt;
{{LSLG|llSayWithinRange}}&lt;br /&gt;
&lt;br /&gt;
==T==&lt;br /&gt;
{{LSLG|llTargetOffsetOmega}}&lt;br /&gt;
{{LSLG|llTeleportAgent}}&lt;br /&gt;
{{LSLG|llTriggerLandmark}}&lt;br /&gt;
{{LSLG|llTrackTouches}}&lt;br /&gt;
&lt;br /&gt;
==Other functionality==&lt;br /&gt;
{{LSLG|Block comments}}&lt;br /&gt;
{{LSLG|True tab-stops}}&lt;br /&gt;
{{LSLG|Code Folding}}&lt;br /&gt;
{{LSLG|Windowed Scripting}}&lt;br /&gt;
{{LSLG|Switch Statement}}&lt;br /&gt;
{{LSLG|Array}}&lt;br /&gt;
{{LSLG|on_unrez|Event: Unrez / Delete}}&lt;br /&gt;
{{LSLG|Conditionals}}&lt;br /&gt;
{{LSLG|State variables}}&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetGender&amp;diff=22504</id>
		<title>LlGetGender</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetGender&amp;diff=22504"/>
		<updated>2007-06-04T19:03:52Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func_id&lt;br /&gt;
|mode=request&lt;br /&gt;
|func_sleep=0.1&lt;br /&gt;
|func_energy=10.0&lt;br /&gt;
|func=llGetGender&lt;br /&gt;
|sort=GetGender&lt;br /&gt;
|p1_type=key|p1_name=avatar|p1_desc=agent UUID&lt;br /&gt;
|return_text=the gender of an agent located in the same region the script is running in.&lt;br /&gt;
|return_type=string&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=*Works only for agents recently located in the same region the script is running in.&lt;br /&gt;
**Grid-wide GetGender could be provided via a [[dataserver]] call.&lt;br /&gt;
|examples&lt;br /&gt;
|helpers&lt;br /&gt;
|related&lt;br /&gt;
|also&lt;br /&gt;
|notes=Very useful for some special kind of products like poseballs and animations,also for attaching or detaching some body parts and access rules in some regions. &amp;lt;br/&amp;gt;&lt;br /&gt;
Sounds useful indeed, but should probably be agent data you can fetch with [[llRequestAgentData]].}}&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlExecuteMenuCommand&amp;diff=22503</id>
		<title>LlExecuteMenuCommand</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlExecuteMenuCommand&amp;diff=22503"/>
		<updated>2007-06-04T18:58:34Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function|func_id|mode=request&lt;br /&gt;
|func=llExecuteMenuCommand&lt;br /&gt;
|p1_type=list|p1_name=menu_sequence&lt;br /&gt;
|func_desc=Access a main menu item via a list &#039;&#039;&#039;menu_sequence&#039;&#039;&#039;.&lt;br /&gt;
|return_text&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=Some menu items may not be available for security reasons.&lt;br /&gt;
NOTE: Scripts are run on the server so this function is probably impossible. -OddesE Oh&lt;br /&gt;
|examples=&amp;lt;pre&amp;gt;&lt;br /&gt;
llExecuteMenuCommand([&amp;quot;Client&amp;quot;,&amp;quot;Character&amp;quot;,&amp;quot;Rebake Textures&amp;quot;]);&lt;br /&gt;
llExecuteMenuCommand([&amp;quot;Tools&amp;quot;,&amp;quot;Select My Objects Only&amp;quot;,TRUE]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|helpers|related|also|notes}}&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlInviteToGroup&amp;diff=22502</id>
		<title>LlInviteToGroup</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlInviteToGroup&amp;diff=22502"/>
		<updated>2007-06-04T18:53:37Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function/permission|PERMISSION_GROUP_INVITE|grant=a group officer|mode=request}}{{LSL_Function&lt;br /&gt;
|func_id&lt;br /&gt;
|func_sleep&lt;br /&gt;
|func_energy&lt;br /&gt;
|func=llInviteToGroup&lt;br /&gt;
|p1_type=key|p1_name=avatar&lt;br /&gt;
|p2_type=string|p2_name=role|p2_desc=Role name &#039;&#039;&#039;avatar&#039;&#039;&#039; is to have.&lt;br /&gt;
|sort&lt;br /&gt;
|func_desc=Adds &#039;&#039;&#039;avatar&#039;&#039;&#039; to the group the object is deeded to.&lt;br /&gt;
|return_text&lt;br /&gt;
|return_type&lt;br /&gt;
|spec=We need some way to invite an avatar to join the owners group if he has the right to invite members and has given the script permission to act as his delegate.&lt;br /&gt;
&lt;br /&gt;
llInviteToGroup(key group, key avatar)&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
llInviteToGroup(key avatar)&lt;br /&gt;
&lt;br /&gt;
would be great.&lt;br /&gt;
&lt;br /&gt;
We basically need to be able to perform group administration tasks if the script owner is in the group and has the right to perform these tasks.&lt;br /&gt;
&lt;br /&gt;
Depending on if the script has a (&#039;active&#039;) group if it&#039;s not group-owned we might or might not need another function: list [[llGetOwnerGroups]]()&lt;br /&gt;
|caveats&lt;br /&gt;
|examples&lt;br /&gt;
|helpers&lt;br /&gt;
|related&lt;br /&gt;
|also_functions&lt;br /&gt;
|also_events&lt;br /&gt;
|notes&lt;br /&gt;
|mode=request}}&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlChangeLandPassPrice&amp;diff=22501</id>
		<title>LlChangeLandPassPrice</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlChangeLandPassPrice&amp;diff=22501"/>
		<updated>2007-06-04T18:50:52Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To allow the access price to enter a parcel of land to be changed via a script.&lt;br /&gt;
&lt;br /&gt;
[[LSL Useful Function WishList]]&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LSL_Useful_Function_WishList&amp;diff=22500</id>
		<title>LSL Useful Function WishList</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LSL_Useful_Function_WishList&amp;diff=22500"/>
		<updated>2007-06-04T18:50:27Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: /* C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{LSL Header}}&lt;br /&gt;
==A==&lt;br /&gt;
[[llAddToEstateBanList]]&lt;br /&gt;
==C==&lt;br /&gt;
[[llChangeLandPassPrice]]&lt;br /&gt;
&lt;br /&gt;
==E==&lt;br /&gt;
{{LSLG|llExecuteMenuCommand}}&lt;br /&gt;
&lt;br /&gt;
==F==&lt;br /&gt;
{{LSLG|llFrandom}}&lt;br /&gt;
&lt;br /&gt;
==G==&lt;br /&gt;
{{LSLG|llGetParcelBanList}}&lt;br /&gt;
{{LSLG|llGetEstateBanList}}&lt;br /&gt;
{{LSLG|llGetAvatarKeysOnParcel}}&lt;br /&gt;
{{LSLG|llGetAvatarKeysOnEstate}}&lt;br /&gt;
{{LSLG|llGetMyAccountBalance}}&lt;br /&gt;
{{LSLG|llGetGroup}}&lt;br /&gt;
{{LSLG|llGetGender}}&lt;br /&gt;
&amp;lt;s&amp;gt;llGetScriptCreatorKey&amp;lt;/s&amp;gt; - use [[llGetInventoryCreator]]([[llGetScriptName]]()) instead&lt;br /&gt;
{{LSLG|llGetRegionPopulation}}&lt;br /&gt;
{{LSLG|llGetParcelPopulation}}&lt;br /&gt;
{{LSLG|llGetWorldPopulation}}&lt;br /&gt;
{{LSLG|llGetPrice}}&lt;br /&gt;
{{LSLG|llGetAgentPreferedLanguage}}&lt;br /&gt;
&lt;br /&gt;
==I==&lt;br /&gt;
{{LSLG|llInstantMessageGroup}}&lt;br /&gt;
{{LSLG|llInviteToGroup}}&lt;br /&gt;
==L==&lt;br /&gt;
{{LSLG|llLBETMB}}&lt;br /&gt;
==N==&lt;br /&gt;
{{LSLG|llName2Key}}&lt;br /&gt;
&lt;br /&gt;
==O==&lt;br /&gt;
{{LSLG|llOnRegionReset}}&lt;br /&gt;
&lt;br /&gt;
==P==&lt;br /&gt;
{{LSLG|llPizza}}&lt;br /&gt;
{{LSLG|position_change}}&lt;br /&gt;
&lt;br /&gt;
==R==&lt;br /&gt;
{{LSLG|llRaiseError}}&lt;br /&gt;
{{LSLG|llRemoveFromEstateBanList}}&lt;br /&gt;
{{LSLG|llReturnObject}}&lt;br /&gt;
{{LSLG|llReturnOwnersObjects}}&lt;br /&gt;
{{LSLG|llRotateAgent}}&lt;br /&gt;
&lt;br /&gt;
==S==&lt;br /&gt;
{{LSLG|llSoundex}}&lt;br /&gt;
{{LSLG|llSpeakText}}&lt;br /&gt;
{{LSLG|llSpeech2Text}}&lt;br /&gt;
{{LSLG|llSpeech2TextRemove}}&lt;br /&gt;
{{LSLG|llSayWithinRange}}&lt;br /&gt;
{{LSLG|llRequestPermissions(llGetOwner(), PERMISSION_REFUND);}}&lt;br /&gt;
&lt;br /&gt;
==T==&lt;br /&gt;
{{LSLG|llTargetOffsetOmega}}&lt;br /&gt;
{{LSLG|llTeleportAgent}}&lt;br /&gt;
{{LSLG|llTriggerLandmark}}&lt;br /&gt;
{{LSLG|llTrackTouches}}&lt;br /&gt;
&lt;br /&gt;
==Other functionality==&lt;br /&gt;
{{LSLG|Block comments}}&lt;br /&gt;
{{LSLG|True tab-stops}}&lt;br /&gt;
{{LSLG|Code Folding}}&lt;br /&gt;
{{LSLG|Windowed Scripting}}&lt;br /&gt;
{{LSLG|Switch Statement}}&lt;br /&gt;
{{LSLG|Array}}&lt;br /&gt;
{{LSLG|on_unrez|Event: Unrez / Delete}}&lt;br /&gt;
{{LSLG|Conditionals}}&lt;br /&gt;
{{LSLG|State variables}}&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlChangeLandPassPrice&amp;diff=22499</id>
		<title>LlChangeLandPassPrice</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlChangeLandPassPrice&amp;diff=22499"/>
		<updated>2007-06-04T18:49:53Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: New page: LSL Useful Function WishList&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[LSL Useful Function WishList]]&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetGroup&amp;diff=22498</id>
		<title>LlGetGroup</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetGroup&amp;diff=22498"/>
		<updated>2007-06-04T18:48:38Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Should return the group associated with the object the running script is part of, or NULL_KEY if no group is associated with the object.&lt;br /&gt;
&lt;br /&gt;
[[LSL Useful Function WishList]]&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetGroup&amp;diff=22497</id>
		<title>LlGetGroup</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetGroup&amp;diff=22497"/>
		<updated>2007-06-04T18:47:09Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: New page: Should return the group associated with the object the running script is part of, or NULL_KEY if no group is associated with the object.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Should return the group associated with the object the running script is part of, or NULL_KEY if no group is associated with the object.&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlRequestPermissions(llGetOwner(),_PERMISSION_REFUND);&amp;diff=22324</id>
		<title>LlRequestPermissions(llGetOwner(), PERMISSION REFUND);</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlRequestPermissions(llGetOwner(),_PERMISSION_REFUND);&amp;diff=22324"/>
		<updated>2007-06-02T00:48:21Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: New page: Currently, any script that processes payment TO an avatar needs DEBIT permission to be able to refund the paying avatar if the amount payed was incorrect or something else went wrong. Apar...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Currently, any script that processes payment TO an avatar needs DEBIT permission to be able to refund the paying avatar if the amount payed was incorrect or something else went wrong. Apart from the problem that PERMISSION_DEBIT is currently limitless, meaning a vendor processing L$ 10 payments needs permission to llGiveMoney(to_some_avatar, unlimited_amount), there is also conceptually a big difference between REFUNDING money or GIVING money. I don&#039;t think a function llRefundMoney is needed, but it would be very good if the difference could be expressed in permissions. You could consider changing the color of the dialog box for request DEBIT permission from blue to red (after all, it&#039;s abuse sensitive.. blue can be a bit misleading). You could then have a yellow box for request REFUND permission. You would then restrict llGiveMoney, when called under REFUND permission, to&lt;br /&gt;
a) Only be called from within a money event context&lt;br /&gt;
b) Limit the amount given to the amount received in the money event.&lt;br /&gt;
&lt;br /&gt;
Furthermore I suggest you add a &#039;budget&#039; parameter to DEBIT permission, so any scripts that need to give money at will to operate can be restricted in their money-giving abilities.&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LSL_Useful_Function_WishList&amp;diff=22322</id>
		<title>LSL Useful Function WishList</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LSL_Useful_Function_WishList&amp;diff=22322"/>
		<updated>2007-06-02T00:34:04Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: /* S */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{LSL Header}}&lt;br /&gt;
==A==&lt;br /&gt;
[[llAddToEstateBanList]]&lt;br /&gt;
==C==&lt;br /&gt;
[[llChangeLandPassPrice]]&lt;br /&gt;
&lt;br /&gt;
To allow the access price to enter a parcel of land to be changed via a script.&lt;br /&gt;
&lt;br /&gt;
==E==&lt;br /&gt;
{{LSLG|llExecuteMenuCommand}}&lt;br /&gt;
&lt;br /&gt;
==F==&lt;br /&gt;
{{LSLG|llFrandom}}&lt;br /&gt;
&lt;br /&gt;
==G==&lt;br /&gt;
{{LSLG|llGetParcelBanList}}&lt;br /&gt;
{{LSLG|llGetEstateBanList}}&lt;br /&gt;
{{LSLG|llGetAvatarKeysOnParcel}}&lt;br /&gt;
{{LSLG|llGetAvatarKeysOnEstate}}&lt;br /&gt;
{{LSLG|llGetMyAccountBalance}}&lt;br /&gt;
{{LSLG|llGetGroup}}&lt;br /&gt;
{{LSLG|llGetGender}}&lt;br /&gt;
&amp;lt;s&amp;gt;llGetScriptCreatorKey&amp;lt;/s&amp;gt; - use [[llGetInventoryCreator]]([[llGetScriptName]]()) instead&lt;br /&gt;
{{LSLG|llGetRegionPopulation}}&lt;br /&gt;
{{LSLG|llGetParcelPopulation}}&lt;br /&gt;
{{LSLG|llGetWorldPopulation}}&lt;br /&gt;
{{LSLG|llGetPrice}}&lt;br /&gt;
{{LSLG|llGetAgentPreferedLanguage}}&lt;br /&gt;
&lt;br /&gt;
==I==&lt;br /&gt;
{{LSLG|llInstantMessageGroup}}&lt;br /&gt;
{{LSLG|llInviteToGroup}}&lt;br /&gt;
==L==&lt;br /&gt;
{{LSLG|llLBETMB}}&lt;br /&gt;
==N==&lt;br /&gt;
{{LSLG|llName2Key}}&lt;br /&gt;
&lt;br /&gt;
==O==&lt;br /&gt;
{{LSLG|llOnRegionReset}}&lt;br /&gt;
&lt;br /&gt;
==P==&lt;br /&gt;
{{LSLG|llPizza}}&lt;br /&gt;
{{LSLG|position_change}}&lt;br /&gt;
&lt;br /&gt;
==R==&lt;br /&gt;
{{LSLG|llRaiseError}}&lt;br /&gt;
{{LSLG|llRemoveFromEstateBanList}}&lt;br /&gt;
{{LSLG|llReturnObject}}&lt;br /&gt;
{{LSLG|llReturnOwnersObjects}}&lt;br /&gt;
{{LSLG|llRotateAgent}}&lt;br /&gt;
&lt;br /&gt;
==S==&lt;br /&gt;
{{LSLG|llSoundex}}&lt;br /&gt;
{{LSLG|llSpeakText}}&lt;br /&gt;
{{LSLG|llSpeech2Text}}&lt;br /&gt;
{{LSLG|llSpeech2TextRemove}}&lt;br /&gt;
{{LSLG|llSayWithinRange}}&lt;br /&gt;
{{LSLG|llRequestPermissions(llGetOwner(), PERMISSION_REFUND);}}&lt;br /&gt;
&lt;br /&gt;
==T==&lt;br /&gt;
{{LSLG|llTargetOffsetOmega}}&lt;br /&gt;
{{LSLG|llTeleportAgent}}&lt;br /&gt;
{{LSLG|llTriggerLandmark}}&lt;br /&gt;
{{LSLG|llTrackTouches}}&lt;br /&gt;
&lt;br /&gt;
==Other functionality==&lt;br /&gt;
{{LSLG|Block comments}}&lt;br /&gt;
{{LSLG|True tab-stops}}&lt;br /&gt;
{{LSLG|Code Folding}}&lt;br /&gt;
{{LSLG|Windowed Scripting}}&lt;br /&gt;
{{LSLG|Switch Statement}}&lt;br /&gt;
{{LSLG|Array}}&lt;br /&gt;
{{LSLG|on_unrez|Event: Unrez / Delete}}&lt;br /&gt;
{{LSLG|Conditionals}}&lt;br /&gt;
{{LSLG|State variables}}&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSubStringIndex&amp;diff=22302</id>
		<title>LlSubStringIndex</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSubStringIndex&amp;diff=22302"/>
		<updated>2007-06-01T18:50:59Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func_id=181|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llSubStringIndex&lt;br /&gt;
|return_type=integer|p1_type=string|p1_name=source|p2_type=string|p2_name=pattern&lt;br /&gt;
|func_footnote=If &#039;&#039;&#039;pattern&#039;&#039;&#039; is not found in &#039;&#039;&#039;source&#039;&#039;&#039;, {{HoverText|-1|negative one, 0x{{LSL_Hex/Write|-1}}}} is returned.&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=that is the index of &#039;&#039;&#039;source&#039;&#039;&#039; in &#039;&#039;&#039;pattern&#039;&#039;&#039;.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=*Performs a literal match.&lt;br /&gt;
**Wildcards and RegEx are not supported.&lt;br /&gt;
|constants&lt;br /&gt;
|examples&lt;br /&gt;
|helpers=&lt;br /&gt;
An easy way to see if a string exists in another string...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if(~llSubStringIndex(myString, str))&lt;br /&gt;
{//it exists&lt;br /&gt;
    //This works because ~(-1) == 0&lt;br /&gt;
    //It saves bytecode and is faster then doing == -1&lt;br /&gt;
    //(It&#039;s also significantly less readable (unless you include the comments)&lt;br /&gt;
    // and most developers I know will advice against these kind of practices. -OddesE Oh)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llListFindList]]|Find a list in another list}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=String&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetLandOwnerAt&amp;diff=15490</id>
		<title>LlGetLandOwnerAt</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetLandOwnerAt&amp;diff=15490"/>
		<updated>2007-03-16T21:30:54Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func_id=216|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llGetLandOwnerAt&lt;br /&gt;
|return_type=key|p1_type=vector|p1_name=pos&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc=Returns the key of the owner of the land at pos.&lt;br /&gt;
|return_text=of the land owner.&lt;br /&gt;
|spec=If the land is in public domain [[NULL_KEY]] is returned. This land can be claimed by anyone with available tier. Land on the Preview grid is divvied out this way. Land on the main grid never enters public domain and is instead auctioned off by LL.&lt;br /&gt;
&lt;br /&gt;
If the land is [[group]]-owned, the group key is returned (but this isn&#039;t usable for anything, since group keys cannot be used by other functions in LSL).&lt;br /&gt;
|caveats&lt;br /&gt;
|constants&lt;br /&gt;
|examples&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|deprecated&lt;br /&gt;
|cat1=Parcel&lt;br /&gt;
|cat2=Owner&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlInviteToGroup&amp;diff=15489</id>
		<title>LlInviteToGroup</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlInviteToGroup&amp;diff=15489"/>
		<updated>2007-03-16T21:16:00Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We need some way to invite an avatar to join the owners group if he hast the right to invite members and has given the script permission to act as his delegate.&lt;br /&gt;
&lt;br /&gt;
llInviteToGroup(key group, key avatar)&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
llInviteToGroup(key avatar)&lt;br /&gt;
&lt;br /&gt;
would be great.&lt;br /&gt;
&lt;br /&gt;
SEE&lt;br /&gt;
&lt;br /&gt;
function llRequestPermissions, event runtime_permissions&lt;br /&gt;
&lt;br /&gt;
We basically need to be able to perform group administration tasks if the script owner is in the group and has the right to perform these tasks.&lt;br /&gt;
&lt;br /&gt;
Depending on if the script has a (&#039;active&#039;) group if it&#039;s not group-owned we might or might not need another function: list llGetOwnerGroups()&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LSL_Useful_Function_WishList&amp;diff=15488</id>
		<title>LSL Useful Function WishList</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LSL_Useful_Function_WishList&amp;diff=15488"/>
		<updated>2007-03-16T20:59:22Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{LSL Header}}&lt;br /&gt;
==A==&lt;br /&gt;
[[llAddToEstateBanList]]&lt;br /&gt;
&lt;br /&gt;
==E==&lt;br /&gt;
{{LSLG|llExecuteMenuCommand}}&lt;br /&gt;
&lt;br /&gt;
==G==&lt;br /&gt;
{{LSLG|llGetParcelBanList}}&lt;br /&gt;
{{LSLG|llGetEstateBanList}}&lt;br /&gt;
{{LSLG|llGetAvatarKeysOnParcel}}&lt;br /&gt;
{{LSLG|llGetAvatarKeysOnEstate}}&lt;br /&gt;
{{LSLG|llGetMyAccountBalance}}&lt;br /&gt;
{{LSLG|llGetGroup}}&lt;br /&gt;
&amp;lt;s&amp;gt;llGetScriptCreatorKey&amp;lt;/s&amp;gt; - use [[llGetInventoryCreator]]([[llGetScriptName]]()) instead&lt;br /&gt;
==I==&lt;br /&gt;
{{LSLG|llInstantMessageGroup}}&lt;br /&gt;
{{LSLG|llInviteToGroup}}&lt;br /&gt;
==L==&lt;br /&gt;
{{LSLG|llLBETMB}}&lt;br /&gt;
==N==&lt;br /&gt;
{{LSLG|llName2Key}}&lt;br /&gt;
==P==&lt;br /&gt;
{{LSLG|llPizza}}&lt;br /&gt;
{{LSLG|position_change}}&lt;br /&gt;
&lt;br /&gt;
==R==&lt;br /&gt;
{{LSLG|llRaiseError}}&lt;br /&gt;
{{LSLG|llRemoveFromEstateBanList}}&lt;br /&gt;
{{LSLG|llReturnObject}}&lt;br /&gt;
{{LSLG|llReturnOwnersObjects}}&lt;br /&gt;
{{LSLG|llRotateAgent}}&lt;br /&gt;
&lt;br /&gt;
==T==&lt;br /&gt;
{{LSLG|llTeleportAgent}}&lt;br /&gt;
{{LSLG|llTriggerLandmark}}&lt;br /&gt;
==Other functionality==&lt;br /&gt;
{{LSLG|Block comments}}&lt;br /&gt;
{{LSLG|True tab-stops}}&lt;br /&gt;
{{LSLG|Code Folding}}&lt;br /&gt;
{{LSLG|Windowed Scripting}}&lt;br /&gt;
{{LSLG|Switch Statement}}&lt;br /&gt;
{{LSLG|Array}}&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:LSL_Variables&amp;diff=10754</id>
		<title>Talk:LSL Variables</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:LSL_Variables&amp;diff=10754"/>
		<updated>2007-02-17T19:02:42Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Suppose you have a global variable in a script that runs in an object that is on solid land, that is to say, the object is rezzed onto the land once and then left there for months. Can you then rely on the contents of that variable to remain stable? Will it be affected by (rolling) restarts? Could it be &#039;reset&#039; to a default value (0, or NULL_KEY) at unpredictable moments?&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSitTarget&amp;diff=10176</id>
		<title>LlSitTarget</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSitTarget&amp;diff=10176"/>
		<updated>2007-02-13T23:39:17Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func_id=238|sort=SitTarget|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|sort=SitTarget&lt;br /&gt;
|func=llSitTarget|p1_type=vector|p1_name=offset|p2_type=rotation|p2_name=rot&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc=Set the sit location for this object (if &#039;&#039;&#039;offset&#039;&#039;&#039; == {{LSLG|ZERO_VECTOR|&amp;lt;0.0, 0.0, 0.0&amp;gt;}} clear it)&lt;br /&gt;
|return_text&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|constants&lt;br /&gt;
|examples&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=[[LSL_llSetSitText|llSetSitText]] [[LSL_llAvatarOnSitTarget|llAvatarOnSitTarget]]&lt;br /&gt;
|also_events=[[LSL_changed|changed]]&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|permission&lt;br /&gt;
|negative_index&lt;br /&gt;
}}&lt;br /&gt;
{{LSLC|Stub|SitTarget}}&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSitTarget&amp;diff=10174</id>
		<title>LlSitTarget</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSitTarget&amp;diff=10174"/>
		<updated>2007-02-13T23:37:04Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func_id=238|sort=SitTarget|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|sort=SitTarget&lt;br /&gt;
|func=llSitTarget|p1_type=vector|p1_name=offset|p2_type=rotation|p2_name=rot&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc=Set the sit location for this object (if &#039;&#039;&#039;offset&#039;&#039;&#039; == {{LSLG|ZERO_VECTOR|&amp;lt;0.0, 0.0, 0.0&amp;gt;}} clear it)&lt;br /&gt;
|return_text&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|constants&lt;br /&gt;
|examples&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=[[LSL_llSetSitText|llSetSitText]] [[LSL_llAvatarOnSitTarget|llAvatarOnSitTarget]]&lt;br /&gt;
|also_events=change&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|permission&lt;br /&gt;
|negative_index&lt;br /&gt;
}}&lt;br /&gt;
{{LSLC|Stub|SitTarget}}&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSitTarget&amp;diff=10171</id>
		<title>LlSitTarget</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSitTarget&amp;diff=10171"/>
		<updated>2007-02-13T23:35:58Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func_id=238|sort=SitTarget|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|sort=SitTarget&lt;br /&gt;
|func=llSitTarget|p1_type=vector|p1_name=offset|p2_type=rotation|p2_name=rot&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc=Set the sit location for this object (if &#039;&#039;&#039;offset&#039;&#039;&#039; == {{LSLG|ZERO_VECTOR|&amp;lt;0.0, 0.0, 0.0&amp;gt;}} clear it)&lt;br /&gt;
|return_text&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|constants&lt;br /&gt;
|examples&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=[[LSL_llSetSitText|llSetSitText]]&lt;br /&gt;
|also_events=change&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|permission&lt;br /&gt;
|negative_index&lt;br /&gt;
}}&lt;br /&gt;
{{LSLC|Stub|SitTarget}}&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSitTarget&amp;diff=10168</id>
		<title>LlSitTarget</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSitTarget&amp;diff=10168"/>
		<updated>2007-02-13T23:35:27Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func_id=238|sort=SitTarget|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|sort=SitTarget&lt;br /&gt;
|func=llSitTarget|p1_type=vector|p1_name=offset|p2_type=rotation|p2_name=rot&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc=Set the sit location for this object (if &#039;&#039;&#039;offset&#039;&#039;&#039; == {{LSLG|ZERO_VECTOR|&amp;lt;0.0, 0.0, 0.0&amp;gt;}} clear it)&lt;br /&gt;
|return_text&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|constants&lt;br /&gt;
|examples&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=[[LSL_llSetSitText]]&lt;br /&gt;
|also_events=change&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|permission&lt;br /&gt;
|negative_index&lt;br /&gt;
}}&lt;br /&gt;
{{LSLC|Stub|SitTarget}}&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSitTarget&amp;diff=10166</id>
		<title>LlSitTarget</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSitTarget&amp;diff=10166"/>
		<updated>2007-02-13T23:34:02Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func_id=238|sort=SitTarget|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|sort=SitTarget&lt;br /&gt;
|func=llSitTarget|p1_type=vector|p1_name=offset|p2_type=rotation|p2_name=rot&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc=Set the sit location for this object (if &#039;&#039;&#039;offset&#039;&#039;&#039; == {{LSLG|ZERO_VECTOR|&amp;lt;0.0, 0.0, 0.0&amp;gt;}} clear it)&lt;br /&gt;
|return_text&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|constants&lt;br /&gt;
|examples&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=llSetSitText&lt;br /&gt;
|also_events=change&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|permission&lt;br /&gt;
|negative_index&lt;br /&gt;
}}&lt;br /&gt;
{{LSLC|Stub|SitTarget}}&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Touch_start&amp;diff=10158</id>
		<title>Touch start</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Touch_start&amp;diff=10158"/>
		<updated>2007-02-13T23:28:39Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Event|event_id=2|event_delay|event=touch_start&lt;br /&gt;
|p1_type=integer&lt;br /&gt;
|p1_name=num_detected&lt;br /&gt;
|p1_desc=Number of agents detected touching during the last clockcycle&lt;br /&gt;
|event_desc=Triggered by the start of agent clicking on task&lt;br /&gt;
|constants&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|examples=You can use numbers 0 through num_detected - 1 to get detected agent keys:&lt;br /&gt;
 default&lt;br /&gt;
 { &lt;br /&gt;
     touch_start(integer num_detected)&lt;br /&gt;
     {&lt;br /&gt;
         integer i = 0;&lt;br /&gt;
         for(; i&amp;lt;num_detected; ++i)&lt;br /&gt;
             llWhisper(0, &amp;quot;Touched by &amp;quot; + llKey2Name(llDetectedKey(i)));&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
|helpers&lt;br /&gt;
|also_header&lt;br /&gt;
|also_events&lt;br /&gt;
|also_functions&lt;br /&gt;
|also_articles&lt;br /&gt;
|also_footer&lt;br /&gt;
|notes&lt;br /&gt;
|mode&lt;br /&gt;
|deprecated&lt;br /&gt;
|cat1=Touch&lt;br /&gt;
|cat2=Detected&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Touch_start&amp;diff=10157</id>
		<title>Touch start</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Touch_start&amp;diff=10157"/>
		<updated>2007-02-13T23:27:55Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Event|event_id=2|event_delay|event=touch_start&lt;br /&gt;
|p1_type=integer&lt;br /&gt;
|p1_name=num_detected&lt;br /&gt;
|p1_desc=Number of agents detected touching during the last clockcycle&lt;br /&gt;
|event_desc=Triggered by the start of agent clicking on task&lt;br /&gt;
|constants&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|examples=You can use numbers 0 through num_detected - 1 to get detected agent keys:&lt;br /&gt;
    default&lt;br /&gt;
    { &lt;br /&gt;
        touch_start(integer num_detected)&lt;br /&gt;
        {&lt;br /&gt;
            integer i = 0;&lt;br /&gt;
            for(; i&amp;lt;num_detected; ++i)&lt;br /&gt;
                llWhisper(0, &amp;quot;Touched by &amp;quot; + llKey2Name(llDetectedKey(i)));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
|helpers&lt;br /&gt;
|also_header&lt;br /&gt;
|also_events&lt;br /&gt;
|also_functions&lt;br /&gt;
|also_articles&lt;br /&gt;
|also_footer&lt;br /&gt;
|notes&lt;br /&gt;
|mode&lt;br /&gt;
|deprecated&lt;br /&gt;
|cat1=Touch&lt;br /&gt;
|cat2=Detected&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Touch_start&amp;diff=10155</id>
		<title>Touch start</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Touch_start&amp;diff=10155"/>
		<updated>2007-02-13T23:27:11Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Event|event_id=2|event_delay|event=touch_start&lt;br /&gt;
|p1_type=integer&lt;br /&gt;
|p1_name=num_detected&lt;br /&gt;
|p1_desc=Number of agents detected touching during the last clockcycle&lt;br /&gt;
|event_desc=Triggered by the start of agent clicking on task&lt;br /&gt;
|constants&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|examples=You can use numbers 0 through num_detected - 1 to get detected agent keys:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
    default&lt;br /&gt;
    { &lt;br /&gt;
        touch_start(integer num_detected)&lt;br /&gt;
        {&lt;br /&gt;
            integer i = 0;&lt;br /&gt;
            for(; i&amp;lt;num_detected; ++i)&lt;br /&gt;
                llWhisper(0, &amp;quot;Touched by &amp;quot; + llKey2Name(llDetectedKey(i)));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_header&lt;br /&gt;
|also_events&lt;br /&gt;
|also_functions&lt;br /&gt;
|also_articles&lt;br /&gt;
|also_footer&lt;br /&gt;
|notes&lt;br /&gt;
|mode&lt;br /&gt;
|deprecated&lt;br /&gt;
|cat1=Touch&lt;br /&gt;
|cat2=Detected&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Touch_start&amp;diff=9238</id>
		<title>Touch start</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Touch_start&amp;diff=9238"/>
		<updated>2007-02-10T03:49:32Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Event|event_id=2|event_delay|event=touch_start|p1_type=integer|p1_name=num_detected|p1_desc=Number of agents detected touching during the last clockcycle|event_desc=Triggered by the start of agent clicking on task|constants|spec|caveats|examples=You can use numbers 0 through num_detected - 1 to get detected agent keys:&lt;br /&gt;
  touch_start(integer num_detected)&lt;br /&gt;
  {&lt;br /&gt;
    integer i = 0;&lt;br /&gt;
    for(; i&amp;lt;num_detected; ++i)&lt;br /&gt;
    llWhisper(0, &amp;quot;Touched by &amp;quot; + llKey2Name(llDetectedKey(i)));&lt;br /&gt;
  }&lt;br /&gt;
|helpers&lt;br /&gt;
|also_header|also_events|also_functions|also_articles|also_footer&lt;br /&gt;
|notes|mode|deprecated|cat1=Touch&lt;br /&gt;
|cat2=Detected&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4}}&lt;br /&gt;
{{LSLC|Stub}}&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Touch_start&amp;diff=9237</id>
		<title>Touch start</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Touch_start&amp;diff=9237"/>
		<updated>2007-02-10T03:44:31Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Event|event_id=2|event_delay|event=touch_start|p1_type=integer|p1_name=num_detected|p1_desc=Number of agents detected touching during the last clockcycle|event_desc=Triggered by the start of agent clicking on task|constants|spec|caveats|examples=&lt;br /&gt;
  touch_start(integer total_number)&lt;br /&gt;
  {&lt;br /&gt;
    integer i = 0;&lt;br /&gt;
    for(; i&amp;lt;total_number; ++i)&lt;br /&gt;
    llWhisper(0, &amp;quot;Touched by &amp;quot; + llKey2Name(llDetectedKey(i)));&lt;br /&gt;
  }&lt;br /&gt;
|helpers&lt;br /&gt;
|also_header|also_events|also_functions|also_articles|also_footer&lt;br /&gt;
|notes|mode|deprecated|cat1=Touch&lt;br /&gt;
|cat2=Detected&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4}}&lt;br /&gt;
{{LSLC|Stub}}&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Touch_start&amp;diff=9236</id>
		<title>Touch start</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Touch_start&amp;diff=9236"/>
		<updated>2007-02-10T03:44:05Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Event|event_id=2|event_delay|event=touch_start|p1_type=integer|p1_name=num_detected|p1_desc=Number of agents detected touching during the last clockcycle|event_desc=Triggered by the start of agent clicking on task|constants|spec|caveats|examples&lt;br /&gt;
  touch_start(integer total_number)&lt;br /&gt;
  {&lt;br /&gt;
    integer i = 0;&lt;br /&gt;
    for(; i&amp;lt;total_number; ++i)&lt;br /&gt;
    llWhisper(0, &amp;quot;Touched by &amp;quot; + llKey2Name(llDetectedKey(i)));&lt;br /&gt;
  }&lt;br /&gt;
|helpers&lt;br /&gt;
|also_header|also_events|also_functions|also_articles|also_footer&lt;br /&gt;
|notes|mode|deprecated|cat1=Touch&lt;br /&gt;
|cat2=Detected&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4}}&lt;br /&gt;
{{LSLC|Stub}}&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Touch_start&amp;diff=9230</id>
		<title>Touch start</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Touch_start&amp;diff=9230"/>
		<updated>2007-02-10T03:28:55Z</updated>

		<summary type="html">&lt;p&gt;OddesE Oh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Event|event_id=2|event_delay|event=touch_start|p1_type=integer|p1_name=num_detected|p1_desc=Number of agents detected touching during the last clockcycle|event_desc=Triggered by the start of agent clicking on task|constants|spec|caveats|examples|helpers&lt;br /&gt;
|also_header|also_events|also_functions|also_articles|also_footer&lt;br /&gt;
|notes|mode|deprecated|cat1=Touch&lt;br /&gt;
|cat2=Detected&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4}}&lt;br /&gt;
{{LSLC|Stub}}&lt;/div&gt;</summary>
		<author><name>OddesE Oh</name></author>
	</entry>
</feed>