nyuuzyou/wikis huggingface dataset:
Teleport

A Teleport is an instant change of your locations. Teleporting is probably the most frequent way of traveling. There are many ways to teleport to a specific location. Overall, there are many ways of teleporting.
== History ==
In the old times, teleporting was not possible. Later, when the world expanded, it was possible at a Telehub, with cost. Later, when the world reached unexpected size, teleporting was allowed for everyone and for free.
== Inworld teleporting ==
The majority of teleporting is done with the help of inworld tools and commands:
=== Avatar commanded teleports ===
These are well documented on the wiki, on the forums or on the knowledge base.
* By using the World Map
* By using a Landmark
* By using Destination Guide
* By using Search button
* By touching Home button or the landmarks on favorites tag
* By another avatar offering teleport
=== Object commanded teleports ===
There are various objects named teleporters, used to move avatars from one place to another. Some of them work only in the same region and at a limited distance. Others have a large range, while others are even more powerful and work throughout the grid. Short-range teleporters are used to move people from a floor to another. Medium-range teleporters are good to connect a skybox to the ground. The long-range teleporters create a continuous link between two distant places on the grid. They are all actioned by a Script.
==== Stargate System ====
The most advanced teleport system is done by the Stargate system. It looks realistic and is made of a central database that links multiple places. An avatar can teleport to many places if the code of the destination is known. Currently, there are stargates almost anywhere on the grid. Their number is for sure higher then 100.
Not all stargates are functional, some of them are only for decorative purposes.
== Outworld commanded teleport ==
Even if some people name them this way, they are in fact ways to login from a place. When such a command is received, you in fact open your Second Life browser to the specified location. The most used ways are by using the online map or one of the inworld links from the wiki (see for example the links in Small Railways).
== Unwanted teleport ==
The grid is full of Land With Restricted Access. Some of these parcels don't allow teleport access, while others use varios tools to teleport unwanted visitors away. Also, the land owner has the power to eject unwanted people.
==See also==
* Second Life Geography
* Video Tutorial/Teleporting & landmarks
* Video Tutorial/Teleport location history
* Gridnaut - Someone who teleports from one grid to another.
* Teleporting - knowledge base
* Teleporting - knowledge base
* Map 
* SLurl
* Manage your parcel
* Estate Manager
Teleport/nl

Als U naar het Opensource gerelateerde artikel over "Teleport" zoekt, bekijk dan Teleport OS (Engels talig)
Een Teleport is een directe verandering van locatie.
==Zie ook==
* Kaart
* SLurl
* Video Tutorial/Teleporting & landmarks
* Video Tutorial/Teleport location history
* Gridnaut - Iemand die van een grid naar een ander teleporteert.
TeleportFinish

==Message Layout==
{
	TeleportFinish Low Trusted Unencoded
	{
		Info		Single
		{	AgentID			LLUUID			}
		{	LocationID		U32				}
		{	SimIP			IPADDR			}
		{	SimPort			IPPORT			}
		{	RegionHandle	U64				}
		{	SeedCapability	Variable	2	}	
		{	SimAccess		U8				}
		{	TeleportFlags 	U32				}
	}
}
==Usage and Notes==
=== This message is deprecated. ===
A TeleportFinish event is sent over the EventQueueGet HTTP connection with similar information about the teleport destination region.
Category:Messages
TeleportLocal

==Message Layout==
{
	TeleportLocal Low Trusted Unencoded
	{
		Info		Single
		{	AgentID			LLUUID			}
		{	LocationID		U32				}
		{	Position		LLVector3		}	
		{	LookAt			LLVector3		}
		{	TeleportFlags 	U32				}
	}
}
==Usage and Notes==
Category:Messages
TeleportLocationRequest

==Message Layout==
{
	TeleportLocationRequest	Low	NotTrusted Unencoded
	{
		AgentData	Single
		{	AgentID		LLUUID		}
		{	SessionID	LLUUID		}
	}
	{
		Info	Single
		{	RegionHandle	U64			}
		{	Position		LLVector3	}
		{	LookAt			LLVector3	}
	}
}
==Usage and Notes==
Category:Messages
TeleportLureRequest

==Message Layout==
{
	TeleportLureRequest	Low	NotTrusted Unencoded
	{
		Info	Single
		{	AgentID		LLUUID	}
		{	SessionID	LLUUID	}
		{	LureID		LLUUID	}
		{	TeleportFlags 	U32				}
	}
}
==Usage and Notes==
Category:Messages
TeleportRequest

