nyuuzyou/wikis huggingface dataset:
User/Digit Ditko/Detect gender script

== Detect an Avatars Gender ==
A new option to the llGetObjectDetails API has been added to allow a script to detect an avatars gender, kind of.
See the full API at llGetObjectDetails for more details
string
getAvatarGender (key inKey)
{
 string result = "";
 list l = llGetObjectDetails (llGetOwner (), [OBJECT_BODY_SHAPE_TYPE]);
 float value = llList2Float (l, 0);
 if (value <= 0.0 && value < 1.5)
 {
 result = "female";
 }
 else if (value <= 1.5)
 {
 result = "male";
 }
 else
 {
 result = "unknown";
 }
 
 return (result);
}
// -----------------------------------------------
default
{
 state_entry ()
 {
 key k = llGetOwner ();
 string value = getAvatarGender (k);
 
 llSay (PUBLIC_CHANNEL, "The owners gender is " + value);
 }
 
 
 touch_start (integer inNumTouched)
 {
 integer i;
 for (i = 0; i < inNumTouched; i++)
 {
 key avatar = llDetectedKey (i);
 string name = llKey2Name (avatar);
 string value = getAvatarGender (avatar);
 llSay (PUBLIC_CHANNEL, "The avatar '" + name + "' has a gender of " + value); 
 }
 }
}
User/Digit Ditko/experience hud basic script

== HUD Experience Detection ==
If you need a HUD that will activate and inactivate itself as an avatar moves about Second Life® (and encounters Experiences during that travel), then this example shows the minimum necessary to do that.
// The color of the HUD for the active mode.
vector ACTIVE_COLOR = <0.0, 1.0, 0.0>; // primary green
// The color of the HUD in inactive mode.
vector INACTIVE_COLOR = <1.0, 0.0, 0.0>; // primary red
// Simple function to change the HUD color.
setColor (vector inColor)
{
 llSetLinkPrimitiveParamsFast(LINK_SET, [PRIM_COLOR, ALL_SIDES, inColor, 1.0]);
}
// -----------------------------------------------------------------------------
// Default state
// The default state is the logical "inactive" state of the HUD. 
default
{
 state_entry()
 {
 // For the initial setup of the HUD, just set the color to inactive.
 setColor(INACTIVE_COLOR);
 
 // After the setup is complete, determine if the HUD should go
 // to the active state. If the script is NOT compiled to use an
 // Experience, then the Agent-in-the-Experience API call
 // will return false.
 if (llGetAttached() && llAgentInExperience(llGetOwner()))
 {
 state active;
 }
 }
 
 attach(key inAvatar)
 {
 // If the HUD is being attached, check if the agent is in the Experience
 // and switch to the active state.
 if (inAvatar)
 {
 if (llAgentInExperience(inAvatar))
 {
 state active;
 }
 }
 }
 
 changed(integer inMask)
 {
 // if the owner changes or if the avatar goes to a different
 // region, check it the avatar is in the Experience again and
 // change to the active state if needed.
 if (inMask & (CHANGED_REGION | CHANGED_OWNER))
 {
 key av = llGetOwner();
 if (llAgentInExperience(av))
 {
 state active;
 }
 }
 }
}
// --------------------------------------------------------------------------
// in the "active" state the HUD should have all standard functions.
// All this demo script does is turn the HUD to the active color.
state active
{
 state_entry()
 {
 // Set the HUD color to active.
 // This would usually be more elaborate in a real script.
 setColor(ACTIVE_COLOR);
 }
 
 on_rez(integer inParam)
 {
 // When the object is rezzed, the state of the HUD is unknown.
 // Just change to the default state to run through the initialization
 // logic as needed.
 state default;
 }
 
 attach(key inAvatar)
 {
 // When attached, check if the agent is in the Experience and
 // change to the default inactive state as needed.
 if (inAvatar)
 {
 if (!llAgentInExperience(inAvatar))
 {
 state default;
 }
 }
 }
 
 changed(integer inMask)
 {
 // Need to go through initialization logic if the owner changes or if
 // the avatar goes to a different region. NOTE: This does not detect
 // individual parcel changes.
 if (inMask & (CHANGED_REGION | CHANGED_OWNER))
 {
 key av = llGetOwner();
 if (!llAgentInExperience(av))
 {
 state default;
 }
 }
 }
}
Category:LSL Examples
User/Digit Ditko/experience transport script

