<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://opensimulator.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://opensimulator.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Talun</id>
		<title>OpenSimulator - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://opensimulator.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Talun"/>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Special:Contributions/Talun"/>
		<updated>2026-05-06T13:14:03Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.19.9</generator>

	<entry>
		<id>http://opensimulator.org/wiki/OsParcelJoin</id>
		<title>OsParcelJoin</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsParcelJoin"/>
				<updated>2013-06-22T18:53:04Z</updated>
		
		<summary type="html">&lt;p&gt;Talun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|function_syntax=void osParcelJoin(vector pos1, vector pos2)&lt;br /&gt;
|ossl_example=&amp;lt;source lang = &amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// ----------------------------------------------------------------&lt;br /&gt;
// Example / Sample Script to show function use.&lt;br /&gt;
//&lt;br /&gt;
// Script Title:    osParcelJoin.lsl&lt;br /&gt;
// Script Author:&lt;br /&gt;
// Threat Level:    High&lt;br /&gt;
// Script Source:   SUPPLEMENTAL http://opensimulator.org/wiki/osParcelJoin&lt;br /&gt;
//&lt;br /&gt;
// Notes: See Script Source reference for more detailed information&lt;br /&gt;
// This sample is full opensource and available to use as you see fit and desire.&lt;br /&gt;
// Threat Levels only apply to OSSL &amp;amp; AA Functions&lt;br /&gt;
// See http://opensimulator.org/wiki/Threat_level&lt;br /&gt;
// ================================================================&lt;br /&gt;
// Inworld Script Line:     osParcelJoin(vector start, vector end);&lt;br /&gt;
//&lt;br /&gt;
// Example of osParcelJoin&lt;br /&gt;
// This function allows for creating and managing parcels programmatically.&lt;br /&gt;
// Joins( start.x,start.y _to_ end.x,end.y ) Z is ignored but must exist in syntax&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0,&amp;quot;Touch to Join adjacent Parcels&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer num_detected)&lt;br /&gt;
    {&lt;br /&gt;
        vector start = &amp;lt;0.0, 0.0, 0.0&amp;gt;; //top corner&lt;br /&gt;
        vector end = &amp;lt;100.0, 100.0, 0.0&amp;gt;;&lt;br /&gt;
        osParcelJoin(start, end);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|description=Joins two adjacent parcels within the same region.&lt;br /&gt;
|&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Talun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OSSLNPC</id>
		<title>OSSLNPC</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OSSLNPC"/>
				<updated>2012-07-06T23:27:18Z</updated>
		
		<summary type="html">&lt;p&gt;Talun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
&lt;br /&gt;
Since 12th August 2011 in the Git master development code branch, OpenSimulator had provided a number of functions for creating and manipulating NPCs. These replace the previous functions, that had stopped working by OpenSimulator 0.7.1.1 (possibly broken since OpenSimulator 0.6.9).&lt;br /&gt;
&lt;br /&gt;
The general philosophy in creating these new functions is to &lt;br /&gt;
&lt;br /&gt;
# Give script writers the simple tools needed to create more sophisticated behaviour.&lt;br /&gt;
# Avoid duplicating existing LSL and OSSL functions. For instance, finding out what state an agent is in can be done through llGetAgentInfo() rather than creating a special NPC function. &lt;br /&gt;
&lt;br /&gt;
NPCs are controlled via a script which must be in the same region as the NPC. This could be housed in an attachment that is attached to the avatar.&lt;br /&gt;
&lt;br /&gt;
NPCs created user these scripts cannot leave the region in which they were born. If you want region crossing behaviour, please look at the options on the [[NPC]] wiki page.&lt;br /&gt;
&lt;br /&gt;
NPC appearance is saved and loaded by serializing the appearance data structure to a notecard present in the same prim as the script. The required textures should be preserved when an OAR is saved and loaded.&lt;br /&gt;
&lt;br /&gt;
This functionality is at an early stage and method signatures could change, certainly before the release of OpenSimulator 0.7.2. However, we hope to avoid this.&lt;br /&gt;
&lt;br /&gt;
= Enabling =&lt;br /&gt;
&lt;br /&gt;
To use these functions, in the OpenSim.ini file you will need the following config&lt;br /&gt;
&lt;br /&gt;
# Enabled = true set in the [NPC] section.&lt;br /&gt;
# Enabled = true set in the [XEngine] section.&lt;br /&gt;
# AllowOSFunctions = true in the [XEngine] section.&lt;br /&gt;
# OSFunctionThreatLevel = VeryHigh in the [XEngine] section. The functions osAgentSaveAppearance(), osAvatarPlayAnimation() and osAvatarStopAnimation() need this level. If you don't need these functions, then a &amp;quot;High&amp;quot; level will suffice.&lt;br /&gt;
&lt;br /&gt;
See [[Configuring Simulator Parameters#Getting information about parameters]] if you need to double check that these parameters have been set correctly.&lt;br /&gt;
&lt;br /&gt;
= Notes =&lt;br /&gt;
&lt;br /&gt;
* When using your avatar to model appearance before saving, you will need to wait a few seconds before invoking any save appearance command. This is because appearance saving currently operates on a timer in order to manage multiple appearance updates from the viewer.&lt;br /&gt;
* OpenSimulator 0.7.3-rc1 introduces the concept of 'owned' and 'unowned' NPC. An 'owned' NPC is one where only the creating script and other scripts with the same owner can manipulate the NPC. An 'unowned' NPC is one where any script with the right permissions (as defined in the [XEngine] configuration section) can manipulate it. In OpenSimulator 0.7.3, all avatars are 'owned' by default unless otherwise specified in the osNpcCreate() call.&lt;br /&gt;
&lt;br /&gt;
= Sensing =&lt;br /&gt;
&lt;br /&gt;
In OpenSimulator 0.7.2, LSL sensors will detect NPCs as ordinary agents.&lt;br /&gt;
&lt;br /&gt;
In OpenSimulator 0.7.3-rc1 onwards, unless otherwise specified, NPCs will only be detected using the OpenSimulator-specific NPC flag, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
//Author: mewtwo0641&lt;br /&gt;
&lt;br /&gt;
list keys = []; &lt;br /&gt;
key npc;&lt;br /&gt;
string toucher;&lt;br /&gt;
key toucherkey;&lt;br /&gt;
vector toucherPos;&lt;br /&gt;
integer npc_on = FALSE;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{ &lt;br /&gt;
    touch_start(integer x)&lt;br /&gt;
    {   &lt;br /&gt;
        toucherkey = llDetectedKey(0);&lt;br /&gt;
        toucherPos = llDetectedPos(0);&lt;br /&gt;
        vector npcPos = llGetPos() + &amp;lt;1,1,1&amp;gt;;&lt;br /&gt;
    &lt;br /&gt;
        if(npc_on == FALSE)&lt;br /&gt;
        {    &lt;br /&gt;
            npc = osNpcCreate(&amp;quot;Fred&amp;quot;, &amp;quot;Flintstone&amp;quot;, npcPos, toucherkey);&lt;br /&gt;
            npc_on = TRUE;&lt;br /&gt;
            llSensor(&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, AGENT | NPC, 96.0, PI); //Will always return NPC key regardless of npc create option&lt;br /&gt;
            return;&lt;br /&gt;
        }   &lt;br /&gt;
    &lt;br /&gt;
        if(npc_on == TRUE)&lt;br /&gt;
        {   &lt;br /&gt;
            osNpcRemove(npc);&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }   &lt;br /&gt;
    }   &lt;br /&gt;
    &lt;br /&gt;
    sensor(integer num)&lt;br /&gt;
    {   &lt;br /&gt;
        keys = []; &lt;br /&gt;
        integer i = 0;&lt;br /&gt;
    &lt;br /&gt;
        for(i; i &amp;lt; num; i++)&lt;br /&gt;
        {   &lt;br /&gt;
            keys += llDetectedKey(i); &lt;br /&gt;
        }   &lt;br /&gt;
    &lt;br /&gt;
        llOwnerSay(llDumpList2String(keys, &amp;quot;\n&amp;quot;));&lt;br /&gt;
    }   &lt;br /&gt;
    &lt;br /&gt;
    no_sensor()&lt;br /&gt;
    {   &lt;br /&gt;
        keys = [];   &lt;br /&gt;
    }   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can get NPCs to be detected as AGENTs again using the OS_NPC_SENSE_AS_AGENT option below in osNpcCreate().&lt;br /&gt;
&lt;br /&gt;
The justification is that detecting NPCs as AGENTs by default may make some scripts unusable (e.g. radars that know nothing about NPCs). However, conversely other scripts may not behave as expected if NPCs aren't sensed as agents (e.g. doors that open automatically for avatars would not open for NPCs).&lt;br /&gt;
&lt;br /&gt;
Please note that this applies only to sensors at this time.&lt;br /&gt;
&lt;br /&gt;
= Functions =&lt;br /&gt;
&lt;br /&gt;
== Create and Remove ==&lt;br /&gt;
=== [[osNpcCreate]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcCreate(string firstname, string lastname, vector position, string cloneFrom):key&lt;br /&gt;
&lt;br /&gt;
cloneFrom may be:&lt;br /&gt;
&lt;br /&gt;
* Name of the notecard containing a serialized avatar appearance, or&lt;br /&gt;
* Asset UUID of the Notecard, or&lt;br /&gt;
* UUID of an avatar logged into the same region. However, please note that this appearance will not be persisted unless osNpcSaveAppearance() is called.&lt;br /&gt;
&lt;br /&gt;
If the NPC is successfully created, then its UUID is returned, which is required for all subsequent functions. Example is available at [[osNpcCreate]]&lt;br /&gt;
&lt;br /&gt;
(OpenSimulator 0.7.3-rc1 onwards only). This creates an NPC that is 'owned' by the creating script and sensed using the OpenSimulator-only NPC flag for sensors.&lt;br /&gt;
&lt;br /&gt;
=== osNpcCreate ===&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.7.3-rc1 onwards.&lt;br /&gt;
&lt;br /&gt;
 osNpcCreate(string firstname, string lastname, vector position, string cloneFrom, integer options):key&lt;br /&gt;
&lt;br /&gt;
cloneFrom may be:&lt;br /&gt;
&lt;br /&gt;
* Name of the notecard containing a serialized avatar appearance, or&lt;br /&gt;
* Asset UUID of the Notecard, or&lt;br /&gt;
* UUID of an avatar logged into the same region. However, please note that this appearance will not be persisted unless osNpcSaveAppearance() is called.&lt;br /&gt;
&lt;br /&gt;
integer is a set of flags that may be 0 or one or more of&lt;br /&gt;
&lt;br /&gt;
* OS_NPC_NOT_OWNED - create an unowned NPC.&lt;br /&gt;
* OS_NPC_SENSE_AS_AGENT - create an NPC that is sensed as an AGENT with LSL sensors &lt;br /&gt;
&lt;br /&gt;
If the NPC is successfully created, then its UUID is returned, which is required for all subsequent functions. Example is available at [[osNpcCreate]]&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcRemove]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcRemove(key npc):void&lt;br /&gt;
&lt;br /&gt;
Remove the given avatar from the region. Example at [[osNpcRemove]].&lt;br /&gt;
&lt;br /&gt;
== Get and Set ==&lt;br /&gt;
=== osIsNpc ===&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.7.3-rc1 onwards.&lt;br /&gt;
&lt;br /&gt;
 osIsNpc(key npc):integer&lt;br /&gt;
&lt;br /&gt;
Returns TRUE if the given key is an NPC, false otherwise.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcGetRot]] ===&lt;br /&gt;
&lt;br /&gt;
Gets the rotation of the avatar. Only the rotation around the Z plane in Euler rotation (horizontal rotation) has any meaning.&lt;br /&gt;
&lt;br /&gt;
 osNpcGetRot(key npc):rotation&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcSetRot]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcSetRot(key npc, rotation rot):void&lt;br /&gt;
&lt;br /&gt;
Set the rotation of the avatar. Only setting the rotation in the Z plane in Euler rotation will have any meaningful effect (turning the avatar to point in one direction or another). Setting X or Y Euler values will result in the avatar rotating in an undefined manner.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcGetPos]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcGetPos(key npc):vector&lt;br /&gt;
&lt;br /&gt;
Return the current position of the NPC.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcGetOwner]] ===&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.7.3-rc1 onwards.&lt;br /&gt;
&lt;br /&gt;
 osNpcGetOwner(key npc):key&lt;br /&gt;
&lt;br /&gt;
Return the owner of the given NPC (i.e. the owner of the script that created it). If the NPC is unowned or the input key does not belong to an NPC then returns NULL_KEY.&lt;br /&gt;
&lt;br /&gt;
== Movement ==&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcMoveTo]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcMoveTo(key npc, vector position):void&lt;br /&gt;
&lt;br /&gt;
An older function that performs an osNpcMoveToTarget() by flying and landing at the target.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcMoveToTarget]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcMoveToTarget(key npc, vector target, int options):void&lt;br /&gt;
&lt;br /&gt;
Move the avatar to a given target over time. How the avatar will get there depends on the following options.&lt;br /&gt;
&lt;br /&gt;
* OS_NPC_FLY - Fly the avatar to the given position. The avatar will not land unless the OS_NPC_LAND_AT_TARGET option is also given.&lt;br /&gt;
* OS_NPC_NO_FLY - Do not fly to the target. The NPC will attempt to walk to the location. If it's up in the air then the avatar will keep bouncing hopeless until another move target is given or the move is stopped&lt;br /&gt;
* OS_NPC_LAND_AT_TARGET - If given and the avatar is flying, then it will land when it reaches the target. If OS_NPC_NO_FLY is given then this option has no effect.&lt;br /&gt;
* OS_NPC_RUNNING - if given, NPC avatar moves at running/fast flying speed, otherwise moves at walking/slow flying speed.&lt;br /&gt;
&lt;br /&gt;
OS_NPC_FLY and OS_NPC_NO_FLY are options that cannot be combined - the avatar will end up doing one or the other. If you want the avatar to fly and land at the target, then OS_NPC_LAND_AT_TARGET must be combined with OS_NPC_FLY. For instance,&lt;br /&gt;
&lt;br /&gt;
 osNpcMoveToTarget(npc, llGetPos() + &amp;lt;9,9,5&amp;gt;, OS_NPC_FLY|OS_NPC_LAND_AT_TARGET);&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcStopMoveToTarget]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcStopMoveToTarget(key npc):void&lt;br /&gt;
&lt;br /&gt;
Stop a current move to a target.&lt;br /&gt;
&lt;br /&gt;
== Sitting and standing ==&lt;br /&gt;
&lt;br /&gt;
=== osNpcSit ===&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.7.3-rc1 onwards.&lt;br /&gt;
&lt;br /&gt;
 osNpcSit(key npc, key target, int options):void&lt;br /&gt;
&lt;br /&gt;
Sit an NPC on a prim target. As yet there are no options, so always input 0.&lt;br /&gt;
&lt;br /&gt;
=== osNpcStand ===&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.7.3-rc1 onwards.&lt;br /&gt;
&lt;br /&gt;
 osNpcStand(key npc):void&lt;br /&gt;
&lt;br /&gt;
Make an npc stand up.&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcSay]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcSay(key npc, string message):void &lt;br /&gt;
 osNpcSay(key npc, int channel, string message):void&lt;br /&gt;
&lt;br /&gt;
Get the NPC to say the given message. &lt;br /&gt;
&lt;br /&gt;
If channel is specified then the chat is said on the given channel.  The channel parameter is only available in OpenSimulator 0.7.4 development code at this time.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcShout]] ===&lt;br /&gt;
&lt;br /&gt;
Only in OpenSimulator 0.7.4 development code at this time.&lt;br /&gt;
&lt;br /&gt;
 osNpcShout(key npc, int channel, string message):void&lt;br /&gt;
&lt;br /&gt;
Get the NPC to shout the given message on the given channel.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcWhisper]] ===&lt;br /&gt;
&lt;br /&gt;
Only in OpenSimulator 0.7.4 development code at this time.&lt;br /&gt;
&lt;br /&gt;
 osNpcWhisper(key npc, int channel, string message):void&lt;br /&gt;
&lt;br /&gt;
Get the NPC to whisper the given message on the given channel.&lt;br /&gt;
&lt;br /&gt;
== Animations ==&lt;br /&gt;
&lt;br /&gt;
=== osNpcPlayAnimation ===&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.7.3-rc1 onwards.&lt;br /&gt;
&lt;br /&gt;
 osNpcPlayAnimation(key npc, string animation):void&lt;br /&gt;
&lt;br /&gt;
Get an NPC to play an animation. The animation can either be a key or the name of an animation in the same inventory as the script.&lt;br /&gt;
&lt;br /&gt;
=== osNpcStopAnimation ===&lt;br /&gt;
&lt;br /&gt;
In OpenSimulator 0.7.3-rc1 there is a bug which makes this play the animation instead. This will be corrected for the final release but in the mean time please use osAvatarStopAnimation() instead.&lt;br /&gt;
&lt;br /&gt;
 osNpcStopAnimation(key npc, string animation):void&lt;br /&gt;
&lt;br /&gt;
Get an NPC to stop playing an animation. The animation can either be a key or the name of an animation in the same inventory as the script.&lt;br /&gt;
&lt;br /&gt;
== Appearance ==&lt;br /&gt;
&lt;br /&gt;
NPC appearance is manipulated by saving and loading appearance data to notecards from the same inventory as the invoking script.&lt;br /&gt;
&lt;br /&gt;
=== [[osOwnerSaveAppearance]] ===&lt;br /&gt;
&lt;br /&gt;
 osOwnerSaveAppearance(string notecard):key&lt;br /&gt;
&lt;br /&gt;
Save the owner's current appearance to a notecard in the prim's inventory. This includes body part data, clothing items and attachments. If a notecard with the same name already exists then it is replaced. The owner must be present in the region when this function is invoked. The baked textures for the owner (necessary to recreate appearance on the NPC) are saved permanently.&lt;br /&gt;
&lt;br /&gt;
=== [[osAgentSaveAppearance]] ===&lt;br /&gt;
&lt;br /&gt;
 osAgentSaveAppearance(key agentId, string notecard):key&lt;br /&gt;
&lt;br /&gt;
Save an arbitrary avatar's appearance to a notecard in the prim's inventory. This includes body part data, clothing items and attachments. If a notecard with the same name already exists then it is replaced. The avatar must be present in the region when this function is invoked. The baked textures for the avatar (necessary to recreate appearance on the NPC) are saved permanently.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcSaveAppearance]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcSaveAppearance(key npc, string notecard):key&lt;br /&gt;
&lt;br /&gt;
Save the NPC's current appearance to a notecard in the prim's inventory. This includes body part data, clothing items and attachments. If a notecard with the same name already exists then it is replaced. The avatar must be present in the region when this function is invoked. The baked textures for the avatar (necessary to recreate appearance) are saved permanently.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcLoadAppearance]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcLoadAppearance(key npc, string notecard):void&lt;br /&gt;
&lt;br /&gt;
Load appearance from a notecard. This notecard must contain appearance data created with one of the save appearance functions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Touch ==&lt;br /&gt;
=== osNpcTouch ===&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.7.4 development code at this time.&lt;br /&gt;
&lt;br /&gt;
 osNpcTouch(key npc, key objectKey, integer linkNum)&lt;br /&gt;