==Message Layout==
{
	TeleportRequest	Low	NotTrusted Unencoded
	{
		AgentData	Single
		{	AgentID		LLUUID		}
		{	SessionID	LLUUID		}
	}
	{
		Info		Single
		{	RegionID	LLUUID		}
		{	Position	LLVector3	}
		{	LookAt		LLVector3	}
	}
}
==Usage and Notes==
Category:Messages
Teleport (OS)

=== Feature Design Document ===
(none)
=== Functional Spec ===
Teleport Functional Spec
Teleport Rules internal spec - needs to be incorporated into Functional Spec
=== Test scripts ===
Teleport_Test
=== Discussion for future improvements ===
(none)
=== Relationship to other features ===
 List of features that need to be tested when this feature changes, and why. 
Estates - Estates define visibility rules. Access rules follow visibility rules. You can teleport to places you have access.
Login - Login should nearly follow the same rules as teleport. New users are an exception.
Parcels - Parcel can have landing points and their own access rules.
World map - teleport via the world map
Landmarks - teleport via landmarks directly or via landmarks in the worlds map
Friends - Teleport to friends via worlds map
SLURL - teleport to a location passed to the viewer from a web browser.
Administrator powers - Can teleport anywhere. Can teleport anyone to your location.
=== User Guides ===
(none)
=== Links ===
teleport by wokolution - Startingpoint to secondlife via SLMap.
TemplateChecksumReply

==Message Layout==
{
	TemplateChecksumReply Fixed 0xFFFFFFFF NotTrusted Unencoded
	{
		DataBlock		Single
		{	Checksum		U32	}
		{	MajorVersion	U8	}
		{	MinorVersion	U8	}
		{	PatchVersion	U8	}
		{	ServerVersion	U8	}
		{	Flags			U32	}
	}
	{
		TokenBlock	Single
		{	Token	LLUUID	}
	}
}
==Usage and Notes==
Category:Messages
Template dictionary python

name this file makepacketdict.py in order to use it
# uses the client's message_template.msg file to create a dictionary of name and other relevant packet info...
# make sure that message_template.msg has had all leading spaces removed and replaced with the correct number of tabs --I was exceedingly lazy when I wrote this and assumed a consistent tabbing scheme in the template
import re
def makepacketdict():
 dict = {}
 for line in open("message_template.msg"):
 results = re.match("^\t([^\t{}]+.+)",line)
 if results:
 aline = results.group(1)
 aline = aline.split()
 if aline[1] == "Fixed": 
 dict[(aline[1],int(aline[2][8:],16))] = (aline[0],aline[3], aline[4])
 else:
 dict[(aline[1],int(aline[2]))] = (aline[0],aline[3], aline[4])
 return dict
Category: AW Groupies
Temporary Objects

=== Feature Design Document ===
(none)
=== Functional Spec ===
(none)
=== Test scripts ===
Parcel Limits Test
Object Return internal test
Parcel Object Return Test
=== Discussion for future improvements ===
(none)
=== Relationship to other features ===
List of features that need to be tested when this feature changes, and why.
(none)
=== User Guides ===
How do I make a temporary object?
TerminateFriendship

==Message Layout==
{
	TerminateFriendship Low NotTrusted Unencoded
	{
		AgentData		Single
		{ AgentID		LLUUID	}
		{ SessionID		LLUUID	}
	}
	{
		ExBlock			Single
		{ OtherID		LLUUID	}
	}
}
==Usage and Notes==
Category:Messages
TestMessage

==Message Definition==
{
	TestMessage Low NotTrusted Zerocoded
	{
		TestBlock1		Single
		{	Test1		U32	}
	}
	{
		NeighborBlock		Multiple		4
		{	Test0		U32	}
		{	Test1		U32	}
		{	Test2		U32	}
	}
}
==Message Layout==
 0000 AA AA AA AA 1BB BB BB BB CC CC CC CC DD DD DD DD
 0010 2BB BB BB BB CC CC CC CC DD DD DD DD 3BB BB BB BB 
 0020 CC CC CC CC DD DD DD DD 4BB BB BB BB CC CC CC CC 
 0030 DD DD DD DD 