== Transport an avatar and use experience permissions ==
// use a regoins coordinates here to transport avatar to another region.
vector gRegion = ZERO_VECTOR; 
// region specific location
vector gPos = <128.0, 128.0, 100.0>;
// Avatar will face this direction
vector gLookAt = <0.0, 0.0, 0.0>;
// -----------------------------------------------------------------------------
// Default state
default
{
 collision_start (integer inNumDetected)
 { 
 integer i;
 for (i = 0; i < inNumDetected; i++)
 {
 llRequestExperiencePermissions (llDetectedKey (i), "");
 }
 }
 
 experience_permissions (key inAvatar)
 { 
 if (gRegion == ZERO_VECTOR)
 {
 llTeleportAgent (inAvatar, "", gPos, gLookAt); 
 } 
 else
 {
 llTeleportAgentGlobalCoords (inAvatar, gRegion, gPos, gLookAt);
 }
 }
 
 
 on_rez (integer inParam)
 {
 llResetScript ();
 }
 
 
 changed (integer inMask)
 { 
 if (inMask & (CHANGED_INVENTORY | CHANGED_OWNER))
 {
 llResetScript ();
 } 
 }
}
User/Digit Ditko/find group key of avatar

== Get Group Key for an Avatar's current group ==
This script demonstrates how to retrieve an avatar's active group key. By retrieving the a actual key, a script can test for membership on one or more groups. 
To get the active group of an avatar, get the attachment list of the avatar and then get the group for one of the attachments. Obviously this will fail if the avatar has no attachments, but how many avatars walk around with nothing attached (they would have to wear all system clothes and system hair).
 
// Get the active group from the avatar specified by inAvatar.
// return the group key, a NULL_KEY is returned if the group 
// cannot be determined
key
getAvatarGroup (key inAvatar)
{
 key result = NULL_KEY;
 
 // get the the list of attachments for the avatar 
 list parts = llGetAttachedList (inAvatar);
 if (llGetListLength (parts) > 0)
 {
 // If the avatar has any attachments then just get the 
 // group key for the first attachment.
 list parts2 = llGetObjectDetails (llList2Key (parts, 0), [OBJECT_GROUP]); 
 result = llList2Key (parts2, 0);
 }
 
 return (result);
}
// ------------------------------------------
default
{
 
 touch_start (integer total_number)
 {
 key av = llDetectedKey (0);
 key groupId = getAvatarGroup (av);
 
 llInstantMessage (av, "group = " + (string) groupId);
 }
}
UserInfoReply

==Message Layout==
{
	UserInfoReply	Low	NotTrusted Unencoded
	{
		AgentData	Single
		{	AgentID	LLUUID	}
	}
	{
		UserData	Single
		{	IMViaEMail	BOOL	}
		{	DirectoryVisibility	Variable 1	}
		{	EMail		Variable	2	}
	}
}
==Usage and Notes==
Email settings, response to UserInfoRequest
Category:Messages
UserLoginLocationReply

==Message Layout==
{
	UserLoginLocationReply Low Trusted Zerocoded
	{
		AgentData	Single
		{	SessionID	LLUUID	}
		{	Message		Variable	1	}
	}
	{
		RegionInfo	Single
		{	LocationValid	BOOL	}
		{	GridsPerEdge	U32	}
		{	MetersPerGrid	F32	}
		{	Handle			U64	}
		{	UsecSinceStart	U64	}
		{	SecPerDay		U32	}
		{	SecPerYear		U32	}
		{	SunDirection	LLVector3	}
		{	SunAngVelocity	LLVector3	}
	}
	{
		SimulatorBlock		Single
		{	IP				IPADDR	}
		{	Port			IPPORT	}
	}
	{
		URLBlock			Single
		{	LocationID		U32			}
		{	LocationLookAt	LLVector3	}
	}
}
==Usage and Notes==
Category:Messages
UserLoginLocationRequest