&lt;br /&gt;
Allows the NPC to touch objects.&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&lt;br /&gt;
This is a rough example script for most of the current NPC functionality. Please feel free to improve it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
key npc;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llListen(10,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;);&lt;br /&gt;
    }  &lt;br /&gt;
     &lt;br /&gt;
    listen(integer channel, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if (msg != &amp;quot;&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if (msg == &amp;quot;create&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                osOwnerSaveAppearance(&amp;quot;appearance&amp;quot;);&lt;br /&gt;
                npc = osNpcCreate(&amp;quot;Jane&amp;quot;, &amp;quot;Doe&amp;quot;, &amp;lt;115, 165, 23&amp;gt;, &amp;quot;appearance&amp;quot;);&lt;br /&gt;
            }   &lt;br /&gt;
            else if (msg == &amp;quot;remove&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcSay(npc, &amp;quot;You will pay for this with your liiiiiivvveeessss!!!.....&amp;quot;);&lt;br /&gt;
                osNpcRemove (npc);&lt;br /&gt;
            }   &lt;br /&gt;
            else if (msg == &amp;quot;say&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcSay(npc, &amp;quot;I am your worst Nightmare!!!!&amp;quot;);&lt;br /&gt;
            }   &lt;br /&gt;
            else if (msg == &amp;quot;touch&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcTouch(npc, llGetKey(), LINK_THIS);&lt;br /&gt;
            }   &lt;br /&gt;
            else if (msg == &amp;quot;move&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcMoveTo(npc, llGetPos() + &amp;lt;9,9,0&amp;gt;);&lt;br /&gt;
            }   &lt;br /&gt;
            else if (msg == &amp;quot;movetarget&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcMoveToTarget(npc, llGetPos() + &amp;lt;9,9,5&amp;gt;, OS_NPC_FLY|OS_NPC_LAND_AT_TARGET);&lt;br /&gt;
            }&lt;br /&gt;
            else if (msg == &amp;quot;movetargetnoland&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcMoveToTarget(npc, llGetPos() + &amp;lt;9,9,5&amp;gt;, OS_NPC_FLY);&lt;br /&gt;
            }            &lt;br /&gt;
            else if (msg == &amp;quot;movetargetwalk&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcMoveToTarget(npc, llGetPos() + &amp;lt;9,9,0&amp;gt;, OS_NPC_NO_FLY);                &lt;br /&gt;
            }&lt;br /&gt;
            else if (msg == &amp;quot;rot&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                vector xyz_angles = &amp;lt;0,0,45&amp;gt;; // This is to define a 45 degree change&lt;br /&gt;
                vector angles_in_radians = xyz_angles * DEG_TO_RAD; // Change to Radians&lt;br /&gt;
                rotation rot_xyzq = llEuler2Rot(angles_in_radians); // Change to a Rotation                &lt;br /&gt;
                rotation rot = osNpcGetRot(npc);&lt;br /&gt;
                osNpcSetRot(npc, rot * rot_xyzq);&lt;br /&gt;
            }&lt;br /&gt;
            else if (msg == &amp;quot;animate&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osAvatarPlayAnimation(npc, &amp;quot;stabbed+die_2&amp;quot;);&lt;br /&gt;
                llSleep(3);&lt;br /&gt;
                osAvatarStopAnimation(npc, &amp;quot;stabbed+die_2&amp;quot;);&lt;br /&gt;
            }   &lt;br /&gt;
            else if (msg == &amp;quot;save&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcSaveAppearance(npc, &amp;quot;appearance&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else if (msg == &amp;quot;load&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcLoadAppearance(npc, &amp;quot;appearance&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else if (msg == &amp;quot;clone&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                osOwnerSaveAppearance(&amp;quot;appearance&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else if (msg == &amp;quot;stop&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcStopMoveToTarget(npc);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llOwnerSay(&amp;quot;I don't understand [&amp;quot; + msg + &amp;quot;]&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }   &lt;br /&gt;
    }   &lt;br /&gt;
    touch_start(integer x)&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(&amp;quot;Touched by &amp;quot; + llDetectedName(0));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Questions/Comments =&lt;br /&gt;
&lt;br /&gt;
Please leave your questions and comments on [[Talk:OSSLNPC|this article's talk page]].&lt;br /&gt;
&lt;br /&gt;
[[Category:OSSL Functions]]&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Talun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OSSLNPC</id>
		<title>OSSLNPC</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OSSLNPC"/>
				<updated>2012-07-06T23:17:45Z</updated>
		
		<summary type="html">&lt;p&gt;Talun: /* Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
&lt;br /&gt;
Since 12th August 2011 in the Git master development code branch, OpenSimulator had provided a number of functions for creating and manipulating NPCs. These replace the previous functions, that had stopped working by OpenSimulator 0.7.1.1 (possibly broken since OpenSimulator 0.6.9).&lt;br /&gt;
&lt;br /&gt;
The general philosophy in creating these new functions is to &lt;br /&gt;
&lt;br /&gt;
# Give script writers the simple tools needed to create more sophisticated behaviour.&lt;br /&gt;
# Avoid duplicating existing LSL and OSSL functions. For instance, finding out what state an agent is in can be done through llGetAgentInfo() rather than creating a special NPC function. &lt;br /&gt;
&lt;br /&gt;
NPCs are controlled via a script which must be in the same region as the NPC. This could be housed in an attachment that is attached to the avatar.&lt;br /&gt;
&lt;br /&gt;
NPCs created user these scripts cannot leave the region in which they were born. If you want region crossing behaviour, please look at the options on the [[NPC]] wiki page.&lt;br /&gt;
&lt;br /&gt;
NPC appearance is saved and loaded by serializing the appearance data structure to a notecard present in the same prim as the script. The required textures should be preserved when an OAR is saved and loaded.&lt;br /&gt;
&lt;br /&gt;
This functionality is at an early stage and method signatures could change, certainly before the release of OpenSimulator 0.7.2. However, we hope to avoid this.&lt;br /&gt;
&lt;br /&gt;
= Enabling =&lt;br /&gt;
&lt;br /&gt;
To use these functions, in the OpenSim.ini file you will need the following config&lt;br /&gt;
&lt;br /&gt;
# Enabled = true set in the [NPC] section.&lt;br /&gt;
# Enabled = true set in the [XEngine] section.&lt;br /&gt;
# AllowOSFunctions = true in the [XEngine] section.&lt;br /&gt;
# OSFunctionThreatLevel = VeryHigh in the [XEngine] section. The functions osAgentSaveAppearance(), osAvatarPlayAnimation() and osAvatarStopAnimation() need this level. If you don't need these functions, then a &amp;quot;High&amp;quot; level will suffice.&lt;br /&gt;
&lt;br /&gt;
See [[Configuring Simulator Parameters#Getting information about parameters]] if you need to double check that these parameters have been set correctly.&lt;br /&gt;
&lt;br /&gt;
= Notes =&lt;br /&gt;
&lt;br /&gt;
* When using your avatar to model appearance before saving, you will need to wait a few seconds before invoking any save appearance command. This is because appearance saving currently operates on a timer in order to manage multiple appearance updates from the viewer.&lt;br /&gt;
* OpenSimulator 0.7.3-rc1 introduces the concept of 'owned' and 'unowned' NPC. An 'owned' NPC is one where only the creating script and other scripts with the same owner can manipulate the NPC. An 'unowned' NPC is one where any script with the right permissions (as defined in the [XEngine] configuration section) can manipulate it. In OpenSimulator 0.7.3, all avatars are 'owned' by default unless otherwise specified in the osNpcCreate() call.&lt;br /&gt;
&lt;br /&gt;
= Sensing =&lt;br /&gt;
&lt;br /&gt;
In OpenSimulator 0.7.2, LSL sensors will detect NPCs as ordinary agents.&lt;br /&gt;
&lt;br /&gt;
In OpenSimulator 0.7.3-rc1 onwards, unless otherwise specified, NPCs will only be detected using the OpenSimulator-specific NPC flag, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
//Author: mewtwo0641&lt;br /&gt;
&lt;br /&gt;
list keys = []; &lt;br /&gt;
key npc;&lt;br /&gt;
string toucher;&lt;br /&gt;
key toucherkey;&lt;br /&gt;
vector toucherPos;&lt;br /&gt;
integer npc_on = FALSE;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{ &lt;br /&gt;
    touch_start(integer x)&lt;br /&gt;
    {   &lt;br /&gt;
        toucherkey = llDetectedKey(0);&lt;br /&gt;
        toucherPos = llDetectedPos(0);&lt;br /&gt;
        vector npcPos = llGetPos() + &amp;lt;1,1,1&amp;gt;;&lt;br /&gt;
    &lt;br /&gt;
        if(npc_on == FALSE)&lt;br /&gt;
        {    &lt;br /&gt;
            npc = osNpcCreate(&amp;quot;Fred&amp;quot;, &amp;quot;Flintstone&amp;quot;, npcPos, toucherkey);&lt;br /&gt;
            npc_on = TRUE;&lt;br /&gt;
            llSensor(&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, AGENT | NPC, 96.0, PI); //Will always return NPC key regardless of npc create option&lt;br /&gt;
            return;&lt;br /&gt;
        }   &lt;br /&gt;
    &lt;br /&gt;
        if(npc_on == TRUE)&lt;br /&gt;
        {   &lt;br /&gt;
            osNpcRemove(npc);&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }   &lt;br /&gt;
    }   &lt;br /&gt;
    &lt;br /&gt;
    sensor(integer num)&lt;br /&gt;
    {   &lt;br /&gt;
        keys = []; &lt;br /&gt;
        integer i = 0;&lt;br /&gt;
    &lt;br /&gt;
        for(i; i &amp;lt; num; i++)&lt;br /&gt;
        {   &lt;br /&gt;
            keys += llDetectedKey(i); &lt;br /&gt;
        }   &lt;br /&gt;
    &lt;br /&gt;
        llOwnerSay(llDumpList2String(keys, &amp;quot;\n&amp;quot;));&lt;br /&gt;
    }   &lt;br /&gt;
    &lt;br /&gt;
    no_sensor()&lt;br /&gt;
    {   &lt;br /&gt;
        keys = [];   &lt;br /&gt;
    }   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can get NPCs to be detected as AGENTs again using the OS_NPC_SENSE_AS_AGENT option below in osNpcCreate().&lt;br /&gt;
&lt;br /&gt;
The justification is that detecting NPCs as AGENTs by default may make some scripts unusable (e.g. radars that know nothing about NPCs). However, conversely other scripts may not behave as expected if NPCs aren't sensed as agents (e.g. doors that open automatically for avatars would not open for NPCs).&lt;br /&gt;
&lt;br /&gt;
Please note that this applies only to sensors at this time.&lt;br /&gt;
&lt;br /&gt;
= Functions =&lt;br /&gt;
&lt;br /&gt;
== Create and Remove ==&lt;br /&gt;
=== [[osNpcCreate]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcCreate(string firstname, string lastname, vector position, string cloneFrom):key&lt;br /&gt;
&lt;br /&gt;
cloneFrom may be:&lt;br /&gt;
&lt;br /&gt;
* Name of the notecard containing a serialized avatar appearance, or&lt;br /&gt;
* Asset UUID of the Notecard, or&lt;br /&gt;
* UUID of an avatar logged into the same region. However, please note that this appearance will not be persisted unless osNpcSaveAppearance() is called.&lt;br /&gt;
&lt;br /&gt;
If the NPC is successfully created, then its UUID is returned, which is required for all subsequent functions. Example is available at [[osNpcCreate]]&lt;br /&gt;
&lt;br /&gt;
(OpenSimulator 0.7.3-rc1 onwards only). This creates an NPC that is 'owned' by the creating script and sensed using the OpenSimulator-only NPC flag for sensors.&lt;br /&gt;
&lt;br /&gt;
=== osNpcCreate ===&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.7.3-rc1 onwards.&lt;br /&gt;
&lt;br /&gt;
 osNpcCreate(string firstname, string lastname, vector position, string cloneFrom, integer options):key&lt;br /&gt;
&lt;br /&gt;
cloneFrom may be:&lt;br /&gt;
&lt;br /&gt;
* Name of the notecard containing a serialized avatar appearance, or&lt;br /&gt;
* Asset UUID of the Notecard, or&lt;br /&gt;
* UUID of an avatar logged into the same region. However, please note that this appearance will not be persisted unless osNpcSaveAppearance() is called.&lt;br /&gt;
&lt;br /&gt;
integer is a set of flags that may be 0 or one or more of&lt;br /&gt;
&lt;br /&gt;
* OS_NPC_NOT_OWNED - create an unowned NPC.&lt;br /&gt;
* OS_NPC_SENSE_AS_AGENT - create an NPC that is sensed as an AGENT with LSL sensors &lt;br /&gt;
&lt;br /&gt;
If the NPC is successfully created, then its UUID is returned, which is required for all subsequent functions. Example is available at [[osNpcCreate]]&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcRemove]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcRemove(key npc):void&lt;br /&gt;
&lt;br /&gt;
Remove the given avatar from the region. Example at [[osNpcRemove]].&lt;br /&gt;
&lt;br /&gt;
== Get and Set ==&lt;br /&gt;
=== osIsNpc ===&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.7.3-rc1 onwards.&lt;br /&gt;
&lt;br /&gt;
 osIsNpc(key npc):integer&lt;br /&gt;
&lt;br /&gt;
Returns TRUE if the given key is an NPC, false otherwise.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcGetRot]] ===&lt;br /&gt;
&lt;br /&gt;
Gets the rotation of the avatar. Only the rotation around the Z plane in Euler rotation (horizontal rotation) has any meaning.&lt;br /&gt;
&lt;br /&gt;
 osNpcGetRot(key npc):rotation&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcSetRot]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcSetRot(key npc, rotation rot):void&lt;br /&gt;
&lt;br /&gt;
Set the rotation of the avatar. Only setting the rotation in the Z plane in Euler rotation will have any meaningful effect (turning the avatar to point in one direction or another). Setting X or Y Euler values will result in the avatar rotating in an undefined manner.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcGetPos]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcGetPos(key npc):vector&lt;br /&gt;
&lt;br /&gt;
Return the current position of the NPC.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcGetOwner]] ===&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.7.3-rc1 onwards.&lt;br /&gt;
&lt;br /&gt;
 osNpcGetOwner(key npc):key&lt;br /&gt;
&lt;br /&gt;
Return the owner of the given NPC (i.e. the owner of the script that created it). If the NPC is unowned or the input key does not belong to an NPC then returns NULL_KEY.&lt;br /&gt;
&lt;br /&gt;
== Movement ==&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcMoveTo]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcMoveTo(key npc, vector position):void&lt;br /&gt;
&lt;br /&gt;
An older function that performs an osNpcMoveToTarget() by flying and landing at the target.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcMoveToTarget]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcMoveToTarget(key npc, vector target, int options):void&lt;br /&gt;
&lt;br /&gt;
Move the avatar to a given target over time. How the avatar will get there depends on the following options.&lt;br /&gt;
&lt;br /&gt;
* OS_NPC_FLY - Fly the avatar to the given position. The avatar will not land unless the OS_NPC_LAND_AT_TARGET option is also given.&lt;br /&gt;
* OS_NPC_NO_FLY - Do not fly to the target. The NPC will attempt to walk to the location. If it's up in the air then the avatar will keep bouncing hopeless until another move target is given or the move is stopped&lt;br /&gt;
* OS_NPC_LAND_AT_TARGET - If given and the avatar is flying, then it will land when it reaches the target. If OS_NPC_NO_FLY is given then this option has no effect.&lt;br /&gt;
* OS_NPC_RUNNING - if given, NPC avatar moves at running/fast flying speed, otherwise moves at walking/slow flying speed.&lt;br /&gt;
&lt;br /&gt;
OS_NPC_FLY and OS_NPC_NO_FLY are options that cannot be combined - the avatar will end up doing one or the other. If you want the avatar to fly and land at the target, then OS_NPC_LAND_AT_TARGET must be combined with OS_NPC_FLY. For instance,&lt;br /&gt;
&lt;br /&gt;
 osNpcMoveToTarget(npc, llGetPos() + &amp;lt;9,9,5&amp;gt;, OS_NPC_FLY|OS_NPC_LAND_AT_TARGET);&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcStopMoveToTarget]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcStopMoveToTarget(key npc):void&lt;br /&gt;
&lt;br /&gt;
Stop a current move to a target.&lt;br /&gt;
&lt;br /&gt;
== Sitting and standing ==&lt;br /&gt;
&lt;br /&gt;
=== osNpcSit ===&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.7.3-rc1 onwards.&lt;br /&gt;
&lt;br /&gt;
 osNpcSit(key npc, key target, int options):void&lt;br /&gt;
&lt;br /&gt;
Sit an NPC on a prim target. As yet there are no options, so always input 0.&lt;br /&gt;
&lt;br /&gt;
=== osNpcStand ===&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.7.3-rc1 onwards.&lt;br /&gt;
&lt;br /&gt;
 osNpcStand(key npc):void&lt;br /&gt;
&lt;br /&gt;
Make an npc stand up.&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcSay]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcSay(key npc, string message):void &lt;br /&gt;
 osNpcSay(key npc, int channel, string message):void&lt;br /&gt;
&lt;br /&gt;
Get the NPC to say the given message. &lt;br /&gt;
&lt;br /&gt;
If channel is specified then the chat is said on the given channel.  The channel parameter is only available in OpenSimulator 0.7.4 development code at this time.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcShout]] ===&lt;br /&gt;
&lt;br /&gt;
Only in OpenSimulator 0.7.4 development code at this time.&lt;br /&gt;
&lt;br /&gt;
 osNpcShout(key npc, int channel, string message):void&lt;br /&gt;
&lt;br /&gt;
Get the NPC to shout the given message on the given channel.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcWhisper]] ===&lt;br /&gt;
&lt;br /&gt;
Only in OpenSimulator 0.7.4 development code at this time.&lt;br /&gt;
&lt;br /&gt;
 osNpcWhisper(key npc, int channel, string message):void&lt;br /&gt;
&lt;br /&gt;
Get the NPC to whisper the given message on the given channel.&lt;br /&gt;
&lt;br /&gt;
== Animations ==&lt;br /&gt;
&lt;br /&gt;
=== osNpcPlayAnimation ===&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.7.3-rc1 onwards.&lt;br /&gt;
&lt;br /&gt;
 osNpcPlayAnimation(key npc, string animation):void&lt;br /&gt;
&lt;br /&gt;
Get an NPC to play an animation. The animation can either be a key or the name of an animation in the same inventory as the script.&lt;br /&gt;
&lt;br /&gt;
=== osNpcStopAnimation ===&lt;br /&gt;
&lt;br /&gt;
In OpenSimulator 0.7.3-rc1 there is a bug which makes this play the animation instead. This will be corrected for the final release but in the mean time please use osAvatarStopAnimation() instead.&lt;br /&gt;
&lt;br /&gt;
 osNpcStopAnimation(key npc, string animation):void&lt;br /&gt;
&lt;br /&gt;
Get an NPC to stop playing an animation. The animation can either be a key or the name of an animation in the same inventory as the script.&lt;br /&gt;
&lt;br /&gt;
== Appearance ==&lt;br /&gt;
&lt;br /&gt;
NPC appearance is manipulated by saving and loading appearance data to notecards from the same inventory as the invoking script.&lt;br /&gt;
&lt;br /&gt;
=== [[osOwnerSaveAppearance]] ===&lt;br /&gt;
&lt;br /&gt;
 osOwnerSaveAppearance(string notecard):key&lt;br /&gt;
&lt;br /&gt;
Save the owner's current appearance to a notecard in the prim's inventory. This includes body part data, clothing items and attachments. If a notecard with the same name already exists then it is replaced. The owner must be present in the region when this function is invoked. The baked textures for the owner (necessary to recreate appearance on the NPC) are saved permanently.&lt;br /&gt;
&lt;br /&gt;
=== [[osAgentSaveAppearance]] ===&lt;br /&gt;
&lt;br /&gt;
 osAgentSaveAppearance(key agentId, string notecard):key&lt;br /&gt;
&lt;br /&gt;
Save an arbitrary avatar's appearance to a notecard in the prim's inventory. This includes body part data, clothing items and attachments. If a notecard with the same name already exists then it is replaced. The avatar must be present in the region when this function is invoked. The baked textures for the avatar (necessary to recreate appearance on the NPC) are saved permanently.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcSaveAppearance]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcSaveAppearance(key npc, string notecard):key&lt;br /&gt;
&lt;br /&gt;
Save the NPC's current appearance to a notecard in the prim's inventory. This includes body part data, clothing items and attachments. If a notecard with the same name already exists then it is replaced. The avatar must be present in the region when this function is invoked. The baked textures for the avatar (necessary to recreate appearance) are saved permanently.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcLoadAppearance]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcLoadAppearance(key npc, string notecard):void&lt;br /&gt;
&lt;br /&gt;
Load appearance from a notecard. This notecard must contain appearance data created with one of the save appearance functions.&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&lt;br /&gt;
This is a rough example script for most of the current NPC functionality. Please feel free to improve it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
key npc;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llListen(10,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;);&lt;br /&gt;
    }  &lt;br /&gt;
     &lt;br /&gt;
    listen(integer channel, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if (msg != &amp;quot;&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if (msg == &amp;quot;create&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                osOwnerSaveAppearance(&amp;quot;appearance&amp;quot;);&lt;br /&gt;
                npc = osNpcCreate(&amp;quot;Jane&amp;quot;, &amp;quot;Doe&amp;quot;, &amp;lt;115, 165, 23&amp;gt;, &amp;quot;appearance&amp;quot;);&lt;br /&gt;
            }   &lt;br /&gt;
            else if (msg == &amp;quot;remove&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcSay(npc, &amp;quot;You will pay for this with your liiiiiivvveeessss!!!.....&amp;quot;);&lt;br /&gt;
                osNpcRemove (npc);&lt;br /&gt;
            }   &lt;br /&gt;
            else if (msg == &amp;quot;say&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcSay(npc, &amp;quot;I am your worst Nightmare!!!!&amp;quot;);&lt;br /&gt;
            }   &lt;br /&gt;
            else if (msg == &amp;quot;touch&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcTouch(npc, llGetKey(), LINK_THIS);&lt;br /&gt;
            }   &lt;br /&gt;
            else if (msg == &amp;quot;move&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcMoveTo(npc, llGetPos() + &amp;lt;9,9,0&amp;gt;);&lt;br /&gt;
            }   &lt;br /&gt;
            else if (msg == &amp;quot;movetarget&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcMoveToTarget(npc, llGetPos() + &amp;lt;9,9,5&amp;gt;, OS_NPC_FLY|OS_NPC_LAND_AT_TARGET);&lt;br /&gt;
            }&lt;br /&gt;
            else if (msg == &amp;quot;movetargetnoland&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcMoveToTarget(npc, llGetPos() + &amp;lt;9,9,5&amp;gt;, OS_NPC_FLY);&lt;br /&gt;
            }            &lt;br /&gt;
            else if (msg == &amp;quot;movetargetwalk&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcMoveToTarget(npc, llGetPos() + &amp;lt;9,9,0&amp;gt;, OS_NPC_NO_FLY);                &lt;br /&gt;
            }&lt;br /&gt;
            else if (msg == &amp;quot;rot&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                vector xyz_angles = &amp;lt;0,0,45&amp;gt;; // This is to define a 45 degree change&lt;br /&gt;
                vector angles_in_radians = xyz_angles * DEG_TO_RAD; // Change to Radians&lt;br /&gt;
                rotation rot_xyzq = llEuler2Rot(angles_in_radians); // Change to a Rotation                &lt;br /&gt;
                rotation rot = osNpcGetRot(npc);&lt;br /&gt;
                osNpcSetRot(npc, rot * rot_xyzq);&lt;br /&gt;
            }&lt;br /&gt;
            else if (msg == &amp;quot;animate&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osAvatarPlayAnimation(npc, &amp;quot;stabbed+die_2&amp;quot;);&lt;br /&gt;
                llSleep(3);&lt;br /&gt;
                osAvatarStopAnimation(npc, &amp;quot;stabbed+die_2&amp;quot;);&lt;br /&gt;
            }   &lt;br /&gt;
            else if (msg == &amp;quot;save&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcSaveAppearance(npc, &amp;quot;appearance&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else if (msg == &amp;quot;load&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcLoadAppearance(npc, &amp;quot;appearance&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else if (msg == &amp;quot;clone&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                osOwnerSaveAppearance(&amp;quot;appearance&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else if (msg == &amp;quot;stop&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcStopMoveToTarget(npc);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llOwnerSay(&amp;quot;I don't understand [&amp;quot; + msg + &amp;quot;]&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }   &lt;br /&gt;
    }   &lt;br /&gt;
    touch_start(integer x)&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(&amp;quot;Touched by &amp;quot; + llDetectedName(0));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Questions/Comments =&lt;br /&gt;
&lt;br /&gt;
Please leave your questions and comments on [[Talk:OSSLNPC|this article's talk page]].&lt;br /&gt;
&lt;br /&gt;
[[Category:OSSL Functions]]&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Talun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsNpcTouch</id>
		<title>OsNpcTouch</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsNpcTouch"/>
				<updated>2012-07-06T22:44:46Z</updated>
		
		<summary type="html">&lt;p&gt;Talun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax=osNpcTouch(key npcKey, key objectKey, integer linkNum)&lt;br /&gt;
|csharp_syntax=&lt;br /&gt;
|description=Only LINK_THIS and LINK_ROOT are valid for this function. Any other of the LINK_* constants will be ignored and no touch takes place.&lt;br /&gt;
&lt;br /&gt;
1. If linkNum is LINK_THIS then the prim with the key objectKey will be touched.&lt;br /&gt;
&lt;br /&gt;
2. If linkNum is LINK_ROOT or 0 then the root prim of the link set will be touched, even if the root prim key is not objectKey&lt;br /&gt;
&lt;br /&gt;
3. For any other value of linkNum a search will be made through the linkset for a prim with that link number. If found that prim will be touched. If no prim is found for that link number thefinction fails silently and no touch takes place.&lt;br /&gt;
&lt;br /&gt;
The touch is fired as if it came from an old client that does not support face touch detection or (probably) one of the text clients like Metabolt. Since there is no mouse the llDetectedTouch* functions will return the defaults (See the LSL Wiki for full details)&lt;br /&gt;
&lt;br /&gt;
llDetectedTouchBinormal TOUCH_INVALID_VECTOR&amp;lt;br&amp;gt;&lt;br /&gt;
llDetectedTouchFace TOUCH_INVALID_FACE&amp;lt;br&amp;gt;&lt;br /&gt;
llDetectedTouchNormal TOUCH_INVALID_VECTOR&amp;lt;br&amp;gt;&lt;br /&gt;
llDetectedTouchPos TOUCH_INVALID_VECTOR&amp;lt;br&amp;gt;&lt;br /&gt;
llDetectedTouchST TOUCH_INVALID_TEXCOORD&amp;lt;br&amp;gt;&lt;br /&gt;
llDetectedTouchUV TOUCH_INVALID_TEXCOORD&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the prim is not found or would not allow a normal client to touch it then this function fails silently.&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|ossl_example=&lt;br /&gt;
|additional_info=&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Talun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsNpcTouch</id>
		<title>OsNpcTouch</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsNpcTouch"/>
				<updated>2012-07-06T22:41:46Z</updated>
		
		<summary type="html">&lt;p&gt;Talun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax=osNpcTouch(key npcKey, key objectKey, integer linkNum)&lt;br /&gt;
|csharp_syntax=&lt;br /&gt;
|description=Only LINK_THIS and LINK_ROOT are valid for this function. Any other of the LINK_* constants will be ignored and no touch takes place.&lt;br /&gt;
&lt;br /&gt;
1. If linkNum is LINK_THIS then the prim with the key objectKey will be touched.&lt;br /&gt;
&lt;br /&gt;
2. If linkNum is LINK_ROOT or 0 then the root prim of the link set will be touched, even if the root prim key is not objectKey&lt;br /&gt;
&lt;br /&gt;
3. For any other value of linkNum a search will be made through the linkset for a prim with that link number. If found that prim will be touched. If no prim is found for that link number thefinction fails silently and no touch takes place.&lt;br /&gt;
&lt;br /&gt;
The touch is fired as if it came from an old client that does not support face touch detection or (probably) one of the text clients like Metabolt. Since there is no mouse the llDetectedTouch* functions will return the defaults (See the LSL Wiki for full details)&lt;br /&gt;
&lt;br /&gt;
llDetectedTouchBinormal TOUCH_INVALID_VECTOR&lt;br /&gt;
llDetectedTouchFace TOUCH_INVALID_FACE&lt;br /&gt;
llDetectedTouchNormal TOUCH_INVALID_VECTOR&lt;br /&gt;
llDetectedTouchPos TOUCH_INVALID_VECTOR&lt;br /&gt;
llDetectedTouchST TOUCH_INVALID_TEXCOORD&lt;br /&gt;
llDetectedTouchUV TOUCH_INVALID_TEXCOORD&lt;br /&gt;
&lt;br /&gt;
If the prim is not found or would not allow a normal client to touch it then this function fails silently.&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|ossl_example=&lt;br /&gt;
|additional_info=&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Talun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsNpcTouch</id>
		<title>OsNpcTouch</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsNpcTouch"/>
				<updated>2012-07-06T22:40:44Z</updated>
		
		<summary type="html">&lt;p&gt;Talun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax=osNpcTouch(LSL_KEY npcKey, LSL_Key objectKey, LSL_INTEGER linkNum)&lt;br /&gt;
|csharp_syntax=&lt;br /&gt;
|description=Only LINK_THIS and LINK_ROOT are valid for this function. Any other of the LINK_* constants will be ignored and no touch takes place.&lt;br /&gt;
&lt;br /&gt;
1. If linkNum is LINK_THIS then the prim with the key objectKey will be touched.&lt;br /&gt;
&lt;br /&gt;
2. If linkNum is LINK_ROOT or 0 then the root prim of the link set will be touched, even if the root prim key is not objectKey&lt;br /&gt;
&lt;br /&gt;
3. For any other value of linkNum a search will be made through the linkset for a prim with that link number. If found that prim will be touched. If no prim is found for that link number thefinction fails silently and no touch takes place.&lt;br /&gt;
&lt;br /&gt;
The touch is fired as if it came from an old client that does not support face touch detection or (probably) one of the text clients like Metabolt. Since there is no mouse the llDetectedTouch* functions will return the defaults (See the LSL Wiki for full details)&lt;br /&gt;
&lt;br /&gt;
llDetectedTouchBinormal TOUCH_INVALID_VECTOR&lt;br /&gt;
llDetectedTouchFace TOUCH_INVALID_FACE&lt;br /&gt;
llDetectedTouchNormal TOUCH_INVALID_VECTOR&lt;br /&gt;
llDetectedTouchPos TOUCH_INVALID_VECTOR&lt;br /&gt;
llDetectedTouchST TOUCH_INVALID_TEXCOORD&lt;br /&gt;
llDetectedTouchUV TOUCH_INVALID_TEXCOORD&lt;br /&gt;
&lt;br /&gt;
If the prim is not found or would not allow a normal client to touch it then this function fails silently.&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|ossl_example=&lt;br /&gt;
|additional_info=&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Talun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsNpcTouch</id>
		<title>OsNpcTouch</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsNpcTouch"/>
				<updated>2012-07-06T22:39:43Z</updated>
		
		<summary type="html">&lt;p&gt;Talun: Created page with &amp;quot;{{osslfunc |function_syntax=osNPCTouch(LSL_KEY npcKey, LSL_Key objectKey, LSL_INTEGER linkNum) |csharp_syntax= |description=Only LINK_THIS and LINK_ROOT are valid for this functi...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax=osNPCTouch(LSL_KEY npcKey, LSL_Key objectKey, LSL_INTEGER linkNum)&lt;br /&gt;
|csharp_syntax=&lt;br /&gt;
|description=Only LINK_THIS and LINK_ROOT are valid for this function. Any other of the LINK_* constants will be ignored and no touch takes place.&lt;br /&gt;
&lt;br /&gt;
1. If linkNum is LINK_THIS then the prim with the key objectKey will be touched.&lt;br /&gt;
&lt;br /&gt;
2. If linkNum is LINK_ROOT or 0 then the root prim of the link set will be touched, even if the root prim key is not objectKey&lt;br /&gt;
&lt;br /&gt;
3. For any other value of linkNum a search will be made through the linkset for a prim with that link number. If found that prim will be touched. If no prim is found for that link number thefinction fails silently and no touch takes place.&lt;br /&gt;
&lt;br /&gt;
The touch is fired as if it came from an old client that does not support face touch detection or (probably) one of the text clients like Metabolt. Since there is no mouse the llDetectedTouch* functions will return the defaults (See the LSL Wiki for full details)&lt;br /&gt;
&lt;br /&gt;
llDetectedTouchBinormal TOUCH_INVALID_VECTOR&lt;br /&gt;
llDetectedTouchFace TOUCH_INVALID_FACE&lt;br /&gt;
llDetectedTouchNormal TOUCH_INVALID_VECTOR&lt;br /&gt;
llDetectedTouchPos TOUCH_INVALID_VECTOR&lt;br /&gt;
llDetectedTouchST TOUCH_INVALID_TEXCOORD&lt;br /&gt;
llDetectedTouchUV TOUCH_INVALID_TEXCOORD&lt;br /&gt;
&lt;br /&gt;
If the prim is not found or would not allow a normal client to touch it then this function fails silently.&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|ossl_example=&lt;br /&gt;
|additional_info=&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Talun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Category:OSSL_Functions</id>
		<title>Category:OSSL Functions</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Category:OSSL_Functions"/>
				<updated>2012-07-06T22:31:49Z</updated>
		
		<summary type="html">&lt;p&gt;Talun: /* NPCs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Current OSSL Functions Implemented  ==&lt;br /&gt;
&lt;br /&gt;
Updated OSSL Functions as of OpenSim DEV 0.7.4 OpenSim-0007711-r/18206 March 1, 2012&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
'''!''' Partial Update December.10.2010 With commits of this date some functions have been corrected to use standard ossl conventions. The previous are tagged as deprecated with their replacement shown. The deprecated functions will advise you with a msg that they have been deprecated and to use new osFunction name instead. Further Updates are needed to complete existing list of osFunctions.&lt;br /&gt;
&lt;br /&gt;
Special Note: Some Functions as shown use '''&amp;quot;double&amp;quot;''' as a Value instead of '''&amp;quot;float&amp;quot; '''these vary for purposes of accuracy as shown Below. &lt;br /&gt;
&lt;br /&gt;
(Float is short for &amp;quot;floating point&amp;quot;, and just means a number with a point something on the end.) &lt;br /&gt;
&lt;br /&gt;
The difference between the two is in the size of the numbers that they can hold. For float, you can have up to 7 digits in your number. For doubles, you can have up to 16 digits. To be more precise, here's the official size: ( float: 1.5 × 10-45 to 3.4 × 1038 ) ( double: 5.0 × 10-324 to 1.7 × 10308 ) &lt;br /&gt;
&lt;br /&gt;
Note that some function takes doubles as arguments but may be internally down-casted to floats.&lt;br /&gt;
&lt;br /&gt;
Each of these functions has an threat level associated to it. See [[Threat level]] for more information and an overview of each function's level.&lt;br /&gt;
&lt;br /&gt;
=== Avatars ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
*[[osGetAgentIP]] &lt;br /&gt;
*[[osGetAgents]]&lt;br /&gt;
*[[osGetAvatarList]] &lt;br /&gt;
*[[osAvatarName2Key]]&lt;br /&gt;
*[[osAvatarPlayAnimation]] &lt;br /&gt;
*[[osAvatarStopAnimation]] &lt;br /&gt;
*[[osAgentSaveAppearance]]&lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
*[[osOwnerSaveAppearance]]&lt;br /&gt;
*[[osTeleportAgent]] &lt;br /&gt;
*[[osTeleportOwner]] &lt;br /&gt;
*[[osKickAvatar]]&lt;br /&gt;
*[[osCauseDamage]] &lt;br /&gt;
*[[osCauseHealing]]&lt;br /&gt;
*[[osInviteToGroup]]&lt;br /&gt;
*[[osEjectFromGroup]]&lt;br /&gt;
*[[osForceAttachToAvatar]]&lt;br /&gt;
*[[osForceDetachFromAvatar]]&lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== NPCs ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
*[[osNpcCreate]]&lt;br /&gt;
*[[osNpcGetPos]]&lt;br /&gt;
*[[osNpcGetRot]]&lt;br /&gt;
*[[osNpcGetOwner]]&lt;br /&gt;
*[[osNpcLoadAppearance]]&lt;br /&gt;
*[[osNpcMoveTo]]&lt;br /&gt;
*[[osNpcMoveToTarget]]&lt;br /&gt;
*[[osNpcRemove]]&lt;br /&gt;
*[[osNpcSaveAppearance]]&lt;br /&gt;
*[[osNpcSay]]&lt;br /&gt;
*[[osNpcSay (with channel)]]&lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
*[[osNpcSetRot]]&lt;br /&gt;
*[[osNpcShout]]&lt;br /&gt;
*[[osNpcSit]]&lt;br /&gt;
*[[osNpcStand]]&lt;br /&gt;
*[[osNpcStopMoveToTarget]]&lt;br /&gt;
*[[osIsNpc]]&lt;br /&gt;
*[[osNpcPlayAnimation]]&lt;br /&gt;
*[[osNpcStopAnimation]]&lt;br /&gt;
*[[osNpcTouch]]&lt;br /&gt;
*[[osNpcWhisper]]&lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== Prim Manipulations ===&lt;br /&gt;
*[[osGetPrimitiveParams]] &lt;br /&gt;
*[[osGetLinkPrimitiveParams]] &lt;br /&gt;
*[[osSetPrimitiveParams]] &lt;br /&gt;
*[[osSetProjectionParams]] &lt;br /&gt;
*[[osSetSpeed]] &lt;br /&gt;
*[[osMessageObject]]&lt;br /&gt;
*[[osGetInventoryDesc]]&lt;br /&gt;
&lt;br /&gt;
=== Prim Drawings ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
*[[osMovePen]] &lt;br /&gt;
*[[osDrawLine]] &lt;br /&gt;
*[[osDrawText]] &lt;br /&gt;
*[[osDrawEllipse]] &lt;br /&gt;
*[[osDrawRectangle]] &lt;br /&gt;
*[[osDrawFilledRectangle]] &lt;br /&gt;
*[[osDrawPolygon]] &lt;br /&gt;
*[[osDrawFilledPolygon]] &lt;br /&gt;
*[[osDrawImage]] &lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
*[[osGetDrawStringSize]] &lt;br /&gt;
*[[osSetFontName]] &lt;br /&gt;
*[[osSetFontSize]] &lt;br /&gt;
*[[osSetPenSize]] &lt;br /&gt;
*[[osSetPenColor]] &lt;br /&gt;
*[[osSetPenCap]]&lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Textures ===&lt;br /&gt;
*[[osSetDynamicTextureData]] &lt;br /&gt;
*[[osSetDynamicTextureDataBlend]] &lt;br /&gt;
*[[osSetDynamicTextureDataBlendFace]] &lt;br /&gt;
*[[osSetDynamicTextureURL]] &lt;br /&gt;
*[[osSetDynamicTextureURLBlend]] &lt;br /&gt;
*[[osSetDynamicTextureURLBlendFace]]&lt;br /&gt;
&lt;br /&gt;
=== Notecards ===&lt;br /&gt;
*[[osMakeNotecard]] &lt;br /&gt;
*[[osGetNotecard]] &lt;br /&gt;
*[[osGetNotecardLine]] &lt;br /&gt;
*[[osGetNumberOfNotecardLines]] &lt;br /&gt;
&lt;br /&gt;
=== Parcels ===&lt;br /&gt;
*[[osParcelJoin]] &lt;br /&gt;
*[[osParcelSubdivide]] &lt;br /&gt;
*[[osSetParcelDetails]]&lt;br /&gt;
&lt;br /&gt;
=== Terrains ===&lt;br /&gt;
*[[osGetTerrainHeight]] &lt;br /&gt;
*[[osSetTerrainHeight]] &lt;br /&gt;
*[[osTerrainFlush]]&lt;br /&gt;
*[[osSetTerrainTexture]]&lt;br /&gt;
*[[osSetTerrainTextureHeight]]&lt;br /&gt;
&lt;br /&gt;
=== WindLights ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
*[[osSetRegionWaterHeight]] &lt;br /&gt;
*[[osSetRegionSunSettings]] &lt;br /&gt;
*[[osSetEstateSunSettings]] &lt;br /&gt;
*[[osGetCurrentSunHour]] &lt;br /&gt;
*[[osGetSunParam]] &lt;br /&gt;
*[[osSetSunParam]] &lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
*[[osWindActiveModelPluginName]] &lt;br /&gt;
*[[osGetWindParam]] &lt;br /&gt;
*[[osSetWindParam]]&lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== Grid Information ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
*[[osGetGridName]] &lt;br /&gt;
*[[osGetGridNick]] &lt;br /&gt;
*[[osGetGridLoginURI]]&lt;br /&gt;
*[[osGetGridHomeURI]]&lt;br /&gt;
*[[osGetGridGatekeeperURI]]&lt;br /&gt;
*[[osGetGridCustom]]&lt;br /&gt;
*[[osGetScriptEngineName]] &lt;br /&gt;
*[[osGetSimulatorVersion]] &lt;br /&gt;
*[[osGetSimulatorMemory]] &lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
*[[osGetMapTexture]] &lt;br /&gt;
*[[osGetRegionMapTexture]] &lt;br /&gt;
*[[osGetRegionStats]] &lt;br /&gt;
*[[osLoadedCreationDate]] &lt;br /&gt;
*[[osLoadedCreationTime]] &lt;br /&gt;
*[[osLoadedCreationID]] &lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== Administration ===&lt;br /&gt;
*[[osRegionNotice]] &lt;br /&gt;
*[[osRegionRestart]] &lt;br /&gt;
*[[osConsoleCommand]] &lt;br /&gt;
*[[osSetParcelMediaURL]] &lt;br /&gt;
*[[osSetPrimFloatOnWater]]&lt;br /&gt;
*[[osSetParcelSIPAddress]]&lt;br /&gt;
&lt;br /&gt;
=== Misc ===&lt;br /&gt;
*[[osSetStateEvents]] &lt;br /&gt;
*[[osList2Double]] &lt;br /&gt;
*[[osKey2Name]] &lt;br /&gt;
*[[osFormatString]] &lt;br /&gt;
*[[osMatchString]] &lt;br /&gt;
*[[osUnixTimeToTimestamp]] &lt;br /&gt;
*[[osParseJSON]]&lt;br /&gt;
*[[osParseJSONNew]]&lt;br /&gt;
&lt;br /&gt;
=== Deprecated ===&lt;br /&gt;
*[[osParcelSetDetails|&amp;lt;strike&amp;gt;osParcelSetDetails&amp;lt;/strike&amp;gt;]] - Use [[osSetParcelDetails]] &lt;br /&gt;
*[[osSetPenColour|&amp;lt;strike&amp;gt;osSetPenColour&amp;lt;/strike&amp;gt;]] - Use [[osSetPenColor]] &lt;br /&gt;
*[[osSunGetParam|&amp;lt;strike&amp;gt;osSunGetParam&amp;lt;/strike&amp;gt;]] - Use [[osGetSunParam]] &lt;br /&gt;
*[[osSunSetParam|&amp;lt;strike&amp;gt;osSunSetParam&amp;lt;/strike&amp;gt;]] - Use [[osSetSunParam]] &lt;br /&gt;
*[[osTerrainGetHeight|&amp;lt;strike&amp;gt;osTerrainGetHeight&amp;lt;/strike&amp;gt;]] - Use [[osGetTerrainHeight]] &lt;br /&gt;
*[[osTerrainSetHeight|&amp;lt;strike&amp;gt;osTerrainSetHeight&amp;lt;/strike&amp;gt;]] - Use [[osSetTerrainHeight]]&lt;br /&gt;
&lt;br /&gt;
== See Also  ==&lt;br /&gt;
&lt;br /&gt;
*[[LSL Status|LSL/OSSL Status Page]] &lt;br /&gt;
*OSSL &lt;br /&gt;
**[[OSSL_Implemented|OSSL Implemented Functions]] &lt;br /&gt;
**[[OSSL Constants|OSSL Constants]] &lt;br /&gt;
**[[OSSL Status/Types|OSSL Types Status Page]] &lt;br /&gt;
**[[OSSL Status/Events|OSSL Events Status Page]] &lt;br /&gt;
&lt;br /&gt;
**[[Dynamic_textures|OSSL osDynamicTextures Functions Index Page]]&lt;br /&gt;
**[[OSSL TextureDrawing|OSSL TextureDrawing Extended Information]]&lt;br /&gt;
**[[OSSLNPC|OSSL functions for working with NPCs]]&lt;br /&gt;
&lt;br /&gt;
**[[OSSL Proposals|OSSL Proposed Functions]] &lt;br /&gt;
**[[OSSL Enabling Functions]] &lt;br /&gt;
**[[OSSL Standards|OSSL Standards]]&lt;br /&gt;
&lt;br /&gt;
[[Category:OSSL]]&lt;/div&gt;</summary>
		<author><name>Talun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/LSL_Status/Functions</id>
		<title>LSL Status/Functions</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/LSL_Status/Functions"/>
				<updated>2012-05-09T07:44:13Z</updated>
		
		<summary type="html">&lt;p&gt;Talun: /* LSL Functions Status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Quicklinks}}&lt;br /&gt;
&lt;br /&gt;
= What is the current LSL Function Status? =&lt;br /&gt;
&lt;br /&gt;
Back to [[LSL Status]]&lt;br /&gt;
&lt;br /&gt;
== LSL Functions Status ==&lt;br /&gt;
&lt;br /&gt;
UPDATED March 01,2012 using OpenSim-0007711-r/18206 compared with LL-LSL references.&lt;br /&gt;
&lt;br /&gt;
According to the LSL wiki there are '''385''' total functions, including Deprecated and God Mode. [http://wiki.secondlife.com/wiki/Template:LSL_All_Functions/Name Reference]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Click on a letter to see the implementation information or click on the function to see an example how the function was tested inworld&lt;br /&gt;
&lt;br /&gt;
Table Display change note:&amp;lt;br /&amp;gt; * DNE Status no longer applies as DotNetEngine is long removed from OpenSim.&amp;lt;br /&amp;gt; * XEngine Status is redundant as Implemented serves this purpose.&lt;br /&gt;
&lt;br /&gt;
{{LSL Key Table}}&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{ABC}}&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:left; font-size:8pt&amp;quot;&lt;br /&gt;
|- style=&amp;quot;font-size:10pt&amp;quot;&lt;br /&gt;
| width=&amp;quot;5%&amp;quot; scope=&amp;quot;col&amp;quot; | Function &lt;br /&gt;
| width=&amp;quot;2%&amp;quot; scope=&amp;quot;col&amp;quot; | Implemented&lt;br /&gt;
| width=&amp;quot;2%&amp;quot; scope=&amp;quot;col&amp;quot; | Developer&lt;br /&gt;
| width=&amp;quot;2%&amp;quot; scope=&amp;quot;col&amp;quot; | Tester &lt;br /&gt;
| width=&amp;quot;10%&amp;quot; scope=&amp;quot;col&amp;quot; | Comments&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAbs&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
|anc=A&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAcos&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=F&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAddToLandBanList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAddToLandPassList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAdjustSoundVolume&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAllowInventoryDrop&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Patnad&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAngleBetween&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=NUnit&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llApplyImpulse&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llApplyRotationalImpulse&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAsin&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAtan2&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAttachToAvatar&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAvatarOnSitTarget&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Teravus&lt;br /&gt;
|test=&lt;br /&gt;
|comment=produces a NULL_KEY, not implemented&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAvatarOnLinkSitTarget&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAxes2Rot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Patnad&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAxisAngle2Rot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llBase64ToInteger&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=B&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llBase64ToString&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llBreakAllLinks&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llBreakLink&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCastRay&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
|anc=C&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCeil&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llClearCameraParams&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llClearLinkMedia&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llClearPrimMedia&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCloseRemoteDataChannel&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Jimbo21&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCloud&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCollisionFilter&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCollisionSound&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCollisionSprite&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCos&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683) llSay(0,(string)llCos(100));&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCreateLink&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCSV2List&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDeleteSubList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=D&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDeleteSubString&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetachFromAvatar&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedGrab&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Z axis reads 100 + actual axis (was showing 129m when it was at 29m).&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedGroup&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedKey&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedLinkNumber&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=tested at 2011.01.25 on 0.7.1 Dev&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedName&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedOwner&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedPos&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedRot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedTouchBinormal&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedTouchFace&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedTouchNormal&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedTouchPos&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedTouchST&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedTouchUV&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedType&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedVel&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDialog&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=works, but appears on channel 0 as &amp;quot;User Name shouts: dialog message&amp;quot; instead of &amp;quot;User Name: dialog message&amp;quot;.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDie&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Krtaylor&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDumpList2String&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llEdgeOfWorld&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes*&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Garmin Kawaguichi 0.7.3&lt;br /&gt;
|comment=* Megaregion = No&lt;br /&gt;
|anc=E&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llEjectFromLand&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llEmail&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llEscapeURL&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llEuler2Rot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Should work now. Someone who understands the math, please&lt;br /&gt;
|test=. -CO&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llFabs&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
|anc=F&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llFloor&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llForceMouselook&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llFrand&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAccel&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=G&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAgentInfo&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAgentLanguage&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAgentList&lt;br /&gt;
|status=&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAgentSize&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAlpha&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=ALLSIDES returns default texture, not sum, specific faces display correctly&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAndResetTime&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2750)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAnimation&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=StrawberryFride&lt;br /&gt;
|test=StrawberryFride&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAnimationList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAttached&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetBoundingBox&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetCameraPos&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Phrearch&lt;br /&gt;
|test=Phrearch&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetCameraRot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetCenterOfMass&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetColor&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=ALLSIDES returns default texture, not average, anything trying to grab more than 3 sides fails per example 2&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetCreator&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetDate&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetDisplayName&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetEnergy&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Always returns 1.0f&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetEnv&lt;br /&gt;
|status=&lt;br /&gt;
|impl=NO&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment= Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetForce&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetFreeMemory&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Probably pointless to implement&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetFreeURLs&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetGeometricCenter&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Physics engine reports as &amp;lt;0,0,0&amp;gt; currently&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetGMTclock&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetHTTPHeader&lt;br /&gt;
|status=&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Tokeiito&lt;br /&gt;
|comment=tested at 2011.01.25 on 0.7.1 Dev with XEngine&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetInventoryCreator&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetInventoryKey&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetInventoryName&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetInventoryNumber&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetInventoryPermMask&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetInventoryType&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetKey&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLandOwnerAt&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLinkKey&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2754)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLinkMedia&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLinkName&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2754)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLinkNumber&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2754)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLinkNumberOfSides&lt;br /&gt;
|status=ready&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=See [http://wiki.secondlife.com/wiki/LlGetLinkNumberOfSides LL's LSL wiki]&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLinkPrimitiveParams&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetListEntryType&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetListLength&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2750)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLocalPos&lt;br /&gt;
|status=fail&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2809) Reports parent pos in sim, not child&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLocalRot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetMass&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=May not be identical to main grid, due to different physics engine&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetMassMKS&lt;br /&gt;
|status=&lt;br /&gt;
|impl=NO&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetMemoryLimit&lt;br /&gt;
|status=&lt;br /&gt;
|impl=NO&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetNextEmail&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetNotecardLine&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Krtaylor&lt;br /&gt;
|test=&lt;br /&gt;
|comment=This is badly needed to read settings from notecards&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetNumberOfNotecardLines&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Krtaylor&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetNumberOfPrims&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2754)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetNumberOfSides&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetObjectDesc&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetObjectDetails&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Params [OBJECT_RUNNING_SCRIPT_COUNT, OBJECT_TOTAL_SCRIPT_COUNT, OBJECT_SCRIPT_MEMORY] not working&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetObjectMass&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetObjectName&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetObjectPermMask&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetObjectPrimCount&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetOmega&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetOwner&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetOwnerKey&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetParcelDetails&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetParcelFlags&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetParcelMaxPrims&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetParcelMusicURL&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetParcelPrimCount&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetParcelPrimOwners&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetPermissions&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Melanie&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetPermissionsKey&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Melanie&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetPos&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetPrimitiveParams&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Not available: PRIM_TYPE, PRIM_BUMP_SHINY, PRIM_FULLBRIGHT, PRIM_TEXGEN, PRIM_GLOW&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetPrimMediaParams&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionAgentCount&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionCorner&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionFlags&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionFPS&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Always returns 10.0f&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionName&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionTimeDilation&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2750)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRootPosition&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRootRotation&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetScale&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetScriptName&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetScriptState&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetSimulatorHostname&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetSPMaxMemory&lt;br /&gt;
|status=&lt;br /&gt;
|impl=NO&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetStartParameter&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Returns always 0!   Same limitations as llSetStatus&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetStatus&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes (&lt;br /&gt;
|dev=dev&lt;br /&gt;
|test=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=comment&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetSubString&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=Partially working. Just reports wrong position in strings.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetSunDirection&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Krtaylor&lt;br /&gt;
|test=FredoChaplin&lt;br /&gt;
|comment=Sun fly on x axis and report 0 on zenith. Should fly on z axis and report 0 on horizon&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetTexture&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetTextureOffset&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetTextureRot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetTextureScale&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetTime&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2750)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetTimeOfDay&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Vytek&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetTimestamp&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetTorque&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetUnixTime&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetUsedMemory&lt;br /&gt;
|status=&lt;br /&gt;
|impl=NO&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetUsername&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetVel&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetWallclock&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGiveInventory&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=(Does not send to avatars in other sims)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGiveInventoryList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Patnad&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGiveMoney&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Melanie&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGodLikeRezObject&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGround&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Partially... will not compile with llGetPos.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGroundContour&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGroundNormal&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGroundRepel&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGroundSlope&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llHTTPRequest&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=jimbo21&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=H&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llHTTPResponse&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Tokeiito&lt;br /&gt;
|comment=Tested on 2011.01.25 with 0.7.1 Dev OS and xEngine&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llInsertString&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llInstantMessage&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=100%&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llIntegerToBase64&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llKey2Name&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=K&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinkParticleSystem&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinkSitTarget&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2CSV&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2754)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2Float&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2754)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2Integer&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2754)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2Key&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2754)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2List&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2754)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2ListStrided&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2Rot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2754)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2String&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2754)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2Vector&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2754)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListen&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=jimbo21&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListenControl&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=jimbo21&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListenRemove&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=jimbo21&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2754)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListFindList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Needed for Kan-ed#11&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListInsertList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2754)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListRandomize&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListReplaceList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListSort&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListStatistics&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLoadURL&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLog&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLog10&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLookAt&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLoopSound&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works via UUID or Name, volume works too..&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLoopSoundMaster&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLoopSoundSlave&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMakeExplosion&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
|anc=M&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMakeFire&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMakeFountain&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMakeSmoke&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llManageEstateAccess&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMapDestination&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMD5String&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMessageLinked&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMinEventDelay&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llModifyLand&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llModPow&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMoveToTarget&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llOffsetTexture&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llOpenRemoteDataChannel&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=jimbo21&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llOverMyLand&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llOwnerSay&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llParcelMediaCommandList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=P&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llParcelMediaQuery&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llParseString2List&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Spacers are not parsed if separator list is empty&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llParseStringKeepNulls&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llParticleSystem&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Teravus&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPassCollisions&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPassTouches&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPlaySound&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPlaySoundSlave&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPointAt&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPow&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPreloadSound&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPushObject&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRefreshPrimURL&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=R&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRegionSay&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Works with 1023 chars&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRegionSayTo&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=BlueWall&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Works with 1023 chars&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llReleaseCamera&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llReleaseControls&lt;br /&gt;
|status=&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llReleaseURL&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRemoteDataReply&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=jimbo21&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRemoteDataSetRegion&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRemoteLoadScript&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated (from LSL Wiki)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRemoteLoadScriptPin&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRemoveFromLandBanList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRemoveFromLandPassList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRemoveInventory&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=This function should be ported&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRemoveVehicleFlags&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestAgentData&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestDisplayName&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestInventoryData&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestPermissions&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Melanie&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Needed for Kan-ed#12.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestSecureURL&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestSimulatorData&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestURL&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Tokeiito&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestUsername&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llResetLandBanList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llResetLandPassList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llResetOtherScript&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llResetScript&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes (but 800 LPS?)&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llResetTime&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2750)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRezAtRoot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRezObject&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works :)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRot2Angle&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRot2Axis&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRot2Euler&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRot2Fwd&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRot2Left&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRot2Up&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRotateTexture&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRotBetween&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRotLookAt&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRotTarget&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRotTargetRemove&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRound&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSameGroup&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=S&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSay&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)(limted to 1023 chars)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llScaleTexture&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llScriptDanger&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llScriptProfiler&lt;br /&gt;
|status=&lt;br /&gt;
|impl=NO&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSendRemoteData&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=jimbo21&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSensor&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works beyond 96m :) tested past 1000m&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSensorRemove&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSensorRepeat&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works beyond 96m :) tested past 1000m&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetAlpha&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetAngularVelocity&lt;br /&gt;
|status=&lt;br /&gt;
|impl=NO&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetBuoyancy&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetCameraAtOffset&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetCameraEyeOffset&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetCameraParams&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetClickAction&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetColor&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetContentType&lt;br /&gt;
|status=&lt;br /&gt;
|impl=NO&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetDamage&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetForce&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetForceAndTorque&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetHoverHeight&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetInventoryPermMask&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetKeyframedMotion&lt;br /&gt;
|status=&lt;br /&gt;
|impl=NO&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLinkAlpha&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Charlie Omega&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2760)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLinkCamera&lt;br /&gt;
|status=&lt;br /&gt;
|impl=NO&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLinkColor&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Charlie Omega&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2760)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLinkMedia&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLinkPrimitiveParams&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Melanie&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Partial&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLinkPrimitiveParamsFast&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLinkTexture&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLinkTextureAnim&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLocalRot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetMemoryLimit&lt;br /&gt;
|status=&lt;br /&gt;
|impl=NO&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetObjectDesc&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=100% implemented&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetObjectName&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=100% implemented&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetObjectPermMask&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetParcelMusicURL&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2826) Land update not sending changed streams to client.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetPayPrice&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetPos&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688) (now with limitation of 10m as in sl)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetPrimitiveParams&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Melanie&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Partial (it seems complete but needed extensive checking. Also types in list are not LSL conformant) Blackdog Ashbourne: PRIM_POSITION doesn't seem to work - certainly doesn't allow for a warpPos implementation&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetPrimMediaParams&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetPrimURL&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetRegionPos&lt;br /&gt;
|status=&lt;br /&gt;
|impl=NO&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetRemoteScriptAccessPin&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Tokeiito&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetRot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetScale&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetScriptState&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetSitText&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Teravus&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetSoundQueueing&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetSoundRadius&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetStatus&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Doesn't honor STATUS_BLOCK_GRAB STATUS_RETURN_AT_EDGE STATUS_SANDBOX&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetText&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2760)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetTexture&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetTextureAnim&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetTimerEvent&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688) (uses Timer plugin!)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetTorque&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetTouchText&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetVehicleFlags&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetVehicleFloatParam&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetVehicleRotationParam&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetVehicleType&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetVehicleVectorParam&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetVelocity&lt;br /&gt;
|status=&lt;br /&gt;
|impl=NO&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSHA1String&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llShout&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688) (limits 1023 chars)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSin&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSitTarget&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSleep&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSound&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSoundPreload&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSqrt&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStartAnimation&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStopAnimation&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStopHover&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStopLookAt&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStopMoveToTarget&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStopPointAt&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStopSound&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStringLength&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStringToBase64&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStringTrim&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Hashbox&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSubStringIndex&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTakeCamera&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
|anc=T&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTakeControls&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Patnad&lt;br /&gt;
|comment=Needed for Kan-ed#12&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTan&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTarget&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTargetOmega&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTargetRemove&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTeleportAgentHome&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTextBox&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Melanie_T&lt;br /&gt;
|test=Fritigern&lt;br /&gt;
|comment=Function broke some time ago, but was fixed in commit 4cdc88 on 23 Jul 2011&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llToLower&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llToUpper&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTransferLindenDollars&lt;br /&gt;
|status=&lt;br /&gt;
|impl=NO&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTriggerSound&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTriggerSoundLimited&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llUnescapeURL&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=U&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llUnSit&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llVecDist&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
|anc=V&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llVecMag&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llVecNorm&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llVolumeDetect&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Gerhard&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Implementation needs ODE to work, other physics engine only have a stub for this. Persitance of this feature (survive region restart) only implemented for SQLite. Semantics are slightly different to SL (switching off phantom via GUI also resets VolDet-status to off)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llWater&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=W&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llWhisper&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688) (but limited to 1023 chars)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llWind&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llXorBase64Strings&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
|anc=X&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llXorBase64StringsCorrect&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Back to [[LSL Status]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Users]]&lt;br /&gt;
[[Category:Support]]&lt;br /&gt;
[[Category:Tech Reference]]&lt;br /&gt;
[[Category:Help]]&lt;br /&gt;
[[Category:Configuration]]&lt;br /&gt;
[[Category:Getting Started]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Todo]]&lt;/div&gt;</summary>
		<author><name>Talun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Category:OSSL_Functions</id>
		<title>Category:OSSL Functions</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Category:OSSL_Functions"/>
				<updated>2012-04-29T18:01:26Z</updated>
		
		<summary type="html">&lt;p&gt;Talun: /* NPCs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Current OSSL Functions Implemented  ==&lt;br /&gt;
&lt;br /&gt;
Updated OSSL Functions as of OpenSim DEV 0.7.4 OpenSim-0007711-r/18206 March 1, 2012&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
'''!''' Partial Update December.10.2010 With commits of this date some functions have been corrected to use standard ossl conventions. The previous are tagged as deprecated with their replacement shown. The deprecated functions will advise you with a msg that they have been deprecated and to use new osFunction name instead. Further Updates are needed to complete existing list of osFunctions.&lt;br /&gt;
&lt;br /&gt;
Special Note: Some Functions as shown use '''&amp;quot;double&amp;quot;''' as a Value instead of '''&amp;quot;float&amp;quot; '''these vary for purposes of accuracy as shown Below. &lt;br /&gt;
&lt;br /&gt;
(Float is short for &amp;quot;floating point&amp;quot;, and just means a number with a point something on the end.) &lt;br /&gt;
&lt;br /&gt;
The difference between the two is in the size of the numbers that they can hold. For float, you can have up to 7 digits in your number. For doubles, you can have up to 16 digits. To be more precise, here's the official size: ( float: 1.5 × 10-45 to 3.4 × 1038 ) ( double: 5.0 × 10-324 to 1.7 × 10308 ) &lt;br /&gt;
&lt;br /&gt;
Note that some function takes doubles as arguments but may be internally down-casted to floats.&lt;br /&gt;
&lt;br /&gt;
Each of these functions has an threat level associated to it. See [[Threat level]] for more information and an overview of each function's level.&lt;br /&gt;
&lt;br /&gt;
=== Avatar Managements ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
*[[osGetAgentIP]] &lt;br /&gt;
*[[osGetAgents]]&lt;br /&gt;
*[[osGetAvatarList]] &lt;br /&gt;
*[[osAvatarName2Key]]&lt;br /&gt;
*[[osAvatarPlayAnimation]] &lt;br /&gt;
*[[osAvatarStopAnimation]] &lt;br /&gt;
*[[osAgentSaveAppearance]]&lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
*[[osOwnerSaveAppearance]]&lt;br /&gt;
*[[osTeleportAgent]] &lt;br /&gt;
*[[osTeleportOwner]] &lt;br /&gt;
*[[osKickAvatar]]&lt;br /&gt;
*[[osCauseDamage]] &lt;br /&gt;
*[[osCauseHealing]]&lt;br /&gt;
*[[osInviteToGroup]]&lt;br /&gt;
*[[osEjectFromGroup]]&lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== NPCs ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
*[[osNpcCreate]]&lt;br /&gt;
*[[osNpcGetPos]]&lt;br /&gt;
*[[osNpcGetRot]]&lt;br /&gt;
*[[osNpcGetOwner]]&lt;br /&gt;
*[[osNpcLoadAppearance]]&lt;br /&gt;
*[[osNpcMoveTo]]&lt;br /&gt;
*[[osNpcMoveToTarget]]&lt;br /&gt;
*[[osNpcRemove]]&lt;br /&gt;
*[[osNpcSaveAppearance]]&lt;br /&gt;
*[[osNpcSay]]&lt;br /&gt;
*[[osNpcSay (with channel)]]&lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
*[[osNpcSetRot]]&lt;br /&gt;
*[[osNpcShout]]&lt;br /&gt;
*[[osNpcSit]]&lt;br /&gt;
*[[osNpcStand]]&lt;br /&gt;
*[[osNpcStopMoveToTarget]]&lt;br /&gt;
*[[osIsNpc]]&lt;br /&gt;
*[[osNpcPlayAnimation]]&lt;br /&gt;
*[[osNpcStopAnimation]]&lt;br /&gt;
*[[osNpcWhisper]]&lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== Prim Manipulations ===&lt;br /&gt;
*[[osGetPrimitiveParams]] &lt;br /&gt;
*[[osGetLinkPrimitiveParams]] &lt;br /&gt;
*[[osSetPrimitiveParams]] &lt;br /&gt;
*[[osSetProjectionParams]] &lt;br /&gt;
*[[osSetSpeed]] &lt;br /&gt;
*[[osMessageObject]]&lt;br /&gt;
*[[osGetInventoryDesc]]&lt;br /&gt;
&lt;br /&gt;
=== Prim Drawings ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
*[[osMovePen]] &lt;br /&gt;
*[[osDrawLine]] &lt;br /&gt;
*[[osDrawText]] &lt;br /&gt;
*[[osDrawEllipse]] &lt;br /&gt;
*[[osDrawRectangle]] &lt;br /&gt;
*[[osDrawFilledRectangle]] &lt;br /&gt;
*[[osDrawPolygon]] &lt;br /&gt;
*[[osDrawFilledPolygon]] &lt;br /&gt;
*[[osDrawImage]] &lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
*[[osGetDrawStringSize]] &lt;br /&gt;
*[[osSetFontName]] &lt;br /&gt;
*[[osSetFontSize]] &lt;br /&gt;
*[[osSetPenSize]] &lt;br /&gt;
*[[osSetPenColor]] &lt;br /&gt;
*[[osSetPenCap]]&lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Textures ===&lt;br /&gt;
*[[osSetDynamicTextureData]] &lt;br /&gt;
*[[osSetDynamicTextureDataBlend]] &lt;br /&gt;
*[[osSetDynamicTextureDataBlendFace]] &lt;br /&gt;
*[[osSetDynamicTextureURL]] &lt;br /&gt;
*[[osSetDynamicTextureURLBlend]] &lt;br /&gt;
*[[osSetDynamicTextureURLBlendFace]]&lt;br /&gt;
&lt;br /&gt;
=== Notecards ===&lt;br /&gt;
*[[osMakeNotecard]] &lt;br /&gt;
*[[osGetNotecard]] &lt;br /&gt;
*[[osGetNotecardLine]] &lt;br /&gt;
*[[osGetNumberOfNotecardLines]] &lt;br /&gt;
&lt;br /&gt;
=== Parcels ===&lt;br /&gt;
*[[osParcelJoin]] &lt;br /&gt;
*[[osParcelSubdivide]] &lt;br /&gt;
*[[osSetParcelDetails]]&lt;br /&gt;
&lt;br /&gt;
=== Terrains ===&lt;br /&gt;
*[[osGetTerrainHeight]] &lt;br /&gt;
*[[osSetTerrainHeight]] &lt;br /&gt;
*[[osTerrainFlush]]&lt;br /&gt;
*[[osSetTerrainTexture]]&lt;br /&gt;
*[[osSetTerrainTextureHeight]]&lt;br /&gt;
&lt;br /&gt;
=== WindLights ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
*[[osSetRegionWaterHeight]] &lt;br /&gt;
*[[osSetRegionSunSettings]] &lt;br /&gt;
*[[osSetEstateSunSettings]] &lt;br /&gt;
*[[osGetCurrentSunHour]] &lt;br /&gt;
*[[osGetSunParam]] &lt;br /&gt;
*[[osSetSunParam]] &lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
*[[osWindActiveModelPluginName]] &lt;br /&gt;
*[[osGetWindParam]] &lt;br /&gt;
*[[osSetWindParam]]&lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== Grid Informations ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
*[[osGetGridName]] &lt;br /&gt;
*[[osGetGridNick]] &lt;br /&gt;
*[[osGetGridLoginURI]]&lt;br /&gt;
*[[osGetGridHomeURI]]&lt;br /&gt;
*[[osGetGridGatekeeperURI]]&lt;br /&gt;
*[[osGetGridCustom]]&lt;br /&gt;
*[[osGetScriptEngineName]] &lt;br /&gt;
*[[osGetSimulatorVersion]] &lt;br /&gt;
*[[osGetSimulatorMemory]] &lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
*[[osGetMapTexture]] &lt;br /&gt;
*[[osGetRegionMapTexture]] &lt;br /&gt;
*[[osGetRegionStats]] &lt;br /&gt;
*[[osLoadedCreationDate]] &lt;br /&gt;
*[[osLoadedCreationTime]] &lt;br /&gt;
*[[osLoadedCreationID]] &lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== Administrations ===&lt;br /&gt;
*[[osRegionNotice]] &lt;br /&gt;
*[[osRegionRestart]] &lt;br /&gt;
*[[osConsoleCommand]] &lt;br /&gt;
*[[osSetParcelMediaURL]] &lt;br /&gt;
*[[osSetPrimFloatOnWater]]&lt;br /&gt;
*[[osSetParcelSIPAddress]] &lt;br /&gt;
&lt;br /&gt;
=== Misc ===&lt;br /&gt;
*[[osSetStateEvents]] &lt;br /&gt;
*[[osList2Double]] &lt;br /&gt;
*[[osKey2Name]] &lt;br /&gt;
*[[osFormatString]] &lt;br /&gt;
*[[osMatchString]] &lt;br /&gt;
*[[osUnixTimeToTimestamp]] &lt;br /&gt;
*[[osParseJSON]]&lt;br /&gt;
*[[osParseJSONNew]]&lt;br /&gt;
&lt;br /&gt;
=== Deprecated ===&lt;br /&gt;
*[[osParcelSetDetails|&amp;lt;strike&amp;gt;osParcelSetDetails&amp;lt;/strike&amp;gt;]] - Use [[osSetParcelDetails]] &lt;br /&gt;
*[[osSetPenColour|&amp;lt;strike&amp;gt;osSetPenColour&amp;lt;/strike&amp;gt;]] - Use [[osSetPenColor]] &lt;br /&gt;
*[[osSunGetParam|&amp;lt;strike&amp;gt;osSunGetParam&amp;lt;/strike&amp;gt;]] - Use [[osGetSunParam]] &lt;br /&gt;
*[[osSunSetParam|&amp;lt;strike&amp;gt;osSunSetParam&amp;lt;/strike&amp;gt;]] - Use [[osSetSunParam]] &lt;br /&gt;
*[[osTerrainGetHeight|&amp;lt;strike&amp;gt;osTerrainGetHeight&amp;lt;/strike&amp;gt;]] - Use [[osGetTerrainHeight]] &lt;br /&gt;
*[[osTerrainSetHeight|&amp;lt;strike&amp;gt;osTerrainSetHeight&amp;lt;/strike&amp;gt;]] - Use [[osSetTerrainHeight]]&lt;br /&gt;
&lt;br /&gt;
== See Also  ==&lt;br /&gt;
&lt;br /&gt;
*[[LSL Status|LSL/OSSL Status Page]] &lt;br /&gt;
*OSSL &lt;br /&gt;
**[[OSSL Status/Types|OSSL Types Status Page]] &lt;br /&gt;
**[[OSSL Status/Events|OSSL Events Status Page]] &lt;br /&gt;
**[[OSSL Proposals|OSSL Proposed Functions]] &lt;br /&gt;
**[[OSSL_Implemented|OSSL Implemented Functions]] &lt;br /&gt;
**[[OSSL Enabling Functions]] &lt;br /&gt;
**[[OSSL Standards|OSSL Standards]]&lt;br /&gt;
**[[Dynamic_textures|OSSL osDynamicTextures Functions Index Page]]&lt;br /&gt;
**[[OSSL TextureDrawing|OSSL TextureDrawing Extended Information]]&lt;br /&gt;
**[[OSSLNPC|OSSL functions for working with NPCs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:OSSL]]&lt;/div&gt;</summary>
		<author><name>Talun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsNpcSay_(with_channel)</id>
		<title>OsNpcSay (with channel)</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsNpcSay_(with_channel)"/>
				<updated>2012-04-29T17:57:08Z</updated>
		
		<summary type="html">&lt;p&gt;Talun: Created page with &amp;quot;{{osslfunc |threat_level=High |function_syntax=void osNpcSay(key npc, int channel, string message) |ossl_example=See osNpcCreate example. |description='''npc''' says '''messa...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|function_syntax=void osNpcSay(key npc, int channel, string message)&lt;br /&gt;
|ossl_example=See [[osNpcCreate]] example.&lt;br /&gt;
|description='''npc''' says '''message''' on the given '''channel'''.&lt;br /&gt;
|&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Talun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Category:OSSL_Functions</id>
		<title>Category:OSSL Functions</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Category:OSSL_Functions"/>
				<updated>2012-04-29T17:54:40Z</updated>
		
		<summary type="html">&lt;p&gt;Talun: /* NPCs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Current OSSL Functions Implemented  ==&lt;br /&gt;
&lt;br /&gt;
Updated OSSL Functions as of OpenSim DEV 0.7.4 OpenSim-0007711-r/18206 March 1, 2012&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
'''!''' Partial Update December.10.2010 With commits of this date some functions have been corrected to use standard ossl conventions. The previous are tagged as deprecated with their replacement shown. The deprecated functions will advise you with a msg that they have been deprecated and to use new osFunction name instead. Further Updates are needed to complete existing list of osFunctions.&lt;br /&gt;
&lt;br /&gt;
Special Note: Some Functions as shown use '''&amp;quot;double&amp;quot;''' as a Value instead of '''&amp;quot;float&amp;quot; '''these vary for purposes of accuracy as shown Below. &lt;br /&gt;
&lt;br /&gt;
(Float is short for &amp;quot;floating point&amp;quot;, and just means a number with a point something on the end.) &lt;br /&gt;
&lt;br /&gt;
The difference between the two is in the size of the numbers that they can hold. For float, you can have up to 7 digits in your number. For doubles, you can have up to 16 digits. To be more precise, here's the official size: ( float: 1.5 × 10-45 to 3.4 × 1038 ) ( double: 5.0 × 10-324 to 1.7 × 10308 ) &lt;br /&gt;
&lt;br /&gt;
Note that some function takes doubles as arguments but may be internally down-casted to floats.&lt;br /&gt;
&lt;br /&gt;
Each of these functions has an threat level associated to it. See [[Threat level]] for more information and an overview of each function's level.&lt;br /&gt;
&lt;br /&gt;
=== Avatar Managements ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
*[[osGetAgentIP]] &lt;br /&gt;
*[[osGetAgents]]&lt;br /&gt;
*[[osGetAvatarList]] &lt;br /&gt;
*[[osAvatarName2Key]]&lt;br /&gt;
*[[osAvatarPlayAnimation]] &lt;br /&gt;
*[[osAvatarStopAnimation]] &lt;br /&gt;
*[[osAgentSaveAppearance]]&lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
*[[osOwnerSaveAppearance]]&lt;br /&gt;
*[[osTeleportAgent]] &lt;br /&gt;
*[[osTeleportOwner]] &lt;br /&gt;
*[[osKickAvatar]]&lt;br /&gt;
*[[osCauseDamage]] &lt;br /&gt;
*[[osCauseHealing]]&lt;br /&gt;
*[[osInviteToGroup]]&lt;br /&gt;
*[[osEjectFromGroup]]&lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== NPCs ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
*[[osNpcCreate]]&lt;br /&gt;
*[[osNpcGetPos]]&lt;br /&gt;
*[[osNpcGetRot]]&lt;br /&gt;
*[[osNpcGetOwner]]&lt;br /&gt;
*[[osNpcLoadAppearance]]&lt;br /&gt;
*[[osNpcMoveTo]]&lt;br /&gt;
*[[osNpcMoveToTarget]]&lt;br /&gt;
*[[osNpcRemove]]&lt;br /&gt;
*[[osNpcSaveAppearance]]&lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
*[[osNpcSay]]&lt;br /&gt;
*[[osNpcSay (with channel)]]&lt;br /&gt;
*[[osNpcSetRot]]&lt;br /&gt;
*[[osNpcShout]]&lt;br /&gt;
*[[osNpcSit]]&lt;br /&gt;
*[[osNpcStand]]&lt;br /&gt;
*[[osNpcStopMoveToTarget]]&lt;br /&gt;
*[[osIsNpc]]&lt;br /&gt;
*[[osNpcPlayAnimation]]&lt;br /&gt;
*[[osNpcStopAnimation]]&lt;br /&gt;
*[[osNpcWhisper]]&lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== Prim Manipulations ===&lt;br /&gt;
*[[osGetPrimitiveParams]] &lt;br /&gt;
*[[osGetLinkPrimitiveParams]] &lt;br /&gt;
*[[osSetPrimitiveParams]] &lt;br /&gt;
*[[osSetProjectionParams]] &lt;br /&gt;
*[[osSetSpeed]] &lt;br /&gt;
*[[osMessageObject]]&lt;br /&gt;
*[[osGetInventoryDesc]]&lt;br /&gt;
&lt;br /&gt;
=== Prim Drawings ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
*[[osMovePen]] &lt;br /&gt;
*[[osDrawLine]] &lt;br /&gt;
*[[osDrawText]] &lt;br /&gt;
*[[osDrawEllipse]] &lt;br /&gt;
*[[osDrawRectangle]] &lt;br /&gt;
*[[osDrawFilledRectangle]] &lt;br /&gt;
*[[osDrawPolygon]] &lt;br /&gt;
*[[osDrawFilledPolygon]] &lt;br /&gt;
*[[osDrawImage]] &lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
*[[osGetDrawStringSize]] &lt;br /&gt;
*[[osSetFontName]] &lt;br /&gt;
*[[osSetFontSize]] &lt;br /&gt;
*[[osSetPenSize]] &lt;br /&gt;
*[[osSetPenColor]] &lt;br /&gt;
*[[osSetPenCap]]&lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Textures ===&lt;br /&gt;
*[[osSetDynamicTextureData]] &lt;br /&gt;
*[[osSetDynamicTextureDataBlend]] &lt;br /&gt;
*[[osSetDynamicTextureDataBlendFace]] &lt;br /&gt;
*[[osSetDynamicTextureURL]] &lt;br /&gt;
*[[osSetDynamicTextureURLBlend]] &lt;br /&gt;
*[[osSetDynamicTextureURLBlendFace]]&lt;br /&gt;
&lt;br /&gt;
=== Notecards ===&lt;br /&gt;
*[[osMakeNotecard]] &lt;br /&gt;
*[[osGetNotecard]] &lt;br /&gt;
*[[osGetNotecardLine]] &lt;br /&gt;
*[[osGetNumberOfNotecardLines]] &lt;br /&gt;
&lt;br /&gt;
=== Parcels ===&lt;br /&gt;
*[[osParcelJoin]] &lt;br /&gt;
*[[osParcelSubdivide]] &lt;br /&gt;
*[[osSetParcelDetails]]&lt;br /&gt;
&lt;br /&gt;
=== Terrains ===&lt;br /&gt;
*[[osGetTerrainHeight]] &lt;br /&gt;
*[[osSetTerrainHeight]] &lt;br /&gt;
*[[osTerrainFlush]]&lt;br /&gt;
*[[osSetTerrainTexture]]&lt;br /&gt;
*[[osSetTerrainTextureHeight]]&lt;br /&gt;
&lt;br /&gt;
=== WindLights ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
*[[osSetRegionWaterHeight]] &lt;br /&gt;
*[[osSetRegionSunSettings]] &lt;br /&gt;
*[[osSetEstateSunSettings]] &lt;br /&gt;
*[[osGetCurrentSunHour]] &lt;br /&gt;
*[[osGetSunParam]] &lt;br /&gt;
*[[osSetSunParam]] &lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
*[[osWindActiveModelPluginName]] &lt;br /&gt;
*[[osGetWindParam]] &lt;br /&gt;
*[[osSetWindParam]]&lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== Grid Informations ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
*[[osGetGridName]] &lt;br /&gt;
*[[osGetGridNick]] &lt;br /&gt;
*[[osGetGridLoginURI]]&lt;br /&gt;
*[[osGetGridHomeURI]]&lt;br /&gt;
*[[osGetGridGatekeeperURI]]&lt;br /&gt;
*[[osGetGridCustom]]&lt;br /&gt;
*[[osGetScriptEngineName]] &lt;br /&gt;
*[[osGetSimulatorVersion]] &lt;br /&gt;
*[[osGetSimulatorMemory]] &lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
*[[osGetMapTexture]] &lt;br /&gt;
*[[osGetRegionMapTexture]] &lt;br /&gt;
*[[osGetRegionStats]] &lt;br /&gt;
*[[osLoadedCreationDate]] &lt;br /&gt;
*[[osLoadedCreationTime]] &lt;br /&gt;
*[[osLoadedCreationID]] &lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== Administrations ===&lt;br /&gt;
*[[osRegionNotice]] &lt;br /&gt;
*[[osRegionRestart]] &lt;br /&gt;
*[[osConsoleCommand]] &lt;br /&gt;
*[[osSetParcelMediaURL]] &lt;br /&gt;
*[[osSetPrimFloatOnWater]]&lt;br /&gt;
*[[osSetParcelSIPAddress]] &lt;br /&gt;
&lt;br /&gt;
=== Misc ===&lt;br /&gt;
*[[osSetStateEvents]] &lt;br /&gt;
*[[osList2Double]] &lt;br /&gt;
*[[osKey2Name]] &lt;br /&gt;
*[[osFormatString]] &lt;br /&gt;
*[[osMatchString]] &lt;br /&gt;
*[[osUnixTimeToTimestamp]] &lt;br /&gt;
*[[osParseJSON]]&lt;br /&gt;
*[[osParseJSONNew]]&lt;br /&gt;
&lt;br /&gt;
=== Deprecated ===&lt;br /&gt;
*[[osParcelSetDetails|&amp;lt;strike&amp;gt;osParcelSetDetails&amp;lt;/strike&amp;gt;]] - Use [[osSetParcelDetails]] &lt;br /&gt;
*[[osSetPenColour|&amp;lt;strike&amp;gt;osSetPenColour&amp;lt;/strike&amp;gt;]] - Use [[osSetPenColor]] &lt;br /&gt;
*[[osSunGetParam|&amp;lt;strike&amp;gt;osSunGetParam&amp;lt;/strike&amp;gt;]] - Use [[osGetSunParam]] &lt;br /&gt;
*[[osSunSetParam|&amp;lt;strike&amp;gt;osSunSetParam&amp;lt;/strike&amp;gt;]] - Use [[osSetSunParam]] &lt;br /&gt;
*[[osTerrainGetHeight|&amp;lt;strike&amp;gt;osTerrainGetHeight&amp;lt;/strike&amp;gt;]] - Use [[osGetTerrainHeight]] &lt;br /&gt;
*[[osTerrainSetHeight|&amp;lt;strike&amp;gt;osTerrainSetHeight&amp;lt;/strike&amp;gt;]] - Use [[osSetTerrainHeight]]&lt;br /&gt;
&lt;br /&gt;
== See Also  ==&lt;br /&gt;
&lt;br /&gt;
*[[LSL Status|LSL/OSSL Status Page]] &lt;br /&gt;
*OSSL &lt;br /&gt;
**[[OSSL Status/Types|OSSL Types Status Page]] &lt;br /&gt;
**[[OSSL Status/Events|OSSL Events Status Page]] &lt;br /&gt;
**[[OSSL Proposals|OSSL Proposed Functions]] &lt;br /&gt;
**[[OSSL_Implemented|OSSL Implemented Functions]] &lt;br /&gt;
**[[OSSL Enabling Functions]] &lt;br /&gt;
**[[OSSL Standards|OSSL Standards]]&lt;br /&gt;
**[[Dynamic_textures|OSSL osDynamicTextures Functions Index Page]]&lt;br /&gt;
**[[OSSL TextureDrawing|OSSL TextureDrawing Extended Information]]&lt;br /&gt;
**[[OSSLNPC|OSSL functions for working with NPCs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:OSSL]]&lt;/div&gt;</summary>
		<author><name>Talun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsNpcWhisper</id>
		<title>OsNpcWhisper</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsNpcWhisper"/>
				<updated>2012-04-29T17:51:51Z</updated>
		
		<summary type="html">&lt;p&gt;Talun: Created page with &amp;quot;{{osslfunc |threat_level=High |function_syntax=void osNpcWhisper(key npc, int channel, string message) |ossl_example=See osNpcCreate example. |description='''npc''' whispers ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|function_syntax=void osNpcWhisper(key npc, int channel, string message)&lt;br /&gt;
|ossl_example=See [[osNpcCreate]] example.&lt;br /&gt;
|description='''npc''' whispers '''message''' on the given '''channel'''.&lt;br /&gt;
|&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Talun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsNpcShout</id>
		<title>OsNpcShout</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsNpcShout"/>
				<updated>2012-04-29T17:50:12Z</updated>
		
		<summary type="html">&lt;p&gt;Talun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|function_syntax=void osNpcShout(key npc, int channel, string message)&lt;br /&gt;
|ossl_example=See [[osNpcCreate]] example.&lt;br /&gt;
|description='''npc''' shouts '''message''' on the given '''channel'''.&lt;br /&gt;
|&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Talun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsNpcShout</id>
		<title>OsNpcShout</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsNpcShout"/>
				<updated>2012-04-29T17:49:31Z</updated>
		
		<summary type="html">&lt;p&gt;Talun: Created page with &amp;quot;{{osslfunc |threat_level=High |function_syntax=void osNpcShout(key npc, int channel, string message) |ossl_example=See osNpcCreate example. |description='''npc''' shouts '''m...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|function_syntax=void osNpcShout(key npc, int channel, string message)&lt;br /&gt;
|ossl_example=See [[osNpcCreate]] example.&lt;br /&gt;
|description='''npc''' shouts '''message''' on the given channel.&lt;br /&gt;
|&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Talun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Category:OSSL_Functions</id>
		<title>Category:OSSL Functions</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Category:OSSL_Functions"/>
				<updated>2012-04-29T17:47:18Z</updated>
		
		<summary type="html">&lt;p&gt;Talun: /* NPCs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Current OSSL Functions Implemented  ==&lt;br /&gt;
&lt;br /&gt;
Updated OSSL Functions as of OpenSim DEV 0.7.4 OpenSim-0007711-r/18206 March 1, 2012&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
'''!''' Partial Update December.10.2010 With commits of this date some functions have been corrected to use standard ossl conventions. The previous are tagged as deprecated with their replacement shown. The deprecated functions will advise you with a msg that they have been deprecated and to use new osFunction name instead. Further Updates are needed to complete existing list of osFunctions.&lt;br /&gt;
&lt;br /&gt;
Special Note: Some Functions as shown use '''&amp;quot;double&amp;quot;''' as a Value instead of '''&amp;quot;float&amp;quot; '''these vary for purposes of accuracy as shown Below. &lt;br /&gt;
&lt;br /&gt;
(Float is short for &amp;quot;floating point&amp;quot;, and just means a number with a point something on the end.) &lt;br /&gt;
&lt;br /&gt;
The difference between the two is in the size of the numbers that they can hold. For float, you can have up to 7 digits in your number. For doubles, you can have up to 16 digits. To be more precise, here's the official size: ( float: 1.5 × 10-45 to 3.4 × 1038 ) ( double: 5.0 × 10-324 to 1.7 × 10308 ) &lt;br /&gt;
&lt;br /&gt;
Note that some function takes doubles as arguments but may be internally down-casted to floats.&lt;br /&gt;
&lt;br /&gt;
Each of these functions has an threat level associated to it. See [[Threat level]] for more information and an overview of each function's level.&lt;br /&gt;
&lt;br /&gt;
=== Avatar Managements ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
*[[osGetAgentIP]] &lt;br /&gt;
*[[osGetAgents]]&lt;br /&gt;
*[[osGetAvatarList]] &lt;br /&gt;
*[[osAvatarName2Key]]&lt;br /&gt;
*[[osAvatarPlayAnimation]] &lt;br /&gt;
*[[osAvatarStopAnimation]] &lt;br /&gt;
*[[osAgentSaveAppearance]]&lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
*[[osOwnerSaveAppearance]]&lt;br /&gt;
*[[osTeleportAgent]] &lt;br /&gt;
*[[osTeleportOwner]] &lt;br /&gt;
*[[osKickAvatar]]&lt;br /&gt;
*[[osCauseDamage]] &lt;br /&gt;
*[[osCauseHealing]]&lt;br /&gt;
*[[osInviteToGroup]]&lt;br /&gt;
*[[osEjectFromGroup]]&lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== NPCs ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
*[[osNpcCreate]]&lt;br /&gt;
*[[osNpcGetPos]]&lt;br /&gt;
*[[osNpcGetRot]]&lt;br /&gt;
*[[osNpcGetOwner]]&lt;br /&gt;
*[[osNpcLoadAppearance]]&lt;br /&gt;
*[[osNpcMoveTo]]&lt;br /&gt;
*[[osNpcMoveToTarget]]&lt;br /&gt;
*[[osNpcRemove]]&lt;br /&gt;
*[[osNpcSaveAppearance]]&lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
*[[osNpcSay]]&lt;br /&gt;
*[[osNpcSetRot]]&lt;br /&gt;
*[[osNpcShout]]&lt;br /&gt;
*[[osNpcSit]]&lt;br /&gt;
*[[osNpcStand]]&lt;br /&gt;
*[[osNpcStopMoveToTarget]]&lt;br /&gt;
*[[osIsNpc]]&lt;br /&gt;
*[[osNpcPlayAnimation]]&lt;br /&gt;
*[[osNpcStopAnimation]]&lt;br /&gt;
*[[osNpcWhisper]]&lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== Prim Manipulations ===&lt;br /&gt;
*[[osGetPrimitiveParams]] &lt;br /&gt;
*[[osGetLinkPrimitiveParams]] &lt;br /&gt;
*[[osSetPrimitiveParams]] &lt;br /&gt;
*[[osSetProjectionParams]] &lt;br /&gt;
*[[osSetSpeed]] &lt;br /&gt;
*[[osMessageObject]]&lt;br /&gt;
*[[osGetInventoryDesc]]&lt;br /&gt;
&lt;br /&gt;
=== Prim Drawings ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
*[[osMovePen]] &lt;br /&gt;
*[[osDrawLine]] &lt;br /&gt;
*[[osDrawText]] &lt;br /&gt;
*[[osDrawEllipse]] &lt;br /&gt;
*[[osDrawRectangle]] &lt;br /&gt;
*[[osDrawFilledRectangle]] &lt;br /&gt;
*[[osDrawPolygon]] &lt;br /&gt;
*[[osDrawFilledPolygon]] &lt;br /&gt;
*[[osDrawImage]] &lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
*[[osGetDrawStringSize]] &lt;br /&gt;
*[[osSetFontName]] &lt;br /&gt;
*[[osSetFontSize]] &lt;br /&gt;
*[[osSetPenSize]] &lt;br /&gt;
*[[osSetPenColor]] &lt;br /&gt;
*[[osSetPenCap]]&lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Textures ===&lt;br /&gt;
*[[osSetDynamicTextureData]] &lt;br /&gt;
*[[osSetDynamicTextureDataBlend]] &lt;br /&gt;
*[[osSetDynamicTextureDataBlendFace]] &lt;br /&gt;
*[[osSetDynamicTextureURL]] &lt;br /&gt;
*[[osSetDynamicTextureURLBlend]] &lt;br /&gt;
*[[osSetDynamicTextureURLBlendFace]]&lt;br /&gt;
&lt;br /&gt;
=== Notecards ===&lt;br /&gt;
*[[osMakeNotecard]] &lt;br /&gt;
*[[osGetNotecard]] &lt;br /&gt;
*[[osGetNotecardLine]] &lt;br /&gt;
*[[osGetNumberOfNotecardLines]] &lt;br /&gt;
&lt;br /&gt;
=== Parcels ===&lt;br /&gt;
*[[osParcelJoin]] &lt;br /&gt;
*[[osParcelSubdivide]] &lt;br /&gt;
*[[osSetParcelDetails]]&lt;br /&gt;
&lt;br /&gt;
=== Terrains ===&lt;br /&gt;
*[[osGetTerrainHeight]] &lt;br /&gt;
*[[osSetTerrainHeight]] &lt;br /&gt;
*[[osTerrainFlush]]&lt;br /&gt;
*[[osSetTerrainTexture]]&lt;br /&gt;
*[[osSetTerrainTextureHeight]]&lt;br /&gt;
&lt;br /&gt;
=== WindLights ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
*[[osSetRegionWaterHeight]] &lt;br /&gt;
*[[osSetRegionSunSettings]] &lt;br /&gt;
*[[osSetEstateSunSettings]] &lt;br /&gt;
*[[osGetCurrentSunHour]] &lt;br /&gt;
*[[osGetSunParam]] &lt;br /&gt;
*[[osSetSunParam]] &lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
*[[osWindActiveModelPluginName]] &lt;br /&gt;
*[[osGetWindParam]] &lt;br /&gt;
*[[osSetWindParam]]&lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== Grid Informations ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
*[[osGetGridName]] &lt;br /&gt;
*[[osGetGridNick]] &lt;br /&gt;
*[[osGetGridLoginURI]]&lt;br /&gt;
*[[osGetGridHomeURI]]&lt;br /&gt;
*[[osGetGridGatekeeperURI]]&lt;br /&gt;
*[[osGetGridCustom]]&lt;br /&gt;
*[[osGetScriptEngineName]] &lt;br /&gt;
*[[osGetSimulatorVersion]] &lt;br /&gt;
*[[osGetSimulatorMemory]] &lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
*[[osGetMapTexture]] &lt;br /&gt;
*[[osGetRegionMapTexture]] &lt;br /&gt;
*[[osGetRegionStats]] &lt;br /&gt;
*[[osLoadedCreationDate]] &lt;br /&gt;
*[[osLoadedCreationTime]] &lt;br /&gt;
*[[osLoadedCreationID]] &lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== Administrations ===&lt;br /&gt;
*[[osRegionNotice]] &lt;br /&gt;
*[[osRegionRestart]] &lt;br /&gt;
*[[osConsoleCommand]] &lt;br /&gt;
*[[osSetParcelMediaURL]] &lt;br /&gt;
*[[osSetPrimFloatOnWater]]&lt;br /&gt;
*[[osSetParcelSIPAddress]] &lt;br /&gt;
&lt;br /&gt;
=== Misc ===&lt;br /&gt;
*[[osSetStateEvents]] &lt;br /&gt;
*[[osList2Double]] &lt;br /&gt;
*[[osKey2Name]] &lt;br /&gt;
*[[osFormatString]] &lt;br /&gt;
*[[osMatchString]] &lt;br /&gt;
*[[osUnixTimeToTimestamp]] &lt;br /&gt;
*[[osParseJSON]]&lt;br /&gt;
*[[osParseJSONNew]]&lt;br /&gt;
&lt;br /&gt;
=== Deprecated ===&lt;br /&gt;
*[[osParcelSetDetails|&amp;lt;strike&amp;gt;osParcelSetDetails&amp;lt;/strike&amp;gt;]] - Use [[osSetParcelDetails]] &lt;br /&gt;
*[[osSetPenColour|&amp;lt;strike&amp;gt;osSetPenColour&amp;lt;/strike&amp;gt;]] - Use [[osSetPenColor]] &lt;br /&gt;
*[[osSunGetParam|&amp;lt;strike&amp;gt;osSunGetParam&amp;lt;/strike&amp;gt;]] - Use [[osGetSunParam]] &lt;br /&gt;
*[[osSunSetParam|&amp;lt;strike&amp;gt;osSunSetParam&amp;lt;/strike&amp;gt;]] - Use [[osSetSunParam]] &lt;br /&gt;
*[[osTerrainGetHeight|&amp;lt;strike&amp;gt;osTerrainGetHeight&amp;lt;/strike&amp;gt;]] - Use [[osGetTerrainHeight]] &lt;br /&gt;
*[[osTerrainSetHeight|&amp;lt;strike&amp;gt;osTerrainSetHeight&amp;lt;/strike&amp;gt;]] - Use [[osSetTerrainHeight]]&lt;br /&gt;
&lt;br /&gt;
== See Also  ==&lt;br /&gt;
&lt;br /&gt;
*[[LSL Status|LSL/OSSL Status Page]] &lt;br /&gt;
*OSSL &lt;br /&gt;
**[[OSSL Status/Types|OSSL Types Status Page]] &lt;br /&gt;
**[[OSSL Status/Events|OSSL Events Status Page]] &lt;br /&gt;
**[[OSSL Proposals|OSSL Proposed Functions]] &lt;br /&gt;
**[[OSSL_Implemented|OSSL Implemented Functions]] &lt;br /&gt;
**[[OSSL Enabling Functions]] &lt;br /&gt;
**[[OSSL Standards|OSSL Standards]]&lt;br /&gt;
**[[Dynamic_textures|OSSL osDynamicTextures Functions Index Page]]&lt;br /&gt;
**[[OSSL TextureDrawing|OSSL TextureDrawing Extended Information]]&lt;br /&gt;
**[[OSSLNPC|OSSL functions for working with NPCs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:OSSL]]&lt;/div&gt;</summary>
		<author><name>Talun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OSSLNPC</id>
		<title>OSSLNPC</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OSSLNPC"/>
				<updated>2012-04-29T17:41:42Z</updated>
		
		<summary type="html">&lt;p&gt;Talun: /* osNpcSay */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
&lt;br /&gt;
Since 12th August 2011 in the Git master development code branch, OpenSimulator had provided a number of functions for creating and manipulating NPCs. These replace the previous functions, that had stopped working by OpenSimulator 0.7.1.1 (possibly broken since OpenSimulator 0.6.9).&lt;br /&gt;
&lt;br /&gt;
The general philosophy in creating these new functions is to &lt;br /&gt;
&lt;br /&gt;
# Give script writers the simple tools needed to create more sophisticated behaviour.&lt;br /&gt;
# Avoid duplicating existing LSL and OSSL functions. For instance, finding out what state an agent is in can be done through llGetAgentInfo() rather than creating a special NPC function. &lt;br /&gt;
&lt;br /&gt;
NPCs are controlled via a script which must be in the same region as the NPC. This could be housed in an attachment that is attached to the avatar.&lt;br /&gt;
&lt;br /&gt;
NPCs created user these scripts cannot leave the region in which they were born. If you want region crossing behaviour, please look at the options on the [[NPC]] wiki page.&lt;br /&gt;
&lt;br /&gt;
NPC appearance is saved and loaded by serializing the appearance data structure to a notecard present in the same prim as the script. The required textures should be preserved when an OAR is saved and loaded.&lt;br /&gt;
&lt;br /&gt;
This functionality is at an early stage and method signatures could change, certainly before the release of OpenSimulator 0.7.2. However, we hope to avoid this.&lt;br /&gt;
&lt;br /&gt;
= Enabling =&lt;br /&gt;
&lt;br /&gt;
To use these functions, in the OpenSim.ini file you will need the following config&lt;br /&gt;
&lt;br /&gt;
# Enabled = true set in the [NPC] section.&lt;br /&gt;
# Enabled = true set in the [XEngine] section.&lt;br /&gt;
# AllowOSFunctions = true in the [XEngine] section.&lt;br /&gt;
# OSFunctionThreatLevel = VeryHigh in the [XEngine] section. The functions osAgentSaveAppearance(), osAvatarPlayAnimation() and osAvatarStopAnimation() need this level. If you don't need these functions, then a &amp;quot;High&amp;quot; level will suffice.&lt;br /&gt;
&lt;br /&gt;
= Notes =&lt;br /&gt;
&lt;br /&gt;
* When using your avatar to model appearance before saving, you will need to wait a few seconds before invoking any save appearance command. This is because appearance saving currently operates on a timer in order to manage multiple appearance updates from the viewer.&lt;br /&gt;
* OpenSimulator 0.7.3-rc1 introduces the concept of 'owned' and 'unowned' NPC. An 'owned' NPC is one where only the creating script and other scripts with the same owner can manipulate the NPC. An 'unowned' NPC is one where any script with the right permissions (as defined in the [XEngine] configuration section) can manipulate it. In OpenSimulator 0.7.3, all avatars are 'owned' by default unless otherwise specified in the osNpcCreate() call.&lt;br /&gt;
&lt;br /&gt;
= Sensing =&lt;br /&gt;
&lt;br /&gt;
In OpenSimulator 0.7.2, LSL sensors will detect NPCs as ordinary agents.&lt;br /&gt;
&lt;br /&gt;
In OpenSimulator 0.7.3-rc1 onwards, unless otherwise specified, NPCs will only be detected using the OpenSimulator-specific NPC flag, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
//Author: mewtwo0641&lt;br /&gt;
&lt;br /&gt;
list keys = []; &lt;br /&gt;
key npc;&lt;br /&gt;
string toucher;&lt;br /&gt;
key toucherkey;&lt;br /&gt;
vector toucherPos;&lt;br /&gt;
integer npc_on = FALSE;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{ &lt;br /&gt;
    touch_start(integer x)&lt;br /&gt;
    {   &lt;br /&gt;
        toucherkey = llDetectedKey(0);&lt;br /&gt;
        toucherPos = llDetectedPos(0);&lt;br /&gt;
        vector npcPos = llGetPos() + &amp;lt;1,1,1&amp;gt;;&lt;br /&gt;
    &lt;br /&gt;
        if(npc_on == FALSE)&lt;br /&gt;
        {    &lt;br /&gt;
            npc = osNpcCreate(&amp;quot;Fred&amp;quot;, &amp;quot;Flintstone&amp;quot;, npcPos, toucherkey);&lt;br /&gt;
            npc_on = TRUE;&lt;br /&gt;
            llSensor(&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, AGENT | NPC, 96.0, PI); //Will always return NPC key regardless of npc create option&lt;br /&gt;
            return;&lt;br /&gt;
        }   &lt;br /&gt;
    &lt;br /&gt;
        if(npc_on == TRUE)&lt;br /&gt;
        {   &lt;br /&gt;
            osNpcRemove(npc);&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }   &lt;br /&gt;
    }   &lt;br /&gt;
    &lt;br /&gt;
    sensor(integer num)&lt;br /&gt;
    {   &lt;br /&gt;
        keys = []; &lt;br /&gt;
        integer i = 0;&lt;br /&gt;
    &lt;br /&gt;
        for(i; i &amp;lt; num; i++)&lt;br /&gt;
        {   &lt;br /&gt;
            keys += llDetectedKey(i); &lt;br /&gt;
        }   &lt;br /&gt;
    &lt;br /&gt;
        llOwnerSay(llDumpList2String(keys, &amp;quot;\n&amp;quot;));&lt;br /&gt;
    }   &lt;br /&gt;
    &lt;br /&gt;
    no_sensor()&lt;br /&gt;
    {   &lt;br /&gt;
        keys = [];   &lt;br /&gt;
    }   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can get NPCs to be detected as AGENTs again using the OS_NPC_SENSE_AS_AGENT option below in osNpcCreate().&lt;br /&gt;
&lt;br /&gt;
The justification is that detecting NPCs as AGENTs by default may make some scripts unusable (e.g. radars that know nothing about NPCs). However, conversely other scripts may not behave as expected if NPCs aren't sensed as agents (e.g. doors that open automatically for avatars would not open for NPCs).&lt;br /&gt;
&lt;br /&gt;
Please note that this applies only to sensors at this time.&lt;br /&gt;
&lt;br /&gt;
= Functions =&lt;br /&gt;
&lt;br /&gt;
== Create and Remove ==&lt;br /&gt;
=== [[osNpcCreate]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcCreate(string firstname, string lastname, vector position, string cloneFrom):key&lt;br /&gt;
&lt;br /&gt;
cloneFrom may be:&lt;br /&gt;
&lt;br /&gt;
* Name of the notecard containing a serialized avatar appearance, or&lt;br /&gt;
* Asset UUID of the Notecard, or&lt;br /&gt;
* UUID of an avatar logged into the same region. However, please note that this appearance will not be persisted unless osNpcSaveAppearance() is called.&lt;br /&gt;
&lt;br /&gt;
If the NPC is successfully created, then its UUID is returned, which is required for all subsequent functions. Example is available at [[osNpcCreate]]&lt;br /&gt;
&lt;br /&gt;
(OpenSimulator 0.7.3-rc1 onwards only). This creates an NPC that is 'owned' by the creating script and sensed using the OpenSimulator-only NPC flag for sensors.&lt;br /&gt;
&lt;br /&gt;
=== osNpcCreate ===&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.7.3-rc1 onwards.&lt;br /&gt;
&lt;br /&gt;
 osNpcCreate(string firstname, string lastname, vector position, string cloneFrom, integer options):key&lt;br /&gt;
&lt;br /&gt;
cloneFrom may be:&lt;br /&gt;
&lt;br /&gt;
* Name of the notecard containing a serialized avatar appearance, or&lt;br /&gt;
* Asset UUID of the Notecard, or&lt;br /&gt;
* UUID of an avatar logged into the same region. However, please note that this appearance will not be persisted unless osNpcSaveAppearance() is called.&lt;br /&gt;
&lt;br /&gt;
integer is a set of flags that may be 0 or one or more of&lt;br /&gt;
&lt;br /&gt;
* OS_NPC_NOT_OWNED - create an unowned NPC.&lt;br /&gt;
* OS_NPC_SENSE_AS_AGENT - create an NPC that is sensed as an AGENT with LSL sensors &lt;br /&gt;
&lt;br /&gt;
If the NPC is successfully created, then its UUID is returned, which is required for all subsequent functions. Example is available at [[osNpcCreate]]&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcRemove]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcRemove(key npc):void&lt;br /&gt;
&lt;br /&gt;
Remove the given avatar from the region. Example at [[osNpcRemove]].&lt;br /&gt;
&lt;br /&gt;
== Get and Set ==&lt;br /&gt;
=== osIsNpc ===&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.7.3-rc1 onwards.&lt;br /&gt;
&lt;br /&gt;
 osIsNpc(key npc):integer&lt;br /&gt;
&lt;br /&gt;
Returns TRUE if the given key is an NPC, false otherwise.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcGetRot]] ===&lt;br /&gt;
&lt;br /&gt;
Gets the rotation of the avatar. Only the rotation around the Z plane in Euler rotation (horizontal rotation) has any meaning.&lt;br /&gt;
&lt;br /&gt;
 osNpcGetRot(key npc):rotation&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcSetRot]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcSetRot(key npc, rotation rot):void&lt;br /&gt;
&lt;br /&gt;
Set the rotation of the avatar. Only setting the rotation in the Z plane in Euler rotation will have any meaningful effect (turning the avatar to point in one direction or another). Setting X or Y Euler values will result in the avatar rotating in an undefined manner.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcGetPos]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcGetPos(key npc):vector&lt;br /&gt;
&lt;br /&gt;
Return the current position of the NPC.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcGetOwner]] ===&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.7.3-rc1 onwards.&lt;br /&gt;
&lt;br /&gt;
 osNpcGetOwner(key npc):key&lt;br /&gt;
&lt;br /&gt;
Return the owner of the given NPC (i.e. the owner of the script that created it). If the NPC is unowned or the input key does not belong to an NPC then returns NULL_KEY.&lt;br /&gt;
&lt;br /&gt;
== Movement ==&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcMoveTo]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcMoveTo(key npc, vector position):void&lt;br /&gt;
&lt;br /&gt;
An older function that performs an osNpcMoveToTarget() by flying and landing at the target.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcMoveToTarget]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcMoveToTarget(key npc, vector target, int options):void&lt;br /&gt;
&lt;br /&gt;
Move the avatar to a given target over time. How the avatar will get there depends on the following options.&lt;br /&gt;
&lt;br /&gt;
* OS_NPC_FLY - Fly the avatar to the given position. The avatar will not land unless the OS_NPC_LAND_AT_TARGET option is also given.&lt;br /&gt;
* OS_NPC_NO_FLY - Do not fly to the target. The NPC will attempt to walk to the location. If it's up in the air then the avatar will keep bouncing hopeless until another move target is given or the move is stopped&lt;br /&gt;
* OS_NPC_LAND_AT_TARGET - If given and the avatar is flying, then it will land when it reaches the target. If OS_NPC_NO_FLY is given then this option has no effect.&lt;br /&gt;
&lt;br /&gt;
OS_NPC_FLY and OS_NPC_NO_FLY are options that cannot be combined - the avatar will end up doing one or the other. If you want the avatar to fly and land at the target, then OS_NPC_LAND_AT_TARGET must be combined with OS_NPC_FLY. For instance,&lt;br /&gt;
&lt;br /&gt;
 osNpcMoveToTarget(npc, llGetPos() + &amp;lt;9,9,5&amp;gt;, OS_NPC_FLY|OS_NPC_LAND_AT_TARGET);&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcStopMoveToTarget]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcStopMoveToTarget(key npc):void&lt;br /&gt;
&lt;br /&gt;
Stop a current move to a target.&lt;br /&gt;
&lt;br /&gt;
== Sitting and standing ==&lt;br /&gt;
&lt;br /&gt;
=== osNpcSit ===&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.7.3-rc1 onwards.&lt;br /&gt;
&lt;br /&gt;
 osNpcSit(key npc, key target, int options):void&lt;br /&gt;
&lt;br /&gt;
Sit an NPC on a prim target. As yet there are no options, so always input 0.&lt;br /&gt;
&lt;br /&gt;
=== osNpcStand ===&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.7.3-rc1 onwards.&lt;br /&gt;
&lt;br /&gt;
 osNpcStand(key npc):void&lt;br /&gt;
&lt;br /&gt;
Make an npc stand up.&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcSay]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcSay(key npc, string message):void also osNpcSay(key npc, int channel, string message):void&lt;br /&gt;
&lt;br /&gt;
Get the NPC to say the given message. Using the second version the chat is said on the given channel.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcShout]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcShout(key npc, int channel, string message):void&lt;br /&gt;
&lt;br /&gt;
Get the NPC to shout the given message on the given channel.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcWhisper]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcWhisper(key npc, int channel, string message):void&lt;br /&gt;
&lt;br /&gt;
Get the NPC to whisper the given message on the given channel.&lt;br /&gt;
&lt;br /&gt;
== Animations ==&lt;br /&gt;
&lt;br /&gt;
=== osNpcPlayAnimation ===&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.7.3-rc1 onwards.&lt;br /&gt;
&lt;br /&gt;
 osNpcPlayAnimation(key npc, string animation):void&lt;br /&gt;
