<?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=Flivelwitz+Alsop</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=Flivelwitz+Alsop"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/Flivelwitz_Alsop"/>
	<updated>2026-07-24T15:26:04Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSetTextureAnim&amp;diff=1147463</id>
		<title>LlSetTextureAnim</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSetTextureAnim&amp;diff=1147463"/>
		<updated>2011-06-24T16:52:22Z</updated>

		<summary type="html">&lt;p&gt;Flivelwitz Alsop: fixed some tiny grammar errors.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Issues/SVC-4897}}{{Issues/SVC-3925}}{{Issues/SVC-1242}}{{Issues/VWR-4018}}{{LSL_Function/negative index|true|start}}{{LSL_Function/face|face}}{{LSL_Function&lt;br /&gt;
|func_id=211&lt;br /&gt;
|func_sleep=0.0&lt;br /&gt;
|func_energy=10.0&lt;br /&gt;
|sort=SetTextureAnim&lt;br /&gt;
|func=llSetTextureAnim&lt;br /&gt;
|p1_type=integer|p1_name=mode|p1_desc=mask of Mode flags&lt;br /&gt;
|p2_type=integer|p2_name=face&lt;br /&gt;
|p3_type=integer|p3_name=sizex|p3_desc=horizontal frames (ignored for [[ROTATE]] and [[SCALE]])&lt;br /&gt;
|p4_type=integer|p4_name=sizey|p4_desc=vertical frames (ignored for [[ROTATE]] and [[SCALE]])&lt;br /&gt;
|p5_type=float|p5_name=start|p5_desc=Start position/frame number (or radians for [[ROTATE]])&lt;br /&gt;
|p6_type=float|p6_name=length|p6_desc=number of frames to display (or radians for [[ROTATE]])&lt;br /&gt;
|p7_type=float|p7_name=rate|p7_desc=frames per second (must not be zero)&lt;br /&gt;
|func_footnote=Frames are numbered from left to right, top to bottom, starting at 0.&amp;lt;br/&amp;gt;If &#039;&#039;&#039;rate&#039;&#039;&#039; is negative, it has the same effect as using the [[REVERSE]] flag.{{Footnote|Though if &#039;&#039;&#039;rate&#039;&#039;&#039; is negative and the [[REVERSE]] flag is used, they cancel each other out.}}&lt;br /&gt;
|func_desc=Animate the texture on the specified face/faces by setting the texture scale and offset.&lt;br /&gt;
|return_text&lt;br /&gt;
|spec=&lt;br /&gt;
===Frames===&lt;br /&gt;
Frames are sub-rectangles within the texture. A set of frames with 2 horizontal (&#039;&#039;&#039;sizex&#039;&#039;&#039;) and 3 vertical (&#039;&#039;&#039;sizey&#039;&#039;&#039;) means the overall texture is divided into 3 rows of 2 columns of images, each of which is a frame. llSetTextureAnim will animate across these 6 starting with the top left image and going across and down, optionally repeating. If [[SMOOTH]] is set, the frames slide smoothly from one to the next, if off, each frame is displayed in turn centered on the face.&lt;br /&gt;
|caveats=*You can only have one texture animation on a prim&lt;br /&gt;
**Calling llSetTextureAnim more than once on a prim will reset the existing animation.&lt;br /&gt;
**Calling llSetTextureAnim again with exact same values will not reset animation (a small difference in rate will suffice).&lt;br /&gt;
*You cannot combine [[ROTATE]] and [[SCALE]] flags.&lt;br /&gt;
*&#039;&#039;&#039;sizex&#039;&#039;&#039; &amp;amp; &#039;&#039;&#039;sizey&#039;&#039;&#039; are both limited to a range of 0 to 255&lt;br /&gt;
*llSetTextureAnim ,when on, shows the texture with 1 repeat in X and Y and 0 rotation and offset.&lt;br /&gt;
*Selecting and un-selecting a prim with animation will reset animation from beginning.&lt;br /&gt;
|constants={{{!}} class=&amp;quot;sortable collapsible&amp;quot; {{Prettytable|style=margin-top:0;}}&lt;br /&gt;
{{!}}-{{Hl2}}&lt;br /&gt;
! Modes&lt;br /&gt;
! title=&amp;quot;Value&amp;quot; {{!}}&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; {{!}} Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}[[ANIM_ON]]&lt;br /&gt;
{{!}}{{LSL Hex||1|chars=2}}&lt;br /&gt;
{{!}}Texture animation is on. This must be set to start the animation, cleared to stop it.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}[[LOOP]]&lt;br /&gt;
{{!}}{{LSL Hex||2|chars=2}}&lt;br /&gt;
{{!}}Loop the texture animation.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}[[REVERSE]]&lt;br /&gt;
{{!}}{{LSL Hex||4|chars=2}}&lt;br /&gt;
{{!}}Play animation in reverse direction.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}[[PING_PONG]]&lt;br /&gt;
{{!}}{{LSL Hex||8|chars=2}}&lt;br /&gt;
{{!}}Play animation going forwards, then backwards.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}[[SMOOTH]]&lt;br /&gt;
{{!}}{{LSL Hex||16|chars=2}}&lt;br /&gt;
{{!}}Slide in the X direction, instead of playing separate frames.&amp;lt;br/&amp;gt;In both [[SCALE]] and [[ROTATE]] modes, causes smooth transitions.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}[[ROTATE]]&lt;br /&gt;
{{!}}{{LSL Hex||32|chars=2}}&lt;br /&gt;
{{!}}Animate texture rotation.&amp;lt;br&amp;gt;Does not work with [[SCALE]]&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}[[SCALE]]&lt;br /&gt;
{{!}}{{LSL Hex||64|chars=2}}&lt;br /&gt;
{{!}}Animate the texture scale.&amp;lt;br&amp;gt;Does not work with [[ROTATE]]&lt;br /&gt;
{{!}}}&lt;br /&gt;
|examples=&lt;br /&gt;
This slides a texture smoothly and loops it when it gets to the end.&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetTextureAnim(ANIM_ON | SMOOTH | LOOP , ALL_SIDES, 1, 1, 1.0, 1.0, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This slides a texture smoothly in the opposite direction&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetTextureAnim(ANIM_ON | SMOOTH | LOOP , ALL_SIDES, 1, 1, 1.0, 1.0, -1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This divides a texture into 64 &amp;quot;cells&amp;quot;, 8 across, and 8 down, and flips through them, left to right, top to bottom. This is useful for cell animation.&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetTextureAnim( ANIM_ON | LOOP, ALL_SIDES, 8, 8, 0.0, 64.0, 6.4 );&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This rotates a texture counter-clockwise at 2 revolutions per second. Change the last value to -2*TWO_PI to rotate clockwise.&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetTextureAnim(ANIM_ON | SMOOTH | ROTATE | LOOP, ALL_SIDES,1,1,0, TWO_PI, 2*TWO_PI);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This scales a texture larger and smaller.&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetTextureAnim(ANIM_ON | SMOOTH | SCALE | PING_PONG | LOOP, ALL_SIDES, 1, 1, 1.0, 3.0, 2.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This turns off all texture animations&lt;br /&gt;
&amp;lt;lsl&amp;gt;llSetTextureAnim(FALSE, ALL_SIDES, 0, 0, 0.0, 0.0, 1.0);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This toggles a looping animation to make it stop at a specific frame.&lt;br /&gt;
&amp;lt;lsl&amp;gt;integer ON;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer num)&lt;br /&gt;
    {&lt;br /&gt;
          if (ON)&lt;br /&gt;
          {&lt;br /&gt;
               llSetTextureAnim(ANIM_ON | LOOP, ALL_SIDES, 1, 5, 0.0, 0.0, 1.0);&lt;br /&gt;
          }&lt;br /&gt;
          else&lt;br /&gt;
          {&lt;br /&gt;
               llSetTextureAnim(ANIM_ON | SMOOTH, ALL_SIDES, 1, 5, 5.0, 1.0, 1.0);&lt;br /&gt;
          }&lt;br /&gt;
          ON = !ON;&lt;br /&gt;
      }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llSetLinkTextureAnim]]}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes=&lt;br /&gt;