* A: TestBlock1: Test1 (U32, 4 bytes)
* B: NeighborBlock: Test0 (U32, 4 bytes)
* C: NeighborBlock: Test1 (U32, 4 bytes)
* D: NeighborBlock: Test2 (U32, 4 bytes)
==Usage and Notes==
If I had something to say, it would go here.
==Categories==
Category:Messages
Test Grid

There is a small grid named 'uma' in the linden network that can be used for testing. We will keep that grid in sync with the source releases regardless of the state of the primary 'agni' grid.
* Uma grid is reported not to be accessible
There are two common ways to connect to the test grid. The easiest way is to turn on "UseDebugLogin" in your client options. On subsequent runs, the viewer will include a drop-down grid list on the login screen.
The other way is to specify the options on the command line. This is useful if you want to make a shortcut or a script that always logs into the alternate grid. To do this, launch the viewer with the following options:
-loginuri https://login.uma.lindenlab.com/cgi-bin/login.cgi -user userserver.uma.lindenlab.com
See Client parameters for information about additional paramaters and for information about activating the parameters in XCode and Visual Studio.
Test Harness Control Buttons

The test harness responds to voice commands on the toAll channel. Instead of using a voice interface you can choose to make this all pushbutton. Create button objects, give each one of the buttons the appropriate script from below, and link the buttons to the Controller. 
all_button.lsl
big_red_button.lsl
broadcast_button.lsl
chat_button.lsl
control_button.lsl
email_button.lsl
group_button.lsl
http_button.lsl
normal_button.lsl
quiet_button.lsl
register_button.lsl
report_button.lsl
reset_button.lsl
single_button.lsl
test_button.lsl
verbose_button.lsl
Test Harness Controller

== The following files are the core components of the Test Harness Controller ==
Controller_Controller.lsl
Controller_UserInterface.lsl
Coordinator_Coordinator.lsl
Coordinator_nc
Coordinator_TestUnits.lsl
Coordinator_TestUnitsReports.lsl
scratch.lsl
TestUnit_nc
TestUnit_TestHarness.lsl
TestUnit_TestScript.lsl
Test Harness Test Units

Here are some sample scripts for testing LSL functionality. Some are standalone, others designed to work with the LSL Test Harness. 
Return to LSL Test Harness
Return to the LSL Portal
These scripts may be simply copied into LSL Test Harness Test Units:
* TestUnit_TestScript_Communication_Http.lsl
* TestUnit_TestScript_Communication_Rpc.lsl
* TestUnit_TestScript_DataServer_Notecard.lsl
* TestUnit_TestScript_Math_3D.lsl
* TestUnit_TestScript_Math_TRIG.lsl
* TestUnit_MATH_Binary_Operators.lsl
* TestUnit_DATA_Supported Typecasts.lsl
* TestUnit_TestScript_LSL_Language.lsl
These scripts are standalone tests of basic functionality. In some cases they refer to other resources (e.g. sounds, anims). You will need to add those resources to the object. 
* LSL Language Test
* LSL Library Call Test 1
* LSL Library Call Test 2
Category: LSL
Test Script Template

Category:Test Scripts
==Goals to strive for when writing a test plan==
* Easy to understand and follow.
* Short enough to be run in 30 minutes or less. If it's too long, break it down into smaller tests.
* Clear description of requirements needed to run the test. Number of users, parcels, etc. 
----
== Scope ==
* Describe the purpose of this test
* Link to a user story and / or an optional changeset url
* List any dependencies the new code may have -- what other systems may be affected?
* List any security implications -- does this feature give access to something it should not?
* Estimated running time
== Set-up ==
=== Environment === 
* If special set-up is needed, list test environment requirements such as viewer or server versions, operating systems, specific graphics cards and driver versions, etc.
=== Other === 
* List other requirements needed to execute the test plan here. e.g...
* Basic tester account to use as "User B" where specified
* Sandbox, or other area where building is allowed
* Describe/include tests to compare performance, if applicable:
** Requirements for gathering data on existing feature being modified.
** Follow this with requirements for gathering data on new feature in new format, etc.
** Explain how to compare data to ensure new feature is not worse (i.e. lower framerate, higher bandwidth, more db queries, etc.)
== Test Steps ==
=== Functional Tests ===
# Test case 1 (you can briefly outline the goal of the test case here)
## step 1
## step 2
## Verify against expected behavior
# Test case 2
## step 1
## step 2
## Verify against expected behavior
# Test case 3
## step 1
## step 2
## Verify against expected behavior
----
=== Regression Tests ===
(Optional) - as new failures are observed, new test cases can be added here to supplement the functional tests in the section above.
# Test for bug VWR-xxxx
## step 1
## step 2
## Verify against expected behavior
----
== Pass/Fail Criteria ==
# Passes if
## e.g. No unexpected behaviors are observed
# Fails if
## e.g. Expected behaviors are broken
## e.g. A bug is detected that was not accounted for by this test plan
== Tear Down ==
* List what must be done to revert the tester's environment to a neutral state
Test Sprint