&lt;br /&gt;
Get an NPC to play an animation. The animation can either be a key or the name of an animation in the same inventory as the script.&lt;br /&gt;
&lt;br /&gt;
=== osNpcStopAnimation ===&lt;br /&gt;
&lt;br /&gt;
In OpenSimulator 0.7.3-rc1 there is a bug which makes this play the animation instead. This will be corrected for the final release but in the mean time please use osAvatarStopAnimation() instead.&lt;br /&gt;
&lt;br /&gt;
 osNpcStopAnimation(key npc, string animation):void&lt;br /&gt;
&lt;br /&gt;
Get an NPC to stop playing an animation. The animation can either be a key or the name of an animation in the same inventory as the script.&lt;br /&gt;
&lt;br /&gt;
== Appearance ==&lt;br /&gt;
&lt;br /&gt;
NPC appearance is manipulated by saving and loading appearance data to notecards from the same inventory as the invoking script.&lt;br /&gt;
&lt;br /&gt;
=== [[osOwnerSaveAppearance]] ===&lt;br /&gt;
&lt;br /&gt;
 osOwnerSaveAppearance(string notecard):key&lt;br /&gt;
&lt;br /&gt;
Save the owner's current appearance to a notecard in the prim's inventory. This includes body part data, clothing items and attachments. If a notecard with the same name already exists then it is replaced. The owner must be present in the region when this function is invoked. The baked textures for the owner (necessary to recreate appearance on the NPC) are saved permanently.&lt;br /&gt;
&lt;br /&gt;
=== [[osAgentSaveAppearance]] ===&lt;br /&gt;
&lt;br /&gt;
 osAgentSaveAppearance(key agentId, string notecard):key&lt;br /&gt;
