Category:LSL User-Defined Functions
| LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
User-Defined Functions
This category contains custom pre-defined function contributions from the LSL community to extend the abilities of LSL. To add a wiki page to this category, include a link to this page. You may use the Template:LSL_Function (with "mode" set to user) to create the page to be added here.
Go to the Functions page to view the built-in functions.
About User-Defined Functions
LSL allows user-defined functions which will help keep scripts compact and readable, and allow code reuse. The LSL Style Guide suggests that user-defined functions should be placed before the default state definition and after user-defined variables.
The definitions are as follows:
<return_type> function_name([<parameter1_type> parameter1[, <parameter2_type> parameter2[, ...]]])
{
function_statements;
...
return value_of_return_type;
}
- User-defined functions must be defined before any states in the script or a syntax error will be generated on compilation.
return_typeandparameterN_typemay be any LSL variable type.- The
return_typemay also be omitted for a void type function. Such a function is not required to use thereturnstatement at all, and if one is used it will have no parameter.
- The
- There are no known limits on the maximum number and size of parameters, beyond normal script memory limits.
- If the function requires no parameters, the entire parameter list can be omitted.
- Parameters are passed by value, as with built-in functions. They behave like local variables and writing into them has no effect on what the function was called with.
- Entering a user-defined function starts a new scope. Only global variables and the function parameters are visible; any local variables from where the function was called from are not directly available.
- If multiple return values are desired, they can be packed into a list, a vector or a rotation, depending on what you need to return.
Examples
// example with void return type:
let_prim_say_something_and_include_owner_info(string message)
{
key ownerKey = llGetOwner();
string ownerName = llKey2Name(ownerKey);
llSay(PUBLIC_CHANNEL, "/me (owned by " + ownerName + "): " + message);
}
default
{
state_entry()
{
let_prim_say_something_and_include_owner_info("Hello world!");
}
}
// example with integer return type (actually it's a boolean)
integer is_sun_up()
{
vector sunDirection = llGetSunDirection();
if (sunDirection.z < 0.0)
return FALSE;
// else
return TRUE;
}
default
{
state_entry()
{
if (is_sun_up())
llSay(PUBLIC_CHANNEL, "Good day!");
else
llSay(PUBLIC_CHANNEL, "Good night!");
}
}
Below is a list of functions on this wiki that have been included in this category:
Pages in category
- 2D Pseudo-Array
- BTLT
- BitRotLeftKey
- CcFixListDatatypes
- Chr
- Combined Library
- DialogPlus
- GradientValue
- Hex2Int
- Int2Hex
- LSL Style Guide
- List cast
- ListCast
- ListCompare
- ListFindListReverse
- ListItemDelete
- ListItemReplace
- ListReverse
- ListStridedMove
- ListStridedRemove
- ListStridedUpdate
- ListToWholeNumbers
- ListUnique
- ListXandY
- ListXequY
- ListXneqY
- ListXnotY
- ListXorY
- ListXxorY
- Millisec
- MySay
- MySayOwner
- Ord
- RandKey
- RandomString
- RecursiveDialog
- RemoveHTMLTags
- Stamp2UnixInt
- Stamp2WeekdayStr
- String Compare
- StringReverse
- StringTruncate
- Stristr
- SubStringLastIndex
- Text To Byte Conversion
- TightList
- TimeAgo
- TrimList
- UHSL2RGB
- UName2Legacy
- UName2Username
- URGB2HSL
- UTF-8
- Unix2StampLst
- Unix2WeekdayStr
- User:Pedro Oval/UnixToDateTime
- User:Peter Stindberg/is uuid
- User:Peter Stindberg/strCapitalize
- User:Rhet0rica Resident/glob match
- User:Strife Onizuka/Float Functions
- User:Strife Onizuka/int2hex
- User:Ugleh Ulrik/GiveBulkMoney
- User:Ugleh Ulrik/ListKeyCase
- WrapText
- XORKey