<?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=Drava</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=Drava"/>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Special:Contributions/Drava"/>
		<updated>2026-06-09T18:56:20Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.19.9</generator>

	<entry>
		<id>http://opensimulator.org/wiki/Talk:LSL_osFunctions</id>
		<title>Talk:LSL osFunctions</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Talk:LSL_osFunctions"/>
				<updated>2009-08-17T16:10:17Z</updated>
		
		<summary type="html">&lt;p&gt;Drava: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Page renaming==&lt;br /&gt;
&lt;br /&gt;
There is an updated page at [[OSSL_Proposals]]. I suggest we use this, because the name of this page doesn't reflect the content(ossl!=lsl). I'll just change the reference on the script status page, and hope everyone agrees. The table on the other page is also updated, and aligns better within the wiki.&lt;br /&gt;
&lt;br /&gt;
-Agreeing with above. I'm tagging the page as Obsolete and leaving a link to the updated page at the top. If anyone wishes to simply delete this page, go right ahead.&lt;br /&gt;
&lt;br /&gt;
== os function vs primitive object model ==&lt;br /&gt;
&lt;br /&gt;
os function is a great idea ! Anyway, knowing c# scripting is possible, I cant prevent myself to dream about a powerfull region/asset/primitives object model which would make possible things like ''Region.GetObject(uuid).Primitives[3].Faces[1].Alpha = .5;'' or ''Region.Restart();'' or ''Region.GetObject(uuid).Primitives[4].Unlink();'' or ''Region.GetObject(uuid).Color = Color.Yellow;'', ''Region.GetObject(uuid).RootPrimitive.HoverText=&amp;quot;Hello, Avatar!''... and so on. Just imagine... :p [[User:Grumly|Grumly]] 07:51, 28 December 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
== string osConsole() ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;s&amp;gt;Why not have a function that enters any string as if you typed it in the console, rather than having seperate ones for everything?&amp;lt;/s&amp;gt; -[[User:Cow Taurog|Cow Taurog]] 22:32, 27 December 2007 (PST)&lt;br /&gt;
:osConsoleCommand is here as of r3500, or so it says in the revision logs. -[[User:Cow Taurog|Cow Taurog]] 01:56, 18 February 2008 (PST)&lt;br /&gt;
&lt;br /&gt;
== on secure messaging ==&lt;br /&gt;
&lt;br /&gt;
While I do not insist, I have reasons to believe that secure messaging (many people has own opinion about security, and essentially spectrum of definition is wider than one can even imagine) shall be done on client side. Main arguments - control and care about secure methods shall be always at hands of end user, not one server side where it is rather imaginary. [[User:Silpol|Silpol]] 07:31, 28 December 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
Question: Why not implement something like osLoadTexture() and then use osSetTexture ? Loading and applying the texture should be separated to avoid unnecessary multiple downloads. osLoadTexture should also check if the texture is already available in this grid - Ezekiel&lt;br /&gt;
&lt;br /&gt;
Remark: an enhanced type of Dialog that allows to create HTML-like forms is highly desireable. It would require static text, input fields with modifyable default data, selections, formatting, etc. Input and output might be either through structured lists or through tree-like data structures - Ezekiel&lt;/div&gt;</summary>
		<author><name>Drava</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/NAT_Loopback_Routers</id>
		<title>NAT Loopback Routers</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/NAT_Loopback_Routers"/>
				<updated>2009-08-17T01:49:38Z</updated>
		
		<summary type="html">&lt;p&gt;Drava: Could be potentially a great resource. Needs more info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
{{Template:Quicklinks}}&lt;br /&gt;
{{content}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page show a list of routers supporting NAT Loopback feature in order to be able to TP in your region when you host it at home on the same computer or local network. Please, feel free to contribute such a list especially if these routers are cheap :D&lt;br /&gt;
&lt;br /&gt;
&amp;quot;D-Link DGL-4xxx series of routers have the largest available nat table of any router on the market&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;These routers range from 70$-180$ USD depending on where you live and purchase from.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* D-Link DGL-4500 : http://games.dlink.com/products/?pid=643&lt;br /&gt;
* D-Link DGL-4300 : http://games.dlink.com/products/?pid=370&lt;br /&gt;
* D-Link DGL-4100 : http://games.dlink.com/products/?pid=371&lt;br /&gt;
&lt;br /&gt;
Other routers&lt;br /&gt;
&lt;br /&gt;
* NETGEAR WNR834M : ftp://downloads.netgear.com/files/wnr834m_ref_manual.pdf&lt;br /&gt;
* Linksys WRT54G : http://en.wikipedia.org/wiki/Linksys_WRT54G_series&lt;br /&gt;
* Arris TM502b : http://portforward.com/english/routers/port_forwarding/Arris/TM502b/&lt;br /&gt;
* NetGear WGR614 : has been confirmed to work out of the box&lt;br /&gt;
 (note:  NetGear WGR614 does not work with ISP required gateway modems)&lt;br /&gt;
&lt;br /&gt;
Routers that users has experienced problems with&lt;br /&gt;
&lt;br /&gt;
* Belkin F5D7230-4&lt;br /&gt;
(the router might work if 3rd party firmware is used, such as DD-WRT : http://www.dd-wrt.com/ )&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
For Linux based Netfilter (iptables) routers, you want to set up the NAT table with some extra entries&lt;br /&gt;
The following script is something to get you started, you'll need to fix up the variables at the top to match your system and network.&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# vvvvv - Fix these! - vvvvv&lt;br /&gt;
IPTABLES=/usr/sbin/iptables&lt;br /&gt;
LAN_NETWORK=192.168.0.0/24&lt;br /&gt;
SERVER_IP=192.168.0.2&lt;br /&gt;
INTERNET_IP=100.100.100.100&lt;br /&gt;
REMOTING_PORT=8895&lt;br /&gt;
REGION_PORT=9000&lt;br /&gt;
# ^^^^^ - Fix these! - ^^^^^&lt;br /&gt;
&lt;br /&gt;
# First, the Destination NAT, anything going to the external address on our ports, we redirect to the server&lt;br /&gt;
# Note, if you have a double NAT running and this router doesn't actually have the internet IP address, you'll&lt;br /&gt;
# need another set of PREROUTING-DNAT lines with the --destination (-d) set to the internet facing private address&lt;br /&gt;
$IPTABLES -t nat -I PREROUTING -d $INTERNET_IP -p tcp --dport $REMOTING_PORT --jump DNAT --to-destination $SERVER_IP&lt;br /&gt;
$IPTABLES -t nat -I PREROUTING -d $INTERNET_IP -p udp --dport $REGION_PORT --jump DNAT --to-destination $SERVER_IP&lt;br /&gt;
$IPTABLES -t nat -I PREROUTING -d $INTERNET_IP -p tcp --dport $REGION_PORT --jump DNAT --to-destination $SERVER_IP&lt;br /&gt;
&lt;br /&gt;
# Second, the Source NAT, we need this so that returning packets to our LAN clients go back through the router first,&lt;br /&gt;
# otherwise, the server will try to talk directly to the client and the client will reject them&lt;br /&gt;
$IPTABLES -t nat -I POSTROUTING -s $LAN_NETWORK -d $SERVER_IP -p tcp --dport $REMOTING_PORT --jump SNAT --to-source $INTERNET_IP&lt;br /&gt;
$IPTABLES -t nat -I POSTROUTING -s $LAN_NETWORK -d $SERVER_IP -p udp --dport $REGION_PORT --jump SNAT --to-source $INTERNET_IP&lt;br /&gt;
$IPTABLES -t nat -I POSTROUTING -s $LAN_NETWORK -d $SERVER_IP -p tcp --dport $REGION_PORT --jump SNAT --to-source $INTERNET_IP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[User:Hell Fire|Hell Fire]]&lt;br /&gt;
&lt;br /&gt;
If you use openWRT firmware on your router, check here:  [[Users:Thomax:nat-loopback | OpenWRT NAT Loopback]]&lt;/div&gt;</summary>
		<author><name>Drava</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>2009-08-16T21:04:38Z</updated>
		
		<summary type="html">&lt;p&gt;Drava: Minor error&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Template:Quicklinks}}&lt;br /&gt;