&lt;br /&gt;
Save an arbitrary avatar's appearance to a notecard in the prim's inventory. This includes body part data, clothing items and attachments. If a notecard with the same name already exists then it is replaced. The avatar must be present in the region when this function is invoked. The baked textures for the avatar (necessary to recreate appearance on the NPC) are saved permanently.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcSaveAppearance]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcSaveAppearance(key npc, string notecard):key&lt;br /&gt;
&lt;br /&gt;
Save the NPC's current appearance to a notecard in the prim's inventory. This includes body part data, clothing items and attachments. If a notecard with the same name already exists then it is replaced. The avatar must be present in the region when this function is invoked. The baked textures for the avatar (necessary to recreate appearance) are saved permanently.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcLoadAppearance]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcLoadAppearance(key npc, string notecard):void&lt;br /&gt;
&lt;br /&gt;
Load appearance from a notecard. This notecard must contain appearance data created with one of the save appearance functions.&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&lt;br /&gt;
This is a rough example script for most of the current NPC functionality. Please feel free to improve it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
key npc;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llListen(10,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;);&lt;br /&gt;
    }  &lt;br /&gt;
     &lt;br /&gt;
    listen(integer channel, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if (msg != &amp;quot;&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if (msg == &amp;quot;create&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                osOwnerSaveAppearance(&amp;quot;appearance&amp;quot;);&lt;br /&gt;
                npc = osNpcCreate(&amp;quot;Jane&amp;quot;, &amp;quot;Doe&amp;quot;, &amp;lt;115, 165, 23&amp;gt;, &amp;quot;appearance&amp;quot;);&lt;br /&gt;
            }   &lt;br /&gt;
            else if (msg == &amp;quot;remove&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcSay(npc, &amp;quot;You will pay for this with your liiiiiivvveeessss!!!.....&amp;quot;);&lt;br /&gt;
                osNpcRemove (npc);&lt;br /&gt;
            }   &lt;br /&gt;
            else if (msg == &amp;quot;say&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcSay(npc, &amp;quot;I am your worst Nightmare!!!!&amp;quot;);&lt;br /&gt;
            }   &lt;br /&gt;
            else if (msg == &amp;quot;move&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcMoveTo(npc, llGetPos() + &amp;lt;9,9,0&amp;gt;);&lt;br /&gt;
            }   &lt;br /&gt;
            else if (msg == &amp;quot;movetarget&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcMoveToTarget(npc, llGetPos() + &amp;lt;9,9,5&amp;gt;, OS_NPC_FLY|OS_NPC_LAND_AT_TARGET);&lt;br /&gt;
            }&lt;br /&gt;
            else if (msg == &amp;quot;movetargetnoland&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcMoveToTarget(npc, llGetPos() + &amp;lt;9,9,5&amp;gt;, OS_NPC_FLY);&lt;br /&gt;
            }            &lt;br /&gt;
            else if (msg == &amp;quot;movetargetwalk&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcMoveToTarget(npc, llGetPos() + &amp;lt;9,9,0&amp;gt;, OS_NPC_NO_FLY);                &lt;br /&gt;
            }&lt;br /&gt;
            else if (msg == &amp;quot;rot&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                vector xyz_angles = &amp;lt;0,0,45&amp;gt;; // This is to define a 45 degree change&lt;br /&gt;
                vector angles_in_radians = xyz_angles * DEG_TO_RAD; // Change to Radians&lt;br /&gt;
                rotation rot_xyzq = llEuler2Rot(angles_in_radians); // Change to a Rotation                &lt;br /&gt;
                rotation rot = osNpcGetRot(npc);&lt;br /&gt;
                osNpcSetRot(npc, rot * rot_xyzq);&lt;br /&gt;
            }&lt;br /&gt;
            else if (msg == &amp;quot;animate&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osAvatarPlayAnimation(npc, &amp;quot;stabbed+die_2&amp;quot;);&lt;br /&gt;
                llSleep(3);&lt;br /&gt;
                osAvatarStopAnimation(npc, &amp;quot;stabbed+die_2&amp;quot;);&lt;br /&gt;
            }   &lt;br /&gt;
            else if (msg == &amp;quot;save&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcSaveAppearance(npc, &amp;quot;appearance&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else if (msg == &amp;quot;load&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcLoadAppearance(npc, &amp;quot;appearance&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else if (msg == &amp;quot;clone&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                osOwnerSaveAppearance(&amp;quot;appearance&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else if (msg == &amp;quot;stop&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcStopMoveToTarget(npc);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llOwnerSay(&amp;quot;I don't understand [&amp;quot; + msg + &amp;quot;]&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }   &lt;br /&gt;
    }   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Questions/Comments =&lt;br /&gt;
&lt;br /&gt;
Please leave your questions and comments on [[Talk:OSSLNPC|this article's talk page]].&lt;br /&gt;
&lt;br /&gt;
[[Category:OSSL Functions]]&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Talun</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OSSLNPC</id>
		<title>OSSLNPC</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OSSLNPC"/>
				<updated>2012-04-29T17:39:49Z</updated>
		
		<summary type="html">&lt;p&gt;Talun: /* Communication */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
&lt;br /&gt;
Since 12th August 2011 in the Git master development code branch, OpenSimulator had provided a number of functions for creating and manipulating NPCs. These replace the previous functions, that had stopped working by OpenSimulator 0.7.1.1 (possibly broken since OpenSimulator 0.6.9).&lt;br /&gt;
&lt;br /&gt;
The general philosophy in creating these new functions is to &lt;br /&gt;
&lt;br /&gt;
# Give script writers the simple tools needed to create more sophisticated behaviour.&lt;br /&gt;
# Avoid duplicating existing LSL and OSSL functions. For instance, finding out what state an agent is in can be done through llGetAgentInfo() rather than creating a special NPC function. &lt;br /&gt;
&lt;br /&gt;
NPCs are controlled via a script which must be in the same region as the NPC. This could be housed in an attachment that is attached to the avatar.&lt;br /&gt;
&lt;br /&gt;
NPCs created user these scripts cannot leave the region in which they were born. If you want region crossing behaviour, please look at the options on the [[NPC]] wiki page.&lt;br /&gt;
&lt;br /&gt;
NPC appearance is saved and loaded by serializing the appearance data structure to a notecard present in the same prim as the script. The required textures should be preserved when an OAR is saved and loaded.&lt;br /&gt;
&lt;br /&gt;
This functionality is at an early stage and method signatures could change, certainly before the release of OpenSimulator 0.7.2. However, we hope to avoid this.&lt;br /&gt;
&lt;br /&gt;
= Enabling =&lt;br /&gt;
&lt;br /&gt;
To use these functions, in the OpenSim.ini file you will need the following config&lt;br /&gt;
&lt;br /&gt;
# Enabled = true set in the [NPC] section.&lt;br /&gt;
# Enabled = true set in the [XEngine] section.&lt;br /&gt;
# AllowOSFunctions = true in the [XEngine] section.&lt;br /&gt;
# OSFunctionThreatLevel = VeryHigh in the [XEngine] section. The functions osAgentSaveAppearance(), osAvatarPlayAnimation() and osAvatarStopAnimation() need this level. If you don't need these functions, then a &amp;quot;High&amp;quot; level will suffice.&lt;br /&gt;
&lt;br /&gt;
= Notes =&lt;br /&gt;
&lt;br /&gt;
* When using your avatar to model appearance before saving, you will need to wait a few seconds before invoking any save appearance command. This is because appearance saving currently operates on a timer in order to manage multiple appearance updates from the viewer.&lt;br /&gt;
* OpenSimulator 0.7.3-rc1 introduces the concept of 'owned' and 'unowned' NPC. An 'owned' NPC is one where only the creating script and other scripts with the same owner can manipulate the NPC. An 'unowned' NPC is one where any script with the right permissions (as defined in the [XEngine] configuration section) can manipulate it. In OpenSimulator 0.7.3, all avatars are 'owned' by default unless otherwise specified in the osNpcCreate() call.&lt;br /&gt;
&lt;br /&gt;
= Sensing =&lt;br /&gt;
&lt;br /&gt;
In OpenSimulator 0.7.2, LSL sensors will detect NPCs as ordinary agents.&lt;br /&gt;
&lt;br /&gt;
In OpenSimulator 0.7.3-rc1 onwards, unless otherwise specified, NPCs will only be detected using the OpenSimulator-specific NPC flag, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
//Author: mewtwo0641&lt;br /&gt;
&lt;br /&gt;
list keys = []; &lt;br /&gt;
key npc;&lt;br /&gt;
string toucher;&lt;br /&gt;
key toucherkey;&lt;br /&gt;
vector toucherPos;&lt;br /&gt;
integer npc_on = FALSE;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{ &lt;br /&gt;
    touch_start(integer x)&lt;br /&gt;
    {   &lt;br /&gt;
        toucherkey = llDetectedKey(0);&lt;br /&gt;
        toucherPos = llDetectedPos(0);&lt;br /&gt;
        vector npcPos = llGetPos() + &amp;lt;1,1,1&amp;gt;;&lt;br /&gt;
    &lt;br /&gt;
        if(npc_on == FALSE)&lt;br /&gt;
        {    &lt;br /&gt;
            npc = osNpcCreate(&amp;quot;Fred&amp;quot;, &amp;quot;Flintstone&amp;quot;, npcPos, toucherkey);&lt;br /&gt;
            npc_on = TRUE;&lt;br /&gt;
            llSensor(&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, AGENT | NPC, 96.0, PI); //Will always return NPC key regardless of npc create option&lt;br /&gt;
            return;&lt;br /&gt;
        }   &lt;br /&gt;
    &lt;br /&gt;
        if(npc_on == TRUE)&lt;br /&gt;
        {   &lt;br /&gt;
            osNpcRemove(npc);&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }   &lt;br /&gt;
    }   &lt;br /&gt;
    &lt;br /&gt;
    sensor(integer num)&lt;br /&gt;
    {   &lt;br /&gt;
        keys = []; &lt;br /&gt;
        integer i = 0;&lt;br /&gt;
    &lt;br /&gt;
        for(i; i &amp;lt; num; i++)&lt;br /&gt;
        {   &lt;br /&gt;
            keys += llDetectedKey(i); &lt;br /&gt;
        }   &lt;br /&gt;
    &lt;br /&gt;
        llOwnerSay(llDumpList2String(keys, &amp;quot;\n&amp;quot;));&lt;br /&gt;
    }   &lt;br /&gt;
    &lt;br /&gt;
    no_sensor()&lt;br /&gt;
    {   &lt;br /&gt;
        keys = [];   &lt;br /&gt;
    }   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can get NPCs to be detected as AGENTs again using the OS_NPC_SENSE_AS_AGENT option below in osNpcCreate().&lt;br /&gt;
&lt;br /&gt;
The justification is that detecting NPCs as AGENTs by default may make some scripts unusable (e.g. radars that know nothing about NPCs). However, conversely other scripts may not behave as expected if NPCs aren't sensed as agents (e.g. doors that open automatically for avatars would not open for NPCs).&lt;br /&gt;
&lt;br /&gt;
Please note that this applies only to sensors at this time.&lt;br /&gt;
&lt;br /&gt;
= Functions =&lt;br /&gt;
&lt;br /&gt;
== Create and Remove ==&lt;br /&gt;
=== [[osNpcCreate]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcCreate(string firstname, string lastname, vector position, string cloneFrom):key&lt;br /&gt;
&lt;br /&gt;
cloneFrom may be:&lt;br /&gt;
&lt;br /&gt;
* Name of the notecard containing a serialized avatar appearance, or&lt;br /&gt;
* Asset UUID of the Notecard, or&lt;br /&gt;
* UUID of an avatar logged into the same region. However, please note that this appearance will not be persisted unless osNpcSaveAppearance() is called.&lt;br /&gt;
&lt;br /&gt;
If the NPC is successfully created, then its UUID is returned, which is required for all subsequent functions. Example is available at [[osNpcCreate]]&lt;br /&gt;
&lt;br /&gt;
(OpenSimulator 0.7.3-rc1 onwards only). This creates an NPC that is 'owned' by the creating script and sensed using the OpenSimulator-only NPC flag for sensors.&lt;br /&gt;
&lt;br /&gt;
=== osNpcCreate ===&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.7.3-rc1 onwards.&lt;br /&gt;
&lt;br /&gt;
 osNpcCreate(string firstname, string lastname, vector position, string cloneFrom, integer options):key&lt;br /&gt;
&lt;br /&gt;
cloneFrom may be:&lt;br /&gt;
&lt;br /&gt;
* Name of the notecard containing a serialized avatar appearance, or&lt;br /&gt;
* Asset UUID of the Notecard, or&lt;br /&gt;
* UUID of an avatar logged into the same region. However, please note that this appearance will not be persisted unless osNpcSaveAppearance() is called.&lt;br /&gt;
&lt;br /&gt;
integer is a set of flags that may be 0 or one or more of&lt;br /&gt;
&lt;br /&gt;
* OS_NPC_NOT_OWNED - create an unowned NPC.&lt;br /&gt;
* OS_NPC_SENSE_AS_AGENT - create an NPC that is sensed as an AGENT with LSL sensors &lt;br /&gt;
&lt;br /&gt;
If the NPC is successfully created, then its UUID is returned, which is required for all subsequent functions. Example is available at [[osNpcCreate]]&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcRemove]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcRemove(key npc):void&lt;br /&gt;
&lt;br /&gt;
Remove the given avatar from the region. Example at [[osNpcRemove]].&lt;br /&gt;
&lt;br /&gt;
== Get and Set ==&lt;br /&gt;
=== osIsNpc ===&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.7.3-rc1 onwards.&lt;br /&gt;
&lt;br /&gt;
 osIsNpc(key npc):integer&lt;br /&gt;
&lt;br /&gt;
Returns TRUE if the given key is an NPC, false otherwise.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcGetRot]] ===&lt;br /&gt;
&lt;br /&gt;
Gets the rotation of the avatar. Only the rotation around the Z plane in Euler rotation (horizontal rotation) has any meaning.&lt;br /&gt;
&lt;br /&gt;
 osNpcGetRot(key npc):rotation&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcSetRot]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcSetRot(key npc, rotation rot):void&lt;br /&gt;
&lt;br /&gt;
Set the rotation of the avatar. Only setting the rotation in the Z plane in Euler rotation will have any meaningful effect (turning the avatar to point in one direction or another). Setting X or Y Euler values will result in the avatar rotating in an undefined manner.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcGetPos]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcGetPos(key npc):vector&lt;br /&gt;
&lt;br /&gt;
Return the current position of the NPC.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcGetOwner]] ===&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.7.3-rc1 onwards.&lt;br /&gt;
&lt;br /&gt;
 osNpcGetOwner(key npc):key&lt;br /&gt;
&lt;br /&gt;
Return the owner of the given NPC (i.e. the owner of the script that created it). If the NPC is unowned or the input key does not belong to an NPC then returns NULL_KEY.&lt;br /&gt;
&lt;br /&gt;
== Movement ==&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcMoveTo]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcMoveTo(key npc, vector position):void&lt;br /&gt;
&lt;br /&gt;
An older function that performs an osNpcMoveToTarget() by flying and landing at the target.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcMoveToTarget]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcMoveToTarget(key npc, vector target, int options):void&lt;br /&gt;
&lt;br /&gt;
Move the avatar to a given target over time. How the avatar will get there depends on the following options.&lt;br /&gt;
&lt;br /&gt;
* OS_NPC_FLY - Fly the avatar to the given position. The avatar will not land unless the OS_NPC_LAND_AT_TARGET option is also given.&lt;br /&gt;
* OS_NPC_NO_FLY - Do not fly to the target. The NPC will attempt to walk to the location. If it's up in the air then the avatar will keep bouncing hopeless until another move target is given or the move is stopped&lt;br /&gt;
* OS_NPC_LAND_AT_TARGET - If given and the avatar is flying, then it will land when it reaches the target. If OS_NPC_NO_FLY is given then this option has no effect.&lt;br /&gt;
&lt;br /&gt;
OS_NPC_FLY and OS_NPC_NO_FLY are options that cannot be combined - the avatar will end up doing one or the other. If you want the avatar to fly and land at the target, then OS_NPC_LAND_AT_TARGET must be combined with OS_NPC_FLY. For instance,&lt;br /&gt;
&lt;br /&gt;
 osNpcMoveToTarget(npc, llGetPos() + &amp;lt;9,9,5&amp;gt;, OS_NPC_FLY|OS_NPC_LAND_AT_TARGET);&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcStopMoveToTarget]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcStopMoveToTarget(key npc):void&lt;br /&gt;
&lt;br /&gt;
Stop a current move to a target.&lt;br /&gt;
&lt;br /&gt;
== Sitting and standing ==&lt;br /&gt;
&lt;br /&gt;
=== osNpcSit ===&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.7.3-rc1 onwards.&lt;br /&gt;
&lt;br /&gt;
 osNpcSit(key npc, key target, int options):void&lt;br /&gt;
&lt;br /&gt;
Sit an NPC on a prim target. As yet there are no options, so always input 0.&lt;br /&gt;
&lt;br /&gt;
=== osNpcStand ===&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.7.3-rc1 onwards.&lt;br /&gt;
&lt;br /&gt;
 osNpcStand(key npc):void&lt;br /&gt;
&lt;br /&gt;
Make an npc stand up.&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcSay]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcSay(key npc, string message):void&lt;br /&gt;
&lt;br /&gt;
Get the NPC to say the given message.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcShout]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcShout(key npc, int channel, string message):void&lt;br /&gt;
&lt;br /&gt;
Get the NPC to shout the given message on the given channel.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcWhisper]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcWhisper(key npc, int channel, string message):void&lt;br /&gt;
&lt;br /&gt;
Get the NPC to whisper the given message on the given channel.&lt;br /&gt;
&lt;br /&gt;
== Animations ==&lt;br /&gt;
&lt;br /&gt;
=== osNpcPlayAnimation ===&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.7.3-rc1 onwards.&lt;br /&gt;
&lt;br /&gt;
 osNpcPlayAnimation(key npc, string animation):void&lt;br /&gt;