==Message Layout==
{
	UserLoginLocationRequest Low Trusted Zerocoded
	{
		UserBlock			Single
		{	SessionID		LLUUID	}
		{ TravelAccess	U8		}
		{	FirstLogin		BOOL	}
		{	LimitedToEstate U32		}
	}
	{
		PositionBlock		Single
		{ ViewerRegion	U64 }
		{	ViewerPosition	LLVector3	}
	}
	{
		URLBlock	Single
		{	SimName		Variable	1	}
		{	Pos			LLVector3	}
	}
}
==Usage and Notes==
Category:Messages
UserReport

==Message Layout==
{
	UserReport	Low		NotTrusted Zerocoded
	{
		AgentData		Single
		{	AgentID		LLUUID	}
		{	SessionID	LLUUID	}
	}
	{
		ReportData	Single
		{ ReportType		U8 } 
		{ Category		U8 } 
		{	Position		LLVector3	} 
		{ CheckFlags		U8	} 
		{ ScreenshotID	LLUUID }
		{ ObjectID		LLUUID }
		{ Summary			Variable	1 }
		{ Details 		Variable	2 }
		{	VersionString	Variable	1	}
	}
	{
		MeanCollision		Variable
		{	Perp			LLUUID	}
		{	Time			U32		}
		{	Mag				F32		}
		{	Type			U8		}
	}
}
==Usage and Notes==
Category:Messages
UserReportInternal

==Message Layout==
{
	UserReportInternal Low Trusted Zerocoded
	{
		ReportData	Single
		{ ReportType		U8 }
		{ Category		U8 }
		{ ReporterID		LLUUID }
		{	ViewerPosition	LLVector3	}
		{	AgentPosition	LLVector3	}
		{ ScreenshotID	LLUUID }
		{ ObjectID		LLUUID }
		{ OwnerID			LLUUID }
		{ LastOwnerID		LLUUID }
		{ CreatorID		LLUUID }
		{	SimName			Variable	1	}
		{ Summary			Variable	1 }
		{ Details 		Variable	2 }
		{	VersionString	Variable	1	}
	}
	{
		MeanCollision		Variable
		{	Perp			LLUUID	}
		{	Time			U32		}
		{	Mag				F32		}
		{	Type			U8		}
	}
}
==Usage and Notes==
Category:Messages
User Experience Interest Group

== Quick Links ==
* Transcripts of past meetings
* Articles, Discussions and Proposals arising from past meetings
== About the User Experience Interest Group ==
The User Experience Interest Group (UXIG) was a group of Residents (and occasionally Lindens) interested in the Second Life user experience, including topics such as the SL viewer's user interface, issues faced by new Residents, accessibility for users with disabilities, and general user satisfaction, among others. UXIG was formed on October 30, 2008 after the Resident Experience Lindens announced that their weekly office hours would be reduced to once per month (and later cancelled them altogether). UXIG continued those weekly meetings in an unofficial, Resident-organized capacity. UXIG was discontinued on April 29, 2010 and is no longer meeting. Transcripts of past meetings are still available.
Many UXIG members discuss user experience issues on the SL-UX mailing list. Several Lindens from the Resident Experience team also participate on that list and can answer questions about SL user experience.
Please direct questions and comments about UXIG to the SL-UX mailing list.
Category:User Experience
Category:Second Life Groups
User Experience Interest Group/Topics

This is a running list of topics for the User Experience Interest Group discussions. If you have a topic request or suggestion, edit this page to add it at the end of the appropriate list. Try to keep the topic description concise, ideally a single line or sentence.
If you add a topic, please sign it with (~~~~). That will be converted to your name and the current date, so we can easily see how recent a topic is. For example:
 * Ways to make inventory easier to use. (~~~~)
