<?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=Mewtwo0641</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=Mewtwo0641"/>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Special:Contributions/Mewtwo0641"/>
		<updated>2026-04-20T21:18:54Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.19.9</generator>

	<entry>
		<id>http://opensimulator.org/wiki/Related_Software</id>
		<title>Related Software</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Related_Software"/>
				<updated>2023-07-03T12:36:18Z</updated>
		
		<summary type="html">&lt;p&gt;Mewtwo0641: /* Other related software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks}}&lt;br /&gt;
{{thirdparty}}&lt;br /&gt;
= Introduction =&lt;br /&gt;
This is a page which lists software packages that are related to OpenSimulator but are not part of the core project. Opensimulator is not responsible for the content referenced by these links. Note, OpenSimulator used to have a &amp;quot;Forge&amp;quot;, basically a OpenSim Hosted Code Repo of Software for OpenSim, but this is no longer in existance.&lt;br /&gt;
&lt;br /&gt;
= Viewers =&lt;br /&gt;
These are the client programs and libraries that allow you to connect to an OpenSimulator installation and interact with it.&lt;br /&gt;
&lt;br /&gt;
See [[Connecting]].&lt;br /&gt;
&lt;br /&gt;
= Distributions =&lt;br /&gt;
These are projects that take the OpenSimulator core system and add more functionality or tailor it for a specific purpose.&lt;br /&gt;
&lt;br /&gt;
See [[Download#Other_Distributions]].&lt;br /&gt;
&lt;br /&gt;
= Services =&lt;br /&gt;
&lt;br /&gt;
These can be divided into projects that provide a completely replacement for the ROBUST services backend or individual services.&lt;br /&gt;
&lt;br /&gt;
== Complete replacements ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/openmetaversefoundation/simiangrid/commits/master SimianGrid] - A ROBUST services replacement which replaces the whole ROBUST stack with an alternative implementation based on PHP.  The necessary support for SimianGrid is included in core OpenSimulator. &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;NOTE: SimianGrid support was removed from OpenSimulator in February, 2020&amp;lt;/span&amp;gt; (Commit [http://opensimulator.org/viewgit/?a=commit&amp;amp;p=opensim&amp;amp;h=941b65b44a1524d39e9fe2c4e1ad0f9a9aab3f23 #941b65])&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/projects/openugai/ OpenUGAI] - PERL/Apache implementation of Userserver, Gridserver, Assetserver, and Inventoryserver compatible with older versions of OpenSimulator.&lt;br /&gt;
&lt;br /&gt;
== Individual services ==&lt;br /&gt;
&lt;br /&gt;
OpenSimulator services are architected such that an individual service (e.g. the asset service) can be replaced or added without having to change other services.&lt;br /&gt;
&lt;br /&gt;
'''Assets'''&lt;br /&gt;
* [https://github.com/coyled/sras Simple Ruby Asset Service (SRAS)] - This is a replacement for the ROBUST asset service.  It stores assets on disk, does compression and deduplication of identical assets.  Some installation instructions are [http://onikenkon.com/sras/ here].&lt;br /&gt;
&lt;br /&gt;
'''Groups'''&lt;br /&gt;
* [https://github.com/mcortez/flotsam Flotsam Groups] - This was the only available groups service until [[V2 Groups]] was added to core.&lt;br /&gt;
&lt;br /&gt;
'''Profiles'''&lt;br /&gt;
* [[OpenSimProfile]] - OpenSimulator Profile module&lt;br /&gt;
* [[Profile_based_on_mysqli|OpenProfileModule]] - OpenSimulator Profile module, PHP+MySQLi&lt;br /&gt;
&lt;br /&gt;
= Web Interfaces=&lt;br /&gt;
&lt;br /&gt;
These are web frontends for OpenSimulator, either to allow users to register and perform other functions or for administrators to control the OpenSimulator installation (or both!).&lt;br /&gt;
&lt;br /&gt;
See [[Webinterface]]&lt;br /&gt;
&lt;br /&gt;
= Region Modules =&lt;br /&gt;
These are region modules which can be added to the OpenSimulator core distribution to provide extra functionality.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/justincc/GenericMessagingModule GenericMessagingModule] - An example module to illustrate how an OpenSimulator extension can use the LLUDP GenericMessage packet to convey arbitrary data between a client/viewer and the simulator.&lt;br /&gt;
* [https://github.com/JakDaniels/OpenSimTide OpenSimTide] - An OpenSimulator region module which adds tides to your regions. You can control the tide period and height change via settings in OpenSim.ini and enable tide info to be chatted to the region for use in scripts in boats and waves. Tides only render properly on regions that are not adjacent, i.e. 1x1 islands.&lt;br /&gt;
&lt;br /&gt;
* [[Paypal|PayPal module]] - Links to code and blogs posts on integrating Adam Frisby's PayPal for use as a currency in OpenSimulator&lt;br /&gt;
&lt;br /&gt;
= Tools =&lt;br /&gt;
&lt;br /&gt;
== Archives ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/justincc/opensimulator-tools/tree/master/analysis/oarinfo oarinfo] - Currently a very basic python script that prints out some OAR information (e.g. number of contained assets).&lt;br /&gt;
&lt;br /&gt;
== Control ==&lt;br /&gt;
* [https://github.com/justincc/opensimulator-tools/tree/master/infrastructure/control/osimctrl osimctrl] - A set of scripts to allow start, stop, restart, autorestart, etc. of an OpenSimulator instance from the command line using the GNU screen utility.&lt;br /&gt;
&lt;br /&gt;
== Inventory ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.secondinventory.com/ Second Inventory] - **This is no longer available**. For years it was abandonware: still for sale but nobody at home to answer support issues. Finally the WEB site was removed (2017) so people are no longer tempted to send money. This product was written before mesh was available for OpenSimulator and never supported backing up mesh objects. This was a Windows based client that could be used to back up and restore objects from Second Life™ as well as from various OpenSimulator based grids. It allowed you to back up objects from the Second Life™ main grid, and restore them into OpenSimulator grids.&lt;br /&gt;
* [http://grimore.org/opensim/rake Rake] - Created as an alternative to Second Inventory, but OpenSource and free to use. Rake is meant to dump assets (textures, animations,  notecards, scripts, etc...) from either Second Life™ or OpenSim to your local hard-drive. Like Second Inventory it cannot backup mesh. &lt;br /&gt;
* [http://opensimulator.org/wiki/Inventory_Archives Inventory Archives] If you are looking for a way to back your stuff up. Also read [http://opensimulator.org/wiki/OpenSim_Archives OpenSim Archives]. &lt;br /&gt;
&lt;br /&gt;
* [http://opensimulator.org/wiki/check_inventory_script Inventory Check Script] Designed to check for badly structured inventory causing issues with viewers loading inventory and slow logins.&lt;br /&gt;
&lt;br /&gt;
== Log Analysis ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/justincc/opensimulator-tools/tree/master/analysis/opensimulator-log-analyzer Ola] - A very simple Python script that print out some stats given a simulator or robust service log (chiefly unique user numbers).&lt;br /&gt;
&lt;br /&gt;
* [http://www.spellscape.co.uk/home/news/logview OSLogView] - A C# application for displaying log files with the same color coding as the console itself. Includes error highlighting and UUID highlighting.&lt;br /&gt;
&lt;br /&gt;
== Mesh ==&lt;br /&gt;
* [http://www.snappytree.com/#seed=262&amp;amp;segments=6&amp;amp;levels=5&amp;amp;vMultiplier=2.36&amp;amp;twigScale=0.39&amp;amp;initalBranchLength=0.49&amp;amp;lengthFalloffFactor=0.85&amp;amp;lengthFalloffPower=0.99&amp;amp;clumpMax=0.454&amp;amp;clumpMin=0.404&amp;amp;branchFactor=2.45&amp;amp;dropAmount=-0.1&amp;amp;growAmount=0.235&amp;amp;sweepAmount=0.01&amp;amp;maxRadius=0.139&amp;amp;climbRate=0.371&amp;amp;trunkKink=0.093&amp;amp;treeSteps=5&amp;amp;taperRate=0.947&amp;amp;radiusFalloffRate=0.73&amp;amp;twistRate=3.02&amp;amp;trunkLength=2.4&amp;amp;trunkMaterial=TrunkType1&amp;amp;twigMaterial=BranchType6 SnappyTree] - SnappyTree is a procedural tree creation app. In addition, SnappyTree also provides export options for wavefront and collada file formats so the generated trees can be used in other native applications. [https://github.com/supereggbert/SnappyTree Source Code].&lt;br /&gt;
&lt;br /&gt;
== Monitoring ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/justincc/opensimulator-tools/tree/master/analysis/opensimulator-stats-analyzer Osta] - OpenSimulator stats analysis programs.  Operates on saved stats information to produce summary and graph data of OpenSimulator session performance.&lt;br /&gt;
&lt;br /&gt;
== Regions ==&lt;br /&gt;
&lt;br /&gt;
* [[RegionGenerator]] - Generates Region XML Files&lt;br /&gt;
* [https://github.com/wp2opensim/openSIMULATOR-Regions-Generator/ openSIMULATOR-Regions-Generator] - Regions-Generator for PHP, PHP7 Ready building with/for OpenSimulator 0.9.1(inc. var regions, position) not testet 0.9.0, 0.8.x.&lt;br /&gt;
&lt;br /&gt;
== Scripting ==&lt;br /&gt;
&lt;br /&gt;
* A list of alternative LSL editors is at http://wiki.secondlife.com/wiki/LSL_Alternate_Editors#Notepad.2B.2B&lt;br /&gt;
&lt;br /&gt;
== Terrain ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.ics.uci.edu/~lopes/terraingen/ Terraingen] - Tool for producing OpenSimulator terrains from USGS DEM files.&lt;br /&gt;
* [http://terrain.party/ Terrain.Party] Web-based tool for turning terrain from a real life world map into a height map which can be imported into Opensim using &amp;quot;terrain load &amp;lt;texture_name&amp;gt;.png&amp;quot;. Note that the textures require resizing, since they are exported as 1081x1081 png files&lt;br /&gt;
* [http://www.daylongraphics.com/products/leveller.php/ Daylon Leveller] - Tool for producing OpenSimulator terrains from from a variety of sources, and using painting-like tools and filters to create features. Uses Terragen file format.&lt;br /&gt;
&lt;br /&gt;
Note that you can export and import terrain using the console in Terragen format, as well as r32. Terragen format files (.ter) can be import provided that their dimensions match that of the region, and they have no heights less than zero. See terrain save  and terrain load commands.&lt;br /&gt;
&lt;br /&gt;
= OpenSimulator Forks =&lt;br /&gt;
OpenSimulator is under a free/libre open source license. This means anyone is free to fork the code and change it to suit their needs. These links are some of the known forks. &lt;br /&gt;
&lt;br /&gt;
* [https://github.com/aurora-sim AuroraSim] - A fork that placed heavy emphasis on user-friendliness and usability. Development stopped in 2014&lt;br /&gt;
* [https://github.com/HalcyonGrid Halcyon] - Halcyon was originally based on the OpenSimulator project but was forked in 2010 to provide a stable platform for everyday use under high load. We have concentrated on performance and stability to provide a strong, stable base for the InWorldz grid - and now your grid too!&lt;br /&gt;
* [https://simplicial.net/htg/ Hypergrid to Go] - Hypergrid to Go is a Hypergrid-enabled OpenSim virtual world server, packaged as a self-contained virtual appliance.&lt;br /&gt;
* [https://mosthugs.win/ LaNani] - A fork of OpenSimulator with changes to graphics, BoM, scene rendering and other features.&lt;br /&gt;
* [https://github.com/M-O-S-E-S Moses] - The Military Open Simulator Enterprise Strategy (moses) is a method and strategy for deploying a set of OpenSimulator services and simulators in order to run a private grid.&lt;br /&gt;
* [http://simonastick.com/ Sim-on-a-Stick] (SoaS) - OpenSimulator 0.8.0 post-fixes running its own instances of MySQL, Apache, and PHP for Windows with BulletSim physics and built from Diva D2. SoaS is no longer actively updated.&lt;br /&gt;
* [http://n3x15.github.io/VoxelSim/ VoxelSim] - A fork of OpenSimulator designed to use voxels rather than heightmaps for terrain. Development stopped in 2010.&lt;br /&gt;
* [https://github.com/WhiteCoreSim White-Core Sim] - A fork of both OpenSimulator and libopenmetaverse. The code has diverged significantly. The project is still active as of 2020 and maintained by a small group of developers.&lt;br /&gt;
&lt;br /&gt;
= Other related software =&lt;br /&gt;
&lt;br /&gt;
* [http://www.nsl.tuis.ac.jp/xoops/modules/xpwiki/?sl_proxy%20%28E%29 sl_proxy] - sl_proxy is a Proxy System for Second Life™ and OpenSimulator to beyond firewall by NSL. &lt;br /&gt;
* [http://www.nsl.tuis.ac.jp/xoops/modules/xpwiki/?OpenSim%2FMoneyServer DTL/NSL Money Server] - This Money Server is modified version of &amp;quot;DTL Currency Processing&amp;quot; for Linux/Unix by NSL.&lt;br /&gt;
* [http://www.nsl.tuis.ac.jp/xoops/modules/xpwiki/?Rinions Rinions] - This is a real-time animation tool for Second Life™/OpenSim. Rinions sends animation data from Kinect to Viewer in real time using shared memory and over the Network by NSL.&lt;br /&gt;
* [https://github.com/talat77/opensimmaps/ OpenSim Maps] - Completely re-written for Google Maps API v3 from the v2 version included with OpenSimWi(Redux) and now includes support for larger regions e.g. varregions.&lt;br /&gt;
* [http://www.nsl.tuis.ac.jp/xoops/modules/xpwiki/?OpenSim%2FWind&amp;amp;word=Wind Fluid Solver Wind Module] by NSL&lt;br /&gt;
* [http://www.nsl.tuis.ac.jp/xoops/modules/xpwiki/?OAR%20Converter OARConv] This software converts from OAR to collada files for Unity3D by NSL.&lt;br /&gt;
* [http://www.pader.world/downloads.html RO PHP Destination Guide] This PHP script generates a Destination Guide, which can be assigned to your OpenSimulator grid or viewer.&lt;br /&gt;
* [https://github.com/mewtwo0641/portable-mysql-8 PortableMySQL8] This is a GUI frontend for MySQL 8.0.X+ with configuration specific for OpenSim and aims to make portable installs of OpenSim easier. It's intended to be a partial replacement for the Windows Sim-on-a-Stick + MOWES package for users on OpenSim v0.9.3 and above.&lt;br /&gt;
&lt;br /&gt;
= Concepts =&lt;br /&gt;
&lt;br /&gt;
* [http://www.cs.cmu.edu/~johnny/projects/wii/ 3D Head Tracking Software] - The idea here is that Johnny has written an application that will allow real3d perspective using a WiiMote &amp;amp; a modified set of safety glasses. Johnny includes all of the source and several sample applications to get this moving forward. Would someone like to pick this up and build us a real3D interface for the SL browser? It's not as hard as you think.&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Edusim Edusim on Opensim] - Edusim is a [http://en.wikipedia.org/wiki/Cave_Automatic_Virtual_Environment Cave Automatic Virtual Environment] based concept of lesson driven 3D virtual worlds on the ''classroom interactive whiteboard or classroom interactive surface''. Currently Edusim on Opencobalt Cobalt exists but tweaking a client and making Opensim &amp;quot;finger friendly&amp;quot; would seem to be a relatively straight forward task.&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
&lt;br /&gt;
* [[VMware_Appliance|VMware Appliance of OpenSimulator v0.5]]&lt;br /&gt;
* [[:Category:Development|Development]]&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;/div&gt;</summary>
		<author><name>Mewtwo0641</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsGetNpcList</id>
		<title>OsGetNpcList</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsGetNpcList"/>
				<updated>2017-10-07T23:31:30Z</updated>
		
		<summary type="html">&lt;p&gt;Mewtwo0641: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|threat_level=None&lt;br /&gt;
|function_syntax=list osGetNPCList()&lt;br /&gt;
|csharp_syntax=LSL_List osGetNPCList()&lt;br /&gt;
|ossl_example=&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
//&lt;br /&gt;
// Example of osGetNPCList.&lt;br /&gt;
//&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        list npcs = osGetNPCList();&lt;br /&gt;
        if (npcs == [])&lt;br /&gt;
            llSay(0, &amp;quot;You must be the owner. There is nobody else here who could have touched me.&amp;quot;);&lt;br /&gt;
        else&lt;br /&gt;
            llSay(0, &amp;quot;NPC's in this sim (without avatars): &amp;quot; + llList2CSV(npcs));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|description=Returns a strided list of the UUID, position, and name of each NPC in the region. Only available after 0.9 Commit # e53f43, July 26,2017 &lt;br /&gt;
&lt;br /&gt;
This function is similar to [[OsGetAvatarList]]. &lt;br /&gt;
|&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Mewtwo0641</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OSSL_Proposals</id>
		<title>OSSL Proposals</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OSSL_Proposals"/>
				<updated>2015-03-23T15:23:24Z</updated>
		
		<summary type="html">&lt;p&gt;Mewtwo0641: /* OSSL Proposal Table */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Quicklinks}}&lt;br /&gt;
{{proposal}}&lt;br /&gt;
{{content}}&lt;br /&gt;
&lt;br /&gt;
= What is OSSL? =&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This is a page dedicated to OpenSim's very own home brew custom scripting language Known as &amp;quot;'''O'''pen '''S'''im '''S'''cripting '''L'''anguage&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;'''Please see [[OSSL Standards]] for proposed naming schema'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Please post your osFunction along with a brief description of what it would be for, or do and an example of it. &lt;br /&gt;
* Make sure it begins with os NOT ll.&lt;br /&gt;
* And remember, almost anything within reason can be posted here as an idea, who knows, maybe a variation of your request can be possible.&lt;br /&gt;
* If a function could implemented in standard LSL, there is no reason to make an OS function. LSL code and function code executes at the same speed in OpenSimulator.&lt;br /&gt;
* Post your proposal to the opensim-dev mailing list so that it can be discussed to see if there is any interest. Please indicate if you are willing to implement it yourself - such proposals have a much better chance of succeeding!&lt;br /&gt;
&lt;br /&gt;
== OSSL Proposal Table ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;width:100%;border:1px solid #000000;border-collapse: collapse; white-space:normal;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#99CCFF;font-size:6pt;font-weight:bold;border-bottom:1px solid;&amp;quot; align=&amp;quot;center&amp;quot; valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| osFunction &lt;br /&gt;
| Description &lt;br /&gt;
| Example Usage &lt;br /&gt;
| Signed&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| key osSetHTTPURL(string url);&lt;br /&gt;
| Sets the prim to a private HTTP:// url for use by this script. The http_request() event would be&lt;br /&gt;
triggered &amp;amp; the prim would serve as a &amp;quot;prim-server&amp;quot; for the private HTTP:// url. Also Returns a key that is the handle used for identifying the result in the http_request event.&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
 string private_url = &amp;quot;http://thisprivatedomain.com/index.php&amp;quot;&lt;br /&gt;
 default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
    osSetHTTPURL(private_url);&lt;br /&gt;
    }&lt;br /&gt;
    http_request(key request_id, string method, string body)&lt;br /&gt;
    {&lt;br /&gt;
    if(method == &amp;quot;POST&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
    osHTTPResponse(request_id,200,&amp;quot;Your $_POST was successful&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    else if(method == &amp;quot;GET&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
    osHTTPResponse(request_id,200,&amp;quot;Wait for the server to handle your request&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
| Apollo Juez&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list osGetRegionAgentKeys(); &lt;br /&gt;
| C# Code: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
        public LSL_List osGetRegionAgentKeys()&lt;br /&gt;
       {&lt;br /&gt;
           CheckThreatLevel(ThreatLevel.None, &amp;quot;osGetRegionAgentKeys&amp;quot;);&lt;br /&gt;
           LSL_List result = new LSL_List();&lt;br /&gt;
           foreach (ScenePresence avatar in World.GetAvatars())&lt;br /&gt;
           {&lt;br /&gt;
               result.Add(avatar.UUID);&lt;br /&gt;
           }&lt;br /&gt;
           return result;&lt;br /&gt;
       }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Returns a list of keys for every agent in the region &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
list keys=osGetRegionAgentKeys(); &lt;br /&gt;
integer i;&lt;br /&gt;
integer l=llGetListLength(keys); &lt;br /&gt;
string names; for(i=0;i&amp;amp;lt;l;i++) &lt;br /&gt;
   { key id=llList2Key(keys,i); &lt;br /&gt;
      string add=llKey2Name(id); &lt;br /&gt;
      integer dist=llVecDist(llGetPos(),llList2Vector(llGetObjectDetails(id,[OBJECT_POS]),0)));&lt;br /&gt;
      add+=&amp;quot;[&amp;quot;+(string)dist+&amp;quot;]\n&amp;quot;; &lt;br /&gt;
      names+=add;&lt;br /&gt;
   } llSetText(names,&amp;amp;lt;1,1,1&amp;amp;gt;,1.0); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
| Joshua Driver&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [NEW] various os functions including osDerezObject(), osMessageAgentAttachment(), ... &lt;br /&gt;
| see [[User:Athlon_Maurer]] for full source code &lt;br /&gt;
| tested on local opensimulator 0.6.9 (some of them doesnt seem to work on 0.7.x) &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osBin(string char); &lt;br /&gt;
| To convert a char into its binary value. Will only convert 1 char at a time. &lt;br /&gt;
| string bin_a = osBin(&amp;quot;A&amp;quot;); // bin_a = &amp;quot;01000001&amp;quot;; &lt;br /&gt;
| Athlon Maurer (please send me a notecard into secondlife, if that are too much ideas xD, this hint can be deleted by an opensimulator admin, if neccesary xD)&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osHex(integer number); &lt;br /&gt;
| To convert a number into its hexadecimal value. &lt;br /&gt;
| string str_ff = osHex(255); // str_ff = &amp;quot;FF&amp;quot;; &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osAsc(string char); &lt;br /&gt;
| To convert a char into its ascii index. Will only convert 1 char at a time. &lt;br /&gt;
| integer asc_a = osAsc(&amp;quot;A&amp;quot;); // asc_a = 65; &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osScanRegionRemove(); &lt;br /&gt;
| Remove an osScanRegionRepeat(). [ nearly the same as llSensorRemove() ] &lt;br /&gt;
| osScanRegionRemove(); &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osScanRegion(string name, key id, integer type); &lt;br /&gt;
| Scan the whole region where the script task object is in regardless where it is positioned. Triggers sensor() or no_sensor(). &lt;br /&gt;
| osScanRegion(&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, AGENT); &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osScanRegionRepeat(string name, key id, integer type, float rate); &lt;br /&gt;
| Scan the whole region where the script task object is in regardless where it is positioned with rate. Triggers sensor() or no_sensor(). &lt;br /&gt;
| osScanRegionRepeat(&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, AGENT, 15.0); &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| key osGetRegionMapTexture(string RegionName) &lt;br /&gt;
| return the map texture uuid for the region named by RegionName. &lt;br /&gt;
| llSetTexture(osGetRegionMapTexture(&amp;quot;OpenSimulator Test&amp;quot;), ALL_SIDES); &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
create a php file which is public&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// mapquery.php by Athlon Maurer (SL, OL, OS)&lt;br /&gt;
	//&lt;br /&gt;
	// hello, ive just started to learn php/mysql and this is one of my first&lt;br /&gt;
	// scripts for opensim. this script returns the texture uuid for a given&lt;br /&gt;
	// region by calling: mapquery.php?region=REGIONNAME&lt;br /&gt;
	// if a region has been found, it returns that regions map texture uuid, &lt;br /&gt;
	// otherwise it returns a null key uuid&lt;br /&gt;
	// mysql connection info is here, please make this more safe&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// region name (do not change this)&lt;br /&gt;
	$region = htmlspecialchars($_GET['region']);&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// default uuid (do not change this)&lt;br /&gt;
	$uuid = '00000000-0000-0000-0000-000000000000';&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// your mysql host name (change this)&lt;br /&gt;
	$dbhost = 'localhost';&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// your mysql user name (change this)&lt;br /&gt;
	$dbuser = 'root';&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// your mysql user password (change this)&lt;br /&gt;
	$dbpass = '';&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// your mysql opensim database (change this)&lt;br /&gt;
	$dbname = 'opensim';&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// try to connect&lt;br /&gt;
	if ($conn = mysql_connect($dbhost, $dbuser, $dbpass))&lt;br /&gt;
	{&lt;br /&gt;
		// try to select&lt;br /&gt;
		if ($select = mysql_select_db($dbname, $conn))&lt;br /&gt;
		{&lt;br /&gt;
			$sql = 'SELECT regionName, regionMapTexture FROM regions';&lt;br /&gt;
			$result = mysql_query($sql);&lt;br /&gt;
			while ($row = mysql_fetch_array($result, MYSQL_ASSOC))&lt;br /&gt;
			{&lt;br /&gt;
				if ($row['regionName'] == $region)&lt;br /&gt;
				{&lt;br /&gt;
					$uuid = $row['regionMapTexture'];&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			// free result&lt;br /&gt;
			mysql_free_result($result);&lt;br /&gt;
		}&lt;br /&gt;
		// close connection&lt;br /&gt;
		mysql_close($conn);&lt;br /&gt;
	}&lt;br /&gt;
	// output&lt;br /&gt;
	echo $uuid;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;?&amp;gt;&lt;br /&gt;
then llHTTPRequest(&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| Athlon Maurer (This function is available as of November 12, 2009)&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list osGetLinkPrimitiveParams(integer link, list params); &lt;br /&gt;
| Function llSetLinkPrimitiveParams() does exist, but no chance to get params from a prim in a linkset, like llGetPrimitiveParams() and llSetPrimitiveParams(). &lt;br /&gt;
| list linkparams = osGetLinkPrimitiveParams([PRIM_TYPE, PRIM_TEXTURE, ...]); &lt;br /&gt;
| Athlon Maurer (This function is available as of August 09, 2009)&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osDerezObject(key object) &lt;br /&gt;
| Deletes an InWorld-Object specified by object as uuid. Only successful if the object the script is attached to and the object which should be derezzed is owned by the same owner&amp;amp;nbsp;:). Useful if the object to be deleted should be unscripted. &lt;br /&gt;
| osDerezObject(&amp;quot;key_of_object&amp;quot;); &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| int osRestartRegion() &lt;br /&gt;
| Restarts the region the script is currently in. The script this is run in has to be owned by the master avatar for that region. Returns 1 if the region is restarting, 0 on failure. &lt;br /&gt;
| osRestartRegion(); &lt;br /&gt;
| gryc (Implemented by AFrisby)&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| int osWebTexture() &lt;br /&gt;
| Sets the texture from a web-url &lt;br /&gt;
| osWebTexture(string url,integer maptype); &lt;br /&gt;
| AFrisby?&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osGroupAdd(key, string Role) &lt;br /&gt;
| Adds user to a group with given role, default role Everyone. Returns 1 if successful 0 if fail. &lt;br /&gt;
| osGroupAdd(87f6e6a0-d884-11dc-95ff-0800200c9a66, &amp;quot;Officer&amp;quot;) &lt;br /&gt;
| Nitrus Nori&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| int osShutdownRegion() &lt;br /&gt;
| Shuts down the region the script is currently in. The script this is run in has to be owned by the master avatar for that region. Returns 1 if the region is going down, 0 on failure. &lt;br /&gt;
| osShutdownRegion(); &lt;br /&gt;
| gryc&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osAttachmentSay(integer channel, string msg) &lt;br /&gt;
| Provide a secure, low lag method of communicating between attachments over the chat channels by only sending messages to objects attached to the same avatar. Would fail (or not be heard) if in a non-attached object. &lt;br /&gt;
| osAttachmentSay(-20, &amp;quot;detatch&amp;quot;); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osMessageSecure(string message_key, string str, integer num, key id);&amp;lt;br /&amp;gt;secure_message(string message_key, string str, integer num, key id); &lt;br /&gt;
| Provide a method of sending secure, salt encripted messages sim wide. Messages would only be able to be received by scripts with the matching key in the secure_message method. &lt;br /&gt;
| osMessageSecure(&amp;quot;myPassPhrase&amp;quot;, &amp;quot;Hello World&amp;quot;, 0, NULL_KEY); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osSetText( vector color, string text [,vector color, string text]); &lt;br /&gt;
| Allow setting of multiple colors on the prim text &lt;br /&gt;
| osSetText(&amp;amp;lt;1,0,0&amp;amp;gt;,&amp;quot;Red&amp;quot;, &amp;amp;lt;0,1,0&amp;amp;gt;, &amp;quot;\nGreen&amp;quot;, &amp;amp;lt;0,0,1&amp;amp;gt;, &amp;quot;\nBlue&amp;quot;); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osSensor &lt;br /&gt;
| Gets ALL the objects in the specified range not just the first 16 &lt;br /&gt;
| (same as standard) &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list lst=osDetectObjectsInSim(key id) &lt;br /&gt;
| given an Agent Key, provide a list of ALL object owned by that agent &lt;br /&gt;
| osDetectObjectsInSim(key id) returning a strided list of [ name, &amp;amp;lt;pos&amp;amp;gt; ] &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer=osDialog([ title, label1, type1, len1, label2, type2, len2].... &lt;br /&gt;
| given title and a listing of fields, builds up a real form where to put structured checked data &lt;br /&gt;
| will return a [ value1, value2, valuen ] corresponding to fields read. Type might be something like (string, text (multiline), integer, float, currency(decimals), options(combobox) &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| key id=osMakeTextureText(string name,integer width, integer height,[posx1,posy1,font1,color1,size1,text1,posx2,posy2,font2,color2,size2,text2....]) &lt;br /&gt;
| allow for producing a texture on the fly with desired Font content from a selected font selection. Width, Height in pixels 1024x512 to control how big will be the texture &lt;br /&gt;
| will generate a texture with defined text. (Allow some support for at least ISO-8859-1) texture will be created in the object inventory. posx, posy in the range 0-1 to be pixel independent &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osMakeNotecard(string name, [ line1, line2, line3, ...]) &lt;br /&gt;
| allow creation of new notecards in current object repository &lt;br /&gt;
| generate a new asset id useful for storing modified configuration &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer handler=osReadNotecardKey(string notecard, string key) &lt;br /&gt;
| allows reading notecards (through dataserver) in format key=value in convenient and efficient way &lt;br /&gt;
| ... &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osWriteNotecardKey(string notecard, string key,string value) &lt;br /&gt;
| allows WRITING notecards in format key=value in convenient and efficient way. Might be optimized having a fixed record length &amp;quot;file&amp;quot; so to avoid rewriting of the entire notecard &lt;br /&gt;
| ... &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer handle=osXMLParser(string xml) &lt;br /&gt;
| will activate a listener xmlparser(integer handler,string parent, string field, string value) &lt;br /&gt;
| to easily parse xml without writing php external code &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osReturnObjects(key owner, integer type); &lt;br /&gt;
| Provide a scriptable method of returning objects from a sim. type would be OBJECT_SCRIPTED, OBJECT_PASSIVE or OBJECT_ALL. Would return a binary Success/Fail, and work inline with land permissions for the script owner. &lt;br /&gt;
| osReturnObjects( target, OBJECT_ALL); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osReturnItem(key item); &lt;br /&gt;
| Provide a scriptable method of returning individual objects from a sim. Would return a binary Success/Fail, and work inline with land permissions for the script owner. &lt;br /&gt;
| osReturnItem(uuid); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osSetTimerEvent(integer timer, float rate); &amp;lt;br /&amp;gt; (event) timer(integer timer_num) &lt;br /&gt;
| Support for multiple timers in a script. &lt;br /&gt;
| osSetTimerEvent(2, 0.5); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osTimerOnce(integer timer, float rate); &lt;br /&gt;
| Allow for a one shot timer event, rather than the normal repeating heartbeat type &lt;br /&gt;
| osTimerOnce(2, 10); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osVerifyScripts(); &lt;br /&gt;
| Check to see if all scripts in an object are created by the owner of the script calling the function. Return TRUE if they are, FALSE otherwise, to prevent insertion of alien scripts into an object &lt;br /&gt;
| if (!osVerifyScripts()) { llDie(); } &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osStopOtherAnimations(list animation_exceptions); &lt;br /&gt;
| Provide a method of stopping all animations on an avatar, except those defined in the list &lt;br /&gt;
| osStopOtherAnimations([&amp;quot;my_sitting_anim&amp;quot;]); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osPutScriptInLinkedSet(string name,integer linknum, integer starting_parm, integer running) &lt;br /&gt;
| Use this to propagate one script to ALL or part of linked set. &lt;br /&gt;
| Useful to have all objects in a linked set sharing a common behaviour &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osRezObject(string name, string description, integer permissionmask, list setPrimitiveObjectLikeList) will trigger the object_rez object as usual &lt;br /&gt;
| similar to llRezObject, but without the need of having a prim inside the inventory (which produced a lot of problems in deploying and in sl). Newly created object will have the same owner of current object where script is running. &lt;br /&gt;
| In case list is empty or position not specified, suitable defaults should apply like pos being 1 m higher in the z axis &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osGetOwnerName(); &lt;br /&gt;
| Provide a method of getting the owner name without having to use llKey2Name &lt;br /&gt;
| myName = osGetOwnerName(); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osXMPPOpen(string server, string username, string password, string resource); &lt;br /&gt;
| Open an XMPP session to a jabber or other XMPP server, returning a handle to be able to manipulate the connection. Incoming messages to be parsed through a xmpp_message(integer handle, string sender, string service, string message) event. Accounts would have to be set up manually by the scripter, or by some other method, to prevent scripted spamming of a server, and to allow users to set up gateways and other services if needed. &lt;br /&gt;
| handle = osXMPPOpen(&amp;quot;jabber.org&amp;quot;, &amp;quot;MyObject&amp;quot;, &amp;quot;MyPassword&amp;quot;, &amp;quot;OpenSim&amp;quot;); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list osXMPPGetRosta(integer handle); &lt;br /&gt;
| Get the rosta from the XMPP server, list in the strided form of [username, presence, resource]; &lt;br /&gt;
| list presence = osXMPPGetRosta(handle); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list osXMPPGetServices(integer handle); &lt;br /&gt;
| Get a list of available services from the XMPP Server. &lt;br /&gt;
| list services = osXMPPGetServices(handle); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osXMPPAdd(string username, string service) &lt;br /&gt;
| Add a username to the account rosta. Return boolean success or fail &lt;br /&gt;
| if (osXMPPAdd(&amp;quot;Test User&amp;quot;, &amp;quot;Yahoo&amp;quot;)) { ... } &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer oxXMPPDelete(string username) &lt;br /&gt;
| Remove a username from the account rosta. Return boolean success or fail &lt;br /&gt;
| if (osXMPPDelete(&amp;quot;Test User&amp;quot;)) { ... } &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osXMPPGetStatus(string username); &lt;br /&gt;
| Poll the server for the status of a specific username on the rosta - returns would be OFFLINE, BUSY, AWAY and ONLINE &lt;br /&gt;
| if (osXMPPGetStatus(&amp;quot;Test User&amp;quot;) &amp;amp;amp; ONLINE) { ... } &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osXMPPSendMessage(integer handle, string message, string target); &lt;br /&gt;
| Send a message via the open XMPP channel, to the specified target. Return boolean success values &lt;br /&gt;
| if (osXMPPSendMessage(handle, &amp;quot;Hello World&amp;quot;, osGetOwnerName()) { llOwnerSay(&amp;quot;Successfully sent message&amp;quot;); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osXMPPClose(integer handle); &lt;br /&gt;
| Close the XMPP session &lt;br /&gt;
| osXMPPClose(); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osRezObjectKey(key object,vector pos,vector vel,rotation rot, int param); &lt;br /&gt;
| Basically llGodLikeRezObject[http://lslwiki.net/lslwiki/wakka.php?wakka=llGodLikeRezObject] with the features of llRezObject[http://lslwiki.net/lslwiki/wakka.php?wakka=llRezObject] but for everyone to use. Calls object_rez. &lt;br /&gt;
| osRezObjectKey(object_key,llGetPos(),ZERO_VECTOR,llGetRot(),0); &lt;br /&gt;
| Tdub&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osRezFromURL(string url, vector pos, vector vel, rotation rot, integer param) - calls on_rez &lt;br /&gt;
| Fetch a fragment of xml from a web server and rez its contents in-world as in 'load-xml'. Off or intergrid object repositories, such as objects stored in SVN via websvn, CMS, etc. &lt;br /&gt;
| osRezFromURL(&amp;quot;http://my.objectstore.com/myawesomeprims.xml&amp;quot;, &amp;amp;lt;1, 1, 1&amp;amp;gt;, &amp;amp;lt;0, 0, 0&amp;amp;gt;, &amp;amp;lt;0, 0, 0&amp;amp;gt;, 0) &lt;br /&gt;
| Jimbo2120&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list osRunCustom(string function, list params) &lt;br /&gt;
| Allow scripts to call external custom routines that are grid-specific without modifying the set of LSL and OSL functions. &lt;br /&gt;
| list results = osRunCustom(&amp;quot;function1&amp;quot;, [...]) &lt;br /&gt;
| Ezekiel&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osSetScriptServer() &lt;br /&gt;
| Create a 'Server' prim that allows for extended scripting capabilities: more memory, higher bandwidth when communicating with external servers, probably some database connectivity, no artificial delays, can receive IMs, etc. Could be limited to one server per prim / parcel or per avatar, could be forced to remain in a fixed position. A server is important for residents that want to set up a virtual business. &lt;br /&gt;
| osSetScriptServer() &lt;br /&gt;
| Ezekiel&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osRemoteLoadScript(string url, string target) &lt;br /&gt;
| Load a source file in txt format from &amp;quot;URL&amp;quot; and compile it into script &amp;quot;target&amp;quot; in the inventory of the same prim. Requires permission of the object owner (RequestPermission). Returns boolean success value. Replaces an existing script with same name. This function would allow updates to scripted solutions that operate in any grid and sim worldwide, allowing the creator of the solution to distribute code fixes and implement new functions. Since the source code is distributed openly, it can be copied and modified by anyone. A function that would allow for secure code distribution, protecting copyrights and certificates, would also be very interesting but should be far more difficult to implement. &lt;br /&gt;
| integer updatestatus = osRemoteLoadScript(&amp;quot;http://www.xyz.com/updates/script1013.txt&amp;quot;, &amp;quot;betterscript&amp;quot; ) &lt;br /&gt;
| Ezekiel&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osSetCustomPrimitiveAttributes(list params) &lt;br /&gt;
| Set some custom persistent primitive attributes, the same way as llSetPrimitiveParams do. The attribute name has to be specified as a string, then the attribute type using a lSL constant. In the example, we set a &amp;quot;magnet&amp;quot; custom attribute as -0.5, supposing a customized physic engine handles this attribute to provide prim attraction. &lt;br /&gt;
| integer osSetCustomPrimitiveAttributes([&amp;quot;magnet&amp;quot;, TYPE_FLOAT, -0.5]) &lt;br /&gt;
| Grumly&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list osGetCustomPrimitiveAttributes(list paramNames) &lt;br /&gt;
| Return a list values of the specified attributes names, the same way as llGetPrimitiveParams do. &lt;br /&gt;
| list osGetCustomPrimitiveAttributes([&amp;quot;Magnetic&amp;quot;]) &lt;br /&gt;
| Grumly &lt;br /&gt;
&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osSyncUUID(key oldUUID, key newUUID); &lt;br /&gt;
| Allows to change the UUID of an avatar or item(requires permission from owner). &lt;br /&gt;
| Suppose a terminal in the LL-grid wants to communicate with an OS-Grid terminal. It can only send messages, if the UUID's of avatars match. An OS-Grid script can get the avatar's LL-UUID by calling the dataserver script. Then it calls osSyncUUID(llDetectedKey(0), keyFromHTTPRequest); . Now the two keys are equal, and avatar-avatar communication between grids can take place! &lt;br /&gt;
| Phrearch &lt;br /&gt;
&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osTeleport(string RegionName, int x, int y, int z); &lt;br /&gt;
| Teleports an avatar to a custom region &lt;br /&gt;
as&amp;amp;nbsp;: osTeleportAgent(key agentId, string regionName, vector position, vector lookAt); &lt;br /&gt;
&lt;br /&gt;
| (this is implemented now - edited April 2009 by Wordfromthe Wise) &lt;br /&gt;
| Phrearch&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osSetStatus(integer status, integer value); &lt;br /&gt;
| Improved verion of the LSL function llSetStatus. &lt;br /&gt;
| The function works basically the same way as llSetStatus, except that an extra flag is added named STATUS_PHYSICS_ROOT. When this flag is TRUE, physics would be enabled Only for the root prim in a linked set, while the other prims in the set would behave as phantom. This would be useful for bypassing the 32-prim physics limit for vehicles by using only the root prim as a collision mesh. &lt;br /&gt;
| Pesho&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| vector osGetBonePos(); &lt;br /&gt;
| When called from an Attachment, retrieves the position of the bone it is attached to, in Region Coordinates. &lt;br /&gt;
| When llGetPos() is called from an attachment, the vector returned is the one of the avatar center, whereas llGetLocalPos() returns the local offset from the bone it is attached to. It would be useful to know where the attachment's location really is in world space. &lt;br /&gt;
| Pesho&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osGetOSLLRelease(); &lt;br /&gt;
| When called return the actual release of OSSL running on the sim. &lt;br /&gt;
| if osGetOSSLRelease() &amp;amp;gt; 1.1 {llSay(0,&amp;quot;good&amp;quot;);} &lt;br /&gt;
| Sacha Magne&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| List osGetServerLib(); &lt;br /&gt;
| When called return a list of all the additional libraries loaded on the server. it will avoid any scripts using a specific library to crash in case of missing libs. &lt;br /&gt;
| List lib=osGetServerLib(); &lt;br /&gt;
| Sacha Magne&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osSetAttachmentPoint(integer attachment); &lt;br /&gt;
| When called from an Attachment sets the default attachment point to attachment value. &lt;br /&gt;
| osSetAttachmentPoint(ATTACH_HUD_BOTTOM_RIGHT); &lt;br /&gt;
| Peter&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osMySQLQuery(string query); &lt;br /&gt;
| Used to get informations out of a sql database. Works together with osMySQLConnect(), osMySQLSelectDatabase() and osMySQLClose(). &lt;br /&gt;
| osMySQLQuery(&amp;quot;Select name FROM user LIMIT 0,1;&amp;quot;); &lt;br /&gt;
| Peter&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osGetGridName(); &lt;br /&gt;
| When called it return the hostname of the grid server. Useful to find out what grid you are on. &lt;br /&gt;
| string gridHostname = osGetGridHostname(); &lt;br /&gt;
| Patnad&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
                   Already implemented. See [[osName2Key]]&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| key osName2Key(string avatarname); &lt;br /&gt;
| When called it return the key associated with a Avatar Name. &lt;br /&gt;
| key avKey = osName2Key(&amp;quot;avatar name&amp;quot;); &lt;br /&gt;
| Patnad&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| vector osParcelCenterpoint(vector pos); &lt;br /&gt;
| When called it return the vector that represent the center point of the current parcel. Same height as the object running the script but centerpoint for x,y. &lt;br /&gt;
| vector parcel_center = osParcelCenterpoint(llGetPos()); &lt;br /&gt;
| Patnad&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osSetMapDestination(integer mode, string simname, vector position, vector lookat); &lt;br /&gt;
| Sets a new &amp;quot;beacon&amp;quot; (red pole) without opening the worldmap: mode is for 1 (simname is a standard region name) or 0 (simname is a SLURL). If the code can handle standard sim names and SLURL(s) at the same time, the &amp;quot;mode&amp;quot; flag can be left behind. &lt;br /&gt;
| integer error = osSetMapDestination(TRUE, &amp;quot;cyberlandia&amp;quot;, &amp;amp;lt;128.0, 128.0, 0.0&amp;amp;gt;, ZERO_VECTOR); &lt;br /&gt;
&amp;amp;nbsp;If error is FALSE then no errors have occurred setting up the new beacon. &amp;amp;nbsp;Errors can arise using unknown simnames/SLURL(s), out of ranges vector coords and so on (nearly the same as llSetMapDestination). &lt;br /&gt;
&lt;br /&gt;
| Elwe Ewing&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osTeleportAgentPerm(key agentId, string regionName, vector position, vector lookAt); &lt;br /&gt;
osTeleportAgentPerm(key agentId, vector position, vector lookAt); &lt;br /&gt;
&lt;br /&gt;
| Works similarly as the two implemented osTeleportAgent but requires (at least the first time) the PERMISSION_TELEPORT flag set (via llRequestPermissions(key id, PERMISSION_TELEPORT); which should be implemented) and can be used by everyone (or restricted to a member of the group wich the region is deed, maybe with a new &amp;quot;Restrict teleports&amp;quot; Estate flag). &lt;br /&gt;
| &amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
 // requests permission to Teleport then do it&lt;br /&gt;
 &lt;br /&gt;
 key  avie = NULL_KEY;&lt;br /&gt;
 &lt;br /&gt;
 default&lt;br /&gt;
 {&lt;br /&gt;
   state_entry()&lt;br /&gt;
   {&lt;br /&gt;
       llSay(0, &amp;quot;Touch to be teleported&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   run_time_permissions(integer vBitPermissions)&lt;br /&gt;
   {&lt;br /&gt;
       if(PERMISSION_TELEPORT &amp;amp;amp; vBitPermissions){&lt;br /&gt;
           osTeleportAgentPerm(avie, &amp;amp;lt;128.0,128.0,0.0&amp;amp;gt;,&lt;br /&gt;
 ZERO_VECTOR);&lt;br /&gt;
       } else {&lt;br /&gt;
           llSay(0, &amp;quot;You deny teleport permission&amp;quot;);&lt;br /&gt;
       }&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   touch_start(integer num_detected)&lt;br /&gt;
   {&lt;br /&gt;
       avie = llDetectedKey(0);&lt;br /&gt;
 &lt;br /&gt;
       llRequestPermissions(avie,&lt;br /&gt;
           PERMISSION_TELEPORT &amp;amp;#124;&lt;br /&gt;
           PERMISSION_TRIGGER_ANIMATION &amp;amp;#124;&lt;br /&gt;
           0);&lt;br /&gt;
       integer perm = llGetPermissions();&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
| Elwe Ewing&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osGetSimulatorStatus(string Simulator) &lt;br /&gt;
| Extended / Enhanced version of llGetSimulatorData. &lt;br /&gt;
Purpose: When an avatar is Teleported with osTeleportAgent, there is no check to see if a given simulator is available. If it's down, Agent is Teleported to NULL resulting in Agent being fragged and viewer broken, requiring a relog. This would be especially useful for HyperGrid Teleporting. Returns: integer &amp;quot;0 = DOWN&amp;quot;, &amp;quot;1 = UP&amp;quot;, &amp;quot;2 = UNKNOWN&amp;quot; Security: Would require some form of Throttle to prevent recurring requests of destination Simulator. Command: osGetSimulatorStatus(string Simulator) Where Simulator = &amp;quot;RegionName&amp;quot;, &amp;quot;IPAddress:PortNum&amp;quot;, &amp;quot;HostName:PortNum&amp;quot; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
 // CHecks if simulator is online before teleporting agent -kizmut&lt;br /&gt;
 &lt;br /&gt;
 string destination = &amp;quot;Wright Plaza&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 default&lt;br /&gt;
 {&lt;br /&gt;
   state_entry()&lt;br /&gt;
   {&lt;br /&gt;
       llSay(0, &amp;quot;Touch to be teleported to: &amp;quot;+destination);&lt;br /&gt;
   }&lt;br /&gt;
   touch_start(integer num_detected)&lt;br /&gt;
   {&lt;br /&gt;
       llSay(0,llDetectedName(0)+&amp;quot; requesting teleport to: &amp;quot;+destination);&lt;br /&gt;
       integer sim_stat = osGetSimulatorStatus(destination);&lt;br /&gt;
       if (sim_stat == 2) {&lt;br /&gt;
           llSay(0, &amp;quot;Could not teleport to &amp;quot;+destination+&amp;quot;: Region status unknown.&amp;quot;);&lt;br /&gt;
       } &lt;br /&gt;
       else if (sim_stat) {&lt;br /&gt;
           osTeleportAgent(llDetectedKey(0),destination,ZERO_VECTOR);&lt;br /&gt;
       }&lt;br /&gt;
       else {&lt;br /&gt;
           llSay(0, &amp;quot;Could not teleport to &amp;quot;+destination+&amp;quot;: Region is down&amp;quot;);&lt;br /&gt;
       }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
| WhiteStar Magic&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osTeleportOwner(string regionName, vector position, vector lookAt); &lt;br /&gt;
| Works similarly as osTeleportAgent but could only teleport the owner of the script itself. Would be very useful for HUD and would not require any authorization. &lt;br /&gt;
| integer error=osTeleportOwner(&amp;quot;Snoopies&amp;quot;,&amp;amp;lt;100,25,25&amp;amp;gt;,ZERO_VECTOR); &lt;br /&gt;
| Agnes Chalet &lt;br /&gt;
&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
                   Already implemented. See [[osName2Key]]&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osName2Key(string name); &lt;br /&gt;
| A command which gives the UUID of an agent. Would work in the same way as llKey2Name, but in reverse. (Linden Lab may implement this first) &lt;br /&gt;
| osName2Key(&amp;quot;Bob Smith&amp;quot;); &lt;br /&gt;
| Drava&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osHyperGrid(); &lt;br /&gt;
| Detects whether or not the region the person is in is Hypergrid enabled. Could be expanded to any region in the current grid. &lt;br /&gt;
| osHyperGrid() == TRUE &lt;br /&gt;
| Drava&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osTurnAvatar(rotation rot); &lt;br /&gt;
| Turns an avatar about the vertical axis to rotation rot relative to the grid rotation. &lt;br /&gt;
| osTurnAvatar(newrot); // turns the avatar to the new rotation specified by newrot. &lt;br /&gt;
| Valradica&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osRezLink(string inventory, vector position, vector velocity, rotation rot, integer param) ;&lt;br /&gt;
| osRezLink would work just like llRezObject but instead of a separate object it would be directly part of the original object's link system. This would be very useful in HUDs and attachments.&lt;br /&gt;
| osRezLink(&amp;quot;myobject&amp;quot;,llGetPos()+&amp;lt;0.0,0.0,0.5&amp;gt;,ZERO_VECTOR,ZERO_ROTATION,10);&lt;br /&gt;
| Nihlaeth&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osSaveObject();&lt;br /&gt;
| osSaveObject would be used in attachments and HUDs to save changes made while the object was worn.&lt;br /&gt;
| osSaveObject();&lt;br /&gt;
| Nihlaeth&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osPauze(integer);&lt;br /&gt;
| Adds an timer-interruptible wait state. Where sleep holds the entire script, this would function more like a non-operation for the user-set duration. For this to be a real addition, osPauze(integer) should be interruptible by any event.&lt;br /&gt;
| osPauze(5);&lt;br /&gt;
| [[User:Fritigern]]&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osDieOnAttachment();&lt;br /&gt;
| osDieOnAttachment()plays the same role as llDie() but on any attachment. Useful in HUDs instead of using the trick of resizing and hiding unwanted primitives, this function simply kills them. This function could be used with the already proposed functions to Rez Directly on Attachments&lt;br /&gt;
| osDieOnAttachment();&lt;br /&gt;
| Hussein Bakri&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  osGetTextureLocationTouch(integer number,list UVParameters);&lt;br /&gt;
| osGetTextureLocationTouch() plays the role of the following LSL functions: vector llDetectedTouchPos(integer number) [returns the position touched by the touch event (number) in region coordinates] in other words it tell which touch to examine like the family of llDetected* functions. The other function that is part of the parameters is  vector llDetectedTouchFace(integer number) [returns the face of the prim touched by the touch event number] Another function in the UVParameters would be: vector llDetectedTouchUV(integer number)[returns the position touched by touch event number as texture coordinates in the form of &amp;lt;u,v,0&amp;gt; ]&lt;br /&gt;
vector llDetectedTouchST(integer number) return the surface coordinates of the touch event number&lt;br /&gt;
llDetectedTouchNormal and llDetectedTouchBinormal get the Normal and binormal vector positions.&lt;br /&gt;
The function will look like llGetPrimParams(). Usage: every texture becomes a user interface, useful in maps also.&lt;br /&gt;
| osGetTextureLocationTouch(integer number,list UVParameters);&lt;br /&gt;
UVParameters:: [PRIM_TOUCH_POSITION, &amp;lt;x,y,z&amp;gt;, PRIM_TOUCH_FACE,x, PRIM_TEXTURE_COORDINATES,&amp;lt;x,y,0&amp;gt;,PRIM_SURFACE_COORDINATES,&amp;lt;x,y,0&amp;gt;,PRIM_TOUCH_SURFACE_NORMAL,x,PRIM_TOUCH_SURFACE_BINORMAL,x]&lt;br /&gt;
| Hussein Bakri&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osBreakLinkOnAttachment(integer alternativeAttachmentPoint);&lt;br /&gt;
| osBreakLinkOnAttachment(integer alternativeAttachmentPoint) plays the same role as llBreakLink() but for attachments only. Not only that when it Breaks the link of a prim and it set the prim to another attachment point. Require attachment permition. Useful to break a link in HUD  and create a separate HUD from the initial one. It will override the functionality of osDieAttachement() when alternativeAttachmentPoint = 0 meaning it kill the object.&lt;br /&gt;
| osBreakLinkOnAttachment(integer alternativeAttachmentPoint);&lt;br /&gt;
| Hussein Bakri&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= See Also =&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 Standards]]&lt;br /&gt;
&lt;br /&gt;
[[Category:OSSL]]&lt;br /&gt;
[[Category:Users]]&lt;br /&gt;
[[Category:Support]]&lt;br /&gt;
[[Category:Getting Started]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Todo]]&lt;/div&gt;</summary>
		<author><name>Mewtwo0641</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OSSL_Proposals</id>
		<title>OSSL Proposals</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OSSL_Proposals"/>
				<updated>2015-03-13T18:46:27Z</updated>
		
		<summary type="html">&lt;p&gt;Mewtwo0641: /* OSSL Proposal Table */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Quicklinks}}&lt;br /&gt;
{{proposal}}&lt;br /&gt;
{{content}}&lt;br /&gt;
&lt;br /&gt;
= What is OSSL? =&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This is a page dedicated to OpenSim's very own home brew custom scripting language Known as &amp;quot;'''O'''pen '''S'''im '''S'''cripting '''L'''anguage&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;'''Please see [[OSSL Standards]] for proposed naming schema'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Please post your osFunction along with a brief description of what it would be for, or do and an example of it. &lt;br /&gt;
* Make sure it begins with os NOT ll.&lt;br /&gt;
* And remember, almost anything within reason can be posted here as an idea, who knows, maybe a variation of your request can be possible.&lt;br /&gt;
* If a function could implemented in standard LSL, there is no reason to make an OS function. LSL code and function code executes at the same speed in OpenSimulator.&lt;br /&gt;
* Post your proposal to the opensim-dev mailing list so that it can be discussed to see if there is any interest. Please indicate if you are willing to implement it yourself - such proposals have a much better chance of succeeding!&lt;br /&gt;
&lt;br /&gt;
== OSSL Proposal Table ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;width:100%;border:1px solid #000000;border-collapse: collapse; white-space:normal;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#99CCFF;font-size:6pt;font-weight:bold;border-bottom:1px solid;&amp;quot; align=&amp;quot;center&amp;quot; valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| osFunction &lt;br /&gt;
| Description &lt;br /&gt;
| Example Usage &lt;br /&gt;
| Signed&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list osGetObjectNameDetails(list names, list params);&lt;br /&gt;
&lt;br /&gt;
list osGetObjectNameDetails(list names, float range, list params);&lt;br /&gt;
| Would work similarly to llGetObjectDetails() but has the advantage of specifying for an object's name (or list of names) instead of by key. If more than one name match is found then the return list will have those matches (or groups of matches if more than one parameter is supplied) sorted in order from nearest to furthest from the prim calling osGetObjectNameDetails. By default this would scan the entire region but optionally a range can be specified to only search within a certain radius similar to llSensor().&lt;br /&gt;
&lt;br /&gt;
This has potential, for most single item situations at least, eliminate the need for an llSensor() call and also eliminate the need for a sensor event thus reducing code complexity and make for very easy and very quick data collection to be further processed upon.&lt;br /&gt;
&lt;br /&gt;
Note: Not sure if specifying a range in the case of supplying a key would make much sense but I suppose someone out there could find it useful?&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
list objDetails;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {	&lt;br /&gt;
		//Example 1:&lt;br /&gt;
		//For this example assume this prim is located at &amp;lt;128, 125, 30&amp;gt; and we have two objects named 'Chair'.&lt;br /&gt;
		//'Chair' #1 is located at &amp;lt;128, 128, 30&amp;gt; and owned by avatar UUID 5f9c7c6c-f2c9-4196-8d8d-07cdeb71821a&lt;br /&gt;
		//'Chair' #2 is located at &amp;lt;128, 130, 30&amp;gt; and owned by avatar UUID 1c612fb2-748c-4a1a-ad57-27f488210c06&lt;br /&gt;
		&lt;br /&gt;
		objDetails = osGetObjectNameDetails([&amp;quot;Chair&amp;quot;], OBJECT_NAME | OBJECT_POS | OBJECT_OWNER);&lt;br /&gt;
		&lt;br /&gt;
		llOwnerSay(llDumpList2String(objDetails, &amp;quot;, &amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		//llOwnerSay() output should be: Chair, &amp;lt;128, 128, 30&amp;gt;, 5f9c7c6c-f2c9-4196-8d8d-07cdeb71821a, Chair, &amp;lt;128, 130, 30&amp;gt;, 1c612fb2-748c-4a1a-ad57-27f488210c06&lt;br /&gt;
		&lt;br /&gt;
		//------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
		&lt;br /&gt;
		//Example 2:&lt;br /&gt;
		//For this example assume everything stays the same as in Example 1 except that we're specifying a range.&lt;br /&gt;
		&lt;br /&gt;
		objDetails = osGetObjectNameDetails([&amp;quot;Chair&amp;quot;], 5.0, OBJECT_NAME | OBJECT_POS | OBJECT_OWNER);&lt;br /&gt;
		&lt;br /&gt;
		llOwnerSay(llDumpList2String(objDetails, &amp;quot;, &amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		//llOwnerSay() output should be: Chair, &amp;lt;128, 128, 30&amp;gt;, 5f9c7c6c-f2c9-4196-8d8d-07cdeb71821a&lt;br /&gt;
		&lt;br /&gt;
		//------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
		&lt;br /&gt;
		//Example 3:&lt;br /&gt;
		//For this example assume this prim is located at &amp;lt;128, 125, 30&amp;gt; and we have two objects: 'Chair 1' and 'Chair 2'.&lt;br /&gt;
		//'Chair 1' is located at &amp;lt;128, 128, 30&amp;gt; and owned by avatar UUID 5f9c7c6c-f2c9-4196-8d8d-07cdeb71821a&lt;br /&gt;
		//'Chair 2' is located at &amp;lt;128, 130, 30&amp;gt; and owned by avatar UUID 1c612fb2-748c-4a1a-ad57-27f488210c06&lt;br /&gt;
		&lt;br /&gt;
		objDetails = osGetObjectNameDetails([&amp;quot;Chair 1&amp;quot;, &amp;quot;Chair 2&amp;quot;], OBJECT_NAME | OBJECT_POS | OBJECT_OWNER);&lt;br /&gt;
		&lt;br /&gt;
		llOwnerSay(llDumpList2String(objDetails, &amp;quot;, &amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		//llOwnerSay() output should be: Chair 1, &amp;lt;128, 128, 30&amp;gt;, 5f9c7c6c-f2c9-4196-8d8d-07cdeb71821a, Chair 2, &amp;lt;128, 130, 30&amp;gt;, 1c612fb2-748c-4a1a-ad57-27f488210c06&lt;br /&gt;
		&lt;br /&gt;
		//------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
		&lt;br /&gt;
		//Example 4:&lt;br /&gt;
		//For this example assume everything stays the same as in Example 3 except that we're specifying a range.&lt;br /&gt;
		&lt;br /&gt;
		objDetails = osGetObjectNameDetails([&amp;quot;Chair 1&amp;quot;, &amp;quot;Chair 2&amp;quot;], 5.0, OBJECT_NAME | OBJECT_POS | OBJECT_OWNER);&lt;br /&gt;
		&lt;br /&gt;
		llOwnerSay(llDumpList2String(objDetails, &amp;quot;, &amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		//llOwnerSay() output should be: Chair 1, &amp;lt;128, 128, 30&amp;gt;, 5f9c7c6c-f2c9-4196-8d8d-07cdeb71821a&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
| mewtwo0641&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| key osSetHTTPURL(string url);&lt;br /&gt;
| Sets the prim to a private HTTP:// url for use by this script. The http_request() event would be&lt;br /&gt;
triggered &amp;amp; the prim would serve as a &amp;quot;prim-server&amp;quot; for the private HTTP:// url. Also Returns a key that is the handle used for identifying the result in the http_request event.&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
 string private_url = &amp;quot;http://thisprivatedomain.com/index.php&amp;quot;&lt;br /&gt;
 default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
    osSetHTTPURL(private_url);&lt;br /&gt;
    }&lt;br /&gt;
    http_request(key request_id, string method, string body)&lt;br /&gt;
    {&lt;br /&gt;
    if(method == &amp;quot;POST&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
    osHTTPResponse(request_id,200,&amp;quot;Your $_POST was successful&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    else if(method == &amp;quot;GET&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
    osHTTPResponse(request_id,200,&amp;quot;Wait for the server to handle your request&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
| Apollo Juez&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list osGetRegionAgentKeys(); &lt;br /&gt;
| C# Code: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
        public LSL_List osGetRegionAgentKeys()&lt;br /&gt;
       {&lt;br /&gt;
           CheckThreatLevel(ThreatLevel.None, &amp;quot;osGetRegionAgentKeys&amp;quot;);&lt;br /&gt;
           LSL_List result = new LSL_List();&lt;br /&gt;
           foreach (ScenePresence avatar in World.GetAvatars())&lt;br /&gt;
           {&lt;br /&gt;
               result.Add(avatar.UUID);&lt;br /&gt;
           }&lt;br /&gt;
           return result;&lt;br /&gt;
       }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Returns a list of keys for every agent in the region &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
list keys=osGetRegionAgentKeys(); &lt;br /&gt;
integer i;&lt;br /&gt;
integer l=llGetListLength(keys); &lt;br /&gt;
string names; for(i=0;i&amp;amp;lt;l;i++) &lt;br /&gt;
   { key id=llList2Key(keys,i); &lt;br /&gt;
      string add=llKey2Name(id); &lt;br /&gt;
      integer dist=llVecDist(llGetPos(),llList2Vector(llGetObjectDetails(id,[OBJECT_POS]),0)));&lt;br /&gt;
      add+=&amp;quot;[&amp;quot;+(string)dist+&amp;quot;]\n&amp;quot;; &lt;br /&gt;
      names+=add;&lt;br /&gt;
   } llSetText(names,&amp;amp;lt;1,1,1&amp;amp;gt;,1.0); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
| Joshua Driver&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [NEW] various os functions including osDerezObject(), osMessageAgentAttachment(), ... &lt;br /&gt;
| see [[User:Athlon_Maurer]] for full source code &lt;br /&gt;
| tested on local opensimulator 0.6.9 (some of them doesnt seem to work on 0.7.x) &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osBin(string char); &lt;br /&gt;
| To convert a char into its binary value. Will only convert 1 char at a time. &lt;br /&gt;
| string bin_a = osBin(&amp;quot;A&amp;quot;); // bin_a = &amp;quot;01000001&amp;quot;; &lt;br /&gt;
| Athlon Maurer (please send me a notecard into secondlife, if that are too much ideas xD, this hint can be deleted by an opensimulator admin, if neccesary xD)&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osHex(integer number); &lt;br /&gt;
| To convert a number into its hexadecimal value. &lt;br /&gt;
| string str_ff = osHex(255); // str_ff = &amp;quot;FF&amp;quot;; &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osAsc(string char); &lt;br /&gt;
| To convert a char into its ascii index. Will only convert 1 char at a time. &lt;br /&gt;
| integer asc_a = osAsc(&amp;quot;A&amp;quot;); // asc_a = 65; &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osScanRegionRemove(); &lt;br /&gt;
| Remove an osScanRegionRepeat(). [ nearly the same as llSensorRemove() ] &lt;br /&gt;
| osScanRegionRemove(); &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osScanRegion(string name, key id, integer type); &lt;br /&gt;
| Scan the whole region where the script task object is in regardless where it is positioned. Triggers sensor() or no_sensor(). &lt;br /&gt;
| osScanRegion(&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, AGENT); &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osScanRegionRepeat(string name, key id, integer type, float rate); &lt;br /&gt;
| Scan the whole region where the script task object is in regardless where it is positioned with rate. Triggers sensor() or no_sensor(). &lt;br /&gt;
| osScanRegionRepeat(&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, AGENT, 15.0); &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| key osGetRegionMapTexture(string RegionName) &lt;br /&gt;
| return the map texture uuid for the region named by RegionName. &lt;br /&gt;
| llSetTexture(osGetRegionMapTexture(&amp;quot;OpenSimulator Test&amp;quot;), ALL_SIDES); &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
create a php file which is public&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// mapquery.php by Athlon Maurer (SL, OL, OS)&lt;br /&gt;
	//&lt;br /&gt;
	// hello, ive just started to learn php/mysql and this is one of my first&lt;br /&gt;
	// scripts for opensim. this script returns the texture uuid for a given&lt;br /&gt;
	// region by calling: mapquery.php?region=REGIONNAME&lt;br /&gt;
	// if a region has been found, it returns that regions map texture uuid, &lt;br /&gt;
	// otherwise it returns a null key uuid&lt;br /&gt;
	// mysql connection info is here, please make this more safe&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// region name (do not change this)&lt;br /&gt;
	$region = htmlspecialchars($_GET['region']);&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// default uuid (do not change this)&lt;br /&gt;
	$uuid = '00000000-0000-0000-0000-000000000000';&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// your mysql host name (change this)&lt;br /&gt;
	$dbhost = 'localhost';&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// your mysql user name (change this)&lt;br /&gt;
	$dbuser = 'root';&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// your mysql user password (change this)&lt;br /&gt;
	$dbpass = '';&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// your mysql opensim database (change this)&lt;br /&gt;
	$dbname = 'opensim';&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// try to connect&lt;br /&gt;
	if ($conn = mysql_connect($dbhost, $dbuser, $dbpass))&lt;br /&gt;
	{&lt;br /&gt;
		// try to select&lt;br /&gt;
		if ($select = mysql_select_db($dbname, $conn))&lt;br /&gt;
		{&lt;br /&gt;
			$sql = 'SELECT regionName, regionMapTexture FROM regions';&lt;br /&gt;
			$result = mysql_query($sql);&lt;br /&gt;
			while ($row = mysql_fetch_array($result, MYSQL_ASSOC))&lt;br /&gt;
			{&lt;br /&gt;
				if ($row['regionName'] == $region)&lt;br /&gt;
				{&lt;br /&gt;
					$uuid = $row['regionMapTexture'];&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			// free result&lt;br /&gt;
			mysql_free_result($result);&lt;br /&gt;
		}&lt;br /&gt;
		// close connection&lt;br /&gt;
		mysql_close($conn);&lt;br /&gt;
	}&lt;br /&gt;
	// output&lt;br /&gt;
	echo $uuid;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;?&amp;gt;&lt;br /&gt;
then llHTTPRequest(&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| Athlon Maurer (This function is available as of November 12, 2009)&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list osGetLinkPrimitiveParams(integer link, list params); &lt;br /&gt;
| Function llSetLinkPrimitiveParams() does exist, but no chance to get params from a prim in a linkset, like llGetPrimitiveParams() and llSetPrimitiveParams(). &lt;br /&gt;
| list linkparams = osGetLinkPrimitiveParams([PRIM_TYPE, PRIM_TEXTURE, ...]); &lt;br /&gt;
| Athlon Maurer (This function is available as of August 09, 2009)&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osDerezObject(key object) &lt;br /&gt;
| Deletes an InWorld-Object specified by object as uuid. Only successful if the object the script is attached to and the object which should be derezzed is owned by the same owner&amp;amp;nbsp;:). Useful if the object to be deleted should be unscripted. &lt;br /&gt;
| osDerezObject(&amp;quot;key_of_object&amp;quot;); &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| int osRestartRegion() &lt;br /&gt;
| Restarts the region the script is currently in. The script this is run in has to be owned by the master avatar for that region. Returns 1 if the region is restarting, 0 on failure. &lt;br /&gt;
| osRestartRegion(); &lt;br /&gt;
| gryc (Implemented by AFrisby)&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| int osWebTexture() &lt;br /&gt;
| Sets the texture from a web-url &lt;br /&gt;
| osWebTexture(string url,integer maptype); &lt;br /&gt;
| AFrisby?&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osGroupAdd(key, string Role) &lt;br /&gt;
| Adds user to a group with given role, default role Everyone. Returns 1 if successful 0 if fail. &lt;br /&gt;
| osGroupAdd(87f6e6a0-d884-11dc-95ff-0800200c9a66, &amp;quot;Officer&amp;quot;) &lt;br /&gt;
| Nitrus Nori&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| int osShutdownRegion() &lt;br /&gt;
| Shuts down the region the script is currently in. The script this is run in has to be owned by the master avatar for that region. Returns 1 if the region is going down, 0 on failure. &lt;br /&gt;
| osShutdownRegion(); &lt;br /&gt;
| gryc&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osAttachmentSay(integer channel, string msg) &lt;br /&gt;
| Provide a secure, low lag method of communicating between attachments over the chat channels by only sending messages to objects attached to the same avatar. Would fail (or not be heard) if in a non-attached object. &lt;br /&gt;
| osAttachmentSay(-20, &amp;quot;detatch&amp;quot;); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osMessageSecure(string message_key, string str, integer num, key id);&amp;lt;br /&amp;gt;secure_message(string message_key, string str, integer num, key id); &lt;br /&gt;
| Provide a method of sending secure, salt encripted messages sim wide. Messages would only be able to be received by scripts with the matching key in the secure_message method. &lt;br /&gt;
| osMessageSecure(&amp;quot;myPassPhrase&amp;quot;, &amp;quot;Hello World&amp;quot;, 0, NULL_KEY); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osSetText( vector color, string text [,vector color, string text]); &lt;br /&gt;
| Allow setting of multiple colors on the prim text &lt;br /&gt;
| osSetText(&amp;amp;lt;1,0,0&amp;amp;gt;,&amp;quot;Red&amp;quot;, &amp;amp;lt;0,1,0&amp;amp;gt;, &amp;quot;\nGreen&amp;quot;, &amp;amp;lt;0,0,1&amp;amp;gt;, &amp;quot;\nBlue&amp;quot;); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osSensor &lt;br /&gt;
| Gets ALL the objects in the specified range not just the first 16 &lt;br /&gt;
| (same as standard) &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list lst=osDetectObjectsInSim(key id) &lt;br /&gt;
| given an Agent Key, provide a list of ALL object owned by that agent &lt;br /&gt;
| osDetectObjectsInSim(key id) returning a strided list of [ name, &amp;amp;lt;pos&amp;amp;gt; ] &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer=osDialog([ title, label1, type1, len1, label2, type2, len2].... &lt;br /&gt;
| given title and a listing of fields, builds up a real form where to put structured checked data &lt;br /&gt;
| will return a [ value1, value2, valuen ] corresponding to fields read. Type might be something like (string, text (multiline), integer, float, currency(decimals), options(combobox) &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| key id=osMakeTextureText(string name,integer width, integer height,[posx1,posy1,font1,color1,size1,text1,posx2,posy2,font2,color2,size2,text2....]) &lt;br /&gt;
| allow for producing a texture on the fly with desired Font content from a selected font selection. Width, Height in pixels 1024x512 to control how big will be the texture &lt;br /&gt;
| will generate a texture with defined text. (Allow some support for at least ISO-8859-1) texture will be created in the object inventory. posx, posy in the range 0-1 to be pixel independent &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osMakeNotecard(string name, [ line1, line2, line3, ...]) &lt;br /&gt;
| allow creation of new notecards in current object repository &lt;br /&gt;
| generate a new asset id useful for storing modified configuration &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer handler=osReadNotecardKey(string notecard, string key) &lt;br /&gt;
| allows reading notecards (through dataserver) in format key=value in convenient and efficient way &lt;br /&gt;
| ... &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osWriteNotecardKey(string notecard, string key,string value) &lt;br /&gt;
| allows WRITING notecards in format key=value in convenient and efficient way. Might be optimized having a fixed record length &amp;quot;file&amp;quot; so to avoid rewriting of the entire notecard &lt;br /&gt;
| ... &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer handle=osXMLParser(string xml) &lt;br /&gt;
| will activate a listener xmlparser(integer handler,string parent, string field, string value) &lt;br /&gt;
| to easily parse xml without writing php external code &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osReturnObjects(key owner, integer type); &lt;br /&gt;
| Provide a scriptable method of returning objects from a sim. type would be OBJECT_SCRIPTED, OBJECT_PASSIVE or OBJECT_ALL. Would return a binary Success/Fail, and work inline with land permissions for the script owner. &lt;br /&gt;
| osReturnObjects( target, OBJECT_ALL); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osReturnItem(key item); &lt;br /&gt;
| Provide a scriptable method of returning individual objects from a sim. Would return a binary Success/Fail, and work inline with land permissions for the script owner. &lt;br /&gt;
| osReturnItem(uuid); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osSetTimerEvent(integer timer, float rate); &amp;lt;br /&amp;gt; (event) timer(integer timer_num) &lt;br /&gt;
| Support for multiple timers in a script. &lt;br /&gt;
| osSetTimerEvent(2, 0.5); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osTimerOnce(integer timer, float rate); &lt;br /&gt;
| Allow for a one shot timer event, rather than the normal repeating heartbeat type &lt;br /&gt;
| osTimerOnce(2, 10); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osVerifyScripts(); &lt;br /&gt;
| Check to see if all scripts in an object are created by the owner of the script calling the function. Return TRUE if they are, FALSE otherwise, to prevent insertion of alien scripts into an object &lt;br /&gt;
| if (!osVerifyScripts()) { llDie(); } &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osStopOtherAnimations(list animation_exceptions); &lt;br /&gt;
| Provide a method of stopping all animations on an avatar, except those defined in the list &lt;br /&gt;
| osStopOtherAnimations([&amp;quot;my_sitting_anim&amp;quot;]); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osPutScriptInLinkedSet(string name,integer linknum, integer starting_parm, integer running) &lt;br /&gt;
| Use this to propagate one script to ALL or part of linked set. &lt;br /&gt;
| Useful to have all objects in a linked set sharing a common behaviour &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osRezObject(string name, string description, integer permissionmask, list setPrimitiveObjectLikeList) will trigger the object_rez object as usual &lt;br /&gt;
| similar to llRezObject, but without the need of having a prim inside the inventory (which produced a lot of problems in deploying and in sl). Newly created object will have the same owner of current object where script is running. &lt;br /&gt;
| In case list is empty or position not specified, suitable defaults should apply like pos being 1 m higher in the z axis &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osGetOwnerName(); &lt;br /&gt;
| Provide a method of getting the owner name without having to use llKey2Name &lt;br /&gt;
| myName = osGetOwnerName(); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osXMPPOpen(string server, string username, string password, string resource); &lt;br /&gt;
| Open an XMPP session to a jabber or other XMPP server, returning a handle to be able to manipulate the connection. Incoming messages to be parsed through a xmpp_message(integer handle, string sender, string service, string message) event. Accounts would have to be set up manually by the scripter, or by some other method, to prevent scripted spamming of a server, and to allow users to set up gateways and other services if needed. &lt;br /&gt;
| handle = osXMPPOpen(&amp;quot;jabber.org&amp;quot;, &amp;quot;MyObject&amp;quot;, &amp;quot;MyPassword&amp;quot;, &amp;quot;OpenSim&amp;quot;); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list osXMPPGetRosta(integer handle); &lt;br /&gt;
| Get the rosta from the XMPP server, list in the strided form of [username, presence, resource]; &lt;br /&gt;
| list presence = osXMPPGetRosta(handle); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list osXMPPGetServices(integer handle); &lt;br /&gt;
| Get a list of available services from the XMPP Server. &lt;br /&gt;
| list services = osXMPPGetServices(handle); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osXMPPAdd(string username, string service) &lt;br /&gt;
| Add a username to the account rosta. Return boolean success or fail &lt;br /&gt;
| if (osXMPPAdd(&amp;quot;Test User&amp;quot;, &amp;quot;Yahoo&amp;quot;)) { ... } &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer oxXMPPDelete(string username) &lt;br /&gt;
| Remove a username from the account rosta. Return boolean success or fail &lt;br /&gt;
| if (osXMPPDelete(&amp;quot;Test User&amp;quot;)) { ... } &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osXMPPGetStatus(string username); &lt;br /&gt;
| Poll the server for the status of a specific username on the rosta - returns would be OFFLINE, BUSY, AWAY and ONLINE &lt;br /&gt;
| if (osXMPPGetStatus(&amp;quot;Test User&amp;quot;) &amp;amp;amp; ONLINE) { ... } &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osXMPPSendMessage(integer handle, string message, string target); &lt;br /&gt;
| Send a message via the open XMPP channel, to the specified target. Return boolean success values &lt;br /&gt;
| if (osXMPPSendMessage(handle, &amp;quot;Hello World&amp;quot;, osGetOwnerName()) { llOwnerSay(&amp;quot;Successfully sent message&amp;quot;); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osXMPPClose(integer handle); &lt;br /&gt;
| Close the XMPP session &lt;br /&gt;
| osXMPPClose(); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osRezObjectKey(key object,vector pos,vector vel,rotation rot, int param); &lt;br /&gt;
| Basically llGodLikeRezObject[http://lslwiki.net/lslwiki/wakka.php?wakka=llGodLikeRezObject] with the features of llRezObject[http://lslwiki.net/lslwiki/wakka.php?wakka=llRezObject] but for everyone to use. Calls object_rez. &lt;br /&gt;
| osRezObjectKey(object_key,llGetPos(),ZERO_VECTOR,llGetRot(),0); &lt;br /&gt;
| Tdub&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osRezFromURL(string url, vector pos, vector vel, rotation rot, integer param) - calls on_rez &lt;br /&gt;
| Fetch a fragment of xml from a web server and rez its contents in-world as in 'load-xml'. Off or intergrid object repositories, such as objects stored in SVN via websvn, CMS, etc. &lt;br /&gt;
| osRezFromURL(&amp;quot;http://my.objectstore.com/myawesomeprims.xml&amp;quot;, &amp;amp;lt;1, 1, 1&amp;amp;gt;, &amp;amp;lt;0, 0, 0&amp;amp;gt;, &amp;amp;lt;0, 0, 0&amp;amp;gt;, 0) &lt;br /&gt;
| Jimbo2120&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list osRunCustom(string function, list params) &lt;br /&gt;
| Allow scripts to call external custom routines that are grid-specific without modifying the set of LSL and OSL functions. &lt;br /&gt;
| list results = osRunCustom(&amp;quot;function1&amp;quot;, [...]) &lt;br /&gt;
| Ezekiel&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osSetScriptServer() &lt;br /&gt;
| Create a 'Server' prim that allows for extended scripting capabilities: more memory, higher bandwidth when communicating with external servers, probably some database connectivity, no artificial delays, can receive IMs, etc. Could be limited to one server per prim / parcel or per avatar, could be forced to remain in a fixed position. A server is important for residents that want to set up a virtual business. &lt;br /&gt;
| osSetScriptServer() &lt;br /&gt;
| Ezekiel&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osRemoteLoadScript(string url, string target) &lt;br /&gt;
| Load a source file in txt format from &amp;quot;URL&amp;quot; and compile it into script &amp;quot;target&amp;quot; in the inventory of the same prim. Requires permission of the object owner (RequestPermission). Returns boolean success value. Replaces an existing script with same name. This function would allow updates to scripted solutions that operate in any grid and sim worldwide, allowing the creator of the solution to distribute code fixes and implement new functions. Since the source code is distributed openly, it can be copied and modified by anyone. A function that would allow for secure code distribution, protecting copyrights and certificates, would also be very interesting but should be far more difficult to implement. &lt;br /&gt;
| integer updatestatus = osRemoteLoadScript(&amp;quot;http://www.xyz.com/updates/script1013.txt&amp;quot;, &amp;quot;betterscript&amp;quot; ) &lt;br /&gt;
| Ezekiel&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osSetCustomPrimitiveAttributes(list params) &lt;br /&gt;
| Set some custom persistent primitive attributes, the same way as llSetPrimitiveParams do. The attribute name has to be specified as a string, then the attribute type using a lSL constant. In the example, we set a &amp;quot;magnet&amp;quot; custom attribute as -0.5, supposing a customized physic engine handles this attribute to provide prim attraction. &lt;br /&gt;
| integer osSetCustomPrimitiveAttributes([&amp;quot;magnet&amp;quot;, TYPE_FLOAT, -0.5]) &lt;br /&gt;
| Grumly&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list osGetCustomPrimitiveAttributes(list paramNames) &lt;br /&gt;
| Return a list values of the specified attributes names, the same way as llGetPrimitiveParams do. &lt;br /&gt;
| list osGetCustomPrimitiveAttributes([&amp;quot;Magnetic&amp;quot;]) &lt;br /&gt;
| Grumly &lt;br /&gt;
&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osSyncUUID(key oldUUID, key newUUID); &lt;br /&gt;
| Allows to change the UUID of an avatar or item(requires permission from owner). &lt;br /&gt;
| Suppose a terminal in the LL-grid wants to communicate with an OS-Grid terminal. It can only send messages, if the UUID's of avatars match. An OS-Grid script can get the avatar's LL-UUID by calling the dataserver script. Then it calls osSyncUUID(llDetectedKey(0), keyFromHTTPRequest); . Now the two keys are equal, and avatar-avatar communication between grids can take place! &lt;br /&gt;
| Phrearch &lt;br /&gt;
&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osTeleport(string RegionName, int x, int y, int z); &lt;br /&gt;
| Teleports an avatar to a custom region &lt;br /&gt;
as&amp;amp;nbsp;: osTeleportAgent(key agentId, string regionName, vector position, vector lookAt); &lt;br /&gt;
&lt;br /&gt;
| (this is implemented now - edited April 2009 by Wordfromthe Wise) &lt;br /&gt;
| Phrearch&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osSetStatus(integer status, integer value); &lt;br /&gt;
| Improved verion of the LSL function llSetStatus. &lt;br /&gt;
| The function works basically the same way as llSetStatus, except that an extra flag is added named STATUS_PHYSICS_ROOT. When this flag is TRUE, physics would be enabled Only for the root prim in a linked set, while the other prims in the set would behave as phantom. This would be useful for bypassing the 32-prim physics limit for vehicles by using only the root prim as a collision mesh. &lt;br /&gt;
| Pesho&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| vector osGetBonePos(); &lt;br /&gt;
| When called from an Attachment, retrieves the position of the bone it is attached to, in Region Coordinates. &lt;br /&gt;
| When llGetPos() is called from an attachment, the vector returned is the one of the avatar center, whereas llGetLocalPos() returns the local offset from the bone it is attached to. It would be useful to know where the attachment's location really is in world space. &lt;br /&gt;
| Pesho&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osGetOSLLRelease(); &lt;br /&gt;
| When called return the actual release of OSSL running on the sim. &lt;br /&gt;
| if osGetOSSLRelease() &amp;amp;gt; 1.1 {llSay(0,&amp;quot;good&amp;quot;);} &lt;br /&gt;
| Sacha Magne&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| List osGetServerLib(); &lt;br /&gt;
| When called return a list of all the additional libraries loaded on the server. it will avoid any scripts using a specific library to crash in case of missing libs. &lt;br /&gt;
| List lib=osGetServerLib(); &lt;br /&gt;
| Sacha Magne&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osSetAttachmentPoint(integer attachment); &lt;br /&gt;
| When called from an Attachment sets the default attachment point to attachment value. &lt;br /&gt;
| osSetAttachmentPoint(ATTACH_HUD_BOTTOM_RIGHT); &lt;br /&gt;
| Peter&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osMySQLQuery(string query); &lt;br /&gt;
| Used to get informations out of a sql database. Works together with osMySQLConnect(), osMySQLSelectDatabase() and osMySQLClose(). &lt;br /&gt;
| osMySQLQuery(&amp;quot;Select name FROM user LIMIT 0,1;&amp;quot;); &lt;br /&gt;
| Peter&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osGetGridName(); &lt;br /&gt;
| When called it return the hostname of the grid server. Useful to find out what grid you are on. &lt;br /&gt;
| string gridHostname = osGetGridHostname(); &lt;br /&gt;
| Patnad&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
                   Already implemented. See [[osName2Key]]&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| key osName2Key(string avatarname); &lt;br /&gt;
| When called it return the key associated with a Avatar Name. &lt;br /&gt;
| key avKey = osName2Key(&amp;quot;avatar name&amp;quot;); &lt;br /&gt;
| Patnad&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| vector osParcelCenterpoint(vector pos); &lt;br /&gt;
| When called it return the vector that represent the center point of the current parcel. Same height as the object running the script but centerpoint for x,y. &lt;br /&gt;
| vector parcel_center = osParcelCenterpoint(llGetPos()); &lt;br /&gt;
| Patnad&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osSetMapDestination(integer mode, string simname, vector position, vector lookat); &lt;br /&gt;
| Sets a new &amp;quot;beacon&amp;quot; (red pole) without opening the worldmap: mode is for 1 (simname is a standard region name) or 0 (simname is a SLURL). If the code can handle standard sim names and SLURL(s) at the same time, the &amp;quot;mode&amp;quot; flag can be left behind. &lt;br /&gt;
| integer error = osSetMapDestination(TRUE, &amp;quot;cyberlandia&amp;quot;, &amp;amp;lt;128.0, 128.0, 0.0&amp;amp;gt;, ZERO_VECTOR); &lt;br /&gt;
&amp;amp;nbsp;If error is FALSE then no errors have occurred setting up the new beacon. &amp;amp;nbsp;Errors can arise using unknown simnames/SLURL(s), out of ranges vector coords and so on (nearly the same as llSetMapDestination). &lt;br /&gt;
&lt;br /&gt;
| Elwe Ewing&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osTeleportAgentPerm(key agentId, string regionName, vector position, vector lookAt); &lt;br /&gt;
osTeleportAgentPerm(key agentId, vector position, vector lookAt); &lt;br /&gt;
&lt;br /&gt;
| Works similarly as the two implemented osTeleportAgent but requires (at least the first time) the PERMISSION_TELEPORT flag set (via llRequestPermissions(key id, PERMISSION_TELEPORT); which should be implemented) and can be used by everyone (or restricted to a member of the group wich the region is deed, maybe with a new &amp;quot;Restrict teleports&amp;quot; Estate flag). &lt;br /&gt;
| &amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
 // requests permission to Teleport then do it&lt;br /&gt;
 &lt;br /&gt;
 key  avie = NULL_KEY;&lt;br /&gt;
 &lt;br /&gt;
 default&lt;br /&gt;
 {&lt;br /&gt;
   state_entry()&lt;br /&gt;
   {&lt;br /&gt;
       llSay(0, &amp;quot;Touch to be teleported&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   run_time_permissions(integer vBitPermissions)&lt;br /&gt;
   {&lt;br /&gt;
       if(PERMISSION_TELEPORT &amp;amp;amp; vBitPermissions){&lt;br /&gt;
           osTeleportAgentPerm(avie, &amp;amp;lt;128.0,128.0,0.0&amp;amp;gt;,&lt;br /&gt;
 ZERO_VECTOR);&lt;br /&gt;
       } else {&lt;br /&gt;
           llSay(0, &amp;quot;You deny teleport permission&amp;quot;);&lt;br /&gt;
       }&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   touch_start(integer num_detected)&lt;br /&gt;
   {&lt;br /&gt;
       avie = llDetectedKey(0);&lt;br /&gt;
 &lt;br /&gt;
       llRequestPermissions(avie,&lt;br /&gt;
           PERMISSION_TELEPORT &amp;amp;#124;&lt;br /&gt;
           PERMISSION_TRIGGER_ANIMATION &amp;amp;#124;&lt;br /&gt;
           0);&lt;br /&gt;
       integer perm = llGetPermissions();&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
| Elwe Ewing&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osGetSimulatorStatus(string Simulator) &lt;br /&gt;
| Extended / Enhanced version of llGetSimulatorData. &lt;br /&gt;
Purpose: When an avatar is Teleported with osTeleportAgent, there is no check to see if a given simulator is available. If it's down, Agent is Teleported to NULL resulting in Agent being fragged and viewer broken, requiring a relog. This would be especially useful for HyperGrid Teleporting. Returns: integer &amp;quot;0 = DOWN&amp;quot;, &amp;quot;1 = UP&amp;quot;, &amp;quot;2 = UNKNOWN&amp;quot; Security: Would require some form of Throttle to prevent recurring requests of destination Simulator. Command: osGetSimulatorStatus(string Simulator) Where Simulator = &amp;quot;RegionName&amp;quot;, &amp;quot;IPAddress:PortNum&amp;quot;, &amp;quot;HostName:PortNum&amp;quot; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
 // CHecks if simulator is online before teleporting agent -kizmut&lt;br /&gt;
 &lt;br /&gt;
 string destination = &amp;quot;Wright Plaza&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 default&lt;br /&gt;
 {&lt;br /&gt;
   state_entry()&lt;br /&gt;
   {&lt;br /&gt;
       llSay(0, &amp;quot;Touch to be teleported to: &amp;quot;+destination);&lt;br /&gt;
   }&lt;br /&gt;
   touch_start(integer num_detected)&lt;br /&gt;
   {&lt;br /&gt;
       llSay(0,llDetectedName(0)+&amp;quot; requesting teleport to: &amp;quot;+destination);&lt;br /&gt;
       integer sim_stat = osGetSimulatorStatus(destination);&lt;br /&gt;
       if (sim_stat == 2) {&lt;br /&gt;
           llSay(0, &amp;quot;Could not teleport to &amp;quot;+destination+&amp;quot;: Region status unknown.&amp;quot;);&lt;br /&gt;
       } &lt;br /&gt;
       else if (sim_stat) {&lt;br /&gt;
           osTeleportAgent(llDetectedKey(0),destination,ZERO_VECTOR);&lt;br /&gt;
       }&lt;br /&gt;
       else {&lt;br /&gt;
           llSay(0, &amp;quot;Could not teleport to &amp;quot;+destination+&amp;quot;: Region is down&amp;quot;);&lt;br /&gt;
       }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
| WhiteStar Magic&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osTeleportOwner(string regionName, vector position, vector lookAt); &lt;br /&gt;
| Works similarly as osTeleportAgent but could only teleport the owner of the script itself. Would be very useful for HUD and would not require any authorization. &lt;br /&gt;
| integer error=osTeleportOwner(&amp;quot;Snoopies&amp;quot;,&amp;amp;lt;100,25,25&amp;amp;gt;,ZERO_VECTOR); &lt;br /&gt;
| Agnes Chalet &lt;br /&gt;
&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
                   Already implemented. See [[osName2Key]]&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osName2Key(string name); &lt;br /&gt;
| A command which gives the UUID of an agent. Would work in the same way as llKey2Name, but in reverse. (Linden Lab may implement this first) &lt;br /&gt;
| osName2Key(&amp;quot;Bob Smith&amp;quot;); &lt;br /&gt;
| Drava&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osHyperGrid(); &lt;br /&gt;
| Detects whether or not the region the person is in is Hypergrid enabled. Could be expanded to any region in the current grid. &lt;br /&gt;
| osHyperGrid() == TRUE &lt;br /&gt;
| Drava&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osTurnAvatar(rotation rot); &lt;br /&gt;
| Turns an avatar about the vertical axis to rotation rot relative to the grid rotation. &lt;br /&gt;
| osTurnAvatar(newrot); // turns the avatar to the new rotation specified by newrot. &lt;br /&gt;
| Valradica&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osRezLink(string inventory, vector position, vector velocity, rotation rot, integer param) ;&lt;br /&gt;
| osRezLink would work just like llRezObject but instead of a separate object it would be directly part of the original object's link system. This would be very useful in HUDs and attachments.&lt;br /&gt;
| osRezLink(&amp;quot;myobject&amp;quot;,llGetPos()+&amp;lt;0.0,0.0,0.5&amp;gt;,ZERO_VECTOR,ZERO_ROTATION,10);&lt;br /&gt;
| Nihlaeth&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osSaveObject();&lt;br /&gt;
| osSaveObject would be used in attachments and HUDs to save changes made while the object was worn.&lt;br /&gt;
| osSaveObject();&lt;br /&gt;
| Nihlaeth&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osPauze(integer);&lt;br /&gt;
| Adds an timer-interruptible wait state. Where sleep holds the entire script, this would function more like a non-operation for the user-set duration. For this to be a real addition, osPauze(integer) should be interruptible by any event.&lt;br /&gt;
| osPauze(5);&lt;br /&gt;
| [[User:Fritigern]]&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osDieOnAttachment();&lt;br /&gt;
| osDieOnAttachment()plays the same role as llDie() but on any attachment. Useful in HUDs instead of using the trick of resizing and hiding unwanted primitives, this function simply kills them. This function could be used with the already proposed functions to Rez Directly on Attachments&lt;br /&gt;
| osDieOnAttachment();&lt;br /&gt;
| Hussein Bakri&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  osGetTextureLocationTouch(integer number,list UVParameters);&lt;br /&gt;
| osGetTextureLocationTouch() plays the role of the following LSL functions: vector llDetectedTouchPos(integer number) [returns the position touched by the touch event (number) in region coordinates] in other words it tell which touch to examine like the family of llDetected* functions. The other function that is part of the parameters is  vector llDetectedTouchFace(integer number) [returns the face of the prim touched by the touch event number] Another function in the UVParameters would be: vector llDetectedTouchUV(integer number)[returns the position touched by touch event number as texture coordinates in the form of &amp;lt;u,v,0&amp;gt; ]&lt;br /&gt;
vector llDetectedTouchST(integer number) return the surface coordinates of the touch event number&lt;br /&gt;
llDetectedTouchNormal and llDetectedTouchBinormal get the Normal and binormal vector positions.&lt;br /&gt;
The function will look like llGetPrimParams(). Usage: every texture becomes a user interface, useful in maps also.&lt;br /&gt;
| osGetTextureLocationTouch(integer number,list UVParameters);&lt;br /&gt;
UVParameters:: [PRIM_TOUCH_POSITION, &amp;lt;x,y,z&amp;gt;, PRIM_TOUCH_FACE,x, PRIM_TEXTURE_COORDINATES,&amp;lt;x,y,0&amp;gt;,PRIM_SURFACE_COORDINATES,&amp;lt;x,y,0&amp;gt;,PRIM_TOUCH_SURFACE_NORMAL,x,PRIM_TOUCH_SURFACE_BINORMAL,x]&lt;br /&gt;
| Hussein Bakri&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osBreakLinkOnAttachment(integer alternativeAttachmentPoint);&lt;br /&gt;
| osBreakLinkOnAttachment(integer alternativeAttachmentPoint) plays the same role as llBreakLink() but for attachments only. Not only that when it Breaks the link of a prim and it set the prim to another attachment point. Require attachment permition. Useful to break a link in HUD  and create a separate HUD from the initial one. It will override the functionality of osDieAttachement() when alternativeAttachmentPoint = 0 meaning it kill the object.&lt;br /&gt;
| osBreakLinkOnAttachment(integer alternativeAttachmentPoint);&lt;br /&gt;
| Hussein Bakri&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= See Also =&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 Standards]]&lt;br /&gt;
&lt;br /&gt;
[[Category:OSSL]]&lt;br /&gt;
[[Category:Users]]&lt;br /&gt;
[[Category:Support]]&lt;br /&gt;
[[Category:Getting Started]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Todo]]&lt;/div&gt;</summary>
		<author><name>Mewtwo0641</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OSSL_Proposals</id>
		<title>OSSL Proposals</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OSSL_Proposals"/>
				<updated>2015-03-13T18:45:00Z</updated>
		
		<summary type="html">&lt;p&gt;Mewtwo0641: /* OSSL Proposal Table */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Quicklinks}}&lt;br /&gt;
{{proposal}}&lt;br /&gt;
{{content}}&lt;br /&gt;
&lt;br /&gt;
= What is OSSL? =&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This is a page dedicated to OpenSim's very own home brew custom scripting language Known as &amp;quot;'''O'''pen '''S'''im '''S'''cripting '''L'''anguage&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;'''Please see [[OSSL Standards]] for proposed naming schema'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Please post your osFunction along with a brief description of what it would be for, or do and an example of it. &lt;br /&gt;
* Make sure it begins with os NOT ll.&lt;br /&gt;
* And remember, almost anything within reason can be posted here as an idea, who knows, maybe a variation of your request can be possible.&lt;br /&gt;
* If a function could implemented in standard LSL, there is no reason to make an OS function. LSL code and function code executes at the same speed in OpenSimulator.&lt;br /&gt;
* Post your proposal to the opensim-dev mailing list so that it can be discussed to see if there is any interest. Please indicate if you are willing to implement it yourself - such proposals have a much better chance of succeeding!&lt;br /&gt;
&lt;br /&gt;
== OSSL Proposal Table ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;width:100%;border:1px solid #000000;border-collapse: collapse; white-space:normal;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#99CCFF;font-size:6pt;font-weight:bold;border-bottom:1px solid;&amp;quot; align=&amp;quot;center&amp;quot; valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| osFunction &lt;br /&gt;
| Description &lt;br /&gt;
| Example Usage &lt;br /&gt;
| Signed&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list osGetObjectNameDetails(list names, list params);&lt;br /&gt;
&lt;br /&gt;
list osGetObjectNameDetails(list names, float range, list params);&lt;br /&gt;
| Would work similarly to llGetObjectDetails() but has the advantage of specifying for an object's name (or list of names) instead of by key. If more than one name match is found then the return list will have those matches (or groups of matches if more than one parameter is supplied) sorted in order from nearest to furthest from the prim calling osGetObjectDetails. By default this would scan the entire region but optionally a range can be specified to only search within a certain radius similar to llSensor().&lt;br /&gt;
&lt;br /&gt;
This has potential, for most single item situations at least, eliminate the need for an llSensor() call and also eliminate the need for a sensor event thus reducing code complexity and make for very easy and very quick data collection to be further processed upon.&lt;br /&gt;
&lt;br /&gt;
Note: Not sure if specifying a range in the case of supplying a key would make much sense but I suppose someone out there could find it useful?&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
list objDetails;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {	&lt;br /&gt;
		//Example 1:&lt;br /&gt;
		//For this example assume this prim is located at &amp;lt;128, 125, 30&amp;gt; and we have two objects named 'Chair'.&lt;br /&gt;
		//'Chair' #1 is located at &amp;lt;128, 128, 30&amp;gt; and owned by avatar UUID 5f9c7c6c-f2c9-4196-8d8d-07cdeb71821a&lt;br /&gt;
		//'Chair' #2 is located at &amp;lt;128, 130, 30&amp;gt; and owned by avatar UUID 1c612fb2-748c-4a1a-ad57-27f488210c06&lt;br /&gt;
		&lt;br /&gt;
		objDetails = osGetObjectNameDetails([&amp;quot;Chair&amp;quot;], OBJECT_NAME | OBJECT_POS | OBJECT_OWNER);&lt;br /&gt;
		&lt;br /&gt;
		llOwnerSay(llDumpList2String(objDetails, &amp;quot;, &amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		//llOwnerSay() output should be: Chair, &amp;lt;128, 128, 30&amp;gt;, 5f9c7c6c-f2c9-4196-8d8d-07cdeb71821a, Chair, &amp;lt;128, 130, 30&amp;gt;, 1c612fb2-748c-4a1a-ad57-27f488210c06&lt;br /&gt;
		&lt;br /&gt;
		//------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
		&lt;br /&gt;
		//Example 2:&lt;br /&gt;
		//For this example assume everything stays the same as in Example 1 except that we're specifying a range.&lt;br /&gt;
		&lt;br /&gt;
		objDetails = osGetObjectNameDetails([&amp;quot;Chair&amp;quot;], 5.0, OBJECT_NAME | OBJECT_POS | OBJECT_OWNER);&lt;br /&gt;
		&lt;br /&gt;
		llOwnerSay(llDumpList2String(objDetails, &amp;quot;, &amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		//llOwnerSay() output should be: Chair, &amp;lt;128, 128, 30&amp;gt;, 5f9c7c6c-f2c9-4196-8d8d-07cdeb71821a&lt;br /&gt;
		&lt;br /&gt;
		//------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
		&lt;br /&gt;
		//Example 3:&lt;br /&gt;
		//For this example assume this prim is located at &amp;lt;128, 125, 30&amp;gt; and we have two objects: 'Chair 1' and 'Chair 2'.&lt;br /&gt;
		//'Chair 1' is located at &amp;lt;128, 128, 30&amp;gt; and owned by avatar UUID 5f9c7c6c-f2c9-4196-8d8d-07cdeb71821a&lt;br /&gt;
		//'Chair 2' is located at &amp;lt;128, 130, 30&amp;gt; and owned by avatar UUID 1c612fb2-748c-4a1a-ad57-27f488210c06&lt;br /&gt;
		&lt;br /&gt;
		objDetails = osGetObjectNameDetails([&amp;quot;Chair 1&amp;quot;, &amp;quot;Chair 2&amp;quot;], OBJECT_NAME | OBJECT_POS | OBJECT_OWNER);&lt;br /&gt;
		&lt;br /&gt;
		llOwnerSay(llDumpList2String(objDetails, &amp;quot;, &amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		//llOwnerSay() output should be: Chair 1, &amp;lt;128, 128, 30&amp;gt;, 5f9c7c6c-f2c9-4196-8d8d-07cdeb71821a, Chair 2, &amp;lt;128, 130, 30&amp;gt;, 1c612fb2-748c-4a1a-ad57-27f488210c06&lt;br /&gt;
		&lt;br /&gt;
		//------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
		&lt;br /&gt;
		//Example 4:&lt;br /&gt;
		//For this example assume everything stays the same as in Example 3 except that we're specifying a range.&lt;br /&gt;
		&lt;br /&gt;
		objDetails = osGetObjectNameDetails([&amp;quot;Chair 1&amp;quot;, &amp;quot;Chair 2&amp;quot;], 5.0, OBJECT_NAME | OBJECT_POS | OBJECT_OWNER);&lt;br /&gt;
		&lt;br /&gt;
		llOwnerSay(llDumpList2String(objDetails, &amp;quot;, &amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		//llOwnerSay() output should be: Chair 1, &amp;lt;128, 128, 30&amp;gt;, 5f9c7c6c-f2c9-4196-8d8d-07cdeb71821a&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
| mewtwo0641&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| key osSetHTTPURL(string url);&lt;br /&gt;
| Sets the prim to a private HTTP:// url for use by this script. The http_request() event would be&lt;br /&gt;
triggered &amp;amp; the prim would serve as a &amp;quot;prim-server&amp;quot; for the private HTTP:// url. Also Returns a key that is the handle used for identifying the result in the http_request event.&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
 string private_url = &amp;quot;http://thisprivatedomain.com/index.php&amp;quot;&lt;br /&gt;
 default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
    osSetHTTPURL(private_url);&lt;br /&gt;
    }&lt;br /&gt;
    http_request(key request_id, string method, string body)&lt;br /&gt;
    {&lt;br /&gt;
    if(method == &amp;quot;POST&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
    osHTTPResponse(request_id,200,&amp;quot;Your $_POST was successful&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    else if(method == &amp;quot;GET&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
    osHTTPResponse(request_id,200,&amp;quot;Wait for the server to handle your request&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
| Apollo Juez&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list osGetRegionAgentKeys(); &lt;br /&gt;
| C# Code: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
        public LSL_List osGetRegionAgentKeys()&lt;br /&gt;
       {&lt;br /&gt;
           CheckThreatLevel(ThreatLevel.None, &amp;quot;osGetRegionAgentKeys&amp;quot;);&lt;br /&gt;
           LSL_List result = new LSL_List();&lt;br /&gt;
           foreach (ScenePresence avatar in World.GetAvatars())&lt;br /&gt;
           {&lt;br /&gt;
               result.Add(avatar.UUID);&lt;br /&gt;
           }&lt;br /&gt;
           return result;&lt;br /&gt;
       }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Returns a list of keys for every agent in the region &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
list keys=osGetRegionAgentKeys(); &lt;br /&gt;
integer i;&lt;br /&gt;
integer l=llGetListLength(keys); &lt;br /&gt;
string names; for(i=0;i&amp;amp;lt;l;i++) &lt;br /&gt;
   { key id=llList2Key(keys,i); &lt;br /&gt;
      string add=llKey2Name(id); &lt;br /&gt;
      integer dist=llVecDist(llGetPos(),llList2Vector(llGetObjectDetails(id,[OBJECT_POS]),0)));&lt;br /&gt;
      add+=&amp;quot;[&amp;quot;+(string)dist+&amp;quot;]\n&amp;quot;; &lt;br /&gt;
      names+=add;&lt;br /&gt;
   } llSetText(names,&amp;amp;lt;1,1,1&amp;amp;gt;,1.0); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
| Joshua Driver&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [NEW] various os functions including osDerezObject(), osMessageAgentAttachment(), ... &lt;br /&gt;
| see [[User:Athlon_Maurer]] for full source code &lt;br /&gt;
| tested on local opensimulator 0.6.9 (some of them doesnt seem to work on 0.7.x) &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osBin(string char); &lt;br /&gt;
| To convert a char into its binary value. Will only convert 1 char at a time. &lt;br /&gt;
| string bin_a = osBin(&amp;quot;A&amp;quot;); // bin_a = &amp;quot;01000001&amp;quot;; &lt;br /&gt;
| Athlon Maurer (please send me a notecard into secondlife, if that are too much ideas xD, this hint can be deleted by an opensimulator admin, if neccesary xD)&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osHex(integer number); &lt;br /&gt;
| To convert a number into its hexadecimal value. &lt;br /&gt;
| string str_ff = osHex(255); // str_ff = &amp;quot;FF&amp;quot;; &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osAsc(string char); &lt;br /&gt;
| To convert a char into its ascii index. Will only convert 1 char at a time. &lt;br /&gt;
| integer asc_a = osAsc(&amp;quot;A&amp;quot;); // asc_a = 65; &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osScanRegionRemove(); &lt;br /&gt;
| Remove an osScanRegionRepeat(). [ nearly the same as llSensorRemove() ] &lt;br /&gt;
| osScanRegionRemove(); &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osScanRegion(string name, key id, integer type); &lt;br /&gt;
| Scan the whole region where the script task object is in regardless where it is positioned. Triggers sensor() or no_sensor(). &lt;br /&gt;
| osScanRegion(&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, AGENT); &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osScanRegionRepeat(string name, key id, integer type, float rate); &lt;br /&gt;
| Scan the whole region where the script task object is in regardless where it is positioned with rate. Triggers sensor() or no_sensor(). &lt;br /&gt;
| osScanRegionRepeat(&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, AGENT, 15.0); &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| key osGetRegionMapTexture(string RegionName) &lt;br /&gt;
| return the map texture uuid for the region named by RegionName. &lt;br /&gt;
| llSetTexture(osGetRegionMapTexture(&amp;quot;OpenSimulator Test&amp;quot;), ALL_SIDES); &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
create a php file which is public&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// mapquery.php by Athlon Maurer (SL, OL, OS)&lt;br /&gt;
	//&lt;br /&gt;
	// hello, ive just started to learn php/mysql and this is one of my first&lt;br /&gt;
	// scripts for opensim. this script returns the texture uuid for a given&lt;br /&gt;
	// region by calling: mapquery.php?region=REGIONNAME&lt;br /&gt;
	// if a region has been found, it returns that regions map texture uuid, &lt;br /&gt;
	// otherwise it returns a null key uuid&lt;br /&gt;
	// mysql connection info is here, please make this more safe&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// region name (do not change this)&lt;br /&gt;
	$region = htmlspecialchars($_GET['region']);&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// default uuid (do not change this)&lt;br /&gt;
	$uuid = '00000000-0000-0000-0000-000000000000';&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// your mysql host name (change this)&lt;br /&gt;
	$dbhost = 'localhost';&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// your mysql user name (change this)&lt;br /&gt;
	$dbuser = 'root';&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// your mysql user password (change this)&lt;br /&gt;
	$dbpass = '';&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// your mysql opensim database (change this)&lt;br /&gt;
	$dbname = 'opensim';&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// try to connect&lt;br /&gt;
	if ($conn = mysql_connect($dbhost, $dbuser, $dbpass))&lt;br /&gt;
	{&lt;br /&gt;
		// try to select&lt;br /&gt;
		if ($select = mysql_select_db($dbname, $conn))&lt;br /&gt;
		{&lt;br /&gt;
			$sql = 'SELECT regionName, regionMapTexture FROM regions';&lt;br /&gt;
			$result = mysql_query($sql);&lt;br /&gt;
			while ($row = mysql_fetch_array($result, MYSQL_ASSOC))&lt;br /&gt;
			{&lt;br /&gt;
				if ($row['regionName'] == $region)&lt;br /&gt;
				{&lt;br /&gt;
					$uuid = $row['regionMapTexture'];&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			// free result&lt;br /&gt;
			mysql_free_result($result);&lt;br /&gt;
		}&lt;br /&gt;
		// close connection&lt;br /&gt;
		mysql_close($conn);&lt;br /&gt;
	}&lt;br /&gt;
	// output&lt;br /&gt;
	echo $uuid;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;?&amp;gt;&lt;br /&gt;
then llHTTPRequest(&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| Athlon Maurer (This function is available as of November 12, 2009)&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list osGetLinkPrimitiveParams(integer link, list params); &lt;br /&gt;
| Function llSetLinkPrimitiveParams() does exist, but no chance to get params from a prim in a linkset, like llGetPrimitiveParams() and llSetPrimitiveParams(). &lt;br /&gt;
| list linkparams = osGetLinkPrimitiveParams([PRIM_TYPE, PRIM_TEXTURE, ...]); &lt;br /&gt;
| Athlon Maurer (This function is available as of August 09, 2009)&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osDerezObject(key object) &lt;br /&gt;
| Deletes an InWorld-Object specified by object as uuid. Only successful if the object the script is attached to and the object which should be derezzed is owned by the same owner&amp;amp;nbsp;:). Useful if the object to be deleted should be unscripted. &lt;br /&gt;
| osDerezObject(&amp;quot;key_of_object&amp;quot;); &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| int osRestartRegion() &lt;br /&gt;
| Restarts the region the script is currently in. The script this is run in has to be owned by the master avatar for that region. Returns 1 if the region is restarting, 0 on failure. &lt;br /&gt;
| osRestartRegion(); &lt;br /&gt;
| gryc (Implemented by AFrisby)&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| int osWebTexture() &lt;br /&gt;
| Sets the texture from a web-url &lt;br /&gt;
| osWebTexture(string url,integer maptype); &lt;br /&gt;
| AFrisby?&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osGroupAdd(key, string Role) &lt;br /&gt;
| Adds user to a group with given role, default role Everyone. Returns 1 if successful 0 if fail. &lt;br /&gt;
| osGroupAdd(87f6e6a0-d884-11dc-95ff-0800200c9a66, &amp;quot;Officer&amp;quot;) &lt;br /&gt;
| Nitrus Nori&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| int osShutdownRegion() &lt;br /&gt;
| Shuts down the region the script is currently in. The script this is run in has to be owned by the master avatar for that region. Returns 1 if the region is going down, 0 on failure. &lt;br /&gt;
| osShutdownRegion(); &lt;br /&gt;
| gryc&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osAttachmentSay(integer channel, string msg) &lt;br /&gt;
| Provide a secure, low lag method of communicating between attachments over the chat channels by only sending messages to objects attached to the same avatar. Would fail (or not be heard) if in a non-attached object. &lt;br /&gt;
| osAttachmentSay(-20, &amp;quot;detatch&amp;quot;); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osMessageSecure(string message_key, string str, integer num, key id);&amp;lt;br /&amp;gt;secure_message(string message_key, string str, integer num, key id); &lt;br /&gt;
| Provide a method of sending secure, salt encripted messages sim wide. Messages would only be able to be received by scripts with the matching key in the secure_message method. &lt;br /&gt;
| osMessageSecure(&amp;quot;myPassPhrase&amp;quot;, &amp;quot;Hello World&amp;quot;, 0, NULL_KEY); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osSetText( vector color, string text [,vector color, string text]); &lt;br /&gt;
| Allow setting of multiple colors on the prim text &lt;br /&gt;
| osSetText(&amp;amp;lt;1,0,0&amp;amp;gt;,&amp;quot;Red&amp;quot;, &amp;amp;lt;0,1,0&amp;amp;gt;, &amp;quot;\nGreen&amp;quot;, &amp;amp;lt;0,0,1&amp;amp;gt;, &amp;quot;\nBlue&amp;quot;); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osSensor &lt;br /&gt;
| Gets ALL the objects in the specified range not just the first 16 &lt;br /&gt;
| (same as standard) &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list lst=osDetectObjectsInSim(key id) &lt;br /&gt;
| given an Agent Key, provide a list of ALL object owned by that agent &lt;br /&gt;
| osDetectObjectsInSim(key id) returning a strided list of [ name, &amp;amp;lt;pos&amp;amp;gt; ] &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer=osDialog([ title, label1, type1, len1, label2, type2, len2].... &lt;br /&gt;
| given title and a listing of fields, builds up a real form where to put structured checked data &lt;br /&gt;
| will return a [ value1, value2, valuen ] corresponding to fields read. Type might be something like (string, text (multiline), integer, float, currency(decimals), options(combobox) &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| key id=osMakeTextureText(string name,integer width, integer height,[posx1,posy1,font1,color1,size1,text1,posx2,posy2,font2,color2,size2,text2....]) &lt;br /&gt;
| allow for producing a texture on the fly with desired Font content from a selected font selection. Width, Height in pixels 1024x512 to control how big will be the texture &lt;br /&gt;
| will generate a texture with defined text. (Allow some support for at least ISO-8859-1) texture will be created in the object inventory. posx, posy in the range 0-1 to be pixel independent &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osMakeNotecard(string name, [ line1, line2, line3, ...]) &lt;br /&gt;
| allow creation of new notecards in current object repository &lt;br /&gt;
| generate a new asset id useful for storing modified configuration &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer handler=osReadNotecardKey(string notecard, string key) &lt;br /&gt;
| allows reading notecards (through dataserver) in format key=value in convenient and efficient way &lt;br /&gt;
| ... &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osWriteNotecardKey(string notecard, string key,string value) &lt;br /&gt;
| allows WRITING notecards in format key=value in convenient and efficient way. Might be optimized having a fixed record length &amp;quot;file&amp;quot; so to avoid rewriting of the entire notecard &lt;br /&gt;
| ... &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer handle=osXMLParser(string xml) &lt;br /&gt;
| will activate a listener xmlparser(integer handler,string parent, string field, string value) &lt;br /&gt;
| to easily parse xml without writing php external code &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osReturnObjects(key owner, integer type); &lt;br /&gt;
| Provide a scriptable method of returning objects from a sim. type would be OBJECT_SCRIPTED, OBJECT_PASSIVE or OBJECT_ALL. Would return a binary Success/Fail, and work inline with land permissions for the script owner. &lt;br /&gt;
| osReturnObjects( target, OBJECT_ALL); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osReturnItem(key item); &lt;br /&gt;
| Provide a scriptable method of returning individual objects from a sim. Would return a binary Success/Fail, and work inline with land permissions for the script owner. &lt;br /&gt;
| osReturnItem(uuid); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osSetTimerEvent(integer timer, float rate); &amp;lt;br /&amp;gt; (event) timer(integer timer_num) &lt;br /&gt;
| Support for multiple timers in a script. &lt;br /&gt;
| osSetTimerEvent(2, 0.5); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osTimerOnce(integer timer, float rate); &lt;br /&gt;
| Allow for a one shot timer event, rather than the normal repeating heartbeat type &lt;br /&gt;
| osTimerOnce(2, 10); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osVerifyScripts(); &lt;br /&gt;
| Check to see if all scripts in an object are created by the owner of the script calling the function. Return TRUE if they are, FALSE otherwise, to prevent insertion of alien scripts into an object &lt;br /&gt;
| if (!osVerifyScripts()) { llDie(); } &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osStopOtherAnimations(list animation_exceptions); &lt;br /&gt;
| Provide a method of stopping all animations on an avatar, except those defined in the list &lt;br /&gt;
| osStopOtherAnimations([&amp;quot;my_sitting_anim&amp;quot;]); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osPutScriptInLinkedSet(string name,integer linknum, integer starting_parm, integer running) &lt;br /&gt;
| Use this to propagate one script to ALL or part of linked set. &lt;br /&gt;
| Useful to have all objects in a linked set sharing a common behaviour &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osRezObject(string name, string description, integer permissionmask, list setPrimitiveObjectLikeList) will trigger the object_rez object as usual &lt;br /&gt;
| similar to llRezObject, but without the need of having a prim inside the inventory (which produced a lot of problems in deploying and in sl). Newly created object will have the same owner of current object where script is running. &lt;br /&gt;
| In case list is empty or position not specified, suitable defaults should apply like pos being 1 m higher in the z axis &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osGetOwnerName(); &lt;br /&gt;
| Provide a method of getting the owner name without having to use llKey2Name &lt;br /&gt;
| myName = osGetOwnerName(); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osXMPPOpen(string server, string username, string password, string resource); &lt;br /&gt;
| Open an XMPP session to a jabber or other XMPP server, returning a handle to be able to manipulate the connection. Incoming messages to be parsed through a xmpp_message(integer handle, string sender, string service, string message) event. Accounts would have to be set up manually by the scripter, or by some other method, to prevent scripted spamming of a server, and to allow users to set up gateways and other services if needed. &lt;br /&gt;
| handle = osXMPPOpen(&amp;quot;jabber.org&amp;quot;, &amp;quot;MyObject&amp;quot;, &amp;quot;MyPassword&amp;quot;, &amp;quot;OpenSim&amp;quot;); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list osXMPPGetRosta(integer handle); &lt;br /&gt;
| Get the rosta from the XMPP server, list in the strided form of [username, presence, resource]; &lt;br /&gt;
| list presence = osXMPPGetRosta(handle); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list osXMPPGetServices(integer handle); &lt;br /&gt;
| Get a list of available services from the XMPP Server. &lt;br /&gt;
| list services = osXMPPGetServices(handle); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osXMPPAdd(string username, string service) &lt;br /&gt;
| Add a username to the account rosta. Return boolean success or fail &lt;br /&gt;
| if (osXMPPAdd(&amp;quot;Test User&amp;quot;, &amp;quot;Yahoo&amp;quot;)) { ... } &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer oxXMPPDelete(string username) &lt;br /&gt;
| Remove a username from the account rosta. Return boolean success or fail &lt;br /&gt;
| if (osXMPPDelete(&amp;quot;Test User&amp;quot;)) { ... } &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osXMPPGetStatus(string username); &lt;br /&gt;
| Poll the server for the status of a specific username on the rosta - returns would be OFFLINE, BUSY, AWAY and ONLINE &lt;br /&gt;
| if (osXMPPGetStatus(&amp;quot;Test User&amp;quot;) &amp;amp;amp; ONLINE) { ... } &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osXMPPSendMessage(integer handle, string message, string target); &lt;br /&gt;
| Send a message via the open XMPP channel, to the specified target. Return boolean success values &lt;br /&gt;
| if (osXMPPSendMessage(handle, &amp;quot;Hello World&amp;quot;, osGetOwnerName()) { llOwnerSay(&amp;quot;Successfully sent message&amp;quot;); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osXMPPClose(integer handle); &lt;br /&gt;
| Close the XMPP session &lt;br /&gt;
| osXMPPClose(); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osRezObjectKey(key object,vector pos,vector vel,rotation rot, int param); &lt;br /&gt;
| Basically llGodLikeRezObject[http://lslwiki.net/lslwiki/wakka.php?wakka=llGodLikeRezObject] with the features of llRezObject[http://lslwiki.net/lslwiki/wakka.php?wakka=llRezObject] but for everyone to use. Calls object_rez. &lt;br /&gt;
| osRezObjectKey(object_key,llGetPos(),ZERO_VECTOR,llGetRot(),0); &lt;br /&gt;
| Tdub&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osRezFromURL(string url, vector pos, vector vel, rotation rot, integer param) - calls on_rez &lt;br /&gt;
| Fetch a fragment of xml from a web server and rez its contents in-world as in 'load-xml'. Off or intergrid object repositories, such as objects stored in SVN via websvn, CMS, etc. &lt;br /&gt;
| osRezFromURL(&amp;quot;http://my.objectstore.com/myawesomeprims.xml&amp;quot;, &amp;amp;lt;1, 1, 1&amp;amp;gt;, &amp;amp;lt;0, 0, 0&amp;amp;gt;, &amp;amp;lt;0, 0, 0&amp;amp;gt;, 0) &lt;br /&gt;
| Jimbo2120&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list osRunCustom(string function, list params) &lt;br /&gt;
| Allow scripts to call external custom routines that are grid-specific without modifying the set of LSL and OSL functions. &lt;br /&gt;
| list results = osRunCustom(&amp;quot;function1&amp;quot;, [...]) &lt;br /&gt;
| Ezekiel&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osSetScriptServer() &lt;br /&gt;
| Create a 'Server' prim that allows for extended scripting capabilities: more memory, higher bandwidth when communicating with external servers, probably some database connectivity, no artificial delays, can receive IMs, etc. Could be limited to one server per prim / parcel or per avatar, could be forced to remain in a fixed position. A server is important for residents that want to set up a virtual business. &lt;br /&gt;
| osSetScriptServer() &lt;br /&gt;
| Ezekiel&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osRemoteLoadScript(string url, string target) &lt;br /&gt;
| Load a source file in txt format from &amp;quot;URL&amp;quot; and compile it into script &amp;quot;target&amp;quot; in the inventory of the same prim. Requires permission of the object owner (RequestPermission). Returns boolean success value. Replaces an existing script with same name. This function would allow updates to scripted solutions that operate in any grid and sim worldwide, allowing the creator of the solution to distribute code fixes and implement new functions. Since the source code is distributed openly, it can be copied and modified by anyone. A function that would allow for secure code distribution, protecting copyrights and certificates, would also be very interesting but should be far more difficult to implement. &lt;br /&gt;
| integer updatestatus = osRemoteLoadScript(&amp;quot;http://www.xyz.com/updates/script1013.txt&amp;quot;, &amp;quot;betterscript&amp;quot; ) &lt;br /&gt;
| Ezekiel&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osSetCustomPrimitiveAttributes(list params) &lt;br /&gt;
| Set some custom persistent primitive attributes, the same way as llSetPrimitiveParams do. The attribute name has to be specified as a string, then the attribute type using a lSL constant. In the example, we set a &amp;quot;magnet&amp;quot; custom attribute as -0.5, supposing a customized physic engine handles this attribute to provide prim attraction. &lt;br /&gt;
| integer osSetCustomPrimitiveAttributes([&amp;quot;magnet&amp;quot;, TYPE_FLOAT, -0.5]) &lt;br /&gt;
| Grumly&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list osGetCustomPrimitiveAttributes(list paramNames) &lt;br /&gt;
| Return a list values of the specified attributes names, the same way as llGetPrimitiveParams do. &lt;br /&gt;
| list osGetCustomPrimitiveAttributes([&amp;quot;Magnetic&amp;quot;]) &lt;br /&gt;
| Grumly &lt;br /&gt;
&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osSyncUUID(key oldUUID, key newUUID); &lt;br /&gt;
| Allows to change the UUID of an avatar or item(requires permission from owner). &lt;br /&gt;
| Suppose a terminal in the LL-grid wants to communicate with an OS-Grid terminal. It can only send messages, if the UUID's of avatars match. An OS-Grid script can get the avatar's LL-UUID by calling the dataserver script. Then it calls osSyncUUID(llDetectedKey(0), keyFromHTTPRequest); . Now the two keys are equal, and avatar-avatar communication between grids can take place! &lt;br /&gt;
| Phrearch &lt;br /&gt;
&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osTeleport(string RegionName, int x, int y, int z); &lt;br /&gt;
| Teleports an avatar to a custom region &lt;br /&gt;
as&amp;amp;nbsp;: osTeleportAgent(key agentId, string regionName, vector position, vector lookAt); &lt;br /&gt;
&lt;br /&gt;
| (this is implemented now - edited April 2009 by Wordfromthe Wise) &lt;br /&gt;
| Phrearch&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osSetStatus(integer status, integer value); &lt;br /&gt;
| Improved verion of the LSL function llSetStatus. &lt;br /&gt;
| The function works basically the same way as llSetStatus, except that an extra flag is added named STATUS_PHYSICS_ROOT. When this flag is TRUE, physics would be enabled Only for the root prim in a linked set, while the other prims in the set would behave as phantom. This would be useful for bypassing the 32-prim physics limit for vehicles by using only the root prim as a collision mesh. &lt;br /&gt;
| Pesho&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| vector osGetBonePos(); &lt;br /&gt;
| When called from an Attachment, retrieves the position of the bone it is attached to, in Region Coordinates. &lt;br /&gt;
| When llGetPos() is called from an attachment, the vector returned is the one of the avatar center, whereas llGetLocalPos() returns the local offset from the bone it is attached to. It would be useful to know where the attachment's location really is in world space. &lt;br /&gt;
| Pesho&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osGetOSLLRelease(); &lt;br /&gt;
| When called return the actual release of OSSL running on the sim. &lt;br /&gt;
| if osGetOSSLRelease() &amp;amp;gt; 1.1 {llSay(0,&amp;quot;good&amp;quot;);} &lt;br /&gt;
| Sacha Magne&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| List osGetServerLib(); &lt;br /&gt;
| When called return a list of all the additional libraries loaded on the server. it will avoid any scripts using a specific library to crash in case of missing libs. &lt;br /&gt;
| List lib=osGetServerLib(); &lt;br /&gt;
| Sacha Magne&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osSetAttachmentPoint(integer attachment); &lt;br /&gt;
| When called from an Attachment sets the default attachment point to attachment value. &lt;br /&gt;
| osSetAttachmentPoint(ATTACH_HUD_BOTTOM_RIGHT); &lt;br /&gt;
| Peter&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osMySQLQuery(string query); &lt;br /&gt;
| Used to get informations out of a sql database. Works together with osMySQLConnect(), osMySQLSelectDatabase() and osMySQLClose(). &lt;br /&gt;
| osMySQLQuery(&amp;quot;Select name FROM user LIMIT 0,1;&amp;quot;); &lt;br /&gt;
| Peter&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osGetGridName(); &lt;br /&gt;
| When called it return the hostname of the grid server. Useful to find out what grid you are on. &lt;br /&gt;
| string gridHostname = osGetGridHostname(); &lt;br /&gt;
| Patnad&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
                   Already implemented. See [[osName2Key]]&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| key osName2Key(string avatarname); &lt;br /&gt;
| When called it return the key associated with a Avatar Name. &lt;br /&gt;
| key avKey = osName2Key(&amp;quot;avatar name&amp;quot;); &lt;br /&gt;
| Patnad&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| vector osParcelCenterpoint(vector pos); &lt;br /&gt;
| When called it return the vector that represent the center point of the current parcel. Same height as the object running the script but centerpoint for x,y. &lt;br /&gt;
| vector parcel_center = osParcelCenterpoint(llGetPos()); &lt;br /&gt;
| Patnad&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osSetMapDestination(integer mode, string simname, vector position, vector lookat); &lt;br /&gt;
| Sets a new &amp;quot;beacon&amp;quot; (red pole) without opening the worldmap: mode is for 1 (simname is a standard region name) or 0 (simname is a SLURL). If the code can handle standard sim names and SLURL(s) at the same time, the &amp;quot;mode&amp;quot; flag can be left behind. &lt;br /&gt;
| integer error = osSetMapDestination(TRUE, &amp;quot;cyberlandia&amp;quot;, &amp;amp;lt;128.0, 128.0, 0.0&amp;amp;gt;, ZERO_VECTOR); &lt;br /&gt;
&amp;amp;nbsp;If error is FALSE then no errors have occurred setting up the new beacon. &amp;amp;nbsp;Errors can arise using unknown simnames/SLURL(s), out of ranges vector coords and so on (nearly the same as llSetMapDestination). &lt;br /&gt;
&lt;br /&gt;
| Elwe Ewing&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osTeleportAgentPerm(key agentId, string regionName, vector position, vector lookAt); &lt;br /&gt;
osTeleportAgentPerm(key agentId, vector position, vector lookAt); &lt;br /&gt;
&lt;br /&gt;
| Works similarly as the two implemented osTeleportAgent but requires (at least the first time) the PERMISSION_TELEPORT flag set (via llRequestPermissions(key id, PERMISSION_TELEPORT); which should be implemented) and can be used by everyone (or restricted to a member of the group wich the region is deed, maybe with a new &amp;quot;Restrict teleports&amp;quot; Estate flag). &lt;br /&gt;
| &amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
 // requests permission to Teleport then do it&lt;br /&gt;
 &lt;br /&gt;
 key  avie = NULL_KEY;&lt;br /&gt;
 &lt;br /&gt;
 default&lt;br /&gt;
 {&lt;br /&gt;
   state_entry()&lt;br /&gt;
   {&lt;br /&gt;
       llSay(0, &amp;quot;Touch to be teleported&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   run_time_permissions(integer vBitPermissions)&lt;br /&gt;
   {&lt;br /&gt;
       if(PERMISSION_TELEPORT &amp;amp;amp; vBitPermissions){&lt;br /&gt;
           osTeleportAgentPerm(avie, &amp;amp;lt;128.0,128.0,0.0&amp;amp;gt;,&lt;br /&gt;
 ZERO_VECTOR);&lt;br /&gt;
       } else {&lt;br /&gt;
           llSay(0, &amp;quot;You deny teleport permission&amp;quot;);&lt;br /&gt;
       }&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   touch_start(integer num_detected)&lt;br /&gt;
   {&lt;br /&gt;
       avie = llDetectedKey(0);&lt;br /&gt;
 &lt;br /&gt;
       llRequestPermissions(avie,&lt;br /&gt;
           PERMISSION_TELEPORT &amp;amp;#124;&lt;br /&gt;
           PERMISSION_TRIGGER_ANIMATION &amp;amp;#124;&lt;br /&gt;
           0);&lt;br /&gt;
       integer perm = llGetPermissions();&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
| Elwe Ewing&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osGetSimulatorStatus(string Simulator) &lt;br /&gt;
| Extended / Enhanced version of llGetSimulatorData. &lt;br /&gt;
Purpose: When an avatar is Teleported with osTeleportAgent, there is no check to see if a given simulator is available. If it's down, Agent is Teleported to NULL resulting in Agent being fragged and viewer broken, requiring a relog. This would be especially useful for HyperGrid Teleporting. Returns: integer &amp;quot;0 = DOWN&amp;quot;, &amp;quot;1 = UP&amp;quot;, &amp;quot;2 = UNKNOWN&amp;quot; Security: Would require some form of Throttle to prevent recurring requests of destination Simulator. Command: osGetSimulatorStatus(string Simulator) Where Simulator = &amp;quot;RegionName&amp;quot;, &amp;quot;IPAddress:PortNum&amp;quot;, &amp;quot;HostName:PortNum&amp;quot; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
 // CHecks if simulator is online before teleporting agent -kizmut&lt;br /&gt;
 &lt;br /&gt;
 string destination = &amp;quot;Wright Plaza&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 default&lt;br /&gt;
 {&lt;br /&gt;
   state_entry()&lt;br /&gt;
   {&lt;br /&gt;
       llSay(0, &amp;quot;Touch to be teleported to: &amp;quot;+destination);&lt;br /&gt;
   }&lt;br /&gt;
   touch_start(integer num_detected)&lt;br /&gt;
   {&lt;br /&gt;
       llSay(0,llDetectedName(0)+&amp;quot; requesting teleport to: &amp;quot;+destination);&lt;br /&gt;
       integer sim_stat = osGetSimulatorStatus(destination);&lt;br /&gt;
       if (sim_stat == 2) {&lt;br /&gt;
           llSay(0, &amp;quot;Could not teleport to &amp;quot;+destination+&amp;quot;: Region status unknown.&amp;quot;);&lt;br /&gt;
       } &lt;br /&gt;
       else if (sim_stat) {&lt;br /&gt;
           osTeleportAgent(llDetectedKey(0),destination,ZERO_VECTOR);&lt;br /&gt;
       }&lt;br /&gt;
       else {&lt;br /&gt;
           llSay(0, &amp;quot;Could not teleport to &amp;quot;+destination+&amp;quot;: Region is down&amp;quot;);&lt;br /&gt;
       }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
| WhiteStar Magic&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osTeleportOwner(string regionName, vector position, vector lookAt); &lt;br /&gt;
| Works similarly as osTeleportAgent but could only teleport the owner of the script itself. Would be very useful for HUD and would not require any authorization. &lt;br /&gt;
| integer error=osTeleportOwner(&amp;quot;Snoopies&amp;quot;,&amp;amp;lt;100,25,25&amp;amp;gt;,ZERO_VECTOR); &lt;br /&gt;
| Agnes Chalet &lt;br /&gt;
&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
                   Already implemented. See [[osName2Key]]&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osName2Key(string name); &lt;br /&gt;
| A command which gives the UUID of an agent. Would work in the same way as llKey2Name, but in reverse. (Linden Lab may implement this first) &lt;br /&gt;
| osName2Key(&amp;quot;Bob Smith&amp;quot;); &lt;br /&gt;
| Drava&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osHyperGrid(); &lt;br /&gt;
| Detects whether or not the region the person is in is Hypergrid enabled. Could be expanded to any region in the current grid. &lt;br /&gt;
| osHyperGrid() == TRUE &lt;br /&gt;
| Drava&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osTurnAvatar(rotation rot); &lt;br /&gt;
| Turns an avatar about the vertical axis to rotation rot relative to the grid rotation. &lt;br /&gt;
| osTurnAvatar(newrot); // turns the avatar to the new rotation specified by newrot. &lt;br /&gt;
| Valradica&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osRezLink(string inventory, vector position, vector velocity, rotation rot, integer param) ;&lt;br /&gt;
| osRezLink would work just like llRezObject but instead of a separate object it would be directly part of the original object's link system. This would be very useful in HUDs and attachments.&lt;br /&gt;
| osRezLink(&amp;quot;myobject&amp;quot;,llGetPos()+&amp;lt;0.0,0.0,0.5&amp;gt;,ZERO_VECTOR,ZERO_ROTATION,10);&lt;br /&gt;
| Nihlaeth&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osSaveObject();&lt;br /&gt;
| osSaveObject would be used in attachments and HUDs to save changes made while the object was worn.&lt;br /&gt;
| osSaveObject();&lt;br /&gt;
| Nihlaeth&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osPauze(integer);&lt;br /&gt;
| Adds an timer-interruptible wait state. Where sleep holds the entire script, this would function more like a non-operation for the user-set duration. For this to be a real addition, osPauze(integer) should be interruptible by any event.&lt;br /&gt;
| osPauze(5);&lt;br /&gt;
| [[User:Fritigern]]&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osDieOnAttachment();&lt;br /&gt;
| osDieOnAttachment()plays the same role as llDie() but on any attachment. Useful in HUDs instead of using the trick of resizing and hiding unwanted primitives, this function simply kills them. This function could be used with the already proposed functions to Rez Directly on Attachments&lt;br /&gt;
| osDieOnAttachment();&lt;br /&gt;
| Hussein Bakri&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  osGetTextureLocationTouch(integer number,list UVParameters);&lt;br /&gt;
| osGetTextureLocationTouch() plays the role of the following LSL functions: vector llDetectedTouchPos(integer number) [returns the position touched by the touch event (number) in region coordinates] in other words it tell which touch to examine like the family of llDetected* functions. The other function that is part of the parameters is  vector llDetectedTouchFace(integer number) [returns the face of the prim touched by the touch event number] Another function in the UVParameters would be: vector llDetectedTouchUV(integer number)[returns the position touched by touch event number as texture coordinates in the form of &amp;lt;u,v,0&amp;gt; ]&lt;br /&gt;
vector llDetectedTouchST(integer number) return the surface coordinates of the touch event number&lt;br /&gt;
llDetectedTouchNormal and llDetectedTouchBinormal get the Normal and binormal vector positions.&lt;br /&gt;
The function will look like llGetPrimParams(). Usage: every texture becomes a user interface, useful in maps also.&lt;br /&gt;
| osGetTextureLocationTouch(integer number,list UVParameters);&lt;br /&gt;
UVParameters:: [PRIM_TOUCH_POSITION, &amp;lt;x,y,z&amp;gt;, PRIM_TOUCH_FACE,x, PRIM_TEXTURE_COORDINATES,&amp;lt;x,y,0&amp;gt;,PRIM_SURFACE_COORDINATES,&amp;lt;x,y,0&amp;gt;,PRIM_TOUCH_SURFACE_NORMAL,x,PRIM_TOUCH_SURFACE_BINORMAL,x]&lt;br /&gt;
| Hussein Bakri&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osBreakLinkOnAttachment(integer alternativeAttachmentPoint);&lt;br /&gt;
| osBreakLinkOnAttachment(integer alternativeAttachmentPoint) plays the same role as llBreakLink() but for attachments only. Not only that when it Breaks the link of a prim and it set the prim to another attachment point. Require attachment permition. Useful to break a link in HUD  and create a separate HUD from the initial one. It will override the functionality of osDieAttachement() when alternativeAttachmentPoint = 0 meaning it kill the object.&lt;br /&gt;
| osBreakLinkOnAttachment(integer alternativeAttachmentPoint);&lt;br /&gt;
| Hussein Bakri&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= See Also =&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 Standards]]&lt;br /&gt;
&lt;br /&gt;
[[Category:OSSL]]&lt;br /&gt;
[[Category:Users]]&lt;br /&gt;
[[Category:Support]]&lt;br /&gt;
[[Category:Getting Started]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Todo]]&lt;/div&gt;</summary>
		<author><name>Mewtwo0641</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OSSL_Proposals</id>
		<title>OSSL Proposals</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OSSL_Proposals"/>
				<updated>2015-03-13T18:41:57Z</updated>
		
		<summary type="html">&lt;p&gt;Mewtwo0641: /* OSSL Proposal Table */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Quicklinks}}&lt;br /&gt;
{{proposal}}&lt;br /&gt;
{{content}}&lt;br /&gt;
&lt;br /&gt;
= What is OSSL? =&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This is a page dedicated to OpenSim's very own home brew custom scripting language Known as &amp;quot;'''O'''pen '''S'''im '''S'''cripting '''L'''anguage&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;'''Please see [[OSSL Standards]] for proposed naming schema'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Please post your osFunction along with a brief description of what it would be for, or do and an example of it. &lt;br /&gt;
* Make sure it begins with os NOT ll.&lt;br /&gt;
* And remember, almost anything within reason can be posted here as an idea, who knows, maybe a variation of your request can be possible.&lt;br /&gt;
* If a function could implemented in standard LSL, there is no reason to make an OS function. LSL code and function code executes at the same speed in OpenSimulator.&lt;br /&gt;
* Post your proposal to the opensim-dev mailing list so that it can be discussed to see if there is any interest. Please indicate if you are willing to implement it yourself - such proposals have a much better chance of succeeding!&lt;br /&gt;
&lt;br /&gt;
== OSSL Proposal Table ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;width:100%;border:1px solid #000000;border-collapse: collapse; white-space:normal;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#99CCFF;font-size:6pt;font-weight:bold;border-bottom:1px solid;&amp;quot; align=&amp;quot;center&amp;quot; valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| osFunction &lt;br /&gt;
| Description &lt;br /&gt;
| Example Usage &lt;br /&gt;
| Signed&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list osGetObjectNameDetails(list names, list params);&lt;br /&gt;
&lt;br /&gt;
list osGetObjectNameDetails(list names, float range, list params);&lt;br /&gt;
| Would work similarly to llGetObjectDetails() but has the advantage of specifying for an object's name (or list of names) instead of by key. If more than one name match is found then the return list will have those matches (or groups of matches if more than one parameter is supplied) sorted in order from nearest to furthest from the prim calling osGetObjectDetails. By default this would scan the entire region but optionally a range can be specified to only search within a certain radius similar to llSensor().&lt;br /&gt;
&lt;br /&gt;
This has potential, for most single item situations at least, eliminate the need for an llSensor() call and also eliminate the need for a sensor event thus reducing code complexity and make for very easy and very quick data collection to be further processed upon.&lt;br /&gt;
&lt;br /&gt;
Note: Not sure if specifying a range in the case of supplying a key would make much sense but I suppose someone out there could find it useful?&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
list objDetails;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {	&lt;br /&gt;
		//Example 1:&lt;br /&gt;
		//For this example assume this prim is located at &amp;lt;128, 125, 30&amp;gt; and we have two objects named 'Chair'.&lt;br /&gt;
		//'Chair' #1 is located at &amp;lt;128, 128, 30&amp;gt; and owned by avatar UUID 5f9c7c6c-f2c9-4196-8d8d-07cdeb71821a&lt;br /&gt;
		//'Chair' #2 is located at &amp;lt;128, 130, 30&amp;gt; and owned by avatar UUID 1c612fb2-748c-4a1a-ad57-27f488210c06&lt;br /&gt;
		&lt;br /&gt;
		objDetails = osGetObjectDetails([&amp;quot;Chair&amp;quot;], OBJECT_NAME | OBJECT_POS | OBJECT_OWNER);&lt;br /&gt;
		&lt;br /&gt;
		llOwnerSay(llDumpList2String(objDetails, &amp;quot;, &amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		//llOwnerSay() output should be: Chair, &amp;lt;128, 128, 30&amp;gt;, 5f9c7c6c-f2c9-4196-8d8d-07cdeb71821a, Chair, &amp;lt;128, 130, 30&amp;gt;, 1c612fb2-748c-4a1a-ad57-27f488210c06&lt;br /&gt;
		&lt;br /&gt;
		//------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
		&lt;br /&gt;
		//Example 2:&lt;br /&gt;
		//For this example assume everything stays the same as in Example 1 except that we're specifying a range.&lt;br /&gt;
		&lt;br /&gt;
		objDetails = osGetObjectDetails([&amp;quot;Chair&amp;quot;], 5.0, OBJECT_NAME | OBJECT_POS | OBJECT_OWNER);&lt;br /&gt;
		&lt;br /&gt;
		llOwnerSay(llDumpList2String(objDetails, &amp;quot;, &amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		//llOwnerSay() output should be: Chair, &amp;lt;128, 128, 30&amp;gt;, 5f9c7c6c-f2c9-4196-8d8d-07cdeb71821a&lt;br /&gt;
		&lt;br /&gt;
		//------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
		&lt;br /&gt;
		//Example 3:&lt;br /&gt;
		//For this example assume this prim is located at &amp;lt;128, 125, 30&amp;gt; and we have two objects: 'Chair 1' and 'Chair 2'.&lt;br /&gt;
		//'Chair 1' is located at &amp;lt;128, 128, 30&amp;gt; and owned by avatar UUID 5f9c7c6c-f2c9-4196-8d8d-07cdeb71821a&lt;br /&gt;
		//'Chair 2' is located at &amp;lt;128, 130, 30&amp;gt; and owned by avatar UUID 1c612fb2-748c-4a1a-ad57-27f488210c06&lt;br /&gt;
		&lt;br /&gt;
		objDetails = osGetObjectDetails([&amp;quot;Chair 1&amp;quot;, &amp;quot;Chair 2&amp;quot;], OBJECT_NAME | OBJECT_POS | OBJECT_OWNER);&lt;br /&gt;
		&lt;br /&gt;
		llOwnerSay(llDumpList2String(objDetails, &amp;quot;, &amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		//llOwnerSay() output should be: Chair 1, &amp;lt;128, 128, 30&amp;gt;, 5f9c7c6c-f2c9-4196-8d8d-07cdeb71821a, Chair 2, &amp;lt;128, 130, 30&amp;gt;, 1c612fb2-748c-4a1a-ad57-27f488210c06&lt;br /&gt;
		&lt;br /&gt;
		//------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
		&lt;br /&gt;
		//Example 4:&lt;br /&gt;
		//For this example assume everything stays the same as in Example 3 except that we're specifying a range.&lt;br /&gt;
		&lt;br /&gt;
		objDetails = osGetObjectDetails([&amp;quot;Chair 1&amp;quot;, &amp;quot;Chair 2&amp;quot;], 5.0, OBJECT_NAME | OBJECT_POS | OBJECT_OWNER);&lt;br /&gt;
		&lt;br /&gt;
		llOwnerSay(llDumpList2String(objDetails, &amp;quot;, &amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		//llOwnerSay() output should be: Chair 1, &amp;lt;128, 128, 30&amp;gt;, 5f9c7c6c-f2c9-4196-8d8d-07cdeb71821a&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
| mewtwo0641&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| key osSetHTTPURL(string url);&lt;br /&gt;
| Sets the prim to a private HTTP:// url for use by this script. The http_request() event would be&lt;br /&gt;
triggered &amp;amp; the prim would serve as a &amp;quot;prim-server&amp;quot; for the private HTTP:// url. Also Returns a key that is the handle used for identifying the result in the http_request event.&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
 string private_url = &amp;quot;http://thisprivatedomain.com/index.php&amp;quot;&lt;br /&gt;
 default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
    osSetHTTPURL(private_url);&lt;br /&gt;
    }&lt;br /&gt;
    http_request(key request_id, string method, string body)&lt;br /&gt;
    {&lt;br /&gt;
    if(method == &amp;quot;POST&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
    osHTTPResponse(request_id,200,&amp;quot;Your $_POST was successful&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    else if(method == &amp;quot;GET&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
    osHTTPResponse(request_id,200,&amp;quot;Wait for the server to handle your request&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
| Apollo Juez&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list osGetRegionAgentKeys(); &lt;br /&gt;
| C# Code: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
        public LSL_List osGetRegionAgentKeys()&lt;br /&gt;
       {&lt;br /&gt;
           CheckThreatLevel(ThreatLevel.None, &amp;quot;osGetRegionAgentKeys&amp;quot;);&lt;br /&gt;
           LSL_List result = new LSL_List();&lt;br /&gt;
           foreach (ScenePresence avatar in World.GetAvatars())&lt;br /&gt;
           {&lt;br /&gt;
               result.Add(avatar.UUID);&lt;br /&gt;
           }&lt;br /&gt;
           return result;&lt;br /&gt;
       }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Returns a list of keys for every agent in the region &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
list keys=osGetRegionAgentKeys(); &lt;br /&gt;
integer i;&lt;br /&gt;
integer l=llGetListLength(keys); &lt;br /&gt;
string names; for(i=0;i&amp;amp;lt;l;i++) &lt;br /&gt;
   { key id=llList2Key(keys,i); &lt;br /&gt;
      string add=llKey2Name(id); &lt;br /&gt;
      integer dist=llVecDist(llGetPos(),llList2Vector(llGetObjectDetails(id,[OBJECT_POS]),0)));&lt;br /&gt;
      add+=&amp;quot;[&amp;quot;+(string)dist+&amp;quot;]\n&amp;quot;; &lt;br /&gt;
      names+=add;&lt;br /&gt;
   } llSetText(names,&amp;amp;lt;1,1,1&amp;amp;gt;,1.0); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
| Joshua Driver&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [NEW] various os functions including osDerezObject(), osMessageAgentAttachment(), ... &lt;br /&gt;
| see [[User:Athlon_Maurer]] for full source code &lt;br /&gt;
| tested on local opensimulator 0.6.9 (some of them doesnt seem to work on 0.7.x) &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osBin(string char); &lt;br /&gt;
| To convert a char into its binary value. Will only convert 1 char at a time. &lt;br /&gt;
| string bin_a = osBin(&amp;quot;A&amp;quot;); // bin_a = &amp;quot;01000001&amp;quot;; &lt;br /&gt;
| Athlon Maurer (please send me a notecard into secondlife, if that are too much ideas xD, this hint can be deleted by an opensimulator admin, if neccesary xD)&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osHex(integer number); &lt;br /&gt;
| To convert a number into its hexadecimal value. &lt;br /&gt;
| string str_ff = osHex(255); // str_ff = &amp;quot;FF&amp;quot;; &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osAsc(string char); &lt;br /&gt;
| To convert a char into its ascii index. Will only convert 1 char at a time. &lt;br /&gt;
| integer asc_a = osAsc(&amp;quot;A&amp;quot;); // asc_a = 65; &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osScanRegionRemove(); &lt;br /&gt;
| Remove an osScanRegionRepeat(). [ nearly the same as llSensorRemove() ] &lt;br /&gt;
| osScanRegionRemove(); &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osScanRegion(string name, key id, integer type); &lt;br /&gt;
| Scan the whole region where the script task object is in regardless where it is positioned. Triggers sensor() or no_sensor(). &lt;br /&gt;
| osScanRegion(&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, AGENT); &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osScanRegionRepeat(string name, key id, integer type, float rate); &lt;br /&gt;
| Scan the whole region where the script task object is in regardless where it is positioned with rate. Triggers sensor() or no_sensor(). &lt;br /&gt;
| osScanRegionRepeat(&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, AGENT, 15.0); &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| key osGetRegionMapTexture(string RegionName) &lt;br /&gt;
| return the map texture uuid for the region named by RegionName. &lt;br /&gt;
| llSetTexture(osGetRegionMapTexture(&amp;quot;OpenSimulator Test&amp;quot;), ALL_SIDES); &lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
create a php file which is public&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// mapquery.php by Athlon Maurer (SL, OL, OS)&lt;br /&gt;
	//&lt;br /&gt;
	// hello, ive just started to learn php/mysql and this is one of my first&lt;br /&gt;
	// scripts for opensim. this script returns the texture uuid for a given&lt;br /&gt;
	// region by calling: mapquery.php?region=REGIONNAME&lt;br /&gt;
	// if a region has been found, it returns that regions map texture uuid, &lt;br /&gt;
	// otherwise it returns a null key uuid&lt;br /&gt;
	// mysql connection info is here, please make this more safe&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// region name (do not change this)&lt;br /&gt;
	$region = htmlspecialchars($_GET['region']);&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// default uuid (do not change this)&lt;br /&gt;
	$uuid = '00000000-0000-0000-0000-000000000000';&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// your mysql host name (change this)&lt;br /&gt;
	$dbhost = 'localhost';&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// your mysql user name (change this)&lt;br /&gt;
	$dbuser = 'root';&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// your mysql user password (change this)&lt;br /&gt;
	$dbpass = '';&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// your mysql opensim database (change this)&lt;br /&gt;
	$dbname = 'opensim';&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;	// try to connect&lt;br /&gt;
	if ($conn = mysql_connect($dbhost, $dbuser, $dbpass))&lt;br /&gt;
	{&lt;br /&gt;
		// try to select&lt;br /&gt;
		if ($select = mysql_select_db($dbname, $conn))&lt;br /&gt;
		{&lt;br /&gt;
			$sql = 'SELECT regionName, regionMapTexture FROM regions';&lt;br /&gt;
			$result = mysql_query($sql);&lt;br /&gt;
			while ($row = mysql_fetch_array($result, MYSQL_ASSOC))&lt;br /&gt;
			{&lt;br /&gt;
				if ($row['regionName'] == $region)&lt;br /&gt;
				{&lt;br /&gt;
					$uuid = $row['regionMapTexture'];&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			// free result&lt;br /&gt;
			mysql_free_result($result);&lt;br /&gt;
		}&lt;br /&gt;
		// close connection&lt;br /&gt;
		mysql_close($conn);&lt;br /&gt;
	}&lt;br /&gt;
	// output&lt;br /&gt;
	echo $uuid;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;?&amp;gt;&lt;br /&gt;
then llHTTPRequest(&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| Athlon Maurer (This function is available as of November 12, 2009)&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list osGetLinkPrimitiveParams(integer link, list params); &lt;br /&gt;
| Function llSetLinkPrimitiveParams() does exist, but no chance to get params from a prim in a linkset, like llGetPrimitiveParams() and llSetPrimitiveParams(). &lt;br /&gt;
| list linkparams = osGetLinkPrimitiveParams([PRIM_TYPE, PRIM_TEXTURE, ...]); &lt;br /&gt;
| Athlon Maurer (This function is available as of August 09, 2009)&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osDerezObject(key object) &lt;br /&gt;
| Deletes an InWorld-Object specified by object as uuid. Only successful if the object the script is attached to and the object which should be derezzed is owned by the same owner&amp;amp;nbsp;:). Useful if the object to be deleted should be unscripted. &lt;br /&gt;
| osDerezObject(&amp;quot;key_of_object&amp;quot;); &lt;br /&gt;
| Athlon Maurer&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| int osRestartRegion() &lt;br /&gt;
| Restarts the region the script is currently in. The script this is run in has to be owned by the master avatar for that region. Returns 1 if the region is restarting, 0 on failure. &lt;br /&gt;
| osRestartRegion(); &lt;br /&gt;
| gryc (Implemented by AFrisby)&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| int osWebTexture() &lt;br /&gt;
| Sets the texture from a web-url &lt;br /&gt;
| osWebTexture(string url,integer maptype); &lt;br /&gt;
| AFrisby?&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osGroupAdd(key, string Role) &lt;br /&gt;
| Adds user to a group with given role, default role Everyone. Returns 1 if successful 0 if fail. &lt;br /&gt;
| osGroupAdd(87f6e6a0-d884-11dc-95ff-0800200c9a66, &amp;quot;Officer&amp;quot;) &lt;br /&gt;
| Nitrus Nori&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| int osShutdownRegion() &lt;br /&gt;
| Shuts down the region the script is currently in. The script this is run in has to be owned by the master avatar for that region. Returns 1 if the region is going down, 0 on failure. &lt;br /&gt;
| osShutdownRegion(); &lt;br /&gt;
| gryc&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osAttachmentSay(integer channel, string msg) &lt;br /&gt;
| Provide a secure, low lag method of communicating between attachments over the chat channels by only sending messages to objects attached to the same avatar. Would fail (or not be heard) if in a non-attached object. &lt;br /&gt;
| osAttachmentSay(-20, &amp;quot;detatch&amp;quot;); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osMessageSecure(string message_key, string str, integer num, key id);&amp;lt;br /&amp;gt;secure_message(string message_key, string str, integer num, key id); &lt;br /&gt;
| Provide a method of sending secure, salt encripted messages sim wide. Messages would only be able to be received by scripts with the matching key in the secure_message method. &lt;br /&gt;
| osMessageSecure(&amp;quot;myPassPhrase&amp;quot;, &amp;quot;Hello World&amp;quot;, 0, NULL_KEY); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osSetText( vector color, string text [,vector color, string text]); &lt;br /&gt;
| Allow setting of multiple colors on the prim text &lt;br /&gt;
| osSetText(&amp;amp;lt;1,0,0&amp;amp;gt;,&amp;quot;Red&amp;quot;, &amp;amp;lt;0,1,0&amp;amp;gt;, &amp;quot;\nGreen&amp;quot;, &amp;amp;lt;0,0,1&amp;amp;gt;, &amp;quot;\nBlue&amp;quot;); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osSensor &lt;br /&gt;
| Gets ALL the objects in the specified range not just the first 16 &lt;br /&gt;
| (same as standard) &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list lst=osDetectObjectsInSim(key id) &lt;br /&gt;
| given an Agent Key, provide a list of ALL object owned by that agent &lt;br /&gt;
| osDetectObjectsInSim(key id) returning a strided list of [ name, &amp;amp;lt;pos&amp;amp;gt; ] &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer=osDialog([ title, label1, type1, len1, label2, type2, len2].... &lt;br /&gt;
| given title and a listing of fields, builds up a real form where to put structured checked data &lt;br /&gt;
| will return a [ value1, value2, valuen ] corresponding to fields read. Type might be something like (string, text (multiline), integer, float, currency(decimals), options(combobox) &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| key id=osMakeTextureText(string name,integer width, integer height,[posx1,posy1,font1,color1,size1,text1,posx2,posy2,font2,color2,size2,text2....]) &lt;br /&gt;
| allow for producing a texture on the fly with desired Font content from a selected font selection. Width, Height in pixels 1024x512 to control how big will be the texture &lt;br /&gt;
| will generate a texture with defined text. (Allow some support for at least ISO-8859-1) texture will be created in the object inventory. posx, posy in the range 0-1 to be pixel independent &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osMakeNotecard(string name, [ line1, line2, line3, ...]) &lt;br /&gt;
| allow creation of new notecards in current object repository &lt;br /&gt;
| generate a new asset id useful for storing modified configuration &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer handler=osReadNotecardKey(string notecard, string key) &lt;br /&gt;
| allows reading notecards (through dataserver) in format key=value in convenient and efficient way &lt;br /&gt;
| ... &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osWriteNotecardKey(string notecard, string key,string value) &lt;br /&gt;
| allows WRITING notecards in format key=value in convenient and efficient way. Might be optimized having a fixed record length &amp;quot;file&amp;quot; so to avoid rewriting of the entire notecard &lt;br /&gt;
| ... &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer handle=osXMLParser(string xml) &lt;br /&gt;
| will activate a listener xmlparser(integer handler,string parent, string field, string value) &lt;br /&gt;
| to easily parse xml without writing php external code &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osReturnObjects(key owner, integer type); &lt;br /&gt;
| Provide a scriptable method of returning objects from a sim. type would be OBJECT_SCRIPTED, OBJECT_PASSIVE or OBJECT_ALL. Would return a binary Success/Fail, and work inline with land permissions for the script owner. &lt;br /&gt;
| osReturnObjects( target, OBJECT_ALL); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osReturnItem(key item); &lt;br /&gt;
| Provide a scriptable method of returning individual objects from a sim. Would return a binary Success/Fail, and work inline with land permissions for the script owner. &lt;br /&gt;
| osReturnItem(uuid); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osSetTimerEvent(integer timer, float rate); &amp;lt;br /&amp;gt; (event) timer(integer timer_num) &lt;br /&gt;
| Support for multiple timers in a script. &lt;br /&gt;
| osSetTimerEvent(2, 0.5); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osTimerOnce(integer timer, float rate); &lt;br /&gt;
| Allow for a one shot timer event, rather than the normal repeating heartbeat type &lt;br /&gt;
| osTimerOnce(2, 10); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osVerifyScripts(); &lt;br /&gt;
| Check to see if all scripts in an object are created by the owner of the script calling the function. Return TRUE if they are, FALSE otherwise, to prevent insertion of alien scripts into an object &lt;br /&gt;
| if (!osVerifyScripts()) { llDie(); } &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osStopOtherAnimations(list animation_exceptions); &lt;br /&gt;
| Provide a method of stopping all animations on an avatar, except those defined in the list &lt;br /&gt;
| osStopOtherAnimations([&amp;quot;my_sitting_anim&amp;quot;]); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osPutScriptInLinkedSet(string name,integer linknum, integer starting_parm, integer running) &lt;br /&gt;
| Use this to propagate one script to ALL or part of linked set. &lt;br /&gt;
| Useful to have all objects in a linked set sharing a common behaviour &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osRezObject(string name, string description, integer permissionmask, list setPrimitiveObjectLikeList) will trigger the object_rez object as usual &lt;br /&gt;
| similar to llRezObject, but without the need of having a prim inside the inventory (which produced a lot of problems in deploying and in sl). Newly created object will have the same owner of current object where script is running. &lt;br /&gt;
| In case list is empty or position not specified, suitable defaults should apply like pos being 1 m higher in the z axis &lt;br /&gt;
| Sal&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osGetOwnerName(); &lt;br /&gt;
| Provide a method of getting the owner name without having to use llKey2Name &lt;br /&gt;
| myName = osGetOwnerName(); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osXMPPOpen(string server, string username, string password, string resource); &lt;br /&gt;
| Open an XMPP session to a jabber or other XMPP server, returning a handle to be able to manipulate the connection. Incoming messages to be parsed through a xmpp_message(integer handle, string sender, string service, string message) event. Accounts would have to be set up manually by the scripter, or by some other method, to prevent scripted spamming of a server, and to allow users to set up gateways and other services if needed. &lt;br /&gt;
| handle = osXMPPOpen(&amp;quot;jabber.org&amp;quot;, &amp;quot;MyObject&amp;quot;, &amp;quot;MyPassword&amp;quot;, &amp;quot;OpenSim&amp;quot;); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list osXMPPGetRosta(integer handle); &lt;br /&gt;
| Get the rosta from the XMPP server, list in the strided form of [username, presence, resource]; &lt;br /&gt;
| list presence = osXMPPGetRosta(handle); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list osXMPPGetServices(integer handle); &lt;br /&gt;
| Get a list of available services from the XMPP Server. &lt;br /&gt;
| list services = osXMPPGetServices(handle); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osXMPPAdd(string username, string service) &lt;br /&gt;
| Add a username to the account rosta. Return boolean success or fail &lt;br /&gt;
| if (osXMPPAdd(&amp;quot;Test User&amp;quot;, &amp;quot;Yahoo&amp;quot;)) { ... } &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer oxXMPPDelete(string username) &lt;br /&gt;
| Remove a username from the account rosta. Return boolean success or fail &lt;br /&gt;
| if (osXMPPDelete(&amp;quot;Test User&amp;quot;)) { ... } &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osXMPPGetStatus(string username); &lt;br /&gt;
| Poll the server for the status of a specific username on the rosta - returns would be OFFLINE, BUSY, AWAY and ONLINE &lt;br /&gt;
| if (osXMPPGetStatus(&amp;quot;Test User&amp;quot;) &amp;amp;amp; ONLINE) { ... } &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osXMPPSendMessage(integer handle, string message, string target); &lt;br /&gt;
| Send a message via the open XMPP channel, to the specified target. Return boolean success values &lt;br /&gt;
| if (osXMPPSendMessage(handle, &amp;quot;Hello World&amp;quot;, osGetOwnerName()) { llOwnerSay(&amp;quot;Successfully sent message&amp;quot;); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osXMPPClose(integer handle); &lt;br /&gt;
| Close the XMPP session &lt;br /&gt;
| osXMPPClose(); &lt;br /&gt;
| Del M&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osRezObjectKey(key object,vector pos,vector vel,rotation rot, int param); &lt;br /&gt;
| Basically llGodLikeRezObject[http://lslwiki.net/lslwiki/wakka.php?wakka=llGodLikeRezObject] with the features of llRezObject[http://lslwiki.net/lslwiki/wakka.php?wakka=llRezObject] but for everyone to use. Calls object_rez. &lt;br /&gt;
| osRezObjectKey(object_key,llGetPos(),ZERO_VECTOR,llGetRot(),0); &lt;br /&gt;
| Tdub&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osRezFromURL(string url, vector pos, vector vel, rotation rot, integer param) - calls on_rez &lt;br /&gt;
| Fetch a fragment of xml from a web server and rez its contents in-world as in 'load-xml'. Off or intergrid object repositories, such as objects stored in SVN via websvn, CMS, etc. &lt;br /&gt;
| osRezFromURL(&amp;quot;http://my.objectstore.com/myawesomeprims.xml&amp;quot;, &amp;amp;lt;1, 1, 1&amp;amp;gt;, &amp;amp;lt;0, 0, 0&amp;amp;gt;, &amp;amp;lt;0, 0, 0&amp;amp;gt;, 0) &lt;br /&gt;
| Jimbo2120&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list osRunCustom(string function, list params) &lt;br /&gt;
| Allow scripts to call external custom routines that are grid-specific without modifying the set of LSL and OSL functions. &lt;br /&gt;
| list results = osRunCustom(&amp;quot;function1&amp;quot;, [...]) &lt;br /&gt;
| Ezekiel&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osSetScriptServer() &lt;br /&gt;
| Create a 'Server' prim that allows for extended scripting capabilities: more memory, higher bandwidth when communicating with external servers, probably some database connectivity, no artificial delays, can receive IMs, etc. Could be limited to one server per prim / parcel or per avatar, could be forced to remain in a fixed position. A server is important for residents that want to set up a virtual business. &lt;br /&gt;
| osSetScriptServer() &lt;br /&gt;
| Ezekiel&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osRemoteLoadScript(string url, string target) &lt;br /&gt;
| Load a source file in txt format from &amp;quot;URL&amp;quot; and compile it into script &amp;quot;target&amp;quot; in the inventory of the same prim. Requires permission of the object owner (RequestPermission). Returns boolean success value. Replaces an existing script with same name. This function would allow updates to scripted solutions that operate in any grid and sim worldwide, allowing the creator of the solution to distribute code fixes and implement new functions. Since the source code is distributed openly, it can be copied and modified by anyone. A function that would allow for secure code distribution, protecting copyrights and certificates, would also be very interesting but should be far more difficult to implement. &lt;br /&gt;
| integer updatestatus = osRemoteLoadScript(&amp;quot;http://www.xyz.com/updates/script1013.txt&amp;quot;, &amp;quot;betterscript&amp;quot; ) &lt;br /&gt;
| Ezekiel&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osSetCustomPrimitiveAttributes(list params) &lt;br /&gt;
| Set some custom persistent primitive attributes, the same way as llSetPrimitiveParams do. The attribute name has to be specified as a string, then the attribute type using a lSL constant. In the example, we set a &amp;quot;magnet&amp;quot; custom attribute as -0.5, supposing a customized physic engine handles this attribute to provide prim attraction. &lt;br /&gt;
| integer osSetCustomPrimitiveAttributes([&amp;quot;magnet&amp;quot;, TYPE_FLOAT, -0.5]) &lt;br /&gt;
| Grumly&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| list osGetCustomPrimitiveAttributes(list paramNames) &lt;br /&gt;
| Return a list values of the specified attributes names, the same way as llGetPrimitiveParams do. &lt;br /&gt;
| list osGetCustomPrimitiveAttributes([&amp;quot;Magnetic&amp;quot;]) &lt;br /&gt;
| Grumly &lt;br /&gt;
&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osSyncUUID(key oldUUID, key newUUID); &lt;br /&gt;
| Allows to change the UUID of an avatar or item(requires permission from owner). &lt;br /&gt;
| Suppose a terminal in the LL-grid wants to communicate with an OS-Grid terminal. It can only send messages, if the UUID's of avatars match. An OS-Grid script can get the avatar's LL-UUID by calling the dataserver script. Then it calls osSyncUUID(llDetectedKey(0), keyFromHTTPRequest); . Now the two keys are equal, and avatar-avatar communication between grids can take place! &lt;br /&gt;
| Phrearch &lt;br /&gt;
&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osTeleport(string RegionName, int x, int y, int z); &lt;br /&gt;
| Teleports an avatar to a custom region &lt;br /&gt;
as&amp;amp;nbsp;: osTeleportAgent(key agentId, string regionName, vector position, vector lookAt); &lt;br /&gt;
&lt;br /&gt;
| (this is implemented now - edited April 2009 by Wordfromthe Wise) &lt;br /&gt;
| Phrearch&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osSetStatus(integer status, integer value); &lt;br /&gt;
| Improved verion of the LSL function llSetStatus. &lt;br /&gt;
| The function works basically the same way as llSetStatus, except that an extra flag is added named STATUS_PHYSICS_ROOT. When this flag is TRUE, physics would be enabled Only for the root prim in a linked set, while the other prims in the set would behave as phantom. This would be useful for bypassing the 32-prim physics limit for vehicles by using only the root prim as a collision mesh. &lt;br /&gt;
| Pesho&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| vector osGetBonePos(); &lt;br /&gt;
| When called from an Attachment, retrieves the position of the bone it is attached to, in Region Coordinates. &lt;br /&gt;
| When llGetPos() is called from an attachment, the vector returned is the one of the avatar center, whereas llGetLocalPos() returns the local offset from the bone it is attached to. It would be useful to know where the attachment's location really is in world space. &lt;br /&gt;
| Pesho&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osGetOSLLRelease(); &lt;br /&gt;
| When called return the actual release of OSSL running on the sim. &lt;br /&gt;
| if osGetOSSLRelease() &amp;amp;gt; 1.1 {llSay(0,&amp;quot;good&amp;quot;);} &lt;br /&gt;
| Sacha Magne&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| List osGetServerLib(); &lt;br /&gt;
| When called return a list of all the additional libraries loaded on the server. it will avoid any scripts using a specific library to crash in case of missing libs. &lt;br /&gt;
| List lib=osGetServerLib(); &lt;br /&gt;
| Sacha Magne&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osSetAttachmentPoint(integer attachment); &lt;br /&gt;
| When called from an Attachment sets the default attachment point to attachment value. &lt;br /&gt;
| osSetAttachmentPoint(ATTACH_HUD_BOTTOM_RIGHT); &lt;br /&gt;
| Peter&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osMySQLQuery(string query); &lt;br /&gt;
| Used to get informations out of a sql database. Works together with osMySQLConnect(), osMySQLSelectDatabase() and osMySQLClose(). &lt;br /&gt;
| osMySQLQuery(&amp;quot;Select name FROM user LIMIT 0,1;&amp;quot;); &lt;br /&gt;
| Peter&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osGetGridName(); &lt;br /&gt;
| When called it return the hostname of the grid server. Useful to find out what grid you are on. &lt;br /&gt;
| string gridHostname = osGetGridHostname(); &lt;br /&gt;
| Patnad&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
                   Already implemented. See [[osName2Key]]&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| key osName2Key(string avatarname); &lt;br /&gt;
| When called it return the key associated with a Avatar Name. &lt;br /&gt;
| key avKey = osName2Key(&amp;quot;avatar name&amp;quot;); &lt;br /&gt;
| Patnad&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| vector osParcelCenterpoint(vector pos); &lt;br /&gt;
| When called it return the vector that represent the center point of the current parcel. Same height as the object running the script but centerpoint for x,y. &lt;br /&gt;
| vector parcel_center = osParcelCenterpoint(llGetPos()); &lt;br /&gt;
| Patnad&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osSetMapDestination(integer mode, string simname, vector position, vector lookat); &lt;br /&gt;
| Sets a new &amp;quot;beacon&amp;quot; (red pole) without opening the worldmap: mode is for 1 (simname is a standard region name) or 0 (simname is a SLURL). If the code can handle standard sim names and SLURL(s) at the same time, the &amp;quot;mode&amp;quot; flag can be left behind. &lt;br /&gt;
| integer error = osSetMapDestination(TRUE, &amp;quot;cyberlandia&amp;quot;, &amp;amp;lt;128.0, 128.0, 0.0&amp;amp;gt;, ZERO_VECTOR); &lt;br /&gt;
&amp;amp;nbsp;If error is FALSE then no errors have occurred setting up the new beacon. &amp;amp;nbsp;Errors can arise using unknown simnames/SLURL(s), out of ranges vector coords and so on (nearly the same as llSetMapDestination). &lt;br /&gt;
&lt;br /&gt;
| Elwe Ewing&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osTeleportAgentPerm(key agentId, string regionName, vector position, vector lookAt); &lt;br /&gt;
osTeleportAgentPerm(key agentId, vector position, vector lookAt); &lt;br /&gt;
&lt;br /&gt;
| Works similarly as the two implemented osTeleportAgent but requires (at least the first time) the PERMISSION_TELEPORT flag set (via llRequestPermissions(key id, PERMISSION_TELEPORT); which should be implemented) and can be used by everyone (or restricted to a member of the group wich the region is deed, maybe with a new &amp;quot;Restrict teleports&amp;quot; Estate flag). &lt;br /&gt;
| &amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
 // requests permission to Teleport then do it&lt;br /&gt;
 &lt;br /&gt;
 key  avie = NULL_KEY;&lt;br /&gt;
 &lt;br /&gt;
 default&lt;br /&gt;
 {&lt;br /&gt;
   state_entry()&lt;br /&gt;
   {&lt;br /&gt;
       llSay(0, &amp;quot;Touch to be teleported&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   run_time_permissions(integer vBitPermissions)&lt;br /&gt;
   {&lt;br /&gt;
       if(PERMISSION_TELEPORT &amp;amp;amp; vBitPermissions){&lt;br /&gt;
           osTeleportAgentPerm(avie, &amp;amp;lt;128.0,128.0,0.0&amp;amp;gt;,&lt;br /&gt;
 ZERO_VECTOR);&lt;br /&gt;
       } else {&lt;br /&gt;
           llSay(0, &amp;quot;You deny teleport permission&amp;quot;);&lt;br /&gt;
       }&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   touch_start(integer num_detected)&lt;br /&gt;
   {&lt;br /&gt;
       avie = llDetectedKey(0);&lt;br /&gt;
 &lt;br /&gt;
       llRequestPermissions(avie,&lt;br /&gt;
           PERMISSION_TELEPORT &amp;amp;#124;&lt;br /&gt;
           PERMISSION_TRIGGER_ANIMATION &amp;amp;#124;&lt;br /&gt;
           0);&lt;br /&gt;
       integer perm = llGetPermissions();&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
| Elwe Ewing&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osGetSimulatorStatus(string Simulator) &lt;br /&gt;
| Extended / Enhanced version of llGetSimulatorData. &lt;br /&gt;
Purpose: When an avatar is Teleported with osTeleportAgent, there is no check to see if a given simulator is available. If it's down, Agent is Teleported to NULL resulting in Agent being fragged and viewer broken, requiring a relog. This would be especially useful for HyperGrid Teleporting. Returns: integer &amp;quot;0 = DOWN&amp;quot;, &amp;quot;1 = UP&amp;quot;, &amp;quot;2 = UNKNOWN&amp;quot; Security: Would require some form of Throttle to prevent recurring requests of destination Simulator. Command: osGetSimulatorStatus(string Simulator) Where Simulator = &amp;quot;RegionName&amp;quot;, &amp;quot;IPAddress:PortNum&amp;quot;, &amp;quot;HostName:PortNum&amp;quot; &lt;br /&gt;
&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
 // CHecks if simulator is online before teleporting agent -kizmut&lt;br /&gt;
 &lt;br /&gt;
 string destination = &amp;quot;Wright Plaza&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 default&lt;br /&gt;
 {&lt;br /&gt;
   state_entry()&lt;br /&gt;
   {&lt;br /&gt;
       llSay(0, &amp;quot;Touch to be teleported to: &amp;quot;+destination);&lt;br /&gt;
   }&lt;br /&gt;
   touch_start(integer num_detected)&lt;br /&gt;
   {&lt;br /&gt;
       llSay(0,llDetectedName(0)+&amp;quot; requesting teleport to: &amp;quot;+destination);&lt;br /&gt;
       integer sim_stat = osGetSimulatorStatus(destination);&lt;br /&gt;
       if (sim_stat == 2) {&lt;br /&gt;
           llSay(0, &amp;quot;Could not teleport to &amp;quot;+destination+&amp;quot;: Region status unknown.&amp;quot;);&lt;br /&gt;
       } &lt;br /&gt;
       else if (sim_stat) {&lt;br /&gt;
           osTeleportAgent(llDetectedKey(0),destination,ZERO_VECTOR);&lt;br /&gt;
       }&lt;br /&gt;
       else {&lt;br /&gt;
           llSay(0, &amp;quot;Could not teleport to &amp;quot;+destination+&amp;quot;: Region is down&amp;quot;);&lt;br /&gt;
       }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
| WhiteStar Magic&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osTeleportOwner(string regionName, vector position, vector lookAt); &lt;br /&gt;
| Works similarly as osTeleportAgent but could only teleport the owner of the script itself. Would be very useful for HUD and would not require any authorization. &lt;br /&gt;
| integer error=osTeleportOwner(&amp;quot;Snoopies&amp;quot;,&amp;amp;lt;100,25,25&amp;amp;gt;,ZERO_VECTOR); &lt;br /&gt;
| Agnes Chalet &lt;br /&gt;
&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
                   Already implemented. See [[osName2Key]]&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| string osName2Key(string name); &lt;br /&gt;
| A command which gives the UUID of an agent. Would work in the same way as llKey2Name, but in reverse. (Linden Lab may implement this first) &lt;br /&gt;
| osName2Key(&amp;quot;Bob Smith&amp;quot;); &lt;br /&gt;
| Drava&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| integer osHyperGrid(); &lt;br /&gt;
| Detects whether or not the region the person is in is Hypergrid enabled. Could be expanded to any region in the current grid. &lt;br /&gt;
| osHyperGrid() == TRUE &lt;br /&gt;
| Drava&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| void osTurnAvatar(rotation rot); &lt;br /&gt;
| Turns an avatar about the vertical axis to rotation rot relative to the grid rotation. &lt;br /&gt;
| osTurnAvatar(newrot); // turns the avatar to the new rotation specified by newrot. &lt;br /&gt;
| Valradica&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background-color:#CCFFCC;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osRezLink(string inventory, vector position, vector velocity, rotation rot, integer param) ;&lt;br /&gt;
| osRezLink would work just like llRezObject but instead of a separate object it would be directly part of the original object's link system. This would be very useful in HUDs and attachments.&lt;br /&gt;
| osRezLink(&amp;quot;myobject&amp;quot;,llGetPos()+&amp;lt;0.0,0.0,0.5&amp;gt;,ZERO_VECTOR,ZERO_ROTATION,10);&lt;br /&gt;
| Nihlaeth&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osSaveObject();&lt;br /&gt;
| osSaveObject would be used in attachments and HUDs to save changes made while the object was worn.&lt;br /&gt;
| osSaveObject();&lt;br /&gt;
| Nihlaeth&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osPauze(integer);&lt;br /&gt;
| Adds an timer-interruptible wait state. Where sleep holds the entire script, this would function more like a non-operation for the user-set duration. For this to be a real addition, osPauze(integer) should be interruptible by any event.&lt;br /&gt;
| osPauze(5);&lt;br /&gt;
| [[User:Fritigern]]&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osDieOnAttachment();&lt;br /&gt;
| osDieOnAttachment()plays the same role as llDie() but on any attachment. Useful in HUDs instead of using the trick of resizing and hiding unwanted primitives, this function simply kills them. This function could be used with the already proposed functions to Rez Directly on Attachments&lt;br /&gt;
| osDieOnAttachment();&lt;br /&gt;
| Hussein Bakri&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  osGetTextureLocationTouch(integer number,list UVParameters);&lt;br /&gt;
| osGetTextureLocationTouch() plays the role of the following LSL functions: vector llDetectedTouchPos(integer number) [returns the position touched by the touch event (number) in region coordinates] in other words it tell which touch to examine like the family of llDetected* functions. The other function that is part of the parameters is  vector llDetectedTouchFace(integer number) [returns the face of the prim touched by the touch event number] Another function in the UVParameters would be: vector llDetectedTouchUV(integer number)[returns the position touched by touch event number as texture coordinates in the form of &amp;lt;u,v,0&amp;gt; ]&lt;br /&gt;
vector llDetectedTouchST(integer number) return the surface coordinates of the touch event number&lt;br /&gt;
llDetectedTouchNormal and llDetectedTouchBinormal get the Normal and binormal vector positions.&lt;br /&gt;
The function will look like llGetPrimParams(). Usage: every texture becomes a user interface, useful in maps also.&lt;br /&gt;
| osGetTextureLocationTouch(integer number,list UVParameters);&lt;br /&gt;
UVParameters:: [PRIM_TOUCH_POSITION, &amp;lt;x,y,z&amp;gt;, PRIM_TOUCH_FACE,x, PRIM_TEXTURE_COORDINATES,&amp;lt;x,y,0&amp;gt;,PRIM_SURFACE_COORDINATES,&amp;lt;x,y,0&amp;gt;,PRIM_TOUCH_SURFACE_NORMAL,x,PRIM_TOUCH_SURFACE_BINORMAL,x]&lt;br /&gt;
| Hussein Bakri&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-size:8pt;border-bottom:1px solid;&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| osBreakLinkOnAttachment(integer alternativeAttachmentPoint);&lt;br /&gt;
| osBreakLinkOnAttachment(integer alternativeAttachmentPoint) plays the same role as llBreakLink() but for attachments only. Not only that when it Breaks the link of a prim and it set the prim to another attachment point. Require attachment permition. Useful to break a link in HUD  and create a separate HUD from the initial one. It will override the functionality of osDieAttachement() when alternativeAttachmentPoint = 0 meaning it kill the object.&lt;br /&gt;
| osBreakLinkOnAttachment(integer alternativeAttachmentPoint);&lt;br /&gt;
| Hussein Bakri&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= See Also =&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 Standards]]&lt;br /&gt;
&lt;br /&gt;
[[Category:OSSL]]&lt;br /&gt;
[[Category:Users]]&lt;br /&gt;
[[Category:Support]]&lt;br /&gt;
[[Category:Getting Started]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Todo]]&lt;/div&gt;</summary>
		<author><name>Mewtwo0641</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsIsNpc</id>
		<title>OsIsNpc</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsIsNpc"/>
				<updated>2013-08-05T18:11:50Z</updated>
		
		<summary type="html">&lt;p&gt;Mewtwo0641: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax=integer osIsNpc(key npc)&lt;br /&gt;
|csharp_syntax=&lt;br /&gt;
|description=Returns NPC status on the provided key&lt;br /&gt;
&lt;br /&gt;
* Returns TRUE (1) / FALSE (0) if key provided is an NPC&lt;br /&gt;
* Returns FALSE (0) if the key provided doesn't exist in the scene.&lt;br /&gt;
&lt;br /&gt;
|threat_level=none&lt;br /&gt;
|ossl_example=&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Test For NPC&lt;br /&gt;
// Author: mewtwo0641&lt;br /&gt;
// Date: 8-5-13&lt;br /&gt;
&lt;br /&gt;
// This script listens for a key on channel 1 which will then&lt;br /&gt;
// tell you if the specified key is an NPC or not.&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llListen(1, &amp;quot;&amp;quot;, llGetOwner(), &amp;quot;&amp;quot;);    &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer channel , string name, key id, string message)&lt;br /&gt;
    {&lt;br /&gt;
        if(channel == 1)&lt;br /&gt;
        {&lt;br /&gt;
            integer isNPC = osIsNpc((key)message); //Get information on the key.&lt;br /&gt;
            string keyInfo = llKey2Name((key)message) + &amp;quot; (&amp;quot; + message + &amp;quot;)&amp;quot;;&lt;br /&gt;
        &lt;br /&gt;
            if(isNPC) //Supplied key is an NPC&lt;br /&gt;
                llOwnerSay(keyInfo + &amp;quot; is an NPC.&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            else if(!isNPC)&lt;br /&gt;
            {&lt;br /&gt;
                //We now know that the supplied key isn't an NPC.&lt;br /&gt;
                //Let's find out if the key exists as an agent or not.&lt;br /&gt;
                &lt;br /&gt;
                if(llGetAgentSize((key)message) != ZERO_VECTOR) //Supplied key is an agent and not an npc&lt;br /&gt;
                    llOwnerSay(keyInfo + &amp;quot; is an AGENT and not an NPC&amp;quot;);&lt;br /&gt;
                    &lt;br /&gt;
                else //Supplied key is either not an NPC or the NPC doesn't exist&lt;br /&gt;
                    llOwnerSay(keyInfo + &amp;quot; is either not an NPC or the NPC does not exist.&amp;quot;);&lt;br /&gt;
            } &lt;br /&gt;
        }   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|additional_info=&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Mewtwo0641</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsForceAttachToOtherAvatarFromInventory</id>
		<title>OsForceAttachToOtherAvatarFromInventory</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsForceAttachToOtherAvatarFromInventory"/>
				<updated>2013-07-04T13:50:20Z</updated>
		
		<summary type="html">&lt;p&gt;Mewtwo0641: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax=void osForceAttachToOtherAvatarFromInventory(string rawAvatarId, string itemName, integer attachmentPoint)&lt;br /&gt;
|csharp_syntax=&lt;br /&gt;
|description=Attach an inventory item in the object containing this script to any avatar in the region without asking for PERMISSION_ATTACH.  Nothing happens if the avatar is not in the region.&lt;br /&gt;
&lt;br /&gt;
* rawAvatarId - The UUID of the avatar to which to attach.  Nothing happens if this is not a UUID.&lt;br /&gt;
* itemName - The name of the item.  If this is not found then a warning is said to the owner.&lt;br /&gt;
* attachmentPoint - The attachment point.  For example, ATTACH_CHEST.&lt;br /&gt;
&lt;br /&gt;
In OpenSimulator 0.7.4.&lt;br /&gt;
|threat_level=severe&lt;br /&gt;
|ossl_example=&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//Author: mewtwo0641&lt;br /&gt;
//Simple example for osForceAttachToOtherAvatarFromInventory that attaches a list of items on touch&lt;br /&gt;
&lt;br /&gt;
//List of items in object inventory to be attached in format: item_name, attach_point&lt;br /&gt;
list items =&lt;br /&gt;
[&lt;br /&gt;
	&amp;quot;Belt&amp;quot;, (string)ATTACH_BELLY,&lt;br /&gt;
	&amp;quot;Hat&amp;quot;, (string)ATTACH_HEAD,&lt;br /&gt;
        &amp;quot;Left Shoe&amp;quot;, (string)ATTACH_LFOOT,&lt;br /&gt;
        &amp;quot;Right Shoe&amp;quot;, (string)ATTACH_RFOOT&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
key toucher;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer x)&lt;br /&gt;
    {&lt;br /&gt;
        toucher = llDetectedKey(0);&lt;br /&gt;
        &lt;br /&gt;
        integer i = 0;&lt;br /&gt;
        &lt;br /&gt;
        for(i; i &amp;lt; llGetListLength(items); i++)&lt;br /&gt;
        {  &lt;br /&gt;
            string name = llList2String(items, i);      &lt;br /&gt;
            integer point = (integer)llList2String(items, i + 1);            &lt;br /&gt;
            osForceAttachToOtherAvatarFromInventory(toucher, name, point);&lt;br /&gt;
            i++;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|additional_info=&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Mewtwo0641</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsNpcCreate</id>
		<title>OsNpcCreate</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsNpcCreate"/>
				<updated>2012-07-07T13:59:50Z</updated>
		
		<summary type="html">&lt;p&gt;Mewtwo0641: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|function_syntax=key osNpcCreate(string firstname, string lastname, vector position, string cloneFrom)&lt;br /&gt;
&lt;br /&gt;
key osNpcCreate(string firstname, string lastname, vector position, string cloneFrom, integer options)&lt;br /&gt;
|ossl_example=&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// touch to create a NPC clone of the toucher in front of this emitter&lt;br /&gt;
// NPC will move to the toucher, then will greet them.&lt;br /&gt;
// Touch again to remove the NPC&lt;br /&gt;
&lt;br /&gt;
key npc;&lt;br /&gt;
vector toucherPos;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer number)&lt;br /&gt;
    {&lt;br /&gt;
        vector npcPos = llGetPos() + &amp;lt;1,0,0&amp;gt;;&lt;br /&gt;
        osAgentSaveAppearance(llDetectedKey(0), &amp;quot;appearance&amp;quot;);&lt;br /&gt;
        // coud use avatar UUID directly in osNpcCreate, but then NPC appearance is not persisted&lt;br /&gt;
        npc = osNpcCreate(&amp;quot;ImYour&amp;quot;, &amp;quot;Clone&amp;quot;, npcPos, &amp;quot;appearance&amp;quot;);&lt;br /&gt;
        toucherPos = llDetectedPos(0);&lt;br /&gt;
        state hasNPC;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
state hasNPC&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        osNpcMoveTo(npc, toucherPos + &amp;lt;3,0,0&amp;gt;); &lt;br /&gt;
        osNpcSay(npc, &amp;quot;Hi there! My name is &amp;quot; + llKey2Name(npc));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer number)&lt;br /&gt;
    {&lt;br /&gt;
        osNpcSay(npc, &amp;quot;Goodbye!&amp;quot;);&lt;br /&gt;
        osNpcRemove(npc);&lt;br /&gt;
        npc = NULL_KEY;&lt;br /&gt;
        state default;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|description=*Creates an NPC named '''firstname''' '''lastname''' at '''position''' from avatar appearance resource '''cloneFrom'''&lt;br /&gt;
|additional_info= Some more useful info:&lt;br /&gt;
* NPC stands for Non-Player Character.&lt;br /&gt;
* You can clone an appearance from a saved appearance notecard name or UUID, or from the UUID of an avatar logged into the same region or sim.&lt;br /&gt;
* You can create and load appearance notecards with the following functions: [[osOwnerSaveAppearance]], [[osAgentSaveAppearance]], [[osNpcLoadAppearance]], [[osNpcSaveAppearance]].&lt;br /&gt;
* '''In current OpenSimulator development code (from commit c4972e77 on Thu Jan 12 2012), an overloaded version of osNpcCreate() has been added.'''&lt;br /&gt;
** This has the signature key osNpcCreate(string firstname, string lastname, vector position, string cloneFrom, integer options).&lt;br /&gt;
** The options field can be either OS_NPC_CREATOR_OWNED or OS_NPC_NOT_OWNED.&lt;br /&gt;
** OS_NPC_CREATOR_OWNED will create an 'owned' NPC that will only respond to osNpc* commands issued from scripts that have the same owner as the one that created the NPC.&lt;br /&gt;
** OS_NPC_NOT_OWNED will create an 'unowned' NPC that will respond to any script that has OSSL permissions to call osNpc* commands.&lt;br /&gt;
** Example: &amp;quot;key npc = osNpcCreate(&amp;quot;ImYour&amp;quot;, &amp;quot;Clone&amp;quot;, npcPos, &amp;quot;appearance&amp;quot;, OS_NPC_CREATOR_OWNED);&amp;quot;&lt;br /&gt;
** The existing osNpcCreate() function without the options field will continue to exist.&lt;br /&gt;
* From git master commit 3b59af22 on Friday Jan 13 2012 (after the OpenSimulator 0.7.2 release), the avatar created by the existing osNpc* function without the options parameter will create an 'owned' NPC rather than an 'unowned' one.  Please see the discussion above for information on these terms.  This is a hopefully rare case where the behaviour of an existing function changes slightly.  If you continue to need an 'unowned' NPC, please use the OS_NPC_NOT_OWNED option described above.&lt;br /&gt;
* Use OS_NPC_SENSE_AS_AGENT option if you would like for the created NPC to be able to be detected via a sensor and want to maintain llSensor() compatibility with type AGENT.&lt;br /&gt;
|&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Mewtwo0641</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsNpcCreate</id>
		<title>OsNpcCreate</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsNpcCreate"/>
				<updated>2012-07-07T13:52:14Z</updated>
		
		<summary type="html">&lt;p&gt;Mewtwo0641: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|function_syntax=key osNpcCreate(string firstname, string lastname, vector position, string cloneFrom)&lt;br /&gt;
|ossl_example=&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// touch to create a NPC clone of the toucher in front of this emitter&lt;br /&gt;
// NPC will move to the toucher, then will greet them.&lt;br /&gt;
// Touch again to remove the NPC&lt;br /&gt;
&lt;br /&gt;
key npc;&lt;br /&gt;
vector toucherPos;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer number)&lt;br /&gt;
    {&lt;br /&gt;
        vector npcPos = llGetPos() + &amp;lt;1,0,0&amp;gt;;&lt;br /&gt;
        osAgentSaveAppearance(llDetectedKey(0), &amp;quot;appearance&amp;quot;);&lt;br /&gt;
        // coud use avatar UUID directly in osNpcCreate, but then NPC appearance is not persisted&lt;br /&gt;
        npc = osNpcCreate(&amp;quot;ImYour&amp;quot;, &amp;quot;Clone&amp;quot;, npcPos, &amp;quot;appearance&amp;quot;);&lt;br /&gt;
        toucherPos = llDetectedPos(0);&lt;br /&gt;
        state hasNPC;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
state hasNPC&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        osNpcMoveTo(npc, toucherPos + &amp;lt;3,0,0&amp;gt;); &lt;br /&gt;
        osNpcSay(npc, &amp;quot;Hi there! My name is &amp;quot; + llKey2Name(npc));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer number)&lt;br /&gt;
    {&lt;br /&gt;
        osNpcSay(npc, &amp;quot;Goodbye!&amp;quot;);&lt;br /&gt;
        osNpcRemove(npc);&lt;br /&gt;
        npc = NULL_KEY;&lt;br /&gt;
        state default;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|description=*Creates an NPC named '''firstname''' '''lastname''' at '''position''' from avatar appearance resource '''cloneFrom'''&lt;br /&gt;
|additional_info= Some more useful info:&lt;br /&gt;
* NPC stands for Non-Player Character.&lt;br /&gt;
* You can clone an appearance from a saved appearance notecard name or UUID, or from the UUID of an avatar logged into the same region or sim.&lt;br /&gt;
* You can create and load appearance notecards with the following functions: [[osOwnerSaveAppearance]], [[osAgentSaveAppearance]], [[osNpcLoadAppearance]], [[osNpcSaveAppearance]].&lt;br /&gt;
* '''In current OpenSimulator development code (from commit c4972e77 on Thu Jan 12 2012), an overloaded version of osNpcCreate() has been added.'''&lt;br /&gt;
** This has the signature key osNpcCreate(string firstname, string lastname, vector position, string cloneFrom, integer options).&lt;br /&gt;
** The options field can be either OS_NPC_CREATOR_OWNED or OS_NPC_NOT_OWNED.&lt;br /&gt;
** OS_NPC_CREATOR_OWNED will create an 'owned' NPC that will only respond to osNpc* commands issued from scripts that have the same owner as the one that created the NPC.&lt;br /&gt;
** OS_NPC_NOT_OWNED will create an 'unowned' NPC that will respond to any script that has OSSL permissions to call osNpc* commands.&lt;br /&gt;
** Example: &amp;quot;key npc = osNpcCreate(&amp;quot;ImYour&amp;quot;, &amp;quot;Clone&amp;quot;, npcPos, &amp;quot;appearance&amp;quot;, OS_NPC_CREATOR_OWNED);&amp;quot;&lt;br /&gt;
** The existing osNpcCreate() function without the options field will continue to exist.&lt;br /&gt;
* From git master commit 3b59af22 on Friday Jan 13 2012 (after the OpenSimulator 0.7.2 release), the avatar created by the existing osNpc* function without the options parameter will create an 'owned' NPC rather than an 'unowned' one.  Please see the discussion above for information on these terms.  This is a hopefully rare case where the behaviour of an existing function changes slightly.  If you continue to need an 'unowned' NPC, please use the OS_NPC_NOT_OWNED option described above.&lt;br /&gt;
* Use OS_NPC_SENSE_AS_AGENT option if you would like for the created NPC to be able to be detected via a sensor and want to maintain llSensor() compatibility with type AGENT.&lt;br /&gt;
|&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Mewtwo0641</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-02-17T18:05:29Z</updated>
		
		<summary type="html">&lt;p&gt;Mewtwo0641: /* Sensing */&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, OpenSim had provided a number of functions for creating and manipulating NPCs.  These replace the previous functions, that had stopped working by OpenSim 0.7.1.1 (possibly broken since OpenSim 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 OpenSim 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;
==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>Mewtwo0641</name></author>	</entry>

	</feed>