&lt;br /&gt;
Get an NPC to play an animation. The animation can either be a key or the name of an animation in the same inventory as the script.&lt;br /&gt;
&lt;br /&gt;
=== osNpcStopAnimation ===&lt;br /&gt;
&lt;br /&gt;
In OpenSimulator 0.7.3-rc1 there is a bug which makes this play the animation instead. This will be corrected for the final release but in the mean time please use osAvatarStopAnimation() instead.&lt;br /&gt;
&lt;br /&gt;
 osNpcStopAnimation(key npc, string animation):void&lt;br /&gt;
&lt;br /&gt;
Get an NPC to stop playing an animation. The animation can either be a key or the name of an animation in the same inventory as the script.&lt;br /&gt;
&lt;br /&gt;
== Appearance ==&lt;br /&gt;
&lt;br /&gt;
NPC appearance is manipulated by saving and loading appearance data to notecards from the same inventory as the invoking script.&lt;br /&gt;
&lt;br /&gt;
=== [[osOwnerSaveAppearance]] ===&lt;br /&gt;
&lt;br /&gt;
 osOwnerSaveAppearance(string notecard):key&lt;br /&gt;
&lt;br /&gt;
Save the owner's current appearance to a notecard in the prim's inventory. This includes body part data, clothing items and attachments. If a notecard with the same name already exists then it is replaced. The owner must be present in the region when this function is invoked. The baked textures for the owner (necessary to recreate appearance on the NPC) are saved permanently.&lt;br /&gt;
&lt;br /&gt;
=== [[osAgentSaveAppearance]] ===&lt;br /&gt;
&lt;br /&gt;
 osAgentSaveAppearance(key agentId, string notecard):key&lt;br /&gt;