&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[OSSL Status | OSSL Status]] -&amp;gt; [[OSSL_Proposals | OSSL Proposal List]] &lt;br /&gt;
&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|OSSL Standards]] for proposed naming schema'''&amp;lt;/big&amp;gt;&lt;br /&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 OpenSim.&lt;br /&gt;
==OSSL Proposal Table==&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;OpenSim 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;
&lt;br /&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;
&lt;br /&gt;
	// region name (do not change this)&lt;br /&gt;
	$region = htmlspecialchars($_GET['region']);&lt;br /&gt;
&lt;br /&gt;
	// default uuid (do not change this)&lt;br /&gt;
	$uuid = '00000000-0000-0000-0000-000000000000';&lt;br /&gt;
&lt;br /&gt;
	// your mysql host name (change this)&lt;br /&gt;
	$dbhost = 'localhost';&lt;br /&gt;
&lt;br /&gt;
	// your mysql user name (change this)&lt;br /&gt;
	$dbuser = 'root';&lt;br /&gt;
&lt;br /&gt;
	// your mysql user password (change this)&lt;br /&gt;
	$dbpass = '';&lt;br /&gt;
&lt;br /&gt;
	// your mysql opensim database (change this)&lt;br /&gt;
	$dbname = 'opensim';&lt;br /&gt;
&lt;br /&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;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
then llHTTPRequest(&amp;quot;http://www.yourserver.com/phpfile.php?region=&amp;quot; + llEscapeURL(&amp;quot;OpenSim Test&amp;quot;), [HTTP_METHOD, &amp;quot;GET&amp;quot;], &amp;quot;&amp;quot;);&lt;br /&gt;
the http_response event will return the uuid for the map texture in body, which can be used with llSetTexture() or other functions&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| Athlon Maurer&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;
| 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&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;
| 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 :). 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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;lt;1,0,0&amp;gt;,&amp;quot;Red&amp;quot;, &amp;lt;0,1,0&amp;gt;, &amp;quot;\nGreen&amp;quot;, &amp;lt;0,0,1&amp;gt;, &amp;quot;\nBlue&amp;quot;);&lt;br /&gt;
| Del M&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;
| 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;
&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;lt;pos&amp;gt; ]&lt;br /&gt;
| Sal&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=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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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; ONLINE) { ... }&lt;br /&gt;
| Del M&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 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;
&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;
&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;
&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;lt;1, 1, 1&amp;gt;, &amp;lt;0, 0, 0&amp;gt;, &amp;lt;0, 0, 0&amp;gt;, 0)&lt;br /&gt;
| Jimbo2120&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;
| 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;
&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;
&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;
&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;
&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;
&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;
&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 : osTeleportAgent(key agentId, string regionName, vector position, vector lookAt); &lt;br /&gt;
| (this is implemented now - edited April 2009 by Wordfromthe Wise)&lt;br /&gt;
| Phrearch&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;
| 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;
&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;
&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;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;
&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;
&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;
&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;
|- 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;
|- 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;lt;128.0, 128.0, 0.0&amp;gt;, ZERO_VECTOR);&lt;br /&gt;
&amp;amp;nbsp;If error is FALSE then no errors have occurred setting up the new beacon.&lt;br /&gt;
&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;
| 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;
| 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;
| &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; vBitPermissions){&lt;br /&gt;
            osTeleportAgentPerm(avie, &amp;lt;128.0,128.0,0.0&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 |&lt;br /&gt;
            PERMISSION_TRIGGER_ANIMATION |&lt;br /&gt;
            0);&lt;br /&gt;
        integer perm = llGetPermissions();&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
| Elwe Ewing&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;
|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.&lt;br /&gt;
Command: osGetSimulatorStatus(string Simulator)&lt;br /&gt;
Where Simulator = &amp;quot;RegionName&amp;quot;, &amp;quot;IPAddress:PortNum&amp;quot;, &amp;quot;HostName:PortNum&amp;quot;&lt;br /&gt;
Returns: integer &amp;quot;0 = DOWN&amp;quot;, &amp;quot;1 = UP&amp;quot;, &amp;quot;2 = UNKNOWN&amp;quot;&lt;br /&gt;
Security: Would require some form of Throttle to prevent recurring requests of destination Simulator.&lt;br /&gt;
|WhiteStar Magic&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;
| 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;lt;100,25,25&amp;gt;,ZERO_VECTOR); &lt;br /&gt;
| Agnes Chalet &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;
| 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;
|- 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;
|}&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;
&lt;br /&gt;
* [[Status|Main Status Page]]&lt;br /&gt;
* [[OSSL Status|OSSL Status]]&lt;br /&gt;
* [[OSSL Status/Events|OSSL Events Status]]&lt;br /&gt;
* [[OSSL Status/Functions|OSSL Functions Status]]&lt;br /&gt;
* [[LSL Status/Events|LSL Events Status]]&lt;br /&gt;
* [[LSL Status/Functions|LSL Functions Status]]&lt;br /&gt;
* [[LSL_Status/functions/summary | LSL Functions Status Summary]]&lt;br /&gt;
* [[Technical_Reference|Technical Reference Page]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Main]]&lt;br /&gt;
[[Category:Users]]&lt;br /&gt;
[[Category:Support]]&lt;br /&gt;
[[Category:Tech Reference]] &lt;br /&gt;
[[Category:Help]]&lt;br /&gt;
[[Category:Configuration]]&lt;br /&gt;
[[Category:Getting_Started]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Todo]]&lt;/div&gt;</summary>
		<author><name>Drava</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>2009-08-16T21:03:01Z</updated>
		
		<summary type="html">&lt;p&gt;Drava: osHyperGrid&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Template:Quicklinks}}&lt;br /&gt;
&lt;br /&gt;
[[Technical Reference | Technical Reference]] -&amp;gt; [[Technical Reference/terms | Terms]] -&amp;gt; [[OSSL Status | OSSL Status]] -&amp;gt; [[OSSL_Proposals | OSSL Proposal List]] &lt;br /&gt;
&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|OSSL Standards]] for proposed naming schema'''&amp;lt;/big&amp;gt;&lt;br /&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 OpenSim.&lt;br /&gt;
==OSSL Proposal Table==&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;OpenSim 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;
&lt;br /&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;
&lt;br /&gt;
	// region name (do not change this)&lt;br /&gt;
	$region = htmlspecialchars($_GET['region']);&lt;br /&gt;
