<?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=CodeBastard+Redgrave</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=CodeBastard+Redgrave"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/CodeBastard_Redgrave"/>
	<updated>2026-07-26T21:44:54Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Machinima&amp;diff=709902</id>
		<title>Machinima</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Machinima&amp;diff=709902"/>
		<updated>2010-01-20T23:29:05Z</updated>

		<summary type="html">&lt;p&gt;CodeBastard Redgrave: /* Equipment */  - fixed the dead link for the SpaceNav&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Help&lt;br /&gt;
|BugFixes=&lt;br /&gt;
|Avatar=&lt;br /&gt;
|Object=&lt;br /&gt;
|LandSim=&lt;br /&gt;
|Community=&lt;br /&gt;
|Viewer=&lt;br /&gt;
|Communication=&lt;br /&gt;
|Multimedia=*&lt;br /&gt;
|Navigation=&lt;br /&gt;
|Misc=&lt;br /&gt;
|Description=&lt;br /&gt;
|Wiki=&lt;br /&gt;
|Glossary=*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Alert Box|&#039;&#039;&#039;Please note that this wiki portal is not an advertising space but rather a community resource and vehicle for aggregating information about Machinima. Please refrain from posting unrelated content.&#039;&#039;&#039;}}&lt;br /&gt;
 {{Navbox/Media}}&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Machinima&amp;quot; is a neologism based on the phrase &#039;&#039;machine cinema&#039;&#039;.  The term is used to distinguish between traditional animation techniques (which use specialized 3D animation software) and animation projects that record the action in real-time interactive 3D environments, such as single-player video games or Second Life.  See [http://en.wikipedia.org/wiki/Machinima the Wikipedia entry] for more details.  &lt;br /&gt;