&lt;br /&gt;
Save an arbitrary avatar's appearance to a notecard in the prim's inventory. This includes body part data, clothing items and attachments. If a notecard with the same name already exists then it is replaced. The avatar must be present in the region when this function is invoked. The baked textures for the avatar (necessary to recreate appearance on the NPC) are saved permanently.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcSaveAppearance]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcSaveAppearance(key npc, string notecard):key&lt;br /&gt;
&lt;br /&gt;
Save the NPC's current appearance to a notecard in the prim's inventory. This includes body part data, clothing items and attachments. If a notecard with the same name already exists then it is replaced. The avatar must be present in the region when this function is invoked. The baked textures for the avatar (necessary to recreate appearance) are saved permanently.&lt;br /&gt;
&lt;br /&gt;
=== [[osNpcLoadAppearance]] ===&lt;br /&gt;
&lt;br /&gt;
 osNpcLoadAppearance(key npc, string notecard):void&lt;br /&gt;
&lt;br /&gt;
Load appearance from a notecard. This notecard must contain appearance data created with one of the save appearance functions.&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&lt;br /&gt;
This is a rough example script for most of the current NPC functionality. Please feel free to improve it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
key npc;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llListen(10,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;);&lt;br /&gt;
    }  &lt;br /&gt;
     &lt;br /&gt;
    listen(integer channel, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if (msg != &amp;quot;&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if (msg == &amp;quot;create&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                osOwnerSaveAppearance(&amp;quot;appearance&amp;quot;);&lt;br /&gt;
                npc = osNpcCreate(&amp;quot;Jane&amp;quot;, &amp;quot;Doe&amp;quot;, &amp;lt;115, 165, 23&amp;gt;, &amp;quot;appearance&amp;quot;);&lt;br /&gt;
            }   &lt;br /&gt;
            else if (msg == &amp;quot;remove&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcSay(npc, &amp;quot;You will pay for this with your liiiiiivvveeessss!!!.....&amp;quot;);&lt;br /&gt;
                osNpcRemove (npc);&lt;br /&gt;
            }   &lt;br /&gt;
            else if (msg == &amp;quot;say&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcSay(npc, &amp;quot;I am your worst Nightmare!!!!&amp;quot;);&lt;br /&gt;
            }   &lt;br /&gt;
            else if (msg == &amp;quot;move&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcMoveTo(npc, llGetPos() + &amp;lt;9,9,0&amp;gt;);&lt;br /&gt;
            }   &lt;br /&gt;
            else if (msg == &amp;quot;movetarget&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcMoveToTarget(npc, llGetPos() + &amp;lt;9,9,5&amp;gt;, OS_NPC_FLY|OS_NPC_LAND_AT_TARGET);&lt;br /&gt;
            }&lt;br /&gt;
            else if (msg == &amp;quot;movetargetnoland&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcMoveToTarget(npc, llGetPos() + &amp;lt;9,9,5&amp;gt;, OS_NPC_FLY);&lt;br /&gt;
            }            &lt;br /&gt;
            else if (msg == &amp;quot;movetargetwalk&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcMoveToTarget(npc, llGetPos() + &amp;lt;9,9,0&amp;gt;, OS_NPC_NO_FLY);                &lt;br /&gt;
            }&lt;br /&gt;
            else if (msg == &amp;quot;rot&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                vector xyz_angles = &amp;lt;0,0,45&amp;gt;; // This is to define a 45 degree change&lt;br /&gt;
                vector angles_in_radians = xyz_angles * DEG_TO_RAD; // Change to Radians&lt;br /&gt;
                rotation rot_xyzq = llEuler2Rot(angles_in_radians); // Change to a Rotation                &lt;br /&gt;
                rotation rot = osNpcGetRot(npc);&lt;br /&gt;
                osNpcSetRot(npc, rot * rot_xyzq);&lt;br /&gt;
            }&lt;br /&gt;
            else if (msg == &amp;quot;animate&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osAvatarPlayAnimation(npc, &amp;quot;stabbed+die_2&amp;quot;);&lt;br /&gt;
                llSleep(3);&lt;br /&gt;
                osAvatarStopAnimation(npc, &amp;quot;stabbed+die_2&amp;quot;);&lt;br /&gt;
            }   &lt;br /&gt;
            else if (msg == &amp;quot;save&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcSaveAppearance(npc, &amp;quot;appearance&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else if (msg == &amp;quot;load&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcLoadAppearance(npc, &amp;quot;appearance&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else if (msg == &amp;quot;clone&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                osOwnerSaveAppearance(&amp;quot;appearance&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else if (msg == &amp;quot;stop&amp;quot; &amp;amp;&amp;amp; npc != NULL_KEY)&lt;br /&gt;
            {&lt;br /&gt;
                osNpcStopMoveToTarget(npc);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llOwnerSay(&amp;quot;I don't understand [&amp;quot; + msg + &amp;quot;]&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }   &lt;br /&gt;
    }   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Questions/Comments =&lt;br /&gt;
&lt;br /&gt;
Please leave your questions and comments on [[Talk:OSSLNPC|this article's talk page]].&lt;br /&gt;
&lt;br /&gt;
[[Category:OSSL Functions]]&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Talun</name></author>	</entry>

	</feed>