What to do in release candidate Test Sprints (template, should move to a different wiki page):
* All participants to download the same build, hopefully on a variety of platforms 
* Regress bugs and features fixed in cycle
* Test outstanding bugs: narrow them down then we can decide to make them showstoppers or punt to future. 
* Pass the regular list of tests:
** Preview Smoke Test
** User Interface Smoke Test
** Newbie_Test
** Preferences and General UI
** Building_Tools_Test
** Media Plugin Test
Test button.lsl

// Global Variables
integer available = 1;
integer toAllChannel = -255; // general channel - linked message
default
{
 state_entry()
 {
 //on a reset or startup this test button can not be used
 available = 0;
 //set color to unavailable
 //llSetColor( <255,0,0>, ALL_SIDES);
 //llSetTextureAnim( ANIM_ON | LOOP , ALL_SIDES, 5, 5, 24, 1, 10 );
 llSetTexture( "alpha", ALL_SIDES);
 }
 touch_start(integer total_number)
 {
 if(available)
 {
 available = 0; 
 llMessageLinked(LINK_ALL_OTHERS, toAllChannel, "ActivateTest", NULL_KEY);
 //set color to busy
 llSetColor( <255,255,255>, ALL_SIDES);
 llSetTexture( "busy_anim v5_9", ALL_SIDES);
 llSetTextureAnim( ANIM_ON | LOOP , ALL_SIDES, 5, 5, 0, 23, 10 );
 }
 }
///////////////////////////////////////////////////////
// Link Message of default state //
/////////////////////////////////////////////////////// 
 link_message(integer sender_number, integer number, string message, key id)
 {
 //if link message is on the correct channel
 if(number == toAllChannel)
 {
 if(llSubStringIndex( message, "RegistrationComplete") != -1)
 {
 //set color to available
 llSetColor( <0,255,0>, ALL_SIDES);
 llSetTexture( "busy_anim v5_9", ALL_SIDES);
 llSetTextureAnim( ANIM_ON, ALL_SIDES, 5, 5, 24, 1, 10 );
 available = 1;
 }
 if(llSubStringIndex( message, "TestComplete") != -1)
 {
 //set color to available
 llSetColor( <0,255,0>, ALL_SIDES);
 llSetTexture( "busy_anim v5_9", ALL_SIDES);
 llSetTextureAnim( ANIM_ON, ALL_SIDES, 5, 5, 24, 1, 10 );
 available = 1;
 }
 if(llSubStringIndex( message, "ReportComplete") != -1)
 {
 //set color to available
 llSetColor( <0,255,0>, ALL_SIDES);
 llSetTexture( "busy_anim v5_9", ALL_SIDES);
 llSetTextureAnim( ANIM_ON, ALL_SIDES, 5, 5, 24, 1, 10 );
 available = 1;
 }
 
 if(llSubStringIndex( message, "ActivateRegistration") != -1)
 {
 //set color to unavailable
 //llSetColor( <255,0,0>, ALL_SIDES);
 //llSetTextureAnim( ANIM_ON | LOOP , ALL_SIDES, 5, 5, 24, 1, 10 );
 llSetTexture( "alpha", ALL_SIDES);
 available = 0;
 }
 if(llSubStringIndex( message, "ActivateReport") != -1)
 {
 //set color to unavailable
 //llSetColor( <255,0,0>, ALL_SIDES);
 //llSetTextureAnim( ANIM_ON | LOOP , ALL_SIDES, 5, 5, 24, 1, 10 );
 llSetTexture( "alpha", ALL_SIDES);
 available = 0;
 }
 
 if( message == "reset" )
 {
 llResetScript(); 
 } 
 
 }
 
 } //end of link message
 
}
Test parcels

