<?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=Allen+Kerensky</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=Allen+Kerensky"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/Allen_Kerensky"/>
	<updated>2026-06-20T23:35:41Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky&amp;diff=1176885</id>
		<title>User:Allen Kerensky</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky&amp;diff=1176885"/>
		<updated>2013-02-21T17:26:18Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Allen Kerensky ==&lt;br /&gt;
[[Image:AKBackground.png|Allen Kerensky]]&lt;br /&gt;
&lt;br /&gt;
[http://world.secondlife.com/resident/aa4fa268-fb05-45a5-8d9d-dc77a1ab9437 Allen Kerensky] writes Linden and OpenSim scripts, science-fiction screenplays, creates &#039;&#039;machinima&#039;&#039; (machine cinema) in collaboration with [http://world.secondlife.com/resident/c04e34c3-2bc4-4bb9-bff6-72e8d142aa6b Moebius Overdrive], and roleplays in the multiple SecondLife regions and OpenSimulator grids.&lt;br /&gt;
&lt;br /&gt;
=== Connections ===&lt;br /&gt;
* [http://twitter.com/AllenKerensky Allen Kerensky @ Twitter] &lt;br /&gt;
* [http://plurk.com/AllenKerensky Allen Kerensky @ Plurk]&lt;br /&gt;
* [http://www.myrl.com/myrl/allen-kerensky/avatar/2031 Allen Kerensky @ MyRL]&lt;br /&gt;
&lt;br /&gt;
=== Myriad RPG System and Myriad Lite ===&lt;br /&gt;
Note: Myriad RPG development has moved to OpenSimulator.&lt;br /&gt;
&lt;br /&gt;
My scripted virtual world role-playing game prototype:&lt;br /&gt;
* [[User:Allen_Kerensky/Myriad_Lite_Preview_4|Myriad Lite Preview 4 September 2011]]&lt;br /&gt;
* [[User:Allen_Kerensky/Myriad_Lite_Preview_3|Myriad Lite Preview 3 August 2011]]&lt;br /&gt;
* [[User:Allen_Kerensky/Myriad_Lite_Preview_2|Myriad Lite Preview 2 June 2011]]&lt;br /&gt;
* [[User:Allen_Kerensky/Myriad_Preview|Myriad Lite Preview 1 June 2011]]&lt;br /&gt;
&lt;br /&gt;
* Myriad Lite in the news? [http://blog.nalates.net/2011/08/22/second-life-game-scripts/ SecondLife Game Scripts]&lt;br /&gt;
&lt;br /&gt;
=== September 2009 News ===&lt;br /&gt;
I have joined [[Baroun Tardis]] and [[Joelle Tardis]] as part of the House Tardis Creativity System (HTCS) development team, developing a next-generation roleplaying and combat meter for SecondLife, from scratch. More news soon!&lt;br /&gt;
&lt;br /&gt;
=== April 2009 News ===&lt;br /&gt;
Players and the owner of the roleplaying sim in SecondLife is handed a stack of DMCA notices and given 2 business days to remove all DUNE-related names from SecondLife... some of the articles written about the event I now remember as The Great Renaming:&lt;br /&gt;
* [http://www.myrl.com/blog/allen-kerensky-dune-related-lawyers-issue-cease-and-desist-on-fans-again/post/2124/2771/19434 DUNE-Related Lawyers Issue Cease and Desist On Fans (Again) @ MyRL]&lt;br /&gt;
* [http://www.massively.com/2009/04/09/infringers-of-dune-dune-role-players-shut-down-by-herbert-estat/ Infringers of Dune @ Massively]&lt;br /&gt;
* [http://nwn.blogs.com/nwn/2009/04/enforcers-of-dune.html Enforcers of Dune @ New World Notes]&lt;br /&gt;
* [http://www.boingboing.net/2009/04/09/cold-dead-hand-of-fr.html Cold Dead Hand of Frank Herbert @ BoingBoing]&lt;br /&gt;
* [http://kotaku.com/5207986/lawyer+mans-of-dune-smack-down-second-life-arrakis Lawyer Mans of Dune Smackdown SecondLife Arrakis @ Kotaku]&lt;br /&gt;
&lt;br /&gt;
=== April 2008 Interview ===&lt;br /&gt;
&#039;&#039;&#039;an interview with machinima maker Allen Kerensky&#039;&#039;&#039; posted to [http://orange-island.com/ Orange Island] by [[User:Yesterday Demain|Yesterday Demain]] on Thursday May 1, 2008, from an interview conducted in-world on Thursday April 17, 2008 by [[User:Natty Foggarty|Natty Foggarty]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Who is Allen Kerensky?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I am part of a team, with Moebius Overdrive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is your background?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Buhbuhcuh Fairchild dared us to do it. It was fun, so we kept on.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How would you define your work?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Impulsive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What gear &amp;amp; software would you recommend for machinima?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use the tools that work for you. Try as many as you can lay your hands on, in real projects, preferably side by side, and develop your own toolchain that you are comfortable with for each step in the pipeline. This also helps for future projects to know which tool might fit those projects best, or how to design around harder to work parts of various tools in your pipeline. Personally, I run from Fedora Linux [http://fedorproject.org], and use free/open source almost exclusively, and hoping nVidia will open source as much of their driver as possible so I can run completely from open source. Open source means you can see exactly what it does, how it does, and make changes if you want. That’s the kind of software I recommend for anything.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Which machinima communities / sources do you follow?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
None. Why chase after others at all when you can follow your own vision. If someone follows you, great, be willing to help them. This is why I would rather teach, or do, than talk about myself and machinima in general.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What are your favorite SL Machinima pieces?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I am jealous of “Better Life” [http://machinima.com/film/view&amp;amp;id=2204] by Robbie Wright because he did everything I ever wanted to do with machinima before I thought to do it, in this one film. I am also jealous of [[User:Aimee Weber|Aimee Weber]] pieces like “Tour of the Solar System” [http://machinima.com/film/view&amp;amp;id=2072] that nail the true power of machinima for educational and other inspiring uses, so elegantly.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Do you have a “machinima trick” you’d like to share ?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The main trick is entirely mental. You have to WANT to step outside of your comfort zone, ignore the fact that you are beating software into delivering your vision even when it doesn’t want to, and accept the challenge of getting to the finish despite the aggravation. Just like real life. You can’t do it, if you don’t try.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What’s on your machinima-made-easier wishlist?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Everyone always says facial animation, which would help a lot of folks who make movies that need faces, so I agree. I like robots more, which don’t need faces, so my personal choice is to incorporate Celtx [http://celtx.com], and its Tadpole extensions to Mozilla, into the browser built into the Viewer. The client is open source, so it should be possible, but I am not that much of a C++ programmer myself.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What are your upcoming projects?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ed Wood Film Festival [http://edwood.moomoney.net] 2008?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Website(s)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Moebius Overdrive&#039;s Lunadude.com [http://www.lunadude.com/]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Video sites where your films can be seen (URLs):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Archives - Blip.TV [http://lunadude.blip.tv/posts?view=archive]&lt;br /&gt;
&lt;br /&gt;
START (2006) - Machinima.com [http://machinima.com/film/view?id=2000]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SL Locations featuring contents you made:&#039;&#039;&#039;&lt;br /&gt;
( Note: the following sim disbanded, text maintained below as part of the original interview article - AK. )&lt;br /&gt;
Tabletop Gamer’s Space, Old Town (194, 87, 36) [http://world.secondlife.com/place/0253abd1-51a9-1389-5d88-025c56da57e9] [http://slurl.com/secondlife/Old%20Town/188/75/32/?img=http%3A//secondlife.com/app/image/bf276327-501c-cbab-580f-078e32805a9a/2&amp;amp;title=Tabletop%20Gamer%27s%20Space] is where I setup my experimental table to play pen-and-paper RPGs using this as a virtual tabletop.&lt;br /&gt;
&lt;br /&gt;
-- original available at Orange Island [http://www.orange-island.com/?p=384]&lt;br /&gt;
&lt;br /&gt;
=== Filmography ===&lt;br /&gt;
* [http://lunadude.blip.tv/file/1366744 &#039;&#039;&#039;Mad Science Film Festival&#039;&#039;&#039; (2008)]&lt;br /&gt;
* [http://lunadude.blip.tv/file/514563 &#039;&#039;&#039;It Came From The Origin of Where Bad Things Come From&#039;&#039;&#039; (2007)]&lt;br /&gt;
** Winner, 2nd place at 3rd Annual Ed Wood Film Festival, 2007.&lt;br /&gt;
* [http://lunadude.blip.tv/file/514577 &#039;&#039;&#039;A Zombie Stole My Heart&#039;&#039;&#039; (2006)]&lt;br /&gt;
** Winner: Worst Film, 2nd Annual Ed Wood Film Festival, 2006.&lt;br /&gt;
* [http://lunadude.blip.tv/file/860797/ &#039;&#039;&#039;SekretMenuz&#039;&#039;&#039; (2006)]&lt;br /&gt;
** SL Community Gathering 2006 introduction film.&lt;br /&gt;
** Best story award for Take5 Festival, August 2006.&lt;br /&gt;
* [http://lunadude.blip.tv/file/636770 &#039;&#039;&#039;START&#039;&#039;&#039; (2006)]&lt;br /&gt;
** Critically acclaimed steampunk compared to Isaac Asimov at machinima.com.&lt;br /&gt;
* [http://lunadude.blip.tv/file/514585 &#039;&#039;&#039;Scream In The Dark of the Night&#039;&#039;&#039; (2005)]&lt;br /&gt;
** Winner: Worst Acting and Worst Story, 1st Annual Ed Wood Film Festival, 2005.&lt;br /&gt;
** Featured on the SecondLife homepage for more than a year afterwards.&lt;br /&gt;
&lt;br /&gt;
=== Crew Credits ===&lt;br /&gt;
* Story developer&lt;br /&gt;
* Screenwriter&lt;br /&gt;
* Voice actor&lt;br /&gt;
* Avatar actor&lt;br /&gt;
* Music and sound FX coordination&lt;br /&gt;
* LSL scripting&lt;br /&gt;
* Final editing&lt;br /&gt;
&lt;br /&gt;
=== Affiliations ===&lt;br /&gt;
* [[Alt-Zoom Studios]], [[Lukanida]] (founding contributor since its inception in September, 2005) - Update: Lukanida fell off of the grid. Sadness.&lt;br /&gt;
* MachiniMafia - now disbanded.&lt;br /&gt;
&lt;br /&gt;
=== Tips ===&lt;br /&gt;
* Resize your your SL Viewer to NTSC or PAL standard resolution before recording, using the Edit Preferences -&amp;gt; Graphics -&amp;gt; Window Size drop down.&lt;br /&gt;
* Enable Advanced Menu with CTRL-ALT-SHIFT-D&lt;br /&gt;
* Use Advanced Menu -&amp;gt; Debug Settings -&amp;gt; Play Typing Anim -&amp;gt; FALSE to stop people from adding typing sounds to your captures.&lt;br /&gt;
** Note: Newer SL Viewers have an Edit Preference for this now.&lt;br /&gt;
* Linux users can use xmodmap -e &amp;quot;keycode 67 = F1 F1&amp;quot; to stop Linux from switching to text console when pressing CTRL-ALT-F1. &lt;br /&gt;
** xmodmap -e &amp;quot;keycode 67 = F1 XF86_Switch_VT_1&amp;quot; to restore normal Linux behavior&lt;br /&gt;
* Parcel Owners can build huge video walls to use as easily selectable backdrops without requiring you to pay to upload tons of textures.&lt;br /&gt;
** Project quicktime on the media texture as a form of animated rear-projection.&lt;br /&gt;
** Quicktime shows MANY media types as its stream, including still or animated images such as GIF.&lt;br /&gt;
* Don&#039;t laugh, but the Restrained Life BDSM toolset grants a film-maker fine-grained voice, menu, or even scripted control over an actor avatar&#039;s costume, attachments, and even Windlight environment views.&lt;br /&gt;
* Roleplaying is a great way to develop character, plot, and story-telling skills.&lt;br /&gt;
** Building a 3D roleplay game in-world requires most of the same skills required for machinima, and provides a way to keep skills sharp between film projects, while having fun.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Platform ===&lt;br /&gt;
* [http://www.hp.com &#039;&#039;&#039;HP&#039;&#039;&#039;] HP Pavilion Elite 570f&lt;br /&gt;
* [http://www.amd.com &#039;&#039;&#039;AMD&#039;&#039;&#039;] AMD Athlon 6-core 3.2GHz processor with 16GB RAM and 2TB hardware mirror storage&lt;br /&gt;
* [http://www.amd.com &#039;&#039;&#039;AMD&#039;&#039;&#039;] AMD Radeon HD 5970 dual GPU&lt;br /&gt;
* [http://www.logitech.com/ &#039;&#039;&#039;Logitech&#039;&#039;&#039;] USB headset microphone&lt;br /&gt;
* [http://www.3dconnexion.com/ &#039;&#039;&#039;3DConnexion&#039;&#039;&#039;] Space Navigator for Flycam.&lt;br /&gt;
* [http://www.logitech.com/ &#039;&#039;&#039;Logitech&#039;&#039;&#039;] Cordless Rumblepad for Joystick Flycam.&lt;br /&gt;
&lt;br /&gt;
=== Software Toolbox ===&lt;br /&gt;
* [http://fedoraproject.org/ &#039;&#039;&#039;Fedora&#039;&#039;&#039;] Linux, 64-bit operating system&lt;br /&gt;
* [http://www.amd.com &#039;&#039;&#039;AMD&#039;&#039;&#039;] AMD Catalyst OpenGL driver&lt;br /&gt;
* [http://pulseaudio.org/ &#039;&#039;&#039;Pulse Audio&#039;&#039;&#039;] networked sound engine over [http://www.alsa-project.org &#039;&#039;&#039;ALSA&#039;&#039;&#039;]&lt;br /&gt;
* [http://opensimulator.org/ &#039;&#039;&#039;OpenSimulator&#039;&#039;&#039;] for offworld development and testing&lt;br /&gt;
* [http://secondlife.com/downloads/ &#039;&#039;&#039;SL Viewer&#039;&#039;&#039;] for rendering&lt;br /&gt;
* [http://sldev.free.fr/ &#039;&#039;&#039;CoolViewer&#039;&#039;&#039;] patches for performance, stability, and the [https://wiki.secondlife.com/wiki/RestrainedLifeAPI/ &#039;&#039;&#039;RestrainedLife API&#039;&#039;&#039;]&lt;br /&gt;
* [http://recordmydesktop.iovar.org/ &#039;&#039;&#039;RecordMyDesktop&#039;&#039;&#039;] for video capture (full quality Theora)&lt;br /&gt;
* [http://live.gnome.org/Istanbul &#039;&#039;&#039;Istanbul&#039;&#039;&#039;] for video capture (quick and dirty, low quality Theora)&lt;br /&gt;
* [http://www.freedesktop.org/~company/byzanz/ &#039;&#039;&#039;byzanz-record&#039;&#039;&#039;] for stillframe captures (animated GIF)&lt;br /&gt;
* [http://www.pitivi.org/ &#039;&#039;&#039;Pitivi&#039;&#039;&#039;] for video editing&lt;br /&gt;
* [http://audacity.sourceforge.net/ &#039;&#039;&#039;Audacity&#039;&#039;&#039;] for audio editing&lt;br /&gt;
* [http://www.mplayerhq.hu/ &#039;&#039;&#039;MPlayer&#039;&#039;&#039;] for audio stream capture&lt;br /&gt;
* [http://www.icecast.org/ &#039;&#039;&#039;IceCast&#039;&#039;&#039;] for audio streaming into SL&lt;br /&gt;
* [http://www.gimp.org/ &#039;&#039;&#039;GIMP&#039;&#039;&#039;] for building titles and credits&lt;br /&gt;
&lt;br /&gt;
=== In-World Tools ===&lt;br /&gt;
* [[User:Buhbuhcuh Fairchild|Buhbuhcuh Fairchild]]&#039;s &#039;&#039;&#039;Alt-Zoom Machinima Cam&#039;&#039;&#039;, &#039;&#039;&#039;StillCam&#039;&#039;&#039;, &#039;&#039;&#039;Blocking Block&#039;&#039;&#039;, and basic physics scripts&lt;br /&gt;
* [[User:Geuis Dassin|Geuis Dassin]]&#039;s &#039;&#039;&#039;Filming Path HUD&#039;&#039;&#039;, &#039;&#039;&#039;CamTP&#039;&#039;&#039; HUD, and &#039;&#039;&#039;Motor Mouth&#039;&#039;&#039; for realtime facial animation&lt;br /&gt;
* [[User:CodeBastard Redgrave|CodeBastard RedGrave]]&#039;s &#039;&#039;&#039;MachinimaCam&#039;&#039;&#039; HUD&lt;br /&gt;
* [[User:Torley Linden|Torley Linden]]&#039;s &#039;&#039;&#039;FollowCam&#039;&#039;&#039;&lt;br /&gt;
* [[User:RacerX Gullwing|RacerX Gullwing]]&#039;s &#039;&#039;&#039;rez-into-place&#039;&#039;&#039;&lt;br /&gt;
* [[USer:Aimee Weber|Aimee Weber]]&#039;s &#039;&#039;&#039;Storm&#039;&#039;&#039;&lt;br /&gt;
* [[User:Andrew Linden|Andrew Linden]]&#039;s &#039;&#039;&#039;Particle System Tool&#039;&#039;&#039;&lt;br /&gt;
* [[User:Marine Kelley|Marine Kelley]]&#039;s &#039;&#039;&#039;RestrainedLife&#039;&#039;&#039; API and tools (not just for simulating BDSM in SecondLife!)&lt;br /&gt;
&lt;br /&gt;
=== Roleplay ===&lt;br /&gt;
* [http://slurl.com/secondlife/Kasra/131/129/602 &#039;&#039;&#039;Kasra&#039;&#039;&#039;] - Steampunk adventure in southern Florida, USA, 1880A.D.&lt;br /&gt;
* [http://slurl.com/secondlife/Al%20Raqis/54/88/64 &#039;&#039;&#039;Al Raqis&#039;&#039;&#039;] - distant future space opera&lt;br /&gt;
* [http://slurl.com/secondlife/Splintered%20Rock/55/5/56 &#039;&#039;&#039;Splintered Rock&#039;&#039;&#039;] - an immersive roleplay region where I have contributed build and scripting to since May 2008.&lt;br /&gt;
* [http://slurl.com/secondlife/Vixens%20Isle/172/219/2454 &#039;&#039;&#039;TRON Legacy Adventures&#039;&#039;&#039;] - roleplay in the digitial frontier of the Grid&lt;br /&gt;
* [http://dvice.com/archives/2008/03/10_great_forays.php &#039;&#039;&#039;The 13 best electronic versions of Dungeons &amp;amp; Dragons&#039;&#039;&#039; (March 2008)] - the SLH article below was listed as one of the 13 best ways to roleplay D&amp;amp;D electronically&lt;br /&gt;
* [http://www.secondlifeherald.com/slh/2006/10/scripted_dice_r.html &#039;&#039;&#039;Scripted Dice Roll Themselves: D&amp;amp;D Comes to SL&#039;&#039;&#039; (October 2006)] - original SLH article about Ama Ree, Moebius Overdrive, and myself playing D&amp;amp;D with custom-built map, dice, and NPC speech tools.&lt;br /&gt;
&lt;br /&gt;
{{skills|Machinima=*}}{{Tweeter}}{{Plurker}}&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=File:AKBackground.png&amp;diff=1176884</id>
		<title>File:AKBackground.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=File:AKBackground.png&amp;diff=1176884"/>
		<updated>2013-02-21T17:26:01Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: Ice Moon Exillion science station&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ice Moon Exillion science station&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky&amp;diff=1176883</id>
		<title>User:Allen Kerensky</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky&amp;diff=1176883"/>
		<updated>2013-02-21T17:25:20Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: updates&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Allen Kerensky ==&lt;br /&gt;
[[Image:AKBackground.jpg|Allen Kerensky]]&lt;br /&gt;
&lt;br /&gt;
[http://world.secondlife.com/resident/aa4fa268-fb05-45a5-8d9d-dc77a1ab9437 Allen Kerensky] writes Linden and OpenSim scripts, science-fiction screenplays, creates &#039;&#039;machinima&#039;&#039; (machine cinema) in collaboration with [http://world.secondlife.com/resident/c04e34c3-2bc4-4bb9-bff6-72e8d142aa6b Moebius Overdrive], and roleplays in the multiple SecondLife regions and OpenSimulator grids.&lt;br /&gt;
&lt;br /&gt;
=== Connections ===&lt;br /&gt;
* [http://twitter.com/AllenKerensky Allen Kerensky @ Twitter] &lt;br /&gt;
* [http://plurk.com/AllenKerensky Allen Kerensky @ Plurk]&lt;br /&gt;
* [http://www.myrl.com/myrl/allen-kerensky/avatar/2031 Allen Kerensky @ MyRL]&lt;br /&gt;
&lt;br /&gt;
=== Myriad RPG System and Myriad Lite ===&lt;br /&gt;
Note: Myriad RPG development has moved to OpenSimulator.&lt;br /&gt;
&lt;br /&gt;
My scripted virtual world role-playing game prototype:&lt;br /&gt;
* [[User:Allen_Kerensky/Myriad_Lite_Preview_4|Myriad Lite Preview 4 September 2011]]&lt;br /&gt;
* [[User:Allen_Kerensky/Myriad_Lite_Preview_3|Myriad Lite Preview 3 August 2011]]&lt;br /&gt;
* [[User:Allen_Kerensky/Myriad_Lite_Preview_2|Myriad Lite Preview 2 June 2011]]&lt;br /&gt;
* [[User:Allen_Kerensky/Myriad_Preview|Myriad Lite Preview 1 June 2011]]&lt;br /&gt;
&lt;br /&gt;
* Myriad Lite in the news? [http://blog.nalates.net/2011/08/22/second-life-game-scripts/ SecondLife Game Scripts]&lt;br /&gt;
&lt;br /&gt;
=== September 2009 News ===&lt;br /&gt;
I have joined [[Baroun Tardis]] and [[Joelle Tardis]] as part of the House Tardis Creativity System (HTCS) development team, developing a next-generation roleplaying and combat meter for SecondLife, from scratch. More news soon!&lt;br /&gt;
&lt;br /&gt;
=== April 2009 News ===&lt;br /&gt;
Players and the owner of the roleplaying sim in SecondLife is handed a stack of DMCA notices and given 2 business days to remove all DUNE-related names from SecondLife... some of the articles written about the event I now remember as The Great Renaming:&lt;br /&gt;
* [http://www.myrl.com/blog/allen-kerensky-dune-related-lawyers-issue-cease-and-desist-on-fans-again/post/2124/2771/19434 DUNE-Related Lawyers Issue Cease and Desist On Fans (Again) @ MyRL]&lt;br /&gt;
* [http://www.massively.com/2009/04/09/infringers-of-dune-dune-role-players-shut-down-by-herbert-estat/ Infringers of Dune @ Massively]&lt;br /&gt;
* [http://nwn.blogs.com/nwn/2009/04/enforcers-of-dune.html Enforcers of Dune @ New World Notes]&lt;br /&gt;
* [http://www.boingboing.net/2009/04/09/cold-dead-hand-of-fr.html Cold Dead Hand of Frank Herbert @ BoingBoing]&lt;br /&gt;
* [http://kotaku.com/5207986/lawyer+mans-of-dune-smack-down-second-life-arrakis Lawyer Mans of Dune Smackdown SecondLife Arrakis @ Kotaku]&lt;br /&gt;
&lt;br /&gt;
=== April 2008 Interview ===&lt;br /&gt;
&#039;&#039;&#039;an interview with machinima maker Allen Kerensky&#039;&#039;&#039; posted to [http://orange-island.com/ Orange Island] by [[User:Yesterday Demain|Yesterday Demain]] on Thursday May 1, 2008, from an interview conducted in-world on Thursday April 17, 2008 by [[User:Natty Foggarty|Natty Foggarty]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Who is Allen Kerensky?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I am part of a team, with Moebius Overdrive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is your background?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Buhbuhcuh Fairchild dared us to do it. It was fun, so we kept on.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How would you define your work?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Impulsive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What gear &amp;amp; software would you recommend for machinima?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use the tools that work for you. Try as many as you can lay your hands on, in real projects, preferably side by side, and develop your own toolchain that you are comfortable with for each step in the pipeline. This also helps for future projects to know which tool might fit those projects best, or how to design around harder to work parts of various tools in your pipeline. Personally, I run from Fedora Linux [http://fedorproject.org], and use free/open source almost exclusively, and hoping nVidia will open source as much of their driver as possible so I can run completely from open source. Open source means you can see exactly what it does, how it does, and make changes if you want. That’s the kind of software I recommend for anything.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Which machinima communities / sources do you follow?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
None. Why chase after others at all when you can follow your own vision. If someone follows you, great, be willing to help them. This is why I would rather teach, or do, than talk about myself and machinima in general.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What are your favorite SL Machinima pieces?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I am jealous of “Better Life” [http://machinima.com/film/view&amp;amp;id=2204] by Robbie Wright because he did everything I ever wanted to do with machinima before I thought to do it, in this one film. I am also jealous of [[User:Aimee Weber|Aimee Weber]] pieces like “Tour of the Solar System” [http://machinima.com/film/view&amp;amp;id=2072] that nail the true power of machinima for educational and other inspiring uses, so elegantly.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Do you have a “machinima trick” you’d like to share ?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The main trick is entirely mental. You have to WANT to step outside of your comfort zone, ignore the fact that you are beating software into delivering your vision even when it doesn’t want to, and accept the challenge of getting to the finish despite the aggravation. Just like real life. You can’t do it, if you don’t try.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What’s on your machinima-made-easier wishlist?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Everyone always says facial animation, which would help a lot of folks who make movies that need faces, so I agree. I like robots more, which don’t need faces, so my personal choice is to incorporate Celtx [http://celtx.com], and its Tadpole extensions to Mozilla, into the browser built into the Viewer. The client is open source, so it should be possible, but I am not that much of a C++ programmer myself.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What are your upcoming projects?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ed Wood Film Festival [http://edwood.moomoney.net] 2008?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Website(s)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Moebius Overdrive&#039;s Lunadude.com [http://www.lunadude.com/]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Video sites where your films can be seen (URLs):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Archives - Blip.TV [http://lunadude.blip.tv/posts?view=archive]&lt;br /&gt;
&lt;br /&gt;
START (2006) - Machinima.com [http://machinima.com/film/view?id=2000]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SL Locations featuring contents you made:&#039;&#039;&#039;&lt;br /&gt;
( Note: the following sim disbanded, text maintained below as part of the original interview article - AK. )&lt;br /&gt;
Tabletop Gamer’s Space, Old Town (194, 87, 36) [http://world.secondlife.com/place/0253abd1-51a9-1389-5d88-025c56da57e9] [http://slurl.com/secondlife/Old%20Town/188/75/32/?img=http%3A//secondlife.com/app/image/bf276327-501c-cbab-580f-078e32805a9a/2&amp;amp;title=Tabletop%20Gamer%27s%20Space] is where I setup my experimental table to play pen-and-paper RPGs using this as a virtual tabletop.&lt;br /&gt;
&lt;br /&gt;
-- original available at Orange Island [http://www.orange-island.com/?p=384]&lt;br /&gt;
&lt;br /&gt;
=== Filmography ===&lt;br /&gt;
* [http://lunadude.blip.tv/file/1366744 &#039;&#039;&#039;Mad Science Film Festival&#039;&#039;&#039; (2008)]&lt;br /&gt;
* [http://lunadude.blip.tv/file/514563 &#039;&#039;&#039;It Came From The Origin of Where Bad Things Come From&#039;&#039;&#039; (2007)]&lt;br /&gt;
** Winner, 2nd place at 3rd Annual Ed Wood Film Festival, 2007.&lt;br /&gt;
* [http://lunadude.blip.tv/file/514577 &#039;&#039;&#039;A Zombie Stole My Heart&#039;&#039;&#039; (2006)]&lt;br /&gt;
** Winner: Worst Film, 2nd Annual Ed Wood Film Festival, 2006.&lt;br /&gt;
* [http://lunadude.blip.tv/file/860797/ &#039;&#039;&#039;SekretMenuz&#039;&#039;&#039; (2006)]&lt;br /&gt;
** SL Community Gathering 2006 introduction film.&lt;br /&gt;
** Best story award for Take5 Festival, August 2006.&lt;br /&gt;
* [http://lunadude.blip.tv/file/636770 &#039;&#039;&#039;START&#039;&#039;&#039; (2006)]&lt;br /&gt;
** Critically acclaimed steampunk compared to Isaac Asimov at machinima.com.&lt;br /&gt;
* [http://lunadude.blip.tv/file/514585 &#039;&#039;&#039;Scream In The Dark of the Night&#039;&#039;&#039; (2005)]&lt;br /&gt;
** Winner: Worst Acting and Worst Story, 1st Annual Ed Wood Film Festival, 2005.&lt;br /&gt;
** Featured on the SecondLife homepage for more than a year afterwards.&lt;br /&gt;
&lt;br /&gt;
=== Crew Credits ===&lt;br /&gt;
* Story developer&lt;br /&gt;
* Screenwriter&lt;br /&gt;
* Voice actor&lt;br /&gt;
* Avatar actor&lt;br /&gt;
* Music and sound FX coordination&lt;br /&gt;
* LSL scripting&lt;br /&gt;
* Final editing&lt;br /&gt;
&lt;br /&gt;
=== Affiliations ===&lt;br /&gt;
* [[Alt-Zoom Studios]], [[Lukanida]] (founding contributor since its inception in September, 2005) - Update: Lukanida fell off of the grid. Sadness.&lt;br /&gt;
* MachiniMafia - now disbanded.&lt;br /&gt;
&lt;br /&gt;
=== Tips ===&lt;br /&gt;
* Resize your your SL Viewer to NTSC or PAL standard resolution before recording, using the Edit Preferences -&amp;gt; Graphics -&amp;gt; Window Size drop down.&lt;br /&gt;
* Enable Advanced Menu with CTRL-ALT-SHIFT-D&lt;br /&gt;
* Use Advanced Menu -&amp;gt; Debug Settings -&amp;gt; Play Typing Anim -&amp;gt; FALSE to stop people from adding typing sounds to your captures.&lt;br /&gt;
** Note: Newer SL Viewers have an Edit Preference for this now.&lt;br /&gt;
* Linux users can use xmodmap -e &amp;quot;keycode 67 = F1 F1&amp;quot; to stop Linux from switching to text console when pressing CTRL-ALT-F1. &lt;br /&gt;
** xmodmap -e &amp;quot;keycode 67 = F1 XF86_Switch_VT_1&amp;quot; to restore normal Linux behavior&lt;br /&gt;
* Parcel Owners can build huge video walls to use as easily selectable backdrops without requiring you to pay to upload tons of textures.&lt;br /&gt;
** Project quicktime on the media texture as a form of animated rear-projection.&lt;br /&gt;
** Quicktime shows MANY media types as its stream, including still or animated images such as GIF.&lt;br /&gt;
* Don&#039;t laugh, but the Restrained Life BDSM toolset grants a film-maker fine-grained voice, menu, or even scripted control over an actor avatar&#039;s costume, attachments, and even Windlight environment views.&lt;br /&gt;
* Roleplaying is a great way to develop character, plot, and story-telling skills.&lt;br /&gt;
** Building a 3D roleplay game in-world requires most of the same skills required for machinima, and provides a way to keep skills sharp between film projects, while having fun.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Platform ===&lt;br /&gt;
* [http://www.hp.com &#039;&#039;&#039;HP&#039;&#039;&#039;] HP Pavilion Elite 570f&lt;br /&gt;
* [http://www.amd.com &#039;&#039;&#039;AMD&#039;&#039;&#039;] AMD Athlon 6-core 3.2GHz processor with 16GB RAM and 2TB hardware mirror storage&lt;br /&gt;
* [http://www.amd.com &#039;&#039;&#039;AMD&#039;&#039;&#039;] AMD Radeon HD 5970 dual GPU&lt;br /&gt;
* [http://www.logitech.com/ &#039;&#039;&#039;Logitech&#039;&#039;&#039;] USB headset microphone&lt;br /&gt;
* [http://www.3dconnexion.com/ &#039;&#039;&#039;3DConnexion&#039;&#039;&#039;] Space Navigator for Flycam.&lt;br /&gt;
* [http://www.logitech.com/ &#039;&#039;&#039;Logitech&#039;&#039;&#039;] Cordless Rumblepad for Joystick Flycam.&lt;br /&gt;
&lt;br /&gt;
=== Software Toolbox ===&lt;br /&gt;
* [http://fedoraproject.org/ &#039;&#039;&#039;Fedora&#039;&#039;&#039;] Linux, 64-bit operating system&lt;br /&gt;
* [http://www.amd.com &#039;&#039;&#039;AMD&#039;&#039;&#039;] AMD Catalyst OpenGL driver&lt;br /&gt;
* [http://pulseaudio.org/ &#039;&#039;&#039;Pulse Audio&#039;&#039;&#039;] networked sound engine over [http://www.alsa-project.org &#039;&#039;&#039;ALSA&#039;&#039;&#039;]&lt;br /&gt;
* [http://opensimulator.org/ &#039;&#039;&#039;OpenSimulator&#039;&#039;&#039;] for offworld development and testing&lt;br /&gt;
* [http://secondlife.com/downloads/ &#039;&#039;&#039;SL Viewer&#039;&#039;&#039;] for rendering&lt;br /&gt;
* [http://sldev.free.fr/ &#039;&#039;&#039;CoolViewer&#039;&#039;&#039;] patches for performance, stability, and the [https://wiki.secondlife.com/wiki/RestrainedLifeAPI/ &#039;&#039;&#039;RestrainedLife API&#039;&#039;&#039;]&lt;br /&gt;
* [http://recordmydesktop.iovar.org/ &#039;&#039;&#039;RecordMyDesktop&#039;&#039;&#039;] for video capture (full quality Theora)&lt;br /&gt;
* [http://live.gnome.org/Istanbul &#039;&#039;&#039;Istanbul&#039;&#039;&#039;] for video capture (quick and dirty, low quality Theora)&lt;br /&gt;
* [http://www.freedesktop.org/~company/byzanz/ &#039;&#039;&#039;byzanz-record&#039;&#039;&#039;] for stillframe captures (animated GIF)&lt;br /&gt;
* [http://www.pitivi.org/ &#039;&#039;&#039;Pitivi&#039;&#039;&#039;] for video editing&lt;br /&gt;
* [http://audacity.sourceforge.net/ &#039;&#039;&#039;Audacity&#039;&#039;&#039;] for audio editing&lt;br /&gt;
* [http://www.mplayerhq.hu/ &#039;&#039;&#039;MPlayer&#039;&#039;&#039;] for audio stream capture&lt;br /&gt;
* [http://www.icecast.org/ &#039;&#039;&#039;IceCast&#039;&#039;&#039;] for audio streaming into SL&lt;br /&gt;
* [http://www.gimp.org/ &#039;&#039;&#039;GIMP&#039;&#039;&#039;] for building titles and credits&lt;br /&gt;
&lt;br /&gt;
=== In-World Tools ===&lt;br /&gt;
* [[User:Buhbuhcuh Fairchild|Buhbuhcuh Fairchild]]&#039;s &#039;&#039;&#039;Alt-Zoom Machinima Cam&#039;&#039;&#039;, &#039;&#039;&#039;StillCam&#039;&#039;&#039;, &#039;&#039;&#039;Blocking Block&#039;&#039;&#039;, and basic physics scripts&lt;br /&gt;
* [[User:Geuis Dassin|Geuis Dassin]]&#039;s &#039;&#039;&#039;Filming Path HUD&#039;&#039;&#039;, &#039;&#039;&#039;CamTP&#039;&#039;&#039; HUD, and &#039;&#039;&#039;Motor Mouth&#039;&#039;&#039; for realtime facial animation&lt;br /&gt;
* [[User:CodeBastard Redgrave|CodeBastard RedGrave]]&#039;s &#039;&#039;&#039;MachinimaCam&#039;&#039;&#039; HUD&lt;br /&gt;
* [[User:Torley Linden|Torley Linden]]&#039;s &#039;&#039;&#039;FollowCam&#039;&#039;&#039;&lt;br /&gt;
* [[User:RacerX Gullwing|RacerX Gullwing]]&#039;s &#039;&#039;&#039;rez-into-place&#039;&#039;&#039;&lt;br /&gt;
* [[USer:Aimee Weber|Aimee Weber]]&#039;s &#039;&#039;&#039;Storm&#039;&#039;&#039;&lt;br /&gt;
* [[User:Andrew Linden|Andrew Linden]]&#039;s &#039;&#039;&#039;Particle System Tool&#039;&#039;&#039;&lt;br /&gt;
* [[User:Marine Kelley|Marine Kelley]]&#039;s &#039;&#039;&#039;RestrainedLife&#039;&#039;&#039; API and tools (not just for simulating BDSM in SecondLife!)&lt;br /&gt;
&lt;br /&gt;
=== Roleplay ===&lt;br /&gt;
* [http://slurl.com/secondlife/Kasra/131/129/602 &#039;&#039;&#039;Kasra&#039;&#039;&#039;] - Steampunk adventure in southern Florida, USA, 1880A.D.&lt;br /&gt;
* [http://slurl.com/secondlife/Al%20Raqis/54/88/64 &#039;&#039;&#039;Al Raqis&#039;&#039;&#039;] - distant future space opera&lt;br /&gt;
* [http://slurl.com/secondlife/Splintered%20Rock/55/5/56 &#039;&#039;&#039;Splintered Rock&#039;&#039;&#039;] - an immersive roleplay region where I have contributed build and scripting to since May 2008.&lt;br /&gt;
* [http://slurl.com/secondlife/Vixens%20Isle/172/219/2454 &#039;&#039;&#039;TRON Legacy Adventures&#039;&#039;&#039;] - roleplay in the digitial frontier of the Grid&lt;br /&gt;
* [http://dvice.com/archives/2008/03/10_great_forays.php &#039;&#039;&#039;The 13 best electronic versions of Dungeons &amp;amp; Dragons&#039;&#039;&#039; (March 2008)] - the SLH article below was listed as one of the 13 best ways to roleplay D&amp;amp;D electronically&lt;br /&gt;
* [http://www.secondlifeherald.com/slh/2006/10/scripted_dice_r.html &#039;&#039;&#039;Scripted Dice Roll Themselves: D&amp;amp;D Comes to SL&#039;&#039;&#039; (October 2006)] - original SLH article about Ama Ree, Moebius Overdrive, and myself playing D&amp;amp;D with custom-built map, dice, and NPC speech tools.&lt;br /&gt;
&lt;br /&gt;
{{skills|Machinima=*}}{{Tweeter}}{{Plurker}}&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Category:LSL_Library&amp;diff=1162510</id>
		<title>Category:LSL Library</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Category:LSL_Library&amp;diff=1162510"/>
		<updated>2012-02-06T04:22:20Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: Updated Myriad Lite UCCS link to Preview 5&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header|ml=*}}{{RightToc}}&lt;br /&gt;
==Script Library==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em 0.5em 1.5em&amp;quot;&amp;gt;&lt;br /&gt;
NOTE: Please add you scripts to this page and then add them to a category on the [[:Category:LSL Categorized Library|Categorized Library]] page.&lt;br /&gt;
&lt;br /&gt;
Come to this page to see complex examples that show how to combine parts of LSL.&lt;br /&gt;
&lt;br /&gt;
Go to the [[:Category:LSL Examples|LSL Examples]] page to see brief examples of how to use parts of LSL &lt;br /&gt;
&lt;br /&gt;
Why collect complex examples here? Well, ...&lt;br /&gt;
&lt;br /&gt;
There are many [[script|scripts]] that have become buried in the [[Old forum Scripting Library index| old forum Scripting Library]], the [http://community.secondlife.com/t5/Scripting-Library/bd-p/2122 2010 library archive], or the current [http://community.secondlife.com/t5/LSL-Scripting-Library/bd-p/LSLScriptingLibrary LSL Scripting Library]; were lost with the death of the early scripting forums; or sit idle in [[inventory|inventories]] that could be useful and should be more accessible.&lt;br /&gt;
&lt;br /&gt;
Other scripters may be in the same situation. This wiki is a well-suited medium for a script library. Feel free to add your scripts to the script library by creating new pages for them and linking to those pages here.&lt;br /&gt;
&lt;br /&gt;
Note that there are many more scripts in the LSL Library here, but you can&#039;t get to them if you don&#039;t know they exist, because they are subpages now, instead of an automatically updated category.  Good luck searching.&lt;br /&gt;
&lt;br /&gt;
Visit the new [[:Category:LSL Categorized Library|Categorized Library]] which might help make it easier to find a script by the type of script it is. Please note, to wiki editors, if you want your script to appear on the category page after adding it to this library you need to also add it to the category library page as well.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rules for posting: ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em&amp;quot;&amp;gt;&lt;br /&gt;
#Your script must be tested and working. If it&#039;s not, stick it in your user-space until it is. This is a list of working, usable scripts.&lt;br /&gt;
#Add a link to your script&#039;s page here. Link back to this page from your script&#039;s page. Start your page with &amp;lt;nowiki&amp;gt;{{LSL Header}}&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
#Do not add scripts that duplicate the same functionality as an existing script or built in {{LSLGC|Functions|function}}. If yours does, explain why.&lt;br /&gt;
#Do not list simple scripts here. Include those among the [[:Category:LSL Examples|LSL Examples]] instead.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
==LSL Script Library==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||[[Remove all scripts from a linkset]]&lt;br /&gt;
||[[User:Dahlia Orfan|Dahlia Orfan]]&lt;br /&gt;
||Remove all scripts from a linkset.&lt;br /&gt;
|-&lt;br /&gt;
||[[Script Vitality plug-in]]&lt;br /&gt;
||[[User:Jenna Felton|Jenna Felton]]&lt;br /&gt;
||Uses vehicle technology to allow scripts (in same prim) to run in &#039;dead&#039;, i.e. no-script areas.&lt;br /&gt;
|-&lt;br /&gt;
||[[1st necessity of SL]]&lt;br /&gt;
||[[User:Beer Dailey|Beer Dailey]]&lt;br /&gt;
||Monitors for avatars and (de)activates scripts states to control script performance/lag.&lt;br /&gt;
|-&lt;br /&gt;
||[[SetLinkText]]&lt;br /&gt;
||[[User:Tacusin Memo|Tacusin Memo]]&lt;br /&gt;
||Custom function like llSetText only applying to linked sets.&lt;br /&gt;
|-&lt;br /&gt;
||[[3D Radar]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||Rezzes a ball for each avatar in range. Each ball tracks its own AV and displays distance.&lt;br /&gt;
|-&lt;br /&gt;
||[[AbcText]]&lt;br /&gt;
||[[User:Ange Capalini|Ange Capalini]]&lt;br /&gt;
||EXPERIMENTAL Hyper low prim Display. only 2 prims for 25char.&lt;br /&gt;
|-&lt;br /&gt;
||[[Access (NewAge)]]&lt;br /&gt;
||[[User:Asia Snowfall|Asia Snowfall]]&lt;br /&gt;
||An easy to use script for permissions on who can use the script, Public/Group/Owner&lt;br /&gt;
|-&lt;br /&gt;
||[[Aim Detection]]&lt;br /&gt;
||[[User:Han Shuffle|Dugley Reanimator]]&lt;br /&gt;
||Monitors for avatars and reports back to owner about who is aiming at them.&lt;br /&gt;
|-&lt;br /&gt;
||[[AnkleLock]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||An ankle lock script and attached animation to fix your displaced shoes. This will help if your shoes look displaced when you sit in certain poses or when your animation overrider is active.&lt;br /&gt;
|-&lt;br /&gt;
||[[AntiDelay Node]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Uses [[llMessageLinked]] to stop those pesky delays.&lt;br /&gt;
|-&lt;br /&gt;
||[[AO Overriding Pose Ball]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||No more turning your AO off and on when you sit down&lt;br /&gt;
|-&lt;br /&gt;
||[[ARCFOUR Strong Encryption Implementation]]&lt;br /&gt;
||[[User:Nekow42 Zarf|Nekow42 Zarf]]&lt;br /&gt;
||An LSL implementation of ARCFOUR, the most popular stream cipher still in use. It is licensed under a Creative Commons Attribution 3.0 license.&lt;br /&gt;
|-&lt;br /&gt;
||[[Artillery]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||An artillery gun script, performing the necessary calculations based on a user-chosen velocity, in order to hit a designated target avatar.&lt;br /&gt;
|-&lt;br /&gt;
||[[Assembly Programming Language|Assembly-Like Programming Language]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||A compiler that runs assembly-like programs.&lt;br /&gt;
|-&lt;br /&gt;
||[[Associative Array Emulator|Associative Array (Dictionary) Emulator]]&lt;br /&gt;
||[[User:Alynna Vixen|Alynna Vixen]]&lt;br /&gt;
||This library provides a set of functions for using a list as an associative array where string based keys can refer to one or more variant elements.&lt;br /&gt;
|-&lt;br /&gt;
||[[AvatarFollower]]&lt;br /&gt;
||[[User:Dale Innis|Dale Innis]]&lt;br /&gt;
||Allows one avatar to automatically follow another.&lt;br /&gt;
|-&lt;br /&gt;
||[[Avatar Radar (NewAge)]]&lt;br /&gt;
||[[User:Asia Snowfall|Asia Snowfall]]&lt;br /&gt;
||Version 1.2; A nice new avatar radar script i just finish that you can place in your hud, Also features avatar locator&lt;br /&gt;
|-&lt;br /&gt;
||[[Base2Dec]]&lt;br /&gt;
||[[User:Siann Beck|Siann Beck]]&lt;br /&gt;
||Convert a number to decimal from any base.&lt;br /&gt;
|-&lt;br /&gt;
||[[BaseN]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
||Variable base compression, dynamically maps to usable UTF code points.&lt;br /&gt;
|-&lt;br /&gt;
||[[Basic Encryption Modules]]&lt;br /&gt;
||[[User:Beverly Larkin|Beverly Larkin]]&lt;br /&gt;
||Basic encryption scripts, allows you to encrypt a float and shout it to another prim on a randomly chosen channel.&lt;br /&gt;
|-&lt;br /&gt;
||[[Be happy]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Basic smile attachment script, makes your avatar smile.&lt;br /&gt;
|-&lt;br /&gt;
||[[Best Neighbor Ad Hiding Script|Best Neighbor]]&lt;br /&gt;
||[[User:Doran Zemlja|Doran Zemlja]]&lt;br /&gt;
||Reduce ad clutter by hiding ads when users are on their own land nearby.&lt;br /&gt;
|-&lt;br /&gt;
||[[BigNum|BigNum Library (RSA Encryption)]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||A BigNum Library for dealing with big numbers! Specialized for modular multiplication, and RSA encryption.&lt;br /&gt;
|-&lt;br /&gt;
||[[Binary Clock v1.1|Binary Clock]]&lt;br /&gt;
||[[User:Fox Diller|Fox Diller]]&lt;br /&gt;
||A Binary Clock.&lt;br /&gt;
|-&lt;br /&gt;
||[[BinaryDecimalConverter]]&lt;br /&gt;
||[[User:Soundless Smalls|Soundless Smalls]]&lt;br /&gt;
||Converts a binary value to a decimal value and vice versa.&lt;br /&gt;
|-&lt;br /&gt;
||[[Blacklist and Remote Kill|Blacklist and Remote Kill]]&lt;br /&gt;
||[[User:Chase Quinnell|Chase Quinnell]]&lt;br /&gt;
||Blacklist(denial of use) or a creator kill script(can delete someone&#039;s item by command on private channel)&lt;br /&gt;
|-&lt;br /&gt;
||[[User_talk:Rolig_Loon/Bookmark_URLs|Bookmark URLs]]&lt;br /&gt;
||[[User:Rolig Loon|Rolig Loon]]&lt;br /&gt;
||Dialog driven HUD reads bookmarked URLs from notecards and navigates directly to them with user&#039;s in-world browser.&lt;br /&gt;
|-&lt;br /&gt;
||[[Bubble Gum]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A script to create a bubble gum effect with sounds and animations.&lt;br /&gt;
|-&lt;br /&gt;
||[[Bubble Trapper]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A script that rezzes a bubble and surrounds a dialog-chosen avatar, exploding 2 seconds after it has reached the avatar. The article also explains how to hash a name to a number or a key to a number and thereby avoiding to block the rezzer&#039;s timer() event or using llRegionSay().&lt;br /&gt;
|-&lt;br /&gt;
||[[Builders Buddy|Builder&#039;s Buddy Tool]]&lt;br /&gt;
||[[User:Newfie Pendragon|Newfie Pendragon]]&lt;br /&gt;
||Script to easily move/rotate large builds that exceed the linkable size limit (30 meters).&lt;br /&gt;
|-&lt;br /&gt;
||[[Button Click Detector]]&lt;br /&gt;
||{{User|Sendao Goodman}}&lt;br /&gt;
||Use [[llDetectedTouchUV]] to determine which button was pressed on a texture.&lt;br /&gt;
|-&lt;br /&gt;
||[[Camera following prim]]&lt;br /&gt;
||[[User:Dale Innis|Dale Innis]]&lt;br /&gt;
||Pair of scripts to make a prim follow your camera position around (for lights etc).&lt;br /&gt;
|-&lt;br /&gt;
||[[Camera Sync]]&lt;br /&gt;
||[[User:Meyermagic Salome|Meyermagic Salome]] and [[User:Nomad Padar|Nomad Padar]]&lt;br /&gt;
||A system to synchronize the cameras of two avatars.&lt;br /&gt;
|-&lt;br /&gt;
||[[Chatbot]]&lt;br /&gt;
||Anonymous&lt;br /&gt;
||Compile and run the LSL you type on a channel, faster than you can thru the 2007-08 SL GUI.&lt;br /&gt;
|-&lt;br /&gt;
||[[Chat Logger (GPL)]]&lt;br /&gt;
||[[User:Nobody Fugazi|Nobody Fugazi]]&lt;br /&gt;
||Chat logger which requests permission from participants before recording them.&lt;br /&gt;
|-&lt;br /&gt;
||[[Chat_Relay|Chat Relay]]&lt;br /&gt;
||[[User:grumble Loudon|grumble Loudon]]&lt;br /&gt;
||A Chat relay which can be routed using a path header and won&#039;t echo.&lt;br /&gt;
|-&lt;br /&gt;
||[[ClickAndDrag]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
|| Click and Drag user interface elements using dynamic feedback&lt;br /&gt;
|-&lt;br /&gt;
||[[Code Racer]]&lt;br /&gt;
||Anonymous&lt;br /&gt;
||Race two versions of code forever, to see which runs faster.&lt;br /&gt;
|-&lt;br /&gt;
||[[Code Sizer]]&lt;br /&gt;
||Anonymous&lt;br /&gt;
||Count the bytes compiled from source code, to measure how to write small code.&lt;br /&gt;
|-&lt;br /&gt;
||[[Collision message sender]]&lt;br /&gt;
||[[Taff Nouvelle]]&lt;br /&gt;
||Give a message to an avatar on collision if the message has not been sent in the last 10 minutes.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Programs#v7-D_Enh._Color_Picker|Color Changer]]&lt;br /&gt;
||[[User:Void_Singer|Void_Singer]]&lt;br /&gt;
||Dialog driven color changer. Supports 16million+ colors, web color codes, multiple targeted prims, with save and recall.&lt;br /&gt;
|-&lt;br /&gt;
||[[Color Changer|Color Changer Plus]]&lt;br /&gt;
||[[User:Neo Calcutt|Neo Calcutt]]&lt;br /&gt;
||A color changer with 14 colors, a random function, and a custom vector function.&lt;br /&gt;
|-&lt;br /&gt;
||[[Color conversion scripts|Color Conversion]]&lt;br /&gt;
||[[User:Sally LaSalle|Sally LaSalle]]&lt;br /&gt;
||Convert between Red Green Blue (RGB) and Hue Saturation Value (HSV).&lt;br /&gt;
|-&lt;br /&gt;
||[[ColorConvert]]&lt;br /&gt;
||[[User:Siann Beck|Siann Beck]]&lt;br /&gt;
||Convert color values to vector from RGB, hex or HTML color name.&lt;br /&gt;
|-&lt;br /&gt;
||[[Color script]]&lt;br /&gt;
||[[User:Masakazu Kojima|Masakazu Kojima]]&lt;br /&gt;
||Script for changing colors trough a listener with pre-defined colors.&lt;br /&gt;
|-&lt;br /&gt;
||[[Library Combined Library|Combined Library]]&lt;br /&gt;
||[[User:Strife Onizuka|Strife Onizuka]]&lt;br /&gt;
||Library of mostly encoding and decoding functions, some more useful then others.&lt;br /&gt;
* String functions: Replace / Trim right / Trim left / Trim both&lt;br /&gt;
* Unicode conversion: UTF8 to Unicode / Unicode to UTF8&lt;br /&gt;
* List functions: Replace / Compare&lt;br /&gt;
|-&lt;br /&gt;
||[[Computer:jaycoonlanguage]]&lt;br /&gt;
||[[User:jayco121 Bing|jayco121 Bing]]&lt;br /&gt;
|| A language written in LSL that is meant for my computer (available at the shop).&lt;br /&gt;
|-&lt;br /&gt;
||[[Read Note Card Configuration|Configuration Notecard Reader]]&lt;br /&gt;
||{{User|Dedric Mauriac}}&lt;br /&gt;
||A script to read configuration information from a notecard. Parses notecard to extract key words and their assigned values. Allows for comment lines and many more useful features.&lt;br /&gt;
|-&lt;br /&gt;
||[[AdvancedNotecardReader|Configuration Notecard Reader (advanced)]]&lt;br /&gt;
||[[Lear Cale|Lear Cale]]&lt;br /&gt;
||Robust configuration notecard reader; supports multiple notecards with same suffix, handles reconfig on inventory change, and does not usurp the default state.&lt;br /&gt;
|-&lt;br /&gt;
||[[Library_Chat_Relay|Conversation Relay]]&lt;br /&gt;
||[[User:Jippen Faddoul|Jippen Faddoul]]&lt;br /&gt;
||Chat relay which requests permission from participants before relaying their messages. Also includes their attachments. (ToS compliant).&lt;br /&gt;
|-&lt;br /&gt;
||[[Curtain script]]&lt;br /&gt;
||[[User:Zilla Larsson|Zilla Larsson]]&lt;br /&gt;
||A simple script to retract/stretch curtains, blinds, bedcovers and more&lt;br /&gt;
|-&lt;br /&gt;
||[[Library_Cycle_Dialog_Items|Cycle Dialog Items w/ Callback]]&lt;br /&gt;
||[[User:Hawkster Westmoreland|Hawkster Westmoreland]]&lt;br /&gt;
||A customizable way to cycle dialog items with pagination&lt;br /&gt;
|-&lt;br /&gt;
||[[Dataserver API]]&lt;br /&gt;
||[[User:Revolution Perenti|Revolution Perenti]]&lt;br /&gt;
||Dataserver Framework for Notecards.&lt;br /&gt;
|-&lt;br /&gt;
||[[Date Library]]&lt;br /&gt;
||[[User:Corto Maltese|Corto Maltese]]&lt;br /&gt;
|| Date library, based on number of day since march 3rd 1600, can be used to calculate weekday, date differences, and date offset, and date formating.&lt;br /&gt;
|-&lt;br /&gt;
||[[Day of the Week]]&lt;br /&gt;
||[[User:DoteDote Edison|DoteDote Edison]]&lt;br /&gt;
||Function to get day of the week from [[llGetUnixTime]].&lt;br /&gt;
|-&lt;br /&gt;
||[[Days in Month]]&lt;br /&gt;
||[[User:IntLibber Brautigan begin_of_the_skype_highlighting     end_of_the_skype_highlighting begin_of_the_skype_highlighting     end_of_the_skype_highlighting|IntLibber Brautigan]]&lt;br /&gt;
||Clicking on it returns the number of days in the present month. Useful for scripting calendars and tier systems that need to know the number of days in the month at hand or to calculate for any month. Even adjusts for leap years.&lt;br /&gt;
|-&lt;br /&gt;
||[[Deed Tools]]&lt;br /&gt;
||[[User:Falados Kapuskas|Falados Kapuskas]]&lt;br /&gt;
||Tools that allow the creator to modify Group-Owned (Deeded) Objects via chat.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DEMO_Shield|*DS*_DEMO_Shield]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||With this script, it is impossible to use these scripts in copied (Copybot) object.  &lt;br /&gt;
|-&lt;br /&gt;
||[[Describe Chatter]]&lt;br /&gt;
||Anonymous&lt;br /&gt;
||Chat to see yourself as others do.&lt;br /&gt;
|-&lt;br /&gt;
||[[Dialog Control]]&lt;br /&gt;
||[[User:Nargus Asturias|Nargus Asturias]]&lt;br /&gt;
|| A (not-so) simple dialog &amp;amp; menu control script. Call dialog and receive selected value via [[link_message]](), with built-in timer and [[link_message]]() notification on time out. Supports multi-pages dialog and numeric property dialog. Button text and dialog&#039;s returned value can differ.&lt;br /&gt;
Latest version also has [[Dialog Menus Control]] built-in; which allow multi-level menus through SL dialog system.&lt;br /&gt;
|-&lt;br /&gt;
||[[Dispenser Vendor]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
|| A twist on [[Vendor]] that dispenses one object and then removes it from the list of objects.&lt;br /&gt;
|-&lt;br /&gt;
||[[MultiUser_Dialog_Handler|Dialog Menus (multiuser)]]&lt;br /&gt;
||[[User:SimonT Quinnell|SimonT Quinnell]]&lt;br /&gt;
|| Menu dialog handler that supports multiple menus open at once from the single script. Displays multi-page menus if necessary as well as allowing for fixed header and footer buttons.  Timeouts as well as Text and button size limits are handled.&lt;br /&gt;
|-&lt;br /&gt;
||[[Dialog NumberPad|Dialog Number Pad]]&lt;br /&gt;
||[[User:DoteDote Edison|DoteDote Edison]]&lt;br /&gt;
||Use a dialog to accept positive integer input from users.&lt;br /&gt;
|-&lt;br /&gt;
||[[Display Names Radar]]&lt;br /&gt;
||[[User:Cerise Sorbet|Cerise Sorbet]]&lt;br /&gt;
||Simple HUD type avatar radar that can show [[display names]] and script memory usage&lt;br /&gt;
|-&lt;br /&gt;
||[[Display Names to Key]]&lt;br /&gt;
||[[User:Joran Yoshikawa|Joran Yoshikawa]]&lt;br /&gt;
||Simple way to get UUIDs from displaynames&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DS_Display-Username_Online_Indicator|*DS*_Display-Username_Online_Indicator]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This simple hover text-based script is used to shop owners in Second Life, customers at the current display name and user name to display publicly. Additionally shows the status of the Userkey and online. Furthermore, there are click of a chat link that opens the profile owner. &lt;br /&gt;
|-&lt;br /&gt;
||[[Displayer Script]]&lt;br /&gt;
||[[User:Akinori Kimagawa|Akinori Kimagawa]]&lt;br /&gt;
||Display Words On Top Of An Object&lt;br /&gt;
|-&lt;br /&gt;
||[[Distributed Primitive Database]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||The distributed primitive database (DPD) is a database which is meant to survive entirely in SL by using redundancy, replication and time synchronisation to maintain the consistency of the dataset contained in the DPD node/primitives spread out between regions and even grids. Similarly to the [[Intercom]], the robustness of the theory would allow users to maintain a cross-grid database; as of 30 of August 2011 I have managed to couple and replicate data between the two grids by using the methodology described in the script article.&lt;br /&gt;
|-&lt;br /&gt;
||[[Drink script]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Used mainly for food and drink in Second Life.&lt;br /&gt;
|-&lt;br /&gt;
||[[Donut Dance]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||Err, a script that makes you dance and say something on the local chat once you attach an object (good example for conditional re-entry flipping).&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DS_Single_AO-Sit|*DS*_Single_AO-Sit]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Posescript for use with or without AO and with or without Animation. With the menu it is possible the seated Avatar to move.&lt;br /&gt;
|-&lt;br /&gt;
||[[TOXDropBox|DropBox]]&lt;br /&gt;
||[[User:Dimentox Travanti|Dimentox Travanti]]&lt;br /&gt;
|| This is a Drop box which allows people to drop certain items in a object &amp;amp; has many config options.&lt;br /&gt;
|-&lt;br /&gt;
||[[Efficiency Tester]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Tests the speed of a function.&lt;br /&gt;
|-&lt;br /&gt;
||[[Email-to-IM|Email2IM]]&lt;br /&gt;
||[[User:DoteDote Edison|DoteDote Edison]]&lt;br /&gt;
||Send IMs to SL friends via [[email]] (translate emails from friends into IMs).&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Kireji_Haiku/SIMchat_headset|Encrypted Region-wide chat]]&lt;br /&gt;
||&#039;&#039;&#039;[[User:Kireji Haiku|Kireji Haiku]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Kireji Haiku|talk]]|[[Special:Contributions/Kireji Haiku|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
||Encrypted Region-wide chat&lt;br /&gt;
|-&lt;br /&gt;
||[[ExplodingObjects]]&lt;br /&gt;
||[[User:Dale Innis|Dale Innis]]&lt;br /&gt;
||Causes an object (of the appropriate type) to explode on command.&lt;br /&gt;
|-&lt;br /&gt;
||[[FadeEasy]]&lt;br /&gt;
||[[User:Nika Rugani|Nika Rugani]]&lt;br /&gt;
||The easy way of fading objects in or out (Using llSetLinkAlpha)&lt;br /&gt;
|-&lt;br /&gt;
||[[FastConeSpread]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
|| Fast Algorithmn to achieve cone spread, main use in weaponry systems.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:PixelProphet Lane/Scripts#Fast List Prim Contents|Fast List Prim Contents]]&lt;br /&gt;
||[[User:PixelProphet Lane|PixelProphet Lane]]&lt;br /&gt;
||Fast and efficient method to print Object Inventory (Name, Type and next Owner permissions)&lt;br /&gt;
|-&lt;br /&gt;
||[[Find Avatar Key|Find Avatar Key]]&lt;br /&gt;
||[[User:Huney Jewell|Huney Jewell]]&lt;br /&gt;
||Explores [[UUID]] of avatar whose name is said in local chat or who touches the prim.&lt;br /&gt;
|-&lt;br /&gt;
||[[First Name Letter Prize]]&lt;br /&gt;
||[[User:RaithSphere Whybrow|RaithSphere Whybrow]]&lt;br /&gt;
||Gives a prize if the person who sits on it&#039;s first letter of first name matches the random letter!&lt;br /&gt;
|-&lt;br /&gt;
||[[Fix Small Prims|Fix_Small_Prims]]&lt;br /&gt;
||[[User:Emma Nowhere|Emma Nowhere]]&lt;br /&gt;
||Finds and adjusts the smallest prims in a linkset so that it can be scaled down further.&lt;br /&gt;
|-&lt;br /&gt;
||[[Flight Assist]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||Flight feather / flight band implementation supporting various commands and allowing you to fly above the clouds.&lt;br /&gt;
|-&lt;br /&gt;
||[[Float2Hex]]&lt;br /&gt;
||[[User:Strife Onizuka|Strife Onizuka]]&lt;br /&gt;
||Very useful for transporting [[float|floats]].&lt;br /&gt;
|-&lt;br /&gt;
||[[Float Box Contents]]&lt;br /&gt;
||[[User:Rolig Loon|Rolig Loon]]&lt;br /&gt;
||Displays object inventory in hover text, identified by type and updated marquee-style.&lt;br /&gt;
|-&lt;br /&gt;
||[[Follower (script)|Follower]]&lt;br /&gt;
||Unknown, uploaded by [[User:Slik Swindlehurst|Slik Swindlehurst]]&lt;br /&gt;
||Makes an object follow the nearest person. Do not use for [[grief|griefing]].&lt;br /&gt;
|-&lt;br /&gt;
||[[GA Event Notifier]]&lt;br /&gt;
||[[User:Victor Hua|Victor Hua]]&lt;br /&gt;
||Gathers seven days event data from a Google calendar and display it through a simple interface. The lsl script can access several calendars at once through seperate php files. One file per calendar. Host the included php on your own web server.&lt;br /&gt;
|-&lt;br /&gt;
||[[Geometric|Geometric Library]]&lt;br /&gt;
||Community Project&lt;br /&gt;
||A substantial amount of various geometric functions for intersection and other purposes of 3D maths.&lt;br /&gt;
|-&lt;br /&gt;
||[[Get Profile Picture]]&lt;br /&gt;
||[[User:Valentine Foxdale|Valentine Foxdale]]&lt;br /&gt;
||Sets the texture of the object to profile picture of the person that touches ot&lt;br /&gt;
|-&lt;br /&gt;
||[[GetTimestampOffset]]&lt;br /&gt;
||[[User:Siann_Beck|Siann Beck]]&lt;br /&gt;
||Returns [[llGetTimestamp]]() with an hour offset.&lt;br /&gt;
|-&lt;br /&gt;
||[[Give InvItem every n hours]]&lt;br /&gt;
||[[User:Criz Collins|Criz Collins]]&lt;br /&gt;
||Will give an inventory item on touch only every n hours, even if somebody touches the object more than once. &lt;br /&gt;
|-&lt;br /&gt;
||[[Give random object]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Touch to receive a random object in the prim&#039;s inventory&lt;br /&gt;
|-&lt;br /&gt;
||[[Giver]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A menu-driven script that will hand out the objects in a prim. Supports multiple pages.&lt;br /&gt;
|-&lt;br /&gt;
||[[Google Charts]]&lt;br /&gt;
||[[User:Dedric Mauriac|Dedric Mauriac]]&lt;br /&gt;
||Create links to display raw data as a chart image.&lt;br /&gt;
|-&lt;br /&gt;
||[[Google_Translator]]&lt;br /&gt;
||[[User:Ugleh Ulrik|Ugleh Ulrik]]&lt;br /&gt;
||Translates spanish to english, and its simple to make it any other way.&lt;br /&gt;
|-&lt;br /&gt;
||[[Go transparent when walking]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||An attachment that goes invisible when you walk and visible when you don&#039;t walk.&lt;br /&gt;
|-&lt;br /&gt;
||[[Greeter]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A multi-purpose greeter with multiple options (IM, landmark, notecard, URL, visitor statistics, shared access and compatible with the [[Mail]] system) that could work for shops, clubs, galleries and any other public place.&lt;br /&gt;
|-&lt;br /&gt;
||[[Group Authorization]]&lt;br /&gt;
||[[User:Chase Quinnell|Chase Quinnell]]&lt;br /&gt;
||Checks to see if object is set to appropriate group (checks by [[Group key finder|group key]])&lt;br /&gt;
|-&lt;br /&gt;
||[[Group Information v1.0]]&lt;br /&gt;
||[[User:Tyrennic Rivera|Tyrennic Rivera]]&lt;br /&gt;
||When clicked the prim will show group information (set on the prim) from the official Second Life Search page.&lt;br /&gt;
|-&lt;br /&gt;
||[[Group key finder]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Touch to find the key of the group&lt;br /&gt;
|-&lt;br /&gt;
||[[Group Privacy]]&lt;br /&gt;
||[[User:Chance Unknown|Chance Unknown]]&lt;br /&gt;
||Security device to insure members of a group can have a private area. Deactivates when nobody present.&lt;br /&gt;
|-&lt;br /&gt;
||[[Hello Avatar]]&lt;br /&gt;
||Linden Lab&lt;br /&gt;
||SL&#039;s default script.&lt;br /&gt;
|-&lt;br /&gt;
||[[Hello Avatar Companion]]&lt;br /&gt;
||[[Chase Quinnell]]&lt;br /&gt;
||Companion to the original [[Hello Avatar]] script&lt;br /&gt;
|-&lt;br /&gt;
||[[Hierarchics]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
|| Advanced script to create an efficient self-aware hierarchic structure.&lt;br /&gt;
|-&lt;br /&gt;
||[[Hierarchics2]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
|| Second generation, one script per object. Only two functions, can be embedded in others. Uses the new [[llSetLinkPrimitiveParamsFast]]/[[llGetLinkPrimitiveParams]] functions.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Rolig_Loon/High-Capacity_Greeter-Counter|High-Capacity Greeter-Counter]]&lt;br /&gt;
||[[User:Rolig Loon|Rolig Loon]]&lt;br /&gt;
||Uses a memory compression algorithm to store hashed visitor UUID&#039;s in a string instead of using a list. &lt;br /&gt;
|-&lt;br /&gt;
||[[Holodeck]]&lt;br /&gt;
||[[User:Revolution Perenti|Revolution Perenti]]&lt;br /&gt;
||Home Rezzing System (Open Source).&lt;br /&gt;
|-&lt;br /&gt;
||[[HUD Dots Radar]]&lt;br /&gt;
||[[User:Cerise Sorbet|Cerise]]&lt;br /&gt;
||HUD target example, draws dots on the HUD over avatars in view.&lt;br /&gt;
|-&lt;br /&gt;
||[[Intercom|Intercom]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A system allowing region-wide and grid-wide (as of 30 of August 2011, it also works grid-wide, a test was performed by linking up the chat between the OSGrid and SecondLife) mass chat relay. By using this you can relay a main chat across multiple regions or grids. The script was initially meant as a mid-way project in order to test and gather information for the [[Distributed Primitive Database]].&lt;br /&gt;
|-&lt;br /&gt;
||[[Interpolation|Interpolation Library]]&lt;br /&gt;
||[[User:Nexii_Malthus|Nexii Malthus]]&lt;br /&gt;
||A small set of interpolation functions.&lt;br /&gt;
|-&lt;br /&gt;
||[[Intra-Region Update Server]]&lt;br /&gt;
||[[User:Emma_Nowhere|Emma Nowhere]]&lt;br /&gt;
||Centrally update objects such as Freeview screens or teleport pads within a region that are configured by notecards or contain modifiable objects or media assets.&lt;br /&gt;
|-&lt;br /&gt;
||[[Inventory_Based_Menu]]&lt;br /&gt;
||[[User:Revolution Perenti|Revolution Perenti]]&lt;br /&gt;
||Inventory Based Menu System.&lt;br /&gt;
|-&lt;br /&gt;
||[[iTunes RPC Email|iTunes RPC]]&lt;br /&gt;
||[[User:Fox Diller|Fox Diller]]&lt;br /&gt;
||iTunes RPC via LSL [[llEmail]] and [[llRemoteDataReply]].&lt;br /&gt;
|-&lt;br /&gt;
||[[Jingle]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A script that will make a primitive emit a sound when you wear it and walk around. Ideal for bells, footsteps and so on...&lt;br /&gt;
|-&lt;br /&gt;
||[[Key Pad Door|Keypad Door]]&lt;br /&gt;
||[[User:Tdub Dowler|Tdub Dowler]]&lt;br /&gt;
|| Door and keypad with changeable code. Follow instructions carefully!&lt;br /&gt;
|-&lt;br /&gt;
||[[Key2Name]]&lt;br /&gt;
||[[User:Nika Rugani|Nika Rugani]]&lt;br /&gt;
|| Key2Name service where a user no longer needs to be in the same region to get users name&lt;br /&gt;
|-&lt;br /&gt;
||[[Kilt Editor|Kilt / Skirt Editor]]&lt;br /&gt;
||[[User:Brangus Weir|Brangus Weir]]&lt;br /&gt;
|| This changes all the parameters of all the flexis in the link set in one swell foop!&lt;br /&gt;
|-&lt;br /&gt;
||[[Kira Warp Core Drive]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||Scripts and instructions on how to create a vehicle that teleports an avatar and a vehicle to any region on the grid. You can [http://www.youtube.com/watch?v=xQkBRD7HBvw watch the YouTube video showing the prototype] I created to demonstrate how it works.&lt;br /&gt;
|-&lt;br /&gt;
||[[Last Sound System]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||An LSL [http://Last.fm Last.fm] client.&lt;br /&gt;
|-&lt;br /&gt;
||[[LibraryDisplayLandScreenshot]]&lt;br /&gt;
||[[User:Jon Desmoulins|Jon Desmoulins]]&lt;br /&gt;
||A modified version of LibraryDisplayProfilePic using the new [[PARCEL_DETAILS_ID]] Implemented in Server v1.36&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/LinkNumber-List_in_llSetLinkPrimitiveParamsFast|LinkNumber-List_in_llSetLinkPrimitiveParamsFast]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Changed several prims in linkset with the same parameters, with a list. Without separate llSetLinkPrimitiveParams for each prim. (ideal for show/hide effects)&lt;br /&gt;
|-&lt;br /&gt;
||[[Limit Vendor]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||This is a vendor supporting any number of items with different prices which will only dispense a certain number of individual items by setting limits for each item based on a notecard configuration.&lt;br /&gt;
|-&lt;br /&gt;
||[[Linkset resizer]]&lt;br /&gt;
||[[User:Maestro Linden|Maestro Linden]]&lt;br /&gt;
||Systematically rescales a linkset by moving and resizing each prim (by using [[llGetLinkPrimitiveParams]] and [[llSetLinkPrimitiveParamsFast]])&lt;br /&gt;
|-&lt;br /&gt;
||[[Linkset resizer with menu]]&lt;br /&gt;
||[[User:Brilliant Scientist|Brilliant Scientist]]&lt;br /&gt;
||A menu-driven script that rescales a linkset by moving and resizing the prims using [[llGetLinkPrimitiveParams]] and [[llSetLinkPrimitiveParamsFast]] functions. Based on [[Linkset resizer]].&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/*DS*_Resize_Script|*DS* Resize Script (m/c/t) v2.0.01]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Single resize script for a complete linkset with save and restore option. &lt;br /&gt;
|-&lt;br /&gt;
||[[Pointing Stick]]&lt;br /&gt;
||[[User: rhonin Nissondorf|rhonin Nissondorf]]&lt;br /&gt;
||A device that takes controls of your arrow keys and directs the device in the relative direction its pointing, forward and back of course.&lt;br /&gt;
|-&lt;br /&gt;
||[[Gun Script]]&lt;br /&gt;
||[[User:rhonin Nissondorf| rhonin Nissondorf]]&lt;br /&gt;
||Shoots out &amp;quot;ammo&amp;quot; from the root prim of your &amp;quot;gun&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
||[[Linkset Resizer 2]]&lt;br /&gt;
||[[User:Emma Nowhere|Emma Nowhere]]&lt;br /&gt;
||A more user-friendly resizer script designed for either drop-in use by the end-user or builder or for use in products. Based on [[Fix Small Prims]].&lt;br /&gt;
|-&lt;br /&gt;
||[[List2CSV]]&lt;br /&gt;
||[[User:Kunnis Basiat|Kunnis Basiat]]&lt;br /&gt;
||List2CSV &amp;amp; CSV2List that include preserving type and escaping characters.&lt;br /&gt;
|-&lt;br /&gt;
||[[list_cast]]&lt;br /&gt;
||[[User:Fractured Crystal|Fractured Crystal]]&lt;br /&gt;
||Casts a list of strings into the type they appear to be. Designed for preprocessing user input for feeding into [[llSetPrimitiveParams]]&lt;br /&gt;
|-&lt;br /&gt;
||[[Listener Script]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Use to [[listen]] to other people&#039;s conversations (Like spying)&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Functions#List:_Find_Last_Index|List: Find Last Index]]&lt;br /&gt;
||[[User:Void Singer|Void Singer]]&lt;br /&gt;
||Returns the last index of searched item in a source list. (backwards version of [[llListFindList]])&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Functions#List:_Multi-Find_Index_.28First_or_Last.29|List: Multi Find]]&lt;br /&gt;
||[[User:Void Singer|Void Singer]]&lt;br /&gt;
||Returns the first found index of multiple search items in a list. (Multi-item version of [[llListFindList]]. Fwd and Rev versions included)&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Functions#List:_Get_Reverse_Order|List: Reverse]]&lt;br /&gt;
||[[User:Void Singer|Void Singer]]&lt;br /&gt;
||Returns an input List in reverse order&lt;br /&gt;
|-&lt;br /&gt;
||[[LinksetIndexing]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
||Functions for indexing a linkset by patterns or names down to their linkset numbers.&lt;br /&gt;
|-&lt;br /&gt;
||[[Live Event Timeout]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A script which will set the the music URL back to a radio station of your liking when a DJ leaves or forgets to switch back the URL after a live event. It takes multiple DJs, using a notecard and several configuration parameters.&lt;br /&gt;
|-&lt;br /&gt;
||[[Load URL]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Touch to get a dialog to visit the URL inside the script.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Kephra_Nurmi/lsDancemachine|lsDancemachine]]&lt;br /&gt;
||[[User:Kephra_Nurmi|Kephra Nurmi]]&lt;br /&gt;
|| Low lag client server dancemachine.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Kephra_Nurmi/lsDeejay|lsDeejay Home Edition]] &lt;br /&gt;
||[[User:Kephra_Nurmi|Kephra Nurmi]]&lt;br /&gt;
|| Client server media control for music, video, youtube, pictures, and texture animations.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Kephra_Nurmi/lsDialog|lsDialog]]&lt;br /&gt;
||[[User:Kephra_Nurmi|Kephra Nurmi]]&lt;br /&gt;
|| Universal notecard driven menu dialog system.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Kephra_Nurmi/lsDisplay|lsDisplay]]&lt;br /&gt;
||[[User:Kephra_Nurmi|Kephra Nurmi]]&lt;br /&gt;
|| Picture cycler with preloader.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Kephra_Nurmi/lsDistributor|lsDistributor]]&lt;br /&gt;
||[[User:Kephra_Nurmi|Kephra Nurmi]]&lt;br /&gt;
|| Simple &#039;try&#039; and &#039;buy&#039; vendor system.&lt;br /&gt;
|-&lt;br /&gt;
||[[LSL_languageAPI]]&lt;br /&gt;
||[[User:Gypsy paz|Gypsy Paz]]&lt;br /&gt;
||Multi-lingual API from notecard based language files&lt;br /&gt;
|-&lt;br /&gt;
||[[Mail]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||An system for sending objects to multiple recipients automatically supporting shared access and [[Greeter]] compatible auto-subscriptions.&lt;br /&gt;
|-&lt;br /&gt;
||[[Mandelbrot Explorer]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||An interactive fractal explorer.&lt;br /&gt;
|-&lt;br /&gt;
||[[Materialization Effects]]&lt;br /&gt;
||[[User:Overbrain Unplugged|Overbrain Unplugged]]&lt;br /&gt;
|| Special effects to add to rezzing events to simulate a teleportation or materialization.&lt;br /&gt;
|-&lt;br /&gt;
||[[Materialization Effects 2]]&lt;br /&gt;
||[[User:Nika Rugani|Nika Rugani]]&lt;br /&gt;
|| More efficient and faster version of Materialization Effects by Overbrain Unplugged.&lt;br /&gt;
|-&lt;br /&gt;
||[[Memory Module]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||An example of pseudo-persistent variable in-world storage.&lt;br /&gt;
|-&lt;br /&gt;
||[[Merge Sort]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Implements a Merge Sort in LSL, however this code is 300(ish) times slower than [[llListSort]]. Don&#039;t use this in a script!&lt;br /&gt;
|-&lt;br /&gt;
||[[Minesweeper]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||A simple minesweeper game.&lt;br /&gt;
|-&lt;br /&gt;
||[[Mood Color Changer]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A script that changes the color of all primitives in a linkset depending on the smileys the owner types on the main chat.&lt;br /&gt;
|-&lt;br /&gt;
||[[Morse Code]]&lt;br /&gt;
||{{User|Bobbyb30 Swashbuckler}}&lt;br /&gt;
||A script that allows for the conversion to and from morse code and can &amp;quot;play&amp;quot; morse code.&lt;br /&gt;
|-&lt;br /&gt;
||[[Multi-displays Texture Cycler]]&lt;br /&gt;
||[[User:Nargus Asturias|Nargus Asturias]]&lt;br /&gt;
||A simple texture rotator designed for multiple display screens. With delay between each screen AND delay between each loop.&lt;br /&gt;
|-&lt;br /&gt;
||[[Multi Item Rezzer|Multi Item Rezzer]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||A rework of my old High Altitude Rezzer. Place the objects that you wish to choose from to be rezzed inside. Sit on the rezzer and pick the item and the height. It will go to target height and rez the object.&lt;br /&gt;
|-&lt;br /&gt;
||[[Multirezzer|Multirezzer (on collision)]]&lt;br /&gt;
||[[User:Beet Streeter|Beet Streeter]]&lt;br /&gt;
||Spawns up to 10 objects when the object containing the script collides with a user.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Allen_Kerensky/Myriad_Lite_Preview_5|Myriad Lite Preview 5 RPG System]]&lt;br /&gt;
||[[User:Allen_Kerensky|Allen Kerensky]]&lt;br /&gt;
||Working preview of the Myriad Universal RPG System by Ashok Desai, converted to LSL as a roleplay meter with quest NPC and goals, hand-to-hand and melee close combat, ranged combat, armor, healing, bullet, firearm, holster, practice target, and much more&lt;br /&gt;
|-&lt;br /&gt;
||[[N2K]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A Name To Key (Name2Key) implementation that does not use third-party databases, nor relies on the uptime of not well known websites but rather uses the World Wide Web Consortium to fetch the key of avatars while trying to alert the developers of the consequences of using Name2Key third-party providers as well as trying to refrain from sales pitch terminology such as &amp;quot;best&amp;quot;, &amp;quot;newest&amp;quot; and &amp;quot;fastest&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
||[[Name2Key in LSL]]&lt;br /&gt;
||[[User:Maeva Anatine|Maeva Anatine]]&lt;br /&gt;
||Get the Name2Key feature inside your scripts. Works even on lastly subscribed avatars.&lt;br /&gt;
|-&lt;br /&gt;
||[[Name2Key]]&lt;br /&gt;
||[[User:Nika Rugani|Nika Rugani]]&lt;br /&gt;
||Newest and fastest Name2Key search, While the database is small it is also connected to Second Life&#039;s search.&lt;br /&gt;
|-&lt;br /&gt;
||[[NexiiText]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
|| Text Renderer, specialised in features, performance and a compact nature. It features unique per character control, such as Colour, Bold, Italics, Underline, Stroke, Icons. The high performance means it comes in at a 5 char / prim ratio, but it is perfect where highly dynamic and rich text is required.&lt;br /&gt;
|-&lt;br /&gt;
||[[NexiiText2]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
|| Second Gen Text Renderer. Same as above but features use of [[PRIM_LINK_TARGET]] and an awesome dynamic prim allocation architecture.&lt;br /&gt;
|-&lt;br /&gt;
||[[No Auto-Return]]&lt;br /&gt;
||[[User:Bellla Clarity|Bella Clarity]]&lt;br /&gt;
||To stop your long and hard builds from getting returned in sandboxes (&#039;&#039;only single prims, though!&#039;&#039;).&lt;br /&gt;
|-&lt;br /&gt;
||[[No Auto-Return NR]]&lt;br /&gt;
||[[User:Jor3l Boa|Jor3l Boa]]&lt;br /&gt;
||This really works (29-05-09), needs a nearby region to do the trick and avoid auto return. (Tested on Blue and Rausch)&lt;br /&gt;
|-&lt;br /&gt;
||[[No Auto-Return (Multi)]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||A revision of Bella&#039;s that works for multi-prim objects.&lt;br /&gt;
|-&lt;br /&gt;
||[[No Limit Teleporter]]&lt;br /&gt;
||[[User:Morgam Biedermann|Morgam Biedermann]]&lt;br /&gt;
||Teleport to infinite altitudes (up to 4096m)&lt;br /&gt;
|-&lt;br /&gt;
||[[Object Size]]&lt;br /&gt;
||[[User:Chase Quinnell|Chase Quinnell]]&lt;br /&gt;
||Gets the dimensions and footprint of a linkset&lt;br /&gt;
|-&lt;br /&gt;
||[[Object to Data v1.4|Object to Data]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Turns an object into text (and back). Allows people to transfer objects through notecards (or otherwise).&lt;br /&gt;
|-&lt;br /&gt;
||[[Online Indicator|Online Indicator]]&lt;br /&gt;
||[[User:Kristy Fanshaw|Kristy Fanshaw]]&lt;br /&gt;
||Will show if the user is online or not. Displays users profile picture and allows to send IM&#039;s to user. Also gives a link to open the users profile&lt;br /&gt;
|-&lt;br /&gt;
||[[Open Group Join]]&lt;br /&gt;
||[[User:Alicia Stella|Alicia Stella]]&lt;br /&gt;
||User Touches Object to Join Group from Group Info window, (no bot.)&lt;br /&gt;
|-&lt;br /&gt;
||[[Open Prim Animator]]&lt;br /&gt;
||[[User:Todd Borst|Todd Borst]]&lt;br /&gt;
||Single script prim animation tool.  Menu driven, easy to use.&lt;br /&gt;
|-&lt;br /&gt;
||[[Open Zyngo Skin Installer]]&lt;br /&gt;
||[[User:Tmzasz Luminos|Tmzasz Luminos]]&lt;br /&gt;
||A Simple Script designed to install skins on the popular Skill machines.&lt;br /&gt;
|-&lt;br /&gt;
||[[One Script, many doors]]&lt;br /&gt;
||[[User:Kyrah Abattoir|Kyrah Abattoir]]&lt;br /&gt;
||Door script able to manage more than 50 linked doors from a single script instance.&lt;br /&gt;
|-&lt;br /&gt;
||[[ParseString2List]]&lt;br /&gt;
||[[User:Strife Onizuka|Strife Onizuka]]&lt;br /&gt;
||Same as [[llParseString2List]] and [[llParseStringKeepNulls]], but not limited to 8 spacers or separators. Thus substitute a call to the [[llParseString2List]] and [[llParseStringKeepNulls]] functions by a call to [[Parse_String_To_List|ParseString2List]] whenever you have more than 8 separators or more than 8 spacers.&lt;br /&gt;
|-&lt;br /&gt;
||[[Password Generator]]&lt;br /&gt;
||[[User:Syntrax Canucci|Syntrax Canucci]]&lt;br /&gt;
||This is an over-complicated, semi-complex password generator, which goes through multiple steps.&lt;br /&gt;
|-&lt;br /&gt;
||[[Pathfinder]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||A potential field based pathfinding library.&lt;br /&gt;
|-&lt;br /&gt;
||[[Pay to Strip]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||This script is mainly meant for dancers and uses RLV to allow people to strip an avatar by making every clothes and attachment piece removable, respectively detachable for a settable price.&lt;br /&gt;
|-&lt;br /&gt;
||[[Permanent Primitive URL]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A script that uses [http://tiny.cc http://tiny.cc] REST API to update a SIM URL and make it permanent. Full description on how to register and set up a &amp;quot;nice&amp;quot; URL, like: http://tiny.cc/Kira. Should work with most URL shortening services (I&#039;m not affiliated with tiny.cc except for having a pass at them for not allowing OpenSIM-style generated URLs).&lt;br /&gt;
|-&lt;br /&gt;
||[[Personal ATM Machine]]&lt;br /&gt;
||[[User:Jessikiti Nikitin|Jessikiti Nikitin]]&lt;br /&gt;
||Allows deposits and withdrawals into another of your accounts, without the account being logged in.&lt;br /&gt;
|-&lt;br /&gt;
||[[Phantom Child]]&lt;br /&gt;
||[[User:Aeron Kohime|Aeron Kohime]]&lt;br /&gt;
||Causes a child in a link set to become phantom without the entire object becoming phantom.&lt;br /&gt;
|-&lt;br /&gt;
||[[PHP_RegionFunctions]]&lt;br /&gt;
||[[User:Gypsy Paz|Gypsy Paz]] and [[User:Zayne Exonar|Zayne Exonar]]&lt;br /&gt;
||Three useful PHP functions to get region info&lt;br /&gt;
|-&lt;br /&gt;
||[[PhysicsLib]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
|| Interesting set of fun physics functions.&lt;br /&gt;
|-&lt;br /&gt;
||[[Play and Loop Sound]]&lt;br /&gt;
||[[User:Bellla Clarity|Bella Clarity]]&lt;br /&gt;
||Very short and simple script; plays and loops a sound in an object.&lt;br /&gt;
|-&lt;br /&gt;
||[[Posing stand|Posing Stand]]&lt;br /&gt;
||[[User:Bellla Clarity|Bella Clarity]]&lt;br /&gt;
||Just a pose script to edit [[attachments]] more easily.&lt;br /&gt;
|-&lt;br /&gt;
||[[PosJump]]&lt;br /&gt;
||[[User:Uchi Desmoulins|Uchi Desmoulins]]&lt;br /&gt;
||A much more efficient alternative to the popular [[warpPos]] function for bypassing 10m distance-moved limitations.&lt;br /&gt;
|-&lt;br /&gt;
||[[Puppeteer]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A simple puppeteer script that will allow you to record and animate prim movements and rotations.&lt;br /&gt;
|-&lt;br /&gt;
||[[Primitive Name Changer]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
|| A script that changes the primitive&#039;s name based on an user-configurable interval and a notecard list containing possible names.&lt;br /&gt;
|-&lt;br /&gt;
||[[Prefix Calculator]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
|| A calculator that evaluates expressions in prefix notation. &lt;br /&gt;
&amp;lt;code&amp;gt;+ 3 4 = 5. * + 1 2 + 3 4 = 14.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||[[Profile Generator]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A cynical script for generating boilerplate profiles by based on cliches and profile memes.&lt;br /&gt;
|-&lt;br /&gt;
||[[Profile Picture]]&lt;br /&gt;
||[[User: Jor3l Boa|Jor3l Boa]]&lt;br /&gt;
||A working profile picture script with the new SecondLife API (1/11/2011)&lt;br /&gt;
|-&lt;br /&gt;
||[[Progress Bar]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
|| Flexible and powerful little function for creating progress bars useful in hovertext.&lt;br /&gt;
|-&lt;br /&gt;
||[[Pseudo-random Number Generator]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Generates a Pseudo-random number between -0x7FFFFFFF and 0x7FFFFFFF&lt;br /&gt;
|-&lt;br /&gt;
||[[Quick Collar]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A simple, no-bulk, no external database and essential feature-packed RLV collar script for your pleasures.&lt;br /&gt;
|-&lt;br /&gt;
||[[Quicksort]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||LSL implementation of the Quicksort algorithm.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Rolig_Loon/Quiz_From_Notecard|Quiz From Notecard]]&lt;br /&gt;
||[[User:Rolig Loon|Rolig Loon]]&lt;br /&gt;
||A multiple-choice testing script that reads questions and answer choices from a notecard and presents them in dialog boxes.&lt;br /&gt;
|-&lt;br /&gt;
||[[Racter]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||In-world, multi-purpose chatterbot (Eliza/A.L.I.C.E. inspired) supporting multiple configurable hot-swappable brain-files with a wide range of applications.&lt;br /&gt;
|-&lt;br /&gt;
||[[Rainbow_palette]]&lt;br /&gt;
||[[User:Rui Clary|Rui Clary]]&lt;br /&gt;
||Build a color picker, using only one prim, and a few lines of code.&lt;br /&gt;
|-&lt;br /&gt;
||[[Random Gaussian Number Generator]]&lt;br /&gt;
||[[User:Vlad Davidson|Vlad Davidson]]&lt;br /&gt;
||Generates a random number drawn from a normal (Gaussian; bell-curve) distribution, based on a specified mean/stdev&lt;br /&gt;
|-&lt;br /&gt;
||[[Random AV Profile Projector]]&lt;br /&gt;
||[[User:Debbie Trilling|Debbie Trilling]]&lt;br /&gt;
||Randomly selects an AV from a crowd &amp;amp; then projects their profile picture as a &#039;holographic&#039; image &lt;br /&gt;
|-&lt;br /&gt;
||[[Random Object Vendor]]&lt;br /&gt;
||[[User:CodeBastard Redgrave|CodeBastard Redgrave]]&lt;br /&gt;
||Simple vendor that gives out random objects when paid the right amount &lt;br /&gt;
|-&lt;br /&gt;
||[[Random Password Generator]]&lt;br /&gt;
||[[User:Jor3l Boa|Jor3l Boa]]&lt;br /&gt;
||Generate Random passwords based on String Length.&lt;br /&gt;
|-&lt;br /&gt;
||[[RavText]]&lt;br /&gt;
||[[User:Ravenous Dingo|Ravenous Dingo]]&lt;br /&gt;
||An alternate to XyText.  This is a lightweight, multiple font 10 character text display system.  It only supports uppercase alphanumeric text and a few special characters, but it is very fast, renders quickly and supports multiple fonts. It is meant for specialized use when all that is desired is basic, fast text display and the extra &amp;quot;bells and whistles&amp;quot; are not needed.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:PixelProphet Lane/Scripts#Real Object Inventory To Dialog|Real Object Inventory To Dialog]]&lt;br /&gt;
||[[User:PixelProphet Lane|PixelProphet Lane]]&lt;br /&gt;
||Display any amount of items contained in an Object in a Dialog, regardless of item name length.&lt;br /&gt;
|-&lt;br /&gt;
||[[RentalBoxv1|Rental Box, Simply]]&lt;br /&gt;
||[[User:Sendao Goodman|Sendao Goodman]]&lt;br /&gt;
||Simple explanation of how to make rental boxes.&lt;br /&gt;
|-&lt;br /&gt;
||[[Rental Cube]]&lt;br /&gt;
||[[User:Hank Ramos|Hank Ramos]]&lt;br /&gt;
||Simple cube for renting out a space.&lt;br /&gt;
|-&lt;br /&gt;
||[[Remote Texture Loader]]&lt;br /&gt;
||{{User|Bobbyb30 Swashbuckler}}&lt;br /&gt;
||A set of scripts for remotely loading textures within a sim. This means that a single &amp;quot;texture server&amp;quot; can manage multiple changing billboards within a sim.&lt;br /&gt;
|-&lt;br /&gt;
||[[Say Region Frames Per Second|Region Frames Per Second]]&lt;br /&gt;
||[[User:Heymeriou Mystakidou|Heymariou Mystakidou]]&lt;br /&gt;
|| Says the region name and frames per second out loud on command.&lt;br /&gt;
|-&lt;br /&gt;
||[[Security Orb|Security Orb]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A regular security orb that ejects people from a land parcel supporting a menu configuration and a notecard based access list.&lt;br /&gt;
|-&lt;br /&gt;
||[[Resizer multi-prims|Resizer multi-prims]]&lt;br /&gt;
||[[User:Christy Mansbridge|Christy Mansbridge]]&lt;br /&gt;
||1 Mono script to resize object (1 to 256 prims) by blue menu. Avoid risk to break the build by increasing link distance.&lt;br /&gt;
|-&lt;br /&gt;
||[[sbDialog]]&lt;br /&gt;
||[[User:Siann_Beck|Siann Beck]]&lt;br /&gt;
||A simple replacement function for [[llDialog]]. It re-orders the button list so that the button values, as passed to it, display left-to-right, top-to-bottom. It also opens a [[llListen|listen]] on the specified channel, and returns the handle.&lt;br /&gt;
|-&lt;br /&gt;
||[[Scheduled Payments]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A script that will allow you to make scheduled (and reoccurring) payments to multiple avatars via a notecard. &lt;br /&gt;
|-&lt;br /&gt;
||[[Scheduler]]&lt;br /&gt;
||[[User:Haravikk Mistral|Haravikk Mistral]]&lt;br /&gt;
||Schedule multiple events using a single script timer&lt;br /&gt;
|-&lt;br /&gt;
||[[Scheme_Interpreter|Scheme Interpreter]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||A scheme interpreter capable of handling most scheme expressions, including lambda and lists.&lt;br /&gt;
|-&lt;br /&gt;
||[[Script Override Functions]]&lt;br /&gt;
||[[User:Revolution Perenti|Revolution Perenti]]&lt;br /&gt;
||bypass default strings, integer etc in chat channel.&lt;br /&gt;
|-&lt;br /&gt;
||[[Scripted Attachment Detector.lsl|Scripted Attachment Detector]]&lt;br /&gt;
||{{User|Bobbyb30 Swashbuckler}}&lt;br /&gt;
||A script that will display avatars wearing scripted attatchments in hovertext. This may be worn as an hud or rezzed. &lt;br /&gt;
|-&lt;br /&gt;
||[[Self Upgrading Script Enhanced]]&lt;br /&gt;
||[[User:Cron Stardust|Cron Stardust]]&lt;br /&gt;
||Keeps only latest version of the script on prim (even with multiple adds of the same script!)&lt;br /&gt;
|-&lt;br /&gt;
||[[Sensor Visualizer]]&lt;br /&gt;
||[[User:Cerise Sorbet|Cerise Sorbet]]&lt;br /&gt;
||Shows the size and shape you get with [[llSensor]] range and arc parameters&lt;br /&gt;
|-&lt;br /&gt;
||[[Serverless Key Exchange]]&lt;br /&gt;
||[[User:Sendao Goodman|Sendao Goodman]]&lt;br /&gt;
||Maintains a network of object keys without using an external server.&lt;br /&gt;
|-&lt;br /&gt;
||[[SHA1|SHA1 Hash]]&lt;br /&gt;
||[[User:Strife Onizuka|Strife Onizuka]]&lt;br /&gt;
||Performs a SHA1 Hash on an input text. Similar to MD5 only (slightly) more secure. &lt;br /&gt;
|-&lt;br /&gt;
||[[Shoutcast - radio controller v0.3 (remake of similar scripts)]]&lt;br /&gt;
||[[User:Flennan Roffo|Logic Scripts]]&lt;br /&gt;
||Control your shoutcast radio stations with this shoutcast controller. Uses notecard for info about genres and stations and menu to select the station. Sends info to Xytext display.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:PixelProphet Lane/Scripts#Show Agent Script Count and memory|Show Agent Script Count and memory]]&lt;br /&gt;
||[[User:PixelProphet Lane|PixelProphet Lane]]&lt;br /&gt;
||Fast and efficient method to display the amount of scripts and memory usage for an agent&lt;br /&gt;
|-&lt;br /&gt;
||[[Sim Map Particle Projector]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||Displays a floating map of the sim the script is in.&lt;br /&gt;
|-&lt;br /&gt;
||[[Sim Restart Logger]]&lt;br /&gt;
||[[User:Kyrah Abattoir|Kyrah Abattoir]]&lt;br /&gt;
||Counts region restarts and displays log of last 9 restarts together with region FPS and dilation. &lt;br /&gt;
|-&lt;br /&gt;
||[[SIM status]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A script that will scan and display the status of SIMs (up, down, starting, stopping, unknown, crashed) from a notecard in the same prim as the script.&lt;br /&gt;
|-&lt;br /&gt;
||[[Simple Elevator in a Box]]&lt;br /&gt;
||[[User:Hank Ramos|Hank Ramos]]&lt;br /&gt;
||Simple elevator example.&lt;br /&gt;
|-&lt;br /&gt;
||[[Simple Pay Door]]&lt;br /&gt;
||[[User:Giygas Static|Giygas Static]]&lt;br /&gt;
||Simple door you pay to get access.&lt;br /&gt;
|-&lt;br /&gt;
||[[Skillingo AntiHack Script]]&lt;br /&gt;
||[[User:Tmzasz Luminos|Tmzasz Luminos]]&lt;br /&gt;
||A simple Protection script for skillingo thats modifyable to work with other machines.&lt;br /&gt;
|-&lt;br /&gt;
||[[Skunk Money]]&lt;br /&gt;
||[[User:Hank Ramos|Hank Ramos]]&lt;br /&gt;
||Fun gambling machine of yesteryear, which only supports freeplay now due to SL regulations against gambling. &lt;br /&gt;
|-&lt;br /&gt;
||[[SLateIt]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||An augmented virtual reality HUD.&lt;br /&gt;
|-&lt;br /&gt;
||[[SLetanque]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||An LSL petanque game.&lt;br /&gt;
|-&lt;br /&gt;
||[[SLURL HUD]]&lt;br /&gt;
||[[User:CodeBastard Redgrave|CodeBastard Redgrave]]&lt;br /&gt;
||Touch this HUD to get a SLURL through IM, email and floating text.&lt;br /&gt;
|-&lt;br /&gt;
||[[BuildSlurl (NewAge)]]&lt;br /&gt;
||[[User:Archile Azalee|Archile Azalee]]&lt;br /&gt;
||A way to create a SLurl in a single function BuildSlurl&lt;br /&gt;
|-&lt;br /&gt;
||[[SL Mail V1.2]]&lt;br /&gt;
||[[User:Flennan Roffo|Flennan Roffo]]&lt;br /&gt;
||Second Life mail client V1.2 (released sept&#039;07). Send and receive mail from within Second Life from and to any address. With Address Book function and many chat commands. V1.3 is upcoming soon! &lt;br /&gt;
|-&lt;br /&gt;
||[[SL_NTPoHTTP_v1.1_client|SL NTPoHTTP client]]&lt;br /&gt;
|[[User:SignpostMarv Martin|SignpostMarv Martin]]&lt;br /&gt;
||Second Life Needs Time Parsing over Hyper Text Transfer Protocol&lt;br /&gt;
Emulates the function of [[llGetWallclock]] for any timezone by using SLOpenID&#039;s SLNTPoHTTP service. Also supports ISO 8601 and RFC 2822 timestamps. Script is dependent upon an external service operated by the author!&lt;br /&gt;
|-&lt;br /&gt;
||[[Slide Display]]&lt;br /&gt;
|[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A display for presentations or talks supporting multiple slides as well as zooming-in on the slides.&lt;br /&gt;
|-&lt;br /&gt;
||[[Smile]]&lt;br /&gt;
|[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||An extended smile script supporting two smiles (extendable via a list) and a time delay triggering them at random.&lt;br /&gt;
|-&lt;br /&gt;
||[[Smooth Rotating Door]]&lt;br /&gt;
|[[User:Toy Wylie|Toy Wylie]]&lt;br /&gt;
||A script for doors that open and close smoothly using llTargetOmega&lt;br /&gt;
|-&lt;br /&gt;
||[[Smooth Sliding Door]]&lt;br /&gt;
|[[User:SimonT Quinnell|SimonT Quinnell]]&lt;br /&gt;
||A script for sliding doors that open and close smoothly using [[llMoveToTarget]]. Asjusts for prim orientation.&lt;br /&gt;
|-&lt;br /&gt;
||[[Song Requests]]&lt;br /&gt;
|[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||Helper script for DJs, allowing listeners to request songs and make dedications.&lt;br /&gt;
|-&lt;br /&gt;
||[[Speed Tester]]&lt;br /&gt;
||{{User|Bobbyb30 Swashbuckler}}&lt;br /&gt;
||Similar to the [[Efficiency Tester]], this script allows you to test the speed of a particular function or snippet with multiple trials giving min/max/avg/median and the standard deviation.&lt;br /&gt;
|-&lt;br /&gt;
||[[Spiral Staircase Generator]]&lt;br /&gt;
|[[User:Meyermagic Salome|Meyermagic Salome]]&lt;br /&gt;
||Generates nice looking spiral staircases without much hassle.&lt;br /&gt;
|-&lt;br /&gt;
||[[Static URL&#039;s for HTTP-In Service|Static_URLs]]&lt;br /&gt;
||[[User:Jor3l Boa|Jor3l Boa]]&lt;br /&gt;
||How to generate a static url for HTTP-In temporal limitations.&lt;br /&gt;
|-&lt;br /&gt;
||[[String Compare]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Compares two strings and reliably returns either 1, -1, or 0 if they are the same.&lt;br /&gt;
|-&lt;br /&gt;
||[[Synchronize]]&lt;br /&gt;
||[[User:Cay Trudeau|Cay Trudeau]]&lt;br /&gt;
||Makes synchronized start to a task on even/odd seconds&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Functions#String:_Find_Last_Index|String: Reverse]]&lt;br /&gt;
||[[User:Void Singer|Void Singer]]&lt;br /&gt;
||Returns an input string in reverse order&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Functions#String:_Get_Reverse_Order|String: Last Index]]&lt;br /&gt;
||[[User:Void Singer|Void Singer]]&lt;br /&gt;
||Returns the last index of search found in string (the backward equivalent of [[llSubStringIndex]])&lt;br /&gt;
|-&lt;br /&gt;
||[[Tail Messages (NewAge)]]&lt;br /&gt;
||[[User:Asia Snowfall|Asia Snowfall]]&lt;br /&gt;
||A super nice easy to use script for those non-scripters out there! NewAge coding has done it again where you no longer need to scroll up and down adding buttons and adding messages, Features a tag system (you&#039;ll see what i mean :P)&lt;br /&gt;
|-&lt;br /&gt;
||[[Taper Door (minimalistic)]]&lt;br /&gt;
||[[User:Kopilo Hallard|Kopilo Hallard]]&lt;br /&gt;
||A basic script for doors which open and close using taper.&lt;br /&gt;
|-&lt;br /&gt;
||[[Teleport HUD]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||WORKS TO 4096 METERS!! Very user friendly teleport HUD. Add destinations by touching &amp;quot;Add&amp;quot; &amp;amp; naming destination in chat. Automatically gets sim name and coordinates. Will only display the destinations in the sim you are currently in. Demonstrates more advanced list manipulation and stride functions.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Programs#v7-D_Enh._Landmark-2-Map|Teleporter (landmark based)]]&lt;br /&gt;
||[[User:Void_Singer|Void_Singer]]&lt;br /&gt;
||Uses Landmarks to offer map teleports. Works as Hud or inworld objects, just drop in landmarks and go.&lt;br /&gt;
|-&lt;br /&gt;
||[[Text_Scroller|Text Scroller]]&lt;br /&gt;
||[[User:Fred_Gandt|Fred Gandt]]&lt;br /&gt;
||A simple text display object that scrolls text (applied as a texture) from right to left (like &#039;&#039;those&#039;&#039; LED signs) in a continuous loop.&lt;br /&gt;
|-&lt;br /&gt;
||[[Bobbyb&#039;s texture changer|Texture Changers]]&lt;br /&gt;
||{{User|Bobbyb30 Swashbuckler}}&lt;br /&gt;
||A collection of texture changing scripts.&lt;br /&gt;
|-&lt;br /&gt;
||[[Texture Menu Management|Texture Management]]&lt;br /&gt;
||[[User:Revolution Perenti|Revolution Perenti]]&lt;br /&gt;
||Dialog Menu based Texture Selection.&lt;br /&gt;
|-&lt;br /&gt;
||[[Texture Particle Poofer|Texture Particle Poofer]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||This is a generic dialog-based particle poofer, emitting textures towards an avatar for a configurable amount of time.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Xen_Lisle/Texture_Slide|Texture Slide]]&lt;br /&gt;
||[[user:Xen Lisle|Xen Lisle]]&lt;br /&gt;
||Slides a texture on mouse movement&lt;br /&gt;
|-&lt;br /&gt;
||[[Tic Tac Toe]]&lt;br /&gt;
||[[User:CG Linden|CG Linden]]&lt;br /&gt;
||Step by step demo on how to implement a larger scripting project&lt;br /&gt;
|-&lt;br /&gt;
||[[TightList]]&lt;br /&gt;
||[[User:Strife Onizuka|Strife Onizuka]]&lt;br /&gt;
||Tight List is a family of functions for encoding lists as strings and then decoding them back into lists.&lt;br /&gt;
There are two flavors: TightList and TightListType. TightListType preserves types and uses a 6 char header, while TightList uses a 1 char header that doesn&#039;t preserve type. &lt;br /&gt;
|-&lt;br /&gt;
||[[Timer Module]]&lt;br /&gt;
||[[User:Isabelle Aquitaine|Isabelle Aquitaine]]&lt;br /&gt;
||Manage multiple timers via linked messages.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Functions#Unix_time_code_to_list_format|Timestamp:&amp;lt;br&amp;gt;Unix time code to list format]]&lt;br /&gt;
||[[User:Void Singer|Void Singer]]&lt;br /&gt;
||converts Unix timestamps to their [Y, M, D, h, m, s] equivalents (ex: 1234567890 to [2009, 2, 13, 3, 31, 30])&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Functions#List_format_to_Unix_time_code.|Timestamp:&amp;lt;br&amp;gt;List format to Unix time code]]&lt;br /&gt;
||[[User:Void Singer|Void Singer]]&lt;br /&gt;
||converts [Y, M, D, h, m, s] timestamps to their Unix equivalents (ex: [2009, 2, 13, 3, 31, 30] to 1234567890)&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Functions#Weekday_from_Unix_timestamp|Timestamp:&amp;lt;br&amp;gt;Weekday from Unix timestamp]]&lt;br /&gt;
||[[User:Void Singer|Void Singer]]&lt;br /&gt;
||Gets weekday from Unix timestamps (ex: &amp;quot;Friday&amp;quot; from 1234567890)&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Functions#Weekday_from_.28_Y.2C_M.2C_D_.29_format|Timestamp:&amp;lt;br&amp;gt;Weekday from (Y, M, D) format]]&lt;br /&gt;
||[[User:Void Singer|Void Singer]]&lt;br /&gt;
||Gets weekday from (Y, M, D) timestamps (ex: &amp;quot;Friday&amp;quot; from (2009, 2, 13))&lt;br /&gt;
|-&lt;br /&gt;
||[[The Stash (Bank)]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||This is a depositing system to link your secondary account (alt) to a prim in-world so you can retrieve money without switching back and forth between accounts. It supports setting an upper limit, sharing the stash if you wish, logging everybody who deposited money and retrieved money, sending money to a list of bookmarked avatars and getting a status of your current holdings. It also explains some tricks for developers, for example, how to get another timer() if your current timer() is used up already.&lt;br /&gt;
|-&lt;br /&gt;
||[[Tipjar]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||This is a fully fledged tipjar supporting shared access, split profits, inviting to group, handing over gifts, maintaining statistics of who tipped most and who tipped in general, eliminating deed to group and comes with an innovative feature: it periodically moves around from avatar to avatar in the room and returns back to its initial position after a sweep. This way your tijpar will not be static, but participate in the party!&lt;br /&gt;
|-&lt;br /&gt;
||[[Touch A Quote]]&lt;br /&gt;
||[[User:CodeBastard Redgrave|CodeBastard Redgrave]]&lt;br /&gt;
||Touch an object to read quotes sequentially from a notecard&lt;br /&gt;
|-&lt;br /&gt;
||[[Touring Balloon]]&lt;br /&gt;
||[[User:Hank Ramos|Hank Ramos]]&lt;br /&gt;
||Automated touring balloon with many options from long ago.  Always seems to work on one SL release, and not the other.&lt;br /&gt;
|-&lt;br /&gt;
||[[Towncrier]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A simple towncrier to be used in role-play SIMs or wherever there is a need to broadcast news in random intervals.&lt;br /&gt;
|-&lt;br /&gt;
||[[Trivia]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A trivia game engine with provided ready-made notecards.&lt;br /&gt;
|-&lt;br /&gt;
||[[Under Age Boot]]&lt;br /&gt;
|[[User:Chance Unknown|Chance Unknown]]&lt;br /&gt;
||Security device example to teleport home accounts below a minimum age limit; can be useful in combating free griefer accounts.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Rolig_Loon/UNDO_PosRot|UNDO_PosRot]]&lt;br /&gt;
||[[User:Rolig Loon|Rolig Loon]]&lt;br /&gt;
||Allows user to undo position and rotation changes that have been made &amp;quot;manually&amp;quot; to any or all prims in a linkset.&lt;br /&gt;
|-&lt;br /&gt;
||[[Universal Translator]]&lt;br /&gt;
|[[User:Hank Ramos|Hank Ramos]]&lt;br /&gt;
||Chat listener that handles seamless translation of public chat between 50+ written languages without the need for configuration.  Handles numerous avatars, auto-detects languages, and works together with multiple copies of translators to spread-workload using a sophisticated back-end communications sub-system.&lt;br /&gt;
|-&lt;br /&gt;
||[[Unix2DateTime]]&lt;br /&gt;
|[[User:Flennan Roffo|Flennan Roffo]]&lt;br /&gt;
||Conversion from Unix time ([[llGetUnixTime]]()) to date and time string and vice versa.&lt;br /&gt;
|-&lt;br /&gt;
||[[Unmutable Descript Nagger]]&lt;br /&gt;
|[[User:Bobbyb30 Zohari|Bobbyb30 Zohari]]&lt;br /&gt;
||To nag avatars to take off their scripted attatchments.&lt;br /&gt;
|-&lt;br /&gt;
||[[Unpacker On Rez (NewAge)]]&lt;br /&gt;
|[[User:Asia Snowfall|Asia Snowfall]]&lt;br /&gt;
||A very simple to use script for all you creators out there, This script will enable you to send out boxed items and make it easier for users to unpack, Also features auto die on completion. Very simple to configure!&lt;br /&gt;
|-&lt;br /&gt;
||[[Unpacker On Touch (NewAge)]]&lt;br /&gt;
|[[User:Asia Snowfall|Asia Snowfall]]&lt;br /&gt;
||Exactly like Unpacker On Rez, But changed some things about to make it Unpack On Touch&lt;br /&gt;
|-&lt;br /&gt;
||[[Update distributor]]&lt;br /&gt;
|[[User:Dale Innis|Dale Innis]]&lt;br /&gt;
||Distribute an object (like a project update) to a list of people named in a notecard.&lt;br /&gt;
|-&lt;br /&gt;
||[[UUID2Channel]]&lt;br /&gt;
||[[User:Project Neox|Project Neox]]&lt;br /&gt;
||Optimised version of the original key2channel generators.&lt;br /&gt;
|-&lt;br /&gt;
||[[UUID Song Generator]]&lt;br /&gt;
||{{User|Sendao Goodman}}&lt;br /&gt;
||Translates a UUID into a simple song and plays it.&lt;br /&gt;
|-&lt;br /&gt;
||[[VirtualID_URLMap|VirtualID URL Mapper for HTTP-in]]&lt;br /&gt;
|[[User:Cenji Neutra|Cenji Neutra]]&lt;br /&gt;
||A script showing how to setup a static URL of the form &amp;lt;your-alias&amp;gt;.obj.virtualid.info which maps to the dynamic HTTP-in URL LSL generates and keeps it up-to-date.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Programs#v7-D_Advanced_Visitor_Greeter|Visitor Greeter]]&lt;br /&gt;
|[[User:Void_Singer|Void_Singer]]&lt;br /&gt;
||Reduced spam visitor greeter, highly configurable, easy to modify.&lt;br /&gt;
|-&lt;br /&gt;
||[[Visitor Logger (Web/Basic) ]]&lt;br /&gt;
|[[User:Buddy Sprocket|Buddy Sprocket]]&lt;br /&gt;
||A very basic visitor logger - log visitors in SL to a text file on your web-site.&lt;br /&gt;
|-&lt;br /&gt;
||[[Visitors]]&lt;br /&gt;
|[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A series of scripts to hold lists of visitors taking into account display names and supporting tracking multiple visits.&lt;br /&gt;
|-&lt;br /&gt;
||[[Volleyball Game (Kira&#039;s Artillery Variations)]]&lt;br /&gt;
|[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||The game of Volleyball in SecondLife, based on the [[Artillery]] script and freefall theory. Full build instructions, scripts, import archive and marketplace freebie product. All full permission.&lt;br /&gt;
|-&lt;br /&gt;
||[[Vote Simple]]&lt;br /&gt;
|[[User:JB_Kraft|JB Kraft]]&lt;br /&gt;
||Simple vote collector. One avi, one vote.&lt;br /&gt;
|-&lt;br /&gt;
||[[Walking Sound (NewAge)]]&lt;br /&gt;
|[[User:Asia Snowfall|Asia Snowfall]]&lt;br /&gt;
||Very powerful walking sound script, Featuring customer ability to add their own sounds with the API Sound Feature!&lt;br /&gt;
|-&lt;br /&gt;
||[[Wanderer]]&lt;br /&gt;
|[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A script that can be used to randomly move a prim around relative to its origin point. Can be used for breeders, robots, birds and other applications where a primitive has to move around by itself.&lt;br /&gt;
|-&lt;br /&gt;
||[[WarpPos]]&lt;br /&gt;
|[[User:Keknehv Psaltery|Keknehv Psaltery]]&lt;br /&gt;
||Non-physical movement without the 10m limit.&lt;br /&gt;
|-&lt;br /&gt;
||[[Watchdog]]&lt;br /&gt;
|[[User:Tika Oberueng|Tika Oberueng]]&lt;br /&gt;
||LSL Watchdog scripts to monitor other scripts in the prim and restart them if they crash or stop running.&lt;br /&gt;
|-&lt;br /&gt;
||[[Wiki3DBuilder]] [[Wiki3DBuilder1.0]]&lt;br /&gt;
||[[User:Salahzar Stenvaag|Salahzar Stenvaag]] &lt;br /&gt;
||Allows a group of people to collectively build up complex 3D mindmaps with connected concepts. Uses particles for connections and low prim usage. Nodes can be textured, colored, changed form size moved collectively by everybody and can distribute notecards, landmarks, URL, objects, textures. I provide two version 0.1 and 1.0 and probably next version will communicate with moodle and sloodle external websites.&lt;br /&gt;
|-&lt;br /&gt;
||[[Window Control]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||For window opacity, helpful for buildings.&lt;br /&gt;
|-&lt;br /&gt;
||[[WHMcs SecondLife plugin]]&lt;br /&gt;
|[[User:Alicia Sautereau|Alicia Sautereau]]&lt;br /&gt;
||Linden Dollar payment plugin for the WHMcs hosting portal.&lt;br /&gt;
|-&lt;br /&gt;
||[[XTEA Strong Encryption Implementation]]&lt;br /&gt;
||[[User:Morse Dillon|Morse Dillon]]&lt;br /&gt;
||An LSL implementation of XTEA (eXtended Tiny Encryption Algorithm).  This is the first known public release of a &#039;real&#039; strong encryption implementation in LSL and is released under the GNU General Public License (GPL).&lt;br /&gt;
|-&lt;br /&gt;
||[[XyText 1.5|XyText]]&lt;br /&gt;
||[[User:Xylor Baysklef|Xylor Baysklef]]&lt;br /&gt;
|| Display text (up to 10 characters) on a prim. Use as many prims as desired.&lt;br /&gt;
|-&lt;br /&gt;
||[[XyyyyzText|XyyyyzText]]&lt;br /&gt;
||[[User:Criz Collins|Criz Collins]]&lt;br /&gt;
|| Display text (up to 10 characters) on a prim. Displays different text for each line instead of one single text, that will be broken into the next lines. Watch here for what that means: http://screencast.com/t/1wMLujLcEO&lt;br /&gt;
|-&lt;br /&gt;
||[[XyzzyText|XyzzyText]]&lt;br /&gt;
||[[User:Thraxis Epsilon|Thraxis Epsilon]] and [[User:Gigs Taggart|Gigs Taggart]]&lt;br /&gt;
|| Display text (up to 10 characters) on a prim. Way more efficient than XyText.&lt;br /&gt;
|-&lt;br /&gt;
||[[Youtube TV]]&lt;br /&gt;
||[[User:Morgam Biedermann|Morgam Biedermann]]&lt;br /&gt;
||Watch your favorite Youtube videos / auto set the texture to the parcel media texture.&lt;br /&gt;
|-&lt;br /&gt;
||[[Zero Lag Poseball]]&lt;br /&gt;
||[[User:Jippen Faddoul|Jippen Faddoul]] and [[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||A simple poseball with no lag&lt;br /&gt;
|-&lt;br /&gt;
||[[Zigzag Sequence]]&lt;br /&gt;
||[[User:Project Neox|Project Neox]]&lt;br /&gt;
||Zigzag sequence generator I developed while scripting checkers&lt;br /&gt;
|-&lt;br /&gt;
||[[Input number of seconds, get a string back that shows days, hours, minutes, seconds]]&lt;br /&gt;
||[[User:Fire Centaur|Fire Centaur]]&lt;br /&gt;
||Returns a string that displays days, hours, seconds&lt;br /&gt;
|-&lt;br /&gt;
||[[Random Giver Prim]]&lt;br /&gt;
||[[User:Damian Darkwyr|Damian Darkwyr]]&lt;br /&gt;
||A randomized item giver with a game-like twist&lt;br /&gt;
|-&lt;br /&gt;
||[[Client Specific Contents Giver]]&lt;br /&gt;
||[[User:Damian Darkwyr|Damian Darkwyr]]&lt;br /&gt;
||Give Contents only to users of a specific Client. Such as Phoenix, CoolVL or 2.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Support Script Library==&lt;br /&gt;
These are scripts in other languages, intended to be run on other systems that support scripts written in LSL&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| [https://github.com/Nexii-Malthus/phpPathfinding phpPathfinding]&lt;br /&gt;
|| [[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
|| PHP script for offloading complex pathfinding operations away from heavy use simulators onto external servers. Primarily A* Algorithm. Flexible -- works with any type of node graph. Public Domain. Clean and minimalistic code.&lt;br /&gt;
|-&lt;br /&gt;
|| [[User:Ina Centaur/UUID/calimg.api|Calendar Image UUID API]]&lt;br /&gt;
|| [[User:Ina Centaur|Ina Centaur]]&lt;br /&gt;
|| API that gives the UUID of an image of a calendar image give month and year arguments.&lt;br /&gt;
|-&lt;br /&gt;
||[[HTTP Post request to a PHP server]]&lt;br /&gt;
||[[User:Corto Maltese|Corto Maltese]]&lt;br /&gt;
|| This small library allows you to make simple POST requests to your website. The libraries allow you to get your request through the variable $_POST on the server. It also include a basic security mechanism aimed to stop hacking. Comprises of LSL client script and PHP server script.&lt;br /&gt;
|-&lt;br /&gt;
|| [[User:Ina Centaur/PHP/k2n.php|Key2Name.php]]&lt;br /&gt;
|| [[User:Ina Centaur|Ina Centaur]]&lt;br /&gt;
|| Get Avatar&#039;s Name using Second Life search service. (like in LSL Key2Name)&lt;br /&gt;
|-&lt;br /&gt;
|| [[Lame_Object_DNS_and_Cross_Sim_Messaging|Lame Object DNS and Cross Sim Messaging]]&lt;br /&gt;
|| [[User:Liandra Ceawlin|Liandra Ceawlin]]&lt;br /&gt;
|| Simple, cheeseball method of doing cross-sim communications with http-in and an external object DNS service.&lt;br /&gt;
|-&lt;br /&gt;
|| [[Minify|LSL Minify]]&lt;br /&gt;
|| [[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
|| LSL Minification and obfuscation tool written in JavaScript. Contains a form on the wiki using a widget where you can post LSL scripts to be minified as well as the source-code. For another full-screen demo you may [http://eva.comaroski.me/lslclean.html check it on my website]. To use, paste any LSL code and press ctrl+alt+enter to get the minified version.&lt;br /&gt;
|-&lt;br /&gt;
|| [[User:SignpostMarv Martin/PHP/llXorBase64StringsCorrect|llXorBase64StringsCorrect]]&lt;br /&gt;
|| [[User:SignpostMarv Martin|SignpostMarv Martin]]&lt;br /&gt;
|| An implementation of [[llXorBase64StringsCorrect]] in PHP- should be useful if you&#039;re using llXorBase64StringsCorrect to do cryptography work in LSL2 and posting it out to the web via [[llHTTPRequest]].&lt;br /&gt;
|-&lt;br /&gt;
|| [[User:SignpostMarv Martin/PHP/lsl fu.php|lsl_fu.php]]&lt;br /&gt;
|| [[User:SignpostMarv Martin|SignpostMarv Martin]]&lt;br /&gt;
|| A basic OOP&#039;d PHP Class containing VeloxSeverine&#039;s $_POST fixer and Marv&#039;s own eccentric ideas for &amp;quot;fixing&amp;quot; things.&lt;br /&gt;
|-&lt;br /&gt;
|| [[User:Jor3l Boa/PHP/n2k.php|Name2Key.php]]&lt;br /&gt;
|| [[User:Jor3l Boa|Jor3l Boa]]&lt;br /&gt;
|| Get Avatar&#039;s UUID using Second Life search service. (like in LSL Name2Key)&lt;br /&gt;
|-&lt;br /&gt;
|| [[Public_Object_DNS|Public Object DNS]]&lt;br /&gt;
|| [[User:Liandra Ceawlin|Liandra Ceawlin]]&lt;br /&gt;
|| Public object DNS-like system running on GAE, for http-in. Hopefully scalable enough for wide-spread usage.&lt;br /&gt;
|-&lt;br /&gt;
|| Silo&lt;br /&gt;
|| [[User:Zero_Linden|Zero Linden]]&lt;br /&gt;
|| General purpose data store in PHP.  Use this to persist arbitrary data from LSL via [[llHTTPRequest]].  See:&lt;br /&gt;
* [http://www.notabene-sl.com/misc/silo-README.txt README] file&lt;br /&gt;
* [http://www.notabene-sl.com/misc/silo.tgz silo.tgz] tarball&lt;br /&gt;
* forum post [http://forums-archive.secondlife.com/54/69/119570/1.html Announcement].&lt;br /&gt;
|-&lt;br /&gt;
||[[Silverday ObjectDNS]]&lt;br /&gt;
||[[User:Till Stirling|Till Stirling]]&lt;br /&gt;
||Dynamic Object-DNS-System to provide dynamic mapping of LSL-URLs to persistent domains. Features include redirect service, password protected domains, write protected domains, LSL-API for all necessary functions, optional web-interface.&lt;br /&gt;
|-&lt;br /&gt;
|| [http://aubretec.com/products/sldb SLDB]&lt;br /&gt;
|| [[User:Luc Aubret|Luc Aubret]]&lt;br /&gt;
|| Flexible web database storage using PHP/MySQL.  Used to store per-user field/value pairs from in-world objects using [[llHTTPRequest]]. &lt;br /&gt;
* [http://aubretec.com/support/manuals/sldbkit/ Implementation Guide]&lt;br /&gt;
* [http://aubretec.com/wp-content/uploads/2009/05/sldb.zip Download] (.zip, 12kb)&lt;br /&gt;
|-&lt;br /&gt;
|| [https://tlabsfoundry.atlassian.net/wiki/display/SLAD/SL+Asset+Data SL Asset Data]&lt;br /&gt;
|| [[User:Trimda Hedges|Trimda Hedges]]&lt;br /&gt;
|| A set of Java classes to retrieve information about Groups, Parcels and Agents/Avatars based on their key (UUID).  Includes caching of requests and results and example application.  Copyright under Eclipse Public License v1&lt;br /&gt;
* [https://tlabsfoundry.atlassian.net/wiki/display/SLAD/Downloads Downloads]&lt;br /&gt;
* [http://trimda.com/javadocs/slassetdata/1.1.0/ JavaDocs]&lt;br /&gt;
* [https://tlabsfoundry.atlassian.net/wiki/display/TF/TLabs+Foundry Other Projects]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Articles&#039;&#039;&#039;&lt;br /&gt;
*[[:Category:LSL Examples| Examples]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{LSLC|}}&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Combat/Systems&amp;diff=1162509</id>
		<title>Combat/Systems</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Combat/Systems&amp;diff=1162509"/>
		<updated>2012-02-06T04:20:22Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: Updated Myriad Lite UCCS link to Preview 5&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{todo|Needs cleanup to match [[Combat]]}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Some areas of Second Life &amp;lt;!-- We really don&#039;t need to start the article off by advertising a sim * , like New Jessie, * --&amp;gt;are designed for the sole purpose of combat, in other areas combat is part of a larger role-playing theme.&lt;br /&gt;
There are two types of combat system in second life:&lt;br /&gt;
&lt;br /&gt;
*The built-in Linden Lab Combat System (LLCS)&lt;br /&gt;
*User-created combat systems.&lt;br /&gt;
&lt;br /&gt;
==Linden Lab Combat System (LLCS)==&lt;br /&gt;
&lt;br /&gt;
The Linden Lab Combat System is in effect in any parcel that the owner has designated as &amp;quot;unsafe&amp;quot;. When you are in one of these areas there will be a heart with a percentage next to it on your upper menu bar. When you see this meter, it means you can be killed in the area. When this percentage drops to zero, you are then &#039;dead&#039;, and you will teleported to your home location.&lt;br /&gt;
&lt;br /&gt;
Please note that being killed is &#039;&#039;&#039;not&#039;&#039;&#039; a big deal. You have to teleport back into the combat simulation from your home location, if you want to return to the combat. You will not lose anything (money, attachments, inventory) if you happen to die in this manner. However, NEVER set your home to an area that has Damage enabled, or else you may become stuck in an infinite teleport loop by a weapon that continuously kills you.&lt;br /&gt;
&lt;br /&gt;
In the LLCS, damage is dealt by collisions with scripted objects that have used [[LlSetDamage]] to make themselves damaging. Residents also take damage when they collide with any object, or with the ground (as in falling), at sufficiently high speed.&lt;br /&gt;
&lt;br /&gt;
There are several ways to defeat the LLCS. The most prominent method involves forcing your agent to become phantom. This is accomplished by sitting on an object, and then having that object enable Volume Detect. The agent will be “phantom” and no objects will be able to collide with that agent.&lt;br /&gt;
&lt;br /&gt;
To instantly kill an agent, that agent must be hit with an object that has its damage percent set to 100% (via llSetDamage()). Here are the conditions that will cause death.&lt;br /&gt;
&lt;br /&gt;
*Agent is not sitting&lt;br /&gt;
**Agent can be killed by any non-physical, non-phantom object.&lt;br /&gt;
**Agent can be killed by any physical, non-phantom object.&lt;br /&gt;
*Agent is sitting&lt;br /&gt;
**Agent is phantom&lt;br /&gt;
***Agent can’t be killed&lt;br /&gt;
**Agent is not phantom&lt;br /&gt;
***Agent can NOT be killed by a non-physical object.&lt;br /&gt;
***Agent can be killed by any physical, non-phantom object.&lt;br /&gt;
&lt;br /&gt;
Damage &amp;quot;heals&amp;quot; gradually over time.&lt;br /&gt;
&lt;br /&gt;
If several agents sit on an object and a collision occurs with a damage enabled object, the damage will be spread evenly across each agent.&lt;br /&gt;
&lt;br /&gt;
So, what regions support combat? For the beginner, places like New Jessie, Combat Core and Rausch are good ideas.  They all cater to different tastes, so let&#039;s check them out.&lt;br /&gt;
&lt;br /&gt;
===New Jessie - an Open Combat Zone===&lt;br /&gt;
&lt;br /&gt;
[http://slurl.com/secondlife/New%20Jessie%/128/128/20/  New Jessie SLurl]&lt;br /&gt;
&lt;br /&gt;
[[Image:New Jessie Ideal.jpg]]&lt;br /&gt;
&lt;br /&gt;
New Jessie is an open combat sim which is unaffiliated with any military and where everyone is welcome.  When you land here, you can set your home here so that during combat, you need not teleport back when you die. There is a healthy mix of close quarters combat in a small town there, as well as a pair of bunkers and a shorefront with barbed wire and tank spikes.  On top of all of it, there is a hub featuring a weapons shop, many free weapons, and a combat museum detailing the history of early combat in Second Life. New Jessie is the premier sim for conventional combat in Second Life.&lt;br /&gt;
&lt;br /&gt;
===Combat Core===&lt;br /&gt;
&lt;br /&gt;
Do or Die ?&lt;br /&gt;
 &lt;br /&gt;
This SIM is full of danger.Combat (sandbox) Core  (wipa 60min) LLCS damage.&lt;br /&gt;
&lt;br /&gt;
You do not need the reason for attack in this SIM.&lt;br /&gt;
The use of arms that the guns and are all HUD is permitted to you.&lt;br /&gt;
Prohibition item:HUGE PRIM, chat spam and more spam.&lt;br /&gt;
&lt;br /&gt;
[http://slurl.com/secondlife/Combat%20Core/128/128/28  Combat Core Safe Zone SLURL]&lt;br /&gt;
&lt;br /&gt;
[[Image:Core_logo04.jpg]]&lt;br /&gt;
&lt;br /&gt;
Combat Core is a free combat sandbox that allows you to utilize varioius weapons to fight other combatants.&lt;br /&gt;
There is no unnecessary obstacles and object, which makes movement in Combat Core smooth and relatively lag free.&lt;br /&gt;
At Combat Core, you may also make your own weapon, and use them during combat. If  you join the &amp;quot;Core Combat Crew&amp;quot; group at the front of the central tower, you will have access to home setting. &lt;br /&gt;
This will allow you to eliminate the time which must be used to TP from your home to the combat sandbox if you get killed.&lt;br /&gt;
All are free to join the &amp;quot;Core Combat Crew&amp;quot; group. Enjoy exciting and efficient combat simulation at Combat Core!&lt;br /&gt;
&lt;br /&gt;
===Public LLCS combat areas===&lt;br /&gt;
&lt;br /&gt;
Some of the most popular public LLCS combat areas are Rausch, Blue Base, and Red Base. These three sims are free-for-all sandboxes. There is a &amp;quot;safe zone&amp;quot; in the Rausch sandbox where you can&#039;t be attacked. It is usually surrounded by big yellow markers, and people have a tendency to gather in this area. (Please note that the &amp;quot;bases&amp;quot; are not really &amp;quot;bases&amp;quot; for anyone. They are free-for-all maps.)&lt;br /&gt;
&lt;br /&gt;
The difference between Rausch and other combat sims is that Rausch is a public sandbox region, as opposed to a private combat sim.  Anything is allowed here, so you&#039;re very likely to be killed before you know what hit you - although it also means you can kill others the same way.&lt;br /&gt;
&lt;br /&gt;
The fastest way to find these regions is to type &amp;quot;combat&amp;quot; into the places search.&lt;br /&gt;
&lt;br /&gt;
[http://slurl.com/secondlife/Combat%20(sandbox)%20Rausch/172/163/22 Rausch Safe Zone SLurl]&lt;br /&gt;
&lt;br /&gt;
[[Image:CombatBases.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Themed Military Roleplay Combat Areas using LLCS===&lt;br /&gt;
There are also many other regions &amp;amp; groups specifically for combat or military roleplay, which are running the LLCS damage system, among these are:&lt;br /&gt;
&lt;br /&gt;
*[http://slurl.com/secondlife/New%20Jessie/197/92/301  New Jessie SLurl]&lt;br /&gt;
*[http://slurl.com/secondlife/Combat%20Core/128/128/28  Combat Core Safe Zone SLURL]&lt;br /&gt;
*[http://slurl.com/secondlife/Badnarik/172/163/22  Merczateers HQ(Badnarik) SLurl]&lt;br /&gt;
*[http://slurl.com/secondlife/Titan/172/163/22  Ordo Imperialis HQ(Titan) SLurl]&lt;br /&gt;
*[http://slurl.com/secondlife/2142/172/163/22  2142 HQ(2142) SLurl]&lt;br /&gt;
*[http://slurl.com/secondlife/Elshout/172/163/22  Alliance Navy HQ(Elshout) SLurl]&lt;br /&gt;
&lt;br /&gt;
*[http://slurl.com/secondlife/Silver%20Side%20Bay/128/128/26  Gravity Zero Public Combat(Silver Side Bay) SLurl]&lt;br /&gt;
&lt;br /&gt;
== User-Created Combat Systems (UCCS) ==&lt;br /&gt;
&lt;br /&gt;
User-created combat systems do not use the built-in LLCS (and for this reason are sometimes called &amp;quot;safezone&amp;quot; combat systems), but instead use scripted objects both to track and to deal damage.&lt;br /&gt;
&lt;br /&gt;
This type of combat system can be used in any area that allows scripts to run. Usually these systems require the player to wear a &amp;quot;tag&amp;quot; or a &amp;quot;HUD&amp;quot; in order to play. This monitors your health, and various other stats, as well as add varios special features like heals, spells and miscellaneous weapons.&lt;br /&gt;
&lt;br /&gt;
These systems usually come with their own sets of rules that disallow the use of anything from advanced weapons to Bots to shields to instant-killers with the exception of basic weaponry and in some rare cases some small explosives. Sometimes the UCCS&#039; rules include the neccessity of [[Roleplay]]ing, but some again are just straight forward killing. Some advanced UCCS keep stats of the players such as kill count, death count, level etc. &lt;br /&gt;
&lt;br /&gt;
When the player dies, unlike the LLCS, they will not be teleported back home. They will typically either &amp;quot;respawn&amp;quot; after a few minutes or some advanced systems will spawn a &amp;quot;spawn ball&amp;quot; which the player sits on and they will be able to respawn at a random location in the combat area with full health. The exact effects of &amp;quot;death&amp;quot; depend on the particular UCCS in use.&lt;br /&gt;
&lt;br /&gt;
It is important to note that many UCCS discourage Defenses (shield, auto orbit), Advanced &amp;quot;guns&amp;quot;, Large Scale Explosives (+5 m), Automated Turrets, orbit, lag bombs. Most UCCS simulations also recommend using High quality basic weaponry that do not cause Lag within the SIM.&lt;br /&gt;
&lt;br /&gt;
A Few Notable User Created Combat Systems are &#039;[http://community.socionex.com/sgs/hud/ SGS (Socionex Game System)]&#039;, &#039;[http://larps.net/features.php LaRPS]&#039;, &#039;[http://www.dcs2.org DCS2]&#039;, &#039;[http://www.appliweb.org CSB]&#039;, &#039;[http://www.bnjrps.com RPS]&#039;, &#039;[http://ccs-gametech.com/news_tabs.php?cat=67 CCS]&#039;, &#039;[http://gm.mivabe.nl/ GM (Gorean meter)]&#039;, &#039;[http://www.combatsi.com/e107/news.php C:SI]&#039;, &#039;Spell Fire&#039;, &#039;[http://www.osiris-sl.com/ Osiris]&#039;, &#039;URCS&#039;, [http://BNWCS.org &#039;BNWCS&#039;], [http://vicecombat.com/ &#039;VICE&#039;], &#039;XRPS&#039;, &#039;FFRP&#039;.&lt;br /&gt;
&lt;br /&gt;
Because user-created combat systems generally depend on cooperation between scripted damage-dealing objects and scripted damage-sensing objects owned and worn by the player being damaged, there is a great potential for &#039;cheating&#039;, by writing scripts that appear to be obeying the rules of the system, but that in fact make the player very hard to damage, very good at dealing damage, or both.  Also meter resetting during play is common using these systems. While most users of these combat systems enjoy competing legitimately, there are always a few who try to cheat, and different combat communities and combat systems have taken various approaches to detecting, preventing, or discouraging the cheaters.&lt;br /&gt;
&lt;br /&gt;
An example user-created combat system with rules book and source code is [[User:Allen_Kerensky/Myriad_Lite_Preview_5|Myriad Lite Preview 5]] which contains a link to a tabletop pen-and-paper roleplay construction kit and the working preview scripts demonstrating the early fundamentals for a &amp;quot;metered&amp;quot; combat system with hand-to-hand, melee, and ranged combat, armor, healing, a practice target, and quests.&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview_5&amp;diff=1162508</id>
		<title>User:Allen Kerensky/Myriad Lite Preview 5</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview_5&amp;diff=1162508"/>
		<updated>2012-02-06T04:17:37Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Myriad Lite Preview 5 =&lt;br /&gt;
&lt;br /&gt;
The Myriad RPG System is a traditional pen-and-paper or tabletop role-playing game book.&lt;br /&gt;
The Myriad RPG System is freely and openly licensed, and contains the fundamental rules and information needed for someone to create their own role-playing game rules system.&lt;br /&gt;
&lt;br /&gt;
Myriad Lite implements part of the rules and information of the Myriad RPG System as a combat and role-playing HUD/meter for virtual worlds like SecondLife and OpenSimulator.&lt;br /&gt;
&lt;br /&gt;
This item is boxed, with two notecards inside. Each notecard contains embedded scripts, notes, and textures which represent a point-in-time snapshot of the Myriad Lite software as it is under development.&lt;br /&gt;
&lt;br /&gt;
The first notecard is the Players Guide with the scripts and instructions to make the core HUD with fist fighter, HUD Adventure Module, HUD Armor Module, wearable Armor, wearable Firearm with matching Bullet, wearable Holster/Sheath, a Melee weapon, hovertext Meter, and rezzable Practice Target dummy.&lt;br /&gt;
&lt;br /&gt;
The second notecard is the Region Owners Guide with scripts and instructions to make Baroun&#039;s Adventure Module (BAM) adventure giver and goal objects, a BAM compatible Trap, Healing Heart for Combat regions, Narrator to describe locations in roleplay regions, and the massive Character Creator with its associated 3 region servers, configuration, CSV data tables, and Template files.&lt;br /&gt;
&lt;br /&gt;
I make Myriad Lite scripts and files freely available to everyone to study, learn from, adapt, or contribute to.&lt;br /&gt;
&lt;br /&gt;
These scripts have been thoroughly linted (bug checked) and lightly tested on SecondLife (http://secondlife.com) and OpenSim (on OSgrid http://osgrid.org).&lt;br /&gt;
&lt;br /&gt;
The Myriad Lite RPG System was designed, written, and produced by Allen Kerensky (SL Avatar Name) with additional contributions noted within.&lt;br /&gt;
&lt;br /&gt;
Special thanks to Baroun Tardis for many hours of brainstorming and code contributions.&lt;br /&gt;
Many thanks to Lani Global for her suggestions which got me started on solving OSgrid coding problems, and continued testing and bug-reporting help.&lt;br /&gt;
&lt;br /&gt;
Myriad Lite is not a &amp;quot;ready to play&amp;quot; box of objects.&lt;br /&gt;
This is a do-it-yourself set of scripts to drop into your objects to make them ready-to-play as a combat system.&lt;br /&gt;
&lt;br /&gt;
This preview release includes the original RPG book itself in electronic text form, with a set of the scripts I am writing to implement this RPG in the virtual world. My hope is that others will be able to benefit from this and contribute to further development and implementation. This kit also provides a &amp;quot;model&amp;quot; for roleplay rules and &amp;quot;HUD/meter essentials&amp;quot; that can inspire or demonstrate how anyone could make their own roleplay game rules and scripts in the virtual world.&lt;br /&gt;
&lt;br /&gt;
There are many ways to &amp;quot;cheat&amp;quot; or &amp;quot;game&amp;quot; this system as implemented.&lt;br /&gt;
The Myriad Lite system is, first and foremost, an &amp;quot;on-your-honor&amp;quot; system, like every tabletop pen-and-paper RPG in history.&lt;br /&gt;
&lt;br /&gt;
I am unleashing/releasing this free here, on SL Marketplace, to remove any economic incentive from someone who might otherwise be tempted to take these freely available notes and scripts distributed in SL or OSgrid and post them for sale here or elsewhere.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s develop a better combat and roleplay system for the virtual world. This is one suggestion for a start. I hope it helps.&lt;br /&gt;
&lt;br /&gt;
Contact me in SL or OSgrid as Allen Kerensky if you would like to collaborate and develop this system further.&lt;br /&gt;
&lt;br /&gt;
People who purchase this item will receive an invite from me to join the Myriad RPG group in SecondLife (and OSgrid on request) to become part of the community.&lt;br /&gt;
&lt;br /&gt;
Contents: Two notecards with embedded:&lt;br /&gt;
* Notecard texts of the original Myriad RPG System&lt;br /&gt;
* Logo Image&lt;br /&gt;
* HUD Script which is the core of the game system&lt;br /&gt;
* Adventure Module for the HUD&lt;br /&gt;
* Armor Module for the HUD&lt;br /&gt;
* Sample Character Sheet Notecard&lt;br /&gt;
* Armor Attachment Script&lt;br /&gt;
* Bullet Script&lt;br /&gt;
* Firearm Script for pistols and rifles&lt;br /&gt;
* Healing Script for full or partial wound healing&lt;br /&gt;
* Sculpty heart texture for healing objects&lt;br /&gt;
* Holster script for draw, holster, and sheathe commands&lt;br /&gt;
* Meter Script for hovertext health meters&lt;br /&gt;
* Target Script for a practice dummy to test weapons against&lt;br /&gt;
* Adventure Giver NPC script to start people on quests&lt;br /&gt;
* 3 quest goal scripts - collision, location, and touch&lt;br /&gt;
* Trap to make quests more dangerous&lt;br /&gt;
* Narrator to describe roleplay areas in sim&lt;br /&gt;
* 3 region servers and Myriad Data for the...&lt;br /&gt;
* Character Creator&lt;br /&gt;
* Instructions for each item above&lt;br /&gt;
&lt;br /&gt;
You can get your copy of Myriad Lite Preview 5 from the [https://marketplace.secondlife.com/p/Myriad-Lite-Preview-5-February-2012-boxed/3165750 SecondLife Marketplace]&lt;br /&gt;
&lt;br /&gt;
Also check out the [https://marketplace.secondlife.com/p/LGS-Myriad-Animation-Pack-2012-1-Package-of-23-Combat-RP-Anims/3162696 Lani Global Systems Myriad Animation Pack]&lt;br /&gt;
&lt;br /&gt;
Full wiki site and details coming soon!&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_FAQ&amp;diff=1153288</id>
		<title>User:Allen Kerensky/Myriad Lite FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_FAQ&amp;diff=1153288"/>
		<updated>2011-09-09T02:13:35Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: reformatted&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Myriad Lite FAQ =&lt;br /&gt;
&lt;br /&gt;
== Q1 ==&lt;br /&gt;
How close is the Myriad RPG System to completion?&lt;br /&gt;
&lt;br /&gt;
Um, well &amp;quot;not very&amp;quot; is about all I could answer. It&#039;s a large book and I haven&#039;t made a detailed timeline of steps and progress and milestones and such. It does sort of depend on how much of it you would actually use for your particular game.&lt;br /&gt;
&lt;br /&gt;
== Q2 ==&lt;br /&gt;
How do I ... ?&lt;br /&gt;
&lt;br /&gt;
Well, you read the Myriad RPG book to see what the pen and paper rules are. Then you read the scripts to see how they implement things... and ask questions to other Myriad folks in the Myriad RPG group in SecondLife or OSgrid&lt;br /&gt;
&lt;br /&gt;
== Q3 ==&lt;br /&gt;
Does Myriad include ... ?&lt;br /&gt;
&lt;br /&gt;
Get the Marketplace version with the included e-text, or the PDF version from the link included with it and give the book a skim. That is the best way to see what features are in Myriad and what might not be included.&lt;br /&gt;
&lt;br /&gt;
== Q4 ==&lt;br /&gt;
Can you add ... ?&lt;br /&gt;
&lt;br /&gt;
Once I get the basic book converted into a game, I&#039;d be happy to consider extending Myriad Lite to include your feature suggestion. Or better yet, grab the source, figure out how to add it yourself, with the Myriad RPG group in SecondLife and OSgrid alongside to advise. The project gladly accepts contributions licensed under at least Creative Commons - Attribution 3.0 unported license.&lt;br /&gt;
&lt;br /&gt;
== Q5 ==&lt;br /&gt;
Can you give me pre-made items that already have all the scripts in them?&lt;br /&gt;
&lt;br /&gt;
A fair question, I could... but I haven&#039;t spent the time to make items *I* own that I can freely give away. Also, due to SecondLife&#039;s export policy changes in April 2010, even if I made objects, you could not export, save, or back them up because you are limited to backing up items that show YOU as the creator, rather than me.&lt;br /&gt;
&lt;br /&gt;
== Q6 ==&lt;br /&gt;
Can you give me a live demo of Myriad Lite right now?&lt;br /&gt;
&lt;br /&gt;
Yes, in [http://www.osgrid.org OSgrid] where Lani Global maintains the ixi combat sandbox region, graciously provided by Snoopy Pfeffer of [http://dreamlandmetaverse.com/ Dreamland Metaverse Hosting] - I cannot afford a SecondLife region to test or demo this in at Linden rates, especially for a free/libre&#039;/open-source project given away for L$0. Connecting to OSgrid requires a viewer with the ability to connect to OpenSimulator grids, and an account on OSgrid itself. Contact me as Allen Kerensky in SL or OSG and let me know if you are interested in a live demo in ixi.&lt;br /&gt;
&lt;br /&gt;
== Q7 ==&lt;br /&gt;
Can I use Myriad Lite in commercial/for-sale products.&lt;br /&gt;
&lt;br /&gt;
No, not using the materials as published since those are limited by the &amp;quot;NonCommercial&amp;quot; clause in their Creative Commons license.&lt;br /&gt;
If you wish to make sellable items based on Myriad Lite, contact Allen Kerensky to discuss license terms for Myriad Lite under the Attribution-Share-Alike or Attribution terms only.&lt;br /&gt;
&lt;br /&gt;
== Q8 ==&lt;br /&gt;
What happens if I use your scripts in a for-sale item anyway?&lt;br /&gt;
&lt;br /&gt;
If caught, I simply report you to Linden or OSgrid admins and request your account and inventory be removed, region blocked, or whatever else impish I feel like at the moment. You steal my ... freely given ... stuff, I will return that favor, just to be fair.&lt;br /&gt;
&lt;br /&gt;
== Q9 ==&lt;br /&gt;
What weapons does Myriad Lite work with? I assume it only works with Myriad weapons is that correct?&lt;br /&gt;
&lt;br /&gt;
Yep and likely always will because of the Myriad skill system base for combat rather than the underlying simulator physics engine.&lt;br /&gt;
This restricts the weapon compatibility, but also &amp;quot;encourages&amp;quot; both parties to combat using the same HUD, rather than some griefer being able to potshot you without even having a HUD/meter on.&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_FAQ&amp;diff=1153287</id>
		<title>User:Allen Kerensky/Myriad Lite FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_FAQ&amp;diff=1153287"/>
		<updated>2011-09-09T02:07:28Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: added Q&amp;amp;A 9&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Myriad Lite FAQ =&lt;br /&gt;
&lt;br /&gt;
Q1: How close is the Myriad RPG System to completion?&lt;br /&gt;
&lt;br /&gt;
A1: Um, well &amp;quot;not very&amp;quot; is about all I could answer. It&#039;s a large book and I haven&#039;t made a detailed timeline of steps and progress and milestones and such. It does sort of depend on how much of it you would actually use for your particular game.&lt;br /&gt;
&lt;br /&gt;
Q2: How do I ... ?&lt;br /&gt;
&lt;br /&gt;
A2: Well, you read the Myriad RPG book to see what the pen and paper rules are. Then you read the scripts to see how they implement things... and ask questions to other Myriad folks in the Myriad RPG group in SecondLife or OSgrid&lt;br /&gt;
&lt;br /&gt;
Q3: Does Myriad include ... ?&lt;br /&gt;
&lt;br /&gt;
A3: Get the Marketplace version with the included e-text, or the PDF version from the link included with it and give the book a skim. That is the best way to see what features are in Myriad and what might not be included.&lt;br /&gt;
&lt;br /&gt;
Q4: Can you add ... ?&lt;br /&gt;
&lt;br /&gt;
A4: Once I get the basic book converted into a game, I&#039;d be happy to consider extending Myriad Lite to include your feature suggestion. Or better yet, grab the source, figure out how to add it yourself, with the Myriad RPG group in SecondLife and OSgrid alongside to advise.&lt;br /&gt;
&lt;br /&gt;
Q5: Can you give me pre-made items that already have all the scripts in them?&lt;br /&gt;
&lt;br /&gt;
A5: A fair question, I could... but I haven&#039;t spent the time to make items *I* own that I can freely give away. Also, due to SecondLife&#039;s export policy changes in April 2010, even if I made objects, you could not export, save, or back them up because you are limited to backing up items that show YOU as the creator, rather than me.&lt;br /&gt;
&lt;br /&gt;
Q6: Can you give me a live demo of Myriad Lite right now?&lt;br /&gt;
&lt;br /&gt;
A6: Yes, in [http://www.osgrid.org OSgrid] where Lani Global maintains the Ixi combat sandbox region, graciously provided by Snoopy Pfeffer of [http://dreamlandmetaverse.com/ Dreamland Metaverse Hosting] - I cannot afford a SecondLife region to test or demo this in at Linden rates, especially for a freely given project. Connecting to OSgrid requires a viewer with the ability to connect to OpenSimulator grids, and an account on OSgrid itself. Contact me as Allen Kerensky in SL or OSG and let me know if you are interested in a live demo in Ixi.&lt;br /&gt;
&lt;br /&gt;
Q7: Can I use Myriad Lite in commercial/for-sale products.&lt;br /&gt;
&lt;br /&gt;
A7: No, not using the materials as published since those are limited by the &amp;quot;NonCommercial&amp;quot; clause in their Creative Commons license.&lt;br /&gt;
If you wish to make sellable items based on Myriad Lite, contact Allen Kerensky to discuss license terms for Myriad Lite under the Attribution-Share-Alike or Attribution terms only.&lt;br /&gt;
&lt;br /&gt;
Q8: What happens if I use your scripts in a for-sale item anyway?&lt;br /&gt;
&lt;br /&gt;
Q8: If caught, I simply report you to Linden or OSgrid admins and request your account and inventory be removed. You steal my stuff, I return that favor. That seems fair.&lt;br /&gt;
&lt;br /&gt;
Q9: What weapons does Myriad Lite work with? I assume it only works with Myriad weapons is that correct?&lt;br /&gt;
&lt;br /&gt;
A9: Yep and likely always will because of the Myriad skill system base for combat rather than the underlying simulator physics engine.&lt;br /&gt;
This restricts the weapon compatibility, but also &amp;quot;encourages&amp;quot; both parties to combat using the same HUD, rather than some griefer being able to potshot you without even having a HUD/meter on.&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Combat/Systems&amp;diff=1153266</id>
		<title>Combat/Systems</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Combat/Systems&amp;diff=1153266"/>
		<updated>2011-09-08T17:38:06Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: Updated user-created combat system link to Myriad Lite Preview 4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{todo|Needs cleanup to match [[Combat]]}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Some areas of Second Life &amp;lt;!-- We really don&#039;t need to start the article off by advertising a sim * , like New Jessie, * --&amp;gt;are designed for the sole purpose of combat, in other areas combat is part of a larger role-playing theme.&lt;br /&gt;
There are two types of combat system in second life:&lt;br /&gt;
&lt;br /&gt;
*The built-in Linden Lab Combat System (LLCS)&lt;br /&gt;
*User-created combat systems.&lt;br /&gt;
&lt;br /&gt;
==Linden Lab Combat System (LLCS)==&lt;br /&gt;
&lt;br /&gt;
The Linden Lab Combat System is in effect in any parcel that the owner has designated as &amp;quot;unsafe&amp;quot;. When you are in one of these areas there will be a heart with a percentage next to it on your upper menu bar. When you see this meter, it means you can be killed in the area. When this percentage drops to zero, you are then &#039;dead&#039;, and you will teleported to your home location.&lt;br /&gt;
&lt;br /&gt;
Please note that being killed is &#039;&#039;&#039;not&#039;&#039;&#039; a big deal. You have to teleport back into the combat simulation from your home location, if you want to return to the combat. You will not lose anything (money, attachments, inventory) if you happen to die in this manner. However, NEVER set your home to an area that has Damage enabled, or else you may become stuck in an infinite teleport loop by a weapon that continuously kills you.&lt;br /&gt;
&lt;br /&gt;
In the LLCS, damage is dealt by collisions with scripted objects that have used [[LlSetDamage]] to make themselves damaging. Residents also take damage when they collide with any object, or with the ground (as in falling), at sufficiently high speed.&lt;br /&gt;
&lt;br /&gt;
There are several ways to defeat the LLCS. The most prominent method involves forcing your agent to become phantom. This is accomplished by sitting on an object, and then having that object enable Volume Detect. The agent will be “phantom” and no objects will be able to collide with that agent.&lt;br /&gt;
&lt;br /&gt;
To instantly kill an agent, that agent must be hit with an object that has its damage percent set to 100% (via llSetDamage()). Here are the conditions that will cause death.&lt;br /&gt;
&lt;br /&gt;
*Agent is not sitting&lt;br /&gt;
**Agent can be killed by any non-physical, non-phantom object.&lt;br /&gt;
**Agent can be killed by any physical, non-phantom object.&lt;br /&gt;
*Agent is sitting&lt;br /&gt;
**Agent is phantom&lt;br /&gt;
***Agent can’t be killed&lt;br /&gt;
**Agent is not phantom&lt;br /&gt;
***Agent can NOT be killed by a non-physical object.&lt;br /&gt;
***Agent can be killed by any physical, non-phantom object.&lt;br /&gt;
&lt;br /&gt;
Damage &amp;quot;heals&amp;quot; gradually over time.&lt;br /&gt;
&lt;br /&gt;
If several agents sit on an object and a collision occurs with a damage enabled object, the damage will be spread evenly across each agent.&lt;br /&gt;
&lt;br /&gt;
So, what regions support combat? For the beginner, places like New Jessie, Combat Core and Rausch are good ideas.  They all cater to different tastes, so let&#039;s check them out.&lt;br /&gt;
&lt;br /&gt;
===New Jessie - an Open Combat Zone===&lt;br /&gt;
&lt;br /&gt;
[http://slurl.com/secondlife/New%20Jessie%/128/128/20/  New Jessie SLurl]&lt;br /&gt;
&lt;br /&gt;
[[Image:New Jessie Ideal.jpg]]&lt;br /&gt;
&lt;br /&gt;
New Jessie is an open combat sim which is unaffiliated with any military and where everyone is welcome.  When you land here, you can set your home here so that during combat, you need not teleport back when you die. There is a healthy mix of close quarters combat in a small town there, as well as a pair of bunkers and a shorefront with barbed wire and tank spikes.  On top of all of it, there is a hub featuring a weapons shop, many free weapons, and a combat museum detailing the history of early combat in Second Life. New Jessie is the premier sim for conventional combat in Second Life.&lt;br /&gt;
&lt;br /&gt;
===Combat Core===&lt;br /&gt;
&lt;br /&gt;
Do or Die ?&lt;br /&gt;
 &lt;br /&gt;
This SIM is full of danger.Combat (sandbox) Core  (wipa 60min) LLCS damage.&lt;br /&gt;
&lt;br /&gt;
You do not need the reason for attack in this SIM.&lt;br /&gt;
The use of arms that the guns and are all HUD is permitted to you.&lt;br /&gt;
Prohibition item:HUGE PRIM, chat spam and more spam.&lt;br /&gt;
&lt;br /&gt;
[http://slurl.com/secondlife/Combat%20Core/128/128/28  Combat Core Safe Zone SLURL]&lt;br /&gt;
&lt;br /&gt;
[[Image:Core_logo04.jpg]]&lt;br /&gt;
&lt;br /&gt;
Combat Core is a free combat sandbox that allows you to utilize varioius weapons to fight other combatants.&lt;br /&gt;
There is no unnecessary obstacles and object, which makes movement in Combat Core smooth and relatively lag free.&lt;br /&gt;
At Combat Core, you may also make your own weapon, and use them during combat. If  you join the &amp;quot;Core Combat Crew&amp;quot; group at the front of the central tower, you will have access to home setting. &lt;br /&gt;
This will allow you to eliminate the time which must be used to TP from your home to the combat sandbox if you get killed.&lt;br /&gt;
All are free to join the &amp;quot;Core Combat Crew&amp;quot; group. Enjoy exciting and efficient combat simulation at Combat Core!&lt;br /&gt;
&lt;br /&gt;
===Public LLCS combat areas===&lt;br /&gt;
&lt;br /&gt;
Some of the most popular public LLCS combat areas are Rausch, Blue Base, and Red Base. These three sims are free-for-all sandboxes. There is a &amp;quot;safe zone&amp;quot; in the Rausch sandbox where you can&#039;t be attacked. It is usually surrounded by big yellow markers, and people have a tendency to gather in this area. (Please note that the &amp;quot;bases&amp;quot; are not really &amp;quot;bases&amp;quot; for anyone. They are free-for-all maps.)&lt;br /&gt;
&lt;br /&gt;
The difference between Rausch and other combat sims is that Rausch is a public sandbox region, as opposed to a private combat sim.  Anything is allowed here, so you&#039;re very likely to be killed before you know what hit you - although it also means you can kill others the same way.&lt;br /&gt;
&lt;br /&gt;
The fastest way to find these regions is to type &amp;quot;combat&amp;quot; into the places search.&lt;br /&gt;
&lt;br /&gt;
[http://slurl.com/secondlife/Combat%20(sandbox)%20Rausch/172/163/22 Rausch Safe Zone SLurl]&lt;br /&gt;
&lt;br /&gt;
[[Image:CombatBases.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Themed Military Roleplay Combat Areas using LLCS===&lt;br /&gt;
There are also many other regions &amp;amp; groups specifically for combat or military roleplay, which are running the LLCS damage system, among these are:&lt;br /&gt;
&lt;br /&gt;
*[http://slurl.com/secondlife/New%20Jessie/197/92/301  New Jessie SLurl]&lt;br /&gt;
*[http://slurl.com/secondlife/Combat%20Core/128/128/28  Combat Core Safe Zone SLURL]&lt;br /&gt;
*[http://slurl.com/secondlife/Badnarik/172/163/22  Merczateers HQ(Badnarik) SLurl]&lt;br /&gt;
*[http://slurl.com/secondlife/Titan/172/163/22  Ordo Imperialis HQ(Titan) SLurl]&lt;br /&gt;
*[http://slurl.com/secondlife/2142/172/163/22  2142 HQ(2142) SLurl]&lt;br /&gt;
*[http://slurl.com/secondlife/Elshout/172/163/22  Alliance Navy HQ(Elshout) SLurl]&lt;br /&gt;
&lt;br /&gt;
*[http://slurl.com/secondlife/Silver%20Side%20Bay/128/128/26  Gravity Zero Public Combat(Silver Side Bay) SLurl]&lt;br /&gt;
&lt;br /&gt;
== User-Created Combat Systems (UCCS) ==&lt;br /&gt;
&lt;br /&gt;
User-created combat systems do not use the built-in LLCS (and for this reason are sometimes called &amp;quot;safezone&amp;quot; combat systems), but instead use scripted objects both to track and to deal damage.&lt;br /&gt;
&lt;br /&gt;
This type of combat system can be used in any area that allows scripts to run. Usually these systems require the player to wear a &amp;quot;tag&amp;quot; or a &amp;quot;HUD&amp;quot; in order to play. This monitors your health, and various other stats, as well as add varios special features like heals, spells and miscellaneous weapons.&lt;br /&gt;
&lt;br /&gt;
These systems usually come with their own sets of rules that disallow the use of anything from advanced weapons to Bots to shields to instant-killers with the exception of basic weaponry and in some rare cases some small explosives. Sometimes the UCCS&#039; rules include the neccessity of [[Roleplay]]ing, but some again are just straight forward killing. Some advanced UCCS keep stats of the players such as kill count, death count, level etc. &lt;br /&gt;
&lt;br /&gt;
When the player dies, unlike the LLCS, they will not be teleported back home. They will typically either &amp;quot;respawn&amp;quot; after a few minutes or some advanced systems will spawn a &amp;quot;spawn ball&amp;quot; which the player sits on and they will be able to respawn at a random location in the combat area with full health. The exact effects of &amp;quot;death&amp;quot; depend on the particular UCCS in use.&lt;br /&gt;
&lt;br /&gt;
It is important to note that many UCCS discourage Defenses (shield, auto orbit), Advanced &amp;quot;guns&amp;quot;, Large Scale Explosives (+5 m), Automated Turrets, orbit, lag bombs. Most UCCS simulations also recommend using High quality basic weaponry that do not cause Lag within the SIM.&lt;br /&gt;
&lt;br /&gt;
A Few Notable User Created Combat Systems are &#039;[http://larps.net/features.php LaRPS]&#039;, &#039;[http://www.dcs2.org DCS2]&#039;, &#039;[http://www.appliweb.org CSB]&#039;, &#039;[http://www.bnjrps.com RPS]&#039;, &#039;[http://reference.ccs-gametech.com/#fragment-1 CCS]&#039;, &#039;[http://gm.mivabe.nl/ GM (Gorean meter)]&#039;, &#039;[http://www.combatsi.com/e107/news.php C:SI]&#039;, &#039;Spell Fire&#039;, &#039;[http://www.osiris-sl.com/ Osiris]&#039;, &#039;URCS&#039;, [http://BNWCS.org &#039;BNWCS&#039;], [http://vicecombat.com/ &#039;VICE&#039;], &#039;XRPS&#039;, &#039;FFRP&#039;.&lt;br /&gt;
&lt;br /&gt;
Because user-created combat systems generally depend on cooperation between scripted damage-dealing objects and scripted damage-sensing objects owned and worn by the player being damaged, there is a great potential for &#039;cheating&#039;, by writing scripts that appear to be obeying the rules of the system, but that in fact make the player very hard to damage, very good at dealing damage, or both.  Also meter resetting during play is common using these systems. While most users of these combat systems enjoy competing legitimately, there are always a few who try to cheat, and different combat communities and combat systems have taken various approaches to detecting, preventing, or discouraging the cheaters.&lt;br /&gt;
&lt;br /&gt;
An example user-created combat system with rules book and source code is [[User:Allen_Kerensky/Myriad_Lite_Preview_4|Myriad Lite Preview 4]] which contains a link to a tabletop pen-and-paper roleplay construction kit and the working preview scripts demonstrating the early fundamentals for a &amp;quot;metered&amp;quot; combat system with hand-to-hand, melee, and ranged combat, armor, healing, a practice target, and quests.&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Category:LSL_Library&amp;diff=1153265</id>
		<title>Category:LSL Library</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Category:LSL_Library&amp;diff=1153265"/>
		<updated>2011-09-08T17:37:07Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: update link to Myriad Lite Preview 4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header|ml=*}}{{RightToc}}&lt;br /&gt;
==Script Library==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em 0.5em 1.5em&amp;quot;&amp;gt;&lt;br /&gt;
NOTE: Please add you scripts to this page and then add them to a category on the [[:Category:LSL Categorized Library|Categorized Library]] page.&lt;br /&gt;
&lt;br /&gt;
Come to this page to see complex examples that show how to combine parts of LSL.&lt;br /&gt;
&lt;br /&gt;
Go to the [[:Category:LSL Examples|LSL Examples]] page to see brief examples of how to use parts of LSL &lt;br /&gt;
&lt;br /&gt;
Why collect complex examples here? Well, ...&lt;br /&gt;
&lt;br /&gt;
There are many [[script|scripts]] that have become buried in the [[Old forum Scripting Library index| old forum Scripting Library]], the [http://community.secondlife.com/t5/Scripting-Library/bd-p/2122 2010 library archive], or the current [http://community.secondlife.com/t5/LSL-Scripting-Library/bd-p/LSLScriptingLibrary LSL Scripting Library]; were lost with the death of the early scripting forums; or sit idle in [[inventory|inventories]] that could be useful and should be more accessible.&lt;br /&gt;
&lt;br /&gt;
Other scripters may be in the same situation. This wiki is a well-suited medium for a script library. Feel free to add your scripts to the script library by creating new pages for them and linking to those pages here.&lt;br /&gt;
&lt;br /&gt;
Note that there are many more scripts in the LSL Library here, but you can&#039;t get to them if you don&#039;t know they exist, because they are subpages now, instead of an automatically updated category.  Good luck searching.&lt;br /&gt;
&lt;br /&gt;
Visit the new [[:Category:LSL Categorized Library|Categorized Library]] which might help make it easier to find a script by the type of script it is. Please note, to wiki editors, if you want your script to appear on the category page after adding it to this library you need to also add it to the category library page as well.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rules for posting: ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em&amp;quot;&amp;gt;&lt;br /&gt;
#Your script must be tested and working. If it&#039;s not, stick it in your user-space until it is. This is a list of working, usable scripts.&lt;br /&gt;
#Add a link to your script&#039;s page here. Link back to this page from your script&#039;s page. Start your page with &amp;lt;nowiki&amp;gt;{{LSL Header}}&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
#Do not add scripts that duplicate the same functionality as an existing script or built in {{LSLGC|Functions|function}}. If yours does, explain why.&lt;br /&gt;
#Do not list simple scripts here. Include those among the [[:Category:LSL Examples|LSL Examples]] instead.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
==LSL Script Library==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||[[Script Vitality plug-in]]&lt;br /&gt;
||[[User:Jenna Felton|Jenna Felton]]&lt;br /&gt;
||Uses vehicle technology to allow scripts (in same prim) to run in &#039;dead&#039;, i.e. no-script areas.&lt;br /&gt;
|-&lt;br /&gt;
||[[1st necessity of SL]]&lt;br /&gt;
||[[User:Beer Dailey|Beer Dailey]]&lt;br /&gt;
||Monitors for avatars and (de)activates scripts states to control script performance/lag.&lt;br /&gt;
|-&lt;br /&gt;
||[[SetLinkText]]&lt;br /&gt;
||[[User:Tacusin Memo|Tacusin Memo]]&lt;br /&gt;
||Custom function like llSetText only applying to linked sets.&lt;br /&gt;
|-&lt;br /&gt;
||[[3D Radar]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||Rezzes a ball for each avatar in range. Each ball tracks its own AV and displays distance.&lt;br /&gt;
|-&lt;br /&gt;
||[[Access (NewAge)]]&lt;br /&gt;
||[[User:Asia Snowfall|Asia Snowfall]]&lt;br /&gt;
||An easy to use script for permissions on who can use the script, Public/Group/Owner&lt;br /&gt;
|-&lt;br /&gt;
||[[Aim Detection]]&lt;br /&gt;
||[[User:Han Shuffle|Dugley Reanimator]]&lt;br /&gt;
||Monitors for avatars and reports back to owner about who is aiming at them.&lt;br /&gt;
|-&lt;br /&gt;
||[[AntiDelay Node]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Uses [[llMessageLinked]] to stop those pesky delays.&lt;br /&gt;
|-&lt;br /&gt;
||[[AO Overriding Pose Ball]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||No more turning your AO off and on when you sit down&lt;br /&gt;
|-&lt;br /&gt;
||[[ARCFOUR Strong Encryption Implementation]]&lt;br /&gt;
||[[User:Nekow42 Zarf|Nekow42 Zarf]]&lt;br /&gt;
||An LSL implementation of ARCFOUR, the most popular stream cipher still in use. It is licensed under a Creative Commons Attribution 3.0 license.&lt;br /&gt;
|-&lt;br /&gt;
||[[Assembly Programming Language|Assembly-Like Programming Language]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||A compiler that runs assembly-like programs.&lt;br /&gt;
|-&lt;br /&gt;
||[[Associative Array Emulator|Associative Array (Dictionary) Emulator]]&lt;br /&gt;
||[[User:Alynna Vixen|Alynna Vixen]]&lt;br /&gt;
||This library provides a set of functions for using a list as an associative array where string based keys can refer to one or more variant elements.&lt;br /&gt;
|-&lt;br /&gt;
||[[AvatarFollower]]&lt;br /&gt;
||[[User:Dale Innis|Dale Innis]]&lt;br /&gt;
||Allows one avatar to automatically follow another.&lt;br /&gt;
|-&lt;br /&gt;
||[[Avatar Radar (NewAge)]]&lt;br /&gt;
||[[User:Asia Snowfall|Asia Snowfall]]&lt;br /&gt;
||Version 1.2; A nice new avatar radar script i just finish that you can place in your hud, Also features avatar locator&lt;br /&gt;
|-&lt;br /&gt;
||[[Base2Dec]]&lt;br /&gt;
||[[User:Siann Beck|Siann Beck]]&lt;br /&gt;
||Convert a number to decimal from any base.&lt;br /&gt;
|-&lt;br /&gt;
||[[BaseN]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
||Variable base compression, dynamically maps to usable UTF code points.&lt;br /&gt;
|-&lt;br /&gt;
||[[Basic A-Star Pathfinder]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
|| My own interpretation of A Star into a highly efficient algorithmn&lt;br /&gt;
|-&lt;br /&gt;
||[[Basic Encryption Modules]]&lt;br /&gt;
||[[User:Beverly Larkin|Beverly Larkin]]&lt;br /&gt;
||Basic encryption scripts, allows you to encrypt a float and shout it to another prim on a randomly chosen channel.&lt;br /&gt;
|-&lt;br /&gt;
||[[Be happy]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Basic smile attachment script, makes your avatar smile.&lt;br /&gt;
|-&lt;br /&gt;
||[[Best Neighbor Ad Hiding Script|Best Neighbor]]&lt;br /&gt;
||[[User:Doran Zemlja|Doran Zemlja]]&lt;br /&gt;
||Reduce ad clutter by hiding ads when users are on their own land nearby.&lt;br /&gt;
|-&lt;br /&gt;
||[[BigNum|BigNum Library (RSA Encryption)]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||A BigNum Library for dealing with big numbers! Specialized for modular multiplication, and RSA encryption.&lt;br /&gt;
|-&lt;br /&gt;
||[[Binary Clock v1.1|Binary Clock]]&lt;br /&gt;
||[[User:Fox Diller|Fox Diller]]&lt;br /&gt;
||A Binary Clock.&lt;br /&gt;
|-&lt;br /&gt;
||[[BinaryDecimalConverter]]&lt;br /&gt;
||[[User:Soundless Smalls|Soundless Smalls]]&lt;br /&gt;
||Converts a binary value to a decimal value and vice versa.&lt;br /&gt;
|-&lt;br /&gt;
||[[Blacklist and Remote Kill|Blacklist and Remote Kill]]&lt;br /&gt;
||[[User:Chase Quinnell|Chase Quinnell]]&lt;br /&gt;
||Blacklist(denial of use) or a creator kill script(can delete someone&#039;s item by command on private channel)&lt;br /&gt;
|-&lt;br /&gt;
||[[User_talk:Rolig_Loon/Bookmark_URLs|Bookmark URLs]]&lt;br /&gt;
||[[User:Rolig Loon|Rolig Loon]]&lt;br /&gt;
||Dialog driven HUD reads bookmarked URLs from notecards and navigates directly to them with user&#039;s in-world browser.&lt;br /&gt;
|-&lt;br /&gt;
||[[Bubble Gum]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A script to create a bubble gum effect with sounds and animations.&lt;br /&gt;
|-&lt;br /&gt;
||[[Builders Buddy|Builder&#039;s Buddy Tool]]&lt;br /&gt;
||[[User:Newfie Pendragon|Newfie Pendragon]]&lt;br /&gt;
||Script to easily move/rotate large builds that exceed the linkable size limit (30 meters).&lt;br /&gt;
|-&lt;br /&gt;
||[[Button Click Detector]]&lt;br /&gt;
||{{User|Sendao Goodman}}&lt;br /&gt;
||Use [[llDetectedTouchUV]] to determine which button was pressed on a texture.&lt;br /&gt;
|-&lt;br /&gt;
||[[Camera following prim]]&lt;br /&gt;
||[[User:Dale Innis|Dale Innis]]&lt;br /&gt;
||Pair of scripts to make a prim follow your camera position around (for lights etc).&lt;br /&gt;
|-&lt;br /&gt;
||[[Camera Sync]]&lt;br /&gt;
||[[User:Meyermagic Salome|Meyermagic Salome]] and [[User:Nomad Padar|Nomad Padar]]&lt;br /&gt;
||A system to synchronize the cameras of two avatars.&lt;br /&gt;
|-&lt;br /&gt;
||[[Chatbot]]&lt;br /&gt;
||Anonymous&lt;br /&gt;
||Compile and run the LSL you type on a channel, faster than you can thru the 2007-08 SL GUI.&lt;br /&gt;
|-&lt;br /&gt;
||[[Chat Logger (GPL)]]&lt;br /&gt;
||[[User:Nobody Fugazi|Nobody Fugazi]]&lt;br /&gt;
||Chat logger which requests permission from participants before recording them.&lt;br /&gt;
|-&lt;br /&gt;
||[[Chat_Relay|Chat Relay]]&lt;br /&gt;
||[[User:grumble Loudon|grumble Loudon]]&lt;br /&gt;
||A Chat relay which can be routed using a path header and won&#039;t echo.&lt;br /&gt;
|-&lt;br /&gt;
||[[ClickAndDrag]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
|| Click and Drag user interface elements using dynamic feedback&lt;br /&gt;
|-&lt;br /&gt;
||[[Code Racer]]&lt;br /&gt;
||Anonymous&lt;br /&gt;
||Race two versions of code forever, to see which runs faster.&lt;br /&gt;
|-&lt;br /&gt;
||[[Code Sizer]]&lt;br /&gt;
||Anonymous&lt;br /&gt;
||Count the bytes compiled from source code, to measure how to write small code.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Programs#v7-D_Enh._Color_Picker|Color Changer]]&lt;br /&gt;
||[[User:Void_Singer|Void_Singer]]&lt;br /&gt;
||Dialog driven color changer. Supports 16million+ colors, web color codes, multiple targeted prims, with save and recall.&lt;br /&gt;
|-&lt;br /&gt;
||[[Color Changer|Color Changer Plus]]&lt;br /&gt;
||[[User:Neo Calcutt|Neo Calcutt]]&lt;br /&gt;
||A color changer with 14 colors, a random function, and a custom vector function.&lt;br /&gt;
|-&lt;br /&gt;
||[[Color conversion scripts|Color Conversion]]&lt;br /&gt;
||[[User:Sally LaSalle|Sally LaSalle]]&lt;br /&gt;
||Convert between Red Green Blue (RGB) and Hue Saturation Value (HSV).&lt;br /&gt;
|-&lt;br /&gt;
||[[ColorConvert]]&lt;br /&gt;
||[[User:Siann Beck|Siann Beck]]&lt;br /&gt;
||Convert color values to vector from RGB, hex or HTML color name.&lt;br /&gt;
|-&lt;br /&gt;
||[[Color script]]&lt;br /&gt;
||[[User:Masakazu Kojima|Masakazu Kojima]]&lt;br /&gt;
||Script for changing colors trough a listener with pre-defined colors.&lt;br /&gt;
|-&lt;br /&gt;
||[[Library Combined Library|Combined Library]]&lt;br /&gt;
||[[User:Strife Onizuka|Strife Onizuka]]&lt;br /&gt;
||Library of mostly encoding and decoding functions, some more useful then others.&lt;br /&gt;
* String functions: Replace / Trim right / Trim left / Trim both&lt;br /&gt;
* Unicode conversion: UTF8 to Unicode / Unicode to UTF8&lt;br /&gt;
* List functions: Replace / Compare&lt;br /&gt;
|-&lt;br /&gt;
||[[Computer:jaycoonlanguage]]&lt;br /&gt;
||[[User:jayco121 Bing|jayco121 Bing]]&lt;br /&gt;
|| A language written in LSL that is meant for my computer (available at the shop).&lt;br /&gt;
|-&lt;br /&gt;
||[[Read Note Card Configuration|Configuration Notecard Reader]]&lt;br /&gt;
||{{User|Dedric Mauriac}}&lt;br /&gt;
||A script to read configuration information from a notecard. Parses notecard to extract key words and their assigned values. Allows for comment lines and many more useful features.&lt;br /&gt;
|-&lt;br /&gt;
||[[AdvancedNotecardReader|Configuration Notecard Reader (advanced)]]&lt;br /&gt;
||[[Lear Cale|Lear Cale]]&lt;br /&gt;
||Robust configuration notecard reader; supports multiple notecards with same suffix, handles reconfig on inventory change, and does not usurp the default state.&lt;br /&gt;
|-&lt;br /&gt;
||[[Library_Chat_Relay|Conversation Relay]]&lt;br /&gt;
||[[User:Jippen Faddoul|Jippen Faddoul]]&lt;br /&gt;
||Chat relay which requests permission from participants before relaying their messages. Also includes their attachments. (ToS compliant).&lt;br /&gt;
|-&lt;br /&gt;
||[[Curtain script]]&lt;br /&gt;
||[[User:Zilla Larsson|Zilla Larsson]]&lt;br /&gt;
||A simple script to retract/stretch curtains, blinds, bedcovers and more&lt;br /&gt;
|-&lt;br /&gt;
||[[Library_Cycle_Dialog_Items|Cycle Dialog Items w/ Callback]]&lt;br /&gt;
||[[User:Hawkster Westmoreland|Hawkster Westmoreland]]&lt;br /&gt;
||A customizable way to cycle dialog items with pagination&lt;br /&gt;
|-&lt;br /&gt;
||[[Dataserver API]]&lt;br /&gt;
||[[User:Revolution Perenti|Revolution Perenti]]&lt;br /&gt;
||Dataserver Framework for Notecards.&lt;br /&gt;
|-&lt;br /&gt;
||[[Date Library]]&lt;br /&gt;
||[[User:Corto Maltese|Corto Maltese]]&lt;br /&gt;
|| Date library, based on number of day since march 3rd 1600, can be used to calculate weekday, date differences, and date offset, and date formating.&lt;br /&gt;
|-&lt;br /&gt;
||[[Day of the Week]]&lt;br /&gt;
||[[User:DoteDote Edison|DoteDote Edison]]&lt;br /&gt;
||Function to get day of the week from [[llGetUnixTime]].&lt;br /&gt;
|-&lt;br /&gt;
||[[Days in Month]]&lt;br /&gt;
||[[User:IntLibber Brautigan begin_of_the_skype_highlighting     end_of_the_skype_highlighting begin_of_the_skype_highlighting     end_of_the_skype_highlighting|IntLibber Brautigan]]&lt;br /&gt;
||Clicking on it returns the number of days in the present month. Useful for scripting calendars and tier systems that need to know the number of days in the month at hand or to calculate for any month. Even adjusts for leap years.&lt;br /&gt;
|-&lt;br /&gt;
||[[Deed Tools]]&lt;br /&gt;
||[[User:Falados Kapuskas|Falados Kapuskas]]&lt;br /&gt;
||Tools that allow the creator to modify Group-Owned (Deeded) Objects via chat.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DEMO_Shield|*DS*_DEMO_Shield]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||With this script, it is impossible to use these scripts in copied (Copybot) object.  &lt;br /&gt;
|-&lt;br /&gt;
||[[Describe Chatter]]&lt;br /&gt;
||Anonymous&lt;br /&gt;
||Chat to see yourself as others do.&lt;br /&gt;
|-&lt;br /&gt;
||[[Dialog Control]]&lt;br /&gt;
||[[User:Nargus Asturias|Nargus Asturias]]&lt;br /&gt;
|| A (not-so) simple dialog &amp;amp; menu control script. Call dialog and receive selected value via [[link_message]](), with built-in timer and [[link_message]]() notification on time out. Supports multi-pages dialog and numeric property dialog. Button text and dialog&#039;s returned value can differ.&lt;br /&gt;
Latest version also has [[Dialog Menus Control]] built-in; which allow multi-level menus through SL dialog system.&lt;br /&gt;
|-&lt;br /&gt;
||[[MultiUser_Dialog_Handler|Dialog Menus (multiuser)]]&lt;br /&gt;
||[[User:SimonT Quinnell|SimonT Quinnell]]&lt;br /&gt;
|| Menu dialog handler that supports multiple menus open at once from the single script. Displays multi-page menus if necessary as well as allowing for fixed header and footer buttons.  Timeouts as well as Text and button size limits are handled.&lt;br /&gt;
|-&lt;br /&gt;
||[[Dialog NumberPad|Dialog Number Pad]]&lt;br /&gt;
||[[User:DoteDote Edison|DoteDote Edison]]&lt;br /&gt;
||Use a dialog to accept positive integer input from users.&lt;br /&gt;
|-&lt;br /&gt;
||[[Display Names Radar]]&lt;br /&gt;
||[[User:Cerise Sorbet|Cerise Sorbet]]&lt;br /&gt;
||Simple HUD type avatar radar that can show [[display names]] and script memory usage&lt;br /&gt;
|-&lt;br /&gt;
||[[Display Names to Key]]&lt;br /&gt;
||[[User:Joran Yoshikawa|Joran Yoshikawa]]&lt;br /&gt;
||Simple way to get UUIDs from displaynames&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DS_Display-Username_Online_Indicator|*DS*_Display-Username_Online_Indicator]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This simple hover text-based script is used to shop owners in Second Life, customers at the current display name and user name to display publicly. Additionally shows the status of the Userkey and online. Furthermore, there are click of a chat link that opens the profile owner. &lt;br /&gt;
|-&lt;br /&gt;
||[[Displayer Script]]&lt;br /&gt;
||[[User:Akinori Kimagawa|Akinori Kimagawa]]&lt;br /&gt;
||Display Words On Top Of An Object&lt;br /&gt;
|-&lt;br /&gt;
||[[Distributed Primitive Database]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||The distributed primitive database (DPD) is a database which is meant to survive entirely in SL by using redundancy, replication and time synchronisation to maintain the consistency of the dataset contained in the DPD node/primitives spread out between regions and even grids. Similarly to the [[Intercom]], the robustness of the theory would allow users to maintain a cross-grid database; as of 30 of August 2011 I have managed to couple and replicate data between the two grids by using the methodology described in the script article.&lt;br /&gt;
|-&lt;br /&gt;
||[[Drink script]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Used mainly for food and drink in Second Life.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DS_Single_AO-Sit|*DS*_Single_AO-Sit]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Posescript for use with or without AO and with or without Animation. With the menu it is possible the seated Avatar to move.&lt;br /&gt;
|-&lt;br /&gt;
||[[TOXDropBox|DropBox]]&lt;br /&gt;
||[[User:Dimentox Travanti|Dimentox Travanti]]&lt;br /&gt;
|| This is a Drop box which allows people to drop certain items in a object &amp;amp; has many config options.&lt;br /&gt;
|-&lt;br /&gt;
||[[Efficiency Tester]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Tests the speed of a function.&lt;br /&gt;
|-&lt;br /&gt;
||[[Email-to-IM|Email2IM]]&lt;br /&gt;
||[[User:DoteDote Edison|DoteDote Edison]]&lt;br /&gt;
||Send IMs to SL friends via [[email]] (translate emails from friends into IMs).&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Kireji_Haiku/SIMchat_headset|Encrypted Region-wide chat]]&lt;br /&gt;
||&#039;&#039;&#039;[[User:Kireji Haiku|Kireji Haiku]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Kireji Haiku|talk]]|[[Special:Contributions/Kireji Haiku|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
||Encrypted Region-wide chat&lt;br /&gt;
|-&lt;br /&gt;
||[[ExplodingObjects]]&lt;br /&gt;
||[[User:Dale Innis|Dale Innis]]&lt;br /&gt;
||Causes an object (of the appropriate type) to explode on command.&lt;br /&gt;
|-&lt;br /&gt;
||[[FadeEasy]]&lt;br /&gt;
||[[User:Nika Rugani|Nika Rugani]]&lt;br /&gt;
||The easy way of fading objects in or out (Using llSetLinkAlpha)&lt;br /&gt;
|-&lt;br /&gt;
||[[FastConeSpread]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
|| Fast Algorithmn to achieve cone spread, main use in weaponry systems.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:PixelProphet Lane/Scripts#Fast List Prim Contents|Fast List Prim Contents]]&lt;br /&gt;
||[[User:PixelProphet Lane|PixelProphet Lane]]&lt;br /&gt;
||Fast and efficient method to print Object Inventory (Name, Type and next Owner permissions)&lt;br /&gt;
|-&lt;br /&gt;
||[[Find Avatar Key|Find Avatar Key]]&lt;br /&gt;
||[[User:Huney Jewell|Huney Jewell]]&lt;br /&gt;
||Explores [[UUID]] of avatar whose name is said in local chat or who touches the prim.&lt;br /&gt;
|-&lt;br /&gt;
||[[First Name Letter Prize]]&lt;br /&gt;
||[[User:RaithSphere Whybrow|RaithSphere Whybrow]]&lt;br /&gt;
||Gives a prize if the person who sits on it&#039;s first letter of first name matches the random letter!&lt;br /&gt;
|-&lt;br /&gt;
||[[Fix Small Prims|Fix_Small_Prims]]&lt;br /&gt;
||[[User:Emma Nowhere|Emma Nowhere]]&lt;br /&gt;
||Finds and adjusts the smallest prims in a linkset so that it can be scaled down further.&lt;br /&gt;
|-&lt;br /&gt;
||[[Flight Assist]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||Flight feather / flight band implementation supporting various commands and allowing you to fly above the clouds.&lt;br /&gt;
|-&lt;br /&gt;
||[[Float2Hex]]&lt;br /&gt;
||[[User:Strife Onizuka|Strife Onizuka]]&lt;br /&gt;
||Very useful for transporting [[float|floats]].&lt;br /&gt;
|-&lt;br /&gt;
||[[Float Box Contents]]&lt;br /&gt;
||[[User:Rolig Loon|Rolig Loon]]&lt;br /&gt;
||Displays object inventory in hover text, identified by type and updated marquee-style.&lt;br /&gt;
|-&lt;br /&gt;
||[[Follower (script)|Follower]]&lt;br /&gt;
||Unknown, uploaded by [[User:Slik Swindlehurst|Slik Swindlehurst]]&lt;br /&gt;
||Makes an object follow the nearest person. Do not use for [[grief|griefing]].&lt;br /&gt;
|-&lt;br /&gt;
||[[GA Event Notifier]]&lt;br /&gt;
||[[User:Victor Hua|Victor Hua]]&lt;br /&gt;
||Gathers seven days event data from a Google calendar and display it through a simple interface. The lsl script can access several calendars at once through seperate php files. One file per calendar. Host the included php on your own web server.&lt;br /&gt;
|-&lt;br /&gt;
||[[Geometric|Geometric Library]]&lt;br /&gt;
||Community Project&lt;br /&gt;
||A substantial amount of various geometric functions for intersection and other purposes of 3D maths.&lt;br /&gt;
|-&lt;br /&gt;
||[[Get Profile Picture]]&lt;br /&gt;
||[[User:Valentine Foxdale|Valentine Foxdale]]&lt;br /&gt;
||Sets the texture of the object to profile picture of the person that touches ot&lt;br /&gt;
|-&lt;br /&gt;
||[[GetTimestampOffset]]&lt;br /&gt;
||[[User:Siann_Beck|Siann Beck]]&lt;br /&gt;
||Returns [[llGetTimestamp]]() with an hour offset.&lt;br /&gt;
|-&lt;br /&gt;
||[[Give InvItem every n hours]]&lt;br /&gt;
||[[User:Criz Collins|Criz Collins]]&lt;br /&gt;
||Will give an inventory item on touch only every n hours, even if somebody touches the object more than once. &lt;br /&gt;
|-&lt;br /&gt;
||[[Give random object]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Touch to receive a random object in the prim&#039;s inventory&lt;br /&gt;
|-&lt;br /&gt;
||[[Giver]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A menu-driven script that will hand out the objects in a prim. Supports multiple pages.&lt;br /&gt;
|-&lt;br /&gt;
||[[Google Charts]]&lt;br /&gt;
||[[User:Dedric Mauriac|Dedric Mauriac]]&lt;br /&gt;
||Create links to display raw data as a chart image.&lt;br /&gt;
|-&lt;br /&gt;
||[[Google_Translator]]&lt;br /&gt;
||[[User:Ugleh Ulrik|Ugleh Ulrik]]&lt;br /&gt;
||Translates spanish to english, and its simple to make it any other way.&lt;br /&gt;
|-&lt;br /&gt;
||[[Go transparent when walking]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||An attachment that goes invisible when you walk and visible when you don&#039;t walk.&lt;br /&gt;
|-&lt;br /&gt;
||[[Greeter]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A multi-purpose greeter with multiple options (IM, landmark, notecard, URL, visitor statistics, shared access and compatible with the [[Mail]] system) that could work for shops, clubs, galleries and any other public place.&lt;br /&gt;
|-&lt;br /&gt;
||[[Group Authorization]]&lt;br /&gt;
||[[User:Chase Quinnell|Chase Quinnell]]&lt;br /&gt;
||Checks to see if object is set to appropriate group (checks by [[Group key finder|group key]])&lt;br /&gt;
|-&lt;br /&gt;
||[[Group Information v1.0]]&lt;br /&gt;
||[[User:Tyrennic Rivera|Tyrennic Rivera]]&lt;br /&gt;
||When clicked the prim will show group information (set on the prim) from the official Second Life Search page.&lt;br /&gt;
|-&lt;br /&gt;
||[[Group key finder]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Touch to find the key of the group&lt;br /&gt;
|-&lt;br /&gt;
||[[Group Privacy]]&lt;br /&gt;
||[[User:Chance Unknown|Chance Unknown]]&lt;br /&gt;
||Security device to insure members of a group can have a private area. Deactivates when nobody present.&lt;br /&gt;
|-&lt;br /&gt;
||[[Hello Avatar]]&lt;br /&gt;
||Linden Lab&lt;br /&gt;
||SL&#039;s default script.&lt;br /&gt;
|-&lt;br /&gt;
||[[Hello Avatar Companion]]&lt;br /&gt;
||[[Chase Quinnell]]&lt;br /&gt;
||Companion to the original [[Hello Avatar]] script&lt;br /&gt;
|-&lt;br /&gt;
||[[Hierarchics]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
|| Advanced script to create an efficient self-aware hierarchic structure.&lt;br /&gt;
|-&lt;br /&gt;
||[[Hierarchics2]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
|| Second generation, one script per object. Only two functions, can be embedded in others. Uses the new [[llSetLinkPrimitiveParamsFast]]/[[llGetLinkPrimitiveParams]] functions.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Rolig_Loon/High-Capacity_Greeter-Counter|High-Capacity Greeter-Counter]]&lt;br /&gt;
||[[User:Rolig Loon|Rolig Loon]]&lt;br /&gt;
||Uses a memory compression algorithm to store hashed visitor UUID&#039;s in a string instead of using a list. &lt;br /&gt;
|-&lt;br /&gt;
||[[Holodeck]]&lt;br /&gt;
||[[User:Revolution Perenti|Revolution Perenti]]&lt;br /&gt;
||Home Rezzing System (Open Source).&lt;br /&gt;
|-&lt;br /&gt;
||[[HUD Dots Radar]]&lt;br /&gt;
||[[User:Cerise Sorbet|Cerise]]&lt;br /&gt;
||HUD target example, draws dots on the HUD over avatars in view.&lt;br /&gt;
|-&lt;br /&gt;
||[[Intercom|Intercom]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A system allowing region-wide and grid-wide (as of 30 of August 2011, it also works grid-wide, a test was performed by linking up the chat between the OSGrid and SecondLife) mass chat relay. By using this you can relay a main chat across multiple regions or grids. The script was initially meant as a mid-way project in order to test and gather information for the [[Distributed Primitive Database]].&lt;br /&gt;
|-&lt;br /&gt;
||[[Interpolation|Interpolation Library]]&lt;br /&gt;
||[[User:Nexii_Malthus|Nexii Malthus]]&lt;br /&gt;
||A small set of interpolation functions.&lt;br /&gt;
|-&lt;br /&gt;
||[[Intra-Region Update Server]]&lt;br /&gt;
||[[User:Emma_Nowhere|Emma Nowhere]]&lt;br /&gt;
||Centrally update objects such as Freeview screens or teleport pads within a region that are configured by notecards or contain modifiable objects or media assets.&lt;br /&gt;
|-&lt;br /&gt;
||[[Inventory_Based_Menu]]&lt;br /&gt;
||[[User:Revolution Perenti|Revolution Perenti]]&lt;br /&gt;
||Inventory Based Menu System.&lt;br /&gt;
|-&lt;br /&gt;
||[[iTunes RPC Email|iTunes RPC]]&lt;br /&gt;
||[[User:Fox Diller|Fox Diller]]&lt;br /&gt;
||iTunes RPC via LSL [[llEmail]] and [[llRemoteDataReply]].&lt;br /&gt;
|-&lt;br /&gt;
||[[Jingle]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A script that will make a primitive emit a sound when you wear it and walk around. Ideal for bells, footsteps and so on...&lt;br /&gt;
|-&lt;br /&gt;
||[[Kilt Editor|Kilt / Skirt Editor]]&lt;br /&gt;
||[[User:Brangus Weir|Brangus Weir]]&lt;br /&gt;
|| This changes all the parameters of all the flexis in the link set in one swell foop!&lt;br /&gt;
|-&lt;br /&gt;
||[[Key Pad Door|Keypad Door]]&lt;br /&gt;
||[[User:Tdub Dowler|Tdub Dowler]]&lt;br /&gt;
|| Door and keypad with changeable code. Follow instructions carefully!&lt;br /&gt;
|-&lt;br /&gt;
||[[Key2Name]]&lt;br /&gt;
||[[User:Nika Rugani|Nika Rugani]]&lt;br /&gt;
|| Key2Name service where a user no longer needs to be in the same region to get users name&lt;br /&gt;
|-&lt;br /&gt;
||[[Last Sound System]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||An LSL [http://Last.fm Last.fm] client.&lt;br /&gt;
|-&lt;br /&gt;
||[[LibraryDisplayLandScreenshot]]&lt;br /&gt;
||[[User:Jon Desmoulins|Jon Desmoulins]]&lt;br /&gt;
||A modified version of LibraryDisplayProfilePic using the new [[PARCEL_DETAILS_ID]] Implemented in Server v1.36&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/LinkNumber-List_in_llSetLinkPrimitiveParamsFast|LinkNumber-List_in_llSetLinkPrimitiveParamsFast]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Changed several prims in linkset with the same parameters, with a list. Without separate llSetLinkPrimitiveParams for each prim. (ideal for show/hide effects)&lt;br /&gt;
|-&lt;br /&gt;
||[[Limit Vendor]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||This is a vendor supporting any number of items with different prices which will only dispense a certain number of individual items by setting limits for each item based on a notecard configuration.&lt;br /&gt;
|-&lt;br /&gt;
||[[Linkset resizer]]&lt;br /&gt;
||[[User:Maestro Linden|Maestro Linden]]&lt;br /&gt;
||Systematically rescales a linkset by moving and resizing each prim (by using [[llGetLinkPrimitiveParams]] and [[llSetLinkPrimitiveParamsFast]])&lt;br /&gt;
|-&lt;br /&gt;
||[[Linkset resizer with menu]]&lt;br /&gt;
||[[User:Brilliant Scientist|Brilliant Scientist]]&lt;br /&gt;
||A menu-driven script that rescales a linkset by moving and resizing the prims using [[llGetLinkPrimitiveParams]] and [[llSetLinkPrimitiveParamsFast]] functions. Based on [[Linkset resizer]].&lt;br /&gt;
|-&lt;br /&gt;
||[[Pointing Stick]]&lt;br /&gt;
||[[User: rhonin Nissondorf|rhonin Nissondorf]]&lt;br /&gt;
||A device that takes controls of your arrow keys and directs the device in the relative direction its pointing, forward and back of course.&lt;br /&gt;
|-&lt;br /&gt;
||[[Gun Script]]&lt;br /&gt;
||[[User:rhonin Nissondorf| rhonin Nissondorf]]&lt;br /&gt;
||Shoots out &amp;quot;ammo&amp;quot; from the root prim of your &amp;quot;gun&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
||[[Linkset Resizer 2]]&lt;br /&gt;
||[[User:Emma Nowhere|Emma Nowhere]]&lt;br /&gt;
||A more user-friendly resizer script designed for either drop-in use by the end-user or builder or for use in products. Based on [[Fix Small Prims]].&lt;br /&gt;
|-&lt;br /&gt;
||[[List2CSV]]&lt;br /&gt;
||[[User:Kunnis Basiat|Kunnis Basiat]]&lt;br /&gt;
||List2CSV &amp;amp; CSV2List that include preserving type and escaping characters.&lt;br /&gt;
|-&lt;br /&gt;
||[[list_cast]]&lt;br /&gt;
||[[User:Fractured Crystal|Fractured Crystal]]&lt;br /&gt;
||Casts a list of strings into the type they appear to be. Designed for preprocessing user input for feeding into [[llSetPrimitiveParams]]&lt;br /&gt;
|-&lt;br /&gt;
||[[Listener Script]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Use to [[listen]] to other people&#039;s conversations (Like spying)&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Functions#List:_Find_Last_Index|List: Find Last Index]]&lt;br /&gt;
||[[User:Void Singer|Void Singer]]&lt;br /&gt;
||Returns the last index of searched item in a source list. (backwards version of [[llListFindList]])&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Functions#List:_Multi-Find_Index_.28First_or_Last.29|List: Multi Find]]&lt;br /&gt;
||[[User:Void Singer|Void Singer]]&lt;br /&gt;
||Returns the first found index of multiple search items in a list. (Multi-item version of [[llListFindList]]. Fwd and Rev versions included)&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Functions#List:_Get_Reverse_Order|List: Reverse]]&lt;br /&gt;
||[[User:Void Singer|Void Singer]]&lt;br /&gt;
||Returns an input List in reverse order&lt;br /&gt;
|-&lt;br /&gt;
||[[Live Event Timeout]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A script which will set the the music URL back to a radio station of your liking when a DJ leaves or forgets to switch back the URL after a live event. It takes multiple DJs, using a notecard and several configuration parameters.&lt;br /&gt;
|-&lt;br /&gt;
||[[Load URL]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Touch to get a dialog to visit the URL inside the script.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Kephra_Nurmi/lsDancemachine|lsDancemachine]]&lt;br /&gt;
||[[User:Kephra_Nurmi|Kephra Nurmi]]&lt;br /&gt;
|| Low lag client server dancemachine.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Kephra_Nurmi/lsDeejay|lsDeejay Home Edition]] &lt;br /&gt;
||[[User:Kephra_Nurmi|Kephra Nurmi]]&lt;br /&gt;
|| Client server media control for music, video, youtube, pictures, and texture animations.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Kephra_Nurmi/lsDialog|lsDialog]]&lt;br /&gt;
||[[User:Kephra_Nurmi|Kephra Nurmi]]&lt;br /&gt;
|| Universal notecard driven menu dialog system.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Kephra_Nurmi/lsDisplay|lsDisplay]]&lt;br /&gt;
||[[User:Kephra_Nurmi|Kephra Nurmi]]&lt;br /&gt;
|| Picture cycler with preloader.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Kephra_Nurmi/lsDistributor|lsDistributor]]&lt;br /&gt;
||[[User:Kephra_Nurmi|Kephra Nurmi]]&lt;br /&gt;
|| Simple &#039;try&#039; and &#039;buy&#039; vendor system.&lt;br /&gt;
|-&lt;br /&gt;
||[[LSL_languageAPI]]&lt;br /&gt;
||[[User:Gypsy paz|Gypsy Paz]]&lt;br /&gt;
||Multi-lingual API from notecard based language files&lt;br /&gt;
|-&lt;br /&gt;
||[[Mail]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||An system for sending objects to multiple recipients automatically supporting shared access and [[Greeter]] compatible auto-subscriptions.&lt;br /&gt;
|-&lt;br /&gt;
||[[Mandelbrot Explorer]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||An interactive fractal explorer.&lt;br /&gt;
|-&lt;br /&gt;
||[[Materialization Effects]]&lt;br /&gt;
||[[User:Overbrain Unplugged|Overbrain Unplugged]]&lt;br /&gt;
|| Special effects to add to rezzing events to simulate a teleportation or materialization.&lt;br /&gt;
|-&lt;br /&gt;
||[[Materialization Effects 2]]&lt;br /&gt;
||[[User:Nika Rugani|Nika Rugani]]&lt;br /&gt;
|| More efficient and faster version of Materialization Effects by Overbrain Unplugged.&lt;br /&gt;
|-&lt;br /&gt;
||[[Memory Module]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||An example of pseudo-persistent variable in-world storage.&lt;br /&gt;
|-&lt;br /&gt;
||[[Merge Sort]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Implements a Merge Sort in LSL, however this code is 300(ish) times slower than [[llListSort]]. Don&#039;t use this in a script!&lt;br /&gt;
|-&lt;br /&gt;
||[[Minesweeper]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||A simple minesweeper game.&lt;br /&gt;
|-&lt;br /&gt;
||[[Mood Color Changer]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A script that changes the color of all primitives in a linkset depending on the smileys the owner types on the main chat.&lt;br /&gt;
|-&lt;br /&gt;
||[[Morse Code]]&lt;br /&gt;
||{{User|Bobbyb30 Swashbuckler}}&lt;br /&gt;
||A script that allows for the conversion to and from morse code and can &amp;quot;play&amp;quot; morse code.&lt;br /&gt;
|-&lt;br /&gt;
||[[Multi-displays Texture Cycler]]&lt;br /&gt;
||[[User:Nargus Asturias|Nargus Asturias]]&lt;br /&gt;
||A simple texture rotator designed for multiple display screens. With delay between each screen AND delay between each loop.&lt;br /&gt;
|-&lt;br /&gt;
||[[Multi Item Rezzer|Multi Item Rezzer]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||A rework of my old High Altitude Rezzer. Place the objects that you wish to choose from to be rezzed inside. Sit on the rezzer and pick the item and the height. It will go to target height and rez the object.&lt;br /&gt;
|-&lt;br /&gt;
||[[Multirezzer|Multirezzer (on collision)]]&lt;br /&gt;
||[[User:Beet Streeter|Beet Streeter]]&lt;br /&gt;
||Spawns up to 10 objects when the object containing the script collides with a user.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Allen_Kerensky/Myriad_Lite_Preview_4|Myriad Lite Preview 4 RPG System]]&lt;br /&gt;
||[[User:Allen_Kerensky|Allen Kerensky]]&lt;br /&gt;
||Working preview of the Myriad Universal RPG System by Ashok Desai, converted to LSL as a roleplay meter with quest NPC and goals, hand-to-hand and melee close combat, ranged combat, armor, healing, bullet, firearm, holster, and practice target&lt;br /&gt;
|-&lt;br /&gt;
||[[Name2Key in LSL]]&lt;br /&gt;
||[[User:Maeva Anatine|Maeva Anatine]]&lt;br /&gt;
||Get the Name2Key feature inside your scripts. Works even on lastly subscribed avatars.&lt;br /&gt;
|-&lt;br /&gt;
||[[Name2Key]]&lt;br /&gt;
||[[User:Nika Rugani|Nika Rugani]]&lt;br /&gt;
||Newest and fastest Name2Key search, While the database is small it is also connected to Second Life&#039;s search.&lt;br /&gt;
|-&lt;br /&gt;
||[[No Auto-Return]]&lt;br /&gt;
||[[User:Bellla Clarity|Bella Clarity]]&lt;br /&gt;
||To stop your long and hard builds from getting returned in sandboxes (&#039;&#039;only single prims, though!&#039;&#039;).&lt;br /&gt;
|-&lt;br /&gt;
||[[No Auto-Return NR]]&lt;br /&gt;
||[[User:Jor3l Boa|Jor3l Boa]]&lt;br /&gt;
||This really works (29-05-09), needs a nearby region to do the trick and avoid auto return. (Tested on Blue and Rausch)&lt;br /&gt;
|-&lt;br /&gt;
||[[No Auto-Return (Multi)]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||A revision of Bella&#039;s that works for multi-prim objects.&lt;br /&gt;
|-&lt;br /&gt;
||[[No Limit Teleporter]]&lt;br /&gt;
||[[User:Morgam Biedermann|Morgam Biedermann]]&lt;br /&gt;
||Teleport to infinite altitudes (up to 4096m)&lt;br /&gt;
|-&lt;br /&gt;
||[[Object Size]]&lt;br /&gt;
||[[User:Chase Quinnell|Chase Quinnell]]&lt;br /&gt;
||Gets the dimensions and footprint of a linkset&lt;br /&gt;
|-&lt;br /&gt;
||[[Object to Data v1.4|Object to Data]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Turns an object into text (and back). Allows people to transfer objects through notecards (or otherwise).&lt;br /&gt;
|-&lt;br /&gt;
||[[Online Indicator|Online Indicator]]&lt;br /&gt;
||[[User:Kristy Fanshaw|Kristy Fanshaw]]&lt;br /&gt;
||Will show if the user is online or not. Displays users profile picture and allows to send IM&#039;s to user. Also gives a link to open the users profile&lt;br /&gt;
|-&lt;br /&gt;
||[[Open Group Join]]&lt;br /&gt;
||[[User:Alicia Stella|Alicia Stella]]&lt;br /&gt;
||User Touches Object to Join Group from Group Info window, (no bot.)&lt;br /&gt;
|-&lt;br /&gt;
||[[Open Prim Animator]]&lt;br /&gt;
||[[User:Todd Borst|Todd Borst]]&lt;br /&gt;
||Single script prim animation tool.  Menu driven, easy to use.&lt;br /&gt;
|-&lt;br /&gt;
||[[Open Zyngo Skin Installer]]&lt;br /&gt;
||[[User:Tmzasz Luminos|Tmzasz Luminos]]&lt;br /&gt;
||A Simple Script designed to install skins on the popular Skill machines.&lt;br /&gt;
|-&lt;br /&gt;
||[[One Script, many doors]]&lt;br /&gt;
||[[User:Kyrah Abattoir|Kyrah Abattoir]]&lt;br /&gt;
||Door script able to manage more than 50 linked doors from a single script instance.&lt;br /&gt;
|-&lt;br /&gt;
||[[ParseString2List]]&lt;br /&gt;
||[[User:Strife Onizuka|Strife Onizuka]]&lt;br /&gt;
||Same as [[llParseString2List]] and [[llParseStringKeepNulls]], but not limited to 8 spacers or separators. Thus substitute a call to the [[llParseString2List]] and [[llParseStringKeepNulls]] functions by a call to [[Parse_String_To_List|ParseString2List]] whenever you have more than 8 separators or more than 8 spacers.&lt;br /&gt;
|-&lt;br /&gt;
||[[Password Generator]]&lt;br /&gt;
||[[User:Syntrax Canucci|Syntrax Canucci]]&lt;br /&gt;
||This is an over-complicated, semi-complex password generator, which goes through multiple steps.&lt;br /&gt;
|-&lt;br /&gt;
||[[Pathfinder]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||A potential field based pathfinding library.&lt;br /&gt;
|-&lt;br /&gt;
||[[Personal ATM Machine]]&lt;br /&gt;
||[[User:Jessikiti Nikitin|Jessikiti Nikitin]]&lt;br /&gt;
||Allows deposits and withdrawals into another of your accounts, without the account being logged in.&lt;br /&gt;
|-&lt;br /&gt;
||[[Phantom Child]]&lt;br /&gt;
||[[User:Aeron Kohime|Aeron Kohime]]&lt;br /&gt;
||Causes a child in a link set to become phantom without the entire object becoming phantom.&lt;br /&gt;
|-&lt;br /&gt;
||[[PHP_RegionFunctions]]&lt;br /&gt;
||[[User:Gypsy Paz|Gypsy Paz]] and [[User:Zayne Exonar|Zayne Exonar]]&lt;br /&gt;
||Three useful PHP functions to get region info&lt;br /&gt;
|-&lt;br /&gt;
||[[PhysicsLib]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
|| Interesting set of fun physics functions.&lt;br /&gt;
|-&lt;br /&gt;
||[[Play and Loop Sound]]&lt;br /&gt;
||[[User:Bellla Clarity|Bella Clarity]]&lt;br /&gt;
||Very short and simple script; plays and loops a sound in an object.&lt;br /&gt;
|-&lt;br /&gt;
||[[Posing stand|Posing Stand]]&lt;br /&gt;
||[[User:Bellla Clarity|Bella Clarity]]&lt;br /&gt;
||Just a pose script to edit [[attachments]] more easily.&lt;br /&gt;
|-&lt;br /&gt;
||[[PosJump]]&lt;br /&gt;
||[[User:Uchi Desmoulins|Uchi Desmoulins]]&lt;br /&gt;
||A much more efficient alternative to the popular [[warpPos]] function for bypassing 10m distance-moved limitations.&lt;br /&gt;
|-&lt;br /&gt;
||[[Puppeteer]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A simple puppeteer script that will allow you to record and animate prim movements and rotations.&lt;br /&gt;
|-&lt;br /&gt;
||[[Prefix Calculator]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
|| A calculator that evaluates expressions in prefix notation. &lt;br /&gt;
&amp;lt;code&amp;gt;+ 3 4 = 5. * + 1 2 + 3 4 = 14.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||[[Profile Generator]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A cynical script for generating boilerplate profiles by based on cliches and profile memes.&lt;br /&gt;
|-&lt;br /&gt;
||[[Profile Picture]]&lt;br /&gt;
||[[User: Jor3l Boa|Jor3l Boa]]&lt;br /&gt;
||A working profile picture script with the new SecondLife API (1/11/2011)&lt;br /&gt;
|-&lt;br /&gt;
||[[Progress Bar]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
|| Flexible and powerful little function for creating progress bars useful in hovertext.&lt;br /&gt;
|-&lt;br /&gt;
||[[Pseudo-random Number Generator]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Generates a Pseudo-random number between -0x7FFFFFFF and 0x7FFFFFFF&lt;br /&gt;
|-&lt;br /&gt;
||[[Quick Collar]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A simple, no-bulk, no external database and essential feature-packed RLV collar script for your pleasures.&lt;br /&gt;
|-&lt;br /&gt;
||[[Quicksort]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||LSL implementation of the Quicksort algorithm.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Rolig_Loon/Quiz_From_Notecard|Quiz From Notecard]]&lt;br /&gt;
||[[User:Rolig Loon|Rolig Loon]]&lt;br /&gt;
||A multiple-choice testing script that reads questions and answer choices from a notecard and presents them in dialog boxes.&lt;br /&gt;
|-&lt;br /&gt;
||[[Racter]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||In-world, multi-purpose chatterbot (Eliza/A.L.I.C.E. inspired) supporting multiple configurable hot-swappable brain-files with a wide range of applications.&lt;br /&gt;
|-&lt;br /&gt;
||[[Rainbow_palette]]&lt;br /&gt;
||[[User:Rui Clary|Rui Clary]]&lt;br /&gt;
||Build a color picker, using only one prim, and a few lines of code.&lt;br /&gt;
|-&lt;br /&gt;
||[[Random Gaussian Number Generator]]&lt;br /&gt;
||[[User:Vlad Davidson|Vlad Davidson]]&lt;br /&gt;
||Generates a random number drawn from a normal (Gaussian; bell-curve) distribution, based on a specified mean/stdev&lt;br /&gt;
|-&lt;br /&gt;
||[[Random AV Profile Projector]]&lt;br /&gt;
||[[User:Debbie Trilling|Debbie Trilling]]&lt;br /&gt;
||Randomly selects an AV from a crowd &amp;amp; then projects their profile picture as a &#039;holographic&#039; image &lt;br /&gt;
|-&lt;br /&gt;
||[[Random Object Vendor]]&lt;br /&gt;
||[[User:CodeBastard Redgrave|CodeBastard Redgrave]]&lt;br /&gt;
||Simple vendor that gives out random objects when paid the right amount &lt;br /&gt;
|-&lt;br /&gt;
||[[Random Password Generator]]&lt;br /&gt;
||[[User:Jor3l Boa|Jor3l Boa]]&lt;br /&gt;
||Generate Random passwords based on String Length.&lt;br /&gt;
|-&lt;br /&gt;
||[[RavText]]&lt;br /&gt;
||[[User:Ravenous Dingo|Ravenous Dingo]]&lt;br /&gt;
||An alternate to XyText.  This is a lightweight, multiple font 10 character text display system.  It only supports uppercase alphanumeric text and a few special characters, but it is very fast, renders quickly and supports multiple fonts. It is meant for specialized use when all that is desired is basic, fast text display and the extra &amp;quot;bells and whistles&amp;quot; are not needed.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:PixelProphet Lane/Scripts#Real Object Inventory To Dialog|Real Object Inventory To Dialog]]&lt;br /&gt;
||[[User:PixelProphet Lane|PixelProphet Lane]]&lt;br /&gt;
||Display any amount of items contained in an Object in a Dialog, regardless of item name length.&lt;br /&gt;
|-&lt;br /&gt;
||[[RentalBoxv1|Rental Box, Simply]]&lt;br /&gt;
||[[User:Sendao Goodman|Sendao Goodman]]&lt;br /&gt;
||Simple explanation of how to make rental boxes.&lt;br /&gt;
|-&lt;br /&gt;
||[[Rental Cube]]&lt;br /&gt;
||[[User:Hank Ramos|Hank Ramos]]&lt;br /&gt;
||Simple cube for renting out a space.&lt;br /&gt;
|-&lt;br /&gt;
||[[Remote Texture Loader]]&lt;br /&gt;
||{{User|Bobbyb30 Swashbuckler}}&lt;br /&gt;
||A set of scripts for remotely loading textures within a sim. This means that a single &amp;quot;texture server&amp;quot; can manage multiple changing billboards within a sim.&lt;br /&gt;
|-&lt;br /&gt;
||[[Say Region Frames Per Second|Region Frames Per Second]]&lt;br /&gt;
||[[User:Heymeriou Mystakidou|Heymariou Mystakidou]]&lt;br /&gt;
|| Says the region name and frames per second out loud on command.&lt;br /&gt;
|-&lt;br /&gt;
||[[Resizer multi-prims|Resizer multi-prims]]&lt;br /&gt;
||[[User:Christy Mansbridge|Christy Mansbridge]]&lt;br /&gt;
||1 Mono script to resize object (1 to 256 prims) by blue menu. Avoid risk to break the build by increasing link distance.&lt;br /&gt;
|-&lt;br /&gt;
||[[sbDialog]]&lt;br /&gt;
||[[User:Siann_Beck|Siann Beck]]&lt;br /&gt;
||A simple replacement function for [[llDialog]]. It re-orders the button list so that the button values, as passed to it, display left-to-right, top-to-bottom. It also opens a [[llListen|listen]] on the specified channel, and returns the handle.&lt;br /&gt;
|-&lt;br /&gt;
||[[Scheduled Payments]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A script that will allow you to make scheduled (and reoccurring) payments to multiple avatars via a notecard. &lt;br /&gt;
|-&lt;br /&gt;
||[[Scheduler]]&lt;br /&gt;
||[[User:Haravikk Mistral|Haravikk Mistral]]&lt;br /&gt;
||Schedule multiple events using a single script timer&lt;br /&gt;
|-&lt;br /&gt;
||[[Scheme_Interpreter|Scheme Interpreter]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||A scheme interpreter capable of handling most scheme expressions, including lambda and lists.&lt;br /&gt;
|-&lt;br /&gt;
||[[Script Override Functions]]&lt;br /&gt;
||[[User:Revolution Perenti|Revolution Perenti]]&lt;br /&gt;
||bypass default strings, integer etc in chat channel.&lt;br /&gt;
|-&lt;br /&gt;
||[[Scripted Attachment Detector.lsl|Scripted Attachment Detector]]&lt;br /&gt;
||{{User|Bobbyb30 Swashbuckler}}&lt;br /&gt;
||A script that will display avatars wearing scripted attatchments in hovertext. This may be worn as an hud or rezzed. &lt;br /&gt;
|-&lt;br /&gt;
||[[Self Upgrading Script Enhanced]]&lt;br /&gt;
||[[User:Cron Stardust|Cron Stardust]]&lt;br /&gt;
||Keeps only latest version of the script on prim (even with multiple adds of the same script!)&lt;br /&gt;
|-&lt;br /&gt;
||[[Sensor Visualizer]]&lt;br /&gt;
||[[User:Cerise Sorbet|Cerise Sorbet]]&lt;br /&gt;
||Shows the size and shape you get with [[llSensor]] range and arc parameters&lt;br /&gt;
|-&lt;br /&gt;
||[[Serverless Key Exchange]]&lt;br /&gt;
||[[User:Sendao Goodman|Sendao Goodman]]&lt;br /&gt;
||Maintains a network of object keys without using an external server.&lt;br /&gt;
|-&lt;br /&gt;
||[[SHA1|SHA1 Hash]]&lt;br /&gt;
||[[User:Strife Onizuka|Strife Onizuka]]&lt;br /&gt;
||Performs a SHA1 Hash on an input text. Similar to MD5 only (slightly) more secure. &lt;br /&gt;
|-&lt;br /&gt;
||[[Shoutcast - radio controller v0.3 (remake of similar scripts)]]&lt;br /&gt;
||[[User:Flennan Roffo|Logic Scripts]]&lt;br /&gt;
||Control your shoutcast radio stations with this shoutcast controller. Uses notecard for info about genres and stations and menu to select the station. Sends info to Xytext display.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:PixelProphet Lane/Scripts#Show Agent Script Count and memory|Show Agent Script Count and memory]]&lt;br /&gt;
||[[User:PixelProphet Lane|PixelProphet Lane]]&lt;br /&gt;
||Fast and efficient method to display the amount of scripts and memory usage for an agent&lt;br /&gt;
|-&lt;br /&gt;
||[[Sim Map Particle Projector]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||Displays a floating map of the sim the script is in.&lt;br /&gt;
|-&lt;br /&gt;
||[[Sim Restart Logger]]&lt;br /&gt;
||[[User:Kyrah Abattoir|Kyrah Abattoir]]&lt;br /&gt;
||Counts region restarts and displays log of last 9 restarts together with region FPS and dilation. &lt;br /&gt;
|-&lt;br /&gt;
||[[SIM status]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A script that will scan and display the status of SIMs (up, down, starting, stopping, unknown, crashed) from a notecard in the same prim as the script.&lt;br /&gt;
|-&lt;br /&gt;
||[[Simple Elevator in a Box]]&lt;br /&gt;
||[[User:Hank Ramos|Hank Ramos]]&lt;br /&gt;
||Simple elevator example.&lt;br /&gt;
|-&lt;br /&gt;
||[[Simple Pay Door]]&lt;br /&gt;
||[[User:Giygas Static|Giygas Static]]&lt;br /&gt;
||Simple door you pay to get access.&lt;br /&gt;
|-&lt;br /&gt;
||[[Skillingo AntiHack Script]]&lt;br /&gt;
||[[User:Tmzasz Luminos|Tmzasz Luminos]]&lt;br /&gt;
||A simple Protection script for skillingo thats modifyable to work with other machines.&lt;br /&gt;
|-&lt;br /&gt;
||[[Skunk Money]]&lt;br /&gt;
||[[User:Hank Ramos|Hank Ramos]]&lt;br /&gt;
||Fun gambling machine of yesteryear, which only supports freeplay now due to SL regulations against gambling. &lt;br /&gt;
|-&lt;br /&gt;
||[[SLateIt]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||An augmented virtual reality HUD.&lt;br /&gt;
|-&lt;br /&gt;
||[[SLetanque]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||An LSL petanque game.&lt;br /&gt;
|-&lt;br /&gt;
||[[SLURL HUD]]&lt;br /&gt;
||[[User:CodeBastard Redgrave|CodeBastard Redgrave]]&lt;br /&gt;
||Touch this HUD to get a SLURL through IM, email and floating text.&lt;br /&gt;
|-&lt;br /&gt;
||[[BuildSlurl (NewAge)]]&lt;br /&gt;
||[[User:Archile Azalee|Archile Azalee]]&lt;br /&gt;
||A way to create a SLurl in a single function BuildSlurl&lt;br /&gt;
|-&lt;br /&gt;
||[[SL Mail V1.2]]&lt;br /&gt;
||[[User:Flennan Roffo|Flennan Roffo]]&lt;br /&gt;
||Second Life mail client V1.2 (released sept&#039;07). Send and receive mail from within Second Life from and to any address. With Address Book function and many chat commands. V1.3 is upcoming soon! &lt;br /&gt;
|-&lt;br /&gt;
||[[SL_NTPoHTTP_v1.1_client|SL NTPoHTTP client]]&lt;br /&gt;
|[[User:SignpostMarv Martin|SignpostMarv Martin]]&lt;br /&gt;
||Second Life Needs Time Parsing over Hyper Text Transfer Protocol&lt;br /&gt;
Emulates the function of [[llGetWallclock]] for any timezone by using SLOpenID&#039;s SLNTPoHTTP service. Also supports ISO 8601 and RFC 2822 timestamps. Script is dependent upon an external service operated by the author!&lt;br /&gt;
|-&lt;br /&gt;
||[[Smile]]&lt;br /&gt;
|[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||An extended smile script supporting two smiles (extendable via a list) and a time delay triggering them at random.&lt;br /&gt;
|-&lt;br /&gt;
||[[Smooth Rotating Door]]&lt;br /&gt;
|[[User:Toy Wylie|Toy Wylie]]&lt;br /&gt;
||A script for doors that open and close smoothly using llTargetOmega&lt;br /&gt;
|-&lt;br /&gt;
||[[Smooth Sliding Door]]&lt;br /&gt;
|[[User:SimonT Quinnell|SimonT Quinnell]]&lt;br /&gt;
||A script for sliding doors that open and close smoothly using [[llMoveToTarget]]. Asjusts for prim orientation.&lt;br /&gt;
|-&lt;br /&gt;
||[[Song Requests]]&lt;br /&gt;
|[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||Helper script for DJs, allowing listeners to request songs and make dedications.&lt;br /&gt;
|-&lt;br /&gt;
||[[Speed Tester]]&lt;br /&gt;
||{{User|Bobbyb30 Swashbuckler}}&lt;br /&gt;
||Similar to the [[Efficiency Tester]], this script allows you to test the speed of a particular function or snippet with multiple trials giving min/max/avg/median and the standard deviation.&lt;br /&gt;
|-&lt;br /&gt;
||[[Spiral Staircase Generator]]&lt;br /&gt;
|[[User:Meyermagic Salome|Meyermagic Salome]]&lt;br /&gt;
||Generates nice looking spiral staircases without much hassle.&lt;br /&gt;
|-&lt;br /&gt;
||[[Static URL&#039;s for HTTP-In Service|Static_URLs]]&lt;br /&gt;
||[[User:Jor3l Boa|Jor3l Boa]]&lt;br /&gt;
||How to generate a static url for HTTP-In temporal limitations.&lt;br /&gt;
|-&lt;br /&gt;
||[[String Compare]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Compares two strings and reliably returns either 1, -1, or 0 if they are the same.&lt;br /&gt;
|-&lt;br /&gt;
||[[Synchronize]]&lt;br /&gt;
||[[User:Cay Trudeau|Cay Trudeau]]&lt;br /&gt;
||Makes synchronized start to a task on even/odd seconds&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Functions#String:_Find_Last_Index|String: Reverse]]&lt;br /&gt;
||[[User:Void Singer|Void Singer]]&lt;br /&gt;
||Returns an input string in reverse order&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Functions#String:_Get_Reverse_Order|String: Last Index]]&lt;br /&gt;
||[[User:Void Singer|Void Singer]]&lt;br /&gt;
||Returns the last index of search found in string (the backward equivalent of [[llSubStringIndex]])&lt;br /&gt;
|-&lt;br /&gt;
||[[Tail Messages (NewAge)]]&lt;br /&gt;
||[[User:Asia Snowfall|Asia Snowfall]]&lt;br /&gt;
||A super nice easy to use script for those non-scripters out there! NewAge coding has done it again where you no longer need to scroll up and down adding buttons and adding messages, Features a tag system (you&#039;ll see what i mean :P)&lt;br /&gt;
|-&lt;br /&gt;
||[[Taper Door (minimalistic)]]&lt;br /&gt;
||[[User:Kopilo Hallard|Kopilo Hallard]]&lt;br /&gt;
||A basic script for doors which open and close using taper.&lt;br /&gt;
|-&lt;br /&gt;
||[[Teleport HUD]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||WORKS TO 4096 METERS!! Very user friendly teleport HUD. Add destinations by touching &amp;quot;Add&amp;quot; &amp;amp; naming destination in chat. Automatically gets sim name and coordinates. Will only display the destinations in the sim you are currently in. Demonstrates more advanced list manipulation and stride functions.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Programs#v7-D_Enh._Landmark-2-Map|Teleporter (landmark based)]]&lt;br /&gt;
||[[User:Void_Singer|Void_Singer]]&lt;br /&gt;
||Uses Landmarks to offer map teleports. Works as Hud or inworld objects, just drop in landmarks and go.&lt;br /&gt;
|-&lt;br /&gt;
||[[Text_Scroller|Text Scroller]]&lt;br /&gt;
||[[User:Fred_Gandt|Fred Gandt]]&lt;br /&gt;
||A simple text display object that scrolls text (applied as a texture) from right to left (like &#039;&#039;those&#039;&#039; LED signs) in a continuous loop.&lt;br /&gt;
|-&lt;br /&gt;
||[[Bobbyb&#039;s texture changer|Texture Changers]]&lt;br /&gt;
||{{User|Bobbyb30 Swashbuckler}}&lt;br /&gt;
||A collection of texture changing scripts.&lt;br /&gt;
|-&lt;br /&gt;
||[[Texture Menu Management|Texture Management]]&lt;br /&gt;
||[[User:Revolution Perenti|Revolution Perenti]]&lt;br /&gt;
||Dialog Menu based Texture Selection.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Xen_Lisle/Texture_Slide|Texture Slide]]&lt;br /&gt;
||[[user:Xen Lisle|Xen Lisle]]&lt;br /&gt;
||Slides a texture on mouse movement&lt;br /&gt;
|-&lt;br /&gt;
||[[Tic Tac Toe]]&lt;br /&gt;
||[[User:CG Linden|CG Linden]]&lt;br /&gt;
||Step by step demo on how to implement a larger scripting project&lt;br /&gt;
|-&lt;br /&gt;
||[[TightList]]&lt;br /&gt;
||[[User:Strife Onizuka|Strife Onizuka]]&lt;br /&gt;
||Tight List is a family of functions for encoding lists as strings and then decoding them back into lists.&lt;br /&gt;
There are two flavors: TightList and TightListType. TightListType preserves types and uses a 6 char header, while TightList uses a 1 char header that doesn&#039;t preserve type. &lt;br /&gt;
|-&lt;br /&gt;
||[[Timer Module]]&lt;br /&gt;
||[[User:Isabelle Aquitaine|Isabelle Aquitaine]]&lt;br /&gt;
||Manage multiple timers via linked messages.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Functions#Unix_time_code_to_list_format|Timestamp:&amp;lt;br&amp;gt;Unix time code to list format]]&lt;br /&gt;
||[[User:Void Singer|Void Singer]]&lt;br /&gt;
||converts Unix timestamps to their [Y, M, D, h, m, s] equivalents (ex: 1234567890 to [2009, 2, 13, 3, 31, 30])&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Functions#List_format_to_Unix_time_code.|Timestamp:&amp;lt;br&amp;gt;List format to Unix time code]]&lt;br /&gt;
||[[User:Void Singer|Void Singer]]&lt;br /&gt;
||converts [Y, M, D, h, m, s] timestamps to their Unix equivalents (ex: [2009, 2, 13, 3, 31, 30] to 1234567890)&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Functions#Weekday_from_Unix_timestamp|Timestamp:&amp;lt;br&amp;gt;Weekday from Unix timestamp]]&lt;br /&gt;
||[[User:Void Singer|Void Singer]]&lt;br /&gt;
||Gets weekday from Unix timestamps (ex: &amp;quot;Friday&amp;quot; from 1234567890)&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Functions#Weekday_from_.28_Y.2C_M.2C_D_.29_format|Timestamp:&amp;lt;br&amp;gt;Weekday from (Y, M, D) format]]&lt;br /&gt;
||[[User:Void Singer|Void Singer]]&lt;br /&gt;
||Gets weekday from (Y, M, D) timestamps (ex: &amp;quot;Friday&amp;quot; from (2009, 2, 13))&lt;br /&gt;
|-&lt;br /&gt;
||[[Tipjar]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||This is a fully fledged tipjar supporting shared access, split profits, inviting to group, handing over gifts, maintaining statistics of who tipped most and who tipped in general, eliminating deed to group and comes with an innovative feature: it periodically moves around from avatar to avatar in the room and returns back to its initial position after a sweep. This way your tijpar will not be static, but participate in the party!&lt;br /&gt;
|-&lt;br /&gt;
||[[Touch A Quote]]&lt;br /&gt;
||[[User:CodeBastard Redgrave|CodeBastard Redgrave]]&lt;br /&gt;
||Touch an object to read quotes sequentially from a notecard&lt;br /&gt;
|-&lt;br /&gt;
||[[Touring Balloon]]&lt;br /&gt;
||[[User:Hank Ramos|Hank Ramos]]&lt;br /&gt;
||Automated touring balloon with many options from long ago.  Always seems to work on one SL release, and not the other.&lt;br /&gt;
|-&lt;br /&gt;
||[[Towncrier]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A simple towncrier to be used in role-play SIMs or wherever there is a need to broadcast news in random intervals.&lt;br /&gt;
|-&lt;br /&gt;
||[[Trivia]]&lt;br /&gt;
||[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A trivia game engine with provided ready-made notecards.&lt;br /&gt;
|-&lt;br /&gt;
||[[Under Age Boot]]&lt;br /&gt;
|[[User:Chance Unknown|Chance Unknown]]&lt;br /&gt;
||Security device example to teleport home accounts below a minimum age limit; can be useful in combating free griefer accounts.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Rolig_Loon/UNDO_PosRot|UNDO_PosRot]]&lt;br /&gt;
||[[User:Rolig Loon|Rolig Loon]]&lt;br /&gt;
||Allows user to undo position and rotation changes that have been made &amp;quot;manually&amp;quot; to any or all prims in a linkset.&lt;br /&gt;
|-&lt;br /&gt;
||[[Universal Translator]]&lt;br /&gt;
|[[User:Hank Ramos|Hank Ramos]]&lt;br /&gt;
||Chat listener that handles seamless translation of public chat between 50+ written languages without the need for configuration.  Handles numerous avatars, auto-detects languages, and works together with multiple copies of translators to spread-workload using a sophisticated back-end communications sub-system.&lt;br /&gt;
|-&lt;br /&gt;
||[[Unix2DateTime]]&lt;br /&gt;
|[[User:Flennan Roffo|Flennan Roffo]]&lt;br /&gt;
||Conversion from Unix time ([[llGetUnixTime]]()) to date and time string and vice versa.&lt;br /&gt;
|-&lt;br /&gt;
||[[Unmutable Descript Nagger]]&lt;br /&gt;
|[[User:Bobbyb30 Zohari|Bobbyb30 Zohari]]&lt;br /&gt;
||To nag avatars to take off their scripted attatchments.&lt;br /&gt;
|-&lt;br /&gt;
||[[Unpacker On Rez (NewAge)]]&lt;br /&gt;
|[[User:Asia Snowfall|Asia Snowfall]]&lt;br /&gt;
||A very simple to use script for all you creators out there, This script will enable you to send out boxed items and make it easier for users to unpack, Also features auto die on completion. Very simple to configure!&lt;br /&gt;
|-&lt;br /&gt;
||[[Unpacker On Touch (NewAge)]]&lt;br /&gt;
|[[User:Asia Snowfall|Asia Snowfall]]&lt;br /&gt;
||Exactly like Unpacker On Rez, But changed some things about to make it Unpack On Touch&lt;br /&gt;
|-&lt;br /&gt;
||[[Update distributor]]&lt;br /&gt;
|[[User:Dale Innis|Dale Innis]]&lt;br /&gt;
||Distribute an object (like a project update) to a list of people named in a notecard.&lt;br /&gt;
|-&lt;br /&gt;
||[[UUID2Channel]]&lt;br /&gt;
||[[User:Project Neox|Project Neox]]&lt;br /&gt;
||Optimised version of the original key2channel generators.&lt;br /&gt;
|-&lt;br /&gt;
||[[UUID Song Generator]]&lt;br /&gt;
||{{User|Sendao Goodman}}&lt;br /&gt;
||Translates a UUID into a simple song and plays it.&lt;br /&gt;
|-&lt;br /&gt;
||[[VirtualID_URLMap|VirtualID URL Mapper for HTTP-in]]&lt;br /&gt;
|[[User:Cenji Neutra|Cenji Neutra]]&lt;br /&gt;
||A script showing how to setup a static URL of the form &amp;lt;your-alias&amp;gt;.obj.virtualid.info which maps to the dynamic HTTP-in URL LSL generates and keeps it up-to-date.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Programs#v7-D_Advanced_Visitor_Greeter|Visitor Greeter]]&lt;br /&gt;
|[[User:Void_Singer|Void_Singer]]&lt;br /&gt;
||Reduced spam visitor greeter, highly configurable, easy to modify.&lt;br /&gt;
|-&lt;br /&gt;
||[[Visitor Logger (Web/Basic) ]]&lt;br /&gt;
|[[User:Buddy Sprocket|Buddy Sprocket]]&lt;br /&gt;
||A very basic visitor logger - log visitors in SL to a text file on your web-site.&lt;br /&gt;
|-&lt;br /&gt;
||[[Visitors]]&lt;br /&gt;
|[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A series of scripts to hold lists of visitors taking into account display names and supporting tracking multiple visits.&lt;br /&gt;
|-&lt;br /&gt;
||[[Vote Simple]]&lt;br /&gt;
|[[User:JB_Kraft|JB Kraft]]&lt;br /&gt;
||Simple vote collector. One avi, one vote.&lt;br /&gt;
|-&lt;br /&gt;
||[[Walking Sound (NewAge)]]&lt;br /&gt;
|[[User:Asia Snowfall|Asia Snowfall]]&lt;br /&gt;
||Very powerful walking sound script, Featuring customer ability to add their own sounds with the API Sound Feature!&lt;br /&gt;
|-&lt;br /&gt;
||[[Wanderer]]&lt;br /&gt;
|[[User:Kira Komarov|Kira Komarov]]&lt;br /&gt;
||A script that can be used to randomly move a prim around relative to its origin point. Can be used for breeders, robots, birds and other applications where a primitive has to move around by itself.&lt;br /&gt;
|-&lt;br /&gt;
||[[WarpPos]]&lt;br /&gt;
|[[User:Keknehv Psaltery|Keknehv Psaltery]]&lt;br /&gt;
||Non-physical movement without the 10m limit.&lt;br /&gt;
|-&lt;br /&gt;
||[[Wiki3DBuilder]] [[Wiki3DBuilder1.0]]&lt;br /&gt;
||[[User:Salahzar Stenvaag|Salahzar Stenvaag]] &lt;br /&gt;
||Allows a group of people to collectively build up complex 3D mindmaps with connected concepts. Uses particles for connections and low prim usage. Nodes can be textured, colored, changed form size moved collectively by everybody and can distribute notecards, landmarks, URL, objects, textures. I provide two version 0.1 and 1.0 and probably next version will communicate with moodle and sloodle external websites.&lt;br /&gt;
|-&lt;br /&gt;
||[[Window Control]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||For window opacity, helpful for buildings.&lt;br /&gt;
|-&lt;br /&gt;
||[[WHMcs SecondLife plugin]]&lt;br /&gt;
|[[User:Alicia Sautereau|Alicia Sautereau]]&lt;br /&gt;
||Linden Dollar payment plugin for the WHMcs hosting portal.&lt;br /&gt;
|-&lt;br /&gt;
||[[XTEA Strong Encryption Implementation]]&lt;br /&gt;
||[[User:Morse Dillon|Morse Dillon]]&lt;br /&gt;
||An LSL implementation of XTEA (eXtended Tiny Encryption Algorithm).  This is the first known public release of a &#039;real&#039; strong encryption implementation in LSL and is released under the GNU General Public License (GPL).&lt;br /&gt;
|-&lt;br /&gt;
||[[XyText 1.5|XyText]]&lt;br /&gt;
||[[User:Xylor Baysklef|Xylor Baysklef]]&lt;br /&gt;
|| Display text (up to 10 characters) on a prim. Use as many prims as desired.&lt;br /&gt;
|-&lt;br /&gt;
||[[XyyyyzText|XyyyyzText]]&lt;br /&gt;
||[[User:Criz Collins|Criz Collins]]&lt;br /&gt;
|| Display text (up to 10 characters) on a prim. Displays different text for each line instead of one single text, that will be broken into the next lines. Watch here for what that means: http://screencast.com/t/1wMLujLcEO&lt;br /&gt;
|-&lt;br /&gt;
||[[XyzzyText|XyzzyText]]&lt;br /&gt;
||[[User:Thraxis Epsilon|Thraxis Epsilon]] and [[User:Gigs Taggart|Gigs Taggart]]&lt;br /&gt;
|| Display text (up to 10 characters) on a prim. Way more efficient than XyText.&lt;br /&gt;
|-&lt;br /&gt;
||[[Youtube TV]]&lt;br /&gt;
||[[User:Morgam Biedermann|Morgam Biedermann]]&lt;br /&gt;
||Watch your favorite Youtube videos / auto set the texture to the parcel media texture.&lt;br /&gt;
|-&lt;br /&gt;
||[[Zero Lag Poseball]]&lt;br /&gt;
||[[User:Jippen Faddoul|Jippen Faddoul]] and [[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||A simple poseball with no lag&lt;br /&gt;
|-&lt;br /&gt;
||[[Zigzag Sequence]]&lt;br /&gt;
||[[User:Project Neox|Project Neox]]&lt;br /&gt;
||Zigzag sequence generator I developed while scripting checkers&lt;br /&gt;
|-&lt;br /&gt;
||[[Input number of seconds, get a string back that shows days, hours, minutes, seconds]]&lt;br /&gt;
||[[User:Fire Centaur|Fire Centaur]]&lt;br /&gt;
||Returns a string that displays days, hours, seconds&lt;br /&gt;
|-&lt;br /&gt;
||[[Random Giver Prim]]&lt;br /&gt;
||[[User:Damian Darkwyr|Damian Darkwyr]]&lt;br /&gt;
||A randomized item giver with a game-like twist&lt;br /&gt;
|-&lt;br /&gt;
||[[Client Specific Contents Giver]]&lt;br /&gt;
||[[User:Damian Darkwyr|Damian Darkwyr]]&lt;br /&gt;
||Give Contents only to users of a specific Client. Such as Phoenix, CoolVL or 2.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Support Script Library==&lt;br /&gt;
These are scripts in other languages, intended to be run on other systems that support scripts written in LSL&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| [[User:Ina Centaur/UUID/calimg.api|Calendar Image UUID API]]&lt;br /&gt;
|| [[User:Ina Centaur|Ina Centaur]]&lt;br /&gt;
|| API that gives the UUID of an image of a calendar image give month and year arguments.&lt;br /&gt;
|-&lt;br /&gt;
||[[HTTP Post request to a PHP server]]&lt;br /&gt;
||[[User:Corto Maltese|Corto Maltese]]&lt;br /&gt;
|| This small library allows you to make simple POST requests to your website. The libraries allow you to get your request through the variable $_POST on the server. It also include a basic security mechanism aimed to stop hacking. Comprises of LSL client script and PHP server script.&lt;br /&gt;
|-&lt;br /&gt;
|| [[User:Ina Centaur/PHP/k2n.php|Key2Name.php]]&lt;br /&gt;
|| [[User:Ina Centaur|Ina Centaur]]&lt;br /&gt;
|| Get Avatar&#039;s Name using Second Life search service. (like in LSL Key2Name)&lt;br /&gt;
|-&lt;br /&gt;
|| [[Lame_Object_DNS_and_Cross_Sim_Messaging|Lame Object DNS and Cross Sim Messaging]]&lt;br /&gt;
|| [[User:Liandra Ceawlin|Liandra Ceawlin]]&lt;br /&gt;
|| Simple, cheeseball method of doing cross-sim communications with http-in and an external object DNS service.&lt;br /&gt;
|-&lt;br /&gt;
|| [[User:SignpostMarv Martin/PHP/llXorBase64StringsCorrect|llXorBase64StringsCorrect]]&lt;br /&gt;
|| [[User:SignpostMarv Martin|SignpostMarv Martin]]&lt;br /&gt;
|| An implementation of [[llXorBase64StringsCorrect]] in PHP- should be useful if you&#039;re using llXorBase64StringsCorrect to do cryptography work in LSL2 and posting it out to the web via [[llHTTPRequest]].&lt;br /&gt;
|-&lt;br /&gt;
|| [[User:SignpostMarv Martin/PHP/lsl fu.php|lsl_fu.php]]&lt;br /&gt;
|| [[User:SignpostMarv Martin|SignpostMarv Martin]]&lt;br /&gt;
|| A basic OOP&#039;d PHP Class containing VeloxSeverine&#039;s $_POST fixer and Marv&#039;s own eccentric ideas for &amp;quot;fixing&amp;quot; things.&lt;br /&gt;
|-&lt;br /&gt;
|| [[User:Jor3l Boa/PHP/n2k.php|Name2Key.php]]&lt;br /&gt;
|| [[User:Jor3l Boa|Jor3l Boa]]&lt;br /&gt;
|| Get Avatar&#039;s UUID using Second Life search service. (like in LSL Name2Key)&lt;br /&gt;
|-&lt;br /&gt;
|| [[Public_Object_DNS|Public Object DNS]]&lt;br /&gt;
|| [[User:Liandra Ceawlin|Liandra Ceawlin]]&lt;br /&gt;
|| Public object DNS-like system running on GAE, for http-in. Hopefully scalable enough for wide-spread usage.&lt;br /&gt;
|-&lt;br /&gt;
|| Silo&lt;br /&gt;
|| [[User:Zero_Linden|Zero Linden]]&lt;br /&gt;
|| General purpose data store in PHP.  Use this to persist arbitrary data from LSL via [[llHTTPRequest]].  See:&lt;br /&gt;
* [http://www.notabene-sl.com/misc/silo-README.txt README] file&lt;br /&gt;
* [http://www.notabene-sl.com/misc/silo.tgz silo.tgz] tarball&lt;br /&gt;
* forum post [http://forums-archive.secondlife.com/54/69/119570/1.html Announcement].&lt;br /&gt;
|-&lt;br /&gt;
||[[Silverday ObjectDNS]]&lt;br /&gt;
||[[User:Till Stirling|Till Stirling]]&lt;br /&gt;
||Dynamic Object-DNS-System to provide dynamic mapping of LSL-URLs to persistent domains. Features include redirect service, password protected domains, write protected domains, LSL-API for all necessary functions, optional web-interface.&lt;br /&gt;
|-&lt;br /&gt;
|| [http://aubretec.com/products/sldb SLDB]&lt;br /&gt;
|| [[User:Luc Aubret|Luc Aubret]]&lt;br /&gt;
|| Flexible web database storage using PHP/MySQL.  Used to store per-user field/value pairs from in-world objects using [[llHTTPRequest]]. &lt;br /&gt;
* [http://aubretec.com/support/manuals/sldbkit/ Implementation Guide]&lt;br /&gt;
* [http://aubretec.com/wp-content/uploads/2009/05/sldb.zip Download] (.zip, 12kb)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Articles&#039;&#039;&#039;&lt;br /&gt;
*[[:Category:LSL Examples| Examples]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{LSLC|}}&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Player_Notes_v0.0.1_20110905&amp;diff=1153260</id>
		<title>User:Allen Kerensky/Myriad Lite Preview4/Myriad Lite Player Notes v0.0.1 20110905</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Player_Notes_v0.0.1_20110905&amp;diff=1153260"/>
		<updated>2011-09-08T15:49:24Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: convert to pre instead of lsl tag&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Header}}&lt;br /&gt;
= Myriad Lite Player Notes v0.0.1 20110905 =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Myriad Lite Player Notes v0.0.1 20110905&lt;br /&gt;
The Myriad RPG System was designed, written, and illustrated by Ashok Desai&lt;br /&gt;
Myriad RPG licensed under the Creative Commons Attribution 2.0 UK: England and Wales&lt;br /&gt;
http://creativecommons.org/licenses/by/2.0/uk/&lt;br /&gt;
Myriad Lite software Copyright (c) 2011 by Allen Kerensky (OSG/SL)&lt;br /&gt;
Baroun&#039;s Adventure Machine Copyright (c) 2008-2011 by Baroun Tardis (SL)&lt;br /&gt;
Myriad Lite Player Notes licensed under the&lt;br /&gt;
Creative Commons Attribution-Share Alike-Non-Commercial 3.0 Unported&lt;br /&gt;
http://creativecommons.org/licenses/by-nc-sa/3.0/&lt;br /&gt;
&lt;br /&gt;
Welcome to Myriad Lite and Baroun&#039;s Adventure Machine (BAM)!&lt;br /&gt;
&lt;br /&gt;
You should have recieved a &amp;quot;Myriad Lite&amp;quot; heads-up display (HUD) attachment  when you recieved these instructions. &lt;br /&gt;
Please find it in your inventory and either drag it on to your avatar, or right click and select &amp;quot;Wear&amp;quot; &lt;br /&gt;
The Myriad Lite HUD keeps track of your combat and quest status while roleplaying.&lt;br /&gt;
&lt;br /&gt;
USING THE HUD&lt;br /&gt;
Right click Myriad Lite in inventory and choose Wear or Attach to HUD. &lt;br /&gt;
I use the bottom left HUD slot by default.&lt;br /&gt;
&lt;br /&gt;
COMMANDS&lt;br /&gt;
You can send commands to Myriad Lite on chat channel 5.&lt;br /&gt;
/5 armoroff - turn off powered armor to save battery&lt;br /&gt;
/5 armoron - turn on powered armor&lt;br /&gt;
/5 checkammo - check the ammo left in your firearm&lt;br /&gt;
/5 checkarmor - check what amount of armor you currently have on&lt;br /&gt;
/5 checkbattery - check the battery level in powered armor&lt;br /&gt;
/5 combatoff - disable the built in fist fighter&lt;br /&gt;
/5 combaton - enable the built in fist fighter&lt;br /&gt;
/5 credits - credit where credit is due&lt;br /&gt;
/5 debugoff - turn off debugging messages if showing&lt;br /&gt;
/5 debugon - turn on debug messages&lt;br /&gt;
/5 drawboth - draw weapons in both hands if attached&lt;br /&gt;
/5 drawleft - draw a weapon in your left hand, if attached&lt;br /&gt;
/5 drawright - draw a weapon in your right hand, if attached&lt;br /&gt;
/5 holsterboth - holster the firearms in both hands, if attached&lt;br /&gt;
/5 holsterleft - holster the firearm in your left hand, if attached&lt;br /&gt;
/5 holsterright - holster the firearm in your right hand, if attached&lt;br /&gt;
/5 quest - see your current status in your current quest&lt;br /&gt;
/5 recharge - recharge the batteries in powered armor&lt;br /&gt;
/5 reload - reload your firearm&lt;br /&gt;
/5 reset - reset your meter and reload your character sheet&lt;br /&gt;
/5 safetyoff - unsafe your firearm&lt;br /&gt;
/5 safetyon - safe your firearm&lt;br /&gt;
/5 sheatheboth - sheathe the melee weapons in both hands, if attached&lt;br /&gt;
/5 sheatheleft - sheathe the melee weapon in your left hand, if attached&lt;br /&gt;
/5 sheatheright - sheathe the melee weapon in your right hand, if attached&lt;br /&gt;
/5 version - show the credits which includes the HUD version number and date&lt;br /&gt;
&lt;br /&gt;
COMBAT&lt;br /&gt;
Myriad Lite includes a built-in &amp;quot;fist fighter&amp;quot;.&lt;br /&gt;
Say &amp;quot; /5 combaton &amp;quot; in main chat, while you have no weapons in hand, to activate the fist fighter.&lt;br /&gt;
The fist fighter works in Mouselook or regular camera mode.&lt;br /&gt;
Hold the left mouse button to start an attack.&lt;br /&gt;
Choose the attack with the arrow keys on your keyboard:&lt;br /&gt;
Left Arrow = Left Punch&lt;br /&gt;
Up Arrow = One-Two Punch, slower than a single fisted punch&lt;br /&gt;
Right Arrow = Right Punch&lt;br /&gt;
Down Arrow = Kick, slower than the punches but longer &amp;quot;reach&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Myriad Lite also includes Melee combat and ranged combat such as with crossbows or firearms, if the appropriately scripted Myriad-Lite compatible item is attached to a hand.&lt;br /&gt;
&lt;br /&gt;
QUESTS&lt;br /&gt;
Myriad Lite also includes Baroun Tardis&#039; Adventure Machine v1, allowing you to find and complete &amp;quot;quests&amp;quot;, &amp;quot;adventures&amp;quot;, or &amp;quot;crusades&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Sim/region owners can build &amp;quot;quests&amp;quot; in their regions, which this HUD will help you complete.&lt;br /&gt;
&lt;br /&gt;
To begin an adventure, touch the &#039;person&#039; who gave you the HUD again, this time while wearing the HUD. &lt;br /&gt;
&lt;br /&gt;
You should get the first &#039;task&#039; for the adventure, which will show what your goal and a hint on how to obtain it. &lt;br /&gt;
&lt;br /&gt;
If you should lose track of what you&#039;re doing, touch the HUD on your screen, and it will give you a quick update on the status of your adventure. &lt;br /&gt;
&lt;br /&gt;
If you remove your HUD, it will reset and clear the current adventure. &lt;br /&gt;
&lt;br /&gt;
This will cause you to lose all  goals you have achieved, and reset you to &amp;quot;no adventure in progress&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Adventures are like a scavenger hunt: You go after certain goals, and when you get all of them , you win the main prize at the end.&lt;br /&gt;
&lt;br /&gt;
 There are four basic types of goals  in the BAM system:&lt;br /&gt;
 &lt;br /&gt;
1)  Adventure Giver : if you&#039;re reading this, you&#039;ve already found one.... These start adventures, and can also be the end point of one.  Usually, some small prize is given out when you complete the adventure. These have a blue text floating over their head, indicating their name, such as &amp;quot;Baker&amp;quot; or &amp;quot;Clerk&amp;quot; &lt;br /&gt;
&lt;br /&gt;
2) Collision Goal: These occupy an area, and when you run into it or step on it while looking for that area, it lets you know you&#039;ve reached it, and gives you a clue for the next step in the adventure. These have no floating text, since that would be too much of a give away that this is the spot (grin) &lt;br /&gt;
&lt;br /&gt;
3) Location Goal: These scan an area, and when you enter it while looking for that area, let you know you&#039;ve reached it, and give you a clue for the next step in the adventure. These have no floating text, since that would be too much of a give away that this is the spot (grin) &lt;br /&gt;
&lt;br /&gt;
4) Touch Goal : These sit still, waiting, until you touch them. If they&#039;re not the current goal for you in the adventure, then nothing happens. If they _are_ your current goal, then the victory music plays and you get clue/hint for the next step.  These have a text floating over them, indicating their name. &lt;br /&gt;
&lt;br /&gt;
If you have problems with the adventure, please IM the owner of the region where you found this HUD or quest.&lt;br /&gt;
&lt;br /&gt;
Thank you for with Myriad Lite including Baroun&#039;s Adventure Machine!&lt;br /&gt;
&lt;br /&gt;
Allen and Baroun&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Sim_Builder_Notes_v0.0.05_20110905&amp;diff=1153259</id>
		<title>User:Allen Kerensky/Myriad Lite Preview4/Myriad Lite Sim Builder Notes v0.0.05 20110905</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Sim_Builder_Notes_v0.0.05_20110905&amp;diff=1153259"/>
		<updated>2011-09-08T15:48:47Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: convert to pre instead of lsl tags&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Header}}&lt;br /&gt;
= Myriad Lite Sim/Builder Notes v0.0.1 20110905 =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Myriad Lite Sim/Builder Notes v0.0.1 20110905&lt;br /&gt;
The Myriad RPG System was designed, written, and illustrated by Ashok Desai&lt;br /&gt;
Myriad RPG licensed under the Creative Commons Attribution 2.0 UK: England and Wales&lt;br /&gt;
http://creativecommons.org/licenses/by/2.0/uk/&lt;br /&gt;
Myriad Lite software Copyright (c) 2011 by Allen Kerensky (OSG/SL)&lt;br /&gt;
Baroun&#039;s Adventure Machine Copyright (c) 2008-2011 by Baroun Tardis (SL)&lt;br /&gt;
Myriad Lite Sim/Builder Notes licensed under the&lt;br /&gt;
Creative Commons Attribution-Share Alike-Non-Commercial 3.0 Unported&lt;br /&gt;
http://creativecommons.org/licenses/by-nc-sa/3.0/&lt;br /&gt;
&lt;br /&gt;
COMBAT CONSTRUCTION KIT&lt;br /&gt;
Sim builders need to consider the &amp;quot;laws of the land&amp;quot; related to:&lt;br /&gt;
* Armor - commonly worn? ceremonial only?&lt;br /&gt;
* Fist Fights - are brawls common? legal?&lt;br /&gt;
* Melee Weapons - can they be openly worn? Does a Code Duello exist?&lt;br /&gt;
* Ranged Weapons - can they be openly worn? &lt;br /&gt;
* Hospitals and First Aid Items?&lt;br /&gt;
&lt;br /&gt;
QUEST CONSTRUCTION KIT&lt;br /&gt;
The Myriad Lite meter includes the Baroun&#039;s Adventure Machine (BAM) v1 HUD code.&lt;br /&gt;
This allows you to create an NPC that gives out quests, goal items that move the character through the quest, and hand out prizes for completing the tasks.&lt;br /&gt;
&lt;br /&gt;
CREATING THE QUEST OUTLINE&lt;br /&gt;
1. NPC Name That Starts and Ends Each Adventure&lt;br /&gt;
Who is going to set the player on the quest?&lt;br /&gt;
&lt;br /&gt;
2. Adventure Name&lt;br /&gt;
What is a shorthand name for the quest itself?&lt;br /&gt;
&lt;br /&gt;
3. Adventure Description&lt;br /&gt;
What is the goal of the quest once all tasks are complete?&lt;br /&gt;
&lt;br /&gt;
Planning Tasks in the Adventure&lt;br /&gt;
Adventure: Find the Red Salt&lt;br /&gt;
Step 1: Go to mine.&lt;br /&gt;
Step 2: Find the barrel of processed salt.&lt;br /&gt;
Step 3: return to baker.&lt;br /&gt;
&lt;br /&gt;
Adventure Numbers and Task Numbers&lt;br /&gt;
Start each new adventure&#039;s tasks on a number which a multiple of 100 * the adventure number.&lt;br /&gt;
Task numbers  for adventure 1 would fall into the range of 100-199.&lt;br /&gt;
The base task  number (100, 200, etc) is the task number assigned to the Adventure Giver NPC itself.&lt;br /&gt;
Each step of the adventure that PC starts you on is then numbered sequentially (101, 102, 103...) from that NPC&#039;s number.&lt;br /&gt;
&lt;br /&gt;
Keep a spreadsheet of Adventure Tasks&lt;br /&gt;
Task Number, Task Description, Task Hint, Goal Object, Goal Type (location, touch, collide), Prize for Task, Sound for Task, Next Task&lt;br /&gt;
&lt;br /&gt;
Example - Managing Adventures&lt;br /&gt;
&lt;br /&gt;
I keep track of adventures sequentually - for example, the Baker in Kasra is the first one, so that adventure is #1&lt;br /&gt;
&lt;br /&gt;
Inside an adventure, there&#039;s various tasks.&lt;br /&gt;
&lt;br /&gt;
I number them as the Adventure number, then the step in the adventure. The Baker tasks are 101, 102, 103, etc&lt;br /&gt;
&lt;br /&gt;
If you&#039;re planning an Adventure, then it&#039;s easiest for me to list the Tasks, and how they connect.&lt;br /&gt;
&lt;br /&gt;
The goals check for what task you&#039;re in before they interact with the player, so I need to know that.&lt;br /&gt;
&lt;br /&gt;
The checking keeps people from just teleporting to the last step and getting the prize. &lt;br /&gt;
 &lt;br /&gt;
The &amp;quot;Done Sound UUID&amp;quot; you can get from right-clicking on a sound in your SL inventory.&lt;br /&gt;
&lt;br /&gt;
 The sound needs to be &amp;quot;copy&amp;quot; so it&#039;ll copy to other people.&lt;br /&gt;
 &lt;br /&gt;
Note that it doesn&#039;t have to be music - the Professor in the Green Caste Quest uses this to talk out loud. &lt;br /&gt;
&lt;br /&gt;
The Done Text is displayed when the player finishes a task&lt;br /&gt;
&lt;br /&gt;
The Todo Text and Hint are displayed when they get a new task &lt;br /&gt;
&lt;br /&gt;
They also display if they touch the BAM HUD &lt;br /&gt;
&lt;br /&gt;
Any object or goal can give a Prize. &lt;br /&gt;
&lt;br /&gt;
The prize needs to be copy/transfer perms. &lt;br /&gt;
&lt;br /&gt;
Here&#039;s a list of tasks for &amp;quot;The Baker&amp;quot; as an example: &lt;br /&gt;
&lt;br /&gt;
000 -- Player isn&#039;t in an adventure, meets the Baker, gets adventure&lt;br /&gt;
&lt;br /&gt;
100 -- Adventure Giver Baker : &amp;quot;Go to the salt mines&amp;quot;  is given by the Baker&lt;br /&gt;
                   ToDo text=&amp;quot;Find the source of the Red Salt&amp;quot;;&lt;br /&gt;
                    Hint text =&amp;quot;It&#039;s probably in the mines of Kasra near the Tahari&amp;quot;; &lt;br /&gt;
    &lt;br /&gt;
101 -- Location Goal,  Red Salt Mine. Active task is 100. &amp;quot;Find the salt in the mine&amp;quot; &lt;br /&gt;
            Done text: &amp;quot;You&#039;ve found the mines!&amp;quot;&lt;br /&gt;
            Done Sound UUID: &amp;quot;f78027c9-e8bb-38f2-9b11-1d4e89ac10a4&amp;quot;&lt;br /&gt;
            ToDo text &amp;quot;Find some processed salt inside the mine&amp;quot;;&lt;br /&gt;
            Hint text=&amp;quot;Checking casks might be a good idea&amp;quot;&lt;br /&gt;
            &lt;br /&gt;
102 --  Touch goal, cask of Red Salt. Active task is 101. Gives task 103&lt;br /&gt;
             Done Text=&amp;quot;You&#039;ve found the salt!&amp;quot;;&lt;br /&gt;
             Done sound UUID=&amp;quot;f78027c9-e8bb-38f2-9b11-1d4e89ac10a4&amp;quot;;&lt;br /&gt;
             ToDo text &amp;quot;Return the salt to the baker&amp;quot;;&lt;br /&gt;
             Hint text &amp;quot;He&#039;s where you first met him&amp;quot;&lt;br /&gt;
&lt;br /&gt;
103 -- Adventure Giver  Baker: checks for 103. Requires 101,102 completed. On adventure complete, gives prize. &lt;br /&gt;
            Done Text: Great - Now I can finish my baking!&amp;quot;&lt;br /&gt;
            Done Sound UUID: &amp;quot;f78027c9-e8bb-38f2-9b11-1d4e89ac10a4&amp;quot;&lt;br /&gt;
            Prize: &amp;quot;Sweet Roll&amp;quot;&lt;br /&gt;
            &lt;br /&gt;
CREATING THE NPC AND GOALS&lt;br /&gt;
Once you have laid out the adventure outline and have an idea of the data, you&#039;re ready to load the quest NPC and goals.&lt;br /&gt;
&lt;br /&gt;
Quest NPC&lt;br /&gt;
All quests start and end with an NPC. The first quest NPC would be fictional task 100, and each step of the quest would be 101, 102, etc, and when done, the player returns to the quest NPC to claim the prize.&lt;br /&gt;
&lt;br /&gt;
There are a number steps and configurable items for a BAM Adventure Giver NPC:&lt;br /&gt;
1. Create your quest NPC item.&lt;br /&gt;
2. Drop in the BAM Adventure Giver NPC script.&lt;br /&gt;
3. Edit the &amp;quot;Adventure Specific Configuration&amp;quot; section at the top of the script. The variables are explained next.&lt;br /&gt;
&lt;br /&gt;
A. Set MSG_NPCNAME to the NPC&#039;s game name&lt;br /&gt;
B. Choose a hovertext color for the NPC - http://wiki.secondlife.com/wiki/Category:LSL_Color&lt;br /&gt;
C. Choose an alpha/transparency - 0.0 is totally clear, 1.0 is totally visible.&lt;br /&gt;
D. ADVNAME: Adventure Name - set a short name for this adventure. Example: &amp;quot;Red Salt Quest&amp;quot;&lt;br /&gt;
E. ADVTEXT: Adventure Description - set a short one-line description for this adventure. Example: &amp;quot;Find the rest salt for the baker&amp;quot;&lt;br /&gt;
F. ADV_ATTRACT: Attract Message - Set a message for the NPC to attract player help. Example: &amp;quot; can you help me find some red salt?&amp;quot;&lt;br /&gt;
G. MSG_OWNER_STARTADV: Message to owner that player started adventure. Example: &amp;quot; has started Red Salt Quest&amp;quot;&lt;br /&gt;
H. ADV_ALL_TASKS: list of all task numbers that MUST be completed to get the prize. Example: &amp;quot;101, 102&amp;quot; &lt;br /&gt;
NOTE: This list is a comma-separated values list, so there should be a SPACE after each comma.&lt;br /&gt;
If the adventure does not finish when the player has performed all tasks, check this first!&lt;br /&gt;
I. MSG_ADV_INCOMPLETE: what NPC should say if player comes back with not all tasks complete. Example: &amp;quot; Not done yet?&amp;quot;&lt;br /&gt;
J. MSG_OWNER_DONEADV: message to quest owner when player finishes a quest. Example: &amp;quot;has completed Red Salt Quest&amp;quot;&lt;br /&gt;
K. ADVDONETEXT: message from NPC to player that the quest is done. Example: &amp;quot;Thanks for finding red salt for me!&amp;quot;&lt;br /&gt;
L. ADVDONEUUID: uuid key of a sound to play when player is successful on the quest, like a fanfare.  Example: a &amp;quot;TA-DA&amp;quot; horn sound&lt;br /&gt;
Can be the name of a sound effect file in the NPC object inventory too.&lt;br /&gt;
M. PRIZENAME: name of a prize object in NPC object inventory to give to the player when they finish the quest. Example: Sweet roll or NONE.&lt;br /&gt;
Put the Prize object in the NPC&#039;s object inventory.&lt;br /&gt;
The key value NONE means do not give a prize at the end of the quest.&lt;br /&gt;
N. ADVTASKTDNUM: the task to-do number of the NEXT TASK. Example: 101&lt;br /&gt;
O. ADTASKTODO: a text description of the NEXT TASK the player should do.  Example: &amp;quot;Find the Red Salt Mine.&amp;quot;&lt;br /&gt;
P. ADVTASKTODOHINT: a hint for the player on how to complete the NEXT TASK they are being given. Example: &amp;quot;You think the Red Salt Mine is northeast.&amp;quot;&lt;br /&gt;
Q. TRIGGERWAIT: how long in seconds before a player can re-trigger this NPC or goal. Example: 60&lt;br /&gt;
R. PRIZEWAIT: how long in seconds between when player can re-do quest and get the prize again. Example: 3600 (= 1 hour, or 86400 = 1 day)&lt;br /&gt;
S. EVENTTIMER: how long between timer events, the smaller the number, the more lag. Example: 15.0&lt;br /&gt;
The timer processes the trigger and prize given lists to expire old entries - too long a wait between timers means longer before players can retry the quests.&lt;br /&gt;
&lt;br /&gt;
4. Save the script and let the NPC restart.&lt;br /&gt;
5. Move one to creating the quest goals for this NPC&#039;s quest.&lt;br /&gt;
&lt;br /&gt;
QUEST GOALS&lt;br /&gt;
Each step/task of the quest or adventure is represented by a goal object.&lt;br /&gt;
There are two basic parts to configuring a Goal object: &lt;br /&gt;
1. Configure the current task that the player must be working on, in order to have &amp;quot;successfully&amp;quot; found this goal.&lt;br /&gt;
2. Configure a NEXT task to hand out when the player finishes this current task, to send the player on to the next goal.&lt;br /&gt;
&lt;br /&gt;
There are currently 3 starter goal objects, with many more possible, to help nudge players through your quest.&lt;br /&gt;
&lt;br /&gt;
Collision Goal&lt;br /&gt;
There is a collision goal, which the player must physically collide with to activate. &lt;br /&gt;
This is useful as a transparent/phantom &amp;quot;detector&amp;quot; that a player has entered a general area, to hand them the next task that is more specifically what to do in that area.&lt;br /&gt;
&lt;br /&gt;
Location Goal&lt;br /&gt;
There is a location goal, which uses a sensor to detect when the player is nearby within its range.&lt;br /&gt;
This is also useful as a detector to tell when a player is getting near a specific goal, to hand out a more specific clue.&lt;br /&gt;
&lt;br /&gt;
Touch Goal&lt;br /&gt;
There is a touch goal which must be clicked with the mouse.&lt;br /&gt;
This could represent opening the treasure chest, opening the door to the final clue area, pressing the correct button on the bomb to defuse it, etc.&lt;br /&gt;
The touch goal checks the distance to the player to make sure the goal &amp;quot;is in arm&#039;s reach&amp;quot; of the player when activated.&lt;br /&gt;
&lt;br /&gt;
By combining these three goals, and clever task descriptions and hints, you can build an infinite number of scavenger-hunt style quests for players in your regions.&lt;br /&gt;
Configuring all three goals is a similar process:&lt;br /&gt;
1. Create the goal object - such as a door, box, control panel button, etc.&lt;br /&gt;
2. Drop in the goal script&lt;br /&gt;
3. Edit the goal script ADVENTURE-SPECIFIC CONFIGURATION settings at the top.&lt;br /&gt;
A. MSG_SETTEXT: the hovertext message over the quest goal. Example:  &amp;quot;Processed Red Salt Cask&amp;quot;;&lt;br /&gt;
B. MSG_SETTEXT_COLOR: color of the hovertext. Examples: http://wiki.secondlife.com/wiki/Category:LSL_Color&lt;br /&gt;
C. MSG_SETTEXT_ALPHA: alpha/transparency of the hovertext. Examples: 0.0 = invisible, 1.0 = fully visible.&lt;br /&gt;
D. ADVNAME: short name of this adventure: Example &amp;quot;Red Salt Quest&amp;quot;&lt;br /&gt;
E. ADVGOAL: the current task number that finding this goal will complete. Example: 101&lt;br /&gt;
Note: You can have multiple goal objects with the same goal number. That gives players multiple avenues to complete the same step of the quest.&lt;br /&gt;
F. TASKDONETEXT: message to player they they found the goal to complete this task. Example: &amp;quot;You&#039;ve found the salt mine! You&#039;ll need a lantern.&amp;quot;&lt;br /&gt;
G. TASKDONEUUID: uuid of a sound to play for player when they complete this step. Example: &amp;quot;step101done&amp;quot;&lt;br /&gt;
Note: if you put a sound file in the goal object inventory, then this variable can be the name of the sound file.&lt;br /&gt;
H. PRIZENAME: A prize to give player for completing this task step in the overrall quest. Example: &amp;quot;Cave Lantern&amp;quot;&lt;br /&gt;
Note: Not every goal needs to give out a prize, but this lets you equip player with necessary bits to complete later tasks in the quest.&lt;br /&gt;
I. ADVTASKTDNUM: the NEXT task number &amp;quot;to-do&amp;quot; now that player has completed THIS task. Example: 102&lt;br /&gt;
NOTE: You can have multiple goals with the same task number that give the same OR DIFFERENT Next Task numbers. This can channel players into different parts of your quests based on which goal items they activated at that step.&lt;br /&gt;
J. ADVTASKTODO: a description of the NEXT task in the quest. Example: &amp;quot;Explore the mine for processed red salt.&amp;quot;&lt;br /&gt;
K. ADVTASKTODOHINT: a hint to help player complete the next task. Example: &amp;quot;Processed red salt is usually stored and shipped in casks or barrels&amp;quot;&lt;br /&gt;
L. TRIGGERWAIT: how long must player wait before being able to re-trigger this goal, in seconds. Example: 60&lt;br /&gt;
M. PRIZEWAIT: how long must player wait between getting the prize from this goal again, in seconds: Example 3600 (=1 hour, 86400 = 1 day)&lt;br /&gt;
N. EVENTTIMER: time between processing the recent and prizegiven lists, in seconds. Example 15.0 &lt;br /&gt;
Note: Smaller numbers mean more accuracy but more lag. Larger numbers mean less lag but less precise list processing and cleanup.&lt;br /&gt;
&lt;br /&gt;
4. Save and close the script.&lt;br /&gt;
5. Place the next goal using steps 1-4 above...&lt;br /&gt;
6. Set the last goal in the quest to give the player a TASK and HINT to go back to the quest NPC for the main quest prize.&lt;br /&gt;
&lt;br /&gt;
TESTING THE QUEST&lt;br /&gt;
Wear your Myriad Lite meter.&lt;br /&gt;
Click the Adventure Giver NPC.&lt;br /&gt;
Follow the quest instructions step by step.&lt;br /&gt;
Verify you can complete it in the designed order and that you see the text, hear the sounds, and get the prizes as intended.&lt;br /&gt;
Reset the meter.&lt;br /&gt;
Start the quest again, but try quest goals out of order to verify the sequences work as intended.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/BAM_Touch_Goal_v0.0.7_20110902&amp;diff=1153258</id>
		<title>User:Allen Kerensky/Myriad Lite Preview4/BAM Touch Goal v0.0.7 20110902</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/BAM_Touch_Goal_v0.0.7_20110902&amp;diff=1153258"/>
		<updated>2011-09-08T15:47:30Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Header}}&lt;br /&gt;
= BAM Touch Goal v0.0.7 20110902 =&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Baroun&#039;s Adventure Machine (BAM) Touch Goal v0.0.7 20110902&lt;br /&gt;
// Copyright (c) 2008-2011 Baroun Tardis (SL) and Allen Kerensky (OSG/SL)&lt;br /&gt;
// Baroun&#039;s Adventure Machine licensed under the&lt;br /&gt;
// Creative Commons Attribution-Share Alike-Non-Commercial 3.0 Unported&lt;br /&gt;
// http://creativecommons.org/licenses/by-nc-sa/3.0/&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Adventure-Specific Configuration&lt;br /&gt;
// Task numbers are (AdvNum*100)+task, so they don&#039;t overlap between adventures&lt;br /&gt;
//============================================================================&lt;br /&gt;
&lt;br /&gt;
// NPC or object-specific info&lt;br /&gt;
string MSG_SETTEXT          = &amp;quot;Processed Red Salt Cask&amp;quot;;&lt;br /&gt;
vector MSG_SETTEXT_COLOR    = &amp;lt;0,0,1&amp;gt;;&lt;br /&gt;
float  MSG_SETTEXT_ALPHA    = 1.0;&lt;br /&gt;
&lt;br /&gt;
// Adventure-specific info&lt;br /&gt;
string AdvName          = &amp;quot;Red Salt&amp;quot;; // Adventure Name&lt;br /&gt;
&lt;br /&gt;
// Current Task-specific info&lt;br /&gt;
integer AdvGoal         = 102; // current goal&lt;br /&gt;
string  TaskDoneText    = &amp;quot;You&#039;ve found the salt!&amp;quot;; // Mission complete message&lt;br /&gt;
string  TaskDoneUUID    = &amp;quot;f78027c9-e8bb-38f2-9b11-1d4e89ac10a4&amp;quot;; // sound byte to play&lt;br /&gt;
string  PrizeName       = &amp;quot;NONE&amp;quot;; // prize to give when mission complete&lt;br /&gt;
&lt;br /&gt;
// Next Task-specific info&lt;br /&gt;
integer AdvTaskTDNum    = 103; // next task to hand out when task is done&lt;br /&gt;
string  AdvTaskToDo     = &amp;quot;Return the salt to the baker&amp;quot;; // the next goal message&lt;br /&gt;
string  AdvTaskToDoHint = &amp;quot;He&#039;s where you first met him&amp;quot;; // hint for the next goal&lt;br /&gt;
&lt;br /&gt;
float TOUCH_RANGE = 1.5; // in meters, how close to be for touch to work arms &amp;amp; legs = 1.5m&lt;br /&gt;
integer TRIGGERWAIT = 60; // seconds to remember players to prevent re-triggering task?&lt;br /&gt;
integer PRIZEWAIT = 3600; // seconds to remember players who got prize?&lt;br /&gt;
float EVENTTIMER = 15.0; // seconds between running memory and list cleanup timed events&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// MESSAGE FORMAT REFERENCE&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Ask a player HUD if the player is in an adventure - InAdv?&lt;br /&gt;
&lt;br /&gt;
// Player responds:&lt;br /&gt;
// Yes in an adventure - InAdv | String AdventureName&lt;br /&gt;
// No, not in adventure - InAdv | NONE&lt;br /&gt;
&lt;br /&gt;
// Task In Progress Query - Ask player what their current goal is&lt;br /&gt;
// NPC/Object Send Example: TaskIP?&lt;br /&gt;
&lt;br /&gt;
// Task In Progress Response - The player Responds with current task in progress&lt;br /&gt;
// Player Send Example: TaskIP | AdventureGoal&lt;br /&gt;
&lt;br /&gt;
// Task Done - Tell player they have achieved their current goal&lt;br /&gt;
// NPC Object Send Example: DoneTask | GoalText | TaskDone Text | PlayerUUID&lt;br /&gt;
&lt;br /&gt;
// Add a task to the Player HUD - AddTask | TaskNumber | String Describing Task&lt;br /&gt;
// Add a hint for a task to the Player HUD - AddHint | TaskNumber | String Hint&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL CONSTANTS&lt;br /&gt;
//============================================================================&lt;br /&gt;
string MSG_STARTUP          = &amp;quot;Baroun&#039;s Adventure Machine is activating&amp;quot;;&lt;br /&gt;
string CHAN_PREFIX          = &amp;quot;0x&amp;quot;; // prefix for calculating dynamic channels from UUIDs&lt;br /&gt;
string API_DIVIDER          = &amp;quot;|&amp;quot;; // The field divider within BAM packets&lt;br /&gt;
string API_INADV_QUERY      = &amp;quot;InAdv?&amp;quot;; // ask a player HUD if the player is in an adventure?&lt;br /&gt;
string API_INADV_RESPONSE   = &amp;quot;InAdv&amp;quot;; // player response to in adventure request&lt;br /&gt;
string API_TASKIP_QUERY     = &amp;quot;TaskIP?&amp;quot;; // what is player task-in-progress?&lt;br /&gt;
string API_TASKIP_RESPONSE  = &amp;quot;TaskIP&amp;quot;; // player says current task-in-progress&lt;br /&gt;
string API_DONETASK         = &amp;quot;DoneTask&amp;quot;; // tell player the task is done&lt;br /&gt;
string API_NONE             = &amp;quot;NONE&amp;quot;; // magic value for no current adventure, or no prize&lt;br /&gt;
string API_ADDTASK          = &amp;quot;AddTask&amp;quot;; // add a task to player HUD&lt;br /&gt;
string API_ADDHINT          = &amp;quot;AddHint&amp;quot;; // add a task hint to player HUD&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL RUNTIME&lt;br /&gt;
//============================================================================&lt;br /&gt;
list    Recent;     // list people who recently checked this goal&lt;br /&gt;
list    GotPrizes; // list of who got prizes [UUID,unixtime]&lt;br /&gt;
key     AvKey;      // key of player&lt;br /&gt;
string  AvName;     // name of player&lt;br /&gt;
integer BAM;        // Channel we listen on&lt;br /&gt;
integer Target;     //channel of thing we&#039;re talking to&lt;br /&gt;
integer HANDLE;     // hold a handle for the open listener&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// DEFAULT STATE&lt;br /&gt;
//============================================================================&lt;br /&gt;
default {&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // STATE_ENTRY EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        llOwnerSay(MSG_STARTUP);&lt;br /&gt;
        // calculate our dynamic channel&lt;br /&gt;
        BAM= (integer)(CHAN_PREFIX + llGetSubString((string)llGetKey(),-7,-1));&lt;br /&gt;
        HANDLE = llListen(BAM,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;); // start a listener with llremove handle&lt;br /&gt;
        llSetTimerEvent(EVENTTIMER); // set a timer to manage the recent list&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // TIMER EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    timer() {&lt;br /&gt;
        // on timer, check memory left and clear recent list if needed&lt;br /&gt;
        integer freemem = llGetFreeMemory(); // how much memory free?&lt;br /&gt;
        if ( freemem &amp;lt; 1024 ) { // is it too little?&lt;br /&gt;
            llInstantMessage(llGetOwnerKey(llGetKey()),&amp;quot;Memory low for &amp;quot;+llGetObjectName()+&amp;quot; in &amp;quot;+llGetRegionName()+&amp;quot;. Resetting RECENT list.&amp;quot;);&lt;br /&gt;
            Recent=[]; // clear the recent list&lt;br /&gt;
            GotPrizes=[]; // clear the gotPrizes list&lt;br /&gt;
            return; // exit timer event, no sense in processing lists further since we just emptied them&lt;br /&gt;
        }&lt;br /&gt;
        // check to see if entries in Recent list have expired&lt;br /&gt;
        integer i; // temporary index number into list&lt;br /&gt;
        list temprecent = []; // temporary list to hold entries we want to keep&lt;br /&gt;
        key who; // temporary place to keep the keys we process in the lists&lt;br /&gt;
        integer time; // temporary place to keep the time we process in the lists&lt;br /&gt;
        for (i = 0; i &amp;lt; llGetListLength(Recent); i += 2) { // step through strided list from begin to end&lt;br /&gt;
            who = llList2Key(Recent,i); // get the UUID for this list stride&lt;br /&gt;
            time = llList2Integer(Recent,i+1); // get the integer time for this list stride&lt;br /&gt;
            if ( llGetUnixTime() &amp;lt; time ) temprecent = [who,time] + temprecent; // non expired, keep this entry&lt;br /&gt;
        }&lt;br /&gt;
        Recent = temprecent; // now, replace the Recent list with the pruned version&lt;br /&gt;
        // check to see if entries in GotPrizes list have expired&lt;br /&gt;
        temprecent = []; // clear the temp list again&lt;br /&gt;
        for (i = 0; i &amp;lt; llGetListLength(GotPrizes); i += 2) { // step through next strided list&lt;br /&gt;
            who = llList2Key(GotPrizes,i); // get the uuid for this list stride&lt;br /&gt;
            time = llList2Integer(GotPrizes,i+1); // get the integer time for this list stride&lt;br /&gt;
            if ( llGetUnixTime() &amp;lt; time ) temprecent = [who,time] + temprecent; // non expired, keep this entry&lt;br /&gt;
        }&lt;br /&gt;
        GotPrizes = temprecent; // replace the gotprizes list with the pruned one        &lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // TOUCH EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    touch_start(integer times_touched) {&lt;br /&gt;
        while (times_touched--) { // count down through all touches in this event&lt;br /&gt;
            AvKey=llDetectedKey(times_touched); // get the UUID of the toucher&lt;br /&gt;
            AvName=llDetectedName(times_touched); // get the name of the toucher&lt;br /&gt;
            float dist = llVecDist(llGetPos(),llList2Vector(llGetObjectDetails(AvKey,[OBJECT_POS]),0)); // find distance between item and toucher&lt;br /&gt;
            if ( dist &amp;lt;= TOUCH_RANGE ) { // is toucher within arms reach?&lt;br /&gt;
                if ( llListFindList(Recent,[AvKey]) == -1 ) { // is player in recent list?&lt;br /&gt;
                    Recent = [AvKey] + Recent; // no, add player to list&lt;br /&gt;
                }&lt;br /&gt;
                // calculate player-specific BAM dynamic channel&lt;br /&gt;
                Target= (integer)(CHAN_PREFIX + llGetSubString((string)AvKey,-7,-1));&lt;br /&gt;
                llSay(Target, API_INADV_QUERY); // ask player if they are in adventure, must be within 10m for effect&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // LISTEN EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    listen(integer chan, string name, key id, string msg) {&lt;br /&gt;
        // calculate the BAM dynamic channel of the person interacting with us&lt;br /&gt;
        Target= (integer)(CHAN_PREFIX + llGetSubString((string)llGetOwnerKey(id),-7,-1));&lt;br /&gt;
&lt;br /&gt;
        list tokens = llParseString2List(msg, [API_DIVIDER], []); // split message apart around | symbols&lt;br /&gt;
        string command = llList2String(tokens, 0); // assign first item in list as BAM command&lt;br /&gt;
        string data    = llList2String(tokens, 1); // assign second item in list as BAM data for command&lt;br /&gt;
&lt;br /&gt;
        // if they answer with the current adventure, then react accordingly&lt;br /&gt;
        if ( command == API_INADV_RESPONSE ) { // player responded they are in an adventure&lt;br /&gt;
            if ( data == AdvName ) { // are they in THIS adventure?&lt;br /&gt;
                llSay(Target,API_TASKIP_QUERY); // if so, ask which task in this adventure they are working on&lt;br /&gt;
                return; // exit early to save processing&lt;br /&gt;
            }&lt;br /&gt;
            return; // done processing &amp;quot;in adventure&amp;quot; responses, exit listen early&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ( command == API_TASKIP_RESPONSE ) { // player responded with their task in progress&lt;br /&gt;
            if ( data == (string)AdvGoal ) { // its the task for THIS object - player has found the goal&lt;br /&gt;
&lt;br /&gt;
                // tell player HUD the task is done! - DoneTask|(num)|(text)|UUID&lt;br /&gt;
                llSay(Target, API_DONETASK + API_DIVIDER + (string)AdvGoal+ API_DIVIDER +TaskDoneText+ API_DIVIDER+ TaskDoneUUID);&lt;br /&gt;
                // now tell GM the task is done&lt;br /&gt;
                llInstantMessage(llGetOwnerKey(llGetKey()),llKey2Name(llGetOwnerKey(id))+&amp;quot; (adventure &amp;quot;+AdvName+&amp;quot;): finished task &amp;quot;+(string)AdvGoal+&amp;quot; (&amp;quot;+TaskDoneText+&amp;quot;).&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
                // The Task is Done, Distribute the Prize, if any&lt;br /&gt;
                if ( PrizeName != API_NONE &amp;amp;&amp;amp; llListFindList(GotPrizes,[llGetOwnerKey(id)]) == -1 ) { // is there a prize at this step?&lt;br /&gt;
                    llGiveInventory(llGetOwnerKey(id),PrizeName); // give it over&lt;br /&gt;
                    GotPrizes = [ llGetOwnerKey(id), (llGetUnixTime() + PRIZEWAIT) ] + GotPrizes; // remember who and when&lt;br /&gt;
                    // tell the GM&lt;br /&gt;
                    llInstantMessage(llGetOwnerKey(llGetKey()),llKey2Name(llGetOwnerKey(id))+&amp;quot; (adventure &amp;quot;+AdvName+&amp;quot;) prize given: &amp;quot;+PrizeName);&lt;br /&gt;
                }&lt;br /&gt;
                // Does finishing this task trigger a new task? If so, add it and a hint to the HUD&lt;br /&gt;
                if ( AdvTaskTDNum != 0 ) { // there is a &amp;quot;TODO&amp;quot; task too&lt;br /&gt;
                    // assign the next task to the player HUD&lt;br /&gt;
                    llSay(Target, API_ADDTASK + API_DIVIDER +(string)AdvTaskTDNum + API_DIVIDER + AdvTaskToDo);&lt;br /&gt;
                    // assign the next task HINT to the player HUD&lt;br /&gt;
                    llSay(Target, API_ADDHINT + API_DIVIDER +(string)AdvTaskTDNum + API_DIVIDER + AdvTaskToDoHint);&lt;br /&gt;
                    // tell the GM the player is on the next task&lt;br /&gt;
                    llInstantMessage(llGetOwnerKey(llGetKey()),llKey2Name(llGetOwnerKey(id))+&amp;quot; (adventure &amp;quot;+AdvName+&amp;quot;): Assigning next task &amp;quot;+(string)AdvTaskTDNum+&amp;quot; (&amp;quot;+AdvTaskToDo+&amp;quot;)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                return; // we&#039;re done with API_TASKIP_RESPONSE, so exit listen early in case we add more commands later&lt;br /&gt;
            } // if data = AdvGoal&lt;br /&gt;
            return; // return early since we are done with TASKIP responses, in case we add more later&lt;br /&gt;
        } // end if command equal TASKIP reponse&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
//============================================================================&lt;br /&gt;
// END&lt;br /&gt;
//============================================================================&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/BAM_Location_Goal_v0.0.6_20110902&amp;diff=1153257</id>
		<title>User:Allen Kerensky/Myriad Lite Preview4/BAM Location Goal v0.0.6 20110902</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/BAM_Location_Goal_v0.0.6_20110902&amp;diff=1153257"/>
		<updated>2011-09-08T15:45:23Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Header}}&lt;br /&gt;
= BAM Location Goal v0.0.6 20110902 =&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Baroun&#039;s Adventure Machine (BAM) Location Goal v0.0.6 20110902&lt;br /&gt;
// Copyright (c) 2008-2011 Baroun Tardis (SL) and Allen Kerensky (OSG/SL)&lt;br /&gt;
// Baroun&#039;s Adventure Machine licensed under the&lt;br /&gt;
// Creative Commons Attribution-Share Alike-Non-Commercial 3.0 Unported&lt;br /&gt;
// http://creativecommons.org/licenses/by-nc-sa/3.0/&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Adventure-Specific Configuration&lt;br /&gt;
// Task numbers are (AdvNum*100)+task, so they don&#039;t overlap between adventures&lt;br /&gt;
//============================================================================&lt;br /&gt;
&lt;br /&gt;
// NPC or object specific info&lt;br /&gt;
string  MSG_SETTEXT = &amp;quot;Processed Red Salt Cask&amp;quot;;&lt;br /&gt;
vector  MSG_SETTEXT_COLOR = &amp;lt;0,0,1&amp;gt;;&lt;br /&gt;
float   MSG_SETTEXT_ALPHA = 1.0;&lt;br /&gt;
float   SCAN_RANGE = 3.0;&lt;br /&gt;
float   SCAN_REPEAT = 3.0;&lt;br /&gt;
&lt;br /&gt;
// Adventure-specific info&lt;br /&gt;
string  AdvName=&amp;quot;Red Salt&amp;quot;; // Adventure Name&lt;br /&gt;
&lt;br /&gt;
// Current Task-specific info&lt;br /&gt;
integer AdvGoal=101;&lt;br /&gt;
string  TaskDoneText = &amp;quot;You&#039;ve found the mines!&amp;quot;;&lt;br /&gt;
string  TaskDoneUUID = &amp;quot;f78027c9-e8bb-38f2-9b11-1d4e89ac10a4&amp;quot;;&lt;br /&gt;
string  PrizeName = &amp;quot;NONE&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Next Task-specific info&lt;br /&gt;
integer AdvTaskTDNum=102;&lt;br /&gt;
string  AdvTaskToDo=&amp;quot;Find some processed salt inside the mine&amp;quot;;&lt;br /&gt;
string  AdvTaskToDoHint=&amp;quot;Checking casks might be a good idea&amp;quot;; // string&lt;br /&gt;
&lt;br /&gt;
integer TRIGGERWAIT = 60; // seconds to remember players to prevent re-triggering task?&lt;br /&gt;
integer PRIZEWAIT = 3600; // seconds to remember players who got prize?&lt;br /&gt;
float EVENTTIMER = 15.0; // seconds between running memory and list cleanup timed events&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// MESSAGE FORMAT REFERENCE&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Ask a player HUD if the player is in an adventure - InAdv?&lt;br /&gt;
&lt;br /&gt;
// Player responds:&lt;br /&gt;
// Yes in an adventure - InAdv | String AdventureName&lt;br /&gt;
// No, not in adventure - InAdv | NONE&lt;br /&gt;
&lt;br /&gt;
// Task In Progress Query - Ask player what their current goal is&lt;br /&gt;
// NPC/Object Send Example: TaskIP?&lt;br /&gt;
&lt;br /&gt;
// Task In Progress Response - The player Responds with current task in progress&lt;br /&gt;
// Player Send Example: TaskIP | AdventureGoal&lt;br /&gt;
&lt;br /&gt;
// Task Done - Tell player they have achieved their current goal&lt;br /&gt;
// NPC Object Send Example: DoneTask | GoalText | TaskDone Text | PlayerUUID&lt;br /&gt;
&lt;br /&gt;
// Add a task to the Player HUD - AddTask | TaskNumber | String Describing Task&lt;br /&gt;
// Add a hint for a task to the Player HUD - AddHint | TaskNumber | String Hint&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL CONSTANTS&lt;br /&gt;
//============================================================================&lt;br /&gt;
string MSG_STARTUP          = &amp;quot;Baroun&#039;s Adventure Machine is activating&amp;quot;;&lt;br /&gt;
string CHAN_PREFIX          = &amp;quot;0x&amp;quot;; // prefix for calculating dynamic channels from UUIDs&lt;br /&gt;
string API_DIVIDER          = &amp;quot;|&amp;quot;; // The field divider within BAM packets&lt;br /&gt;
string API_INADV_QUERY      = &amp;quot;InAdv?&amp;quot;; // ask a player HUD if the player is in an adventure?&lt;br /&gt;
string API_INADV_RESPONSE   = &amp;quot;InAdv&amp;quot;; // player response to in adventure request&lt;br /&gt;
string API_TASKIP_QUERY     = &amp;quot;TaskIP?&amp;quot;; // what is player task-in-progress?&lt;br /&gt;
string API_TASKIP_RESPONSE  = &amp;quot;TaskIP&amp;quot;; // player says current task-in-progress&lt;br /&gt;
string API_DONETASK         = &amp;quot;DoneTask&amp;quot;; // tell player the task is done&lt;br /&gt;
string API_NONE             = &amp;quot;NONE&amp;quot;; // magic value for no current adventure, or no prize&lt;br /&gt;
string API_ADDTASK          = &amp;quot;AddTask&amp;quot;; // add a task to player HUD&lt;br /&gt;
string API_ADDHINT          = &amp;quot;AddHint&amp;quot;; // add a task hint to player HUD&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL RUNTIME&lt;br /&gt;
//============================================================================&lt;br /&gt;
float   SCAN_ARC;   // the sensor arc to scan for people in&lt;br /&gt;
list    Recent; // list of [UUID,unixtime] who recently collided with this goal&lt;br /&gt;
list    GotPrizes; // list of who got prizes [UUID,unixtime]&lt;br /&gt;
key     AvKey;      // key of player&lt;br /&gt;
string  AvName;     // name of player&lt;br /&gt;
integer BAM;        // Channel we listen on&lt;br /&gt;
integer Target;     //channel of thing we&#039;re talking to&lt;br /&gt;
integer HANDLE;     // hold a handle for the open listener&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// DEFAULT STATE&lt;br /&gt;
//============================================================================&lt;br /&gt;
default {&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // STATE_ENTRY EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        llOwnerSay(MSG_STARTUP);&lt;br /&gt;
        // calculate our dynamic channel&lt;br /&gt;
        BAM= (integer)(CHAN_PREFIX + llGetSubString((string)llGetKey(),-7,-1));&lt;br /&gt;
        HANDLE = llListen(BAM,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;); // start a listener with llremove handle&lt;br /&gt;
        SCAN_ARC = 2 * PI; // setup sensor to scan full sphere&lt;br /&gt;
        llSensorRepeat(&amp;quot;&amp;quot;,NULL_KEY,AGENT,SCAN_RANGE,SCAN_ARC,SCAN_REPEAT); // start repeating sensor&lt;br /&gt;
        llSetTimerEvent(EVENTTIMER); // set a timer to manage the recent list&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // TIMER EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    timer() {&lt;br /&gt;
        // on timer, check memory left and clear recent list if needed&lt;br /&gt;
        integer freemem = llGetFreeMemory(); // how much memory free?&lt;br /&gt;
        if ( freemem &amp;lt; 1024 ) { // is it too little?&lt;br /&gt;
            llInstantMessage(llGetOwnerKey(llGetKey()),&amp;quot;Memory low for &amp;quot;+llGetObjectName()+&amp;quot; in &amp;quot;+llGetRegionName()+&amp;quot;. Resetting RECENT list.&amp;quot;);&lt;br /&gt;
            Recent=[]; // clear the recent list&lt;br /&gt;
            GotPrizes=[]; // clear the gotPrizes list&lt;br /&gt;
            return; // exit timer event, no sense in processing lists further since we just emptied them&lt;br /&gt;
        }&lt;br /&gt;
        // check to see if entries in Recent list have expired&lt;br /&gt;
        integer i; // temporary index number into list&lt;br /&gt;
        list temprecent = []; // temporary list to hold entries we want to keep&lt;br /&gt;
        key who; // temporary place to keep the keys we process in the lists&lt;br /&gt;
        integer time; // temporary place to keep the time we process in the lists&lt;br /&gt;
        for (i = 0; i &amp;lt; llGetListLength(Recent); i += 2) { // step through strided list from begin to end&lt;br /&gt;
            who = llList2Key(Recent,i); // get the UUID for this list stride&lt;br /&gt;
            time = llList2Integer(Recent,i+1); // get the integer time for this list stride&lt;br /&gt;
            if ( llGetUnixTime() &amp;lt; time ) temprecent = [who,time] + temprecent; // non expired, keep this entry&lt;br /&gt;
        }&lt;br /&gt;
        Recent = temprecent; // now, replace the Recent list with the pruned version&lt;br /&gt;
        // check to see if entries in GotPrizes list have expired&lt;br /&gt;
        temprecent = []; // clear the temp list again&lt;br /&gt;
        for (i = 0; i &amp;lt; llGetListLength(GotPrizes); i += 2) { // step through next strided list&lt;br /&gt;
            who = llList2Key(GotPrizes,i); // get the uuid for this list stride&lt;br /&gt;
            time = llList2Integer(GotPrizes,i+1); // get the integer time for this list stride&lt;br /&gt;
            if ( llGetUnixTime() &amp;lt; time ) temprecent = [who,time] + temprecent; // non expired, keep this entry&lt;br /&gt;
        }&lt;br /&gt;
        GotPrizes = temprecent; // replace the gotprizes list with the pruned one&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // SENSOR EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    sensor (integer things_sensed) {&lt;br /&gt;
        while (things_sensed--) { // count down through all things sensed&lt;br /&gt;
            AvKey = llDetectedKey(things_sensed); // get UUID of thing&lt;br /&gt;
            AvName = llDetectedName(things_sensed); // get name of thing&lt;br /&gt;
            if ( llListFindList(Recent,[AvKey]) == -1 ) { // is UUID in recent list?&lt;br /&gt;
                Recent = [AvKey] + Recent; // no, so add it to recent list&lt;br /&gt;
            }&lt;br /&gt;
            // calculate BAM dynamic channel for sensed player&lt;br /&gt;
            Target= (integer)(CHAN_PREFIX + llGetSubString((string)AvKey,-7,-1));&lt;br /&gt;
            llSay(Target,API_INADV_QUERY); // ask player if they are in an adventure&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // LISTEN EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    listen(integer chan, string name, key id, string msg) {&lt;br /&gt;
        // calculate the BAM dynamic channel of the person interacting with us&lt;br /&gt;
        Target= (integer)(CHAN_PREFIX + llGetSubString((string)llGetOwnerKey(id),-7,-1));&lt;br /&gt;
&lt;br /&gt;
        list tokens = llParseString2List(msg, [API_DIVIDER], []); // split message apart around | symbols&lt;br /&gt;
        string command = llList2String(tokens, 0); // assign first item in list as BAM command&lt;br /&gt;
        string data    = llList2String(tokens, 1); // assign second item in list as BAM data for command&lt;br /&gt;
&lt;br /&gt;
        // if they answer with the current adventure, then react accordingly&lt;br /&gt;
        if ( command == API_INADV_RESPONSE ) { // player responded they are in an adventure&lt;br /&gt;
            if ( data == AdvName ) { // are they in THIS adventure?&lt;br /&gt;
                llSay(Target,API_TASKIP_QUERY); // if so, ask which task in this adventure they are working on&lt;br /&gt;
                return; // exit early to save processing&lt;br /&gt;
            }&lt;br /&gt;
            return; // done processing &amp;quot;in adventure&amp;quot; responses, exit listen early&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ( command == API_TASKIP_RESPONSE ) { // player responded with their task in progress&lt;br /&gt;
            if ( data == (string)AdvGoal ) { // its the task for THIS object - player has found the goal&lt;br /&gt;
&lt;br /&gt;
                // tell player HUD the task is done! - DoneTask|(num)|(text)|UUID&lt;br /&gt;
                llSay(Target, API_DONETASK + API_DIVIDER + (string)AdvGoal+ API_DIVIDER +TaskDoneText+ API_DIVIDER+ TaskDoneUUID);&lt;br /&gt;
                // now tell GM the task is done&lt;br /&gt;
                llInstantMessage(llGetOwnerKey(llGetKey()),llKey2Name(llGetOwnerKey(id))+&amp;quot; (adventure &amp;quot;+AdvName+&amp;quot;): finished task &amp;quot;+(string)AdvGoal+&amp;quot; (&amp;quot;+TaskDoneText+&amp;quot;).&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
                // The Task is Done, Distribute the Prize, if any&lt;br /&gt;
                if ( PrizeName != API_NONE &amp;amp;&amp;amp; llListFindList(GotPrizes,[llGetOwnerKey(id)]) == -1 ) { // is there a prize at this step?&lt;br /&gt;
                    llGiveInventory(llGetOwnerKey(id),PrizeName); // give it over&lt;br /&gt;
                    GotPrizes = [ llGetOwnerKey(id), (llGetUnixTime() + PRIZEWAIT) ] + GotPrizes; // remember who and when&lt;br /&gt;
                    // tell the GM&lt;br /&gt;
                    llInstantMessage(llGetOwnerKey(llGetKey()),llKey2Name(llGetOwnerKey(id))+&amp;quot; (adventure &amp;quot;+AdvName+&amp;quot;) prize given: &amp;quot;+PrizeName);&lt;br /&gt;
                }&lt;br /&gt;
                // Does finishing this task trigger a new task? If so, add it and a hint to the HUD&lt;br /&gt;
                if ( AdvTaskTDNum != 0 ) { // there is a &amp;quot;TODO&amp;quot; task too&lt;br /&gt;
                    // assign the next task to the player HUD&lt;br /&gt;
                    llSay(Target, API_ADDTASK + API_DIVIDER +(string)AdvTaskTDNum + API_DIVIDER + AdvTaskToDo);&lt;br /&gt;
                    // assign the next task HINT to the player HUD&lt;br /&gt;
                    llSay(Target, API_ADDHINT + API_DIVIDER +(string)AdvTaskTDNum + API_DIVIDER + AdvTaskToDoHint);&lt;br /&gt;
                    // tell the GM the player is on the next task&lt;br /&gt;
                    llInstantMessage(llGetOwnerKey(llGetKey()),llKey2Name(llGetOwnerKey(id))+&amp;quot; (adventure &amp;quot;+AdvName+&amp;quot;): Assigning next task &amp;quot;+(string)AdvTaskTDNum+&amp;quot; (&amp;quot;+AdvTaskToDo+&amp;quot;)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                return; // we&#039;re done with API_TASKIP_RESPONSE, so exit listen early in case we add more commands later&lt;br /&gt;
            } // if data = AdvGoal&lt;br /&gt;
            return; // return early since we are done with TASKIP responses, in case we add more later&lt;br /&gt;
        } // end if command equal TASKIP reponse&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
//============================================================================&lt;br /&gt;
// END&lt;br /&gt;
//============================================================================&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/BAM_Collision_Goal_v0.0.6_20110902&amp;diff=1153256</id>
		<title>User:Allen Kerensky/Myriad Lite Preview4/BAM Collision Goal v0.0.6 20110902</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/BAM_Collision_Goal_v0.0.6_20110902&amp;diff=1153256"/>
		<updated>2011-09-08T15:44:16Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Header}}&lt;br /&gt;
= BAM Collision Goal v0.0.6 20110902 =&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Baroun&#039;s Adventure Machine (BAM) Collision Goal v0.0.6 20110902&lt;br /&gt;
// Copyright (c) 2008-2011 Baroun Tardis (SL) and Allen Kerensky (OSG/SL)&lt;br /&gt;
// Baroun&#039;s Adventure Machine licensed under the&lt;br /&gt;
// Creative Commons Attribution-Share Alike-Non-Commercial 3.0 Unported&lt;br /&gt;
// http://creativecommons.org/licenses/by-nc-sa/3.0/&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Adventure-Specific Configuration&lt;br /&gt;
// Task numbers are (AdvNum*100)+task, so tasks don&#039;t overlap between adventures&lt;br /&gt;
//============================================================================&lt;br /&gt;
&lt;br /&gt;
// Object or NPC-specific info&lt;br /&gt;
string MSG_SETTEXT = &amp;quot;Processed Red Salt Cask&amp;quot;;&lt;br /&gt;
vector MSG_SETTEXT_COLOR = &amp;lt;0,0,1&amp;gt;;&lt;br /&gt;
float  MSG_SETTEXT_ALPHA = 1.0;&lt;br /&gt;
&lt;br /&gt;
// Adventure-specific info&lt;br /&gt;
integer ADVENTURE_NUMBER = 1; // not currently used, 100-199 = &amp;quot;Red Salt Adventure&amp;quot;&lt;br /&gt;
string  AdvName=&amp;quot;Red Salt&amp;quot;; // Adventure Name&lt;br /&gt;
&lt;br /&gt;
// Current Task-specific info&lt;br /&gt;
integer AdvGoal=102; // which task number is this a goal for?&lt;br /&gt;
string  TaskDoneText=&amp;quot;You&#039;ve found the salt!&amp;quot;; // Mission complete message&lt;br /&gt;
string  TaskDoneUUID=&amp;quot;f78027c9-e8bb-38f2-9b11-1d4e89ac10a4&amp;quot;; // sound byte to play&lt;br /&gt;
string  PrizeName=&amp;quot;NONE&amp;quot;; // prize to give when this task is complete&lt;br /&gt;
&lt;br /&gt;
// Next Task-specific info&lt;br /&gt;
integer AdvTaskTDNum=103; // next task to hand out when task is done&lt;br /&gt;
string  AdvTaskToDo=&amp;quot;Return the salt to the baker.&amp;quot;; // the next task message&lt;br /&gt;
string  AdvTaskToDoHint=&amp;quot;He&#039;s where you first met him.&amp;quot;; // hint for the task goal&lt;br /&gt;
&lt;br /&gt;
integer TRIGGERWAIT = 60; // seconds to remember players to prevent re-triggering task?&lt;br /&gt;
integer PRIZEWAIT = 3600; // seconds to remember players who got prize?&lt;br /&gt;
float EVENTTIMER = 15.0; // seconds between running memory and list cleanup timed events&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// MESSAGE FORMAT REFERENCE&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Ask a player HUD if the player is in an adventure - InAdv?&lt;br /&gt;
&lt;br /&gt;
// Player responds:&lt;br /&gt;
// Yes in an adventure - InAdv | String AdventureName&lt;br /&gt;
// No, not in adventure - InAdv | NONE&lt;br /&gt;
&lt;br /&gt;
// Task In Progress Query - Ask player what their current goal is&lt;br /&gt;
// NPC/Object Send Example: TaskIP?&lt;br /&gt;
&lt;br /&gt;
// Task In Progress Response - The player Responds with current task in progress&lt;br /&gt;
// Player Send Example: TaskIP | AdventureGoal&lt;br /&gt;
&lt;br /&gt;
// Task Done - Tell player they have achieved their current goal&lt;br /&gt;
// NPC Object Send Example: DoneTask | GoalText | TaskDone Text | PlayerUUID&lt;br /&gt;
&lt;br /&gt;
// Add a task to the Player HUD - AddTask | TaskNumber | String Describing Task&lt;br /&gt;
// Add a hint for a task to the Player HUD - AddHint | TaskNumber | String Hint&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL AND API CONSTANTS&lt;br /&gt;
//============================================================================&lt;br /&gt;
string MSG_STARTUP          = &amp;quot;Baroun&#039;s Adventure Machine is activating&amp;quot;;&lt;br /&gt;
string CHAN_PREFIX          = &amp;quot;0x&amp;quot;; // channel prefix for calculating dynamic channel numbers&lt;br /&gt;
string API_DIVIDER          = &amp;quot;|&amp;quot;; // The field divider within BAM messages&lt;br /&gt;
string API_INADV_QUERY      = &amp;quot;InAdv?&amp;quot;; // ask player HUD if player is in an adventure?&lt;br /&gt;
string API_INADV_RESPONSE   = &amp;quot;InAdv&amp;quot;; // player responds with adventure name they are in&lt;br /&gt;
string API_NONE             = &amp;quot;NONE&amp;quot;; // constant for player not in adventure&lt;br /&gt;
string API_TASKIP_QUERY     = &amp;quot;TaskIP?&amp;quot;; // what is the player&#039;s current task goal?&lt;br /&gt;
string API_TASKIP_RESPONSE  = &amp;quot;TaskIP&amp;quot;; // player response with current Task In Progress&lt;br /&gt;
string API_DONETASK         = &amp;quot;DoneTask&amp;quot;; // tell player they have achieved current goal&lt;br /&gt;
string API_ADDTASK          = &amp;quot;AddTask&amp;quot;; // add next task to player HUD&lt;br /&gt;
string API_ADDHINT          = &amp;quot;AddHint&amp;quot;; // add next task hint to the player HUD&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL RUNTIME VARIABLES&lt;br /&gt;
//============================================================================&lt;br /&gt;
list    Recent; // list of [UUID,unixtime] who recently collided with this goal&lt;br /&gt;
list    GotPrizes; // list of who got prizes [UUID,unixtime]&lt;br /&gt;
key     AvKey;  // uuid of avatar we&#039;re interacting with&lt;br /&gt;
string  AvName; // name of avatar we&#039;re interacting with.&lt;br /&gt;
integer BAM;    // Channel we listen on&lt;br /&gt;
integer Target; // channel of person or thing we&#039;re talking to&lt;br /&gt;
integer HANDLE; // integer handle of open listen requests&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// DEFAULT STATE&lt;br /&gt;
//============================================================================&lt;br /&gt;
default {&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // STATE_ENTRY EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        llOwnerSay(MSG_STARTUP);&lt;br /&gt;
        llSetText(MSG_SETTEXT,MSG_SETTEXT_COLOR,MSG_SETTEXT_ALPHA);&lt;br /&gt;
        // calculate the BAM dynamic channel&lt;br /&gt;
        // FIXME - move listen open down into collision?&lt;br /&gt;
        BAM = (integer)(CHAN_PREFIX + llGetSubString((string)llGetKey(),-7,-1));&lt;br /&gt;
        HANDLE = llListen(BAM,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;); // open a listener with handle&lt;br /&gt;
        llSetTimerEvent(EVENTTIMER); // fire off a timer event once an hour&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // TIMER EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    timer() {&lt;br /&gt;
        // on timer, check memory left and clear recent list if needed&lt;br /&gt;
        integer freemem = llGetFreeMemory(); // how much memory free?&lt;br /&gt;
        if ( freemem &amp;lt; 1024 ) { // is it too little?&lt;br /&gt;
            llInstantMessage(llGetOwnerKey(llGetKey()),&amp;quot;Memory low for &amp;quot;+llGetObjectName()+&amp;quot; in &amp;quot;+llGetRegionName()+&amp;quot;. Resetting RECENT list.&amp;quot;);&lt;br /&gt;
            Recent=[]; // clear the recent list&lt;br /&gt;
            GotPrizes=[]; // clear the gotPrizes list&lt;br /&gt;
            return; // exit timer event, no sense in processing lists further since we just emptied them&lt;br /&gt;
        }&lt;br /&gt;
        // check to see if entries in Recent list have expired&lt;br /&gt;
        integer i; // temporary index number into list&lt;br /&gt;
        list temprecent = []; // temporary list to hold entries we want to keep&lt;br /&gt;
        key who; // temporary place to keep the keys we process in the lists&lt;br /&gt;
        integer time; // temporary place to keep the time we process in the lists&lt;br /&gt;
        for (i = 0; i &amp;lt; llGetListLength(Recent); i += 2) { // step through strided list from begin to end&lt;br /&gt;
            who = llList2Key(Recent,i); // get the UUID for this list stride&lt;br /&gt;
            time = llList2Integer(Recent,i+1); // get the integer time for this list stride&lt;br /&gt;
            if ( llGetUnixTime() &amp;lt; time ) temprecent = [who,time] + temprecent; // non expired, keep this entry&lt;br /&gt;
        }&lt;br /&gt;
        Recent = temprecent; // now, replace the Recent list with the pruned version&lt;br /&gt;
        // check to see if entries in GotPrizes list have expired&lt;br /&gt;
        temprecent = []; // clear the temp list again&lt;br /&gt;
        for (i = 0; i &amp;lt; llGetListLength(GotPrizes); i += 2) { // step through next strided list&lt;br /&gt;
            who = llList2Key(GotPrizes,i); // get the uuid for this list stride&lt;br /&gt;
            time = llList2Integer(GotPrizes,i+1); // get the integer time for this list stride&lt;br /&gt;
            if ( llGetUnixTime() &amp;lt; time ) temprecent = [who,time] + temprecent; // non expired, keep this entry&lt;br /&gt;
        }&lt;br /&gt;
        GotPrizes = temprecent; // replace the gotprizes list with the pruned one        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // COLLISION_START EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    collision_start(integer times_touched) {&lt;br /&gt;
        while (times_touched--) {&lt;br /&gt;
            AvKey=llDetectedKey(times_touched); // UUID of who collided&lt;br /&gt;
            AvName=llDetectedName(times_touched); // name of who collided&lt;br /&gt;
            if ( llListFindList(Recent,[AvKey]) == -1 ) { // check recent list to see if collider is in it&lt;br /&gt;
                Recent = [AvKey,(llGetUnixTime()+TRIGGERWAIT)] + Recent; // nope, so add new key to recent list&lt;br /&gt;
                // calculate BAMCHAN for avatar that hit collision goal&lt;br /&gt;
                Target= (integer)(CHAN_PREFIX + llGetSubString((string)AvKey,-7,-1));&lt;br /&gt;
                llSay(Target, API_INADV_QUERY); // ask player if they are in a BAM adventure already&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // LISTEN EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    listen(integer chan, string name, key id, string msg) {&lt;br /&gt;
        // calculate the BAM dynamic channel of the person interacting with us&lt;br /&gt;
        Target= (integer)(CHAN_PREFIX + llGetSubString((string)llGetOwnerKey(id),-7,-1));&lt;br /&gt;
&lt;br /&gt;
        list tokens = llParseString2List(msg, [API_DIVIDER], []); // split message apart around | symbols&lt;br /&gt;
        string command = llList2String(tokens, 0); // assign first item in list as BAM command&lt;br /&gt;
        string data    = llList2String(tokens, 1); // assign second item in list as BAM data for command&lt;br /&gt;
&lt;br /&gt;
        // if they answer with the current adventure, then react accordingly&lt;br /&gt;
        if ( command == API_INADV_RESPONSE ) { // player responded they are in an adventure&lt;br /&gt;
            if ( data == AdvName ) { // are they in THIS adventure?&lt;br /&gt;
                llSay(Target,API_TASKIP_QUERY); // if so, ask which task in this adventure they are working on&lt;br /&gt;
                return; // exit early to save processing&lt;br /&gt;
            }&lt;br /&gt;
            return; // done processing &amp;quot;in adventure&amp;quot; responses, exit listen early&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ( command == API_TASKIP_RESPONSE ) { // player responded with their task in progress&lt;br /&gt;
            if ( data == (string)AdvGoal ) { // its the task for THIS object - player has found the goal&lt;br /&gt;
&lt;br /&gt;
                // tell player HUD the task is done! - DoneTask|(num)|(text)|UUID&lt;br /&gt;
                llSay(Target, API_DONETASK + API_DIVIDER + (string)AdvGoal+ API_DIVIDER +TaskDoneText+ API_DIVIDER+ TaskDoneUUID);&lt;br /&gt;
                // now tell GM the task is done&lt;br /&gt;
                llInstantMessage(llGetOwnerKey(llGetKey()),llKey2Name(llGetOwnerKey(id))+&amp;quot; (adventure &amp;quot;+AdvName+&amp;quot;): finished task &amp;quot;+(string)AdvGoal+&amp;quot; (&amp;quot;+TaskDoneText+&amp;quot;).&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
                // The Task is Done, Distribute the Prize, if any&lt;br /&gt;
                if ( PrizeName != API_NONE &amp;amp;&amp;amp; llListFindList(GotPrizes,[llGetOwnerKey(id)]) == -1 ) { // is there a prize at this step?&lt;br /&gt;
                    llGiveInventory(llGetOwnerKey(id),PrizeName); // give it over&lt;br /&gt;
                    GotPrizes = [ llGetOwnerKey(id), (llGetUnixTime() + PRIZEWAIT) ] + GotPrizes; // remember who and when&lt;br /&gt;
                    // tell the GM&lt;br /&gt;
                    llInstantMessage(llGetOwnerKey(llGetKey()),llKey2Name(llGetOwnerKey(id))+&amp;quot; (adventure &amp;quot;+AdvName+&amp;quot;) prize given: &amp;quot;+PrizeName);&lt;br /&gt;
                }&lt;br /&gt;
                // Does finishing this task trigger a new task? If so, add it and a hint to the HUD&lt;br /&gt;
                if ( AdvTaskTDNum != 0 ) { // there is a &amp;quot;TODO&amp;quot; task too&lt;br /&gt;
                    // assign the next task to the player HUD&lt;br /&gt;
                    llSay(Target, API_ADDTASK + API_DIVIDER +(string)AdvTaskTDNum + API_DIVIDER + AdvTaskToDo);&lt;br /&gt;
                    // assign the next task HINT to the player HUD&lt;br /&gt;
                    llSay(Target, API_ADDHINT + API_DIVIDER +(string)AdvTaskTDNum + API_DIVIDER + AdvTaskToDoHint);&lt;br /&gt;
                    // tell the GM the player is on the next task&lt;br /&gt;
                    llInstantMessage(llGetOwnerKey(llGetKey()),llKey2Name(llGetOwnerKey(id))+&amp;quot; (adventure &amp;quot;+AdvName+&amp;quot;): Assigning next task &amp;quot;+(string)AdvTaskTDNum+&amp;quot; (&amp;quot;+AdvTaskToDo+&amp;quot;)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                return; // we&#039;re done with API_TASKIP_RESPONSE, so exit listen early in case we add more commands later&lt;br /&gt;
            } // if data = AdvGoal&lt;br /&gt;
            return; // return early since we are done with TASKIP responses, in case we add more later&lt;br /&gt;
        } // end if command equal TASKIP reponse&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
//============================================================================&lt;br /&gt;
// END&lt;br /&gt;
//============================================================================&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/BAM_Adventure_Giver_NPC_v0.0.6_20110906&amp;diff=1153255</id>
		<title>User:Allen Kerensky/Myriad Lite Preview4/BAM Adventure Giver NPC v0.0.6 20110906</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/BAM_Adventure_Giver_NPC_v0.0.6_20110906&amp;diff=1153255"/>
		<updated>2011-09-08T15:43:19Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Header}}&lt;br /&gt;
= BAM Adventure Giver NPC v0.0.6 20110906 =&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Baroun&#039;s Adventure Machine (BAM) Adventure Giver NPC v0.0.6 20110906&lt;br /&gt;
// Copyright (c) 2008-2011 Baroun Tardis (SL) and Allen Kerensky (OSG/SL)&lt;br /&gt;
// Baroun&#039;s Adventure Machine licensed under the&lt;br /&gt;
// Creative Commons Attribution-Share Alike-Non-Commercial 3.0 Unported&lt;br /&gt;
// http://creativecommons.org/licenses/by-nc-sa/3.0/&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Adventure-Specific Configuration&lt;br /&gt;
//============================================================================&lt;br /&gt;
// NPC-specific Info&lt;br /&gt;
string  MSG_NPCNAME         = &amp;quot;BAM Adventure Giver NPC&amp;quot;;   // hovertext name for NPC - I hate hovertext&lt;br /&gt;
vector  MSG_SETTEXT_COLOR   = &amp;lt;1.0,1.0,1.0&amp;gt;;   // color to display settext in&lt;br /&gt;
float   MSG_SETTEXT_ALPHA   = 1.0; // alpha for hovertext. 0.0 = clear, 1.0 = solid.&lt;br /&gt;
&lt;br /&gt;
// Adventure-specific Info&lt;br /&gt;
string  ADVNAME             = &amp;quot;Red Salt&amp;quot;; // Adventure Name&lt;br /&gt;
string  ADVTEXT             = &amp;quot;Find some red salt for luck.&amp;quot;; // brief description&lt;br /&gt;
string  ADV_ATTRACT            = &amp;quot;can you help me find some red salt?&amp;quot;; // hook to get player to play&lt;br /&gt;
string  MSG_OWNER_STARTADV  = &amp;quot; has started Red Salt Adventure&amp;quot;;&lt;br /&gt;
string  ADV_ALL_TASKS       = &amp;quot;101, 102&amp;quot;; // CSV list of task numbers that all have to be done for adventure to be complete example: &amp;quot;101, 102, 103&amp;quot;&lt;br /&gt;
string  MSG_ADV_INCOMPLETE  = &amp;quot;, it looks like you still haven&#039;t found the red salt for me.&amp;quot;; // prefixed by AVNAME&lt;br /&gt;
string  MSG_OWNER_DONEADV   = &amp;quot; has completed the Red Salt Adventure&amp;quot;; // message to speak when task complete&lt;br /&gt;
string  ADVDONETEXT         = &amp;quot;Thanks! I appreciate your help!&amp;quot;;&lt;br /&gt;
string  ADVDONEUUID         = &amp;quot;f78027c9-e8bb-38f2-9b11-1d4e89ac10a4&amp;quot;; //object or sounds to give as a mission complete&lt;br /&gt;
string  PRIZENAME           = &amp;quot;NONE&amp;quot;; // prize to give when adventure is complete&lt;br /&gt;
&lt;br /&gt;
// Task-Specific Info&lt;br /&gt;
// Task numbers are (AdvNum*100)+task, so they don&#039;t match up between adventures&lt;br /&gt;
integer ADVTASKTDNUM        = 101; // task number for the task THIS node hands out&lt;br /&gt;
string  ADVTASKTODO         = &amp;quot;Find the Red Salt Mines&amp;quot;; // task description of what to do&lt;br /&gt;
string  ADVTASKTODOHINT     = &amp;quot;Look in the other corner of the room&amp;quot;; // string&lt;br /&gt;
&lt;br /&gt;
integer TRIGGERWAIT = 60; // seconds to remember players to prevent re-triggering task?&lt;br /&gt;
integer PRIZEWAIT = 3600; // seconds to remember players who got prize?&lt;br /&gt;
float EVENTTIMER = 15.0; // seconds between running memory and list cleanup timed events&lt;br /&gt;
float SENSOR_RANGE = 3.0; // how close do you have to be to trigger the NPC&lt;br /&gt;
float SENSOR_ARC = PI; // what is the sensor&#039;s sweep?&lt;br /&gt;
float SENSOR_REPEAT = 10; // how often to repeat the sensor&lt;br /&gt;
 &lt;br /&gt;
//============================================================================&lt;br /&gt;
// MESSAGE FORMAT REFERENCE&lt;br /&gt;
//============================================================================&lt;br /&gt;
// -1 OUT - [YES,NO,CLOSE]&lt;br /&gt;
// -1 IN  - YES&lt;br /&gt;
// BAMCHAN OUT - InAdv?&lt;br /&gt;
// BAMCHAN IN  - InAdv|str NONE&lt;br /&gt;
// BAMCHAN IN  - InAdv|str AdventureName&lt;br /&gt;
// BAMCHAN OUT - OfferAdv|str AdventureName|str AdventureText&lt;br /&gt;
// BAMCHAN OUT - TaskCP?&lt;br /&gt;
// BAMCHAN IN  - AcceptAdv|str AdvName&lt;br /&gt;
// BAMCHAN OUT - AddTask|int TaskNumber|str TaskToDo&lt;br /&gt;
// BAMCHAN OUT - AddHint|int TaskNumber|str TaskHint&lt;br /&gt;
// BAMCHAN IN  - TaskCP|&lt;br /&gt;
// BAMCHAN IN  - TaskCP|str 999&lt;br /&gt;
// BAMCHAN OUT - DoneAdv|str AdventureName|str AdventureText|key AdventureDoneUUID&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Global Constants&lt;br /&gt;
//============================================================================&lt;br /&gt;
string  CHAN_PREFIX         = &amp;quot;0x&amp;quot;;     // random chat channel prefix&lt;br /&gt;
string  CHAT_DIVIDER        = &amp;quot;, &amp;quot;;     // to comma-separate elements in emitted chat elements&lt;br /&gt;
integer DEBUG_FLAG          = FALSE;    // set to true for debug messages&lt;br /&gt;
string  MSG_STARTUP         = &amp;quot;Baroun&#039;s Adventure Machine is activating.&amp;quot;;&lt;br /&gt;
string  DEBUG_LISTEN_CHANNEL= &amp;quot;BAM Listening on channel: &amp;quot;; // debug message to see picked channel&lt;br /&gt;
string  API_INADV_QUERY     = &amp;quot;InAdv?&amp;quot;; // API trigger to check if in an adventure.&lt;br /&gt;
float   API_INADV_TIMEOUT   = 3.0;      // API timeout for an InAdv? request&lt;br /&gt;
string  API_TASKCP_QUERY    = &amp;quot;TaskCP?&amp;quot;; // task complete?&lt;br /&gt;
string  API_INADV_RESPONSE  = &amp;quot;InAdv&amp;quot;;  // confirms player is already in an adventure&lt;br /&gt;
string  DIV1         = &amp;quot;|&amp;quot;;      // divides fields of API messages&lt;br /&gt;
string  API_NONE            = &amp;quot;NONE&amp;quot;;   // magic text if player not in an adventure&lt;br /&gt;
string  API_OFFER_ADV       = &amp;quot;OfferAdv&amp;quot;; // offer player an adventure&lt;br /&gt;
string  API_ACCEPT_ADV      = &amp;quot;AcceptAdv&amp;quot;; // player accepts adventure&lt;br /&gt;
string  API_ADD_TASK        = &amp;quot;AddTask&amp;quot;; // add a task to player&lt;br /&gt;
string  API_ADD_HINT        = &amp;quot;AddHint&amp;quot;; // add a hint for the current task&lt;br /&gt;
string  API_TASKCP_RESPONSE = &amp;quot;TaskCP&amp;quot;; // task completed&lt;br /&gt;
string  API_DONEADV         = &amp;quot;DoneAdv&amp;quot;; // adventure done&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Runtime Globals&lt;br /&gt;
//============================================================================&lt;br /&gt;
list    Recent; // list of [UUID,unixtime] who recently collided with this goal&lt;br /&gt;
list    GotPrizes; // list of who got prizes [UUID,unixtime]&lt;br /&gt;
key     AVKEY;      // UUID of the avatar we are interacting with&lt;br /&gt;
string  AVNAME;     // String name of the avatar we are interacting with&lt;br /&gt;
integer CHANBAM;    // Channel we listen on&lt;br /&gt;
integer CHANTARGET; // channel of thing we&#039;re talking to&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// DEFAULT STATE&lt;br /&gt;
//============================================================================&lt;br /&gt;
default {&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // STATE_ENTRY EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        llParticleSystem([]); // shut off any running particles&lt;br /&gt;
        llSetText(MSG_NPCNAME,MSG_SETTEXT_COLOR,MSG_SETTEXT_ALPHA);&lt;br /&gt;
        llOwnerSay(MSG_STARTUP); // tell the owner we are initializing&lt;br /&gt;
        CHANBAM = (integer)(CHAN_PREFIX + llGetSubString((string)llGetKey(),-7,-1)); // calculate channel to listen on&lt;br /&gt;
        if (DEBUG_FLAG) llOwnerSay(DEBUG_LISTEN_CHANNEL+(string)CHANBAM);&lt;br /&gt;
        llListen(CHANBAM,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;); // listen on channel for all messages from any name, name UUID, and any message&lt;br /&gt;
        llSetTimerEvent(EVENTTIMER); // fire off a timer event once an hour&lt;br /&gt;
        llSensorRepeat(&amp;quot;&amp;quot;,NULL_KEY,AGENT,SENSOR_RANGE,SENSOR_ARC,SENSOR_REPEAT); // start NPC looking for someone to help&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // TOUCH_START EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    sensor(integer num_sensed) {&lt;br /&gt;
        while (num_sensed--) { // count down through all touches in this event&lt;br /&gt;
            AVKEY=llDetectedKey(num_sensed); // get the UUID of the toucher&lt;br /&gt;
            if ( llListFindList(Recent,[AVKEY]) == -1 ) { // player not in list of people recently completing the quest&lt;br /&gt;
                AVNAME=llDetectedName(num_sensed); // get the name of the toucher&lt;br /&gt;
                CHANTARGET = (integer)(CHAN_PREFIX + llGetSubString((string)AVKEY,-7,-1));&lt;br /&gt;
                llSay(CHANTARGET, API_INADV_QUERY); // ask player if they are in adventure, must be within 10m for effect&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // TIMER EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    timer() {&lt;br /&gt;
        // on timer, check memory left and clear recent list if needed&lt;br /&gt;
        integer freemem = llGetFreeMemory(); // how much memory free?&lt;br /&gt;
        if ( freemem &amp;lt; 1024 ) { // is it too little?&lt;br /&gt;
            llInstantMessage(llGetOwnerKey(llGetKey()),&amp;quot;Memory low for &amp;quot;+llGetObjectName()+&amp;quot; in &amp;quot;+llGetRegionName()+&amp;quot;. Resetting RECENT list.&amp;quot;);&lt;br /&gt;
            Recent=[]; // clear the recent list&lt;br /&gt;
            GotPrizes=[]; // clear the gotPrizes list&lt;br /&gt;
            return; // exit timer event, no sense in processing lists further since we just emptied them&lt;br /&gt;
        }&lt;br /&gt;
        // check to see if entries in Recent list have expired&lt;br /&gt;
        integer i; // temporary index number into list&lt;br /&gt;
        list temprecent = []; // temporary list to hold entries we want to keep&lt;br /&gt;
        key who; // temporary place to keep the keys we process in the lists&lt;br /&gt;
        integer time; // temporary place to keep the time we process in the lists&lt;br /&gt;
        for (i = 0; i &amp;lt; llGetListLength(Recent); i += 2) { // step through strided list from begin to end&lt;br /&gt;
            who = llList2Key(Recent,i); // get the UUID for this list stride&lt;br /&gt;
            time = llList2Integer(Recent,i+1); // get the integer time for this list stride&lt;br /&gt;
            if ( llGetUnixTime() &amp;lt; time ) temprecent = [who,time] + temprecent; // non expired, keep this entry&lt;br /&gt;
        }&lt;br /&gt;
        Recent = temprecent; // now, replace the Recent list with the pruned version&lt;br /&gt;
        // check to see if entries in GotPrizes list have expired&lt;br /&gt;
        temprecent = []; // clear the temp list again&lt;br /&gt;
        for (i = 0; i &amp;lt; llGetListLength(GotPrizes); i += 2) { // step through next strided list&lt;br /&gt;
            who = llList2Key(GotPrizes,i); // get the uuid for this list stride&lt;br /&gt;
            time = llList2Integer(GotPrizes,i+1); // get the integer time for this list stride&lt;br /&gt;
            if ( llGetUnixTime() &amp;lt; time ) temprecent = [who,time] + temprecent; // non expired, keep this entry&lt;br /&gt;
        }&lt;br /&gt;
        GotPrizes = temprecent; // replace the gotprizes list with the pruned one           &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // LISTEN EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    listen(integer chan, string name, key id, string msg) {&lt;br /&gt;
&lt;br /&gt;
        list   tokens  = llParseString2List(msg, [DIV1], []); // split incoming message apart using |&lt;br /&gt;
        string command = llList2String(tokens, 0); // the first part of the message is a command&lt;br /&gt;
        string data    = llList2String(tokens, 1); // the second part is command-specific data&lt;br /&gt;
&lt;br /&gt;
        // if they answer they are in an adventure, react accordingly&lt;br /&gt;
        if ( command == API_INADV_RESPONSE ) { // In An Adventure Response&lt;br /&gt;
            if ( data == API_NONE &amp;amp;&amp;amp; llListFindList(Recent,[llGetOwnerKey(id)]) == -1 ) { // responded with no current adventure&lt;br /&gt;
                llSay(PUBLIC_CHANNEL,AVNAME+CHAT_DIVIDER+ADV_ATTRACT);&lt;br /&gt;
                llSay(CHANTARGET,API_OFFER_ADV+DIV1+ADVNAME+DIV1+ADVTEXT); // offer one&lt;br /&gt;
                return;        &lt;br /&gt;
            }&lt;br /&gt;
            if ( data == ADVNAME ) { // already in the current adventure&lt;br /&gt;
                llSay(CHANTARGET,API_TASKCP_QUERY); // so let&#039;s check if they have completed adventure?&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // If they are accepting the adventure, hand them first task&lt;br /&gt;
        if ( command == API_ACCEPT_ADV ) { // accepting an adventure&lt;br /&gt;
            if ( data == ADVNAME ) { // accepting this nodes adventure&lt;br /&gt;
                llSay(PUBLIC_CHANNEL,ADVTEXT);&lt;br /&gt;
                llSay(CHANTARGET,API_ADD_TASK+DIV1+(string)ADVTASKTDNUM+DIV1+ADVTASKTODO); // give them first task&lt;br /&gt;
                llSay(CHANTARGET,API_ADD_HINT+DIV1+(string)ADVTASKTDNUM+DIV1+ADVTASKTODOHINT); // give them first task hint&lt;br /&gt;
                llInstantMessage(llGetOwner(),llKey2Name(llGetOwnerKey(id))+MSG_OWNER_STARTADV); // tell owner adventure begins&lt;br /&gt;
                return; // done with this chat command, exit early&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ( command == API_TASKCP_RESPONSE ) { // player sends TaskCP|task# to NPC    &lt;br /&gt;
            string playertasks = llList2CSV(llListSort(llCSV2List(data),1,TRUE));&lt;br /&gt;
            string alltasks = llList2CSV(llListSort(llCSV2List(ADV_ALL_TASKS),1,TRUE));&lt;br /&gt;
            if ( playertasks == alltasks ) { // if all tasks are in done list, then adventure is done&lt;br /&gt;
                Recent = [ llGetOwnerKey(id), llGetUnixTime() + TRIGGERWAIT ] + Recent; // remember this player is done&lt;br /&gt;
                // tell player HUD that the adventure is done&lt;br /&gt;
                llSay(CHANTARGET,API_DONEADV+DIV1+ADVNAME+DIV1+ADVDONETEXT+DIV1+ADVDONEUUID);&lt;br /&gt;
                // tell player and public that adventure is done&lt;br /&gt;
                llSay(PUBLIC_CHANNEL,llKey2Name(llGetOwnerKey(id))+CHAT_DIVIDER+ADVDONETEXT);&lt;br /&gt;
                // give player the prize if one is defined&lt;br /&gt;
                if (PRIZENAME!=&amp;quot;NONE&amp;quot;  &amp;amp;&amp;amp; llListFindList(GotPrizes,[llGetOwnerKey(id)]) == -1 ) {&lt;br /&gt;
                    llGiveInventory(llGetOwnerKey(id),PRIZENAME);&lt;br /&gt;
                    GotPrizes = [ llGetOwnerKey(id), (llGetUnixTime() + PRIZEWAIT) ] + GotPrizes; // remember who and when&lt;br /&gt;
                }&lt;br /&gt;
                // send message to quest OWNER that a player finished and got the prize&lt;br /&gt;
                llInstantMessage(llGetOwner(),llKey2Name(llGetOwnerKey(id))+MSG_OWNER_DONEADV);&lt;br /&gt;
                return; // exit early&lt;br /&gt;
            }&lt;br /&gt;
            // player has not completed last quest task, so tell them there is more to do&lt;br /&gt;
            llSay(PUBLIC_CHANNEL,llKey2Name(llList2String(llGetObjectDetails(id,[OBJECT_OWNER]),0))+MSG_ADV_INCOMPLETE);&lt;br /&gt;
            return; // exit early in case we add more chat commands&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
//============================================================================&lt;br /&gt;
// END&lt;br /&gt;
//============================================================================&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Sim_Builder_Notes_v0.0.05_20110905&amp;diff=1153254</id>
		<title>User:Allen Kerensky/Myriad Lite Preview4/Myriad Lite Sim Builder Notes v0.0.05 20110905</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Sim_Builder_Notes_v0.0.05_20110905&amp;diff=1153254"/>
		<updated>2011-09-08T15:41:02Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Header}}&lt;br /&gt;
= Myriad Lite Sim/Builder Notes v0.0.1 20110905 =&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
Myriad Lite Sim/Builder Notes v0.0.1 20110905&lt;br /&gt;
The Myriad RPG System was designed, written, and illustrated by Ashok Desai&lt;br /&gt;
Myriad RPG licensed under the Creative Commons Attribution 2.0 UK: England and Wales&lt;br /&gt;
http://creativecommons.org/licenses/by/2.0/uk/&lt;br /&gt;
Myriad Lite software Copyright (c) 2011 by Allen Kerensky (OSG/SL)&lt;br /&gt;
Baroun&#039;s Adventure Machine Copyright (c) 2008-2011 by Baroun Tardis (SL)&lt;br /&gt;
Myriad Lite Sim/Builder Notes licensed under the&lt;br /&gt;
Creative Commons Attribution-Share Alike-Non-Commercial 3.0 Unported&lt;br /&gt;
http://creativecommons.org/licenses/by-nc-sa/3.0/&lt;br /&gt;
&lt;br /&gt;
COMBAT CONSTRUCTION KIT&lt;br /&gt;
Sim builders need to consider the &amp;quot;laws of the land&amp;quot; related to:&lt;br /&gt;
* Armor - commonly worn? ceremonial only?&lt;br /&gt;
* Fist Fights - are brawls common? legal?&lt;br /&gt;
* Melee Weapons - can they be openly worn? Does a Code Duello exist?&lt;br /&gt;
* Ranged Weapons - can they be openly worn? &lt;br /&gt;
* Hospitals and First Aid Items?&lt;br /&gt;
&lt;br /&gt;
QUEST CONSTRUCTION KIT&lt;br /&gt;
The Myriad Lite meter includes the Baroun&#039;s Adventure Machine (BAM) v1 HUD code.&lt;br /&gt;
This allows you to create an NPC that gives out quests, goal items that move the character through the quest, and hand out prizes for completing the tasks.&lt;br /&gt;
&lt;br /&gt;
CREATING THE QUEST OUTLINE&lt;br /&gt;
1. NPC Name That Starts and Ends Each Adventure&lt;br /&gt;
Who is going to set the player on the quest?&lt;br /&gt;
&lt;br /&gt;
2. Adventure Name&lt;br /&gt;
What is a shorthand name for the quest itself?&lt;br /&gt;
&lt;br /&gt;
3. Adventure Description&lt;br /&gt;
What is the goal of the quest once all tasks are complete?&lt;br /&gt;
&lt;br /&gt;
Planning Tasks in the Adventure&lt;br /&gt;
Adventure: Find the Red Salt&lt;br /&gt;
Step 1: Go to mine.&lt;br /&gt;
Step 2: Find the barrel of processed salt.&lt;br /&gt;
Step 3: return to baker.&lt;br /&gt;
&lt;br /&gt;
Adventure Numbers and Task Numbers&lt;br /&gt;
Start each new adventure&#039;s tasks on a number which a multiple of 100 * the adventure number.&lt;br /&gt;
Task numbers  for adventure 1 would fall into the range of 100-199.&lt;br /&gt;
The base task  number (100, 200, etc) is the task number assigned to the Adventure Giver NPC itself.&lt;br /&gt;
Each step of the adventure that PC starts you on is then numbered sequentially (101, 102, 103...) from that NPC&#039;s number.&lt;br /&gt;
&lt;br /&gt;
Keep a spreadsheet of Adventure Tasks&lt;br /&gt;
Task Number, Task Description, Task Hint, Goal Object, Goal Type (location, touch, collide), Prize for Task, Sound for Task, Next Task&lt;br /&gt;
&lt;br /&gt;
Example - Managing Adventures&lt;br /&gt;
&lt;br /&gt;
I keep track of adventures sequentually - for example, the Baker in Kasra is the first one, so that adventure is #1&lt;br /&gt;
&lt;br /&gt;
Inside an adventure, there&#039;s various tasks.&lt;br /&gt;
&lt;br /&gt;
I number them as the Adventure number, then the step in the adventure. The Baker tasks are 101, 102, 103, etc&lt;br /&gt;
&lt;br /&gt;
If you&#039;re planning an Adventure, then it&#039;s easiest for me to list the Tasks, and how they connect.&lt;br /&gt;
&lt;br /&gt;
The goals check for what task you&#039;re in before they interact with the player, so I need to know that.&lt;br /&gt;
&lt;br /&gt;
The checking keeps people from just teleporting to the last step and getting the prize. &lt;br /&gt;
 &lt;br /&gt;
The &amp;quot;Done Sound UUID&amp;quot; you can get from right-clicking on a sound in your SL inventory.&lt;br /&gt;
&lt;br /&gt;
 The sound needs to be &amp;quot;copy&amp;quot; so it&#039;ll copy to other people.&lt;br /&gt;
 &lt;br /&gt;
Note that it doesn&#039;t have to be music - the Professor in the Green Caste Quest uses this to talk out loud. &lt;br /&gt;
&lt;br /&gt;
The Done Text is displayed when the player finishes a task&lt;br /&gt;
&lt;br /&gt;
The Todo Text and Hint are displayed when they get a new task &lt;br /&gt;
&lt;br /&gt;
They also display if they touch the BAM HUD &lt;br /&gt;
&lt;br /&gt;
Any object or goal can give a Prize. &lt;br /&gt;
&lt;br /&gt;
The prize needs to be copy/transfer perms. &lt;br /&gt;
&lt;br /&gt;
Here&#039;s a list of tasks for &amp;quot;The Baker&amp;quot; as an example: &lt;br /&gt;
&lt;br /&gt;
000 -- Player isn&#039;t in an adventure, meets the Baker, gets adventure&lt;br /&gt;
&lt;br /&gt;
100 -- Adventure Giver Baker : &amp;quot;Go to the salt mines&amp;quot;  is given by the Baker&lt;br /&gt;
                   ToDo text=&amp;quot;Find the source of the Red Salt&amp;quot;;&lt;br /&gt;
                    Hint text =&amp;quot;It&#039;s probably in the mines of Kasra near the Tahari&amp;quot;; &lt;br /&gt;
    &lt;br /&gt;
101 -- Location Goal,  Red Salt Mine. Active task is 100. &amp;quot;Find the salt in the mine&amp;quot; &lt;br /&gt;
            Done text: &amp;quot;You&#039;ve found the mines!&amp;quot;&lt;br /&gt;
            Done Sound UUID: &amp;quot;f78027c9-e8bb-38f2-9b11-1d4e89ac10a4&amp;quot;&lt;br /&gt;
            ToDo text &amp;quot;Find some processed salt inside the mine&amp;quot;;&lt;br /&gt;
            Hint text=&amp;quot;Checking casks might be a good idea&amp;quot;&lt;br /&gt;
            &lt;br /&gt;
102 --  Touch goal, cask of Red Salt. Active task is 101. Gives task 103&lt;br /&gt;
             Done Text=&amp;quot;You&#039;ve found the salt!&amp;quot;;&lt;br /&gt;
             Done sound UUID=&amp;quot;f78027c9-e8bb-38f2-9b11-1d4e89ac10a4&amp;quot;;&lt;br /&gt;
             ToDo text &amp;quot;Return the salt to the baker&amp;quot;;&lt;br /&gt;
             Hint text &amp;quot;He&#039;s where you first met him&amp;quot;&lt;br /&gt;
&lt;br /&gt;
103 -- Adventure Giver  Baker: checks for 103. Requires 101,102 completed. On adventure complete, gives prize. &lt;br /&gt;
            Done Text: Great - Now I can finish my baking!&amp;quot;&lt;br /&gt;
            Done Sound UUID: &amp;quot;f78027c9-e8bb-38f2-9b11-1d4e89ac10a4&amp;quot;&lt;br /&gt;
            Prize: &amp;quot;Sweet Roll&amp;quot;&lt;br /&gt;
            &lt;br /&gt;
CREATING THE NPC AND GOALS&lt;br /&gt;
Once you have laid out the adventure outline and have an idea of the data, you&#039;re ready to load the quest NPC and goals.&lt;br /&gt;
&lt;br /&gt;
Quest NPC&lt;br /&gt;
All quests start and end with an NPC. The first quest NPC would be fictional task 100, and each step of the quest would be 101, 102, etc, and when done, the player returns to the quest NPC to claim the prize.&lt;br /&gt;
&lt;br /&gt;
There are a number steps and configurable items for a BAM Adventure Giver NPC:&lt;br /&gt;
1. Create your quest NPC item.&lt;br /&gt;
2. Drop in the BAM Adventure Giver NPC script.&lt;br /&gt;
3. Edit the &amp;quot;Adventure Specific Configuration&amp;quot; section at the top of the script. The variables are explained next.&lt;br /&gt;
&lt;br /&gt;
A. Set MSG_NPCNAME to the NPC&#039;s game name&lt;br /&gt;
B. Choose a hovertext color for the NPC - http://wiki.secondlife.com/wiki/Category:LSL_Color&lt;br /&gt;
C. Choose an alpha/transparency - 0.0 is totally clear, 1.0 is totally visible.&lt;br /&gt;
D. ADVNAME: Adventure Name - set a short name for this adventure. Example: &amp;quot;Red Salt Quest&amp;quot;&lt;br /&gt;
E. ADVTEXT: Adventure Description - set a short one-line description for this adventure. Example: &amp;quot;Find the rest salt for the baker&amp;quot;&lt;br /&gt;
F. ADV_ATTRACT: Attract Message - Set a message for the NPC to attract player help. Example: &amp;quot; can you help me find some red salt?&amp;quot;&lt;br /&gt;
G. MSG_OWNER_STARTADV: Message to owner that player started adventure. Example: &amp;quot; has started Red Salt Quest&amp;quot;&lt;br /&gt;
H. ADV_ALL_TASKS: list of all task numbers that MUST be completed to get the prize. Example: &amp;quot;101, 102&amp;quot; &lt;br /&gt;
NOTE: This list is a comma-separated values list, so there should be a SPACE after each comma.&lt;br /&gt;
If the adventure does not finish when the player has performed all tasks, check this first!&lt;br /&gt;
I. MSG_ADV_INCOMPLETE: what NPC should say if player comes back with not all tasks complete. Example: &amp;quot; Not done yet?&amp;quot;&lt;br /&gt;
J. MSG_OWNER_DONEADV: message to quest owner when player finishes a quest. Example: &amp;quot;has completed Red Salt Quest&amp;quot;&lt;br /&gt;
K. ADVDONETEXT: message from NPC to player that the quest is done. Example: &amp;quot;Thanks for finding red salt for me!&amp;quot;&lt;br /&gt;
L. ADVDONEUUID: uuid key of a sound to play when player is successful on the quest, like a fanfare.  Example: a &amp;quot;TA-DA&amp;quot; horn sound&lt;br /&gt;
Can be the name of a sound effect file in the NPC object inventory too.&lt;br /&gt;
M. PRIZENAME: name of a prize object in NPC object inventory to give to the player when they finish the quest. Example: Sweet roll or NONE.&lt;br /&gt;
Put the Prize object in the NPC&#039;s object inventory.&lt;br /&gt;
The key value NONE means do not give a prize at the end of the quest.&lt;br /&gt;
N. ADVTASKTDNUM: the task to-do number of the NEXT TASK. Example: 101&lt;br /&gt;
O. ADTASKTODO: a text description of the NEXT TASK the player should do.  Example: &amp;quot;Find the Red Salt Mine.&amp;quot;&lt;br /&gt;
P. ADVTASKTODOHINT: a hint for the player on how to complete the NEXT TASK they are being given. Example: &amp;quot;You think the Red Salt Mine is northeast.&amp;quot;&lt;br /&gt;
Q. TRIGGERWAIT: how long in seconds before a player can re-trigger this NPC or goal. Example: 60&lt;br /&gt;
R. PRIZEWAIT: how long in seconds between when player can re-do quest and get the prize again. Example: 3600 (= 1 hour, or 86400 = 1 day)&lt;br /&gt;
S. EVENTTIMER: how long between timer events, the smaller the number, the more lag. Example: 15.0&lt;br /&gt;
The timer processes the trigger and prize given lists to expire old entries - too long a wait between timers means longer before players can retry the quests.&lt;br /&gt;
&lt;br /&gt;
4. Save the script and let the NPC restart.&lt;br /&gt;
5. Move one to creating the quest goals for this NPC&#039;s quest.&lt;br /&gt;
&lt;br /&gt;
QUEST GOALS&lt;br /&gt;
Each step/task of the quest or adventure is represented by a goal object.&lt;br /&gt;
There are two basic parts to configuring a Goal object: &lt;br /&gt;
1. Configure the current task that the player must be working on, in order to have &amp;quot;successfully&amp;quot; found this goal.&lt;br /&gt;
2. Configure a NEXT task to hand out when the player finishes this current task, to send the player on to the next goal.&lt;br /&gt;
&lt;br /&gt;
There are currently 3 starter goal objects, with many more possible, to help nudge players through your quest.&lt;br /&gt;
&lt;br /&gt;
Collision Goal&lt;br /&gt;
There is a collision goal, which the player must physically collide with to activate. &lt;br /&gt;
This is useful as a transparent/phantom &amp;quot;detector&amp;quot; that a player has entered a general area, to hand them the next task that is more specifically what to do in that area.&lt;br /&gt;
&lt;br /&gt;
Location Goal&lt;br /&gt;
There is a location goal, which uses a sensor to detect when the player is nearby within its range.&lt;br /&gt;
This is also useful as a detector to tell when a player is getting near a specific goal, to hand out a more specific clue.&lt;br /&gt;
&lt;br /&gt;
Touch Goal&lt;br /&gt;
There is a touch goal which must be clicked with the mouse.&lt;br /&gt;
This could represent opening the treasure chest, opening the door to the final clue area, pressing the correct button on the bomb to defuse it, etc.&lt;br /&gt;
The touch goal checks the distance to the player to make sure the goal &amp;quot;is in arm&#039;s reach&amp;quot; of the player when activated.&lt;br /&gt;
&lt;br /&gt;
By combining these three goals, and clever task descriptions and hints, you can build an infinite number of scavenger-hunt style quests for players in your regions.&lt;br /&gt;
Configuring all three goals is a similar process:&lt;br /&gt;
1. Create the goal object - such as a door, box, control panel button, etc.&lt;br /&gt;
2. Drop in the goal script&lt;br /&gt;
3. Edit the goal script ADVENTURE-SPECIFIC CONFIGURATION settings at the top.&lt;br /&gt;
A. MSG_SETTEXT: the hovertext message over the quest goal. Example:  &amp;quot;Processed Red Salt Cask&amp;quot;;&lt;br /&gt;
B. MSG_SETTEXT_COLOR: color of the hovertext. Examples: http://wiki.secondlife.com/wiki/Category:LSL_Color&lt;br /&gt;
C. MSG_SETTEXT_ALPHA: alpha/transparency of the hovertext. Examples: 0.0 = invisible, 1.0 = fully visible.&lt;br /&gt;
D. ADVNAME: short name of this adventure: Example &amp;quot;Red Salt Quest&amp;quot;&lt;br /&gt;
E. ADVGOAL: the current task number that finding this goal will complete. Example: 101&lt;br /&gt;
Note: You can have multiple goal objects with the same goal number. That gives players multiple avenues to complete the same step of the quest.&lt;br /&gt;
F. TASKDONETEXT: message to player they they found the goal to complete this task. Example: &amp;quot;You&#039;ve found the salt mine! You&#039;ll need a lantern.&amp;quot;&lt;br /&gt;
G. TASKDONEUUID: uuid of a sound to play for player when they complete this step. Example: &amp;quot;step101done&amp;quot;&lt;br /&gt;
Note: if you put a sound file in the goal object inventory, then this variable can be the name of the sound file.&lt;br /&gt;
H. PRIZENAME: A prize to give player for completing this task step in the overrall quest. Example: &amp;quot;Cave Lantern&amp;quot;&lt;br /&gt;
Note: Not every goal needs to give out a prize, but this lets you equip player with necessary bits to complete later tasks in the quest.&lt;br /&gt;
I. ADVTASKTDNUM: the NEXT task number &amp;quot;to-do&amp;quot; now that player has completed THIS task. Example: 102&lt;br /&gt;
NOTE: You can have multiple goals with the same task number that give the same OR DIFFERENT Next Task numbers. This can channel players into different parts of your quests based on which goal items they activated at that step.&lt;br /&gt;
J. ADVTASKTODO: a description of the NEXT task in the quest. Example: &amp;quot;Explore the mine for processed red salt.&amp;quot;&lt;br /&gt;
K. ADVTASKTODOHINT: a hint to help player complete the next task. Example: &amp;quot;Processed red salt is usually stored and shipped in casks or barrels&amp;quot;&lt;br /&gt;
L. TRIGGERWAIT: how long must player wait before being able to re-trigger this goal, in seconds. Example: 60&lt;br /&gt;
M. PRIZEWAIT: how long must player wait between getting the prize from this goal again, in seconds: Example 3600 (=1 hour, 86400 = 1 day)&lt;br /&gt;
N. EVENTTIMER: time between processing the recent and prizegiven lists, in seconds. Example 15.0 &lt;br /&gt;
Note: Smaller numbers mean more accuracy but more lag. Larger numbers mean less lag but less precise list processing and cleanup.&lt;br /&gt;
&lt;br /&gt;
4. Save and close the script.&lt;br /&gt;
5. Place the next goal using steps 1-4 above...&lt;br /&gt;
6. Set the last goal in the quest to give the player a TASK and HINT to go back to the quest NPC for the main quest prize.&lt;br /&gt;
&lt;br /&gt;
TESTING THE QUEST&lt;br /&gt;
Wear your Myriad Lite meter.&lt;br /&gt;
Click the Adventure Giver NPC.&lt;br /&gt;
Follow the quest instructions step by step.&lt;br /&gt;
Verify you can complete it in the designed order and that you see the text, hear the sounds, and get the prizes as intended.&lt;br /&gt;
Reset the meter.&lt;br /&gt;
Start the quest again, but try quest goals out of order to verify the sequences work as intended.&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Player_Notes_v0.0.1_20110905&amp;diff=1153253</id>
		<title>User:Allen Kerensky/Myriad Lite Preview4/Myriad Lite Player Notes v0.0.1 20110905</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Player_Notes_v0.0.1_20110905&amp;diff=1153253"/>
		<updated>2011-09-08T15:39:36Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Header}}&lt;br /&gt;
= Myriad Lite Player Notes v0.0.1 20110905 =&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
Myriad Lite Player Notes v0.0.1 20110905&lt;br /&gt;
The Myriad RPG System was designed, written, and illustrated by Ashok Desai&lt;br /&gt;
Myriad RPG licensed under the Creative Commons Attribution 2.0 UK: England and Wales&lt;br /&gt;
http://creativecommons.org/licenses/by/2.0/uk/&lt;br /&gt;
Myriad Lite software Copyright (c) 2011 by Allen Kerensky (OSG/SL)&lt;br /&gt;
Baroun&#039;s Adventure Machine Copyright (c) 2008-2011 by Baroun Tardis (SL)&lt;br /&gt;
Myriad Lite Player Notes licensed under the&lt;br /&gt;
Creative Commons Attribution-Share Alike-Non-Commercial 3.0 Unported&lt;br /&gt;
http://creativecommons.org/licenses/by-nc-sa/3.0/&lt;br /&gt;
&lt;br /&gt;
Welcome to Myriad Lite and Baroun&#039;s Adventure Machine (BAM)!&lt;br /&gt;
&lt;br /&gt;
You should have recieved a &amp;quot;Myriad Lite&amp;quot; heads-up display (HUD) attachment  when you recieved these instructions. &lt;br /&gt;
Please find it in your inventory and either drag it on to your avatar, or right click and select &amp;quot;Wear&amp;quot; &lt;br /&gt;
The Myriad Lite HUD keeps track of your combat and quest status while roleplaying.&lt;br /&gt;
&lt;br /&gt;
USING THE HUD&lt;br /&gt;
Right click Myriad Lite in inventory and choose Wear or Attach to HUD. &lt;br /&gt;
I use the bottom left HUD slot by default.&lt;br /&gt;
&lt;br /&gt;
COMMANDS&lt;br /&gt;
You can send commands to Myriad Lite on chat channel 5.&lt;br /&gt;
/5 armoroff - turn off powered armor to save battery&lt;br /&gt;
/5 armoron - turn on powered armor&lt;br /&gt;
/5 checkammo - check the ammo left in your firearm&lt;br /&gt;
/5 checkarmor - check what amount of armor you currently have on&lt;br /&gt;
/5 checkbattery - check the battery level in powered armor&lt;br /&gt;
/5 combatoff - disable the built in fist fighter&lt;br /&gt;
/5 combaton - enable the built in fist fighter&lt;br /&gt;
/5 credits - credit where credit is due&lt;br /&gt;
/5 debugoff - turn off debugging messages if showing&lt;br /&gt;
/5 debugon - turn on debug messages&lt;br /&gt;
/5 drawboth - draw weapons in both hands if attached&lt;br /&gt;
/5 drawleft - draw a weapon in your left hand, if attached&lt;br /&gt;
/5 drawright - draw a weapon in your right hand, if attached&lt;br /&gt;
/5 holsterboth - holster the firearms in both hands, if attached&lt;br /&gt;
/5 holsterleft - holster the firearm in your left hand, if attached&lt;br /&gt;
/5 holsterright - holster the firearm in your right hand, if attached&lt;br /&gt;
/5 quest - see your current status in your current quest&lt;br /&gt;
/5 recharge - recharge the batteries in powered armor&lt;br /&gt;
/5 reload - reload your firearm&lt;br /&gt;
/5 reset - reset your meter and reload your character sheet&lt;br /&gt;
/5 safetyoff - unsafe your firearm&lt;br /&gt;
/5 safetyon - safe your firearm&lt;br /&gt;
/5 sheatheboth - sheathe the melee weapons in both hands, if attached&lt;br /&gt;
/5 sheatheleft - sheathe the melee weapon in your left hand, if attached&lt;br /&gt;
/5 sheatheright - sheathe the melee weapon in your right hand, if attached&lt;br /&gt;
/5 version - show the credits which includes the HUD version number and date&lt;br /&gt;
&lt;br /&gt;
COMBAT&lt;br /&gt;
Myriad Lite includes a built-in &amp;quot;fist fighter&amp;quot;.&lt;br /&gt;
Say &amp;quot; /5 combaton &amp;quot; in main chat, while you have no weapons in hand, to activate the fist fighter.&lt;br /&gt;
The fist fighter works in Mouselook or regular camera mode.&lt;br /&gt;
Hold the left mouse button to start an attack.&lt;br /&gt;
Choose the attack with the arrow keys on your keyboard:&lt;br /&gt;
Left Arrow = Left Punch&lt;br /&gt;
Up Arrow = One-Two Punch, slower than a single fisted punch&lt;br /&gt;
Right Arrow = Right Punch&lt;br /&gt;
Down Arrow = Kick, slower than the punches but longer &amp;quot;reach&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Myriad Lite also includes Melee combat and ranged combat such as with crossbows or firearms, if the appropriately scripted Myriad-Lite compatible item is attached to a hand.&lt;br /&gt;
&lt;br /&gt;
QUESTS&lt;br /&gt;
Myriad Lite also includes Baroun Tardis&#039; Adventure Machine v1, allowing you to find and complete &amp;quot;quests&amp;quot;, &amp;quot;adventures&amp;quot;, or &amp;quot;crusades&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Sim/region owners can build &amp;quot;quests&amp;quot; in their regions, which this HUD will help you complete.&lt;br /&gt;
&lt;br /&gt;
To begin an adventure, touch the &#039;person&#039; who gave you the HUD again, this time while wearing the HUD. &lt;br /&gt;
&lt;br /&gt;
You should get the first &#039;task&#039; for the adventure, which will show what your goal and a hint on how to obtain it. &lt;br /&gt;
&lt;br /&gt;
If you should lose track of what you&#039;re doing, touch the HUD on your screen, and it will give you a quick update on the status of your adventure. &lt;br /&gt;
&lt;br /&gt;
If you remove your HUD, it will reset and clear the current adventure. &lt;br /&gt;
&lt;br /&gt;
This will cause you to lose all  goals you have achieved, and reset you to &amp;quot;no adventure in progress&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Adventures are like a scavenger hunt: You go after certain goals, and when you get all of them , you win the main prize at the end.&lt;br /&gt;
&lt;br /&gt;
 There are four basic types of goals  in the BAM system:&lt;br /&gt;
 &lt;br /&gt;
1)  Adventure Giver : if you&#039;re reading this, you&#039;ve already found one.... These start adventures, and can also be the end point of one.  Usually, some small prize is given out when you complete the adventure. These have a blue text floating over their head, indicating their name, such as &amp;quot;Baker&amp;quot; or &amp;quot;Clerk&amp;quot; &lt;br /&gt;
&lt;br /&gt;
2) Collision Goal: These occupy an area, and when you run into it or step on it while looking for that area, it lets you know you&#039;ve reached it, and gives you a clue for the next step in the adventure. These have no floating text, since that would be too much of a give away that this is the spot (grin) &lt;br /&gt;
&lt;br /&gt;
3) Location Goal: These scan an area, and when you enter it while looking for that area, let you know you&#039;ve reached it, and give you a clue for the next step in the adventure. These have no floating text, since that would be too much of a give away that this is the spot (grin) &lt;br /&gt;
&lt;br /&gt;
4) Touch Goal : These sit still, waiting, until you touch them. If they&#039;re not the current goal for you in the adventure, then nothing happens. If they _are_ your current goal, then the victory music plays and you get clue/hint for the next step.  These have a text floating over them, indicating their name. &lt;br /&gt;
&lt;br /&gt;
If you have problems with the adventure, please IM the owner of the region where you found this HUD or quest.&lt;br /&gt;
&lt;br /&gt;
Thank you for with Myriad Lite including Baroun&#039;s Adventure Machine!&lt;br /&gt;
&lt;br /&gt;
Allen and Baroun&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Player_Notes_v0.0.1_20110905&amp;diff=1153252</id>
		<title>User:Allen Kerensky/Myriad Lite Preview4/Myriad Lite Player Notes v0.0.1 20110905</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Player_Notes_v0.0.1_20110905&amp;diff=1153252"/>
		<updated>2011-09-08T15:39:00Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Header}}&lt;br /&gt;
= Myriad Lite Player Notes v0.0.0 20110905 =&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
Myriad Lite Player Notes v0.0.1 20110905&lt;br /&gt;
The Myriad RPG System was designed, written, and illustrated by Ashok Desai&lt;br /&gt;
Myriad RPG licensed under the Creative Commons Attribution 2.0 UK: England and Wales&lt;br /&gt;
http://creativecommons.org/licenses/by/2.0/uk/&lt;br /&gt;
Myriad Lite software Copyright (c) 2011 by Allen Kerensky (OSG/SL)&lt;br /&gt;
Baroun&#039;s Adventure Machine Copyright (c) 2008-2011 by Baroun Tardis (SL)&lt;br /&gt;
Myriad Lite Player Notes licensed under the&lt;br /&gt;
Creative Commons Attribution-Share Alike-Non-Commercial 3.0 Unported&lt;br /&gt;
http://creativecommons.org/licenses/by-nc-sa/3.0/&lt;br /&gt;
&lt;br /&gt;
Welcome to Myriad Lite and Baroun&#039;s Adventure Machine (BAM)!&lt;br /&gt;
&lt;br /&gt;
You should have recieved a &amp;quot;Myriad Lite&amp;quot; heads-up display (HUD) attachment  when you recieved these instructions. &lt;br /&gt;
Please find it in your inventory and either drag it on to your avatar, or right click and select &amp;quot;Wear&amp;quot; &lt;br /&gt;
The Myriad Lite HUD keeps track of your combat and quest status while roleplaying.&lt;br /&gt;
&lt;br /&gt;
USING THE HUD&lt;br /&gt;
Right click Myriad Lite in inventory and choose Wear or Attach to HUD. &lt;br /&gt;
I use the bottom left HUD slot by default.&lt;br /&gt;
&lt;br /&gt;
COMMANDS&lt;br /&gt;
You can send commands to Myriad Lite on chat channel 5.&lt;br /&gt;
/5 armoroff - turn off powered armor to save battery&lt;br /&gt;
/5 armoron - turn on powered armor&lt;br /&gt;
/5 checkammo - check the ammo left in your firearm&lt;br /&gt;
/5 checkarmor - check what amount of armor you currently have on&lt;br /&gt;
/5 checkbattery - check the battery level in powered armor&lt;br /&gt;
/5 combatoff - disable the built in fist fighter&lt;br /&gt;
/5 combaton - enable the built in fist fighter&lt;br /&gt;
/5 credits - credit where credit is due&lt;br /&gt;
/5 debugoff - turn off debugging messages if showing&lt;br /&gt;
/5 debugon - turn on debug messages&lt;br /&gt;
/5 drawboth - draw weapons in both hands if attached&lt;br /&gt;
/5 drawleft - draw a weapon in your left hand, if attached&lt;br /&gt;
/5 drawright - draw a weapon in your right hand, if attached&lt;br /&gt;
/5 holsterboth - holster the firearms in both hands, if attached&lt;br /&gt;
/5 holsterleft - holster the firearm in your left hand, if attached&lt;br /&gt;
/5 holsterright - holster the firearm in your right hand, if attached&lt;br /&gt;
/5 quest - see your current status in your current quest&lt;br /&gt;
/5 recharge - recharge the batteries in powered armor&lt;br /&gt;
/5 reload - reload your firearm&lt;br /&gt;
/5 reset - reset your meter and reload your character sheet&lt;br /&gt;
/5 safetyoff - unsafe your firearm&lt;br /&gt;
/5 safetyon - safe your firearm&lt;br /&gt;
/5 sheatheboth - sheathe the melee weapons in both hands, if attached&lt;br /&gt;
/5 sheatheleft - sheathe the melee weapon in your left hand, if attached&lt;br /&gt;
/5 sheatheright - sheathe the melee weapon in your right hand, if attached&lt;br /&gt;
/5 version - show the credits which includes the HUD version number and date&lt;br /&gt;
&lt;br /&gt;
COMBAT&lt;br /&gt;
Myriad Lite includes a built-in &amp;quot;fist fighter&amp;quot;.&lt;br /&gt;
Say &amp;quot; /5 combaton &amp;quot; in main chat, while you have no weapons in hand, to activate the fist fighter.&lt;br /&gt;
The fist fighter works in Mouselook or regular camera mode.&lt;br /&gt;
Hold the left mouse button to start an attack.&lt;br /&gt;
Choose the attack with the arrow keys on your keyboard:&lt;br /&gt;
Left Arrow = Left Punch&lt;br /&gt;
Up Arrow = One-Two Punch, slower than a single fisted punch&lt;br /&gt;
Right Arrow = Right Punch&lt;br /&gt;
Down Arrow = Kick, slower than the punches but longer &amp;quot;reach&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Myriad Lite also includes Melee combat and ranged combat such as with crossbows or firearms, if the appropriately scripted Myriad-Lite compatible item is attached to a hand.&lt;br /&gt;
&lt;br /&gt;
QUESTS&lt;br /&gt;
Myriad Lite also includes Baroun Tardis&#039; Adventure Machine v1, allowing you to find and complete &amp;quot;quests&amp;quot;, &amp;quot;adventures&amp;quot;, or &amp;quot;crusades&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Sim/region owners can build &amp;quot;quests&amp;quot; in their regions, which this HUD will help you complete.&lt;br /&gt;
&lt;br /&gt;
To begin an adventure, touch the &#039;person&#039; who gave you the HUD again, this time while wearing the HUD. &lt;br /&gt;
&lt;br /&gt;
You should get the first &#039;task&#039; for the adventure, which will show what your goal and a hint on how to obtain it. &lt;br /&gt;
&lt;br /&gt;
If you should lose track of what you&#039;re doing, touch the HUD on your screen, and it will give you a quick update on the status of your adventure. &lt;br /&gt;
&lt;br /&gt;
If you remove your HUD, it will reset and clear the current adventure. &lt;br /&gt;
&lt;br /&gt;
This will cause you to lose all  goals you have achieved, and reset you to &amp;quot;no adventure in progress&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Adventures are like a scavenger hunt: You go after certain goals, and when you get all of them , you win the main prize at the end.&lt;br /&gt;
&lt;br /&gt;
 There are four basic types of goals  in the BAM system:&lt;br /&gt;
 &lt;br /&gt;
1)  Adventure Giver : if you&#039;re reading this, you&#039;ve already found one.... These start adventures, and can also be the end point of one.  Usually, some small prize is given out when you complete the adventure. These have a blue text floating over their head, indicating their name, such as &amp;quot;Baker&amp;quot; or &amp;quot;Clerk&amp;quot; &lt;br /&gt;
&lt;br /&gt;
2) Collision Goal: These occupy an area, and when you run into it or step on it while looking for that area, it lets you know you&#039;ve reached it, and gives you a clue for the next step in the adventure. These have no floating text, since that would be too much of a give away that this is the spot (grin) &lt;br /&gt;
&lt;br /&gt;
3) Location Goal: These scan an area, and when you enter it while looking for that area, let you know you&#039;ve reached it, and give you a clue for the next step in the adventure. These have no floating text, since that would be too much of a give away that this is the spot (grin) &lt;br /&gt;
&lt;br /&gt;
4) Touch Goal : These sit still, waiting, until you touch them. If they&#039;re not the current goal for you in the adventure, then nothing happens. If they _are_ your current goal, then the victory music plays and you get clue/hint for the next step.  These have a text floating over them, indicating their name. &lt;br /&gt;
&lt;br /&gt;
If you have problems with the adventure, please IM the owner of the region where you found this HUD or quest.&lt;br /&gt;
&lt;br /&gt;
Thank you for with Myriad Lite including Baroun&#039;s Adventure Machine!&lt;br /&gt;
&lt;br /&gt;
Allen and Baroun&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Target_v0.0.5_20110813&amp;diff=1153251</id>
		<title>User:Allen Kerensky/Myriad Lite Preview4/Myriad Lite Target v0.0.5 20110813</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Target_v0.0.5_20110813&amp;diff=1153251"/>
		<updated>2011-09-08T15:37:50Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Header}}&lt;br /&gt;
= Myriad Lite Target v0.0.5 20110813 =&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Myriad Lite Target v0.0.5 20110813&lt;br /&gt;
// Copyright (c) 2011 By Allen Kerensky (OSG/SL)&lt;br /&gt;
// The Myriad RPG System was designed, written, and illustrated by Ashok Desai&lt;br /&gt;
// Myriad published under a:&lt;br /&gt;
// Creative Commons License (Attribution 2.0 UK: England and Wales)&lt;br /&gt;
// Myriad Lite Target published under a&lt;br /&gt;
// Creative Commons License Attribution-NonCommercial-ShareAlike 3.0 Unported&lt;br /&gt;
//============================================================================&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// MESSAGE FORMAT REFERENCE&lt;br /&gt;
//============================================================================&lt;br /&gt;
// CHANPLAYER IN - DEPRECATED - HITCHECK|int attackstat|int attackskill|int attackdice|key owner|str name&lt;br /&gt;
// CHANPLAYER IN - RANGEDHIT|int attackstat|int attackskill|int attackdice|key weaponowner|str name&lt;br /&gt;
// CHANPLAYER IN - CLOSEHIT|int attackstat|int attackskill|int attackdice|key weaponowner|str name&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL VARIABLES&lt;br /&gt;
//============================================================================&lt;br /&gt;
integer CHANOBJECT; // channel the target listens on for attacks&lt;br /&gt;
integer HANDOBJECT; // chat channel handle to remove channel later if needed&lt;br /&gt;
integer MINSTAT = 1; // minimum value of a statistic&lt;br /&gt;
integer MAXSTAT = 10; // maximum value of a statistic&lt;br /&gt;
integer MINSKILL = 1; // minimum value of a skill&lt;br /&gt;
integer MAXSKILL = 5; // maximum value of a skill&lt;br /&gt;
integer MINDAMAGE = 1; // minimum damage dice a weapon can inflict&lt;br /&gt;
integer MAXDAMAGE = 5; // maximum damage dice a weapon can inflict&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL ERROR() - report errors on debug channel&lt;br /&gt;
//============================================================================&lt;br /&gt;
ERROR(string errmsg) {&lt;br /&gt;
    llSay(DEBUG_CHANNEL,&amp;quot;ERROR: &amp;quot;+errmsg);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// DEFAULT STATE&lt;br /&gt;
//============================================================================&lt;br /&gt;
default {&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // STATE_ENTRY EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        llSetPrimitiveParams([PRIM_PHANTOM, FALSE]); // ensure all prims are not phantom to register collisions&lt;br /&gt;
        CHANOBJECT = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)llGetKey(),0,6)); // calculate dynamic channel to listen on&lt;br /&gt;
        HANDOBJECT = llListen(CHANOBJECT,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;); // start listener for attack events&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // ON_REZ EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    on_rez(integer rez_param) {&lt;br /&gt;
        llResetScript(); // nothing drastic, just reset script and start from the top&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // LISTEN EVENT - whispers, says, shouts, regionsays&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    listen(integer channel,string speakername,key speakerid,string message) {&lt;br /&gt;
        if ( channel == CHANOBJECT ) { // is this message on the dynamic channel?        &lt;br /&gt;
            list fields = llParseString2List(message,[&amp;quot;|&amp;quot;],[]); // break message into parts split by | symbol&lt;br /&gt;
            string command = llList2String(fields,0); // field 0 is the command&lt;br /&gt;
            if ( command == &amp;quot;HITCHECK&amp;quot; || command == &amp;quot;RANGEDHIT&amp;quot; || command == &amp;quot;CLOSEHIT&amp;quot; ) { // is this an attack command?&lt;br /&gt;
                integer attackstat = llList2Integer(fields,1); // get the value of the attacker&#039;s stat&lt;br /&gt;
                integer attackskill = llList2Integer(fields,2); // get the attackers skill level&lt;br /&gt;
                integer attackdice = llList2Integer(fields,3);  // get the attackers weapon attack dice&lt;br /&gt;
                key owner = llList2Key(fields,4); // get the owner of the attacking object&lt;br /&gt;
                string item = llList2String(fields,5); // get the name of the attacking object&lt;br /&gt;
                if ( attackstat &amp;lt; MINSTAT || attackstat &amp;gt; MAXSTAT ) { // is attack stat valid?&lt;br /&gt;
                    ERROR(&amp;quot;Attack stat value out of range: &amp;quot;+(string)MINSTAT+&amp;quot;-&amp;quot;+(string)MAXSTAT); // report the invalid value&lt;br /&gt;
                    return; // exit early since we&#039;ve hit a fatal error with message&lt;br /&gt;
                }&lt;br /&gt;
                if ( attackskill &amp;lt; MINSKILL || attackstat &amp;gt; MAXSKILL ) { // is attacker skill value valid?&lt;br /&gt;
                    ERROR(&amp;quot;Attack skill value out of range: &amp;quot;+(string)MINSKILL+&amp;quot;-&amp;quot;+(string)MAXSKILL); // report invalid value&lt;br /&gt;
                    return; // exit early since we&#039;ve hit a fatal error with message&lt;br /&gt;
                }                &lt;br /&gt;
                if ( attackdice &amp;lt; MINDAMAGE || attackdice &amp;gt; MAXDAMAGE ) { // is attack dice of object valid?&lt;br /&gt;
                    ERROR(&amp;quot;Attack dice value out of range: &amp;quot;+(string)MINDAMAGE+&amp;quot;-&amp;quot;+(string)MAXDAMAGE); // report invalid value&lt;br /&gt;
                    return; // exit early since we&#039;ve hit a fatal error with message&lt;br /&gt;
                }&lt;br /&gt;
                // its all good - report the hit&lt;br /&gt;
                llShout(PUBLIC_CHANNEL,&amp;quot;/me hit by &amp;quot;+llKey2Name(owner)+&amp;quot;&#039;s &amp;quot;+item+&amp;quot; for &amp;quot;+(string)attackdice+&amp;quot; attack dice!&amp;quot;);&lt;br /&gt;
                return; // exit early in case we add more commands later&lt;br /&gt;
            } // end if attack command           &lt;br /&gt;
        } // end if channel object        &lt;br /&gt;
    }    &lt;br /&gt;
} // end default&lt;br /&gt;
//============================================================================&lt;br /&gt;
// END&lt;br /&gt;
//============================================================================&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Meter_v0.0.4_20110903&amp;diff=1153250</id>
		<title>User:Allen Kerensky/Myriad Lite Preview4/Myriad Lite Meter v0.0.4 20110903</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Meter_v0.0.4_20110903&amp;diff=1153250"/>
		<updated>2011-09-08T15:36:34Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Header}}&lt;br /&gt;
= Myriad Lite Meter v0.0.4 20110903 =&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Myriad Lite Meter v0.0.4 20110903&lt;br /&gt;
// Copyright (c) 2011 By Allen Kerensky (OSG/SL)&lt;br /&gt;
// The Myriad RPG System was designed, written, and illustrated by Ashok Desai&lt;br /&gt;
// Myriad is published under a:&lt;br /&gt;
// Creative Commons License (Attribution 2.0 UK: England and Wales)&lt;br /&gt;
// Myriad Lite Meter is published under a:&lt;br /&gt;
// Creative Commons License Attribution-NonCommercial-ShareAlike 3.0 Unported&lt;br /&gt;
//============================================================================&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// MESSAGE FORMAT REFERENCE&lt;br /&gt;
//============================================================================&lt;br /&gt;
// CHANPLAYER IN - METER|str PLAYER NAME|str GAMENAME|int CURWOUNDS|int MAXWOUNDS|int CURCRITICAL|int MAXCRITICAL|int ISDEAD|int ISINCAPACITATED&lt;br /&gt;
     &lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL VARIABLES&lt;br /&gt;
//============================================================================&lt;br /&gt;
integer CHANATTACH; // dynamic channel for player attachments &lt;br /&gt;
integer HANDATTACH; // attach channel handle for llRemove&lt;br /&gt;
string DIV = &amp;quot;|&amp;quot;; // Myriad message field divider&lt;br /&gt;
string  STATUS; // settext message&lt;br /&gt;
integer NAME_FORMAT = 1; // 1 = Alias only, 2 = First &amp;quot;Alias&amp;quot; Last, 3 = Alias (First Last)&lt;br /&gt;
integer SHOW_HEALTH = TRUE; // show the health percentage or not?&lt;br /&gt;
vector  COLOR = &amp;lt;0,1,0&amp;gt;; // set text color&lt;br /&gt;
float   ALPHA = 1.0; // set text alpha 0.0 = clear, 1.0 = solid&lt;br /&gt;
vector GREEN = &amp;lt;0,1,0&amp;gt;; // color constant for convenience&lt;br /&gt;
vector YELLOW = &amp;lt;1,1,0&amp;gt;; // color constant for convenience&lt;br /&gt;
vector RED = &amp;lt;1,0,0&amp;gt;; // color constant for convencience&lt;br /&gt;
vector BLACK = &amp;lt;0,0,0&amp;gt;; // color constant for convenience&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL SETUP()&lt;br /&gt;
//============================================================================&lt;br /&gt;
SETUP() {&lt;br /&gt;
    llSetText(&amp;quot;--- Waiting for Myriad Update ---&amp;quot;,&amp;lt;1,0,0&amp;gt;,1); // set a default banner to show we haven&#039;t been updated yet&lt;br /&gt;
    CHANATTACH = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)llGetOwner(),1,7)); // calculate wearer&#039;s dynamic attachment channel&lt;br /&gt;
    if ( HANDATTACH != 0 ) llListenRemove(HANDATTACH); // remove previously open channel&lt;br /&gt;
    HANDATTACH = llListen(CHANATTACH,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;); // start a listener on the dynamic channel&lt;br /&gt;
    llWhisper(CHANATTACH,&amp;quot;ATTACHMETER&amp;quot;); // tell HUD we&#039;re attached&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// DEFAULT STATE&lt;br /&gt;
//============================================================================&lt;br /&gt;
default {&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // STATE_ENTRY EVENT&lt;br /&gt;
    //------------------------------------------------------------------------    &lt;br /&gt;
    state_entry() {&lt;br /&gt;
        SETUP(); // setup the hovertext meter&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // ON_REZ EVENT&lt;br /&gt;
    //------------------------------------------------------------------------    &lt;br /&gt;
    on_rez(integer start_param) {&lt;br /&gt;
        SETUP(); // setup the hovertext meter&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // ATTACH EVENT&lt;br /&gt;
    //------------------------------------------------------------------------    &lt;br /&gt;
    attach(key id) { // &lt;br /&gt;
        if ( id != NULL_KEY ) {&lt;br /&gt;
            SETUP(); // wearing, let&#039;s setup&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        if ( id == NULL_KEY ) { // detach, drop, derezzed to inventory - NOT ON LOGOUT&lt;br /&gt;
            if ( HANDATTACH != 0 ) llListenRemove(HANDATTACH);&lt;br /&gt;
            llWhisper(CHANATTACH,&amp;quot;DETACHMETER&amp;quot;);&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // CHANGED EVENT&lt;br /&gt;
    //------------------------------------------------------------------------    &lt;br /&gt;
    changed(integer changes) {&lt;br /&gt;
        if ( changes &amp;amp; CHANGED_OWNER ) { // if owner has changed, we need to recalculate the dynamic channel&lt;br /&gt;
            SETUP(); // setup the hovertext meter&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        if ( changes &amp;amp; CHANGED_REGION || changes &amp;amp; CHANGED_TELEPORT ) { // owner jumped to new location? restart&lt;br /&gt;
            SETUP(); // setup hovertext and channel&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // LISTEN EVENT&lt;br /&gt;
    //------------------------------------------------------------------------    &lt;br /&gt;
    listen(integer channel,string name,key id,string message) {&lt;br /&gt;
        if ( channel == CHANATTACH ) { // did this message come in on attachment channel?&lt;br /&gt;
            list fields = llParseString2List(message,[DIV],[]); // break message down into list separated by |&lt;br /&gt;
            string command = llList2String(fields,0); // read first item in list to get the Myriad command&lt;br /&gt;
            if ( command == &amp;quot;METER&amp;quot;) { // if this is the METER command, let&#039;s update the meter status&lt;br /&gt;
                string dead = &amp;quot;no&amp;quot;; // set a default of &amp;quot;not dead&amp;quot;&lt;br /&gt;
                string incap = &amp;quot;no&amp;quot;; // set a default of &amp;quot;not incapacitated&amp;quot;&lt;br /&gt;
                string playername   = llList2String(fields,1); // get the full player name from the list of METER values&lt;br /&gt;
                list   name2        = llParseString2List(playername,[&amp;quot; &amp;quot;],[]); // separate first and last name by space&lt;br /&gt;
                string firstname    = llList2String(name2,0); // get the firstname from the name2&lt;br /&gt;
                string lastname     = llList2String(name2,1); // get the lastname, if any, from the name2&lt;br /&gt;
                string gamename     = llList2String(fields,2); // get player&#039;s alias/game name (originally set in their character sheet)&lt;br /&gt;
                integer curwounds   = llList2Integer(fields,3); // what is player&#039;s current wound value?&lt;br /&gt;
                integer maxwounds   = llList2Integer(fields,4); // what is player&#039;s maximum healed wounds allowed by level/stats?&lt;br /&gt;
                integer curcritical = llList2Integer(fields,5); // what is player&#039;s current critical wounds value?&lt;br /&gt;
                integer maxcritical = llList2Integer(fields,6); // what is player&#039;s maximum healed critical wounds value?&lt;br /&gt;
                integer isdead      = llList2Integer(fields,7); // is player dead?&lt;br /&gt;
                integer isincap     = llList2Integer(fields,8); // is player incapacitated?&lt;br /&gt;
                // okay, we&#039;ve broken down status, lets create a banner from that using colors&lt;br /&gt;
                STATUS = &amp;quot;&amp;quot;; // start with an empty string&lt;br /&gt;
                COLOR = GREEN; // start with fully healthy color&lt;br /&gt;
                if ( NAME_FORMAT == 1 ) { // what name format do we want to see?                &lt;br /&gt;
                    STATUS = gamename; // 1 == just Alias name from character sheet&lt;br /&gt;
                } else if ( NAME_FORMAT == 2 ) { // not format 1, so format 2?&lt;br /&gt;
                    STATUS = firstname + &amp;quot;\&amp;quot;&amp;quot; + gamename + &amp;quot;\&amp;quot;&amp;quot; + lastname; // firstname &amp;quot;alias&amp;quot; lastname&lt;br /&gt;
                } else if ( NAME_FORMAT == 3 ) { // not format 1, or 2, so...&lt;br /&gt;
                    STATUS = gamename + &amp;quot;(&amp;quot;+playername+&amp;quot;)&amp;quot;; // alias (firstname lastname)&lt;br /&gt;
                }&lt;br /&gt;
                if ( SHOW_HEALTH == TRUE ) { // do we want a health number (unrealistic)&lt;br /&gt;
                    float currentpoints = (float)curwounds + (float)curcritical; // add up noncritical and critical wounds boxes remaining&lt;br /&gt;
                    float maxpoints = (float)maxwounds + (float)maxcritical; // add up total wounds boxes player should have&lt;br /&gt;
                    if ( currentpoints &amp;gt; 0.0 ) { // if player has some wounds left&lt;br /&gt;
                        float health = ( ( currentpoints / maxpoints ) * 100.0 ); // get a percentage&lt;br /&gt;
                        STATUS += &amp;quot;\nHealth: &amp;quot;+(string)llRound(health)+&amp;quot;%&amp;quot;; // add the percentage health to the status&lt;br /&gt;
                    } else { // oops all resilience gone&lt;br /&gt;
                        STATUS += &amp;quot;\nHealth; 0%&amp;quot;; // so add a zero% to status&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if ( curwounds == maxwounds &amp;amp;&amp;amp; curcritical == maxcritical ) { // are all health boxes full?&lt;br /&gt;
                    COLOR = GREEN; // fully healthy&lt;br /&gt;
                }&lt;br /&gt;
                if ( curwounds &amp;lt; maxwounds &amp;amp;&amp;amp; curwounds &amp;gt;= 1 ) { // we&#039;ve lost some wounds, but not incapacitated&lt;br /&gt;
                    COLOR = YELLOW; // set a warning that we&#039;ve been wounded and not fully healty&lt;br /&gt;
                }&lt;br /&gt;
                if ( curwounds &amp;lt; 1 ) { // if we&#039;re out of non-critical wounds, we&#039;re in trouble&lt;br /&gt;
                    COLOR = RED; // we&#039;re incapacitated but not dead, bleeding out here&lt;br /&gt;
                }&lt;br /&gt;
                if ( isincap == 1 &amp;amp;&amp;amp; isdead == 0 ) {&lt;br /&gt;
                    STATUS += &amp;quot; ! INCAPACITATED !&amp;quot;;&lt;br /&gt;
                    COLOR = RED; // set color to warning that we&#039;re down but not dead yet&lt;br /&gt;
                }&lt;br /&gt;
                if ( isdead == 1 ) {  // if we&#039;re dead&lt;br /&gt;
                    STATUS += &amp;quot; !!! DEAD !!!&amp;quot;; // add a notice to status&lt;br /&gt;
                    COLOR = BLACK; // set color to color of death&lt;br /&gt;
                }                &lt;br /&gt;
                llSetText(STATUS,COLOR,ALPHA); // show the new status text over the meter&lt;br /&gt;
                return; // we&#039;re done with this command, exit entire listen event&lt;br /&gt;
            } // end if command meter&lt;br /&gt;
            if ( command == &amp;quot;REGISTERATTACHMENTS&amp;quot; ) { // HUD asking for attachments attached?&lt;br /&gt;
                SETUP(); // just setup&lt;br /&gt;
            }&lt;br /&gt;
        } // end if chanattach&lt;br /&gt;
    }&lt;br /&gt;
} // end default&lt;br /&gt;
//============================================================================&lt;br /&gt;
// END&lt;br /&gt;
//============================================================================&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Melee_v0.0.3_20110903&amp;diff=1153249</id>
		<title>User:Allen Kerensky/Myriad Lite Preview4/Myriad Lite Melee v0.0.3 20110903</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Melee_v0.0.3_20110903&amp;diff=1153249"/>
		<updated>2011-09-08T15:35:21Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Header}}&lt;br /&gt;
= Myriad Lite Melee v0.0.3 20110903 =&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Myriad Lite Melee v0.0.3 20110903&lt;br /&gt;
// Copyright (c) 2011 By Allen Kerensky (OSG/SL)&lt;br /&gt;
// The Myriad RPG System was designed, written, and illustrated by Ashok Desai&lt;br /&gt;
// Myriad published under a:&lt;br /&gt;
// Creative Commons License (Attribution 2.0 UK: England and Wales)&lt;br /&gt;
// Myriad Lite published under a&lt;br /&gt;
// Creative Commons License Attribution-NonCommercial-ShareAlike 3.0 Unported&lt;br /&gt;
//============================================================================&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// MESSAGE FORMAT REFERENCE&lt;br /&gt;
//============================================================================&lt;br /&gt;
// CHANMYRIAD OUT - RPEVENT|message&lt;br /&gt;
// CHANATTACH IN  - REGISTERATTACHMENTS&lt;br /&gt;
// CHANATTACH OUT - ATTACHMELEE|int attackdice|int attachpoint|str name&lt;br /&gt;
// CHANATTACH OUT - DETACHMELEE|int attackdice|int attachpoint|str name&lt;br /&gt;
// CHANPLAYER OUT - CLOSECOMBAT|int attackdice|key victim|key attacker|str weaponname&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL VARIABLES&lt;br /&gt;
//============================================================================&lt;br /&gt;
key WEARER = NULL_KEY; // UUID of melee weapon user&lt;br /&gt;
integer ATTACHPOINT = 0; // attachment point&lt;br /&gt;
integer MINMELEE = 1; // minimum attack dice for melee weapons&lt;br /&gt;
integer MAXMELEE = 5; // maximum attack dice for melee weapons&lt;br /&gt;
// Melee Attack Dice&lt;br /&gt;
// 1D - Unarmed Combat&lt;br /&gt;
// 2D - Short animal claws, knife, dagger, blackjack, knuckledusters&lt;br /&gt;
// 3D - Long animal claws, short sword, machete, wooden baseball bat, staff&lt;br /&gt;
// 4D - Fire axe, long sword, katana, aluminum baseball bat, poleaxe&lt;br /&gt;
// 5D - Battleaxe, claymore, laser sword, daikatana, double-ended polearm&lt;br /&gt;
integer MELEEATTACKDICE = 4; // long sword&lt;br /&gt;
string DIV=&amp;quot;|&amp;quot;; // Myriad message field divider&lt;br /&gt;
string ANIM_SWORD = &amp;quot;sword_strike_r&amp;quot;; // use built in right handed sword strike animation&lt;br /&gt;
integer CHANATTACH; // hold the dynamically calculated attachment channel number&lt;br /&gt;
integer HANDATTACH; // hold a handle to remove the attachment channel if needed&lt;br /&gt;
integer CHANMYRIAD = -999; // the Myriad RPEVENT channel number&lt;br /&gt;
integer ANIM = FALSE; // do we have permission to animate the avatar?&lt;br /&gt;
float WEAPON_LENGTH = 2.0; // a six-foot longsword is the default&lt;br /&gt;
integer SAFETY_ON = TRUE; // can this weapon be used or is it sheathed?&lt;br /&gt;
&lt;br /&gt;
// SAFETY OFF - turn off safety and enable firing&lt;br /&gt;
SAFETYOFF() {&lt;br /&gt;
    SAFETY_ON = FALSE; // switch the safety off&lt;br /&gt;
    llRequestPermissions(llGetOwner(),PERMISSION_TAKE_CONTROLS|PERMISSION_TRIGGER_ANIMATION); // request permissions&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// SAFETY ON - turn on safety&lt;br /&gt;
SAFETYON() {&lt;br /&gt;
    SAFETY_ON = TRUE; // switch the safety on&lt;br /&gt;
    llReleaseControls();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// DRAW THE WEAPON&lt;br /&gt;
DRAW(string hand) {&lt;br /&gt;
    // draw code goes here - turn copy in hand visible?&lt;br /&gt;
    if ( llGetAttached() == 5 &amp;amp;&amp;amp; ( hand == &amp;quot;left&amp;quot; || hand == &amp;quot;both&amp;quot; ) ) {&lt;br /&gt;
        llRegionSay(CHANMYRIAD,llKey2Name(llGetOwner())+&amp;quot; draws a weapon with their left hand.&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Left hand weapon drawn.&amp;quot;);&lt;br /&gt;
        llSetLinkAlpha(LINK_SET,1.0,ALL_SIDES);        &lt;br /&gt;
    }&lt;br /&gt;
    if ( llGetAttached() == 6 &amp;amp;&amp;amp; ( hand == &amp;quot;right&amp;quot; || hand == &amp;quot;both&amp;quot; ) ) {&lt;br /&gt;
        llRegionSay(CHANMYRIAD,llKey2Name(llGetOwner())+&amp;quot; draws a weapon with their right hand.&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Right hand weapon drawn.&amp;quot;);&lt;br /&gt;
        llSetLinkAlpha(LINK_SET,1.0,ALL_SIDES);        &lt;br /&gt;
    }&lt;br /&gt;
    SAFETYOFF(); // unholster and turn off safety&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// SHEATHE THE WEAPON&lt;br /&gt;
SHEATHE(string hand) {&lt;br /&gt;
    // sheathe code goes here - turn copy in hand invisible?&lt;br /&gt;
    if ( llGetAttached() == 5 &amp;amp;&amp;amp; ( hand == &amp;quot;left&amp;quot; || hand == &amp;quot;both&amp;quot; ) ) {&lt;br /&gt;
        llRegionSay(CHANMYRIAD,llKey2Name(llGetOwner())+&amp;quot; sheathes their left-hand weapon.&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Left hand weapon sheathed.&amp;quot;);&lt;br /&gt;
        llSetLinkAlpha(LINK_SET,0.0,ALL_SIDES);        &lt;br /&gt;
    }&lt;br /&gt;
    if ( llGetAttached() == 6 &amp;amp;&amp;amp; ( hand == &amp;quot;right&amp;quot; || hand == &amp;quot;both&amp;quot; ) ) {&lt;br /&gt;
        llRegionSay(CHANMYRIAD,llKey2Name(llGetOwner())+&amp;quot; sheathes their right-hand weapon.&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Right hand weapon sheathed.&amp;quot;);&lt;br /&gt;
        llSetLinkAlpha(LINK_SET,0.0,ALL_SIDES);        &lt;br /&gt;
    }&lt;br /&gt;
    SAFETYON(); // turn on safety before holstering&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// SETUP THE WEAPON&lt;br /&gt;
SETUP() {&lt;br /&gt;
    CHANATTACH = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)llGetOwner(),1,7)); // calculate dynamic attachment channel&lt;br /&gt;
    HANDATTACH = llListen(CHANATTACH,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;); // start listening on attachment channel&lt;br /&gt;
    SAFETY_ON = TRUE; // safe the weapon until drawn&lt;br /&gt;
    llSetLinkAlpha(LINK_SET,0.0,ALL_SIDES); // turn invisble as if sheathed&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// DEFAULT STATE&lt;br /&gt;
//============================================================================&lt;br /&gt;
default {&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // STATE_ENTRY EVENT - called on reset&lt;br /&gt;
    //------------------------------------------------------------------------    &lt;br /&gt;
    state_entry() {&lt;br /&gt;
        SETUP();&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // ON_REZ EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    on_rez(integer params) {&lt;br /&gt;
        SETUP();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // ATTACH EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        if ( id != NULL_KEY ) { // if id not equal null key, this is an attach&lt;br /&gt;
            WEARER = id; // save the id we attached to&lt;br /&gt;
            ATTACHPOINT = llGetAttached(); // get the position we attached to&lt;br /&gt;
            // tell the region we&#039;re arming a weapon&lt;br /&gt;
            llRegionSay(CHANMYRIAD,&amp;quot;RPEVENT&amp;quot;+DIV+llKey2Name(WEARER)+&amp;quot; equips their &amp;quot;+llGetObjectName());&lt;br /&gt;
            integer dynchan = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)WEARER,1,7)); // calculate dynamic attach channel&lt;br /&gt;
            // send attach melee message to HUD which disables fist fighter&lt;br /&gt;
            llWhisper(dynchan,&amp;quot;ATTACHMELEE&amp;quot;+DIV+(string)MELEEATTACKDICE+DIV+(string)ATTACHPOINT+DIV+llGetObjectName());&lt;br /&gt;
            llRequestPermissions(id,PERMISSION_TAKE_CONTROLS|PERMISSION_TRIGGER_ANIMATION); // request permissions&lt;br /&gt;
        } else { // the id was null key, so this is a detach&lt;br /&gt;
            integer dynchan = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)WEARER,1,7)); // calculate dynamic attach channel&lt;br /&gt;
            if ( dynchan != 0 ) { // is channel valid&lt;br /&gt;
                // tell the region we&#039;re disarming&lt;br /&gt;
                llRegionSay(CHANMYRIAD,&amp;quot;RPEVENT&amp;quot;+DIV+llKey2Name(WEARER)+&amp;quot; disarms their &amp;quot;+llGetObjectName());&lt;br /&gt;
                // send detach message to HUD which re-enables fist fighter&lt;br /&gt;
                llWhisper(dynchan,&amp;quot;DETACHMELEE&amp;quot;+DIV+(string)MELEEATTACKDICE+DIV+(string)ATTACHPOINT+DIV+llGetObjectName());&lt;br /&gt;
            } else { // channel was not valid&lt;br /&gt;
                llSay(DEBUG_CHANNEL,&amp;quot;DETACH EVENT WITHOUT PREVIOUS ATTACH?&amp;quot;); // report the problem&lt;br /&gt;
            }&lt;br /&gt;
            WEARER = NULL_KEY; // cleanup wearer key on detach&lt;br /&gt;
            ATTACHPOINT = 0; // cleanup attachpoint on detach&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // LISTEN EVENT - whisper, say, show, regionsay...&lt;br /&gt;
    //------------------------------------------------------------------------    &lt;br /&gt;
    listen(integer channel,string speakername,key speakerid,string message) {&lt;br /&gt;
        if ( channel == CHANATTACH ) { // did this message come in on attachment channel?&lt;br /&gt;
            if ( message == &amp;quot;REGISTERATTACHMENTS&amp;quot; ) { // is this a HUD asking for attachments to register?&lt;br /&gt;
                WEARER = llGetOwner(); // who is wielding me?&lt;br /&gt;
                ATTACHPOINT = llGetAttached(); // where am I attached?&lt;br /&gt;
                integer dynchan = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)WEARER,1,7)); // calculate wearer&#039;s dynamic attachment channel&lt;br /&gt;
                llWhisper(dynchan,&amp;quot;ATTACHMELEE&amp;quot;+DIV+(string)MELEEATTACKDICE+DIV+(string)ATTACHPOINT+DIV+llGetObjectName()); // tell HUD we&#039;re attached to disable fist fighter&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if ( message == &amp;quot;DRAWLEFT&amp;quot; ) { DRAW(&amp;quot;left&amp;quot;); return;} // draw weapon if in left hand&lt;br /&gt;
            if ( message == &amp;quot;DRAWRIGHT&amp;quot; ) { DRAW(&amp;quot;right&amp;quot;); return;} // draw weapon in right hand&lt;br /&gt;
            if ( message == &amp;quot;DRAWBOTH&amp;quot; ) { DRAW(&amp;quot;both&amp;quot;); return; } // draw weapon in both hands&lt;br /&gt;
            if ( message == &amp;quot;SHEATHELEFT&amp;quot; ) { SHEATHE(&amp;quot;left&amp;quot;); return;} // sheathe left-hand weapon&lt;br /&gt;
            if ( message == &amp;quot;SHEATHERIGHT&amp;quot; ) { SHEATHE(&amp;quot;right&amp;quot;); return;} // sheathe right-hand weapon&lt;br /&gt;
            if ( message == &amp;quot;SHEATHEBOTH&amp;quot; ) { SHEATHE(&amp;quot;both&amp;quot;); return; } // sheathe both weapon&lt;br /&gt;
            if ( message == &amp;quot;SAFETYOFF&amp;quot; ) { SAFETYOFF(); return; } // unsafe the weapon&lt;br /&gt;
            if ( message == &amp;quot;SAFETYON&amp;quot; ) { SAFETYON(); return; } // safe the weapon&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // RUN_TIME_PERMISSIONS EVENT - what is object allowed to do to avatar?&lt;br /&gt;
    //------------------------------------------------------------------------    &lt;br /&gt;
    run_time_permissions(integer perm) {&lt;br /&gt;
        if ( perm &amp;amp; PERMISSION_TAKE_CONTROLS ) { // can object read controls?&lt;br /&gt;
            llTakeControls(CONTROL_LBUTTON|CONTROL_ML_LBUTTON,TRUE,TRUE); // start watching the left mouse button in both views&lt;br /&gt;
        }&lt;br /&gt;
        if ( perm &amp;amp; PERMISSION_TRIGGER_ANIMATION ) { // can we also trigger animations for sword swings?&lt;br /&gt;
            ANIM = TRUE; // remember that we have permission now&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // CONTROL EVENT - read arrow keys and mouse button&lt;br /&gt;
    //------------------------------------------------------------------------    &lt;br /&gt;
    control(key id,integer level,integer edge) {&lt;br /&gt;
        if ( SAFETY_ON == TRUE ) {&lt;br /&gt;
            llOwnerSay(&amp;quot;Your weapon is sheathed, draw it!&amp;quot;);&lt;br /&gt;
            llReleaseControls();&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        if ( id == WEARER ) { // make sure controls come from wielder&lt;br /&gt;
            if ( ( level &amp;amp; CONTROL_LBUTTON &amp;amp;&amp;amp; edge &amp;amp; CONTROL_LBUTTON ) || ( level &amp;amp; CONTROL_ML_LBUTTON &amp;amp;&amp;amp; edge &amp;amp; CONTROL_ML_LBUTTON ) ) { // if left mouse button pressed in regular or mouselook mode&lt;br /&gt;
                llSensor(&amp;quot;&amp;quot;,NULL_KEY,(AGENT|ACTIVE|PASSIVE),WEAPON_LENGTH,PI/6); // trigger a sensor sweep for avatars within weapon range, and standing in front of us&lt;br /&gt;
                if ( ANIM == TRUE ) llStartAnimation(ANIM_SWORD); // if we can show sword swing, go ahead&lt;br /&gt;
                llSleep(0.2); // pause to let animation run&lt;br /&gt;
                return; // return now to skip processing any more events we add later&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // SENSOR EVENT - what did we find?&lt;br /&gt;
    //------------------------------------------------------------------------    &lt;br /&gt;
    sensor(integer num_detected) {&lt;br /&gt;
        while(num_detected--) { // step through all AGENTS returned by sensor sweep&lt;br /&gt;
            integer dynchan = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)llGetOwner(),0,6)); // calculate attackers HUD dynamic channel&lt;br /&gt;
            // send the close combat skill check message to attacker to start close combat skill check&lt;br /&gt;
            // attackers hud adds attacker stat and skill and sends the information to the victim to finish the opposed close combat skill check&lt;br /&gt;
            // we region say this so others can keep score or detect cheaters, etc&lt;br /&gt;
            llRegionSay(dynchan,&amp;quot;CLOSECOMBAT&amp;quot;+DIV+(string)MELEEATTACKDICE+DIV+(string)llDetectedKey(num_detected)+DIV+(string)llGetOwner()+DIV+llGetObjectName());&lt;br /&gt;
            &lt;br /&gt;
            key who = llDetectedKey(num_detected); // who did we hit with sensor?&lt;br /&gt;
            key owner = llList2Key(llGetObjectDetails(who,[OBJECT_OWNER]),0); // is this an agent/avatar for sure?&lt;br /&gt;
            if ( who == owner ) { // yep, we hit an avatar&lt;br /&gt;
                // tell the region an attempted attack is underway&lt;br /&gt;
                llRegionSay(CHANMYRIAD,&amp;quot;RPEVENT&amp;quot;+DIV+llKey2Name(llGetOwner())+&amp;quot; strikes at &amp;quot;+llDetectedName(num_detected)+&amp;quot; in Close Combat!&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // NO_SENSOR EVENT - we didn&#039;t find anything to hit&lt;br /&gt;
    //------------------------------------------------------------------------    &lt;br /&gt;
    no_sensor() {&lt;br /&gt;
        // we do nothing in this - but having a nosensor block avoids bugs where sensors would fail if nonsensor was missing&lt;br /&gt;
    }&lt;br /&gt;
} // end default&lt;br /&gt;
//============================================================================&lt;br /&gt;
// END&lt;br /&gt;
//============================================================================&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Holster_v0.0.0_20110904&amp;diff=1153248</id>
		<title>User:Allen Kerensky/Myriad Lite Preview4/Myriad Lite Holster v0.0.0 20110904</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Holster_v0.0.0_20110904&amp;diff=1153248"/>
		<updated>2011-09-08T15:34:15Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Header}}&lt;br /&gt;
= Myriad Lite Holster v0.0.0 20110904 =&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Myriad Lite Holster v0.0.0 20110904&lt;br /&gt;
// Copyright (c) 2011 By Allen Kerensky (OSG/SL)&lt;br /&gt;
// The Myriad RPG System was designed, written, and illustrated by Ashok Desai&lt;br /&gt;
// Myriad is published under a:&lt;br /&gt;
// Creative Commons License (Attribution 2.0 UK: England and Wales)&lt;br /&gt;
// Myriad Lite Holster is published under a:&lt;br /&gt;
// Creative Commons License Attribution-NonCommercial-ShareAlike 3.0 Unported&lt;br /&gt;
//===========================================================================&lt;br /&gt;
&lt;br /&gt;
//===========================================================================&lt;br /&gt;
// MESSAGE FORMAT REFERENCE&lt;br /&gt;
//===========================================================================&lt;br /&gt;
// CHANATTACH IN - DRAWLEFT,DRAWRIGHT,DRAWBOTH&lt;br /&gt;
// CHANATTACH IN - HOLSTERLEFT,HOLSTERRIGHT,HOLSTERBOTH&lt;br /&gt;
// CHANATTACH IN - SHEATHELEFT,SHEATHERIGHT,SHEATHEBOTH&lt;br /&gt;
&lt;br /&gt;
string DIV = &amp;quot;|&amp;quot;;                               // field divider between parts of Myriad messages&lt;br /&gt;
list LEFTATTACHED = [3,7,20,21,25,26,27,29]; // left side holster attachment slots&lt;br /&gt;
list RIGHTATTACHED = [4,8,18,19,22,23,24,30]; // right side holster attachment slots&lt;br /&gt;
&lt;br /&gt;
//===========================================================================&lt;br /&gt;
// GLOBAL RUNTIMES - runtime variables we change as we go&lt;br /&gt;
// Don&#039;t alter anything below if your not  familiar with it.&lt;br /&gt;
//===========================================================================&lt;br /&gt;
integer CHANATTACH = 0; // dynamic channel for attachment messages&lt;br /&gt;
integer HANDATTACH = 0; // chat channel handle for attachment dynamic channel&lt;br /&gt;
&lt;br /&gt;
//===========================================================================&lt;br /&gt;
// GLOBAL SETUP&lt;br /&gt;
//===========================================================================&lt;br /&gt;
SETUP() {&lt;br /&gt;
    CHANATTACH = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)llGetOwner(),1,7)); // calculate the dynamic attachment channel&lt;br /&gt;
    if ( HANDATTACH != 0 ) llListenRemove(HANDATTACH); // clean up a previous listener&lt;br /&gt;
    HANDATTACH = llListen(CHANATTACH,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;); // start a listener on the attachment channel&lt;br /&gt;
    llSetLinkAlpha(LINK_SET,1.0,ALL_SIDES); // make holster/sheathe visible&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// DRAW THE WEAPON&lt;br /&gt;
DRAW(string hand) {&lt;br /&gt;
    // draw code goes here&lt;br /&gt;
    if ( llListFindList(LEFTATTACHED,[llGetAttached()]) != -1 &amp;amp;&amp;amp; ( hand == &amp;quot;left&amp;quot; || hand == &amp;quot;both&amp;quot; ) ) {&lt;br /&gt;
        llSetLinkAlpha(LINK_SET,0.0,ALL_SIDES); // go invisible when weapon drawn&lt;br /&gt;
    }&lt;br /&gt;
    if ( llListFindList(RIGHTATTACHED,[llGetAttached()]) != -1 &amp;amp;&amp;amp; ( hand == &amp;quot;right&amp;quot; || hand == &amp;quot;both&amp;quot; ) ) {&lt;br /&gt;
        llSetLinkAlpha(LINK_SET,0.0,ALL_SIDES); // go invisible when weapon drawn&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// HOLSTER THE WEAPON&lt;br /&gt;
HOLSTER(string hand) {&lt;br /&gt;
    // holster code goes here&lt;br /&gt;
    if ( llListFindList(LEFTATTACHED,[llGetAttached()]) != -1 &amp;amp;&amp;amp; ( hand == &amp;quot;left&amp;quot; || hand == &amp;quot;both&amp;quot; ) ) {&lt;br /&gt;
        llSetLinkAlpha(LINK_SET,1.0,ALL_SIDES); // go visible when weapon holstered/sheathed&lt;br /&gt;
    }&lt;br /&gt;
    if ( llListFindList(RIGHTATTACHED,[llGetAttached()]) != -1 &amp;amp;&amp;amp; ( hand == &amp;quot;right&amp;quot; || hand == &amp;quot;both&amp;quot; ) ) {&lt;br /&gt;
        llSetLinkAlpha(LINK_SET,1.0,ALL_SIDES); // go visible when weapon holstered/sheathed&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//===========================================================================&lt;br /&gt;
// STATE DEFAULT - the main state is the default state.&lt;br /&gt;
// When a script is compiled, reset or loaded, this is the state it enters by default.&lt;br /&gt;
//===========================================================================&lt;br /&gt;
default {&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    // STATE_ENTRY EVENT - Triggered on any state transition and start up&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        SETUP(); // call global setup&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    // ON_REZ EVENT - Triggered when object attached or rezzed on the ground&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    on_rez(integer rezparams) {&lt;br /&gt;
        SETUP();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    // ATTACH EVENT - when the object is attached or detached&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        if ( id != NULL_KEY ) { // attached from ground or inventory&lt;br /&gt;
            SETUP();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    // LISTEN EVENT - listen for whisper, say, shout, regionsay messages&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    listen(integer channel, string name, key uuid, string message) {&lt;br /&gt;
        if ( channel == CHANATTACH ) { // did message come in on attachment channel?&lt;br /&gt;
            if ( message == &amp;quot;DRAWLEFT&amp;quot; ) { DRAW(&amp;quot;left&amp;quot;); return;} // draw weapons if in left hand&lt;br /&gt;
            if ( message == &amp;quot;DRAWRIGHT&amp;quot; ) { DRAW(&amp;quot;right&amp;quot;); return;} // draw weapons in right hand&lt;br /&gt;
            if ( message == &amp;quot;DRAWBOTH&amp;quot; ) { DRAW(&amp;quot;both&amp;quot;); return; } // draw weapons in both hands&lt;br /&gt;
            if ( message == &amp;quot;HOLSTERLEFT&amp;quot; ) { HOLSTER(&amp;quot;left&amp;quot;); return;} // holster left-hand weapons&lt;br /&gt;
            if ( message == &amp;quot;HOLSTERRIGHT&amp;quot; ) { HOLSTER(&amp;quot;right&amp;quot;); return;} // holster right-hand weapons&lt;br /&gt;
            if ( message == &amp;quot;HOLSTERBOTH&amp;quot; ) { HOLSTER(&amp;quot;both&amp;quot;); return; } // holster both weapons&lt;br /&gt;
            if ( message == &amp;quot;SHEATHELEFT&amp;quot; ) { HOLSTER(&amp;quot;left&amp;quot;); return;} // sheathe left-hand weapon&lt;br /&gt;
            if ( message == &amp;quot;SHEATHERIGHT&amp;quot; ) { HOLSTER(&amp;quot;right&amp;quot;); return;} // sheathe right-hand weapons&lt;br /&gt;
            if ( message == &amp;quot;SHEATHBOTH&amp;quot; ) { HOLSTER(&amp;quot;both&amp;quot;); return; } // sheatheholster both weapons&lt;br /&gt;
        }&lt;br /&gt;
    }    &lt;br /&gt;
} // end of default&lt;br /&gt;
//============================================================================&lt;br /&gt;
// END&lt;br /&gt;
//============================================================================&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Healing_v0.0.1_20110813&amp;diff=1153247</id>
		<title>User:Allen Kerensky/Myriad Lite Preview4/Myriad Lite Healing v0.0.1 20110813</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Healing_v0.0.1_20110813&amp;diff=1153247"/>
		<updated>2011-09-08T15:33:11Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Header}}&lt;br /&gt;
= Myriad Lite Healing v0.0.1 20110813 =&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Myriad Lite Healing v0.0.1 20110813&lt;br /&gt;
// Copyright (c) 2011 By Allen Kerensky (OSG/SL)&lt;br /&gt;
// The Myriad RPG System was designed, written, and illustrated by Ashok Desai&lt;br /&gt;
// Myriad is published under a:&lt;br /&gt;
// Creative Commons License (Attribution 2.0 UK: England and Wales)&lt;br /&gt;
// Myriad Lite Healing is published under a:&lt;br /&gt;
// Creative Commons License Attribution-NonCommercial-ShareAlike 3.0 Unported&lt;br /&gt;
//============================================================================&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// MESSAGE FORMAT REFERENCE&lt;br /&gt;
//============================================================================&lt;br /&gt;
// CHANMYRIAD OUT - RPEVENT|str eventmessage&lt;br /&gt;
// CHANPLAYER OUT - HEALALL&lt;br /&gt;
// CHANPLAYER OUT - HEALPARTIAL|str HEALAMOUNT&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL CONSTANTS&lt;br /&gt;
//============================================================================&lt;br /&gt;
float   TOUCH_RANGE = 3.0;      // meters - how close do you have to be for touch-to-heal to work&lt;br /&gt;
integer RESPAWN_FLAG = TRUE;    // once heal is used, respawn it after a certain time?&lt;br /&gt;
float   RESPAWN_TIME = 30.0;    // how long until heal respawns?&lt;br /&gt;
integer CHANMYRIAD = -999;      // channel for Myriad RP events&lt;br /&gt;
string  DIV = &amp;quot;|&amp;quot;;              // Myriad message field divider&lt;br /&gt;
integer HEALALL = TRUE;         // heal all? if FALSE...&lt;br /&gt;
integer HEALAMOUNT = 0;         // heal how many critical/wound boxes?&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL SETUP()&lt;br /&gt;
//============================================================================&lt;br /&gt;
SETUP() {&lt;br /&gt;
    llSetLinkColor(LINK_SET,&amp;lt;1,0,0&amp;gt;,ALL_SIDES); // set all prims to red on all sides&lt;br /&gt;
    llTargetOmega(&amp;lt;0,0,1&amp;gt;,0.25,1.0); // set the object slowly spinning around the Z (vertical) axis&lt;br /&gt;
    if ( HEALALL == TRUE ) { // what label do we set?&lt;br /&gt;
        llSetText(&amp;quot;Full Healing&amp;quot;,&amp;lt;1,0,0&amp;gt;,1.0); // Set a red FULL heal hovertext&lt;br /&gt;
    } else { // this is only a partial heal&lt;br /&gt;
        llSetText(&amp;quot;Partial Healing&amp;quot;,&amp;lt;1,0,0&amp;gt;,1.0); // set a read PARTIAL heal hovertext&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// DEFAULT STATE&lt;br /&gt;
//============================================================================&lt;br /&gt;
default {&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // STATE_ENTRY EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        SETUP(); // if reset, go to setup&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // ON_REZ EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    on_rez(integer start_param) {&lt;br /&gt;
        SETUP(); // if rezzed from inventory, go to setup&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // COLLISION_START EVENT - if player runs into the heal object, try healing them&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    collision_start(integer collisions) {&lt;br /&gt;
        while (collisions--) { // count down through each collision in this event&lt;br /&gt;
            if ( RESPAWN_FLAG == FALSE ) { // this heal has already been used recently&lt;br /&gt;
                return; // so just return since we&#039;re not going to heal anyone at the moment&lt;br /&gt;
            }&lt;br /&gt;
            key who = llDetectedKey(collisions); // what hit the heal object?&lt;br /&gt;
            // we check the owner of the colliding object to see if its an avatar, or someone&#039;s bullet, etc&lt;br /&gt;
            key whoowner = llList2Key(llGetObjectDetails(who,[OBJECT_OWNER]),0);&lt;br /&gt;
            if ( who == whoowner) { // this is an avatar that owns itself&lt;br /&gt;
                // calculate the CHANPLAYER dynamic channel for who is being healed&lt;br /&gt;
                integer chanplayer = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)who,0,6));&lt;br /&gt;
                if ( HEALALL == TRUE ) { // are we healing all damage?&lt;br /&gt;
                    llRegionSay(CHANMYRIAD,llKey2Name(who)+&amp;quot; is fully healed!&amp;quot;);&lt;br /&gt;
                    llWhisper(chanplayer,&amp;quot;HEALALL&amp;quot;); // tell that player&#039;s HUD to heal ALL damage&lt;br /&gt;
                } else {&lt;br /&gt;
                    llRegionSay(CHANMYRIAD,llKey2Name(who)+&amp;quot; is partially healed!&amp;quot;);&lt;br /&gt;
                    llWhisper(chanplayer,&amp;quot;HEALPARTIAL&amp;quot;+DIV+(string)HEALAMOUNT); // tell player HUD to heal some damage&lt;br /&gt;
                }&lt;br /&gt;
                llSetLinkColor(LINK_SET,&amp;lt;.5,.5,.5&amp;gt;,ALL_SIDES); // make the heal item grey and used looking&lt;br /&gt;
                llSetTimerEvent(RESPAWN_TIME); // set a timer to respawn this heal item after a while&lt;br /&gt;
                RESPAWN_FLAG=FALSE; // set a flag so the heal can&#039;t be reused until it respawns&lt;br /&gt;
                return; // collision is done, let&#039;s exit after healing first avatar found in collisions&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // TOUCH_START EVENT - when player clicks heal, see if they are close enough&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    touch_start(integer touches) {        &lt;br /&gt;
        while (touches--) { // count down through all touches in this touch-start event&lt;br /&gt;
            if ( RESPAWN_FLAG == FALSE ) { // this heal has been used recently and has not respawned&lt;br /&gt;
                return; // so exit early since we&#039;re not healing anyone right now&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            key who2 = llDetectedKey(touches); // who clicked us, we don&#039;t check for avatar since objects can&#039;t click&lt;br /&gt;
            // find the current location of what clicked us&lt;br /&gt;
            vector whopos = llList2Vector(llGetObjectDetails(who2,[OBJECT_POS]),0);&lt;br /&gt;
&lt;br /&gt;
            if ( llVecDist(whopos,llGetPos()) &amp;lt;= TOUCH_RANGE ) { // check distance between heal item and whoever clicked&lt;br /&gt;
                // calculate CHANPLAYER dynamic player channel to send healing message to&lt;br /&gt;
                integer chanplayer2 = (integer)(&amp;quot;0x&amp;quot; + llGetSubString((string)who2,0,6));&lt;br /&gt;
                if ( HEALALL == TRUE ) { // are we healing all damage?&lt;br /&gt;
                    llRegionSay(CHANMYRIAD,llKey2Name(who2)+&amp;quot; is fully healed!&amp;quot;); // tell region someone is healing&lt;br /&gt;
                    llWhisper(chanplayer2,&amp;quot;HEALFULL&amp;quot;); // heal all damage&lt;br /&gt;
                } else {&lt;br /&gt;
                    llRegionSay(CHANMYRIAD,llKey2Name(who2)+&amp;quot; is partially healed!&amp;quot;); // tell region someone is healing&lt;br /&gt;
                    llWhisper(chanplayer2,&amp;quot;HEALPARTIAL&amp;quot;+DIV+(string)HEALAMOUNT); // heal some damage&lt;br /&gt;
                }&lt;br /&gt;
                llSetLinkColor(LINK_SET,&amp;lt;.5,.5,.5&amp;gt;,ALL_SIDES); // make the heal item grey and unused looking&lt;br /&gt;
                llSetTimerEvent(RESPAWN_TIME); // set a timer to respawn this heal item after a while&lt;br /&gt;
                RESPAWN_FLAG=FALSE; // set a flag so the heal can&#039;t be reused until it respawns&lt;br /&gt;
                return; // touch is done, let&#039;s exit after healing first avatar found in clicks&lt;br /&gt;
            }&lt;br /&gt;
        } // end while&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // TIMER EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    timer() {&lt;br /&gt;
        llSetLinkColor(LINK_SET,&amp;lt;1,0,0&amp;gt;,ALL_SIDES); // set color to red again to show this can be used&lt;br /&gt;
        RESPAWN_FLAG=TRUE; // set a flag to all the next heal attempt to work&lt;br /&gt;
        llSetTimerEvent(0.0); // stop the timers until the next heal event starts a new one&lt;br /&gt;
    }&lt;br /&gt;
} // end default&lt;br /&gt;
//============================================================================&lt;br /&gt;
// END&lt;br /&gt;
//============================================================================&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Firearm_v1.4_20110903&amp;diff=1153246</id>
		<title>User:Allen Kerensky/Myriad Lite Preview4/Myriad Lite Firearm v1.4 20110903</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Firearm_v1.4_20110903&amp;diff=1153246"/>
		<updated>2011-09-08T15:32:14Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Header}}&lt;br /&gt;
= Myriad Lite Firearm v1.4 20110903 =&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Myriad Lite Firearm v1.4 20110903&lt;br /&gt;
// Copyright (c) 2011 By Allen Kerensky (OSG/SL)&lt;br /&gt;
// The Myriad RPG System was designed, written, and illustrated by Ashok Desai&lt;br /&gt;
// Myriad is published under a:&lt;br /&gt;
// Creative Commons License (Attribution 2.0 UK: England and Wales)&lt;br /&gt;
// Myriad Lite Firearm is published under a:&lt;br /&gt;
// Creative Commons License Attribution-NonCommercial-ShareAlike 3.0 Unported&lt;br /&gt;
//----------------------------------------------------------------------------&lt;br /&gt;
// Based on phillip linden (SL) gunscript&lt;br /&gt;
// With many refinements by Rhonin Nissondorf (SL)&lt;br /&gt;
// Retrieved 2011-04-30 from http://wiki.secondlife.com/wiki/Gun_Script&lt;br /&gt;
// Copyright (c) 2009 Linden Research, Inc.&lt;br /&gt;
// Licensed under Creative Commons Attribution-Share Alike 3.0 (CC-BY-SA 3.0)&lt;br /&gt;
// Converted to OSSL by Allen Kerensky (SL/OSG).&lt;br /&gt;
//===========================================================================&lt;br /&gt;
&lt;br /&gt;
//===========================================================================&lt;br /&gt;
// MESSAGE FORMAT REFERENCE&lt;br /&gt;
//===========================================================================&lt;br /&gt;
// CHANMYRIAD OUT - RPEVENT|str event_message&lt;br /&gt;
// CHANATTACH IN - REGISTERATTACHMENTS&lt;br /&gt;
// CHANATTACH OUT - ATTACHRANGED|int damagedice|int attachpoint|str attachmentname&lt;br /&gt;
// CHANATTACH OUT - DETACHRANGED|int damagedice|int attachpoint|str attachmentname&lt;br /&gt;
&lt;br /&gt;
//===========================================================================&lt;br /&gt;
// GLOBAL VARIABLES - variables to be changed  below.&lt;br /&gt;
//===========================================================================&lt;br /&gt;
float BULLET_VELOCITY = 30.0;                       // change this to change the speed of the bullet.&lt;br /&gt;
float REPEAT_DELAY = 0.20;                          // delay between bullets, i recommend you dont&#039; set it to  low.&lt;br /&gt;
string gunsound = &amp;quot;pistol_shot.wav&amp;quot;;                            // string; name of sound in inventory&lt;br /&gt;
string ammo =  &amp;quot;Myriad Lite Bullet v0.0.3 20110813&amp;quot;; //name of desired object to be shot out. Must be in the inventory of the &amp;quot;gun&amp;quot;.&lt;br /&gt;
integer ATTACH_HAND = 6;                            // left hand = 5, right hand = 6&lt;br /&gt;
string SAFETY_OFF_MESSAGE = &amp;quot;The safety is now OFF.&amp;quot;; //message when you touch it.&lt;br /&gt;
string SAFETY_ON_MESSAGE = &amp;quot;The safety is now ON.&amp;quot;;        // a message when you... &lt;br /&gt;
string NOT_OWNER = &amp;quot;You are not the owner of this weapon.&amp;quot;; //message when non-owner touches it - assumes a sci-fi-like grip with owner ID&lt;br /&gt;
string ANIM_HOLD = &amp;quot;hold_R_handgun&amp;quot;;                // animation to use when holding pistol&lt;br /&gt;
string ANIM_AIM  = &amp;quot;PistolRightSteady1&amp;quot;;            // animation to use when aiming in mouselook&lt;br /&gt;
float  TIMER_RES = 0.5;                             // time in seconds to check for mouselook to start aim animation, like an AO&lt;br /&gt;
integer AVSTATE  = 0;                               // is av in mouselook?&lt;br /&gt;
vector OFFSET = &amp;lt;1.10, -0.25, 0.75&amp;gt;;                // rez offset for bullet&lt;br /&gt;
vector OFFSET_LEFT  = &amp;lt;1.10,  0.25, 0.75&amp;gt;;                // rez offset for bullet&lt;br /&gt;
vector OFFSET_RIGHT = &amp;lt;1.10, -0.25, 0.75&amp;gt;;                // rez offset for bullet&lt;br /&gt;
integer CHANMYRIAD = -999;                      // regionwide RPEVENT channel for Myriad&lt;br /&gt;
string DIV = &amp;quot;|&amp;quot;;                               // field divider between parts of Myriad messages&lt;br /&gt;
// Myriad Ranged Weapons Damage Dice, PDF page 64, Myriad Special Edition page 98&lt;br /&gt;
// 1 die of damage = small stones thrown by hand (or in crude sling)&lt;br /&gt;
// 2 die of damage = throwing knife, derringer, hand catapult, thrown house brick&lt;br /&gt;
// 3 die of damage = throwing axe, pistol, hunting rifle, automatic pistol (full auto)&lt;br /&gt;
// 4 die of damage = very heavy pistol (Magnum), assault rifle (full auto), shotgun&lt;br /&gt;
// 5 die of damage = high velocity sniper rifle, heavy calibre machine gun (full auto)&lt;br /&gt;
integer DAMAGEDICE = 3;                             // many damage dice does this bullet do in Myriad? default to pistol here&lt;br /&gt;
integer MAXAMMO = 30; // 30 round clip&lt;br /&gt;
&lt;br /&gt;
//===========================================================================&lt;br /&gt;
// GLOBAL RUNTIMES - runtime variables we change as we go&lt;br /&gt;
// Don&#039;t alter anything below if your not  familiar with it.&lt;br /&gt;
//===========================================================================&lt;br /&gt;
integer SAFETY_ON = TRUE;  // is this weapon safety on or off by default?&lt;br /&gt;
vector pos;         // holds our current position temporarily  &lt;br /&gt;
rotation rot;       // holds our current rotation temporarily&lt;br /&gt;
vector offset;      // holds an offset to where to rez the bullet based on position and rotation   &lt;br /&gt;
integer CHANATTACH = 0; // dynamic channel for attachment messages&lt;br /&gt;
integer HANDATTACH = 0; // chat channel handle for attachment dynamic channel&lt;br /&gt;
integer AMMOLEFT; // how much ammo is left?&lt;br /&gt;
&lt;br /&gt;
//===========================================================================&lt;br /&gt;
// GLOBAL SETUP&lt;br /&gt;
//===========================================================================&lt;br /&gt;
SETUP() {&lt;br /&gt;
    CHANATTACH = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)llGetOwner(),1,7)); // calculate the dynamic attachment channel&lt;br /&gt;
    HANDATTACH = llListen(CHANATTACH,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;); // start a listener on the attachment channel&lt;br /&gt;
    llWhisper(CHANATTACH,&amp;quot;ATTACHRANGED&amp;quot;+DIV+(string)DAMAGEDICE+DIV+(string)llGetAttached()+DIV+llGetObjectName()); // inform the player HUD that we&#039;re using a weapon to turn off fist fighter&lt;br /&gt;
    llOwnerSay(&amp;quot;Attach me to your right hand, and enter mouselook to fire!&amp;quot;);    &lt;br /&gt;
    // ask for permission to trigger animations, take controls, and attach to avatar&lt;br /&gt;
    llRequestPermissions(llGetOwner(),PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS|PERMISSION_ATTACH);&lt;br /&gt;
    llPreloadSound(gunsound); // try pre-loading the gunsound for everyone around&lt;br /&gt;
    if ( SAFETY_ON == TRUE ) { // lets tell owner the state of the safety&lt;br /&gt;
        if ( llGetAttached() == 5 ) HOLSTER(&amp;quot;left&amp;quot;); // safety on? start holstered&lt;br /&gt;
        if ( llGetAttached() == 6 ) HOLSTER(&amp;quot;right&amp;quot;); // safety on? start holstered&lt;br /&gt;
    } else { // safety is not on&lt;br /&gt;
        if ( llGetAttached() == 5 ) DRAW(&amp;quot;left&amp;quot;); // safety off! start drawn&lt;br /&gt;
        if ( llGetAttached() == 6 ) DRAW(&amp;quot;right&amp;quot;); // safety off! start drawn&lt;br /&gt;
    }&lt;br /&gt;
    RELOAD(); // start the weapon with a full clip&lt;br /&gt;
    llSetTimerEvent(TIMER_RES); // start a timer running to check for mouselook and start aim animations or not&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// SAFETY OFF - turn off safety and enable firing&lt;br /&gt;
SAFETYOFF() {&lt;br /&gt;
    SAFETY_ON = FALSE; // switch the safety off&lt;br /&gt;
    llOwnerSay(SAFETY_OFF_MESSAGE); // and tell them&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// SAFETY ON - turn on safety&lt;br /&gt;
SAFETYON() {&lt;br /&gt;
    SAFETY_ON = TRUE; // switch the safety on&lt;br /&gt;
    llOwnerSay(SAFETY_ON_MESSAGE); // and tell them    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// DRAW THE WEAPON&lt;br /&gt;
DRAW(string hand) {&lt;br /&gt;
    // draw code goes here - turn copy in hand visible?&lt;br /&gt;
    if ( llGetAttached() == 5 &amp;amp;&amp;amp; ( hand == &amp;quot;left&amp;quot; || hand == &amp;quot;both&amp;quot; ) ) {&lt;br /&gt;
        llRegionSay(CHANMYRIAD,llKey2Name(llGetOwner())+&amp;quot; draws a weapon with their left hand.&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Left hand weapon drawn.&amp;quot;);&lt;br /&gt;
        llSetLinkAlpha(LINK_SET,1.0,ALL_SIDES);        &lt;br /&gt;
    }&lt;br /&gt;
    if ( llGetAttached() == 6 &amp;amp;&amp;amp; ( hand == &amp;quot;right&amp;quot; || hand == &amp;quot;both&amp;quot; ) ) {&lt;br /&gt;
        llRegionSay(CHANMYRIAD,llKey2Name(llGetOwner())+&amp;quot; draws a weapon with their right hand.&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Right hand weapon drawn.&amp;quot;);&lt;br /&gt;
        llSetLinkAlpha(LINK_SET,1.0,ALL_SIDES);        &lt;br /&gt;
    }&lt;br /&gt;
    SAFETYOFF(); // unholster and turn off safety&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// HOLSTER THE WEAPON&lt;br /&gt;
HOLSTER(string hand) {&lt;br /&gt;
    // holster code goes here - turn copy in hand invisible?&lt;br /&gt;
    if ( llGetAttached() == 5 &amp;amp;&amp;amp; ( hand == &amp;quot;left&amp;quot; || hand == &amp;quot;both&amp;quot; ) ) {&lt;br /&gt;
        llRegionSay(CHANMYRIAD,llKey2Name(llGetOwner())+&amp;quot; holsters their left-hand weapon.&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Left hand weapon holstered.&amp;quot;);&lt;br /&gt;
        llSetLinkAlpha(LINK_SET,0.0,ALL_SIDES);        &lt;br /&gt;
    }&lt;br /&gt;
    if ( llGetAttached() == 6 &amp;amp;&amp;amp; ( hand == &amp;quot;right&amp;quot; || hand == &amp;quot;both&amp;quot; ) ) {&lt;br /&gt;
        llRegionSay(CHANMYRIAD,llKey2Name(llGetOwner())+&amp;quot; holsters their right-hand weapon.&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Right hand weapon holstered.&amp;quot;);&lt;br /&gt;
        llSetLinkAlpha(LINK_SET,0.0,ALL_SIDES);        &lt;br /&gt;
    }&lt;br /&gt;
    SAFETYON(); // turn on safety before holstering&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// RELOAD THE WEAPON&lt;br /&gt;
RELOAD() {&lt;br /&gt;
    AMMOLEFT = MAXAMMO;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// CHECK AMMO LEFT&lt;br /&gt;
CHECKAMMO() {&lt;br /&gt;
    if ( AMMOLEFT &amp;gt; MAXAMMO ) { AMMOLEFT = MAXAMMO; } // don&#039;t overflow clip&lt;br /&gt;
    if ( AMMOLEFT &amp;lt; 0 ) { AMMOLEFT = 0; } // can&#039;t have negative bullets&lt;br /&gt;
    llOwnerSay(&amp;quot;Ammo remaining: &amp;quot;+(string)AMMOLEFT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//===========================================================================&lt;br /&gt;
// STATE DEFAULT - the main state is the default state.&lt;br /&gt;
// When a script is compiled, reset or loaded, this is the state it enters by default.&lt;br /&gt;
//===========================================================================&lt;br /&gt;
default {&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    // STATE_ENTRY EVENT - Triggered on any state transition and start up&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        SETUP(); // call global setup&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    // ON_REZ EVENT - Triggered when object attached or rezzed on the ground&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    on_rez(integer rezparams) {&lt;br /&gt;
        SETUP();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    // ATTACH EVENT - when the object is attached or detached&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        if ( id == NULL_KEY) { // if id is null key, this is a detach event&lt;br /&gt;
            llRegionSay(CHANMYRIAD,&amp;quot;RPEVENT&amp;quot;+DIV+llKey2Name(llGetOwner())+ &amp;quot; puts away their &amp;quot;+llGetObjectName());&lt;br /&gt;
            llWhisper(CHANATTACH,&amp;quot;DETACHRANGED&amp;quot;+DIV+(string)DAMAGEDICE+DIV+(string)llGetAttached()+DIV+llGetObjectName()); // inform the player HUD that we&#039;re using a weapon to turn on fist fighter&lt;br /&gt;
            integer perms = llGetPermissions(); // what permissions does object have&lt;br /&gt;
            if ( perms &amp;amp; PERMISSION_TRIGGER_ANIMATION ) { // if object has permission to change animations&lt;br /&gt;
                llStopAnimation(ANIM_HOLD); // stop the &#039;hold a weapon&#039; animation since we&#039;re detaching&lt;br /&gt;
            }&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    // RUN_TIME_PERMISSIONS EVENT - triggered when avatar grants permissions to object&lt;br /&gt;
    // some permissions automatically granted on attach or sit - but you should STILL check correctly for those&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    run_time_permissions(integer perm) {&lt;br /&gt;
&lt;br /&gt;
        if (perm &amp;amp; PERMISSION_ATTACH ) { // was object granted permission to attach?&lt;br /&gt;
            //llAttachToAvatar(ATTACH_HAND); // attach to the given attach point, 5 = left hand, 6 = right hand&lt;br /&gt;
        }&lt;br /&gt;
        if ( perm &amp;amp; PERMISSION_TAKE_CONTROLS ) { // was object granted permission to read control events?&lt;br /&gt;
            llTakeControls(CONTROL_ML_LBUTTON, TRUE, FALSE); // start reading the left mouse button in mouselook mode&lt;br /&gt;
        }&lt;br /&gt;
        if ( perm &amp;amp; PERMISSION_TRIGGER_ANIMATION ) { // was object granted permission to trigger animations?&lt;br /&gt;
            llStartAnimation(ANIM_HOLD); // start the &#039;hold a weapon&#039; animation&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    // TOUCH_START EVENT - trigger at the start of someone clicking on the object&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    touch_start(integer touches) {  // Triggered by the start of agent clicking on object&lt;br /&gt;
        while (touches--) { // count down through each touch event&lt;br /&gt;
            key who = llDetectedKey(touches); // get the key of who triggered the touch&lt;br /&gt;
            if ( llGetOwner() != who ) { // if not the owner&lt;br /&gt;
                llInstantMessage(who,NOT_OWNER); // tell them&lt;br /&gt;
            } if ( SAFETY_ON == TRUE ) { // lets tell owner the state of the safety&lt;br /&gt;
                SAFETY_ON = FALSE;&lt;br /&gt;
                if ( llGetAttached() == 5 ) DRAW(&amp;quot;left&amp;quot;); // safety off! start drawn&lt;br /&gt;
                if ( llGetAttached() == 6 ) DRAW(&amp;quot;right&amp;quot;); // safety off! start drawn&lt;br /&gt;
            } else if (SAFETY_ON == FALSE ) { // safety is not on&lt;br /&gt;
                SAFETY_ON = TRUE;&lt;br /&gt;
                if ( llGetAttached() == 5 ) HOLSTER(&amp;quot;left&amp;quot;); // safety on? start holstered&lt;br /&gt;
                if ( llGetAttached() == 6 ) HOLSTER(&amp;quot;right&amp;quot;); // safety on? start holstered&lt;br /&gt;
            }&lt;br /&gt;
        } // end while&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    // CHANGED EVENT - various changes to object can trigger this event&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    changed(integer change) {&lt;br /&gt;
        if(change &amp;amp; CHANGED_OWNER) { // did the object change owner through a give or drop/take?&lt;br /&gt;
            integer perms = llGetPermissions(); // what permissions does object have?&lt;br /&gt;
            if ( perms &amp;amp; PERMISSION_TRIGGER_ANIMATION ) { // if object has permission to change animations&lt;br /&gt;
                llStopAnimation(ANIM_HOLD); // stop the &#039;hold a weapon&#039; animation&#039;&lt;br /&gt;
            }&lt;br /&gt;
            llResetScript(); // and reset the entire script&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    // EVENT CONTROL - called for user input we&#039;ve requested with LLTAKECONTROLS&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    control(key owner, integer level, integer edge) {&lt;br /&gt;
        if ( SAFETY_ON == TRUE ) { // check the safety before shooting&lt;br /&gt;
            llOwnerSay(&amp;quot;The safety is ON.&amp;quot;); // warn owner they are shooting with safety on&lt;br /&gt;
            return; // return now to prevent running the rest of the shooting code&lt;br /&gt;
        }&lt;br /&gt;
        integer pressed = level &amp;amp; edge; // level is when you click ,edge would be if you let up.&lt;br /&gt;
        if ( pressed &amp;amp; CONTROL_ML_LBUTTON ) { // if left mouse button was pressed in MouseLook mode&lt;br /&gt;
            if ( AMMOLEFT &amp;lt;= 0 ) { &lt;br /&gt;
                llOwnerSay(&amp;quot;Out of ammo! Reload!&amp;quot;);&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            // Fire 1 bullet,,  the heart of the firearm script.&lt;br /&gt;
            pos = llGetPos(); // get our current position&lt;br /&gt;
            rot = llGetRot(); // get our current rotation&lt;br /&gt;
            offset = OFFSET; // start with the base offset for the gun held in the right hand&lt;br /&gt;
            if ( ATTACH_HAND == 5 ) { // is weapon in left hand?&lt;br /&gt;
                offset = OFFSET_LEFT; // use the left-hand offset&lt;br /&gt;
            }&lt;br /&gt;
            if ( ATTACH_HAND == 6 ) { // is weapon in right hand?&lt;br /&gt;
                offset = OFFSET_RIGHT; // use the right hand offset&lt;br /&gt;
            }&lt;br /&gt;
            offset *= rot; // now, rotate the offset to match the avatar rotation&lt;br /&gt;
            pos += offset; // now combine the rotated offset with avatar position &lt;br /&gt;
            vector fwd = llRot2Fwd(rot); // calculate the direction that is &amp;quot;avatar&#039;s facing&amp;quot; &lt;br /&gt;
            fwd *= BULLET_VELOCITY; // now multiply that by bullet speed to tell bullet to push in that direction, that fast&lt;br /&gt;
            rot *= llEuler2Rot(&amp;lt;0, PI_BY_TWO, 0&amp;gt;); // now, straighten rotation for object we&#039;re about to rez&lt;br /&gt;
            llPlaySound(gunsound,1.0); // here &amp;quot;gunsound&amp;quot;is a variable defined above.&lt;br /&gt;
            // DAMAGEDICE is passed to rez-param of bullet. Myriad Bullets read this as damage dice to do if they hit&lt;br /&gt;
            AMMOLEFT--;&lt;br /&gt;
            llRezObject(ammo, pos, fwd, rot, DAMAGEDICE); // does the actual work rezzes the ammo in the specified variables.&lt;br /&gt;
            llSleep(REPEAT_DELAY); // force a pause between shots&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    // LISTEN EVENT - listen for whisper, say, shout, regionsay messages&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    listen(integer channel, string name, key uuid, string message) {&lt;br /&gt;
        if ( channel == CHANATTACH ) { // did message come in on attachment channel?&lt;br /&gt;
            if ( message == &amp;quot;REGISTERATTACHMENTS&amp;quot; ) { // request from a HUD to register attachments already in use&lt;br /&gt;
                llWhisper(CHANATTACH,&amp;quot;ATTACHRANGED&amp;quot;+DIV+(string)DAMAGEDICE+DIV+(string)llGetAttached()+DIV+llGetObjectName()); // inform the player HUD that we&#039;re using a weapon to turn off fist fighter&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if ( message == &amp;quot;DRAWLEFT&amp;quot; ) { DRAW(&amp;quot;left&amp;quot;); return;} // draw pistol if in left hand&lt;br /&gt;
            if ( message == &amp;quot;DRAWRIGHT&amp;quot; ) { DRAW(&amp;quot;right&amp;quot;); return;} // draw pistol in right hand&lt;br /&gt;
            if ( message == &amp;quot;DRAWBOTH&amp;quot; ) { DRAW(&amp;quot;both&amp;quot;); return; } // draw pistols in both hands&lt;br /&gt;
            if ( message == &amp;quot;HOLSTERLEFT&amp;quot; ) { HOLSTER(&amp;quot;left&amp;quot;); return;} // holster left-hand pistol&lt;br /&gt;
            if ( message == &amp;quot;HOLSTERRIGHT&amp;quot; ) { HOLSTER(&amp;quot;right&amp;quot;); return;} // holster right-hand pistol&lt;br /&gt;
            if ( message == &amp;quot;HOLSTERBOTH&amp;quot; ) { HOLSTER(&amp;quot;both&amp;quot;); return; } // holster both pistols&lt;br /&gt;
            if ( message == &amp;quot;SAFETYOFF&amp;quot; ) { SAFETYOFF(); return; } // unsafe the weapon&lt;br /&gt;
            if ( message == &amp;quot;SAFETYON&amp;quot; ) { SAFETYON(); return; } // safe the weapon&lt;br /&gt;
            if ( message == &amp;quot;CHECKAMMO&amp;quot; ) { CHECKAMMO(); return; } // check ammo left&lt;br /&gt;
            if ( message == &amp;quot;RELOAD&amp;quot; ) { RELOAD(); return; } // reload the clip            &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    // TIMER EVENT - called regularly as an animation override for holding or aiming weapon&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    timer() {&lt;br /&gt;
        if ( SAFETY_ON == TRUE ) return; // if safety is on, don&#039;t need to do weapon hold and aim animation&lt;br /&gt;
        AVSTATE = llGetAgentInfo(llGetOwner()); // get an integer that holds the current state of the avatar to see if they are in mouselook or not&lt;br /&gt;
        if ( AVSTATE &amp;amp; 0x0008 ) { // 0x0008 = AGENT_MOUSELOOK constant - this hack needed on OpenSim&lt;br /&gt;
            llStopAnimation(ANIM_HOLD); // stop the &#039;just hold a weapon&#039; animation&lt;br /&gt;
            llSleep(0.05); // wait a little&lt;br /&gt;
            llStartAnimation(ANIM_AIM); // start the aiming weapon animation&lt;br /&gt;
        } else { // avatar is not in mouselook&lt;br /&gt;
            llStopAnimation(ANIM_AIM); // stop the aiming animation&lt;br /&gt;
            llSleep(0.05); // wait a little&lt;br /&gt;
            llStartAnimation(ANIM_HOLD); // now start the just holding a weapon animation&lt;br /&gt;
        }&lt;br /&gt;
        AVSTATE = 0; // clean up or reset the avatar state variable&lt;br /&gt;
    }&lt;br /&gt;
} // end of default&lt;br /&gt;
//============================================================================&lt;br /&gt;
// END&lt;br /&gt;
//============================================================================&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Bullet_v0.0.3_20110813&amp;diff=1153245</id>
		<title>User:Allen Kerensky/Myriad Lite Preview4/Myriad Lite Bullet v0.0.3 20110813</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Bullet_v0.0.3_20110813&amp;diff=1153245"/>
		<updated>2011-09-08T15:31:05Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Header}}&lt;br /&gt;
= Myriad Lite Bullet v0.0.3 20110813 =&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Myriad Lite Bullet v0.0.3 20110813&lt;br /&gt;
// Copyright (c) 2011 By Allen Kerensky (OSG/SL)&lt;br /&gt;
// The Myriad RPG System was designed, written, and illustrated by Ashok Desai&lt;br /&gt;
// Myriad is published under a:&lt;br /&gt;
// Creative Commons License (Attribution 2.0 UK: England and Wales)&lt;br /&gt;
// Myriad Lite Bullet is published under a:&lt;br /&gt;
// Creative Commons License Attribution-NonCommercial-ShareAlike 3.0 Unported&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Davada Gallant (John Girard), WWIIOLers&lt;br /&gt;
// Retrieved 2011-04-30 from http://wiki.secondlife.com/wiki/Bullet&lt;br /&gt;
// Copyright (c) 2009 Linden Research, Inc. Licensed under Creative Commons Attribution-Share Alike 3.0 (CC-BY-SA 3.0)&lt;br /&gt;
// Adapted to OSSL by Allen Kerensky (SL/OSG)&lt;br /&gt;
// Includes Keknehv&#039;s Particle Script v1.2&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// MESSAGE FORMAT REFERENCE&lt;br /&gt;
//============================================================================&lt;br /&gt;
// CHANMYRIAD IN - RPEVENT|str event message&lt;br /&gt;
// CHANPLAYER OUT - DEPRECATED - TOHIT|str attackdice|key who/whatwashit|key bulletowner|str bulletname&lt;br /&gt;
// CHANPLAYER OUT - RANGEDCOMBAT|str attackdice|key who/whatwashit|key bulletowner|str bulletname&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Bullet Configuration&lt;br /&gt;
//============================================================================&lt;br /&gt;
string RICOCHET = &amp;quot;nebs_smoke_particle_01&amp;quot;;  // puff-of-smoke texture to show on bullet hits/ricochets - put this texture in bullet prim&lt;br /&gt;
float  BOUYANCY = 1.0;      // how buoyant is the bullet for physics&lt;br /&gt;
float  TIMEOUT  = 20.0;     // control timer to force bullet to die&lt;br /&gt;
&lt;br /&gt;
// Myriad config&lt;br /&gt;
integer MINDAMAGE = 1; // minimum valid damage value for weapon&lt;br /&gt;
integer MAXDAMAGE = 5; // maximum valid damage value for weapon&lt;br /&gt;
integer DAMAGE = 1; // default how much damage do you want this weapon to cause? can be overriden on rez!&lt;br /&gt;
string DIV = &amp;quot;|&amp;quot;; // divider between parts of Myriad API messages&lt;br /&gt;
integer CHANMYRIAD = -999; // channel to send Myriad RP events to&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL SETUP()&lt;br /&gt;
//============================================================================&lt;br /&gt;
SETUP(integer type) {&lt;br /&gt;
    if ( llGetStatus(STATUS_PHYSICS) == FALSE ) { // is the bullet a physics object?&lt;br /&gt;
        llSetStatus(STATUS_PHYSICS, TRUE); // if not, make it one&lt;br /&gt;
    }&lt;br /&gt;
    llSetStatus(STATUS_DIE_AT_EDGE, TRUE); // set bullet to die if it crosses a region edge&lt;br /&gt;
    llSetPrimitiveParams([PRIM_TEMP_ON_REZ,TRUE]); // set bullet to be temp-on-rez to cleanup and not count against prim limits&lt;br /&gt;
    llSetBuoyancy(BOUYANCY); // make bullet float so it flies&lt;br /&gt;
    if ( type &amp;gt;= MINDAMAGE &amp;amp;&amp;amp; type &amp;lt;= MAXDAMAGE ) { // is the damage value passed on rez valid?&lt;br /&gt;
        DAMAGE = type; // yes it is, override bullet default&lt;br /&gt;
    }&lt;br /&gt;
    llSetDamage((float)DAMAGE); // set the Linden Lab Combat System damage value to the same as Myriad damage class&lt;br /&gt;
    llSetTimerEvent(TIMEOUT); // start the timeout timer to try to force bullet to die too&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Keknehv&#039;s Particle Script v1.2&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Retrieved 2011-04-30 from http://lslwiki.net/lslwiki/wakka.php?wakka=LibraryKeknehvParticles&lt;br /&gt;
// 1.0 -- 5/30/05&lt;br /&gt;
// 1.1 -- 6/17/05&lt;br /&gt;
// 1.2 -- 9/22/05 (Forgot PSYS_SRC_MAX_AGE)&lt;br /&gt;
//     This script may be used in anything you choose, including and not limited to commercial products. &lt;br /&gt;
//     Just copy the MakeParticles() function; it will function without any other variables in a different script&lt;br /&gt;
//         ( You can, of course, rename MakeParticles() to something else, such as StartFlames() )&lt;br /&gt;
MAKEPARTICLES(string texture) {&lt;br /&gt;
    if ( texture == &amp;quot;&amp;quot; || texture == NULL_KEY ) { // no texture set, no reason to show particles&lt;br /&gt;
        llParticleSystem([ ]); // shut off any particles that were somehow running&lt;br /&gt;
        return; // exit early since we&#039;re not going to show more particles without a texture to show&lt;br /&gt;
    }&lt;br /&gt;
    // This is the function that actually starts the particle system.    &lt;br /&gt;
    llParticleSystem([                   //KPSv1.0  &lt;br /&gt;
    PSYS_PART_FLAGS , 0 //Comment out any of the following masks to deactivate them&lt;br /&gt;
    //| PSYS_PART_BOUNCE_MASK           //Bounce on object&#039;s z-axis&lt;br /&gt;
    | PSYS_PART_WIND_MASK             //Particles are moved by wind&lt;br /&gt;
    | PSYS_PART_INTERP_COLOR_MASK       //Colors fade from start to end&lt;br /&gt;
    | PSYS_PART_INTERP_SCALE_MASK       //Scale fades from beginning to end&lt;br /&gt;
    //| PSYS_PART_FOLLOW_SRC_MASK         //Particles follow the emitter&lt;br /&gt;
    //| PSYS_PART_FOLLOW_VELOCITY_MASK    //Particles are created at the velocity of the emitter&lt;br /&gt;
    //| PSYS_PART_TARGET_POS_MASK       //Particles follow the target&lt;br /&gt;
    | PSYS_PART_EMISSIVE_MASK           //Particles are self-lit (glow)&lt;br /&gt;
    //| PSYS_PART_TARGET_LINEAR_MASK    //Undocumented--Sends particles in straight line?&lt;br /&gt;
    //,PSYS_SRC_TARGET_KEY , NULL_KEY,   //Key of the target for the particles to head towards&lt;br /&gt;
    //Choose one of these as a pattern:&lt;br /&gt;
    //PSYS_SRC_PATTERN_DROP                 Particles start at emitter with no velocity&lt;br /&gt;
    //PSYS_SRC_PATTERN_EXPLODE              Particles explode from the emitter&lt;br /&gt;
    //PSYS_SRC_PATTERN_ANGLE                Particles are emitted in a 2-D angle&lt;br /&gt;
    //PSYS_SRC_PATTERN_ANGLE_CONE           Particles are emitted in a 3-D cone&lt;br /&gt;
    //PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY     Particles are emitted everywhere except for a 3-D cone&lt;br /&gt;
    ,PSYS_SRC_PATTERN,           PSYS_SRC_PATTERN_EXPLODE&lt;br /&gt;
    ,PSYS_SRC_TEXTURE,           texture            //UUID of the desired particle texture, or inventory name&lt;br /&gt;
    ,PSYS_SRC_MAX_AGE,           1.0                //Time, in seconds, for particles to be emitted. 0 = forever&lt;br /&gt;
    ,PSYS_PART_MAX_AGE,          5.0                //Lifetime, in seconds, that a particle lasts&lt;br /&gt;
    ,PSYS_SRC_BURST_RATE,        0.02               //How long, in seconds, between each emission&lt;br /&gt;
    ,PSYS_SRC_BURST_PART_COUNT,  1                  //Number of particles per emission&lt;br /&gt;
    ,PSYS_SRC_BURST_RADIUS,      0.01                //Radius of emission&lt;br /&gt;
    ,PSYS_SRC_BURST_SPEED_MIN,   0.01                //Minimum speed of an emitted particle&lt;br /&gt;
    ,PSYS_SRC_BURST_SPEED_MAX,   1.0                //Maximum speed of an emitted particle&lt;br /&gt;
    ,PSYS_SRC_ACCEL,             &amp;lt;0.05,0.05,0.05&amp;gt;     //Acceleration of particles each second&lt;br /&gt;
    ,PSYS_PART_START_COLOR,      &amp;lt;1.0,1.0,1.0&amp;gt;      //Starting RGB color&lt;br /&gt;
    ,PSYS_PART_END_COLOR,        &amp;lt;0.5,0.5,0.5&amp;gt;      //Ending RGB color, if INTERP_COLOR_MASK is on &lt;br /&gt;
    ,PSYS_PART_START_ALPHA,      0.9                //Starting transparency, 1 is opaque, 0 is transparent.&lt;br /&gt;
    ,PSYS_PART_END_ALPHA,        0.0                //Ending transparency&lt;br /&gt;
    ,PSYS_PART_START_SCALE,      &amp;lt;0.5,0.5,0.0&amp;gt;      //Starting particle size&lt;br /&gt;
    ,PSYS_PART_END_SCALE,        &amp;lt;1.0,1.0,0.0&amp;gt;      //Ending particle size, if INTERP_SCALE_MASK is on&lt;br /&gt;
    ,PSYS_SRC_ANGLE_BEGIN,       PI                 //Inner angle for ANGLE patterns&lt;br /&gt;
    ,PSYS_SRC_ANGLE_END,         PI                 //Outer angle for ANGLE patterns&lt;br /&gt;
    ,PSYS_SRC_OMEGA,             &amp;lt;0.0,0.0,0.0&amp;gt;       //Rotation of ANGLE patterns, similar to llTargetOmega()&lt;br /&gt;
    ]);&lt;br /&gt;
}&lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL DIE()&lt;br /&gt;
// This kludge is to try very hard to force bullets to eventually die on OpenSims.&lt;br /&gt;
// Requested by Lani Global (OSgrid)&lt;br /&gt;
//============================================================================&lt;br /&gt;
DIE() {&lt;br /&gt;
    while ( TRUE == TRUE ) { // this will always be true, forming an infinite loop&lt;br /&gt;
        llDie(); // just keep trying to die, forever... one will eventually work!&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// STATE DEFAULT - where the program starts&lt;br /&gt;
//============================================================================&lt;br /&gt;
default {&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // STATE_ENTRY - called if bullet rezzed onto the ground&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        SETUP(DAMAGE); // sets default damage value - may be overridden on rez&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // ON_REZ - called when bullet is rezzed by firearm&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    on_rez(integer start_param) {&lt;br /&gt;
        SETUP(start_param); // pass any start param to setup as a request to set a custom damage value, if valid, it will be used&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // COLLISION_START - we just hit an object or avatar&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    collision_start(integer collisions) {&lt;br /&gt;
        while(collisions--) { // step through each collision event counting down&lt;br /&gt;
            // calculate the dynamic channel of who/what we hit&lt;br /&gt;
            integer dynchan = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)llGetOwner(),0,6));&lt;br /&gt;
            // send a ranged combat check to the HUD of the shooter&lt;br /&gt;
            // hitting with a bullet is not an automatic &amp;quot;you hit for damage&amp;quot;&lt;br /&gt;
            // instead it triggers the shooter to make a ranged combat skill check against their victim&lt;br /&gt;
            // if the skill check succeeds, THEN the shot is applied against the victim&#039;s armor &lt;br /&gt;
            llRegionSay(dynchan,&amp;quot;RANGEDCOMBAT&amp;quot;+DIV+(string)DAMAGE+DIV+(string)llDetectedKey(collisions)+DIV+(string)llGetOwner()+DIV+llGetObjectName());&lt;br /&gt;
            &lt;br /&gt;
            key who = llDetectedKey(collisions); // get the key of what or who we hit&lt;br /&gt;
            // llGetObjectDetails returns avatar key as &amp;quot;owner&amp;quot; of the avatar itself&lt;br /&gt;
            // so if key of what we hit matches owner&#039;s key, we hit an avatar themselves rather than someone&#039;s object&lt;br /&gt;
            key owner = llList2Key(llGetObjectDetails(who,[OBJECT_OWNER]),0); // get the owner of the key of what we hit&lt;br /&gt;
&lt;br /&gt;
            if ( who == owner ) { // so, did we hit an actual avatar?&lt;br /&gt;
                // yes, so as a basic anti-cheat, let&#039;s announce to the region that someone is being shot at by someone else&lt;br /&gt;
                llRegionSay(CHANMYRIAD,&amp;quot;RPEVENT&amp;quot;+DIV+llKey2Name(llGetOwner())+&amp;quot; shot at &amp;quot;+llDetectedName(collisions)+&amp;quot;!&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        // TODO Shrapnel?&lt;br /&gt;
        // TODO Through and through?&lt;br /&gt;
        MAKEPARTICLES(RICOCHET); // show the bullet impact&lt;br /&gt;
        DIE(); // jump to infinite die loop to cleanup this bullet&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // LAND_COLLISION - what to do if bullet hits the ground&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    land_collision_start( vector collisions) {&lt;br /&gt;
        MAKEPARTICLES(RICOCHET); // show the poof of smoke from the ricochet, movie style&lt;br /&gt;
        DIE(); // jump to the infinite die loop to clean up this bullet&lt;br /&gt;
    }    &lt;br /&gt;
    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // TIMER - trigger bullet to die after a given time, if all else fails&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    timer() {&lt;br /&gt;
        DIE(); // timer expired, jump to infinite die loop to cleanup this bullet&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
//============================================================================&lt;br /&gt;
// END&lt;br /&gt;
//============================================================================&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Armor_v0.0.4_20110904&amp;diff=1153244</id>
		<title>User:Allen Kerensky/Myriad Lite Preview4/Myriad Lite Armor v0.0.4 20110904</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Armor_v0.0.4_20110904&amp;diff=1153244"/>
		<updated>2011-09-08T15:30:09Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Header}}&lt;br /&gt;
= Myriad Lite Armor v0.0.4 20110904 =&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Myriad Lite Armor v0.0.4 20110904&lt;br /&gt;
// Copyright (c) 2011 By Allen Kerensky (OSG/SL)&lt;br /&gt;
// The Myriad RPG System was designed, written, and illustrated by Ashok Desai&lt;br /&gt;
// Myriad is published under a:&lt;br /&gt;
// Creative Commons License (Attribution 2.0 UK: England and Wales)&lt;br /&gt;
// Myriad Lite Armor is published under a:&lt;br /&gt;
// Creative Commons License Attribution-NonCommercial-ShareAlike 3.0 Unported&lt;br /&gt;
//============================================================================&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// MESSAGE FORMATS&lt;br /&gt;
//============================================================================&lt;br /&gt;
// CHANATTACH - IN - REGISTERATTACHMENTS&lt;br /&gt;
// CHANATTACH - OUT - ATTACHARMOR|int ARMORRATING|int ATTACHPOINT|string OBJECTNAME&lt;br /&gt;
// CHANATTACH - OUT - DETACHARMOR|int ARMORRATING|int ATTACHPOINT|string OBJECTNAME&lt;br /&gt;
// CHANATTACH - IN - ARMORHIT&lt;br /&gt;
// CHANATTACH - IN - ARMORBLOCKED&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// CONSTANTS - variables which don&#039;t change over runtime&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Example Armor (Myriad PDF p64, Myriad Special Edition p98)&lt;br /&gt;
// Archaic Armor Ratings&lt;br /&gt;
// 1 Soft leather, heavy cloth&lt;br /&gt;
// 2 Hardened leather, thick hide&lt;br /&gt;
// 3 Chain mail, dragon hide&lt;br /&gt;
// 4 Full plate mail, mithril chain&lt;br /&gt;
// 5 Mithril plate mail&lt;br /&gt;
// Modern Armor Ratings&lt;br /&gt;
// 1 Leather jacket&lt;br /&gt;
// 2 Bullet-proof vest&lt;br /&gt;
// 3 SWAT tactical armor&lt;br /&gt;
// 4 Advanced military armor&lt;br /&gt;
// 5 Sci-fi powered battle armor&lt;br /&gt;
integer ARMORRATING = 1; // the *actual* amount of protection THIS piece of armor provides&lt;br /&gt;
integer MINARMOR = 1; // the minimum amount of protection a piece of armor can offer, checked by HUD&lt;br /&gt;
integer MAXARMOR = 5; // the maximum amount of protection a piece of armor can offer, checked by HUD&lt;br /&gt;
string DIV=&amp;quot;|&amp;quot;; // the divider used between fields on a Myriad Lite messages&lt;br /&gt;
integer MINATTACHPOINT = 1; // minimum allowed attachment point number&lt;br /&gt;
integer MAXATTACHPOINT = 30; // maximum allowed avatar/inworld attachpoint number for multiattach/HUD attach cheaters&lt;br /&gt;
integer MAXEFFECTTIME = 3; // maximum time to show armor hit/blocked effects&lt;br /&gt;
integer POWERARMOR = FALSE; // does this armor burn power?&lt;br /&gt;
integer MAXBATTERY = 3600; // how many seconds can armor run before recharge?&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// RUNTIME VARIABLES - variables which should change during runtime&lt;br /&gt;
//============================================================================&lt;br /&gt;
key OWNER = NULL_KEY; // holds UUID of owner&lt;br /&gt;
key WEARER = NULL_KEY; // holds UUID of last wearer, so we can send detach message to correct meter&lt;br /&gt;
integer ATTACHPOINT = 0; // the avatar position where armor attached to or detached from&lt;br /&gt;
integer CHANOWNER; // the chat channel the owner&#039;s ML HUD should be listening on&lt;br /&gt;
integer HANDOWNER; // a chat channel handle to remove the listener with later&lt;br /&gt;
integer CHANATTACH; // owner&#039;s attachment channel&lt;br /&gt;
integer HANDATTACH; // chat handle for attachment channel&lt;br /&gt;
integer FLAG_DEBUG = FALSE; // show debug messages or not?&lt;br /&gt;
integer ARMOR_ON = TRUE; // is armor &amp;quot;on&amp;quot; and protecting?&lt;br /&gt;
integer BATTERY; // current charge left for power armor&lt;br /&gt;
integer EFFECTTIME; // how much time is left to show armor effects&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// DEBUG - show debug chat with wearer name for sorting&lt;br /&gt;
//============================================================================&lt;br /&gt;
DEBUG(string dmessage) {&lt;br /&gt;
    if ( FLAG_DEBUG == TRUE ) { // debugging?&lt;br /&gt;
        llSay(DEBUG_CHANNEL,&amp;quot;DEBUG (&amp;quot;+llKey2Name(llGetOwner())+&amp;quot;): &amp;quot;+dmessage);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// ERROR - show errors on debug channel with wearer name for sorting&lt;br /&gt;
//============================================================================&lt;br /&gt;
ERROR(string emessage) {&lt;br /&gt;
    llSay(DEBUG_CHANNEL,&amp;quot;ERROR (&amp;quot;+llKey2Name(llGetOwner())+&amp;quot;): &amp;quot;+emessage);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// EFFECTHIT() - SHOW SPECIAL ARMOR EFFECTS WHEN ARMOR HIT BUT FAILS TO BLOCK&lt;br /&gt;
//============================================================================&lt;br /&gt;
EFFECTHIT() {&lt;br /&gt;
    // your commands go here for armor special effect when armor hit and does not block&lt;br /&gt;
&lt;br /&gt;
    // end of special effects&lt;br /&gt;
    EFFECTTIME = MAXEFFECTTIME; // load the countdown&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// EFFECTBLOCKED - CHANGE ARMOR EFFECT WHEN ARMOR HIT AND BLOCKS DAMAGE&lt;br /&gt;
//============================================================================&lt;br /&gt;
EFFECTBLOCKED() {&lt;br /&gt;
    // your commands go here for armor special effect when armor BLOCKS a hit&lt;br /&gt;
        &lt;br /&gt;
    // end of special effects&lt;br /&gt;
    EFFECTTIME = MAXEFFECTTIME; // load the countdown&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// EFFECTOFF - RESET ARMOR TO NORMAL VIEW&lt;br /&gt;
//============================================================================&lt;br /&gt;
EFFECTOFF() {&lt;br /&gt;
    // your commands go here to turn off armor effects&lt;br /&gt;
&lt;br /&gt;
    // end of armor reset&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// ARMOR ON - ACTIVATE POWERED ARMOR&lt;br /&gt;
//============================================================================&lt;br /&gt;
ARMORON() {&lt;br /&gt;
    if ( POWERARMOR == TRUE &amp;amp;&amp;amp; BATTERY &amp;lt; 0 ) {&lt;br /&gt;
        llOwnerSay(&amp;quot;Armor out of power. Recharge.&amp;quot;);&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    ARMOR_ON = TRUE;&lt;br /&gt;
    // your code here&lt;br /&gt;
    llSetLinkAlpha(LINK_SET,1.0,ALL_SIDES);&lt;br /&gt;
    if ( POWERARMOR == TRUE ) llSetTimerEvent(1.0); // run a battery drain timer&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// ARMOR OFF - DEACTIVATE POWERED ARMOR&lt;br /&gt;
//============================================================================&lt;br /&gt;
ARMOROFF() {&lt;br /&gt;
    ARMOR_ON = FALSE;&lt;br /&gt;
    llOwnerSay(&amp;quot;Power armor shutting down.&amp;quot;);&lt;br /&gt;
    // your code here&lt;br /&gt;
    llSetLinkAlpha(LINK_SET,0.0,ALL_SIDES);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// CHECK BATTERY&lt;br /&gt;
//============================================================================&lt;br /&gt;
CHECKBATTERY() {&lt;br /&gt;
    llOwnerSay(&amp;quot;Armor battery level: &amp;quot;+(string)BATTERY+&amp;quot; of &amp;quot;+(string)MAXBATTERY+&amp;quot; total.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// RECHARGE POWER ARMOR BATTERY&lt;br /&gt;
//============================================================================&lt;br /&gt;
RECHARGE() {&lt;br /&gt;
    // TODO Partial Recharges?&lt;br /&gt;
    BATTERY = MAXBATTERY;&lt;br /&gt;
    llOwnerSay(&amp;quot;Armor recharged.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL SETUP()&lt;br /&gt;
//============================================================================&lt;br /&gt;
SETUP() {&lt;br /&gt;
    // calculate a dynamic chat channel based on owner key, for where the&lt;br /&gt;
    // wearer&#039;s ML HUD should be listening of attachment -specific events&lt;br /&gt;
    CHANATTACH = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)llGetOwner(),1,7));&lt;br /&gt;
    // open a channel, listening on player HUD channel, save handle for later close if needed&lt;br /&gt;
    HANDATTACH = llListen(CHANATTACH,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;);&lt;br /&gt;
    if ( POWERARMOR == TRUE ) BATTERY = MAXBATTERY; // charge the battery to full&lt;br /&gt;
    llSetLinkAlpha(LINK_SET,1.0,ALL_SIDES); // show the armor&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// DEFAULT&lt;br /&gt;
//============================================================================&lt;br /&gt;
default {&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // DEFAULT STATE ENTRY - begin our setup or call a setup block&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        SETUP(); // call the event-independent SETUP code&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // DEFAULT ON_REZ&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    on_rez(integer start_param) {&lt;br /&gt;
        SETUP(); // call event independent SETUP code        &lt;br /&gt;
    }   &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // DEFAULT ATTACH - Called for detach too&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        SETUP(); // call event-independent SETUP code&lt;br /&gt;
        // is this an attach event or detach event?&lt;br /&gt;
        if ( id != NULL_KEY ) { // a valid key means its an attach&lt;br /&gt;
            WEARER = id; // save who attached this armor piece for use during detach&lt;br /&gt;
            ATTACHPOINT = llGetAttached(); // where was this armor attached?&lt;br /&gt;
            // this should NOT be necessary, since it should match CHANPLAYER&lt;br /&gt;
            // however, armor can be dropped! So, wearer may NOT be owner. Need changed block?&lt;br /&gt;
            integer dynchan = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)WEARER,1,7));&lt;br /&gt;
            // Send ATTACHARMOR message to WEARER HUD&lt;br /&gt;
            llWhisper(dynchan,&amp;quot;ATTACHARMOR&amp;quot;+DIV+(string)ARMORRATING+DIV+(string)ATTACHPOINT+DIV+llGetObjectName());&lt;br /&gt;
        } else { // else the id equals NULL_KEY which happens for detach&lt;br /&gt;
            // calculate dynamic channel for person last wearing armor piece&lt;br /&gt;
            integer dynchan = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)WEARER,1,7));&lt;br /&gt;
            if ( dynchan != 0 ) { // did the dynamic channel check give us usable channel number &amp;lt;0 or &amp;gt;0 but not actually 0?&lt;br /&gt;
                // Send DETACHARMOR message to previous wearer&#039;s HUD&lt;br /&gt;
                llWhisper(dynchan,&amp;quot;DETACHARMOR&amp;quot;+DIV+(string)ARMORRATING+DIV+(string)ATTACHPOINT+DIV+llGetObjectName());&lt;br /&gt;
            } else { // the dynamic channel was 0?&lt;br /&gt;
                // how did we get in this mess? a detach without an attach. Report error. Design failure somewhere. THIS SHOULD NEVER HAPPEN.&lt;br /&gt;
                DEBUG(&amp;quot;DETACH EVENT WITHOUT PREVIOUS ATTACH?&amp;quot;);&lt;br /&gt;
            } // end of if dynchan not equal zero&lt;br /&gt;
            WEARER = NULL_KEY; // armor detached and reported as such, so we can forget previous wearer&lt;br /&gt;
            ATTACHPOINT = 0; // armor detached and reported as such, so we can forget previous attach point&lt;br /&gt;
        } // end of if id not equal null key&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // DEFAULT CHANGED&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    changed(integer change) {&lt;br /&gt;
        if ( change &amp;amp; CHANGED_OWNER ) { // if armor has a new owner from take-from-ground or copy, resetup&lt;br /&gt;
            SETUP(); // call event-independent setup code, in this case to update channels&lt;br /&gt;
        }&lt;br /&gt;
    }    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // DEFAULT LISTEN&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    listen(integer channel,string speakername,key speakerid,string message) {&lt;br /&gt;
        ATTACHPOINT = llGetAttached(); // get location we&#039;re attached to&lt;br /&gt;
        if ( channel == CHANATTACH ) { // is this message on the attach channel?&lt;br /&gt;
            if ( message == &amp;quot;ARMORHIT&amp;quot; ) { // is this an armor hit?&lt;br /&gt;
                EFFECTHIT(); // turn on armor hit effects&lt;br /&gt;
                return; // message processed, exit early&lt;br /&gt;
            }&lt;br /&gt;
            if ( message == &amp;quot;ARMORBLOCKED&amp;quot; ) { // did the armor block the hit too&lt;br /&gt;
                EFFECTBLOCKED(); // turn on armor block effects&lt;br /&gt;
                return; // message processed, exit early&lt;br /&gt;
            }&lt;br /&gt;
            // ML HUD sent a request for any attached items&lt;br /&gt;
            if ( ( message == &amp;quot;REGISTERATTACHMENTS&amp;quot; ) &amp;amp;&amp;amp; ( ATTACHPOINT &amp;gt;= MINATTACHPOINT ) &amp;amp;&amp;amp; ( ATTACHPOINT &amp;lt;= MAXATTACHPOINT ) ) {&lt;br /&gt;
                WEARER = llGetOwner(); // get armor owner BUG: what if owner not equal wearer?&lt;br /&gt;
                // calculate the dynamic channel of the wearer&lt;br /&gt;
                integer dynchan = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)WEARER,1,7));&lt;br /&gt;
                // send the ATTACHARMOR to ML HUD to register that this armor piece is worn&lt;br /&gt;
                llWhisper(dynchan,&amp;quot;ATTACHARMOR&amp;quot;+DIV+(string)ARMORRATING+DIV+(string)ATTACHPOINT+DIV+llGetObjectName());&lt;br /&gt;
                return; // message processed, exit early&lt;br /&gt;
            } // end of if message equal REGISTERATTACHMENTS            &lt;br /&gt;
            if ( message == &amp;quot;ARMORON&amp;quot; ) { ARMORON(); return;} // activate power armor&lt;br /&gt;
            if ( message == &amp;quot;ARMOROFF&amp;quot; ) { ARMOROFF(); return;} // deactivate power armor&lt;br /&gt;
            if ( message == &amp;quot;RECHARGE&amp;quot; ) { RECHARGE(); return;} // recharge power armor battery?&lt;br /&gt;
            if ( message == &amp;quot;CHECKBATTERY&amp;quot; ) { CHECKBATTERY(); return;} // check battery level&lt;br /&gt;
        } // end if channel CHANATTACH&lt;br /&gt;
    }    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // TIMER CALLED TO TURN OFF THE SPECIAL EFFECTS&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    timer() {&lt;br /&gt;
        EFFECTTIME--;&lt;br /&gt;
        if ( EFFECTTIME &amp;lt;= 0 ) { &lt;br /&gt;
            EFFECTOFF(); // turn off special effects&lt;br /&gt;
            EFFECTTIME=0; // make it zero anyway&lt;br /&gt;
        } // timer expired, turn off effect&lt;br /&gt;
        if ( POWERARMOR == TRUE &amp;amp;&amp;amp; ARMOR_ON == TRUE ) {&lt;br /&gt;
            BATTERY--; // remove some battery&lt;br /&gt;
            if ( BATTERY &amp;lt;= 0 ) {&lt;br /&gt;
                llOwnerSay(&amp;quot;Armor battery drained. Shutting down.&amp;quot;);&lt;br /&gt;
                ARMOROFF(); // turn off armor&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        if ( EFFECTTIME &amp;lt;= 0 || ARMOR_ON == FALSE ) llSetTimerEvent(0.0); // all timers done, stop timer events&lt;br /&gt;
    } // end timer&lt;br /&gt;
} // end default&lt;br /&gt;
//============================================================================&lt;br /&gt;
// END&lt;br /&gt;
//============================================================================&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_v0.0.18_20110908&amp;diff=1153243</id>
		<title>User:Allen Kerensky/Myriad Lite Preview4/Myriad Lite v0.0.18 20110908</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_v0.0.18_20110908&amp;diff=1153243"/>
		<updated>2011-09-08T15:29:08Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Header}}&lt;br /&gt;
= Myriad Lite v0.0.18 20110908 =&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Myriad Lite v0.0.18 20110908&lt;br /&gt;
// The Myriad RPG System was designed, written, and illustrated by Ashok Desai&lt;br /&gt;
// Myriad RPG licensed under the Creative Commons Attribution 2.0 UK: England and Wales&lt;br /&gt;
// http://creativecommons.org/licenses/by/2.0/uk/&lt;br /&gt;
// Myriad Lite software Copyright (c) 2011 by Allen Kerensky (OSG/SL)&lt;br /&gt;
// Baroun&#039;s Adventure Machine Copyright (c) 2008-2011 by Baroun Tardis (SL)&lt;br /&gt;
// Myriad Lite and Baroun&#039;s Adventure Machine licensed under the&lt;br /&gt;
// Creative Commons Attribution-Share Alike-Non-Commercial 3.0 Unported&lt;br /&gt;
// http://creativecommons.org/licenses/by-nc-sa/3.0/&lt;br /&gt;
&lt;br /&gt;
// CONSTANTS - DO NOT CHANGE DURING RUN&lt;br /&gt;
string VERSION = &amp;quot;0.0.18&amp;quot;; // Allen Kerensky&#039;s script version&lt;br /&gt;
string VERSIONDATE = &amp;quot;20110908&amp;quot;; // Allen Kerensky&#039;s script yyyymmdd&lt;br /&gt;
integer MINXP = 0; // min experience points&lt;br /&gt;
integer MAXXP = 2320; // max experience points&lt;br /&gt;
integer MINLEVEL = 1; // min XP level&lt;br /&gt;
integer MAXLEVEL = 30; // max XP level&lt;br /&gt;
integer MINSTAT = 1; // min value for statistics&lt;br /&gt;
integer MAXSTAT = 5; // max human value for a statistic/attribute&lt;br /&gt;
integer MINRESILIENCE = 1; // min value for resilience&lt;br /&gt;
integer MAXRESILIENCE = 20; // max value for resilience&lt;br /&gt;
integer MINBOON = 1; // min value for boon rank&lt;br /&gt;
integer MAXBOON = 5; // max value for boon rank&lt;br /&gt;
integer MINFLAW = 1; // min value for flaw rank&lt;br /&gt;
integer MAXFLAW = 5; // max value for flaw rank&lt;br /&gt;
integer MINSKILL = 1; // min value for skill rank&lt;br /&gt;
integer MAXSKILL = 5; // max value for skill rank&lt;br /&gt;
integer MINEFFECT = 1; // min value for special effect&lt;br /&gt;
integer MAXEFFECT = 5; // max value for special effect&lt;br /&gt;
integer MINEQUIPPED = 1; // min number of items player can carry&lt;br /&gt;
integer MAXEQUIPPED = 100; // max number of items player can carry TODO: what about bullets?&lt;br /&gt;
integer CHANMYRIAD = -999; // chat sent to ALL Myriad players in region&lt;br /&gt;
integer CHANCOMMAND = 5; // chat sent by player to their meter&lt;br /&gt;
integer MINDAMAGE = 1; // min attack dice for weapon&lt;br /&gt;
integer MAXDAMAGE = 5; // max attack dice for weapon&lt;br /&gt;
float RESPAWN_TIME = 30.0; // time dead before automatic respawn&lt;br /&gt;
integer MINATTACH = 1; // min valid attach point&lt;br /&gt;
integer MAXWEAR = 30; // max valid in-world wearable attach point&lt;br /&gt;
integer MINARMOR = 1; // min armor defense value&lt;br /&gt;
integer MAXARMOR = 5; // max armor defense value&lt;br /&gt;
string DIV = &amp;quot;|&amp;quot;; // message field divider&lt;br /&gt;
float WEAPON_LENGTH = 0.0; // weapon length in last attack&lt;br /&gt;
float ARM_LENGTH = 1.0; // arm is 1m long&lt;br /&gt;
float LEG_LENGTH = 1.5; // leg is 1.5m long&lt;br /&gt;
integer MELEEATTACKDICE = 1; // 1 attack dice for fists and feet&lt;br /&gt;
string ANIM_INCAPACITATED = &amp;quot;sleep&amp;quot;; // anim when incapacitated&lt;br /&gt;
string ANIM_DEAD = &amp;quot;dead&amp;quot;; // anim when dead&lt;br /&gt;
string ANIM_PUNCH_LEFT = &amp;quot;punch_l&amp;quot;; // anim for left punch&lt;br /&gt;
string ANIM_PUNCH_RIGHT = &amp;quot;punch_r&amp;quot;; // anim for right punch&lt;br /&gt;
string ANIM_PUNCH_ONETWO = &amp;quot;punch_onetwo&amp;quot;; // anim for 1-2 punch&lt;br /&gt;
string ANIM_KICK = &amp;quot;kick_roundhouse_r&amp;quot;; // anim for kick&lt;br /&gt;
integer SINGLE_PUNCH_DELAY = 1; // recovery time between single punches TODO fix to Myriad rules times&lt;br /&gt;
integer DOUBLE_PUNCH_DELAY = 2; // recovery time between one-two punches TODO fix to Myriad rules times&lt;br /&gt;
integer KICK_DELAY = 3; // recovery time between kicks TODO fix to Myriad rules times&lt;br /&gt;
string CHAN_PREFIX = &amp;quot;0x&amp;quot;; // channel prefix for calculating dynamic channels&lt;br /&gt;
&lt;br /&gt;
// string names for each attach point - waste of memory?&lt;br /&gt;
list ATTACHPOINTS = [&amp;quot;INVALID&amp;quot;,&amp;quot;chest&amp;quot;,&amp;quot;head&amp;quot;,&amp;quot;left shoulder&amp;quot;,&amp;quot;right shoulder&amp;quot;,&amp;quot;left hand&amp;quot;,&amp;quot;right hand&amp;quot;,&amp;quot;left foot&amp;quot;,&amp;quot;right foot&amp;quot;,&amp;quot;back&amp;quot;,&amp;quot;pelvis&amp;quot;,&amp;quot;mouth&amp;quot;,&amp;quot;chin&amp;quot;,&amp;quot;left ear&amp;quot;,&amp;quot;right ear&amp;quot;,&amp;quot;left eye&amp;quot;,&amp;quot;right eye&amp;quot;,&amp;quot;nose&amp;quot;,&amp;quot;right upper arm&amp;quot;,&amp;quot;right lower arm&amp;quot;,&amp;quot;left upper arm&amp;quot;,&amp;quot;left lower arm&amp;quot;,&amp;quot;right hip&amp;quot;,&amp;quot;right upper leg&amp;quot;,&amp;quot;right lower leg&amp;quot;,&amp;quot;left hip&amp;quot;,&amp;quot;left upper leg&amp;quot;,&amp;quot;left lower leg&amp;quot;,&amp;quot;stomach&amp;quot;,&amp;quot;left pectoral&amp;quot;,&amp;quot;right pectoral&amp;quot;,&amp;quot;HUD Center 2&amp;quot;,&amp;quot;HUD Top Right&amp;quot;,&amp;quot;HUD Top&amp;quot;,&amp;quot;HUD Top Left&amp;quot;,&amp;quot;HUD Center&amp;quot;,&amp;quot;HUD Bottom Left&amp;quot;,&amp;quot;HUD Bottom&amp;quot;,&amp;quot;HUD Bottom Right&amp;quot; ];&lt;br /&gt;
&lt;br /&gt;
// RUNTIME GLOBALS - CAN CHANGE DURING RUN&lt;br /&gt;
integer FLAG_DEBUG = FALSE; // see debug messages?&lt;br /&gt;
key PLAYERID = NULL_KEY; // cached player UUID&lt;br /&gt;
string PLAYERNAME = &amp;quot;&amp;quot;; // cached player name&lt;br /&gt;
string NAME = &amp;quot;&amp;quot;; // character name&lt;br /&gt;
string SPECIES = &amp;quot;&amp;quot;; // species template used for character&lt;br /&gt;
string BACKGROUND = &amp;quot;&amp;quot;; // background template&lt;br /&gt;
string CAREER = &amp;quot;&amp;quot;; // career template&lt;br /&gt;
integer XP = 0; // 0-2320&lt;br /&gt;
integer XPLEVEL = 1; // 1-30&lt;br /&gt;
integer POWER = 0; // physical strength and dexterity - offensive martial combat stat&lt;br /&gt;
integer GRACE = 0; // athleticism and agility - defensive martial combat stat&lt;br /&gt;
integer INTELLECT = 0; // quickness of thought, depth of knowledge - offensive social combat stat&lt;br /&gt;
integer SPIRIT = 0; // willpower, confidence, perception, creativity - defensive social combat stat&lt;br /&gt;
integer WOUNDS = 0; // healed wound value&lt;br /&gt;
integer CURWOUNDS = 0; // current wound value&lt;br /&gt;
integer CRITICAL = 0; // healed critical wounds value&lt;br /&gt;
integer CURCRITICAL = 0; // current critical wound value&lt;br /&gt;
integer RESOLVE = 0; // healed resolve value&lt;br /&gt;
integer CURRESOLVE = 0; // current resolve value&lt;br /&gt;
list BOONS = []; // boons [ string BoonName, integer BoonRank ]&lt;br /&gt;
list FLAWS = []; // flaws [ string FlawName, integer FlawRank ]&lt;br /&gt;
list SKILLS = []; // skills [ string SkillName, integer SkillRank ]&lt;br /&gt;
list EFFECTS = []; // special effects (SFX) [ string EffectName, integer EffectRank ]&lt;br /&gt;
list STUNTS = []; // pre-set martial combat stunts TODO how will this work?&lt;br /&gt;
list QUOTES = []; // pre-set social combat quotes TODO how will this work?&lt;br /&gt;
list EQUIPMENT = []; // Equipment [ string ItemName, integer NumberCarried ]&lt;br /&gt;
string CARD = &amp;quot;Myriad Lite Character Sheet v0.0.2 20110521&amp;quot;; // character sheet notecard&lt;br /&gt;
integer LINE = 0; // reading line number&lt;br /&gt;
key QUERY = NULL_KEY; // track notecard queries&lt;br /&gt;
integer HANDMYRIAD = 0; // Myriad channel handle&lt;br /&gt;
integer CHANPLAYER = 0; // dynamic channel to one player&#039;s UUID&lt;br /&gt;
integer HANDPLAYER = 0; // player channel handle&lt;br /&gt;
integer CHANOBJECT = 0; // dynamic channel to one object&#039;s UUID&lt;br /&gt;
integer HANDCOMMAND = 0; // command channel handle&lt;br /&gt;
integer HANDATTACH = 0; // attachment channel handle&lt;br /&gt;
integer CHANATTACH = 0; // dynamic channel for attachments&lt;br /&gt;
integer CHANBAM = 0; // dynamic channel for BAM quests&lt;br /&gt;
integer HANDBAM = 0; // BAM channel update&lt;br /&gt;
integer FLAG_INCAPACITATED = FALSE; // incapacitated by wounds?&lt;br /&gt;
integer FLAG_DEAD = FALSE; // killed by critical wounds?&lt;br /&gt;
integer CURARMOR = 0; // highest armor value worn out of all armor worn, not a total&lt;br /&gt;
integer FLAG_FISTS = FALSE; // using fist-fighter?&lt;br /&gt;
integer FLAG_CONTROLS = FALSE; // permission to take controls?&lt;br /&gt;
integer FLAG_ANIMATE = FALSE; // permission to animate avatar?&lt;br /&gt;
integer TIME_NEXT_ATTACK = 0; // time of last attack&lt;br /&gt;
integer CONTROLS = 0; // bitfield of controls to monitor&lt;br /&gt;
float FIELD_OF_ATTACK = PI; // controls field of attack. set later to PI/6 later for 60 degree field of attack in front of avatar&lt;br /&gt;
// list of armor values worn on each attach point&lt;br /&gt;
list ARMOR = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];&lt;br /&gt;
integer METERWORN = FALSE; // using meter?&lt;br /&gt;
&lt;br /&gt;
// DEBUG - show debug chat with wearer name for sorting&lt;br /&gt;
DEBUG(string dmessage) {&lt;br /&gt;
    if ( FLAG_DEBUG == TRUE ) { // are we debugging?&lt;br /&gt;
        llSay(DEBUG_CHANNEL,&amp;quot;DEBUG (&amp;quot;+llKey2Name(PLAYERID)+&amp;quot;): &amp;quot;+dmessage);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ERROR - show errors on debug channel with wearer name for sorting&lt;br /&gt;
ERROR(string emessage) {&lt;br /&gt;
    llSay(DEBUG_CHANNEL,&amp;quot;ERROR (&amp;quot;+llKey2Name(PLAYERID)+&amp;quot;): &amp;quot;+emessage);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// WEARARMOR - Wearing a piece of armor&lt;br /&gt;
WEARARMOR(integer waattachpoint,integer waamount,string waname) {&lt;br /&gt;
    if ( waattachpoint &amp;lt; MINATTACH || waattachpoint &amp;gt; MAXWEAR ) { // valid attach point?&lt;br /&gt;
        ERROR(&amp;quot;Invalid armor attachment point &amp;quot;+llList2String(ATTACHPOINTS,waattachpoint));&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    if ( waamount &amp;lt; MINARMOR || waamount &amp;gt; MAXARMOR ) { // is armor rating valid or legal?&lt;br /&gt;
        ERROR(&amp;quot;Invalid armor amount &amp;quot;+(string)waamount+&amp;quot; out of range &amp;quot;+(string)MINARMOR+&amp;quot;-&amp;quot;+(string)MAXARMOR);&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    // FIXME move ARMOR to 3-element strided list? [attachpoint,value,name?]&lt;br /&gt;
    ARMOR = llListReplaceList(ARMOR,[waamount],waattachpoint,waattachpoint); // insert armor value into armor list&lt;br /&gt;
    llOwnerSay(&amp;quot;Armor &amp;quot;+waname+&amp;quot; (&amp;quot;+(string)waamount+&amp;quot;) attached to &amp;quot;+llList2String(ATTACHPOINTS,waattachpoint));&lt;br /&gt;
    RECALCULATE_ARMOR(); // find new highest armor value&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// REMOVEARMOR - Removing a piece of armor&lt;br /&gt;
REMOVEARMOR(integer raattachpoint,integer raamount,string raname) {&lt;br /&gt;
    if ( raattachpoint &amp;lt; MINATTACH || raattachpoint &amp;gt; MAXWEAR ) { // valid attach point?&lt;br /&gt;
        ERROR(&amp;quot;Invalid armor detachment point &amp;quot;+llList2String(ATTACHPOINTS,raattachpoint));&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    if ( raamount &amp;lt; MINARMOR || raamount &amp;gt; MAXARMOR ) { // is armor rating valid or legal?&lt;br /&gt;
        ERROR(&amp;quot;Invalid armor amount &amp;quot;+(string)raamount+&amp;quot; out of range &amp;quot;+(string)MINARMOR+&amp;quot;-&amp;quot;+(string)MAXARMOR);&lt;br /&gt;
        return;&lt;br /&gt;
    }    &lt;br /&gt;
    ARMOR = llListReplaceList(ARMOR,[0],raattachpoint,raattachpoint); // zero out the armor value in armor list&lt;br /&gt;
    llOwnerSay(&amp;quot;Armor &amp;quot;+raname+&amp;quot; (&amp;quot;+(string)raamount+&amp;quot;) detached from &amp;quot;+llList2String(ATTACHPOINTS,raattachpoint));&lt;br /&gt;
    RECALCULATE_ARMOR(); // find new highest armor value&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// RECALCULATE_ARMOR - sets CURARMOR to highest armor value worn after attach or detach&lt;br /&gt;
RECALCULATE_ARMOR() {&lt;br /&gt;
    CURARMOR = 0; // start with zero armor&lt;br /&gt;
    integer racount = llGetListLength(ARMOR); // how long is armor list?&lt;br /&gt;
    while (racount--) { // look at each list item from last to first&lt;br /&gt;
        integer rapoints = llList2Integer(ARMOR,racount); // what is armor value at this point in list?&lt;br /&gt;
        if ( rapoints &amp;gt; CURARMOR ) { // is this armor value higher than current max?&lt;br /&gt;
            CURARMOR = rapoints; // yes, save new highest amount&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    llOwnerSay(&amp;quot;Armor Rating is &amp;quot;+(string)CURARMOR);&lt;br /&gt;
    // FIXME tell world too?&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// HIT - player is hit - check to see if attack dice breach armor&lt;br /&gt;
// Making A Damage Roll (Myriad p25, Myriad Special Edition p31)&lt;br /&gt;
HIT(integer attackdice) {&lt;br /&gt;
    integer damagetaken = 0; // start with zero damage&lt;br /&gt;
    while(attackdice--) { // roll for each attack dice&lt;br /&gt;
        integer dieroll = 1+(integer)llFrand(5.0); // reasonably uniform d6&lt;br /&gt;
        if ( dieroll &amp;gt; CURARMOR ) { // attack roll stronger than armor worn?&lt;br /&gt;
            damagetaken++; // add a wound point&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    // finished roll how did we do?&lt;br /&gt;
    if ( damagetaken &amp;gt; 0 ) { // we took damage&lt;br /&gt;
        if ( CURARMOR &amp;gt; 0 ) { // wearing armor? tell them it was breached&lt;br /&gt;
            llOwnerSay(&amp;quot;That attack penetrated your armor and you&#039;ve been wounded!&amp;quot;);&lt;br /&gt;
            llWhisper(CHANATTACH,&amp;quot;ARMORHIT&amp;quot;);&lt;br /&gt;
        } else { // fighting in no armor?&lt;br /&gt;
            llOwnerSay(&amp;quot;You&#039;ve been wounded! Wear some armor next time?&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        WOUNDED(damagetaken); // apply damage taken to resilences&lt;br /&gt;
    } else { // hit, but no damage taken&lt;br /&gt;
        // must be wearing *some* armor to be hit but avoid a wound, don&#039;t recheck for armor here&lt;br /&gt;
        llOwnerSay(&amp;quot;Your armor blocked the damage from that attack!&amp;quot;);&lt;br /&gt;
        llWhisper(CHANATTACH,&amp;quot;ARMORBLOCKED&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// WOUNDED - Player takes Resilience damage&lt;br /&gt;
WOUNDED(integer amount) {&lt;br /&gt;
    while (amount--) { // for each wound taken&lt;br /&gt;
        if ( CURWOUNDS &amp;gt; 0 &amp;amp;&amp;amp; CURCRITICAL == CRITICAL ) { // wound boxes left?&lt;br /&gt;
            CURWOUNDS--; // scratch off one&lt;br /&gt;
            METER(); // update&lt;br /&gt;
            llOwnerSay(&amp;quot;You&#039;ve been wounded!&amp;quot;);&lt;br /&gt;
        } else if ( CURWOUNDS &amp;lt; 1 &amp;amp;&amp;amp; CURCRITICAL &amp;gt; 0 ) { // incapacitated&lt;br /&gt;
            CURWOUNDS = 0; // force to zero&lt;br /&gt;
            CURCRITICAL--; // scratch off a critical wound box&lt;br /&gt;
            INCAPACITATED(); // show incapacitation&lt;br /&gt;
        } else if ( CURWOUNDS &amp;lt; 1 &amp;amp;&amp;amp; CURCRITICAL &amp;lt; 1 ) { // out of critical wounds?&lt;br /&gt;
            CURWOUNDS = 0; // force zero&lt;br /&gt;
            CURCRITICAL = 0; // force zero&lt;br /&gt;
            METER(); // update&lt;br /&gt;
            DEAD(); // show death&lt;br /&gt;
        }&lt;br /&gt;
    } // end while&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// INCAPACITATED - player lost all WOUNDS - unable to act&lt;br /&gt;
INCAPACITATED() {&lt;br /&gt;
    FLAG_INCAPACITATED = TRUE; // yes, we&#039;re now incapacitated&lt;br /&gt;
    METER(); // update meter&lt;br /&gt;
    llStartAnimation(ANIM_INCAPACITATED); // &amp;quot;we&#039;re hurt and down&amp;quot; animation&lt;br /&gt;
    llRegionSay(CHANMYRIAD,PLAYERNAME+&amp;quot; has been incapacitated!&amp;quot;);&lt;br /&gt;
    llOwnerSay(&amp;quot;You&#039;ve been incapacitated!&amp;quot;);&lt;br /&gt;
    llSetTimerEvent(RESPAWN_TIME); // heal in a bit&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// DEAD - player is dead, kill them and wait to respawn&lt;br /&gt;
DEAD() {&lt;br /&gt;
    FLAG_DEAD = TRUE; // remember that we&#039;re now dead&lt;br /&gt;
    METER(); // update hover text&lt;br /&gt;
    llStartAnimation(ANIM_DEAD); // start dead animation&lt;br /&gt;
    llRegionSay(CHANMYRIAD,PLAYERNAME+&amp;quot; has been killed!&amp;quot;);&lt;br /&gt;
    llOwnerSay(&amp;quot;You&#039;ve been killed!&amp;quot;);&lt;br /&gt;
    llSetTimerEvent(RESPAWN_TIME); // respawn in a bit&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// HEAL - restore lost WOUND and CRITICAL resilience&lt;br /&gt;
HEAL(integer healamount) {&lt;br /&gt;
    // TODO report once for multiple healing amounts&lt;br /&gt;
    while ( healamount-- ) { // step through each point of healing&lt;br /&gt;
        if ( CURCRITICAL &amp;lt; CRITICAL ) { // heal critical wounds first?&lt;br /&gt;
            CURCRITICAL++; // add a point back&lt;br /&gt;
            DEBUG(&amp;quot;Heal critical. Wounds: &amp;quot;+(string)CURWOUNDS+&amp;quot; of &amp;quot;+(string)WOUNDS+&amp;quot; wound boxes. Critical: &amp;quot;+(string)CURCRITICAL+&amp;quot; of &amp;quot;+(string)CRITICAL+&amp;quot; critical wound boxes.&amp;quot;);&lt;br /&gt;
            METER(); // update&lt;br /&gt;
            if ( FLAG_DEAD == TRUE ) { // healed a critical, critical now &amp;gt; 0 so not dead anymore&lt;br /&gt;
                FLAG_DEAD=FALSE; // stop being dead&lt;br /&gt;
                if ( FLAG_ANIMATE == TRUE ) { // if we&#039;re allowed to change animations&lt;br /&gt;
                    llStopAnimation(ANIM_DEAD); // stop &amp;quot;we&#039;re dead&amp;quot; animation&lt;br /&gt;
                }&lt;br /&gt;
                llRegionSay(CHANMYRIAD,&amp;quot;RPEVENT&amp;quot;+DIV+NAME+&amp;quot; (&amp;quot;+PLAYERNAME+&amp;quot;) has been resurrected!&amp;quot;);&lt;br /&gt;
                llOwnerSay(&amp;quot;Critical wound healed! You&#039;ve been resurrected! Welcome back to the land of the living.&amp;quot;);&lt;br /&gt;
                METER(); // update&lt;br /&gt;
            } else { // heal a critical wound without resurrect&lt;br /&gt;
                llOwnerSay(&amp;quot;Critical wound healed.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        } else if ( CURWOUNDS &amp;lt; WOUNDS ) { // player not critical, heal non-critical?&lt;br /&gt;
            CURWOUNDS++; // add a point of non-critical&lt;br /&gt;
            DEBUG(&amp;quot;Heal non-critical. Wounds: &amp;quot;+(string)CURWOUNDS+&amp;quot; of &amp;quot;+(string)WOUNDS+&amp;quot; wound boxes. Critical: &amp;quot;+(string)CURCRITICAL+&amp;quot; of &amp;quot;+(string)CRITICAL+&amp;quot; critical wound boxes.&amp;quot;);&lt;br /&gt;
            METER(); // update&lt;br /&gt;
            if ( FLAG_INCAPACITATED == TRUE ) { // were they incapacitated?&lt;br /&gt;
                FLAG_INCAPACITATED=FALSE; // they have a wound point, no longer incapacitated&lt;br /&gt;
                if ( FLAG_ANIMATE == TRUE ) { // does player allow us to animate their avatar/character?&lt;br /&gt;
                    llStopAnimation(ANIM_INCAPACITATED); // stop the incapacitation animation&lt;br /&gt;
                }&lt;br /&gt;
                llRegionSay(CHANMYRIAD,&amp;quot;RPEVENT&amp;quot;+DIV+NAME+&amp;quot; (&amp;quot;+PLAYERNAME+&amp;quot;) no longer incapacitated!&amp;quot;);&lt;br /&gt;
                llOwnerSay(&amp;quot;Non-critical wound healed. You are no longer incapacitated!&amp;quot;);&lt;br /&gt;
                METER(); // update&lt;br /&gt;
            } else { // healed non-critical wound without need to stop incapacitation&lt;br /&gt;
                llOwnerSay(&amp;quot;Non-critical wound healed.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        } // end if curwounds &amp;lt; wounds&lt;br /&gt;
    } // end while&lt;br /&gt;
    METER(); // update&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// GET SKILL RANK&lt;br /&gt;
// Requires a SKILL NAME&lt;br /&gt;
// Returns the rank value for that skill, or zero if player doesn&#039;t have skill&lt;br /&gt;
integer GET_SKILL_RANK(string askill) {&lt;br /&gt;
    integer atskill = 0; // start with skill zero in case character does not have that skill&lt;br /&gt;
    integer skillpos = llListFindList(SKILLS,[askill]); // position of skill name in list 0-n, or -1 if not found&lt;br /&gt;
    if ( skillpos &amp;gt;= 0 ) { // skill name was somewhere in list&lt;br /&gt;
        atskill = llList2Integer(SKILLS,++skillpos); // move to next pos in list after skillname and get skill rank there&lt;br /&gt;
        if ( atskill &amp;gt;= MINSKILL &amp;amp;&amp;amp; atskill &amp;lt;= MAXSKILL ) return atskill; // found skill with value in range, return it;&lt;br /&gt;
    } // fall through...&lt;br /&gt;
    return 0; // player has zero levels in skill&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ABILITY TEST&lt;br /&gt;
// Requires ATTRIBUTE NAME, SKILL NAME&lt;br /&gt;
// Returns the ability test score for use by success fail, opposed rolls, etc&lt;br /&gt;
// See Myriad PDF page 18, Myriad Special Edition page 24&lt;br /&gt;
integer ABILITY_TEST(integer attribute,integer skill) {&lt;br /&gt;
    integer highroll = 0; // clear out the highest roll&lt;br /&gt;
    while( attribute-- ) { // roll a dice for each point of the attribute&lt;br /&gt;
        integer roll = 1+(integer)llFrand(5.0); // roll this d6&lt;br /&gt;
        if ( roll &amp;gt; highroll) highroll = roll; // if this is highest roll so far, remember it&lt;br /&gt;
    } // finished rolling a dice for each point of the base attribute&lt;br /&gt;
    return highroll + skill; // now, return the total of highest dice roll + skill value&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// An Unopposed Ability Test - Myriad PDF p. 19, Myriad Special Edition p. 25&lt;br /&gt;
// Requires TargetNumber, Attribute Name, Skill Name&lt;br /&gt;
// Returns TRUE for Success and False for Fail&lt;br /&gt;
integer UNOPPOSED_TEST(integer targetnum,integer tattribute,integer tskill ) {&lt;br /&gt;
    integer check = ABILITY_TEST(tattribute,tskill); // calculate the player&#039;s ability test value&lt;br /&gt;
    if ( check &amp;gt;= targetnum ) return TRUE; // player won the ability test&lt;br /&gt;
    return FALSE; // player lost the ability test&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// An Opposed Ability Test - Myriad PDF p. 19 Myriad Special Edition p. 25&lt;br /&gt;
// Requires Attacker Attribute Name, Attacker Skill Name, Defender Attribute Name, Defender Skill Name&lt;br /&gt;
// Returns TRUE for Success, FALSE for failure&lt;br /&gt;
integer OPPOSED_TEST(integer aattrib,integer askill,integer dattrib,integer dskill) {&lt;br /&gt;
    integer acheck = ABILITY_TEST(aattrib,askill); // calculate attacker&#039;s ability test&lt;br /&gt;
    integer dcheck = ABILITY_TEST(dattrib,dskill); // calculate defender&#039;s ability test&lt;br /&gt;
    if ( acheck &amp;gt; dcheck ) return TRUE; // attacker more than defender = attacker wins&lt;br /&gt;
    return FALSE; // defender wins&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// SETUP - begin bringing the HUD online&lt;br /&gt;
SETUP() {&lt;br /&gt;
    CREDITS(); // show Myriad credits as required by the Creative Commons - Attribution license&lt;br /&gt;
    PLAYERID = llGetOwner(); // remember the owner&#039;s UUID&lt;br /&gt;
    PLAYERNAME = llKey2Name(PLAYERID); // remember the owner&#039;s legacy name&lt;br /&gt;
    llSetText(&amp;quot;&amp;quot;,&amp;lt;0,0,0&amp;gt;,0); // clear any previous hovertext&lt;br /&gt;
    llOwnerSay(&amp;quot;Loading character sheet. Please wait...&amp;quot;); // tell player we&#039;re waiting for data server&lt;br /&gt;
    if ( llGetInventoryName(INVENTORY_NOTECARD,0) == CARD ) { // check inventory for notecard&lt;br /&gt;
        QUERY = llGetNotecardLine(CARD,LINE++); // ask for line from notecard and advance to next line&lt;br /&gt;
    } else {&lt;br /&gt;
        ERROR(&amp;quot;Cannot locate character sheet from notecard: &amp;quot;+CARD); // TODO: what next? choose defaults? fall over?&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// CREDITS comply with Myriad RPG Creative Common-Attribution legal requirement&lt;br /&gt;
CREDITS() {&lt;br /&gt;
    llOwnerSay(&amp;quot;The Myriad RPG System was designed, written, and illustrated by Ashok Desai.&amp;quot;);&lt;br /&gt;
    llOwnerSay(&amp;quot;RPG System licensed under the Creative Commons Attribution 2.0 UK: England and Wales.&amp;quot;);&lt;br /&gt;
    llOwnerSay(&amp;quot;Myriad Lite v&amp;quot;+VERSION+&amp;quot; &amp;quot;+VERSIONDATE+&amp;quot; Copyright (c) 2011 by Allen Kerensky (OSG/SL)&amp;quot;);&lt;br /&gt;
    llOwnerSay(&amp;quot;Licensed under Creative Commons Attribution-Share Alike-Non-Commercial 3.0 Unported.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// RESET - shut down running animations then reset the script to reload character sheet&lt;br /&gt;
RESET() {&lt;br /&gt;
    if ( FLAG_DEAD == TRUE || FLAG_INCAPACITATED == TRUE ) { // don&#039;t allow reset if already on respawn timer&lt;br /&gt;
        llOwnerSay(&amp;quot;Cannot reset while incapacitated or dead. You will respawn in a few moments.&amp;quot;);&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    llOwnerSay(&amp;quot;Resetting Myriad Lite. Please wait...&amp;quot;);&lt;br /&gt;
    // stop all running animations&lt;br /&gt;
    if ( FLAG_ANIMATE == TRUE ) { // do we have permission to animate?&lt;br /&gt;
        list anims = llGetAnimationList(PLAYERID); // get list of current animations for owner&lt;br /&gt;
        integer animcount = llGetListLength(anims); // count the number of animations in the list&lt;br /&gt;
        while (animcount--) { // step from end of animation list to beginning&lt;br /&gt;
            llStopAnimation(llList2String(anims,animcount)); // stopping each animation&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    llMessageLinked(LINK_THIS,0,&amp;quot;MODULERESET&amp;quot;,NULL_KEY); // tell modules to reset too TODO function this&lt;br /&gt;
    // TODO can we do this with an attachment and have it do the attachment setup correctly?&lt;br /&gt;
    llResetScript(); // now reset&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// METER - update a hovertext health meter or HUD bar graph&lt;br /&gt;
METER() {&lt;br /&gt;
    if ( METERWORN == FALSE ) return;&lt;br /&gt;
    // create a meter message packet&lt;br /&gt;
    string message = &amp;quot;METER&amp;quot;+DIV+PLAYERNAME+DIV+NAME+DIV+(string)CURWOUNDS+DIV+(string)WOUNDS+DIV+(string)CURCRITICAL+DIV+(string)CRITICAL+DIV+(string)FLAG_DEAD+DIV+(string)FLAG_INCAPACITATED;&lt;br /&gt;
    llRegionSay(CHANMYRIAD,message); // send the update to region for scorekeepers, etc&lt;br /&gt;
    llWhisper(CHANATTACH,message); // whisper to the wearer&#039;s actual meter&lt;br /&gt;
    DEBUG(&amp;quot;Wounds: &amp;quot;+(string)CURWOUNDS+&amp;quot; of &amp;quot;+(string)WOUNDS+&amp;quot; wound boxes. Critical: &amp;quot;+(string)CURCRITICAL+&amp;quot; of &amp;quot;+(string)CRITICAL+&amp;quot; critical wound boxes.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// HAND_TO_HAND attack for fist fighter&lt;br /&gt;
// TODO fix timing to Myriad rules&lt;br /&gt;
HAND_TO_HAND(integer delay,string anim,float reach) {&lt;br /&gt;
    // TODO need &amp;quot;someone moves to attack&amp;quot; RP event messages here?&lt;br /&gt;
    TIME_NEXT_ATTACK = llGetUnixTime() + delay; // attack again after delay for attack and followup recovery&lt;br /&gt;
    llStartAnimation(anim); // run the punch left animation&lt;br /&gt;
    WEAPON_LENGTH = reach; // save the weapon reach from the last attack&lt;br /&gt;
    llSensor(&amp;quot;&amp;quot;,NULL_KEY,(AGENT|ACTIVE|PASSIVE),reach,FIELD_OF_ATTACK); // sensor sweep to see if we hit someone&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// DEBUGON - turn on the DEBUG flag&lt;br /&gt;
DEBUGON() {&lt;br /&gt;
    FLAG_DEBUG = TRUE; // set debug flag TRUE&lt;br /&gt;
    llOwnerSay(&amp;quot;Debug Mode Activated&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// DEBUGOFF - turn off the DEBUG flag&lt;br /&gt;
DEBUGOFF() {&lt;br /&gt;
    FLAG_DEBUG = FALSE; // set debug flag to FALSE&lt;br /&gt;
    llOwnerSay(&amp;quot;Debug Mode Deactivated&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// COMBATOFF - turn off fist fighter&lt;br /&gt;
COMBATOFF() {&lt;br /&gt;
    FLAG_FISTS = FALSE; // disable flag to exit/ignore any more control events&lt;br /&gt;
    if ( FLAG_CONTROLS == TRUE ) { // do we have control permission?&lt;br /&gt;
        llReleaseControls(); // release the controls&lt;br /&gt;
        FLAG_CONTROLS = FALSE; // remember that we released controls&lt;br /&gt;
    }&lt;br /&gt;
    llOwnerSay(&amp;quot;Close Combat Deactivated&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// COMBATON - turn on fist fighter&lt;br /&gt;
COMBATON() {&lt;br /&gt;
    FLAG_FISTS = TRUE; // yep, using fist fighter, for control events&lt;br /&gt;
    if ( FLAG_CONTROLS == FALSE ) { // do we have permission to read controls? No? we need it.&lt;br /&gt;
        llReleaseControls(); // release any previous controls on avatar&lt;br /&gt;
        llRequestPermissions(PLAYERID,PERMISSION_TAKE_CONTROLS|PERMISSION_TRIGGER_ANIMATION); // request permissions needed for fist fighter&lt;br /&gt;
    }             &lt;br /&gt;
    llOwnerSay(&amp;quot;Close Combat Activated&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// COMMAND - process chat and link message commands together&lt;br /&gt;
COMMAND(string command) {&lt;br /&gt;
    if ( command == &amp;quot;armoroff&amp;quot; ) { ARMOROFF(); return;} // turn off power armor&lt;br /&gt;
    if ( command == &amp;quot;armoron&amp;quot; ) { ARMORON(); return;} // turn on power armor&lt;br /&gt;
    if ( command == &amp;quot;checkammo&amp;quot; ) { CHECKAMMO(); return;} // check ammo in weapons&lt;br /&gt;
    if ( command == &amp;quot;checkarmor&amp;quot; ) { RECALCULATE_ARMOR(); return; } // check our current armor value&lt;br /&gt;
    if ( command == &amp;quot;checkbattery&amp;quot;) { CHECKBATTERY(); return;}  // check power armor battery&lt;br /&gt;
    if ( command == &amp;quot;combatoff&amp;quot;) { COMBATOFF(); return; } // turn off fist fighter&lt;br /&gt;
    if ( command == &amp;quot;combaton&amp;quot; ) { COMBATON(); return; } // turn on the fist fighter&lt;br /&gt;
    if ( command == &amp;quot;credits&amp;quot; ) { CREDITS(); return;} // show the credits including version number&lt;br /&gt;
    if ( command == &amp;quot;debugoff&amp;quot; ) { DEBUGOFF(); return; } // player turn off debugging&lt;br /&gt;
    if ( command == &amp;quot;debugon&amp;quot; ) { DEBUGON(); return;} // player turn on debugging&lt;br /&gt;
    if ( command == &amp;quot;drawboth&amp;quot; ) { DRAW(&amp;quot;both&amp;quot;); return; } // draw both weapons&lt;br /&gt;
    if ( command == &amp;quot;drawleft&amp;quot; ) { DRAW(&amp;quot;left&amp;quot;); return; } // draw weapon in left hand&lt;br /&gt;
    if ( command == &amp;quot;drawright&amp;quot; ) { DRAW(&amp;quot;right&amp;quot;); return; } // draw weapon using right hand&lt;br /&gt;
    if ( command == &amp;quot;holsterboth&amp;quot; ) { HOLSTER(&amp;quot;both&amp;quot;); return; } // holster both weapons&lt;br /&gt;
    if ( command == &amp;quot;holsterleft&amp;quot; ) { HOLSTER(&amp;quot;left&amp;quot;); return; } // holster weapon in left hand&lt;br /&gt;
    if ( command == &amp;quot;holsterright&amp;quot; ) { HOLSTER(&amp;quot;right&amp;quot;); return; } // holster weapon in right hand&lt;br /&gt;
    if ( command == &amp;quot;quest&amp;quot; ) { QUEST(); return; } // check our current quest status&lt;br /&gt;
    if ( command == &amp;quot;recharge&amp;quot; ) { RECHARGE(); return;} // recharge power armor battery&lt;br /&gt;
    if ( command == &amp;quot;reload&amp;quot; ) { RELOAD(); return;}  // reload weapons&lt;br /&gt;
    if ( command == &amp;quot;reset&amp;quot; ) { RESET(); return;} // reset HUD&lt;br /&gt;
    if ( command == &amp;quot;safetyoff&amp;quot; ) { SAFETYOFF(); return;} // unsafe the weapons&lt;br /&gt;
    if ( command == &amp;quot;safetyon&amp;quot; ) { SAFETYON(); return;} // safe the weapons&lt;br /&gt;
    if ( command == &amp;quot;sheatheboth&amp;quot; ) { SHEATHE(&amp;quot;both&amp;quot;); return; } // sheathe both weapons&lt;br /&gt;
    if ( command == &amp;quot;sheatheleft&amp;quot; ) { SHEATHE(&amp;quot;left&amp;quot;); return; } // sheathe weapon in left hand&lt;br /&gt;
    if ( command == &amp;quot;sheatheright&amp;quot; ) { SHEATHE(&amp;quot;right&amp;quot;); return; } // sheathe weapon in right hand&lt;br /&gt;
    if ( command == &amp;quot;version&amp;quot; ) { CREDITS(); return;} // show the credits including version number&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// QUEST STATUS&lt;br /&gt;
QUEST() {&lt;br /&gt;
    llMessageLinked(LINK_THIS,0,&amp;quot;BAMSTATUS&amp;quot;,PLAYERID); // send a status request to BAM Modules&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// DRAW weapons&lt;br /&gt;
DRAW(string hand) {&lt;br /&gt;
    if ( hand == &amp;quot;left&amp;quot; ) { llWhisper(CHANATTACH,&amp;quot;DRAWLEFT&amp;quot;); return; } // draw left-hand weapon&lt;br /&gt;
    if ( hand == &amp;quot;right&amp;quot; ) { llWhisper(CHANATTACH,&amp;quot;DRAWRIGHT&amp;quot;); return; } // draw right-hand weapon&lt;br /&gt;
    if ( hand == &amp;quot;both&amp;quot; ) { llWhisper(CHANATTACH,&amp;quot;DRAWBOTH&amp;quot;); return; } // draw both weapons&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// SHEATHE weapons&lt;br /&gt;
SHEATHE(string hand) {&lt;br /&gt;
    if ( hand == &amp;quot;left&amp;quot; ) { llWhisper(CHANATTACH,&amp;quot;SHEATHELEFT&amp;quot;); return; } // sheathe left-hand weapon&lt;br /&gt;
    if ( hand == &amp;quot;right&amp;quot; ) { llWhisper(CHANATTACH,&amp;quot;SHEATHERIGHT&amp;quot;); return; } // sheathe right-hand weapon&lt;br /&gt;
    if ( hand == &amp;quot;both&amp;quot; ) { llWhisper(CHANATTACH,&amp;quot;SHEATHEBOTH&amp;quot;); return; } // sheathe both weapons&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// HOLSTER weapons&lt;br /&gt;
HOLSTER(string hand) {&lt;br /&gt;
    if ( hand == &amp;quot;left&amp;quot; ) { llWhisper(CHANATTACH,&amp;quot;HOLSTERLEFT&amp;quot;); return; } // holster left-hand weapon&lt;br /&gt;
    if ( hand == &amp;quot;right&amp;quot; ) { llWhisper(CHANATTACH,&amp;quot;HOLSTERRIGHT&amp;quot;); return; } // holster right-hand weapon&lt;br /&gt;
    if ( hand == &amp;quot;both&amp;quot; ) { llWhisper(CHANATTACH,&amp;quot;HOLSTERBOTH&amp;quot;); return; } // holster both weapons&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// CHECK AMMO&lt;br /&gt;
CHECKAMMO() {&lt;br /&gt;
    llWhisper(CHANATTACH,&amp;quot;CHECKAMMO&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// RELOAD&lt;br /&gt;
RELOAD() {&lt;br /&gt;
    llWhisper(CHANATTACH,&amp;quot;RELOAD&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// SAFETY ON&lt;br /&gt;
SAFETYON() {&lt;br /&gt;
    llWhisper(CHANATTACH, &amp;quot;SAFETYON&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// SAFETY OFF&lt;br /&gt;
SAFETYOFF() { &lt;br /&gt;
    llWhisper(CHANATTACH, &amp;quot;SAFETYOFF&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ARMOR ON&lt;br /&gt;
ARMORON() {&lt;br /&gt;
    llWhisper(CHANATTACH,&amp;quot;ARMORON&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ARMOROFF&lt;br /&gt;
ARMOROFF() {&lt;br /&gt;
    llWhisper(CHANATTACH,&amp;quot;ARMOROFF&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// CHECKBATTERY&lt;br /&gt;
CHECKBATTERY() {&lt;br /&gt;
    llWhisper(CHANATTACH,&amp;quot;CHECKBATTERY&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// RECHARGE&lt;br /&gt;
RECHARGE() {&lt;br /&gt;
    llWhisper(CHANATTACH,&amp;quot;RECHARGE&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// DEFAULT STATE - load character sheet&lt;br /&gt;
default {&lt;br /&gt;
&lt;br /&gt;
    // STATE ENTRY - called on Reset&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        SETUP(); // show credits and start character sheet load&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // on_rez - when rezzed to ground or from inventory as attachment during login&lt;br /&gt;
    on_rez(integer params) {&lt;br /&gt;
        RESET(); // force to go through state entry&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // attach - when attached or detached from inventory or during login&lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        RESET(); // force to go through state entry&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // dataserver called for each line of notecard requested - process character sheet&lt;br /&gt;
    dataserver(key queryid,string data) {&lt;br /&gt;
        if ( queryid == QUERY ) { // ataserver gave us line we asked for?&lt;br /&gt;
            if ( data != EOF ) { // we&#039;re not at end of notecard file?&lt;br /&gt;
                if ( llGetSubString(data,0,0) == &amp;quot;#&amp;quot; ) { // does this line start with comment mark?&lt;br /&gt;
                    QUERY = llGetNotecardLine(CARD,LINE++); // ignore comment and ask for the next line&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                // Parse non-comment lines in keyword = value[,value,...] format&lt;br /&gt;
                list FIELDS = llParseString2List(data,[&amp;quot;=&amp;quot;],[]); // break line of text into = delimited fields&lt;br /&gt;
                string CMD = llStringTrim(llList2String(FIELDS,0),STRING_TRIM); // field zero is the &amp;quot;command&amp;quot;&lt;br /&gt;
                string DATA = llStringTrim(llList2String(FIELDS,1),STRING_TRIM); // field one is the data&lt;br /&gt;
                list SUBFIELDS = llParseString2List(DATA,[&amp;quot;,&amp;quot;],[]); // break data field into comma-delimited subfields if needed&lt;br /&gt;
                if ( CMD == &amp;quot;NAME&amp;quot; )        { NAME = DATA; } // TODO verify names are appropriate&lt;br /&gt;
                if ( CMD == &amp;quot;SPECIES&amp;quot; )     { SPECIES = DATA; } // TODO verify valid species template name&lt;br /&gt;
                if ( CMD == &amp;quot;BACKGROUND&amp;quot; ) { BACKGROUND = DATA; } // TODO verify valid background template name&lt;br /&gt;
                if ( CMD == &amp;quot;CAREER&amp;quot; )     { CAREER = DATA; } // TODO verify valid career template name&lt;br /&gt;
                if ( CMD == &amp;quot;XP&amp;quot; ) {&lt;br /&gt;
                    integer amount = (integer)DATA; // convert to number&lt;br /&gt;
                    if ( amount &amp;gt;= MINXP &amp;amp;&amp;amp; amount &amp;lt;= MAXXP ) { // XP valid?&lt;br /&gt;
                        XP = amount; // store it&lt;br /&gt;
                    } else { // invalid, report it&lt;br /&gt;
                        ERROR(&amp;quot;XP amount out of allowed range: &amp;quot;+(string)MINXP+&amp;quot;-&amp;quot;+(string)MAXXP);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if ( CMD == &amp;quot;XPLEVEL&amp;quot; ) {&lt;br /&gt;
                    integer amount = (integer)DATA; // convert to number&lt;br /&gt;
                    if ( amount &amp;gt;= MINLEVEL &amp;amp;&amp;amp; amount &amp;lt;= MAXLEVEL ) { // XPLEVEL valid?&lt;br /&gt;
                        XPLEVEL = amount; // store it&lt;br /&gt;
                    } else { // invalid, report it&lt;br /&gt;
                        ERROR(&amp;quot;XPLEVEL amount out of allowed range: &amp;quot;+(string)MINLEVEL+&amp;quot;-&amp;quot;+(string)MAXLEVEL);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if ( CMD == &amp;quot;POWER&amp;quot; ) { // TODO fix hardcoded power&lt;br /&gt;
                    integer amount = (integer)DATA; // convert to number&lt;br /&gt;
                    if ( amount &amp;gt;= MINSTAT &amp;amp;&amp;amp; amount &amp;lt;= MAXSTAT ) { // stat valid?&lt;br /&gt;
                        POWER = amount; // store it&lt;br /&gt;
                    } else { // invalid, report it&lt;br /&gt;
                        ERROR(&amp;quot;POWER amount out of allowed range: &amp;quot;+(string)MINSTAT+&amp;quot;-&amp;quot;+(string)MAXSTAT);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if ( CMD == &amp;quot;GRACE&amp;quot; ) { // TODO fix hardcoded grace&lt;br /&gt;
                    integer amount = (integer)DATA; // convert to number&lt;br /&gt;
                    if ( amount &amp;gt;= MINSTAT &amp;amp;&amp;amp; amount &amp;lt;= MAXSTAT ) { // stat valid?&lt;br /&gt;
                        GRACE = amount; // store it&lt;br /&gt;
                    } else { // invalid, report it&lt;br /&gt;
                        ERROR(&amp;quot;GRACE amount out of allowed range: &amp;quot;+(string)MINSTAT+&amp;quot;-&amp;quot;+(string)MAXSTAT);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if ( CMD == &amp;quot;INTELLECT&amp;quot; ) { // TODO fix hardcoded intellect&lt;br /&gt;
                    integer amount = (integer)DATA; // convert to number&lt;br /&gt;
                    if ( amount &amp;gt;= MINSTAT &amp;amp;&amp;amp; amount &amp;lt;= MAXSTAT ) { // stat valid?&lt;br /&gt;
                        INTELLECT = amount; // store it&lt;br /&gt;
                    } else { // invalid, report it&lt;br /&gt;
                        ERROR(&amp;quot;INTELLECT amount out of allowed range: &amp;quot;+(string)MINSTAT+&amp;quot;-&amp;quot;+(string)MAXSTAT);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if ( CMD == &amp;quot;SPIRIT&amp;quot; ) { // TODO fix hardcoded spirit&lt;br /&gt;
                    integer amount = (integer)DATA; // convert to number&lt;br /&gt;
                    if ( amount &amp;gt;= MINSTAT &amp;amp;&amp;amp; amount &amp;lt;= MAXSTAT ) { // stat valid?&lt;br /&gt;
                        SPIRIT = amount; // store it&lt;br /&gt;
                    } else { // invalid, report it&lt;br /&gt;
                        ERROR(&amp;quot;SPIRIT amount out of allowed range: &amp;quot;+(string)MINSTAT+&amp;quot;-&amp;quot;+(string)MAXSTAT);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if ( CMD == &amp;quot;WOUNDS&amp;quot; ) { // TODO fix hardcoded resilience&lt;br /&gt;
                    integer amount = (integer)DATA; // convert to number&lt;br /&gt;
                    if ( amount &amp;gt;= MINRESILIENCE &amp;amp;&amp;amp; amount &amp;lt;= MAXRESILIENCE ) { // resilience valid?&lt;br /&gt;
                        WOUNDS = amount; // store it&lt;br /&gt;
                        CURWOUNDS = amount; // set current wounds to max too.&lt;br /&gt;
                    } else { // invalid, report it&lt;br /&gt;
                        ERROR(&amp;quot;WOUNDS amount out of allowed range: &amp;quot;+(string)MINRESILIENCE+&amp;quot;-&amp;quot;+(string)MAXRESILIENCE);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if ( CMD == &amp;quot;CRITICAL&amp;quot; ) { // TODO fix hardcoded resilience&lt;br /&gt;
                    integer amount = (integer)DATA; // convert to number&lt;br /&gt;
                    if ( amount &amp;gt;= MINRESILIENCE &amp;amp;&amp;amp; amount &amp;lt;= MAXRESILIENCE ) { // resilience valid?&lt;br /&gt;
                        CRITICAL = amount; // store it&lt;br /&gt;
                        CURCRITICAL = amount; // set the current critical wound to max too&lt;br /&gt;
                    } else { // invalid, report it&lt;br /&gt;
                        ERROR(&amp;quot;CRITICAL amount out of allowed range: &amp;quot;+(string)MINRESILIENCE+&amp;quot;-&amp;quot;+(string)MAXRESILIENCE);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if ( CMD == &amp;quot;RESOLVE&amp;quot; ) { // TODO fix hardcoded resilience&lt;br /&gt;
                    integer amount = (integer)DATA; // convert to number&lt;br /&gt;
                    if ( amount &amp;gt;= MINRESILIENCE &amp;amp;&amp;amp; amount &amp;lt;= MAXRESILIENCE ) { // resilience valid?&lt;br /&gt;
                        RESOLVE = amount; // store it&lt;br /&gt;
                        CURRESOLVE = amount; // set current resolve to max too&lt;br /&gt;
                    } else { // invalid, report it&lt;br /&gt;
                        ERROR(&amp;quot;RESOLVE amount out of allowed range: &amp;quot;+(string)MINRESILIENCE+&amp;quot;-&amp;quot;+(string)MAXRESILIENCE);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if ( CMD == &amp;quot;BOON&amp;quot; ) {&lt;br /&gt;
                    string boonname = llList2String(SUBFIELDS,0); // find the boon name&lt;br /&gt;
                    integer boonrank = llList2Integer(SUBFIELDS,1); // find the boon rank value&lt;br /&gt;
                    // TODO how to verify boon names are valid?&lt;br /&gt;
                    if ( boonrank &amp;gt;= MINBOON &amp;amp;&amp;amp; boonrank &amp;lt;= MAXBOON ) { // rank valid?&lt;br /&gt;
                        BOONS = [boonname,boonrank] + BOONS; // add boon to list&lt;br /&gt;
                    } else { // invalid, report it&lt;br /&gt;
                        ERROR(&amp;quot;BOON &amp;quot;+boonname+&amp;quot; rank &amp;quot;+(string)boonrank+&amp;quot; value out of allowed range: &amp;quot;+(string)MINBOON+&amp;quot;-&amp;quot;+(string)MAXBOON);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if ( CMD == &amp;quot;FLAW&amp;quot; ) {&lt;br /&gt;
                    string flawname = llList2String(SUBFIELDS,0); // find the flaw name&lt;br /&gt;
                    integer flawrank = llList2Integer(SUBFIELDS,1); // find the flaw rank value&lt;br /&gt;
                    // TODO how to verify flaw names are valid?&lt;br /&gt;
                    if ( flawrank &amp;gt;= MINFLAW &amp;amp;&amp;amp; flawrank &amp;lt;= MAXFLAW ) { // rank valid?&lt;br /&gt;
                        FLAWS = [flawname,flawrank] + FLAWS; // add flaw to list&lt;br /&gt;
                    } else { // invalid, report it&lt;br /&gt;
                        ERROR(&amp;quot;FLAW &amp;quot;+flawname+&amp;quot; rank &amp;quot;+(string)flawrank+&amp;quot; value out of allowed range: &amp;quot;+(string)MINFLAW+&amp;quot;-&amp;quot;+(string)MAXFLAW);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if ( CMD == &amp;quot;SKILL&amp;quot; ) {&lt;br /&gt;
                    string skillname = llList2String(SUBFIELDS,0); // find the skill name&lt;br /&gt;
                    integer skillrank = llList2Integer(SUBFIELDS,1); // find the skill rank&lt;br /&gt;
                    // TODO how to verify skill names are valid?&lt;br /&gt;
                    if ( skillrank &amp;gt;= MINSKILL &amp;amp;&amp;amp; skillrank &amp;lt;= MAXSKILL ) { // skill rank valid?&lt;br /&gt;
                        SKILLS = [skillname,skillrank] + SKILLS; // add skill to list&lt;br /&gt;
                    } else { // invalid, report it&lt;br /&gt;
                        ERROR(&amp;quot;SKILL &amp;quot;+skillname+&amp;quot; rank &amp;quot;+(string)skillrank+&amp;quot; value out of allowed range: &amp;quot;+(string)MINSKILL+&amp;quot;-&amp;quot;+(string)MAXSKILL);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if ( CMD == &amp;quot;EFFECT&amp;quot; ) {&lt;br /&gt;
                    string effectname = llList2String(SUBFIELDS,0); // find effect name&lt;br /&gt;
                    integer effectrank = llList2Integer(SUBFIELDS,1); // find effect rank&lt;br /&gt;
                    // TODO how to verify effect name?&lt;br /&gt;
                    if ( effectrank &amp;gt;= MINEFFECT &amp;amp;&amp;amp; effectrank &amp;lt;= MAXEFFECT ) { // effect rank valid?&lt;br /&gt;
                        EFFECTS = [effectname,effectrank] + EFFECTS; // add effect to list&lt;br /&gt;
                    } else { // invalid, report it&lt;br /&gt;
                        ERROR(&amp;quot;EFFECT &amp;quot;+effectname+&amp;quot; rank &amp;quot;+(string)effectrank+&amp;quot; value out of allowed range: &amp;quot;+(string)MINEFFECT+&amp;quot;-&amp;quot;+(string)MAXEFFECT);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if ( CMD == &amp;quot;STUNT&amp;quot; ) { // TODO how to handle stunts with commas?&lt;br /&gt;
                    string stuntname = llList2String(SUBFIELDS,0); // find stunt&lt;br /&gt;
                    // TODO how to verify stunt?&lt;br /&gt;
                    STUNTS = [stuntname] + STUNTS; // add stunt to list&lt;br /&gt;
                }&lt;br /&gt;
                if ( CMD == &amp;quot;QUOTE&amp;quot; ) { // TODO how to handle quotes with commas?&lt;br /&gt;
                    string quotename = llList2String(SUBFIELDS,0); // find quote&lt;br /&gt;
                    QUOTES = [quotename] + QUOTES; // add quote to list&lt;br /&gt;
                }&lt;br /&gt;
                if ( CMD == &amp;quot;EQUIPMENT&amp;quot; ) {&lt;br /&gt;
                    string equipmentname = llList2String(SUBFIELDS,0); // find equipment note&lt;br /&gt;
                    integer equipmentamount = llList2Integer(SUBFIELDS,1); // find equipment count&lt;br /&gt;
                    // TODO how to verify the equipment name is valid?&lt;br /&gt;
                    if ( equipmentamount &amp;gt;= MINEQUIPPED &amp;amp;&amp;amp; equipmentamount &amp;lt;= MAXEQUIPPED ) { // amount valid?&lt;br /&gt;
                        EQUIPMENT = [equipmentname,equipmentamount] + EQUIPMENT; // add equipment to list&lt;br /&gt;
                    } else { // invalid, report it&lt;br /&gt;
                        ERROR(&amp;quot;EQUIPMENT &amp;quot;+equipmentname+&amp;quot; amount &amp;quot;+(string)equipmentamount+&amp;quot; value out of allowed range: &amp;quot;+(string)MINEQUIPPED+&amp;quot;-&amp;quot;+(string)MAXEQUIPPED);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                QUERY = llGetNotecardLine(CARD,LINE++); // finished with known keywords, get next line&lt;br /&gt;
            } else { // end of notecard&lt;br /&gt;
                // TODO how to verify entire character sheet was completed and loaded?&lt;br /&gt;
                state running; // we&#039;re out of notecard, so character sheet is loaded - start playing&lt;br /&gt;
            } // end if data not equal eof&lt;br /&gt;
        } // end if query id equal&lt;br /&gt;
    } // end if data server event&lt;br /&gt;
} // end default state&lt;br /&gt;
&lt;br /&gt;
// STATE RUNNING - character sheet loaded - player is active in the game&lt;br /&gt;
state running {&lt;br /&gt;
&lt;br /&gt;
    // STATE ENTRY&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        llOwnerSay(&amp;quot;Character Sheet loaded. You are now ready to roleplay.&amp;quot;);&lt;br /&gt;
        HANDMYRIAD = llListen(CHANMYRIAD,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;); // setup listener for Myriad RP events&lt;br /&gt;
        HANDCOMMAND = llListen(CHANCOMMAND,&amp;quot;&amp;quot;,PLAYERID,&amp;quot;&amp;quot;); // listen to chat commands from owner&lt;br /&gt;
        CHANPLAYER = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)PLAYERID,0,6)); // calculate a player-specfic dynamic chat channel&lt;br /&gt;
        HANDPLAYER = llListen(CHANPLAYER,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;); // listen on the player dynamic chat channel&lt;br /&gt;
        CHANATTACH = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)PLAYERID,1,7)); // attachment-specific channel&lt;br /&gt;
        HANDATTACH = llListen(CHANATTACH,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;); // listen for messages from attachments&lt;br /&gt;
        CHANBAM = (integer)(CHAN_PREFIX + llGetSubString((string)PLAYERID,-7,-1));&lt;br /&gt;
        HANDBAM = llListen(CHANBAM,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;); // start listener with listenremove handle&lt;br /&gt;
        // setup bitfield of controls we&#039;re going to monitor in fist fighter mode&lt;br /&gt;
        CONTROLS = CONTROL_ML_LBUTTON | CONTROL_LBUTTON | CONTROL_FWD | CONTROL_BACK | CONTROL_ROT_LEFT | CONTROL_LEFT | CONTROL_RIGHT | CONTROL_ROT_RIGHT | CONTROL_UP | CONTROL_DOWN;&lt;br /&gt;
        FIELD_OF_ATTACK = PI/6; // set fist fighter field of attack to +/- 30 degree cone from direction avatar faces - PERSONAL CHOICE NOT IN MYRIAD RULES&lt;br /&gt;
        llOwnerSay(&amp;quot;Registering any Myriad Lite-compatible attachments...&amp;quot;);&lt;br /&gt;
        llWhisper(CHANATTACH,&amp;quot;REGISTERATTACHMENTS&amp;quot;); // ask for attachments on their dynamic channel&lt;br /&gt;
         // calculate player&#039;s dynamic BAM channel&lt;br /&gt;
        METER(); // update hovertext&lt;br /&gt;
        QUEST(); // update the BAM Module&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // ON_REZ - logged in with meter, or worn from inventory while running&lt;br /&gt;
    on_rez(integer rezparam) {&lt;br /&gt;
        RESET(); // a reset to reload character&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // ATTACH - logged in with meter or worn from inventory/ground while running&lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        RESET(); // a reset to reload character&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // CHANGED - triggered for many changes to the avatar&lt;br /&gt;
    // TODO reload sim-specific settings on region change&lt;br /&gt;
    changed(integer changes) {&lt;br /&gt;
        if ( changes &amp;amp; CHANGED_INVENTORY ) { // inventory changed somehow?&lt;br /&gt;
            llOwnerSay(&amp;quot;Inventory changed. Reloading.&amp;quot;);&lt;br /&gt;
            RESET(); // saved a new character sheet? - reset and re-read it.&lt;br /&gt;
        }&lt;br /&gt;
        if ( changes &amp;amp; CHANGED_REGION || changes &amp;amp; CHANGED_TELEPORT ) {&lt;br /&gt;
            METER(); // update the meter after a shift&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // RUN_TIME_PERMISSIONS&lt;br /&gt;
    run_time_permissions(integer perm) {&lt;br /&gt;
        if ( perm &amp;amp; PERMISSION_TAKE_CONTROLS ) { // was script granted permission to take avatar controls?&lt;br /&gt;
            llTakeControls(CONTROLS,TRUE,TRUE); // then take them, but still pass them to other scripts like vehicles&lt;br /&gt;
            FLAG_CONTROLS = TRUE; // remember that we got permission for this&lt;br /&gt;
        }&lt;br /&gt;
        if ( perm &amp;amp; PERMISSION_TRIGGER_ANIMATION ) { // we script granted permission to trigger animations on the avatar?&lt;br /&gt;
            FLAG_ANIMATE = TRUE; // remember that we got permission for this&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // TOUCH_START - touch HUD for adventure update&lt;br /&gt;
    touch_start(integer total_number) {&lt;br /&gt;
        string action = llGetLinkName(llDetectedLinkNumber(0)); // get name of prim clicked in link set&lt;br /&gt;
        if ( action != &amp;quot;&amp;quot; &amp;amp;&amp;amp; action != llGetObjectName() ) { // someone clicked a named button prim on this linkset&lt;br /&gt;
            COMMAND(action); // try that prim name as a command&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        METER();        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // CONTROL - read arrow keys and mouse button in first or third person mode&lt;br /&gt;
    control(key id,integer level,integer edge) {&lt;br /&gt;
        if ( FLAG_DEAD == TRUE || FLAG_INCAPACITATED == TRUE ) return; // dead or incapacitated can&#039;t fight&lt;br /&gt;
        if ( FLAG_FISTS == FALSE ) return; // not using fist fighter&lt;br /&gt;
        if ( FLAG_ANIMATE == FALSE ) return; // can&#039;t show animations&lt;br /&gt;
        if ( llGetUnixTime() &amp;lt;= TIME_NEXT_ATTACK ) return; // too soon since last attack&lt;br /&gt;
&lt;br /&gt;
        // Is the mouse button held down?&lt;br /&gt;
        if ( ( level &amp;amp; CONTROL_LBUTTON ) || ( level &amp;amp; CONTROL_ML_LBUTTON ) ) {&lt;br /&gt;
            // Mouse + Left Arrow = left-handed punch&lt;br /&gt;
            if ( ( edge &amp;amp; CONTROL_LEFT ) || ( edge &amp;amp; CONTROL_ROT_LEFT ) ) {&lt;br /&gt;
                // TODO fix timing to Myriad rules&lt;br /&gt;
                HAND_TO_HAND(SINGLE_PUNCH_DELAY,ANIM_PUNCH_LEFT,ARM_LENGTH); // left punch with 1m reach, 1 second recover&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            // Mouse + Rigth Arrow = right-handed punch&lt;br /&gt;
            if ( ( edge &amp;amp; CONTROL_RIGHT ) || ( edge &amp;amp; CONTROL_ROT_RIGHT ) ) {&lt;br /&gt;
                // TODO fix timing to Myriad rules&lt;br /&gt;
                HAND_TO_HAND(SINGLE_PUNCH_DELAY,ANIM_PUNCH_RIGHT,ARM_LENGTH); // right punch, 1m reach, 1 second recover&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if ( ( edge &amp;amp; CONTROL_UP ) || ( edge &amp;amp; CONTROL_FWD ) ) {&lt;br /&gt;
                // TODO fix timing to Myriad rules&lt;br /&gt;
                HAND_TO_HAND(DOUBLE_PUNCH_DELAY,ANIM_PUNCH_ONETWO,ARM_LENGTH); // left-right combo, 1m reach, 2 second recover&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if ( ( edge &amp;amp; CONTROL_DOWN ) || ( edge &amp;amp; CONTROL_BACK ) ) {&lt;br /&gt;
                // TODO fix timing to Myriad rules&lt;br /&gt;
                HAND_TO_HAND(KICK_DELAY,ANIM_KICK,LEG_LENGTH); // kick, 1.5m reach, 3 second recover&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
        } // end if mouse button held down&lt;br /&gt;
    } // end of control event&lt;br /&gt;
&lt;br /&gt;
    // SENSOR for who was in attack range and field of attack&lt;br /&gt;
    sensor(integer num_detected) {&lt;br /&gt;
        while(num_detected--) { // count down all results in range and field of attack&lt;br /&gt;
            key hitwho = llDetectedKey(num_detected); // key of who or what we hit&lt;br /&gt;
            string name = llDetectedName(num_detected); // name of who we hit&lt;br /&gt;
            integer attskill = GET_SKILL_RANK(&amp;quot;Close Combat&amp;quot;); // get our close combat skill rank&lt;br /&gt;
            integer victimchan = (integer)(&amp;quot;0x&amp;quot;+llGetSubString(hitwho,0,6)); // calculate dynamic channel of who we hit&lt;br /&gt;
            llRegionSay(CHANMYRIAD,&amp;quot;RPEVENT&amp;quot;+DIV+llKey2Name(PLAYERID)+&amp;quot; strikes at &amp;quot;+name+&amp;quot; in Close Combat!&amp;quot;);    &lt;br /&gt;
            // tell victim HUD to perform a CLOSE COMBAT opposed ability test&lt;br /&gt;
            // attacker Power stat/Close Combat skill rank vs. Defender Grace stat/Close Combat skill rank&lt;br /&gt;
            // See Myriad PDF pp. 21-22 and Myriad Special Edition pp.27-28&lt;br /&gt;
            llRegionSay(victimchan,&amp;quot;CLOSEHIT&amp;quot;+DIV+(string)POWER+DIV+(string)attskill+DIV+(string)MELEEATTACKDICE+DIV+(string)PLAYERID+DIV+&amp;quot;fists and feet&amp;quot;);&lt;br /&gt;
            llOwnerSay(&amp;quot;You struck at &amp;quot;+name+&amp;quot; in Close Combat&amp;quot;);&lt;br /&gt;
        } // end while&lt;br /&gt;
    } // end sensor&lt;br /&gt;
&lt;br /&gt;
    // NO_SENSOR - this is called when the attack sensor detects nothing in range and field of attack&lt;br /&gt;
    no_sensor() {&lt;br /&gt;
        // here to fix rare bugs where sensor fails unles no_sensor is in state too&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // TIMER - scheduled events&lt;br /&gt;
    timer() {&lt;br /&gt;
        // Respawn timer ended&lt;br /&gt;
        if ( FLAG_DEAD == TRUE ) { // if dead&lt;br /&gt;
            llRegionSay(CHANMYRIAD,&amp;quot;RPEVENT&amp;quot;+DIV+llKey2Name(PLAYERID)+&amp;quot; respawns!&amp;quot;);&lt;br /&gt;
            RESET(); // reset and reload character&lt;br /&gt;
        }&lt;br /&gt;
        if ( FLAG_INCAPACITATED == TRUE ) { // if hurt&lt;br /&gt;
            HEAL(1); // heal 1 wound&lt;br /&gt;
        }&lt;br /&gt;
        if ( CURWOUNDS == WOUNDS ) { // fully healed?&lt;br /&gt;
            llSetTimerEvent(0.0); // stop timer&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // LINK MESSAGE - commands to and from other prims in HUD&lt;br /&gt;
    link_message(integer sender,integer num,string cmd, key id) {&lt;br /&gt;
        COMMAND(cmd); // send to shared command processor for chat and link messages&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // LISTEN - the main Myriad Lite message processor for RP events and player commands&lt;br /&gt;
    listen(integer channel, string speakername, key speakerid, string message) {&lt;br /&gt;
        // calculate the dynamic channel of who is speaking in case we need to return commands&lt;br /&gt;
        CHANOBJECT = (integer)(CHAN_PREFIX+llGetSubString((string)speakerid,0,6));&lt;br /&gt;
&lt;br /&gt;
        // break down the commands and messages into units we can work with&lt;br /&gt;
        list fields = llParseString2List(message,[DIV],[]); // break into list of fields based on DIVider&lt;br /&gt;
        string command = llList2String(fields,0); // assume the first field is a Myriad Lite command&lt;br /&gt;
&lt;br /&gt;
        // --- PLAYER COMMAND CHANNEL&lt;br /&gt;
        if ( channel == CHANCOMMAND ) { // handle player chat commands&lt;br /&gt;
            COMMAND(command); // send to shared command processor for chat and link messages&lt;br /&gt;
            return;&lt;br /&gt;
        } // end of if channel == player commands&lt;br /&gt;
&lt;br /&gt;
        // --- BAM CHANNEL&lt;br /&gt;
        if ( channel == CHANBAM ) {&lt;br /&gt;
            llMessageLinked(LINK_THIS,channel,message,speakerid); // send BAM to Module  &lt;br /&gt;
            return;&lt;br /&gt;
        } // end if channel BAMCHAN&lt;br /&gt;
&lt;br /&gt;
        // --- Myriad Lite regionwide messages&lt;br /&gt;
        if ( channel == CHANMYRIAD ) { // handle Myriad system messages&lt;br /&gt;
            if ( command == &amp;quot;RPEVENT&amp;quot; ) { // Myriad Lite RPEVENT - roleplay events everyone might find interesting&lt;br /&gt;
                string oldname = llGetObjectName(); // save the current object name&lt;br /&gt;
                llSetObjectName(&amp;quot;Myriad RP Event&amp;quot;); // change the object name to&lt;br /&gt;
                llOwnerSay(llList2String(fields,1)); // now tell the owner the rest of the RPEVENT| message&lt;br /&gt;
                llSetObjectName(oldname); // restore the HUD back to its original name&lt;br /&gt;
                return;&lt;br /&gt;
            } // end if RPEVENT&lt;br /&gt;
            return;&lt;br /&gt;
        } // end if channel == CHANMYRIAD&lt;br /&gt;
&lt;br /&gt;
        // --- ATTACHMENT CHANNEL&lt;br /&gt;
        if ( channel == CHANATTACH ) { // handle the attachment commands&lt;br /&gt;
            if ( FLAG_DEAD == TRUE || FLAG_INCAPACITATED == TRUE ) return; // can&#039;t mess with attachments while down&lt;br /&gt;
            if ( command == &amp;quot;ATTACHARMOR&amp;quot; ) { // player attached armor somewhere&lt;br /&gt;
                integer armorrating = llList2Integer(fields,1); // get armor value&lt;br /&gt;
                integer attachpoint = llList2Integer(fields,2); // get armor location&lt;br /&gt;
                string armorname = llList2String(fields,3); // get armor&#039;s name&lt;br /&gt;
                WEARARMOR(attachpoint,armorrating,armorname); // add armor to set of armor worn&lt;br /&gt;
                return;                &lt;br /&gt;
            }&lt;br /&gt;
            if ( command == &amp;quot;DETACHARMOR&amp;quot; ) { // player attached armor somewhere&lt;br /&gt;
                integer armorrating = llList2Integer(fields,1); // get armor value&lt;br /&gt;
                integer attachpoint = llList2Integer(fields,2); // get armor location&lt;br /&gt;
                string armorname = llList2String(fields,3); // get armor&#039;s name&lt;br /&gt;
                REMOVEARMOR(attachpoint,armorrating,armorname); // detach armor from set of armor worn&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if ( command == &amp;quot;ATTACHMELEE&amp;quot; || command == &amp;quot;ATTACHRANGED&amp;quot; ) { // holding a weapon rather than using fists?&lt;br /&gt;
                FLAG_FISTS = FALSE; // turn off fist fighter&lt;br /&gt;
                if ( FLAG_CONTROLS == TRUE ) { // if we own controls...&lt;br /&gt;
                    llReleaseControls(); // release them&lt;br /&gt;
                    FLAG_CONTROLS = FALSE; // and remember&lt;br /&gt;
                }&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if ( command == &amp;quot;DETACHMELEE&amp;quot; || command == &amp;quot;DETACHRANGED&amp;quot; ) { // are we going back to fists?&lt;br /&gt;
                FLAG_FISTS = TRUE; // turn fist fighter back on&lt;br /&gt;
                if ( FLAG_CONTROLS == FALSE ) { // if we don&#039;t have controls&lt;br /&gt;
                    llReleaseControls(); // release them just in case&lt;br /&gt;
                    llRequestPermissions(PLAYERID,PERMISSION_TAKE_CONTROLS|PERMISSION_TRIGGER_ANIMATION); // then ask to take controls&lt;br /&gt;
                }&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if ( command == &amp;quot;ATTACHMETER&amp;quot; ) {&lt;br /&gt;
                METERWORN = TRUE; // we need to send meter events&lt;br /&gt;
                METER(); // send update&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if ( command == &amp;quot;DETACHMETER&amp;quot; ) {&lt;br /&gt;
                METERWORN = FALSE;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        // --- CHANPLAYER&lt;br /&gt;
        if ( channel == CHANPLAYER ) { // handle player dynamic commands&lt;br /&gt;
            // we&#039;ve been hit and have to make an opposed ability test to avoid it&lt;br /&gt;
            if ( command == &amp;quot;HITCHECK&amp;quot; || command == &amp;quot;RANGEDHIT&amp;quot; || command == &amp;quot;CLOSEHIT&amp;quot; ) { // mortal combat attack message?&lt;br /&gt;
                integer attackstat = llList2Integer(fields,1); // get attackers stat&lt;br /&gt;
                integer attackskill = llList2Integer(fields,2); // get attackers skill&lt;br /&gt;
                integer attackdice = llList2Integer(fields,3); // get attacker object&#039;s attack dice&lt;br /&gt;
                key owner = llList2Key(fields,4); // get attacker object&#039;s key&lt;br /&gt;
                string item = llList2String(fields,5); // get attacker object name&lt;br /&gt;
                if ( attackstat &amp;lt; MINSTAT || attackstat &amp;gt; MAXSTAT ) { // is the attack stat value out of allowed range?&lt;br /&gt;
                    ERROR(&amp;quot;Attack stat value &amp;quot;+(string)attackstat+&amp;quot; out of range: &amp;quot;+(string)MINSTAT+&amp;quot;-&amp;quot;+(string)MAXSTAT);&lt;br /&gt;
                    // TODO make a tattletale RP event?&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                if ( attackskill &amp;lt; MINSKILL || attackstat &amp;gt; MAXSKILL ) { // is the attack skill value out of allowed range?&lt;br /&gt;
                    ERROR(&amp;quot;Attack skill value &amp;quot;+(string)attackskill+&amp;quot; out of range: &amp;quot;+(string)MINSKILL+&amp;quot;-&amp;quot;+(string)MAXSKILL);&lt;br /&gt;
                    // TODO make a tattletale RP event?&lt;br /&gt;
                    return;&lt;br /&gt;
                }             &lt;br /&gt;
                if ( attackdice &amp;lt; MINDAMAGE || attackdice &amp;gt; MAXDAMAGE ) { // is the attacking weapon&#039;s attack dice value out of allowed range?&lt;br /&gt;
                    ERROR(&amp;quot;Attack dice value out of range: &amp;quot;+(string)MINDAMAGE+&amp;quot;-&amp;quot;+(string)MAXDAMAGE);&lt;br /&gt;
                    // TODO make a tattletale RP event?&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                integer skillamount = 0; // create a place to hold the defenders mortal combat skill rank&lt;br /&gt;
                if ( command == &amp;quot;HITCHECK&amp;quot; || command == &amp;quot;RANGEDHIT&amp;quot; ) { // if this is ranged combat&lt;br /&gt;
                    skillamount = GET_SKILL_RANK(&amp;quot;Ranged Combat&amp;quot;); // get ranged combat skill rank&lt;br /&gt;
                }&lt;br /&gt;
                if ( command == &amp;quot;CLOSEHIT&amp;quot; ) { // if this is close combat&lt;br /&gt;
                    skillamount = GET_SKILL_RANK(&amp;quot;Close Combat&amp;quot;); // get close combat skill rank&lt;br /&gt;
                }&lt;br /&gt;
                // see if we&#039;re hit&lt;br /&gt;
                integer amihit = OPPOSED_TEST(attackstat,attackskill,GRACE,skillamount); // attacker power+skill vs. defender grace+skill&lt;br /&gt;
                if ( amihit == TRUE ) { // we&#039;re hit!&lt;br /&gt;
                    if ( command == &amp;quot;HITCHECK&amp;quot; || command == &amp;quot;RANGEDHIT&amp;quot; ) { // we&#039;re hit by ranged attack&lt;br /&gt;
                        llOwnerSay(&amp;quot;You&#039;ve been hit in ranged combat by &amp;quot;+llKey2Name(owner)+&amp;quot;&#039;s &amp;quot;+item+&amp;quot;!&amp;quot;);&lt;br /&gt;
                    }&lt;br /&gt;
                    if ( command == &amp;quot;CLOSEHIT&amp;quot; ) { // we&#039;re hit by melee or hand to hand attack&lt;br /&gt;
                        llOwnerSay(&amp;quot;You been hit in close combat by &amp;quot;+llKey2Name(owner)+&amp;quot;!&amp;quot;);&lt;br /&gt;
                    }&lt;br /&gt;
                    HIT(attackdice); // apply the hit&lt;br /&gt;
                }&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            // Heal Some Damage&lt;br /&gt;
            if ( command == &amp;quot;HEALPARTIAL&amp;quot; ) { // only a partial heal&lt;br /&gt;
                integer boxeshealed = llList2Integer(fields,1); // how many boxes are we healing?&lt;br /&gt;
                HEAL(boxeshealed); // heal X number of boxes&lt;br /&gt;
                llOwnerSay(&amp;quot;Partially healed. Wounds: &amp;quot;+(string)CURWOUNDS+&amp;quot; of &amp;quot;+(string)WOUNDS+&amp;quot; wound boxes. Critical: &amp;quot;+(string)CURCRITICAL+&amp;quot; of &amp;quot;+(string)CRITICAL+&amp;quot; critical wound boxes.&amp;quot;);&lt;br /&gt;
                METER(); // update&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if ( command == &amp;quot;HEALFULL&amp;quot; ) { // full heal, reset state&lt;br /&gt;
                CURWOUNDS = WOUNDS; // restore wound boxes&lt;br /&gt;
                CURCRITICAL = CRITICAL; // restore critical wound boxes&lt;br /&gt;
                FLAG_DEAD = FALSE; // no longer dead&lt;br /&gt;
                FLAG_INCAPACITATED = FALSE; // no longer incapacitated&lt;br /&gt;
                if ( FLAG_ANIMATE == TRUE ) { // if we&#039;re running an animation&lt;br /&gt;
                    llStopAnimation(ANIM_DEAD); // stop the dead animate&lt;br /&gt;
                    llStopAnimation(ANIM_INCAPACITATED); // stop the incapacitate animate&lt;br /&gt;
                }&lt;br /&gt;
                llOwnerSay(&amp;quot;Fully healed! Wounds: &amp;quot;+(string)CURWOUNDS+&amp;quot; of &amp;quot;+(string)WOUNDS+&amp;quot; wound boxes. Critical: &amp;quot;+(string)CURCRITICAL+&amp;quot; of &amp;quot;+(string)CRITICAL+&amp;quot; critical wound boxes.&amp;quot;);&lt;br /&gt;
                METER(); // update&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            // Actions NOT Allowed When Dead/Incapacitated go below here&lt;br /&gt;
            if ( FLAG_DEAD == TRUE || FLAG_INCAPACITATED == TRUE ) return;&lt;br /&gt;
            // If Your Bullet has hit, fire a hitcheck regionwide at targetplayer&#039;s channel&lt;br /&gt;
            if ( command == &amp;quot;CLOSECOMBAT&amp;quot; || command == &amp;quot;RANGEDCOMBAT&amp;quot; || command == &amp;quot;TOHIT&amp;quot; ) {&lt;br /&gt;
                integer attdice = llList2Integer(fields,1); // get attack dice of weapon used&lt;br /&gt;
                string hitwho = llList2String(fields,2); // get UUID of who we hit&lt;br /&gt;
                string bywho = llList2String(fields,3); // should be our own UUID&lt;br /&gt;
                string bywhat = llList2String(fields,4); // name of item we hit with (good for bullets/missiles)&lt;br /&gt;
&lt;br /&gt;
                integer victimchan = (integer)(&amp;quot;0x&amp;quot;+llGetSubString(hitwho,0,6)); // calculate victim&#039;s dynamic channel&lt;br /&gt;
                integer attskill = 0; // zero our attack skill&lt;br /&gt;
                if ( command == &amp;quot;RANGEDCOMBAT&amp;quot; || command == &amp;quot;TOHIT&amp;quot; ) { // if this is a ranged attack&lt;br /&gt;
                    attskill = GET_SKILL_RANK(&amp;quot;Ranged Combat&amp;quot;); // get ranged combat skill level&lt;br /&gt;
                    llRegionSay(victimchan,&amp;quot;RANGEDHIT&amp;quot;+DIV+(string)POWER+DIV+(string)attskill+DIV+(string)attdice+DIV+bywho+DIV+bywhat); // attack!&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                if ( command == &amp;quot;CLOSECOMBAT&amp;quot; ) { // if this is melee or hand to hand&lt;br /&gt;
                    attskill = GET_SKILL_RANK(&amp;quot;Close Combat&amp;quot;); // get close combat skill level&lt;br /&gt;
                    llRegionSay(victimchan,&amp;quot;CLOSEHIT&amp;quot;+DIV+(string)POWER+DIV+(string)attskill+DIV+(string)attdice+DIV+bywho+DIV+bywhat); // attack!&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                return;&lt;br /&gt;
            } // end if CLOSECOMBAT/RANGEDCOMBAT/TOHID&lt;br /&gt;
        } // end if channel CHANPLAYER&lt;br /&gt;
    } // end listen&lt;br /&gt;
} // end state running&lt;br /&gt;
// END&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Module_BAM_v0.0.0_20110908&amp;diff=1153242</id>
		<title>User:Allen Kerensky/Myriad Lite Preview4/Myriad Lite Module BAM v0.0.0 20110908</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Module_BAM_v0.0.0_20110908&amp;diff=1153242"/>
		<updated>2011-09-08T15:27:47Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Header}}&lt;br /&gt;
= Myriad Lite Module BAM v0.0.0 20110908 =&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Myriad Lite Module BAM v0.0.0 20110908&lt;br /&gt;
// The Myriad RPG System was designed, written, and illustrated by Ashok Desai&lt;br /&gt;
// Myriad RPG licensed under the Creative Commons Attribution 2.0 UK: England and Wales&lt;br /&gt;
// http://creativecommons.org/licenses/by/2.0/uk/&lt;br /&gt;
// Myriad Lite software Copyright (c) 2011 by Allen Kerensky (OSG/SL)&lt;br /&gt;
// Baroun&#039;s Adventure Machine Copyright (c) 2008-2011 by Baroun Tardis (SL)&lt;br /&gt;
// Myriad Lite and Baroun&#039;s Adventure Machine licensed under the&lt;br /&gt;
// Creative Commons Attribution-Share Alike-Non-Commercial 3.0 Unported&lt;br /&gt;
// http://creativecommons.org/licenses/by-nc-sa/3.0/&lt;br /&gt;
&lt;br /&gt;
// CONSTANTS - DO NOT CHANGE DURING RUN&lt;br /&gt;
string VERSION = &amp;quot;0.0.0&amp;quot;; // Allen Kerensky&#039;s script version&lt;br /&gt;
string VERSIONDATE = &amp;quot;20110908&amp;quot;; // Allen Kerensky&#039;s script yyyymmdd&lt;br /&gt;
string CHAN_PREFIX = &amp;quot;0x&amp;quot;; // channel prefix for calculating dynamic channels&lt;br /&gt;
string DIV = &amp;quot;|&amp;quot;; // message field divider&lt;br /&gt;
string API_OFFERADV = &amp;quot;OfferAdv&amp;quot;; // Offer an adventure to HUD wearer&lt;br /&gt;
string API_ACCEPTADV = &amp;quot;AcceptAdv&amp;quot;; // Offer accepted player is on an adventure&lt;br /&gt;
string API_INADV_QUERY = &amp;quot;InAdv?&amp;quot;; // Ask a player HUD if the player is in an adventure - InAdv?&lt;br /&gt;
string API_INADV_RESPONSE = &amp;quot;InAdv&amp;quot;; // In Adventure Response Yes: InAdv | String AdventureName  No: InAdv | NONE&lt;br /&gt;
string API_TASKIP_QUERY = &amp;quot;TaskIP?&amp;quot;; &lt;br /&gt;
string API_TASKIP_RESPONSE = &amp;quot;TaskIP&amp;quot;; // Task In Progress Reply current task in progress: TaskIP | AdventureGoal&lt;br /&gt;
string API_TASKCP_QUERY = &amp;quot;TaskCP?&amp;quot;; // Task Complete Query&lt;br /&gt;
string API_TASKCP_RESPONSE = &amp;quot;TaskCP&amp;quot;; // Task Complete Reply&lt;br /&gt;
string API_DONETASK = &amp;quot;DoneTask&amp;quot;; // Task Done - player achieved current goal NPC sends: DoneTask | GoalText | TaskDone Text | PlayerUUID&lt;br /&gt;
string API_DONEADV = &amp;quot;DoneAdv&amp;quot;; // Done Adventure reply&lt;br /&gt;
string API_NONE = &amp;quot;NONE&amp;quot;;&lt;br /&gt;
string API_ADDTASK = &amp;quot;AddTask&amp;quot;; // Add a task to the Player HUD - AddTask | TaskNumber | String Describing Task&lt;br /&gt;
string API_ADDHINT = &amp;quot;AddHint&amp;quot;; // Add a hint for a task to the Player HUD - AddHint | TaskNumber | String Hint&lt;br /&gt;
string MSG_NO_ADVENTURE = &amp;quot;Looking for adventure...&amp;quot;;&lt;br /&gt;
string MSG_CURRENT_ADVENTURE = &amp;quot;Adventure: &amp;quot;;&lt;br /&gt;
string MSG_CURRENT_GOAL = &amp;quot;Overall Goal: &amp;quot;;&lt;br /&gt;
string MSG_CURRENT_TASK = &amp;quot;Current Task: &amp;quot;;&lt;br /&gt;
string MSG_CURRENT_HINT = &amp;quot;Current Hint: &amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// RUNTIME GLOBALS - CAN CHANGE DURING RUN&lt;br /&gt;
integer CHANOBJBAM; // channel of thing we&#039;re talking to&lt;br /&gt;
string  STATUSMSG; // scratch space to build status messages&lt;br /&gt;
integer STATUS_FLAG; // show status as HUD hover text&lt;br /&gt;
&lt;br /&gt;
// Adventure-Specific Configuration&lt;br /&gt;
// Task numbers are (AdvNum*100)+task, so they don&#039;t overlap between adventures&lt;br /&gt;
string  ADVNAME=&amp;quot;NONE&amp;quot;; // Adventure Name&lt;br /&gt;
string  ADVTEXT; // brief description&lt;br /&gt;
// Current Task-specific info&lt;br /&gt;
string  ADVTASKTODO; // task name of the next task handed out&lt;br /&gt;
integer ADVTASKTDNUM; // task number of the next task handed out&lt;br /&gt;
string  ADVTASKTODOHINT; // Hint text for the next task handed out&lt;br /&gt;
// Previous Task-specific info&lt;br /&gt;
list    ADVTASKDONE; // Tasks which are complete   (name of task)&lt;br /&gt;
list    ADVTCOMP; // completed task numbers (list of numbers)&lt;br /&gt;
&lt;br /&gt;
// SETUP - begin bringing the HUD online&lt;br /&gt;
SETUP() {&lt;br /&gt;
    llSetText(&amp;quot;&amp;quot;,&amp;lt;0,0,0&amp;gt;,0); // clear any previous hovertext&lt;br /&gt;
    if ( llGetAttached() &amp;gt;= 31 &amp;amp;&amp;amp; llGetAttached() &amp;lt;= 38 ) { // are we attached to a HUD slot?&lt;br /&gt;
        STATUS_FLAG = TRUE; // turn on HUD hovertext&lt;br /&gt;
    } else {&lt;br /&gt;
        STATUS_FLAG = FALSE; // turn off body attached hovertext&lt;br /&gt;
    } &lt;br /&gt;
    STATUS();        &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// RESET - shut down running animations then reset the script to reload character sheet&lt;br /&gt;
RESET() {&lt;br /&gt;
    llResetScript(); // now reset&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// GLOBAL STATUS() - update adventure data on HUD&lt;br /&gt;
STATUS() {&lt;br /&gt;
    if ( ADVNAME == &amp;quot;NONE&amp;quot; ) { // is player in an adventure?&lt;br /&gt;
        STATUSMSG = MSG_NO_ADVENTURE; // nope&lt;br /&gt;
    } else { // yep, build the status&lt;br /&gt;
        STATUSMSG = MSG_CURRENT_ADVENTURE + ADVNAME + &amp;quot;\n&amp;quot; +&lt;br /&gt;
                    MSG_CURRENT_GOAL + ADVTEXT + &amp;quot;\n&amp;quot; +&lt;br /&gt;
                    MSG_CURRENT_TASK + ADVTASKTODO + &amp;quot;\n&amp;quot; +&lt;br /&gt;
                    MSG_CURRENT_HINT + ADVTASKTODOHINT;&lt;br /&gt;
    }&lt;br /&gt;
    if ( STATUS_FLAG == FALSE ) { // if attached to body, use chat output&lt;br /&gt;
        llOwnerSay(STATUSMSG);&lt;br /&gt;
    } else { // attached to HUD slot, use hovertext&lt;br /&gt;
        llSetText(STATUSMSG,&amp;lt;1,1,1&amp;gt;,1.0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// DEFAULT STATE - load character sheet&lt;br /&gt;
default {&lt;br /&gt;
&lt;br /&gt;
    // STATE ENTRY - called on Reset&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        SETUP(); // show credits and start character sheet load&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // ON_REZ - logged in with meter, or worn from inventory while running&lt;br /&gt;
    on_rez(integer rezparam) {&lt;br /&gt;
        RESET(); // a reset to reload character&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // ATTACH - logged in with meter or worn from inventory/ground while running&lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        RESET(); // a reset to reload character&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // TOUCH_START - touch HUD for adventure update&lt;br /&gt;
    touch_start(integer total_number) {&lt;br /&gt;
        STATUS();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // LINK MESSAGE - commands to and from other prims in HUD&lt;br /&gt;
    link_message(integer sender,integer channel,string message, key speakerid) {&lt;br /&gt;
        if ( message == &amp;quot;BAMSTATUS&amp;quot; ) { STATUS(); return;} // show status when specifically requested&lt;br /&gt;
        if ( message == &amp;quot;MODULERESET&amp;quot; ) { RESET(); return;} // HUD reset so reset module too&lt;br /&gt;
        // calculate BAM dynamic channel of item/player talking to us&lt;br /&gt;
        CHANOBJBAM = (integer)(CHAN_PREFIX + llGetSubString((string)speakerid,-7,-1));&lt;br /&gt;
&lt;br /&gt;
        // break down the commands and messages into units we can work with&lt;br /&gt;
        list fields = llParseString2List(message,[DIV],[]); // break into list of fields based on DIVider&lt;br /&gt;
        string command = llList2String(fields,0); // assume the first field is a Myriad Lite command&lt;br /&gt;
        string data1   = llList2String(fields,1);&lt;br /&gt;
        string data2   = llList2String(fields,2);&lt;br /&gt;
        string data3   = llList2String(fields,3);&lt;br /&gt;
&lt;br /&gt;
        // We&#039;re asked what adventure we&#039;re in&lt;br /&gt;
        if ( command == API_INADV_QUERY ) {&lt;br /&gt;
            llSay(CHANOBJBAM,API_INADV_RESPONSE + DIV + ADVNAME); // reply with In Adventure and Adventure Name&lt;br /&gt;
            STATUS();&lt;br /&gt;
            return; // command done, return early&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // We&#039;re asked our current task in progress&lt;br /&gt;
        if ( command == API_TASKIP_QUERY ) { // what task in progress?&lt;br /&gt;
            // respond with task in progress&lt;br /&gt;
            llSay(CHANOBJBAM, API_TASKIP_RESPONSE + DIV + (string)ADVTASKTDNUM); // Reply with current task in progress and number&lt;br /&gt;
            STATUS();&lt;br /&gt;
            return; // command done, return early&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Get list of completed tasks&lt;br /&gt;
        if ( command == API_TASKCP_QUERY ) { // what tasks complete?&lt;br /&gt;
            llSay(CHANOBJBAM, API_TASKCP_RESPONSE + DIV + llList2CSV(ADVTCOMP)); // reply with current task complete list as CSV&lt;br /&gt;
            STATUS();&lt;br /&gt;
            return; // command done, return early&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // player is offered an adventure&lt;br /&gt;
        if ( command == API_OFFERADV ) { // want adventure?&lt;br /&gt;
            // FIXME need to add dialog box to accept/decline later&lt;br /&gt;
            ADVNAME=data1; // name of the adventure&lt;br /&gt;
            ADVTEXT=data2; // description of the adventure&lt;br /&gt;
            ADVTCOMP=[]; // clear the completed task list and start new one&lt;br /&gt;
            ADVTASKTODO=&amp;quot;&amp;quot;; // clear the next task name&lt;br /&gt;
            ADVTASKTDNUM=0; // clear the next task number&lt;br /&gt;
            llSay(CHANOBJBAM, API_ACCEPTADV + DIV +data1); // accept the adventure&lt;br /&gt;
            STATUS();&lt;br /&gt;
            return; // command done, return early&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // add the next task to complete&lt;br /&gt;
        if ( command == API_ADDTASK ) { // add a task&lt;br /&gt;
            ADVTASKTDNUM=(integer)data1; // next task number&lt;br /&gt;
            ADVTASKTODO=data2; // next task name&lt;br /&gt;
            llOwnerSay(ADVTASKTODO); // tell player the next task name&lt;br /&gt;
            STATUS();&lt;br /&gt;
            return; // command done, return early&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // add a hint for the next task to complete&lt;br /&gt;
        if( ( command == API_ADDHINT ) &amp;amp;&amp;amp; ( (integer)data1 == ADVTASKTDNUM) ) {&lt;br /&gt;
            ADVTASKTODOHINT=data2; // next task hint&lt;br /&gt;
            llOwnerSay(ADVTASKTODOHINT); // tell that player the next task hint&lt;br /&gt;
            STATUS();&lt;br /&gt;
            return; // command done, return early&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // is player done with this task of the adventure?&lt;br /&gt;
        if ( ( command == API_DONETASK ) &amp;amp;&amp;amp; ( (integer)data1 == ADVTASKTDNUM) ) {&lt;br /&gt;
            ADVTCOMP = [(integer)data1] + ADVTCOMP; // add this task number to completed list&lt;br /&gt;
            ADVTASKTDNUM=0; // clear out the task number we&#039;re working on since its done now&lt;br /&gt;
            ADVTASKTODO=&amp;quot;&amp;quot;; // clear out the task name&lt;br /&gt;
            ADVTASKTODOHINT=&amp;quot;&amp;quot;; // clear out the task hint&lt;br /&gt;
            llOwnerSay(data2); // tell player task is complete&lt;br /&gt;
            if ( data3 != &amp;quot;&amp;quot; ) llPlaySound(data3,0.5); // play sound if one was defined&lt;br /&gt;
            STATUS();&lt;br /&gt;
            return; // command done, return early&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // is player done with the entire adventure?&lt;br /&gt;
        if ( ( command == API_DONEADV ) &amp;amp;&amp;amp; ( data1 == ADVNAME ) ) {&lt;br /&gt;
            ADVTCOMP = []; // clear out adventure tasks - we&#039;re done&lt;br /&gt;
            ADVTASKTDNUM=0; // clear out next task number&lt;br /&gt;
            ADVTASKTODO=&amp;quot;&amp;quot;; // clear out name of next task&lt;br /&gt;
            ADVTASKTODOHINT=&amp;quot;&amp;quot;; // clear out next task hint&lt;br /&gt;
            ADVNAME=&amp;quot;NONE&amp;quot;; // set current adventure name to none&lt;br /&gt;
            ADVTEXT=&amp;quot;Looking for adventure...&amp;quot;; // set the current adventure name to &lt;br /&gt;
            llOwnerSay(data2); // tell player adventure is complete&lt;br /&gt;
            if ( data3 != &amp;quot;&amp;quot; ) llPlaySound(data3,0.5); // play sound if one was defined&lt;br /&gt;
            STATUS();&lt;br /&gt;
            return; // command done, return early&lt;br /&gt;
        }            &lt;br /&gt;
    } // end listen&lt;br /&gt;
} // end state running&lt;br /&gt;
// END&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Character_Sheet_v0.0.2_20110521&amp;diff=1153241</id>
		<title>User:Allen Kerensky/Myriad Lite Preview4/Myriad Lite Character Sheet v0.0.2 20110521</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Character_Sheet_v0.0.2_20110521&amp;diff=1153241"/>
		<updated>2011-09-08T15:26:29Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Header}}&lt;br /&gt;
= Myriad Lite Character Sheet v0.0.2 20110521 =&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
#=======================================================&lt;br /&gt;
# Myriad Lite Character Sheet v0.0.2 20110521&lt;br /&gt;
#=======================================================&lt;br /&gt;
NAME=Myriad Player&lt;br /&gt;
SPECIES=Human&lt;br /&gt;
BACKGROUND=Normal&lt;br /&gt;
CAREER=None&lt;br /&gt;
#=======================================================&lt;br /&gt;
# Experience Points&lt;br /&gt;
# Example Format: XP=ExperiencePoints&lt;br /&gt;
# ExperiencePoints is an integer number 0-2320&lt;br /&gt;
# Example Format: XPLEVEL=Level&lt;br /&gt;
# Level is an integer number from 1-30&lt;br /&gt;
#=======================================================&lt;br /&gt;
XP=0&lt;br /&gt;
XPLEVEL=1&lt;br /&gt;
#=======================================================&lt;br /&gt;
# ATTRIBUTES&lt;br /&gt;
# Each Attribute is a single integer number 1-10&lt;br /&gt;
# Mortal Humans will range from 1-5&lt;br /&gt;
# Attributes greater than 5 are reserved for supernatural or superhuman monsters, aliens, deities, etc&lt;br /&gt;
# Example: POWER=1&lt;br /&gt;
#=======================================================&lt;br /&gt;
POWER=3&lt;br /&gt;
GRACE=3&lt;br /&gt;
INTELLECT=3&lt;br /&gt;
SPIRIT=3&lt;br /&gt;
#=======================================================&lt;br /&gt;
# RESILIENCES&lt;br /&gt;
# Each Resilience is a single integer number 1-20&lt;br /&gt;
# Example: WOUNDS=1&lt;br /&gt;
#=======================================================&lt;br /&gt;
WOUNDS=3&lt;br /&gt;
CRITICAL=2&lt;br /&gt;
RESOLVE=3&lt;br /&gt;
#=======================================================&lt;br /&gt;
# Boons&lt;br /&gt;
# Boon Lines have two subfields, separated by a comma&lt;br /&gt;
# Boon Name is a string of characters which do not contain a comma&lt;br /&gt;
# Boon Rank is an integer number 1-5&lt;br /&gt;
# Example Format: BOON = BoonName,BoonRank&lt;br /&gt;
# Example: BOON=Ally,1&lt;br /&gt;
# List one BOON line for each boon you have&lt;br /&gt;
#=======================================================&lt;br /&gt;
BOON=Ally,1&lt;br /&gt;
#=======================================================&lt;br /&gt;
# Flaws&lt;br /&gt;
# Flaw Lines have two subfields, separated by a comma&lt;br /&gt;
# Flaw Name is a string of characters which do not contain a comma&lt;br /&gt;
# Flaw Rank is an integer number 1-5&lt;br /&gt;
# Example Format: FLAW = FlawName,FlawRank&lt;br /&gt;
# Example: FLAW=Enemy,1&lt;br /&gt;
# List one FLAW line for each flaw you have&lt;br /&gt;
#=======================================================&lt;br /&gt;
FLAW=Enemy,1&lt;br /&gt;
#=======================================================&lt;br /&gt;
# SKILLS&lt;br /&gt;
# Skill Lines have two subfields, separated by a comma&lt;br /&gt;
# Skill Name is a string of characters which do not contain a comma&lt;br /&gt;
# Skill Rank is an integer number 1-5&lt;br /&gt;
# Example Format: SKILL = SkillName,SkillRank&lt;br /&gt;
# Example: SKILL=Arts and Crafts,1&lt;br /&gt;
# List one SKILL line for each skill you have&lt;br /&gt;
#=======================================================&lt;br /&gt;
SKILL=Ranged Combat,1&lt;br /&gt;
SKILL=Close Combat,1&lt;br /&gt;
#=======================================================&lt;br /&gt;
# Effect lines have two subfields, separated by a comma&lt;br /&gt;
# Example Format: EFFECT=EffectName,EffectRank&lt;br /&gt;
# EffectName is a string of characters which do not contain a comma&lt;br /&gt;
# EffectRank is an integer number 1-5&lt;br /&gt;
# Effects which do not list or use ranks, will be EffectRank=1&lt;br /&gt;
# Example: EFFECT=Animal Call,1&lt;br /&gt;
# List one EFFECT line for each Special Effect you have&lt;br /&gt;
#=======================================================&lt;br /&gt;
EFFECT=Aura of Innocence,1&lt;br /&gt;
#=======================================================&lt;br /&gt;
# STUNTS&lt;br /&gt;
# Stunt lines are simple STUNT=stunttext&lt;br /&gt;
#=======================================================&lt;br /&gt;
STUNTS=&lt;br /&gt;
#=======================================================&lt;br /&gt;
# QUOTES&lt;br /&gt;
# Quote lines are simple QUOTE=quotetext&lt;br /&gt;
#=======================================================&lt;br /&gt;
QUOTE=&lt;br /&gt;
#=======================================================&lt;br /&gt;
# Equipment&lt;br /&gt;
# Equipment Liines have two subfields separated by a comma&lt;br /&gt;
# EquipmentName is a string of characters which do not contain a comma&lt;br /&gt;
# NumberCarried is an integer number 0 to whatever&lt;br /&gt;
# Example Format = EquipmentName,NumberCarried&lt;br /&gt;
# Example: EQUIPMENT=Lockpick Set,1&lt;br /&gt;
# List one EQUIPMENT line for each item you carry&lt;br /&gt;
#=======================================================&lt;br /&gt;
EQUIPMENT=ICS 45,1&lt;br /&gt;
EQUIPMENT=Body Armor,1&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview_4&amp;diff=1153238</id>
		<title>User:Allen Kerensky/Myriad Lite Preview 4</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview_4&amp;diff=1153238"/>
		<updated>2011-09-08T15:23:55Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
= Myriad Lite Preview 4 =&lt;br /&gt;
September 8, 2011&lt;br /&gt;
&lt;br /&gt;
== Myriad: A Universal RPG System ==&lt;br /&gt;
The Myriad RPG System was designed, written and illustrated by Ashok Desai&lt;br /&gt;
Myriad is published under a Creative Commons License (Attribution 2.0 UK: England &amp;amp; Wales)&lt;br /&gt;
http://creativecommons.org/licenses/by/2.0/uk/&lt;br /&gt;
&lt;br /&gt;
Myriad: A Universal RPG System by Ashok Desai is freely downloadable as a PDF e-book from:&lt;br /&gt;
http://www.lulu.com/product/file-download/myriad-rpg-system/307787&lt;br /&gt;
A purchasable &amp;quot;Myriad Special Extended Edition&amp;quot; is available from that site.&lt;br /&gt;
&lt;br /&gt;
==  Myriad Lite RPG System (Preview 4) ==&lt;br /&gt;
The Myriad Lite RPG System was designed, written, and produced by [[User:Allen_Kerensky|Allen Kerensky]] (SL/OSG Avatar Name)&lt;br /&gt;
The Myriad Lite software, scripts, and associated files below are published under the terms of the &lt;br /&gt;
Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported license&lt;br /&gt;
http://creativecommons.org/licenses/by-nc-sa/3.0/&lt;br /&gt;
You must agree to the terms of this license before making any use of this software.&lt;br /&gt;
If you do not agree to this license, simply do not continue using these materials.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Myriad Lite implements a combat and roleplaying HUD/meter for virtual worlds, based on the freely and openly licensed Myriad RPG system. This kit represents a point-in-time snapshot of the initial working distribution of Myriad Lite, which I am making available freely to everyone to study, learn from, adapt, or contribute to.&lt;br /&gt;
These scripts have been tested on SecondLife (http://secondlife.com) and OpenSim (on OSgrid http://osgrid.org).&lt;br /&gt;
&lt;br /&gt;
=== Contributors ===&lt;br /&gt;
* Allen Kerensky (SL/OSG) - contributed the initial LSL and OSSL scripting and basic system design converting a pen and paper game into the virtual world&lt;br /&gt;
* Artemis Tesla (OSG) - improved health summary report scripting&lt;br /&gt;
* Ashok Desai - contributed the original Myriad RPG System and Myriad Special Extended Edition books that started this &lt;br /&gt;
* Baroun Tardis (SL/OSG) - contributed Baroun&#039;s Adventure Machine (BAM) v1 design and scripts&lt;br /&gt;
* Jeanie Weston (SL) - contributed Jeanie&#039;s Heart sculpty&lt;br /&gt;
* Lani Global (OSG) - contributed animations, textures sounds, bullet and armor effects design, trap design and scripting, continual testing and feedback&lt;br /&gt;
* Pete Camino (OSG) - contributed firearms, feedback and testing&lt;br /&gt;
* Snoopy Pfeffer (SL/OSG) - contributed the Ixi combat sandbox region for testing&lt;br /&gt;
&lt;br /&gt;
=== Frequently Asked Questions FAQ ===&lt;br /&gt;
You can find a list of [[User:Allen_Kerensky/Myriad_Lite_FAQ|Frequently Asked Questions]] here.&lt;br /&gt;
&lt;br /&gt;
=== The Myriad Lite Preview 4 Quick-start ===&lt;br /&gt;
Download the scripts in-world from the [[https://marketplace.secondlife.com/p/Myriad-Lite-Preview-4-September-2011/2667076 SL Marketplace Listing]] or copy and paste the scripts from the wiki pages linked below.&lt;br /&gt;
&lt;br /&gt;
# Make a folder in inventory called Myriad Lite Preview 4 September 2011&lt;br /&gt;
# Make a subfolder called Myriad RPG within it&lt;br /&gt;
# Make a subfolder called Scripts within it.&lt;br /&gt;
# Make a subfolder called Docs within it.&lt;br /&gt;
# Drag the Myriad Logo (below) and each Myriad Chapter (below) into the Myriad RPG folder you just created.&lt;br /&gt;
# Drag each script (below) into the Scripts subfolder you jsut created.&lt;br /&gt;
# Drag the rest of the notecards (below) into the Docs subfolder you just created.&lt;br /&gt;
&lt;br /&gt;
==== Heads Up Display (HUD) ====&lt;br /&gt;
The HUD is the core of the game system and is the only &amp;quot;mandatory&amp;quot; piece you need to play the game.&lt;br /&gt;
&lt;br /&gt;
# Create a simple cube&lt;br /&gt;
## Size the cube to 0.250 meters for X,Y, and Z&lt;br /&gt;
## Apply a texture to it&lt;br /&gt;
## Set the cube to 50% transparent.&lt;br /&gt;
# Drag and Drop the following pieces from inventory into the cube:&lt;br /&gt;
## The default character sheet notecard: [[User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Character_Sheet_v0.0.2_20110521|Myriad Lite Character Sheet v0.0.2 20110521]]&lt;br /&gt;
## The Myriad Lite Module BAM script: [[User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Module_BAM_v0.0.0_20110908|Myriad Lite Module BAM v0.0.0 20110908 ]]&lt;br /&gt;
## The Myriad Lite script itself: [[User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_v0.0.18_20110908|Myriad Lite v0.0.18 20110908]]&lt;br /&gt;
# Edit the character sheet notecard to set a default character name for yourself at the top.&lt;br /&gt;
# Take the cube into inventory&lt;br /&gt;
# Right-click the cube in inventory and choose the &amp;quot;Attach to HUD -&amp;gt; Bottom Left&amp;quot; attachment point. You should see Myriad Lite begin loading your character from the character sheet and tell you when its ready to play.&lt;br /&gt;
# Edit the HUD attachment to position it.&lt;br /&gt;
# Detach the HUD back to inventory to &amp;quot;save&amp;quot; the position.&lt;br /&gt;
&lt;br /&gt;
==== Armor ====&lt;br /&gt;
Armor is never a bad idea if you are in a place where combat is likely.&lt;br /&gt;
&lt;br /&gt;
# Create an object to represent a piece of armor, such as a bracelet or helmet.&lt;br /&gt;
# Drag and Drop the Myriad Lite Armor script from inventory into the attachment: [[User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Armor_v0.0.4_20110904|Myriad Lite Armor v0.0.4 20110904]]&lt;br /&gt;
# Attach the armor and adjust the position&lt;br /&gt;
# Detach the piece of armor back into inventory again to &amp;quot;save&amp;quot; the default attach point.&lt;br /&gt;
# Attach/wear the armor piece when desired. The Myriad Lite HUD should report the armor registering as a change in armor value.&lt;br /&gt;
&lt;br /&gt;
==== Bullet ====&lt;br /&gt;
Because of the skill-based nature of Myriad Lite, simple kinetic bullets are not enough. Myriad Lite bullets can implement one of multiple damage values.&lt;br /&gt;
&lt;br /&gt;
# Find a sandbox with Scripts disabled. If scripts run when you create the bullet, it WILL set the bullet physical, temp-on-rez, and run the cleanup timer which causes the bullet to die within 20 seconds&lt;br /&gt;
# Create an object to represent the bullet itself, such as a yellow, glowing, 0.050m sized sphere.&lt;br /&gt;
# While in the script-disabled area, Drag and Drop the bullet script from inventory into the bullet. [[User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Bullet_v0.0.3_20110813|Myriad Lite Bullet v0.0.3 20110813]]&lt;br /&gt;
# Drop in a &amp;quot;puff of smoke&amp;quot; texture of your choice.&lt;br /&gt;
# Change the texture name in the bullet script.&lt;br /&gt;
# Set the bullet object to &amp;quot;Physical&amp;quot; and &amp;quot;Temp On Rez&amp;quot;&lt;br /&gt;
# Quickly take your bullet into inventory before the temp on rez deletes it.&lt;br /&gt;
&lt;br /&gt;
==== Firearm ====&lt;br /&gt;
Many existing firearms can be adapted to fire Myriad Lite bullets, the main change needed is to add the bullet&#039;s damage class as a starting parameter in the llRezObject call which launches the bullet.&lt;br /&gt;
&lt;br /&gt;
# Create a firearm such as a pistol or rifle.&lt;br /&gt;
# Drag Drop the Firearm script from inventory into the firearm  [[User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Firearm_v1.4_20110903|Myriad Lite Firearm v1.4 20110903]]&lt;br /&gt;
# Drag and Drop in a gunshot sound.&lt;br /&gt;
# Drag and Drop the bullet you made above into the firearm.&lt;br /&gt;
# Edit the Firearm script to have the correct gunshot sound name.&lt;br /&gt;
# Edit the Firearm script to have the correct bullet object name.&lt;br /&gt;
# Take the firearm into inventory.&lt;br /&gt;
# Attach it to your right hand&lt;br /&gt;
# Adjust the position and rotation.&lt;br /&gt;
# Detach the firearm back into inventory again to &amp;quot;save&amp;quot; the new default attach point.&lt;br /&gt;
# Attach or wear the firearm when desired.&lt;br /&gt;
&lt;br /&gt;
==== Healing ====&lt;br /&gt;
Many combat-based games offer a heal-up object that will partly or fully restore the player&#039;s health when activated.&lt;br /&gt;
The Myriad Lite Healing script was designed to sit in a heart-shaped object that spins, turns grey when used until it respawns and turns red again when active.&lt;br /&gt;
Jeanie Weston has contributed a heart-shaped sculpy texture to save prims.&lt;br /&gt;
&lt;br /&gt;
# Make a sculpty prim.&lt;br /&gt;
# Drag and Drop the Jeanie&#039;s Heart sculpt texture onto the sculpt map area of the build tool (Image Coming Soon)&lt;br /&gt;
# Drag and Drop the Myriad Lite Healing script from inventory into the object: [[User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Healing_v0.0.1_20110813|Myriad Lite Healing v0.0.1 20110813]]&lt;br /&gt;
# Edit the script to provide full healing or partial healing as desired.&lt;br /&gt;
# Rez copies of the healing heart where desired to give combatants a chance to heal up.&lt;br /&gt;
&lt;br /&gt;
==== Holster ====&lt;br /&gt;
Players can draw weapons from a holster or sheathe to begin combat, or sheathe/holster weapons to withdraw from combat.&lt;br /&gt;
&lt;br /&gt;
# Create an object to act as a wearable holster for a firearm or a sheathe for a melee weapon.&lt;br /&gt;
# Drag and Drop the Myriad Lite Holster script from inventory into the holster object: [[User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Holster_v0.0.0_20110904|Myriad Lite Holster v0.0.0 20110904]]&lt;br /&gt;
# Attach the object to the desired attachment point.&lt;br /&gt;
# Adjust the position and rotation.&lt;br /&gt;
# Detach the object back to inventory to &amp;quot;save&amp;quot; the new default attach point.&lt;br /&gt;
# Attach or wear the holster when desired.&lt;br /&gt;
&lt;br /&gt;
==== Melee ====&lt;br /&gt;
Melee weapons are hand-held weapons that strike opponents directly around you, as opposed to a ranged weapon like a firearm or bow.&lt;br /&gt;
&lt;br /&gt;
# Create a melee object, such as a sword approximately 1m long.&lt;br /&gt;
# Drag and Drop the Myriad Lite Melee script for sword fighting from inventory into the object: [[User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Melee_v0.0.3_20110903|Myriad Lite Melee v0.0.3 20110903]]&lt;br /&gt;
# Take the melee weapon into into inventory.&lt;br /&gt;
# Attach it to your right hand&lt;br /&gt;
# Adjust the position and rotation&lt;br /&gt;
# Detach the mele weapon back into inventory again to &amp;quot;save&amp;quot; the new default attach point.&lt;br /&gt;
# Attach or wear the melee weapon when desired.&lt;br /&gt;
&lt;br /&gt;
==== Meter ====&lt;br /&gt;
Many people prefer a hovertext meter to let others see the in-character alias name of the player and see the relative damage or health of their opponents during combat.&lt;br /&gt;
&lt;br /&gt;
# Create a cylinder 0.025m for X and Y, and 0.5 meters for Z&lt;br /&gt;
# Set the texture to &amp;quot;Default Transparent&amp;quot; and set the transparency to at least 2% &lt;br /&gt;
# Drag and Drop the Myriad Lite Meter script from inventory into the object: [[User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Meter_v0.0.4_20110903|Myriad Lite Meter v0.0.4 20110903]]&lt;br /&gt;
# Take the meter into inventory.&lt;br /&gt;
# Attach the meter object from inventory to a convenient spot, such as an ear or eye.&lt;br /&gt;
# Press CTRL-ALT-T to &amp;quot;Show Transparent&amp;quot;&lt;br /&gt;
# Edit the position and rotation of the meter attachment.&lt;br /&gt;
# Detach the meter back into inventory to &amp;quot;save&amp;quot; the new default attachment point.&lt;br /&gt;
# Attach or wear the meter when designed. You should see &amp;quot;waiting for update&amp;quot; at first, which gets replaced with your alias and health on the next meter update event.&lt;br /&gt;
&lt;br /&gt;
==== Target ====&lt;br /&gt;
The practice target is an object that reports the Myriad Lite attacks and damage amounts.&lt;br /&gt;
This is useful for verifying if your objects and scripts are working correctly.&lt;br /&gt;
&lt;br /&gt;
# Get yourself a &amp;quot;Noob&amp;quot;, which makes a perfectly useful target item: https://marketplace.secondlife.com/p/Art-Laxness-Noob-Pack/371307&lt;br /&gt;
# Drag and Drop in the Myriad Lite Target script from inventory into the object: [[User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Target_v0.0.5_20110813|Myriad Lite Target v0.0.5 20110813]]&lt;br /&gt;
# The noob is now ready to act as target or practice dummy.&lt;br /&gt;
&lt;br /&gt;
== Quickstart For Players ==&lt;br /&gt;
&lt;br /&gt;
[[User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Player_Notes_v0.0.1_20110905|Myriad Lite Player Notes v0.0.1 20110905]]&lt;br /&gt;
&lt;br /&gt;
Wear the HUD.&lt;br /&gt;
* (optional) Wear the hovertext meter&lt;br /&gt;
* (optional) Wear armor, which you should see reported in your chat window.&lt;br /&gt;
* (optional) Wear a holster&lt;br /&gt;
* (optional) Wear a melee or ranged combat weapon&lt;br /&gt;
&lt;br /&gt;
=== Commands ===&lt;br /&gt;
&lt;br /&gt;
Myriad Lite accepts a variety of chat commands on channel 5.&lt;br /&gt;
&lt;br /&gt;
Many commands are detailed below in context, and more are described in the additional documentation below as well.&lt;br /&gt;
&lt;br /&gt;
/5 &amp;lt;command&amp;gt; will activate that command.&lt;br /&gt;
&lt;br /&gt;
Scripters can also send the same commands as a link message.&lt;br /&gt;
&lt;br /&gt;
Custom HUDs can be constructed with buttons named each command, and the button will activate the command of the same name&lt;br /&gt;
&lt;br /&gt;
=== Martial Combat: Armor ===&lt;br /&gt;
&lt;br /&gt;
Armor is always useful to deflect or absorb kinetic impacts.&lt;br /&gt;
&lt;br /&gt;
Some armor is static, just a simple object like a medival shield or bulletproof vest.&lt;br /&gt;
&lt;br /&gt;
In science-fiction, armor may be computerized or formed from an electronic field.&lt;br /&gt;
&lt;br /&gt;
Myriad Lite calls armor that requires electricity to run &amp;quot;power armor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For non-powered armor, simply wear the item and you should see the armor value reported.&lt;br /&gt;
* /5 checkarmor to see what your current armor value is&lt;br /&gt;
&lt;br /&gt;
The following commands let you control power armor:&lt;br /&gt;
* /5 armoron to activate power armor.&lt;br /&gt;
* /5 armoroff to deactivate power armor and save the battery&lt;br /&gt;
* /5 recharge to recharge a power armor battery&lt;br /&gt;
&lt;br /&gt;
=== Close Combat: Hand-To-Hand ===&lt;br /&gt;
&lt;br /&gt;
For Hand-to-Hand combat, do not attach another weapon.&lt;br /&gt;
&lt;br /&gt;
Say: /5 combaton in main chat to activate the built in &amp;quot;fist fighter&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In mouselook OR third person view, hold the left mouse button down, to start your attack, then press the following keys to actually attack&lt;br /&gt;
* Up Arrow: one-two punch&lt;br /&gt;
* Left Arrow: left-hand punch&lt;br /&gt;
* Right-Arrow: right-hand punch&lt;br /&gt;
* Down-Arrow: roundhouse kick&lt;br /&gt;
&lt;br /&gt;
Say: /5 combatoff to disable the fist fighter mode&lt;br /&gt;
&lt;br /&gt;
=== Close Combat: Melee ===&lt;br /&gt;
&lt;br /&gt;
For melee weapon (knife, sword, club, etc)&lt;br /&gt;
&lt;br /&gt;
Wear the melee weapon, which disables fist fighter mode if active&lt;br /&gt;
&lt;br /&gt;
NOTE: The melee weapon is invisible when first attached, as if it is &amp;quot;sheathed&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Say /5 drawright or /5 drawleft in main chat to draw the weapon.&lt;br /&gt;
&lt;br /&gt;
In mouselook or third person view, press left mouse button to trigger the weapon&#039;s attack.&lt;br /&gt;
&lt;br /&gt;
=== Ranged Combat: Firearms ===&lt;br /&gt;
&lt;br /&gt;
Wear a firearm with a Myriad bullet in it.&lt;br /&gt;
&lt;br /&gt;
NOTE: The melee weapon is invisible when first attached, as if it is &amp;quot;sheathed&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Say /5 drawright or /5 drawleft in main chat to draw the weapon.&lt;br /&gt;
&lt;br /&gt;
Go into mouselook for first person view&lt;br /&gt;
&lt;br /&gt;
Aim.&lt;br /&gt;
&lt;br /&gt;
Press left mouse button to fire.&lt;br /&gt;
&lt;br /&gt;
Ranged combat does not work in third-person view.&lt;br /&gt;
&lt;br /&gt;
/5 checkammo will show ammo count remaining.&lt;br /&gt;
&lt;br /&gt;
/5 reload will reload ammo&lt;br /&gt;
&lt;br /&gt;
Holstering a weapon&lt;br /&gt;
* /5 holsterright&lt;br /&gt;
* /5 holsterleft&lt;br /&gt;
* /5 holsterboth &lt;br /&gt;
&lt;br /&gt;
== Quests ==&lt;br /&gt;
New for Preview 4, thanks to a mighty contribution from Baroun Tardis, Myriad Lite now supports Quests!&lt;br /&gt;
&lt;br /&gt;
Sim owners can create objects using the scripts included with Myriad Lite to allow players with the Myriad Lite meter to participate in scavenger-hunt style quests in their regions.&lt;br /&gt;
&lt;br /&gt;
To go on a quest, you find an Non-Player Character (NPC) in the sim who will give you the quest, and the first task to complete, along with a hint.&lt;br /&gt;
&lt;br /&gt;
Complete each task in the quest, possibly earning prizes or necessary support equipment along the way.&lt;br /&gt;
&lt;br /&gt;
Once you have completed the quest tasks, return to the NPC to complete the quest itself, and possibly earn a prize.&lt;br /&gt;
&lt;br /&gt;
Say /5 quest or click the HUD attachment will show you your current quest status.&lt;br /&gt;
&lt;br /&gt;
=== Baroun&#039;s Adventure Machine (BAM) v1 ===&lt;br /&gt;
&lt;br /&gt;
[[User:Allen_Kerensky/Myriad_Lite_Preview4/Myriad_Lite_Sim_Builder_Notes_v0.0.05_20110905|Myriad Lite Sim/Builder Notes v0.0.0 20110905]]&lt;br /&gt;
&lt;br /&gt;
[[User:Allen_Kerensky/Myriad_Lite_Preview4/BAM_Adventure_Giver_NPC_v0.0.6_20110906|BAM Adventure Giver NPC v0.0.6 20110906]]&lt;br /&gt;
&lt;br /&gt;
[[User:Allen_Kerensky/Myriad_Lite_Preview4/BAM_Collision_Goal_v0.0.6_20110902|BAM Collision Goal v0.0.6 20110902]]&lt;br /&gt;
&lt;br /&gt;
[[User:Allen_Kerensky/Myriad_Lite_Preview4/BAM_Location_Goal_v0.0.6_20110902|BAM Location Goal v0.0.6 20110902]]&lt;br /&gt;
&lt;br /&gt;
[[User:Allen_Kerensky/Myriad_Lite_Preview4/BAM_Touch_Goal_v0.0.7_20110902|BAM Touch Goal v0.0.7 20110902]]&lt;br /&gt;
&lt;br /&gt;
== The Myriad RPG Group ==&lt;br /&gt;
&lt;br /&gt;
Join the Myriad RPG group for announcements and discussion around the Myriad RPG and Myriad Lite scripts.&lt;br /&gt;
&lt;br /&gt;
SecondLife: [secondlife:///app/group/dbedc3be-729e-a123-d669-92f401e07a1e/about]&lt;br /&gt;
&lt;br /&gt;
OSgrid: [secondlife:///app/group/da0227e5-8a0d-4d99-b970-9411932c852d/about]&lt;br /&gt;
&lt;br /&gt;
== Bug Reports ==&lt;br /&gt;
If you find a bug or something that just doesn&#039;t seem right in how a Myriad Lite script works, drop me a notecard!&lt;br /&gt;
&lt;br /&gt;
The best bug reports will be in notecards named MYRIAD LITE BUG REPORT&lt;br /&gt;
In the notecard will be:&lt;br /&gt;
Your SL name&lt;br /&gt;
The name, version, and date of the script you are having problems with&lt;br /&gt;
A description of the problem itself&lt;br /&gt;
Steps I can follow to reproduce the problem&lt;br /&gt;
&lt;br /&gt;
== Feature Requests ==&lt;br /&gt;
If you have a feature you would like to see added to Myriad Lite, drop me a notecard!&lt;br /&gt;
&lt;br /&gt;
The best feature requests will be in notecards named MYRIAD LITE FEATURE REQUEST&lt;br /&gt;
In the notecard will be:&lt;br /&gt;
* Your SL name&lt;br /&gt;
* The name, version, and date of the script you are requesting new features in&lt;br /&gt;
* A description of the feature&lt;br /&gt;
&lt;br /&gt;
== Contributions ==&lt;br /&gt;
If you would like to contribute to the Myriad Lite project, drop me a notecard!&lt;br /&gt;
&lt;br /&gt;
The best contributions will be a notecards named MYRIAD LIGHT CONTRIBUTION&lt;br /&gt;
In the notecard will be:&lt;br /&gt;
* Your SL Name&lt;br /&gt;
* A description of the contribution&lt;br /&gt;
* The patch, script, file, or object being contributed&lt;br /&gt;
* A release stating: &lt;br /&gt;
** that you intend to contribute this to Myriad Lite&lt;br /&gt;
** that you are the original creator of the contribution or are legally empowed to contribute it&lt;br /&gt;
** you acknowlege this contribution can be released under the  Creative Commons BY-NC-SA 3.0 Unported license&lt;br /&gt;
&lt;br /&gt;
== New Features of Preview 4 ==&lt;br /&gt;
* merged BAM HUD into Myriad Lite&lt;br /&gt;
* added recent and gotprize lists to BAM goals&lt;br /&gt;
* limited BAM touch goal to only activate when avatar is within arm&#039;s reach&lt;br /&gt;
* moved some armor logic to WEARARMOR and REMOVEARMOR&lt;br /&gt;
* extended armor messages to carry armor name into functions&lt;br /&gt;
* sorted channel 5 player commands alphabettically&lt;br /&gt;
* added /5 checkarmor&lt;br /&gt;
* added /5 quest&lt;br /&gt;
* added /5 credits&lt;br /&gt;
* added /5 version&lt;br /&gt;
* added attachchannel ATTACHMETER to HUD and meter&lt;br /&gt;
* added attachchan DETACHMETER to HUD and meter&lt;br /&gt;
* added REGISTERATTACHMENTS to meter&lt;br /&gt;
* refactor duplicate COMBATOFF code&lt;br /&gt;
* refactor duplicate COMBATON code&lt;br /&gt;
* refactor duplicate DEBUGOFF code&lt;br /&gt;
* refactor duplicate DEBUGON code&lt;br /&gt;
* refactor duplicate RESET code&lt;br /&gt;
* refactor duplicate chat and link message code into one COMMAND() function&lt;br /&gt;
* enable/disable HUD hovertext status based on attachment point - enable for HUD attach only&lt;br /&gt;
* refactor BAM command and data parser into main listen event parser&lt;br /&gt;
* capitalize all BAM global variables&lt;br /&gt;
* added DRAW, SHEATH, HOLSTER, for LEFT, RIGHT, or BOTH hands to HUD, FIREARM, and MELEE&lt;br /&gt;
* added CHECKAMMO and RELOAD to FIREARM&lt;br /&gt;
* added SAFETYON and SAFETYOFF for FIREARM and MELEE&lt;br /&gt;
* add Touch Button Name to Command in HUD - link a button, name it a command, it just works(tm) without another button script&lt;br /&gt;
* ARMORON, ARMOROFF, CHECKBATTERY, and RECHARGE added to ARMOR and HUD&lt;br /&gt;
* Added touch HUD button to command call processor&lt;br /&gt;
* Added reset modules to reset function&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky&amp;diff=1153236</id>
		<title>User:Allen Kerensky</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky&amp;diff=1153236"/>
		<updated>2011-09-08T14:32:45Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: added the link to Myriad Lite Preview 4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Allen Kerensky ==&lt;br /&gt;
[[Image:Allen_Kerensky.jpg|Allen Kerensky]]&lt;br /&gt;
&lt;br /&gt;
[http://world.secondlife.com/resident/aa4fa268-fb05-45a5-8d9d-dc77a1ab9437 Allen Kerensky] writes Linden and OpenSim scripts, science-fiction screenplays, creates &#039;&#039;machinima&#039;&#039; (machine cinema) in collaboration with [http://world.secondlife.com/resident/c04e34c3-2bc4-4bb9-bff6-72e8d142aa6b Moebius Overdrive], and roleplays in the multiple SecondLife regions.&lt;br /&gt;
&lt;br /&gt;
=== Connections ===&lt;br /&gt;
* [http://twitter.com/AllenKerensky Allen Kerensky @ Twitter] &lt;br /&gt;
* [http://plurk.com/AllenKerensky Allen Kerensky @ Plurk]&lt;br /&gt;
* [http://www.myrl.com/myrl/allen-kerensky/avatar/2031 Allen Kerensky @ MyRL]&lt;br /&gt;
&lt;br /&gt;
=== Myriad RPG System and Myriad Lite ===&lt;br /&gt;
My scripted virtual world role-playing game prototype:&lt;br /&gt;
* [[User:Allen_Kerensky/Myriad_Lite_Preview_4|Myriad Lite Preview 4 September 2011]]&lt;br /&gt;
* [[User:Allen_Kerensky/Myriad_Lite_Preview_3|Myriad Lite Preview 3 August 2011]]&lt;br /&gt;
* [[User:Allen_Kerensky/Myriad_Lite_Preview_2|Myriad Lite Preview 2 June 2011]]&lt;br /&gt;
* [[User:Allen_Kerensky/Myriad_Preview|Myriad Lite Preview 1 June 2011]]&lt;br /&gt;
&lt;br /&gt;
* Myriad Lite in the news? [http://blog.nalates.net/2011/08/22/second-life-game-scripts/ SecondLife Game Scripts]&lt;br /&gt;
&lt;br /&gt;
=== September 2009 News ===&lt;br /&gt;
I have joined [[Baroun Tardis]] and [[Joelle Tardis]] as part of the House Tardis Creativity System (HTCS) development team, developing a next-generation roleplaying and combat meter for SecondLife, from scratch. More news soon!&lt;br /&gt;
&lt;br /&gt;
=== April 2009 News ===&lt;br /&gt;
Players and the owner of the roleplaying sim in SecondLife is handed a stack of DMCA notices and given 2 business days to remove all DUNE-related names from SecondLife... some of the articles written about the event I now remember as The Great Renaming:&lt;br /&gt;
* [http://www.myrl.com/blog/allen-kerensky-dune-related-lawyers-issue-cease-and-desist-on-fans-again/post/2124/2771/19434 DUNE-Related Lawyers Issue Cease and Desist On Fans (Again) @ MyRL]&lt;br /&gt;
* [http://www.massively.com/2009/04/09/infringers-of-dune-dune-role-players-shut-down-by-herbert-estat/ Infringers of Dune @ Massively]&lt;br /&gt;
* [http://nwn.blogs.com/nwn/2009/04/enforcers-of-dune.html Enforcers of Dune @ New World Notes]&lt;br /&gt;
* [http://www.boingboing.net/2009/04/09/cold-dead-hand-of-fr.html Cold Dead Hand of Frank Herbert @ BoingBoing]&lt;br /&gt;
* [http://kotaku.com/5207986/lawyer+mans-of-dune-smack-down-second-life-arrakis Lawyer Mans of Dune Smackdown SecondLife Arrakis @ Kotaku]&lt;br /&gt;
&lt;br /&gt;
=== April 2008 Interview ===&lt;br /&gt;
&#039;&#039;&#039;an interview with machinima maker Allen Kerensky&#039;&#039;&#039; posted to [http://orange-island.com/ Orange Island] by [[User:Yesterday Demain|Yesterday Demain]] on Thursday May 1, 2008, from an interview conducted in-world on Thursday April 17, 2008 by [[User:Natty Foggarty|Natty Foggarty]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Who is Allen Kerensky?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I am part of a team, with Moebius Overdrive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is your background?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Buhbuhcuh Fairchild dared us to do it. It was fun, so we kept on.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How would you define your work?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Impulsive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What gear &amp;amp; software would you recommend for machinima?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use the tools that work for you. Try as many as you can lay your hands on, in real projects, preferably side by side, and develop your own toolchain that you are comfortable with for each step in the pipeline. This also helps for future projects to know which tool might fit those projects best, or how to design around harder to work parts of various tools in your pipeline. Personally, I run from Fedora Linux [http://fedorproject.org], and use free/open source almost exclusively, and hoping nVidia will open source as much of their driver as possible so I can run completely from open source. Open source means you can see exactly what it does, how it does, and make changes if you want. That’s the kind of software I recommend for anything.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Which machinima communities / sources do you follow?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
None. Why chase after others at all when you can follow your own vision. If someone follows you, great, be willing to help them. This is why I would rather teach, or do, than talk about myself and machinima in general.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What are your favorite SL Machinima pieces?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I am jealous of “Better Life” [http://machinima.com/film/view&amp;amp;id=2204] by Robbie Wright because he did everything I ever wanted to do with machinima before I thought to do it, in this one film. I am also jealous of [[User:Aimee Weber|Aimee Weber]] pieces like “Tour of the Solar System” [http://machinima.com/film/view&amp;amp;id=2072] that nail the true power of machinima for educational and other inspiring uses, so elegantly.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Do you have a “machinima trick” you’d like to share ?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The main trick is entirely mental. You have to WANT to step outside of your comfort zone, ignore the fact that you are beating software into delivering your vision even when it doesn’t want to, and accept the challenge of getting to the finish despite the aggravation. Just like real life. You can’t do it, if you don’t try.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What’s on your machinima-made-easier wishlist?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Everyone always says facial animation, which would help a lot of folks who make movies that need faces, so I agree. I like robots more, which don’t need faces, so my personal choice is to incorporate Celtx [http://celtx.com], and its Tadpole extensions to Mozilla, into the browser built into the Viewer. The client is open source, so it should be possible, but I am not that much of a C++ programmer myself.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What are your upcoming projects?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ed Wood Film Festival [http://edwood.moomoney.net] 2008?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Website(s)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Moebius Overdrive&#039;s Lunadude.com [http://www.lunadude.com/]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Video sites where your films can be seen (URLs):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Archives - Blip.TV [http://lunadude.blip.tv/posts?view=archive]&lt;br /&gt;
&lt;br /&gt;
START (2006) - Machinima.com [http://machinima.com/film/view?id=2000]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SL Locations featuring contents you made:&#039;&#039;&#039;&lt;br /&gt;
( Note: the following sim disbanded, text maintained below as part of the original interview article - AK. )&lt;br /&gt;
Tabletop Gamer’s Space, Old Town (194, 87, 36) [http://world.secondlife.com/place/0253abd1-51a9-1389-5d88-025c56da57e9] [http://slurl.com/secondlife/Old%20Town/188/75/32/?img=http%3A//secondlife.com/app/image/bf276327-501c-cbab-580f-078e32805a9a/2&amp;amp;title=Tabletop%20Gamer%27s%20Space] is where I setup my experimental table to play pen-and-paper RPGs using this as a virtual tabletop.&lt;br /&gt;
&lt;br /&gt;
-- original available at Orange Island [http://www.orange-island.com/?p=384]&lt;br /&gt;
&lt;br /&gt;
=== Filmography ===&lt;br /&gt;
* [http://lunadude.blip.tv/file/1366744 &#039;&#039;&#039;Mad Science Film Festival&#039;&#039;&#039; (2008)]&lt;br /&gt;
* [http://lunadude.blip.tv/file/514563 &#039;&#039;&#039;It Came From The Origin of Where Bad Things Come From&#039;&#039;&#039; (2007)]&lt;br /&gt;
** Winner, 2nd place at 3rd Annual Ed Wood Film Festival, 2007.&lt;br /&gt;
* [http://lunadude.blip.tv/file/514577 &#039;&#039;&#039;A Zombie Stole My Heart&#039;&#039;&#039; (2006)]&lt;br /&gt;
** Winner: Worst Film, 2nd Annual Ed Wood Film Festival, 2006.&lt;br /&gt;
* [http://lunadude.blip.tv/file/860797/ &#039;&#039;&#039;SekretMenuz&#039;&#039;&#039; (2006)]&lt;br /&gt;
** SL Community Gathering 2006 introduction film.&lt;br /&gt;
** Best story award for Take5 Festival, August 2006.&lt;br /&gt;
* [http://lunadude.blip.tv/file/636770 &#039;&#039;&#039;START&#039;&#039;&#039; (2006)]&lt;br /&gt;
** Critically acclaimed steampunk compared to Isaac Asimov at machinima.com.&lt;br /&gt;
* [http://lunadude.blip.tv/file/514585 &#039;&#039;&#039;Scream In The Dark of the Night&#039;&#039;&#039; (2005)]&lt;br /&gt;
** Winner: Worst Acting and Worst Story, 1st Annual Ed Wood Film Festival, 2005.&lt;br /&gt;
** Featured on the SecondLife homepage for more than a year afterwards.&lt;br /&gt;
&lt;br /&gt;
=== Crew Credits ===&lt;br /&gt;
* Story developer&lt;br /&gt;
* Screenwriter&lt;br /&gt;
* Voice actor&lt;br /&gt;
* Avatar actor&lt;br /&gt;
* Music and sound FX coordination&lt;br /&gt;
* LSL scripting&lt;br /&gt;
* Final editing&lt;br /&gt;
&lt;br /&gt;
=== Affiliations ===&lt;br /&gt;
* [[Alt-Zoom Studios]], [[Lukanida]] (founding contributor since its inception in September, 2005) - Update: Lukanida fell off of the grid. Sadness.&lt;br /&gt;
* MachiniMafia - now disbanded.&lt;br /&gt;
&lt;br /&gt;
=== Tips ===&lt;br /&gt;
* Resize your your SL Viewer to NTSC or PAL standard resolution before recording, using the Edit Preferences -&amp;gt; Graphics -&amp;gt; Window Size drop down.&lt;br /&gt;
* Enable Advanced Menu with CTRL-ALT-SHIFT-D&lt;br /&gt;
* Use Advanced Menu -&amp;gt; Debug Settings -&amp;gt; Play Typing Anim -&amp;gt; FALSE to stop people from adding typing sounds to your captures.&lt;br /&gt;
** Note: Newer SL Viewers have an Edit Preference for this now.&lt;br /&gt;
* Linux users can use xmodmap -e &amp;quot;keycode 67 = F1 F1&amp;quot; to stop Linux from switching to text console when pressing CTRL-ALT-F1. &lt;br /&gt;
** xmodmap -e &amp;quot;keycode 67 = F1 XF86_Switch_VT_1&amp;quot; to restore normal Linux behavior&lt;br /&gt;
* Parcel Owners can build huge video walls to use as easily selectable backdrops without requiring you to pay to upload tons of textures.&lt;br /&gt;
** Project quicktime on the media texture as a form of animated rear-projection.&lt;br /&gt;
** Quicktime shows MANY media types as its stream, including still or animated images such as GIF.&lt;br /&gt;
* Don&#039;t laugh, but the Restrained Life BDSM toolset grants a film-maker fine-grained voice, menu, or even scripted control over an actor avatar&#039;s costume, attachments, and even Windlight environment views.&lt;br /&gt;
* Roleplaying is a great way to develop character, plot, and story-telling skills.&lt;br /&gt;
** Building a 3D roleplay game in-world requires most of the same skills required for machinima, and provides a way to keep skills sharp between film projects, while having fun.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Platform ===&lt;br /&gt;
* [http://www.hp.com &#039;&#039;&#039;HP&#039;&#039;&#039;] HP Pavilion Elite 570f&lt;br /&gt;
* [http://www.amd.com &#039;&#039;&#039;AMD&#039;&#039;&#039;] AMD Athlon 6-core 3.2GHz processor with 16GB RAM and 2TB hardware mirror storage&lt;br /&gt;
* [http://www.amd.com &#039;&#039;&#039;AMD&#039;&#039;&#039;] AMD Radeon HD 5970 dual GPU&lt;br /&gt;
* [http://www.logitech.com/ &#039;&#039;&#039;Logitech&#039;&#039;&#039;] USB headset microphone&lt;br /&gt;
* [http://www.3dconnexion.com/ &#039;&#039;&#039;3DConnexion&#039;&#039;&#039;] Space Navigator for Flycam.&lt;br /&gt;
* [http://www.logitech.com/ &#039;&#039;&#039;Logitech&#039;&#039;&#039;] Cordless Rumblepad for Joystick Flycam.&lt;br /&gt;
&lt;br /&gt;
=== Software Toolbox ===&lt;br /&gt;
* [http://fedoraproject.org/ &#039;&#039;&#039;Fedora&#039;&#039;&#039;] Linux, 64-bit operating system&lt;br /&gt;
* [http://www.amd.com &#039;&#039;&#039;AMD&#039;&#039;&#039;] AMD Catalyst OpenGL driver&lt;br /&gt;
* [http://pulseaudio.org/ &#039;&#039;&#039;Pulse Audio&#039;&#039;&#039;] networked sound engine over [http://www.alsa-project.org &#039;&#039;&#039;ALSA&#039;&#039;&#039;]&lt;br /&gt;
* [http://opensimulator.org/ &#039;&#039;&#039;OpenSimulator&#039;&#039;&#039;] for offworld development and testing&lt;br /&gt;
* [http://secondlife.com/downloads/ &#039;&#039;&#039;SL Viewer&#039;&#039;&#039;] for rendering&lt;br /&gt;
* [http://sldev.free.fr/ &#039;&#039;&#039;CoolViewer&#039;&#039;&#039;] patches for performance, stability, and the [https://wiki.secondlife.com/wiki/RestrainedLifeAPI/ &#039;&#039;&#039;RestrainedLife API&#039;&#039;&#039;]&lt;br /&gt;
* [http://recordmydesktop.iovar.org/ &#039;&#039;&#039;RecordMyDesktop&#039;&#039;&#039;] for video capture (full quality Theora)&lt;br /&gt;
* [http://live.gnome.org/Istanbul &#039;&#039;&#039;Istanbul&#039;&#039;&#039;] for video capture (quick and dirty, low quality Theora)&lt;br /&gt;
* [http://www.freedesktop.org/~company/byzanz/ &#039;&#039;&#039;byzanz-record&#039;&#039;&#039;] for stillframe captures (animated GIF)&lt;br /&gt;
* [http://www.pitivi.org/ &#039;&#039;&#039;Pitivi&#039;&#039;&#039;] for video editing&lt;br /&gt;
* [http://audacity.sourceforge.net/ &#039;&#039;&#039;Audacity&#039;&#039;&#039;] for audio editing&lt;br /&gt;
* [http://www.mplayerhq.hu/ &#039;&#039;&#039;MPlayer&#039;&#039;&#039;] for audio stream capture&lt;br /&gt;
* [http://www.icecast.org/ &#039;&#039;&#039;IceCast&#039;&#039;&#039;] for audio streaming into SL&lt;br /&gt;
* [http://www.gimp.org/ &#039;&#039;&#039;GIMP&#039;&#039;&#039;] for building titles and credits&lt;br /&gt;
&lt;br /&gt;
=== In-World Tools ===&lt;br /&gt;
* [[User:Buhbuhcuh Fairchild|Buhbuhcuh Fairchild]]&#039;s &#039;&#039;&#039;Alt-Zoom Machinima Cam&#039;&#039;&#039;, &#039;&#039;&#039;StillCam&#039;&#039;&#039;, &#039;&#039;&#039;Blocking Block&#039;&#039;&#039;, and basic physics scripts&lt;br /&gt;
* [[User:Geuis Dassin|Geuis Dassin]]&#039;s &#039;&#039;&#039;Filming Path HUD&#039;&#039;&#039;, &#039;&#039;&#039;CamTP&#039;&#039;&#039; HUD, and &#039;&#039;&#039;Motor Mouth&#039;&#039;&#039; for realtime facial animation&lt;br /&gt;
* [[User:CodeBastard Redgrave|CodeBastard RedGrave]]&#039;s &#039;&#039;&#039;MachinimaCam&#039;&#039;&#039; HUD&lt;br /&gt;
* [[User:Torley Linden|Torley Linden]]&#039;s &#039;&#039;&#039;FollowCam&#039;&#039;&#039;&lt;br /&gt;
* [[User:RacerX Gullwing|RacerX Gullwing]]&#039;s &#039;&#039;&#039;rez-into-place&#039;&#039;&#039;&lt;br /&gt;
* [[USer:Aimee Weber|Aimee Weber]]&#039;s &#039;&#039;&#039;Storm&#039;&#039;&#039;&lt;br /&gt;
* [[User:Andrew Linden|Andrew Linden]]&#039;s &#039;&#039;&#039;Particle System Tool&#039;&#039;&#039;&lt;br /&gt;
* [[User:Marine Kelley|Marine Kelley]]&#039;s &#039;&#039;&#039;RestrainedLife&#039;&#039;&#039; API and tools (not just for simulating BDSM in SecondLife!)&lt;br /&gt;
&lt;br /&gt;
=== Roleplay ===&lt;br /&gt;
* [http://slurl.com/secondlife/Kasra/131/129/602 &#039;&#039;&#039;Kasra&#039;&#039;&#039;] - Steampunk adventure in southern Florida, USA, 1880A.D.&lt;br /&gt;
* [http://slurl.com/secondlife/Al%20Raqis/54/88/64 &#039;&#039;&#039;Al Raqis&#039;&#039;&#039;] - distant future space opera&lt;br /&gt;
* [http://slurl.com/secondlife/Splintered%20Rock/55/5/56 &#039;&#039;&#039;Splintered Rock&#039;&#039;&#039;] - an immersive roleplay region where I have contributed build and scripting to since May 2008.&lt;br /&gt;
* [http://slurl.com/secondlife/Vixens%20Isle/172/219/2454 &#039;&#039;&#039;TRON Legacy Adventures&#039;&#039;&#039;] - roleplay in the digitial frontier of the Grid&lt;br /&gt;
* [http://dvice.com/archives/2008/03/10_great_forays.php &#039;&#039;&#039;The 13 best electronic versions of Dungeons &amp;amp; Dragons&#039;&#039;&#039; (March 2008)] - the SLH article below was listed as one of the 13 best ways to roleplay D&amp;amp;D electronically&lt;br /&gt;
* [http://www.secondlifeherald.com/slh/2006/10/scripted_dice_r.html &#039;&#039;&#039;Scripted Dice Roll Themselves: D&amp;amp;D Comes to SL&#039;&#039;&#039; (October 2006)] - original SLH article about Ama Ree, Moebius Overdrive, and myself playing D&amp;amp;D with custom-built map, dice, and NPC speech tools.&lt;br /&gt;
&lt;br /&gt;
{{skills|Machinima=*}}{{Tweeter}}{{Plurker}}&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky&amp;diff=1152706</id>
		<title>User:Allen Kerensky</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky&amp;diff=1152706"/>
		<updated>2011-08-30T22:34:33Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: updated section heading&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Allen Kerensky ==&lt;br /&gt;
[[Image:Allen_Kerensky.jpg|Allen Kerensky]]&lt;br /&gt;
&lt;br /&gt;
[http://world.secondlife.com/resident/aa4fa268-fb05-45a5-8d9d-dc77a1ab9437 Allen Kerensky] writes Linden and OpenSim scripts, science-fiction screenplays, creates &#039;&#039;machinima&#039;&#039; (machine cinema) in collaboration with [http://world.secondlife.com/resident/c04e34c3-2bc4-4bb9-bff6-72e8d142aa6b Moebius Overdrive], and roleplays in the multiple SecondLife regions.&lt;br /&gt;
&lt;br /&gt;
=== Connections ===&lt;br /&gt;
* [http://twitter.com/AllenKerensky Allen Kerensky @ Twitter] &lt;br /&gt;
* [http://plurk.com/AllenKerensky Allen Kerensky @ Plurk]&lt;br /&gt;
* [http://www.myrl.com/myrl/allen-kerensky/avatar/2031 Allen Kerensky @ MyRL]&lt;br /&gt;
&lt;br /&gt;
=== Myriad RPG System and Myriad Lite ===&lt;br /&gt;
My scripted virtual world role-playing game prototype:&lt;br /&gt;
* [[User:Allen_Kerensky/Myriad_Lite_Preview_3|Myriad Lite Preview 3 August 2011]]&lt;br /&gt;
* [[User:Allen_Kerensky/Myriad_Lite_Preview_2|Myriad Lite Preview 2 June 2011]]&lt;br /&gt;
* [[User:Allen_Kerensky/Myriad_Preview|Myriad Lite Preview 1 June 2011]]&lt;br /&gt;
&lt;br /&gt;
* Myriad Lite in the news? [http://blog.nalates.net/2011/08/22/second-life-game-scripts/ SecondLife Game Scripts]&lt;br /&gt;
&lt;br /&gt;
=== September 2009 News ===&lt;br /&gt;
I have joined [[Baroun Tardis]] and [[Joelle Tardis]] as part of the House Tardis Creativity System (HTCS) development team, developing a next-generation roleplaying and combat meter for SecondLife, from scratch. More news soon!&lt;br /&gt;
&lt;br /&gt;
=== April 2009 News ===&lt;br /&gt;
Players and the owner of the roleplaying sim in SecondLife is handed a stack of DMCA notices and given 2 business days to remove all DUNE-related names from SecondLife... some of the articles written about the event I now remember as The Great Renaming:&lt;br /&gt;
* [http://www.myrl.com/blog/allen-kerensky-dune-related-lawyers-issue-cease-and-desist-on-fans-again/post/2124/2771/19434 DUNE-Related Lawyers Issue Cease and Desist On Fans (Again) @ MyRL]&lt;br /&gt;
* [http://www.massively.com/2009/04/09/infringers-of-dune-dune-role-players-shut-down-by-herbert-estat/ Infringers of Dune @ Massively]&lt;br /&gt;
* [http://nwn.blogs.com/nwn/2009/04/enforcers-of-dune.html Enforcers of Dune @ New World Notes]&lt;br /&gt;
* [http://www.boingboing.net/2009/04/09/cold-dead-hand-of-fr.html Cold Dead Hand of Frank Herbert @ BoingBoing]&lt;br /&gt;
* [http://kotaku.com/5207986/lawyer+mans-of-dune-smack-down-second-life-arrakis Lawyer Mans of Dune Smackdown SecondLife Arrakis @ Kotaku]&lt;br /&gt;
&lt;br /&gt;
=== April 2008 Interview ===&lt;br /&gt;
&#039;&#039;&#039;an interview with machinima maker Allen Kerensky&#039;&#039;&#039; posted to [http://orange-island.com/ Orange Island] by [[User:Yesterday Demain|Yesterday Demain]] on Thursday May 1, 2008, from an interview conducted in-world on Thursday April 17, 2008 by [[User:Natty Foggarty|Natty Foggarty]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Who is Allen Kerensky?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I am part of a team, with Moebius Overdrive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is your background?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Buhbuhcuh Fairchild dared us to do it. It was fun, so we kept on.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How would you define your work?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Impulsive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What gear &amp;amp; software would you recommend for machinima?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use the tools that work for you. Try as many as you can lay your hands on, in real projects, preferably side by side, and develop your own toolchain that you are comfortable with for each step in the pipeline. This also helps for future projects to know which tool might fit those projects best, or how to design around harder to work parts of various tools in your pipeline. Personally, I run from Fedora Linux [http://fedorproject.org], and use free/open source almost exclusively, and hoping nVidia will open source as much of their driver as possible so I can run completely from open source. Open source means you can see exactly what it does, how it does, and make changes if you want. That’s the kind of software I recommend for anything.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Which machinima communities / sources do you follow?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
None. Why chase after others at all when you can follow your own vision. If someone follows you, great, be willing to help them. This is why I would rather teach, or do, than talk about myself and machinima in general.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What are your favorite SL Machinima pieces?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I am jealous of “Better Life” [http://machinima.com/film/view&amp;amp;id=2204] by Robbie Wright because he did everything I ever wanted to do with machinima before I thought to do it, in this one film. I am also jealous of [[User:Aimee Weber|Aimee Weber]] pieces like “Tour of the Solar System” [http://machinima.com/film/view&amp;amp;id=2072] that nail the true power of machinima for educational and other inspiring uses, so elegantly.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Do you have a “machinima trick” you’d like to share ?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The main trick is entirely mental. You have to WANT to step outside of your comfort zone, ignore the fact that you are beating software into delivering your vision even when it doesn’t want to, and accept the challenge of getting to the finish despite the aggravation. Just like real life. You can’t do it, if you don’t try.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What’s on your machinima-made-easier wishlist?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Everyone always says facial animation, which would help a lot of folks who make movies that need faces, so I agree. I like robots more, which don’t need faces, so my personal choice is to incorporate Celtx [http://celtx.com], and its Tadpole extensions to Mozilla, into the browser built into the Viewer. The client is open source, so it should be possible, but I am not that much of a C++ programmer myself.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What are your upcoming projects?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ed Wood Film Festival [http://edwood.moomoney.net] 2008?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Website(s)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Moebius Overdrive&#039;s Lunadude.com [http://www.lunadude.com/]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Video sites where your films can be seen (URLs):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Archives - Blip.TV [http://lunadude.blip.tv/posts?view=archive]&lt;br /&gt;
&lt;br /&gt;
START (2006) - Machinima.com [http://machinima.com/film/view?id=2000]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SL Locations featuring contents you made:&#039;&#039;&#039;&lt;br /&gt;
( Note: the following sim disbanded, text maintained below as part of the original interview article - AK. )&lt;br /&gt;
Tabletop Gamer’s Space, Old Town (194, 87, 36) [http://world.secondlife.com/place/0253abd1-51a9-1389-5d88-025c56da57e9] [http://slurl.com/secondlife/Old%20Town/188/75/32/?img=http%3A//secondlife.com/app/image/bf276327-501c-cbab-580f-078e32805a9a/2&amp;amp;title=Tabletop%20Gamer%27s%20Space] is where I setup my experimental table to play pen-and-paper RPGs using this as a virtual tabletop.&lt;br /&gt;
&lt;br /&gt;
-- original available at Orange Island [http://www.orange-island.com/?p=384]&lt;br /&gt;
&lt;br /&gt;
=== Filmography ===&lt;br /&gt;
* [http://lunadude.blip.tv/file/1366744 &#039;&#039;&#039;Mad Science Film Festival&#039;&#039;&#039; (2008)]&lt;br /&gt;
* [http://lunadude.blip.tv/file/514563 &#039;&#039;&#039;It Came From The Origin of Where Bad Things Come From&#039;&#039;&#039; (2007)]&lt;br /&gt;
** Winner, 2nd place at 3rd Annual Ed Wood Film Festival, 2007.&lt;br /&gt;
* [http://lunadude.blip.tv/file/514577 &#039;&#039;&#039;A Zombie Stole My Heart&#039;&#039;&#039; (2006)]&lt;br /&gt;
** Winner: Worst Film, 2nd Annual Ed Wood Film Festival, 2006.&lt;br /&gt;
* [http://lunadude.blip.tv/file/860797/ &#039;&#039;&#039;SekretMenuz&#039;&#039;&#039; (2006)]&lt;br /&gt;
** SL Community Gathering 2006 introduction film.&lt;br /&gt;
** Best story award for Take5 Festival, August 2006.&lt;br /&gt;
* [http://lunadude.blip.tv/file/636770 &#039;&#039;&#039;START&#039;&#039;&#039; (2006)]&lt;br /&gt;
** Critically acclaimed steampunk compared to Isaac Asimov at machinima.com.&lt;br /&gt;
* [http://lunadude.blip.tv/file/514585 &#039;&#039;&#039;Scream In The Dark of the Night&#039;&#039;&#039; (2005)]&lt;br /&gt;
** Winner: Worst Acting and Worst Story, 1st Annual Ed Wood Film Festival, 2005.&lt;br /&gt;
** Featured on the SecondLife homepage for more than a year afterwards.&lt;br /&gt;
&lt;br /&gt;
=== Crew Credits ===&lt;br /&gt;
* Story developer&lt;br /&gt;
* Screenwriter&lt;br /&gt;
* Voice actor&lt;br /&gt;
* Avatar actor&lt;br /&gt;
* Music and sound FX coordination&lt;br /&gt;
* LSL scripting&lt;br /&gt;
* Final editing&lt;br /&gt;
&lt;br /&gt;
=== Affiliations ===&lt;br /&gt;
* [[Alt-Zoom Studios]], [[Lukanida]] (founding contributor since its inception in September, 2005) - Update: Lukanida fell off of the grid. Sadness.&lt;br /&gt;
* MachiniMafia - now disbanded.&lt;br /&gt;
&lt;br /&gt;
=== Tips ===&lt;br /&gt;
* Resize your your SL Viewer to NTSC or PAL standard resolution before recording, using the Edit Preferences -&amp;gt; Graphics -&amp;gt; Window Size drop down.&lt;br /&gt;
* Enable Advanced Menu with CTRL-ALT-SHIFT-D&lt;br /&gt;
* Use Advanced Menu -&amp;gt; Debug Settings -&amp;gt; Play Typing Anim -&amp;gt; FALSE to stop people from adding typing sounds to your captures.&lt;br /&gt;
** Note: Newer SL Viewers have an Edit Preference for this now.&lt;br /&gt;
* Linux users can use xmodmap -e &amp;quot;keycode 67 = F1 F1&amp;quot; to stop Linux from switching to text console when pressing CTRL-ALT-F1. &lt;br /&gt;
** xmodmap -e &amp;quot;keycode 67 = F1 XF86_Switch_VT_1&amp;quot; to restore normal Linux behavior&lt;br /&gt;
* Parcel Owners can build huge video walls to use as easily selectable backdrops without requiring you to pay to upload tons of textures.&lt;br /&gt;
** Project quicktime on the media texture as a form of animated rear-projection.&lt;br /&gt;
** Quicktime shows MANY media types as its stream, including still or animated images such as GIF.&lt;br /&gt;
* Don&#039;t laugh, but the Restrained Life BDSM toolset grants a film-maker fine-grained voice, menu, or even scripted control over an actor avatar&#039;s costume, attachments, and even Windlight environment views.&lt;br /&gt;
* Roleplaying is a great way to develop character, plot, and story-telling skills.&lt;br /&gt;
** Building a 3D roleplay game in-world requires most of the same skills required for machinima, and provides a way to keep skills sharp between film projects, while having fun.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Platform ===&lt;br /&gt;
* [http://www.hp.com &#039;&#039;&#039;HP&#039;&#039;&#039;] HP Pavilion Elite 570f&lt;br /&gt;
* [http://www.amd.com &#039;&#039;&#039;AMD&#039;&#039;&#039;] AMD Athlon 6-core 3.2GHz processor with 16GB RAM and 2TB hardware mirror storage&lt;br /&gt;
* [http://www.amd.com &#039;&#039;&#039;AMD&#039;&#039;&#039;] AMD Radeon HD 5970 dual GPU&lt;br /&gt;
* [http://www.logitech.com/ &#039;&#039;&#039;Logitech&#039;&#039;&#039;] USB headset microphone&lt;br /&gt;
* [http://www.3dconnexion.com/ &#039;&#039;&#039;3DConnexion&#039;&#039;&#039;] Space Navigator for Flycam.&lt;br /&gt;
* [http://www.logitech.com/ &#039;&#039;&#039;Logitech&#039;&#039;&#039;] Cordless Rumblepad for Joystick Flycam.&lt;br /&gt;
&lt;br /&gt;
=== Software Toolbox ===&lt;br /&gt;
* [http://fedoraproject.org/ &#039;&#039;&#039;Fedora&#039;&#039;&#039;] Linux, 64-bit operating system&lt;br /&gt;
* [http://www.amd.com &#039;&#039;&#039;AMD&#039;&#039;&#039;] AMD Catalyst OpenGL driver&lt;br /&gt;
* [http://pulseaudio.org/ &#039;&#039;&#039;Pulse Audio&#039;&#039;&#039;] networked sound engine over [http://www.alsa-project.org &#039;&#039;&#039;ALSA&#039;&#039;&#039;]&lt;br /&gt;
* [http://opensimulator.org/ &#039;&#039;&#039;OpenSimulator&#039;&#039;&#039;] for offworld development and testing&lt;br /&gt;
* [http://secondlife.com/downloads/ &#039;&#039;&#039;SL Viewer&#039;&#039;&#039;] for rendering&lt;br /&gt;
* [http://sldev.free.fr/ &#039;&#039;&#039;CoolViewer&#039;&#039;&#039;] patches for performance, stability, and the [https://wiki.secondlife.com/wiki/RestrainedLifeAPI/ &#039;&#039;&#039;RestrainedLife API&#039;&#039;&#039;]&lt;br /&gt;
* [http://recordmydesktop.iovar.org/ &#039;&#039;&#039;RecordMyDesktop&#039;&#039;&#039;] for video capture (full quality Theora)&lt;br /&gt;
* [http://live.gnome.org/Istanbul &#039;&#039;&#039;Istanbul&#039;&#039;&#039;] for video capture (quick and dirty, low quality Theora)&lt;br /&gt;
* [http://www.freedesktop.org/~company/byzanz/ &#039;&#039;&#039;byzanz-record&#039;&#039;&#039;] for stillframe captures (animated GIF)&lt;br /&gt;
* [http://www.pitivi.org/ &#039;&#039;&#039;Pitivi&#039;&#039;&#039;] for video editing&lt;br /&gt;
* [http://audacity.sourceforge.net/ &#039;&#039;&#039;Audacity&#039;&#039;&#039;] for audio editing&lt;br /&gt;
* [http://www.mplayerhq.hu/ &#039;&#039;&#039;MPlayer&#039;&#039;&#039;] for audio stream capture&lt;br /&gt;
* [http://www.icecast.org/ &#039;&#039;&#039;IceCast&#039;&#039;&#039;] for audio streaming into SL&lt;br /&gt;
* [http://www.gimp.org/ &#039;&#039;&#039;GIMP&#039;&#039;&#039;] for building titles and credits&lt;br /&gt;
&lt;br /&gt;
=== In-World Tools ===&lt;br /&gt;
* [[User:Buhbuhcuh Fairchild|Buhbuhcuh Fairchild]]&#039;s &#039;&#039;&#039;Alt-Zoom Machinima Cam&#039;&#039;&#039;, &#039;&#039;&#039;StillCam&#039;&#039;&#039;, &#039;&#039;&#039;Blocking Block&#039;&#039;&#039;, and basic physics scripts&lt;br /&gt;
* [[User:Geuis Dassin|Geuis Dassin]]&#039;s &#039;&#039;&#039;Filming Path HUD&#039;&#039;&#039;, &#039;&#039;&#039;CamTP&#039;&#039;&#039; HUD, and &#039;&#039;&#039;Motor Mouth&#039;&#039;&#039; for realtime facial animation&lt;br /&gt;
* [[User:CodeBastard Redgrave|CodeBastard RedGrave]]&#039;s &#039;&#039;&#039;MachinimaCam&#039;&#039;&#039; HUD&lt;br /&gt;
* [[User:Torley Linden|Torley Linden]]&#039;s &#039;&#039;&#039;FollowCam&#039;&#039;&#039;&lt;br /&gt;
* [[User:RacerX Gullwing|RacerX Gullwing]]&#039;s &#039;&#039;&#039;rez-into-place&#039;&#039;&#039;&lt;br /&gt;
* [[USer:Aimee Weber|Aimee Weber]]&#039;s &#039;&#039;&#039;Storm&#039;&#039;&#039;&lt;br /&gt;
* [[User:Andrew Linden|Andrew Linden]]&#039;s &#039;&#039;&#039;Particle System Tool&#039;&#039;&#039;&lt;br /&gt;
* [[User:Marine Kelley|Marine Kelley]]&#039;s &#039;&#039;&#039;RestrainedLife&#039;&#039;&#039; API and tools (not just for simulating BDSM in SecondLife!)&lt;br /&gt;
&lt;br /&gt;
=== Roleplay ===&lt;br /&gt;
* [http://slurl.com/secondlife/Kasra/131/129/602 &#039;&#039;&#039;Kasra&#039;&#039;&#039;] - Steampunk adventure in southern Florida, USA, 1880A.D.&lt;br /&gt;
* [http://slurl.com/secondlife/Al%20Raqis/54/88/64 &#039;&#039;&#039;Al Raqis&#039;&#039;&#039;] - distant future space opera&lt;br /&gt;
* [http://slurl.com/secondlife/Splintered%20Rock/55/5/56 &#039;&#039;&#039;Splintered Rock&#039;&#039;&#039;] - an immersive roleplay region where I have contributed build and scripting to since May 2008.&lt;br /&gt;
* [http://slurl.com/secondlife/Vixens%20Isle/172/219/2454 &#039;&#039;&#039;TRON Legacy Adventures&#039;&#039;&#039;] - roleplay in the digitial frontier of the Grid&lt;br /&gt;
* [http://dvice.com/archives/2008/03/10_great_forays.php &#039;&#039;&#039;The 13 best electronic versions of Dungeons &amp;amp; Dragons&#039;&#039;&#039; (March 2008)] - the SLH article below was listed as one of the 13 best ways to roleplay D&amp;amp;D electronically&lt;br /&gt;
* [http://www.secondlifeherald.com/slh/2006/10/scripted_dice_r.html &#039;&#039;&#039;Scripted Dice Roll Themselves: D&amp;amp;D Comes to SL&#039;&#039;&#039; (October 2006)] - original SLH article about Ama Ree, Moebius Overdrive, and myself playing D&amp;amp;D with custom-built map, dice, and NPC speech tools.&lt;br /&gt;
&lt;br /&gt;
{{skills|Machinima=*}}{{Tweeter}}{{Plurker}}&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky&amp;diff=1152705</id>
		<title>User:Allen Kerensky</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky&amp;diff=1152705"/>
		<updated>2011-08-30T22:34:02Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: added a link to nalates.net article&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Allen Kerensky ==&lt;br /&gt;
[[Image:Allen_Kerensky.jpg|Allen Kerensky]]&lt;br /&gt;
&lt;br /&gt;
[http://world.secondlife.com/resident/aa4fa268-fb05-45a5-8d9d-dc77a1ab9437 Allen Kerensky] writes Linden and OpenSim scripts, science-fiction screenplays, creates &#039;&#039;machinima&#039;&#039; (machine cinema) in collaboration with [http://world.secondlife.com/resident/c04e34c3-2bc4-4bb9-bff6-72e8d142aa6b Moebius Overdrive], and roleplays in the multiple SecondLife regions.&lt;br /&gt;
&lt;br /&gt;
=== Connections ===&lt;br /&gt;
* [http://twitter.com/AllenKerensky Allen Kerensky @ Twitter] &lt;br /&gt;
* [http://plurk.com/AllenKerensky Allen Kerensky @ Plurk]&lt;br /&gt;
* [http://www.myrl.com/myrl/allen-kerensky/avatar/2031 Allen Kerensky @ MyRL]&lt;br /&gt;
&lt;br /&gt;
=== Myriad ===&lt;br /&gt;
My scripted virtual world role-playing game prototype:&lt;br /&gt;
* [[User:Allen_Kerensky/Myriad_Lite_Preview_3|Myriad Lite Preview 3 August 2011]]&lt;br /&gt;
* [[User:Allen_Kerensky/Myriad_Lite_Preview_2|Myriad Lite Preview 2 June 2011]]&lt;br /&gt;
* [[User:Allen_Kerensky/Myriad_Preview|Myriad Lite Preview 1 June 2011]]&lt;br /&gt;
&lt;br /&gt;
* Myriad Lite in the news? [http://blog.nalates.net/2011/08/22/second-life-game-scripts/ SecondLife Game Scripts]&lt;br /&gt;
&lt;br /&gt;
=== September 2009 News ===&lt;br /&gt;
I have joined [[Baroun Tardis]] and [[Joelle Tardis]] as part of the House Tardis Creativity System (HTCS) development team, developing a next-generation roleplaying and combat meter for SecondLife, from scratch. More news soon!&lt;br /&gt;
&lt;br /&gt;
=== April 2009 News ===&lt;br /&gt;
Players and the owner of the roleplaying sim in SecondLife is handed a stack of DMCA notices and given 2 business days to remove all DUNE-related names from SecondLife... some of the articles written about the event I now remember as The Great Renaming:&lt;br /&gt;
* [http://www.myrl.com/blog/allen-kerensky-dune-related-lawyers-issue-cease-and-desist-on-fans-again/post/2124/2771/19434 DUNE-Related Lawyers Issue Cease and Desist On Fans (Again) @ MyRL]&lt;br /&gt;
* [http://www.massively.com/2009/04/09/infringers-of-dune-dune-role-players-shut-down-by-herbert-estat/ Infringers of Dune @ Massively]&lt;br /&gt;
* [http://nwn.blogs.com/nwn/2009/04/enforcers-of-dune.html Enforcers of Dune @ New World Notes]&lt;br /&gt;
* [http://www.boingboing.net/2009/04/09/cold-dead-hand-of-fr.html Cold Dead Hand of Frank Herbert @ BoingBoing]&lt;br /&gt;
* [http://kotaku.com/5207986/lawyer+mans-of-dune-smack-down-second-life-arrakis Lawyer Mans of Dune Smackdown SecondLife Arrakis @ Kotaku]&lt;br /&gt;
&lt;br /&gt;
=== April 2008 Interview ===&lt;br /&gt;
&#039;&#039;&#039;an interview with machinima maker Allen Kerensky&#039;&#039;&#039; posted to [http://orange-island.com/ Orange Island] by [[User:Yesterday Demain|Yesterday Demain]] on Thursday May 1, 2008, from an interview conducted in-world on Thursday April 17, 2008 by [[User:Natty Foggarty|Natty Foggarty]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Who is Allen Kerensky?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I am part of a team, with Moebius Overdrive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is your background?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Buhbuhcuh Fairchild dared us to do it. It was fun, so we kept on.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How would you define your work?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Impulsive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What gear &amp;amp; software would you recommend for machinima?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use the tools that work for you. Try as many as you can lay your hands on, in real projects, preferably side by side, and develop your own toolchain that you are comfortable with for each step in the pipeline. This also helps for future projects to know which tool might fit those projects best, or how to design around harder to work parts of various tools in your pipeline. Personally, I run from Fedora Linux [http://fedorproject.org], and use free/open source almost exclusively, and hoping nVidia will open source as much of their driver as possible so I can run completely from open source. Open source means you can see exactly what it does, how it does, and make changes if you want. That’s the kind of software I recommend for anything.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Which machinima communities / sources do you follow?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
None. Why chase after others at all when you can follow your own vision. If someone follows you, great, be willing to help them. This is why I would rather teach, or do, than talk about myself and machinima in general.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What are your favorite SL Machinima pieces?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I am jealous of “Better Life” [http://machinima.com/film/view&amp;amp;id=2204] by Robbie Wright because he did everything I ever wanted to do with machinima before I thought to do it, in this one film. I am also jealous of [[User:Aimee Weber|Aimee Weber]] pieces like “Tour of the Solar System” [http://machinima.com/film/view&amp;amp;id=2072] that nail the true power of machinima for educational and other inspiring uses, so elegantly.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Do you have a “machinima trick” you’d like to share ?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The main trick is entirely mental. You have to WANT to step outside of your comfort zone, ignore the fact that you are beating software into delivering your vision even when it doesn’t want to, and accept the challenge of getting to the finish despite the aggravation. Just like real life. You can’t do it, if you don’t try.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What’s on your machinima-made-easier wishlist?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Everyone always says facial animation, which would help a lot of folks who make movies that need faces, so I agree. I like robots more, which don’t need faces, so my personal choice is to incorporate Celtx [http://celtx.com], and its Tadpole extensions to Mozilla, into the browser built into the Viewer. The client is open source, so it should be possible, but I am not that much of a C++ programmer myself.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What are your upcoming projects?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ed Wood Film Festival [http://edwood.moomoney.net] 2008?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Website(s)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Moebius Overdrive&#039;s Lunadude.com [http://www.lunadude.com/]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Video sites where your films can be seen (URLs):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Archives - Blip.TV [http://lunadude.blip.tv/posts?view=archive]&lt;br /&gt;
&lt;br /&gt;
START (2006) - Machinima.com [http://machinima.com/film/view?id=2000]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SL Locations featuring contents you made:&#039;&#039;&#039;&lt;br /&gt;
( Note: the following sim disbanded, text maintained below as part of the original interview article - AK. )&lt;br /&gt;
Tabletop Gamer’s Space, Old Town (194, 87, 36) [http://world.secondlife.com/place/0253abd1-51a9-1389-5d88-025c56da57e9] [http://slurl.com/secondlife/Old%20Town/188/75/32/?img=http%3A//secondlife.com/app/image/bf276327-501c-cbab-580f-078e32805a9a/2&amp;amp;title=Tabletop%20Gamer%27s%20Space] is where I setup my experimental table to play pen-and-paper RPGs using this as a virtual tabletop.&lt;br /&gt;
&lt;br /&gt;
-- original available at Orange Island [http://www.orange-island.com/?p=384]&lt;br /&gt;
&lt;br /&gt;
=== Filmography ===&lt;br /&gt;
* [http://lunadude.blip.tv/file/1366744 &#039;&#039;&#039;Mad Science Film Festival&#039;&#039;&#039; (2008)]&lt;br /&gt;
* [http://lunadude.blip.tv/file/514563 &#039;&#039;&#039;It Came From The Origin of Where Bad Things Come From&#039;&#039;&#039; (2007)]&lt;br /&gt;
** Winner, 2nd place at 3rd Annual Ed Wood Film Festival, 2007.&lt;br /&gt;
* [http://lunadude.blip.tv/file/514577 &#039;&#039;&#039;A Zombie Stole My Heart&#039;&#039;&#039; (2006)]&lt;br /&gt;
** Winner: Worst Film, 2nd Annual Ed Wood Film Festival, 2006.&lt;br /&gt;
* [http://lunadude.blip.tv/file/860797/ &#039;&#039;&#039;SekretMenuz&#039;&#039;&#039; (2006)]&lt;br /&gt;
** SL Community Gathering 2006 introduction film.&lt;br /&gt;
** Best story award for Take5 Festival, August 2006.&lt;br /&gt;
* [http://lunadude.blip.tv/file/636770 &#039;&#039;&#039;START&#039;&#039;&#039; (2006)]&lt;br /&gt;
** Critically acclaimed steampunk compared to Isaac Asimov at machinima.com.&lt;br /&gt;
* [http://lunadude.blip.tv/file/514585 &#039;&#039;&#039;Scream In The Dark of the Night&#039;&#039;&#039; (2005)]&lt;br /&gt;
** Winner: Worst Acting and Worst Story, 1st Annual Ed Wood Film Festival, 2005.&lt;br /&gt;
** Featured on the SecondLife homepage for more than a year afterwards.&lt;br /&gt;
&lt;br /&gt;
=== Crew Credits ===&lt;br /&gt;
* Story developer&lt;br /&gt;
* Screenwriter&lt;br /&gt;
* Voice actor&lt;br /&gt;
* Avatar actor&lt;br /&gt;
* Music and sound FX coordination&lt;br /&gt;
* LSL scripting&lt;br /&gt;
* Final editing&lt;br /&gt;
&lt;br /&gt;
=== Affiliations ===&lt;br /&gt;
* [[Alt-Zoom Studios]], [[Lukanida]] (founding contributor since its inception in September, 2005) - Update: Lukanida fell off of the grid. Sadness.&lt;br /&gt;
* MachiniMafia - now disbanded.&lt;br /&gt;
&lt;br /&gt;
=== Tips ===&lt;br /&gt;
* Resize your your SL Viewer to NTSC or PAL standard resolution before recording, using the Edit Preferences -&amp;gt; Graphics -&amp;gt; Window Size drop down.&lt;br /&gt;
* Enable Advanced Menu with CTRL-ALT-SHIFT-D&lt;br /&gt;
* Use Advanced Menu -&amp;gt; Debug Settings -&amp;gt; Play Typing Anim -&amp;gt; FALSE to stop people from adding typing sounds to your captures.&lt;br /&gt;
** Note: Newer SL Viewers have an Edit Preference for this now.&lt;br /&gt;
* Linux users can use xmodmap -e &amp;quot;keycode 67 = F1 F1&amp;quot; to stop Linux from switching to text console when pressing CTRL-ALT-F1. &lt;br /&gt;
** xmodmap -e &amp;quot;keycode 67 = F1 XF86_Switch_VT_1&amp;quot; to restore normal Linux behavior&lt;br /&gt;
* Parcel Owners can build huge video walls to use as easily selectable backdrops without requiring you to pay to upload tons of textures.&lt;br /&gt;
** Project quicktime on the media texture as a form of animated rear-projection.&lt;br /&gt;
** Quicktime shows MANY media types as its stream, including still or animated images such as GIF.&lt;br /&gt;
* Don&#039;t laugh, but the Restrained Life BDSM toolset grants a film-maker fine-grained voice, menu, or even scripted control over an actor avatar&#039;s costume, attachments, and even Windlight environment views.&lt;br /&gt;
* Roleplaying is a great way to develop character, plot, and story-telling skills.&lt;br /&gt;
** Building a 3D roleplay game in-world requires most of the same skills required for machinima, and provides a way to keep skills sharp between film projects, while having fun.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Platform ===&lt;br /&gt;
* [http://www.hp.com &#039;&#039;&#039;HP&#039;&#039;&#039;] HP Pavilion Elite 570f&lt;br /&gt;
* [http://www.amd.com &#039;&#039;&#039;AMD&#039;&#039;&#039;] AMD Athlon 6-core 3.2GHz processor with 16GB RAM and 2TB hardware mirror storage&lt;br /&gt;
* [http://www.amd.com &#039;&#039;&#039;AMD&#039;&#039;&#039;] AMD Radeon HD 5970 dual GPU&lt;br /&gt;
* [http://www.logitech.com/ &#039;&#039;&#039;Logitech&#039;&#039;&#039;] USB headset microphone&lt;br /&gt;
* [http://www.3dconnexion.com/ &#039;&#039;&#039;3DConnexion&#039;&#039;&#039;] Space Navigator for Flycam.&lt;br /&gt;
* [http://www.logitech.com/ &#039;&#039;&#039;Logitech&#039;&#039;&#039;] Cordless Rumblepad for Joystick Flycam.&lt;br /&gt;
&lt;br /&gt;
=== Software Toolbox ===&lt;br /&gt;
* [http://fedoraproject.org/ &#039;&#039;&#039;Fedora&#039;&#039;&#039;] Linux, 64-bit operating system&lt;br /&gt;
* [http://www.amd.com &#039;&#039;&#039;AMD&#039;&#039;&#039;] AMD Catalyst OpenGL driver&lt;br /&gt;
* [http://pulseaudio.org/ &#039;&#039;&#039;Pulse Audio&#039;&#039;&#039;] networked sound engine over [http://www.alsa-project.org &#039;&#039;&#039;ALSA&#039;&#039;&#039;]&lt;br /&gt;
* [http://opensimulator.org/ &#039;&#039;&#039;OpenSimulator&#039;&#039;&#039;] for offworld development and testing&lt;br /&gt;
* [http://secondlife.com/downloads/ &#039;&#039;&#039;SL Viewer&#039;&#039;&#039;] for rendering&lt;br /&gt;
* [http://sldev.free.fr/ &#039;&#039;&#039;CoolViewer&#039;&#039;&#039;] patches for performance, stability, and the [https://wiki.secondlife.com/wiki/RestrainedLifeAPI/ &#039;&#039;&#039;RestrainedLife API&#039;&#039;&#039;]&lt;br /&gt;
* [http://recordmydesktop.iovar.org/ &#039;&#039;&#039;RecordMyDesktop&#039;&#039;&#039;] for video capture (full quality Theora)&lt;br /&gt;
* [http://live.gnome.org/Istanbul &#039;&#039;&#039;Istanbul&#039;&#039;&#039;] for video capture (quick and dirty, low quality Theora)&lt;br /&gt;
* [http://www.freedesktop.org/~company/byzanz/ &#039;&#039;&#039;byzanz-record&#039;&#039;&#039;] for stillframe captures (animated GIF)&lt;br /&gt;
* [http://www.pitivi.org/ &#039;&#039;&#039;Pitivi&#039;&#039;&#039;] for video editing&lt;br /&gt;
* [http://audacity.sourceforge.net/ &#039;&#039;&#039;Audacity&#039;&#039;&#039;] for audio editing&lt;br /&gt;
* [http://www.mplayerhq.hu/ &#039;&#039;&#039;MPlayer&#039;&#039;&#039;] for audio stream capture&lt;br /&gt;
* [http://www.icecast.org/ &#039;&#039;&#039;IceCast&#039;&#039;&#039;] for audio streaming into SL&lt;br /&gt;
* [http://www.gimp.org/ &#039;&#039;&#039;GIMP&#039;&#039;&#039;] for building titles and credits&lt;br /&gt;
&lt;br /&gt;
=== In-World Tools ===&lt;br /&gt;
* [[User:Buhbuhcuh Fairchild|Buhbuhcuh Fairchild]]&#039;s &#039;&#039;&#039;Alt-Zoom Machinima Cam&#039;&#039;&#039;, &#039;&#039;&#039;StillCam&#039;&#039;&#039;, &#039;&#039;&#039;Blocking Block&#039;&#039;&#039;, and basic physics scripts&lt;br /&gt;
* [[User:Geuis Dassin|Geuis Dassin]]&#039;s &#039;&#039;&#039;Filming Path HUD&#039;&#039;&#039;, &#039;&#039;&#039;CamTP&#039;&#039;&#039; HUD, and &#039;&#039;&#039;Motor Mouth&#039;&#039;&#039; for realtime facial animation&lt;br /&gt;
* [[User:CodeBastard Redgrave|CodeBastard RedGrave]]&#039;s &#039;&#039;&#039;MachinimaCam&#039;&#039;&#039; HUD&lt;br /&gt;
* [[User:Torley Linden|Torley Linden]]&#039;s &#039;&#039;&#039;FollowCam&#039;&#039;&#039;&lt;br /&gt;
* [[User:RacerX Gullwing|RacerX Gullwing]]&#039;s &#039;&#039;&#039;rez-into-place&#039;&#039;&#039;&lt;br /&gt;
* [[USer:Aimee Weber|Aimee Weber]]&#039;s &#039;&#039;&#039;Storm&#039;&#039;&#039;&lt;br /&gt;
* [[User:Andrew Linden|Andrew Linden]]&#039;s &#039;&#039;&#039;Particle System Tool&#039;&#039;&#039;&lt;br /&gt;
* [[User:Marine Kelley|Marine Kelley]]&#039;s &#039;&#039;&#039;RestrainedLife&#039;&#039;&#039; API and tools (not just for simulating BDSM in SecondLife!)&lt;br /&gt;
&lt;br /&gt;
=== Roleplay ===&lt;br /&gt;
* [http://slurl.com/secondlife/Kasra/131/129/602 &#039;&#039;&#039;Kasra&#039;&#039;&#039;] - Steampunk adventure in southern Florida, USA, 1880A.D.&lt;br /&gt;
* [http://slurl.com/secondlife/Al%20Raqis/54/88/64 &#039;&#039;&#039;Al Raqis&#039;&#039;&#039;] - distant future space opera&lt;br /&gt;
* [http://slurl.com/secondlife/Splintered%20Rock/55/5/56 &#039;&#039;&#039;Splintered Rock&#039;&#039;&#039;] - an immersive roleplay region where I have contributed build and scripting to since May 2008.&lt;br /&gt;
* [http://slurl.com/secondlife/Vixens%20Isle/172/219/2454 &#039;&#039;&#039;TRON Legacy Adventures&#039;&#039;&#039;] - roleplay in the digitial frontier of the Grid&lt;br /&gt;
* [http://dvice.com/archives/2008/03/10_great_forays.php &#039;&#039;&#039;The 13 best electronic versions of Dungeons &amp;amp; Dragons&#039;&#039;&#039; (March 2008)] - the SLH article below was listed as one of the 13 best ways to roleplay D&amp;amp;D electronically&lt;br /&gt;
* [http://www.secondlifeherald.com/slh/2006/10/scripted_dice_r.html &#039;&#039;&#039;Scripted Dice Roll Themselves: D&amp;amp;D Comes to SL&#039;&#039;&#039; (October 2006)] - original SLH article about Ama Ree, Moebius Overdrive, and myself playing D&amp;amp;D with custom-built map, dice, and NPC speech tools.&lt;br /&gt;
&lt;br /&gt;
{{skills|Machinima=*}}{{Tweeter}}{{Plurker}}&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview_3&amp;diff=1152359</id>
		<title>User:Allen Kerensky/Myriad Lite Preview 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview_3&amp;diff=1152359"/>
		<updated>2011-08-25T17:47:09Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: added marketplace link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
= Myriad Lite Preview 3 =&lt;br /&gt;
August 13, 2011&lt;br /&gt;
&lt;br /&gt;
== Myriad: A Universal RPG System ==&lt;br /&gt;
The Myriad RPG System was designed, written and illustrated by Ashok Desai&lt;br /&gt;
Myriad is published under a Creative Commons License (Attribution 2.0 UK: England &amp;amp; Wales)&lt;br /&gt;
http://creativecommons.org/licenses/by/2.0/uk/&lt;br /&gt;
&lt;br /&gt;
Myriad: A Universal RPG System by Ashok Desai is freely downloadable as a PDF e-book from:&lt;br /&gt;
http://www.lulu.com/product/file-download/myriad-rpg-system/307787&lt;br /&gt;
A purchasable &amp;quot;Myriad Special Extended Edition&amp;quot; is available from that site.&lt;br /&gt;
&lt;br /&gt;
==  Myriad Lite RPG System (Preview 2) ==&lt;br /&gt;
The Myriad Lite RPG System was designed, written, and produced by [[User:Allen_Kerensky|Allen Kerensky]] (SL Avatar Name)&lt;br /&gt;
The Myriad Lite software, scripts, and associated files below are published under the terms of the &lt;br /&gt;
Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported license&lt;br /&gt;
http://creativecommons.org/licenses/by-nc-sa/3.0/&lt;br /&gt;
You must agree to the terms of this license before making any use of this software.&lt;br /&gt;
If you do not agree to this license, simply do not continue using these materials.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Myriad Lite implements a combat and roleplaying HUD/meter for virtual worlds, based on the freely and openly licensed Myriad RPG system. This kit represents a point-in-time snapshot of the initial working distribution of Myriad Lite, which I am making available freely to everyone to study, learn from, adapt, or contribute to.&lt;br /&gt;
These scripts have been tested on SecondLife (http://secondlife.com) and OpenSim (on OSgrid http://osgrid.org).&lt;br /&gt;
&lt;br /&gt;
=== Frequently Asked Questions FAQ ===&lt;br /&gt;
You can find a list of [[User:Allen_Kerensky/Myriad_Lite_FAQ|Frequently Asked Questions]] here.&lt;br /&gt;
&lt;br /&gt;
=== The Myriad Lite Preview 3 Quick-start ===&lt;br /&gt;
Download the scripts in-world from the [[https://marketplace.secondlife.com/p/Myriad-Lite-Preview-3-August-2011/2606026 SL Marketplace Listing]] or copy and paste the scripts from the wiki pages linked below.&lt;br /&gt;
&lt;br /&gt;
==== HUD ====&lt;br /&gt;
# Create an object to attach to your heads-up display.&lt;br /&gt;
# A simple cube with the Myriad logo above on it, set 50% transparent is a good start.&lt;br /&gt;
# Drop the Myriad Lite script and default character sheet into the HUD attachment.&lt;br /&gt;
&lt;br /&gt;
==== Armor ====&lt;br /&gt;
# Create an armor attachment.&lt;br /&gt;
# Drop the Myriad Lite armor script into the attachment.&lt;br /&gt;
# The Myriad Lite meter should report the armor registration as a change in armor value.&lt;br /&gt;
&lt;br /&gt;
==== Bullet ====&lt;br /&gt;
# Find a building parcel with scripts disabled&lt;br /&gt;
# Create a bullet object&lt;br /&gt;
# Drop in the bullet script.&lt;br /&gt;
# Drop in a &amp;quot;puff of smoke&amp;quot; texture of your choice.&lt;br /&gt;
# Change the texture name in the bullet script.&lt;br /&gt;
# Set the bullet object to &amp;quot;Physical&amp;quot; and &amp;quot;Temp On Rez&amp;quot;&lt;br /&gt;
# Quickly take your bullet into inventory before the temp on rez deletes it.&lt;br /&gt;
&lt;br /&gt;
==== Healing ====&lt;br /&gt;
# Create a healing object&lt;br /&gt;
# This was designed to sit in a heart-shaped object that spins, turns grey when used until it respawns and turns red/active again.&lt;br /&gt;
# Drop the healing script in the object&lt;br /&gt;
&lt;br /&gt;
==== Melee ====&lt;br /&gt;
# Create a melee object, such as a sword approximately 1m long.&lt;br /&gt;
# Drop in the melee script for sword fighting.&lt;br /&gt;
&lt;br /&gt;
==== Meter ====&lt;br /&gt;
# Create a meter object&lt;br /&gt;
# This is usually a small transparent cylinder attached to an ear that can show hovertext over the avatar&lt;br /&gt;
# Drop in the meter script.&lt;br /&gt;
&lt;br /&gt;
==== Target ====&lt;br /&gt;
# Create a target object.&lt;br /&gt;
# A &amp;quot;Noob&amp;quot; makes a perfectly useful target item [https://marketplace.secondlife.com/p/Art-Laxness-Noob-Pack/371307]&lt;br /&gt;
# Drop in the Target script.&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
# Wear the HUD.&lt;br /&gt;
# (optional) Wear the meter&lt;br /&gt;
# (optional) Wear armor, which you should see reported in your chat window.&lt;br /&gt;
# (optional) Wear a weapon&lt;br /&gt;
&lt;br /&gt;
=== Commands ===&lt;br /&gt;
# /5 reset - reset the HUD&lt;br /&gt;
# /5 combaton - enable Close Combat Hand-to-Hand (fist fighter) mode&lt;br /&gt;
# /5 combatoff - disable Close Combat Hand-to-Hand (fist fighter) mode&lt;br /&gt;
# /5 debugon - turn on some debugging messages&lt;br /&gt;
# /5 debugoff - turn off some debugging messages&lt;br /&gt;
&lt;br /&gt;
=== Close Combat: Hand to Hand ===&lt;br /&gt;
For Hand-to-Hand combat, do not attach another weapon.&lt;br /&gt;
# Simply say: /5 combaton to activate the built in &amp;quot;fist fighter&amp;quot;&lt;br /&gt;
# In mouselook OR third person view, hold the left mouse button down&lt;br /&gt;
# Up Arrow: one-two punch&lt;br /&gt;
# Left Arrow: left-hand punch&lt;br /&gt;
# Right-Arrow: right-hand punch&lt;br /&gt;
# Down-Arrow: roundhouse kick&lt;br /&gt;
# Say: /5 combatoff to disable the fist fighter mode&lt;br /&gt;
&lt;br /&gt;
=== Close Combat: Melee ===&lt;br /&gt;
For melee weapon (knife, sword, club, etc)&lt;br /&gt;
# Wear the melee weapon, which disables fist fighter mode if active&lt;br /&gt;
# In mouselook or third person view, press left mouse button to trigger the weapon attack.&lt;br /&gt;
&lt;br /&gt;
=== Ranged Combat ===&lt;br /&gt;
For ranged combat such as archery, pistols, rifles, etc.&lt;br /&gt;
# Wear a firearm with a Myriad bullet in it.&lt;br /&gt;
# Go into mouselook for first person view&lt;br /&gt;
# Aim.&lt;br /&gt;
# Press left mouse button to fire.&lt;br /&gt;
# Ranged combat does not work in third-person view.&lt;br /&gt;
&lt;br /&gt;
===  The Myriad Lite Software Preview 3 ===&lt;br /&gt;
&lt;br /&gt;
[[User:Allen_Kerensky/Myriad_Lite_Preview3/Myriad_Lite_v0.0.15_20110813|Myriad Lite v0.0.15 20110813]]&lt;br /&gt;
&lt;br /&gt;
[[User:Allen_Kerensky/Myriad_Lite_Preview3/Myriad_Lite_Character_Sheet_v0.0.2_20110521|Myriad Lite Character Sheet v0.0.2 20110521]]&lt;br /&gt;
&lt;br /&gt;
[[User:Allen_Kerensky/Myriad_Lite_Preview3/Myriad_Lite_Armor_v0.0.3_20110813|Myriad Lite Armor v0.0.3 20110813]]&lt;br /&gt;
&lt;br /&gt;
[[User:Allen_Kerensky/Myriad_Lite_Preview3/Myriad_Lite_Bullet_v0.0.3_20110813|Myriad Lite Bullet v0.0.3 20110813]]&lt;br /&gt;
&lt;br /&gt;
[[User:Allen_Kerensky/Myriad_Lite_Preview3/Myriad_Lite_Firearm_v1.3_20110813|Myriad Lite Firearm v1.3 20110813]]&lt;br /&gt;
&lt;br /&gt;
[[User:Allen_Kerensky/Myriad_Lite_Preview3/Myriad_Lite_Healing_v0.0.1_20110813|Myriad Lite Healing v0.0.1 20110813]]&lt;br /&gt;
&lt;br /&gt;
[[User:Allen_Kerensky/Myriad_Lite_Preview3/Myriad_Lite_Melee_v0.0.2_20110813|Myriad Lite Melee v0.0.2 20110813]]&lt;br /&gt;
&lt;br /&gt;
[[User:Allen_Kerensky/Myriad_Lite_Preview3/Myriad_Lite_Meter_v0.0.3_20110609|Myriad Lite Meter v0.0.3 20110813]]&lt;br /&gt;
&lt;br /&gt;
[[User:Allen_Kerensky/Myriad_Lite_Preview3/Myriad_Lite_Target_v0.0.5_20110813|Myriad Lite Target v0.0.5 20110813]]&lt;br /&gt;
&lt;br /&gt;
=== Change Log ===&lt;br /&gt;
&lt;br /&gt;
[[User:Allen_Kerensky/Myriad_Lite_Preview3/Change_Log|Change Log]]&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Category:LSL_Library&amp;diff=1152358</id>
		<title>Category:LSL Library</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Category:LSL_Library&amp;diff=1152358"/>
		<updated>2011-08-25T17:44:56Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: updated linkt o Myriad Lite Preview 3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header|ml=*}}{{RightToc}}&lt;br /&gt;
==Script Library==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em 0.5em 1.5em&amp;quot;&amp;gt;&lt;br /&gt;
NOTE: Please add you scripts to this page and then add them to a category on the [[:Category:LSL Categorized Library|Categorized Library]] page.&lt;br /&gt;
&lt;br /&gt;
Come to this page to see complex examples that show how to combine parts of LSL.&lt;br /&gt;
&lt;br /&gt;
Go to the [[:Category:LSL Examples|LSL Examples]] page to see brief examples of how to use parts of LSL &lt;br /&gt;
&lt;br /&gt;
Why collect complex examples here? Well, ...&lt;br /&gt;
&lt;br /&gt;
There are many [[script|scripts]] that have become buried in the [[Old forum Scripting Library index| old forum Scripting Library]], the [http://community.secondlife.com/t5/Scripting-Library/bd-p/2122 2010 library archive], or the current [http://community.secondlife.com/t5/LSL-Scripting-Library/bd-p/LSLScriptingLibrary LSL Scripting Library]; were lost with the death of the early scripting forums; or sit idle in [[inventory|inventories]] that could be useful and should be more accessible.&lt;br /&gt;
&lt;br /&gt;
Other scripters may be in the same situation. This wiki is a well-suited medium for a script library. Feel free to add your scripts to the script library by creating new pages for them and linking to those pages here.&lt;br /&gt;
&lt;br /&gt;
Note that there are many more scripts in the LSL Library here, but you can&#039;t get to them if you don&#039;t know they exist, because they are subpages now, instead of an automatically updated category.  Good luck searching.&lt;br /&gt;
&lt;br /&gt;
Visit the new [[:Category:LSL Categorized Library|Categorized Library]] which might help make it easier to find a script by the type of script it is. Please note, to wiki editors, if you want your script to appear on the category page after adding it to this library you need to also add it to the category library page as well.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rules for posting: ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em&amp;quot;&amp;gt;&lt;br /&gt;
#Your script must be tested and working. If it&#039;s not, stick it in your user-space until it is. This is a list of working, usable scripts.&lt;br /&gt;
#Add a link to your script&#039;s page here. Link back to this page from your script&#039;s page. Start your page with &amp;lt;nowiki&amp;gt;{{LSL Header}}&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
#Do not add scripts that duplicate the same functionality as an existing script or built in {{LSLGC|Functions|function}}. If yours does, explain why.&lt;br /&gt;
#Do not list simple scripts here. Include those among the [[:Category:LSL Examples|LSL Examples]] instead.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
==LSL Script Library==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||[[Script Vitality plug-in]]&lt;br /&gt;
||[[User:Jenna Felton|Jenna Felton]]&lt;br /&gt;
||Uses vehicle technology to allow scripts (in same prim) to run in &#039;dead&#039;, i.e. no-script areas.&lt;br /&gt;
|-&lt;br /&gt;
||[[1st necessity of SL]]&lt;br /&gt;
||[[User:Beer Dailey|Beer Dailey]]&lt;br /&gt;
||Monitors for avatars and (de)activates scripts states to control script performance/lag.&lt;br /&gt;
|-&lt;br /&gt;
||[[SetLinkText]]&lt;br /&gt;
||[[User:Tacusin Memo|Tacusin Memo]]&lt;br /&gt;
||Custom function like llSetText only applying to linked sets.&lt;br /&gt;
|-&lt;br /&gt;
||[[3D Radar]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||Rezzes a ball for each avatar in range. Each ball tracks its own AV and displays distance.&lt;br /&gt;
|-&lt;br /&gt;
||[[Access (NewAge)]]&lt;br /&gt;
||[[User:Asia Snowfall|Asia Snowfall]]&lt;br /&gt;
||An easy to use script for permissions on who can use the script, Public/Group/Owner&lt;br /&gt;
|-&lt;br /&gt;
||[[Aim Detection]]&lt;br /&gt;
||[[User:Han Shuffle|Dugley Reanimator]]&lt;br /&gt;
||Monitors for avatars and reports back to owner about who is aiming at them.&lt;br /&gt;
|-&lt;br /&gt;
||[[AntiDelay Node]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Uses [[llMessageLinked]] to stop those pesky delays.&lt;br /&gt;
|-&lt;br /&gt;
||[[AO Overriding Pose Ball]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||No more turning your AO off and on when you sit down&lt;br /&gt;
|-&lt;br /&gt;
||[[ARCFOUR Strong Encryption Implementation]]&lt;br /&gt;
||[[User:Nekow42 Zarf|Nekow42 Zarf]]&lt;br /&gt;
||An LSL implementation of ARCFOUR, the most popular stream cipher still in use. It is licensed under a Creative Commons Attribution 3.0 license.&lt;br /&gt;
|-&lt;br /&gt;
||[[Assembly Programming Language|Assembly-Like Programming Language]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||A compiler that runs assembly-like programs.&lt;br /&gt;
|-&lt;br /&gt;
||[[Associative Array Emulator|Associative Array (Dictionary) Emulator]]&lt;br /&gt;
||[[User:Alynna Vixen|Alynna Vixen]]&lt;br /&gt;
||This library provides a set of functions for using a list as an associative array where string based keys can refer to one or more variant elements.&lt;br /&gt;
|-&lt;br /&gt;
||[[AvatarFollower]]&lt;br /&gt;
||[[User:Dale Innis|Dale Innis]]&lt;br /&gt;
||Allows one avatar to automatically follow another.&lt;br /&gt;
|-&lt;br /&gt;
||[[Avatar Radar (NewAge)]]&lt;br /&gt;
||[[User:Asia Snowfall|Asia Snowfall]]&lt;br /&gt;
||Version 1.2; A nice new avatar radar script i just finish that you can place in your hud, Also features avatar locator&lt;br /&gt;
|-&lt;br /&gt;
||[[Base2Dec]]&lt;br /&gt;
||[[User:Siann Beck|Siann Beck]]&lt;br /&gt;
||Convert a number to decimal from any base.&lt;br /&gt;
|-&lt;br /&gt;
||[[BaseN]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
||Variable base compression, dynamically maps to usable UTF code points.&lt;br /&gt;
|-&lt;br /&gt;
||[[Basic A-Star Pathfinder]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
|| My own interpretation of A Star into a highly efficient algorithmn&lt;br /&gt;
|-&lt;br /&gt;
||[[Basic Encryption Modules]]&lt;br /&gt;
||[[User:Beverly Larkin|Beverly Larkin]]&lt;br /&gt;
||Basic encryption scripts, allows you to encrypt a float and shout it to another prim on a randomly chosen channel.&lt;br /&gt;
|-&lt;br /&gt;
||[[Be happy]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Basic smile attachment script, makes your avatar smile.&lt;br /&gt;
|-&lt;br /&gt;
||[[Best Neighbor Ad Hiding Script|Best Neighbor]]&lt;br /&gt;
||[[User:Doran Zemlja|Doran Zemlja]]&lt;br /&gt;
||Reduce ad clutter by hiding ads when users are on their own land nearby.&lt;br /&gt;
|-&lt;br /&gt;
||[[BigNum|BigNum Library (RSA Encryption)]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||A BigNum Library for dealing with big numbers! Specialized for modular multiplication, and RSA encryption.&lt;br /&gt;
|-&lt;br /&gt;
||[[Binary Clock v1.1|Binary Clock]]&lt;br /&gt;
||[[User:Fox Diller|Fox Diller]]&lt;br /&gt;
||A Binary Clock.&lt;br /&gt;
|-&lt;br /&gt;
||[[BinaryDecimalConverter]]&lt;br /&gt;
||[[User:Soundless Smalls|Soundless Smalls]]&lt;br /&gt;
||Converts a binary value to a decimal value and vice versa.&lt;br /&gt;
|-&lt;br /&gt;
||[[Blacklist and Remote Kill|Blacklist and Remote Kill]]&lt;br /&gt;
||[[User:Chase Quinnell|Chase Quinnell]]&lt;br /&gt;
||Blacklist(denial of use) or a creator kill script(can delete someone&#039;s item by command on private channel)&lt;br /&gt;
|-&lt;br /&gt;
||[[User_talk:Rolig_Loon/Bookmark_URLs|Bookmark URLs]]&lt;br /&gt;
||[[User:Rolig Loon|Rolig Loon]]&lt;br /&gt;
||Dialog driven HUD reads bookmarked URLs from notecards and navigates directly to them with user&#039;s in-world browser.&lt;br /&gt;
|-&lt;br /&gt;
||[[Bubble Gum]]&lt;br /&gt;
||[[User:Flax Quirina|Flax Quirina]]&lt;br /&gt;
||A script to create a bubble gum effect with sounds and animations.&lt;br /&gt;
|-&lt;br /&gt;
||[[Builders Buddy|Builder&#039;s Buddy Tool]]&lt;br /&gt;
||[[User:Newfie Pendragon|Newfie Pendragon]]&lt;br /&gt;
||Script to easily move/rotate large builds that exceed the linkable size limit (30 meters).&lt;br /&gt;
|-&lt;br /&gt;
||[[Button Click Detector]]&lt;br /&gt;
||{{User|Sendao Goodman}}&lt;br /&gt;
||Use [[llDetectedTouchUV]] to determine which button was pressed on a texture.&lt;br /&gt;
|-&lt;br /&gt;
||[[Camera following prim]]&lt;br /&gt;
||[[User:Dale Innis|Dale Innis]]&lt;br /&gt;
||Pair of scripts to make a prim follow your camera position around (for lights etc).&lt;br /&gt;
|-&lt;br /&gt;
||[[Camera Sync]]&lt;br /&gt;
||[[User:Meyermagic Salome|Meyermagic Salome]] and [[User:Nomad Padar|Nomad Padar]]&lt;br /&gt;
||A system to synchronize the cameras of two avatars.&lt;br /&gt;
|-&lt;br /&gt;
||[[Chatbot]]&lt;br /&gt;
||Anonymous&lt;br /&gt;
||Compile and run the LSL you type on a channel, faster than you can thru the 2007-08 SL GUI.&lt;br /&gt;
|-&lt;br /&gt;
||[[Chat Logger (GPL)]]&lt;br /&gt;
||[[User:Nobody Fugazi|Nobody Fugazi]]&lt;br /&gt;
||Chat logger which requests permission from participants before recording them.&lt;br /&gt;
|-&lt;br /&gt;
||[[Chat_Relay|Chat Relay]]&lt;br /&gt;
||[[User:grumble Loudon|grumble Loudon]]&lt;br /&gt;
||A Chat relay which can be routed using a path header and won&#039;t echo.&lt;br /&gt;
|-&lt;br /&gt;
||[[ClickAndDrag]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
|| Click and Drag user interface elements using dynamic feedback&lt;br /&gt;
|-&lt;br /&gt;
||[[Code Racer]]&lt;br /&gt;
||Anonymous&lt;br /&gt;
||Race two versions of code forever, to see which runs faster.&lt;br /&gt;
|-&lt;br /&gt;
||[[Code Sizer]]&lt;br /&gt;
||Anonymous&lt;br /&gt;
||Count the bytes compiled from source code, to measure how to write small code.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Programs#v7-D_Enh._Color_Picker|Color Changer]]&lt;br /&gt;
||[[User:Void_Singer|Void_Singer]]&lt;br /&gt;
||Dialog driven color changer. Supports 16million+ colors, web color codes, multiple targeted prims, with save and recall.&lt;br /&gt;
|-&lt;br /&gt;
||[[Color Changer|Color Changer Plus]]&lt;br /&gt;
||[[User:Neo Calcutt|Neo Calcutt]]&lt;br /&gt;
||A color changer with 14 colors, a random function, and a custom vector function.&lt;br /&gt;
|-&lt;br /&gt;
||[[Color conversion scripts|Color Conversion]]&lt;br /&gt;
||[[User:Sally LaSalle|Sally LaSalle]]&lt;br /&gt;
||Convert between Red Green Blue (RGB) and Hue Saturation Value (HSV).&lt;br /&gt;
|-&lt;br /&gt;
||[[ColorConvert]]&lt;br /&gt;
||[[User:Siann Beck|Siann Beck]]&lt;br /&gt;
||Convert color values to vector from RGB, hex or HTML color name.&lt;br /&gt;
|-&lt;br /&gt;
||[[Color script]]&lt;br /&gt;
||[[User:Masakazu Kojima|Masakazu Kojima]]&lt;br /&gt;
||Script for changing colors trough a listener with pre-defined colors.&lt;br /&gt;
|-&lt;br /&gt;
||[[Library Combined Library|Combined Library]]&lt;br /&gt;
||[[User:Strife Onizuka|Strife Onizuka]]&lt;br /&gt;
||Library of mostly encoding and decoding functions, some more useful then others.&lt;br /&gt;
* String functions: Replace / Trim right / Trim left / Trim both&lt;br /&gt;
* Unicode conversion: UTF8 to Unicode / Unicode to UTF8&lt;br /&gt;
* List functions: Replace / Compare&lt;br /&gt;
|-&lt;br /&gt;
||[[Computer:jaycoonlanguage]]&lt;br /&gt;
||[[User:jayco121 Bing|jayco121 Bing]]&lt;br /&gt;
|| A language written in LSL that is meant for my computer (available at the shop).&lt;br /&gt;
|-&lt;br /&gt;
||[[Read Note Card Configuration|Configuration Notecard Reader]]&lt;br /&gt;
||{{User|Dedric Mauriac}}&lt;br /&gt;
||A script to read configuration information from a notecard. Parses notecard to extract key words and their assigned values. Allows for comment lines and many more useful features.&lt;br /&gt;
|-&lt;br /&gt;
||[[AdvancedNotecardReader|Configuration Notecard Reader (advanced)]]&lt;br /&gt;
||[[Lear Cale|Lear Cale]]&lt;br /&gt;
||Robust configuration notecard reader; supports multiple notecards with same suffix, handles reconfig on inventory change, and does not usurp the default state.&lt;br /&gt;
|-&lt;br /&gt;
||[[Library_Chat_Relay|Conversation Relay]]&lt;br /&gt;
||[[User:Jippen Faddoul|Jippen Faddoul]]&lt;br /&gt;
||Chat relay which requests permission from participants before relaying their messages. Also includes their attachments. (ToS compliant).&lt;br /&gt;
|-&lt;br /&gt;
||[[Curtain script]]&lt;br /&gt;
||[[User:Zilla Larsson|Zilla Larsson]]&lt;br /&gt;
||A simple script to retract/stretch curtains, blinds, bedcovers and more&lt;br /&gt;
|-&lt;br /&gt;
||[[Library_Cycle_Dialog_Items|Cycle Dialog Items w/ Callback]]&lt;br /&gt;
||[[User:Hawkster Westmoreland|Hawkster Westmoreland]]&lt;br /&gt;
||A customizable way to cycle dialog items with pagination&lt;br /&gt;
|-&lt;br /&gt;
||[[Dataserver API]]&lt;br /&gt;
||[[User:Revolution Perenti|Revolution Perenti]]&lt;br /&gt;
||Dataserver Framework for Notecards.&lt;br /&gt;
|-&lt;br /&gt;
||[[Date Library]]&lt;br /&gt;
||[[User:Corto Maltese|Corto Maltese]]&lt;br /&gt;
|| Date library, based on number of day since march 3rd 1600, can be used to calculate weekday, date differences, and date offset, and date formating.&lt;br /&gt;
|-&lt;br /&gt;
||[[Day of the Week]]&lt;br /&gt;
||[[User:DoteDote Edison|DoteDote Edison]]&lt;br /&gt;
||Function to get day of the week from [[llGetUnixTime]].&lt;br /&gt;
|-&lt;br /&gt;
||[[Days in Month]]&lt;br /&gt;
||[[User:IntLibber Brautigan begin_of_the_skype_highlighting     end_of_the_skype_highlighting begin_of_the_skype_highlighting     end_of_the_skype_highlighting|IntLibber Brautigan]]&lt;br /&gt;
||Clicking on it returns the number of days in the present month. Useful for scripting calendars and tier systems that need to know the number of days in the month at hand or to calculate for any month. Even adjusts for leap years.&lt;br /&gt;
|-&lt;br /&gt;
||[[Deed Tools]]&lt;br /&gt;
||[[User:Falados Kapuskas|Falados Kapuskas]]&lt;br /&gt;
||Tools that allow the creator to modify Group-Owned (Deeded) Objects via chat.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DEMO_Shield|*DS*_DEMO_Shield]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||With this script, it is impossible to use these scripts in copied (Copybot) object.  &lt;br /&gt;
|-&lt;br /&gt;
||[[Describe Chatter]]&lt;br /&gt;
||Anonymous&lt;br /&gt;
||Chat to see yourself as others do.&lt;br /&gt;
|-&lt;br /&gt;
||[[Dialog Control]]&lt;br /&gt;
||[[User:Nargus Asturias|Nargus Asturias]]&lt;br /&gt;
|| A (not-so) simple dialog &amp;amp; menu control script. Call dialog and receive selected value via [[link_message]](), with built-in timer and [[link_message]]() notification on time out. Supports multi-pages dialog and numeric property dialog. Button text and dialog&#039;s returned value can differ.&lt;br /&gt;
Latest version also has [[Dialog Menus Control]] built-in; which allow multi-level menus through SL dialog system.&lt;br /&gt;
|-&lt;br /&gt;
||[[MultiUser_Dialog_Handler|Dialog Menus (multiuser)]]&lt;br /&gt;
||[[User:SimonT Quinnell|SimonT Quinnell]]&lt;br /&gt;
|| Menu dialog handler that supports multiple menus open at once from the single script. Displays multi-page menus if necessary as well as allowing for fixed header and footer buttons.  Timeouts as well as Text and button size limits are handled.&lt;br /&gt;
|-&lt;br /&gt;
||[[Dialog NumberPad|Dialog Number Pad]]&lt;br /&gt;
||[[User:DoteDote Edison|DoteDote Edison]]&lt;br /&gt;
||Use a dialog to accept positive integer input from users.&lt;br /&gt;
|-&lt;br /&gt;
||[[Display Names Radar]]&lt;br /&gt;
||[[User:Cerise Sorbet|Cerise Sorbet]]&lt;br /&gt;
||Simple HUD type avatar radar that can show [[display names]] and script memory usage&lt;br /&gt;
|-&lt;br /&gt;
||[[Display Names to Key]]&lt;br /&gt;
||[[User:Joran Yoshikawa|Joran Yoshikawa]]&lt;br /&gt;
||Simple way to get UUIDs from displaynames&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DS_Display-Username_Online_Indicator|*DS*_Display-Username_Online_Indicator]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This simple hover text-based script is used to shop owners in Second Life, customers at the current display name and user name to display publicly. Additionally shows the status of the Userkey and online. Furthermore, there are click of a chat link that opens the profile owner. &lt;br /&gt;
|-&lt;br /&gt;
||[[Displayer Script]]&lt;br /&gt;
||[[User:Akinori Kimagawa|Akinori Kimagawa]]&lt;br /&gt;
||Display Words On Top Of An Object&lt;br /&gt;
|-&lt;br /&gt;
||[[Drink script]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Used mainly for food and drink in Second Life.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DS_Single_AO-Sit|*DS*_Single_AO-Sit]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Posescript for use with or without AO and with or without Animation. With the menu it is possible the seated Avatar to move.&lt;br /&gt;
|-&lt;br /&gt;
||[[TOXDropBox|DropBox]]&lt;br /&gt;
||[[User:Dimentox Travanti|Dimentox Travanti]]&lt;br /&gt;
|| This is a Drop box which allows people to drop certain items in a object &amp;amp; has many config options.&lt;br /&gt;
|-&lt;br /&gt;
||[[Efficiency Tester]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Tests the speed of a function.&lt;br /&gt;
|-&lt;br /&gt;
||[[Email-to-IM|Email2IM]]&lt;br /&gt;
||[[User:DoteDote Edison|DoteDote Edison]]&lt;br /&gt;
||Send IMs to SL friends via [[email]] (translate emails from friends into IMs).&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Kireji_Haiku/SIMchat_headset|Encrypted Region-wide chat]]&lt;br /&gt;
||&#039;&#039;&#039;[[User:Kireji Haiku|Kireji Haiku]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Kireji Haiku|talk]]|[[Special:Contributions/Kireji Haiku|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
||Encrypted Region-wide chat&lt;br /&gt;
|-&lt;br /&gt;
||[[ExplodingObjects]]&lt;br /&gt;
||[[User:Dale Innis|Dale Innis]]&lt;br /&gt;
||Causes an object (of the appropriate type) to explode on command.&lt;br /&gt;
|-&lt;br /&gt;
||[[FadeEasy]]&lt;br /&gt;
||[[User:Nika Rugani|Nika Rugani]]&lt;br /&gt;
||The easy way of fading objects in or out (Using llSetLinkAlpha)&lt;br /&gt;
|-&lt;br /&gt;
||[[FastConeSpread]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
|| Fast Algorithmn to achieve cone spread, main use in weaponry systems.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:PixelProphet Lane/Scripts#Fast List Prim Contents|Fast List Prim Contents]]&lt;br /&gt;
||[[User:PixelProphet Lane|PixelProphet Lane]]&lt;br /&gt;
||Fast and efficient method to print Object Inventory (Name, Type and next Owner permissions)&lt;br /&gt;
|-&lt;br /&gt;
||[[Find Avatar Key|Find Avatar Key]]&lt;br /&gt;
||[[User:Huney Jewell|Huney Jewell]]&lt;br /&gt;
||Explores [[UUID]] of avatar whose name is said in local chat or who touches the prim.&lt;br /&gt;
|-&lt;br /&gt;
||[[First Name Letter Prize]]&lt;br /&gt;
||[[User:RaithSphere Whybrow|RaithSphere Whybrow]]&lt;br /&gt;
||Gives a prize if the person who sits on it&#039;s first letter of first name matches the random letter!&lt;br /&gt;
|-&lt;br /&gt;
||[[Fix Small Prims|Fix_Small_Prims]]&lt;br /&gt;
||[[User:Emma Nowhere|Emma Nowhere]]&lt;br /&gt;
||Finds and adjusts the smallest prims in a linkset so that it can be scaled down further.&lt;br /&gt;
|-&lt;br /&gt;
||[[Flight Assist]]&lt;br /&gt;
||[[User:Flax Quirina|Flax Quirina]]&lt;br /&gt;
||Flight feather / flight band implementation supporting various commands and allowing you to fly above the clouds.&lt;br /&gt;
|-&lt;br /&gt;
||[[Float2Hex]]&lt;br /&gt;
||[[User:Strife Onizuka|Strife Onizuka]]&lt;br /&gt;
||Very useful for transporting [[float|floats]].&lt;br /&gt;
|-&lt;br /&gt;
||[[Float Box Contents]]&lt;br /&gt;
||[[User:Rolig Loon|Rolig Loon]]&lt;br /&gt;
||Displays object inventory in hover text, identified by type and updated marquee-style.&lt;br /&gt;
|-&lt;br /&gt;
||[[Follower (script)|Follower]]&lt;br /&gt;
||Unknown, uploaded by [[User:Slik Swindlehurst|Slik Swindlehurst]]&lt;br /&gt;
||Makes an object follow the nearest person. Do not use for [[grief|griefing]].&lt;br /&gt;
|-&lt;br /&gt;
||[[GA Event Notifier]]&lt;br /&gt;
||[[User:Victor Hua|Victor Hua]]&lt;br /&gt;
||Gathers seven days event data from a Google calendar and display it through a simple interface. The lsl script can access several calendars at once through seperate php files. One file per calendar. Host the included php on your own web server.&lt;br /&gt;
|-&lt;br /&gt;
||[[Geometric|Geometric Library]]&lt;br /&gt;
||Community Project&lt;br /&gt;
||A substantial amount of various geometric functions for intersection and other purposes of 3D maths.&lt;br /&gt;
|-&lt;br /&gt;
||[[Get Profile Picture]]&lt;br /&gt;
||[[User:Valentine Foxdale|Valentine Foxdale]]&lt;br /&gt;
||Sets the texture of the object to profile picture of the person that touches ot&lt;br /&gt;
|-&lt;br /&gt;
||[[GetTimestampOffset]]&lt;br /&gt;
||[[User:Siann_Beck|Siann Beck]]&lt;br /&gt;
||Returns [[llGetTimestamp]]() with an hour offset.&lt;br /&gt;
|-&lt;br /&gt;
||[[Give InvItem every n hours]]&lt;br /&gt;
||[[User:Criz Collins|Criz Collins]]&lt;br /&gt;
||Will give an inventory item on touch only every n hours, even if somebody touches the object more than once. &lt;br /&gt;
|-&lt;br /&gt;
||[[Give random object]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Touch to receive a random object in the prim&#039;s inventory&lt;br /&gt;
|-&lt;br /&gt;
||[[Giver]]&lt;br /&gt;
||[[User:Flax Quirina|Flax Quirina]]&lt;br /&gt;
||A menu-driven script that will hand out the objects in a prim. Supports multiple pages.&lt;br /&gt;
|-&lt;br /&gt;
||[[Google Charts]]&lt;br /&gt;
||[[User:Dedric Mauriac|Dedric Mauriac]]&lt;br /&gt;
||Create links to display raw data as a chart image.&lt;br /&gt;
|-&lt;br /&gt;
||[[Google_Translator]]&lt;br /&gt;
||[[User:Ugleh Ulrik|Ugleh Ulrik]]&lt;br /&gt;
||Translates spanish to english, and its simple to make it any other way.&lt;br /&gt;
|-&lt;br /&gt;
||[[Go transparent when walking]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||An attachment that goes invisible when you walk and visible when you don&#039;t walk.&lt;br /&gt;
|-&lt;br /&gt;
||[[Greeter]]&lt;br /&gt;
||[[User:Flax Quirina|Flax Quirina]]&lt;br /&gt;
||A multi-purpose greeter with multiple options (IM, landmark, notecard, URL, visitor statistics, shared access and compatible with the [[Mail]] system) that could work for shops, clubs, galleries and any other public place.&lt;br /&gt;
|-&lt;br /&gt;
||[[Group Authorization]]&lt;br /&gt;
||[[User:Chase Quinnell|Chase Quinnell]]&lt;br /&gt;
||Checks to see if object is set to appropriate group (checks by [[Group key finder|group key]])&lt;br /&gt;
|-&lt;br /&gt;
||[[Group Information v1.0]]&lt;br /&gt;
||[[User:Tyrennic Rivera|Tyrennic Rivera]]&lt;br /&gt;
||When clicked the prim will show group information (set on the prim) from the official Second Life Search page.&lt;br /&gt;
|-&lt;br /&gt;
||[[Group key finder]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Touch to find the key of the group&lt;br /&gt;
|-&lt;br /&gt;
||[[Group Privacy]]&lt;br /&gt;
||[[User:Chance Unknown|Chance Unknown]]&lt;br /&gt;
||Security device to insure members of a group can have a private area. Deactivates when nobody present.&lt;br /&gt;
|-&lt;br /&gt;
||[[Hello Avatar]]&lt;br /&gt;
||Linden Lab&lt;br /&gt;
||SL&#039;s default script.&lt;br /&gt;
|-&lt;br /&gt;
||[[Hello Avatar Companion]]&lt;br /&gt;
||[[Chase Quinnell]]&lt;br /&gt;
||Companion to the original [[Hello Avatar]] script&lt;br /&gt;
|-&lt;br /&gt;
||[[Hierarchics]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
|| Advanced script to create an efficient self-aware hierarchic structure.&lt;br /&gt;
|-&lt;br /&gt;
||[[Hierarchics2]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
|| Second generation, one script per object. Only two functions, can be embedded in others. Uses the new [[llSetLinkPrimitiveParamsFast]]/[[llGetLinkPrimitiveParams]] functions.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Rolig_Loon/High-Capacity_Greeter-Counter|High-Capacity Greeter-Counter]]&lt;br /&gt;
||[[User:Rolig Loon|Rolig Loon]]&lt;br /&gt;
||Uses a memory compression algorithm to store hashed visitor UUID&#039;s in a string instead of using a list. &lt;br /&gt;
|-&lt;br /&gt;
||[[Holodeck]]&lt;br /&gt;
||[[User:Revolution Perenti|Revolution Perenti]]&lt;br /&gt;
||Home Rezzing System (Open Source).&lt;br /&gt;
|-&lt;br /&gt;
||[[HUD Dots Radar]]&lt;br /&gt;
||[[User:Cerise Sorbet|Cerise]]&lt;br /&gt;
||HUD target example, draws dots on the HUD over avatars in view.&lt;br /&gt;
|-&lt;br /&gt;
||[[Intercom|Intercom]]&lt;br /&gt;
||[[User:Flax Quirina|Flax Quirina]]&lt;br /&gt;
||A system allowing grid-wide mass chat relay. By using this you can relay a main chat across multiple regions as well as between primitives in different regions.&lt;br /&gt;
|-&lt;br /&gt;
||[[Interpolation|Interpolation Library]]&lt;br /&gt;
||[[User:Nexii_Malthus|Nexii Malthus]]&lt;br /&gt;
||A small set of interpolation functions.&lt;br /&gt;
|-&lt;br /&gt;
||[[Intra-Region Update Server]]&lt;br /&gt;
||[[User:Emma_Nowhere|Emma Nowhere]]&lt;br /&gt;
||Centrally update objects such as Freeview screens or teleport pads within a region that are configured by notecards or contain modifiable objects or media assets.&lt;br /&gt;
|-&lt;br /&gt;
||[[Inventory_Based_Menu]]&lt;br /&gt;
||[[User:Revolution Perenti|Revolution Perenti]]&lt;br /&gt;
||Inventory Based Menu System.&lt;br /&gt;
|-&lt;br /&gt;
||[[iTunes RPC Email|iTunes RPC]]&lt;br /&gt;
||[[User:Fox Diller|Fox Diller]]&lt;br /&gt;
||iTunes RPC via LSL [[llEmail]] and [[llRemoteDataReply]].&lt;br /&gt;
|-&lt;br /&gt;
||[[Jingle]]&lt;br /&gt;
||[[User:Flax Quirina|Flax Quirina]]&lt;br /&gt;
||A script that will make a primitive emit a sound when you wear it and walk around. Ideal for bells, footsteps and so on...&lt;br /&gt;
|-&lt;br /&gt;
||[[Kilt Editor|Kilt / Skirt Editor]]&lt;br /&gt;
||[[User:Brangus Weir|Brangus Weir]]&lt;br /&gt;
|| This changes all the parameters of all the flexis in the link set in one swell foop!&lt;br /&gt;
|-&lt;br /&gt;
||[[Key Pad Door|Keypad Door]]&lt;br /&gt;
||[[User:Tdub Dowler|Tdub Dowler]]&lt;br /&gt;
|| Door and keypad with changeable code. Follow instructions carefully!&lt;br /&gt;
|-&lt;br /&gt;
||[[Key2Name]]&lt;br /&gt;
||[[User:Nika Rugani|Nika Rugani]]&lt;br /&gt;
|| Key2Name service where a user no longer needs to be in the same region to get users name&lt;br /&gt;
|-&lt;br /&gt;
||[[Last Sound System]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||An LSL [http://Last.fm Last.fm] client.&lt;br /&gt;
|-&lt;br /&gt;
||[[LibraryDisplayLandScreenshot]]&lt;br /&gt;
||[[User:Jon Desmoulins|Jon Desmoulins]]&lt;br /&gt;
||A modified version of LibraryDisplayProfilePic using the new [[PARCEL_DETAILS_ID]] Implemented in Server v1.36&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/LinkNumber-List_in_llSetLinkPrimitiveParamsFast|LinkNumber-List_in_llSetLinkPrimitiveParamsFast]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Changed several prims in linkset with the same parameters, with a list. Without separate llSetLinkPrimitiveParams for each prim. (ideal for show/hide effects)&lt;br /&gt;
|-&lt;br /&gt;
||[[Limit Vendor]]&lt;br /&gt;
||[[User:Flax Quirina|Flax Quirina]]&lt;br /&gt;
||This is a vendor supporting any number of items with different prices which will only dispense a certain number of individual items by setting limits for each item based on a notecard configuration.&lt;br /&gt;
|-&lt;br /&gt;
||[[Linkset resizer]]&lt;br /&gt;
||[[User:Maestro Linden|Maestro Linden]]&lt;br /&gt;
||Systematically rescales a linkset by moving and resizing each prim (by using [[llGetLinkPrimitiveParams]] and [[llSetLinkPrimitiveParamsFast]])&lt;br /&gt;
|-&lt;br /&gt;
||[[Linkset resizer with menu]]&lt;br /&gt;
||[[User:Brilliant Scientist|Brilliant Scientist]]&lt;br /&gt;
||A menu-driven script that rescales a linkset by moving and resizing the prims using [[llGetLinkPrimitiveParams]] and [[llSetLinkPrimitiveParamsFast]] functions. Based on [[Linkset resizer]].&lt;br /&gt;
|-&lt;br /&gt;
||[[Pointing Stick]]&lt;br /&gt;
||[[User: rhonin Nissondorf|rhonin Nissondorf]]&lt;br /&gt;
||A device that takes controls of your arrow keys and directs the device in the relative direction its pointing, forward and back of course.&lt;br /&gt;
|-&lt;br /&gt;
||[[Gun Script]]&lt;br /&gt;
||[[User:rhonin Nissondorf| rhonin Nissondorf]]&lt;br /&gt;
||Shoots out &amp;quot;ammo&amp;quot; from the root prim of your &amp;quot;gun&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
||[[Linkset Resizer 2]]&lt;br /&gt;
||[[User:Emma Nowhere|Emma Nowhere]]&lt;br /&gt;
||A more user-friendly resizer script designed for either drop-in use by the end-user or builder or for use in products. Based on [[Fix Small Prims]].&lt;br /&gt;
|-&lt;br /&gt;
||[[List2CSV]]&lt;br /&gt;
||[[User:Kunnis Basiat|Kunnis Basiat]]&lt;br /&gt;
||List2CSV &amp;amp; CSV2List that include preserving type and escaping characters.&lt;br /&gt;
|-&lt;br /&gt;
||[[list_cast]]&lt;br /&gt;
||[[User:Fractured Crystal|Fractured Crystal]]&lt;br /&gt;
||Casts a list of strings into the type they appear to be. Designed for preprocessing user input for feeding into [[llSetPrimitiveParams]]&lt;br /&gt;
|-&lt;br /&gt;
||[[Listener Script]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Use to [[listen]] to other people&#039;s conversations (Like spying)&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Functions#List:_Find_Last_Index|List: Find Last Index]]&lt;br /&gt;
||[[User:Void Singer|Void Singer]]&lt;br /&gt;
||Returns the last index of searched item in a source list. (backwards version of [[llListFindList]])&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Functions#List:_Multi-Find_Index_.28First_or_Last.29|List: Multi Find]]&lt;br /&gt;
||[[User:Void Singer|Void Singer]]&lt;br /&gt;
||Returns the first found index of multiple search items in a list. (Multi-item version of [[llListFindList]]. Fwd and Rev versions included)&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Functions#List:_Get_Reverse_Order|List: Reverse]]&lt;br /&gt;
||[[User:Void Singer|Void Singer]]&lt;br /&gt;
||Returns an input List in reverse order&lt;br /&gt;
|-&lt;br /&gt;
||[[Live Event Timeout]]&lt;br /&gt;
||[[User:Flax Quirina|Flax Quirina]]&lt;br /&gt;
||A script which will set the the music URL back to a radio station of your liking when a DJ leaves or forgets to switch back the URL after a live event. It takes multiple DJs, using a notecard and several configuration parameters.&lt;br /&gt;
|-&lt;br /&gt;
||[[Load URL]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Touch to get a dialog to visit the URL inside the script.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Kephra_Nurmi/lsDancemachine|lsDancemachine]]&lt;br /&gt;
||[[User:Kephra_Nurmi|Kephra Nurmi]]&lt;br /&gt;
|| Low lag client server dancemachine.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Kephra_Nurmi/lsDeejay|lsDeejay Home Edition]] &lt;br /&gt;
||[[User:Kephra_Nurmi|Kephra Nurmi]]&lt;br /&gt;
|| Client server media control for music, video, youtube, pictures, and texture animations.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Kephra_Nurmi/lsDialog|lsDialog]]&lt;br /&gt;
||[[User:Kephra_Nurmi|Kephra Nurmi]]&lt;br /&gt;
|| Universal notecard driven menu dialog system.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Kephra_Nurmi/lsDisplay|lsDisplay]]&lt;br /&gt;
||[[User:Kephra_Nurmi|Kephra Nurmi]]&lt;br /&gt;
|| Picture cycler with preloader.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Kephra_Nurmi/lsDistributor|lsDistributor]]&lt;br /&gt;
||[[User:Kephra_Nurmi|Kephra Nurmi]]&lt;br /&gt;
|| Simple &#039;try&#039; and &#039;buy&#039; vendor system.&lt;br /&gt;
|-&lt;br /&gt;
||[[LSL_languageAPI]]&lt;br /&gt;
||[[User:Gypsy paz|Gypsy Paz]]&lt;br /&gt;
||Multi-lingual API from notecard based language files&lt;br /&gt;
|-&lt;br /&gt;
||[[Mail]]&lt;br /&gt;
||[[User:Flax Quirina|Flax Quirina]]&lt;br /&gt;
||An system for sending objects to multiple recipients automatically supporting shared access and [[Greeter]] compatible auto-subscriptions.&lt;br /&gt;
|-&lt;br /&gt;
||[[Mandelbrot Explorer]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||An interactive fractal explorer.&lt;br /&gt;
|-&lt;br /&gt;
||[[Materialization Effects]]&lt;br /&gt;
||[[User:Overbrain Unplugged|Overbrain Unplugged]]&lt;br /&gt;
|| Special effects to add to rezzing events to simulate a teleportation or materialization.&lt;br /&gt;
|-&lt;br /&gt;
||[[Materialization Effects 2]]&lt;br /&gt;
||[[User:Nika Rugani|Nika Rugani]]&lt;br /&gt;
|| More efficient and faster version of Materialization Effects by Overbrain Unplugged.&lt;br /&gt;
|-&lt;br /&gt;
||[[Memory Module]]&lt;br /&gt;
||[[User:Flax Quirina|Flax Quirina]]&lt;br /&gt;
||An example of pseudo-persistent variable in-world storage.&lt;br /&gt;
|-&lt;br /&gt;
||[[Merge Sort]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Implements a Merge Sort in LSL, however this code is 300(ish) times slower than [[llListSort]]. Don&#039;t use this in a script!&lt;br /&gt;
|-&lt;br /&gt;
||[[Minesweeper]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||A simple minesweeper game.&lt;br /&gt;
|-&lt;br /&gt;
||[[Mood Color Changer]]&lt;br /&gt;
||[[User:Flax Quirina|Flax Quirina]]&lt;br /&gt;
||A script that changes the color of all primitives in a linkset depending on the smileys the owner types on the main chat.&lt;br /&gt;
|-&lt;br /&gt;
||[[Morse Code]]&lt;br /&gt;
||{{User|Bobbyb30 Swashbuckler}}&lt;br /&gt;
||A script that allows for the conversion to and from morse code and can &amp;quot;play&amp;quot; morse code.&lt;br /&gt;
|-&lt;br /&gt;
||[[Multi-displays Texture Cycler]]&lt;br /&gt;
||[[User:Nargus Asturias|Nargus Asturias]]&lt;br /&gt;
||A simple texture rotator designed for multiple display screens. With delay between each screen AND delay between each loop.&lt;br /&gt;
|-&lt;br /&gt;
||[[Multi Item Rezzer|Multi Item Rezzer]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||A rework of my old High Altitude Rezzer. Place the objects that you wish to choose from to be rezzed inside. Sit on the rezzer and pick the item and the height. It will go to target height and rez the object.&lt;br /&gt;
|-&lt;br /&gt;
||[[Multirezzer|Multirezzer (on collision)]]&lt;br /&gt;
||[[User:Beet Streeter|Beet Streeter]]&lt;br /&gt;
||Spawns up to 10 objects when the object containing the script collides with a user.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Allen_Kerensky/Myriad_Lite_Preview_3|Myriad Lite Preview 3 RPG System]]&lt;br /&gt;
||[[User:Allen_Kerensky|Allen Kerensky]]&lt;br /&gt;
||Working preview of the Myriad Universal RPG System by Ashok Desai, converted to LSL as a roleplay meter with close combat hand-to-hand and melee, ranged combat, armor, healing, bullet, firearm, and practice target&lt;br /&gt;
|-&lt;br /&gt;
||[[Name2Key in LSL]]&lt;br /&gt;
||[[User:Maeva Anatine|Maeva Anatine]]&lt;br /&gt;
||Get the Name2Key feature inside your scripts. Works even on lastly subscribed avatars.&lt;br /&gt;
|-&lt;br /&gt;
||[[Name2Key]]&lt;br /&gt;
||[[User:Nika Rugani|Nika Rugani]]&lt;br /&gt;
||Newest and fastest Name2Key search, While the database is small it is also connected to Second Life&#039;s search.&lt;br /&gt;
|-&lt;br /&gt;
||[[No Auto-Return]]&lt;br /&gt;
||[[User:Bellla Clarity|Bella Clarity]]&lt;br /&gt;
||To stop your long and hard builds from getting returned in sandboxes (&#039;&#039;only single prims, though!&#039;&#039;).&lt;br /&gt;
|-&lt;br /&gt;
||[[No Auto-Return NR]]&lt;br /&gt;
||[[User:Jor3l Boa|Jor3l Boa]]&lt;br /&gt;
||This really works (29-05-09), needs a nearby region to do the trick and avoid auto return. (Tested on Blue and Rausch)&lt;br /&gt;
|-&lt;br /&gt;
||[[No Auto-Return (Multi)]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||A revision of Bella&#039;s that works for multi-prim objects.&lt;br /&gt;
|-&lt;br /&gt;
||[[No Limit Teleporter]]&lt;br /&gt;
||[[User:Morgam Biedermann|Morgam Biedermann]]&lt;br /&gt;
||Teleport to infinite altitudes (up to 4096m)&lt;br /&gt;
|-&lt;br /&gt;
||[[Object Size]]&lt;br /&gt;
||[[User:Chase Quinnell|Chase Quinnell]]&lt;br /&gt;
||Gets the dimensions and footprint of a linkset&lt;br /&gt;
|-&lt;br /&gt;
||[[Object to Data v1.4|Object to Data]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Turns an object into text (and back). Allows people to transfer objects through notecards (or otherwise).&lt;br /&gt;
|-&lt;br /&gt;
||[[Online Indicator|Online Indicator]]&lt;br /&gt;
||[[User:Kristy Fanshaw|Kristy Fanshaw]]&lt;br /&gt;
||Will show if the user is online or not. Displays users profile picture and allows to send IM&#039;s to user. Also gives a link to open the users profile&lt;br /&gt;
|-&lt;br /&gt;
||[[Open Group Join]]&lt;br /&gt;
||[[User:Alicia Stella|Alicia Stella]]&lt;br /&gt;
||User Touches Object to Join Group from Group Info window, (no bot.)&lt;br /&gt;
|-&lt;br /&gt;
||[[Open Prim Animator]]&lt;br /&gt;
||[[User:Todd Borst|Todd Borst]]&lt;br /&gt;
||Single script prim animation tool.  Menu driven, easy to use.&lt;br /&gt;
|-&lt;br /&gt;
||[[Open Zyngo Skin Installer]]&lt;br /&gt;
||[[User:Tmzasz Luminos|Tmzasz Luminos]]&lt;br /&gt;
||A Simple Script designed to install skins on the popular Skill machines.&lt;br /&gt;
|-&lt;br /&gt;
||[[One Script, many doors]]&lt;br /&gt;
||[[User:Kyrah Abattoir|Kyrah Abattoir]]&lt;br /&gt;
||Door script able to manage more than 50 linked doors from a single script instance.&lt;br /&gt;
|-&lt;br /&gt;
||[[ParseString2List]]&lt;br /&gt;
||[[User:Strife Onizuka|Strife Onizuka]]&lt;br /&gt;
||Same as [[llParseString2List]] and [[llParseStringKeepNulls]], but not limited to 8 spacers or separators. Thus substitute a call to the [[llParseString2List]] and [[llParseStringKeepNulls]] functions by a call to [[Parse_String_To_List|ParseString2List]] whenever you have more than 8 separators or more than 8 spacers.&lt;br /&gt;
|-&lt;br /&gt;
||[[Password Generator]]&lt;br /&gt;
||[[User:Syntrax Canucci|Syntrax Canucci]]&lt;br /&gt;
||This is an over-complicated, semi-complex password generator, which goes through multiple steps.&lt;br /&gt;
|-&lt;br /&gt;
||[[Pathfinder]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||A potential field based pathfinding library.&lt;br /&gt;
|-&lt;br /&gt;
||[[Personal ATM Machine]]&lt;br /&gt;
||[[User:Jessikiti Nikitin|Jessikiti Nikitin]]&lt;br /&gt;
||Allows deposits and withdrawals into another of your accounts, without the account being logged in.&lt;br /&gt;
|-&lt;br /&gt;
||[[Phantom Child]]&lt;br /&gt;
||[[User:Aeron Kohime|Aeron Kohime]]&lt;br /&gt;
||Causes a child in a link set to become phantom without the entire object becoming phantom.&lt;br /&gt;
|-&lt;br /&gt;
||[[PHP_RegionFunctions]]&lt;br /&gt;
||[[User:Gypsy Paz|Gypsy Paz]] and [[User:Zayne Exonar|Zayne Exonar]]&lt;br /&gt;
||Three useful PHP functions to get region info&lt;br /&gt;
|-&lt;br /&gt;
||[[PhysicsLib]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
|| Interesting set of fun physics functions.&lt;br /&gt;
|-&lt;br /&gt;
||[[Play and Loop Sound]]&lt;br /&gt;
||[[User:Bellla Clarity|Bella Clarity]]&lt;br /&gt;
||Very short and simple script; plays and loops a sound in an object.&lt;br /&gt;
|-&lt;br /&gt;
||[[Posing stand|Posing Stand]]&lt;br /&gt;
||[[User:Bellla Clarity|Bella Clarity]]&lt;br /&gt;
||Just a pose script to edit [[attachments]] more easily.&lt;br /&gt;
|-&lt;br /&gt;
||[[PosJump]]&lt;br /&gt;
||[[User:Uchi Desmoulins|Uchi Desmoulins]]&lt;br /&gt;
||A much more efficient alternative to the popular [[warpPos]] function for bypassing 10m distance-moved limitations.&lt;br /&gt;
|-&lt;br /&gt;
||[[Puppeteer]]&lt;br /&gt;
||[[User:Flax Quirina|Flax Quirina]]&lt;br /&gt;
||A simple puppeteer script that will allow you to record and animate prim movements and rotations.&lt;br /&gt;
|-&lt;br /&gt;
||[[Prefix Calculator]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
|| A calculator that evaluates expressions in prefix notation. &lt;br /&gt;
&amp;lt;code&amp;gt;+ 3 4 = 5. * + 1 2 + 3 4 = 14.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||[[Profile Generator]]&lt;br /&gt;
||[[User:Flax Quirina|Flax Quirina]]&lt;br /&gt;
||A cynical script for generating boilerplate profiles by based on cliches and profile memes.&lt;br /&gt;
|-&lt;br /&gt;
||[[Profile Picture]]&lt;br /&gt;
||[[User: Jor3l Boa|Jor3l Boa]]&lt;br /&gt;
||A working profile picture script with the new SecondLife API (1/11/2011)&lt;br /&gt;
|-&lt;br /&gt;
||[[Progress Bar]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
|| Flexible and powerful little function for creating progress bars useful in hovertext.&lt;br /&gt;
|-&lt;br /&gt;
||[[Pseudo-random Number Generator]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Generates a Pseudo-random number between -0x7FFFFFFF and 0x7FFFFFFF&lt;br /&gt;
|-&lt;br /&gt;
||[[Quicksort]]&lt;br /&gt;
||[[User:Flax Quirina|Flax Quirina]]&lt;br /&gt;
||LSL implementation of the Quicksort algorithm.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Rolig_Loon/Quiz_From_Notecard|Quiz From Notecard]]&lt;br /&gt;
||[[User:Rolig Loon|Rolig Loon]]&lt;br /&gt;
||A multiple-choice testing script that reads questions and answer choices from a notecard and presents them in dialog boxes.&lt;br /&gt;
|-&lt;br /&gt;
||[[Racter]]&lt;br /&gt;
||[[User:Flax Quirina|Flax Quirina]]&lt;br /&gt;
||In-world, multi-purpose chatterbot (Eliza/A.L.I.C.E. inspired) supporting multiple configurable hot-swappable brain-files with a wide range of applications.&lt;br /&gt;
|-&lt;br /&gt;
||[[Rainbow_palette]]&lt;br /&gt;
||[[User:Rui Clary|Rui Clary]]&lt;br /&gt;
||Build a color picker, using only one prim, and a few lines of code.&lt;br /&gt;
|-&lt;br /&gt;
||[[Random Gaussian Number Generator]]&lt;br /&gt;
||[[User:Vlad Davidson|Vlad Davidson]]&lt;br /&gt;
||Generates a random number drawn from a normal (Gaussian; bell-curve) distribution, based on a specified mean/stdev&lt;br /&gt;
|-&lt;br /&gt;
||[[Random AV Profile Projector]]&lt;br /&gt;
||[[User:Debbie Trilling|Debbie Trilling]]&lt;br /&gt;
||Randomly selects an AV from a crowd &amp;amp; then projects their profile picture as a &#039;holographic&#039; image &lt;br /&gt;
|-&lt;br /&gt;
||[[Random Object Vendor]]&lt;br /&gt;
||[[User:CodeBastard Redgrave|CodeBastard Redgrave]]&lt;br /&gt;
||Simple vendor that gives out random objects when paid the right amount &lt;br /&gt;
|-&lt;br /&gt;
||[[Random Password Generator]]&lt;br /&gt;
||[[User:Jor3l Boa|Jor3l Boa]]&lt;br /&gt;
||Generate Random passwords based on String Length.&lt;br /&gt;
|-&lt;br /&gt;
||[[RavText]]&lt;br /&gt;
||[[User:Ravenous Dingo|Ravenous Dingo]]&lt;br /&gt;
||An alternate to XyText.  This is a lightweight, multiple font 10 character text display system.  It only supports uppercase alphanumeric text and a few special characters, but it is very fast, renders quickly and supports multiple fonts. It is meant for specialized use when all that is desired is basic, fast text display and the extra &amp;quot;bells and whistles&amp;quot; are not needed.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:PixelProphet Lane/Scripts#Real Object Inventory To Dialog|Real Object Inventory To Dialog]]&lt;br /&gt;
||[[User:PixelProphet Lane|PixelProphet Lane]]&lt;br /&gt;
||Display any amount of items contained in an Object in a Dialog, regardless of item name length.&lt;br /&gt;
|-&lt;br /&gt;
||[[RentalBoxv1|Rental Box, Simply]]&lt;br /&gt;
||[[User:Sendao Goodman|Sendao Goodman]]&lt;br /&gt;
||Simple explanation of how to make rental boxes.&lt;br /&gt;
|-&lt;br /&gt;
||[[Rental Cube]]&lt;br /&gt;
||[[User:Hank Ramos|Hank Ramos]]&lt;br /&gt;
||Simple cube for renting out a space.&lt;br /&gt;
|-&lt;br /&gt;
||[[Remote Texture Loader]]&lt;br /&gt;
||{{User|Bobbyb30 Swashbuckler}}&lt;br /&gt;
||A set of scripts for remotely loading textures within a sim. This means that a single &amp;quot;texture server&amp;quot; can manage multiple changing billboards within a sim.&lt;br /&gt;
|-&lt;br /&gt;
||[[Say Region Frames Per Second|Region Frames Per Second]]&lt;br /&gt;
||[[User:Heymeriou Mystakidou|Heymariou Mystakidou]]&lt;br /&gt;
|| Says the region name and frames per second out loud on command.&lt;br /&gt;
|-&lt;br /&gt;
||[[Resizer multi-prims|Resizer multi-prims]]&lt;br /&gt;
||[[User:Christy Mansbridge|Christy Mansbridge]]&lt;br /&gt;
||1 Mono script to resize object (1 to 256 prims) by blue menu. Avoid risk to break the build by increasing link distance.&lt;br /&gt;
|-&lt;br /&gt;
||[[sbDialog]]&lt;br /&gt;
||[[User:Siann_Beck|Siann Beck]]&lt;br /&gt;
||A simple replacement function for [[llDialog]]. It re-orders the button list so that the button values, as passed to it, display left-to-right, top-to-bottom. It also opens a [[llListen|listen]] on the specified channel, and returns the handle.&lt;br /&gt;
|-&lt;br /&gt;
||[[Scheduled Payments]]&lt;br /&gt;
||[[User:Flax Quirina|Flax Quirina]]&lt;br /&gt;
||A script that will allow you to make scheduled (and reoccurring) payments to multiple avatars via a notecard. &lt;br /&gt;
|-&lt;br /&gt;
||[[Scheduler]]&lt;br /&gt;
||[[User:Haravikk Mistral|Haravikk Mistral]]&lt;br /&gt;
||Schedule multiple events using a single script timer&lt;br /&gt;
|-&lt;br /&gt;
||[[Scheme_Interpreter|Scheme Interpreter]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||A scheme interpreter capable of handling most scheme expressions, including lambda and lists.&lt;br /&gt;
|-&lt;br /&gt;
||[[Script Override Functions]]&lt;br /&gt;
||[[User:Revolution Perenti|Revolution Perenti]]&lt;br /&gt;
||bypass default strings, integer etc in chat channel.&lt;br /&gt;
|-&lt;br /&gt;
||[[Scripted Attachment Detector.lsl|Scripted Attachment Detector]]&lt;br /&gt;
||{{User|Bobbyb30 Swashbuckler}}&lt;br /&gt;
||A script that will display avatars wearing scripted attatchments in hovertext. This may be worn as an hud or rezzed. &lt;br /&gt;
|-&lt;br /&gt;
||[[Self Upgrading Script Enhanced]]&lt;br /&gt;
||[[User:Cron Stardust|Cron Stardust]]&lt;br /&gt;
||Keeps only latest version of the script on prim (even with multiple adds of the same script!)&lt;br /&gt;
|-&lt;br /&gt;
||[[Sensor Visualizer]]&lt;br /&gt;
||[[User:Cerise Sorbet|Cerise Sorbet]]&lt;br /&gt;
||Shows the size and shape you get with [[llSensor]] range and arc parameters&lt;br /&gt;
|-&lt;br /&gt;
||[[Serverless Key Exchange]]&lt;br /&gt;
||[[User:Sendao Goodman|Sendao Goodman]]&lt;br /&gt;
||Maintains a network of object keys without using an external server.&lt;br /&gt;
|-&lt;br /&gt;
||[[SHA1|SHA1 Hash]]&lt;br /&gt;
||[[User:Strife Onizuka|Strife Onizuka]]&lt;br /&gt;
||Performs a SHA1 Hash on an input text. Similar to MD5 only (slightly) more secure. &lt;br /&gt;
|-&lt;br /&gt;
||[[Shoutcast - radio controller v0.3 (remake of similar scripts)]]&lt;br /&gt;
||[[User:Flennan Roffo|Logic Scripts]]&lt;br /&gt;
||Control your shoutcast radio stations with this shoutcast controller. Uses notecard for info about genres and stations and menu to select the station. Sends info to Xytext display.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:PixelProphet Lane/Scripts#Show Agent Script Count and memory|Show Agent Script Count and memory]]&lt;br /&gt;
||[[User:PixelProphet Lane|PixelProphet Lane]]&lt;br /&gt;
||Fast and efficient method to display the amount of scripts and memory usage for an agent&lt;br /&gt;
|-&lt;br /&gt;
||[[Sim Map Particle Projector]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||Displays a floating map of the sim the script is in.&lt;br /&gt;
|-&lt;br /&gt;
||[[Sim Restart Logger]]&lt;br /&gt;
||[[User:Kyrah Abattoir|Kyrah Abattoir]]&lt;br /&gt;
||Counts region restarts and displays log of last 9 restarts together with region FPS and dilation. &lt;br /&gt;
|-&lt;br /&gt;
||[[SIM status]]&lt;br /&gt;
||[[User:Flax Quirina|Flax Quirina]]&lt;br /&gt;
||A script that will scan and display the status of SIMs (up, down, starting, stopping, unknown, crashed) from a notecard in the same prim as the script.&lt;br /&gt;
|-&lt;br /&gt;
||[[Simple Elevator in a Box]]&lt;br /&gt;
||[[User:Hank Ramos|Hank Ramos]]&lt;br /&gt;
||Simple elevator example.&lt;br /&gt;
|-&lt;br /&gt;
||[[Simple Pay Door]]&lt;br /&gt;
||[[User:Giygas Static|Giygas Static]]&lt;br /&gt;
||Simple door you pay to get access.&lt;br /&gt;
|-&lt;br /&gt;
||[[Skillingo AntiHack Script]]&lt;br /&gt;
||[[User:Tmzasz Luminos|Tmzasz Luminos]]&lt;br /&gt;
||A simple Protection script for skillingo thats modifyable to work with other machines.&lt;br /&gt;
|-&lt;br /&gt;
||[[Skunk Money]]&lt;br /&gt;
||[[User:Hank Ramos|Hank Ramos]]&lt;br /&gt;
||Fun gambling machine of yesteryear, which only supports freeplay now due to SL regulations against gambling. &lt;br /&gt;
|-&lt;br /&gt;
||[[SLateIt]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||An augmented virtual reality HUD.&lt;br /&gt;
|-&lt;br /&gt;
||[[SLetanque]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||An LSL petanque game.&lt;br /&gt;
|-&lt;br /&gt;
||[[SLURL HUD]]&lt;br /&gt;
||[[User:CodeBastard Redgrave|CodeBastard Redgrave]]&lt;br /&gt;
||Touch this HUD to get a SLURL through IM, email and floating text.&lt;br /&gt;
|-&lt;br /&gt;
||[[BuildSlurl (NewAge)]]&lt;br /&gt;
||[[User:Archile Azalee|Archile Azalee]]&lt;br /&gt;
||A way to create a SLurl in a single function BuildSlurl&lt;br /&gt;
|-&lt;br /&gt;
||[[SL Mail V1.2]]&lt;br /&gt;
||[[User:Flennan Roffo|Flennan Roffo]]&lt;br /&gt;
||Second Life mail client V1.2 (released sept&#039;07). Send and receive mail from within Second Life from and to any address. With Address Book function and many chat commands. V1.3 is upcoming soon! &lt;br /&gt;
|-&lt;br /&gt;
||[[SL_NTPoHTTP_v1.1_client|SL NTPoHTTP client]]&lt;br /&gt;
|[[User:SignpostMarv Martin|SignpostMarv Martin]]&lt;br /&gt;
||Second Life Needs Time Parsing over Hyper Text Transfer Protocol&lt;br /&gt;
Emulates the function of [[llGetWallclock]] for any timezone by using SLOpenID&#039;s SLNTPoHTTP service. Also supports ISO 8601 and RFC 2822 timestamps. Script is dependent upon an external service operated by the author!&lt;br /&gt;
|-&lt;br /&gt;
||[[Smile]]&lt;br /&gt;
|[[User:Flax Quirina|Flax Quirina]]&lt;br /&gt;
||An extended smile script supporting two smiles (extendable via a list) and a time delay triggering them at random.&lt;br /&gt;
|-&lt;br /&gt;
||[[Smooth Rotating Door]]&lt;br /&gt;
|[[User:Toy Wylie|Toy Wylie]]&lt;br /&gt;
||A script for doors that open and close smoothly using llTargetOmega&lt;br /&gt;
|-&lt;br /&gt;
||[[Smooth Sliding Door]]&lt;br /&gt;
|[[User:SimonT Quinnell|SimonT Quinnell]]&lt;br /&gt;
||A script for sliding doors that open and close smoothly using [[llMoveToTarget]]. Asjusts for prim orientation.&lt;br /&gt;
|-&lt;br /&gt;
||[[Song Requests]]&lt;br /&gt;
|[[User:Flax Quirina|Flax Quirina]]&lt;br /&gt;
||Helper script for DJs, allowing listeners to request songs and make dedications.&lt;br /&gt;
|-&lt;br /&gt;
||[[Speed Tester]]&lt;br /&gt;
||{{User|Bobbyb30 Swashbuckler}}&lt;br /&gt;
||Similar to the [[Efficiency Tester]], this script allows you to test the speed of a particular function or snippet with multiple trials giving min/max/avg/median and the standard deviation.&lt;br /&gt;
|-&lt;br /&gt;
||[[Spiral Staircase Generator]]&lt;br /&gt;
|[[User:Meyermagic Salome|Meyermagic Salome]]&lt;br /&gt;
||Generates nice looking spiral staircases without much hassle.&lt;br /&gt;
|-&lt;br /&gt;
||[[Static URL&#039;s for HTTP-In Service|Static_URLs]]&lt;br /&gt;
||[[User:Jor3l Boa|Jor3l Boa]]&lt;br /&gt;
||How to generate a static url for HTTP-In temporal limitations.&lt;br /&gt;
|-&lt;br /&gt;
||[[String Compare]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Compares two strings and reliably returns either 1, -1, or 0 if they are the same.&lt;br /&gt;
|-&lt;br /&gt;
||[[Synchronize]]&lt;br /&gt;
||[[User:Cay Trudeau|Cay Trudeau]]&lt;br /&gt;
||Makes synchronized start to a task on even/odd seconds&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Functions#String:_Find_Last_Index|String: Reverse]]&lt;br /&gt;
||[[User:Void Singer|Void Singer]]&lt;br /&gt;
||Returns an input string in reverse order&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Functions#String:_Get_Reverse_Order|String: Last Index]]&lt;br /&gt;
||[[User:Void Singer|Void Singer]]&lt;br /&gt;
||Returns the last index of search found in string (the backward equivalent of [[llSubStringIndex]])&lt;br /&gt;
|-&lt;br /&gt;
||[[Tail Messages (NewAge)]]&lt;br /&gt;
||[[User:Asia Snowfall|Asia Snowfall]]&lt;br /&gt;
||A super nice easy to use script for those non-scripters out there! NewAge coding has done it again where you no longer need to scroll up and down adding buttons and adding messages, Features a tag system (you&#039;ll see what i mean :P)&lt;br /&gt;
|-&lt;br /&gt;
||[[Taper Door (minimalistic)]]&lt;br /&gt;
||[[User:Kopilo Hallard|Kopilo Hallard]]&lt;br /&gt;
||A basic script for doors which open and close using taper.&lt;br /&gt;
|-&lt;br /&gt;
||[[Teleport HUD]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||WORKS TO 4096 METERS!! Very user friendly teleport HUD. Add destinations by touching &amp;quot;Add&amp;quot; &amp;amp; naming destination in chat. Automatically gets sim name and coordinates. Will only display the destinations in the sim you are currently in. Demonstrates more advanced list manipulation and stride functions.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Programs#v7-D_Enh._Landmark-2-Map|Teleporter (landmark based)]]&lt;br /&gt;
||[[User:Void_Singer|Void_Singer]]&lt;br /&gt;
||Uses Landmarks to offer map teleports. Works as Hud or inworld objects, just drop in landmarks and go.&lt;br /&gt;
|-&lt;br /&gt;
||[[Text_Scroller|Text Scroller]]&lt;br /&gt;
||[[User:Fred_Gandt|Fred Gandt]]&lt;br /&gt;
||A simple text display object that scrolls text (applied as a texture) from right to left (like &#039;&#039;those&#039;&#039; LED signs) in a continuous loop.&lt;br /&gt;
|-&lt;br /&gt;
||[[Bobbyb&#039;s texture changer|Texture Changers]]&lt;br /&gt;
||{{User|Bobbyb30 Swashbuckler}}&lt;br /&gt;
||A collection of texture changing scripts.&lt;br /&gt;
|-&lt;br /&gt;
||[[Texture Menu Management|Texture Management]]&lt;br /&gt;
||[[User:Revolution Perenti|Revolution Perenti]]&lt;br /&gt;
||Dialog Menu based Texture Selection.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Xen_Lisle/Texture_Slide|Texture Slide]]&lt;br /&gt;
||[[user:Xen Lisle|Xen Lisle]]&lt;br /&gt;
||Slides a texture on mouse movement&lt;br /&gt;
|-&lt;br /&gt;
||[[Tic Tac Toe]]&lt;br /&gt;
||[[User:CG Linden|CG Linden]]&lt;br /&gt;
||Step by step demo on how to implement a larger scripting project&lt;br /&gt;
|-&lt;br /&gt;
||[[TightList]]&lt;br /&gt;
||[[User:Strife Onizuka|Strife Onizuka]]&lt;br /&gt;
||Tight List is a family of functions for encoding lists as strings and then decoding them back into lists.&lt;br /&gt;
There are two flavors: TightList and TightListType. TightListType preserves types and uses a 6 char header, while TightList uses a 1 char header that doesn&#039;t preserve type. &lt;br /&gt;
|-&lt;br /&gt;
||[[Timer Module]]&lt;br /&gt;
||[[User:Isabelle Aquitaine|Isabelle Aquitaine]]&lt;br /&gt;
||Manage multiple timers via linked messages.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Functions#Unix_time_code_to_list_format|Timestamp:&amp;lt;br&amp;gt;Unix time code to list format]]&lt;br /&gt;
||[[User:Void Singer|Void Singer]]&lt;br /&gt;
||converts Unix timestamps to their [Y, M, D, h, m, s] equivalents (ex: 1234567890 to [2009, 2, 13, 3, 31, 30])&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Functions#List_format_to_Unix_time_code.|Timestamp:&amp;lt;br&amp;gt;List format to Unix time code]]&lt;br /&gt;
||[[User:Void Singer|Void Singer]]&lt;br /&gt;
||converts [Y, M, D, h, m, s] timestamps to their Unix equivalents (ex: [2009, 2, 13, 3, 31, 30] to 1234567890)&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Functions#Weekday_from_Unix_timestamp|Timestamp:&amp;lt;br&amp;gt;Weekday from Unix timestamp]]&lt;br /&gt;
||[[User:Void Singer|Void Singer]]&lt;br /&gt;
||Gets weekday from Unix timestamps (ex: &amp;quot;Friday&amp;quot; from 1234567890)&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Functions#Weekday_from_.28_Y.2C_M.2C_D_.29_format|Timestamp:&amp;lt;br&amp;gt;Weekday from (Y, M, D) format]]&lt;br /&gt;
||[[User:Void Singer|Void Singer]]&lt;br /&gt;
||Gets weekday from (Y, M, D) timestamps (ex: &amp;quot;Friday&amp;quot; from (2009, 2, 13))&lt;br /&gt;
|-&lt;br /&gt;
||[[Tipjar]]&lt;br /&gt;
||[[User:Flax Quirina|Flax Quirina]]&lt;br /&gt;
||This is a fully fledged tipjar supporting shared access, split profits, inviting to group, handing over gifts, maintaining statistics of who tipped most and who tipped in general, eliminating deed to group and comes with an innovative feature: it periodically moves around from avatar to avatar in the room and returns back to its initial position after a sweep. This way your tijpar will not be static, but participate in the party!&lt;br /&gt;
|-&lt;br /&gt;
||[[Touch A Quote]]&lt;br /&gt;
||[[User:CodeBastard Redgrave|CodeBastard Redgrave]]&lt;br /&gt;
||Touch an object to read quotes sequentially from a notecard&lt;br /&gt;
|-&lt;br /&gt;
||[[Touring Balloon]]&lt;br /&gt;
||[[User:Hank Ramos|Hank Ramos]]&lt;br /&gt;
||Automated touring balloon with many options from long ago.  Always seems to work on one SL release, and not the other.&lt;br /&gt;
|-&lt;br /&gt;
||[[Towncrier]]&lt;br /&gt;
||[[User:Flax Quirina|Flax Quirina]]&lt;br /&gt;
||A simple towncrier to be used in role-play SIMs or wherever there is a need to broadcast news in random intervals.&lt;br /&gt;
|-&lt;br /&gt;
||[[Trivia]]&lt;br /&gt;
||[[User:Flax Quirina|Flax Quirina]]&lt;br /&gt;
||A trivia game engine with provided ready-made notecards.&lt;br /&gt;
|-&lt;br /&gt;
||[[Under Age Boot]]&lt;br /&gt;
|[[User:Chance Unknown|Chance Unknown]]&lt;br /&gt;
||Security device example to teleport home accounts below a minimum age limit; can be useful in combating free griefer accounts.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Rolig_Loon/UNDO_PosRot|UNDO_PosRot]]&lt;br /&gt;
||[[User:Rolig Loon|Rolig Loon]]&lt;br /&gt;
||Allows user to undo position and rotation changes that have been made &amp;quot;manually&amp;quot; to any or all prims in a linkset.&lt;br /&gt;
|-&lt;br /&gt;
||[[Universal Translator]]&lt;br /&gt;
|[[User:Hank Ramos|Hank Ramos]]&lt;br /&gt;
||Chat listener that handles seamless translation of public chat between 50+ written languages without the need for configuration.  Handles numerous avatars, auto-detects languages, and works together with multiple copies of translators to spread-workload using a sophisticated back-end communications sub-system.&lt;br /&gt;
|-&lt;br /&gt;
||[[Unix2DateTime]]&lt;br /&gt;
|[[User:Flennan Roffo|Flennan Roffo]]&lt;br /&gt;
||Conversion from Unix time ([[llGetUnixTime]]()) to date and time string and vice versa.&lt;br /&gt;
|-&lt;br /&gt;
||[[Unmutable Descript Nagger]]&lt;br /&gt;
|[[User:Bobbyb30 Zohari|Bobbyb30 Zohari]]&lt;br /&gt;
||To nag avatars to take off their scripted attatchments.&lt;br /&gt;
|-&lt;br /&gt;
||[[Unpacker On Rez (NewAge)]]&lt;br /&gt;
|[[User:Asia Snowfall|Asia Snowfall]]&lt;br /&gt;
||A very simple to use script for all you creators out there, This script will enable you to send out boxed items and make it easier for users to unpack, Also features auto die on completion. Very simple to configure!&lt;br /&gt;
|-&lt;br /&gt;
||[[Unpacker On Touch (NewAge)]]&lt;br /&gt;
|[[User:Asia Snowfall|Asia Snowfall]]&lt;br /&gt;
||Exactly like Unpacker On Rez, But changed some things about to make it Unpack On Touch&lt;br /&gt;
|-&lt;br /&gt;
||[[Update distributor]]&lt;br /&gt;
|[[User:Dale Innis|Dale Innis]]&lt;br /&gt;
||Distribute an object (like a project update) to a list of people named in a notecard.&lt;br /&gt;
|-&lt;br /&gt;
||[[UUID2Channel]]&lt;br /&gt;
||[[User:Project Neox|Project Neox]]&lt;br /&gt;
||Optimised version of the original key2channel generators.&lt;br /&gt;
|-&lt;br /&gt;
||[[UUID Song Generator]]&lt;br /&gt;
||{{User|Sendao Goodman}}&lt;br /&gt;
||Translates a UUID into a simple song and plays it.&lt;br /&gt;
|-&lt;br /&gt;
||[[VirtualID_URLMap|VirtualID URL Mapper for HTTP-in]]&lt;br /&gt;
|[[User:Cenji Neutra|Cenji Neutra]]&lt;br /&gt;
||A script showing how to setup a static URL of the form &amp;lt;your-alias&amp;gt;.obj.virtualid.info which maps to the dynamic HTTP-in URL LSL generates and keeps it up-to-date.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Void_Singer/Programs#v7-D_Advanced_Visitor_Greeter|Visitor Greeter]]&lt;br /&gt;
|[[User:Void_Singer|Void_Singer]]&lt;br /&gt;
||Reduced spam visitor greeter, highly configurable, easy to modify.&lt;br /&gt;
|-&lt;br /&gt;
||[[Visitor Logger (Web/Basic) ]]&lt;br /&gt;
|[[User:Buddy Sprocket|Buddy Sprocket]]&lt;br /&gt;
||A very basic visitor logger - log visitors in SL to a text file on your web-site.&lt;br /&gt;
|-&lt;br /&gt;
||[[Visitors]]&lt;br /&gt;
|[[User:Flax Quirina|Flax Quirina]]&lt;br /&gt;
||A series of scripts to hold lists of visitors taking into account display names and supporting tracking multiple visits.&lt;br /&gt;
|-&lt;br /&gt;
||[[Vote Simple]]&lt;br /&gt;
|[[User:JB_Kraft|JB Kraft]]&lt;br /&gt;
||Simple vote collector. One avi, one vote.&lt;br /&gt;
|-&lt;br /&gt;
||[[Walking Sound (NewAge)]]&lt;br /&gt;
|[[User:Asia Snowfall|Asia Snowfall]]&lt;br /&gt;
||Very powerful walking sound script, Featuring customer ability to add their own sounds with the API Sound Feature!&lt;br /&gt;
|-&lt;br /&gt;
||[[Wanderer]]&lt;br /&gt;
|[[User:Flax Quirina|Flax Quirina]]&lt;br /&gt;
||A script that can be used to randomly move a prim around relative to its origin point. Can be used for breeders, robots, birds and other applications where a primitive has to move around by itself.&lt;br /&gt;
|-&lt;br /&gt;
||[[WarpPos]]&lt;br /&gt;
|[[User:Keknehv Psaltery|Keknehv Psaltery]]&lt;br /&gt;
||Non-physical movement without the 10m limit.&lt;br /&gt;
|-&lt;br /&gt;
||[[Wiki3DBuilder]] [[Wiki3DBuilder1.0]]&lt;br /&gt;
||[[User:Salahzar Stenvaag|Salahzar Stenvaag]] &lt;br /&gt;
||Allows a group of people to collectively build up complex 3D mindmaps with connected concepts. Uses particles for connections and low prim usage. Nodes can be textured, colored, changed form size moved collectively by everybody and can distribute notecards, landmarks, URL, objects, textures. I provide two version 0.1 and 1.0 and probably next version will communicate with moodle and sloodle external websites.&lt;br /&gt;
|-&lt;br /&gt;
||[[Window Control]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||For window opacity, helpful for buildings.&lt;br /&gt;
|-&lt;br /&gt;
||[[WHMcs SecondLife plugin]]&lt;br /&gt;
|[[User:Alicia Sautereau|Alicia Sautereau]]&lt;br /&gt;
||Linden Dollar payment plugin for the WHMcs hosting portal.&lt;br /&gt;
|-&lt;br /&gt;
||[[XTEA Strong Encryption Implementation]]&lt;br /&gt;
||[[User:Morse Dillon|Morse Dillon]]&lt;br /&gt;
||An LSL implementation of XTEA (eXtended Tiny Encryption Algorithm).  This is the first known public release of a &#039;real&#039; strong encryption implementation in LSL and is released under the GNU General Public License (GPL).&lt;br /&gt;
|-&lt;br /&gt;
||[[XyText 1.5|XyText]]&lt;br /&gt;
||[[User:Xylor Baysklef|Xylor Baysklef]]&lt;br /&gt;
|| Display text (up to 10 characters) on a prim. Use as many prims as desired.&lt;br /&gt;
|-&lt;br /&gt;
||[[XyyyyzText|XyyyyzText]]&lt;br /&gt;
||[[User:Criz Collins|Criz Collins]]&lt;br /&gt;
|| Display text (up to 10 characters) on a prim. Displays different text for each line instead of one single text, that will be broken into the next lines. Watch here for what that means: http://screencast.com/t/1wMLujLcEO&lt;br /&gt;
|-&lt;br /&gt;
||[[XyzzyText|XyzzyText]]&lt;br /&gt;
||[[User:Thraxis Epsilon|Thraxis Epsilon]] and [[User:Gigs Taggart|Gigs Taggart]]&lt;br /&gt;
|| Display text (up to 10 characters) on a prim. Way more efficient than XyText.&lt;br /&gt;
|-&lt;br /&gt;
||[[Youtube TV]]&lt;br /&gt;
||[[User:Morgam Biedermann|Morgam Biedermann]]&lt;br /&gt;
||Watch your favorite Youtube videos / auto set the texture to the parcel media texture.&lt;br /&gt;
|-&lt;br /&gt;
||[[Zero Lag Poseball]]&lt;br /&gt;
||[[User:Jippen Faddoul|Jippen Faddoul]] and [[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||A simple poseball with no lag&lt;br /&gt;
|-&lt;br /&gt;
||[[Input number of seconds, get a string back that shows days, hours, minutes, seconds]]&lt;br /&gt;
||[[User:Fire Centaur|Fire Centaur]]&lt;br /&gt;
||Returns a string that displays days, hours, seconds&lt;br /&gt;
|-&lt;br /&gt;
||[[Random Giver Prim]]&lt;br /&gt;
||[[User:Damian Darkwyr|Damian Darkwyr]]&lt;br /&gt;
||A randomized item giver with a game-like twist&lt;br /&gt;
|-&lt;br /&gt;
||[[Client Specific Contents Giver]]&lt;br /&gt;
||[[User:Damian Darkwyr|Damian Darkwyr]]&lt;br /&gt;
||Give Contents only to users of a specific Client. Such as Phoenix, CoolVL or 2.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Support Script Library==&lt;br /&gt;
These are scripts in other languages, intended to be run on other systems that support scripts written in LSL&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| [[User:Ina Centaur/UUID/calimg.api|Calendar Image UUID API]]&lt;br /&gt;
|| [[User:Ina Centaur|Ina Centaur]]&lt;br /&gt;
|| API that gives the UUID of an image of a calendar image give month and year arguments.&lt;br /&gt;
|-&lt;br /&gt;
||[[HTTP Post request to a PHP server]]&lt;br /&gt;
||[[User:Corto Maltese|Corto Maltese]]&lt;br /&gt;
|| This small library allows you to make simple POST requests to your website. The libraries allow you to get your request through the variable $_POST on the server. It also include a basic security mechanism aimed to stop hacking. Comprises of LSL client script and PHP server script.&lt;br /&gt;
|-&lt;br /&gt;
|| [[User:Ina Centaur/PHP/k2n.php|Key2Name.php]]&lt;br /&gt;
|| [[User:Ina Centaur|Ina Centaur]]&lt;br /&gt;
|| Get Avatar&#039;s Name using Second Life search service. (like in LSL Key2Name)&lt;br /&gt;
|-&lt;br /&gt;
|| [[Lame_Object_DNS_and_Cross_Sim_Messaging|Lame Object DNS and Cross Sim Messaging]]&lt;br /&gt;
|| [[User:Liandra Ceawlin|Liandra Ceawlin]]&lt;br /&gt;
|| Simple, cheeseball method of doing cross-sim communications with http-in and an external object DNS service.&lt;br /&gt;
|-&lt;br /&gt;
|| [[User:SignpostMarv Martin/PHP/llXorBase64StringsCorrect|llXorBase64StringsCorrect]]&lt;br /&gt;
|| [[User:SignpostMarv Martin|SignpostMarv Martin]]&lt;br /&gt;
|| An implementation of [[llXorBase64StringsCorrect]] in PHP- should be useful if you&#039;re using llXorBase64StringsCorrect to do cryptography work in LSL2 and posting it out to the web via [[llHTTPRequest]].&lt;br /&gt;
|-&lt;br /&gt;
|| [[User:SignpostMarv Martin/PHP/lsl fu.php|lsl_fu.php]]&lt;br /&gt;
|| [[User:SignpostMarv Martin|SignpostMarv Martin]]&lt;br /&gt;
|| A basic OOP&#039;d PHP Class containing VeloxSeverine&#039;s $_POST fixer and Marv&#039;s own eccentric ideas for &amp;quot;fixing&amp;quot; things.&lt;br /&gt;
|-&lt;br /&gt;
|| [[User:Jor3l Boa/PHP/n2k.php|Name2Key.php]]&lt;br /&gt;
|| [[User:Jor3l Boa|Jor3l Boa]]&lt;br /&gt;
|| Get Avatar&#039;s UUID using Second Life search service. (like in LSL Name2Key)&lt;br /&gt;
|-&lt;br /&gt;
|| [[Public_Object_DNS|Public Object DNS]]&lt;br /&gt;
|| [[User:Liandra Ceawlin|Liandra Ceawlin]]&lt;br /&gt;
|| Public object DNS-like system running on GAE, for http-in. Hopefully scalable enough for wide-spread usage.&lt;br /&gt;
|-&lt;br /&gt;
|| Silo&lt;br /&gt;
|| [[User:Zero_Linden|Zero Linden]]&lt;br /&gt;
|| General purpose data store in PHP.  Use this to persist arbitrary data from LSL via [[llHTTPRequest]].  See:&lt;br /&gt;
* [http://www.notabene-sl.com/misc/silo-README.txt README] file&lt;br /&gt;
* [http://www.notabene-sl.com/misc/silo.tgz silo.tgz] tarball&lt;br /&gt;
* forum post [http://forums-archive.secondlife.com/54/69/119570/1.html Announcement].&lt;br /&gt;
|-&lt;br /&gt;
||[[Silverday ObjectDNS]]&lt;br /&gt;
||[[User:Till Stirling|Till Stirling]]&lt;br /&gt;
||Dynamic Object-DNS-System to provide dynamic mapping of LSL-URLs to persistent domains. Features include redirect service, password protected domains, write protected domains, LSL-API for all necessary functions, optional web-interface.&lt;br /&gt;
|-&lt;br /&gt;
|| [http://aubretec.com/products/sldb SLDB]&lt;br /&gt;
|| [[User:Luc Aubret|Luc Aubret]]&lt;br /&gt;
|| Flexible web database storage using PHP/MySQL.  Used to store per-user field/value pairs from in-world objects using [[llHTTPRequest]]. &lt;br /&gt;
* [http://aubretec.com/support/manuals/sldbkit/ Implementation Guide]&lt;br /&gt;
* [http://aubretec.com/wp-content/uploads/2009/05/sldb.zip Download] (.zip, 12kb)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Articles&#039;&#039;&#039;&lt;br /&gt;
*[[:Category:LSL Examples| Examples]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{LSLC|}}&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Combat/Systems&amp;diff=1151940</id>
		<title>Combat/Systems</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Combat/Systems&amp;diff=1151940"/>
		<updated>2011-08-21T15:48:46Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: Updated for Myriad Lite Preview 3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{todo|Needs cleanup to match [[Combat]]}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Some areas of Second Life &amp;lt;!-- We really don&#039;t need to start the article off by advertising a sim * , like New Jessie, * --&amp;gt;are designed for the sole purpose of combat, in other areas combat is part of a larger role-playing theme.&lt;br /&gt;
There are two types of combat system in second life:&lt;br /&gt;
&lt;br /&gt;
*The built-in Linden Lab Combat System (LLCS)&lt;br /&gt;
*User-created combat systems.&lt;br /&gt;
&lt;br /&gt;
==Linden Lab Combat System (LLCS)==&lt;br /&gt;
&lt;br /&gt;
The Linden Lab Combat System is in effect in any parcel that the owner has designated as &amp;quot;unsafe&amp;quot;. When you are in one of these areas there will be a heart with a percentage next to it on your upper menu bar. When you see this meter, it means you can be killed in the area. When this percentage drops to zero, you are then &#039;dead&#039;, and you will teleported to your home location.&lt;br /&gt;
&lt;br /&gt;
Please note that being killed is &#039;&#039;&#039;not&#039;&#039;&#039; a big deal. You have to teleport back into the combat simulation from your home location, if you want to return to the combat. You will not lose anything (money, attachments, inventory) if you happen to die in this manner. However, NEVER set your home to an area that has Damage enabled, or else you may become stuck in an infinite teleport loop by a weapon that continuously kills you.&lt;br /&gt;
&lt;br /&gt;
In the LLCS, damage is dealt by collisions with scripted objects that have used [[LlSetDamage]] to make themselves damaging. Residents also take damage when they collide with any object, or with the ground (as in falling), at sufficiently high speed.&lt;br /&gt;
&lt;br /&gt;
There are several ways to defeat the LLCS. The most prominent method involves forcing your agent to become phantom. This is accomplished by sitting on an object, and then having that object enable Volume Detect. The agent will be “phantom” and no objects will be able to collide with that agent.&lt;br /&gt;
&lt;br /&gt;
To instantly kill an agent, that agent must be hit with an object that has its damage percent set to 100% (via llSetDamage()). Here are the conditions that will cause death.&lt;br /&gt;
&lt;br /&gt;
*Agent is not sitting&lt;br /&gt;
**Agent can be killed by any non-physical, non-phantom object.&lt;br /&gt;
**Agent can be killed by any physical, non-phantom object.&lt;br /&gt;
*Agent is sitting&lt;br /&gt;
**Agent is phantom&lt;br /&gt;
***Agent can’t be killed&lt;br /&gt;
**Agent is not phantom&lt;br /&gt;
***Agent can NOT be killed by a non-physical object.&lt;br /&gt;
***Agent can be killed by any physical, non-phantom object.&lt;br /&gt;
&lt;br /&gt;
Damage &amp;quot;heals&amp;quot; gradually over time.&lt;br /&gt;
&lt;br /&gt;
If several agents sit on an object and a collision occurs with a damage enabled object, the damage will be spread evenly across each agent.&lt;br /&gt;
&lt;br /&gt;
So, what regions support combat? For the beginner, places like New Jessie, Combat Core and Rausch are good ideas.  They all cater to different tastes, so let&#039;s check them out.&lt;br /&gt;
&lt;br /&gt;
===New Jessie - an Open Combat Zone===&lt;br /&gt;
&lt;br /&gt;
[http://slurl.com/secondlife/New%20Jessie%/128/128/20/  New Jessie SLurl]&lt;br /&gt;
&lt;br /&gt;
[[Image:New Jessie Ideal.jpg]]&lt;br /&gt;
&lt;br /&gt;
New Jessie is an open combat sim which is unaffiliated with any military and where everyone is welcome.  When you land here, you can set your home here so that during combat, you need not teleport back when you die. There is a healthy mix of close quarters combat in a small town there, as well as a pair of bunkers and a shorefront with barbed wire and tank spikes.  On top of all of it, there is a hub featuring a weapons shop, many free weapons, and a combat museum detailing the history of early combat in Second Life. New Jessie is the premier sim for conventional combat in Second Life.&lt;br /&gt;
&lt;br /&gt;
===Combat Core===&lt;br /&gt;
&lt;br /&gt;
Do or Die ?&lt;br /&gt;
 &lt;br /&gt;
This SIM is full of danger.Combat (sandbox) Core  (wipa 60min) LLCS damage.&lt;br /&gt;
&lt;br /&gt;
You do not need the reason for attack in this SIM.&lt;br /&gt;
The use of arms that the guns and are all HUD is permitted to you.&lt;br /&gt;
Prohibition item:HUGE PRIM, chat spam and more spam.&lt;br /&gt;
&lt;br /&gt;
[http://slurl.com/secondlife/Combat%20Core/128/128/28  Combat Core Safe Zone SLURL]&lt;br /&gt;
&lt;br /&gt;
[[Image:Core_logo04.jpg]]&lt;br /&gt;
&lt;br /&gt;
Combat Core is a free combat sandbox that allows you to utilize varioius weapons to fight other combatants.&lt;br /&gt;
There is no unnecessary obstacles and object, which makes movement in Combat Core smooth and relatively lag free.&lt;br /&gt;
At Combat Core, you may also make your own weapon, and use them during combat. If  you join the &amp;quot;Core Combat Crew&amp;quot; group at the front of the central tower, you will have access to home setting. &lt;br /&gt;
This will allow you to eliminate the time which must be used to TP from your home to the combat sandbox if you get killed.&lt;br /&gt;
All are free to join the &amp;quot;Core Combat Crew&amp;quot; group. Enjoy exciting and efficient combat simulation at Combat Core!&lt;br /&gt;
&lt;br /&gt;
===Public LLCS combat areas===&lt;br /&gt;
&lt;br /&gt;
Some of the most popular public LLCS combat areas are Rausch, Blue Base, and Red Base. These three sims are free-for-all sandboxes. There is a &amp;quot;safe zone&amp;quot; in the Rausch sandbox where you can&#039;t be attacked. It is usually surrounded by big yellow markers, and people have a tendency to gather in this area. (Please note that the &amp;quot;bases&amp;quot; are not really &amp;quot;bases&amp;quot; for anyone. They are free-for-all maps.)&lt;br /&gt;
&lt;br /&gt;
The difference between Rausch and other combat sims is that Rausch is a public sandbox region, as opposed to a private combat sim.  Anything is allowed here, so you&#039;re very likely to be killed before you know what hit you - although it also means you can kill others the same way.&lt;br /&gt;
&lt;br /&gt;
The fastest way to find these regions is to type &amp;quot;combat&amp;quot; into the places search.&lt;br /&gt;
&lt;br /&gt;
[http://slurl.com/secondlife/Combat%20(sandbox)%20Rausch/172/163/22 Rausch Safe Zone SLurl]&lt;br /&gt;
&lt;br /&gt;
[[Image:CombatBases.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Themed Military Roleplay Combat Areas using LLCS===&lt;br /&gt;
There are also many other regions &amp;amp; groups specifically for combat or military roleplay, which are running the LLCS damage system, among these are:&lt;br /&gt;
&lt;br /&gt;
*[http://slurl.com/secondlife/New%20Jessie/197/92/301  New Jessie SLurl]&lt;br /&gt;
*[http://slurl.com/secondlife/Combat%20Core/128/128/28  Combat Core Safe Zone SLURL]&lt;br /&gt;
*[http://slurl.com/secondlife/Badnarik/172/163/22  Merczateers HQ(Badnarik) SLurl]&lt;br /&gt;
*[http://slurl.com/secondlife/Titan/172/163/22  Ordo Imperialis HQ(Titan) SLurl]&lt;br /&gt;
*[http://slurl.com/secondlife/2142/172/163/22  2142 HQ(2142) SLurl]&lt;br /&gt;
*[http://slurl.com/secondlife/Elshout/172/163/22  Alliance Navy HQ(Elshout) SLurl]&lt;br /&gt;
&lt;br /&gt;
*[http://slurl.com/secondlife/Silver%20Side%20Bay/128/128/26  Gravity Zero Public Combat(Silver Side Bay) SLurl]&lt;br /&gt;
&lt;br /&gt;
== User-Created Combat Systems (UCCS) ==&lt;br /&gt;
&lt;br /&gt;
User-created combat systems do not use the built-in LLCS (and for this reason are sometimes called &amp;quot;safezone&amp;quot; combat systems), but instead use scripted objects both to track and to deal damage.&lt;br /&gt;
&lt;br /&gt;
This type of combat system can be used in any area that allows scripts to run. Usually these systems require the player to wear a &amp;quot;tag&amp;quot; or a &amp;quot;HUD&amp;quot; in order to play. This monitors your health, and various other stats, as well as add varios special features like heals, spells and miscellaneous weapons.&lt;br /&gt;
&lt;br /&gt;
These systems usually come with their own sets of rules that disallow the use of anything from advanced weapons to Bots to shields to instant-killers with the exception of basic weaponry and in some rare cases some small explosives. Sometimes the UCCS&#039; rules include the neccessity of [[Roleplay]]ing, but some again are just straight forward killing. Some advanced UCCS keep stats of the players such as kill count, death count, level etc. &lt;br /&gt;
&lt;br /&gt;
When the player dies, unlike the LLCS, they will not be teleported back home. They will typically either &amp;quot;respawn&amp;quot; after a few minutes or some advanced systems will spawn a &amp;quot;spawn ball&amp;quot; which the player sits on and they will be able to respawn at a random location in the combat area with full health. The exact effects of &amp;quot;death&amp;quot; depend on the particular UCCS in use.&lt;br /&gt;
&lt;br /&gt;
It is important to note that many UCCS discourage Defenses (shield, auto orbit), Advanced &amp;quot;guns&amp;quot;, Large Scale Explosives (+5 m), Automated Turrets, orbit, lag bombs. Most UCCS simulations also recommend using High quality basic weaponry that do not cause Lag within the SIM.&lt;br /&gt;
&lt;br /&gt;
A Few Notable User Created Combat Systems are &#039;[http://larps.net/features.php LaRPS]&#039;, &#039;[http://www.dcs2.org DCS2]&#039;, &#039;[http://www.appliweb.org CSB]&#039;, &#039;[http://www.bnjrps.com RPS]&#039;, &#039;[http://reference.ccs-gametech.com/#fragment-1 CCS]&#039;, &#039;[http://gm.mivabe.nl/ GM (Gorean meter)]&#039;, &#039;[http://www.combatsi.com/e107/news.php C:SI]&#039;, &#039;Spell Fire&#039;, &#039;[http://www.osiris-sl.com/ Osiris]&#039;, &#039;URCS&#039;, [http://BNWCS.org &#039;BNWCS&#039;], [http://vicecombat.com/ &#039;VICE&#039;], &#039;XRPS&#039;, &#039;FFRP&#039;.&lt;br /&gt;
&lt;br /&gt;
Because user-created combat systems generally depend on cooperation between scripted damage-dealing objects and scripted damage-sensing objects owned and worn by the player being damaged, there is a great potential for &#039;cheating&#039;, by writing scripts that appear to be obeying the rules of the system, but that in fact make the player very hard to damage, very good at dealing damage, or both.  Also meter resetting during play is common using these systems. While most users of these combat systems enjoy competing legitimately, there are always a few who try to cheat, and different combat communities and combat systems have taken various approaches to detecting, preventing, or discouraging the cheaters.&lt;br /&gt;
&lt;br /&gt;
An example user-created combat system with rules book and source code is [[User:Allen_Kerensky/Myriad_Lite_Preview_3|Myriad Lite Preview 3]] which contains a link to a tabletop pen-and-paper roleplay construction kit and the working preview scripts demonstrating the early fundamentals for a &amp;quot;metered&amp;quot; combat system with hand-to-hand, melee, and ranged combat, armor, healing, and even a practice target.&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_FAQ&amp;diff=1151937</id>
		<title>User:Allen Kerensky/Myriad Lite FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_FAQ&amp;diff=1151937"/>
		<updated>2011-08-21T15:40:36Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: why only test in OSgrid? Because that&amp;#039;s free and SL isn&amp;#039;t&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Myriad Lite FAQ =&lt;br /&gt;
&lt;br /&gt;
Q1: How close is the Myriad RPG System to completion?&lt;br /&gt;
&lt;br /&gt;
A1: Um, well &amp;quot;not very&amp;quot; is about all I could answer. It&#039;s a large book and I haven&#039;t made a detailed timeline of steps and progress and milestones and such. It does sort of depend on how much of it you would actually use for your particular game.&lt;br /&gt;
&lt;br /&gt;
Q2: How do I ... ?&lt;br /&gt;
&lt;br /&gt;
A2: Well, you read the Myriad RPG book to see what the pen and paper rules are. Then you read the scripts to see how they implement things... and ask questions to other Myriad folks in the Myriad RPG group in SecondLife or OSgrid&lt;br /&gt;
&lt;br /&gt;
Q3: Does Myriad include ... ?&lt;br /&gt;
&lt;br /&gt;
A3: Get the Marketplace version with the included e-text, or the PDF version from the link included with it and give the book a skim. That is the best way to see what features are in Myriad and what might not be included.&lt;br /&gt;
&lt;br /&gt;
Q4: Can you add ... ?&lt;br /&gt;
&lt;br /&gt;
A4: Once I get the basic book converted into a game, I&#039;d be happy to consider extending Myriad Lite to include your feature suggestion. Or better yet, grab the source, figure out how to add it yourself, with the Myriad RPG group in SecondLife and OSgrid alongside to advise.&lt;br /&gt;
&lt;br /&gt;
Q5: Can you give me pre-made items that already have all the scripts in them?&lt;br /&gt;
&lt;br /&gt;
A5: A fair question, I could... but I haven&#039;t spent the time to make items *I* own that I can freely give away. Also, due to SecondLife&#039;s export policy changes in April 2010, even if I made objects, you could not export, save, or back them up because you are limited to backing up items that show YOU as the creator, rather than me.&lt;br /&gt;
&lt;br /&gt;
Q6: Can you give me a live demo of Myriad Lite right now?&lt;br /&gt;
&lt;br /&gt;
A6: Yes, in [http://www.osgrid.org OSgrid] where Lani Global maintains the Ixi combat sandbox region, graciously provided by Snoopy Pfeffer of [http://dreamlandmetaverse.com/ Dreamland Metaverse Hosting] - I cannot afford a SecondLife region to test or demo this in at Linden rates, especially for a freely given project. Connecting to OSgrid requires a viewer with the ability to connect to OpenSimulator grids, and an account on OSgrid itself. Contact me as Allen Kerensky in SL or OSG and let me know if you are interested in a live demo in Ixi.&lt;br /&gt;
&lt;br /&gt;
Q7: Can I use Myriad Lite in commercial/for-sale products.&lt;br /&gt;
&lt;br /&gt;
A7: No, not using the materials as published since those are limited by the &amp;quot;NonCommercial&amp;quot; clause in their Creative Commons license.&lt;br /&gt;
If you wish to make sellable items based on Myriad Lite, contact Allen Kerensky to discuss license terms for Myriad Lite under the Attribution-Share-Alike or Attribution terms only.&lt;br /&gt;
&lt;br /&gt;
Q8: What happens if I use your scripts in a for-sale item anyway?&lt;br /&gt;
&lt;br /&gt;
Q8: If caught, I simply report you to Linden or OSgrid admins and request your account and inventory be removed. You steal my stuff, I return that favor. That seems fair.&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_FAQ&amp;diff=1151936</id>
		<title>User:Allen Kerensky/Myriad Lite FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_FAQ&amp;diff=1151936"/>
		<updated>2011-08-21T15:39:31Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: i will learn to use preview I will learn to use preview I will learn to use preview I will learn to use preview ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Myriad Lite FAQ =&lt;br /&gt;
&lt;br /&gt;
Q1: How close is the Myriad RPG System to completion?&lt;br /&gt;
&lt;br /&gt;
A1: Um, well &amp;quot;not very&amp;quot; is about all I could answer. It&#039;s a large book and I haven&#039;t made a detailed timeline of steps and progress and milestones and such. It does sort of depend on how much of it you would actually use for your particular game.&lt;br /&gt;
&lt;br /&gt;
Q2: How do I ... ?&lt;br /&gt;
&lt;br /&gt;
A2: Well, you read the Myriad RPG book to see what the pen and paper rules are. Then you read the scripts to see how they implement things... and ask questions to other Myriad folks in the Myriad RPG group in SecondLife or OSgrid&lt;br /&gt;
&lt;br /&gt;
Q3: Does Myriad include ... ?&lt;br /&gt;
&lt;br /&gt;
A3: Get the Marketplace version with the included e-text, or the PDF version from the link included with it and give the book a skim. That is the best way to see what features are in Myriad and what might not be included.&lt;br /&gt;
&lt;br /&gt;
Q4: Can you add ... ?&lt;br /&gt;
&lt;br /&gt;
A4: Once I get the basic book converted into a game, I&#039;d be happy to consider extending Myriad Lite to include your feature suggestion. Or better yet, grab the source, figure out how to add it yourself, with the Myriad RPG group in SecondLife and OSgrid alongside to advise.&lt;br /&gt;
&lt;br /&gt;
Q5: Can you give me pre-made items that already have all the scripts in them?&lt;br /&gt;
&lt;br /&gt;
A5: A fair question, I could... but I haven&#039;t spent the time to make items *I* own that I can freely give away. Also, due to SecondLife&#039;s export policy changes in April 2010, even if I made objects, you could not export, save, or back them up because you are limited to backing up items that show YOU as the creator, rather than me.&lt;br /&gt;
&lt;br /&gt;
Q6: Can you give me a live demo of Myriad Lite right now?&lt;br /&gt;
&lt;br /&gt;
A6: Yes, in [http://www.osgrid.org OSgrid] where Lani Global maintains the Ixi combat sandbox region, graciously provided by Snoopy Pfeffer of [http://dreamlandmetaverse.com/ Dreamland Metaverse Hosting] - Connecting to OSgrid requires a viewer with the ability to connect to OpenSimulator grids, and an account on OSgrid itself. Contact me as Allen Kerensky in SL or OSG and let me know if you are interested in a live demo in Ixi.&lt;br /&gt;
&lt;br /&gt;
Q7: Can I use Myriad Lite in commercial/for-sale products.&lt;br /&gt;
&lt;br /&gt;
A7: No, not using the materials as published since those are limited by the &amp;quot;NonCommercial&amp;quot; clause in their Creative Commons license.&lt;br /&gt;
If you wish to make sellable items based on Myriad Lite, contact Allen Kerensky to discuss license terms for Myriad Lite under the Attribution-Share-Alike or Attribution terms only.&lt;br /&gt;
&lt;br /&gt;
Q8: What happens if I use your scripts in a for-sale item anyway?&lt;br /&gt;
&lt;br /&gt;
Q8: If caught, I simply report you to Linden or OSgrid admins and request your account and inventory be removed. You steal my stuff, I return that favor. That seems fair.&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_FAQ&amp;diff=1151935</id>
		<title>User:Allen Kerensky/Myriad Lite FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_FAQ&amp;diff=1151935"/>
		<updated>2011-08-21T15:38:36Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: oops typos in links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Myriad Lite FAQ =&lt;br /&gt;
&lt;br /&gt;
Q1: How close is the Myriad RPG System to completion?&lt;br /&gt;
&lt;br /&gt;
A1: Um, well &amp;quot;not very&amp;quot; is about all I could answer. It&#039;s a large book and I haven&#039;t made a detailed timeline of steps and progress and milestones and such. It does sort of depend on how much of it you would actually use for your particular game.&lt;br /&gt;
&lt;br /&gt;
Q2: How do I ... ?&lt;br /&gt;
&lt;br /&gt;
A2: Well, you read the Myriad RPG book to see what the pen and paper rules are. Then you read the scripts to see how they implement things... and ask questions to other Myriad folks in the Myriad RPG group in SecondLife or OSgrid&lt;br /&gt;
&lt;br /&gt;
Q3: Does Myriad include ... ?&lt;br /&gt;
&lt;br /&gt;
A3: Get the Marketplace version with the included e-text, or the PDF version from the link included with it and give the book a skim. That is the best way to see what features are in Myriad and what might not be included.&lt;br /&gt;
&lt;br /&gt;
Q4: Can you add ... ?&lt;br /&gt;
&lt;br /&gt;
A4: Once I get the basic book converted into a game, I&#039;d be happy to consider extending Myriad Lite to include your feature suggestion. Or better yet, grab the source, figure out how to add it yourself, with the Myriad RPG group in SecondLife and OSgrid alongside to advise.&lt;br /&gt;
&lt;br /&gt;
Q5: Can you give me pre-made items that already have all the scripts in them?&lt;br /&gt;
&lt;br /&gt;
A5: A fair question, I could... but I haven&#039;t spent the time to make items *I* own that I can freely give away. Also, due to SecondLife&#039;s export policy changes in April 2010, even if I made objects, you could not export, save, or back them up because you are limited to backing up items that show YOU as the creator, rather than me.&lt;br /&gt;
&lt;br /&gt;
Q6: Can you give me a live demo of Myriad Lite right now?&lt;br /&gt;
&lt;br /&gt;
A6: Yes, in [[http://www.osgrid.org OSgrid]] where Lani Global maintains the Ixi combat sandbox region, graciously provided by Snoopy Pfeffer of [[http://dreamlandmetaverse.com/ Dreamland Metaverse Hosting]] - Connecting to OSgrid requires a viewer with the ability to connect to OpenSimulator grids, and an account on OSgrid itself. Contact me as Allen Kerensky in SL or OSG and let me know if you are interested in a live demo in Ixi.&lt;br /&gt;
&lt;br /&gt;
Q7: Can I use Myriad Lite in commercial/for-sale products.&lt;br /&gt;
&lt;br /&gt;
A7: No, not using the materials as published since those are limited by the &amp;quot;NonCommercial&amp;quot; clause in their Creative Commons license.&lt;br /&gt;
If you wish to make sellable items based on Myriad Lite, contact Allen Kerensky to discuss license terms for Myriad Lite under the Attribution-Share-Alike or Attribution terms only.&lt;br /&gt;
&lt;br /&gt;
Q8: What happens if I use your scripts in a for-sale item anyway?&lt;br /&gt;
&lt;br /&gt;
Q8: If caught, I simply report you to Linden or OSgrid admins and request your account and inventory be removed. You steal my stuff, I return that favor. That seems fair.&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_FAQ&amp;diff=1151934</id>
		<title>User:Allen Kerensky/Myriad Lite FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_FAQ&amp;diff=1151934"/>
		<updated>2011-08-21T15:37:56Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: added question 5, 6, 7, and 8&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Myriad Lite FAQ =&lt;br /&gt;
&lt;br /&gt;
Q1: How close is the Myriad RPG System to completion?&lt;br /&gt;
&lt;br /&gt;
A1: Um, well &amp;quot;not very&amp;quot; is about all I could answer. It&#039;s a large book and I haven&#039;t made a detailed timeline of steps and progress and milestones and such. It does sort of depend on how much of it you would actually use for your particular game.&lt;br /&gt;
&lt;br /&gt;
Q2: How do I ... ?&lt;br /&gt;
&lt;br /&gt;
A2: Well, you read the Myriad RPG book to see what the pen and paper rules are. Then you read the scripts to see how they implement things... and ask questions to other Myriad folks in the Myriad RPG group in SecondLife or OSgrid&lt;br /&gt;
&lt;br /&gt;
Q3: Does Myriad include ... ?&lt;br /&gt;
&lt;br /&gt;
A3: Get the Marketplace version with the included e-text, or the PDF version from the link included with it and give the book a skim. That is the best way to see what features are in Myriad and what might not be included.&lt;br /&gt;
&lt;br /&gt;
Q4: Can you add ... ?&lt;br /&gt;
&lt;br /&gt;
A4: Once I get the basic book converted into a game, I&#039;d be happy to consider extending Myriad Lite to include your feature suggestion. Or better yet, grab the source, figure out how to add it yourself, with the Myriad RPG group in SecondLife and OSgrid alongside to advise.&lt;br /&gt;
&lt;br /&gt;
Q5: Can you give me pre-made items that already have all the scripts in them?&lt;br /&gt;
&lt;br /&gt;
A5: A fair question, I could... but I haven&#039;t spent the time to make items *I* own that I can freely give away. Also, due to SecondLife&#039;s export policy changes in April 2010, even if I made objects, you could not export, save, or back them up because you are limited to backing up items that show YOU as the creator, rather than me.&lt;br /&gt;
&lt;br /&gt;
Q6: Can you give me a live demo of Myriad Lite right now?&lt;br /&gt;
&lt;br /&gt;
A6: Yes, in [[http://www.osgrid.org|OSgrid]] where Lani Global maintains the Ixi combat sandbox region, graciously provided by Snoopy Pfeffer of [[http://dreamlandmetaverse.com/|Dreamland Metaverse Hosting]] - Connecting to OSgrid requires a viewer with the ability to connect to OpenSimulator grids, and an account on OSgrid itself. Contact me as Allen Kerensky in SL or OSG and let me know if you are interested in a live demo in Ixi.&lt;br /&gt;
&lt;br /&gt;
Q7: Can I use Myriad Lite in commercial/for-sale products.&lt;br /&gt;
&lt;br /&gt;
A7: No, not using the materials as published since those are limited by the &amp;quot;NonCommercial&amp;quot; clause in their Creative Commons license.&lt;br /&gt;
If you wish to make sellable items based on Myriad Lite, contact Allen Kerensky to discuss license terms for Myriad Lite under the Attribution-Share-Alike or Attribution terms only.&lt;br /&gt;
&lt;br /&gt;
Q8: What happens if I use your scripts in a for-sale item anyway?&lt;br /&gt;
&lt;br /&gt;
Q8: If caught, I simply report you to Linden or OSgrid admins and request your account and inventory be removed. You steal my stuff, I return that favor. That seems fair.&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview3/Change_Log&amp;diff=1151933</id>
		<title>User:Allen Kerensky/Myriad Lite Preview3/Change Log</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview3/Change_Log&amp;diff=1151933"/>
		<updated>2011-08-21T15:28:52Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
= Change Log for Preview 3 =&lt;br /&gt;
# MAIN MILESTONE: All scripts heavily commented to help you figure out the entire system&lt;br /&gt;
# Attachments now communicate over their own dynamic channel separate from player RP dynamic channel.&lt;br /&gt;
# Myriad Lite now triggers special effects &amp;quot;Hit&amp;quot; and &amp;quot;Hit, but blocked&amp;quot; commands to Armor, for sci-fi effects&lt;br /&gt;
# Clearer messages between someone *trying* to harm you in combat, and actual hits&lt;br /&gt;
# More RPevents to tell others what&#039;s happening in game&lt;br /&gt;
# Firearm now has &amp;quot;click to turn safety on and off&amp;quot;&lt;br /&gt;
# Firearm damage dice now 3 by default to match Myriad pistol book value&lt;br /&gt;
# Melee weapon does 4 damage dice to match long sword book value&lt;br /&gt;
# Customizable hovertext meter format&lt;br /&gt;
# Hovertext meter color coded messages by damage&lt;br /&gt;
# Temporary automatic healing when incapacitated to get you back in the fight.&lt;br /&gt;
# Practice target  now compatible with fist fighter, melee weapons, and firearms&lt;br /&gt;
# Additional logic and processing bugs fixed.&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview3/Myriad_Lite_Target_v0.0.5_20110813&amp;diff=1151932</id>
		<title>User:Allen Kerensky/Myriad Lite Preview3/Myriad Lite Target v0.0.5 20110813</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview3/Myriad_Lite_Target_v0.0.5_20110813&amp;diff=1151932"/>
		<updated>2011-08-21T15:26:42Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
= Myriad Lite Target v0.0.5 20110813 =&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Myriad Lite Target v0.0.5 20110813&lt;br /&gt;
// Copyright (c) 2011 By Allen Kerensky (OSG/SL)&lt;br /&gt;
// The Myriad RPG System was designed, written, and illustrated by Ashok Desai&lt;br /&gt;
// Myriad published under a:&lt;br /&gt;
// Creative Commons License (Attribution 2.0 UK: England and Wales)&lt;br /&gt;
// Myriad Lite Target published under a&lt;br /&gt;
// Creative Commons License Attribution-NonCommercial-ShareAlike 3.0 Unported&lt;br /&gt;
//============================================================================&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// MESSAGE FORMAT REFERENCE&lt;br /&gt;
//============================================================================&lt;br /&gt;
// CHANPLAYER IN - DEPRECATED - HITCHECK|int attackstat|int attackskill|int attackdice|key owner|str name&lt;br /&gt;
// CHANPLAYER IN - RANGEDHIT|int attackstat|int attackskill|int attackdice|key weaponowner|str name&lt;br /&gt;
// CHANPLAYER IN - CLOSEHIT|int attackstat|int attackskill|int attackdice|key weaponowner|str name&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL VARIABLES&lt;br /&gt;
//============================================================================&lt;br /&gt;
integer CHANOBJECT; // channel the target listens on for attacks&lt;br /&gt;
integer HANDOBJECT; // chat channel handle to remove channel later if needed&lt;br /&gt;
integer MINSTAT = 1; // minimum value of a statistic&lt;br /&gt;
integer MAXSTAT = 10; // maximum value of a statistic&lt;br /&gt;
integer MINSKILL = 1; // minimum value of a skill&lt;br /&gt;
integer MAXSKILL = 5; // maximum value of a skill&lt;br /&gt;
integer MINDAMAGE = 1; // minimum damage dice a weapon can inflict&lt;br /&gt;
integer MAXDAMAGE = 5; // maximum damage dice a weapon can inflict&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL ERROR() - report errors on debug channel&lt;br /&gt;
//============================================================================&lt;br /&gt;
ERROR(string errmsg) {&lt;br /&gt;
    llSay(DEBUG_CHANNEL,&amp;quot;ERROR: &amp;quot;+errmsg);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// DEFAULT STATE&lt;br /&gt;
//============================================================================&lt;br /&gt;
default {&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // STATE_ENTRY EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        llSetPrimitiveParams([PRIM_PHANTOM, FALSE]); // ensure all prims are not phantom to register collisions&lt;br /&gt;
        CHANOBJECT = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)llGetKey(),0,6)); // calculate dynamic channel to listen on&lt;br /&gt;
        HANDOBJECT = llListen(CHANOBJECT,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;); // start listener for attack events&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // ON_REZ EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    on_rez(integer rez_param) {&lt;br /&gt;
        llResetScript(); // nothing drastic, just reset script and start from the top&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // LISTEN EVENT - whispers, says, shouts, regionsays&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    listen(integer channel,string speakername,key speakerid,string message) {&lt;br /&gt;
        if ( channel == CHANOBJECT ) { // is this message on the dynamic channel?        &lt;br /&gt;
            list fields = llParseString2List(message,[&amp;quot;|&amp;quot;],[]); // break message into parts split by | symbol&lt;br /&gt;
            string command = llList2String(fields,0); // field 0 is the command&lt;br /&gt;
            if ( command == &amp;quot;HITCHECK&amp;quot; || command == &amp;quot;RANGEDHIT&amp;quot; || command == &amp;quot;CLOSEHIT&amp;quot; ) { // is this an attack command?&lt;br /&gt;
                integer attackstat = llList2Integer(fields,1); // get the value of the attacker&#039;s stat&lt;br /&gt;
                integer attackskill = llList2Integer(fields,2); // get the attackers skill level&lt;br /&gt;
                integer attackdice = llList2Integer(fields,3);  // get the attackers weapon attack dice&lt;br /&gt;
                key owner = llList2Key(fields,4); // get the owner of the attacking object&lt;br /&gt;
                string item = llList2String(fields,5); // get the name of the attacking object&lt;br /&gt;
                if ( attackstat &amp;lt; MINSTAT || attackstat &amp;gt; MAXSTAT ) { // is attack stat valid?&lt;br /&gt;
                    ERROR(&amp;quot;Attack stat value out of range: &amp;quot;+(string)MINSTAT+&amp;quot;-&amp;quot;+(string)MAXSTAT); // report the invalid value&lt;br /&gt;
                    return; // exit early since we&#039;ve hit a fatal error with message&lt;br /&gt;
                }&lt;br /&gt;
                if ( attackskill &amp;lt; MINSKILL || attackstat &amp;gt; MAXSKILL ) { // is attacker skill value valid?&lt;br /&gt;
                    ERROR(&amp;quot;Attack skill value out of range: &amp;quot;+(string)MINSKILL+&amp;quot;-&amp;quot;+(string)MAXSKILL); // report invalid value&lt;br /&gt;
                    return; // exit early since we&#039;ve hit a fatal error with message&lt;br /&gt;
                }                &lt;br /&gt;
                if ( attackdice &amp;lt; MINDAMAGE || attackdice &amp;gt; MAXDAMAGE ) { // is attack dice of object valid?&lt;br /&gt;
                    ERROR(&amp;quot;Attack dice value out of range: &amp;quot;+(string)MINDAMAGE+&amp;quot;-&amp;quot;+(string)MAXDAMAGE); // report invalid value&lt;br /&gt;
                    return; // exit early since we&#039;ve hit a fatal error with message&lt;br /&gt;
                }&lt;br /&gt;
                // its all good - report the hit&lt;br /&gt;
                llShout(PUBLIC_CHANNEL,&amp;quot;/me hit by &amp;quot;+llKey2Name(owner)+&amp;quot;&#039;s &amp;quot;+item+&amp;quot; for &amp;quot;+(string)attackdice+&amp;quot; attack dice!&amp;quot;);&lt;br /&gt;
                return; // exit early in case we add more commands later&lt;br /&gt;
            } // end if attack command           &lt;br /&gt;
        } // end if channel object        &lt;br /&gt;
    }    &lt;br /&gt;
} // end default&lt;br /&gt;
//============================================================================&lt;br /&gt;
// END&lt;br /&gt;
//============================================================================&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview3/Myriad_Lite_Meter_v0.0.3_20110609&amp;diff=1151931</id>
		<title>User:Allen Kerensky/Myriad Lite Preview3/Myriad Lite Meter v0.0.3 20110609</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview3/Myriad_Lite_Meter_v0.0.3_20110609&amp;diff=1151931"/>
		<updated>2011-08-21T15:25:31Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
= Myriad Lite Meter v0.0.3 20110813 =&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Myriad Lite Meter v0.0.3 20110813&lt;br /&gt;
// Copyright (c) 2011 By Allen Kerensky (OSG/SL)&lt;br /&gt;
// The Myriad RPG System was designed, written, and illustrated by Ashok Desai&lt;br /&gt;
// Myriad is published under a:&lt;br /&gt;
// Creative Commons License (Attribution 2.0 UK: England and Wales)&lt;br /&gt;
// Myriad Lite Meter is published under a:&lt;br /&gt;
// Creative Commons License Attribution-NonCommercial-ShareAlike 3.0 Unported&lt;br /&gt;
//============================================================================&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// MESSAGE FORMAT REFERENCE&lt;br /&gt;
//============================================================================&lt;br /&gt;
// CHANPLAYER IN - METER|str PLAYER NAME|str GAMENAME|int CURWOUNDS|int MAXWOUNDS|int CURCRITICAL|int MAXCRITICAL|int ISDEAD|int ISINCAPACITATED&lt;br /&gt;
     &lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL VARIABLES&lt;br /&gt;
//============================================================================&lt;br /&gt;
integer CHANATTACH; // dynamic channel for player attachments &lt;br /&gt;
string DIV = &amp;quot;|&amp;quot;; // Myriad message field divider&lt;br /&gt;
string  STATUS; // settext message&lt;br /&gt;
integer NAME_FORMAT = 1; // 1 = Alias only, 2 = First &amp;quot;Alias&amp;quot; Last, 3 = Alias (First Last)&lt;br /&gt;
integer SHOW_HEALTH = TRUE; // show the health percentage or not?&lt;br /&gt;
vector  COLOR = &amp;lt;0,1,0&amp;gt;; // set text color&lt;br /&gt;
float   ALPHA = 1.0; // set text alpha 0.0 = clear, 1.0 = solid&lt;br /&gt;
vector GREEN = &amp;lt;0,1,0&amp;gt;; // color constant for convenience&lt;br /&gt;
vector YELLOW = &amp;lt;1,1,0&amp;gt;; // color constant for convenience&lt;br /&gt;
vector RED = &amp;lt;1,0,0&amp;gt;; // color constant for convencience&lt;br /&gt;
vector BLACK = &amp;lt;0,0,0&amp;gt;; // color constant for convenience&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL SETUP()&lt;br /&gt;
//============================================================================&lt;br /&gt;
SETUP() {&lt;br /&gt;
    llSetText(&amp;quot;--- Waiting for Myriad Update ---&amp;quot;,&amp;lt;1,0,0&amp;gt;,1); // set a default banner to show we haven&#039;t been updated yet&lt;br /&gt;
    CHANATTACH = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)llGetOwner(),1,7)); // calculate wearer&#039;s dynamic attachment channel&lt;br /&gt;
    llListen(CHANATTACH,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;); // start a listener on the dynamic channel&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// DEFAULT STATE&lt;br /&gt;
//============================================================================&lt;br /&gt;
default {&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // STATE_ENTRY EVENT&lt;br /&gt;
    //------------------------------------------------------------------------    &lt;br /&gt;
    state_entry() {&lt;br /&gt;
        SETUP(); // setup the hovertext meter&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // STATE_ENTRY EVENT&lt;br /&gt;
    //------------------------------------------------------------------------    &lt;br /&gt;
    on_rez(integer start_param) {&lt;br /&gt;
        SETUP(); // setup the hovertext meter&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // CHANGED EVENT&lt;br /&gt;
    //------------------------------------------------------------------------    &lt;br /&gt;
    changed(integer changes) {&lt;br /&gt;
        if ( changes &amp;amp; CHANGED_OWNER ) { // if owner has changed, we need to recalculate the dynamic channel&lt;br /&gt;
            SETUP(); // setup the hovertext meter&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // LISTEN EVENT&lt;br /&gt;
    //------------------------------------------------------------------------    &lt;br /&gt;
    listen(integer channel,string name,key id,string message) {&lt;br /&gt;
        if ( channel == CHANATTACH ) { // did this message come in on attachment channel?&lt;br /&gt;
            list fields = llParseString2List(message,[DIV],[]); // break message down into list separated by |&lt;br /&gt;
            string command = llList2String(fields,0); // read first item in list to get the Myriad command&lt;br /&gt;
            if ( command == &amp;quot;METER&amp;quot;) { // if this is the METER command, let&#039;s update the meter status&lt;br /&gt;
                string dead = &amp;quot;no&amp;quot;; // set a default of &amp;quot;not dead&amp;quot;&lt;br /&gt;
                string incap = &amp;quot;no&amp;quot;; // set a default of &amp;quot;not incapacitated&amp;quot;&lt;br /&gt;
                string playername   = llList2String(fields,1); // get the full player name from the list of METER values&lt;br /&gt;
                list   name2        = llParseString2List(playername,[&amp;quot; &amp;quot;],[]); // separate first and last name by space&lt;br /&gt;
                string firstname    = llList2String(name2,0); // get the firstname from the name2&lt;br /&gt;
                string lastname     = llList2String(name2,1); // get the lastname, if any, from the name2&lt;br /&gt;
                string gamename     = llList2String(fields,2); // get player&#039;s alias/game name (originally set in their character sheet)&lt;br /&gt;
                integer curwounds   = llList2Integer(fields,3); // what is player&#039;s current wound value?&lt;br /&gt;
                integer maxwounds   = llList2Integer(fields,4); // what is player&#039;s maximum healed wounds allowed by level/stats?&lt;br /&gt;
                integer curcritical = llList2Integer(fields,5); // what is player&#039;s current critical wounds value?&lt;br /&gt;
                integer maxcritical = llList2Integer(fields,6); // what is player&#039;s maximum healed critical wounds value?&lt;br /&gt;
                integer isdead      = llList2Integer(fields,7); // is player dead?&lt;br /&gt;
                integer isincap     = llList2Integer(fields,8); // is player incapacitated?&lt;br /&gt;
                // okay, we&#039;ve broken down status, lets create a banner from that using colors&lt;br /&gt;
                STATUS = &amp;quot;&amp;quot;; // start with an empty string&lt;br /&gt;
                COLOR = GREEN; // start with fully healthy color&lt;br /&gt;
                if ( NAME_FORMAT == 1 ) { // what name format do we want to see?                &lt;br /&gt;
                    STATUS = gamename; // 1 == just Alias name from character sheet&lt;br /&gt;
                } else if ( NAME_FORMAT == 2 ) { // not format 1, so format 2?&lt;br /&gt;
                    STATUS = firstname + &amp;quot;\&amp;quot;&amp;quot; + gamename + &amp;quot;\&amp;quot;&amp;quot; + lastname; // firstname &amp;quot;alias&amp;quot; lastname&lt;br /&gt;
                } else if ( NAME_FORMAT == 3 ) { // not format 1, or 2, so...&lt;br /&gt;
                    STATUS = gamename + &amp;quot;(&amp;quot;+playername+&amp;quot;)&amp;quot;; // alias (firstname lastname)&lt;br /&gt;
                }&lt;br /&gt;
                if ( SHOW_HEALTH == TRUE ) { // do we want a health number (unrealistic)&lt;br /&gt;
                    float currentpoints = (float)curwounds + (float)curcritical; // add up noncritical and critical wounds boxes remaining&lt;br /&gt;
                    float maxpoints = (float)maxwounds + (float)maxcritical; // add up total wounds boxes player should have&lt;br /&gt;
                    if ( currentpoints &amp;gt; 0.0 ) { // if player has some wounds left&lt;br /&gt;
                        float health = ( ( currentpoints / maxpoints ) * 100.0 ); // get a percentage&lt;br /&gt;
                        STATUS += &amp;quot;\nHealth: &amp;quot;+(string)llRound(health)+&amp;quot;%&amp;quot;; // add the percentage health to the status&lt;br /&gt;
                    } else { // oops all resilience gone&lt;br /&gt;
                        STATUS += &amp;quot;\nHealth; 0%&amp;quot;; // so add a zero% to status&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if ( curwounds == maxwounds &amp;amp;&amp;amp; curcritical == maxcritical ) { // are all health boxes full?&lt;br /&gt;
                    COLOR = GREEN; // fully healthy&lt;br /&gt;
                }&lt;br /&gt;
                if ( curwounds &amp;lt; maxwounds &amp;amp;&amp;amp; curwounds &amp;gt;= 1 ) { // we&#039;ve lost some wounds, but not incapacitated&lt;br /&gt;
                    COLOR = YELLOW; // set a warning that we&#039;ve been wounded and not fully healty&lt;br /&gt;
                }&lt;br /&gt;
                if ( curwounds &amp;lt; 1 ) { // if we&#039;re out of non-critical wounds, we&#039;re in trouble&lt;br /&gt;
                    COLOR = RED; // we&#039;re incapacitated but not dead, bleeding out here&lt;br /&gt;
                }&lt;br /&gt;
                if ( isincap == 1 &amp;amp;&amp;amp; isdead == 0 ) {&lt;br /&gt;
                    STATUS += &amp;quot; ! INCAPACITATED !&amp;quot;;&lt;br /&gt;
                    COLOR = RED; // set color to warning that we&#039;re down but not dead yet&lt;br /&gt;
                }&lt;br /&gt;
                if ( isdead == 1 ) {  // if we&#039;re dead&lt;br /&gt;
                    STATUS += &amp;quot; !!! DEAD !!!&amp;quot;; // add a notice to status&lt;br /&gt;
                    COLOR = BLACK; // set color to color of death&lt;br /&gt;
                }                &lt;br /&gt;
                llSetText(STATUS,COLOR,ALPHA); // show the new status text over the meter&lt;br /&gt;
                return; // we&#039;re done with this command, exit entire listen event&lt;br /&gt;
            } // end if command meter&lt;br /&gt;
        } // end if chanattach&lt;br /&gt;
    }&lt;br /&gt;
} // end default&lt;br /&gt;
//============================================================================&lt;br /&gt;
// END&lt;br /&gt;
//============================================================================&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview3/Myriad_Lite_Melee_v0.0.2_20110813&amp;diff=1151930</id>
		<title>User:Allen Kerensky/Myriad Lite Preview3/Myriad Lite Melee v0.0.2 20110813</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview3/Myriad_Lite_Melee_v0.0.2_20110813&amp;diff=1151930"/>
		<updated>2011-08-21T15:24:34Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
= Myriad Lite Melee v0.0.2 20110813 =&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Myriad Lite Melee v0.0.2 20110813&lt;br /&gt;
// Copyright (c) 2011 By Allen Kerensky (OSG/SL)&lt;br /&gt;
// The Myriad RPG System was designed, written, and illustrated by Ashok Desai&lt;br /&gt;
// Myriad published under a:&lt;br /&gt;
// Creative Commons License (Attribution 2.0 UK: England and Wales)&lt;br /&gt;
// Myriad Lite published under a&lt;br /&gt;
// Creative Commons License Attribution-NonCommercial-ShareAlike 3.0 Unported&lt;br /&gt;
//============================================================================&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// MESSAGE FORMAT REFERENCE&lt;br /&gt;
//============================================================================&lt;br /&gt;
// CHANMYRIAD OUT - RPEVENT|message&lt;br /&gt;
// CHANATTACH IN  - REGISTERATTACHMENTS&lt;br /&gt;
// CHANATTACH OUT - ATTACHMELEE|int attackdice|int attachpoint|str name&lt;br /&gt;
// CHANATTACH OUT - DETACHMELEE|int attackdice|int attachpoint|str name&lt;br /&gt;
// CHANPLAYER OUT - CLOSECOMBAT|int attackdice|key victim|key attacker|str weaponname&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL VARIABLES&lt;br /&gt;
//============================================================================&lt;br /&gt;
key WEARER = NULL_KEY; // UUID of melee weapon user&lt;br /&gt;
integer ATTACHPOINT = 0; // attachment point&lt;br /&gt;
integer MINMELEE = 1; // minimum attack dice for melee weapons&lt;br /&gt;
integer MAXMELEE = 5; // maximum attack dice for melee weapons&lt;br /&gt;
// Melee Attack Dice&lt;br /&gt;
// 1D - Unarmed Combat&lt;br /&gt;
// 2D - Short animal claws, knife, dagger, blackjack, knuckledusters&lt;br /&gt;
// 3D - Long animal claws, short sword, machete, wooden baseball bat, staff&lt;br /&gt;
// 4D - Fire axe, long sword, katana, aluminum baseball bat, poleaxe&lt;br /&gt;
// 5D - Battleaxe, claymore, laser sword, daikatana, double-ended polearm&lt;br /&gt;
integer MELEEATTACKDICE = 4; // long sword&lt;br /&gt;
string DIV=&amp;quot;|&amp;quot;; // Myriad message field divider&lt;br /&gt;
string ANIM_SWORD = &amp;quot;sword_strike_r&amp;quot;; // use built in right handed sword strike animation&lt;br /&gt;
integer CHANATTACH; // hold the dynamically calculated attachment channel number&lt;br /&gt;
integer HANDATTACH; // hold a handle to remove the attachment channel if needed&lt;br /&gt;
integer CHANMYRIAD = -999; // the Myriad RPEVENT channel number&lt;br /&gt;
integer ANIM = FALSE; // do we have permission to animate the avatar?&lt;br /&gt;
float WEAPON_LENGTH = 2.0; // a six-foot longsword is the default&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// DEFAULT STATE&lt;br /&gt;
//============================================================================&lt;br /&gt;
default {&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // STATE_ENTRY EVENT - called on reset&lt;br /&gt;
    //------------------------------------------------------------------------    &lt;br /&gt;
    state_entry() {&lt;br /&gt;
        CHANATTACH = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)llGetOwner(),1,7)); // calculate dynamic attachment channel&lt;br /&gt;
        HANDATTACH = llListen(CHANATTACH,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;); // start listening on attachment channel&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // ATTACH EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        if ( id != NULL_KEY ) { // if id not equal null key, this is an attach&lt;br /&gt;
            WEARER = id; // save the id we attached to&lt;br /&gt;
            ATTACHPOINT = llGetAttached(); // get the position we attached to&lt;br /&gt;
            // tell the region we&#039;re arming a weapon&lt;br /&gt;
            llRegionSay(CHANMYRIAD,&amp;quot;RPEVENT&amp;quot;+DIV+llKey2Name(WEARER)+&amp;quot; equips their &amp;quot;+llGetObjectName());&lt;br /&gt;
            integer dynchan = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)WEARER,1,7)); // calculate dynamic attach channel&lt;br /&gt;
            // send attach melee message to HUD which disables fist fighter&lt;br /&gt;
            llWhisper(dynchan,&amp;quot;ATTACHMELEE&amp;quot;+DIV+(string)MELEEATTACKDICE+DIV+(string)ATTACHPOINT+DIV+llGetObjectName());&lt;br /&gt;
            llRequestPermissions(id,PERMISSION_TAKE_CONTROLS|PERMISSION_TRIGGER_ANIMATION); // request permissions&lt;br /&gt;
        } else { // the id was null key, so this is a detach&lt;br /&gt;
            integer dynchan = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)WEARER,1,7)); // calculate dynamic attach channel&lt;br /&gt;
            if ( dynchan != 0 ) { // is channel valid&lt;br /&gt;
                // tell the region we&#039;re disarming&lt;br /&gt;
                llRegionSay(CHANMYRIAD,&amp;quot;RPEVENT&amp;quot;+DIV+llKey2Name(WEARER)+&amp;quot; disarms their &amp;quot;+llGetObjectName());&lt;br /&gt;
                // send detach message to HUD which re-enables fist fighter&lt;br /&gt;
                llWhisper(dynchan,&amp;quot;DETACHMELEE&amp;quot;+DIV+(string)MELEEATTACKDICE+DIV+(string)ATTACHPOINT+DIV+llGetObjectName());&lt;br /&gt;
            } else { // channel was not valid&lt;br /&gt;
                llSay(DEBUG_CHANNEL,&amp;quot;DETACH EVENT WITHOUT PREVIOUS ATTACH?&amp;quot;); // report the problem&lt;br /&gt;
            }&lt;br /&gt;
            WEARER = NULL_KEY; // cleanup wearer key on detach&lt;br /&gt;
            ATTACHPOINT = 0; // cleanup attachpoint on detach&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // LISTEN EVENT - whisper, say, show, regionsay...&lt;br /&gt;
    //------------------------------------------------------------------------    &lt;br /&gt;
    listen(integer channel,string speakername,key speakerid,string message) {&lt;br /&gt;
        if ( channel == CHANATTACH ) { // did this message come in on attachment channel?&lt;br /&gt;
            if ( message == &amp;quot;REGISTERATTACHMENTS&amp;quot; ) { // is this a HUD asking for attachments to register?&lt;br /&gt;
                WEARER = llGetOwner(); // who is wielding me?&lt;br /&gt;
                ATTACHPOINT = llGetAttached(); // where am I attached?&lt;br /&gt;
                integer dynchan = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)WEARER,1,7)); // calculate wearer&#039;s dynamic attachment channel&lt;br /&gt;
                llWhisper(dynchan,&amp;quot;ATTACHMELEE&amp;quot;+DIV+(string)MELEEATTACKDICE+DIV+(string)ATTACHPOINT+DIV+llGetObjectName()); // tell HUD we&#039;re attached to disable fist fighter&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // RUN_TIME_PERMISSIONS EVENT - what is object allowed to do to avatar?&lt;br /&gt;
    //------------------------------------------------------------------------    &lt;br /&gt;
    run_time_permissions(integer perm) {&lt;br /&gt;
        if ( perm &amp;amp; PERMISSION_TAKE_CONTROLS ) { // can object read controls?&lt;br /&gt;
            llTakeControls(CONTROL_LBUTTON|CONTROL_ML_LBUTTON,TRUE,TRUE); // start watching the left mouse button in both views&lt;br /&gt;
        }&lt;br /&gt;
        if ( perm &amp;amp; PERMISSION_TRIGGER_ANIMATION ) { // can we also trigger animations for sword swings?&lt;br /&gt;
            ANIM = TRUE; // remember that we have permission now&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // CONTROL EVENT - read arrow keys and mouse button&lt;br /&gt;
    //------------------------------------------------------------------------    &lt;br /&gt;
    control(key id,integer level,integer edge) {&lt;br /&gt;
        if ( id == WEARER ) { // make sure controls come from wielder&lt;br /&gt;
            if ( ( level &amp;amp; CONTROL_LBUTTON &amp;amp;&amp;amp; edge &amp;amp; CONTROL_LBUTTON ) || ( level &amp;amp; CONTROL_ML_LBUTTON &amp;amp;&amp;amp; edge &amp;amp; CONTROL_ML_LBUTTON ) ) { // if left mouse button pressed in regular or mouselook mode&lt;br /&gt;
                llSensor(&amp;quot;&amp;quot;,NULL_KEY,(AGENT|ACTIVE|PASSIVE),WEAPON_LENGTH,PI/6); // trigger a sensor sweep for avatars within weapon range, and standing in front of us&lt;br /&gt;
                if ( ANIM == TRUE ) llStartAnimation(ANIM_SWORD); // if we can show sword swing, go ahead&lt;br /&gt;
                llSleep(0.2); // pause to let animation run&lt;br /&gt;
                return; // return now to skip processing any more events we add later&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // SENSOR EVENT - what did we find?&lt;br /&gt;
    //------------------------------------------------------------------------    &lt;br /&gt;
    sensor(integer num_detected) {&lt;br /&gt;
        while(num_detected--) { // step through all AGENTS returned by sensor sweep&lt;br /&gt;
            integer dynchan = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)llGetOwner(),0,6)); // calculate attackers HUD dynamic channel&lt;br /&gt;
            // send the close combat skill check message to attacker to start close combat skill check&lt;br /&gt;
            // attackers hud adds attacker stat and skill and sends the information to the victim to finish the opposed close combat skill check&lt;br /&gt;
            // we region say this so others can keep score or detect cheaters, etc&lt;br /&gt;
            llRegionSay(dynchan,&amp;quot;CLOSECOMBAT&amp;quot;+DIV+(string)MELEEATTACKDICE+DIV+(string)llDetectedKey(num_detected)+DIV+(string)llGetOwner()+DIV+llGetObjectName());&lt;br /&gt;
            &lt;br /&gt;
            key who = llDetectedKey(num_detected); // who did we hit with sensor?&lt;br /&gt;
            key owner = llList2Key(llGetObjectDetails(who,[OBJECT_OWNER]),0); // is this an agent/avatar for sure?&lt;br /&gt;
            if ( who == owner ) { // yep, we hit an avatar&lt;br /&gt;
                // tell the region an attempted attack is underway&lt;br /&gt;
                llRegionSay(CHANMYRIAD,&amp;quot;RPEVENT&amp;quot;+DIV+llKey2Name(llGetOwner())+&amp;quot; strikes at &amp;quot;+llDetectedName(num_detected)+&amp;quot; in Close Combat!&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // NO_SENSOR EVENT - we didn&#039;t find anything to hit&lt;br /&gt;
    //------------------------------------------------------------------------    &lt;br /&gt;
    no_sensor() {&lt;br /&gt;
        // we do nothing in this - but having a nosensor block avoids bugs where sensors would fail if nonsensor was missing&lt;br /&gt;
    }&lt;br /&gt;
} // end default&lt;br /&gt;
//============================================================================&lt;br /&gt;
// END&lt;br /&gt;
//============================================================================&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview3/Myriad_Lite_Healing_v0.0.1_20110813&amp;diff=1151929</id>
		<title>User:Allen Kerensky/Myriad Lite Preview3/Myriad Lite Healing v0.0.1 20110813</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview3/Myriad_Lite_Healing_v0.0.1_20110813&amp;diff=1151929"/>
		<updated>2011-08-21T15:23:29Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
= Myriad Lite Healing v0.0.1 20110813 =&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Myriad Lite Healing v0.0.1 20110813&lt;br /&gt;
// Copyright (c) 2011 By Allen Kerensky (OSG/SL)&lt;br /&gt;
// The Myriad RPG System was designed, written, and illustrated by Ashok Desai&lt;br /&gt;
// Myriad is published under a:&lt;br /&gt;
// Creative Commons License (Attribution 2.0 UK: England and Wales)&lt;br /&gt;
// Myriad Lite Healing is published under a:&lt;br /&gt;
// Creative Commons License Attribution-NonCommercial-ShareAlike 3.0 Unported&lt;br /&gt;
//============================================================================&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// MESSAGE FORMAT REFERENCE&lt;br /&gt;
//============================================================================&lt;br /&gt;
// CHANMYRIAD OUT - RPEVENT|str eventmessage&lt;br /&gt;
// CHANPLAYER OUT - HEALALL&lt;br /&gt;
// CHANPLAYER OUT - HEALPARTIAL|str HEALAMOUNT&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL CONSTANTS&lt;br /&gt;
//============================================================================&lt;br /&gt;
float   TOUCH_RANGE = 3.0;      // meters - how close do you have to be for touch-to-heal to work&lt;br /&gt;
integer RESPAWN_FLAG = TRUE;    // once heal is used, respawn it after a certain time?&lt;br /&gt;
float   RESPAWN_TIME = 30.0;    // how long until heal respawns?&lt;br /&gt;
integer CHANMYRIAD = -999;      // channel for Myriad RP events&lt;br /&gt;
string  DIV = &amp;quot;|&amp;quot;;              // Myriad message field divider&lt;br /&gt;
integer HEALALL = TRUE;         // heal all? if FALSE...&lt;br /&gt;
integer HEALAMOUNT = 0;         // heal how many critical/wound boxes?&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL SETUP()&lt;br /&gt;
//============================================================================&lt;br /&gt;
SETUP() {&lt;br /&gt;
    llSetLinkColor(LINK_SET,&amp;lt;1,0,0&amp;gt;,ALL_SIDES); // set all prims to red on all sides&lt;br /&gt;
    llTargetOmega(&amp;lt;0,0,1&amp;gt;,0.25,1.0); // set the object slowly spinning around the Z (vertical) axis&lt;br /&gt;
    if ( HEALALL == TRUE ) { // what label do we set?&lt;br /&gt;
        llSetText(&amp;quot;Full Healing&amp;quot;,&amp;lt;1,0,0&amp;gt;,1.0); // Set a red FULL heal hovertext&lt;br /&gt;
    } else { // this is only a partial heal&lt;br /&gt;
        llSetText(&amp;quot;Partial Healing&amp;quot;,&amp;lt;1,0,0&amp;gt;,1.0); // set a read PARTIAL heal hovertext&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// DEFAULT STATE&lt;br /&gt;
//============================================================================&lt;br /&gt;
default {&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // STATE_ENTRY EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        SETUP(); // if reset, go to setup&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // ON_REZ EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    on_rez(integer start_param) {&lt;br /&gt;
        SETUP(); // if rezzed from inventory, go to setup&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // COLLISION_START EVENT - if player runs into the heal object, try healing them&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    collision_start(integer collisions) {&lt;br /&gt;
        while (collisions--) { // count down through each collision in this event&lt;br /&gt;
            if ( RESPAWN_FLAG == FALSE ) { // this heal has already been used recently&lt;br /&gt;
                return; // so just return since we&#039;re not going to heal anyone at the moment&lt;br /&gt;
            }&lt;br /&gt;
            key who = llDetectedKey(collisions); // what hit the heal object?&lt;br /&gt;
            // we check the owner of the colliding object to see if its an avatar, or someone&#039;s bullet, etc&lt;br /&gt;
            key whoowner = llList2Key(llGetObjectDetails(who,[OBJECT_OWNER]),0);&lt;br /&gt;
            if ( who == whoowner) { // this is an avatar that owns itself&lt;br /&gt;
                // calculate the CHANPLAYER dynamic channel for who is being healed&lt;br /&gt;
                integer chanplayer = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)who,0,6));&lt;br /&gt;
                if ( HEALALL == TRUE ) { // are we healing all damage?&lt;br /&gt;
                    llRegionSay(CHANMYRIAD,llKey2Name(who)+&amp;quot; is fully healed!&amp;quot;);&lt;br /&gt;
                    llWhisper(chanplayer,&amp;quot;HEALALL&amp;quot;); // tell that player&#039;s HUD to heal ALL damage&lt;br /&gt;
                } else {&lt;br /&gt;
                    llRegionSay(CHANMYRIAD,llKey2Name(who)+&amp;quot; is partially healed!&amp;quot;);&lt;br /&gt;
                    llWhisper(chanplayer,&amp;quot;HEALPARTIAL&amp;quot;+DIV+(string)HEALAMOUNT); // tell player HUD to heal some damage&lt;br /&gt;
                }&lt;br /&gt;
                llSetLinkColor(LINK_SET,&amp;lt;.5,.5,.5&amp;gt;,ALL_SIDES); // make the heal item grey and used looking&lt;br /&gt;
                llSetTimerEvent(RESPAWN_TIME); // set a timer to respawn this heal item after a while&lt;br /&gt;
                RESPAWN_FLAG=FALSE; // set a flag so the heal can&#039;t be reused until it respawns&lt;br /&gt;
                return; // collision is done, let&#039;s exit after healing first avatar found in collisions&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // TOUCH_START EVENT - when player clicks heal, see if they are close enough&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    touch_start(integer touches) {        &lt;br /&gt;
        while (touches--) { // count down through all touches in this touch-start event&lt;br /&gt;
            if ( RESPAWN_FLAG == FALSE ) { // this heal has been used recently and has not respawned&lt;br /&gt;
                return; // so exit early since we&#039;re not healing anyone right now&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            key who2 = llDetectedKey(touches); // who clicked us, we don&#039;t check for avatar since objects can&#039;t click&lt;br /&gt;
            // find the current location of what clicked us&lt;br /&gt;
            vector whopos = llList2Vector(llGetObjectDetails(who2,[OBJECT_POS]),0);&lt;br /&gt;
&lt;br /&gt;
            if ( llVecDist(whopos,llGetPos()) &amp;lt;= TOUCH_RANGE ) { // check distance between heal item and whoever clicked&lt;br /&gt;
                // calculate CHANPLAYER dynamic player channel to send healing message to&lt;br /&gt;
                integer chanplayer2 = (integer)(&amp;quot;0x&amp;quot; + llGetSubString((string)who2,0,6));&lt;br /&gt;
                if ( HEALALL == TRUE ) { // are we healing all damage?&lt;br /&gt;
                    llRegionSay(CHANMYRIAD,llKey2Name(who2)+&amp;quot; is fully healed!&amp;quot;); // tell region someone is healing&lt;br /&gt;
                    llWhisper(chanplayer2,&amp;quot;HEALFULL&amp;quot;); // heal all damage&lt;br /&gt;
                } else {&lt;br /&gt;
                    llRegionSay(CHANMYRIAD,llKey2Name(who2)+&amp;quot; is partially healed!&amp;quot;); // tell region someone is healing&lt;br /&gt;
                    llWhisper(chanplayer2,&amp;quot;HEALPARTIAL&amp;quot;+DIV+(string)HEALAMOUNT); // heal some damage&lt;br /&gt;
                }&lt;br /&gt;
                llSetLinkColor(LINK_SET,&amp;lt;.5,.5,.5&amp;gt;,ALL_SIDES); // make the heal item grey and unused looking&lt;br /&gt;
                llSetTimerEvent(RESPAWN_TIME); // set a timer to respawn this heal item after a while&lt;br /&gt;
                RESPAWN_FLAG=FALSE; // set a flag so the heal can&#039;t be reused until it respawns&lt;br /&gt;
                return; // touch is done, let&#039;s exit after healing first avatar found in clicks&lt;br /&gt;
            }&lt;br /&gt;
        } // end while&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // TIMER EVENT&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    timer() {&lt;br /&gt;
        llSetLinkColor(LINK_SET,&amp;lt;1,0,0&amp;gt;,ALL_SIDES); // set color to red again to show this can be used&lt;br /&gt;
        RESPAWN_FLAG=TRUE; // set a flag to all the next heal attempt to work&lt;br /&gt;
        llSetTimerEvent(0.0); // stop the timers until the next heal event starts a new one&lt;br /&gt;
    }&lt;br /&gt;
} // end default&lt;br /&gt;
//============================================================================&lt;br /&gt;
// END&lt;br /&gt;
//============================================================================&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview3/Myriad_Lite_Firearm_v1.3_20110813&amp;diff=1151928</id>
		<title>User:Allen Kerensky/Myriad Lite Preview3/Myriad Lite Firearm v1.3 20110813</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview3/Myriad_Lite_Firearm_v1.3_20110813&amp;diff=1151928"/>
		<updated>2011-08-21T15:22:25Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
= Myriad Lite Firearm v1.0 20110813 =&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Myriad Lite Firearm v1.3 20110813&lt;br /&gt;
// Copyright (c) 2011 By Allen Kerensky (OSG/SL)&lt;br /&gt;
// The Myriad RPG System was designed, written, and illustrated by Ashok Desai&lt;br /&gt;
// Myriad is published under a:&lt;br /&gt;
// Creative Commons License (Attribution 2.0 UK: England and Wales)&lt;br /&gt;
// Myriad Lite Firearm is published under a:&lt;br /&gt;
// Creative Commons License Attribution-NonCommercial-ShareAlike 3.0 Unported&lt;br /&gt;
//----------------------------------------------------------------------------&lt;br /&gt;
// Based on phillip linden (SL) gunscript&lt;br /&gt;
// With many refinements by Rhonin Nissondorf (SL)&lt;br /&gt;
// Retrieved 2011-04-30 from http://wiki.secondlife.com/wiki/Gun_Script&lt;br /&gt;
// Copyright (c) 2009 Linden Research, Inc.&lt;br /&gt;
// Licensed under Creative Commons Attribution-Share Alike 3.0 (CC-BY-SA 3.0)&lt;br /&gt;
// Converted to OSSL by Allen Kerensky (SL/OSG).&lt;br /&gt;
//===========================================================================&lt;br /&gt;
&lt;br /&gt;
//===========================================================================&lt;br /&gt;
// MESSAGE FORMAT REFERENCE&lt;br /&gt;
//===========================================================================&lt;br /&gt;
// CHANMYRIAD OUT - RPEVENT|str event_message&lt;br /&gt;
// CHANATTACH IN - REGISTERATTACHMENTS&lt;br /&gt;
// CHANATTACH OUT - ATTACHRANGED|int damagedice|int attachpoint|str attachmentname&lt;br /&gt;
// CHANATTACH OUT - DETACHRANGED|int damagedice|int attachpoint|str attachmentname&lt;br /&gt;
&lt;br /&gt;
//===========================================================================&lt;br /&gt;
// GLOBAL VARIABLES - variables to be changed  below.&lt;br /&gt;
//===========================================================================&lt;br /&gt;
float BULLET_VELOCITY = 30.0;                       // change this to change the speed of the bullet.&lt;br /&gt;
float REPEAT_DELAY = 0.20;                          // delay between bullets, i recommend you dont&#039; set it to  low.&lt;br /&gt;
string gunsound = &amp;quot;pistol_shot.wav&amp;quot;;                            // string; name of sound in inventory&lt;br /&gt;
string ammo =  &amp;quot;Myriad Lite Bullet v0.0.3 20110813&amp;quot;; //name of desired object to be shot out. Must be in the inventory of the &amp;quot;gun&amp;quot;.&lt;br /&gt;
integer ATTACH_HAND = 6;                            // left hand = 5, right hand = 6&lt;br /&gt;
string SAFETY_OFF_MESSAGE = &amp;quot;The safety is now OFF.&amp;quot;; //message when you touch it.&lt;br /&gt;
string SAFETY_ON_MESSAGE = &amp;quot;The safety is now ON.&amp;quot;;        // a message when you... &lt;br /&gt;
string NOT_OWNER = &amp;quot;You are not the owner of this weapon.&amp;quot;; //message when non-owner touches it - assumes a sci-fi-like grip with owner ID&lt;br /&gt;
string ANIM_HOLD = &amp;quot;hold_R_handgun&amp;quot;;                // animation to use when holding pistol&lt;br /&gt;
string ANIM_AIM  = &amp;quot;PistolRightSteady1&amp;quot;;            // animation to use when aiming in mouselook&lt;br /&gt;
float  TIMER_RES = 0.5;                             // time in seconds to check for mouselook to start aim animation, like an AO&lt;br /&gt;
integer AVSTATE  = 0;                               // is av in mouselook?&lt;br /&gt;
vector OFFSET = &amp;lt;1.10, -0.25, 0.75&amp;gt;;                // rez offset for bullet&lt;br /&gt;
vector OFFSET_LEFT  = &amp;lt;1.10,  0.25, 0.75&amp;gt;;                // rez offset for bullet&lt;br /&gt;
vector OFFSET_RIGHT = &amp;lt;1.10, -0.25, 0.75&amp;gt;;                // rez offset for bullet&lt;br /&gt;
integer CHANMYRIAD = -999;                      // regionwide RPEVENT channel for Myriad&lt;br /&gt;
string DIV = &amp;quot;|&amp;quot;;                               // field divider between parts of Myriad messages&lt;br /&gt;
// Myriad Ranged Weapons Damage Dice, PDF page 64, Myriad Special Edition page 98&lt;br /&gt;
// 1 die of damage = small stones thrown by hand (or in crude sling)&lt;br /&gt;
// 2 die of damage = throwing knife, derringer, hand catapult, thrown house brick&lt;br /&gt;
// 3 die of damage = throwing axe, pistol, hunting rifle, automatic pistol (full auto)&lt;br /&gt;
// 4 die of damage = very heavy pistol (Magnum), assault rifle (full auto), shotgun&lt;br /&gt;
// 5 die of damage = high velocity sniper rifle, heavy calibre machine gun (full auto)&lt;br /&gt;
integer DAMAGEDICE = 3;                             // many damage dice does this bullet do in Myriad? default to pistol here&lt;br /&gt;
&lt;br /&gt;
//===========================================================================&lt;br /&gt;
// GLOBAL RUNTIMES - runtime variables we change as we go&lt;br /&gt;
// Don&#039;t alter anything below if your not  familiar with it.&lt;br /&gt;
//===========================================================================&lt;br /&gt;
integer SAFETY_ON = TRUE;  // is this weapon safety on or off by default?&lt;br /&gt;
vector pos;         // holds our current position temporarily  &lt;br /&gt;
rotation rot;       // holds our current rotation temporarily&lt;br /&gt;
vector offset;      // holds an offset to where to rez the bullet based on position and rotation   &lt;br /&gt;
integer CHANATTACH = 0; // dynamic channel for attachment messages&lt;br /&gt;
integer HANDATTACH = 0; // chat channel handle for attachment dynamic channel&lt;br /&gt;
&lt;br /&gt;
//===========================================================================&lt;br /&gt;
// GLOBAL SETUP&lt;br /&gt;
//===========================================================================&lt;br /&gt;
SETUP() {&lt;br /&gt;
    CHANATTACH = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)llGetOwner(),1,7)); // calculate the dynamic attachment channel&lt;br /&gt;
    HANDATTACH = llListen(CHANATTACH,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;); // start a listener on the attachment channel&lt;br /&gt;
    llWhisper(CHANATTACH,&amp;quot;ATTACHRANGED&amp;quot;+DIV+(string)DAMAGEDICE+DIV+(string)llGetAttached()+DIV+llGetObjectName()); // inform the player HUD that we&#039;re using a weapon to turn off fist fighter&lt;br /&gt;
    llOwnerSay(&amp;quot;Attach me to your right hand, and enter mouselook to fire!&amp;quot;);    &lt;br /&gt;
    // ask for permission to trigger animations, take controls, and attach to avatar&lt;br /&gt;
    llRequestPermissions(llGetOwner(),PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS|PERMISSION_ATTACH);&lt;br /&gt;
    llPreloadSound(gunsound); // try pre-loading the gunsound for everyone around&lt;br /&gt;
    if ( SAFETY_ON == TRUE ) { // lets tell owner the state of the safety&lt;br /&gt;
        llRegionSay(CHANMYRIAD,&amp;quot;RPEVENT&amp;quot;+DIV+llKey2Name(llGetOwner())+ &amp;quot; equips a &amp;quot;+llGetObjectName()+&amp;quot; with the safety ON.&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;The safety is ON.&amp;quot;); &lt;br /&gt;
    } else { // safety is not on&lt;br /&gt;
        llRegionSay(CHANMYRIAD,&amp;quot;RPEVENT&amp;quot;+DIV+llKey2Name(llGetOwner())+ &amp;quot; equips a &amp;quot;+llGetObjectName()+&amp;quot; with the safety OFF.&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;The safety is OFF.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    llSetTimerEvent(TIMER_RES); // start a timer running to check for mouselook and start aim animations or not&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//===========================================================================&lt;br /&gt;
// STATE DEFAULT - the main state is the default state.&lt;br /&gt;
// When a script is compiled, reset or loaded, this is the state it enters by default.&lt;br /&gt;
//===========================================================================&lt;br /&gt;
default {&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    // STATE_ENTRY EVENT - Triggered on any state transition and start up&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        SETUP(); // call global setup&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    // ON_REZ EVENT - Triggered when object attached or rezzed on the ground&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    on_rez(integer rezparams) {&lt;br /&gt;
        SETUP();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    // ATTACH EVENT - when the object is attached or detached&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        if ( id == NULL_KEY) { // if id is null key, this is a detach event&lt;br /&gt;
            llRegionSay(CHANMYRIAD,&amp;quot;RPEVENT&amp;quot;+DIV+llKey2Name(llGetOwner())+ &amp;quot; puts away their &amp;quot;+llGetObjectName());&lt;br /&gt;
            llWhisper(CHANATTACH,&amp;quot;DETACHRANGED&amp;quot;+DIV+(string)DAMAGEDICE+DIV+(string)llGetAttached()+DIV+llGetObjectName()); // inform the player HUD that we&#039;re using a weapon to turn on fist fighter&lt;br /&gt;
            integer perms = llGetPermissions(); // what permissions does object have&lt;br /&gt;
            if ( perms &amp;amp; PERMISSION_TRIGGER_ANIMATION ) { // if object has permission to change animations&lt;br /&gt;
                llStopAnimation(ANIM_HOLD); // stop the &#039;hold a weapon&#039; animation since we&#039;re detaching&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    // RUN_TIME_PERMISSIONS EVENT - triggered when avatar grants permissions to object&lt;br /&gt;
    // some permissions automatically granted on attach or sit - but you should STILL check correctly for those&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    run_time_permissions(integer perm) {&lt;br /&gt;
&lt;br /&gt;
        if (perm &amp;amp; PERMISSION_ATTACH ) { // was object granted permission to attach?&lt;br /&gt;
            //llAttachToAvatar(ATTACH_HAND); // attach to the given attach point, 5 = left hand, 6 = right hand&lt;br /&gt;
        }&lt;br /&gt;
        if ( perm &amp;amp; PERMISSION_TAKE_CONTROLS ) { // was object granted permission to read control events?&lt;br /&gt;
            llTakeControls(CONTROL_ML_LBUTTON, TRUE, FALSE); // start reading the left mouse button in mouselook mode&lt;br /&gt;
        }&lt;br /&gt;
        if ( perm &amp;amp; PERMISSION_TRIGGER_ANIMATION ) { // was object granted permission to trigger animations?&lt;br /&gt;
            llStartAnimation(ANIM_HOLD); // start the &#039;hold a weapon&#039; animation&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    // TOUCH_START EVENT - trigger at the start of someone clicking on the object&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    touch_start(integer touches) {  // Triggered by the start of agent clicking on object&lt;br /&gt;
        while (touches--) { // count down through each touch event&lt;br /&gt;
            key who = llDetectedKey(touches); // get the key of who triggered the touch&lt;br /&gt;
            if ( llGetOwner() != who ) { // if not the owner&lt;br /&gt;
                llInstantMessage(who,NOT_OWNER); // tell them&lt;br /&gt;
            } else if( SAFETY_ON == TRUE ) { // if it is the owner and the safety is on&lt;br /&gt;
                SAFETY_ON = FALSE; // switch the safety off&lt;br /&gt;
                llRegionSay(CHANMYRIAD,&amp;quot;RPEVENT&amp;quot;+DIV+llKey2Name(llGetOwner())+ &amp;quot; switches the safety of their &amp;quot;+llGetObjectName()+&amp;quot; OFF.&amp;quot;);&lt;br /&gt;
                llOwnerSay(SAFETY_OFF_MESSAGE); // and tell them&lt;br /&gt;
            } else if ( SAFETY_ON == FALSE) { // if it is the owner and safety is off&lt;br /&gt;
                SAFETY_ON = TRUE; // switch the safety on&lt;br /&gt;
                llRegionSay(CHANMYRIAD,&amp;quot;RPEVENT&amp;quot;+DIV+llKey2Name(llGetOwner())+ &amp;quot; switches the safety of their &amp;quot;+llGetObjectName()+&amp;quot; ON.&amp;quot;);&lt;br /&gt;
                llOwnerSay(SAFETY_ON_MESSAGE); // and tell them&lt;br /&gt;
            }&lt;br /&gt;
        } // end while&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    // CHANGED EVENT - various changes to object can trigger this event&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    changed(integer change) {&lt;br /&gt;
        if(change &amp;amp; CHANGED_OWNER) { // did the object change owner through a give or drop/take?&lt;br /&gt;
            integer perms = llGetPermissions(); // what permissions does object have?&lt;br /&gt;
            if ( perms &amp;amp; PERMISSION_TRIGGER_ANIMATION ) { // if object has permission to change animations&lt;br /&gt;
                llStopAnimation(ANIM_HOLD); // stop the &#039;hold a weapon&#039; animation&#039;&lt;br /&gt;
            }&lt;br /&gt;
            llResetScript(); // and reset the entire script&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    // EVENT CONTROL - called for user input we&#039;ve requested with LLTAKECONTROLS&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    control(key owner, integer level, integer edge) {&lt;br /&gt;
        if ( SAFETY_ON == TRUE ) { // check the safety before shooting&lt;br /&gt;
            llOwnerSay(&amp;quot;The safety is ON.&amp;quot;); // warn owner they are shooting with safety on&lt;br /&gt;
            return; // return now to prevent running the rest of the shooting code&lt;br /&gt;
        }&lt;br /&gt;
        integer pressed = level &amp;amp; edge; // level is when you click ,edge would be if you let up.&lt;br /&gt;
        if ( pressed &amp;amp; CONTROL_ML_LBUTTON ) { // if left mouse button was pressed in MouseLook mode&lt;br /&gt;
            // Fire 1 bullet,,  the heart of the firearm script.&lt;br /&gt;
            pos = llGetPos(); // get our current position&lt;br /&gt;
            rot = llGetRot(); // get our current rotation&lt;br /&gt;
            offset = OFFSET; // start with the base offset for the gun held in the right hand&lt;br /&gt;
            if ( ATTACH_HAND == 5 ) { // is weapon in left hand?&lt;br /&gt;
                offset = OFFSET_LEFT; // use the left-hand offset&lt;br /&gt;
            }&lt;br /&gt;
            if ( ATTACH_HAND == 6 ) { // is weapon in right hand?&lt;br /&gt;
                offset = OFFSET_RIGHT; // use the right hand offset&lt;br /&gt;
            }&lt;br /&gt;
            offset *= rot; // now, rotate the offset to match the avatar rotation&lt;br /&gt;
            pos += offset; // now combine the rotated offset with avatar position &lt;br /&gt;
            vector fwd = llRot2Fwd(rot); // calculate the direction that is &amp;quot;avatar&#039;s facing&amp;quot; &lt;br /&gt;
            fwd *= BULLET_VELOCITY; // now multiply that by bullet speed to tell bullet to push in that direction, that fast&lt;br /&gt;
            rot *= llEuler2Rot(&amp;lt;0, PI_BY_TWO, 0&amp;gt;); // now, straighten rotation for object we&#039;re about to rez&lt;br /&gt;
            llPlaySound(gunsound,1.0); // here &amp;quot;gunsound&amp;quot;is a variable defined above.&lt;br /&gt;
            // DAMAGEDICE is passed to rez-param of bullet. Myriad Bullets read this as damage dice to do if they hit&lt;br /&gt;
            llRezObject(ammo, pos, fwd, rot, DAMAGEDICE); // does the actual work rezzes the ammo in the specified variables.&lt;br /&gt;
            llSleep(REPEAT_DELAY); // force a pause between shots&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    // LISTEN EVENT - listen for whisper, say, shout, regionsay messages&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    listen(integer channel, string name, key uuid, string message) {&lt;br /&gt;
        if ( channel == CHANATTACH ) { // did message come in on attachment channel?&lt;br /&gt;
            if ( message == &amp;quot;REGISTERATTACHMENTS&amp;quot; ) { // request from a HUD to register attachments already in use&lt;br /&gt;
                llWhisper(CHANATTACH,&amp;quot;ATTACHRANGED&amp;quot;+DIV+(string)DAMAGEDICE+DIV+(string)llGetAttached()+DIV+llGetObjectName()); // inform the player HUD that we&#039;re using a weapon to turn off fist fighter&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    // TIMER EVENT - called regularly as an animation override for holding or aiming weapon&lt;br /&gt;
    //-----------------------------------------------------------------------&lt;br /&gt;
    timer() {&lt;br /&gt;
        AVSTATE = llGetAgentInfo(llGetOwner()); // get an integer that holds the current state of the avatar to see if they are in mouselook or not&lt;br /&gt;
        if ( AVSTATE &amp;amp; 0x0008 ) { // 0x0008 = AGENT_MOUSELOOK constant - this hack needed on OpenSim&lt;br /&gt;
            llStopAnimation(ANIM_HOLD); // stop the &#039;just hold a weapon&#039; animation&lt;br /&gt;
            llSleep(0.05); // wait a little&lt;br /&gt;
            llStartAnimation(ANIM_AIM); // start the aiming weapon animation&lt;br /&gt;
        } else { // avatar is not in mouselook&lt;br /&gt;
            llStopAnimation(ANIM_AIM); // stop the aiming animation&lt;br /&gt;
            llSleep(0.05); // wait a little&lt;br /&gt;
            llStartAnimation(ANIM_HOLD); // now start the just holding a weapon animation&lt;br /&gt;
        }&lt;br /&gt;
        AVSTATE = 0; // clean up or reset the avatar state variable&lt;br /&gt;
    }&lt;br /&gt;
} // end of default&lt;br /&gt;
//============================================================================&lt;br /&gt;
// END&lt;br /&gt;
//============================================================================&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview3/Myriad_Lite_Bullet_v0.0.3_20110813&amp;diff=1151927</id>
		<title>User:Allen Kerensky/Myriad Lite Preview3/Myriad Lite Bullet v0.0.3 20110813</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview3/Myriad_Lite_Bullet_v0.0.3_20110813&amp;diff=1151927"/>
		<updated>2011-08-21T15:21:24Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
= Myriad Lite Bullet v0.0.3 20110813 =&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Myriad Lite Bullet v0.0.3 20110813&lt;br /&gt;
// Copyright (c) 2011 By Allen Kerensky (OSG/SL)&lt;br /&gt;
// The Myriad RPG System was designed, written, and illustrated by Ashok Desai&lt;br /&gt;
// Myriad is published under a:&lt;br /&gt;
// Creative Commons License (Attribution 2.0 UK: England and Wales)&lt;br /&gt;
// Myriad Lite Bullet is published under a:&lt;br /&gt;
// Creative Commons License Attribution-NonCommercial-ShareAlike 3.0 Unported&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Davada Gallant (John Girard), WWIIOLers&lt;br /&gt;
// Retrieved 2011-04-30 from http://wiki.secondlife.com/wiki/Bullet&lt;br /&gt;
// Copyright (c) 2009 Linden Research, Inc. Licensed under Creative Commons Attribution-Share Alike 3.0 (CC-BY-SA 3.0)&lt;br /&gt;
// Adapted to OSSL by Allen Kerensky (SL/OSG)&lt;br /&gt;
// Includes Keknehv&#039;s Particle Script v1.2&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// MESSAGE FORMAT REFERENCE&lt;br /&gt;
//============================================================================&lt;br /&gt;
// CHANMYRIAD IN - RPEVENT|str event message&lt;br /&gt;
// CHANPLAYER OUT - DEPRECATED - TOHIT|str attackdice|key who/whatwashit|key bulletowner|str bulletname&lt;br /&gt;
// CHANPLAYER OUT - RANGEDCOMBAT|str attackdice|key who/whatwashit|key bulletowner|str bulletname&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Bullet Configuration&lt;br /&gt;
//============================================================================&lt;br /&gt;
string RICOCHET = &amp;quot;nebs_smoke_particle_01&amp;quot;;  // puff-of-smoke texture to show on bullet hits/ricochets - put this texture in bullet prim&lt;br /&gt;
float  BOUYANCY = 1.0;      // how buoyant is the bullet for physics&lt;br /&gt;
float  TIMEOUT  = 20.0;     // control timer to force bullet to die&lt;br /&gt;
&lt;br /&gt;
// Myriad config&lt;br /&gt;
integer MINDAMAGE = 1; // minimum valid damage value for weapon&lt;br /&gt;
integer MAXDAMAGE = 5; // maximum valid damage value for weapon&lt;br /&gt;
integer DAMAGE = 1; // default how much damage do you want this weapon to cause? can be overriden on rez!&lt;br /&gt;
string DIV = &amp;quot;|&amp;quot;; // divider between parts of Myriad API messages&lt;br /&gt;
integer CHANMYRIAD = -999; // channel to send Myriad RP events to&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL SETUP()&lt;br /&gt;
//============================================================================&lt;br /&gt;
SETUP(integer type) {&lt;br /&gt;
    if ( llGetStatus(STATUS_PHYSICS) == FALSE ) { // is the bullet a physics object?&lt;br /&gt;
        llSetStatus(STATUS_PHYSICS, TRUE); // if not, make it one&lt;br /&gt;
    }&lt;br /&gt;
    llSetStatus(STATUS_DIE_AT_EDGE, TRUE); // set bullet to die if it crosses a region edge&lt;br /&gt;
    llSetPrimitiveParams([PRIM_TEMP_ON_REZ,TRUE]); // set bullet to be temp-on-rez to cleanup and not count against prim limits&lt;br /&gt;
    llSetBuoyancy(BOUYANCY); // make bullet float so it flies&lt;br /&gt;
    if ( type &amp;gt;= MINDAMAGE &amp;amp;&amp;amp; type &amp;lt;= MAXDAMAGE ) { // is the damage value passed on rez valid?&lt;br /&gt;
        DAMAGE = type; // yes it is, override bullet default&lt;br /&gt;
    }&lt;br /&gt;
    llSetDamage((float)DAMAGE); // set the Linden Lab Combat System damage value to the same as Myriad damage class&lt;br /&gt;
    llSetTimerEvent(TIMEOUT); // start the timeout timer to try to force bullet to die too&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Keknehv&#039;s Particle Script v1.2&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Retrieved 2011-04-30 from http://lslwiki.net/lslwiki/wakka.php?wakka=LibraryKeknehvParticles&lt;br /&gt;
// 1.0 -- 5/30/05&lt;br /&gt;
// 1.1 -- 6/17/05&lt;br /&gt;
// 1.2 -- 9/22/05 (Forgot PSYS_SRC_MAX_AGE)&lt;br /&gt;
//     This script may be used in anything you choose, including and not limited to commercial products. &lt;br /&gt;
//     Just copy the MakeParticles() function; it will function without any other variables in a different script&lt;br /&gt;
//         ( You can, of course, rename MakeParticles() to something else, such as StartFlames() )&lt;br /&gt;
MAKEPARTICLES(string texture) {&lt;br /&gt;
    if ( texture == &amp;quot;&amp;quot; || texture == NULL_KEY ) { // no texture set, no reason to show particles&lt;br /&gt;
        llParticleSystem([ ]); // shut off any particles that were somehow running&lt;br /&gt;
        return; // exit early since we&#039;re not going to show more particles without a texture to show&lt;br /&gt;
    }&lt;br /&gt;
    // This is the function that actually starts the particle system.    &lt;br /&gt;
    llParticleSystem([                   //KPSv1.0  &lt;br /&gt;
    PSYS_PART_FLAGS , 0 //Comment out any of the following masks to deactivate them&lt;br /&gt;
    //| PSYS_PART_BOUNCE_MASK           //Bounce on object&#039;s z-axis&lt;br /&gt;
    | PSYS_PART_WIND_MASK             //Particles are moved by wind&lt;br /&gt;
    | PSYS_PART_INTERP_COLOR_MASK       //Colors fade from start to end&lt;br /&gt;
    | PSYS_PART_INTERP_SCALE_MASK       //Scale fades from beginning to end&lt;br /&gt;
    //| PSYS_PART_FOLLOW_SRC_MASK         //Particles follow the emitter&lt;br /&gt;
    //| PSYS_PART_FOLLOW_VELOCITY_MASK    //Particles are created at the velocity of the emitter&lt;br /&gt;
    //| PSYS_PART_TARGET_POS_MASK       //Particles follow the target&lt;br /&gt;
    | PSYS_PART_EMISSIVE_MASK           //Particles are self-lit (glow)&lt;br /&gt;
    //| PSYS_PART_TARGET_LINEAR_MASK    //Undocumented--Sends particles in straight line?&lt;br /&gt;
    //,PSYS_SRC_TARGET_KEY , NULL_KEY,   //Key of the target for the particles to head towards&lt;br /&gt;
    //Choose one of these as a pattern:&lt;br /&gt;
    //PSYS_SRC_PATTERN_DROP                 Particles start at emitter with no velocity&lt;br /&gt;
    //PSYS_SRC_PATTERN_EXPLODE              Particles explode from the emitter&lt;br /&gt;
    //PSYS_SRC_PATTERN_ANGLE                Particles are emitted in a 2-D angle&lt;br /&gt;
    //PSYS_SRC_PATTERN_ANGLE_CONE           Particles are emitted in a 3-D cone&lt;br /&gt;
    //PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY     Particles are emitted everywhere except for a 3-D cone&lt;br /&gt;
    ,PSYS_SRC_PATTERN,           PSYS_SRC_PATTERN_EXPLODE&lt;br /&gt;
    ,PSYS_SRC_TEXTURE,           texture            //UUID of the desired particle texture, or inventory name&lt;br /&gt;
    ,PSYS_SRC_MAX_AGE,           1.0                //Time, in seconds, for particles to be emitted. 0 = forever&lt;br /&gt;
    ,PSYS_PART_MAX_AGE,          5.0                //Lifetime, in seconds, that a particle lasts&lt;br /&gt;
    ,PSYS_SRC_BURST_RATE,        0.02               //How long, in seconds, between each emission&lt;br /&gt;
    ,PSYS_SRC_BURST_PART_COUNT,  1                  //Number of particles per emission&lt;br /&gt;
    ,PSYS_SRC_BURST_RADIUS,      0.01                //Radius of emission&lt;br /&gt;
    ,PSYS_SRC_BURST_SPEED_MIN,   0.01                //Minimum speed of an emitted particle&lt;br /&gt;
    ,PSYS_SRC_BURST_SPEED_MAX,   1.0                //Maximum speed of an emitted particle&lt;br /&gt;
    ,PSYS_SRC_ACCEL,             &amp;lt;0.05,0.05,0.05&amp;gt;     //Acceleration of particles each second&lt;br /&gt;
    ,PSYS_PART_START_COLOR,      &amp;lt;1.0,1.0,1.0&amp;gt;      //Starting RGB color&lt;br /&gt;
    ,PSYS_PART_END_COLOR,        &amp;lt;0.5,0.5,0.5&amp;gt;      //Ending RGB color, if INTERP_COLOR_MASK is on &lt;br /&gt;
    ,PSYS_PART_START_ALPHA,      0.9                //Starting transparency, 1 is opaque, 0 is transparent.&lt;br /&gt;
    ,PSYS_PART_END_ALPHA,        0.0                //Ending transparency&lt;br /&gt;
    ,PSYS_PART_START_SCALE,      &amp;lt;0.5,0.5,0.0&amp;gt;      //Starting particle size&lt;br /&gt;
    ,PSYS_PART_END_SCALE,        &amp;lt;1.0,1.0,0.0&amp;gt;      //Ending particle size, if INTERP_SCALE_MASK is on&lt;br /&gt;
    ,PSYS_SRC_ANGLE_BEGIN,       PI                 //Inner angle for ANGLE patterns&lt;br /&gt;
    ,PSYS_SRC_ANGLE_END,         PI                 //Outer angle for ANGLE patterns&lt;br /&gt;
    ,PSYS_SRC_OMEGA,             &amp;lt;0.0,0.0,0.0&amp;gt;       //Rotation of ANGLE patterns, similar to llTargetOmega()&lt;br /&gt;
    ]);&lt;br /&gt;
}&lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL DIE()&lt;br /&gt;
// This kludge is to try very hard to force bullets to eventually die on OpenSims.&lt;br /&gt;
// Requested by Lani Global (OSgrid)&lt;br /&gt;
//============================================================================&lt;br /&gt;
DIE() {&lt;br /&gt;
    while ( TRUE == TRUE ) { // this will always be true, forming an infinite loop&lt;br /&gt;
        llDie(); // just keep trying to die, forever... one will eventually work!&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// STATE DEFAULT - where the program starts&lt;br /&gt;
//============================================================================&lt;br /&gt;
default {&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // STATE_ENTRY - called if bullet rezzed onto the ground&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        SETUP(DAMAGE); // sets default damage value - may be overridden on rez&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // ON_REZ - called when bullet is rezzed by firearm&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    on_rez(integer start_param) {&lt;br /&gt;
        SETUP(start_param); // pass any start param to setup as a request to set a custom damage value, if valid, it will be used&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // COLLISION_START - we just hit an object or avatar&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    collision_start(integer collisions) {&lt;br /&gt;
        while(collisions--) { // step through each collision event counting down&lt;br /&gt;
            // calculate the dynamic channel of who/what we hit&lt;br /&gt;
            integer dynchan = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)llGetOwner(),0,6));&lt;br /&gt;
            // send a ranged combat check to the HUD of the shooter&lt;br /&gt;
            // hitting with a bullet is not an automatic &amp;quot;you hit for damage&amp;quot;&lt;br /&gt;
            // instead it triggers the shooter to make a ranged combat skill check against their victim&lt;br /&gt;
            // if the skill check succeeds, THEN the shot is applied against the victim&#039;s armor &lt;br /&gt;
            llRegionSay(dynchan,&amp;quot;RANGEDCOMBAT&amp;quot;+DIV+(string)DAMAGE+DIV+(string)llDetectedKey(collisions)+DIV+(string)llGetOwner()+DIV+llGetObjectName());&lt;br /&gt;
            &lt;br /&gt;
            key who = llDetectedKey(collisions); // get the key of what or who we hit&lt;br /&gt;
            // llGetObjectDetails returns avatar key as &amp;quot;owner&amp;quot; of the avatar itself&lt;br /&gt;
            // so if key of what we hit matches owner&#039;s key, we hit an avatar themselves rather than someone&#039;s object&lt;br /&gt;
            key owner = llList2Key(llGetObjectDetails(who,[OBJECT_OWNER]),0); // get the owner of the key of what we hit&lt;br /&gt;
&lt;br /&gt;
            if ( who == owner ) { // so, did we hit an actual avatar?&lt;br /&gt;
                // yes, so as a basic anti-cheat, let&#039;s announce to the region that someone is being shot at by someone else&lt;br /&gt;
                llRegionSay(CHANMYRIAD,&amp;quot;RPEVENT&amp;quot;+DIV+llKey2Name(llGetOwner())+&amp;quot; shot at &amp;quot;+llDetectedName(collisions)+&amp;quot;!&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        // TODO Shrapnel?&lt;br /&gt;
        // TODO Through and through?&lt;br /&gt;
        MAKEPARTICLES(RICOCHET); // show the bullet impact&lt;br /&gt;
        DIE(); // jump to infinite die loop to cleanup this bullet&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // LAND_COLLISION - what to do if bullet hits the ground&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    land_collision_start( vector collisions) {&lt;br /&gt;
        MAKEPARTICLES(RICOCHET); // show the poof of smoke from the ricochet, movie style&lt;br /&gt;
        DIE(); // jump to the infinite die loop to clean up this bullet&lt;br /&gt;
    }    &lt;br /&gt;
    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // TIMER - trigger bullet to die after a given time, if all else fails&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    timer() {&lt;br /&gt;
        DIE(); // timer expired, jump to infinite die loop to cleanup this bullet&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
//============================================================================&lt;br /&gt;
// END&lt;br /&gt;
//============================================================================&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview3/Myriad_Lite_Armor_v0.0.3_20110813&amp;diff=1151926</id>
		<title>User:Allen Kerensky/Myriad Lite Preview3/Myriad Lite Armor v0.0.3 20110813</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview3/Myriad_Lite_Armor_v0.0.3_20110813&amp;diff=1151926"/>
		<updated>2011-08-21T15:20:12Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
= Myriad Lite Armor v0.0.3 20110813 =&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Myriad Lite Armor v0.0.3 20110813 &lt;br /&gt;
// Copyright (c) 2011 By Allen Kerensky (OSG/SL)&lt;br /&gt;
// The Myriad RPG System was designed, written, and illustrated by Ashok Desai&lt;br /&gt;
// Myriad is published under a:&lt;br /&gt;
// Creative Commons License (Attribution 2.0 UK: England and Wales)&lt;br /&gt;
// Myriad Lite Armor is published under a:&lt;br /&gt;
// Creative Commons License Attribution-NonCommercial-ShareAlike 3.0 Unported&lt;br /&gt;
//============================================================================&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// MESSAGE FORMATS&lt;br /&gt;
//============================================================================&lt;br /&gt;
// CHANATTACH - IN - REGISTERATTACHMENTS&lt;br /&gt;
// CHANATTACH - OUT - ATTACHARMOR|int ARMORRATING|int ATTACHPOINT|string OBJECTNAME&lt;br /&gt;
// CHANATTACH - OUT - DETACHARMOR|int ARMORRATING|int ATTACHPOINT|string OBJECTNAME&lt;br /&gt;
// CHANATTACH - IN - ARMORHIT&lt;br /&gt;
// CHANATTACH - IN - ARMORBLOCKED&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// CONSTANTS - variables which don&#039;t change over runtime&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Example Armor (Myriad PDF p64, Myriad Special Edition p98)&lt;br /&gt;
// Archaic Armor Ratings&lt;br /&gt;
// 1 Soft leather, heavy cloth&lt;br /&gt;
// 2 Hardened leather, thick hide&lt;br /&gt;
// 3 Chain mail, dragon hide&lt;br /&gt;
// 4 Full plate mail, mithril chain&lt;br /&gt;
// 5 Mithril plate mail&lt;br /&gt;
// Modern Armor Ratings&lt;br /&gt;
// 1 Leather jacket&lt;br /&gt;
// 2 Bullet-proof vest&lt;br /&gt;
// 3 SWAT tactical armor&lt;br /&gt;
// 4 Advanced military armor&lt;br /&gt;
// 5 Sci-fi powered battle armor&lt;br /&gt;
integer ARMORRATING = 1; // the *actual* amount of protection THIS piece of armor provides&lt;br /&gt;
integer MINARMOR = 1; // the minimum amount of protection a piece of armor can offer, checked by HUD&lt;br /&gt;
integer MAXARMOR = 5; // the maximum amount of protection a piece of armor can offer, checked by HUD&lt;br /&gt;
string DIV=&amp;quot;|&amp;quot;; // the divider used between fields on a Myriad Lite messages&lt;br /&gt;
integer MINATTACHPOINT = 1; // minimum allowed attachment point number&lt;br /&gt;
integer MAXATTACHPOINT = 30; // maximum allowed avatar/inworld attachpoint number for multiattach/HUD attach cheaters&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// RUNTIME VARIABLES - variables which should change during runtime&lt;br /&gt;
//============================================================================&lt;br /&gt;
key OWNER = NULL_KEY; // holds UUID of owner&lt;br /&gt;
key WEARER = NULL_KEY; // holds UUID of last wearer, so we can send detach message to correct meter&lt;br /&gt;
integer ATTACHPOINT = 0; // the avatar position where armor attached to or detached from&lt;br /&gt;
integer CHANOWNER; // the chat channel the owner&#039;s ML HUD should be listening on&lt;br /&gt;
integer HANDOWNER; // a chat channel handle to remove the listener with later&lt;br /&gt;
integer CHANATTACH; // owner&#039;s attachment channel&lt;br /&gt;
integer HANDATTACH; // chat handle for attachment channel&lt;br /&gt;
integer FLAG_DEBUG = FALSE; // show debug messages or not?&lt;br /&gt;
float EFFECTTIME = 1.0; // how long to trigger effect for?&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// DEBUG - show debug chat with wearer name for sorting&lt;br /&gt;
//============================================================================&lt;br /&gt;
DEBUG(string dmessage) {&lt;br /&gt;
    if ( FLAG_DEBUG == TRUE ) { // debugging?&lt;br /&gt;
        llSay(DEBUG_CHANNEL,&amp;quot;DEBUG (&amp;quot;+llKey2Name(llGetOwner())+&amp;quot;): &amp;quot;+dmessage);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// ERROR - show errors on debug channel with wearer name for sorting&lt;br /&gt;
//============================================================================&lt;br /&gt;
ERROR(string emessage) {&lt;br /&gt;
    llSay(DEBUG_CHANNEL,&amp;quot;ERROR (&amp;quot;+llKey2Name(llGetOwner())+&amp;quot;): &amp;quot;+emessage);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// EFFECTHIT() - SHOW SPECIAL ARMOR EFFECTS WHEN ARMOR HIT BUT FAILS TO BLOCK&lt;br /&gt;
//============================================================================&lt;br /&gt;
EFFECTHIT() {&lt;br /&gt;
    // your commands go here for armor special effect when armor hit and does not block&lt;br /&gt;
&lt;br /&gt;
    // end of special effects&lt;br /&gt;
    if ( EFFECTTIME &amp;gt; 0.0 ) llSetTimerEvent(EFFECTTIME); // set up a timer to turn off effect&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// EFFECTBLOCKED - CHANGE ARMOR EFFECT WHEN ARMOR HIT AND BLOCKS DAMAGE&lt;br /&gt;
//============================================================================&lt;br /&gt;
EFFECTBLOCKED() {&lt;br /&gt;
    // your commands go here for armor special effect when armor BLOCKS a hit&lt;br /&gt;
        &lt;br /&gt;
    // end of special effects&lt;br /&gt;
    if ( EFFECTTIME &amp;gt; 0.0 ) llSetTimerEvent(EFFECTTIME); // set up a timer to turn off effect    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// EFFECTOFF - RESET ARMOR TO NORMAL VIEW&lt;br /&gt;
//============================================================================&lt;br /&gt;
EFFECTOFF() {&lt;br /&gt;
    // your commands go here to turn off armor effects&lt;br /&gt;
&lt;br /&gt;
    // end of armor reset&lt;br /&gt;
    if ( EFFECTTIME &amp;gt; 0.0 ) llSetTimerEvent(0.0); // turn off timer&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL SETUP()&lt;br /&gt;
//============================================================================&lt;br /&gt;
SETUP() {&lt;br /&gt;
    // calculate a dynamic chat channel based on owner key, for where the&lt;br /&gt;
    // wearer&#039;s ML HUD should be listening of attachment -specific events&lt;br /&gt;
    CHANATTACH = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)llGetOwner(),1,7));&lt;br /&gt;
    // open a channel, listening on player HUD channel, save handle for later close if needed&lt;br /&gt;
    HANDATTACH = llListen(CHANATTACH,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// DEFAULT&lt;br /&gt;
//============================================================================&lt;br /&gt;
default {&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // DEFAULT STATE ENTRY - begin our setup or call a setup block&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        SETUP(); // call the event-independent SETUP code&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // DEFAULT ON_REZ&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    on_rez(integer start_param) {&lt;br /&gt;
        SETUP(); // call event independent SETUP code        &lt;br /&gt;
    }   &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // DEFAULT ATTACH - Called for detach too&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        SETUP(); // call event-independent SETUP code&lt;br /&gt;
        // is this an attach event or detach event?&lt;br /&gt;
        if ( id != NULL_KEY ) { // a valid key means its an attach&lt;br /&gt;
            WEARER = id; // save who attached this armor piece for use during detach&lt;br /&gt;
            ATTACHPOINT = llGetAttached(); // where was this armor attached?&lt;br /&gt;
            // this should NOT be necessary, since it should match CHANPLAYER&lt;br /&gt;
            // however, armor can be dropped! So, wearer may NOT be owner. Need changed block?&lt;br /&gt;
            integer dynchan = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)WEARER,1,7));&lt;br /&gt;
            // Send ATTACHARMOR message to WEARER HUD&lt;br /&gt;
            llWhisper(dynchan,&amp;quot;ATTACHARMOR&amp;quot;+DIV+(string)ARMORRATING+DIV+(string)ATTACHPOINT+DIV+llGetObjectName());&lt;br /&gt;
        } else { // else the id equals NULL_KEY which happens for detach&lt;br /&gt;
            // calculate dynamic channel for person last wearing armor piece&lt;br /&gt;
            integer dynchan = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)WEARER,1,7));&lt;br /&gt;
            if ( dynchan != 0 ) { // did the dynamic channel check give us usable channel number &amp;lt;0 or &amp;gt;0 but not actually 0?&lt;br /&gt;
                // Send DETACHARMOR message to previous wearer&#039;s HUD&lt;br /&gt;
                llWhisper(dynchan,&amp;quot;DETACHARMOR&amp;quot;+DIV+(string)ARMORRATING+DIV+(string)ATTACHPOINT+DIV+llGetObjectName());&lt;br /&gt;
            } else { // the dynamic channel was 0?&lt;br /&gt;
                // how did we get in this mess? a detach without an attach. Report error. Design failure somewhere. THIS SHOULD NEVER HAPPEN.&lt;br /&gt;
                DEBUG(&amp;quot;DETACH EVENT WITHOUT PREVIOUS ATTACH?&amp;quot;);&lt;br /&gt;
            } // end of if dynchan not equal zero&lt;br /&gt;
            WEARER = NULL_KEY; // armor detached and reported as such, so we can forget previous wearer&lt;br /&gt;
            ATTACHPOINT = 0; // armor detached and reported as such, so we can forget previous attach point&lt;br /&gt;
        } // end of if id not equal null key&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // DEFAULT CHANGED&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    changed(integer change) {&lt;br /&gt;
        if ( change &amp;amp; CHANGED_OWNER ) { // if armor has a new owner from take-from-ground or copy, resetup&lt;br /&gt;
            SETUP(); // call event-independent setup code, in this case to update channels&lt;br /&gt;
        }&lt;br /&gt;
    }    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // DEFAULT LISTEN&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    listen(integer channel,string speakername,key speakerid,string message) {&lt;br /&gt;
        ATTACHPOINT = llGetAttached(); // get location we&#039;re attached to&lt;br /&gt;
        if ( channel == CHANATTACH ) { // is this message on the attach channel?&lt;br /&gt;
            if ( message == &amp;quot;ARMORHIT&amp;quot; ) { // is this an armor hit?&lt;br /&gt;
                EFFECTHIT(); // turn on armor hit effects&lt;br /&gt;
                return; // message processed, exit early&lt;br /&gt;
            }&lt;br /&gt;
            if ( message == &amp;quot;ARMORBLOCKED&amp;quot; ) { // did the armor block the hit too&lt;br /&gt;
                EFFECTBLOCKED(); // turn on armor block effects&lt;br /&gt;
                return; // message processed, exit early&lt;br /&gt;
            }&lt;br /&gt;
            // ML HUD sent a request for any attached items&lt;br /&gt;
            if ( ( message == &amp;quot;REGISTERATTACHMENTS&amp;quot; ) &amp;amp;&amp;amp; ( ATTACHPOINT &amp;gt;= MINATTACHPOINT ) &amp;amp;&amp;amp; ( ATTACHPOINT &amp;lt;= MAXATTACHPOINT ) ) {&lt;br /&gt;
                WEARER = llGetOwner(); // get armor owner BUG: what if owner not equal wearer?&lt;br /&gt;
                // calculate the dynamic channel of the wearer&lt;br /&gt;
                integer dynchan = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)WEARER,1,7));&lt;br /&gt;
                // send the ATTACHARMOR to ML HUD to register that this armor piece is worn&lt;br /&gt;
                llWhisper(dynchan,&amp;quot;ATTACHARMOR&amp;quot;+DIV+(string)ARMORRATING+DIV+(string)ATTACHPOINT+DIV+llGetObjectName());&lt;br /&gt;
                return; // message processed, exit early&lt;br /&gt;
            } // end of if message equal REGISTERATTACHMENTS            &lt;br /&gt;
        } // end if channel CHANATTACH&lt;br /&gt;
    }    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // TIMER CALLED TO TURN OFF THE SPECIAL EFFECTS&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    timer() {&lt;br /&gt;
        EFFECTOFF(); // timer expired, turn off effect&lt;br /&gt;
    } // end timer&lt;br /&gt;
} // end default&lt;br /&gt;
//============================================================================&lt;br /&gt;
// END&lt;br /&gt;
//============================================================================&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview3/Myriad_Lite_Character_Sheet_v0.0.2_20110521&amp;diff=1151925</id>
		<title>User:Allen Kerensky/Myriad Lite Preview3/Myriad Lite Character Sheet v0.0.2 20110521</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Allen_Kerensky/Myriad_Lite_Preview3/Myriad_Lite_Character_Sheet_v0.0.2_20110521&amp;diff=1151925"/>
		<updated>2011-08-21T15:18:20Z</updated>

		<summary type="html">&lt;p&gt;Allen Kerensky: created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
= Myriad Lite Character Sheet v0.0.2 20110521 =&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
#=======================================================&lt;br /&gt;
# Myriad Lite Character Sheet v0.0.2 20110521&lt;br /&gt;
#=======================================================&lt;br /&gt;
NAME=Myriad Player&lt;br /&gt;
SPECIES=Human&lt;br /&gt;
BACKGROUND=Normal&lt;br /&gt;
CAREER=None&lt;br /&gt;
#=======================================================&lt;br /&gt;
# Experience Points&lt;br /&gt;
# Example Format: XP=ExperiencePoints&lt;br /&gt;
# ExperiencePoints is an integer number 0-2320&lt;br /&gt;
# Example Format: XPLEVEL=Level&lt;br /&gt;
# Level is an integer number from 1-30&lt;br /&gt;
#=======================================================&lt;br /&gt;
XP=0&lt;br /&gt;
XPLEVEL=1&lt;br /&gt;
#=======================================================&lt;br /&gt;
# ATTRIBUTES&lt;br /&gt;
# Each Attribute is a single integer number 1-10&lt;br /&gt;
# Mortal Humans will range from 1-5&lt;br /&gt;
# Attributes greater than 5 are reserved for supernatural or superhuman monsters, aliens, deites, etc&lt;br /&gt;
# Example: POWER=1&lt;br /&gt;
#=======================================================&lt;br /&gt;
POWER=3&lt;br /&gt;
GRACE=3&lt;br /&gt;
INTELLECT=3&lt;br /&gt;
SPIRIT=3&lt;br /&gt;
#=======================================================&lt;br /&gt;
# RESILIENCES&lt;br /&gt;
# Each Resilience is a single integer number 1-20&lt;br /&gt;
# Example: WOUNDS=1&lt;br /&gt;
#=======================================================&lt;br /&gt;
WOUNDS=3&lt;br /&gt;
CRITICAL=2&lt;br /&gt;
RESOLVE=3&lt;br /&gt;
#=======================================================&lt;br /&gt;
# Boons&lt;br /&gt;
# Boon Lines have two subfields, separated by a comma&lt;br /&gt;
# Boon Name is a string of characters which do not contain a comma&lt;br /&gt;
# Boon Rank is an integer number 1-5&lt;br /&gt;
# Example Format: BOON = BoonName,BoonRank&lt;br /&gt;
# Example: BOON=Ally,1&lt;br /&gt;
# List one BOON line for each boon you have&lt;br /&gt;
#=======================================================&lt;br /&gt;
BOON=Ally,1&lt;br /&gt;
#=======================================================&lt;br /&gt;
# Flaws&lt;br /&gt;
# Flaw Lines have two subfields, separated by a comma&lt;br /&gt;
# Flaw Name is a string of characters which do not contain a comma&lt;br /&gt;
# Flaw Rank is an integer number 1-5&lt;br /&gt;
# Example Format: FLAW = FlawName,FlawRank&lt;br /&gt;
# Example: FLAW=Enemy,1&lt;br /&gt;
# List one FLAW line for each flaw you have&lt;br /&gt;
#=======================================================&lt;br /&gt;
FLAW=Enemy,1&lt;br /&gt;
#=======================================================&lt;br /&gt;
# SKILLS&lt;br /&gt;
# Skill Lines have two subfields, separated by a comma&lt;br /&gt;
# Skill Name is a string of characters which do not contain a comma&lt;br /&gt;
# Skill Rank is an integer number 1-5&lt;br /&gt;
# Example Format: SKILL = SkillName,SkillRank&lt;br /&gt;
# Example: SKILL=Arts and Crafts,1&lt;br /&gt;
# List one SKILL line for each skill you have&lt;br /&gt;
#=======================================================&lt;br /&gt;
SKILL=Ranged Combat,1&lt;br /&gt;
SKILL=Close Combat,1&lt;br /&gt;
#=======================================================&lt;br /&gt;
# Effect lines have two subfields, separated by a comma&lt;br /&gt;
# Example Format: EFFECT=EffectName,EffectRank&lt;br /&gt;
# EffectName is a string of characters which do not contain a comma&lt;br /&gt;
# EffectRank is an integer number 1-5&lt;br /&gt;
# Effects which do not list or use ranks, will be EffectRank=1&lt;br /&gt;
# Example: EFFECT=Animal Call,1&lt;br /&gt;
# List one EFFECT line for each Special Effect you have&lt;br /&gt;
#=======================================================&lt;br /&gt;
EFFECT=Aura of Innocence,1&lt;br /&gt;
#=======================================================&lt;br /&gt;
# STUNTS&lt;br /&gt;
# Stunt lines are simple STUNT=stunttext&lt;br /&gt;
#=======================================================&lt;br /&gt;
STUNTS=&lt;br /&gt;
#=======================================================&lt;br /&gt;
# QUOTES&lt;br /&gt;
# Quote lines are simple QUOTE=quotetext&lt;br /&gt;
#=======================================================&lt;br /&gt;
QUOTE=&lt;br /&gt;
#=======================================================&lt;br /&gt;
# Equipment&lt;br /&gt;
# Equipment Liines have two subfields separated by a comma&lt;br /&gt;
# EquipmentName is a string of characters which do not contain a comma&lt;br /&gt;
# NumberCarried is an integer number 0 to whatever&lt;br /&gt;
# Example Format = EquipmentName,NumberCarried&lt;br /&gt;
# Example: EQUIPMENT=Lockpick Set,1&lt;br /&gt;
# List one EQUIPMENT line for each item you carry&lt;br /&gt;
#=======================================================&lt;br /&gt;
EQUIPMENT=ICS 45,1&lt;br /&gt;
EQUIPMENT=Body Armor,1&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>
	</entry>
</feed>