Becomes:
* Ways to make inventory easier to use. (Jacek Antonelli 06:59, 4 November 2008 (UTC))
== Topic Requests (High Priority) ==
These are topics that someone has requested to be discussed soon. When selecting the weekly topic, topic requests usually take priority over the fallback topics. If you add a request, please IM Jacek Antonelli to make sure she notices it.
* (Edit the page to add yours here!)
If you have a topic request, edit this page to add it! Remember to keep it concise.
== Fallback Topics (Low Priority) ==
These are topic ideas that would be interesting to discuss, but don't need to be discussed soon.
* What OpenSim creators want in a viewer. (Geneko 00:46, 20 November 2009 (UTC))
* "Beyond SL": in what ways would viewers evolve if they weren't tied to SL? (Morgaine 00:46, 20 November 2009 (UTC))
* Improving usability of online marketplaces, integrating them in the viewer. (Jacek Antonelli 00:46, 20 November 2009 (UTC))
* Accessing SL with 3D Displays (stereoscopic and other methods). (Morgaine 00:56, 18 December 2009 (UTC))
* Bugs / issues that affect a specific use case or demographic (builders, clothing creators, animators, models, shoppers, etc.). (Jacek Antonelli 00:46, 20 November 2009 (UTC))
* (Edit the page to add yours here!)
If you have a topic suggestion, edit this page to add it! Remember to keep it concise.
== Past Topics ==
Please see the transcripts page for topics discussed at past meetings.
== Topics Fanout ==
The following links factor out specific topics addressed at UXIG meetings:
* Client-side Scripting for HUDs and Widgets
* add more here
Category:User Experience
__NOTOC__
Usernames/fr

Votre nom d'utilisateur est le nom de votre compte que vous utilisez pour vous connectez sur Second Life. 
Votre nom d'utilisateur apparaît au-dessus de votre avatar dans Second Life et vous identifie à d'autres résidents de Second Life. Vous pouvez également définir un nom d'affichage () qui apparaît au-dessus de votre nom d'utilisateur.
== Es que mon "nom sur Second Life" est mon nom d'utilisateur ? ==
Si vous êtes sur une version la plus récente de résident de Second Life, vous avez créé un nom d'utilisateur unique lors de votre inscription. Cet identifiant est ce que vous entrez pour vous connecter à Second Life (par exemple: mortimer1980, jsmith57).
 Si vous êtes un résident de longue date Second Life, vous avez choisi un nom de Second Life lors de votre inscription. Que le nom de Second Life fait maintenant votre nom d'utilisateur, en utilisant la formule:
(Second Life prénom, en minuscules). (Second Life nom de famille, en minuscules)
Par exemple, si votre nom de Second Life a été Joe Smith lors de votre inscription, votre nom d'utilisateur est joe.smith.
Vous devez entrer votre nom d'utilisateur, ou votre "classique" Second Life noms et prénom dans le champ Nom d'utilisateur pour vous connectez sur Second Life.
 
== Est-ce que mon nom est mon nom d'affichage? ==
Votre nom d'utilisateur et le nom d'affichage sont séparés. 
Vous pouvez utiliser le client de Second Life pour définir un autre nom pour votre avatar qui est différent de votre nom d'utilisateur. Voir Afficher les noms pour plus de détails. Toutefois, vous ne pouvez pas utiliser votre nom d'affichage pour vous connecter à Second Life.
== Afficher ou masquer les noms d'utilisateur ==
Pour afficher ou masquer les noms d'utilisateurs dans le monde virtuel, à la fois dans le chat et plus chaque avatar:
# Connectez dans Second Life.
# Choisissez Moi> Préférences dans le menu du haut.
# Cliquez l'onglet Général.
# Sélectionner la case à cocher Noms d'utilisateur. Si la case est cochée, les noms d'utilisateur sont affichés. Si la case n'est pas cochée, les noms d'utilisateur sont cachés.
# Cliquez OK.
Using Doxygen

==Introduction ==
Doxygen is a utility that extracts documentation from source files. It can generate HTML output and/or PDF output as well as a few other types. In addition to basic information gathered from non-comment portions of the source files (i.e. function names, parameters, etc.), it attempts to pick up comments and place them in the documentation where appropriate. Additionally it recognizes a special format of comment in order to give a great deal of control over the generated documentation.
==Installing Doxygen and helpers==
In addition to Doxygen itself, you may want to install GraphViz because Doxygen can use its graph generator tool (dot) to include some nice dependency graphs in the output. You can skip installation of GraphViz, but you won't get the nice graphs.
To generate PDF output from Doxygen, install the tetex package.
===Debian Linux ===
If you're on a Debian Linux, you can install Doxygen and the dot graph generator (that Doxygen uses) like this:
 sudo aptitude install doxygen graphviz