&lt;br /&gt;
:[[terminology|Return to Terminology page]]&lt;br /&gt;
&lt;br /&gt;
==Machinimatographers==&lt;br /&gt;
&lt;br /&gt;
Visit [[:Category:Machinimatographers|Machinimatographers]] for an ever-expanding list of Machinimatographers working in Second Life.&lt;br /&gt;
&lt;br /&gt;
==Machinima Content Companies==&lt;br /&gt;
For information on Second Life content companies offering Machinima services, see [[Machinima Content Companies]].&lt;br /&gt;
&lt;br /&gt;
==Machinima Friendly Sims==&lt;br /&gt;
Visit [[Machinima Friendly Sims]] for an ever-expanding list of sims that allow for filming in Second Life.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
For recording Machinima see the &#039;&#039;&#039;[[Movie Recording]] page&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Any Platform===&lt;br /&gt;
* &#039;&#039;&#039;[http://wiki.magrathean.ca/index.php?title=DGiG DGiG]&#039;&#039;&#039; - personal &amp;amp; local simulator great for filming Second Life Machinima&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
* &#039;&#039;&#039;Editing&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[http://www.apple.com/finalcutstudio/finalcutpro/ Final Cut Pro] (US$999)&#039;&#039;&#039; - Editing Software&lt;br /&gt;
** &#039;&#039;&#039;[http://www.apple.com/ilife/imovie/ iMovie] (US$79, part of iWork)&#039;&#039;&#039; - Editing Software&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
* &#039;&#039;&#039;Editing&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;[http://www.heroinewarrior.com/cinelerra.php Cinelerra]&#039;&#039;&#039; - Editing Software&lt;br /&gt;
&lt;br /&gt;
===Windows===&lt;br /&gt;
* &#039;&#039;&#039;Editing&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;Adobe Premiere&#039;&#039;&#039; - Editing Software [http://www.adobe.com/products/premiere/]&lt;br /&gt;
** &#039;&#039;&#039;Avid Media Composer&#039;&#039;&#039; - Professional grade video editing software [http://www.avid.com/products/index.asp]&lt;br /&gt;
** &#039;&#039;&#039;Pinnacle Studio&#039;&#039;&#039; - Consumer grade video editing software from Avid [http://www.pinnaclesys.com]&lt;br /&gt;
** &#039;&#039;&#039;Sony Vegas&#039;&#039;&#039; - Editing software featuring comprehensive audio manipulation capabilities [http://www.sonycreativesoftware.com/products/vegasfamily.asp]&lt;br /&gt;
&lt;br /&gt;
===Plug-ins===&lt;br /&gt;
* &#039;&#039;&#039;Detailed listing of plug-ins by host application&#039;&#039;&#039; [http://www.toolfarm.com/plugins/]&lt;br /&gt;
* &#039;&#039;&#039;Antonino Perricone&#039;s Luce&#039;&#039;&#039; (AE/PPRO) Free light ray effects plugin for After Effects and Premiere [http://amicoperry.altervista.org/luce/index.html]&lt;br /&gt;
* &#039;&#039;&#039;Digieffects&#039;&#039;&#039; (AE/FCP/PPRO) Simulation and manipulation plugins [http://www.digieffects.com/]&lt;br /&gt;
* &#039;&#039;&#039;Magic Bullet Instant HD&#039;&#039;&#039; (AE/FCP/PPRO) Upscales SD footage to HD and improves the clarity of low resolution footage [http://www.redgiantsoftware.com/products/categories/enhancement/magic-bullet-instant-hd/]&lt;br /&gt;
* &#039;&#039;&#039;Magic Bullet Looks&#039;&#039;&#039; (AE/AVID/FCP/PPRO/VEGAS) Professional film emulation and color grading software [http://www.redgiantsoftware.com/products/categories/color-correction/magic-bullet-looks/]&lt;br /&gt;
* &#039;&#039;&#039;NewBlueFX&#039;&#039;&#039; (AE/AVID/FCP/PPRO/VEGAS) Effects, transition and film emulation plugin packs [http://www.newbluefx.com/]&lt;br /&gt;
&lt;br /&gt;
===Supplemental Software===&lt;br /&gt;
* &#039;&#039;&#039;List of screencasting software&#039;&#039;&#039; [http://en.wikipedia.org/wiki/List_of_screencasting_software]&lt;br /&gt;
* &#039;&#039;&#039;Adobe After Effects&#039;&#039;&#039; - Post processing software and base for a wide array of video plug-ins (Windows, Mac) [http://www.adobe.com/products/aftereffects/]&lt;br /&gt;
* &#039;&#039;&#039;Audacity&#039;&#039;&#039; - Free sound editing software (Windows, Mac, and Linux) [http://sourceforge.net/projects/audacity/]&lt;br /&gt;
* &#039;&#039;&#039;Blender&#039;&#039;&#039; includes a video editor [http://wiki.blender.org/index.php/Manual/Video_Sequence_Editing] and compositing system [http://wiki.blender.org/index.php/Manual/Compositing] for special effects. Free download for Windows, Linux, and Mac OS. [http://www.blender.org/]&lt;br /&gt;
* &#039;&#039;&#039;FXhome&#039;&#039;&#039; - Creators of &#039;&#039;&#039;EffectsLab&#039;&#039;&#039; [http://fxhome.com/effectslab] and &#039;&#039;&#039;VisionLab&#039;&#039;&#039; [http://fxhome.com/visionlab] software for post processed effects [http://fxhome.com]&lt;br /&gt;
* &#039;&#039;&#039;Kuler&#039;&#039;&#039; - A free web based application for creating and sampling color schemes for image and video work.  Kuler can be employed to identify complimentary colors as a precursor to color grading. [http://kuler.adobe.com/]&lt;br /&gt;
* &#039;&#039;&#039;particleIllusion&#039;&#039;&#039; - Particle visual effects software [http://www.wondertouch.com/]&lt;br /&gt;
* &#039;&#039;&#039;Reallusion&#039;&#039;&#039; - Makers of &#039;&#039;&#039;CrazyTalk&#039;&#039;&#039; [http://crazytalk.reallusion.com/] and &#039;&#039;&#039;iClone&#039;&#039;&#039; [http://iclone.reallusion.com/], which can be used in post-processing to refine machinima. [http://www.reallusion.com/]&lt;br /&gt;
&lt;br /&gt;
==Equipment==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;3DConnexion Space Navigator&#039;&#039;&#039; - An orb that is used in conjunction with the [[Flycam|&#039;&#039;&#039;Joystick Flycam&#039;&#039;&#039;]] function in Second Life for smooth shots.  It retails for about 60 USD. [http://www.3dconnexion.com/products/spacenavigator.html]&lt;br /&gt;
* &#039;&#039;&#039;Alt-Zoom Camera&#039;&#039;&#039; - A free camera designed to create dolly shots.  You can find it in Lukanida. (&#039;&#039;BuhBuhCuh Fairchild&#039;&#039;) [http://slurl.com/secondlife/Lukanida/10/18/24]&lt;br /&gt;
* &#039;&#039;&#039;Bijocam&#039;&#039;&#039; - Fixed angle cameras for when you need to do timelapse machinima.(&#039;&#039;Yumi Murakami&#039;&#039;) [http://slurl.com/secondlife/Bethselamin/163/103/24]&lt;br /&gt;
* &#039;&#039;&#039;Cam Voyager&#039;&#039;&#039; - A camera control hud that lets you use the keyboard to move your camera around freely, now with the ability to save camera positions and return to them later, as well as the ability to enter in coordinates manually. (&#039;&#039;Cerra Wilder&#039;&#039;) [http://slurl.com/secondlife/Homewood/43/209/22]&lt;br /&gt;
* &#039;&#039;&#039;Filming Path&#039;&#039;&#039; - the machinimator&#039;s universal tool - HUD for creating camera movement paths and more, very helpful (&#039;&#039;Geuis Dassin &amp;amp; Nand Nerd&#039;&#039;) [http://slurl.com/secondlife/Mortons%20Gully/205/27/35]&lt;br /&gt;
* &#039;&#039;&#039;Illumine Professional Lighting&#039;&#039;&#039; - talent wears the Illumine Pro.  You control the intensity, color, and position of the lighting on that talent.  Learn more about and obtain the Illumine Pro via the profile picks for its creator, Illumine Demina. (&#039;&#039;Illumine Demina&#039;&#039;) [http://world.secondlife.com/resident/ab445cf9-64cd-4d5b-be1e-b402d6ca7552]&lt;br /&gt;
* &#039;&#039;&#039;MachinimaCam HUD &#039;&#039;&#039; - An avatar centric scripted camera that operates without any visible interface. Avaliable through SLX, OnRez or inworld. (&#039;&#039;CodeBastard Redgrave&#039;&#039;) [http://codebastard.com/machinimacam/]&lt;br /&gt;
* [http://www.eml-entertainments.com/silverstreamtechnology.html Silver Stream Network] media system that breaks the &#039;one movie per parcel myth&#039;. A fully functional media solution that includes a open playlist in each player/screen combination unit. A single server on a Sim, can support upto 30+ screen/player units, irrespective of parceling or land ownership.&lt;br /&gt;
&lt;br /&gt;
==Events==&lt;br /&gt;
&lt;br /&gt;
* [http://www.tube2sl.com Tube2SL, dead link] - Regular weekly film trivia contests, DJ hosted parties, live musicians and other quality entertainment. Search the events calender inworld for Tube2SL.&lt;br /&gt;
&lt;br /&gt;
== Tutorials ==&lt;br /&gt;
* &amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;&#039;&#039;&#039;[[Movie_help|Torley&#039;s Guide to Making Movies!]]&#039;&#039;&#039;&amp;lt;/font&amp;gt; - &#039;&#039;&#039;&amp;lt;font color=#ff0080&amp;gt;FEATURED!&amp;lt;/font&amp;gt;&#039;&#039;&#039; &#039;&#039;Get started quickly with machinima!&#039;&#039; Years of experience distilled into a fun guide with video tutorials.&lt;br /&gt;
* &#039;&#039;&#039;How to use the Alt-Zoom Camera&#039;&#039;&#039; - A quick tutorial designed to show you how to set up and configure your camera. [http://www.youtube.com/watch?v=uVzow1-Yh-w]&lt;br /&gt;
* &#039;&#039;&#039;How to turn off the UI&#039;&#039;&#039; - Please note that the hotkey has changed to CTRL+ALT+F1! [http://www.youtube.com/watch?v=NBsAvRA_dqM]&lt;br /&gt;
* &#039;&#039;&#039;How to use the Second Life camera controls&#039;&#039;&#039; - Part of the Noob Be Gone series [http://www.youtube.com/watch?v=2LMcryDCIYk]&lt;br /&gt;
* &#039;&#039;&#039;How to do machinima on a Mac&#039;&#039;&#039; - An informative look at how Mac users are able to capture and encode machinima [http://aeneaideas.wordpress.com/2006/12/02/machinima-in-sl-on-mac-os-x-a-tutorial/]&lt;br /&gt;
* &#039;&#039;&#039;How to use the MachinimaCam HUD&#039;&#039;&#039; - Complete and detailed instructions on how to setup and operate the MachinimaCam HUD. Includes tips and tricks for making machinima. [http://codebastard.com/machinimacam/]&lt;br /&gt;
* &#039;&#039;&#039;Alt-Zoom camera tutorial by Nimrod&#039;&#039;&#039; - Another tutorial made by Nimrod to show you the basics of the Alt-Zoom camera. [http://www.youtube.com/watch?v=SaRDBIektN8]&lt;br /&gt;
* &#039;&#039;&#039;BASICS: Looking around with camera controls&#039;&#039;&#039; - By Torley Linden.&lt;br /&gt;
&amp;lt;p&amp;gt;{{#widget:Vimeo|id=4167140|width=640|height=480}}&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Tips and Tricks==&lt;br /&gt;
* Using the &#039;&#039;&#039;&#039;Ken Burns&#039;&#039;&#039;&#039; movement/panning and cropping animations technique and adding &#039;atmospherics&#039; to your movies using lighting effects masks [http://forums.secondlife.com/showthread.php?t=212641 Forum Link]&lt;br /&gt;
&lt;br /&gt;
* See Torley Linden&#039;s page on [[Voice recording]]&lt;br /&gt;
&lt;br /&gt;
* Tutorial making a film in SL (german) [http://slinside.com/index.php?option=com_fireboard&amp;amp;Itemid=338&amp;amp;func=view&amp;amp;id=141429&amp;amp;catid=11 SLinside Forum Link]&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Groups:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Tube2SL.com&#039;&#039;&#039; - A growing Second Life Machinima community based around the &#039;&#039;&#039;Tube2SL&#039;&#039;&#039; Island sim of [http://slurl.com/secondlife/Gateway/172/106/24 Gateway]. Film projects, opportunities, contests and events will be publicised via group notice.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Tube2SL Actors Guild&#039;&#039;&#039; - A group for those interested in acting and voice acting in [http://www.tube2sl.com &#039;&#039;&#039;Tube2SL.com&#039;&#039;&#039;] machinima productions.  &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Second Life Film Society&#039;&#039;&#039; - This group exists to explore new ways of using Second Life to create film (machinima).  We will also explore streaming live video from SL to the web as well as from SL to other locations in SL (SLTV). The Revolution Must Be Televised!&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;&#039;Machinima Institute&#039;&#039;&#039; group is for anyone interested in sharing tips or answering questions from people getting started creating machinima.  Pick up a box of introductory instructional slides on machinima workflow  and camera controls at Library Studios Island [http://slurl.com/secondlife/Library%20Studios/32/43/23]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SL Machinima, Building, and Design&#039;&#039;&#039; - This group is made up of real life video, audio, and design artists/producers. We have united to push the limits in second Media. The SLMBD uses the most modern tools when it come to SL and RL. We specialize in Machinima (sl video), sim construction, custom graphics, and about anything else SL media/design related.--If you wish to join, you must be hard working, creative, and experenced (note: entrance fee!)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Machinimatographers of Second Life Mailing List&#039;&#039;&#039; - A mailing list to keep interested individuals alerted to machinima (machine animation) opportunities, features, advice, software, and events in Second Life. You will find new colleagues and filming locations to aide you in filming. Read more about our unique machinima opportunities by subscribing to the list [https://lists.secondlife.com/cgi-bin/mailman/listinfo/machinima here].&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Locations and props:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Tube2SL Island&#039;&#039;&#039; - The island of [http://slurl.com/secondlife/Gateway/172/106/24 Gateway] is the home to the Tube2SL Cinema Complex and Machinima Recording Studios. Broadcast your videos in our 8 screen cinema complex via our website [http://www.tube2sl.com &#039;&#039;&#039;www.tube2sl.com&#039;&#039;&#039;]. FREE use the Tube2SL Cinema Complex for your videos launch party. Contact [[User: SL Loonie | &#039;&#039;&#039;SL Loonie&#039;&#039;&#039;]] for more information.&lt;br /&gt;
* &#039;&#039;&#039;Movix - Movie and Music production&#039;&#039;&#039; - Their entire sim is being designed as a complete machinima studio. This is based on the real world model with various street and interior sets. They have shops for Costumes, Props, Vehicles, a sandbox plus everything else you need to make your movie.  You can show your film in their cinema (hosting extra if needed) or maybe even run a film festival. The Studio is free to book exclusively for your production ensuring lag free, uninterupted shooting. [http://slurl.com/secondlife/Movix%20Media/123/116/25]&lt;br /&gt;
* &#039;&#039;&#039;Alt-Zoom Theater and Sandbox&#039;&#039;&#039; - The island of Lukanida is home to Alt-Zoom Studios and an entire sim dedicated to building and filming your custom content for machinima purposes. [http://slurl.com/secondlife/Lukanida/11/12/24]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Video Hosting Sites:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;blip.tv&#039;&#039;&#039; - Free site that allows you to upload a movie file of unlimited size and in as many formats as you&#039;d like.  It compresses the first upload into a handy flash file for posting on the web, but also keeps the original file intact.  If you upload a Quicktime movie, you are able to use it in parcel media for in-world viewing. The blip.tv pro account allows you to hide or password protect your videos and also allows for simultaneous uploading to the Internet Archive, as well as making your video available in additional formats for video and audio. [http://blip.tv]&lt;br /&gt;
*&#039;&#039;&#039;JumpCut&#039;&#039;&#039; - Free site that allows you to upload movies and edit them online you will them be able to publish the videos on the website for other users to watch. Media on JumpCut remains on Jumpcut and cannot be streamed into Second Life.[http://jumpcut.com]&lt;br /&gt;
*[http://www.tube2sl.com &#039;&#039;&#039;Tube2SL&#039;&#039;&#039;] - An online broadcasting option that allows you to upload a .mov of 20mb or less for free posting on the site. You can then book your video for scheduled broadcasting throughout Second Life on our network of Resident owned TV&#039;s, Public Media Broadcasting Booths and the Tube2SL Cinema Complex. Get your &#039;&#039;&#039;FREE Tube2SL TV&#039;&#039;&#039; from the [http://slurl.com/secondlife/Gateway/172/106/24 Tube2SL Island]&lt;br /&gt;
*&#039;&#039;&#039;Vimeo&#039;&#039;&#039; [http://vimeo.com/]&lt;br /&gt;
*&#039;&#039;&#039;YouTube&#039;&#039;&#039; - An online hosting option that allows you to upload a movie in any format and it will then convert it to a flash file for posting on a site. [http://youtube.com]&lt;br /&gt;
&lt;br /&gt;
==Unassigned bugs in JIRA that pain==&lt;br /&gt;
* VWR-15876: Machinima Improvement Issues (meta-issue) [https://jira.secondlife.com/browse/VWR-15876]&lt;br /&gt;
* VWR-2387: Animations always drift when uploading with an inner loop of anything except 0% - 100% [https://jira.secondlife.com/browse/VWR-2387]&lt;br /&gt;
* VWR-1793: Hand Poses Not Uploaded Correctly [https://jira.secondlife.com/browse/VWR-1793]&lt;br /&gt;
* VWR-4232: Some particles don&#039;t disappear when UI is hidden [https://jira.secondlife.com/browse/VWR-4232]&lt;br /&gt;
* VWR-8726: Turn off swirling lights for scripted objects [https://jira.secondlife.com/browse/VWR-8726]&lt;br /&gt;
[[Category:Machinima]] [[Category:Creation]]&lt;/div&gt;</summary>
		<author><name>CodeBastard Redgrave</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=ZZText&amp;diff=345762</id>
		<title>ZZText</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=ZZText&amp;diff=345762"/>
		<updated>2009-05-05T02:36:40Z</updated>

		<summary type="html">&lt;p&gt;CodeBastard Redgrave: /* So how can I use it? */  - Correction: replaced &amp;quot;llLinkedMessage&amp;quot; but the proper LSL function, llMessageLinked&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is it ==&lt;br /&gt;
&lt;br /&gt;
Scripting tools to allow display of text on a prim: [[XyText 1.5]] (aka XyText) , [[XyzzyText]], [[XyyyyzText]], [[XyzzyText-UTF8]], [[ZZText]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ZZText&#039;&#039;&#039; is a low-prim, low-lag, international variation of [[XyText]] with the following features:&lt;br /&gt;
* can be enhanced with new fonts or UTF-8 characters using GIMP and python-fu.&lt;br /&gt;
* uses only 35 textures instead of 66 for the 10 chars on prim solution (this gives a bit less quality then the original xytext, but under normal situations is acceptable.&lt;br /&gt;
&lt;br /&gt;
Rationale: if you have problems with prim usage, then you can accept this compromise.&lt;br /&gt;
&lt;br /&gt;
* this particular combination of textures gives something way more rapid than [[XyzzyText]], which is very slow for big boards, and less lagger than [[XyText]].&lt;br /&gt;
* small warning: there is still some slight improvements for this zzText to be reasonably acceptable (consider it in a Beta stage), will post soon when it will be fully acceptable.&lt;br /&gt;
&lt;br /&gt;
== Credits and copyright ==&lt;br /&gt;
ZZText is heavily dependent on [[XyText]] so it shares and extends credits and copyrights.&lt;br /&gt;
&lt;br /&gt;
Also this is a low prim variation of the [[XyzzyText-UTF8]] page but downgraded to use XyText lower quality paradigm instead than the 1 character face approach.&lt;br /&gt;
&lt;br /&gt;
== How to generate the textures ==&lt;br /&gt;
&lt;br /&gt;
* You need to have GIMP 2.0 with python-fu extension installed&lt;br /&gt;
* Use the mega-image maker python-fu script (see following sections)&lt;br /&gt;
* Use the splitter python-fu script to produce 512x512 guides for later splitting&lt;br /&gt;
* Use the filter/web/slice... button to produce 64 slices in png format to retain transparence (from 0-0 to 7-7)&lt;br /&gt;
* Manually remove the empty slices (the i-j where j&amp;gt;i for instance 2-3, 6-7) so you have only 35 images png.&lt;br /&gt;
* Manually convert each png to tga (this is solving some problems with sl uploading regarding transparence)&lt;br /&gt;
* Upload the textures keeping the order 0-0 1-0 1-1 2-0 2-1 2-3 .... until 7-7)&lt;br /&gt;
&lt;br /&gt;
Manual parts can be automated by another python-fu, but I was so exhausted with the others that it was ok for me doing manually :)&lt;br /&gt;
&lt;br /&gt;
There is still some fix needed to do on the python-fu script. Currently characters are still a bit unevenly put so that when displaying them&lt;br /&gt;
depending on which couple using we might see some slight asymmetric unbalancing. You can note this only when looking very closely to the chars.&lt;br /&gt;
Whenever I fix myself this problem I will post here.&lt;br /&gt;
&lt;br /&gt;
For those of you who already accept fonts I did last week, look at next sections for the 35 texture UUIDs:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== So how can I use it? ==&lt;br /&gt;
&lt;br /&gt;
* Put the script named ZZText into each prim of your board naming each cell 1000 ---- 1099 as far as you need cells&lt;br /&gt;
* Have a main script doing the following: llMessageLinked(LINK_SET,1040,&amp;quot;çòàùè&amp;quot;,NULL_KEY) to write on cell named 1040&lt;br /&gt;
&lt;br /&gt;
To divide in rows, use simple modulus operations.&lt;br /&gt;
&lt;br /&gt;
== Variation on [[XyText 1.5]] standard script ==&lt;br /&gt;
&lt;br /&gt;
For not being so difficult to follow, I only publish differences between my script and [[XyText 1.5]] so that you might be able to understand better what I did:&lt;br /&gt;
=== Change CHARACTER_GRID with our full permission textures ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
list    CHARACTER_GRID  = [&lt;br /&gt;
        &amp;quot;96f4578b-879e-44ae-d223-427cc615f5a4&amp;quot;, // my slice-0-0&lt;br /&gt;
        &amp;quot;eab5360f-6653-593f-b679-69c68b0dd001&amp;quot;, // 1-0&lt;br /&gt;
        &amp;quot;367330be-717a-277d-5205-131cd6ded458&amp;quot;, // 1-1&lt;br /&gt;
        &amp;quot;32046675-6e7e-2425-ce77-69000b0b4d96&amp;quot;, // 2-0&lt;br /&gt;
        &amp;quot;40085901-bde6-2dd4-40cd-b6d48d242997&amp;quot;, // 2-1&lt;br /&gt;
        &amp;quot;205d318b-09b7-7ecc-922e-801c93a546c8&amp;quot;, // 2-2&lt;br /&gt;
        &amp;quot;841e7826-3645-d4f0-d48b-389586dd8e90&amp;quot;, // 3-0&lt;br /&gt;
        &amp;quot;e2db78c5-fb47-d767-4744-8cb6d84610d0&amp;quot;, // 3-1&lt;br /&gt;
        &amp;quot;15312c89-afd4-854c-9d9b-5b9e11844aed&amp;quot;, // 3-2&lt;br /&gt;
        &amp;quot;d180e771-0393-d09b-8cac-0af6d550ae4a&amp;quot;, // 3-3&lt;br /&gt;
        &amp;quot;c6c1d2c8-5dfd-b13a-7f1e-c3ede8126769&amp;quot;, // 4-0&lt;br /&gt;
        &amp;quot;bc100d0c-a445-947f-caa4-285d9cc8a9de&amp;quot;, // 4-1&lt;br /&gt;
        &amp;quot;0b31e862-75a4-9ed3-6331-e9e700a0fedb&amp;quot;, // 4-2&lt;br /&gt;
        &amp;quot;0eacc306-6bd5-ab31-de47-c686141a6733&amp;quot;, // 4-3&lt;br /&gt;
        &amp;quot;b68de1d9-4890-74a0-4d25-d4d5c83a0dba&amp;quot;, // 4-4&lt;br /&gt;
        &amp;quot;04b2bf9b-a8bb-0a39-1062-9b005229eba9&amp;quot;, // 5-0&lt;br /&gt;
        &amp;quot;be293f10-25ec-beb9-738b-fe1892b82aef&amp;quot;, // 5-1&lt;br /&gt;
        &amp;quot;5e9c8317-71f5-f073-76ab-7c412d3acb84&amp;quot;, // 5-2&lt;br /&gt;
        &amp;quot;030b441b-9022-2aba-f7a7-af6810c354b8&amp;quot;, // 5-3&lt;br /&gt;
        &amp;quot;9f455858-8ae6-3a9a-c2d4-bc5ee92430ac&amp;quot;, // 5-4&lt;br /&gt;
        &amp;quot;ee741143-f01e-f730-667e-66a3cd57d1cc&amp;quot;, // 5-5&lt;br /&gt;
        &amp;quot;710282bc-bd80-5a44-6987-0c4c11a4c294&amp;quot;, // 6-0&lt;br /&gt;
        &amp;quot;c9c410db-675a-1e98-4107-debd3c73a754&amp;quot;, // 6-1&lt;br /&gt;
        &amp;quot;486c2336-71c5-b962-266c-838a865c067c&amp;quot;, // 6-2&lt;br /&gt;
        &amp;quot;d4722155-0b6d-3673-0208-a727729bc117&amp;quot;, // 6-3&lt;br /&gt;
        &amp;quot;bc7af3cd-ee48-08df-fe8b-a6ca8a425733&amp;quot;, // 6-4&lt;br /&gt;
        &amp;quot;f23d7a73-00c3-1ffd-69a7-0cca031c939d&amp;quot;, // 6-5&lt;br /&gt;
        &amp;quot;aa95bfd1-ac80-f962-7acf-d6aeed9c7e81&amp;quot;, // 6-6&lt;br /&gt;
        &amp;quot;53fd52e3-0e8b-dcc8-42f8-332aef421bd2&amp;quot;, // 7-0&lt;br /&gt;
        &amp;quot;da3f6f09-3e3a-e156-8e2e-1040111a5635&amp;quot;, // 7-1&lt;br /&gt;
        &amp;quot;409a95c0-b685-2036-d0de-75e8ab654243&amp;quot;, // 7-2&lt;br /&gt;
        &amp;quot;14e05aca-3a61-b892-3632-dcde72324779&amp;quot;, // 7-3&lt;br /&gt;
        &amp;quot;546c0e4f-b678-895d-2035-0f39bb7f4979&amp;quot;, // 7-4&lt;br /&gt;
        &amp;quot;cf2fc337-109f-ba25-8ff5-786f7d6ceb5b&amp;quot;, // 7-5&lt;br /&gt;
        &amp;quot;9943204b-a4de-868a-3cdd-8785d1864ede&amp;quot;, // 7-6&lt;br /&gt;
        &amp;quot;765cfd9c-9703-b5ba-2c5d-f1c8bd44e0f4&amp;quot;  // 7-7&lt;br /&gt;
          ];&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Enabling answering to only a specific channel instead of DISPLAY_STRING channel ===&lt;br /&gt;
This heavily helps in producing multi cell boards:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
integer ME;&lt;br /&gt;
....&lt;br /&gt;
state_entry(){&lt;br /&gt;
....&lt;br /&gt;
 ME=(integer)llGetObjectName(); // need that each cell has its own number as object name starting from 1000 for instance&lt;br /&gt;
....&lt;br /&gt;
// be sure we are answering only to channel ME&lt;br /&gt;
link_message(integer sender, integer channel, string data, key id) {&lt;br /&gt;
        if (channel == (ME) {&lt;br /&gt;
            RenderString(data);&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UTF-8 character specification ===&lt;br /&gt;
This must closely match what you produced with python-fu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ResetCharIndex() {&lt;br /&gt;
    gCharIndex  = &amp;quot; !\&amp;quot;#$%&amp;amp;&#039;()*+,-./0123456789:;&amp;lt;=&amp;gt;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`&amp;quot;;&lt;br /&gt;
    // \&amp;quot; &amp;lt;-- Fixes LSL syntax highlighting bug.&lt;br /&gt;
    gCharIndex += &amp;quot;abcdefghijklmnopqrstuvwxyz{|}~&amp;quot;;&lt;br /&gt;
  //        cap cedille      u:         e/            a^         a:          a/         a ring      cedille     e^           e:&lt;br /&gt;
  decode=  [&amp;quot;%C3%87&amp;quot;, &amp;quot;%C3%BC&amp;quot;, &amp;quot;%C3%A9&amp;quot;, &amp;quot;%C3%A2&amp;quot;, &amp;quot;%C3%A4&amp;quot;, &amp;quot;%C3%A0&amp;quot;, &amp;quot;%C3%A5&amp;quot;, &amp;quot;%C3%A7&amp;quot;, &amp;quot;%C3%AA&amp;quot;, &amp;quot;%C3%AB&amp;quot;,&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  //                    e\           i:               i^            i\                A:          A ring          E/              ae           AE           marker &amp;gt;&lt;br /&gt;
       &amp;quot;%C3%A8&amp;quot;, &amp;quot;%C3%AF&amp;quot;, &amp;quot;%C3%AE&amp;quot;, &amp;quot;%C3%AC&amp;quot;, &amp;quot;%C3%84&amp;quot;, &amp;quot;%C3%85&amp;quot;, &amp;quot;%C3%89&amp;quot;, &amp;quot;%C3%A6&amp;quot;, &amp;quot;%C3%86&amp;quot;, &amp;quot;%E2%96%B6&amp;quot; ,&lt;br /&gt;
&lt;br /&gt;
  //                 o:               o/           u^          u\              y:               O:             U:          cent           pound        yen&lt;br /&gt;
       &amp;quot;%C3%B6&amp;quot;, &amp;quot;%C3%B2&amp;quot;, &amp;quot;%C3%BB&amp;quot;, &amp;quot;%C3%B9&amp;quot;, &amp;quot;%C3%BF&amp;quot;, &amp;quot;%C3%96&amp;quot;, &amp;quot;%C3%9C&amp;quot;, &amp;quot;%C2%A2&amp;quot;, &amp;quot;%C2%A3&amp;quot;, &amp;quot;%C2%A5&amp;quot;,&lt;br /&gt;
   &lt;br /&gt;
  //                 A^              a/              i/                o/            u/              n~           E:            y/              inv ?         O^&lt;br /&gt;
       &amp;quot;%C3%82&amp;quot;, &amp;quot;%C3%A1&amp;quot;, &amp;quot;%C3%AD&amp;quot;, &amp;quot;%C3%B3&amp;quot;, &amp;quot;%C3%BA&amp;quot;, &amp;quot;%C3%B1&amp;quot;, &amp;quot;%C3%8B&amp;quot;, &amp;quot;%C3%BD&amp;quot;, &amp;quot;%C2%BF&amp;quot;, &amp;quot;%C3%94&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  //                   inv !             I\             I/           degree       E^              I^            o^            U^&lt;br /&gt;
       &amp;quot;%C2%A1&amp;quot;, &amp;quot;%C3%8C&amp;quot;, &amp;quot;%C3%8D&amp;quot;, &amp;quot;%C2%B0&amp;quot;, &amp;quot;%C3%8A&amp;quot;, &amp;quot;%C3%8E&amp;quot;, &amp;quot;%C3%B4&amp;quot;, &amp;quot;%C3%9B&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  //                     Y:          euro           german ss         E\              A\           A/              U\           U/               O\           O/&lt;br /&gt;
       &amp;quot;%C3%9D&amp;quot;, &amp;quot;%E2%82%AC&amp;quot;, &amp;quot;%C3%9F&amp;quot;, &amp;quot;%C3%88&amp;quot;, &amp;quot;%C3%80&amp;quot;, &amp;quot;%C3%81&amp;quot;, &amp;quot;%C3%99&amp;quot;, &amp;quot;%C3%9A&amp;quot;, &amp;quot;%C3%92&amp;quot;, &amp;quot;%C3%93&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  //                   Sv           sv             zv             Zv              Y:             I:&lt;br /&gt;
       &amp;quot;%C5%A0&amp;quot;, &amp;quot;%C5%A1&amp;quot;, &amp;quot;%C5%BE&amp;quot;, &amp;quot;%C5%BD&amp;quot;, &amp;quot;%C3%9D&amp;quot;, &amp;quot;%C3%8C&amp;quot; ];&lt;br /&gt;
     &lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Accessing the new characters from textures ===&lt;br /&gt;
This is the most difficult part. Still need to clean up offsets, since now they are still a bit wrong.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vector GetGridOffset(vector grid_pos) {&lt;br /&gt;
    // Zoom in on the texture showing our character pair.&lt;br /&gt;
    integer Col = llRound(grid_pos.x) % 40; // PK was 20&lt;br /&gt;
    integer Row = llRound(grid_pos.y) % 20; // PK was 10&lt;br /&gt;
&lt;br /&gt;
    // Return the offset in the texture.&lt;br /&gt;
    return &amp;lt;-0.45 + 0.025 * Col, 0.45 - 0.05 * Row, 0.0&amp;gt;; // PK was 0.05 and 0.1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ShowChars(vector grid_pos1, vector grid_pos2, vector grid_pos3, vector grid_pos4, vector grid_pos5) {&lt;br /&gt;
   // Set the primitive textures directly.&lt;br /&gt;
     &lt;br /&gt;
               &lt;br /&gt;
   llSetPrimitiveParams( [&lt;br /&gt;
        PRIM_TEXTURE, FACE_1, GetGridTexture(grid_pos1), &amp;lt;0.125, 0.05, 0&amp;gt;, GetGridOffset(grid_pos1) + &amp;lt;0.0375-0.025-0.002, 0.025, 0&amp;gt;, 0.0,&lt;br /&gt;
        PRIM_TEXTURE, FACE_2, GetGridTexture(grid_pos2), &amp;lt;0.05, 0.05, 0&amp;gt;, GetGridOffset(grid_pos2)+&amp;lt;-0.025-0.002, 0.025,0&amp;gt;, 0.0,&lt;br /&gt;
        PRIM_TEXTURE, FACE_3, GetGridTexture(grid_pos3), &amp;lt;-0.74, 0.05, 0&amp;gt;, GetGridOffset(grid_pos3)+ &amp;lt;-.34-0.002, 0.025, 0&amp;gt;, 0.0,&lt;br /&gt;
        PRIM_TEXTURE, FACE_4, GetGridTexture(grid_pos4), &amp;lt;0.05, 0.05, 0&amp;gt;, GetGridOffset(grid_pos4)+&amp;lt;-0.025-0.002, 0.025,0&amp;gt;, 0.0,&lt;br /&gt;
        PRIM_TEXTURE, FACE_5, GetGridTexture(grid_pos5), &amp;lt;0.125, 0.05, 0&amp;gt;, GetGridOffset(grid_pos5) + &amp;lt;0.0375-0.025-0.077-0.002, 0.025, 0&amp;gt;, 0.0&lt;br /&gt;
//        PRIM_TEXTURE, FACE_1, GetGridTexture(grid_pos1), &amp;lt;0.25, 0.1, 0&amp;gt;, GetGridOffset(grid_pos1) + &amp;lt;0.075, 0, 0&amp;gt;, 0.0,&lt;br /&gt;
//        PRIM_TEXTURE, FACE_2, GetGridTexture(grid_pos2), &amp;lt;0.1, 0.1, 0&amp;gt;, GetGridOffset(grid_pos2), 0.0,&lt;br /&gt;
//        PRIM_TEXTURE, FACE_3, GetGridTexture(grid_pos3), &amp;lt;-1.48, 0.1, 0&amp;gt;, GetGridOffset(grid_pos3)+ &amp;lt;0.37, 0, 0&amp;gt;, 0.0,&lt;br /&gt;
//        PRIM_TEXTURE, FACE_4, GetGridTexture(grid_pos4), &amp;lt;0.1, 0.1, 0&amp;gt;, GetGridOffset(grid_pos4), 0.0,&lt;br /&gt;
//        PRIM_TEXTURE, FACE_5, GetGridTexture(grid_pos5), &amp;lt;0.25, 0.1, 0&amp;gt;, GetGridOffset(grid_pos5) - &amp;lt;0.075, 0, 0&amp;gt;, 0.0&lt;br /&gt;
        &lt;br /&gt;
        ]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
integer GetIndex(string char)&lt;br /&gt;
{&lt;br /&gt;
    integer  ret=llSubStringIndex(gCharIndex, char);&lt;br /&gt;
    if(ret&amp;gt;=0) return ret;&lt;br /&gt;
    &lt;br /&gt;
    // special char do nice trick :)&lt;br /&gt;
    string escaped=llEscapeURL(char);&lt;br /&gt;
    &lt;br /&gt;
    if(escaped==&amp;quot;%E2%80%99&amp;quot;) return 7; // remap ’&lt;br /&gt;
    //llSay(0,&amp;quot;Looking for &amp;quot;+escaped);&lt;br /&gt;
    integer found=llListFindList(decode, [escaped]);&lt;br /&gt;
    &lt;br /&gt;
    // not found&lt;br /&gt;
    if(found&amp;lt;0) return 0;&lt;br /&gt;
    &lt;br /&gt;
    // return correct index&lt;br /&gt;
    return llStringLength(gCharIndex)+found;&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
RenderString(string str) {&lt;br /&gt;
    // Get the grid positions for each pair of characters.&lt;br /&gt;
    vector GridPos1 = GetGridPos( GetIndex(llGetSubString(str, 0, 0)),&lt;br /&gt;
                                  GetIndex(llGetSubString(str, 1, 1)) );&lt;br /&gt;
    vector GridPos2 = GetGridPos( GetIndex(llGetSubString(str, 2, 2)),&lt;br /&gt;
                                  GetIndex(llGetSubString(str, 3, 3)) );&lt;br /&gt;
    vector GridPos3 = GetGridPos( GetIndex(llGetSubString(str, 4, 4)),&lt;br /&gt;
                                  GetIndex(llGetSubString(str, 5, 5)) );&lt;br /&gt;
    vector GridPos4 = GetGridPos( GetIndex(llGetSubString(str, 6, 6)),&lt;br /&gt;
                                  GetIndex(llGetSubString(str, 7, 7)) );&lt;br /&gt;
    vector GridPos5 = GetGridPos( GetIndex(llGetSubString(str, 8, 8)),&lt;br /&gt;
                                  GetIndex(llGetSubString(str, 9, 9)) );                                   &lt;br /&gt;
&lt;br /&gt;
    // Use these grid positions to display the correct textures/offsets.&lt;br /&gt;
    ShowChars(GridPos1, GridPos2, GridPos3, GridPos4, GridPos5);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Splitter python-fu script ==&lt;br /&gt;
Very simple just tell him the 512 splitting and it will create guides.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
&lt;br /&gt;
import math&lt;br /&gt;
from gimpfu import *&lt;br /&gt;
&lt;br /&gt;
def python_guides(timg, tdrawable, interval=100):&lt;br /&gt;
    timg.undo_group_start()&lt;br /&gt;
    x=0&lt;br /&gt;
    while x &amp;lt; timg.width:&lt;br /&gt;
       timg.add_vguide(x)&lt;br /&gt;
       x+=interval&lt;br /&gt;
       &lt;br /&gt;
    y=0&lt;br /&gt;
    while y &amp;lt; timg.height:&lt;br /&gt;
       timg.add_hguide(y)&lt;br /&gt;
       y+=interval&lt;br /&gt;
       &lt;br /&gt;
    timg.undo_group_end()&lt;br /&gt;
    &lt;br /&gt;
    gimp.displays_flush()&lt;br /&gt;
&lt;br /&gt;
register(&lt;br /&gt;
        &amp;quot;python_fu_guides&amp;quot;,&lt;br /&gt;
        &amp;quot;Guides: this will split the images in sections...&amp;quot;,&lt;br /&gt;
        &amp;quot;Guides: this will split the images in sections...&amp;quot;,&lt;br /&gt;
        &amp;quot;Salahzar Stenvaag&amp;quot;,&lt;br /&gt;
        &amp;quot; &amp;quot;,&lt;br /&gt;
        &amp;quot;2008&amp;quot;,&lt;br /&gt;
        &amp;quot;&amp;lt;Image&amp;gt;/Filters/Guides...&amp;quot;,&lt;br /&gt;
        &amp;quot;RGB*, GRAY*&amp;quot;,&lt;br /&gt;
        [&lt;br /&gt;
                (PF_INT, &amp;quot;interval&amp;quot;, &amp;quot;Interval&amp;quot;, 100)&lt;br /&gt;
        ],&lt;br /&gt;
        [],&lt;br /&gt;
        python_guides)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mega-image maker python-fu script ==&lt;br /&gt;
&lt;br /&gt;
If you need your characters you need to change the UTF-8 codings in &amp;quot;decode&amp;quot; var&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#! /usr/bin/env python&lt;br /&gt;
from gimpfu import *&lt;br /&gt;
&lt;br /&gt;
# you can remove logging, I used it to be sure program was working since it can be a bit slow &lt;br /&gt;
# to generate all the combination&lt;br /&gt;
def python_log_init():&lt;br /&gt;
    fileHandle = open( &#039;python.log&#039;, &#039;w&#039;)&lt;br /&gt;
    fileHandle.close()&lt;br /&gt;
    &lt;br /&gt;
def python_log(s):&lt;br /&gt;
    fileHandle = open ( &#039;python.log&#039;, &#039;a&#039; )&lt;br /&gt;
    fileHandle.write(str(s)+&amp;quot;\n&amp;quot;)&lt;br /&gt;
    fileHandle.close() &lt;br /&gt;
&lt;br /&gt;
def python_xytext2(font,color,size,limit):&lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;Print the arguments on standard output&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  python_log_init()&lt;br /&gt;
  python_log(&amp;quot;font: %s color: &amp;lt;%d,%d,%d&amp;gt; size: %d limit: %d&amp;quot; % ( font, color[0], color[1], color[2], size, limit ))&lt;br /&gt;
  chars = &amp;quot; !\&amp;quot;#$%&amp;amp;&#039;()*+,-./0123456789:;&amp;lt;=&amp;gt;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  # &lt;br /&gt;
  &lt;br /&gt;
  #        cap cedille      u:         e/            a^         a:          a/         a ring      cedille     e^           e:&lt;br /&gt;
  decode=  [&amp;quot;\xC3\x87&amp;quot;, &amp;quot;\xC3\xBC&amp;quot;, &amp;quot;\xC3\xA9&amp;quot;, &amp;quot;\xC3\xA2&amp;quot;, &amp;quot;\xC3\xA4&amp;quot;, &amp;quot;\xC3\xA0&amp;quot;, &amp;quot;\xC3\xA5&amp;quot;, &amp;quot;\xC3\xA7&amp;quot;, &amp;quot;\xC3\xAA&amp;quot;, &amp;quot;\xC3\xAB&amp;quot; ]  &lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  #                    e\           i:               i^            i\                A:          A ring          E/              ae           AE           marker &amp;gt;&lt;br /&gt;
  decode+=[&amp;quot;\xC3\xA8&amp;quot;, &amp;quot;\xC3\xAF&amp;quot;, &amp;quot;\xC3\xAE&amp;quot;, &amp;quot;\xC3\xAC&amp;quot;, &amp;quot;\xC3\x84&amp;quot;, &amp;quot;\xC3\x85&amp;quot;, &amp;quot;\xC3\x89&amp;quot;, &amp;quot;\xC3\xA6&amp;quot;, &amp;quot;\xC3\x86&amp;quot;, &amp;quot;\xE2\x96\xB6&amp;quot; ]&lt;br /&gt;
&lt;br /&gt;
  #                 o:               o/           u^          u\              y:               O:             U:          cent           pound        yen&lt;br /&gt;
  decode+=[&amp;quot;\xC3\xB6&amp;quot;, &amp;quot;\xC3\xB2&amp;quot;, &amp;quot;\xC3\xBB&amp;quot;, &amp;quot;\xC3\xB9&amp;quot;, &amp;quot;\xC3\xBF&amp;quot;, &amp;quot;\xC3\x96&amp;quot;, &amp;quot;\xC3\x9C&amp;quot;, &amp;quot;\xC2\xA2&amp;quot;, &amp;quot;\xC2\xA3&amp;quot;, &amp;quot;\xC2\xA5&amp;quot;]&lt;br /&gt;
   &lt;br /&gt;
  #                 A^              a/              i/                o/            u/              n~           E:            y/              inv ?         O^&lt;br /&gt;
  decode+=[&amp;quot;\xC3\x82&amp;quot;, &amp;quot;\xC3\xA1&amp;quot;, &amp;quot;\xC3\xAD&amp;quot;, &amp;quot;\xC3\xB3&amp;quot;, &amp;quot;\xC3\xBA&amp;quot;, &amp;quot;\xC3\xB1&amp;quot;, &amp;quot;\xC3\x8B&amp;quot;, &amp;quot;\xC3\xBD&amp;quot;, &amp;quot;\xC2\xBF&amp;quot;, &amp;quot;\xC3\x94&amp;quot; ] &lt;br /&gt;
&lt;br /&gt;
  #                   inv !             I\             I/           degree       E^              I^            o^            U^&lt;br /&gt;
  decode+=[&amp;quot;\xC2\xA1&amp;quot;, &amp;quot;\xC3\x8C&amp;quot;, &amp;quot;\xC3\x8D&amp;quot;, &amp;quot;\xC2\xB0&amp;quot;, &amp;quot;\xC3\x8A&amp;quot;, &amp;quot;\xC3\x8E&amp;quot;, &amp;quot;\xC3\xB4&amp;quot;, &amp;quot;\xC3\x9B&amp;quot; ]&lt;br /&gt;
&lt;br /&gt;
  #                     Y:          euro           german ss         E\              A\           A/              U\           U/               O\           O/&lt;br /&gt;
  decode+=[&amp;quot;\xC3\x9D&amp;quot;, &amp;quot;\xE2\x82\xAC&amp;quot;, &amp;quot;\xC3\x9F&amp;quot;, &amp;quot;\xC3\x88&amp;quot;, &amp;quot;\xC3\x80&amp;quot;, &amp;quot;\xC3\x81&amp;quot;, &amp;quot;\xC3\x99&amp;quot;, &amp;quot;\xC3\x9A&amp;quot;, &amp;quot;\xC3\x92&amp;quot;, &amp;quot;\xC3\x93&amp;quot;   ]                  &lt;br /&gt;
&lt;br /&gt;
  #                   Sv           sv             zv             Zv              Y:             I:&lt;br /&gt;
  decode+=[ &amp;quot;\xC5\xA0&amp;quot;, &amp;quot;\xC5\xA1&amp;quot;, &amp;quot;\xC5\xBE&amp;quot;, &amp;quot;\xC5\xBD&amp;quot;, &amp;quot;\xC3\x9D&amp;quot;, &amp;quot;\xC3\x8C&amp;quot; ]&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
  width=5120&lt;br /&gt;
  height=5120&lt;br /&gt;
  img = gimp.Image(width, height, RGB)&lt;br /&gt;
  layer = gimp.Layer(img, &amp;quot;my font&amp;quot;, width, height, RGB_IMAGE, 100, NORMAL_MODE)&lt;br /&gt;
  img.add_layer(layer, 0)&lt;br /&gt;
  layer.add_alpha()&lt;br /&gt;
  gimp.set_foreground(color)&lt;br /&gt;
  pdb.gimp_selection_all(img)&lt;br /&gt;
  pdb.gimp_edit_clear(layer)&lt;br /&gt;
  pdb.gimp_selection_none(img)&lt;br /&gt;
  size= 20 # 23 # 21.3 # 30&lt;br /&gt;
  &lt;br /&gt;
  index=0&lt;br /&gt;
  numtot=len(chars)+len(decode)&lt;br /&gt;
  #numtot=50&lt;br /&gt;
  if limit&amp;gt;0: numtot=limit&lt;br /&gt;
  deltay=12.8 # 13.8215 # 12.8 # 18&lt;br /&gt;
  deltax=25.6 # 27.6432 # 25.6 # 36&lt;br /&gt;
  maxchars=len(chars)&lt;br /&gt;
  for first in range(numtot):&lt;br /&gt;
  &lt;br /&gt;
     if(first&amp;lt;maxchars): &lt;br /&gt;
        el1=chars[first]&lt;br /&gt;
     else:&lt;br /&gt;
        el1=decode[first-maxchars]&lt;br /&gt;
     &lt;br /&gt;
     python_log(str(first)+&amp;quot;/&amp;quot;+str(numtot)+&amp;quot;:  &amp;quot;+el1)&lt;br /&gt;
     for second in range(first+1):&lt;br /&gt;
&lt;br /&gt;
          # to save time removed function call&lt;br /&gt;
          if(second&amp;lt;maxchars): &lt;br /&gt;
             el2=chars[second]&lt;br /&gt;
          else:&lt;br /&gt;
             el2=decode[second-maxchars]&lt;br /&gt;
                 &lt;br /&gt;
          y=second * deltay * 2 # horizontal distance&lt;br /&gt;
          x=first*deltax # line distance&lt;br /&gt;
          pdb.gimp_text_fontname(img,layer,y,x,el1,0,TRUE,size,PIXELS,font)&lt;br /&gt;
          pdb.gimp_text_fontname(img,layer,y+deltay,x,el2,0,TRUE,size,PIXELS,font)&lt;br /&gt;
          &lt;br /&gt;
          index=index+1&lt;br /&gt;
          &lt;br /&gt;
  &lt;br /&gt;
  # Now ready to display this image&lt;br /&gt;
  img.merge_visible_layers(0)&lt;br /&gt;
  gimp.Display(img)&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
register(&lt;br /&gt;
  &amp;quot;xytext2&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;&amp;lt;Toolbox&amp;gt;/Xtns/_XyText2Char&amp;quot;, &amp;quot;&amp;quot;,&lt;br /&gt;
  [&lt;br /&gt;
  (PF_FONT, &amp;quot;font&amp;quot;, &amp;quot;Font to use&amp;quot;, &amp;quot;Arial&amp;quot;),&lt;br /&gt;
  (PF_COLOR,&amp;quot;color&amp;quot;,&amp;quot;Color to use&amp;quot;, (255,255,255) ),&lt;br /&gt;
  (PF_INT,    &amp;quot;size&amp;quot;, &amp;quot;Font size&amp;quot;, 45          ),&lt;br /&gt;
  (PF_INT,  &amp;quot;limit&amp;quot;, &amp;quot;limit font generation &amp;quot;, 0  ),&lt;br /&gt;
 &lt;br /&gt;
  ],&lt;br /&gt;
  [],&lt;br /&gt;
  python_xytext2&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What if I want the full script? ==&lt;br /&gt;
Here you are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
////////////////////////////////////////////&lt;br /&gt;
// ZZText (5 Face, Multi Texture)&lt;br /&gt;
//&lt;br /&gt;
// Originally Written by Xylor Baysklef&lt;br /&gt;
//&lt;br /&gt;
// Modified by Thraxis Epsilon January 20, 2006&lt;br /&gt;
// Added Support for 5 Face Prim, based on modification&lt;br /&gt;
// of XyText v1.1.1 by Kermitt Quick for Single Texture.&lt;br /&gt;
//&lt;br /&gt;
// Modified by Salahzar Stenvaag for International and new textures&lt;br /&gt;
// produced with GIMP. See wiki page ZZText for further info&lt;br /&gt;
// Obtain ME (starting linking channel from Object name)&lt;br /&gt;
// thane can use all the other commands&lt;br /&gt;
// IDEAL for linked structures&lt;br /&gt;
////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
/////////////// CONSTANTS ///////////////////&lt;br /&gt;
// XyText Message Map.&lt;br /&gt;
integer DISPLAY_STRING      = 0;&lt;br /&gt;
integer DISPLAY_EXTENDED    = 100;&lt;br /&gt;
integer REMAP_INDICES       = 200;&lt;br /&gt;
integer RESET_INDICES       = 300;&lt;br /&gt;
integer SET_CELL_INFO       = 400;&lt;br /&gt;
integer SET_THICKNESS       = 600;&lt;br /&gt;
integer SET_COLOR           = 700;&lt;br /&gt;
&lt;br /&gt;
// This is an extended character escape sequence.&lt;br /&gt;
string  ESCAPE_SEQUENCE = &amp;quot;\\e&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// This is used to get an index for the extended character.&lt;br /&gt;
string  EXTENDED_INDEX  = &amp;quot;123456789abcdef&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Face numbers.&lt;br /&gt;
integer FACE_1          = 3;&lt;br /&gt;
integer FACE_2          = 7;&lt;br /&gt;
integer FACE_3          = 4;&lt;br /&gt;
integer FACE_4          = 6;&lt;br /&gt;
integer FACE_5          = 1;&lt;br /&gt;
&lt;br /&gt;
list decode=[]; // to handle special characters from CP850 page for european countries&lt;br /&gt;
&lt;br /&gt;
// Used to hide the text after a fade-out.&lt;br /&gt;
key     TRANSPARENT     = &amp;quot;701917a8-d614-471f-13dd-5f4644e36e3c&amp;quot;;&lt;br /&gt;
// This is a list of textures for all 2-character combinations.&lt;br /&gt;
list    CHARACTER_GRID  = [&lt;br /&gt;
    &amp;quot;96f4578b-879e-44ae-d223-427cc615f5a4&amp;quot;, // my slice-0-0&lt;br /&gt;
    &amp;quot;eab5360f-6653-593f-b679-69c68b0dd001&amp;quot;, // 1-0&lt;br /&gt;
    &amp;quot;367330be-717a-277d-5205-131cd6ded458&amp;quot;, // 1-1&lt;br /&gt;
    &amp;quot;32046675-6e7e-2425-ce77-69000b0b4d96&amp;quot;, // 2-0&lt;br /&gt;
    &amp;quot;40085901-bde6-2dd4-40cd-b6d48d242997&amp;quot;, // 2-1&lt;br /&gt;
    &amp;quot;205d318b-09b7-7ecc-922e-801c93a546c8&amp;quot;, // 2-2&lt;br /&gt;
    &amp;quot;841e7826-3645-d4f0-d48b-389586dd8e90&amp;quot;, // 3-0&lt;br /&gt;
    &amp;quot;e2db78c5-fb47-d767-4744-8cb6d84610d0&amp;quot;, // 3-1&lt;br /&gt;
    &amp;quot;15312c89-afd4-854c-9d9b-5b9e11844aed&amp;quot;, // 3-2&lt;br /&gt;
    &amp;quot;d180e771-0393-d09b-8cac-0af6d550ae4a&amp;quot;, // 3-3&lt;br /&gt;
    &amp;quot;c6c1d2c8-5dfd-b13a-7f1e-c3ede8126769&amp;quot;, // 4-0&lt;br /&gt;
    &amp;quot;bc100d0c-a445-947f-caa4-285d9cc8a9de&amp;quot;, // 4-1&lt;br /&gt;
    &amp;quot;0b31e862-75a4-9ed3-6331-e9e700a0fedb&amp;quot;, // 4-2&lt;br /&gt;
    &amp;quot;0eacc306-6bd5-ab31-de47-c686141a6733&amp;quot;, // 4-3&lt;br /&gt;
    &amp;quot;b68de1d9-4890-74a0-4d25-d4d5c83a0dba&amp;quot;, // 4-4&lt;br /&gt;
    &amp;quot;04b2bf9b-a8bb-0a39-1062-9b005229eba9&amp;quot;, // 5-0&lt;br /&gt;
    &amp;quot;be293f10-25ec-beb9-738b-fe1892b82aef&amp;quot;, // 5-1&lt;br /&gt;
    &amp;quot;5e9c8317-71f5-f073-76ab-7c412d3acb84&amp;quot;, // 5-2&lt;br /&gt;
    &amp;quot;030b441b-9022-2aba-f7a7-af6810c354b8&amp;quot;, // 5-3&lt;br /&gt;
    &amp;quot;9f455858-8ae6-3a9a-c2d4-bc5ee92430ac&amp;quot;, // 5-4&lt;br /&gt;
    &amp;quot;ee741143-f01e-f730-667e-66a3cd57d1cc&amp;quot;, // 5-5&lt;br /&gt;
    &amp;quot;710282bc-bd80-5a44-6987-0c4c11a4c294&amp;quot;, // 6-0&lt;br /&gt;
    &amp;quot;c9c410db-675a-1e98-4107-debd3c73a754&amp;quot;, // 6-1&lt;br /&gt;
    &amp;quot;486c2336-71c5-b962-266c-838a865c067c&amp;quot;, // 6-2&lt;br /&gt;
    &amp;quot;d4722155-0b6d-3673-0208-a727729bc117&amp;quot;, // 6-3&lt;br /&gt;
    &amp;quot;bc7af3cd-ee48-08df-fe8b-a6ca8a425733&amp;quot;, // 6-4&lt;br /&gt;
    &amp;quot;f23d7a73-00c3-1ffd-69a7-0cca031c939d&amp;quot;, // 6-5&lt;br /&gt;
    &amp;quot;aa95bfd1-ac80-f962-7acf-d6aeed9c7e81&amp;quot;, // 6-6&lt;br /&gt;
    &amp;quot;53fd52e3-0e8b-dcc8-42f8-332aef421bd2&amp;quot;, // 7-0&lt;br /&gt;
    &amp;quot;da3f6f09-3e3a-e156-8e2e-1040111a5635&amp;quot;, // 7-1&lt;br /&gt;
    &amp;quot;409a95c0-b685-2036-d0de-75e8ab654243&amp;quot;, // 7-2&lt;br /&gt;
    &amp;quot;14e05aca-3a61-b892-3632-dcde72324779&amp;quot;, // 7-3&lt;br /&gt;
    &amp;quot;546c0e4f-b678-895d-2035-0f39bb7f4979&amp;quot;, // 7-4&lt;br /&gt;
    &amp;quot;cf2fc337-109f-ba25-8ff5-786f7d6ceb5b&amp;quot;, // 7-5&lt;br /&gt;
    &amp;quot;9943204b-a4de-868a-3cdd-8785d1864ede&amp;quot;, // 7-6&lt;br /&gt;
    &amp;quot;765cfd9c-9703-b5ba-2c5d-f1c8bd44e0f4&amp;quot;  // 7-7&lt;br /&gt;
        ];&lt;br /&gt;
integer ME;&lt;br /&gt;
///////////// END CONSTANTS ////////////////&lt;br /&gt;
&lt;br /&gt;
///////////// GLOBAL VARIABLES ///////////////&lt;br /&gt;
// All displayable characters.  Default to ASCII order.&lt;br /&gt;
string gCharIndex;&lt;br /&gt;
// This is the channel to listen on while acting&lt;br /&gt;
// as a cell in a larger display.&lt;br /&gt;
integer gCellChannel      = -1;&lt;br /&gt;
// This is the starting character position in the cell channel message&lt;br /&gt;
// to render.&lt;br /&gt;
integer gCellCharPosition = 0;&lt;br /&gt;
// This is whether or not to use the fade in/out special effect.&lt;br /&gt;
integer gCellUseFading      = FALSE;&lt;br /&gt;
// This is how long to display the text before fading out (if using&lt;br /&gt;
// fading special effect).&lt;br /&gt;
// Note: &amp;lt; 0  means don&#039;t fade out.&lt;br /&gt;
float   gCellHoldDelay      = 1.0;&lt;br /&gt;
/////////// END GLOBAL VARIABLES ////////////&lt;br /&gt;
&lt;br /&gt;
ResetCharIndex() {&lt;br /&gt;
    gCharIndex  = &amp;quot; !\&amp;quot;#$%&amp;amp;&#039;()*+,-./0123456789:;&amp;lt;=&amp;gt;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`&amp;quot;;&lt;br /&gt;
    // \&amp;quot; &amp;lt;-- Fixes LSL syntax highlighting bug.&lt;br /&gt;
    gCharIndex += &amp;quot;abcdefghijklmnopqrstuvwxyz{|}~&amp;quot;;&lt;br /&gt;
    //        cap cedille      u:         e/            a^         a:          a/         a ring      cedille     e^           e:&lt;br /&gt;
    decode=  [&amp;quot;%C3%87&amp;quot;, &amp;quot;%C3%BC&amp;quot;, &amp;quot;%C3%A9&amp;quot;, &amp;quot;%C3%A2&amp;quot;, &amp;quot;%C3%A4&amp;quot;, &amp;quot;%C3%A0&amp;quot;, &amp;quot;%C3%A5&amp;quot;, &amp;quot;%C3%A7&amp;quot;, &amp;quot;%C3%AA&amp;quot;, &amp;quot;%C3%AB&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        //                    e\           i:               i^            i\                A:          A ring          E/              ae           AE           marker &amp;gt;&lt;br /&gt;
        &amp;quot;%C3%A8&amp;quot;, &amp;quot;%C3%AF&amp;quot;, &amp;quot;%C3%AE&amp;quot;, &amp;quot;%C3%AC&amp;quot;, &amp;quot;%C3%84&amp;quot;, &amp;quot;%C3%85&amp;quot;, &amp;quot;%C3%89&amp;quot;, &amp;quot;%C3%A6&amp;quot;, &amp;quot;%C3%86&amp;quot;, &amp;quot;%E2%96%B6&amp;quot; ,&lt;br /&gt;
&lt;br /&gt;
        //                 o:               o/           u^          u\              y:               O:             U:          cent           pound        yen&lt;br /&gt;
        &amp;quot;%C3%B6&amp;quot;, &amp;quot;%C3%B2&amp;quot;, &amp;quot;%C3%BB&amp;quot;, &amp;quot;%C3%B9&amp;quot;, &amp;quot;%C3%BF&amp;quot;, &amp;quot;%C3%96&amp;quot;, &amp;quot;%C3%9C&amp;quot;, &amp;quot;%C2%A2&amp;quot;, &amp;quot;%C2%A3&amp;quot;, &amp;quot;%C2%A5&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        //                 A^              a/              i/                o/            u/              n~           E:            y/              inv ?         O^&lt;br /&gt;
        &amp;quot;%C3%82&amp;quot;, &amp;quot;%C3%A1&amp;quot;, &amp;quot;%C3%AD&amp;quot;, &amp;quot;%C3%B3&amp;quot;, &amp;quot;%C3%BA&amp;quot;, &amp;quot;%C3%B1&amp;quot;, &amp;quot;%C3%8B&amp;quot;, &amp;quot;%C3%BD&amp;quot;, &amp;quot;%C2%BF&amp;quot;, &amp;quot;%C3%94&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        //                   inv !             I\             I/           degree       E^              I^            o^            U^&lt;br /&gt;
        &amp;quot;%C2%A1&amp;quot;, &amp;quot;%C3%8C&amp;quot;, &amp;quot;%C3%8D&amp;quot;, &amp;quot;%C2%B0&amp;quot;, &amp;quot;%C3%8A&amp;quot;, &amp;quot;%C3%8E&amp;quot;, &amp;quot;%C3%B4&amp;quot;, &amp;quot;%C3%9B&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        //                     Y:          euro           german ss         E\              A\           A/              U\           U/               O\           O/&lt;br /&gt;
        &amp;quot;%C3%9D&amp;quot;, &amp;quot;%E2%82%AC&amp;quot;, &amp;quot;%C3%9F&amp;quot;, &amp;quot;%C3%88&amp;quot;, &amp;quot;%C3%80&amp;quot;, &amp;quot;%C3%81&amp;quot;, &amp;quot;%C3%99&amp;quot;, &amp;quot;%C3%9A&amp;quot;, &amp;quot;%C3%92&amp;quot;, &amp;quot;%C3%93&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        //                   Sv           sv             zv             Zv              Y:             I:&lt;br /&gt;
        &amp;quot;%C5%A0&amp;quot;, &amp;quot;%C5%A1&amp;quot;, &amp;quot;%C5%BE&amp;quot;, &amp;quot;%C5%BD&amp;quot;, &amp;quot;%C3%9D&amp;quot;, &amp;quot;%C3%8C&amp;quot; ];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
vector GetGridPos(integer index1, integer index2) {&lt;br /&gt;
    // There are two ways to use the lookup table...&lt;br /&gt;
    integer Col;&lt;br /&gt;
    integer Row;&lt;br /&gt;
    if (index1 &amp;gt;= index2) {&lt;br /&gt;
        // In this case, the row is the index of the first character:&lt;br /&gt;
        Row = index1;&lt;br /&gt;
        // And the col is the index of the second character (x2)&lt;br /&gt;
        Col = index2 * 2;&lt;br /&gt;
    }&lt;br /&gt;
    else { // Index1 &amp;lt; Index2&lt;br /&gt;
        // In this case, the row is the index of the second character:&lt;br /&gt;
        Row = index2;&lt;br /&gt;
        // And the col is the index of the first character, x2, offset by 1.&lt;br /&gt;
        Col = index1 * 2 + 1;&lt;br /&gt;
    }&lt;br /&gt;
    return &amp;lt;Col, Row, 0&amp;gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string GetGridTexture(vector grid_pos) {&lt;br /&gt;
    // Calculate the texture in the grid to use.&lt;br /&gt;
    integer GridCol = llRound(grid_pos.x) / 40; // PK was 20&lt;br /&gt;
    integer GridRow = llRound(grid_pos.y) / 20; // PK was 10&lt;br /&gt;
&lt;br /&gt;
    // Lookup the texture.&lt;br /&gt;
    key Texture = llList2Key(CHARACTER_GRID, GridRow * (GridRow + 1) / 2 + GridCol);&lt;br /&gt;
    return Texture;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
vector GetGridOffset(vector grid_pos) {&lt;br /&gt;
    // Zoom in on the texture showing our character pair.&lt;br /&gt;
    integer Col = llRound(grid_pos.x) % 40; // PK was 20&lt;br /&gt;
    integer Row = llRound(grid_pos.y) % 20; // PK was 10&lt;br /&gt;
&lt;br /&gt;
    // Return the offset in the texture.&lt;br /&gt;
    return &amp;lt;-0.45 + 0.025 * Col, 0.45 - 0.05 * Row, 0.0&amp;gt;; // PK was 0.05 and 0.1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ShowChars(vector grid_pos1, vector grid_pos2, vector grid_pos3, vector grid_pos4, vector grid_pos5) {&lt;br /&gt;
    // Set the primitive textures directly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    llSetPrimitiveParams( [&lt;br /&gt;
        PRIM_TEXTURE, FACE_1, GetGridTexture(grid_pos1), &amp;lt;0.125, 0.05, 0&amp;gt;, GetGridOffset(grid_pos1) + &amp;lt;0.0375-0.025-0.002, 0.025, 0&amp;gt;, 0.0,&lt;br /&gt;
        PRIM_TEXTURE, FACE_2, GetGridTexture(grid_pos2), &amp;lt;0.05, 0.05, 0&amp;gt;, GetGridOffset(grid_pos2)+&amp;lt;-0.025-0.002, 0.025,0&amp;gt;, 0.0,&lt;br /&gt;
        PRIM_TEXTURE, FACE_3, GetGridTexture(grid_pos3), &amp;lt;-0.74, 0.05, 0&amp;gt;, GetGridOffset(grid_pos3)+ &amp;lt;-.34-0.002, 0.025, 0&amp;gt;, 0.0,&lt;br /&gt;
        PRIM_TEXTURE, FACE_4, GetGridTexture(grid_pos4), &amp;lt;0.05, 0.05, 0&amp;gt;, GetGridOffset(grid_pos4)+&amp;lt;-0.025-0.002, 0.025,0&amp;gt;, 0.0,&lt;br /&gt;
        PRIM_TEXTURE, FACE_5, GetGridTexture(grid_pos5), &amp;lt;0.125, 0.05, 0&amp;gt;, GetGridOffset(grid_pos5) + &amp;lt;0.0375-0.025-0.077-0.002, 0.025, 0&amp;gt;, 0.0&lt;br /&gt;
            //        PRIM_TEXTURE, FACE_1, GetGridTexture(grid_pos1), &amp;lt;0.25, 0.1, 0&amp;gt;, GetGridOffset(grid_pos1) + &amp;lt;0.075, 0, 0&amp;gt;, 0.0,&lt;br /&gt;
            //        PRIM_TEXTURE, FACE_2, GetGridTexture(grid_pos2), &amp;lt;0.1, 0.1, 0&amp;gt;, GetGridOffset(grid_pos2), 0.0,&lt;br /&gt;
            //        PRIM_TEXTURE, FACE_3, GetGridTexture(grid_pos3), &amp;lt;-1.48, 0.1, 0&amp;gt;, GetGridOffset(grid_pos3)+ &amp;lt;0.37, 0, 0&amp;gt;, 0.0,&lt;br /&gt;
            //        PRIM_TEXTURE, FACE_4, GetGridTexture(grid_pos4), &amp;lt;0.1, 0.1, 0&amp;gt;, GetGridOffset(grid_pos4), 0.0,&lt;br /&gt;
            //        PRIM_TEXTURE, FACE_5, GetGridTexture(grid_pos5), &amp;lt;0.25, 0.1, 0&amp;gt;, GetGridOffset(grid_pos5) - &amp;lt;0.075, 0, 0&amp;gt;, 0.0&lt;br /&gt;
&lt;br /&gt;
            ]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
integer GetIndex(string char)&lt;br /&gt;
{&lt;br /&gt;
    integer  ret=llSubStringIndex(gCharIndex, char);&lt;br /&gt;
    if(ret&amp;gt;=0) return ret;&lt;br /&gt;
&lt;br /&gt;
    // special char do nice trick :)&lt;br /&gt;
    string escaped=llEscapeURL(char);&lt;br /&gt;
&lt;br /&gt;
    if(escaped==&amp;quot;%E2%80%99&amp;quot;) return 7; // remap ’&lt;br /&gt;
    //llSay(0,&amp;quot;Looking for &amp;quot;+escaped);&lt;br /&gt;
    integer found=llListFindList(decode, [escaped]);&lt;br /&gt;
&lt;br /&gt;
    // not found&lt;br /&gt;
    if(found&amp;lt;0) return 0;&lt;br /&gt;
&lt;br /&gt;
    // return correct index&lt;br /&gt;
    return llStringLength(gCharIndex)+found;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
RenderString(string str) {&lt;br /&gt;
    // Get the grid positions for each pair of characters.&lt;br /&gt;
    vector GridPos1 = GetGridPos( GetIndex(llGetSubString(str, 0, 0)),&lt;br /&gt;
        GetIndex(llGetSubString(str, 1, 1)) );&lt;br /&gt;
    vector GridPos2 = GetGridPos( GetIndex(llGetSubString(str, 2, 2)),&lt;br /&gt;
        GetIndex(llGetSubString(str, 3, 3)) );&lt;br /&gt;
    vector GridPos3 = GetGridPos( GetIndex(llGetSubString(str, 4, 4)),&lt;br /&gt;
        GetIndex(llGetSubString(str, 5, 5)) );&lt;br /&gt;
    vector GridPos4 = GetGridPos( GetIndex(llGetSubString(str, 6, 6)),&lt;br /&gt;
        GetIndex(llGetSubString(str, 7, 7)) );&lt;br /&gt;
    vector GridPos5 = GetGridPos( GetIndex(llGetSubString(str, 8, 8)),&lt;br /&gt;
        GetIndex(llGetSubString(str, 9, 9)) );&lt;br /&gt;
&lt;br /&gt;
    // Use these grid positions to display the correct textures/offsets.&lt;br /&gt;
    ShowChars(GridPos1, GridPos2, GridPos3, GridPos4, GridPos5);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
RenderWithEffects(string str) {&lt;br /&gt;
    // Get the grid positions for each pair of characters.&lt;br /&gt;
    vector GridPos1 = GetGridPos( llSubStringIndex(gCharIndex, llGetSubString(str, 0, 0)),&lt;br /&gt;
        llSubStringIndex(gCharIndex, llGetSubString(str, 1, 1)) );&lt;br /&gt;
    vector GridPos2 = GetGridPos( llSubStringIndex(gCharIndex, llGetSubString(str, 2, 2)),&lt;br /&gt;
        llSubStringIndex(gCharIndex, llGetSubString(str, 3, 3)) );&lt;br /&gt;
    vector GridPos3 = GetGridPos( llSubStringIndex(gCharIndex, llGetSubString(str, 4, 4)),&lt;br /&gt;
        llSubStringIndex(gCharIndex, llGetSubString(str, 5, 5)) );&lt;br /&gt;
    vector GridPos4 = GetGridPos( llSubStringIndex(gCharIndex, llGetSubString(str, 6, 6)),&lt;br /&gt;
        llSubStringIndex(gCharIndex, llGetSubString(str, 7, 7)) );&lt;br /&gt;
    vector GridPos5 = GetGridPos( llSubStringIndex(gCharIndex, llGetSubString(str, 8, 8)),&lt;br /&gt;
        llSubStringIndex(gCharIndex, llGetSubString(str, 9, 9)) );&lt;br /&gt;
&lt;br /&gt;
    // First set the alpha to the lowest possible.&lt;br /&gt;
    llSetAlpha(0.05, ALL_SIDES);&lt;br /&gt;
&lt;br /&gt;
    // Use these grid positions to display the correct textures/offsets.&lt;br /&gt;
    ShowChars(GridPos1, GridPos2, GridPos3, GridPos4, GridPos5);&lt;br /&gt;
&lt;br /&gt;
    float Alpha;&lt;br /&gt;
    for (Alpha = 0.10; Alpha &amp;lt;= 1.0; Alpha += 0.05)&lt;br /&gt;
        llSetAlpha(Alpha, ALL_SIDES);&lt;br /&gt;
    // See if we want to fade out as well.&lt;br /&gt;
    if (gCellHoldDelay &amp;lt; 0.0)&lt;br /&gt;
        // No, bail out. (Just keep showing the string at full strength).&lt;br /&gt;
        return;&lt;br /&gt;
    // Hold the text for a while.&lt;br /&gt;
    llSleep(gCellHoldDelay);&lt;br /&gt;
    // Now fade out.&lt;br /&gt;
    for (Alpha = 0.95; Alpha &amp;gt;= 0.05; Alpha -= 0.05)&lt;br /&gt;
        llSetAlpha(Alpha, ALL_SIDES);&lt;br /&gt;
    // Make the text transparent to fully hide it.&lt;br /&gt;
    llSetTexture(TRANSPARENT, ALL_SIDES);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
RenderExtended(string str) {&lt;br /&gt;
    // Look for escape sequences.&lt;br /&gt;
    list Parsed       = llParseString2List(str, [], [ESCAPE_SEQUENCE]);&lt;br /&gt;
    integer ParsedLen = llGetListLength(Parsed);&lt;br /&gt;
&lt;br /&gt;
    // Create a list of index values to work with.&lt;br /&gt;
    list Indices;&lt;br /&gt;
    // We start with room for 6 indices.&lt;br /&gt;
    integer IndicesLeft = 10;&lt;br /&gt;
&lt;br /&gt;
    integer i;&lt;br /&gt;
    string Token;&lt;br /&gt;
    integer Clipped;&lt;br /&gt;
    integer LastWasEscapeSequence = FALSE;&lt;br /&gt;
    // Work from left to right.&lt;br /&gt;
    for (i = 0; i &amp;lt; ParsedLen &amp;amp;&amp;amp; IndicesLeft &amp;gt; 0; i++) {&lt;br /&gt;
        Token = llList2String(Parsed, i);&lt;br /&gt;
&lt;br /&gt;
        // If this is an escape sequence, just set the flag and move on.&lt;br /&gt;
        if (Token == ESCAPE_SEQUENCE) {&lt;br /&gt;
            LastWasEscapeSequence = TRUE;&lt;br /&gt;
        }&lt;br /&gt;
        else { // Token != ESCAPE_SEQUENCE&lt;br /&gt;
            // Otherwise this is a normal token.  Check its length.&lt;br /&gt;
            Clipped = FALSE;&lt;br /&gt;
            integer TokenLength = llStringLength(Token);&lt;br /&gt;
            // Clip if necessary.&lt;br /&gt;
            if (TokenLength &amp;gt; IndicesLeft) {&lt;br /&gt;
                Token = llGetSubString(Token, 0, IndicesLeft - 1);&lt;br /&gt;
                TokenLength = llStringLength(Token);&lt;br /&gt;
                IndicesLeft = 0;&lt;br /&gt;
                Clipped = TRUE;&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
                IndicesLeft -= TokenLength;&lt;br /&gt;
&lt;br /&gt;
            // Was the previous token an escape sequence?&lt;br /&gt;
            if (LastWasEscapeSequence) {&lt;br /&gt;
                // Yes, the first character is an escape character, the rest are normal.&lt;br /&gt;
&lt;br /&gt;
                // This is the extended character.&lt;br /&gt;
                Indices += [llSubStringIndex(EXTENDED_INDEX, llGetSubString(Token, 0, 0)) + 95];&lt;br /&gt;
&lt;br /&gt;
                // These are the normal characters.&lt;br /&gt;
                integer j;&lt;br /&gt;
                for (j = 1; j &amp;lt; TokenLength; j++)&lt;br /&gt;
                    Indices += [llSubStringIndex(gCharIndex, llGetSubString(Token, j, j))];&lt;br /&gt;
            }&lt;br /&gt;
            else { // Normal string.&lt;br /&gt;
                // Just add the characters normally.&lt;br /&gt;
                integer j;&lt;br /&gt;
                for (j = 0; j &amp;lt; TokenLength; j++)&lt;br /&gt;
                    Indices += [llSubStringIndex(gCharIndex, llGetSubString(Token, j, j))];&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // Unset this flag, since this was not an escape sequence.&lt;br /&gt;
            LastWasEscapeSequence = FALSE;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Use the indices to create grid positions.&lt;br /&gt;
    vector GridPos1 = GetGridPos( llList2Integer(Indices, 0), llList2Integer(Indices, 1) );&lt;br /&gt;
    vector GridPos2 = GetGridPos( llList2Integer(Indices, 2), llList2Integer(Indices, 3) );&lt;br /&gt;
    vector GridPos3 = GetGridPos( llList2Integer(Indices, 4), llList2Integer(Indices, 5) );&lt;br /&gt;
    vector GridPos4 = GetGridPos( llList2Integer(Indices, 6), llList2Integer(Indices, 7) );&lt;br /&gt;
    vector GridPos5 = GetGridPos( llList2Integer(Indices, 8), llList2Integer(Indices, 9) );&lt;br /&gt;
&lt;br /&gt;
    // Use these grid positions to display the correct textures/offsets.&lt;br /&gt;
    ShowChars(GridPos1, GridPos2, GridPos3, GridPos4, GridPos5);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
integer ConvertIndex(integer index) {&lt;br /&gt;
    // This converts from an ASCII based index to our indexing scheme.&lt;br /&gt;
    if (index &amp;gt;= 32) // &#039; &#039; or higher&lt;br /&gt;
        index -= 32;&lt;br /&gt;
    else { // index &amp;lt; 32&lt;br /&gt;
        // Quick bounds check.&lt;br /&gt;
        if (index &amp;gt; 15)&lt;br /&gt;
            index = 15;&lt;br /&gt;
&lt;br /&gt;
        index += 94; // extended characters&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return index;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        // Initialize the character index.&lt;br /&gt;
        ResetCharIndex();&lt;br /&gt;
        ME=(integer)llGetObjectName();&lt;br /&gt;
        //llOwnerSay(&amp;quot;Channel:&amp;quot;+(string)ME);&lt;br /&gt;
        //llSay(0, &amp;quot;Free Memory: &amp;quot; + (string) llGetFreeMemory());&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    link_message(integer sender, integer channel, string data, key id) {&lt;br /&gt;
        if (channel == (ME+DISPLAY_STRING)) {&lt;br /&gt;
            RenderString(data);&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        if (channel == (ME+DISPLAY_EXTENDED)) {&lt;br /&gt;
            RenderExtended(data);&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        if (channel == gCellChannel) {&lt;br /&gt;
            // Extract the characters we are interested in, and use those to render.&lt;br /&gt;
            string TextToRender = llGetSubString(data, gCellCharPosition, gCellCharPosition + 9);&lt;br /&gt;
            if (gCellUseFading)&lt;br /&gt;
                RenderWithEffects( TextToRender );&lt;br /&gt;
            else // !gCellUseFading&lt;br /&gt;
                RenderString( TextToRender );&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        if (channel == (ME+REMAP_INDICES)) {&lt;br /&gt;
            // Parse the message, splitting it up into index values.&lt;br /&gt;
            list Parsed = llCSV2List(data);&lt;br /&gt;
            integer i;&lt;br /&gt;
            // Go through the list and swap each pair of indices.&lt;br /&gt;
            for (i = 0; i &amp;lt; llGetListLength(Parsed); i += 2) {&lt;br /&gt;
                integer Index1 = ConvertIndex( llList2Integer(Parsed, i) );&lt;br /&gt;
                integer Index2 = ConvertIndex( llList2Integer(Parsed, i + 1) );&lt;br /&gt;
&lt;br /&gt;
                // Swap these index values.&lt;br /&gt;
                string Value1 = llGetSubString(gCharIndex, Index1, Index1);&lt;br /&gt;
                string Value2 = llGetSubString(gCharIndex, Index2, Index2);&lt;br /&gt;
&lt;br /&gt;
                gCharIndex = llDeleteSubString(gCharIndex, Index1, Index1);&lt;br /&gt;
                gCharIndex = llInsertString(gCharIndex, Index1, Value2);&lt;br /&gt;
&lt;br /&gt;
                gCharIndex = llDeleteSubString(gCharIndex, Index2, Index2);&lt;br /&gt;
                gCharIndex = llInsertString(gCharIndex, Index2, Value1);&lt;br /&gt;
            }&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        if (channel == (ME+RESET_INDICES)) {&lt;br /&gt;
            // Restore the character index back to default settings.&lt;br /&gt;
            ResetCharIndex();&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        if (channel == (ME+SET_CELL_INFO)) {&lt;br /&gt;
            // Change the channel we listen to for cell commands, and the&lt;br /&gt;
            // starting character position to extract from.&lt;br /&gt;
            list Parsed = llCSV2List(data);&lt;br /&gt;
            gCellChannel        = (integer) llList2String(Parsed, 0);&lt;br /&gt;
            gCellCharPosition   = (integer) llList2String(Parsed, 1);&lt;br /&gt;
            gCellUseFading      = (integer) llList2String(Parsed, 2);&lt;br /&gt;
            gCellHoldDelay      = (float)   llList2String(Parsed, 3);&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        if (channel == (ME+SET_THICKNESS)) {&lt;br /&gt;
            // Set our z scale to thickness, while staying fixed&lt;br /&gt;
            // in position relative the prim below us.&lt;br /&gt;
            vector Scale    = llGetScale();&lt;br /&gt;
            float Thickness = (float) data;&lt;br /&gt;
            // Reposition only if this isn&#039;t the root prim.&lt;br /&gt;
            integer ThisLink = llGetLinkNumber();&lt;br /&gt;
            if (ThisLink != 0 || ThisLink != 1) {&lt;br /&gt;
                // This is not the root prim.&lt;br /&gt;
                vector Up = llRot2Up(llGetLocalRot());&lt;br /&gt;
                float DistanceToMove = Thickness / 2.0 - Scale.z / 2.0;&lt;br /&gt;
                vector Pos = llGetLocalPos();&lt;br /&gt;
                llSetPos(Pos + DistanceToMove * Up);&lt;br /&gt;
            }&lt;br /&gt;
            // Apply the new thickness.&lt;br /&gt;
            Scale.z = Thickness;&lt;br /&gt;
            llSetScale(Scale);&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        if (channel == (ME+SET_COLOR)) {&lt;br /&gt;
            vector newColor = (vector)data;&lt;br /&gt;
            llSetColor(newColor, ALL_SIDES);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>CodeBastard Redgrave</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Random_Object_Vendor&amp;diff=174573</id>
		<title>Random Object Vendor</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Random_Object_Vendor&amp;diff=174573"/>
		<updated>2008-12-14T07:29:20Z</updated>

		<summary type="html">&lt;p&gt;CodeBastard Redgrave: minor code revision&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
This script is a simple object vendor that gives out random items when you pay the fixed price. Just drop it in a prim, add items, and change the prices list variable to whatever price you want to sell the items. It will give out the item in a folder named like the container prim.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Random object vendor by CodeBastard Redgrave&lt;br /&gt;
// Drop items in the prim containing this script&lt;br /&gt;
// Pay the set price amount and it will give you a random object&lt;br /&gt;
// &amp;lt;3&lt;br /&gt;
&lt;br /&gt;
// Pieces stolen from:&lt;br /&gt;
// Give inventory to whoever touches the prim, written by Sasun Steinbeck (get_inv_list is shweet &amp;lt;3)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
list inventory; //holds a list of inventory items to give out on click.&lt;br /&gt;
list prices = [1];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
get_inv_list()&lt;br /&gt;
{&lt;br /&gt;
    integer i;&lt;br /&gt;
    string name;&lt;br /&gt;
   &lt;br /&gt;
    inventory = [];&lt;br /&gt;
    for (i = 0; i &amp;lt; llGetInventoryNumber(INVENTORY_ALL); i++)&lt;br /&gt;
    {&lt;br /&gt;
        name = llGetInventoryName(INVENTORY_ALL, i);&lt;br /&gt;
        if (name != llGetScriptName()) inventory += [name]; //add everything but this script to the list&lt;br /&gt;
    }&lt;br /&gt;
    llOwnerSay(&amp;quot;The following items have been found in this prim and will be given out on touch: &amp;quot; + llList2CSV(inventory) + &amp;quot;.&amp;quot;);&lt;br /&gt;
    if (llGetListLength(inventory) &amp;gt; 1)&lt;br /&gt;
        llOwnerSay(&amp;quot;These items will be put into a folder named &amp;quot; + llGetObjectName() + &amp;quot;. Rename this object to rename the destination folder.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        get_inv_list();&lt;br /&gt;
        llRequestPermissions(llGetOwner(),PERMISSION_DEBIT);&lt;br /&gt;
        llSetPayPrice(PAY_HIDE, prices);&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
   money(key id, integer amount)&lt;br /&gt;
    {&lt;br /&gt;
        if (amount == (integer)llList2String(prices,0))&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
        integer num_items = llGetListLength(inventory);&lt;br /&gt;
        integer random_item = (integer)llFrand(num_items + 1);&lt;br /&gt;
&lt;br /&gt;
        if (num_items &amp;lt; 1)&lt;br /&gt;
            llInstantMessage(id, &amp;quot;No items to offer.&amp;quot;);&lt;br /&gt;
        else if (num_items == 1)&lt;br /&gt;
            llGiveInventory(id, llList2String(inventory, 0));&lt;br /&gt;
        else //multiple items in a folder named after this prim&#039;s name&lt;br /&gt;
        {&lt;br /&gt;
            llGiveInventoryList(id, llGetObjectName(), [llList2String(inventory, random_item)]);&lt;br /&gt;
            llInstantMessage(id, &amp;quot;Your items have been given to you in a folder in your inventory named &amp;quot; + llGetObjectName() + &amp;quot;. Thank you!&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
           &lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0,&amp;quot;Sorry that is the wrong amount for this item.&amp;quot;);&lt;br /&gt;
            llGiveMoney(id, amount);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
            get_inv_list(); //refresh inventory list&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Examples}}&lt;br /&gt;
{{LSLC|Library}}&lt;/div&gt;</summary>
		<author><name>CodeBastard Redgrave</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Touch_A_Quote&amp;diff=174363</id>
		<title>Touch A Quote</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Touch_A_Quote&amp;diff=174363"/>
		<updated>2008-12-14T03:05:34Z</updated>

		<summary type="html">&lt;p&gt;CodeBastard Redgrave: just fixed the comments in the code to avoid overflowing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
This script will deliver quotes sequentially from a notecard when touched.&lt;br /&gt;
&lt;br /&gt;
In the same object you drop this script, create a notecard called &amp;quot;_quotes&amp;quot; and simply put your quotes in it, max. 255 characters per line or they will be truncated. Watch out not to bust the script memory stack by adding too much, but you can use Mono to compile it and create a very long notecard.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Touch a quote script &lt;br /&gt;
// By CodeBastard Redgrave&lt;br /&gt;
// Reads quotes from a notecard and displays them sequentially when you touch!&lt;br /&gt;
// BEWARE it cannot handle quotes more than 256 characters. Split them into multiple lines if needed.&lt;br /&gt;
&lt;br /&gt;
// This is a free script, DO NOT RESELL!&lt;br /&gt;
// It&#039;s loosely based on the classic dataserver script from the LSL wiki.&lt;br /&gt;
// Feel free to modify it to make your own book! Make code not war &amp;lt;3&lt;br /&gt;
&lt;br /&gt;
// Globals&lt;br /&gt;
integer iNotecardIndex;&lt;br /&gt;
integer iNotecardCount;&lt;br /&gt;
integer iNoteCardLine;&lt;br /&gt;
key kCurrentDataRequest;&lt;br /&gt;
string sData;&lt;br /&gt;
list QUOTE = [];&lt;br /&gt;
integer counter = 0;&lt;br /&gt;
string sSettingsNotecard = &amp;quot;_quotes&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez( integer param )&lt;br /&gt;
    {&lt;br /&gt;
         llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_end(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        // integer index = llRound(llFrand(1) * (iNoteCardLine-1));&lt;br /&gt;
        llSay(0,llList2String(QUOTE, counter));&lt;br /&gt;
        counter++;&lt;br /&gt;
        &lt;br /&gt;
        if ( counter &amp;gt; (iNoteCardLine-1))  { counter = 0;}&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        //integer iii;&lt;br /&gt;
        &lt;br /&gt;
        llOwnerSay(&amp;quot;Loading quotes, please wait...&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
        iNotecardCount = llGetInventoryNumber( INVENTORY_NOTECARD );&lt;br /&gt;
        iNotecardIndex = 0;&lt;br /&gt;
        if( iNotecardCount &amp;gt; iNotecardIndex ) {&lt;br /&gt;
    &lt;br /&gt;
            iNoteCardLine = 0;&lt;br /&gt;
            kCurrentDataRequest = llGetNotecardLine( sSettingsNotecard, iNoteCardLine );&lt;br /&gt;
            iNotecardIndex++;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    dataserver( key kQuery, string sData )&lt;br /&gt;
    {&lt;br /&gt;
        list lSetting;&lt;br /&gt;
&lt;br /&gt;
        kCurrentDataRequest = &amp;quot;&amp;quot;;&lt;br /&gt;
        if( sData != EOF )&lt;br /&gt;
        {&lt;br /&gt;
                if ( (string)sData == &amp;quot;&amp;quot; ) { return; }&lt;br /&gt;
            &lt;br /&gt;
                QUOTE += [(string)sData];&lt;br /&gt;
&lt;br /&gt;
                kCurrentDataRequest = llGetNotecardLine( sSettingsNotecard, ++iNoteCardLine );&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            iNotecardIndex++;&lt;br /&gt;
            if( iNotecardIndex &amp;lt; llGetInventoryNumber( INVENTORY_NOTECARD ) )&lt;br /&gt;
            {&lt;br /&gt;
                iNoteCardLine = 0;&lt;br /&gt;
                llGetNotecardLine( sSettingsNotecard, iNoteCardLine );&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llOwnerSay(&amp;quot;Ready!&amp;quot;);&lt;br /&gt;
                llOwnerSay((string)iNoteCardLine + &amp;quot; Quotes Loaded&amp;quot;);&lt;br /&gt;
                llOwnerSay( &amp;quot;FreeMem: &amp;quot; + (string)llGetFreeMemory() );   &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
            llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Examples}}&lt;br /&gt;
{{LSLC|Library}}&lt;/div&gt;</summary>
		<author><name>CodeBastard Redgrave</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Category:LSL_Library&amp;diff=174353</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=174353"/>
		<updated>2008-12-14T03:03:48Z</updated>

		<summary type="html">&lt;p&gt;CodeBastard Redgrave: /* LSL Script Library */  added link to SLURL HUD script page&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;
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 [http://forums.secondlife.com/forumdisplay.php?f=15 Scripting Library forum], were lost with the death of the 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;
&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;
{| {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Description&#039;&#039;&#039;&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;
||[[AdvancedNotecardReader]]&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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[Blog Feed]]&lt;br /&gt;
||[[User:Kageshen Kirax|Kageshen Kirax]]&lt;br /&gt;
||Displays the latest blog.&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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[Days in Month]]&lt;br /&gt;
||[[User:IntLibber Brautigan|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;
||[[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;
||[[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;
||[[Describe Chatter]]&lt;br /&gt;
||Anonymous&lt;br /&gt;
||Chat to see yourself as others do.&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;
||[[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;
||[[Dialog Control]]&lt;br /&gt;
||[[User:Nargus Asturias|Nargus Asturias]]&lt;br /&gt;
|| A (not-so) simple dialog 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;
|-&lt;br /&gt;
||[[Dialog Menus Control]]&lt;br /&gt;
||[[User:Nargus Asturias|Nargus Asturias]]&lt;br /&gt;
|| An extension to Nargus Dialog Control. This menus control allow multi-level menus through SL dialog system. It can also recall last used menus. Menus are saved and pre-formatted for faster access. Though it is not the fastest, nor most memory efficient, but it should make it easier to use.&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;
||[[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;
||[[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;
||[[Float2Hex]]&lt;br /&gt;
||[[User:Strife Onizuka|Strife Onizuka]]&lt;br /&gt;
||Very useful for transporting [[float|floats]].&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;
||[[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;
||[[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 recieve a random object in the prim&#039;s inventory&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;
||[[Go transparent when walking]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||An attachment that goes invisble when you walk and visible when you don&#039;t walk.&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;
||[[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;
||[[Hello Avatar]]&lt;br /&gt;
||Linden Lab&lt;br /&gt;
||SL&#039;s default script.&lt;br /&gt;
|-&lt;br /&gt;
||[[High Altitude Rezzer|High Altitude Rezzer]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||Vehicle that goes straight up and then rezzes objects up to 4,096 meters.&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;
||[[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;
||[[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;
||[[Inventory 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;
||[[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;
||[[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;
||[[Last Sound System]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||An LSL Last.fm client.&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;
||[[List2CSV]]&lt;br /&gt;
||[[User:Kunnis Basiat|Kunnis Basiat]]&lt;br /&gt;
||List2CSV &amp;amp; CSV2List that include perserving type and escaping characters.&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;
||[[Mandelbrot Explorer]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||An interactive fractal explorer.&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;
||[[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;
||[[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;
||[[Object to Data v1.2|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.&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;
||[[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;
||[[Pathfinder]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||A potential field based pathfinding library.&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;
||[[Phantom Maker]]&lt;br /&gt;
||[[User:Xaviar_Czervik|Xaviar Czervik]]&lt;br /&gt;
||An object that turns avatars into phantoms, without having to remain sitting.&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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[SHA1|SHA1 Hash]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Preforms a SHA1 Hash on an input text. Similar to MD5 only (slightly) more secure.&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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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|Revolution Perenti]]&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;
&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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[Zero Lag Poseball]]&lt;br /&gt;
||[[User:Jippen Faddoul|Jippen Faddoul]]&lt;br /&gt;
||A simple poseball with no lag&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;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;
{| {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Description&#039;&#039;&#039;&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;
|| 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.secondlife.com/showthread.php?t=119570 Announcement].&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;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;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;/div&gt;</summary>
		<author><name>CodeBastard Redgrave</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=SLURL_HUD&amp;diff=174343</id>
		<title>SLURL HUD</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=SLURL_HUD&amp;diff=174343"/>
		<updated>2008-12-14T02:59:38Z</updated>

		<summary type="html">&lt;p&gt;CodeBastard Redgrave: Submitting the SLURL HUD script to the LSL script library&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
When touched, this HUD script sends a SLURL to yourself through IM for logging, sends it to a preconfigured email adress from a notecard, and displays it over the prim.&lt;br /&gt;
&lt;br /&gt;
Drop this script in a prim, add a notecard called &amp;quot;emailaddress&amp;quot; with the email address in a single line, and reset the script to load the notecard. Wear it as a HUD. Just touch to get the SLURL.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// CODIE&#039;S SLURL HUD SCRIPT - By CodeBastard Redrave&lt;br /&gt;
//&lt;br /&gt;
// Loosely inspired of: &lt;br /&gt;
// http://forums.secondlife.com/showthread.php?t=152021&amp;amp;highlight=slurl+script&lt;br /&gt;
//&lt;br /&gt;
// USAGE: This script can be worn as a HUD and can be touched to spew a SLURL of your current location through various methods including IM log, Chat, and Email. &lt;br /&gt;
// For email to work, you only need to set the email adress through the embedded notecard.&lt;br /&gt;
// This script is FREE SOFTWARE.&lt;br /&gt;
// DO NOT: Sell this script or remove the credits and comments.&lt;br /&gt;
// DO: Give away, copy and distribute freely.&lt;br /&gt;
 &lt;br /&gt;
string gName = &amp;quot;emailcard&amp;quot;;    // name of a notecard in the object&#039;s inventory&lt;br /&gt;
integer gLine = 0;        // current line number&lt;br /&gt;
key gQueryID; // id used to identify dataserver queries&lt;br /&gt;
string emailaddress = &amp;quot;&amp;quot;;&lt;br /&gt;
integer emailactivated = TRUE; // set to FALSE to deactivate email&lt;br /&gt;
&lt;br /&gt;
//function that spews the actual SLURL to a bunch of places&lt;br /&gt;
&lt;br /&gt;
spewslurl(string emailaddress) {&lt;br /&gt;
&lt;br /&gt;
        string regionname = llDumpList2String(llParseString2List(llGetRegionName(),[&amp;quot; &amp;quot;],[]),&amp;quot;%20&amp;quot;);&lt;br /&gt;
        vector pos = llGetPos();&lt;br /&gt;
        integer x = (integer)pos.x;&lt;br /&gt;
        integer y = (integer)pos.y;&lt;br /&gt;
        integer z = (integer)pos.z;&lt;br /&gt;
        &lt;br /&gt;
        string slurl = &amp;quot;http://slurl.com/secondlife/&amp;quot;+regionname+&amp;quot;/&amp;quot;+(string)x+&amp;quot;/&amp;quot;+(string)y+&amp;quot;/&amp;quot;+(string)z+&amp;quot;/&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        //spews the stuff everythere!&lt;br /&gt;
        llOwnerSay(slurl);&lt;br /&gt;
        llInstantMessage(llGetOwner(),slurl);&lt;br /&gt;
        llSetText(slurl,&amp;lt;1.0,1.0,1.0&amp;gt;,1.0); &lt;br /&gt;
         &lt;br /&gt;
            if (emailactivated) {&lt;br /&gt;
                //tell the owner where this mail is going to be sent&lt;br /&gt;
                llOwnerSay(&amp;quot;Email set to:&amp;quot; + emailaddress + &amp;quot;\n&amp;quot;);&lt;br /&gt;
                llEmail(emailaddress, slurl, slurl);&lt;br /&gt;
                //tell the owner when this mail has been sent&lt;br /&gt;
                llOwnerSay(&amp;quot;Email sent to:&amp;quot; + emailaddress + &amp;quot;\n&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
          &lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        gQueryID = llGetNotecardLine(gName, gLine);    // request first line&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    dataserver(key query_id, string data) {&lt;br /&gt;
        if (query_id == gQueryID) {&lt;br /&gt;
            if (data != EOF) {    // not at the end of the notecard&lt;br /&gt;
                //llSay(0, (string)gLine+&amp;quot;: &amp;quot;+data);    // output the line for debugging purposes&lt;br /&gt;
                emailaddress = data;&lt;br /&gt;
                ++gLine;                // increase line count&lt;br /&gt;
                gQueryID = llGetNotecardLine(gName, gLine);    // request next line&lt;br /&gt;
               &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    } &lt;br /&gt;
    &lt;br /&gt;
     &lt;br /&gt;
    touch_start(integer t) {&lt;br /&gt;
        llSay(0, &amp;quot;OPC SLURL HUD&amp;quot; );&lt;br /&gt;
        llSay(0, &amp;quot;By CodeBastard Redgrave\n&amp;quot; );   &lt;br /&gt;
       &lt;br /&gt;
        spewslurl(emailaddress);&lt;br /&gt;
    }&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Examples}}&lt;br /&gt;
{{LSLC|Library}}&lt;/div&gt;</summary>
		<author><name>CodeBastard Redgrave</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Random_Object_Vendor&amp;diff=174293</id>
		<title>Random Object Vendor</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Random_Object_Vendor&amp;diff=174293"/>
		<updated>2008-12-14T00:33:09Z</updated>

		<summary type="html">&lt;p&gt;CodeBastard Redgrave: changed PRE to LSL for cute color coded formatting and {{LSLC|Examples}} {{LSLC|Library}}&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
This script is a simple object vendor that gives out random items when you pay the fixed price. Just drop it in a prim, add items, and change the prices list variable to whatever price you want to sell the items. It will give out the item in a folder named like the container prim.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Random object vendor by CodeBastard Redgrave&lt;br /&gt;
// Drop items in the prim containing this script&lt;br /&gt;
// Pay the set price amount and it will give you a random object&lt;br /&gt;
// &amp;lt;3&lt;br /&gt;
&lt;br /&gt;
// Pieces stolen from:&lt;br /&gt;
// Give inventory to whoever touches the prim, written by Sasun Steinbeck (get_inv_list is shweet &amp;lt;3)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
list inventory; //holds a list of inventory items to give out on click.&lt;br /&gt;
list prices = [1];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
get_inv_list()&lt;br /&gt;
{&lt;br /&gt;
    integer i;&lt;br /&gt;
    string name;&lt;br /&gt;
   &lt;br /&gt;
    inventory = [];&lt;br /&gt;
    for (i = 0; i &amp;lt; llGetInventoryNumber(INVENTORY_ALL); i++)&lt;br /&gt;
    {&lt;br /&gt;
        name = llGetInventoryName(INVENTORY_ALL, i);&lt;br /&gt;
        if (name != llGetScriptName()) inventory += [name]; //add everything but this script to the list&lt;br /&gt;
    }&lt;br /&gt;
    llOwnerSay(&amp;quot;The following items have been found in this prim and will be given out on touch: &amp;quot; + llList2CSV(inventory) + &amp;quot;.&amp;quot;);&lt;br /&gt;
    if (llGetListLength(inventory) &amp;gt; 1)&lt;br /&gt;
        llOwnerSay(&amp;quot;These items will be put into a folder named &amp;quot; + llGetObjectName() + &amp;quot;. Rename this object to rename the destination folder.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        get_inv_list();&lt;br /&gt;
        llRequestPermissions(llGetOwner(),PERMISSION_DEBIT);&lt;br /&gt;
        llSetPayPrice(PAY_HIDE, prices);&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
   money(key id, integer amount)&lt;br /&gt;
    {&lt;br /&gt;
        if (amount == (integer)llList2String(prices,0))&lt;br /&gt;
        {&lt;br /&gt;
           &lt;br /&gt;
           &lt;br /&gt;
            integer i;&lt;br /&gt;
        integer num_items = llGetListLength(inventory);&lt;br /&gt;
        integer random_item = (integer)llFrand(num_items + 1);&lt;br /&gt;
&lt;br /&gt;
       &lt;br /&gt;
        if (num_items &amp;lt; 1)&lt;br /&gt;
            llSay(0, &amp;quot;No items to offer.&amp;quot;);&lt;br /&gt;
        else if (num_items == 1)&lt;br /&gt;
            llGiveInventory(id, llList2String(inventory, 0));&lt;br /&gt;
        else //multiple items in a folder named after this prim&#039;s name&lt;br /&gt;
        {&lt;br /&gt;
            llGiveInventoryList(id, llGetObjectName(), [llList2String(inventory, random_item)]);&lt;br /&gt;
            llInstantMessage(id, &amp;quot;Your items have been given to you in a folder in your inventory named &amp;quot; + llGetObjectName() + &amp;quot;. Thank you!&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
           &lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0,&amp;quot;Sorry that is the wrong amount for this item.&amp;quot;);&lt;br /&gt;
            llGiveMoney(id, amount);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
            get_inv_list(); //refresh inventory list&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Examples}}&lt;br /&gt;
{{LSLC|Library}}&lt;/div&gt;</summary>
		<author><name>CodeBastard Redgrave</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Touch_A_Quote&amp;diff=174273</id>
		<title>Touch A Quote</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Touch_A_Quote&amp;diff=174273"/>
		<updated>2008-12-14T00:30:50Z</updated>

		<summary type="html">&lt;p&gt;CodeBastard Redgrave: added {{LSL Header}}  {{LSLC|Examples}} {{LSLC|Library}}&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
This script will deliver quotes sequentially from a notecard when touched.&lt;br /&gt;
&lt;br /&gt;
In the same object you drop this script, create a notecard called &amp;quot;_quotes&amp;quot; and simply put your quotes in it, max. 255 characters per line or they will be truncated. Watch out not to bust the script memory stack by adding too much, but you can use Mono to compile it and create a very long notecard.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Touch a quote script &lt;br /&gt;
// By CodeBastard Redgrave&lt;br /&gt;
// Reads quotes from a notecard and displays them sequentially when you touch!&lt;br /&gt;
// BEWARE it cannot handle quotes more than 256 characters. Split them into multiple lines if needed.&lt;br /&gt;
&lt;br /&gt;
// This is a free script, DO NOT RESELL! Feel free to hack it, it&#039;s loosely based on the classic dataserver script from the LSL wiki. Feel free to modify it to make your own book! Make code not war &amp;lt;3&lt;br /&gt;
&lt;br /&gt;
// Globals&lt;br /&gt;
integer iNotecardIndex;&lt;br /&gt;
integer iNotecardCount;&lt;br /&gt;
integer iNoteCardLine;&lt;br /&gt;
key kCurrentDataRequest;&lt;br /&gt;
string sData;&lt;br /&gt;
list QUOTE = [];&lt;br /&gt;
integer counter = 0;&lt;br /&gt;
string sSettingsNotecard = &amp;quot;_quotes&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez( integer param )&lt;br /&gt;
    {&lt;br /&gt;
         llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_end(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        // integer index = llRound(llFrand(1) * (iNoteCardLine-1));&lt;br /&gt;
        llSay(0,llList2String(QUOTE, counter));&lt;br /&gt;
        counter++;&lt;br /&gt;
        &lt;br /&gt;
        if ( counter &amp;gt; (iNoteCardLine-1))  { counter = 0;}&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        //integer iii;&lt;br /&gt;
        &lt;br /&gt;
        llOwnerSay(&amp;quot;Loading quotes, please wait...&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
        iNotecardCount = llGetInventoryNumber( INVENTORY_NOTECARD );&lt;br /&gt;
        iNotecardIndex = 0;&lt;br /&gt;
        if( iNotecardCount &amp;gt; iNotecardIndex ) {&lt;br /&gt;
    &lt;br /&gt;
            iNoteCardLine = 0;&lt;br /&gt;
            kCurrentDataRequest = llGetNotecardLine( sSettingsNotecard, iNoteCardLine );&lt;br /&gt;
            iNotecardIndex++;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    dataserver( key kQuery, string sData )&lt;br /&gt;
    {&lt;br /&gt;
        list lSetting;&lt;br /&gt;
&lt;br /&gt;
        kCurrentDataRequest = &amp;quot;&amp;quot;;&lt;br /&gt;
        if( sData != EOF )&lt;br /&gt;
        {&lt;br /&gt;
                if ( (string)sData == &amp;quot;&amp;quot; ) { return; }&lt;br /&gt;
            &lt;br /&gt;
                QUOTE += [(string)sData];&lt;br /&gt;
&lt;br /&gt;
                kCurrentDataRequest = llGetNotecardLine( sSettingsNotecard, ++iNoteCardLine );&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            iNotecardIndex++;&lt;br /&gt;
            if( iNotecardIndex &amp;lt; llGetInventoryNumber( INVENTORY_NOTECARD ) )&lt;br /&gt;
            {&lt;br /&gt;
                iNoteCardLine = 0;&lt;br /&gt;
                llGetNotecardLine( sSettingsNotecard, iNoteCardLine );&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llOwnerSay(&amp;quot;Ready!&amp;quot;);&lt;br /&gt;
                llOwnerSay((string)iNoteCardLine + &amp;quot; Quotes Loaded&amp;quot;);&lt;br /&gt;
                llOwnerSay( &amp;quot;FreeMem: &amp;quot; + (string)llGetFreeMemory() );   &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
            llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Examples}}&lt;br /&gt;
{{LSLC|Library}}&lt;/div&gt;</summary>
		<author><name>CodeBastard Redgrave</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Category:LSL_Library&amp;diff=174263</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=174263"/>
		<updated>2008-12-14T00:28:01Z</updated>

		<summary type="html">&lt;p&gt;CodeBastard Redgrave: added link to Touch A Quote script&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;
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 [http://forums.secondlife.com/forumdisplay.php?f=15 Scripting Library forum], were lost with the death of the 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;
&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;
{| {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Description&#039;&#039;&#039;&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;
||[[AdvancedNotecardReader]]&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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[Blog Feed]]&lt;br /&gt;
||[[User:Kageshen Kirax|Kageshen Kirax]]&lt;br /&gt;
||Displays the latest blog.&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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[Days in Month]]&lt;br /&gt;
||[[User:IntLibber Brautigan|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;
||[[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;
||[[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;
||[[Describe Chatter]]&lt;br /&gt;
||Anonymous&lt;br /&gt;
||Chat to see yourself as others do.&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;
||[[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;
||[[Dialog Control]]&lt;br /&gt;
||[[User:Nargus Asturias|Nargus Asturias]]&lt;br /&gt;
|| A (not-so) simple dialog 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;
|-&lt;br /&gt;
||[[Dialog Menus Control]]&lt;br /&gt;
||[[User:Nargus Asturias|Nargus Asturias]]&lt;br /&gt;
|| An extension to Nargus Dialog Control. This menus control allow multi-level menus through SL dialog system. It can also recall last used menus. Menus are saved and pre-formatted for faster access. Though it is not the fastest, nor most memory efficient, but it should make it easier to use.&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;
||[[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;
||[[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;
||[[Float2Hex]]&lt;br /&gt;
||[[User:Strife Onizuka|Strife Onizuka]]&lt;br /&gt;
||Very useful for transporting [[float|floats]].&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;
||[[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;
||[[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 recieve a random object in the prim&#039;s inventory&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;
||[[Go transparent when walking]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||An attachment that goes invisble when you walk and visible when you don&#039;t walk.&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;
||[[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;
||[[Hello Avatar]]&lt;br /&gt;
||Linden Lab&lt;br /&gt;
||SL&#039;s default script.&lt;br /&gt;
|-&lt;br /&gt;
||[[High Altitude Rezzer|High Altitude Rezzer]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||Vehicle that goes straight up and then rezzes objects up to 4,096 meters.&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;
||[[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;
||[[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;
||[[Inventory 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;
||[[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;
||[[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;
||[[Last Sound System]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||An LSL Last.fm client.&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;
||[[List2CSV]]&lt;br /&gt;
||[[User:Kunnis Basiat|Kunnis Basiat]]&lt;br /&gt;
||List2CSV &amp;amp; CSV2List that include perserving type and escaping characters.&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;
||[[Mandelbrot Explorer]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||An interactive fractal explorer.&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;
||[[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;
||[[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;
||[[Object to Data v1.2|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.&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;
||[[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;
||[[Pathfinder]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||A potential field based pathfinding library.&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;
||[[Phantom Maker]]&lt;br /&gt;
||[[User:Xaviar_Czervik|Xaviar Czervik]]&lt;br /&gt;
||An object that turns avatars into phantoms, without having to remain sitting.&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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[SHA1|SHA1 Hash]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Preforms a SHA1 Hash on an input text. Similar to MD5 only (slightly) more secure.&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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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|Revolution Perenti]]&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;
&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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[Zero Lag Poseball]]&lt;br /&gt;
||[[User:Jippen Faddoul|Jippen Faddoul]]&lt;br /&gt;
||A simple poseball with no lag&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;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;
{| {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Description&#039;&#039;&#039;&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;
|| 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.secondlife.com/showthread.php?t=119570 Announcement].&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;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;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;/div&gt;</summary>
		<author><name>CodeBastard Redgrave</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Touch_A_Quote&amp;diff=174253</id>
		<title>Touch A Quote</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Touch_A_Quote&amp;diff=174253"/>
		<updated>2008-12-14T00:24:01Z</updated>

		<summary type="html">&lt;p&gt;CodeBastard Redgrave: submitting Touch A Quote script to the Script Library&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This script will deliver quotes sequentially from a notecard when touched.&lt;br /&gt;
&lt;br /&gt;
In the same object you drop this script, create a notecard called &amp;quot;_quotes&amp;quot; and simply put your quotes in it, max. 255 characters per line or they will be truncated. Watch out not to bust the script memory stack by adding too much, but you can use Mono to compile it and create a very long notecard.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Touch a quote script &lt;br /&gt;
// By CodeBastard Redgrave&lt;br /&gt;
// Reads quotes from a notecard and displays them sequentially when you touch!&lt;br /&gt;
// BEWARE it cannot handle quotes more than 256 characters. Split them into multiple lines if needed.&lt;br /&gt;
&lt;br /&gt;
// This is a free script, DO NOT RESELL! Feel free to hack it, it&#039;s loosely based on the classic dataserver script from the LSL wiki. Feel free to modify it to make your own book! Make code not war &amp;lt;3&lt;br /&gt;
&lt;br /&gt;
// Globals&lt;br /&gt;
integer iNotecardIndex;&lt;br /&gt;
integer iNotecardCount;&lt;br /&gt;
integer iNoteCardLine;&lt;br /&gt;
key kCurrentDataRequest;&lt;br /&gt;
string sData;&lt;br /&gt;
list QUOTE = [];&lt;br /&gt;
integer counter = 0;&lt;br /&gt;
string sSettingsNotecard = &amp;quot;_quotes&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez( integer param )&lt;br /&gt;
    {&lt;br /&gt;
         llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_end(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        // integer index = llRound(llFrand(1) * (iNoteCardLine-1));&lt;br /&gt;
        llSay(0,llList2String(QUOTE, counter));&lt;br /&gt;
        counter++;&lt;br /&gt;
        &lt;br /&gt;
        if ( counter &amp;gt; (iNoteCardLine-1))  { counter = 0;}&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        //integer iii;&lt;br /&gt;
        &lt;br /&gt;
        llOwnerSay(&amp;quot;Loading quotes, please wait...&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
        iNotecardCount = llGetInventoryNumber( INVENTORY_NOTECARD );&lt;br /&gt;
        iNotecardIndex = 0;&lt;br /&gt;
        if( iNotecardCount &amp;gt; iNotecardIndex ) {&lt;br /&gt;
    &lt;br /&gt;
            iNoteCardLine = 0;&lt;br /&gt;
            kCurrentDataRequest = llGetNotecardLine( sSettingsNotecard, iNoteCardLine );&lt;br /&gt;
            iNotecardIndex++;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    dataserver( key kQuery, string sData )&lt;br /&gt;
    {&lt;br /&gt;
        list lSetting;&lt;br /&gt;
&lt;br /&gt;
        kCurrentDataRequest = &amp;quot;&amp;quot;;&lt;br /&gt;
        if( sData != EOF )&lt;br /&gt;
        {&lt;br /&gt;
                if ( (string)sData == &amp;quot;&amp;quot; ) { return; }&lt;br /&gt;
            &lt;br /&gt;
                QUOTE += [(string)sData];&lt;br /&gt;
&lt;br /&gt;
                kCurrentDataRequest = llGetNotecardLine( sSettingsNotecard, ++iNoteCardLine );&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            iNotecardIndex++;&lt;br /&gt;
            if( iNotecardIndex &amp;lt; llGetInventoryNumber( INVENTORY_NOTECARD ) )&lt;br /&gt;
            {&lt;br /&gt;
                iNoteCardLine = 0;&lt;br /&gt;
                llGetNotecardLine( sSettingsNotecard, iNoteCardLine );&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llOwnerSay(&amp;quot;Ready!&amp;quot;);&lt;br /&gt;
                llOwnerSay((string)iNoteCardLine + &amp;quot; Quotes Loaded&amp;quot;);&lt;br /&gt;
                llOwnerSay( &amp;quot;FreeMem: &amp;quot; + (string)llGetFreeMemory() );   &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
            llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>CodeBastard Redgrave</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Category:LSL_Library&amp;diff=174223</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=174223"/>
		<updated>2008-12-13T23:48:57Z</updated>

		<summary type="html">&lt;p&gt;CodeBastard Redgrave: adding link to the Random Object Vendor script&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;
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 [http://forums.secondlife.com/forumdisplay.php?f=15 Scripting Library forum], were lost with the death of the 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;
&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;
{| {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Description&#039;&#039;&#039;&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;
||[[AdvancedNotecardReader]]&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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[Blog Feed]]&lt;br /&gt;
||[[User:Kageshen Kirax|Kageshen Kirax]]&lt;br /&gt;
||Displays the latest blog.&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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[Days in Month]]&lt;br /&gt;
||[[User:IntLibber Brautigan|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;
||[[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;
||[[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;
||[[Describe Chatter]]&lt;br /&gt;
||Anonymous&lt;br /&gt;
||Chat to see yourself as others do.&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;
||[[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;
||[[Dialog Control]]&lt;br /&gt;
||[[User:Nargus Asturias|Nargus Asturias]]&lt;br /&gt;
|| A (not-so) simple dialog 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;
|-&lt;br /&gt;
||[[Dialog Menus Control]]&lt;br /&gt;
||[[User:Nargus Asturias|Nargus Asturias]]&lt;br /&gt;
|| An extension to Nargus Dialog Control. This menus control allow multi-level menus through SL dialog system. It can also recall last used menus. Menus are saved and pre-formatted for faster access. Though it is not the fastest, nor most memory efficient, but it should make it easier to use.&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;
||[[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;
||[[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;
||[[Float2Hex]]&lt;br /&gt;
||[[User:Strife Onizuka|Strife Onizuka]]&lt;br /&gt;
||Very useful for transporting [[float|floats]].&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;
||[[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;
||[[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 recieve a random object in the prim&#039;s inventory&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;
||[[Go transparent when walking]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||An attachment that goes invisble when you walk and visible when you don&#039;t walk.&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;
||[[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;
||[[Hello Avatar]]&lt;br /&gt;
||Linden Lab&lt;br /&gt;
||SL&#039;s default script.&lt;br /&gt;
|-&lt;br /&gt;
||[[High Altitude Rezzer|High Altitude Rezzer]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||Vehicle that goes straight up and then rezzes objects up to 4,096 meters.&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;
||[[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;
||[[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;
||[[Inventory 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;
||[[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;
||[[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;
||[[Last Sound System]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||An LSL Last.fm client.&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;
||[[List2CSV]]&lt;br /&gt;
||[[User:Kunnis Basiat|Kunnis Basiat]]&lt;br /&gt;
||List2CSV &amp;amp; CSV2List that include perserving type and escaping characters.&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;
||[[Mandelbrot Explorer]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||An interactive fractal explorer.&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;
||[[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;
||[[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;
||[[Object to Data v1.2|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.&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;
||[[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;
||[[Pathfinder]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||A potential field based pathfinding library.&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;
||[[Phantom Maker]]&lt;br /&gt;
||[[User:Xaviar_Czervik|Xaviar Czervik]]&lt;br /&gt;
||An object that turns avatars into phantoms, without having to remain sitting.&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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[SHA1|SHA1 Hash]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Preforms a SHA1 Hash on an input text. Similar to MD5 only (slightly) more secure.&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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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|Revolution Perenti]]&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;
&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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[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;
||[[Zero Lag Poseball]]&lt;br /&gt;
||[[User:Jippen Faddoul|Jippen Faddoul]]&lt;br /&gt;
||A simple poseball with no lag&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;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;
{| {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Description&#039;&#039;&#039;&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;
|| 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.secondlife.com/showthread.php?t=119570 Announcement].&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;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;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;/div&gt;</summary>
		<author><name>CodeBastard Redgrave</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Random_Object_Vendor&amp;diff=174213</id>
		<title>Random Object Vendor</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Random_Object_Vendor&amp;diff=174213"/>
		<updated>2008-12-13T23:45:27Z</updated>

		<summary type="html">&lt;p&gt;CodeBastard Redgrave: Submitting the Random Object Vendor script to the LSL script library&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
This script is a simple object vendor that gives out random items when you pay the fixed price. Just drop it in a prim, add items, and change the prices list variable to whatever price you want to sell the items. It will give out the item in a folder named like the container prim.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Random object vendor by CodeBastard Redgrave&lt;br /&gt;
// Drop items in the prim containing this script&lt;br /&gt;
// Pay the set price amount and it will give you a random object&lt;br /&gt;
// &amp;lt;3&lt;br /&gt;
&lt;br /&gt;
// Pieces stolen from:&lt;br /&gt;
// Give inventory to whoever touches the prim, written by Sasun Steinbeck (get_inv_list is shweet &amp;lt;3)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
list inventory; //holds a list of inventory items to give out on click.&lt;br /&gt;
list prices = [1];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
get_inv_list()&lt;br /&gt;
{&lt;br /&gt;
    integer i;&lt;br /&gt;
    string name;&lt;br /&gt;
   &lt;br /&gt;
    inventory = [];&lt;br /&gt;
    for (i = 0; i &amp;lt; llGetInventoryNumber(INVENTORY_ALL); i++)&lt;br /&gt;
    {&lt;br /&gt;
        name = llGetInventoryName(INVENTORY_ALL, i);&lt;br /&gt;
        if (name != llGetScriptName()) inventory += [name]; //add everything but this script to the list&lt;br /&gt;
    }&lt;br /&gt;
    llOwnerSay(&amp;quot;The following items have been found in this prim and will be given out on touch: &amp;quot; + llList2CSV(inventory) + &amp;quot;.&amp;quot;);&lt;br /&gt;
    if (llGetListLength(inventory) &amp;gt; 1)&lt;br /&gt;
        llOwnerSay(&amp;quot;These items will be put into a folder named &amp;quot; + llGetObjectName() + &amp;quot;. Rename this object to rename the destination folder.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        get_inv_list();&lt;br /&gt;
        llRequestPermissions(llGetOwner(),PERMISSION_DEBIT);&lt;br /&gt;
        llSetPayPrice(PAY_HIDE, prices);&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
   money(key id, integer amount)&lt;br /&gt;
    {&lt;br /&gt;
        if (amount == (integer)llList2String(prices,0))&lt;br /&gt;
        {&lt;br /&gt;
           &lt;br /&gt;
           &lt;br /&gt;
            integer i;&lt;br /&gt;
        integer num_items = llGetListLength(inventory);&lt;br /&gt;
        integer random_item = (integer)llFrand(num_items + 1);&lt;br /&gt;
&lt;br /&gt;
       &lt;br /&gt;
        if (num_items &amp;lt; 1)&lt;br /&gt;
            llSay(0, &amp;quot;No items to offer.&amp;quot;);&lt;br /&gt;
        else if (num_items == 1)&lt;br /&gt;
            llGiveInventory(id, llList2String(inventory, 0));&lt;br /&gt;
        else //multiple items in a folder named after this prim&#039;s name&lt;br /&gt;
        {&lt;br /&gt;
            llGiveInventoryList(id, llGetObjectName(), [llList2String(inventory, random_item)]);&lt;br /&gt;
            llInstantMessage(id, &amp;quot;Your items have been given to you in a folder in your inventory named &amp;quot; + llGetObjectName() + &amp;quot;. Thank you!&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
           &lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0,&amp;quot;Sorry that is the wrong amount for this item.&amp;quot;);&lt;br /&gt;
            llGiveMoney(id, amount);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
            get_inv_list(); //refresh inventory list&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>CodeBastard Redgrave</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Machinima&amp;diff=33509</id>
		<title>Machinima</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Machinima&amp;diff=33509"/>
		<updated>2007-09-28T20:21:29Z</updated>

		<summary type="html">&lt;p&gt;CodeBastard Redgrave: /* Tutorials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&#039;&#039;&#039;Please note that this wiki portal is not an advertising space but rather a community resource and vehicle for aggregating information about Machinima. Please refrain from posting unrelated content.&#039;&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
==Machinimatographers==&lt;br /&gt;
&lt;br /&gt;
Visit [[Machinimatographers]] for an ever-expanding list of Machinimatographers working in Second Life.&lt;br /&gt;
&lt;br /&gt;
==Machinima Content Companies==&lt;br /&gt;
For information on Second Life content companies offering Machinima services, see [[Machinima Content Companies]].&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===Mac===&lt;br /&gt;
* &#039;&#039;&#039;iShowU&#039;&#039;&#039; - fine video capture tool (Mac OS X) [http://www.shinywhitebox.com/home/home.html]&lt;br /&gt;
* &#039;&#039;&#039;SnapzProX&#039;&#039;&#039; - real time video capturing tool (MacOS) [http://www.ambrosiasw.com/utilities/snapzprox/]&lt;br /&gt;
&lt;br /&gt;
===PC===&lt;br /&gt;
* &#039;&#039;&#039;Camtasia&#039;&#039;&#039; - Capturing and editing software that works great for tutorials [http://www.techsmith.com/]&lt;br /&gt;
* &#039;&#039;&#039;FRAPS&#039;&#039;&#039; - real time video capturing tool / screenshots to disk (Windows) [http://www.fraps.com/]&lt;br /&gt;
* &#039;&#039;&#039;HyperCam&#039;&#039;&#039; - Video capturing tool [http://www.hyperionics.com/hc/index.asp]&lt;br /&gt;
* &#039;&#039;&#039;Adobe Premiere&#039;&#039;&#039; - Editing Software [http://www.adobe.com/products/premiere/]&lt;br /&gt;
* &#039;&#039;&#039;oRipa Screen Recorder&#039;&#039;&#039; (Windows) [http://www.ejoystudio.com/oripa-screen-recorder/index.htm] &lt;br /&gt;
* &#039;&#039;&#039;Sony Vegas&#039;&#039;&#039; - Editing Software [http://www.sonycreativesoftware.com/products/vegasfamily.asp?keycode=3138-3000]&lt;br /&gt;
&lt;br /&gt;
===Supplemental Software===&lt;br /&gt;
* &#039;&#039;&#039;List of screencasting software&#039;&#039;&#039; [http://en.wikipedia.org/wiki/List_of_screencasting_software]&lt;br /&gt;
* &#039;&#039;&#039;Audacity&#039;&#039;&#039; - Free sound editing software (Windows, Mac, and Linux) [http://sourceforge.net/projects/audacity/]&lt;br /&gt;
* &#039;&#039;&#039;Blender&#039;&#039;&#039; includes a video editor [http://wiki.blender.org/index.php/Manual/Video_Sequence_Editing] and compositing system [http://wiki.blender.org/index.php/Manual/Compositing] for special effects. Free download for Windows, Linux, and Mac OS. [http://www.blender.org/]&lt;br /&gt;
* &#039;&#039;&#039;Reallusion&#039;&#039;&#039; - Makers of &#039;&#039;&#039;CrazyTalk&#039;&#039;&#039; [http://crazytalk.reallusion.com/] and &#039;&#039;&#039;iClone&#039;&#039;&#039; [http://iclone.reallusion.com/], which can be used in post-processing to refine machinima. [http://www.reallusion.com/]&lt;br /&gt;
* &#039;&#039;&#039;recordMyDesktop&#039;&#039;&#039; - video capturing tool (Linux) [http://recordmydesktop.iovar.org/]&lt;br /&gt;
&lt;br /&gt;
==Equipment==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;3DConnexion Space Navigator&#039;&#039;&#039; - An orb that is used in conjunction with the &#039;&#039;&#039;Joystick Flycam&#039;&#039;&#039; function in Second Life for smooth shots.  It retails for about 60 USD. [http://www.3dconnexion.com/3dmouse/spacenavigator.php]&lt;br /&gt;
* &#039;&#039;&#039;Alt-Zoom Camera&#039;&#039;&#039; - A free camera designed to create dolly shots.  You can find it in Lukanida. (&#039;&#039;BuhBuhCuh Fairchild&#039;&#039;) [http://slurl.com/secondlife/Lukanida/10/18/24]&lt;br /&gt;
* &#039;&#039;&#039;Bijocam&#039;&#039;&#039; - Fixed angle cameras for when you need to do timelapse machinima.(&#039;&#039;Yumi Murakami&#039;&#039;) [http://slurl.com/secondlife/Bethselamin/163/103/24]&lt;br /&gt;
* &#039;&#039;&#039;Filming Path&#039;&#039;&#039; - the machinimator&#039;s universal tool - HUD for creating camera movement paths and more, very helpful (&#039;&#039;Geuis Dassin &amp;amp; Nand Nerd&#039;&#039;) [http://slurl.com/secondlife/Mortons%20Gully/205/27/35]&lt;br /&gt;
* &#039;&#039;&#039;MachinimaCam HUD &#039;&#039;&#039; - An avatar centric scripted camera that operates without any visible interface. Avaliable through SLX, OnRez or inworld. (&#039;&#039;CodeBastard Redgrave&#039;&#039;) [http://codebastard.com/machinimacam/]&lt;br /&gt;
&lt;br /&gt;
==Events==&lt;br /&gt;
&lt;br /&gt;
* Tube2SL - Launch date 29th Sept 2007 [http://www.tube2sl.com]&lt;br /&gt;
Official opening party and Tube2SL YouTube Film Producer 2007 Awards Ceremony on Saturday the 29th of September from 1pm SLT. Live musicians, Djs and Prize Events!&lt;br /&gt;
&lt;br /&gt;
==Tutorials==&lt;br /&gt;
* &#039;&#039;&#039;How to use the Alt-Zoom Camera&#039;&#039;&#039; - A quick tutorial designed to show you how to set up and configure your camera. [http://www.youtube.com/watch?v=uVzow1-Yh-w]&lt;br /&gt;
* &#039;&#039;&#039;How to turn off the UI&#039;&#039;&#039; - Please note that the hotkey has changed to CTRL+ALT+F1! [http://www.youtube.com/watch?v=NBsAvRA_dqM]&lt;br /&gt;
* &#039;&#039;&#039;How to use the Second Life camera controls&#039;&#039;&#039; - Part of the Noob Be Gone series [http://www.youtube.com/watch?v=2LMcryDCIYk]&lt;br /&gt;
* &#039;&#039;&#039;How to do machinima on a Mac&#039;&#039;&#039; - An informative look at how Mac users are able to capture and encode machinima [http://aeneaideas.wordpress.com/2006/12/02/machinima-in-sl-on-mac-os-x-a-tutorial/]&lt;br /&gt;
* &#039;&#039;&#039;How to use the MachinimaCam HUD&#039;&#039;&#039; - Complete and detailed instructions on how to setup and operate the MachinimaCam HUD. Includes tips and tricks for making machinima. [http://codebastard.com/machinimacam/]&lt;br /&gt;
&lt;br /&gt;
==Tips and Tricks==&lt;br /&gt;
* Using the &#039;Ken Burns&#039; movement/panning and cropping animations technique and adding &#039;atmospherics&#039; to your movies using lighting effects masks [http://forums.secondlife.com/showthread.php?t=212641 Forum Link]&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Groups:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Machinimatographers&#039;&#039;&#039; - Anyone interested in the Second Life Machinima Community. We will announce events and classes on this group.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Second Life Film Society&#039;&#039;&#039; - This group exists to explore new ways of using Second Life to create film (machinima).  We will also explore streaming live video from SL to the web as well as from SL to other locations in SL (SLTV). The Revolution Must Be Televised!&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;&#039;SL Machinima Librarians Group&#039;&#039;&#039; is a very friendly group for librarians and students interested in machinima.  The main focus will be to inform on machinima related news and share ideas.  The blog is located at here [http://machinimalibrarians.blogspot.com] - Postings cover software for windows and OSX platforms. The home for all library machinima enthusiasts is ALA Arts InfoIsland [http://slurl.com/secondlife/ALA%20Arts%20InfoIsland/151/164/47]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SL Machinima, Building, and Design&#039;&#039;&#039; - This group is made up of real life video, audio, and design artists/producers. We have united to push the limits in second Media. The SLMBD uses the most modern tools when it come to SL and RL. We specialize in Machinima (sl video), sim construction, custom graphics, and about anything else SL media/design related.--If you wish to join, you must be hard working, creative, and experenced (note: entrance fee!)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Machinimatographers of Second Life Mailing List&#039;&#039;&#039; - A mailing list to keep interested individuals alerted to machinima (machine animation) opportunities, features, advice, software, and events in Second Life. You will find new colleagues and filming locations to aide you in filming. Read more about our unique machinima opportunities by subscribing to the list [https://lists.secondlife.com/cgi-bin/mailman/listinfo/machinima here].&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Locations and props:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Movix - Movie and Music production&#039;&#039;&#039; - Their entire sim is being designed as a complete machinima studio. This is based on the real world model with various street and interior sets. They have shops for Costumes, Props, Vehicles, a sandbox plus everything else you need to make your movie.  You can show your film in their cinema (hosting extra if needed) or maybe even run a film festival. The Studio is free to book exclusively for your production ensuring lag free, uninterupted shooting. [http://slurl.com/secondlife/Movix%20Media/123/116/25]&lt;br /&gt;
* &#039;&#039;&#039;Alt-Zoom Theater and Sandbox&#039;&#039;&#039; - The island of Lukanida is home to Alt-Zoom Studios and an entire sim dedicated to building and filming your custom content for machinima purposes. [http://slurl.com/secondlife/Lukanida/11/12/24]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Video Hosting Sites:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;blip.tv&#039;&#039;&#039; - Free site that allows you to upload a movie file of unlimited size and in as many formats as you&#039;d like.  It compresses the first upload into a handy flash file for posting on the web, but also keeps the original file intact.  If you upload a Quicktime movie, you are able to use it in parcel media for in-world viewing. [http://blip.tv]&lt;br /&gt;
*&#039;&#039;&#039;YouTube&#039;&#039;&#039; - An online hosting option that allows you to upload a movie in any format and it will then convert it to a flash file for posting on a site. [http://youtube.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Machinima]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Creation]]&lt;/div&gt;</summary>
		<author><name>CodeBastard Redgrave</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Machinimatographers&amp;diff=33483</id>
		<title>Machinimatographers</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Machinimatographers&amp;diff=33483"/>
		<updated>2007-09-28T17:12:18Z</updated>

		<summary type="html">&lt;p&gt;CodeBastard Redgrave: /* C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Machinimatographers of Second Life==&lt;br /&gt;
===A===&lt;br /&gt;
===B===&lt;br /&gt;
===C===&lt;br /&gt;
[http://codebastard.com CodeBastard Redgrave] is an amateur machinima maker with a single success, [http://www.youtube.com/watch?v=ehl75pbsjf8 Beauty is only skin deep]. She is also the maker of [http://codebastard.com/machinimacam/ MachinimaCam HUD], an avatar centric scripted camera to help with machinima making in SecondLife.&lt;br /&gt;
&lt;br /&gt;
CoyoteJack Dassin Co-Owner of SceneMaker Studios.  Experienced Digital Cinematographer.  SceneMaker Studios produces a series of Graphic Novels shot within SL and published in a HUD Viewer for enjoyment in world.  SMS has developed a series of local light designed to meet the unique needs of Film and TV production in world, as well as publishing a Guide to the Basics of Digital Cinematography using Local lighting.  SceneMaker Studios offers services in Set design, Set Decoration, Cinematography, and Production Consulting.&lt;br /&gt;
&lt;br /&gt;
===D===&lt;br /&gt;
* [[User:Fox Diller|Fox Diller]] has been creating Machinima for years, starting with [http://www.3drealms.com/duke3d/ Duke Nukem 3D] engine, and the title &amp;quot;Duke it out.&amp;quot; Using many gaming engines from there, he&#039;s has build an expertise when it comes to using computer gaming engines to create stunning Machinima. He&#039;s now the CEO of Second Life&#039;s Magrathean Technologies and now does Machinima professionally for large corporations and small individuals.&lt;br /&gt;
&lt;br /&gt;
===E===&lt;br /&gt;
===F===&lt;br /&gt;
===G===&lt;br /&gt;
* [http://www.silverandgoldie.com Silver Goodman], David Lang in real life, is Director of Photography for Machinima by Silver and Goldie.  Now specializing in machinima, he is a highly skilled professional with decades of experience producing broadcast television series, documentaries, marketing and public information films.  Machinima credits include the highly popular &amp;quot;Stephen Colbert&#039;s Dream&amp;quot; and the Second Life Movie Trailer contest winner, &amp;quot;Second Life: Get One.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===H===&lt;br /&gt;
*&#039;&#039;&#039;Cecil Hirvi&#039;&#039;&#039;, a former borg, now uses his technological distinctiveness to create unique, poetic and dynamic machinimas in-world and out.  He has written, produced and photographed nearly 20 different machinima films since early 2007.  His clients have included musical artists such as jazz singer Paisley Beebe and educational venues like EdTech Island for Boise State University.  &lt;br /&gt;
&lt;br /&gt;
His films push the boundaries of fictional story-telling mixed with new techniques including mash-ups, and utilizing other game engines and custom designed 3D animation to achieve the final work.&lt;br /&gt;
&lt;br /&gt;
His machinima portfolio can be seen for free on Youtube here:[http://www.youtube.com/profile_videos?user=CecilHirvi&amp;amp;p=r]&lt;br /&gt;
&lt;br /&gt;
Cecil is currently working on a new on-going SL series and another film involving digital actors from around the world shot entirely in SL.  Recently, he has been invited by Boise State University to teach a course on Machinima Making for 2008.&lt;br /&gt;
&lt;br /&gt;
He is available to shoot mostly anything EXCEPT in-world Weddings.&lt;br /&gt;
&lt;br /&gt;
Resistance if Futile!&lt;br /&gt;
&lt;br /&gt;
===I===&lt;br /&gt;
===J===&lt;br /&gt;
===K===&lt;br /&gt;
===L===&lt;br /&gt;
* [[User:Dimitrio Lewis|Dimitrio Lewis]]&lt;br /&gt;
===M===&lt;br /&gt;
* moo Money is a Second Life expert in Machinima.  She has been teaching machinima (free to residents) on the main grid AND the teen grid for over 15 months, as well as making it for over a year.&lt;br /&gt;
&lt;br /&gt;
===N===&lt;br /&gt;
===O===&lt;br /&gt;
===P===&lt;br /&gt;
===Q===&lt;br /&gt;
===R===&lt;br /&gt;
*[http://www.planetvideo.co.uk Frankie Rockett] is Senior Machinimatographer with [http://www.planetvideo.co.uk Planet Video]. Twenty five years experience in new media and digital video, and [http://www.bbc.co.uk BBC] trained as a camera operator and drama editor.&lt;br /&gt;
&lt;br /&gt;
===S===&lt;br /&gt;
*[[User:Skribe Forti|Skribe Forti]] offers full service machinima and video services in Second Life specialising in the provision of conceptualisation, writing, production, direction and post-production solutions.&lt;br /&gt;
&lt;br /&gt;
===T===&lt;br /&gt;
===U===&lt;br /&gt;
===V===&lt;br /&gt;
===W===&lt;br /&gt;
===X===&lt;br /&gt;
===Y===&lt;br /&gt;
===Z===&lt;br /&gt;
&lt;br /&gt;
[[Category:Machinima]]&lt;/div&gt;</summary>
		<author><name>CodeBastard Redgrave</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Machinima&amp;diff=33479</id>
		<title>Machinima</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Machinima&amp;diff=33479"/>
		<updated>2007-09-28T16:03:27Z</updated>

		<summary type="html">&lt;p&gt;CodeBastard Redgrave: /* Equipment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&#039;&#039;&#039;Please note that this wiki portal is not an advertising space but rather a community resource and vehicle for aggregating information about Machinima. Please refrain from posting unrelated content.&#039;&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
==Machinimatographers==&lt;br /&gt;
&lt;br /&gt;
Visit [[Machinimatographers]] for an ever-expanding list of Machinimatographers working in Second Life.&lt;br /&gt;
&lt;br /&gt;
==Machinima Content Companies==&lt;br /&gt;
For information on Second Life content companies offering Machinima services, see [[Machinima Content Companies]].&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===Mac===&lt;br /&gt;
* &#039;&#039;&#039;iShowU&#039;&#039;&#039; - fine video capture tool (Mac OS X) [http://www.shinywhitebox.com/home/home.html]&lt;br /&gt;
* &#039;&#039;&#039;SnapzProX&#039;&#039;&#039; - real time video capturing tool (MacOS) [http://www.ambrosiasw.com/utilities/snapzprox/]&lt;br /&gt;
&lt;br /&gt;
===PC===&lt;br /&gt;
* &#039;&#039;&#039;Camtasia&#039;&#039;&#039; - Capturing and editing software that works great for tutorials [http://www.techsmith.com/]&lt;br /&gt;
* &#039;&#039;&#039;FRAPS&#039;&#039;&#039; - real time video capturing tool / screenshots to disk (Windows) [http://www.fraps.com/]&lt;br /&gt;
* &#039;&#039;&#039;HyperCam&#039;&#039;&#039; - Video capturing tool [http://www.hyperionics.com/hc/index.asp]&lt;br /&gt;
* &#039;&#039;&#039;Adobe Premiere&#039;&#039;&#039; - Editing Software [http://www.adobe.com/products/premiere/]&lt;br /&gt;
* &#039;&#039;&#039;oRipa Screen Recorder&#039;&#039;&#039; (Windows) [http://www.ejoystudio.com/oripa-screen-recorder/index.htm] &lt;br /&gt;
* &#039;&#039;&#039;Sony Vegas&#039;&#039;&#039; - Editing Software [http://www.sonycreativesoftware.com/products/vegasfamily.asp?keycode=3138-3000]&lt;br /&gt;
&lt;br /&gt;
===Supplemental Software===&lt;br /&gt;
* &#039;&#039;&#039;List of screencasting software&#039;&#039;&#039; [http://en.wikipedia.org/wiki/List_of_screencasting_software]&lt;br /&gt;
* &#039;&#039;&#039;Audacity&#039;&#039;&#039; - Free sound editing software (Windows, Mac, and Linux) [http://sourceforge.net/projects/audacity/]&lt;br /&gt;
* &#039;&#039;&#039;Blender&#039;&#039;&#039; includes a video editor [http://wiki.blender.org/index.php/Manual/Video_Sequence_Editing] and compositing system [http://wiki.blender.org/index.php/Manual/Compositing] for special effects. Free download for Windows, Linux, and Mac OS. [http://www.blender.org/]&lt;br /&gt;
* &#039;&#039;&#039;Reallusion&#039;&#039;&#039; - Makers of &#039;&#039;&#039;CrazyTalk&#039;&#039;&#039; [http://crazytalk.reallusion.com/] and &#039;&#039;&#039;iClone&#039;&#039;&#039; [http://iclone.reallusion.com/], which can be used in post-processing to refine machinima. [http://www.reallusion.com/]&lt;br /&gt;
* &#039;&#039;&#039;recordMyDesktop&#039;&#039;&#039; - video capturing tool (Linux) [http://recordmydesktop.iovar.org/]&lt;br /&gt;
&lt;br /&gt;
==Equipment==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;3DConnexion Space Navigator&#039;&#039;&#039; - An orb that is used in conjunction with the &#039;&#039;&#039;Joystick Flycam&#039;&#039;&#039; function in Second Life for smooth shots.  It retails for about 60 USD. [http://www.3dconnexion.com/3dmouse/spacenavigator.php]&lt;br /&gt;
* &#039;&#039;&#039;Alt-Zoom Camera&#039;&#039;&#039; - A free camera designed to create dolly shots.  You can find it in Lukanida. (&#039;&#039;BuhBuhCuh Fairchild&#039;&#039;) [http://slurl.com/secondlife/Lukanida/10/18/24]&lt;br /&gt;
* &#039;&#039;&#039;Bijocam&#039;&#039;&#039; - Fixed angle cameras for when you need to do timelapse machinima.(&#039;&#039;Yumi Murakami&#039;&#039;) [http://slurl.com/secondlife/Bethselamin/163/103/24]&lt;br /&gt;
* &#039;&#039;&#039;Filming Path&#039;&#039;&#039; - the machinimator&#039;s universal tool - HUD for creating camera movement paths and more, very helpful (&#039;&#039;Geuis Dassin &amp;amp; Nand Nerd&#039;&#039;) [http://slurl.com/secondlife/Mortons%20Gully/205/27/35]&lt;br /&gt;
* &#039;&#039;&#039;MachinimaCam HUD &#039;&#039;&#039; - An avatar centric scripted camera that operates without any visible interface. Avaliable through SLX, OnRez or inworld. (&#039;&#039;CodeBastard Redgrave&#039;&#039;) [http://codebastard.com/machinimacam/]&lt;br /&gt;
&lt;br /&gt;
==Events==&lt;br /&gt;
&lt;br /&gt;
* Tube2SL - Launch date 29th Sept 2007 [http://www.tube2sl.com]&lt;br /&gt;
Official opening party and Tube2SL YouTube Film Producer 2007 Awards Ceremony on Saturday the 29th of September from 1pm SLT. Live musicians, Djs and Prize Events!&lt;br /&gt;
&lt;br /&gt;
==Tutorials==&lt;br /&gt;
* &#039;&#039;&#039;How to use the Alt-Zoom Camera&#039;&#039;&#039; - A quick tutorial designed to show you how to set up and configure your camera. [http://www.youtube.com/watch?v=uVzow1-Yh-w]&lt;br /&gt;
* &#039;&#039;&#039;How to turn off the UI&#039;&#039;&#039; - Please note that the hotkey has changed to CTRL+ALT+F1! [http://www.youtube.com/watch?v=NBsAvRA_dqM]&lt;br /&gt;
* &#039;&#039;&#039;How to use the Second Life camera controls&#039;&#039;&#039; - Part of the Noob Be Gone series [http://www.youtube.com/watch?v=2LMcryDCIYk]&lt;br /&gt;
* &#039;&#039;&#039;How to do machinima on a Mac&#039;&#039;&#039; - An informative look at how Mac users are able to capture and encode machinima [http://aeneaideas.wordpress.com/2006/12/02/machinima-in-sl-on-mac-os-x-a-tutorial/]&lt;br /&gt;
 &lt;br /&gt;
==Tips and Tricks==&lt;br /&gt;
* Using the &#039;Ken Burns&#039; movement/panning and cropping animations technique and adding &#039;atmospherics&#039; to your movies using lighting effects masks [http://forums.secondlife.com/showthread.php?t=212641 Forum Link]&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Groups:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Machinimatographers&#039;&#039;&#039; - Anyone interested in the Second Life Machinima Community. We will announce events and classes on this group.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Second Life Film Society&#039;&#039;&#039; - This group exists to explore new ways of using Second Life to create film (machinima).  We will also explore streaming live video from SL to the web as well as from SL to other locations in SL (SLTV). The Revolution Must Be Televised!&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;&#039;SL Machinima Librarians Group&#039;&#039;&#039; is a very friendly group for librarians and students interested in machinima.  The main focus will be to inform on machinima related news and share ideas.  The blog is located at here [http://machinimalibrarians.blogspot.com] - Postings cover software for windows and OSX platforms. The home for all library machinima enthusiasts is ALA Arts InfoIsland [http://slurl.com/secondlife/ALA%20Arts%20InfoIsland/151/164/47]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SL Machinima, Building, and Design&#039;&#039;&#039; - This group is made up of real life video, audio, and design artists/producers. We have united to push the limits in second Media. The SLMBD uses the most modern tools when it come to SL and RL. We specialize in Machinima (sl video), sim construction, custom graphics, and about anything else SL media/design related.--If you wish to join, you must be hard working, creative, and experenced (note: entrance fee!)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Machinimatographers of Second Life Mailing List&#039;&#039;&#039; - A mailing list to keep interested individuals alerted to machinima (machine animation) opportunities, features, advice, software, and events in Second Life. You will find new colleagues and filming locations to aide you in filming. Read more about our unique machinima opportunities by subscribing to the list [https://lists.secondlife.com/cgi-bin/mailman/listinfo/machinima here].&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Locations and props:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Movix - Movie and Music production&#039;&#039;&#039; - Their entire sim is being designed as a complete machinima studio. This is based on the real world model with various street and interior sets. They have shops for Costumes, Props, Vehicles, a sandbox plus everything else you need to make your movie.  You can show your film in their cinema (hosting extra if needed) or maybe even run a film festival. The Studio is free to book exclusively for your production ensuring lag free, uninterupted shooting. [http://slurl.com/secondlife/Movix%20Media/123/116/25]&lt;br /&gt;
* &#039;&#039;&#039;Alt-Zoom Theater and Sandbox&#039;&#039;&#039; - The island of Lukanida is home to Alt-Zoom Studios and an entire sim dedicated to building and filming your custom content for machinima purposes. [http://slurl.com/secondlife/Lukanida/11/12/24]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Video Hosting Sites:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;blip.tv&#039;&#039;&#039; - Free site that allows you to upload a movie file of unlimited size and in as many formats as you&#039;d like.  It compresses the first upload into a handy flash file for posting on the web, but also keeps the original file intact.  If you upload a Quicktime movie, you are able to use it in parcel media for in-world viewing. [http://blip.tv]&lt;br /&gt;
*&#039;&#039;&#039;YouTube&#039;&#039;&#039; - An online hosting option that allows you to upload a movie in any format and it will then convert it to a flash file for posting on a site. [http://youtube.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Machinima]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Creation]]&lt;/div&gt;</summary>
		<author><name>CodeBastard Redgrave</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Machinimatographers&amp;diff=33478</id>
		<title>Machinimatographers</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Machinimatographers&amp;diff=33478"/>
		<updated>2007-09-28T15:59:34Z</updated>

		<summary type="html">&lt;p&gt;CodeBastard Redgrave: /* C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Machinimatographers of Second Life==&lt;br /&gt;
===A===&lt;br /&gt;
===B===&lt;br /&gt;
===C===&lt;br /&gt;
CodeBastard Redgrave is an amateur machinima maker with a single success, Beauty is only skin deep [http://www.youtube.com/watch?v=ehl75pbsjf8]. She is also the maker of MachinimaCam HUD [http://codebastard.com/machinimacam/], an avatar centric scripted camera to help with machinima making in SecondLife.&lt;br /&gt;
&lt;br /&gt;
===D===&lt;br /&gt;
* [[User:Fox Diller|Fox Diller]] has been creating Machinima for years, starting with [http://www.3drealms.com/duke3d/ Duke Nukem 3D] engine, and the title &amp;quot;Duke it out.&amp;quot; Using many gaming engines from there, he&#039;s has build an expertise when it comes to using computer gaming engines to create stunning Machinima. He&#039;s now the CEO of Second Life&#039;s Magrathean Technologies and now does Machinima professionally for large corporations and small individuals.&lt;br /&gt;
&lt;br /&gt;
===E===&lt;br /&gt;
===F===&lt;br /&gt;
===G===&lt;br /&gt;
* [http://www.silverandgoldie.com Silver Goodman], David Lang in real life, is Director of Photography for Machinima by Silver and Goldie.  Now specializing in machinima, he is a highly skilled professional with decades of experience producing broadcast television series, documentaries, marketing and public information films.  Machinima credits include the highly popular &amp;quot;Stephen Colbert&#039;s Dream&amp;quot; and the Second Life Movie Trailer contest winner, &amp;quot;Second Life: Get One.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===H===&lt;br /&gt;
*&#039;&#039;&#039;Cecil Hirvi&#039;&#039;&#039;, a former borg, now uses his technological distinctiveness to create unique, poetic and dynamic machinimas in-world and out.  He has written, produced and photographed nearly 20 different machinima films since early 2007.  His clients have included musical artists such as jazz singer Paisley Beebe and educational venues like EdTech Island for Boise State University.  &lt;br /&gt;
&lt;br /&gt;
His films push the boundaries of fictional story-telling mixed with new techniques including mash-ups, and utilizing other game engines and custom designed 3D animation to achieve the final work.&lt;br /&gt;
&lt;br /&gt;
His machinima portfolio can be seen for free on Youtube here:[http://www.youtube.com/profile_videos?user=CecilHirvi&amp;amp;p=r]&lt;br /&gt;
&lt;br /&gt;
Cecil is currently working on a new on-going SL series and another film involving digital actors from around the world shot entirely in SL.  Recently, he has been invited by Boise State University to teach a course on Machinima Making for 2008.&lt;br /&gt;
&lt;br /&gt;
He is available to shoot mostly anything EXCEPT in-world Weddings.&lt;br /&gt;
&lt;br /&gt;
Resistance if Futile!&lt;br /&gt;
&lt;br /&gt;
===I===&lt;br /&gt;
===J===&lt;br /&gt;
===K===&lt;br /&gt;
===L===&lt;br /&gt;
* [[User:Dimitrio Lewis|Dimitrio Lewis]]&lt;br /&gt;
===M===&lt;br /&gt;
* moo Money is a Second Life expert in Machinima.  She has been teaching machinima (free to residents) on the main grid AND the teen grid for over 15 months, as well as making it for over a year.&lt;br /&gt;
&lt;br /&gt;
===N===&lt;br /&gt;
===O===&lt;br /&gt;
===P===&lt;br /&gt;
===Q===&lt;br /&gt;
===R===&lt;br /&gt;
*[http://www.planetvideo.co.uk Frankie Rockett] is Senior Machinimatographer with [http://www.planetvideo.co.uk Planet Video]. Twenty five years experience in new media and digital video, and [http://www.bbc.co.uk BBC] trained as a camera operator and drama editor.&lt;br /&gt;
&lt;br /&gt;
===S===&lt;br /&gt;
*[[User:Skribe Forti|Skribe Forti]] offers full service machinima and video services in Second Life specialising in the provision of conceptualisation, writing, production, direction and post-production solutions.&lt;br /&gt;
&lt;br /&gt;
===T===&lt;br /&gt;
===U===&lt;br /&gt;
===V===&lt;br /&gt;
===W===&lt;br /&gt;
===X===&lt;br /&gt;
===Y===&lt;br /&gt;
===Z===&lt;br /&gt;
&lt;br /&gt;
[[Category:Machinima]]&lt;/div&gt;</summary>
		<author><name>CodeBastard Redgrave</name></author>
	</entry>
</feed>