&lt;br /&gt;
	// default uuid (do not change this)&lt;br /&gt;
	$uuid = '00000000-0000-0000-0000-000000000000';&lt;br /&gt;
&lt;br /&gt;
	// your mysql host name (change this)&lt;br /&gt;
	$dbhost = 'localhost';&lt;br /&gt;
&lt;br /&gt;
	// your mysql user name (change this)&lt;br /&gt;
	$dbuser = 'root';&lt;br /&gt;
&lt;br /&gt;
	// your mysql user password (change this)&lt;br /&gt;
	$dbpass = '';&lt;br /&gt;
&lt;br /&gt;
	// your mysql opensim database (change this)&lt;br /&gt;
	$dbname = 'opensim';&lt;br /&gt;
&lt;br /&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;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
then llHTTPRequest(&amp;quot;http://www.yourserver.com/phpfile.php?region=&amp;quot; + llEscapeURL(&amp;quot;OpenSim Test&amp;quot;), [HTTP_METHOD, &amp;quot;GET&amp;quot;], &amp;quot;&amp;quot;);&lt;br /&gt;
the http_response event will return the uuid for the map texture in body, which can be used with llSetTexture() or other functions&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| Athlon Maurer&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;
| 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&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;
| 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 :). 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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;lt;1,0,0&amp;gt;,&amp;quot;Red&amp;quot;, &amp;lt;0,1,0&amp;gt;, &amp;quot;\nGreen&amp;quot;, &amp;lt;0,0,1&amp;gt;, &amp;quot;\nBlue&amp;quot;);&lt;br /&gt;
| Del M&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;
| 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;
&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;lt;pos&amp;gt; ]&lt;br /&gt;
| Sal&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=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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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; ONLINE) { ... }&lt;br /&gt;
| Del M&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 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;
&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;
&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;
&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;lt;1, 1, 1&amp;gt;, &amp;lt;0, 0, 0&amp;gt;, &amp;lt;0, 0, 0&amp;gt;, 0)&lt;br /&gt;
| Jimbo2120&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;
| 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;
&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;
&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;
&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;
&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;
&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;
&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 : osTeleportAgent(key agentId, string regionName, vector position, vector lookAt); &lt;br /&gt;
| (this is implemented now - edited April 2009 by Wordfromthe Wise)&lt;br /&gt;
| Phrearch&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;
| 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;
&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;
&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;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;
&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;
&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;
&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;
|- 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;
|- 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;lt;128.0, 128.0, 0.0&amp;gt;, ZERO_VECTOR);&lt;br /&gt;
&amp;amp;nbsp;If error is FALSE then no errors have occurred setting up the new beacon.&lt;br /&gt;
&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;
| 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;
| 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;
| &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; vBitPermissions){&lt;br /&gt;
            osTeleportAgentPerm(avie, &amp;lt;128.0,128.0,0.0&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 |&lt;br /&gt;
            PERMISSION_TRIGGER_ANIMATION |&lt;br /&gt;
            0);&lt;br /&gt;
        integer perm = llGetPermissions();&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
| Elwe Ewing&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;
|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.&lt;br /&gt;
Command: osGetSimulatorStatus(string Simulator)&lt;br /&gt;
Where Simulator = &amp;quot;RegionName&amp;quot;, &amp;quot;IPAddress:PortNum&amp;quot;, &amp;quot;HostName:PortNum&amp;quot;&lt;br /&gt;
Returns: integer &amp;quot;0 = DOWN&amp;quot;, &amp;quot;1 = UP&amp;quot;, &amp;quot;2 = UNKNOWN&amp;quot;&lt;br /&gt;
Security: Would require some form of Throttle to prevent recurring requests of destination Simulator.&lt;br /&gt;
|WhiteStar Magic&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;
| 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;lt;100,25,25&amp;gt;,ZERO_VECTOR); &lt;br /&gt;
| Agnes Chalet &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;
| 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;
|- 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;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
&lt;br /&gt;
* [[Status|Main Status Page]]&lt;br /&gt;
* [[OSSL Status|OSSL Status]]&lt;br /&gt;
* [[OSSL Status/Events|OSSL Events Status]]&lt;br /&gt;
* [[OSSL Status/Functions|OSSL Functions Status]]&lt;br /&gt;
* [[LSL Status/Events|LSL Events Status]]&lt;br /&gt;
* [[LSL Status/Functions|LSL Functions Status]]&lt;br /&gt;
* [[LSL_Status/functions/summary | LSL Functions Status Summary]]&lt;br /&gt;
* [[Technical_Reference|Technical Reference Page]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Main]]&lt;br /&gt;
[[Category:Users]]&lt;br /&gt;
[[Category:Support]]&lt;br /&gt;
[[Category:Tech Reference]] &lt;br /&gt;
[[Category:Help]]&lt;br /&gt;
[[Category:Configuration]]&lt;br /&gt;
[[Category:Getting_Started]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Todo]]&lt;/div&gt;</summary>
		<author><name>Drava</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/User:Drava</id>
		<title>User:Drava</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/User:Drava"/>
				<updated>2009-08-15T15:04:28Z</updated>
		
		<summary type="html">&lt;p&gt;Drava: New page: Hello,  Brand new here but I support the project and wanted to contribute with my suggestions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello,&lt;br /&gt;