Texture animation is a property of the prim (i.e., you can remove the script that started the animation, and the prim will remember the settings anyway.) Note, though, that as of Jan 2009, texture animation is still one of the prim properties that is lost when using the rezzed in world copy method of shift-drag. Originally brought up in {{Jira|VWR-640}}, it got its own issue in [[#SVC-3925|SVC-3925]]&lt;br /&gt;
&lt;br /&gt;
An online-tool for rough and ready conversion of moving gifs to animated textures is here: http://www.peregrinesalon.com/anim/ (link valid as of August 27, 2010.)&lt;br /&gt;
|cat1=Media&lt;br /&gt;
|cat2=Effects&lt;br /&gt;
|cat3=Texture&lt;br /&gt;
|cat4=Video&lt;br /&gt;
|cat5&lt;br /&gt;
|cat6&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Flivelwitz Alsop</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=On_rez&amp;diff=1114453</id>
		<title>On rez</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=On_rez&amp;diff=1114453"/>
		<updated>2010-11-26T03:14:10Z</updated>

		<summary type="html">&lt;p&gt;Flivelwitz Alsop: fixed stupid grammar mistake, and the sentence is unclear anyway - &amp;quot;if the state_entry has not be(en) run prior.&amp;quot; Run prior to what???&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Event&lt;br /&gt;
|event_id=27|event_delay|event=on_rez&lt;br /&gt;
|p1_type=integer|p1_name=start_param|p1_desc=parameter supplied to [[llRezObject]] or [[llRezAtRoot]]&lt;br /&gt;
|event_desc=Triggered when an object is rezzed (by script or by user). Also triggered in attachments when a user logs in, or when the object is [[attach]]ed from inventory.&lt;br /&gt;
|event_footnote=&#039;&#039;&#039;start_param&#039;&#039;&#039; is always zero when an object is not rezzed by [[llRezObject]] or [[llRezAtRoot]]. &amp;lt;br/&amp;gt;&#039;&#039;&#039;start_param&#039;&#039;&#039; is available at any subsequent time by calling [[llGetStartParameter]] (unless it has been overridden by [[llRemoteLoadScriptPin]]).&lt;br /&gt;
|constants&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=*If an object is rezzed by another object then the [[object_rez]] event in the parent object does not trigger at the same time as the on_rez event in the child object.&lt;br /&gt;
|examples=&amp;lt;lsl&amp;gt;default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer start_param)&lt;br /&gt;
    {&lt;br /&gt;
        // Restarts the script every time the object is rezzed&lt;br /&gt;
        llResetScript(); &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;
{{LSL DefineRow||[[object_rez]]|triggered when this object rezzes an object from inventory}}&lt;br /&gt;
{{LSL DefineRow||[[state_entry]]|triggered during script startup, reset and state change}}&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetStartParameter]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llRezObject]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llRezAtRoot]]|}}&lt;br /&gt;
|also_articles&lt;br /&gt;
|also_footer&lt;br /&gt;
|notes=&lt;br /&gt;
===[[state_entry]] &amp;amp; [[on_rez]]===&lt;br /&gt;
[[state_entry]] will be triggered prior to [[on_rez]] if [[state_entry]] has not been run prior.&lt;br /&gt;
&lt;br /&gt;
===[[on_rez]] &amp;amp; [[attach]]===&lt;br /&gt;
[[on_rez]] will be triggered prior to [[attach]] when attaching from inventory or during login.&lt;br /&gt;
&lt;br /&gt;
===[[on_rez]] &amp;amp; [[while]]===&lt;br /&gt;
[[on_rez]] will &#039;&#039;&#039;not&#039;&#039;&#039; be triggered if the script was looping when last rezzed. (same with [[attach]])&lt;br /&gt;
|mode&lt;br /&gt;
|deprecated&lt;br /&gt;
|cat1=Script&lt;br /&gt;
|cat2=Rez&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Flivelwitz Alsop</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlListen&amp;diff=284303</id>
		<title>LlListen</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlListen&amp;diff=284303"/>
		<updated>2009-03-19T16:25:59Z</updated>

		<summary type="html">&lt;p&gt;Flivelwitz Alsop: fixed some spelling errors&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Issues/SVC-3170}}{{LSL_Function&lt;br /&gt;
|func=llListen&lt;br /&gt;
|sort=Listen&lt;br /&gt;
|func_id=25|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|return_type=integer&lt;br /&gt;
|return_text=that can be used to [[llListenControl|deactivate]] or [[llListenRemove|remove]] the listen.&lt;br /&gt;
|p1_type=integer|p1_name=channel|p1_desc=any valid integer (-2147483648 through 2147483647).&lt;br /&gt;
|p2_type=string|p2_name=name|p2_desc=filter for specific prim or avatar name&lt;br /&gt;
|p3_type=key|p3_name=id|p3_desc=filter for specific prim/avatar [[UUID]].&lt;br /&gt;
|p4_type=string|p4_name=msg|p4_desc=filter for specific chat message&lt;br /&gt;
|func_desc=Sets a [http://foldoc.org/index.cgi?query=callback callback] for &#039;&#039;&#039;msg&#039;&#039;&#039; on &#039;&#039;&#039;channel&#039;&#039;&#039; from &#039;&#039;&#039;name&#039;&#039;&#039; and &#039;&#039;&#039;id&#039;&#039;&#039;.&lt;br /&gt;
|func_footnote=If &#039;&#039;&#039;msg&#039;&#039;&#039;, &#039;&#039;&#039;name&#039;&#039;&#039; or &#039;&#039;&#039;id&#039;&#039;&#039; are blank they are not used to filter incoming messages.&lt;br /&gt;
If &#039;&#039;&#039;id&#039;&#039;&#039; is an invalid key or a [[NULL_KEY|null key]], it is considered blank.&amp;lt;br/&amp;gt;&lt;br /&gt;
|spec=For the [[listen]] [[event]] to be triggered it must first match the criteria set forth by the filters; only when all the criteria have been met is a listen event generated. First the message must have been transmitted on channel &#039;&#039;&#039;channel&#039;&#039;&#039;. If &#039;&#039;&#039;name&#039;&#039;&#039; is set then the speaker&#039;s name must match &#039;&#039;&#039;name&#039;&#039;&#039; exactly. If &#039;&#039;&#039;id&#039;&#039;&#039; is a valid, non-[[NULL_KEY|null]] key then the speaker&#039;s key must be equivalent. If &#039;&#039;&#039;msg&#039;&#039;&#039; is set then the spoken message must match &#039;&#039;&#039;msg&#039;&#039;&#039; exactly.&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llListenRemove]]|Removes a listen}}&lt;br /&gt;
{{LSL DefineRow||[[llListenControl]]|Enables/Disables a listen}}&lt;br /&gt;
{{LSL DefineRow||[[llWhisper]]|Sends chat limited to 10 meters}}&lt;br /&gt;
{{LSL DefineRow||[[llSay]]|Sends chat limited to 20 meters}}&lt;br /&gt;
{{LSL DefineRow||[[llShout]]|Sends chat limited to 100 meters}}&lt;br /&gt;
{{LSL DefineRow||[[llRegionSay]]|Sends chat limited current sim}}&lt;br /&gt;
|also_events={{LSL DefineRow||[[listen]]|}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes=*Avoid channel 0 and set name or id where possible to avoid [http://rpgstats.com/wiki/index.php?title=Lag Lag]. llListen(0,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;) can be extremely laggy as it listens to all chat from everyone in chat range and so it should be avoided at all cost.&lt;br /&gt;
&lt;br /&gt;
*In November 2007, Kelly Linden offered [https://lists.secondlife.com/pipermail/secondlifescripters/2007-November/001993.html this explanation] to help scripters plan listeners more efficiently:&lt;br /&gt;
:#Chat that is said gets added to a history.&lt;br /&gt;
:#A script that is running and has a listen event will ask the history for a chat message during its slice of run time.&lt;br /&gt;
:# When the script asks the history for a chat message the checks are done in this order:&lt;br /&gt;
:#* channel&lt;br /&gt;
:#* self chat (prims can&#039;t hear themselves)&lt;br /&gt;
:#* distance/RegionSay&lt;br /&gt;
:#* key&lt;br /&gt;
:#* name&lt;br /&gt;
:#* message&lt;br /&gt;
:# If a message is found then a listen event is added to the event queue.&lt;br /&gt;
:&lt;br /&gt;
:The key/name/message checks only happen at all if those are specified of course.&lt;br /&gt;
:&lt;br /&gt;
:So, the most efficient way is llRegionSay on a rarely used channel.&lt;br /&gt;
&lt;br /&gt;
|constants={{LSL Constants/Chat}}&lt;br /&gt;
|caveats=*On [[state]] change or [[llResetScript|script reset]] all listens are removed automatically.&lt;br /&gt;
**A state change can be used as a shortcut to releasing listens.&lt;br /&gt;
*Only 65 listens can simultaneously be open in any single script.&lt;br /&gt;
**If this number is exceeded &#039;&#039;Script run-time error&#039;&#039; and &#039;&#039;Too Many Listens&#039;&#039; errors occur.&lt;br /&gt;
*Chat on negative channel numbers cannot be generated by the client except with dialog boxes.&lt;br /&gt;
**This makes it ideal for object-to-object communications.&lt;br /&gt;
**This may just be an artificial limitation placed on the client and not the underlying protocol.&lt;br /&gt;
*Once a listen is registered its filters cannot be updated, if the listen is registered to [[llGetOwner]], the listen will remain registered to the old owner upon owner change.&lt;br /&gt;
**[[CHANGED_OWNER|Owner change]] can be detected with the [[changed]] event.&lt;br /&gt;
**To work around this the old listen will need to be closed and a new one opened for the new owner.&lt;br /&gt;
*A prim cannot hear/listen to chat it generates. It can, however, hear a linked prim.&lt;br /&gt;
|examples=&lt;br /&gt;
Trivial example to listen to any chat from the object owner and respond once. To reduce lag and avoid spamming surrounding users, it is vastly preferable to listen on channels other than 0 and to trigger the listen event by chatting on an alternative channel such as &#039;/5 hello&#039;.&lt;br /&gt;
&amp;lt;lsl&amp;gt;// says beep to owner the first time owner says something in main chat;&lt;br /&gt;
integer listen_handle;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {   // Registers the listen to the owner of the object at the moment of the call.&lt;br /&gt;
        // This does not automatically update when the owner changes.&lt;br /&gt;
        // Change 0 to another positive number to listen for &#039;/5 hello&#039; style of chat.&lt;br /&gt;
        listen_handle = llListen(0, &amp;quot;&amp;quot;, llGetOwner(), &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    listen( integer channel, string name, key id, string message )&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(&amp;quot;beep&amp;quot;);&lt;br /&gt;
        // Stop listening until script is reset&lt;br /&gt;
        llListenRemove(listen_handle);&lt;br /&gt;
    }&lt;br /&gt;
    on_rez(integer param)&lt;br /&gt;
    {   // Triggered when the object is rezzed, like after the object has been sold from a vendor&lt;br /&gt;
        llResetScript();//By resetting the script on rez forces the listen to re-register.&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer mask)&lt;br /&gt;
    {   // Triggered when the object containing this script changes owner.&lt;br /&gt;
        if(mask &amp;amp; CHANGED_OWNER)&lt;br /&gt;
        {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|cat1=Communications&lt;br /&gt;
|cat2=Chat&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Flivelwitz Alsop</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSensorRepeat&amp;diff=209383</id>
		<title>LlSensorRepeat</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSensorRepeat&amp;diff=209383"/>
		<updated>2009-01-24T21:25:28Z</updated>

		<summary type="html">&lt;p&gt;Flivelwitz Alsop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function/uuid|id}}{{#vardefine:constants_nb|{{LSL Constants/Sensing|type}}}}{{LSL_Function&lt;br /&gt;
|func=llSensorRepeat&lt;br /&gt;
|sort=SensorRepeat&lt;br /&gt;
|func_id=29|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|p1_type=string|p1_name=name|p1_desc=Object or avatar name&lt;br /&gt;
|p2_type=key|p2_name=id&lt;br /&gt;
|p3_type=integer|p3_name=type|p3_desc=mask ({{#var:AGENT}}, {{#var:ACTIVE}}, {{#var:PASSIVE}}, and/or {{#var:SCRIPTED}})|p3_hover=mask (AGENT, ACTIVE, PASSIVE, and/or SCRIPTED)&lt;br /&gt;
|p4_type=float|p4_name=range|p4_desc=range 0.0 to 96.0m&lt;br /&gt;
|p5_type=float|p5_name=arc|p5_desc=the max angle between the local x-axis of the prim and detectable objects, range 0.0 to {{#var:PI}}|p5_hover=the max angle between the local x-axis of the prim and detectable objects, range 0.0 to PI&lt;br /&gt;
|p6_type=float|p6_name=rate|p6_desc=How often a [[sensor]]/[[no_sensor]] will be queued.&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;
&lt;br /&gt;
See: [http://www.lslwiki.net/lslwiki/wakka.php?wakka=llSensor llSensor] for an excellent explanation of &#039;&#039;&#039;arc&#039;&#039;&#039;.&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 and repeats every &#039;&#039;&#039;rate&#039;&#039;&#039; seconds. It does not perform the first scan until &#039;&#039;&#039;rate&#039;&#039;&#039; seconds have passed.&lt;br /&gt;
|return_text&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=*The repeat of the sensor event is adversely affected by [[llGetRegionTimeDilation|time dilation]] (lag).&lt;br /&gt;
*When a [[sensor]] event is queued, it dequeues all other sensor events in the queue.&lt;br /&gt;
*The script must have a [[sensor]] event, without it [[no_sensor]] will not be triggered. An empty [[sensor]] event is enough to satisfy this condition and cause [[no_sensor]] to be triggered.&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;lsl&amp;gt;// Written by Steamy Latte.&lt;br /&gt;
// Scans every 30 seconds for visitors within 10 meters.&lt;br /&gt;
// Reports new visitors to object owner when she is in range.&lt;br /&gt;
&lt;br /&gt;
string AllAgents;&lt;br /&gt;
string OwnerName;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // arc=PI is a sphere, you could look more narrowly in the direction object is facing with PI/2, PI/4 etc.&lt;br /&gt;
        // don&#039;t repeat this too often to avoid lag.&lt;br /&gt;
        llSensorRepeat(&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, AGENT, 10.0, PI, 30.0);&lt;br /&gt;
    }&lt;br /&gt;
    sensor(integer num_detected)&lt;br /&gt;
    {&lt;br /&gt;
        string thisAgent = &amp;quot;&amp;quot;;&lt;br /&gt;
        integer agentNum;&lt;br /&gt;
        for (agentNum=0; agentNum&amp;lt;num_detected; agentNum++)&lt;br /&gt;
        {&lt;br /&gt;
            key thisKey = llDetectedKey(agentNum);&lt;br /&gt;
            string thisAgent = llDetectedName(agentNum);&lt;br /&gt;
            if (thisKey == llGetOwner())&lt;br /&gt;
            {&lt;br /&gt;
                if (AllAgents != &amp;quot;&amp;quot;)&lt;br /&gt;
                {&lt;br /&gt;
                    llOwnerSay(&amp;quot;We&#039;ve had the following visitors:&amp;quot; + AllAgents);&lt;br /&gt;
                    AllAgents = &amp;quot;&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            else if (llSubStringIndex(AllAgents+&amp;quot;\n&amp;quot;, &amp;quot;\n&amp;quot;+thisAgent+&amp;quot;\n&amp;quot;) &amp;lt; 0)&lt;br /&gt;
            {&lt;br /&gt;
                AllAgents = AllAgents + &amp;quot;\n&amp;quot; + thisAgent;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llSensor]]| Runs a sensor once}}&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=[http://rpgstats.com/wiki/index.php?title=Lag Lag tip]: Consider [[llVolumeDetect]] as a less resource intensive alternative to llSensorRepeat in many cases.&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>Flivelwitz Alsop</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=PRIM_TEMP_ON_REZ&amp;diff=209283</id>
		<title>PRIM TEMP ON REZ</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=PRIM_TEMP_ON_REZ&amp;diff=209283"/>
		<updated>2009-01-24T19:44:48Z</updated>

		<summary type="html">&lt;p&gt;Flivelwitz Alsop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{{#if:&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:temponrez_const|{{LSL Const|PRIM_TEMP_ON_REZ|integer|4|c=Used to {{GetSet|{{{1|}}}|get|set|/}} the objects Temporary status}}}}&lt;br /&gt;
&lt;br /&gt;
}}&amp;lt;/onlyinclude&amp;gt;{{#if:&lt;br /&gt;
&lt;br /&gt;
{{LSL_Function/boolean|boolean}}&lt;br /&gt;
&lt;br /&gt;
}}{{LSL Constant&lt;br /&gt;
|name=PRIM_TEMP_ON_REZ&lt;br /&gt;
|type=integer&lt;br /&gt;
|value=4&lt;br /&gt;
|desc=Used to get or set the object&#039;s temporary status. It lives until the next garbage collection cycle (about 1 minute). Does not count against prim limits. There are limits to the number of temporary objects that can exist in a region and the garbage collector may run sooner than expected.&lt;br /&gt;
|pa={{LSL Constant/List|i_front=[&amp;amp;#32;{{#var:temponrez_const}},&amp;amp;#32;|i_end=&amp;amp;nbsp;]&lt;br /&gt;
|text=When used with [[llSetPrimitiveParams]] &amp;amp; [[llSetLinkPrimitiveParams]]&lt;br /&gt;
|i1_type=integer|i1_name=boolean&lt;br /&gt;
|toc=llSetPrimitiveParams&lt;br /&gt;
}}&lt;br /&gt;
|pb={{LSL Constant/List|i_front=[[llGetPrimitiveParams]]([&amp;amp;nbsp;{{#var:temponrez_const}}|i_end=&amp;amp;nbsp;]);|&lt;br /&gt;
|r_front=Returns the list [&amp;amp;nbsp;|r_end=&amp;amp;nbsp;]&lt;br /&gt;
|text&lt;br /&gt;
|r1_type=integer|r1_name=boolean&lt;br /&gt;
|toc=llGetPrimitiveParams&lt;br /&gt;
}}&lt;br /&gt;
|examples&lt;br /&gt;
|constants=&lt;br /&gt;
|functions=&lt;br /&gt;
{{LSL DefineRow||[[llSetPrimitiveParams]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llSetLinkPrimitiveParams]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetPrimitiveParams]]|}}&lt;br /&gt;
|events=&lt;br /&gt;
{{LSL DefineRow||[[changed]]|}}&lt;br /&gt;
|location&lt;br /&gt;
|history=Before SL 1.9 objects would only be recognized by the garbage collector as temporary if they were rezzed with the temporary status already set. Setting the attribute only effected the object the next time it was rezzed. With 1.9 this was changed so that changing this status flag effected the object immediately. The constant name however was not changed to reflect this functionality change.&lt;br /&gt;
|cat1=Prim&lt;br /&gt;
|cat2=Status&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Flivelwitz Alsop</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=PRIM_TEMP_ON_REZ&amp;diff=209263</id>
		<title>PRIM TEMP ON REZ</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=PRIM_TEMP_ON_REZ&amp;diff=209263"/>
		<updated>2009-01-24T19:35:43Z</updated>

		<summary type="html">&lt;p&gt;Flivelwitz Alsop: changed &amp;quot;then&amp;quot; to &amp;quot;than&amp;quot; as it should be, this is not your personal slangy talker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{{#if:&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:temponrez_const|{{LSL Const|PRIM_TEMP_ON_REZ|integer|4|c=Used to {{GetSet|{{{1|}}}|get|set|/}} the objects Temporary status}}}}&lt;br /&gt;
&lt;br /&gt;
}}&amp;lt;/onlyinclude&amp;gt;{{#if:&lt;br /&gt;
&lt;br /&gt;
{{LSL_Function/boolean|boolean}}&lt;br /&gt;
&lt;br /&gt;
}}{{LSL Constant&lt;br /&gt;
|name=PRIM_TEMP_ON_REZ&lt;br /&gt;
|type=integer&lt;br /&gt;
|value=4&lt;br /&gt;
|desc=Used to get or set the objects temporary status. It lives until the next garbage collection cycle (about 1 minute). Does not count against prim limits. There are limits to the number of temporary objects that can exist in a region and the garbage collector may run sooner than expected.&lt;br /&gt;
|pa={{LSL Constant/List|i_front=[&amp;amp;#32;{{#var:temponrez_const}},&amp;amp;#32;|i_end=&amp;amp;nbsp;]&lt;br /&gt;
|text=When used with [[llSetPrimitiveParams]] &amp;amp; [[llSetLinkPrimitiveParams]]&lt;br /&gt;
|i1_type=integer|i1_name=boolean&lt;br /&gt;
|toc=llSetPrimitiveParams&lt;br /&gt;
}}&lt;br /&gt;
|pb={{LSL Constant/List|i_front=[[llGetPrimitiveParams]]([&amp;amp;nbsp;{{#var:temponrez_const}}|i_end=&amp;amp;nbsp;]);|&lt;br /&gt;
|r_front=Returns the list [&amp;amp;nbsp;|r_end=&amp;amp;nbsp;]&lt;br /&gt;
|text&lt;br /&gt;
|r1_type=integer|r1_name=boolean&lt;br /&gt;
|toc=llGetPrimitiveParams&lt;br /&gt;
}}&lt;br /&gt;
|examples&lt;br /&gt;
|constants=&lt;br /&gt;
|functions=&lt;br /&gt;
{{LSL DefineRow||[[llSetPrimitiveParams]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llSetLinkPrimitiveParams]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetPrimitiveParams]]|}}&lt;br /&gt;
|events=&lt;br /&gt;
{{LSL DefineRow||[[changed]]|}}&lt;br /&gt;
|location&lt;br /&gt;
|history=Before SL 1.9 objects would only be recognized by the garbage collector as temporary if they were rezzed with the temporary status already set. Setting the attribute only effected the object the next time it was rezzed. With 1.9 this was changed so that changing this status flag effected the object immediately. The constant name however was not changed to reflect this functionality change.&lt;br /&gt;
|cat1=Prim&lt;br /&gt;
|cat2=Status&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Flivelwitz Alsop</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlLoopSound&amp;diff=144583</id>
		<title>LlLoopSound</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlLoopSound&amp;diff=144583"/>
		<updated>2008-11-17T20:10:12Z</updated>

		<summary type="html">&lt;p&gt;Flivelwitz Alsop: Respelled the obvious misspelling &amp;quot;indefinatly&amp;quot; to &amp;quot;indefinitely&amp;quot; as this is an encyclopedia and not a personal blog site for &amp;quot;cool spellings&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function/inventory|sound|uuid=true|type=sound|volume=volume}}{{LSL_Function&lt;br /&gt;
|func_id=87|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llLoopSound&lt;br /&gt;
|p1_type=string|p1_name=sound&lt;br /&gt;
|p2_type=float|p2_name=volume&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc=Plays attached &#039;&#039;&#039;sound&#039;&#039;&#039; looping indefinitely at &#039;&#039;&#039;volume&#039;&#039;&#039;&lt;br /&gt;
|return_text&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llLoopSound(&amp;quot;ambient.wav&amp;quot;, 0.5);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llLoopSoundSlave]]|3=Plays a sound {{HoverText|attached|The sound moves with the prim}} indefinitely.}}&lt;br /&gt;
{{LSL DefineRow||[[llPlaySound]]|3=Plays a sound.}}&lt;br /&gt;
{{LSL DefineRow||[[llTriggerSound]]|3=Plays a sound {{HoverText|unattached|The sound does not moves with the prim}}.}}&lt;br /&gt;
{{LSL DefineRow||[[llTriggerSoundLimited]]}}&lt;br /&gt;
{{LSL DefineRow||[[llStopSound]]|3=Stops playing a looped sound.}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|sort=LoopSound&lt;br /&gt;
|cat1=Sound&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Flivelwitz Alsop</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Template:LSL_Function/permission&amp;diff=91018</id>
		<title>Template:LSL Function/permission</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Template:LSL_Function/permission&amp;diff=91018"/>
		<updated>2008-09-12T19:10:49Z</updated>

		<summary type="html">&lt;p&gt;Flivelwitz Alsop: fixed the irritating and obvious spelling mistakes: &amp;quot;then&amp;quot; when you mean &amp;quot;than&amp;quot;, and &amp;quot;loose&amp;quot; when you mean &amp;quot;lose&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#if:&lt;br /&gt;
{{#vardefine:header_footnote|{{#var:header_footnote}}{{#if: {{{1|}}}| Requires the [[{{{1}}}]] permission{{#ifeq:{{{grant|anyone}}}|anyone||, granted by {{{grant|anyone}}},}} to run.}}}}&lt;br /&gt;
{{#vardefine:caveats|{{#var:caveats}}{{#if: {{{1|&amp;lt;noinclude&amp;gt;*&amp;lt;/noinclude&amp;gt;}}}|&lt;br /&gt;
* Do not depend upon the auto-grant status of permissions. &#039;&#039;&#039;Always&#039;&#039;&#039; use the [[run_time_permissions]] event.&lt;br /&gt;
* If the script lacks the permission [[{{{1}}}]], the script will shout an error on {{LSL Const|DEBUG_CHANNEL|integer|2147483647|hex=0x7FFFFFFF}} and the operation fails (but the script continues to run).{{#ifeq:{{{grant|anyone&amp;lt;noinclude&amp;gt;*&amp;lt;/noinclude&amp;gt;}}}|anyone||&lt;br /&gt;
* If [[{{{1}}}]] is granted by anyone other than {{{grant|anyone}}}, then when the function is called an error will be shouted on {{LSL Const|DEBUG_CHANNEL|integer|2147483647|hex=0x7FFFFFFF}}.}}}}&lt;br /&gt;
* Once the [[{{{1}}}]] permission is granted there is no way to revoke it. The script will only lose the permission if it is reset or the object derezzed (deleted, detached, or taken).}}&lt;br /&gt;
{{#vardefine:also_events|{{#var:also_events}}&lt;br /&gt;
{{LSL DefineRow||[[run_time_permissions]]|Permission receiving event}}}}&lt;br /&gt;
{{#vardefine:also_functions|{{#var:also_functions}}&lt;br /&gt;
{{LSL DefineRow||[[llGetPermissions]]|Get the permissions granted}}&lt;br /&gt;
{{LSL DefineRow||[[llGetPermissionsKey]]|Get the agent who granted permissions}}&lt;br /&gt;
{{LSL DefineRow||[[llRequestPermissions]]|Request permissions}}}}&lt;br /&gt;
{{#vardefine:also_articles|{{#var:also_articles}}&lt;br /&gt;
{{LSL DefineRow||[[:Category:LSL Permissions/Script|Script permissions]]|}}}}&lt;br /&gt;
}}&amp;lt;includeonly&amp;gt;{{#ifeq:{{{mode|}}}{{#var:mode}}|request||[[Category:LSL Requires Permissions]]}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{| {{Prettytable}}&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
|header_footnote&lt;br /&gt;
|{{#var:header_footnote}}&lt;br /&gt;
|-&lt;br /&gt;
|caveats&lt;br /&gt;
|{{#var:caveats}}&lt;br /&gt;
|-&lt;br /&gt;
|also_events&lt;br /&gt;
|&lt;br /&gt;
{|&lt;br /&gt;
{{#var:also_events}}&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
|also_functions&lt;br /&gt;
|&lt;br /&gt;
{|&lt;br /&gt;
{{#var:also_functions}}&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
|also_articles&lt;br /&gt;
|&lt;br /&gt;
{|&lt;br /&gt;
{{#var:also_articles}}&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Flivelwitz Alsop</name></author>
	</entry>
</feed>