__NOTOC__
These are parcels to test various features and functionality on.
== Sandboxes ==
^ Click through for a list. Places to create.
== Terraforming ==
* Here "landbox" - Feel free to reshape the terrain. Watch a video tutorial showing you how.
== Voice chat ==
* Voice Echo Canyon - Say something and if your voice chat is working, you'll hear it repeated back to you. You can also gauge your sound quality. More info here.
== Video ==
* Here Video Tutorials screen - This parcel contains a video which is fully-compatible with inworld playback. Face the screen and press play on your media control toolbar. If it doesn't works, get troubleshooting help.
Text Selection

=== Feature Design Document ===
(none)
=== Functional Spec ===
* automatic selection when opening a window
* Search
* Map
* Inventory Search
* automatic selection when reopening a window
* Search
* Map
* Inventory Search
* selecting items in inventory(?)
* selecting text when renaming an item
* in chat
* reopening chatbar when it still has text on it.
* in chat history
** while people are chatting an causing it to scroll.
* in IM
* when reopening a IM
* In IM history
** while people are chatting an causing it to scroll.
selecting and copying no-modify fields
** profile
** item properties name an description
** edit window, object name an description
** Help > About Second Life
** no-modify Notecards
* Keep focus in same field a select all text in field after hitting Return
** All text fields in the edit window.
** World Map fields
** Search
* Shift-arrow keys select text
* Shift-home selects all text from cursor to beginning of text field, and moves cursor.
* Shift-end selects all text from cursor to end of text field, and moves cursor.
=== Test scripts ===
(none)
=== Discussion for future improvements ===
(none)
=== Relationship to other features ===
 List of features that need to be tested when this feature changes, and why. 
(none)
=== User Guides ===
(none)
Text To Byte Conversion

Here's a function to pass a string of text and receive a list of bytes. A second function is provided to work in reverse. These methods are especially useful for working with encryption.
== Text2Bytes.lsl ==
list text2bytes(string text)
{
 string base64 = llStringToBase64(text);
 list bytes;
 integer i;
 integer n = llStringLength(base64);
 integer dword;
 for(i = 0; i < n; i += 4)
 bytes += [ ((dword = ((llBase64ToInteger(llGetSubString(base64, i, i + 3) + "==") >> 8) & 0xFFffFF)) >> 16), 
 ((dword >> 8) & 0xFF), (dword & 0xFF) ];
 return llList2List(bytes, 0, (-3 >> !!(dword & 0xFF00)) | !!(dword & 0xFF));
}
string bytes2text(list bytes)
{
 string text = "";
 integer i = -1;
 integer b = 0;
 while((b = (llList2Integer(bytes, ++i) & 0xFF)))
 {
 integer A = (b << 22) & 0x3C000000;
 integer B = (b << 20) & 0x00F00000;
 text += "%" + llGetSubString(llIntegerToBase64(
 A + B + 0xD3400000
 - (0xF8000000 * (A / 0x28000000))//lowercase=0x90000000, uppercase=0xF8000000
 - (0x03E00000 * (B / 0x00A00000))//lowercase=0x02400000, uppercase=0x03E00000
 ), 0, 1);
 }
 return llUnescapeURL(text);
}
default
{
 state_entry()
 {
 list bytes = text2bytes("Hello, Avatar!");
 llSay(0, llList2CSV(bytes));
 string text = bytes2text(bytes);
 llSay(0, text);
 }
 touch_start(integer total_number)
 {
 list bytes = text2bytes("Touched.");
 llSay(0, llList2CSV(bytes));
 string text = bytes2text(bytes);
 llSay(0, text);
 }
}
Category: LSL Encryption
Textbox2Hovertext

// Textbox2Hovertext by Ackley Bing & Omei Qunhua
// A simple script to allow object owners to change the "hovertext"
// on their prims using a text entry box (llTextBox).
integer listenhandle;
 
default
{
 touch_start(integer num)
 {
 key Writer = llDetectedKey(0);
 if(Writer!=llGetOwner()) return; // remove this line to allow anyone to change the hover text
 llListenRemove(listenhandle);
 llSetTimerEvent(60.0); // Time to input text until script closes listener in case target doesnt enter anything into textbox
 listenhandle=llListen(-12345, "", Writer, "");
 llTextBox( Writer, "Set Hovertext", -12345);
 }
 listen(integer channel, string name, key id, string message)
 {
 llSetText(message, <1, 1, 1>, 1);
 llListenRemove(listenhandle);
 llSetTimerEvent(0.0);
 }
 timer()
 {
 llListenRemove(listenhandle);
 llSetTimerEvent(0.0);
 }
}
Category:LSL Library
Texture