&lt;br /&gt;
Brand new here but I support the project and wanted to contribute with my suggestions&lt;/div&gt;</summary>
		<author><name>Drava</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Money</id>
		<title>Money</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Money"/>
				<updated>2009-08-15T15:00:49Z</updated>
		
		<summary type="html">&lt;p&gt;Drava: Web Transactions and sim-based fake money??&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Template:Quicklinks}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{proposal}}&lt;br /&gt;
This page is intended as an open discussion board for ideas regarding an in-world financial system - Ezekiel.&lt;br /&gt;
&lt;br /&gt;
== OpenSim, Applications and Money ==&lt;br /&gt;
The OpenSim project does not consider providing any kind of functioning monetary system within its scope. Doing so is entirely up to the service provider, as that provider has to be the source of the trust associated with monetary transactions.&lt;br /&gt;
&lt;br /&gt;
The OpenSim platform will provide whatever protocol hooks necessary to implement a monetary system, and reference implementations for demonstration purposes, but not actual implementations of functioning monetary systems. It is essential to understand this when discussing what OpenSim can do with respect to monetary systems.&lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
In order to be successful, any new world simulator needs to allow for financial transactions. While many residents enjoy the creative and social aspects of virtual life, others are there to provide them with the necessary means - and usually intend to be compensated.&lt;br /&gt;
Metaverses without a business component (allowing residents to make money) depend largely on the creativity of the makers and tend to fall into disuse as soon as competitive simulators with better graphics and better entertainment come along (e.g. Active Worlds).&lt;br /&gt;
&lt;br /&gt;
== Play Money vs. Serious Money ==&lt;br /&gt;
There are two types of financial systems and currencies: one is purely an in-world affair (play money) and supports roleplay, the other is convertible into hard currencies (serious money).&lt;br /&gt;
While it is commonly agreed that implementing a serious in-world currency system (with all the security implications) is out of scope at least for the current phase of the OpenSim development project, there are still some functional decisions to be made.&lt;br /&gt;
&lt;br /&gt;
There are several possible ways of handling money in a grid:&lt;br /&gt;
* no money support&lt;br /&gt;
* in-world play money for roleplay&lt;br /&gt;
* in-world currency supported, protected and converted by the grid owner (like SL)&lt;br /&gt;
* off-world payment implementation, no in-world currency&lt;br /&gt;
* in-world play money plus off-world payment capabilities (might be confusing)&lt;br /&gt;
&lt;br /&gt;
OpenSim should allow for an implementation of any of those alternatives.&lt;br /&gt;
&lt;br /&gt;
== Off-World Implementation ==&lt;br /&gt;
These are crucial in-world functions for off-world financial transactions:&lt;br /&gt;
* put a price tag on a prim, specifying amount and currency&lt;br /&gt;
* notification event (LSL) that resident X agrees to buy item / pay amount Y.&lt;br /&gt;
&lt;br /&gt;
These functions are not crucial, since they may be implemented off-world:&lt;br /&gt;
* an in-world currency (use an internet payment provider or an e-currency instead)&lt;br /&gt;
* avatar account (use an internet payment provider or an e-currency instead)&lt;br /&gt;
* receive payment (can be handled off-world through osLoadURL - for most providers)&lt;br /&gt;
* give money (can be handled off-world through osHTTPRequest - for some providers)&lt;br /&gt;
* notify avatar of payment (can be done through IM or e-Mail)&lt;br /&gt;
&lt;br /&gt;
== Wallet Plugin ==&lt;br /&gt;
It occurs to me that perhaps it isn't the job of the grid to keep track of every avatars financial transactions.  Perhaps this should be left to banks and other financial organizations.  I'm thinking that perhaps OpenSim should pull the money out of the grid and develop an independent bank server.  Avatars could choose which &amp;quot;wallet&amp;quot; or &amp;quot;bank&amp;quot; to use for a transaction.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== A Different Idea == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''A Currency that Pays a Divident'''&lt;br /&gt;
 &lt;br /&gt;
The OpenSim project should have a currency that pays a divident. If users earn a divident just by using the game currency this will be a great incentive not only to participate in the game but also to use the currency in real life. Thus this increases the possibility that a market of things of value will develop in the game and maybe the currency will be used for real life transactions as well. A currency that pays a divident will prevail over any other form of virtual currency by means of the strategic advantage of directly benefiting the user. Convertibility to real currencies will depend solely on free market ability of the currency to provide goods and services and not some convertibility obligation undertaken by the company that hosts the server.&lt;br /&gt;
&lt;br /&gt;
Implementing a currency that produces a divident would require suitable financial institutions, capital markets, and a mechanism to liquidate a part of current value of financial instruments. Through liquidating a sustainable part of current value of financial instruments the company that hosts the server would earn the game money funds which when converted to real currency would pay for its operational costs plus the funds needed to pay a divident. It would be in the best interest of the company that hosts the server to ensure that the financial structure operates efficiently for the benefit of the users so that the game currency has maximum value of convertibility to real life currencies.&lt;br /&gt;
&lt;br /&gt;
The financial structure required could be as follows:&lt;br /&gt;
&lt;br /&gt;
'''1. Central Bank'''&lt;br /&gt;
&lt;br /&gt;
THe Central Bank would oversee the monetary volume, the amount to be liquidated and the keeping of individual money accounts of users free of charge but free of interest as well.&lt;br /&gt;
&lt;br /&gt;
- All users would be shareholders to the Central Bank, owning no more and no less than one share each&lt;br /&gt;
&lt;br /&gt;
- The monetary volume would be a fixed amount of currency for each share, say 100.000 units, which would be the nominal value of the Central Bank share.&lt;br /&gt;
&lt;br /&gt;
- All financial transactions of users, Investment Banks and Capital Markets would be processed through the Central Bank's server software and console&lt;br /&gt;
&lt;br /&gt;
- The Central Bank will determine how much of Investment Bank's current stock value must be held in liquid reserves&lt;br /&gt;
&lt;br /&gt;
- The Central Bank will determine how much of those liquid reserves will be contributed to the Special Account in order to be distributed to the users as divident and to the company that hosts the server&lt;br /&gt;
&lt;br /&gt;
- The Central Bank will have the power to dispense payments through the Special Account to the company that hosts the server, to shareholders and to in-game political institutions such as elected moderators &lt;br /&gt;
&lt;br /&gt;
- Ideally the Central Bank management would be ellected by users, even better by Invesment Bank managers  &lt;br /&gt;
&lt;br /&gt;
- Any increase or decrease in monetary volume would be achieved solely by depositing or withdrawing funds to/from each user's account &lt;br /&gt;
&lt;br /&gt;
'''2. Investment Banks'''&lt;br /&gt;
&lt;br /&gt;
The Investment Banks would be the main user operated financial institution. &lt;br /&gt;
&lt;br /&gt;
- They would be the only financial instrument users would be able to directly buy shares of. &lt;br /&gt;
&lt;br /&gt;
- They would be the only vehicle available for investment in Capital Markets. &lt;br /&gt;
&lt;br /&gt;
- They would be able to structure and trade financial instruments through the Central Bank console&lt;br /&gt;
&lt;br /&gt;
- They would be able to lend money for projects&lt;br /&gt;
&lt;br /&gt;
- Any user or group of users would able to open an Investment Bank through a console provided by the Central Bank if they provide capital equal to say 10 Central Bank Shares worth  &lt;br /&gt;
&lt;br /&gt;
- An individual who wants to trade the financial markets with his own money, should come up with enough capital to open an Investment Bank&lt;br /&gt;
&lt;br /&gt;
- Investment Banks would freely be able to raise capital by issuing shares&lt;br /&gt;
&lt;br /&gt;
- Their shares would be floated and traded in a separate market than Capital Markets through the Central Bank console&lt;br /&gt;
&lt;br /&gt;
- They would be under obligation to keep a part of their investment portfolio in cash so the Central Bank can deduct a contribution to the Special Account&lt;br /&gt;
&lt;br /&gt;
- The holdings in their investment portfolio would be open for every interested investor to audit&lt;br /&gt;
&lt;br /&gt;
'''3. Capital markets'''&lt;br /&gt;
&lt;br /&gt;
These would be the Exchanges where financial instruments are traded&lt;br /&gt;
&lt;br /&gt;
- The Central Bank would provide the console for the Exchanges and handle the payments&lt;br /&gt;
&lt;br /&gt;
- Anything of value could be traded on the Exchanges&lt;br /&gt;
&lt;br /&gt;
- The financial instruments would be structured freely by the Investment Banks&lt;br /&gt;
&lt;br /&gt;
- Individual loans would be structured as financial instruments and traded freely&lt;br /&gt;
&lt;br /&gt;
- The coding of financial instruments would be open for everyone to audit&lt;br /&gt;
&lt;br /&gt;
- An Exchange would be a user-managed institution, the user-managers would be able to charge a commision on transactions as compensation for managing the exchange&lt;br /&gt;
&lt;br /&gt;
- The Exchanges would all be interconected, so the most efficient ones get the most business&lt;br /&gt;
&lt;br /&gt;
'''Supporting Environment'''&lt;br /&gt;
&lt;br /&gt;
The financial structure's legitimacy and effectiveness would benefit the most by a functional political proccess within the game and the development of legal and political institutions that would oversee its implementation. In this way the company that hosts the server would have relegated most of the work too the user community. In a maybe utopian scenario the company itself could be owned by the users. A lot of reated economic activity could evolve alongside the main structure such as auditing companies, programmers etc&lt;br /&gt;
&lt;br /&gt;
'''Kickstarting a Project'''&lt;br /&gt;
&lt;br /&gt;
Once the software is implemented as above this could evolve as essentially a game where the collective purpose of the users would be to develop and increase the value of the game currency and spread its use. A group of people willing to kickstart such a project would need to set up a server and a rudimentary mechanism to buy and sell shares to the Central Bank and thus opening user accounts. Integration with a payment system such as Paypal would help. A new user would be able to either:&lt;br /&gt;
&lt;br /&gt;
- use real money to buy enough in-game currency from other users or the central bank as a provider of last resort to purchase his share to the Central Bank and so be entitled to a divident&lt;br /&gt;
&lt;br /&gt;
- or start free and offer services or anything of value in-game so as to accumulate enough in-game currency to buy his share in the Central Bank and then be entitled to a divident&lt;br /&gt;
&lt;br /&gt;
When a new user opens an account and purchases his share to the Central Bank, new in-game money is created up to the value of one Central Bank share. If he buys his share, the money is deposited in his account. If he does not buy a share and starts free the money is deposited to the Special Account for the benefit of all users. In this way the monetary volume is increased as new users come in and all all users benefit from attracting new users. A de facto mechanism for the convertibility of the in-game currency would thus be achieved and setting up a server for the game could prove profitable. Ideally various groups would be able to start different projects but all grids should be interconnected and maybe their currencies floated on a common exchange&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Simplest In-Grid Money ==&lt;br /&gt;
&lt;br /&gt;
A unique avatar creates objects that may not be copied, may not be modified, but may be transferred.  The object permission, and asset storage code of OpenSimulator must be very robust and dependable.  The names of the objects are something like &amp;quot;1-gazoon,&amp;quot; &amp;quot;2-gazoons,&amp;quot; &amp;quot;5-gazoons,&amp;quot; &amp;quot;10-gazoons,&amp;quot; &amp;quot;20-gazoons,&amp;quot; etc.  Players agree to treat these objects as money and trade them.  Making change will be a pain at times.  The reason that the unique avatar gives &amp;quot;gazoon&amp;quot; objects to other avatars is left as an exercise for the reader.&lt;br /&gt;
&lt;br /&gt;
== Web Transactions ==&lt;br /&gt;
&lt;br /&gt;
We could also simply use external websites to sell objects in real world money (dollars, euros etc.). With the current advances in the in-world web browser, it shouldn't be too difficult and shouldn't take up too much time. Theres also the advantage of a decrease in fraud and there would no longer be a concern for the rise and dropping of L$ prices. Of course, the website would be the responsibility of the grid-owner. In terms of &amp;quot;fake currency&amp;quot;, we would use the current implemented system (the L$ functions) and use it as fake/roleplaying money on a simulator level (meaning that it would be functional in only some sims and the sim owner would have control over the name of the currency and how it is distributed).&lt;br /&gt;
&lt;br /&gt;
== Reference Implementations ==&lt;br /&gt;
&lt;br /&gt;
There are currently two projects in forge that provide reference implementations for currency in OpenSim.  They are both very experimental and should not be used in a production environment or with real money.  They can be found at &lt;br /&gt;
&lt;br /&gt;
* [http://forge.opensimulator.org/gf/project/opencurrency/ OpenCurrency]&lt;br /&gt;
* [http://forge.opensimulator.org/gf/project/currency/ Currency]&lt;/div&gt;</summary>
		<author><name>Drava</name></author>	</entry>

	</feed>