===Mac OS X MacPorts ===
If you're using Mac OS X and MacPorts, you can install Doxygen and the dot graph generator (that Doxygen uses) like this:
 sudo port install doxygen graphviz
===Cygwin / Windows===
For Cygwin, run the Cygwin installer and install both Doxygen and GraphViz.
==Running Doxygen==
The Doxygen manual covers running Doxygen in some detail. Doxygen gets all of its configuration information from a config file,which has a seemingly endless list of options. For example, if you want to run Doxygen on only a couple of files (such as the ones you're editing -- to see if you got the Doxygen-specific comments right), you have to edit the configuration file before you run Doxygen.
WARNING: running Doxygen on a lot of files can take quite a while. This can be a very annoyingly large amount of time depending on how you've configured it and how many files are involved. It almost seems like the time to run goes up exponentially as the number of files being processed increases.
==Using Doxygen==
Doxygen manuals:
* PDF
* HTML
==Source code comments==
Everyone new to Doxygen should look at the Documenting the code section of the Doxygen manual. It explains the formatting of the special Doxygen comments and gives several examples.
The Linden Lab coding standard specifies using Doxygen comments in code.
Category:Open Source Portal
Using MLP or MLPV2

* Back to In-World Maker Tools
 Information about using Multi-Love-Pose scripts, MLP and MLPV2
MLP and MLPV2 are sets of scripts and configuration files that enable you to put multiple poses, with different animations and avatar positions for each pose, into an object such as furniture or a HUD. Poses are selected by menu. Both MLP and MLPV2 are freeware. MLP is BSD-licenced.
MLP and MLPV2 are commonly used for sex beds, but can be used for a variety of purposes. It is relatively easy to set up new poses once you have the animations you need and sufficient building skills to move and orient objects where you want them. In this case, you're orienting the avatars in the poses. If the object is sold, as long as the seller allows full permissions on certain configuration files, ends user can adjust the poses to suit their own avatars or add new poses of their own. All this is possible without modifying any scripts.
== Versions ==
* MLP was written by Miffy Fluffy. MLP supports one or 2 avatars in a pose. It is currently still available via his profile Picks, take the MLP teleport. 
* MLPV2 was created from MLP by Lear Cale, and supports up to 6 avatars per pose, as well as configurable facial expressions, modular configurations (adding "pose packs"), LinkMessage buttons for scripters to add custom features, AutoZHAO (turns your AO off, if so equipped), sequences, rezzables, and has more free memory for poses.
== Comparables ==
* SexGen(tm) is a commercial product offering similar features.
* Miffy has a successor to MLP, a commercial product called XPOSE. It supports up to 8 avatars, expressions, prop objects, and other features.
== Tutorials ==
* MLP setup tutorial
* MLPV2 Tutorial
== Be Legal! ==
Just because someone gave you or sold you a set of animations for next to nothing doesn't mean they are actually freebies -- in many instances, they might in fact be pirated property!
Assume that poses obtained in such a way are not yours to use until you have contacted the creator listed in the animation properties and verified with him / her that they are meant to be freebies. If you find they are indeed pirated, ask the creator where their store is so that you can purchase a licence to legally use the animation.
Case in point -- beware the 62 Animation MLP Set, popular as of 2008, which is chock full of pirated product!
Category:MLPV2
Using Multi-select

What is Multi-select?
Every modern operating system provides a way to select multiple files or folders and do something to each of them. In 1.7 you can select a number of items in your inventory and drag them into a box or into different folders. You can drag multiple pieces of clothing onto your avatar at once. You can also delete items using multi-select. You can view multiple inventory items' properties by right-clicking a multi-selected group and choosing 'Properties'. You can also 'Open' most items in the inventory, providing you with a tabbed window in which you can view textures, read/edit notecards and modify for-sale options for objects. If only clothing items are opened they will be worn by your avatar.
You can select the contents of an object and drag all the items in the object to your inventory! No more repetitive stress injuries from dragging each item out and into your inventory individually!
Hold the Shift key and click on the first item, then the last item to add everything between the two clicked items to the selection. Hold the Ctrl key and click individual items to add or remove them from the selection. Click, hold and drag one of the selected items to move the whole selection. 
As of 1.7.0, there are some limitations to using Multi-select. You can not drag objects into the world using multi-select. You can not drag no-copy items and copyable items into a folder. Only the last-selected object in a multi-selected group will be attached to an avatar, even if the objects have different attachment points.
VD & AiTech Object Renaming Script

"Library" 
<lsl>
// THIS SCRIPT SHOULD NOT BE SOLD UNDER ANY CIRCUMSTANCE, IT IS UNDER THE GNU LICENSE!
// Created By: Asami Imako [AiTech].
// MODIFY TO MAKE BOTH FIRST & LAST NAME DISPLAY ON THE OBJECTS TITLE
// Modify By: Chihuahua Violet, [VD] (C) 2009.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
default
{
 state_entry()
 {
 string name = llKey2Name(llGetOwner());
 name = llGetSubString(name, 0, llSubStringIndex(name, " ")-1 ); // get lastname
 llSetObjectName("[VD] " + name + "'s Right Cuff");
 llSetObjectDesc("[VD] " + name +"'s Right Cuff - v1.20");
 }
 
 changed(integer change)
 {
 if(change & CHANGED_OWNER)
 {
 llResetScript();
 }
 }
}
</lsl>
VFS/LFS usage in llappviewer.h

=== /newview/llappviewer.h ===
<php>287 // VFS globals - gVFS is for general use 
288 // gStaticVFS is read-only and is shipped w/ the viewer 
289 // it has pre-cache data like the UI .TGAs 
290 extern LLVFS *gStaticVFS; </php>
VFS/LFS usage in llstartup.cpp

=== /newview/llstartup.cpp ===
<php>74 #include "llvfs.h"</php>
<php>215 // local function declaration 
( . . . )
233 void asset_callback_nothing(LLVFS*, const LLUUID&, LLAssetType::EType, void*, S32); </php>
<php>298 // Returns FALSE to skip other idle processing. Should only return 
299 // TRUE when all initialization done. 
300 BOOL idle_startup() 
301 { 
( . . . )
504 // start the xfer system. by default, choke the downloads 
505 // a lot... 
506 const S32 VIEWER_MAX_XFER = 3; 
507 start_xfer_manager(gVFS); 
508 gXferManager->setMaxIncomingXfers(VIEWER_MAX_XFER); 
509 F32 xfer_throttle_bps = gSavedSettings.getF32("XferThrottle"); 
510 if (xfer_throttle_bps > 1.f) 
511 { 
512 gXferManager->setUseAckThrottling(TRUE); 
513 gXferManager->setAckThrottleBPS(xfer_throttle_bps); 
514 } 
515 gAssetStorage = new LLViewerAssetStorage(msg, gXferManager, gVFS); 
( . . . )
891 // Display the startup progress bar. 
892 gViewerWindow->setShowProgress(TRUE); 
893 gViewerWindow->setProgressCancelButtonVisible(TRUE, "Quit"); 
894 
895 // Poke the VFS, which could potentially block for a while if 
896 // Windows XP is acting up 
897 set_startup_status(0.07f, "Verifying cache files (can take 60-90 seconds)...", NULL); 
898 display_startup(); 
899 
900 gVFS->pokeFiles(); </php>
<php>3032 void init_stat_view() 
3033 { 
( . . . )
3245 stat_barp = net_statviewp->addStat("VFS Pending Ops", &(gViewerStats->mVFSPendingOperations)); 
3246 stat_barp->setUnitLabel(" "); 
3247 stat_barp->mPerSec = FALSE; 
3248 stat_barp->mDisplayBar = FALSE; </php>
<php>3495 void asset_callback_nothing(LLVFS*, const LLUUID&, LLAssetType::EType, void*, S32) 
3496 { 
3497 // nothing 
3498 }</php>