A texture can be used to cover the faces of a prim as a visual representation of the material and look of an object or be used to make clothing or other tatoos or be put in a notecard.
Textures can be purchased or found for free in-world, or created in third-party graphics programs and uploaded to Second Life for per image. 
Textures are marked with a texture icon (and for snapshots) in the inventory.
==Related Links==
* Saving Textures
* Importing Textures
* Video Tutorial/Making transparent textures
* Profile Image
* Texture Cache
Category:Assets
Texture Cycle

=====Cycle through textures on touch=====
Cycles through textures in object inventory on touch
// Cycle thru textures in inventory on touch
// @author: JB Kraft
// ------------------------------------------------------------------------
// counter
integer g_NDX = 0;
// ------------------------------------------------------------------------
// D E F A U L T
// ------------------------------------------------------------------------
default
{
 // --------------------------------------------------------------------
 touch_start(integer total_number)
 {
 // get the number of texture in inventory
 integer count = llGetInventoryNumber( INVENTORY_TEXTURE );
 // if there are none, do nothing
 if( count == 0 )
 return;
 // if we are past the last one, set th the first one
 if( g_NDX > count - 1 ) 
 g_NDX = 0;
 // set the texture
 llSetTexture( llGetInventoryName(INVENTORY_TEXTURE, g_NDX), ALL_SIDES);
 // increase the count
 ++g_NDX;
 }
}
Category:LSL Examples
Texture Menu Management

=Texture Menu Management=
(based on our previus script and released here for you as we did a custom edit for second-life community and i thought you may like to use this script as well.)
===Introduction===
Allows you to have dialog based navigation of textures.
and browse the image you like to display on your prim from a dialog with simple and ease of navigation 
==Usage==
Create a script and copy and paste the script below into your prim.
and copy textures or photos from your inventory into the content tab of your prim
click your prim containing the script and textures and select a texture or photo from the menu dialog
==Main Script==
list MENU1 = [];
list MENU2 = [];
integer listener;
integer MENU_CHANNEL = 1000;
// opens menu channel and displays dialog
Dialog(key id, list menu)
{
 llListenRemove(listener);
 listener = llListen(MENU_CHANNEL, "", NULL_KEY, "");
 llDialog(id, "Select one object below: ", menu, MENU_CHANNEL);
}
default
{
 on_rez(integer num)
 {
 // reset scripts on rez
 llResetScript();
 }
 
 touch_start(integer total_number)
 {
 integer i = 0;
 MENU1 = [];
 MENU2 = [];
 // count the textures in the prim to see if we need pages
 integer c = llGetInventoryNumber(INVENTORY_TEXTURE);
 if (c <= 12)
 {
 for (; i < c; ++i)
 MENU1 += llGetInventoryName(INVENTORY_TEXTURE, i);
 }
 else
 { 
 for (; i < 11; ++i)
 MENU1 += llGetInventoryName(INVENTORY_TEXTURE, i);
 if(c > 22)
 c = 22;
 for (; i < c; ++i)
 MENU2 += llGetInventoryName(INVENTORY_TEXTURE, i); 
 MENU1 += ">>";
 MENU2 += "<<"; 
 }
 // display the dialog 
 Dialog(llDetectedKey(0), MENU1);
 }
 
 listen(integer channel, string name, key id, string message) 
 {
 if (channel == MENU_CHANNEL)
 {
 llListenRemove(listener); 
 if (message == ">>")
 {
 Dialog(id, MENU2);
 }
 else if (message == "<<")
 {
 Dialog(id, MENU1);
 } 
 else 
 {
 // display the texture from menu selection 
 llSetTexture(message, ALL_SIDES);
 
 } 
 }
 } 
}
==== Support ====
For technical support, requests, etc., use the Search under the Groups Tab and search for Dazzle Software
If you have any problems getting this script to work either contact me in-world Revolution Perenti
Or visit our free scripts at our LSL scripts www.dazzlesoftware.org Secondlife Open Source Section on Tutorials.
Latest version always available on Marketplace or Dazzle Software via Wyrd