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

	<entry>
		<id>http://opensimulator.org/wiki/LSL_Status/Functions</id>
		<title>LSL Status/Functions</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/LSL_Status/Functions"/>
				<updated>2026-04-30T07:25:18Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Quicklinks}}&lt;br /&gt;
&lt;br /&gt;
= What is the current LSL Function Status? =&lt;br /&gt;
&lt;br /&gt;
Back to [[LSL Status]]&lt;br /&gt;
&lt;br /&gt;
== LSL Functions Status ==&lt;br /&gt;
&lt;br /&gt;
'''Updated: October 28, 2014 using OpenSim-1a24b7f/r25290 (0.8-post-fixes)'''&lt;br /&gt;
   added EEP function tested with Y and X Engine using OpenSim 0.9.2.0 Yeti Dev night build 2020-09-09&lt;br /&gt;
&lt;br /&gt;
The update will reflect ALL current LL-LSL Functions including those which are not supported in OpenSimulator.&amp;lt;br /&amp;gt;&lt;br /&gt;
These unsupported functions (notably Pathfinding etc) are there to show what is implemented &amp;amp; not.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
There is a total of 415 LL Functions as of the date of the update.&amp;lt;br /&amp;gt;&lt;br /&gt;
    Deprecated Functions:  12 indicated&amp;lt;br /&amp;gt;&lt;br /&gt;
    God Mode Functions:     3 indicated&amp;lt;br /&amp;gt;&lt;br /&gt;
    Pathfinding Functions: 12 indicated. (Path Finding is '''not''' supported by OpenSimulator)&amp;lt;br /&amp;gt;&lt;br /&gt;
    Total remaining functions: 389&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;llXorBase64Strings&lt;br /&gt;
Function List Reference at SL. [http://wiki.secondlife.com/wiki/Template:LSL_All_Functions/Name Reference]&lt;br /&gt;
&lt;br /&gt;
== Source Delta (2026-04-30) ==&lt;br /&gt;
&lt;br /&gt;
This page was cross-checked against ''OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs''.&lt;br /&gt;
Detailed local categorization: ''LSL-Delta-Categories.txt''&lt;br /&gt;
&lt;br /&gt;
* LSL source unique signatures: 473&lt;br /&gt;
* LSL unique names in compared wiki files: 501&lt;br /&gt;
* LSL missing in wiki: 0&lt;br /&gt;
* LSL wiki-only (not found in current interface): 28&lt;br /&gt;
&lt;br /&gt;
'''LSL missing in wiki (source present) categories'''&lt;br /&gt;
* &amp;lt;none&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''LSL wiki-only (source missing) categories'''&lt;br /&gt;
* LL-only Environment APIs (2)&lt;br /&gt;
* LL-only Experience/KeyValue (11)&lt;br /&gt;
* LL-only Pathfinding/Characters (12)&lt;br /&gt;
* Wiki legacy/other not in interface (3)&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If the Implemented field is blank, the function requires testing and verification.  Possibly incomplete or stub within the OpenSimulator Source code.&amp;lt;br /&amp;gt;&lt;br /&gt;
{{LSL Key Table}}&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Click on a letter to see the implementation information or click on the function to see an example how the function was tested in-world.&lt;br /&gt;
&lt;br /&gt;
{{ABC}}&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#57C604;font-size:10pt;font-weight:bold;border-bottom:1px solid;&amp;quot; align=&amp;quot;center&amp;quot; valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;5%&amp;quot; scope=&amp;quot;col&amp;quot; | Function &lt;br /&gt;
| width=&amp;quot;2%&amp;quot; scope=&amp;quot;col&amp;quot; | Implemented&lt;br /&gt;
| width=&amp;quot;2%&amp;quot; scope=&amp;quot;col&amp;quot; | Developer&lt;br /&gt;
| width=&amp;quot;2%&amp;quot; scope=&amp;quot;col&amp;quot; | Tester &lt;br /&gt;
| width=&amp;quot;10%&amp;quot; scope=&amp;quot;col&amp;quot; | Comments&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAbs&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=See also [[LlAbs|llAbs]]&lt;br /&gt;
|anc=A&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAcos&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=F&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAddToLandBanList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAddToLandPassList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAdjustSoundVolume&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAgentInExperience&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Experience/KeyValue only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAllowInventoryDrop&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Patnad&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAngleBetween&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=NUnit&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llApplyImpulse&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llApplyRotationalImpulse&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAsin&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAtan2&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAttachToAvatar&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test= acryline&lt;br /&gt;
|comment= Works in OpenSim 0.9.1.0 Dev&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAttachToAvatarTemp&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test= acryline&lt;br /&gt;
|comment= Works in OpenSim 0.9.1.0 Dev &lt;br /&gt;
&lt;br /&gt;
with an error message in Singularity&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAvatarOnLinkSitTarget&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test= acryline&lt;br /&gt;
|comment= Works in OpenSim 0.9.1.0 Dev&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAvatarOnSitTarget&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Teravus&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAxes2Rot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Patnad&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAxisAngle2Rot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llBase64ToInteger&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=B&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llBase64ToString&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llBreakAllLinks&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llBreakLink&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCastRay&lt;br /&gt;
|status= full&lt;br /&gt;
|impl= Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=C&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCeil&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llChar&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llClearCameraParams&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llClearLinkMedia&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test= acryline&lt;br /&gt;
|comment= Works in OpenSim 0.9.1.0 Dev&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llClearPrimMedia&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test= acryline&lt;br /&gt;
|comment= Works in OpenSim 0.9.1.0 Dev&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCloseRemoteDataChannel&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Jimbo21&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCloud&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCollisionFilter&lt;br /&gt;
|status=full&lt;br /&gt;
|impl= yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test= acryline&lt;br /&gt;
|comment= Works in OpenSim 0.9.1.0 Dev&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCollisionSound&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCollisionSprite&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llComputeHash&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCos&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCreateCharacter&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Pathfinding/Character API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCreateKeyValue&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Experience/KeyValue only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCreateLink&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCSV2List&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDataSizeKeyValue&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Experience/KeyValue only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDeleteCharacter&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Pathfinding/Character API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
|anc=D&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDeleteKeyValue&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Experience/KeyValue only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDeleteSubList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDeleteSubString&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDerezObject&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetachFromAvatar&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedGrab&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedGroup&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedKey&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedLinkNumber&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=tested at 2011.01.25 on 0.7.1 Dev&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedName&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedOwner&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedPos&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedRot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedTouchBinormal&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedTouchFace&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Jeff Kelley&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedTouchNormal&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedTouchPos&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Jeff Kelley&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedTouchST&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Azwaldo Villota&lt;br /&gt;
|comment=* Tested in OpenSim 0.8.0 Dev&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedTouchUV&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=acryline&lt;br /&gt;
|comment=Works in OpenSim 0.9.1.0 Dev&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedType&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedVel&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDialog&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDie&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Krtaylor&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDumpList2String&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llEdgeOfWorld&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes*&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Garmin Kawaguichi&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=E&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llEjectFromLand&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llEmail&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llEscapeURL&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llEuler2Rot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llEvade&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Pathfinding/Character API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llExecCharacterCmd&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Pathfinding/Character API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llFabs&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
|anc=F&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llFleeFrom&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Pathfinding/Character API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llFloor&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llForceMouselook&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llFrand&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGenerateKey&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=G&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAccel&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAgentInfo&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAgentLanguage&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=cinderblocks&lt;br /&gt;
|test=Gimisa&lt;br /&gt;
|comment=Working as of 0.8.2.0 for local avatar only &lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAgentList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Jeff Kelley&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAgentSize&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAlpha&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=ALLSIDES returns default texture, not sum, specific faces display correctly&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAndResetTime&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2750)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAnimation&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=StrawberryFride&lt;br /&gt;
|test=StrawberryFride&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAnimationList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAnimationOverride&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Gimisa&lt;br /&gt;
|comment=works in 0901&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAttached&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAttachedList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetBoundingBox&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetCameraAspect&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetCameraFOV&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetCameraPos&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Phrearch&lt;br /&gt;
|test=Phrearch&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetCameraRot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetCenterOfMass&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetClosestNavPoint&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Pathfinding/Character API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetColor&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=ALLSIDES returns default texture, not average, anything trying to grab more than 3 sides fails per example 2&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetCreator&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetDate&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetDayLength&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetDayOffset&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetDisplayName&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment= returns usernames&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetEnergy&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Always returns 1.0f&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetEnv&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetEnvironment&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Environment API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetExperienceDetails&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Experience/KeyValue only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetExperienceErrorMessage&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Experience/KeyValue only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetForce&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetFreeMemory&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetFreeURLs&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Jeff Kelley&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetGeometricCenter&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetGMTclock&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetHealth&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetHTTPHeader&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Tokeiito&lt;br /&gt;
|comment=tested at 2011.01.25 on 0.7.1 Dev with XEngine&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetInventoryAcquireTime&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetInventoryCreator&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetInventoryDesc&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetInventoryKey&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetInventoryName&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetInventoryNumber&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetInventoryPermMask&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetInventoryType&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetKey&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLandOwnerAt&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLinkKey&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLinkMedia&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLinkName&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLinkNumber&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2754)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLinkNumberOfSides&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Azwaldo Villota&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLinkPrimitiveParams&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLinkSitFlags&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetListEntryType&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetListLength&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2750)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLocalPos&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLocalRot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetMass&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetMassMKS&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetMaxScaleFactor&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetMemoryLimit&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetMinScaleFactor&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetMoonDirection&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetMoonRotation&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetNextEmail&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetNotecardLine&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Krtaylor&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetNotecardLineSync&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetNumberOfNotecardLines&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Krtaylor&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetNumberOfPrims&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetNumberOfSides&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetObjectAnimationNames&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetObjectDesc&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetObjectDetails&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetObjectLinkKey&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment= 0.9.2.2&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetObjectMass&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Gimisa&lt;br /&gt;
|comment=Sitting avatars are phanton, don't count for the mass.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetObjectName&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetObjectPermMask&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetObjectPrimCount&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetOmega&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetOwner&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetOwnerKey&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetParcelDetails&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetParcelFlags&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetParcelMaxPrims&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetParcelMusicURL&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetParcelPrimCount&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetParcelPrimOwners&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=See also [[LlGetParcelPrimOwners|llGetParcelPrimOwners]]&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetPermissions&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Melanie&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetPermissionsKey&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Melanie&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetPhysicsMaterial&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetPos&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetPrimitiveParams&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetPrimMediaParams&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionAgentCount&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionCorner&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionDayLength&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionDayOffset&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionFlags&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionFPS&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Always returns 10.0f&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionMoonDirection&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionMoonRotation&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionName&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionSunDirection&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionSunRotation&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionTimeDilation&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRenderMaterial&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRootPosition&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRootRotation&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetScale&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetScriptName&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetScriptState&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetSimStats&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetSimulatorHostname&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetSPMaxMemory&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetStartParameter&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Returns always 0!   Same limitations as llSetStatus&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetStartString&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetStaticPath&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Pathfinding/Character API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetStatus&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=dev&lt;br /&gt;
|test=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetSubString&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetSunDirection&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Krtaylor&lt;br /&gt;
|test=FredoChaplin&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetSunRotation&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetTexture&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetTextureOffset&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetTextureRot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetTextureScale&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetTime&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetTimeOfDay&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Vytek&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetTimestamp&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetTorque&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetUnixTime&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetUsedMemory&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetUsername&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetVel&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetVisualParams&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetWallclock&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGiveInventory&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGiveInventoryList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Patnad&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGiveMoney&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Melanie&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGodLikeRezObject&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGround&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGroundContour&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGroundNormal&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGroundRepel&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGroundSlope&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llHash&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llHMAC&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llHTTPRequest&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=jimbo21&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=H&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llHTTPResponse&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Tokeiito&lt;br /&gt;
|comment=Tested on 2011.01.25 with 0.7.1 Dev OS and xEngine&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llInsertString&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment= Unlike SL, negative indexes are relative to end of string, so not compatible in this case&lt;br /&gt;
|anc=I&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llInstantMessage&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=100%&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llIntegerToBase64&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llIsFriend&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llIsLinkGLTFMaterial&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llJson2List&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llJsonGetValue&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llJsonSetValue&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llJsonValueType&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llKey2Name&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=K&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llKeyCountKeyValue&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Experience/KeyValue only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llKeysKeyValue&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Experience/KeyValue only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinear2sRGB&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=0.9.3.0&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinkAdjustSoundVolume&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinkParticleSystem&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Jeff Kelley&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=L&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinkPlaySound&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=L&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinksetDataAvailable&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinksetDataCountFound&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinksetDataCountKeys&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinksetDataDelete&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinksetDataDeleteFound&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinksetDataDeleteProtected&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinksetDataFindKeys&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinksetDataListKeys&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinksetDataRead&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinksetDataReadProtected&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinksetDataReset&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinksetDataWrite&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinksetDataWriteProtected&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinkSetSoundQueueing&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinkSetSoundRadius&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinkSitTarget&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Jeff Kelley&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinkStopSound&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2CSV&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2Float&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2Integer&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2Json&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2Key&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2List&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2ListSlice&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2ListStrided&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2Rot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2754)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2String&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2Vector&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListen&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=jimbo21&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListenControl&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=jimbo21&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListenRemove&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=jimbo21&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListFindList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Needed for Kan-ed#11&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListFindListNext&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListFindStrided&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListInsertList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListRandomize&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListReplaceList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListSort&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListSortStrided&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListStatistics&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLoadURL&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLog&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLog10&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLookAt&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLoopSound&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLoopSoundMaster&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLoopSoundSlave&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMakeExplosion&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
|anc=M&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMakeFire&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMakeFountain&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMakeSmoke&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llManageEstateAccess&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMapBeacon&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMapDestination&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMD5String&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMessageLinked&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMinEventDelay&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llModifyLand&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llModPow&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMoveToTarget&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llName2Key&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llNavigateTo&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Pathfinding/Character API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
|anc=N&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llOffsetTexture&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
|anc=O&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llOpenRemoteDataChannel&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=jimbo21&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llOrd&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llOverMyLand&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llOwnerSay&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llParcelMediaCommandList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=P&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llParcelMediaQuery&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llParseString2List&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Spacers are not parsed if separator list is empty&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llParseStringKeepNulls&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llParticleSystem&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Teravus&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPassCollisions&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment= True/False argument only, as SL was until 2015&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPassTouches&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment= True/False argument only, as SL was until 2015&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPatrolPoints&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Pathfinding/Character API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPlaySound&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Azwaldo Villota&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPlaySoundSlave&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPointAt&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPow&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPreloadSound&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPursue&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Pathfinding/Character API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPushObject&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llReadKeyValue&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Experience/KeyValue only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRefreshPrimURL&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=R&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRegionSay&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRegionSayTo&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=BlueWall&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llReleaseCamera&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llReleaseControls&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llReleaseURL&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRemoteDataReply&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=jimbo21&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRemoteDataSetRegion&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRemoteLoadScript&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated (from LSL Wiki)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRemoteLoadScriptPin&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRemoveFromLandBanList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRemoveFromLandPassList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRemoveInventory&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRemoveVehicleFlags&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llReplaceSubString&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestAgentData&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestDisplayName&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestExperiencePermissions&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Experience/KeyValue only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestInventoryData&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestPermissions&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Melanie&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestSecureURL&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestSimulatorData&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment= Will only report status as up, if the region is registered to grid service, otherwise unknown. Does not test actual connection or any status of a region. Does not return specific version string.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestURL&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Tokeiito&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestUserKey&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestUsername&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llResetAnimationOverride&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Gimisa&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llResetLandBanList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llResetLandPassList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llReturnObjectsByID&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Legacy wiki entry. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llReturnObjectsByOwner&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Legacy wiki entry. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llResetOtherScript&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llResetScript&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=This function is ignored in the state_entry() function of the default state&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llResetTime&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2750)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRezAtRoot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRezObject&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRezObjectWithParams&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRot2Angle&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRot2Axis&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRot2Euler&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRot2Fwd&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRot2Left&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRot2Up&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRotateTexture&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRotBetween&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRotLookAt&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Kayaker Magic&lt;br /&gt;
|comment=Works different than SL (better?)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRotTarget&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRotTargetRemove&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRound&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSameGroup&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=S&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSay&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)(limited to 1023 chars)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llScaleByFactor&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llScaleTexture&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llScriptDanger&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llScriptProfiler&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSendRemoteData&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=jimbo21&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSensor&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works beyond 96m :) tested past 1000m&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSensorRemove&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSensorRepeat&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works beyond 96m :) tested past 1000m&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetAgentEnvironment&lt;br /&gt;
|status=&lt;br /&gt;
|impl=no&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Environment API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetAlpha&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetAngularVelocity&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetAnimationOverride&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Gimisa&lt;br /&gt;
|comment=works in 0901&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetBuoyancy&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Mlorrey&lt;br /&gt;
|comment=Works on free objects, does not make avatars buoyant with scripted attachments&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetCameraAtOffset&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetCameraEyeOffset&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetCameraParams&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetClickAction&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Jeff Kelley&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetColor&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetContentType&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetDamage&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetForce&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment= Does not work with current avatar motors physics&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetForceAndTorque&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetHoverHeight&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes/No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Gimisa &lt;br /&gt;
|comment= 0901 works with ubode physic ONLY &lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetInventoryPermMask&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetKeyframedMotion&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Kayaker Magic&lt;br /&gt;
|comment=Worked well since OpenSim 0.7.6&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLinkAlpha&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Charlie Omega&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2760)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLinkCamera&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Jeff Kelley&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLinkColor&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Charlie Omega&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2760)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLinkMedia&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Jeff Kelley&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLinkPrimitiveParams&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Melanie&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLinkPrimitiveParamsFast&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLinkSitFlags&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLinkTexture&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLinkTextureAnim&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Jeff Kelley&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLocalRot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetMemoryLimit&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetObjectDesc&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=100% implemented&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetObjectName&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=100% implemented&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetObjectPermMask&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetParcelMusicURL&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetPayPrice&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetPhysicsMaterial&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetPos&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688) (now with limitation of 10m as in sl)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetPrimitiveParams&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Melanie&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetPrimMediaParams&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetPrimURL&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetRegionPos&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=MrFrans/Frans Charming&lt;br /&gt;
|comment=Tested on the Kitely and Avacon grids.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetRemoteScriptAccessPin&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Tokeiito&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetRenderMaterial&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetRot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetScale&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetScriptState&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetSitText&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Teravus&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetSoundQueueing&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetSoundRadius&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetStatus&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetText&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2760)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetTexture&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetTextureAnim&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetTimerEvent&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688) (uses Timer plugin!)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetTorque&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetTouchText&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetVehicleFlags&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetVehicleFloatParam&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetVehicleRotationParam&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetVehicleType&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetVehicleVectorParam&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetVelocity&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSHA1String&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSHA256String&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llShout&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688) (limits 1023 chars)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSin&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSitOnLink&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Legacy wiki entry. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}{{FunctionStatusRow&lt;br /&gt;
|name=llSitTarget&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSleep&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=This function CAN lock script threads on XEngine, do not use with XEngine&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSound&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSoundPreload&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSqrt&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llsRGB2Linear&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStartAnimation&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStartObjectAnimation&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStopAnimation&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStopHover&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStopLookAt&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStopMoveToTarget&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStopObjectAnimation&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStopPointAt&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStopSound&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStringLength&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStringToBase64&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStringTrim&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Hashbox&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSubStringIndex&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTakeCamera&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
|anc=T&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTakeControls&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Patnad&lt;br /&gt;
|comment=Needed for Kan-ed#12&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTan&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTarget&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTargetedEmail&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTargetOmega&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTargetRemove&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTeleportAgent&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTeleportAgentGlobalCoords&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTeleportAgentHome&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTextBox&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Melanie_T&lt;br /&gt;
|test=Fritigern&lt;br /&gt;
|comment=Operational with Viewers that support it.  V3 and above all do.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llToLower&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llToUpper&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTransferLindenDollars&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires External money Module&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTriggerSound&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTriggerSoundLimited&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llUnescapeURL&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=U&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llUnSit&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llUpdateCharacter&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Pathfinding/Character API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llUpdateKeyValue&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Experience/KeyValue only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llVecDist&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Azwaldo Villota&lt;br /&gt;
|comment=Tested in OpenSim 0.7.6 Dev&lt;br /&gt;
|anc=V&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llVecMag&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Azwaldo Villota&lt;br /&gt;
|comment=Tested in OpenSim 0.7.6 Dev&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llVecNorm&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llVolumeDetect&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Gerhard&lt;br /&gt;
|test=Gimisa&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llWanderWithin&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Pathfinding/Character API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
|anc=W&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llWater&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llWhisper&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688) (but limited to 1023 chars)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llWind&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llWorldPosToHUD&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llXorBase64&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}{{FunctionStatusRow&lt;br /&gt;
|name=llXorBase64Strings&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
|anc=X&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llXorBase64StringsCorrect&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Back to [[LSL Status]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Users]]&lt;br /&gt;
[[Category:Support]]&lt;br /&gt;
[[Category:Tech Reference]]&lt;br /&gt;
[[Category:Help]]&lt;br /&gt;
[[Category:Configuration]]&lt;br /&gt;
[[Category:Getting Started]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Todo]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Category:OSSL_Functions</id>
		<title>Category:OSSL Functions</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Category:OSSL_Functions"/>
				<updated>2026-04-30T06:49:07Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color:#FFA500; padding:10px; padding-bottom:5px; border: 1px #FF544F solid&amp;quot;&amp;gt;&lt;br /&gt;
This information is relative to (almost) the last OpenSimulator Development version. In some cases it may not apply to older versions.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== OSSL function permissions ==&lt;br /&gt;
Several OSSL functions have execution permission control to prevent abusive or dangerous use.&lt;br /&gt;
&lt;br /&gt;
This is controlled by files osslDefaultEnable.ini and osslEnable.ini, by default in folder bin/config-include&amp;lt;br&amp;gt;&lt;br /&gt;
The use logic of these two files is identical to OpenSimDefaults.ini and OpenSim.ini&lt;br /&gt;
&lt;br /&gt;
Older OpenSimulator versions only used file osslEnable.ini.&amp;lt;br&amp;gt;&lt;br /&gt;
Some older OpenSimulator versions had checks for all OSSLfunctions.&amp;lt;br&amp;gt;&lt;br /&gt;
That made no sense for many functions, so now many are always allowed wasting no time on useless checks.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For details about these permissions, please read file OpenSimDefaults.ini&lt;br /&gt;
&lt;br /&gt;
= osslDefaultEnable.ini =&lt;br /&gt;
This file contains the defaults for OSSL execution permissions set by OpenSimulator dev team.&amp;lt;br&amp;gt;&lt;br /&gt;
Instead of changing defaults defined in code, the OpenSimulator dev team may decide to just make changes in this file.&amp;lt;br&amp;gt;&lt;br /&gt;
This file was not present on older OpenSimulator versions.&amp;lt;br&amp;gt;&lt;br /&gt;
If you need to change permissions, copy the respective entry to osslEnable.ini and modify there.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= osslEnable.ini =&lt;br /&gt;
This file contains the local overrides for OSSL permissions.&amp;lt;br&amp;gt;&lt;br /&gt;
It is read after osslDefaultEnable.ini, and any entry on it replaces the old one.&amp;lt;br&amp;gt;&lt;br /&gt;
This file is not provided on code packages, an osslEnable.ini.example is.&amp;lt;br&amp;gt;&lt;br /&gt;
At first time setup, you will need to copy the example file to osslEnable.ini and then edit it for your needs, using osslDefaults.ini as reference.&amp;lt;br&amp;gt;&lt;br /&gt;
This was the only file used on older OpenSimulator versions.&lt;br /&gt;
&lt;br /&gt;
== Current OSSL Functions Implemented  ==&lt;br /&gt;
&lt;br /&gt;
=== Avatars ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
&lt;br /&gt;
* [[osAgentSaveAppearance]]&lt;br /&gt;
* [[osAvatarName2Key]]&lt;br /&gt;
* [[osAvatarPlayAnimation]] &lt;br /&gt;
* [[osAvatarStopAnimation]] &lt;br /&gt;
* [[osAvatarType]]&lt;br /&gt;
* [[osCauseDamage]] &lt;br /&gt;
* [[osCauseHealing]]&lt;br /&gt;
* [[osDetectedCountry]]&lt;br /&gt;
* [[osDropAttachment]]&lt;br /&gt;
* [[osDropAttachmentAt]]&lt;br /&gt;
* [[osEjectFromGroup]]&lt;br /&gt;
* [[osForceAttachToAvatar]]&lt;br /&gt;
* [[osForceAttachToAvatarFromInventory]]&lt;br /&gt;
* [[osForceAttachToOtherAvatarFromInventory]]&lt;br /&gt;
* [[osForceDetachFromAvatar]]&lt;br /&gt;
* [[osForceDropAttachment]]&lt;br /&gt;
* [[osForceDropAttachmentAt]]&lt;br /&gt;
* [[osForceOtherSit]]&lt;br /&gt;
* [[osGetAgentIP]] &lt;br /&gt;
* [[osGetAgents]]&lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
* [[osGetAgentCountry]]&lt;br /&gt;
* [[osGetAvatarHomeURI]]&lt;br /&gt;
* [[osGetAvatarList]] &lt;br /&gt;
* [[osGetGender]]&lt;br /&gt;
* [[osGetHealRate]]&lt;br /&gt;
* [[osGetHealth]]&lt;br /&gt;
* [[osGetNumberOfAttachments]]&lt;br /&gt;
* [[osInviteToGroup]]&lt;br /&gt;
* [[osKickAvatar]]&lt;br /&gt;
* [[osOwnerSaveAppearance]]&lt;br /&gt;
* [[osSetHealRate]]&lt;br /&gt;
* [[osSetHealth]]&lt;br /&gt;
* [[osSetOwnerSpeed]]&lt;br /&gt;
* [[osSetSpeed]]&lt;br /&gt;
* [[osLocalTeleportAgent]]&lt;br /&gt;
* [[osTeleportAgent]] &lt;br /&gt;
* [[osTeleportOwner]] &lt;br /&gt;
* [[osReplaceAgentEnvironment]]&lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== NPCs ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
* [[osIsNpc]]&lt;br /&gt;
* [[osNpcCreate]]&lt;br /&gt;
* [[osGetNpcList]]&lt;br /&gt;
* [[osNpcGetPos]]&lt;br /&gt;
* [[osNpcGetRot]]&lt;br /&gt;
* [[osNpcGetOwner]]&lt;br /&gt;
* [[osNpcLookAt]] {{E}}&lt;br /&gt;
* [[osNpcLoadAppearance]]&lt;br /&gt;
* [[osNpcMoveTo]]&lt;br /&gt;
* [[osNpcMoveToTarget]]&lt;br /&gt;
* [[osNpcPlayAnimation]]&lt;br /&gt;
* [[osNpcRemove]]&lt;br /&gt;
* [[osNpcSaveAppearance]]&lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
* [[osNpcSay]]&lt;br /&gt;
* [[osNpcSayTo]]&lt;br /&gt;
* [[osNpcSetProfileAbout]]&lt;br /&gt;
* [[osNpcSetProfileImage]]&lt;br /&gt;
* [[osNpcSetRot]]&lt;br /&gt;
* [[osNpcShout]]&lt;br /&gt;
* [[osNpcSit]]&lt;br /&gt;
* [[osNpcStand]]&lt;br /&gt;
* [[osNpcStopMoveToTarget]]&lt;br /&gt;
* [[osNpcStopAnimation]]&lt;br /&gt;
* [[osNpcTouch]]&lt;br /&gt;
* [[osNpcWhisper]]&lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== Prim ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
* [[osClearInertia]]&lt;br /&gt;
* [[osClearObjectAnimations]]&lt;br /&gt;
* [[osDie]]&lt;br /&gt;
* [[osForceBreakAllLinks]]&lt;br /&gt;
* [[osForceBreakLink]] &lt;br /&gt;
* [[osForceCreateLink]]&lt;br /&gt;
* [[osGetInertiaData]]&lt;br /&gt;
* [[osGetInventoryItemKey]]&lt;br /&gt;
* [[osGetInventoryName]]&lt;br /&gt;
* [[osGetInventoryNames]] {{new}}&lt;br /&gt;
* [[osGetInventoryItemKeys]] {{new}}&lt;br /&gt;
* [[osGetInventoryDesc]]&lt;br /&gt;
* [[osGetInventoryLastOwner]]&lt;br /&gt;
* [[osGetLinkInventoryName]] {{new}}&lt;br /&gt;
* [[osGetLinkInventoryNames]] {{new}}&lt;br /&gt;
* [[osGetInventoryItemKey| osGetLinkInventoryItemKey]] {{new}}&lt;br /&gt;
* [[osGetInventoryItemKeys | osGetLinkInventoryItemKeys]] {{new}}&lt;br /&gt;
* [[osGetLinkInventoryItemKey]]&lt;br /&gt;
* [[osGetLinkInventoryItemKeys]]&lt;br /&gt;
* [[osGetLinkInventoryKey]] {{new}}&lt;br /&gt;
* [[osGetLinkInventoryKeys]]&lt;br /&gt;
* [[osGetLinkInventoryDesc]] {{new}}&lt;br /&gt;
* [[osGiveLinkInventory]] {{new}}&lt;br /&gt;
* [[osGiveLinkInventoryList]] {{new}}&lt;br /&gt;
* [[osRemoveLinkInventory]] {{new}}&lt;br /&gt;
* [[osGetLastChangedEventKey]]&lt;br /&gt;
* [[osGetLinkNumber]]&lt;br /&gt;
* [[osGetLinkColor]]&lt;br /&gt;
* [[osGetLinkPrimitiveParams]] &lt;br /&gt;
* [[osGetPrimitiveParams]] &lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
* [[osGetRezzingObject]]&lt;br /&gt;
* [[osGetSitActiveRange]]&lt;br /&gt;
* [[osGetLinkSitActiveRange]]&lt;br /&gt;
* [[osGetSitTargetPos]] {{new}}&lt;br /&gt;
* [[osGetSitTargetRot]] {{new}}&lt;br /&gt;
* [[osGetStandTarget]]&lt;br /&gt;
* [[osGetLinkStandTarget]]&lt;br /&gt;
* [[osLinkParticleSystem]] {{new}}&lt;br /&gt;
* [[osMessageAttachments]]&lt;br /&gt;
* [[osMessageObject]]&lt;br /&gt;
* [[osParticleSystem]] {{new}}&lt;br /&gt;
* [[osSetInertia]]&lt;br /&gt;
* [[osSetInertiaAsBox]]&lt;br /&gt;
* [[osSetInertiaAsCylinder]]&lt;br /&gt;
* [[osSetInertiaAsSphere]]&lt;br /&gt;
* [[osSetPrimitiveParams]] &lt;br /&gt;
* [[osSetProjectionParams]]&lt;br /&gt;
* [[osSetSitActiveRange]]&lt;br /&gt;
* [[osSetLinkSitActiveRange]]&lt;br /&gt;
* [[osSetStandTarget]]&lt;br /&gt;
* [[osSetLinkStandTarget]]&lt;br /&gt;
* [[osTeleportObject]]&lt;br /&gt;
* [[osVolumeDetect]]&lt;br /&gt;
* [[osGetPrimCount]] {{new}}&lt;br /&gt;
* [[osGetSittingAvatarsCount]] {{new}}&lt;br /&gt;
&lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== Prim Drawing / Dynamic Texture ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
* [[osDrawEllipse]]&lt;br /&gt;
* [[osDrawFilledEllipse]]&lt;br /&gt;
* [[osDrawFilledPolygon]]&lt;br /&gt;
* [[osDrawFilledRectangle]]&lt;br /&gt;
* [[osDrawImage]]&lt;br /&gt;
* [[osDrawLine]]&lt;br /&gt;
* [[osDrawPolygon]]&lt;br /&gt;
* [[osDrawRectangle]]&lt;br /&gt;
* [[osDrawResetTransform]]&lt;br /&gt;
* [[osDrawRotationTransform]]&lt;br /&gt;
* [[osDrawScaleTransform]]&lt;br /&gt;
* [[osDrawText]]&lt;br /&gt;
* [[osDrawTextText]]&lt;br /&gt;
* [[osDrawTranslationTransform]]&lt;br /&gt;
* [[osGetDrawStringSize]]&lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
* [[osMovePen]]&lt;br /&gt;
* [[osSetFontName]]&lt;br /&gt;
* [[osSetFontSize]]&lt;br /&gt;
* [[osSetPenCap]]&lt;br /&gt;
* [[osSetPenColor]]&lt;br /&gt;
* [[osSetPenSize]]&lt;br /&gt;
* [[osSetDynamicTextureData]]&lt;br /&gt;
* [[osSetDynamicTextureDataFace]]&lt;br /&gt;
* [[osSetDynamicTextureDataBlend]]&lt;br /&gt;
* [[osSetDynamicTextureDataBlendFace]] &lt;br /&gt;
* [[osSetDynamicTextureURL]]&lt;br /&gt;
* [[osSetDynamicTextureURLBlend]]&lt;br /&gt;
* [[osSetDynamicTextureURLBlendFace]]&lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== Notecard ===&lt;br /&gt;
* [[osGetNotecard]] &lt;br /&gt;
* [[osGetNotecardLine]] &lt;br /&gt;
* [[osGetNumberOfNotecardLines]]&lt;br /&gt;
* [[osMakeNotecard]]&lt;br /&gt;
&lt;br /&gt;
=== Sound ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
* [[osAdjustSoundVolume]]&lt;br /&gt;
* [[osCollisionSound]]&lt;br /&gt;
* [[osLoopSound]]&lt;br /&gt;
* [[osLoopSoundMaster]]&lt;br /&gt;
* [[osLoopSoundSlave]]&lt;br /&gt;
* [[osPlaySound]]&lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
* [[osPlaySoundSlave]]&lt;br /&gt;
* [[osPreloadSound]]&lt;br /&gt;
* [[osSetSoundRadius]]&lt;br /&gt;
* [[osStopSound]]&lt;br /&gt;
* [[osTriggerSound]]&lt;br /&gt;
* [[osTriggerSoundLimited]]&lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== HTTP ===&lt;br /&gt;
* [[osRequestSecureURL]]&lt;br /&gt;
* [[osRequestURL]]&lt;br /&gt;
* [[osSetContentType]]&lt;br /&gt;
&lt;br /&gt;
=== Parcel ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
* [[osParcelJoin]] &lt;br /&gt;
* [[osParcelSubdivide]] &lt;br /&gt;
* [[osGetParcelDwell]]&lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
* [[osSetParcelDetails]]&lt;br /&gt;
* [[osGetParcelDetails]]&lt;br /&gt;
* [[osGetParcelIDs]]&lt;br /&gt;
* [[osGetParcelID]]&lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== Terrain ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
* [[osGetTerrainHeight]] &lt;br /&gt;
* [[osSetTerrainHeight]] &lt;br /&gt;
* [[osSetTerrainTexture]]&lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
* [[osSetTerrainTextures]] {{new}}&lt;br /&gt;
* [[osSetTerrainTextureHeight]]&lt;br /&gt;
* [[osTerrainFlush]]&lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== Region / Parcel Environment ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
* [[osGetCurrentSunHour]] &lt;br /&gt;
* [[osGetApparentTime]]&lt;br /&gt;
* [[osGetApparentTimeString]]&lt;br /&gt;
* [[osGetApparentRegionTime]]&lt;br /&gt;
* [[osGetApparentRegionTimeString]]&lt;br /&gt;
* [[osGetWindParam]] &lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
* [[osSetRegionWaterHeight]] &lt;br /&gt;
* [[osSetWindParam]]&lt;br /&gt;
* [[osWindActiveModelPluginName]]&lt;br /&gt;
* [[osReplaceParcelEnvironment]]&lt;br /&gt;
* [[osReplaceRegionEnvironment]]&lt;br /&gt;
* [[osResetEnvironment]]&lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== Grid / Region Information ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
* [[osCheckODE]]&lt;br /&gt;
* [[osGetGridCustom]]&lt;br /&gt;
* [[osGetGridGatekeeperURI]]&lt;br /&gt;
* [[osGetGridHomeURI]]&lt;br /&gt;
* [[osGetGridLoginURI]]&lt;br /&gt;
* [[osGetGridName]] &lt;br /&gt;
* [[osGetGridNick]] &lt;br /&gt;
* [[osGetMapTexture]] &lt;br /&gt;
* [[osGetPhysicsEngineName]]&lt;br /&gt;
* [[osGetPhysicsEngineType]]&lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
* [[osGetRegionMapTexture]] &lt;br /&gt;
* [[osGetRegionSize]]&lt;br /&gt;
* [[osGetRegionStats]] &lt;br /&gt;
* [[osGetScriptEngineName]] &lt;br /&gt;
* [[osGetSimulatorMemory]] &lt;br /&gt;
* [[osGetSimulatorMemoryKB]]&lt;br /&gt;
* [[osGetSimulatorVersion]] &lt;br /&gt;
* [[osLoadedCreationDate]] &lt;br /&gt;
* [[osLoadedCreationID]] &lt;br /&gt;
* [[osLoadedCreationTime]] &lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== Administration ===&lt;br /&gt;
* [[osConsoleCommand]] &lt;br /&gt;
* [[osRegionNotice]]&lt;br /&gt;
* [[osRegionRestart]] &lt;br /&gt;
* [[osSetParcelMediaURL]] &lt;br /&gt;
* [[osSetParcelMusicURL]]&lt;br /&gt;
* [[osSetParcelSIPAddress]]&lt;br /&gt;
&lt;br /&gt;
=== Script ===&lt;br /&gt;
*[[osResetAllScripts]]&lt;br /&gt;
&lt;br /&gt;
=== String Manipulation ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
* [[osFormatString]]&lt;br /&gt;
* [[osListenRegex]]&lt;br /&gt;
* [[osMatchString]]&lt;br /&gt;
* [[osRegexIsMatch]]&lt;br /&gt;
* [[osReplaceString]]&lt;br /&gt;
* [[osStringSubString]]&lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
* [[osStringStartsWith]]&lt;br /&gt;
* [[osStringEndsWith]]&lt;br /&gt;
* [[osStringIndexOf]]&lt;br /&gt;
* [[osStringLastIndexOf]]&lt;br /&gt;
* [[osStringRemove]]&lt;br /&gt;
* [[osStringReplace]]&lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== Misc ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
* [[osAESEncrypt]] {{new}}&lt;br /&gt;
* [[osAESDecrypt]] {{new}}&lt;br /&gt;
* [[osAESEncryptTo]] {{new}}&lt;br /&gt;
* [[osAESDecryptFrom]] {{new}}&lt;br /&gt;
* [[osAngleBetween]]&lt;br /&gt;
* [[osApproxEquals]]&lt;br /&gt;
* [[osGetPSTWallclock]]&lt;br /&gt;
* [[osListAs*]] {{new}}&lt;br /&gt;
* [[osListAsFloat]]&lt;br /&gt;
* [[osListAsInteger]]&lt;br /&gt;
* [[osListAsRotation]]&lt;br /&gt;
* [[osListAsString]]&lt;br /&gt;
* [[osListAsVector]]&lt;br /&gt;
* [[osListFindListNext]]&lt;br /&gt;
* [[osOldList2ListStrided]]&lt;br /&gt;
* [[osListSortInPlace]]&lt;br /&gt;
* [[osListSortInPlaceStrided]] {{new}}&lt;br /&gt;
{{multicol-break}}&lt;br /&gt;
* [[osIsUUID]]&lt;br /&gt;
* [[osIsNotValidNumber]]&lt;br /&gt;
* [[osKey2Name]]&lt;br /&gt;
* [[osMax]]&lt;br /&gt;
* [[osMin]]&lt;br /&gt;
* [[osRound]]&lt;br /&gt;
* [[osSHA256]]&lt;br /&gt;
* [[osSlerp]]&lt;br /&gt;
* [[osTemperature2sRGB]]&lt;br /&gt;
* [[osUnixTimeToTimestamp]] &lt;br /&gt;
* [[osVecDistSquare]]&lt;br /&gt;
* [[osVecMagSquare]]&lt;br /&gt;
{{multicol-end}}&lt;br /&gt;
&lt;br /&gt;
=== Deprecated ===&lt;br /&gt;
* [[osParcelSetDetails|&amp;lt;strike&amp;gt;osParcelSetDetails&amp;lt;/strike&amp;gt;]] - Use [[osSetParcelDetails]] &lt;br /&gt;
* [[osSetPenColour|&amp;lt;strike&amp;gt;osSetPenColour&amp;lt;/strike&amp;gt;]] - Use [[osSetPenColor]] &lt;br /&gt;
* [[osSunGetParam|&amp;lt;strike&amp;gt;osSunGetParam&amp;lt;/strike&amp;gt;]] - Use [[osGetSunParam]] &lt;br /&gt;
* [[osSunSetParam|&amp;lt;strike&amp;gt;osSunSetParam&amp;lt;/strike&amp;gt;]] - Use [[osSetSunParam]] &lt;br /&gt;
* [[osTerrainGetHeight|&amp;lt;strike&amp;gt;osTerrainGetHeight&amp;lt;/strike&amp;gt;]] - Use [[osGetTerrainHeight]] &lt;br /&gt;
* [[osTerrainSetHeight|&amp;lt;strike&amp;gt;osTerrainSetHeight&amp;lt;/strike&amp;gt;]] - Use [[osSetTerrainHeight]]&lt;br /&gt;
*&amp;lt;strike&amp;gt;osWindParamGet&amp;lt;/strike&amp;gt; - Use [[osGetWindParam]]&lt;br /&gt;
*&amp;lt;strike&amp;gt;osWindParamSet&amp;lt;/strike&amp;gt; - Use [[osSetWindParam]]&lt;br /&gt;
* [[osList2Double|&amp;lt;strike&amp;gt;osList2Double&amp;lt;/strike&amp;gt;]] - Use llList2Float&lt;br /&gt;
* [[osListAs|&amp;lt;strike&amp;gt;osListAs&amp;lt;/strike&amp;gt;]] - Use explicit variants [[osListAsFloat]], [[osListAsInteger]], [[osListAsRotation]], [[osListAsString]], [[osListAsVector]]&lt;br /&gt;
* [[osGrantScriptPermissions|&amp;lt;strike&amp;gt;osGrantScriptPermissions&amp;lt;/strike&amp;gt;]] - Not in current ''IOSSL_Api.cs'' interface&lt;br /&gt;
* [[osRevokeScriptPermissions|&amp;lt;strike&amp;gt;osRevokeScriptPermissions&amp;lt;/strike&amp;gt;]] - Not in current ''IOSSL_Api.cs'' interface&lt;br /&gt;
* [[osGetSunParam]]&lt;br /&gt;
* [[osSetEstateSunSettings]]&lt;br /&gt;
* [[osSetRegionSunSettings]]&lt;br /&gt;
* [[osSetSunParam]]&lt;br /&gt;
* [[osSetPrimFloatOnWater]]&lt;br /&gt;
&lt;br /&gt;
== See Also  ==&lt;br /&gt;
&lt;br /&gt;
* [[OSSL_vs_LSL|LSL&amp;amp;OSSL : Neighbour functions, similarities and differences]] &lt;br /&gt;
* [[Accessing_Prim_Properties|LSL&amp;amp;OSSL : Guide to prims addressing (by linknum, by uuid)]]&lt;br /&gt;
* [[LSL Status|LSL/OSSL Status Page]] &lt;br /&gt;
*OSSL &lt;br /&gt;
** [[OSSL_Implemented|OSSL Implemented Functions]] &lt;br /&gt;
** [[OSSL Constants|OSSL Constants]] &lt;br /&gt;
** [[OSSL Status/Types|OSSL Types Status Page]] &lt;br /&gt;
** [[OSSL Status/Events|OSSL Events Status Page]] &lt;br /&gt;
&lt;br /&gt;
** [[Dynamic_textures|OSSL osDynamicTextures Functions Index Page]]&lt;br /&gt;
** [[OSSL TextureDrawing|OSSL TextureDrawing Extended Information]]&lt;br /&gt;
** [[OSSLNPC|OSSL functions for working with NPCs]]&lt;br /&gt;
&lt;br /&gt;
** [[OSSL Proposals|OSSL Proposed Functions]] &lt;br /&gt;
** [[OSSL Enabling Functions]] &lt;br /&gt;
** [[OSSL Standards|OSSL Standards]]&lt;br /&gt;
&lt;br /&gt;
* LS&lt;br /&gt;
** [[LightShare#LightShare Scripting|LightShare Functions]]&lt;br /&gt;
&lt;br /&gt;
* MOD&lt;br /&gt;
** [[OSSL Script Library/ModSendCommand|modSendCommand()]]&lt;br /&gt;
** [[OSSL Script Library/ModInvoke|Custom functions using modInvoke()]]&lt;br /&gt;
&lt;br /&gt;
* NPC&lt;br /&gt;
** [[Appearance_Formats|Appearance Notecard Format]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;br /&gt;
[[Category:Scripts]]&lt;br /&gt;
[[Category:OSSL]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/LSL_Status</id>
		<title>LSL Status</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/LSL_Status"/>
				<updated>2026-04-30T06:39:13Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Quicklinks}}&lt;br /&gt;
{{content}}&lt;br /&gt;
&lt;br /&gt;
= What is the current LSL/OSSL Status? =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color:#FFA500; padding:10px; padding-bottom:5px; border: 1px #FF544F solid&amp;quot;&amp;gt;&lt;br /&gt;
This overview is intentionally brief. Source of truth for available script functions is the OpenSim source code interfaces:&amp;lt;br&amp;gt;&lt;br /&gt;
''OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs'' and ''OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs''.&amp;lt;br&amp;gt;&lt;br /&gt;
Source check on 2026-04-30: ''475'' ll* signatures and ''296'' os* signatures in those interfaces.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
'''This page is always WRONG'''&amp;lt;br&amp;gt;&lt;br /&gt;
''If you find a feature that works that is not listed as &amp;quot;working&amp;quot; here,''&lt;br /&gt;
''Please fully test it out and update it here or make a note that it is working and ready to be tested, if you can't test it.''&lt;br /&gt;
&lt;br /&gt;
== LSL/OSSL Status | Quick Progress Guide ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Script tests'''&lt;br /&gt;
{| style=&amp;quot;border: 1px solid black;&amp;quot; cellspacing=1 width=50% height=15x align=left&lt;br /&gt;
|align=center width=48.0% style=&amp;quot;background:#00E000; padding: 1px 0;&amp;quot;|&lt;br /&gt;
|align=center width=52.0% style=&amp;quot;background:#E00000; padding: 1px 0;&amp;quot;|&lt;br /&gt;
&amp;lt;!-- |align=center width=50.0% style=background:#E00000| --&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''[[LSL Status/Types|LSL-Types Status]]'''&lt;br /&gt;
{| style=&amp;quot;border: 1px solid black;&amp;quot; cellspacing=1 width=50% height=15x align=left&lt;br /&gt;
|align=center width=100% style=&amp;quot;background:#00E000; padding: 1px 0;&amp;quot;|&lt;br /&gt;
|align=center width=0% style=&amp;quot;background:#E00000; padding: 1px 0;&amp;quot;|&lt;br /&gt;
&amp;lt;!-- |align=center width=40% style=background:#E00000| --&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''[[LSL Status/Events|LSL-Events Status]]'''&lt;br /&gt;
{| style=&amp;quot;border: 1px solid black;&amp;quot; cellspacing=1 width=50% height=15x align=left&lt;br /&gt;
|align=center width=94.0% style=&amp;quot;background:#00E000; padding: 1px 0;&amp;quot;|&lt;br /&gt;
|align=center width=6.0% style=&amp;quot;background:#E00000; padding: 1px 0;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''[[LSL Status/Functions|LSL-Functions Status]]'''&lt;br /&gt;
{| style=&amp;quot;border: 1px solid black;&amp;quot; cellspacing=1 width=50% height=15x align=left&lt;br /&gt;
|align=center width=85.0% style=&amp;quot;background:#00E000; padding: 1px 0;&amp;quot;|&lt;br /&gt;
|align=center width=15.0% style=&amp;quot;background:#E00000; padding: 1px 0;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Source Delta (2026-04-30) ==&lt;br /&gt;
&lt;br /&gt;
* Full local report file: ''LSL-OSSL-Source-Delta.txt''&lt;br /&gt;
* LSL categorization report: ''LSL-Delta-Categories.txt''&lt;br /&gt;
* Compared sources: ''ILSL_Api.cs'' and ''IOSSL_Api.cs'' vs ''LSL-OSSL-Status.wiki.txt'' + ''OSSL_Functions.wiki.txt'' + ''LSL_Status_Functions.wiki.txt''&lt;br /&gt;
* OSSL unique signatures in source: 266&lt;br /&gt;
* OSSL unique names in compared wiki files: 270&lt;br /&gt;
* OSSL missing in wiki: 0&lt;br /&gt;
* OSSL wiki-only (not found in source): 4&lt;br /&gt;
* LSL unique signatures in source: 473&lt;br /&gt;
* LSL unique names in compared wiki files: 501&lt;br /&gt;
* LSL missing in wiki: 0&lt;br /&gt;
* LSL wiki-only (not found in source): 28&lt;br /&gt;
&lt;br /&gt;
'''OSSL missing in wiki (source present):'''&lt;br /&gt;
* &amp;lt;none&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''OSSL wiki-only (source missing):'''&lt;br /&gt;
* (legacy/deprecated names in wiki)&lt;br /&gt;
* osGrantScriptPermissions&lt;br /&gt;
* osList2Double&lt;br /&gt;
* osListAs&lt;br /&gt;
* osRevokeScriptPermissions&lt;br /&gt;
&lt;br /&gt;
'''LSL delta note:'''&lt;br /&gt;
* Source-signature coverage is now complete in the compared wiki files; remaining deltas are LL-only/legacy wiki entries not present in current OpenSim ''ILSL_Api.cs''.&lt;br /&gt;
&lt;br /&gt;
== Latest LSL News ==&lt;br /&gt;
&lt;br /&gt;
* Legacy summary counts can be outdated. Verify exact LSL coverage against ''ILSL_Api.cs'' and current script event handling in source.&lt;br /&gt;
* Some notes on converting [[LSL:PrimitiveParams]] to OpenSimulator PrimitiveBaseShape&lt;br /&gt;
&lt;br /&gt;
== Latest OSSL News ==&lt;br /&gt;
&lt;br /&gt;
* For help enabling OSSL, [[OSSL Enabling Functions|click here]].&lt;br /&gt;
* OSSL permissions are controlled by ''bin/config-include/osslDefaultEnable.ini'' and local overrides in ''bin/config-include/osslEnable.ini.example''.&lt;br /&gt;
* ''bin/OpenSim.ini.example'' enables OSSL by including ''config-include/osslDefaultEnable.ini'' in the ''[OSSL]'' section.&lt;br /&gt;
* [[OSSL TextureDrawing|OSSL texture drawing functions]]&lt;br /&gt;
* [[OS Scripting Tutorial]]&lt;br /&gt;
* The current OpenSim tree includes newer OSSL helpers for inventory/link inventory access, region and parcel environment replacement, inertia handling, encryption and list utilities.&lt;br /&gt;
* For exact currently compiled signatures, always verify against ''IOSSL_Api.cs'' in source.&lt;br /&gt;
&lt;br /&gt;
*OSSL Reference&lt;br /&gt;
**[[OSSL_Implemented|OSSL Implemented Functions]] &lt;br /&gt;
**[[OSSL Constants|OSSL Constants]] &lt;br /&gt;
**[[OSSL Status/Types|OSSL Types Status Page]] &lt;br /&gt;
**[[OSSL Status/Events|OSSL Events Status Page]]&lt;br /&gt;
**[[OSSL TextureDrawing|OSSL TextureDrawing Extended Information]]&lt;br /&gt;
**[[OSSLNPC|OSSL functions for working with NPCs]]&lt;br /&gt;
**[[OSSL Proposals|OSSL Proposed Functions]]&lt;br /&gt;
**[[OSSL Enabling Functions]]&lt;br /&gt;
**[[OSSL Standards|OSSL Standards]]&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
* [[LSL_OSSL_Standards|Proposed LSL OSSL coding standards]]&lt;br /&gt;
* LSL&lt;br /&gt;
** [[LSL Status/Types|LSL Types Status Page]]&lt;br /&gt;
** [[LSL Status/Events|LSL Events Status Page]]&lt;br /&gt;
** [[LSL Status/Functions|LSL Functions Status Page]]&lt;br /&gt;
** [[LSL_Status/Constants|LSL Constants]]&lt;br /&gt;
** [[LSL Status/Kan-ed|Kan-Ed Tests]]&lt;br /&gt;
&lt;br /&gt;
* OSSL&lt;br /&gt;
** [[OSSL_Implemented|OSSL Implemented Functions]]&lt;br /&gt;
** [[OSSL Constants|OSSL Constants]]&lt;br /&gt;
** [[OSSL Status/Types|OSSL Types Status Page]]&lt;br /&gt;
** [[OSSL Status/Events|OSSL Events Status Page]]&lt;br /&gt;
** [[Dynamic_textures|OSSL osDynamicTextures Functions Index Page]]&lt;br /&gt;
** [[OSSL TextureDrawing|OSSL TextureDrawing Extended Information]]&lt;br /&gt;
** [[OSSLNPC|OSSL functions for working with NPCs]]&lt;br /&gt;
** [[OSSL Proposals|OSSL Proposed Functions]]&lt;br /&gt;
** [[OSSL Enabling Functions]]&lt;br /&gt;
** [[OSSL Standards|OSSL Standards]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Users]]&lt;br /&gt;
[[Category:Support]]&lt;br /&gt;
[[Category:Tech Reference]]&lt;br /&gt;
[[Category:Help]]&lt;br /&gt;
[[Category:Configuration]]&lt;br /&gt;
[[Category:Getting Started]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Todo]]&lt;br /&gt;
&lt;br /&gt;
[[Category:OSSL]]&lt;br /&gt;
[[Category:OSSL_Functions]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/LSL_Status/Functions</id>
		<title>LSL Status/Functions</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/LSL_Status/Functions"/>
				<updated>2026-04-30T06:28:21Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Quicklinks}}&lt;br /&gt;
&lt;br /&gt;
= What is the current LSL Function Status? =&lt;br /&gt;
&lt;br /&gt;
Back to [[LSL Status]]&lt;br /&gt;
&lt;br /&gt;
== LSL Functions Status ==&lt;br /&gt;
&lt;br /&gt;
'''Updated: October 28, 2014 using OpenSim-1a24b7f/r25290 (0.8-post-fixes)'''&lt;br /&gt;
   added EEP function tested with Y and X Engine using OpenSim 0.9.2.0 Yeti Dev night build 2020-09-09&lt;br /&gt;
&lt;br /&gt;
The update will reflect ALL current LL-LSL Functions including those which are not supported in OpenSimulator.&amp;lt;br /&amp;gt;&lt;br /&gt;
These unsupported functions (notably Pathfinding etc) are there to show what is implemented &amp;amp; not.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
There is a total of 415 LL Functions as of the date of the update.&amp;lt;br /&amp;gt;&lt;br /&gt;
    Deprecated Functions:  12 indicated&amp;lt;br /&amp;gt;&lt;br /&gt;
    God Mode Functions:     3 indicated&amp;lt;br /&amp;gt;&lt;br /&gt;
    Pathfinding Functions: 12 indicated. (Path Finding is '''not''' supported by OpenSimulator)&amp;lt;br /&amp;gt;&lt;br /&gt;
    Total remaining functions: 389&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;llXorBase64Strings&lt;br /&gt;
Function List Reference at SL. [http://wiki.secondlife.com/wiki/Template:LSL_All_Functions/Name Reference]&lt;br /&gt;
&lt;br /&gt;
== Source Delta (2026-04-30) ==&lt;br /&gt;
&lt;br /&gt;
This page was cross-checked against ''OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs''.&lt;br /&gt;
Detailed local categorization: ''LSL-Delta-Categories.txt''&lt;br /&gt;
&lt;br /&gt;
* LSL source unique signatures: 473&lt;br /&gt;
* LSL unique names in compared wiki files: 501&lt;br /&gt;
* LSL missing in wiki: 0&lt;br /&gt;
* LSL wiki-only (not found in current interface): 28&lt;br /&gt;
&lt;br /&gt;
'''LSL missing in wiki (source present) categories'''&lt;br /&gt;
* &amp;lt;none&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''LSL wiki-only (source missing) categories'''&lt;br /&gt;
* LL-only Environment APIs (2)&lt;br /&gt;
* LL-only Experience/KeyValue (11)&lt;br /&gt;
* LL-only Pathfinding/Characters (12)&lt;br /&gt;
* Wiki legacy/other not in interface (3)&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If the Implemented field is blank, the function requires testing and verification.  Possibly incomplete or stub within the OpenSimulator Source code.&amp;lt;br /&amp;gt;&lt;br /&gt;
{{LSL Key Table}}&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Click on a letter to see the implementation information or click on the function to see an example how the function was tested in-world.&lt;br /&gt;
&lt;br /&gt;
{{ABC}}&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#57C604;font-size:10pt;font-weight:bold;border-bottom:1px solid;&amp;quot; align=&amp;quot;center&amp;quot; valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
| width=&amp;quot;5%&amp;quot; scope=&amp;quot;col&amp;quot; | Function &lt;br /&gt;
| width=&amp;quot;2%&amp;quot; scope=&amp;quot;col&amp;quot; | Implemented&lt;br /&gt;
| width=&amp;quot;2%&amp;quot; scope=&amp;quot;col&amp;quot; | Developer&lt;br /&gt;
| width=&amp;quot;2%&amp;quot; scope=&amp;quot;col&amp;quot; | Tester &lt;br /&gt;
| width=&amp;quot;10%&amp;quot; scope=&amp;quot;col&amp;quot; | Comments&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAbs&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=See also [[LlAbs|llAbs]]&lt;br /&gt;
|anc=A&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAcos&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=F&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAddToLandBanList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAddToLandPassList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAdjustSoundVolume&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAgentInExperience&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Experience/KeyValue only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAllowInventoryDrop&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Patnad&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAngleBetween&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=NUnit&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llApplyImpulse&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llApplyRotationalImpulse&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAsin&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAtan2&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAttachToAvatar&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test= acryline&lt;br /&gt;
|comment= Works in OpenSim 0.9.1.0 Dev&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAttachToAvatarTemp&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test= acryline&lt;br /&gt;
|comment= Works in OpenSim 0.9.1.0 Dev &lt;br /&gt;
&lt;br /&gt;
with an error message in Singularity&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAvatarOnLinkSitTarget&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test= acryline&lt;br /&gt;
|comment= Works in OpenSim 0.9.1.0 Dev&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAvatarOnSitTarget&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Teravus&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAxes2Rot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Patnad&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llAxisAngle2Rot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llBase64ToInteger&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=B&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llBase64ToString&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llBreakAllLinks&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llBreakLink&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCastRay&lt;br /&gt;
|status= full&lt;br /&gt;
|impl= Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=C&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCeil&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llChar&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llClearCameraParams&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llClearLinkMedia&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test= acryline&lt;br /&gt;
|comment= Works in OpenSim 0.9.1.0 Dev&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llClearPrimMedia&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test= acryline&lt;br /&gt;
|comment= Works in OpenSim 0.9.1.0 Dev&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCloseRemoteDataChannel&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Jimbo21&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCloud&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCollisionFilter&lt;br /&gt;
|status=&lt;br /&gt;
|impl= yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test= acryline&lt;br /&gt;
|comment= Works in OpenSim 0.9.1.0 Dev&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCollisionSound&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCollisionSprite&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llComputeHash&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCos&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCreateCharacter&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Pathfinding/Character API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCreateKeyValue&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Experience/KeyValue only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCreateLink&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llCSV2List&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDataSizeKeyValue&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Experience/KeyValue only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDeleteCharacter&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Pathfinding/Character API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
|anc=D&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDeleteKeyValue&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Experience/KeyValue only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDeleteSubList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDeleteSubString&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDerezObject&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetachFromAvatar&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedGrab&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedGroup&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedKey&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedLinkNumber&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=tested at 2011.01.25 on 0.7.1 Dev&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedName&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedOwner&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedPos&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedRot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedTouchBinormal&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedTouchFace&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Jeff Kelley&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedTouchNormal&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedTouchPos&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Jeff Kelley&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedTouchST&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Azwaldo Villota&lt;br /&gt;
|comment=* Tested in OpenSim 0.8.0 Dev&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedTouchUV&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=acryline&lt;br /&gt;
|comment=Works in OpenSim 0.9.1.0 Dev&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedType&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDetectedVel&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDialog&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDie&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Krtaylor&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llDumpList2String&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llEdgeOfWorld&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes*&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Garmin Kawaguichi&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=E&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llEjectFromLand&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llEmail&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llEscapeURL&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llEuler2Rot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llEvade&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Pathfinding/Character API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llExecCharacterCmd&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Pathfinding/Character API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llFabs&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
|anc=F&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llFleeFrom&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Pathfinding/Character API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llFloor&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llForceMouselook&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llFrand&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGenerateKey&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=G&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAccel&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAgentInfo&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAgentLanguage&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=cinderblocks&lt;br /&gt;
|test=Gimisa&lt;br /&gt;
|comment=Working as of 0.8.2.0 for local avatar only &lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAgentList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Jeff Kelley&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAgentSize&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAlpha&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=ALLSIDES returns default texture, not sum, specific faces display correctly&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAndResetTime&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2750)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAnimation&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=StrawberryFride&lt;br /&gt;
|test=StrawberryFride&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAnimationList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAnimationOverride&lt;br /&gt;
|status=&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Gimisa&lt;br /&gt;
|comment=works in 0901&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAttached&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetAttachedList&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetBoundingBox&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetCameraAspect&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetCameraFOV&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetCameraPos&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Phrearch&lt;br /&gt;
|test=Phrearch&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetCameraRot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetCenterOfMass&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetClosestNavPoint&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Pathfinding/Character API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetColor&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=ALLSIDES returns default texture, not average, anything trying to grab more than 3 sides fails per example 2&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetCreator&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetDate&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetDayLength&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetDayOffset&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetDisplayName&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment= returns usernames&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetEnergy&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Always returns 1.0f&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetEnv&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetEnvironment&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Environment API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetExperienceDetails&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Experience/KeyValue only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetExperienceErrorMessage&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Experience/KeyValue only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetForce&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetFreeMemory&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetFreeURLs&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Jeff Kelley&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetGeometricCenter&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetGMTclock&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetHealth&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetHTTPHeader&lt;br /&gt;
|status=&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Tokeiito&lt;br /&gt;
|comment=tested at 2011.01.25 on 0.7.1 Dev with XEngine&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetInventoryAcquireTime&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetInventoryCreator&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetInventoryDesc&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetInventoryKey&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetInventoryName&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetInventoryNumber&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetInventoryPermMask&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetInventoryType&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetKey&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLandOwnerAt&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLinkKey&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLinkMedia&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLinkName&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLinkNumber&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2754)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLinkNumberOfSides&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Azwaldo Villota&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLinkPrimitiveParams&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLinkSitFlags&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetListEntryType&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetListLength&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2750)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLocalPos&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetLocalRot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetMass&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetMassMKS&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetMaxScaleFactor&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetMemoryLimit&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetMinScaleFactor&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetMoonDirection&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetMoonRotation&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetNextEmail&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetNotecardLine&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Krtaylor&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetNotecardLineSync&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetNumberOfNotecardLines&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Krtaylor&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetNumberOfPrims&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetNumberOfSides&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetObjectAnimationNames&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetObjectDesc&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetObjectDetails&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetObjectLinkKey&lt;br /&gt;
|status=&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment= 0.9.2.2&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetObjectMass&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Gimisa&lt;br /&gt;
|comment=Sitting avatars are phanton, don't count for the mass.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetObjectName&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetObjectPermMask&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetObjectPrimCount&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetOmega&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetOwner&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetOwnerKey&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetParcelDetails&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetParcelFlags&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetParcelMaxPrims&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetParcelMusicURL&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetParcelPrimCount&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetParcelPrimOwners&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=See also [[LlGetParcelPrimOwners|llGetParcelPrimOwners]]&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetPermissions&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Melanie&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetPermissionsKey&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Melanie&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetPhysicsMaterial&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetPos&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetPrimitiveParams&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetPrimMediaParams&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionAgentCount&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionCorner&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionDayLength&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionDayOffset&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionFlags&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionFPS&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Always returns 10.0f&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionMoonDirection&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionMoonRotation&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionName&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionSunDirection&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionSunRotation&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRegionTimeDilation&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRenderMaterial&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRootPosition&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRootRotation&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetRot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetScale&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetScriptName&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetScriptState&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetSimStats&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetSimulatorHostname&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetSPMaxMemory&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetStartParameter&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Returns always 0!   Same limitations as llSetStatus&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetStartString&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetStaticPath&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Pathfinding/Character API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetStatus&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=dev&lt;br /&gt;
|test=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetSubString&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetSunDirection&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Krtaylor&lt;br /&gt;
|test=FredoChaplin&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetSunRotation&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetTexture&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetTextureOffset&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetTextureRot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetTextureScale&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetTime&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetTimeOfDay&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Vytek&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetTimestamp&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetTorque&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetUnixTime&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetUsedMemory&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetUsername&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetVel&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetVisualParams&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGetWallclock&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGiveInventory&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGiveInventoryList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Patnad&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGiveMoney&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Melanie&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGodLikeRezObject&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGround&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGroundContour&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGroundNormal&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGroundRepel&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llGroundSlope&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llHash&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llHMAC&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llHTTPRequest&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=jimbo21&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=H&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llHTTPResponse&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Tokeiito&lt;br /&gt;
|comment=Tested on 2011.01.25 with 0.7.1 Dev OS and xEngine&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llInsertString&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment= Unlike SL, negative indexes are relative to end of string, so not compatible in this case&lt;br /&gt;
|anc=I&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llInstantMessage&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=100%&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llIntegerToBase64&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llIsFriend&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llIsLinkGLTFMaterial&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llJson2List&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llJsonGetValue&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llJsonSetValue&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llJsonValueType&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llKey2Name&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=K&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llKeyCountKeyValue&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Experience/KeyValue only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llKeysKeyValue&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Experience/KeyValue only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinear2sRGB&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=0.9.3.0&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinkAdjustSoundVolume&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinkParticleSystem&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Jeff Kelley&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=L&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinkPlaySound&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=L&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinksetDataAvailable&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinksetDataCountFound&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinksetDataCountKeys&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinksetDataDelete&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinksetDataDeleteFound&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinksetDataDeleteProtected&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinksetDataFindKeys&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinksetDataListKeys&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinksetDataRead&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinksetDataReadProtected&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinksetDataReset&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinksetDataWrite&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinksetDataWriteProtected&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinkSetSoundQueueing&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinkSetSoundRadius&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinkSitTarget&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Jeff Kelley&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLinkStopSound&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2CSV&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2Float&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2Integer&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2Json&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2Key&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2List&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2ListSlice&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2ListStrided&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2Rot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2754)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2String&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llList2Vector&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListen&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=jimbo21&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListenControl&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=jimbo21&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListenRemove&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=jimbo21&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListFindList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Needed for Kan-ed#11&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListFindListNext&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListFindStrided&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListInsertList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListRandomize&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListReplaceList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListSort&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListSortStrided&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llListStatistics&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLoadURL&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLog&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLog10&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLookAt&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLoopSound&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLoopSoundMaster&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llLoopSoundSlave&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMakeExplosion&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
|anc=M&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMakeFire&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMakeFountain&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMakeSmoke&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llManageEstateAccess&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMapBeacon&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMapDestination&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMD5String&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMessageLinked&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMinEventDelay&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llModifyLand&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llModPow&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llMoveToTarget&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llName2Key&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llNavigateTo&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Pathfinding/Character API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
|anc=N&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llOffsetTexture&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
|anc=O&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llOpenRemoteDataChannel&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=jimbo21&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llOrd&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llOverMyLand&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llOwnerSay&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llParcelMediaCommandList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=P&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llParcelMediaQuery&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llParseString2List&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Spacers are not parsed if separator list is empty&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llParseStringKeepNulls&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llParticleSystem&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Teravus&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPassCollisions&lt;br /&gt;
|status=&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment= True/False argument only, as SL was until 2015&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPassTouches&lt;br /&gt;
|status=&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment= True/False argument only, as SL was until 2015&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPatrolPoints&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Pathfinding/Character API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPlaySound&lt;br /&gt;
|status=&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Azwaldo Villota&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPlaySoundSlave&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPointAt&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPow&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPreloadSound&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPursue&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Pathfinding/Character API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llPushObject&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llReadKeyValue&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Experience/KeyValue only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRefreshPrimURL&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=R&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRegionSay&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRegionSayTo&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=BlueWall&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llReleaseCamera&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llReleaseControls&lt;br /&gt;
|status=&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llReleaseURL&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRemoteDataReply&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=jimbo21&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRemoteDataSetRegion&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRemoteLoadScript&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated (from LSL Wiki)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRemoteLoadScriptPin&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRemoveFromLandBanList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRemoveFromLandPassList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRemoveInventory&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRemoveVehicleFlags&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llReplaceSubString&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestAgentData&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yyes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestDisplayName&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestExperiencePermissions&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Experience/KeyValue only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestInventoryData&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestPermissions&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Melanie&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestSecureURL&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestSimulatorData&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment= Will only report status as up, if the region is registered to grid service, otherwise unknown. Does not test actual connection or any status of a region. Does not return specific version string.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestURL&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Tokeiito&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestUserKey&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRequestUsername&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llResetAnimationOverride&lt;br /&gt;
|status=&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Gimisa&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llResetLandBanList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llResetLandPassList&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llReturnObjectsByID&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Legacy wiki entry. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llReturnObjectsByOwner&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Legacy wiki entry. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llResetOtherScript&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llResetScript&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=This function is ignored in the state_entry() function of the default state&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llResetTime&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2750)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRezAtRoot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRezObject&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRezObjectWithParams&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRot2Angle&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRot2Axis&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRot2Euler&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRot2Fwd&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRot2Left&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRot2Up&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRotateTexture&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRotBetween&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRotLookAt&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Kayaker Magic&lt;br /&gt;
|comment=Works different than SL (better?)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRotTarget&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRotTargetRemove&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llRound&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSameGroup&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=S&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSay&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)(limited to 1023 chars)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llScaleByFactor&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llScaleTexture&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2683)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llScriptDanger&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llScriptProfiler&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSendRemoteData&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=jimbo21&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSensor&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works beyond 96m :) tested past 1000m&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSensorRemove&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSensorRepeat&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works beyond 96m :) tested past 1000m&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetAgentEnvironment&lt;br /&gt;
|status=&lt;br /&gt;
|impl=no&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Environment API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetAlpha&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetAngularVelocity&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetAnimationOverride&lt;br /&gt;
|status=&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Gimisa&lt;br /&gt;
|comment=works in 0901&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetBuoyancy&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Mlorrey&lt;br /&gt;
|comment=Works on free objects, does not make avatars buoyant with scripted attachments&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetCameraAtOffset&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetCameraEyeOffset&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetCameraParams&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetClickAction&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Jeff Kelley&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetColor&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetContentType&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetDamage&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetForce&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment= Does not work with current avatar motors physics&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetForceAndTorque&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetHoverHeight&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes/No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Gimisa &lt;br /&gt;
|comment= 0901 works with ubode physic ONLY &lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetInventoryPermMask&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetKeyframedMotion&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Kayaker Magic&lt;br /&gt;
|comment=Worked well since OpenSim 0.7.6&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLinkAlpha&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Charlie Omega&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2760)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLinkCamera&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Jeff Kelley&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLinkColor&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Charlie Omega&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2760)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLinkMedia&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Jeff Kelley&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLinkPrimitiveParams&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Melanie&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLinkPrimitiveParamsFast&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLinkSitFlags&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLinkTexture&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLinkTextureAnim&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Jeff Kelley&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetLocalRot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetMemoryLimit&lt;br /&gt;
|status=&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetObjectDesc&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=100% implemented&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetObjectName&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=100% implemented&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetObjectPermMask&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetParcelMusicURL&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetPayPrice&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetPhysicsMaterial&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetPos&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688) (now with limitation of 10m as in sl)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetPrimitiveParams&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Melanie&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetPrimMediaParams&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=* Requires testing and Verification (update here plz)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetPrimURL&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetRegionPos&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=MrFrans/Frans Charming&lt;br /&gt;
|comment=Tested on the Kitely and Avacon grids.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetRemoteScriptAccessPin&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Tokeiito&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetRenderMaterial&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetRot&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetScale&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetScriptState&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetSitText&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Teravus&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetSoundQueueing&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetSoundRadius&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetStatus&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetText&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2760)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetTexture&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetTextureAnim&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetTimerEvent&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688) (uses Timer plugin!)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetTorque&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetTouchText&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetVehicleFlags&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetVehicleFloatParam&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetVehicleRotationParam&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetVehicleType&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetVehicleVectorParam&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSetVelocity&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires Implementation (Mar.01.2012)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSHA1String&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSHA256String&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llShout&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688) (limits 1023 chars)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSin&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSitOnLink&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Legacy wiki entry. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}{{FunctionStatusRow&lt;br /&gt;
|name=llSitTarget&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSleep&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=This function CAN lock script threads on XEngine, do not use with XEngine&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSound&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSoundPreload&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSqrt&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llsRGB2Linear&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStartAnimation&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStartObjectAnimation&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStopAnimation&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStopHover&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStopLookAt&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStopMoveToTarget&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStopObjectAnimation&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStopPointAt&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStopSound&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStringLength&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStringToBase64&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llStringTrim&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Hashbox&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llSubStringIndex&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTakeCamera&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
|anc=T&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTakeControls&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Patnad&lt;br /&gt;
|comment=Needed for Kan-ed#12&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTan&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTarget&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTargetedEmail&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTargetOmega&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTargetRemove&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTeleportAgent&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTeleportAgentGlobalCoords&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTeleportAgentHome&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTextBox&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Melanie_T&lt;br /&gt;
|test=Fritigern&lt;br /&gt;
|comment=Operational with Viewers that support it.  V3 and above all do.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llToLower&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llToUpper&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTransferLindenDollars&lt;br /&gt;
|status=part&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Requires External money Module&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTriggerSound&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llTriggerSoundLimited&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llUnescapeURL&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
|anc=U&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llUnSit&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Aran&lt;br /&gt;
|comment=Works.&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llUpdateCharacter&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Pathfinding/Character API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llUpdateKeyValue&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Experience/KeyValue only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llVecDist&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Azwaldo Villota&lt;br /&gt;
|comment=Tested in OpenSim 0.7.6 Dev&lt;br /&gt;
|anc=V&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llVecMag&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Azwaldo Villota&lt;br /&gt;
|comment=Tested in OpenSim 0.7.6 Dev&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llVecNorm&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llVolumeDetect&lt;br /&gt;
|status=&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Gerhard&lt;br /&gt;
|test=Gimisa&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llWanderWithin&lt;br /&gt;
|status=unsupported&lt;br /&gt;
|impl=No&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=LL Pathfinding/Character API only. Not in current OpenSim ILSL_Api.cs&lt;br /&gt;
|anc=W&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llWater&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=Alondria&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llWhisper&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=Charlie Omega&lt;br /&gt;
|comment=(2688) (but limited to 1023 chars)&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llWind&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llWorldPosToHUD&lt;br /&gt;
|status=&lt;br /&gt;
|impl=&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Present in ILSL_Api.cs; requires in-world verification&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llXorBase64&lt;br /&gt;
|status=&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}{{FunctionStatusRow&lt;br /&gt;
|name=llXorBase64Strings&lt;br /&gt;
|status=deprecated&lt;br /&gt;
|impl=yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=Deprecated&lt;br /&gt;
|anc=X&lt;br /&gt;
}}&lt;br /&gt;
{{FunctionStatusRow&lt;br /&gt;
|name=llXorBase64StringsCorrect&lt;br /&gt;
|status=full&lt;br /&gt;
|impl=Yes&lt;br /&gt;
|dev=&lt;br /&gt;
|test=&lt;br /&gt;
|comment=&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Back to [[LSL Status]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Users]]&lt;br /&gt;
[[Category:Support]]&lt;br /&gt;
[[Category:Tech Reference]]&lt;br /&gt;
[[Category:Help]]&lt;br /&gt;
[[Category:Configuration]]&lt;br /&gt;
[[Category:Getting Started]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Todo]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/FSAssets_Service/de</id>
		<title>FSAssets Service/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/FSAssets_Service/de"/>
				<updated>2026-04-09T14:38:44Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|FSAssets_Service}}&lt;br /&gt;
=FS Assets=&lt;br /&gt;
FSAssets ist fuer Grids gedacht, bei denen die Groesse der Datenbank voraussichtlich 50 GB uebersteigt. Diese Option speichert Assets im Dateisystem anstatt im Standarddienst als BLOBs in der Datenbank. Diese Option bietet ausserdem Deduplizierung: Jedes Asset wird beim Speichern gehasht. Existiert ein Asset bereits, verknuepft der Asset-Service auf die vorhandene Datei, statt zwei Kopien abzulegen.&lt;br /&gt;
&lt;br /&gt;
==Performance-Warnung==&lt;br /&gt;
FSAssets speichert Daten als sehr viele kleine Dateien. Abhaengig von Lastprofil und Hardware kann das zu hoher zufaelliger I/O-Last und vielen Metadaten-Operationen fuehren und langsamere Datentraeger leicht ueberlasten (z. B. aeltere HDDs, schwache NAS-Speicher oder stark geteilte virtuelle Datentraeger). Verwende schnellen Speicher fuer BaseDirectory/SpoolDirectory, ueberwache Latenz und Queue-Depth des Datentraegers und plane genug Reserve fuer stark steigende Datei-/Inode-Anzahlen ein.&lt;br /&gt;
&lt;br /&gt;
Das hash-basierte Verzeichnislayout verteilt Dateien auf Unterordner, beseitigt aber die Skalierungsgrenzen von Dateisystem-Metadaten und Verzeichnisindizes nicht. Bei sehr hohen Datei-Anzahlen (Millionen Dateien) koennen Vorgaenge wie Backup, Restore, Replikation, Virenscan, Snapshots und Konsistenzpruefungen zum dominanten Flaschenhals werden.&lt;br /&gt;
&lt;br /&gt;
Praxisbeispiel (kleines Grid):&lt;br /&gt;
* Asset-Dateien: 833659&lt;br /&gt;
* Asset-Groesse: 125 GB&lt;br /&gt;
&lt;br /&gt;
==Konfigurationsoptionen==&lt;br /&gt;
Um FSAssets zu aktivieren, oeffne je nach Setup Robust.ini oder Robust.HG.ini und suche den Abschnitt AssetService. Aendere LocalServiceModule von der aktuellen Option auf:&lt;br /&gt;
&lt;br /&gt;
 LocalServiceModule = &amp;quot;OpenSim.Services.FSAssetService.dll:FSAssetConnector&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Aktiviere ausserdem die folgenden erforderlichen Einstellungen (auskommentieren), diese sind FSAssets-spezifisch:&lt;br /&gt;
&lt;br /&gt;
 BaseDirectory = &amp;quot;./fsassets/data&amp;quot;&lt;br /&gt;
 SpoolDirectory = &amp;quot;./fsassets/tmp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Die folgenden FSAssets-Konfigurationsoptionen sind optional:&lt;br /&gt;
&lt;br /&gt;
 ;FallbackService = &amp;quot;OpenSim.Services.AssetService.dll:AssetService&amp;quot;&lt;br /&gt;
 ;DaysBetweenAccessTimeUpdates = 30&lt;br /&gt;
 ;SecondaryInstance = false&lt;br /&gt;
 ;ShowConsoleStats = true&lt;br /&gt;
&lt;br /&gt;
 ;StorageProvider = &amp;quot;&amp;quot;&lt;br /&gt;
 ;ConnectionString = &amp;quot;&amp;quot;&lt;br /&gt;
 ;Realm = &amp;quot;fsassets&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 ;UseOsgridFormat = false&lt;br /&gt;
 ;DefaultAssetLoader = &amp;quot;&amp;quot;&lt;br /&gt;
 ;AssetLoaderArgs = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* '''BaseDirectory'''&lt;br /&gt;
::Dieses Verzeichnis enthaelt die gespeicherten Asset-Daten.&lt;br /&gt;
* '''SpoolDirectory'''&lt;br /&gt;
::Das Spool-Verzeichnis dient als temporaerer Speicher waehrend ein Asset gehasht und komprimiert wird, bevor es nach BaseDirectory verschoben wird. Dieses Verzeichnis muss auf demselben Dateisystem liegen wie BaseDirectory.&lt;br /&gt;
* '''FallbackService'''&lt;br /&gt;
::Wenn du vom Standard-Asset-Service migrierst, aktiviere diese Option und setze den Standard-Asset-Connector. Damit kann FSAssets vorhandene Assets aus dem alten Service laden und in BaseDirectory speichern. Der Fallback-Service wird geprueft, wenn ein Asset in FSAssets nicht gefunden wird.&lt;br /&gt;
* '''DaysBetweenAccessTimeUpdates'''&lt;br /&gt;
::Standardmaessig wird die Zugriffszeit bei jeder Asset-Anfrage aktualisiert. Mit dieser Option kann die Aktualisierung fuer kuerzlich verwendete Assets uebersprungen und die Anzahl der Datenbankzugriffe reduziert werden.&lt;br /&gt;
* '''SecondaryInstance'''&lt;br /&gt;
::Wenn true, arbeitet diese Instanz nicht als Hauptinstanz von FSAssets im Prozess. Nuetzlich, wenn mehrere FSAssetConnector-Instanzen im selben Prozess erzeugt werden.&lt;br /&gt;
* '''ShowConsoleStats'''&lt;br /&gt;
::Aktiviert periodische FSAssets-Statistikausgaben zu Lesezugriffen/Fehlzugriffen.&lt;br /&gt;
* '''StorageProvider'''&lt;br /&gt;
::Um den Speicherort der Metadaten zu aendern, kann ein eigener StorageProvider inklusive ConnectionString gesetzt werden. Ist diese Option nicht gesetzt, wird der Standard-StorageProvider aus dem Datenbank-Abschnitt fuer die Metadaten genutzt.&lt;br /&gt;
* '''ConnectionString'''&lt;br /&gt;
::Datenbank-Connection-String fuer den optionalen oben genannten StorageProvider.&lt;br /&gt;
* '''Realm'''&lt;br /&gt;
::Tabellenname fuer die Metadaten in der Datenbank. Standard ist 'fsassets'.&lt;br /&gt;
* '''UseOsgridFormat'''&lt;br /&gt;
::Aendert die Ordnerstruktur aus Kompatibilitaetsgruenden von 00/00/00 auf 000/000. False bedeutet 00/00/00 und wird empfohlen.&lt;br /&gt;
* '''DefaultAssetLoader'''&lt;br /&gt;
::Optionales Default-Asset-Loader-Plugin, das beim Start ausgefuehrt wird.&lt;br /&gt;
* '''AssetLoaderArgs'''&lt;br /&gt;
::Optionale Argumentzeichenfolge, die an DefaultAssetLoader uebergeben wird.&lt;br /&gt;
&lt;br /&gt;
==Migration==&lt;br /&gt;
Wenn FallbackService gesetzt ist, kann FSAssets bereits vorhandene Assets beim Zugriff nachtraeglich uebernehmen, falls sie lokal nicht gefunden werden. Dadurch werden jedoch nicht automatisch alle alten Assets umgestellt. Um alle Assets aus dem Standardservice zu konvertieren, steht ein Konsolenbefehl zur Verfuegung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 import &amp;lt;conn&amp;gt; &amp;lt;table&amp;gt; [&amp;lt;start&amp;gt; &amp;lt;count&amp;gt;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Der Import-Befehl erwartet als Parameter einen Datenbank-Connection-String und den Namen der alten Asset-Tabelle. Das folgende Beispiel zeigt den Start des Imports fuer MySQL. Passe die Verbindungsdaten an Schema, Benutzer und Passwort an:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 import &amp;quot;Data Source=localhost;Database=SCHEMA;User ID=USER;Password=PASS;Old Guids=true;&amp;quot; assets&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Je nach Groesse der vorhandenen Asset-Tabelle kann der Import laenger dauern. Mit den optionalen Parametern start und count kannst du Startposition und Anzahl der zu konvertierenden Zeilen steuern.&lt;br /&gt;
&lt;br /&gt;
Es gibt ausserdem einen force-import-Modus, der vorhandene Inhalte bei passenden Asset-IDs ueberschreibt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 force import &amp;lt;conn&amp;gt; &amp;lt;table&amp;gt; [&amp;lt;start&amp;gt; &amp;lt;count&amp;gt;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Verwende diesen Modus nur, wenn Altdaten bewusst den aktuellen FSAssets-Inhalt ersetzen sollen.&lt;br /&gt;
&lt;br /&gt;
Falls der Import mit einem Timeout-Fehler abbricht, fuege &amp;quot;Command Timeout=300;&amp;quot; zum Connection-String hinzu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import &amp;quot;Data Source=localhost;Port=3306;Database=Robust;User ID=SomeRobustuser;Password=Somerobustpassword;Old Guids=true;Command Timeout=300;&amp;quot; assets&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Timeout-Einheiten und Standardwerte haengen vom verwendeten Datenbank-Provider bzw. Treiber ab. In vielen Setups wird dieser Wert als Sekunden interpretiert.&lt;br /&gt;
&lt;br /&gt;
==Hinweise zu Import und Export==&lt;br /&gt;
* '''Import'''&lt;br /&gt;
::Wird ueber den FS-Befehlssatz mit import und force import unterstuetzt.&lt;br /&gt;
* '''Export'''&lt;br /&gt;
::Es gibt im FS-Befehlssatz keinen dedizierten Bulk-Export-Befehl. Fuer vollstaendige Exporte/Backups sollten immer beide Bestandteile gesichert werden:&lt;br /&gt;
::# die Asset-Dateien unter BaseDirectory&lt;br /&gt;
::# die FSAssets-Metadatentabelle (Realm, Standard &amp;quot;fsassets&amp;quot;) aus der konfigurierten Datenbank&lt;br /&gt;
::Fuer einzelne Assets kann je nach aktivierten Asset-Service-Handlern/Modulen der Befehl dump asset &amp;lt;ID&amp;gt; verfuegbar sein.&lt;br /&gt;
&lt;br /&gt;
==Hypergrid Assets==&lt;br /&gt;
Wenn dein Grid Hypergrid aktiviert hat, ist haeufig HGAssetService fuer den Asset-Austausch mit anderen Grids konfiguriert. In diesem Fall muss im HGAssetService-Abschnitt der Robust.ini auf die FSAssets-Variante HGFSAssetService umgestellt werden.&lt;br /&gt;
&lt;br /&gt;
Um HGFSAssetService zu aktivieren, aendere im HGAssetService-Abschnitt von Robust.ini den LocalServiceModule-Eintrag zu:&lt;br /&gt;
&lt;br /&gt;
	LocalServiceModule = &amp;quot;OpenSim.Services.HypergridService.dll:HGFSAssetService&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Die folgenden HGAssetService-Optionen werden von HGFSAssetService ebenfalls verwendet:&lt;br /&gt;
&lt;br /&gt;
 UserAccountsService = &amp;quot;...&amp;quot;&lt;br /&gt;
 ;DisallowExport = &amp;quot;...&amp;quot;&lt;br /&gt;
 ;DisallowImport = &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
HomeURI ist fuer den Hypergrid-Betrieb ebenfalls erforderlich und wird ueblicherweise aus den Abschnitten Startup/Hypergrid/HGAssetService gelesen.&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/FSAssets_Service</id>
		<title>FSAssets Service</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/FSAssets_Service"/>
				<updated>2026-04-09T14:37:52Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|FSAssets_Service}}&lt;br /&gt;
=FS Assets=&lt;br /&gt;
FSAssets is intended for grids where the size of the database is expected to exceed 50GB. This option will save the assets to the file system as opposed to the default service which stores assets as blobs in the database. This option also provides deduplication abilities, each asset is hashed when it is received for storage and if the asset already exists, the asset service will link to the existing file rather than store two copies.&lt;br /&gt;
&lt;br /&gt;
==Performance Warning==&lt;br /&gt;
FSAssets stores data as many small files. Depending on your workload and hardware, this can produce high random I/O and metadata activity and may overload slower disks (for example older HDDs, weak NAS storage, or heavily shared virtual disks). Use fast storage for BaseDirectory/SpoolDirectory, monitor disk latency and queue depth, and plan capacity for inode/file-count growth.&lt;br /&gt;
&lt;br /&gt;
The hash-based directory layout helps distribute files across subfolders, but it does not remove scaling limits of filesystem metadata/index structures. At very large file counts (millions of files), operations like backup, restore, replication, antivirus scans, snapshots, and consistency checks can become a major bottleneck.&lt;br /&gt;
&lt;br /&gt;
Real-world example (small grid):&lt;br /&gt;
* Asset files: 833659&lt;br /&gt;
* Asset size: 125 GB&lt;br /&gt;
&lt;br /&gt;
==Config Options==&lt;br /&gt;
To enable FSAssets, open Robust.ini or Robust.HG.ini depending on whether you are running a standard or hypergrid enabled grid and find the AssetService section. Change the LocalServiceModule from the current option to:&lt;br /&gt;
&lt;br /&gt;
 LocalServiceModule = &amp;quot;OpenSim.Services.FSAssetService.dll:FSAssetConnector&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Also uncomment the following required settings, these are specific to FSAssets:&lt;br /&gt;
&lt;br /&gt;
 BaseDirectory = &amp;quot;./fsassets/data&amp;quot;&lt;br /&gt;
 SpoolDirectory = &amp;quot;./fsassets/tmp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The following are optional FSAsset config options:&lt;br /&gt;
&lt;br /&gt;
 ;FallbackService = &amp;quot;OpenSim.Services.AssetService.dll:AssetService&amp;quot;&lt;br /&gt;
 ;DaysBetweenAccessTimeUpdates = 30&lt;br /&gt;
 ;SecondaryInstance = false&lt;br /&gt;
 ;ShowConsoleStats = true&lt;br /&gt;
&lt;br /&gt;
 ;StorageProvider = &amp;quot;&amp;quot;&lt;br /&gt;
 ;ConnectionString = &amp;quot;&amp;quot;&lt;br /&gt;
 ;Realm = &amp;quot;fsassets&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 ;UseOsgridFormat = false&lt;br /&gt;
 ;DefaultAssetLoader = &amp;quot;&amp;quot;&lt;br /&gt;
 ;AssetLoaderArgs = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* '''BaseDirectory'''&lt;br /&gt;
::This is the folder in which the asset data will be saved.&lt;br /&gt;
* '''SpoolDirectory'''&lt;br /&gt;
::The spool directory is a folder used for temporary storage while the asset is hashed and compressed before it gets moved to the BaseDirectory. This must be on the same file system as the base directory.&lt;br /&gt;
* '''FallbackService'''&lt;br /&gt;
::If you are upgrading from the default asset service, uncomment this and set the default asset connector. This will allow FSAssets to retrieve an existing asset from the old service and add it to the BaseDirectory. The fallback service is checked when an asset is requested but not found by FSAssets.&lt;br /&gt;
* '''DaysBetweenAccessTimeUpdates'''&lt;br /&gt;
::By default, the access time is updated each time an asset is requested. This option can be used to skip this update for assets that already have a recent access time and reduce calls to the database.&lt;br /&gt;
* '''SecondaryInstance'''&lt;br /&gt;
::When true, this instance does not act as the main FSAssets instance in the process. Useful if multiple FSAssetConnector instances are created in one process.&lt;br /&gt;
* '''ShowConsoleStats'''&lt;br /&gt;
::Enables periodic FSAssets read/miss statistics output.&lt;br /&gt;
* '''StorageProvider'''&lt;br /&gt;
::To change where the metadata is saved you can set a specific storage provider and connection string. If this is disabled, the default storage provider given in the database section will be used to save metadata.&lt;br /&gt;
* '''ConnectionString'''&lt;br /&gt;
::DB connection string for the optional StorageProvider mentioned above.&lt;br /&gt;
* '''Realm'''&lt;br /&gt;
::The table name to save metadata in the database. Default is 'fsassets'&lt;br /&gt;
* '''UseOsgridFormat'''&lt;br /&gt;
::Changes the folder structure from 00/00/00 to 000/000 for compatibility reasons. False means 00/00/00 which is encouraged.&lt;br /&gt;
* '''DefaultAssetLoader'''&lt;br /&gt;
::Optional default asset loader plugin used at startup.&lt;br /&gt;
* '''AssetLoaderArgs'''&lt;br /&gt;
::Optional argument string passed to DefaultAssetLoader.&lt;br /&gt;
&lt;br /&gt;
==Migration==&lt;br /&gt;
While FSAssets will use the FallbackService if set, to convert any existing assets when they are requested and not found, this will not automatically convert all the old assets to the new service. To convert all assets from the default service there is a console command provided:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 import &amp;lt;conn&amp;gt; &amp;lt;table&amp;gt; [&amp;lt;start&amp;gt; &amp;lt;count&amp;gt;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The import command expects a database connection string and the name of the legacy asset table to be passed as parameters. The following example shows how to start the import process for a MySQL database, just change the connection details to match your database schema, username and password:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 import &amp;quot;Data Source=localhost;Database=SCHEMA;User ID=USER;Password=PASS;Old Guids=true;&amp;quot; assets&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Depending on the size of your existing assets table, the import process will take some time to complete. The optional parameters, start and count allow you to specify the position and number of rows to convert.&lt;br /&gt;
&lt;br /&gt;
There is also a force import mode that overwrites existing content for matching asset IDs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 force import &amp;lt;conn&amp;gt; &amp;lt;table&amp;gt; [&amp;lt;start&amp;gt; &amp;lt;count&amp;gt;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Use this only when you explicitly want legacy data to replace current FSAssets content.&lt;br /&gt;
&lt;br /&gt;
If the import command fails with a timeout error, add &amp;quot;Command Timeout=300;&amp;quot; to the connection string:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import &amp;quot;Data Source=localhost;Port=3306;Database=Robust;User ID=SomeRobustuser;Password=Somerobustpassword;Old Guids=true;Command Timeout=300;&amp;quot; assets&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Timeout units and defaults depend on the database provider/driver. In most setups this value is interpreted as seconds.&lt;br /&gt;
&lt;br /&gt;
==Import and Export Notes==&lt;br /&gt;
* '''Import'''&lt;br /&gt;
::Supported by the FS command set via import and force import.&lt;br /&gt;
* '''Export'''&lt;br /&gt;
::There is no dedicated bulk export command in the FS command set. For full exports/backups, include both:&lt;br /&gt;
::# the asset files under BaseDirectory&lt;br /&gt;
::# the FSAssets metadata table (Realm, default &amp;quot;fsassets&amp;quot;) from the configured database&lt;br /&gt;
::For single assets, dump asset &amp;lt;ID&amp;gt; may be available depending on enabled asset service handlers/modules.&lt;br /&gt;
&lt;br /&gt;
==Hypergrid Assets==&lt;br /&gt;
If your grid has hypergrid enabled, you probably have it setup to use the HGAssetService for sharing assets with other grids. In this situation you will need to change the HGAssetService section of your Robust.ini to point to the FSAssets version of the HGAssetService known as HGFSAssetService.&lt;br /&gt;
&lt;br /&gt;
To enable the HGFSAssetService, find the HGAssetService section of your Robust.ini, the LocalServiceModule should be changed to:&lt;br /&gt;
&lt;br /&gt;
  LocalServiceModule = &amp;quot;OpenSim.Services.HypergridService.dll:HGFSAssetService&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The following HGAssetService options are also used by HGFSAssetService:&lt;br /&gt;
&lt;br /&gt;
 UserAccountsService = &amp;quot;...&amp;quot;&lt;br /&gt;
 ;DisallowExport = &amp;quot;...&amp;quot;&lt;br /&gt;
 ;DisallowImport = &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
HomeURI is also required for Hypergrid operation and is usually provided from Startup/Hypergrid/HGAssetService sections.&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/InterestManagement</id>
		<title>InterestManagement</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/InterestManagement"/>
				<updated>2026-01-24T09:18:27Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|InterestManagement}}&lt;br /&gt;
&lt;br /&gt;
'''InterestManagement''' is a subsystem in [[OpenSimulator]] (OpenSim) that manages the prioritization and control of updates for [[Avatar]]s and objects between the server and client. It is primarily configured via the &amp;lt;code&amp;gt;[InterestManagement]&amp;lt;/code&amp;gt; section and serves to efficiently distribute [[bandwidth]] and [[CPU]] load.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
InterestManagement settings are located in the &amp;lt;code&amp;gt;OpenSim.ini&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;OpenSimDefaults.ini&amp;lt;/code&amp;gt; file. The following parameters are available in the &amp;lt;code&amp;gt;[InterestManagement]&amp;lt;/code&amp;gt; section:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Description&lt;br /&gt;
! Values / Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;UpdatePrioritizationScheme&amp;lt;/code&amp;gt;&lt;br /&gt;
| Sets the scheme for prioritizing updates.&lt;br /&gt;
| Possible values:&lt;br /&gt;
* &amp;lt;code&amp;gt;BestAvatarResponsiveness&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SimpleAngularDistance&amp;lt;/code&amp;gt; (more CPU intensive)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ReprioritizationEnabled&amp;lt;/code&amp;gt;&lt;br /&gt;
| Enables regular re-prioritization of update priorities.&lt;br /&gt;
| &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ReprioritizationInterval&amp;lt;/code&amp;gt;&lt;br /&gt;
| Time interval (in milliseconds) between re-prioritization runs.&lt;br /&gt;
| Number (in ms)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RootReprioritizationDistance&amp;lt;/code&amp;gt;&lt;br /&gt;
| Distance threshold for re-prioritizing root (main) avatars.&lt;br /&gt;
| Number (distance)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ObjectsCullingByDistance&amp;lt;/code&amp;gt;&lt;br /&gt;
| If enabled, object updates outside the view distance are not sent to the client.&lt;br /&gt;
| &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; – Saves bandwidth but increases CPU load.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RootTerseUpdatePeriod&amp;lt;/code&amp;gt;&lt;br /&gt;
| Only every nth compact (&amp;quot;terse&amp;quot;) update is sent for avatars within the same region.&lt;br /&gt;
| Number (0 = always send)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ChildTerseUpdatePeriod&amp;lt;/code&amp;gt;&lt;br /&gt;
| Only every nth compact (&amp;quot;terse&amp;quot;) update is sent for avatars in other regions (e.g., neighboring regions).&lt;br /&gt;
| Number (0 = always send)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These options allow fine-tuning of how often and under what conditions clients are informed about state changes of objects and avatars.&lt;br /&gt;
&lt;br /&gt;
== Implementation in Scene.cs ==&lt;br /&gt;
The core code for InterestManagement is located in the &amp;lt;code&amp;gt;Scene.cs&amp;lt;/code&amp;gt; file. However, it does not evaluate the complete list of parameters documented in the INI file.&lt;br /&gt;
&lt;br /&gt;
The following settings are actually read and used in &amp;lt;code&amp;gt;Scene.cs&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;UpdatePrioritizationScheme&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ReprioritizationEnabled&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ReprioritizationInterval&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;RootReprioritizationDistance&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ObjectsCullingByDistance&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following parameters, documented in the configuration file, are '''not''' evaluated in &amp;lt;code&amp;gt;Scene.cs&amp;lt;/code&amp;gt; and have no direct effect there:&lt;br /&gt;
* &amp;lt;code&amp;gt;ChildReprioritizationDistance&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;RootTerseUpdatePeriod&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ChildTerseUpdatePeriod&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Their influence on the system only exists if they are processed elsewhere in the OpenSimulator source code.&lt;br /&gt;
&lt;br /&gt;
== Purpose and Function ==&lt;br /&gt;
The InterestManagement system filters and prioritizes data sent to clients. Its goal is to minimize network load and optimize server performance without significantly degrading the subjective user experience (e.g., avatar responsiveness). For example, &amp;lt;code&amp;gt;ObjectsCullingByDistance&amp;lt;/code&amp;gt; ensures that invisible objects do not generate updates, while prioritization schemes determine which objects or avatars are updated first.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[OpenSimulator]]&lt;br /&gt;
* [[Configuration file]]&lt;br /&gt;
* [[Scene Graph]]&lt;br /&gt;
&lt;br /&gt;
[[Category:OpenSimulator]]&lt;br /&gt;
[[Category:Networking]]&lt;br /&gt;
[[Category:Server technology]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/InterestManagement/de</id>
		<title>InterestManagement/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/InterestManagement/de"/>
				<updated>2026-01-24T09:17:26Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: Created page with &amp;quot;{{Quicklinks|InterestManagement}}  '''InterestManagement''' ist ein Subsystem in OpenSimulator (OpenSim), das die Priorisierung und Steuerung von Aktualisierungen (Updates...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|InterestManagement}}&lt;br /&gt;
&lt;br /&gt;
'''InterestManagement''' ist ein Subsystem in [[OpenSimulator]] (OpenSim), das die Priorisierung und Steuerung von Aktualisierungen (Updates) für [[Avatar]]e und Objekte zwischen Server und Client übernimmt. Es wird hauptsächlich über den Konfigurationsabschnitt &amp;lt;code&amp;gt;[InterestManagement]&amp;lt;/code&amp;gt; gesteuert und dient dazu, [[Bandbreite]] und [[CPU]]-Last effizient zu verteilen.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Die Einstellungen für das InterestManagement erfolgen in der &amp;lt;code&amp;gt;OpenSim.ini&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;OpenSimDefaults.ini&amp;lt;/code&amp;gt;. Die folgenden Parameter sind im Abschnitt &amp;lt;code&amp;gt;[InterestManagement]&amp;lt;/code&amp;gt; verfügbar:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Beschreibung&lt;br /&gt;
! Werte / Bemerkung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;UpdatePrioritizationScheme&amp;lt;/code&amp;gt;&lt;br /&gt;
| Legt das Schema zur Priorisierung von Updates fest.&lt;br /&gt;
| Mögliche Werte:&lt;br /&gt;
* &amp;lt;code&amp;gt;BestAvatarResponsiveness&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SimpleAngularDistance&amp;lt;/code&amp;gt; (intensiver für die CPU)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ReprioritizationEnabled&amp;lt;/code&amp;gt;&lt;br /&gt;
| Aktiviert die regelmäßige Neusortierung (Repriorisierung) der Update-Prioritäten.&lt;br /&gt;
| &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ReprioritizationInterval&amp;lt;/code&amp;gt;&lt;br /&gt;
| Das Zeitintervall (in Millisekunden) zwischen den Neusortierungen.&lt;br /&gt;
| Zahl (in ms)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RootReprioritizationDistance&amp;lt;/code&amp;gt;&lt;br /&gt;
| Die Distanzschwelle, ab der die Priorität von Root-Avataren (Hauptavataren) neu berechnet wird.&lt;br /&gt;
| Zahl (Entfernung)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ObjectsCullingByDistance&amp;lt;/code&amp;gt;&lt;br /&gt;
| Wenn aktiviert, werden Objekt-Updates außerhalb der Sichtweite nicht an den Client gesendet.&lt;br /&gt;
| &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; – Spart Bandbreite, erhöht aber die CPU-Last.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RootTerseUpdatePeriod&amp;lt;/code&amp;gt;&lt;br /&gt;
| Sendet nur jedes n-te kompakte (&amp;quot;Terse&amp;quot;) Update für Avatare innerhalb derselben Region.&lt;br /&gt;
| Zahl (0 = immer senden)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ChildTerseUpdatePeriod&amp;lt;/code&amp;gt;&lt;br /&gt;
| Sendet nur jedes n-te kompakte (&amp;quot;Terse&amp;quot;) Update für Avatare in anderen Regionen (z.B. Nachbarregionen).&lt;br /&gt;
| Zahl (0 = immer senden)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Diese Optionen ermöglichen eine Feinabstimmung, wie häufig und unter welchen Bedingungen Clients über Zustandsänderungen von Objekten und Avataren informiert werden.&lt;br /&gt;
&lt;br /&gt;
== Implementierung in Scene.cs ==&lt;br /&gt;
Der zentrale Code für das InterestManagement befindet sich in der Datei &amp;lt;code&amp;gt;Scene.cs&amp;lt;/code&amp;gt;. Dabei wird jedoch nicht die vollständige in der INI-Datei dokumentierte Parameterliste ausgewertet.&lt;br /&gt;
&lt;br /&gt;
Folgende Einstellungen werden in &amp;lt;code&amp;gt;Scene.cs&amp;lt;/code&amp;gt; tatsächlich gelesen und verwendet:&lt;br /&gt;
* &amp;lt;code&amp;gt;UpdatePrioritizationScheme&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ReprioritizationEnabled&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ReprioritizationInterval&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;RootReprioritizationDistance&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ObjectsCullingByDistance&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die folgenden, in der Konfigurationsdatei dokumentierten Parameter werden in &amp;lt;code&amp;gt;Scene.cs&amp;lt;/code&amp;gt; '''nicht''' ausgewertet und haben dort keine direkte Wirkung:&lt;br /&gt;
* &amp;lt;code&amp;gt;ChildReprioritizationDistance&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;RootTerseUpdatePeriod&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ChildTerseUpdatePeriod&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ihr Einfluss auf das System ist nur gegeben, wenn sie an anderer Stelle im OpenSimulator-Quellcode verarbeitet werden.&lt;br /&gt;
&lt;br /&gt;
== Zweck und Funktionsweise ==&lt;br /&gt;
Das InterestManagement-System filtert und priorisiert die an die Clients zu sendenden Daten. Ziel ist es, die Netzwerklast zu minimieren und die Serverperformance zu optimieren, ohne die subjektive Benutzererfahrung (z.B. Reaktionsfähigkeit der Avatare) wesentlich zu beeinträchtigen. Beispielsweise sorgt &amp;lt;code&amp;gt;ObjectsCullingByDistance&amp;lt;/code&amp;gt; dafür, dass unsichtbare Objekte keine Updates generieren, während die Priorisierungsschemata bestimmen, welche Objekte oder Avatare zuerst aktualisiert werden.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[OpenSimulator]]&lt;br /&gt;
* [[Konfigurationsdatei]]&lt;br /&gt;
* [[Scene Graph]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:OpenSimulator]]&lt;br /&gt;
[[Kategorie:Netzwerk]]&lt;br /&gt;
[[Kategorie:Server-Technik]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/InterestManagement</id>
		<title>InterestManagement</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/InterestManagement"/>
				<updated>2026-01-24T09:15:26Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: Created page with &amp;quot;{{Quicklinks|InterestManagement}}   '''InterestManagement''' is a subsystem in OpenSimulator (OpenSim) that manages the prioritization and control of updates for [[Avatar]...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|InterestManagement}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''InterestManagement''' is a subsystem in [[OpenSimulator]] (OpenSim) that manages the prioritization and control of updates for [[Avatar]]s and objects between the server and client. It is primarily configured via the &amp;lt;code&amp;gt;[InterestManagement]&amp;lt;/code&amp;gt; section and serves to efficiently distribute [[bandwidth]] and [[CPU]] load.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
InterestManagement settings are located in the &amp;lt;code&amp;gt;OpenSim.ini&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;OpenSimDefaults.ini&amp;lt;/code&amp;gt; file. The following parameters are available in the &amp;lt;code&amp;gt;[InterestManagement]&amp;lt;/code&amp;gt; section:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter&lt;br /&gt;
! Description&lt;br /&gt;
! Values / Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;UpdatePrioritizationScheme&amp;lt;/code&amp;gt;&lt;br /&gt;
| Sets the scheme for prioritizing updates.&lt;br /&gt;
| Possible values:&lt;br /&gt;
* &amp;lt;code&amp;gt;BestAvatarResponsiveness&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SimpleAngularDistance&amp;lt;/code&amp;gt; (more CPU intensive)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ReprioritizationEnabled&amp;lt;/code&amp;gt;&lt;br /&gt;
| Enables regular re-prioritization of update priorities.&lt;br /&gt;
| &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ReprioritizationInterval&amp;lt;/code&amp;gt;&lt;br /&gt;
| Time interval (in milliseconds) between re-prioritization runs.&lt;br /&gt;
| Number (in ms)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RootReprioritizationDistance&amp;lt;/code&amp;gt;&lt;br /&gt;
| Distance threshold for re-prioritizing root (main) avatars.&lt;br /&gt;
| Number (distance)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ObjectsCullingByDistance&amp;lt;/code&amp;gt;&lt;br /&gt;
| If enabled, object updates outside the view distance are not sent to the client.&lt;br /&gt;
| &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; – Saves bandwidth but increases CPU load.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RootTerseUpdatePeriod&amp;lt;/code&amp;gt;&lt;br /&gt;
| Only every nth compact (&amp;quot;terse&amp;quot;) update is sent for avatars within the same region.&lt;br /&gt;
| Number (0 = always send)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ChildTerseUpdatePeriod&amp;lt;/code&amp;gt;&lt;br /&gt;
| Only every nth compact (&amp;quot;terse&amp;quot;) update is sent for avatars in other regions (e.g., neighboring regions).&lt;br /&gt;
| Number (0 = always send)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These options allow fine-tuning of how often and under what conditions clients are informed about state changes of objects and avatars.&lt;br /&gt;
&lt;br /&gt;
== Implementation in Scene.cs ==&lt;br /&gt;
The core code for InterestManagement is located in the &amp;lt;code&amp;gt;Scene.cs&amp;lt;/code&amp;gt; file. However, it does not evaluate the complete list of parameters documented in the INI file.&lt;br /&gt;
&lt;br /&gt;
The following settings are actually read and used in &amp;lt;code&amp;gt;Scene.cs&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;UpdatePrioritizationScheme&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ReprioritizationEnabled&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ReprioritizationInterval&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;RootReprioritizationDistance&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ObjectsCullingByDistance&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following parameters, documented in the configuration file, are '''not''' evaluated in &amp;lt;code&amp;gt;Scene.cs&amp;lt;/code&amp;gt; and have no direct effect there:&lt;br /&gt;
* &amp;lt;code&amp;gt;ChildReprioritizationDistance&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;RootTerseUpdatePeriod&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ChildTerseUpdatePeriod&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Their influence on the system only exists if they are processed elsewhere in the OpenSimulator source code.&lt;br /&gt;
&lt;br /&gt;
== Purpose and Function ==&lt;br /&gt;
The InterestManagement system filters and prioritizes data sent to clients. Its goal is to minimize network load and optimize server performance without significantly degrading the subjective user experience (e.g., avatar responsiveness). For example, &amp;lt;code&amp;gt;ObjectsCullingByDistance&amp;lt;/code&amp;gt; ensures that invisible objects do not generate updates, while prioritization schemes determine which objects or avatars are updated first.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[OpenSimulator]]&lt;br /&gt;
* [[Configuration file]]&lt;br /&gt;
* [[Scene Graph]]&lt;br /&gt;
&lt;br /&gt;
[[Category:OpenSimulator]]&lt;br /&gt;
[[Category:Networking]]&lt;br /&gt;
[[Category:Server technology]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/0.9.3.1/de</id>
		<title>0.9.3.1/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/0.9.3.1/de"/>
				<updated>2025-12-16T10:20:25Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ReleaseInfo}}&lt;br /&gt;
{{Quicklinks|0.9.3.1}}&lt;br /&gt;
&lt;br /&gt;
= Allgemeines =&lt;br /&gt;
''' VERSION IN ENTWICKLUNG'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Diese Version erfordert dotnet 8. Wenn Sie nur Mono oder .Net4x verwenden können, verwenden Sie bitte Version [[0.9.2.2]] ( http://opensimulator.org/dist )&amp;lt;br&amp;gt;&lt;br /&gt;
Siehe auch [http://opensimulator.org/wiki/0.9.3.0_Release 0.9.3.0 Release Notes]&lt;br /&gt;
&lt;br /&gt;
= Anforderungen =&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.9.3.1 erfordert:&lt;br /&gt;
&lt;br /&gt;
* [https://dotnet.microsoft.com/en-us/download/dotnet/8.0 dotnet8] Runtime für Ihre Plattform (sowie das SDK, wenn Sie kompilieren möchten) &lt;br /&gt;
* Unter Windows müssen Sie möglicherweise die [https://docs.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170 Runtime-Dateien für vc++] installieren&lt;br /&gt;
* Unter Windows müssen Sie möglicherweise die Installation des älteren .NetFramework 3.5 autorisieren&lt;br /&gt;
* Unter Linux benötigen Sie libgdiplus&lt;br /&gt;
**Wenn Sie mono 6.x vollständig haben, haben Sie bereits libgdiplus, andernfalls müssen Sie es installieren, zum Beispiel unter Debian:&lt;br /&gt;
**apt-get update &amp;amp;&amp;amp; apt-get install -y apt-utils libgdiplus libc6-dev&lt;br /&gt;
&lt;br /&gt;
* Um die Unterstützung für aktuelle und ältere Viewer aufrechtzuerhalten, müssen neue Viewer PBR-Materialien oder Texturen für Terrain anfordern, indem sie eine Anfrage für eine Fake-Capability namens &amp;quot;VETPBR&amp;quot; (ViewerExtendedTerrainPBR) senden&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Aufgrund der Datenbank-Migrationsnummerierung, die bei Release 0.9.0.0 erfolgte, MÜSSEN Sie, wenn Sie von einer OpenSimulator-Version vor 0.8.2.1 aktualisieren, zuerst auf *0.8.2.1* aktualisieren und dann direkt auf 0.9.3.0 upgraden. Siehe [[0.9.0.0_Release#Pivot_Release:_0.8.2.1]] für weitere Hinweise.&lt;br /&gt;
&lt;br /&gt;
= Breaking Changes =&lt;br /&gt;
&lt;br /&gt;
* Skripte, die mit älteren Versionen kompiliert wurden, werden neu kompiliert und setzen ihren Status zurück, entweder beim ersten Regionstart nach dem Update oder bei Teleport.&lt;br /&gt;
&lt;br /&gt;
= Bekannte Probleme mit Asset-Speicherung =&lt;br /&gt;
&lt;br /&gt;
== MySQL Asset Storage ==&lt;br /&gt;
&lt;br /&gt;
Die aktuelle MySQL-Asset-Speicherimplementierung hat ein erhebliches Skalierbarkeitsproblem:&lt;br /&gt;
&lt;br /&gt;
* '''Monolithische Asset-Tabelle:''' Alle Assets (Texturen, Skripte, Sounds, Animationen, etc.) werden in einer einzigen großen Tabelle gespeichert, was mit wachsender Asset-Anzahl zu einem Performance-Engpass wird&lt;br /&gt;
* '''Wartungsschwierigkeiten:''' Eine einzige massive Tabelle macht Datenbankwartungsoperationen (Optimierung, Reparatur, Indexierung) extrem zeitaufwendig und ressourcenintensiv&lt;br /&gt;
* '''Empfohlene Lösung:''' Aufteilung der Asset-Tabelle nach Asset-Typen (z.B. separate Tabellen für Texturen, Skripte, Sounds, Animationen, Notecards), um Abfrageleistung und Verwaltbarkeit zu verbessern&lt;br /&gt;
* '''Auswirkung:''' Große Grids mit Millionen von Assets erfahren langsamen Asset-Abruf und Datenbankabfragen, was die Gesamtleistung des Grids beeinträchtigt&lt;br /&gt;
&lt;br /&gt;
== FSAssets Storage ==&lt;br /&gt;
&lt;br /&gt;
Die FSAssets (File System Assets) Speichermethode hat ebenfalls architektonische Probleme:&lt;br /&gt;
&lt;br /&gt;
* '''Dateisystem-Fragmentierung:''' Die Speicherung jedes Assets als einzelne Datei erzeugt Millionen von kleinen Dateien, die die Dateisystem-Performance stark beeinträchtigen&lt;br /&gt;
* '''Verzeichnis-Limitierungen:''' Die meisten Dateisysteme verschlechtern sich erheblich, wenn Verzeichnisse Hunderttausende von Einträgen enthalten&lt;br /&gt;
* '''I/O-Overhead:''' Jeder Asset-Zugriff erfordert separate Datei-Öffnen/Schließen-Operationen, was zu übermäßigem Disk-I/O führt&lt;br /&gt;
* '''Wartungs-Alptraum:''' Dateisystem-Checks, Defragmentierung und Routine-Wartung werden mit Millionen von kleinen Dateien nahezu unmöglich&lt;br /&gt;
* '''Backup-Herausforderungen:''' Das Sichern von Millionen kleiner Dateien ist deutlich langsamer als das Sichern von Datenbanktabellen&lt;br /&gt;
* '''Ähnlich wie SQLite-Probleme:''' Wie SQLite's Limitierungen skaliert fsassets' Datei-pro-Asset-Ansatz nicht gut für Produktions-Grids&lt;br /&gt;
&lt;br /&gt;
'''Auswirkung auf die OpenSimulator-Akzeptanz:'''&lt;br /&gt;
&lt;br /&gt;
Diese Speicherlimitierungen schaffen Barrieren für:&lt;br /&gt;
* Neue Benutzer, die schlechte Performance mit Standard-Speicherkonfigurationen erleben&lt;br /&gt;
* Grid-Betreiber, die mit Skalierbarkeitsproblemen konfrontiert werden, während ihr Grid wächst&lt;br /&gt;
* Hosting-Provider, die mit Dateisystem- und Datenbank-Performance-Problemen kämpfen&lt;br /&gt;
* Die breitere Akzeptanz von OpenSimulator aufgrund wahrgenommener Instabilität und Performance-Probleme&lt;br /&gt;
&lt;br /&gt;
'''Empfohlene Workarounds:'''&lt;br /&gt;
* Für kleine bis mittlere Grids: Verwenden Sie MySQL mit regelmäßiger Datenbankoptimierung und -wartung&lt;br /&gt;
* Für größere Grids: Erwägen Sie die Implementierung von Asset-Typ-Partitionierung oder alternativen Storage-Backends&lt;br /&gt;
* Überwachen Sie regelmäßig die Asset-Tabellengröße und Dateisystem-Statistiken&lt;br /&gt;
* Implementieren Sie Asset-Cleanup-Richtlinien, um verwaiste oder ungenutzte Assets zu entfernen&lt;br /&gt;
&lt;br /&gt;
= Änderungen und Fehlerbehebungen =&lt;br /&gt;
&lt;br /&gt;
* Neue OSSL-Funktionen [[osSetTerrainTextures]]. Mit dieser Funktion kann man den Satz von Terrain-Texturen für alte Viewer und Karten-Generatoren oder den Satz von Texturen oder Materialien für neue Viewer ändern, ohne für jeden Fall einen anderen Viewer verwenden zu müssen, Satz von Funktionen [[osListAs*]]&lt;br /&gt;
&lt;br /&gt;
* Neue LSL-Funktionen wie llGetStartString, llRezObjectWithParams, llGetLinkSitFlags, llSetLinkSitFlags, osListFindListNext, llGetInventoryDesc, llGetSimStats, llGetHealth, llHMAC, llListFindListNext, llGetVisualParams, llMapBeacon, llGetRenderMaterial, llIsLinkGLTFMaterial, llWorldPosToHUD&lt;br /&gt;
&lt;br /&gt;
= Danksagungen =&lt;br /&gt;
&lt;br /&gt;
Vielen Dank an alle Entwickler (und ihre Katzen), Tester und Community-Mitglieder, die zu diesem Release beigetragen haben und die allgemein bei OpenSimulator helfen. Ihre harte Arbeit macht dies alles möglich.&lt;br /&gt;
&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/New_Region_Modules/de</id>
		<title>New Region Modules/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/New_Region_Modules/de"/>
				<updated>2025-12-16T09:53:09Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|New_Region_Modules}}&lt;br /&gt;
&lt;br /&gt;
= New Region Modules =&lt;br /&gt;
&lt;br /&gt;
'''Hinweis:''' Diese Dokumentation ist für OpenSimulator Version 0.9.3.x aktualisiert, das auf .NET 8.0 Runtime läuft.&lt;br /&gt;
&lt;br /&gt;
= Übersicht =&lt;br /&gt;
&lt;br /&gt;
Diese Seite beschreibt das OpenSimulator Region-Modul-System, das eine flexible, erweiterbare Architektur zum Hinzufügen von Funktionalität zu Regionen bereitstellt. Region-Module ermöglichen es Entwicklern, OpenSim zu erweitern, ohne die Kern-Codebasis zu ändern, und unterstützen dynamisches Laden, Region-Neustarts und Hot-Swapping von Funktionalität.&lt;br /&gt;
&lt;br /&gt;
= Warum neue Region-Module? =&lt;br /&gt;
&lt;br /&gt;
Das vorherige RegionModule-System hatte mehrere Einschränkungen:&lt;br /&gt;
&lt;br /&gt;
* '''Inkonsistente API:''' Der Initialisierungs-Lebenszyklus unterstützte dynamisches Region-Management nicht richtig&lt;br /&gt;
* '''Region-Neustart-Probleme:''' Das Hinzufügen oder Entfernen von Regionen zur Laufzeit war problematisch&lt;br /&gt;
* '''Unklare Semantik:''' Die Beziehung zwischen ''Initialise'' und ''PostInitialise'' war mehrdeutig&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel, wenn eine neue Region hinzugefügt wurde:&lt;br /&gt;
* '''Initialise nicht aufrufen:''' Modul ist für diese Region nicht initialisiert → fehlende Funktionalität&lt;br /&gt;
* '''Initialise aufrufen:''' ''PostInitialise'' wurde bereits aufgerufen → inkonsistenter Zustand&lt;br /&gt;
&lt;br /&gt;
Das neue System behebt diese Probleme mit einem gut definierten Lebenszyklus und klarer Semantik für geteilte vs. nicht-geteilte Module.&lt;br /&gt;
&lt;br /&gt;
= Modultypen =&lt;br /&gt;
&lt;br /&gt;
Das neue Region-Modul-System basiert auf drei Interfaces:&lt;br /&gt;
&lt;br /&gt;
== IRegionModuleBase ==&lt;br /&gt;
&lt;br /&gt;
Das Basis-Interface, das alle Region-Module implementieren:&lt;br /&gt;
&lt;br /&gt;
  public interface IRegionModuleBase&lt;br /&gt;
  {&lt;br /&gt;
      string Name { get; }&lt;br /&gt;
      Type ReplaceableInterface { get; }&lt;br /&gt;
      void Initialise(IConfigSource source);&lt;br /&gt;
      void Close();&lt;br /&gt;
      void AddRegion(Scene scene);&lt;br /&gt;
      void RegionLoaded(Scene scene);&lt;br /&gt;
      void RemoveRegion(Scene scene);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== Interface-Mitglieder ===&lt;br /&gt;
&lt;br /&gt;
* '''Name:''' Gibt den Namen des Moduls zurück (wird für Identifikation und Logging verwendet)&lt;br /&gt;
* '''ReplaceableInterface:''' Gibt den Typ des Interfaces zurück, das dieses Modul bereitstellt (für Modul-Ersetzung)&lt;br /&gt;
* '''Initialise:''' Wird einmal aufgerufen, wenn das Modul geladen wird&lt;br /&gt;
* '''Close:''' Wird aufgerufen, wenn das Modul heruntergefahren wird&lt;br /&gt;
* '''AddRegion:''' Wird aufgerufen, wenn eine Region zu diesem Modul hinzugefügt wird&lt;br /&gt;
* '''RegionLoaded:''' Wird aufgerufen, nachdem alle Module zu einer Region hinzugefügt wurden&lt;br /&gt;
* '''RemoveRegion:''' Wird aufgerufen, wenn eine Region von diesem Modul entfernt wird&lt;br /&gt;
&lt;br /&gt;
== ISharedRegionModule ==&lt;br /&gt;
&lt;br /&gt;
Für Module, die einmal instanziiert werden und über alle Regionen hinweg geteilt werden:&lt;br /&gt;
&lt;br /&gt;
  public interface ISharedRegionModule : IRegionModuleBase&lt;br /&gt;
  {&lt;br /&gt;
      void PostInitialise();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
'''Anwendungsfälle:'''&lt;br /&gt;
* Zentrale Dienste (Benutzerverwaltung, Asset-Dienste, etc.)&lt;br /&gt;
* Regions-übergreifende Funktionalität&lt;br /&gt;
* Singleton-Pattern-Anforderungen&lt;br /&gt;
* Ressourcenintensive Module, die nur einmal existieren sollten&lt;br /&gt;
&lt;br /&gt;
'''Lebenszyklus:'''&lt;br /&gt;
* Eine Instanz wird beim Serverstart erstellt&lt;br /&gt;
* ''Initialise'' wird einmal aufgerufen&lt;br /&gt;
* ''PostInitialise'' wird aufgerufen, nachdem alle geteilten Module initialisiert sind&lt;br /&gt;
* ''AddRegion'' wird für jede Region aufgerufen&lt;br /&gt;
* ''RegionLoaded'' wird für jede Region aufgerufen, nachdem alle Module hinzugefügt wurden&lt;br /&gt;
* ''RemoveRegion'' wird aufgerufen, wenn Regionen entfernt werden&lt;br /&gt;
* ''Close'' wird beim Server-Herunterfahren aufgerufen&lt;br /&gt;
&lt;br /&gt;
== INonSharedRegionModule ==&lt;br /&gt;
&lt;br /&gt;
Für Module, die separat für jede Region instanziiert werden:&lt;br /&gt;
&lt;br /&gt;
  public interface INonSharedRegionModule : IRegionModuleBase&lt;br /&gt;
  {&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
'''Anwendungsfälle:'''&lt;br /&gt;
* Regions-spezifische Funktionalität&lt;br /&gt;
* Module, die regionsspezifischen Status verwalten&lt;br /&gt;
* Module, die Isolation zwischen Regionen benötigen&lt;br /&gt;
* Leistungskritische Module, die von Parallelisierung profitieren&lt;br /&gt;
&lt;br /&gt;
'''Lebenszyklus:'''&lt;br /&gt;
* Neue Instanz wird für jede Region erstellt&lt;br /&gt;
* ''Initialise'' wird aufgerufen, wenn die Modul-Instanz erstellt wird&lt;br /&gt;
* ''AddRegion'' wird unmittelbar nach der Initialisierung aufgerufen&lt;br /&gt;
* ''RegionLoaded'' wird aufgerufen, nachdem alle Module zur Region hinzugefügt wurden&lt;br /&gt;
* ''RemoveRegion'' wird aufgerufen, wenn die Region entfernt wird&lt;br /&gt;
* ''Close'' wird nach dem Entfernen der Region aufgerufen&lt;br /&gt;
&lt;br /&gt;
'''Hinweis:''' ''PostInitialise'' existiert nicht für nicht-geteilte Module, weil es keinen garantierten Punkt gibt, an dem alle Instanzen erstellt wurden (neue Regionen können jederzeit hinzugefügt werden).&lt;br /&gt;
&lt;br /&gt;
= Ein Region-Modul erstellen =&lt;br /&gt;
&lt;br /&gt;
== Grundlegende Einrichtung ==&lt;br /&gt;
&lt;br /&gt;
=== 1. Erforderliche Referenzen hinzufügen ===&lt;br /&gt;
&lt;br /&gt;
Fügen Sie die notwendigen Namespaces in Ihren Code ein:&lt;br /&gt;
&lt;br /&gt;
  using System;&lt;br /&gt;
  using Mono.Addins;&lt;br /&gt;
  using Nini.Config;&lt;br /&gt;
  using OpenSim.Region.Framework.Interfaces;&lt;br /&gt;
  using OpenSim.Region.Framework.Scenes;&lt;br /&gt;
&lt;br /&gt;
Ihr Projekt benötigt Referenzen zu:&lt;br /&gt;
* Mono.Addins.dll&lt;br /&gt;
* Nini.dll&lt;br /&gt;
* OpenSim.Region.Framework.dll&lt;br /&gt;
* OpenSim.Framework.dll&lt;br /&gt;
&lt;br /&gt;
=== 2. Assembly-Attribute ===&lt;br /&gt;
&lt;br /&gt;
Fügen Sie diese Attribute zu Ihrer Assembly hinzu (typischerweise in Properties/AssemblyInfo.cs oder am Anfang Ihrer Haupt-Moduldatei):&lt;br /&gt;
&lt;br /&gt;
  [assembly: Addin(&amp;quot;MyModule&amp;quot;, OpenSim.VersionInfo.VersionNumber + &amp;quot;.1&amp;quot;)]&lt;br /&gt;
  [assembly: AddinDependency(&amp;quot;OpenSim.Region.Framework&amp;quot;, OpenSim.VersionInfo.VersionNumber)]&lt;br /&gt;
&lt;br /&gt;
'''Parameter:'''&lt;br /&gt;
* '''Erster Parameter:''' Der eindeutige Name Ihres Moduls&lt;br /&gt;
* '''Version:''' An OpenSim-Version gebunden für Kompatibilitätsverfolgung&lt;br /&gt;
* '''AddinDependency:''' Deklariert Abhängigkeit von OpenSim.Region.Framework&lt;br /&gt;
&lt;br /&gt;
=== 3. Modul-Klassen-Attribut ===&lt;br /&gt;
&lt;br /&gt;
Markieren Sie Ihre Modul-Klasse mit dem Extension-Attribut:&lt;br /&gt;
&lt;br /&gt;
  [Extension(Path = &amp;quot;/OpenSim/RegionModules&amp;quot;, NodeName = &amp;quot;RegionModule&amp;quot;, Id = &amp;quot;MyModuleId&amp;quot;)]&lt;br /&gt;
  public class MyModule : ISharedRegionModule&lt;br /&gt;
  {&lt;br /&gt;
      // Implementierung&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
'''Wichtig:''' Der Path und NodeName müssen genau wie gezeigt sein. Die Id sollte für Ihr Modul eindeutig sein.&lt;br /&gt;
&lt;br /&gt;
== Beispiel: Geteiltes Region-Modul ==&lt;br /&gt;
&lt;br /&gt;
  using System;&lt;br /&gt;
  using System.Reflection;&lt;br /&gt;
  using log4net;&lt;br /&gt;
  using Mono.Addins;&lt;br /&gt;
  using Nini.Config;&lt;br /&gt;
  using OpenSim.Region.Framework.Interfaces;&lt;br /&gt;
  using OpenSim.Region.Framework.Scenes;&lt;br /&gt;
  &lt;br /&gt;
  [assembly: Addin(&amp;quot;ExampleSharedModule&amp;quot;, OpenSim.VersionInfo.VersionNumber + &amp;quot;.1&amp;quot;)]&lt;br /&gt;
  [assembly: AddinDependency(&amp;quot;OpenSim.Region.Framework&amp;quot;, OpenSim.VersionInfo.VersionNumber)]&lt;br /&gt;
  &lt;br /&gt;
  namespace MyNamespace&lt;br /&gt;
  {&lt;br /&gt;
      [Extension(Path = &amp;quot;/OpenSim/RegionModules&amp;quot;, NodeName = &amp;quot;RegionModule&amp;quot;, Id = &amp;quot;ExampleSharedModule&amp;quot;)]&lt;br /&gt;
      public class ExampleSharedModule : ISharedRegionModule&lt;br /&gt;
      {&lt;br /&gt;
          private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);&lt;br /&gt;
          private bool m_enabled = false;&lt;br /&gt;
          private List&amp;lt;Scene&amp;gt; m_scenes = new List&amp;lt;Scene&amp;gt;();&lt;br /&gt;
          &lt;br /&gt;
          public string Name &lt;br /&gt;
          { &lt;br /&gt;
              get { return &amp;quot;ExampleSharedModule&amp;quot;; } &lt;br /&gt;
          }&lt;br /&gt;
          &lt;br /&gt;
          public Type ReplaceableInterface &lt;br /&gt;
          { &lt;br /&gt;
              get { return null; } &lt;br /&gt;
          }&lt;br /&gt;
          &lt;br /&gt;
          public void Initialise(IConfigSource config)&lt;br /&gt;
          {&lt;br /&gt;
              IConfig moduleConfig = config.Configs[&amp;quot;ExampleModule&amp;quot;];&lt;br /&gt;
              if (moduleConfig != null)&lt;br /&gt;
              {&lt;br /&gt;
                  m_enabled = moduleConfig.GetBoolean(&amp;quot;Enabled&amp;quot;, false);&lt;br /&gt;
                  m_log.InfoFormat(&amp;quot;[EXAMPLE MODULE]: Enabled = {0}&amp;quot;, m_enabled);&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
          &lt;br /&gt;
          public void PostInitialise()&lt;br /&gt;
          {&lt;br /&gt;
              if (!m_enabled)&lt;br /&gt;
                  return;&lt;br /&gt;
                  &lt;br /&gt;
              m_log.Info(&amp;quot;[EXAMPLE MODULE]: PostInitialise aufgerufen&amp;quot;);&lt;br /&gt;
              // Geteilte Ressourcen hier initialisieren&lt;br /&gt;
          }&lt;br /&gt;
          &lt;br /&gt;
          public void AddRegion(Scene scene)&lt;br /&gt;
          {&lt;br /&gt;
              if (!m_enabled)&lt;br /&gt;
                  return;&lt;br /&gt;
                  &lt;br /&gt;
              m_scenes.Add(scene);&lt;br /&gt;
              m_log.InfoFormat(&amp;quot;[EXAMPLE MODULE]: Region {0} hinzugefügt&amp;quot;, scene.RegionInfo.RegionName);&lt;br /&gt;
              &lt;br /&gt;
              // Interfaces registrieren&lt;br /&gt;
              scene.RegisterModuleInterface&amp;lt;IExampleModule&amp;gt;(this);&lt;br /&gt;
              &lt;br /&gt;
              // Events anhängen&lt;br /&gt;
              scene.EventManager.OnNewClient += OnNewClient;&lt;br /&gt;
          }&lt;br /&gt;
          &lt;br /&gt;
          public void RegionLoaded(Scene scene)&lt;br /&gt;
          {&lt;br /&gt;
              if (!m_enabled)&lt;br /&gt;
                  return;&lt;br /&gt;
                  &lt;br /&gt;
              m_log.InfoFormat(&amp;quot;[EXAMPLE MODULE]: Region {0} geladen&amp;quot;, scene.RegionInfo.RegionName);&lt;br /&gt;
              &lt;br /&gt;
              // Andere Module hier zugreifen&lt;br /&gt;
              // var otherModule = scene.RequestModuleInterface&amp;lt;IOtherModule&amp;gt;();&lt;br /&gt;
          }&lt;br /&gt;
          &lt;br /&gt;
          public void RemoveRegion(Scene scene)&lt;br /&gt;
          {&lt;br /&gt;
              if (!m_enabled)&lt;br /&gt;
                  return;&lt;br /&gt;
                  &lt;br /&gt;
              m_scenes.Remove(scene);&lt;br /&gt;
              &lt;br /&gt;
              // Events abhängen&lt;br /&gt;
              scene.EventManager.OnNewClient -= OnNewClient;&lt;br /&gt;
              &lt;br /&gt;
              // Interfaces abmelden&lt;br /&gt;
              scene.UnregisterModuleInterface&amp;lt;IExampleModule&amp;gt;(this);&lt;br /&gt;
              &lt;br /&gt;
              m_log.InfoFormat(&amp;quot;[EXAMPLE MODULE]: Region {0} entfernt&amp;quot;, scene.RegionInfo.RegionName);&lt;br /&gt;
          }&lt;br /&gt;
          &lt;br /&gt;
          public void Close()&lt;br /&gt;
          {&lt;br /&gt;
              m_log.Info(&amp;quot;[EXAMPLE MODULE]: Wird heruntergefahren&amp;quot;);&lt;br /&gt;
              // Geteilte Ressourcen aufräumen&lt;br /&gt;
          }&lt;br /&gt;
          &lt;br /&gt;
          private void OnNewClient(IClientAPI client)&lt;br /&gt;
          {&lt;br /&gt;
              // Neuen Client behandeln&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Beispiel: Nicht-geteiltes Region-Modul ==&lt;br /&gt;
&lt;br /&gt;
  [Extension(Path = &amp;quot;/OpenSim/RegionModules&amp;quot;, NodeName = &amp;quot;RegionModule&amp;quot;, Id = &amp;quot;ExampleNonSharedModule&amp;quot;)]&lt;br /&gt;
  public class ExampleNonSharedModule : INonSharedRegionModule&lt;br /&gt;
  {&lt;br /&gt;
      private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);&lt;br /&gt;
      private bool m_enabled = false;&lt;br /&gt;
      private Scene m_scene;&lt;br /&gt;
      &lt;br /&gt;
      public string Name &lt;br /&gt;
      { &lt;br /&gt;
          get { return &amp;quot;ExampleNonSharedModule&amp;quot;; } &lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      public Type ReplaceableInterface &lt;br /&gt;
      { &lt;br /&gt;
          get { return null; } &lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      public void Initialise(IConfigSource config)&lt;br /&gt;
      {&lt;br /&gt;
          IConfig moduleConfig = config.Configs[&amp;quot;ExampleModule&amp;quot;];&lt;br /&gt;
          if (moduleConfig != null)&lt;br /&gt;
          {&lt;br /&gt;
              m_enabled = moduleConfig.GetBoolean(&amp;quot;Enabled&amp;quot;, false);&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      public void AddRegion(Scene scene)&lt;br /&gt;
      {&lt;br /&gt;
          if (!m_enabled)&lt;br /&gt;
              return;&lt;br /&gt;
              &lt;br /&gt;
          m_scene = scene;&lt;br /&gt;
          m_log.InfoFormat(&amp;quot;[EXAMPLE MODULE]: Zur Region {0} hinzugefügt&amp;quot;, scene.RegionInfo.RegionName);&lt;br /&gt;
          &lt;br /&gt;
          scene.RegisterModuleInterface&amp;lt;IExampleModule&amp;gt;(this);&lt;br /&gt;
          scene.EventManager.OnFrame += OnFrame;&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      public void RegionLoaded(Scene scene)&lt;br /&gt;
      {&lt;br /&gt;
          if (!m_enabled)&lt;br /&gt;
              return;&lt;br /&gt;
              &lt;br /&gt;
          // Andere Module zugreifen&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      public void RemoveRegion(Scene scene)&lt;br /&gt;
      {&lt;br /&gt;
          if (!m_enabled)&lt;br /&gt;
              return;&lt;br /&gt;
              &lt;br /&gt;
          scene.EventManager.OnFrame -= OnFrame;&lt;br /&gt;
          scene.UnregisterModuleInterface&amp;lt;IExampleModule&amp;gt;(this);&lt;br /&gt;
          &lt;br /&gt;
          m_log.InfoFormat(&amp;quot;[EXAMPLE MODULE]: Von Region {0} entfernt&amp;quot;, scene.RegionInfo.RegionName);&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      public void Close()&lt;br /&gt;
      {&lt;br /&gt;
          // Regionsspezifische Ressourcen aufräumen&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      private void OnFrame()&lt;br /&gt;
      {&lt;br /&gt;
          // Regionsspezifische Frame-Verarbeitung&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
= Modul-Lebenszyklus =&lt;br /&gt;
&lt;br /&gt;
== Server-Start ==&lt;br /&gt;
&lt;br /&gt;
'''1. Modul-Laden'''&lt;br /&gt;
* Region-Server startet&lt;br /&gt;
* Alle Modul-Klassen werden über Mono.Addins geladen (keine bestimmte Reihenfolge)&lt;br /&gt;
&lt;br /&gt;
'''2. Geteilte Modul-Initialisierung'''&lt;br /&gt;
* Für jedes ''ISharedRegionModule'': Eine Instanz wird erstellt, ''Initialise'' wird aufgerufen&lt;br /&gt;
* Für jedes ''ISharedRegionModule'': ''PostInitialise'' wird aufgerufen&lt;br /&gt;
&lt;br /&gt;
'''3. Scene-Erstellung (für jede Scene)'''&lt;br /&gt;
* Für jedes ''INonSharedRegionModule'': Neue Instanz wird erstellt, ''Initialise'' wird aufgerufen&lt;br /&gt;
* Für alle Module (geteilt und nicht-geteilt): ''AddRegion(scene)'' wird aufgerufen&lt;br /&gt;
* Module werden mit der Scene verknüpft&lt;br /&gt;
* Für alle Module: ''RegionLoaded(scene)'' wird aufgerufen&lt;br /&gt;
* An diesem Punkt können Module auf andere Module über ''scene.RequestModuleInterface&amp;lt;T&amp;gt;()'' zugreifen&lt;br /&gt;
&lt;br /&gt;
== Eine Region hinzufügen (Laufzeit) ==&lt;br /&gt;
&lt;br /&gt;
* Für jedes ''INonSharedRegionModule'': Neue Instanz wird erstellt, ''Initialise'' wird aufgerufen&lt;br /&gt;
* Für alle Module (geteilt und nicht-geteilt): ''AddRegion(scene)'' wird aufgerufen&lt;br /&gt;
* Für alle Module: ''RegionLoaded(scene)'' wird aufgerufen&lt;br /&gt;
&lt;br /&gt;
== Eine Region entfernen ==&lt;br /&gt;
&lt;br /&gt;
* Für alle Module (geteilt und nicht-geteilt): ''RemoveRegion(scene)'' wird aufgerufen&lt;br /&gt;
* Nur für ''INonSharedRegionModule''s: ''Close'' wird aufgerufen&lt;br /&gt;
* Modul-Referenzen werden aus der Scene entfernt&lt;br /&gt;
* ''INonSharedRegionModule''-Instanzen können vom Garbage Collector erfasst werden&lt;br /&gt;
&lt;br /&gt;
'''Hinweis:''' Aufgrund des Verhaltens der .NET/Mono-Laufzeitumgebung werden einige Ressourcen möglicherweise nicht sofort freigegeben, selbst bei ordnungsgemäßer Bereinigung.&lt;br /&gt;
&lt;br /&gt;
== Eine Region neu starten ==&lt;br /&gt;
&lt;br /&gt;
Ein Region-Neustart wird implementiert als:&lt;br /&gt;
1. [[#Eine_Region_entfernen|Region entfernen]]&lt;br /&gt;
2. [[#Eine_Region_hinzuf.C3.BCgen_.28Laufzeit.29|Region hinzufügen]]&lt;br /&gt;
&lt;br /&gt;
Avatare in der Region werden während des Neustarts getrennt.&lt;br /&gt;
&lt;br /&gt;
'''Wichtig:''' Aufgrund von .NET/Mono-Laufzeitbeschränkungen erfolgt möglicherweise kein echtes Entladen von Modulen. Einige Ressourcen können über Neustarts hinweg im Speicher verbleiben.&lt;br /&gt;
&lt;br /&gt;
== Server-Herunterfahren ==&lt;br /&gt;
&lt;br /&gt;
* Für jede Scene: [[#Eine_Region_entfernen|Region entfernen]]-Schritte werden durchgeführt&lt;br /&gt;
** ''RemoveRegion'' wird für alle Module aufgerufen&lt;br /&gt;
** ''Close'' wird für alle ''INonSharedRegionModule''s aufgerufen&lt;br /&gt;
* ''Close'' wird für alle ''ISharedRegionModule''s aufgerufen&lt;br /&gt;
* Module können vom Garbage Collector erfasst werden&lt;br /&gt;
&lt;br /&gt;
= Best Practices =&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Verwenden Sie das ''enabled''-Muster für Module, die optional sein sollten:&lt;br /&gt;
&lt;br /&gt;
  [ExampleModule]&lt;br /&gt;
      Enabled = true&lt;br /&gt;
      ; Weitere Einstellungen...&lt;br /&gt;
&lt;br /&gt;
Überprüfen Sie dies in ''Initialise'' und kehren Sie früh zurück, wenn deaktiviert:&lt;br /&gt;
&lt;br /&gt;
  public void Initialise(IConfigSource config)&lt;br /&gt;
  {&lt;br /&gt;
      IConfig cfg = config.Configs[&amp;quot;ExampleModule&amp;quot;];&lt;br /&gt;
      if (cfg == null || !cfg.GetBoolean(&amp;quot;Enabled&amp;quot;, false))&lt;br /&gt;
          return;&lt;br /&gt;
          &lt;br /&gt;
      m_enabled = true;&lt;br /&gt;
      // Initialisierung fortsetzen...&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Ressourcenverwaltung ==&lt;br /&gt;
&lt;br /&gt;
* '''In RemoveRegion aufräumen:''' Event-Handler abmelden, Interfaces abmelden&lt;br /&gt;
* '''In Close aufräumen:''' Ressourcen freigeben, Verbindungen schließen&lt;br /&gt;
* '''Operationen abgleichen:''' Was Sie in ''AddRegion'' hinzufügen, entfernen Sie in ''RemoveRegion''&lt;br /&gt;
* '''Memory Leaks vermeiden:''' Immer Event-Handler abhängen, um Referenzen zu vermeiden&lt;br /&gt;
&lt;br /&gt;
== Modul-Abhängigkeiten ==&lt;br /&gt;
&lt;br /&gt;
Greifen Sie auf andere Module in ''RegionLoaded'' zu, nicht in ''AddRegion'':&lt;br /&gt;
&lt;br /&gt;
  public void RegionLoaded(Scene scene)&lt;br /&gt;
  {&lt;br /&gt;
      // Sicher - alle Module wurden hinzugefügt&lt;br /&gt;
      IOtherModule other = scene.RequestModuleInterface&amp;lt;IOtherModule&amp;gt;();&lt;br /&gt;
      if (other != null)&lt;br /&gt;
      {&lt;br /&gt;
          // Modul verwenden&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Modultyp wählen ==&lt;br /&gt;
&lt;br /&gt;
'''Verwenden Sie ISharedRegionModule wenn:'''&lt;br /&gt;
* Modul Singleton-Dienste bereitstellt&lt;br /&gt;
* Modul regionsübergreifende Funktionalität verwaltet&lt;br /&gt;
* Modul ressourcenintensiv ist und nur einmal existieren sollte&lt;br /&gt;
* Beispiel: Asset-Service, Benutzerverwaltung&lt;br /&gt;
&lt;br /&gt;
'''Verwenden Sie INonSharedRegionModule wenn:'''&lt;br /&gt;
* Modul regionsspezifischen Status verwaltet&lt;br /&gt;
* Modul-Funktionalität regionsspezifisch ist&lt;br /&gt;
* Modul von Isolation zwischen Regionen profitiert&lt;br /&gt;
* Beispiel: Terrain-Modul, Vegetations-Modul&lt;br /&gt;
&lt;br /&gt;
== ReplaceableInterface ==&lt;br /&gt;
&lt;br /&gt;
Verwenden Sie ''ReplaceableInterface'', um die Ersetzung Ihres Moduls zu ermöglichen:&lt;br /&gt;
&lt;br /&gt;
  public Type ReplaceableInterface &lt;br /&gt;
  { &lt;br /&gt;
      get { return typeof(IMyModuleInterface); } &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Dies ermöglicht es Drittanbieter-Modulen, Ihre Standard-Implementierung zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
= Bereitstellung =&lt;br /&gt;
&lt;br /&gt;
== Manuelle Bereitstellung ==&lt;br /&gt;
&lt;br /&gt;
1. Bauen Sie Ihre Modul-Assembly&lt;br /&gt;
2. Kopieren Sie die .dll in den bin-Ordner von OpenSim&lt;br /&gt;
3. Starten Sie OpenSim neu&lt;br /&gt;
4. Modul wird automatisch über Mono.Addins entdeckt und geladen&lt;br /&gt;
&lt;br /&gt;
== Verwendung von Prebuild ==&lt;br /&gt;
&lt;br /&gt;
Für die Integration in das Build-System von OpenSim erstellen Sie einen prebuild.xml-Eintrag:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;Project name=&amp;quot;OpenSim.Region.Modules.Example&amp;quot; path=&amp;quot;addon-modules/ExampleModule&amp;quot; type=&amp;quot;Library&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Configuration name=&amp;quot;Debug&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Options&amp;gt;&lt;br /&gt;
        &amp;lt;OutputPath&amp;gt;../../bin/&amp;lt;/OutputPath&amp;gt;&lt;br /&gt;
      &amp;lt;/Options&amp;gt;&lt;br /&gt;
    &amp;lt;/Configuration&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;ReferencePath&amp;gt;../../bin/&amp;lt;/ReferencePath&amp;gt;&lt;br /&gt;
    &amp;lt;Reference name=&amp;quot;Mono.Addins&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;Reference name=&amp;quot;Nini&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;Reference name=&amp;quot;log4net&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;Reference name=&amp;quot;OpenSim.Region.Framework&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;Reference name=&amp;quot;OpenSim.Framework&amp;quot;/&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;Files&amp;gt;&lt;br /&gt;
      &amp;lt;Match pattern=&amp;quot;*.cs&amp;quot; recurse=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/Files&amp;gt;&lt;br /&gt;
  &amp;lt;/Project&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Verwendung von .NET SDK-Projekten ==&lt;br /&gt;
&lt;br /&gt;
Moderne .NET 8.0-Projekte können SDK-Style .csproj verwenden:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;Project Sdk=&amp;quot;Microsoft.NET.Sdk&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;PropertyGroup&amp;gt;&lt;br /&gt;
      &amp;lt;TargetFramework&amp;gt;net8.0&amp;lt;/TargetFramework&amp;gt;&lt;br /&gt;
      &amp;lt;OutputPath&amp;gt;../../bin/&amp;lt;/OutputPath&amp;gt;&lt;br /&gt;
      &amp;lt;GenerateAssemblyInfo&amp;gt;false&amp;lt;/GenerateAssemblyInfo&amp;gt;&lt;br /&gt;
    &amp;lt;/PropertyGroup&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;ItemGroup&amp;gt;&lt;br /&gt;
      &amp;lt;Reference Include=&amp;quot;Mono.Addins&amp;quot; HintPath=&amp;quot;../../bin/Mono.Addins.dll&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;ProjectReference Include=&amp;quot;../../OpenSim/Region/Framework/OpenSim.Region.Framework.csproj&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/ItemGroup&amp;gt;&lt;br /&gt;
  &amp;lt;/Project&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Fehlerbehebung =&lt;br /&gt;
&lt;br /&gt;
== Modul wird nicht geladen ==&lt;br /&gt;
&lt;br /&gt;
* Überprüfen Sie, ob das Extension-Attribut korrekt ist&lt;br /&gt;
* Prüfen Sie, ob Assembly-Attribute vorhanden sind&lt;br /&gt;
* Stellen Sie sicher, dass die Mono.Addins.dll-Referenz korrekt ist&lt;br /&gt;
* Überprüfen Sie das OpenSim-Log auf Addin-Ladefehler&lt;br /&gt;
* Überprüfen Sie, ob die .dll im bin-Verzeichnis liegt&lt;br /&gt;
&lt;br /&gt;
== Modul nicht gefunden ==&lt;br /&gt;
&lt;br /&gt;
* Überprüfen Sie, ob die Name-Eigenschaft des Moduls mit der Konfiguration übereinstimmt&lt;br /&gt;
* Überprüfen Sie, ob das Modul in der Konfiguration aktiviert ist&lt;br /&gt;
* Prüfen Sie auf Tippfehler im Extension-Id-Attribut&lt;br /&gt;
&lt;br /&gt;
== Methoden werden nicht aufgerufen ==&lt;br /&gt;
&lt;br /&gt;
* Überprüfen Sie, ob die Interface-Implementierung vollständig ist&lt;br /&gt;
* Prüfen Sie, ob m_enabled oder ähnliche Flags die Ausführung nicht verhindern&lt;br /&gt;
* Stellen Sie sicher, dass das Modul die Konfigurationsprüfungen in Initialise bestanden hat&lt;br /&gt;
&lt;br /&gt;
== Memory Leaks ==&lt;br /&gt;
&lt;br /&gt;
* Hängen Sie alle Event-Handler in RemoveRegion ab&lt;br /&gt;
* Melden Sie alle Modul-Interfaces ab&lt;br /&gt;
* Leeren Sie Collections und Referenzen in Close&lt;br /&gt;
* Verwenden Sie WeakReference für langlebige Referenzen, wenn angemessen&lt;br /&gt;
&lt;br /&gt;
== .NET 8.0 spezifische Probleme ==&lt;br /&gt;
&lt;br /&gt;
* Stellen Sie sicher, dass alle referenzierten Assemblies .NET 8.0-kompatibel sind&lt;br /&gt;
* Prüfen Sie auf veraltete API-Verwendung&lt;br /&gt;
* Überprüfen Sie, ob async/await-Muster korrekt verwendet werden&lt;br /&gt;
&lt;br /&gt;
= Erweiterte Themen =&lt;br /&gt;
&lt;br /&gt;
== Modul-Ersetzung ==&lt;br /&gt;
&lt;br /&gt;
Implementieren Sie ''ReplaceableInterface'', um Modul-Ersetzung zu ermöglichen:&lt;br /&gt;
&lt;br /&gt;
  public Type ReplaceableInterface &lt;br /&gt;
  { &lt;br /&gt;
      get { return typeof(IMyService); } &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Der Loader wird:&lt;br /&gt;
1. Alle Module laden&lt;br /&gt;
2. Für Module mit ReplaceableInterface die Aktivierung aufschieben&lt;br /&gt;
3. Nur aktivieren, wenn kein anderes Modul dieses Interface registriert hat&lt;br /&gt;
&lt;br /&gt;
== Modul-übergreifende Kommunikation ==&lt;br /&gt;
&lt;br /&gt;
Verwenden Sie Modul-Interfaces für die Kommunikation:&lt;br /&gt;
&lt;br /&gt;
  // Interface definieren&lt;br /&gt;
  public interface IMyModule&lt;br /&gt;
  {&lt;br /&gt;
      void DoSomething();&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Im Modul implementieren&lt;br /&gt;
  public class MyModule : ISharedRegionModule, IMyModule&lt;br /&gt;
  {&lt;br /&gt;
      public void AddRegion(Scene scene)&lt;br /&gt;
      {&lt;br /&gt;
          scene.RegisterModuleInterface&amp;lt;IMyModule&amp;gt;(this);&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      public void DoSomething()&lt;br /&gt;
      {&lt;br /&gt;
          // Implementierung&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Von einem anderen Modul aus verwenden&lt;br /&gt;
  public void RegionLoaded(Scene scene)&lt;br /&gt;
  {&lt;br /&gt;
      IMyModule myMod = scene.RequestModuleInterface&amp;lt;IMyModule&amp;gt;();&lt;br /&gt;
      if (myMod != null)&lt;br /&gt;
          myMod.DoSomething();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Leistungsüberlegungen ==&lt;br /&gt;
&lt;br /&gt;
* '''Geteilte Module:''' Geringerer Speicher-Overhead, potenzielle Engpässe&lt;br /&gt;
* '''Nicht-geteilte Module:''' Höhere Speichernutzung, bessere Parallelisierung&lt;br /&gt;
* '''Event-Handler:''' Seien Sie effizient, vermeiden Sie blockierende Operationen&lt;br /&gt;
* '''Asynchrone Operationen:''' Verwenden Sie Task-basierte async für langläufige Operationen&lt;br /&gt;
&lt;br /&gt;
= Siehe auch =&lt;br /&gt;
&lt;br /&gt;
* [[Developing OpenSim Addins]] - Erstellen von Addon-Paketen&lt;br /&gt;
* [[Installing 3rd party addins]] - Installation von Addons&lt;br /&gt;
* [http://opensimulator.org/wiki/ OpenSimulator Wiki] - Hauptdokumentation&lt;br /&gt;
&lt;br /&gt;
= Referenzen =&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/opensim/opensim OpenSimulator GitHub Repository]&lt;br /&gt;
* [https://github.com/mono/mono-addins Mono.Addins Dokumentation]&lt;br /&gt;
* [http://opensimulator.org/ OpenSimulator Website]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/New_Region_Modules/de</id>
		<title>New Region Modules/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/New_Region_Modules/de"/>
				<updated>2025-12-16T09:52:35Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: Created page with &amp;quot;{{Quicklinks|New_Region_Modules}}  '''Hinweis:''' Diese Dokumentation ist für OpenSimulator Version 0.9.3.x aktualisiert, das auf .NET 8.0 Runtime läuft.  = Übersicht =  Di...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|New_Region_Modules}}&lt;br /&gt;
&lt;br /&gt;
'''Hinweis:''' Diese Dokumentation ist für OpenSimulator Version 0.9.3.x aktualisiert, das auf .NET 8.0 Runtime läuft.&lt;br /&gt;
&lt;br /&gt;
= Übersicht =&lt;br /&gt;
&lt;br /&gt;
Diese Seite beschreibt das OpenSimulator Region-Modul-System, das eine flexible, erweiterbare Architektur zum Hinzufügen von Funktionalität zu Regionen bereitstellt. Region-Module ermöglichen es Entwicklern, OpenSim zu erweitern, ohne die Kern-Codebasis zu ändern, und unterstützen dynamisches Laden, Region-Neustarts und Hot-Swapping von Funktionalität.&lt;br /&gt;
&lt;br /&gt;
= Warum neue Region-Module? =&lt;br /&gt;
&lt;br /&gt;
Das vorherige RegionModule-System hatte mehrere Einschränkungen:&lt;br /&gt;
&lt;br /&gt;
* '''Inkonsistente API:''' Der Initialisierungs-Lebenszyklus unterstützte dynamisches Region-Management nicht richtig&lt;br /&gt;
* '''Region-Neustart-Probleme:''' Das Hinzufügen oder Entfernen von Regionen zur Laufzeit war problematisch&lt;br /&gt;
* '''Unklare Semantik:''' Die Beziehung zwischen ''Initialise'' und ''PostInitialise'' war mehrdeutig&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel, wenn eine neue Region hinzugefügt wurde:&lt;br /&gt;
* '''Initialise nicht aufrufen:''' Modul ist für diese Region nicht initialisiert → fehlende Funktionalität&lt;br /&gt;
* '''Initialise aufrufen:''' ''PostInitialise'' wurde bereits aufgerufen → inkonsistenter Zustand&lt;br /&gt;
&lt;br /&gt;
Das neue System behebt diese Probleme mit einem gut definierten Lebenszyklus und klarer Semantik für geteilte vs. nicht-geteilte Module.&lt;br /&gt;
&lt;br /&gt;
= Modultypen =&lt;br /&gt;
&lt;br /&gt;
Das neue Region-Modul-System basiert auf drei Interfaces:&lt;br /&gt;
&lt;br /&gt;
== IRegionModuleBase ==&lt;br /&gt;
&lt;br /&gt;
Das Basis-Interface, das alle Region-Module implementieren:&lt;br /&gt;
&lt;br /&gt;
  public interface IRegionModuleBase&lt;br /&gt;
  {&lt;br /&gt;
      string Name { get; }&lt;br /&gt;
      Type ReplaceableInterface { get; }&lt;br /&gt;
      void Initialise(IConfigSource source);&lt;br /&gt;
      void Close();&lt;br /&gt;
      void AddRegion(Scene scene);&lt;br /&gt;
      void RegionLoaded(Scene scene);&lt;br /&gt;
      void RemoveRegion(Scene scene);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== Interface-Mitglieder ===&lt;br /&gt;
&lt;br /&gt;
* '''Name:''' Gibt den Namen des Moduls zurück (wird für Identifikation und Logging verwendet)&lt;br /&gt;
* '''ReplaceableInterface:''' Gibt den Typ des Interfaces zurück, das dieses Modul bereitstellt (für Modul-Ersetzung)&lt;br /&gt;
* '''Initialise:''' Wird einmal aufgerufen, wenn das Modul geladen wird&lt;br /&gt;
* '''Close:''' Wird aufgerufen, wenn das Modul heruntergefahren wird&lt;br /&gt;
* '''AddRegion:''' Wird aufgerufen, wenn eine Region zu diesem Modul hinzugefügt wird&lt;br /&gt;
* '''RegionLoaded:''' Wird aufgerufen, nachdem alle Module zu einer Region hinzugefügt wurden&lt;br /&gt;
* '''RemoveRegion:''' Wird aufgerufen, wenn eine Region von diesem Modul entfernt wird&lt;br /&gt;
&lt;br /&gt;
== ISharedRegionModule ==&lt;br /&gt;
&lt;br /&gt;
Für Module, die einmal instanziiert werden und über alle Regionen hinweg geteilt werden:&lt;br /&gt;
&lt;br /&gt;
  public interface ISharedRegionModule : IRegionModuleBase&lt;br /&gt;
  {&lt;br /&gt;
      void PostInitialise();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
'''Anwendungsfälle:'''&lt;br /&gt;
* Zentrale Dienste (Benutzerverwaltung, Asset-Dienste, etc.)&lt;br /&gt;
* Regions-übergreifende Funktionalität&lt;br /&gt;
* Singleton-Pattern-Anforderungen&lt;br /&gt;
* Ressourcenintensive Module, die nur einmal existieren sollten&lt;br /&gt;
&lt;br /&gt;
'''Lebenszyklus:'''&lt;br /&gt;
* Eine Instanz wird beim Serverstart erstellt&lt;br /&gt;
* ''Initialise'' wird einmal aufgerufen&lt;br /&gt;
* ''PostInitialise'' wird aufgerufen, nachdem alle geteilten Module initialisiert sind&lt;br /&gt;
* ''AddRegion'' wird für jede Region aufgerufen&lt;br /&gt;
* ''RegionLoaded'' wird für jede Region aufgerufen, nachdem alle Module hinzugefügt wurden&lt;br /&gt;
* ''RemoveRegion'' wird aufgerufen, wenn Regionen entfernt werden&lt;br /&gt;
* ''Close'' wird beim Server-Herunterfahren aufgerufen&lt;br /&gt;
&lt;br /&gt;
== INonSharedRegionModule ==&lt;br /&gt;
&lt;br /&gt;
Für Module, die separat für jede Region instanziiert werden:&lt;br /&gt;
&lt;br /&gt;
  public interface INonSharedRegionModule : IRegionModuleBase&lt;br /&gt;
  {&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
'''Anwendungsfälle:'''&lt;br /&gt;
* Regions-spezifische Funktionalität&lt;br /&gt;
* Module, die regionsspezifischen Status verwalten&lt;br /&gt;
* Module, die Isolation zwischen Regionen benötigen&lt;br /&gt;
* Leistungskritische Module, die von Parallelisierung profitieren&lt;br /&gt;
&lt;br /&gt;
'''Lebenszyklus:'''&lt;br /&gt;
* Neue Instanz wird für jede Region erstellt&lt;br /&gt;
* ''Initialise'' wird aufgerufen, wenn die Modul-Instanz erstellt wird&lt;br /&gt;
* ''AddRegion'' wird unmittelbar nach der Initialisierung aufgerufen&lt;br /&gt;
* ''RegionLoaded'' wird aufgerufen, nachdem alle Module zur Region hinzugefügt wurden&lt;br /&gt;
* ''RemoveRegion'' wird aufgerufen, wenn die Region entfernt wird&lt;br /&gt;
* ''Close'' wird nach dem Entfernen der Region aufgerufen&lt;br /&gt;
&lt;br /&gt;
'''Hinweis:''' ''PostInitialise'' existiert nicht für nicht-geteilte Module, weil es keinen garantierten Punkt gibt, an dem alle Instanzen erstellt wurden (neue Regionen können jederzeit hinzugefügt werden).&lt;br /&gt;
&lt;br /&gt;
= Ein Region-Modul erstellen =&lt;br /&gt;
&lt;br /&gt;
== Grundlegende Einrichtung ==&lt;br /&gt;
&lt;br /&gt;
=== 1. Erforderliche Referenzen hinzufügen ===&lt;br /&gt;
&lt;br /&gt;
Fügen Sie die notwendigen Namespaces in Ihren Code ein:&lt;br /&gt;
&lt;br /&gt;
  using System;&lt;br /&gt;
  using Mono.Addins;&lt;br /&gt;
  using Nini.Config;&lt;br /&gt;
  using OpenSim.Region.Framework.Interfaces;&lt;br /&gt;
  using OpenSim.Region.Framework.Scenes;&lt;br /&gt;
&lt;br /&gt;
Ihr Projekt benötigt Referenzen zu:&lt;br /&gt;
* Mono.Addins.dll&lt;br /&gt;
* Nini.dll&lt;br /&gt;
* OpenSim.Region.Framework.dll&lt;br /&gt;
* OpenSim.Framework.dll&lt;br /&gt;
&lt;br /&gt;
=== 2. Assembly-Attribute ===&lt;br /&gt;
&lt;br /&gt;
Fügen Sie diese Attribute zu Ihrer Assembly hinzu (typischerweise in Properties/AssemblyInfo.cs oder am Anfang Ihrer Haupt-Moduldatei):&lt;br /&gt;
&lt;br /&gt;
  [assembly: Addin(&amp;quot;MyModule&amp;quot;, OpenSim.VersionInfo.VersionNumber + &amp;quot;.1&amp;quot;)]&lt;br /&gt;
  [assembly: AddinDependency(&amp;quot;OpenSim.Region.Framework&amp;quot;, OpenSim.VersionInfo.VersionNumber)]&lt;br /&gt;
&lt;br /&gt;
'''Parameter:'''&lt;br /&gt;
* '''Erster Parameter:''' Der eindeutige Name Ihres Moduls&lt;br /&gt;
* '''Version:''' An OpenSim-Version gebunden für Kompatibilitätsverfolgung&lt;br /&gt;
* '''AddinDependency:''' Deklariert Abhängigkeit von OpenSim.Region.Framework&lt;br /&gt;
&lt;br /&gt;
=== 3. Modul-Klassen-Attribut ===&lt;br /&gt;
&lt;br /&gt;
Markieren Sie Ihre Modul-Klasse mit dem Extension-Attribut:&lt;br /&gt;
&lt;br /&gt;
  [Extension(Path = &amp;quot;/OpenSim/RegionModules&amp;quot;, NodeName = &amp;quot;RegionModule&amp;quot;, Id = &amp;quot;MyModuleId&amp;quot;)]&lt;br /&gt;
  public class MyModule : ISharedRegionModule&lt;br /&gt;
  {&lt;br /&gt;
      // Implementierung&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
'''Wichtig:''' Der Path und NodeName müssen genau wie gezeigt sein. Die Id sollte für Ihr Modul eindeutig sein.&lt;br /&gt;
&lt;br /&gt;
== Beispiel: Geteiltes Region-Modul ==&lt;br /&gt;
&lt;br /&gt;
  using System;&lt;br /&gt;
  using System.Reflection;&lt;br /&gt;
  using log4net;&lt;br /&gt;
  using Mono.Addins;&lt;br /&gt;
  using Nini.Config;&lt;br /&gt;
  using OpenSim.Region.Framework.Interfaces;&lt;br /&gt;
  using OpenSim.Region.Framework.Scenes;&lt;br /&gt;
  &lt;br /&gt;
  [assembly: Addin(&amp;quot;ExampleSharedModule&amp;quot;, OpenSim.VersionInfo.VersionNumber + &amp;quot;.1&amp;quot;)]&lt;br /&gt;
  [assembly: AddinDependency(&amp;quot;OpenSim.Region.Framework&amp;quot;, OpenSim.VersionInfo.VersionNumber)]&lt;br /&gt;
  &lt;br /&gt;
  namespace MyNamespace&lt;br /&gt;
  {&lt;br /&gt;
      [Extension(Path = &amp;quot;/OpenSim/RegionModules&amp;quot;, NodeName = &amp;quot;RegionModule&amp;quot;, Id = &amp;quot;ExampleSharedModule&amp;quot;)]&lt;br /&gt;
      public class ExampleSharedModule : ISharedRegionModule&lt;br /&gt;
      {&lt;br /&gt;
          private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);&lt;br /&gt;
          private bool m_enabled = false;&lt;br /&gt;
          private List&amp;lt;Scene&amp;gt; m_scenes = new List&amp;lt;Scene&amp;gt;();&lt;br /&gt;
          &lt;br /&gt;
          public string Name &lt;br /&gt;
          { &lt;br /&gt;
              get { return &amp;quot;ExampleSharedModule&amp;quot;; } &lt;br /&gt;
          }&lt;br /&gt;
          &lt;br /&gt;
          public Type ReplaceableInterface &lt;br /&gt;
          { &lt;br /&gt;
              get { return null; } &lt;br /&gt;
          }&lt;br /&gt;
          &lt;br /&gt;
          public void Initialise(IConfigSource config)&lt;br /&gt;
          {&lt;br /&gt;
              IConfig moduleConfig = config.Configs[&amp;quot;ExampleModule&amp;quot;];&lt;br /&gt;
              if (moduleConfig != null)&lt;br /&gt;
              {&lt;br /&gt;
                  m_enabled = moduleConfig.GetBoolean(&amp;quot;Enabled&amp;quot;, false);&lt;br /&gt;
                  m_log.InfoFormat(&amp;quot;[EXAMPLE MODULE]: Enabled = {0}&amp;quot;, m_enabled);&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
          &lt;br /&gt;
          public void PostInitialise()&lt;br /&gt;
          {&lt;br /&gt;
              if (!m_enabled)&lt;br /&gt;
                  return;&lt;br /&gt;
                  &lt;br /&gt;
              m_log.Info(&amp;quot;[EXAMPLE MODULE]: PostInitialise aufgerufen&amp;quot;);&lt;br /&gt;
              // Geteilte Ressourcen hier initialisieren&lt;br /&gt;
          }&lt;br /&gt;
          &lt;br /&gt;
          public void AddRegion(Scene scene)&lt;br /&gt;
          {&lt;br /&gt;
              if (!m_enabled)&lt;br /&gt;
                  return;&lt;br /&gt;
                  &lt;br /&gt;
              m_scenes.Add(scene);&lt;br /&gt;
              m_log.InfoFormat(&amp;quot;[EXAMPLE MODULE]: Region {0} hinzugefügt&amp;quot;, scene.RegionInfo.RegionName);&lt;br /&gt;
              &lt;br /&gt;
              // Interfaces registrieren&lt;br /&gt;
              scene.RegisterModuleInterface&amp;lt;IExampleModule&amp;gt;(this);&lt;br /&gt;
              &lt;br /&gt;
              // Events anhängen&lt;br /&gt;
              scene.EventManager.OnNewClient += OnNewClient;&lt;br /&gt;
          }&lt;br /&gt;
          &lt;br /&gt;
          public void RegionLoaded(Scene scene)&lt;br /&gt;
          {&lt;br /&gt;
              if (!m_enabled)&lt;br /&gt;
                  return;&lt;br /&gt;
                  &lt;br /&gt;
              m_log.InfoFormat(&amp;quot;[EXAMPLE MODULE]: Region {0} geladen&amp;quot;, scene.RegionInfo.RegionName);&lt;br /&gt;
              &lt;br /&gt;
              // Andere Module hier zugreifen&lt;br /&gt;
              // var otherModule = scene.RequestModuleInterface&amp;lt;IOtherModule&amp;gt;();&lt;br /&gt;
          }&lt;br /&gt;
          &lt;br /&gt;
          public void RemoveRegion(Scene scene)&lt;br /&gt;
          {&lt;br /&gt;
              if (!m_enabled)&lt;br /&gt;
                  return;&lt;br /&gt;
                  &lt;br /&gt;
              m_scenes.Remove(scene);&lt;br /&gt;
              &lt;br /&gt;
              // Events abhängen&lt;br /&gt;
              scene.EventManager.OnNewClient -= OnNewClient;&lt;br /&gt;
              &lt;br /&gt;
              // Interfaces abmelden&lt;br /&gt;
              scene.UnregisterModuleInterface&amp;lt;IExampleModule&amp;gt;(this);&lt;br /&gt;
              &lt;br /&gt;
              m_log.InfoFormat(&amp;quot;[EXAMPLE MODULE]: Region {0} entfernt&amp;quot;, scene.RegionInfo.RegionName);&lt;br /&gt;
          }&lt;br /&gt;
          &lt;br /&gt;
          public void Close()&lt;br /&gt;
          {&lt;br /&gt;
              m_log.Info(&amp;quot;[EXAMPLE MODULE]: Wird heruntergefahren&amp;quot;);&lt;br /&gt;
              // Geteilte Ressourcen aufräumen&lt;br /&gt;
          }&lt;br /&gt;
          &lt;br /&gt;
          private void OnNewClient(IClientAPI client)&lt;br /&gt;
          {&lt;br /&gt;
              // Neuen Client behandeln&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Beispiel: Nicht-geteiltes Region-Modul ==&lt;br /&gt;
&lt;br /&gt;
  [Extension(Path = &amp;quot;/OpenSim/RegionModules&amp;quot;, NodeName = &amp;quot;RegionModule&amp;quot;, Id = &amp;quot;ExampleNonSharedModule&amp;quot;)]&lt;br /&gt;
  public class ExampleNonSharedModule : INonSharedRegionModule&lt;br /&gt;
  {&lt;br /&gt;
      private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);&lt;br /&gt;
      private bool m_enabled = false;&lt;br /&gt;
      private Scene m_scene;&lt;br /&gt;
      &lt;br /&gt;
      public string Name &lt;br /&gt;
      { &lt;br /&gt;
          get { return &amp;quot;ExampleNonSharedModule&amp;quot;; } &lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      public Type ReplaceableInterface &lt;br /&gt;
      { &lt;br /&gt;
          get { return null; } &lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      public void Initialise(IConfigSource config)&lt;br /&gt;
      {&lt;br /&gt;
          IConfig moduleConfig = config.Configs[&amp;quot;ExampleModule&amp;quot;];&lt;br /&gt;
          if (moduleConfig != null)&lt;br /&gt;
          {&lt;br /&gt;
              m_enabled = moduleConfig.GetBoolean(&amp;quot;Enabled&amp;quot;, false);&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      public void AddRegion(Scene scene)&lt;br /&gt;
      {&lt;br /&gt;
          if (!m_enabled)&lt;br /&gt;
              return;&lt;br /&gt;
              &lt;br /&gt;
          m_scene = scene;&lt;br /&gt;
          m_log.InfoFormat(&amp;quot;[EXAMPLE MODULE]: Zur Region {0} hinzugefügt&amp;quot;, scene.RegionInfo.RegionName);&lt;br /&gt;
          &lt;br /&gt;
          scene.RegisterModuleInterface&amp;lt;IExampleModule&amp;gt;(this);&lt;br /&gt;
          scene.EventManager.OnFrame += OnFrame;&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      public void RegionLoaded(Scene scene)&lt;br /&gt;
      {&lt;br /&gt;
          if (!m_enabled)&lt;br /&gt;
              return;&lt;br /&gt;
              &lt;br /&gt;
          // Andere Module zugreifen&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      public void RemoveRegion(Scene scene)&lt;br /&gt;
      {&lt;br /&gt;
          if (!m_enabled)&lt;br /&gt;
              return;&lt;br /&gt;
              &lt;br /&gt;
          scene.EventManager.OnFrame -= OnFrame;&lt;br /&gt;
          scene.UnregisterModuleInterface&amp;lt;IExampleModule&amp;gt;(this);&lt;br /&gt;
          &lt;br /&gt;
          m_log.InfoFormat(&amp;quot;[EXAMPLE MODULE]: Von Region {0} entfernt&amp;quot;, scene.RegionInfo.RegionName);&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      public void Close()&lt;br /&gt;
      {&lt;br /&gt;
          // Regionsspezifische Ressourcen aufräumen&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      private void OnFrame()&lt;br /&gt;
      {&lt;br /&gt;
          // Regionsspezifische Frame-Verarbeitung&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
= Modul-Lebenszyklus =&lt;br /&gt;
&lt;br /&gt;
== Server-Start ==&lt;br /&gt;
&lt;br /&gt;
'''1. Modul-Laden'''&lt;br /&gt;
* Region-Server startet&lt;br /&gt;
* Alle Modul-Klassen werden über Mono.Addins geladen (keine bestimmte Reihenfolge)&lt;br /&gt;
&lt;br /&gt;
'''2. Geteilte Modul-Initialisierung'''&lt;br /&gt;
* Für jedes ''ISharedRegionModule'': Eine Instanz wird erstellt, ''Initialise'' wird aufgerufen&lt;br /&gt;
* Für jedes ''ISharedRegionModule'': ''PostInitialise'' wird aufgerufen&lt;br /&gt;
&lt;br /&gt;
'''3. Scene-Erstellung (für jede Scene)'''&lt;br /&gt;
* Für jedes ''INonSharedRegionModule'': Neue Instanz wird erstellt, ''Initialise'' wird aufgerufen&lt;br /&gt;
* Für alle Module (geteilt und nicht-geteilt): ''AddRegion(scene)'' wird aufgerufen&lt;br /&gt;
* Module werden mit der Scene verknüpft&lt;br /&gt;
* Für alle Module: ''RegionLoaded(scene)'' wird aufgerufen&lt;br /&gt;
* An diesem Punkt können Module auf andere Module über ''scene.RequestModuleInterface&amp;lt;T&amp;gt;()'' zugreifen&lt;br /&gt;
&lt;br /&gt;
== Eine Region hinzufügen (Laufzeit) ==&lt;br /&gt;
&lt;br /&gt;
* Für jedes ''INonSharedRegionModule'': Neue Instanz wird erstellt, ''Initialise'' wird aufgerufen&lt;br /&gt;
* Für alle Module (geteilt und nicht-geteilt): ''AddRegion(scene)'' wird aufgerufen&lt;br /&gt;
* Für alle Module: ''RegionLoaded(scene)'' wird aufgerufen&lt;br /&gt;
&lt;br /&gt;
== Eine Region entfernen ==&lt;br /&gt;
&lt;br /&gt;
* Für alle Module (geteilt und nicht-geteilt): ''RemoveRegion(scene)'' wird aufgerufen&lt;br /&gt;
* Nur für ''INonSharedRegionModule''s: ''Close'' wird aufgerufen&lt;br /&gt;
* Modul-Referenzen werden aus der Scene entfernt&lt;br /&gt;
* ''INonSharedRegionModule''-Instanzen können vom Garbage Collector erfasst werden&lt;br /&gt;
&lt;br /&gt;
'''Hinweis:''' Aufgrund des Verhaltens der .NET/Mono-Laufzeitumgebung werden einige Ressourcen möglicherweise nicht sofort freigegeben, selbst bei ordnungsgemäßer Bereinigung.&lt;br /&gt;
&lt;br /&gt;
== Eine Region neu starten ==&lt;br /&gt;
&lt;br /&gt;
Ein Region-Neustart wird implementiert als:&lt;br /&gt;
1. [[#Eine_Region_entfernen|Region entfernen]]&lt;br /&gt;
2. [[#Eine_Region_hinzuf.C3.BCgen_.28Laufzeit.29|Region hinzufügen]]&lt;br /&gt;
&lt;br /&gt;
Avatare in der Region werden während des Neustarts getrennt.&lt;br /&gt;
&lt;br /&gt;
'''Wichtig:''' Aufgrund von .NET/Mono-Laufzeitbeschränkungen erfolgt möglicherweise kein echtes Entladen von Modulen. Einige Ressourcen können über Neustarts hinweg im Speicher verbleiben.&lt;br /&gt;
&lt;br /&gt;
== Server-Herunterfahren ==&lt;br /&gt;
&lt;br /&gt;
* Für jede Scene: [[#Eine_Region_entfernen|Region entfernen]]-Schritte werden durchgeführt&lt;br /&gt;
** ''RemoveRegion'' wird für alle Module aufgerufen&lt;br /&gt;
** ''Close'' wird für alle ''INonSharedRegionModule''s aufgerufen&lt;br /&gt;
* ''Close'' wird für alle ''ISharedRegionModule''s aufgerufen&lt;br /&gt;
* Module können vom Garbage Collector erfasst werden&lt;br /&gt;
&lt;br /&gt;
= Best Practices =&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Verwenden Sie das ''enabled''-Muster für Module, die optional sein sollten:&lt;br /&gt;
&lt;br /&gt;
  [ExampleModule]&lt;br /&gt;
      Enabled = true&lt;br /&gt;
      ; Weitere Einstellungen...&lt;br /&gt;
&lt;br /&gt;
Überprüfen Sie dies in ''Initialise'' und kehren Sie früh zurück, wenn deaktiviert:&lt;br /&gt;
&lt;br /&gt;
  public void Initialise(IConfigSource config)&lt;br /&gt;
  {&lt;br /&gt;
      IConfig cfg = config.Configs[&amp;quot;ExampleModule&amp;quot;];&lt;br /&gt;
      if (cfg == null || !cfg.GetBoolean(&amp;quot;Enabled&amp;quot;, false))&lt;br /&gt;
          return;&lt;br /&gt;
          &lt;br /&gt;
      m_enabled = true;&lt;br /&gt;
      // Initialisierung fortsetzen...&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Ressourcenverwaltung ==&lt;br /&gt;
&lt;br /&gt;
* '''In RemoveRegion aufräumen:''' Event-Handler abmelden, Interfaces abmelden&lt;br /&gt;
* '''In Close aufräumen:''' Ressourcen freigeben, Verbindungen schließen&lt;br /&gt;
* '''Operationen abgleichen:''' Was Sie in ''AddRegion'' hinzufügen, entfernen Sie in ''RemoveRegion''&lt;br /&gt;
* '''Memory Leaks vermeiden:''' Immer Event-Handler abhängen, um Referenzen zu vermeiden&lt;br /&gt;
&lt;br /&gt;
== Modul-Abhängigkeiten ==&lt;br /&gt;
&lt;br /&gt;
Greifen Sie auf andere Module in ''RegionLoaded'' zu, nicht in ''AddRegion'':&lt;br /&gt;
&lt;br /&gt;
  public void RegionLoaded(Scene scene)&lt;br /&gt;
  {&lt;br /&gt;
      // Sicher - alle Module wurden hinzugefügt&lt;br /&gt;
      IOtherModule other = scene.RequestModuleInterface&amp;lt;IOtherModule&amp;gt;();&lt;br /&gt;
      if (other != null)&lt;br /&gt;
      {&lt;br /&gt;
          // Modul verwenden&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Modultyp wählen ==&lt;br /&gt;
&lt;br /&gt;
'''Verwenden Sie ISharedRegionModule wenn:'''&lt;br /&gt;
* Modul Singleton-Dienste bereitstellt&lt;br /&gt;
* Modul regionsübergreifende Funktionalität verwaltet&lt;br /&gt;
* Modul ressourcenintensiv ist und nur einmal existieren sollte&lt;br /&gt;
* Beispiel: Asset-Service, Benutzerverwaltung&lt;br /&gt;
&lt;br /&gt;
'''Verwenden Sie INonSharedRegionModule wenn:'''&lt;br /&gt;
* Modul regionsspezifischen Status verwaltet&lt;br /&gt;
* Modul-Funktionalität regionsspezifisch ist&lt;br /&gt;
* Modul von Isolation zwischen Regionen profitiert&lt;br /&gt;
* Beispiel: Terrain-Modul, Vegetations-Modul&lt;br /&gt;
&lt;br /&gt;
== ReplaceableInterface ==&lt;br /&gt;
&lt;br /&gt;
Verwenden Sie ''ReplaceableInterface'', um die Ersetzung Ihres Moduls zu ermöglichen:&lt;br /&gt;
&lt;br /&gt;
  public Type ReplaceableInterface &lt;br /&gt;
  { &lt;br /&gt;
      get { return typeof(IMyModuleInterface); } &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Dies ermöglicht es Drittanbieter-Modulen, Ihre Standard-Implementierung zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
= Bereitstellung =&lt;br /&gt;
&lt;br /&gt;
== Manuelle Bereitstellung ==&lt;br /&gt;
&lt;br /&gt;
1. Bauen Sie Ihre Modul-Assembly&lt;br /&gt;
2. Kopieren Sie die .dll in den bin-Ordner von OpenSim&lt;br /&gt;
3. Starten Sie OpenSim neu&lt;br /&gt;
4. Modul wird automatisch über Mono.Addins entdeckt und geladen&lt;br /&gt;
&lt;br /&gt;
== Verwendung von Prebuild ==&lt;br /&gt;
&lt;br /&gt;
Für die Integration in das Build-System von OpenSim erstellen Sie einen prebuild.xml-Eintrag:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;Project name=&amp;quot;OpenSim.Region.Modules.Example&amp;quot; path=&amp;quot;addon-modules/ExampleModule&amp;quot; type=&amp;quot;Library&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Configuration name=&amp;quot;Debug&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Options&amp;gt;&lt;br /&gt;
        &amp;lt;OutputPath&amp;gt;../../bin/&amp;lt;/OutputPath&amp;gt;&lt;br /&gt;
      &amp;lt;/Options&amp;gt;&lt;br /&gt;
    &amp;lt;/Configuration&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;ReferencePath&amp;gt;../../bin/&amp;lt;/ReferencePath&amp;gt;&lt;br /&gt;
    &amp;lt;Reference name=&amp;quot;Mono.Addins&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;Reference name=&amp;quot;Nini&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;Reference name=&amp;quot;log4net&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;Reference name=&amp;quot;OpenSim.Region.Framework&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;Reference name=&amp;quot;OpenSim.Framework&amp;quot;/&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;Files&amp;gt;&lt;br /&gt;
      &amp;lt;Match pattern=&amp;quot;*.cs&amp;quot; recurse=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/Files&amp;gt;&lt;br /&gt;
  &amp;lt;/Project&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Verwendung von .NET SDK-Projekten ==&lt;br /&gt;
&lt;br /&gt;
Moderne .NET 8.0-Projekte können SDK-Style .csproj verwenden:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;Project Sdk=&amp;quot;Microsoft.NET.Sdk&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;PropertyGroup&amp;gt;&lt;br /&gt;
      &amp;lt;TargetFramework&amp;gt;net8.0&amp;lt;/TargetFramework&amp;gt;&lt;br /&gt;
      &amp;lt;OutputPath&amp;gt;../../bin/&amp;lt;/OutputPath&amp;gt;&lt;br /&gt;
      &amp;lt;GenerateAssemblyInfo&amp;gt;false&amp;lt;/GenerateAssemblyInfo&amp;gt;&lt;br /&gt;
    &amp;lt;/PropertyGroup&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;ItemGroup&amp;gt;&lt;br /&gt;
      &amp;lt;Reference Include=&amp;quot;Mono.Addins&amp;quot; HintPath=&amp;quot;../../bin/Mono.Addins.dll&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;ProjectReference Include=&amp;quot;../../OpenSim/Region/Framework/OpenSim.Region.Framework.csproj&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/ItemGroup&amp;gt;&lt;br /&gt;
  &amp;lt;/Project&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Fehlerbehebung =&lt;br /&gt;
&lt;br /&gt;
== Modul wird nicht geladen ==&lt;br /&gt;
&lt;br /&gt;
* Überprüfen Sie, ob das Extension-Attribut korrekt ist&lt;br /&gt;
* Prüfen Sie, ob Assembly-Attribute vorhanden sind&lt;br /&gt;
* Stellen Sie sicher, dass die Mono.Addins.dll-Referenz korrekt ist&lt;br /&gt;
* Überprüfen Sie das OpenSim-Log auf Addin-Ladefehler&lt;br /&gt;
* Überprüfen Sie, ob die .dll im bin-Verzeichnis liegt&lt;br /&gt;
&lt;br /&gt;
== Modul nicht gefunden ==&lt;br /&gt;
&lt;br /&gt;
* Überprüfen Sie, ob die Name-Eigenschaft des Moduls mit der Konfiguration übereinstimmt&lt;br /&gt;
* Überprüfen Sie, ob das Modul in der Konfiguration aktiviert ist&lt;br /&gt;
* Prüfen Sie auf Tippfehler im Extension-Id-Attribut&lt;br /&gt;
&lt;br /&gt;
== Methoden werden nicht aufgerufen ==&lt;br /&gt;
&lt;br /&gt;
* Überprüfen Sie, ob die Interface-Implementierung vollständig ist&lt;br /&gt;
* Prüfen Sie, ob m_enabled oder ähnliche Flags die Ausführung nicht verhindern&lt;br /&gt;
* Stellen Sie sicher, dass das Modul die Konfigurationsprüfungen in Initialise bestanden hat&lt;br /&gt;
&lt;br /&gt;
== Memory Leaks ==&lt;br /&gt;
&lt;br /&gt;
* Hängen Sie alle Event-Handler in RemoveRegion ab&lt;br /&gt;
* Melden Sie alle Modul-Interfaces ab&lt;br /&gt;
* Leeren Sie Collections und Referenzen in Close&lt;br /&gt;
* Verwenden Sie WeakReference für langlebige Referenzen, wenn angemessen&lt;br /&gt;
&lt;br /&gt;
== .NET 8.0 spezifische Probleme ==&lt;br /&gt;
&lt;br /&gt;
* Stellen Sie sicher, dass alle referenzierten Assemblies .NET 8.0-kompatibel sind&lt;br /&gt;
* Prüfen Sie auf veraltete API-Verwendung&lt;br /&gt;
* Überprüfen Sie, ob async/await-Muster korrekt verwendet werden&lt;br /&gt;
&lt;br /&gt;
= Erweiterte Themen =&lt;br /&gt;
&lt;br /&gt;
== Modul-Ersetzung ==&lt;br /&gt;
&lt;br /&gt;
Implementieren Sie ''ReplaceableInterface'', um Modul-Ersetzung zu ermöglichen:&lt;br /&gt;
&lt;br /&gt;
  public Type ReplaceableInterface &lt;br /&gt;
  { &lt;br /&gt;
      get { return typeof(IMyService); } &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Der Loader wird:&lt;br /&gt;
1. Alle Module laden&lt;br /&gt;
2. Für Module mit ReplaceableInterface die Aktivierung aufschieben&lt;br /&gt;
3. Nur aktivieren, wenn kein anderes Modul dieses Interface registriert hat&lt;br /&gt;
&lt;br /&gt;
== Modul-übergreifende Kommunikation ==&lt;br /&gt;
&lt;br /&gt;
Verwenden Sie Modul-Interfaces für die Kommunikation:&lt;br /&gt;
&lt;br /&gt;
  // Interface definieren&lt;br /&gt;
  public interface IMyModule&lt;br /&gt;
  {&lt;br /&gt;
      void DoSomething();&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Im Modul implementieren&lt;br /&gt;
  public class MyModule : ISharedRegionModule, IMyModule&lt;br /&gt;
  {&lt;br /&gt;
      public void AddRegion(Scene scene)&lt;br /&gt;
      {&lt;br /&gt;
          scene.RegisterModuleInterface&amp;lt;IMyModule&amp;gt;(this);&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      public void DoSomething()&lt;br /&gt;
      {&lt;br /&gt;
          // Implementierung&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Von einem anderen Modul aus verwenden&lt;br /&gt;
  public void RegionLoaded(Scene scene)&lt;br /&gt;
  {&lt;br /&gt;
      IMyModule myMod = scene.RequestModuleInterface&amp;lt;IMyModule&amp;gt;();&lt;br /&gt;
      if (myMod != null)&lt;br /&gt;
          myMod.DoSomething();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Leistungsüberlegungen ==&lt;br /&gt;
&lt;br /&gt;
* '''Geteilte Module:''' Geringerer Speicher-Overhead, potenzielle Engpässe&lt;br /&gt;
* '''Nicht-geteilte Module:''' Höhere Speichernutzung, bessere Parallelisierung&lt;br /&gt;
* '''Event-Handler:''' Seien Sie effizient, vermeiden Sie blockierende Operationen&lt;br /&gt;
* '''Asynchrone Operationen:''' Verwenden Sie Task-basierte async für langläufige Operationen&lt;br /&gt;
&lt;br /&gt;
= Siehe auch =&lt;br /&gt;
&lt;br /&gt;
* [[Developing OpenSim Addins]] - Erstellen von Addon-Paketen&lt;br /&gt;
* [[Installing 3rd party addins]] - Installation von Addons&lt;br /&gt;
* [http://opensimulator.org/wiki/ OpenSimulator Wiki] - Hauptdokumentation&lt;br /&gt;
&lt;br /&gt;
= Referenzen =&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/opensim/opensim OpenSimulator GitHub Repository]&lt;br /&gt;
* [https://github.com/mono/mono-addins Mono.Addins Dokumentation]&lt;br /&gt;
* [http://opensimulator.org/ OpenSimulator Website]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Installing_3rd_party_addins</id>
		<title>Installing 3rd party addins</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Installing_3rd_party_addins"/>
				<updated>2025-12-16T09:40:21Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|Installing_3rd_party_addins}}&lt;br /&gt;
This page explains how to install, update and uninstall 3rd-party addins for the simulator server in a systematic way. 3rd-party addins are packages created around binary distributions of region modules, possibly with additional external libraries and resources, that extend the simulator with additional functionality. Note that 3rd-party addins here refers to '''binary packages''' of OpenSim extensions; this is different from extensions available as source code, which you may already be familiar with, and for which you may already have a process in place for building and deploying into your grid. 3rd-party addins give the providers the option to keep the source code proprietary, and give you a relatively simple process for integrating those extensions into your installation of OpenSim and to evolve them in relative independence from updates to OpenSim core.&lt;br /&gt;
&lt;br /&gt;
If you are a developer looking for information about how to develop and distribute addins, please see [[Developing OpenSim Addins|this other page]].&lt;br /&gt;
&lt;br /&gt;
== Registry Location ==&lt;br /&gt;
&lt;br /&gt;
Before you start using managed addins, it is important that you think carefully about where you want to keep these addins. Internally, OpenSim uses its own addins, and it installs the addin database under its '''bin''' folder. If you don't change anything, 3rd-party addins will be placed there too. Depending on what process you have in place for updating OpenSim, this may cause you trouble: if your process includes deleting the entire bin folder and replacing with a new one, that process will also delete your 3rd-party addins, and you will have to reinstall them again every time you update OpenSim core.&lt;br /&gt;
&lt;br /&gt;
The location of the addin registry is given by a configuration variable in OpenSim.ini:&lt;br /&gt;
  [Startup]&lt;br /&gt;
      ...&lt;br /&gt;
      ;RegistryLocation = &amp;quot;.&amp;quot;&lt;br /&gt;
      RegistryLocation = &amp;quot;/path/to/my/registry&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can change it to point to another path in your file system. This location will be important for addin installation.&lt;br /&gt;
&lt;br /&gt;
From here on, all the steps described next use the Mono Addins command line tool [https://monoaddins.codeplex.com/wikipage?title=Creating%20and%20Managing%20Add-in%20Packages mautil]. mautil allows us to package, distribute, install and uninstall mono addins for .NET applications in general.&lt;br /&gt;
&lt;br /&gt;
== Configuration Location ==&lt;br /&gt;
&lt;br /&gt;
Another issue you need to think about is where to store the addins' own configuration files. This is important because as you update OpenSim or the addins, you don't want to have to reconstruct these configuration files over and over again.&lt;br /&gt;
&lt;br /&gt;
The location of the addin configuration files is given by a configuration variable in OpenSim.ini:&lt;br /&gt;
  [Startup]&lt;br /&gt;
      ...&lt;br /&gt;
      ;ConfigDirectory = &amp;quot;.&amp;quot;&lt;br /&gt;
      ConfigDirectory = &amp;quot;/path/to/my/addin/configs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can change it to point to another path in your file system. This location will be important for addin installation.&lt;br /&gt;
&lt;br /&gt;
== Initial Registry Update ==&lt;br /&gt;
&lt;br /&gt;
Also before installing any 3rd party addins, you need to populate the registry with OpenSim's own addins, which are required for the installation of 3rd-party's. Do that by running this command in OpenSim's '''bin''' folder: (note: if you are in Linux, precede the command with '''mono''') &lt;br /&gt;
&lt;br /&gt;
  $ mautil.exe -reg ''/path/to/my/registry'' reg-update&lt;br /&gt;
For example:&lt;br /&gt;
  $ mautil.exe -reg C:/addins-registry reg-update&lt;br /&gt;
&lt;br /&gt;
IMPORTANT: you need to issue these commands from the bin folder. Otherwise you need to add the -p parameter and set it to the directory where OpenSim.exe resides. So if you run mautil.exe from somewhere else, make sure to adjust that argument's value. For example, if you run it from the OpenSim root folder, the command above should be:&lt;br /&gt;
  $ bin/mautil.exe '''-p bin''' -reg C:/addins-registry reg-update&lt;br /&gt;
You can also use absolute paths, if that makes it easier.&lt;br /&gt;
&lt;br /&gt;
From here on we will assume that mautil.exe is ran from OpenSim's bin folder, so we omit -p.&lt;br /&gt;
&lt;br /&gt;
== 3rd Party Repositories ==&lt;br /&gt;
&lt;br /&gt;
The next step is to add remote repositories of addins to your OpenSim installation. There is no central repository of addins for OpenSim. Remote repositories are provided and maintained by 3rd parties, and you will have to find out about them [[List of 3rd Party Addin Repositories|by some means]]. You can add as many repositories as needed. To add a repository, run these commands in OpenSim's '''bin''' folder: (note: if you are in Linux, precede the command with '''mono''') &lt;br /&gt;
  $ mautil.exe -reg ''/path/to/my/registry'' rep-add ''repo_url''&lt;br /&gt;
  $ mautil.exe -reg ''/path/to/my/registry'' rep-update&lt;br /&gt;
For example:&lt;br /&gt;
  $ mautil.exe -reg C:/addins-registry rep-add http://metaverseink.com/repo&lt;br /&gt;
  $ mautil.exe -reg C:/addins-registry rep-update&lt;br /&gt;
Or if you decided to use the default OpenSim's '''bin''' folder as the registry location:&lt;br /&gt;
  $ mautil.exe -reg . rep-add http://metaverseink.com/repo&lt;br /&gt;
  $ mautil.exe -reg . rep-update&lt;br /&gt;
&lt;br /&gt;
Again, if you run mautil.exe from somewhere else, make sure to use -p properly.&lt;br /&gt;
&lt;br /&gt;
From here on you can check what addins are available by typing&lt;br /&gt;
  $ mautil.exe -reg ''/path/to/my/registry'' list-av&lt;br /&gt;
&lt;br /&gt;
== Installing Addins ==&lt;br /&gt;
&lt;br /&gt;
Finally, you can install an available addin with the following command:&lt;br /&gt;
  $ mautil.exe -reg ''/path/to/my/registry'' install ''addin''&lt;br /&gt;
For example, to install the most recent version of Diva.AddinExample:&lt;br /&gt;
  $ mautil.exe -reg C:/addins-registry install Diva.AddinExample&lt;br /&gt;
To install a specific version:&lt;br /&gt;
  $ mautil.exe -reg C:/addins-registry install Diva.AddinExample,0.8.1.0.1&lt;br /&gt;
&lt;br /&gt;
The installed addins are placed under ''/path/to/my/registry''/addins/''addin''. Often, these addins will bring a configuration (.ini) file that you may need to change. Depending on how the addins are coded, they may or may not copy their own configuration file to the folder specified above, ConfigDirectory. Even if they do, they can only do it when OpenSim runs the addins the first time. So, the best practice is for you to go to the directory where your addin was installed and copy the ini file from there to your own ConfigDirectory.&lt;br /&gt;
&lt;br /&gt;
For example, for this particular AddinExample, you would be able to find its configuration file in&lt;br /&gt;
  C:/addins-registry/addins/Diva.AddinExample.0.8.1.0.1/AddinExample.ini&lt;br /&gt;
You would then copy it to ''/path/to/my/addin/configs'' and edit it there.&lt;br /&gt;
&lt;br /&gt;
== Checking for, and Installing, Updates ==&lt;br /&gt;
&lt;br /&gt;
To check:&lt;br /&gt;
  $ mautil.exe -reg ''/path/to/my/registry'' list-update&lt;br /&gt;
&lt;br /&gt;
To update:&lt;br /&gt;
  $ mautil.exe -reg ''/path/to/my/registry'' update ''addin''&lt;br /&gt;
&lt;br /&gt;
== Uninstalling Addins ==&lt;br /&gt;
&lt;br /&gt;
  $ mautil.exe -reg ''/path/to/my/registry'' uninstall ''addin''&lt;br /&gt;
For example:&lt;br /&gt;
  $ mautil.exe -reg C:/addins-registry uninstall Diva.AddinExample&lt;br /&gt;
&lt;br /&gt;
== Versioning ==&lt;br /&gt;
&lt;br /&gt;
One important aspect of installing and managing 3rd-party binary components is the issue of versioning. .NET, in particular, is quite strict about interface compatibility between libraries, and it will complain (by raising exceptions or by crashing) if an executable tries to link an incompatible library. In the case of 3rd-party addins, incompatibilities may happen when those addins have been compiled against a version of OpenSim that is different from the one you have. Some of those incompatibilities will be caught at the time of addin installation, but some will not -- these latter ones may show up when you run OpenSim.&lt;br /&gt;
&lt;br /&gt;
For example, suppose that the latest MISearchModules addin was compiled against OpenSim 0.8.1.0 and you have OpenSim 0.7.6.2. When you try to install that addin, the addin installation will fail, because MISearchModules,0.8.1.0.1 has an explicit dependency on OpenSim 0.8.1.0. Since your OpenSim version is older than the addin, the incompatibility will be detected, and the installation will fail. In this case, you would need to find and install the older MISearchModules addin for OpenSim 0.7.6.2.&lt;br /&gt;
&lt;br /&gt;
The most problematic situation is the one in reverse. Suppose that you have installed MISearchModules,0.7.6.2.1 (which had been compiled against OpenSim 0.7.6.2), and that you update your OpenSim installation to OpenSim 0.8.1.0. The mono addins framework will deem this addin compatible with the new version of OpenSim (because the new OpenSim version is higher than the addin's). But in reality, the new OpenSim dlls may have different .NET interfaces than those against which the MISearchModules addin was compiled. When the addin uses parts of core OpenSim that have changed between versions, a failure may happen when you run OpenSim -- it may be just an exception in the log or a complete crash of the simulator. In this case, you would need to find the newer version of the MISearchModules addin for 0.8.1.0 (see check for updates above). If it doesn't exist yet, you need to uninstall the MISearchModules addin (see uninstalling addins above) until the newer version becomes available by the provider of that addin.&lt;br /&gt;
&lt;br /&gt;
'''Version numbers of all kinds are mainly annotations for people. The ground truth is always in the binary signature of dlls.'''&lt;br /&gt;
&lt;br /&gt;
Here are some concrete examples:&lt;br /&gt;
* Addin Foo requires OpenSim 0.8.1, and is being installed in OpenSim 0.8.1 ==&amp;gt; Addin compatibility ok. Binary compatibility ''likely'' ok.&lt;br /&gt;
* Addin Foo requires OpenSim 0.7 and is being installed in OpenSim 0.8.1 ==&amp;gt; Addin compatibility ok. Binary compatibility ''likely'' will fail, depending on a number of things. If Foo has been compiled against OpenSim 0.7, then it will surely fail, because the OpenSim APIs tend to change substantially between releases. But if Foo was compiled against 0.8.1, but the developers of Foo forgot to update the declared dependency, then binary compatibility will be ok, and the plugin will be successfully installed.&lt;br /&gt;
* Addin Foo requires OpenSim 0.9.0 and is being installed in OpenSim 0.8.1 ==&amp;gt; Addin compatibility will fail. Foo won't even get to run to check binary compatibility.&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Installing_3rd_party_addins/de</id>
		<title>Installing 3rd party addins/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Installing_3rd_party_addins/de"/>
				<updated>2025-12-16T09:35:55Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: Created page with &amp;quot;{{Quicklinks|Installing_3rd_party_addins}} = Installing 3rd party addins = Diese Seite erklärt, wie man Drittanbieter-Addins für den Simulator-Server systematisch installier...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|Installing_3rd_party_addins}}&lt;br /&gt;
= Installing 3rd party addins =&lt;br /&gt;
Diese Seite erklärt, wie man Drittanbieter-Addins für den Simulator-Server systematisch installiert, aktualisiert und deinstalliert. Drittanbieter-Addins sind Pakete, die um binäre Distributionen von Region Modulen herum erstellt wurden, möglicherweise mit zusätzlichen externen Bibliotheken und Ressourcen, die den Simulator mit zusätzlicher Funktionalität erweitern. Beachten Sie, dass Drittanbieter-Addins hier '''binäre Pakete''' von OpenSim-Erweiterungen bezeichnet; dies unterscheidet sich von als Quellcode verfügbaren Erweiterungen, mit denen Sie möglicherweise bereits vertraut sind und für die Sie möglicherweise bereits einen Prozess zum Erstellen und Bereitstellen in Ihrem Grid eingerichtet haben. Drittanbieter-Addins geben den Anbietern die Möglichkeit, den Quellcode proprietär zu halten, und bieten Ihnen einen relativ einfachen Prozess zur Integration dieser Erweiterungen in Ihre OpenSim-Installation und zur Weiterentwicklung relativ unabhängig von Aktualisierungen des OpenSim-Kerns.&lt;br /&gt;
&lt;br /&gt;
'''Hinweis:''' Diese Dokumentation wurde für OpenSimulator Version 0.9.3.x mit .NET 8.0 Runtime aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie ein Entwickler sind, der nach Informationen zur Entwicklung und Verteilung von Addins sucht, lesen Sie bitte [[Developing OpenSim Addins|diese andere Seite]].&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
&lt;br /&gt;
Bevor Sie Drittanbieter-Addins installieren, stellen Sie sicher, dass Sie Folgendes haben:&lt;br /&gt;
* OpenSimulator 0.9.3.x installiert und laufend&lt;br /&gt;
* .NET 8.0 Runtime (https://dotnet.microsoft.com/en-us/download/dotnet/8.0)&lt;br /&gt;
* Zugriff auf das OpenSim bin-Verzeichnis&lt;br /&gt;
* Administrative/Schreibberechtigungen für das OpenSim-Installationsverzeichnis&lt;br /&gt;
&lt;br /&gt;
== Registry-Speicherort ==&lt;br /&gt;
&lt;br /&gt;
Bevor Sie mit der Verwendung verwalteter Addins beginnen, ist es wichtig, dass Sie sorgfältig darüber nachdenken, wo Sie diese Addins aufbewahren möchten. Intern verwendet OpenSim seine eigenen Addins und installiert die Addin-Datenbank unter seinem '''bin'''-Ordner. Wenn Sie nichts ändern, werden auch Drittanbieter-Addins dort platziert. Abhängig davon, welchen Prozess Sie für die Aktualisierung von OpenSim eingerichtet haben, kann dies zu Problemen führen: Wenn Ihr Prozess das Löschen des gesamten bin-Ordners und das Ersetzen durch einen neuen umfasst, werden bei diesem Prozess auch Ihre Drittanbieter-Addins gelöscht, und Sie müssen sie jedes Mal neu installieren, wenn Sie den OpenSim-Kern aktualisieren.&lt;br /&gt;
&lt;br /&gt;
Der Speicherort der Addin-Registry wird durch eine Konfigurationsvariable in OpenSim.ini angegeben:&lt;br /&gt;
&lt;br /&gt;
  [Startup]&lt;br /&gt;
      ...&lt;br /&gt;
      ;# {RegistryLocation} {} {Addins Registry Location} {}&lt;br /&gt;
      ; Legen Sie den Pfad zu einem Verzeichnis für die Addin-Registry fest, wenn Sie sie nicht im OpenSim bin-Verzeichnis haben möchten.&lt;br /&gt;
      ; RegistryLocation = &amp;quot;.&amp;quot;&lt;br /&gt;
      RegistryLocation = &amp;quot;/pfad/zu/meiner/registry&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Sie können dies so ändern, dass es auf einen anderen Pfad in Ihrem Dateisystem verweist. Dieser Speicherort ist für die Addin-Installation wichtig.&lt;br /&gt;
&lt;br /&gt;
'''Empfehlung:''' Verwenden Sie ein separates Verzeichnis außerhalb des OpenSim bin-Ordners, um Ihre Addins bei OpenSim-Updates zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Von hier an verwenden alle im Folgenden beschriebenen Schritte das Mono Addins Kommandozeilen-Tool '''mautil'''. mautil ermöglicht es uns, Mono-Addins für .NET-Anwendungen im Allgemeinen zu paketieren, zu verteilen, zu installieren und zu deinstallieren. Dieses Tool ist im bin-Verzeichnis von OpenSim als '''mautil.exe''' enthalten.&lt;br /&gt;
&lt;br /&gt;
== Konfigurations-Speicherort ==&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Problem, über das Sie nachdenken müssen, ist, wo die eigenen Konfigurationsdateien der Addins gespeichert werden sollen. Dies ist wichtig, da Sie beim Aktualisieren von OpenSim oder den Addins diese Konfigurationsdateien nicht immer wieder neu erstellen möchten.&lt;br /&gt;
&lt;br /&gt;
Der Speicherort der Addin-Konfigurationsdateien wird durch eine Konfigurationsvariable in OpenSim.ini angegeben:&lt;br /&gt;
&lt;br /&gt;
  [Startup]&lt;br /&gt;
      ...&lt;br /&gt;
      ;# {ConfigDirectory} {} {Set path to directory for modular ini files} {}&lt;br /&gt;
      ; Wird von Region Modulen verwendet, um optional Konfigurationsdateien aus einem separaten Verzeichnis zu laden&lt;br /&gt;
      ; ConfigDirectory = &amp;quot;.&amp;quot;&lt;br /&gt;
      ConfigDirectory = &amp;quot;/pfad/zu/meinen/addin/configs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Sie können dies so ändern, dass es auf einen anderen Pfad in Ihrem Dateisystem verweist. Dieser Speicherort ist für die Addin-Installation wichtig.&lt;br /&gt;
&lt;br /&gt;
'''Empfehlung:''' Verwenden Sie ein separates Verzeichnis, um Konfigurationsdateien über Updates hinweg persistent zu halten. Häufige Optionen sind:&lt;br /&gt;
* Windows: C:\OpenSim\configs&lt;br /&gt;
* Linux: /etc/opensim/configs oder ~/opensim/configs&lt;br /&gt;
&lt;br /&gt;
== Initiale Registry-Aktualisierung ==&lt;br /&gt;
&lt;br /&gt;
Bevor Sie Drittanbieter-Addins installieren, müssen Sie die Registry mit OpenSims eigenen Addins füllen, die für die Installation von Drittanbieter-Addins erforderlich sind. Führen Sie dazu diesen Befehl im '''bin'''-Ordner von OpenSim aus:&lt;br /&gt;
&lt;br /&gt;
'''Windows:'''&lt;br /&gt;
  $ mautil.exe -reg &amp;quot;C:\pfad\zu\meiner\registry&amp;quot; reg-update&lt;br /&gt;
&lt;br /&gt;
'''Linux/Mac:'''&lt;br /&gt;
  $ mono mautil.exe -reg &amp;quot;/pfad/zu/meiner/registry&amp;quot; reg-update&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
  $ mautil.exe -reg &amp;quot;C:\addins-registry&amp;quot; reg-update&lt;br /&gt;
&lt;br /&gt;
'''WICHTIG:''' Sie müssen diese Befehle aus dem bin-Ordner heraus ausführen. Andernfalls müssen Sie den '''-p''' Parameter hinzufügen und ihn auf das Verzeichnis setzen, in dem sich OpenSim.exe befindet. Wenn Sie also mautil.exe von woanders ausführen, stellen Sie sicher, dass Sie den Wert dieses Arguments anpassen. Wenn Sie es beispielsweise aus dem OpenSim-Stammordner ausführen, sollte der obige Befehl lauten:&lt;br /&gt;
&lt;br /&gt;
  $ bin\mautil.exe -p bin -reg &amp;quot;C:\addins-registry&amp;quot; reg-update&lt;br /&gt;
&lt;br /&gt;
Sie können auch absolute Pfade verwenden, wenn das einfacher ist.&lt;br /&gt;
&lt;br /&gt;
Von hier an gehen wir davon aus, dass mautil.exe aus dem bin-Ordner von OpenSim ausgeführt wird, daher lassen wir -p weg.&lt;br /&gt;
&lt;br /&gt;
== Drittanbieter-Repositories ==&lt;br /&gt;
&lt;br /&gt;
Der nächste Schritt besteht darin, Remote-Repositories von Addins zu Ihrer OpenSim-Installation hinzuzufügen. Es gibt kein zentrales Repository für OpenSim-Addins. Remote-Repositories werden von Drittanbietern bereitgestellt und gepflegt, und Sie müssen [[List of 3rd Party Addin Repositories|auf irgendeine Weise]] davon erfahren. Sie können so viele Repositories hinzufügen, wie Sie benötigen.&lt;br /&gt;
&lt;br /&gt;
Um ein Repository hinzuzufügen, führen Sie diese Befehle im '''bin'''-Ordner von OpenSim aus:&lt;br /&gt;
&lt;br /&gt;
'''Windows:'''&lt;br /&gt;
  $ mautil.exe -reg &amp;quot;C:\pfad\zu\meiner\registry&amp;quot; rep-add http://repository-url&lt;br /&gt;
  $ mautil.exe -reg &amp;quot;C:\pfad\zu\meiner\registry&amp;quot; rep-update&lt;br /&gt;
&lt;br /&gt;
'''Linux/Mac:'''&lt;br /&gt;
  $ mono mautil.exe -reg &amp;quot;/pfad/zu/meiner/registry&amp;quot; rep-add http://repository-url&lt;br /&gt;
  $ mono mautil.exe -reg &amp;quot;/pfad/zu/meiner/registry&amp;quot; rep-update&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
  $ mautil.exe -reg &amp;quot;C:\addins-registry&amp;quot; rep-add http://example.com/opensim-addins&lt;br /&gt;
  $ mautil.exe -reg &amp;quot;C:\addins-registry&amp;quot; rep-update&lt;br /&gt;
&lt;br /&gt;
Oder wenn Sie sich entschieden haben, den Standard-'''bin'''-Ordner von OpenSim als Registry-Speicherort zu verwenden:&lt;br /&gt;
  $ mautil.exe -reg . rep-add http://example.com/opensim-addins&lt;br /&gt;
  $ mautil.exe -reg . rep-update&lt;br /&gt;
&lt;br /&gt;
Nochmals: Wenn Sie mautil.exe von woanders ausführen, stellen Sie sicher, dass Sie -p richtig verwenden.&lt;br /&gt;
&lt;br /&gt;
Von hier an können Sie prüfen, welche Addins verfügbar sind, indem Sie Folgendes eingeben:&lt;br /&gt;
  $ mautil.exe -reg &amp;quot;/pfad/zu/meiner/registry&amp;quot; list-av&lt;br /&gt;
&lt;br /&gt;
Dies zeigt alle verfügbaren Addins aus allen hinzugefügten Repositories an.&lt;br /&gt;
&lt;br /&gt;
== Addins installieren ==&lt;br /&gt;
&lt;br /&gt;
Schließlich können Sie ein verfügbares Addin mit folgendem Befehl installieren:&lt;br /&gt;
&lt;br /&gt;
  $ mautil.exe -reg &amp;quot;/pfad/zu/meiner/registry&amp;quot; install addin-name&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel, um die neueste Version eines Addins zu installieren:&lt;br /&gt;
  $ mautil.exe -reg &amp;quot;C:\addins-registry&amp;quot; install IhrAddin.Name&lt;br /&gt;
&lt;br /&gt;
Um eine bestimmte Version zu installieren:&lt;br /&gt;
  $ mautil.exe -reg &amp;quot;C:\addins-registry&amp;quot; install IhrAddin.Name,0.9.3.1.1&lt;br /&gt;
&lt;br /&gt;
Die installierten Addins werden unter '''/pfad/zu/meiner/registry/addins/addin-name''' platziert. Häufig bringen diese Addins eine Konfigurationsdatei (.ini) mit, die Sie möglicherweise ändern müssen. Abhängig davon, wie die Addins codiert sind, kopieren sie möglicherweise ihre eigene Konfigurationsdatei in den oben angegebenen Ordner ConfigDirectory oder auch nicht. Selbst wenn sie es tun, können sie es nur tun, wenn OpenSim die Addins zum ersten Mal ausführt.&lt;br /&gt;
&lt;br /&gt;
'''Best Practice:''' Gehen Sie nach der Installation eines Addins zu dem Verzeichnis, in dem Ihr Addin installiert wurde, und prüfen Sie auf Konfigurationsdateien. Kopieren Sie alle .ini-Dateien von dort in Ihr ConfigDirectory und bearbeiten Sie sie entsprechend Ihren Anforderungen, bevor Sie OpenSim starten.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel könnten Sie Konfigurationsdateien finden unter:&lt;br /&gt;
  C:\addins-registry\addins\IhrAddin.Name.0.9.3.1.1\&lt;br /&gt;
&lt;br /&gt;
Sie würden dann alle .ini-Dateien in Ihr ConfigDirectory (z.B. C:\OpenSim\configs) kopieren und dort bearbeiten.&lt;br /&gt;
&lt;br /&gt;
== Installation überprüfen ==&lt;br /&gt;
&lt;br /&gt;
Nach der Installation können Sie überprüfen, ob das Addin korrekt installiert wurde:&lt;br /&gt;
&lt;br /&gt;
  $ mautil.exe -reg &amp;quot;/pfad/zu/meiner/registry&amp;quot; list&lt;br /&gt;
&lt;br /&gt;
Dies listet alle installierten Addins mit ihren Versionen auf.&lt;br /&gt;
&lt;br /&gt;
Um detaillierte Informationen über ein bestimmtes Addin zu sehen:&lt;br /&gt;
  $ mautil.exe -reg &amp;quot;/pfad/zu/meiner/registry&amp;quot; info addin-name&lt;br /&gt;
&lt;br /&gt;
== Auf Updates prüfen und Updates installieren ==&lt;br /&gt;
&lt;br /&gt;
Um nach verfügbaren Updates zu suchen:&lt;br /&gt;
  $ mautil.exe -reg &amp;quot;/pfad/zu/meiner/registry&amp;quot; list-update&lt;br /&gt;
&lt;br /&gt;
Dies zeigt Ihnen, für welche installierten Addins neuere Versionen verfügbar sind.&lt;br /&gt;
&lt;br /&gt;
Um ein bestimmtes Addin zu aktualisieren:&lt;br /&gt;
  $ mautil.exe -reg &amp;quot;/pfad/zu/meiner/registry&amp;quot; update addin-name&lt;br /&gt;
&lt;br /&gt;
Um alle Addins zu aktualisieren:&lt;br /&gt;
  $ mautil.exe -reg &amp;quot;/pfad/zu/meiner/registry&amp;quot; update&lt;br /&gt;
&lt;br /&gt;
'''Hinweis:''' Vor dem Aktualisieren wird empfohlen, Ihre Konfigurationsdateien zu sichern und das Update zuerst in einer Entwicklungsumgebung zu testen.&lt;br /&gt;
&lt;br /&gt;
== Addins deinstallieren ==&lt;br /&gt;
&lt;br /&gt;
Um ein Addin zu deinstallieren:&lt;br /&gt;
  $ mautil.exe -reg &amp;quot;/pfad/zu/meiner/registry&amp;quot; uninstall addin-name&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
  $ mautil.exe -reg &amp;quot;C:\addins-registry&amp;quot; uninstall IhrAddin.Name&lt;br /&gt;
&lt;br /&gt;
'''Hinweis:''' Die Deinstallation eines Addins entfernt nicht automatisch seine Konfigurationsdateien aus Ihrem ConfigDirectory. Möglicherweise möchten Sie diese manuell entfernen oder archivieren.&lt;br /&gt;
&lt;br /&gt;
== Versionierung und Kompatibilität ==&lt;br /&gt;
&lt;br /&gt;
Ein wichtiger Aspekt bei der Installation und Verwaltung von binären Drittanbieter-Komponenten ist die Frage der Versionierung. .NET ist besonders streng, was die Schnittstellenkompatibilität zwischen Bibliotheken betrifft, und beschwert sich (durch Auslösen von Ausnahmen oder Abstürzen), wenn eine ausführbare Datei versucht, eine inkompatible Bibliothek zu verknüpfen. Im Fall von Drittanbieter-Addins können Inkompatibilitäten auftreten, wenn diese Addins gegen eine OpenSim-Version kompiliert wurden, die sich von der unterscheidet, die Sie haben. Einige dieser Inkompatibilitäten werden zum Zeitpunkt der Addin-Installation abgefangen, andere jedoch nicht -- diese können auftreten, wenn Sie OpenSim ausführen.&lt;br /&gt;
&lt;br /&gt;
=== Versionsnummern verstehen ===&lt;br /&gt;
&lt;br /&gt;
OpenSim-Addins verwenden typischerweise Versionsnummern im Format: '''X.Y.Z.W.A''' wobei:&lt;br /&gt;
* '''X.Y.Z.W''' der OpenSim-Version entspricht (z.B. 0.9.3.1)&lt;br /&gt;
* '''A''' die eigene Versionsnummer des Addins ist&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: '''IhrAddin.Name,0.9.3.1.2''' bedeutet:&lt;br /&gt;
* Kompatibel mit OpenSim 0.9.3.1&lt;br /&gt;
* Dies ist Version 2 des Addins&lt;br /&gt;
&lt;br /&gt;
=== Kompatibilitäts-Szenarien ===&lt;br /&gt;
&lt;br /&gt;
'''Szenario 1: Addin älter als OpenSim'''&lt;br /&gt;
&lt;br /&gt;
Angenommen, das neueste MISearchModules-Addin wurde gegen OpenSim 0.9.3.1 kompiliert und Sie haben OpenSim 0.9.2.0. Wenn Sie versuchen, dieses Addin zu installieren, schlägt die Addin-Installation fehl, da MISearchModules,0.9.3.1.1 eine explizite Abhängigkeit von OpenSim 0.9.3.1 hat. Da Ihre OpenSim-Version älter als das Addin ist, wird die Inkompatibilität erkannt und die Installation schlägt fehl. In diesem Fall müssten Sie:&lt;br /&gt;
* Ihr OpenSim auf 0.9.3.1 oder höher aktualisieren, ODER&lt;br /&gt;
* Das ältere MISearchModules-Addin für OpenSim 0.9.2.0 finden und installieren&lt;br /&gt;
&lt;br /&gt;
'''Szenario 2: OpenSim neuer als Addin (Am problematischsten)'''&lt;br /&gt;
&lt;br /&gt;
Angenommen, Sie haben MISearchModules,0.9.2.0.1 installiert (das gegen OpenSim 0.9.2.0 kompiliert wurde) und aktualisieren Ihre OpenSim-Installation auf OpenSim 0.9.3.1. Das Mono-Addins-Framework wird dieses Addin als kompatibel mit der neuen OpenSim-Version betrachten (weil die neue OpenSim-Version höher ist als die des Addins). In Wirklichkeit können die neuen OpenSim-DLLs jedoch andere .NET-Schnittstellen haben als die, gegen die das MISearchModules-Addin kompiliert wurde. Wenn das Addin Teile des Kern-OpenSim verwendet, die sich zwischen den Versionen geändert haben, kann ein Fehler auftreten, wenn Sie OpenSim ausführen -- es kann sich nur um eine Ausnahme im Log oder einen vollständigen Absturz des Simulators handeln. In diesem Fall müssten Sie:&lt;br /&gt;
* Nach Updates suchen: '''mautil.exe -reg &amp;quot;pfad&amp;quot; list-update'''&lt;br /&gt;
* Das Addin aktualisieren: '''mautil.exe -reg &amp;quot;pfad&amp;quot; update MISearchModules'''&lt;br /&gt;
* Wenn noch kein Update existiert, deinstallieren Sie das Addin, bis die neuere Version verfügbar wird&lt;br /&gt;
&lt;br /&gt;
'''Versionsnummern aller Art sind hauptsächlich Anmerkungen für Menschen. Die Wahrheit liegt immer in der binären Signatur der DLLs.'''&lt;br /&gt;
&lt;br /&gt;
=== Konkrete Beispiele ===&lt;br /&gt;
&lt;br /&gt;
* '''Addin Foo benötigt OpenSim 0.9.3.1 und wird in OpenSim 0.9.3.1 installiert''' ==&amp;gt; Addin-Kompatibilität ok. Binäre Kompatibilität ''wahrscheinlich'' ok.&lt;br /&gt;
&lt;br /&gt;
* '''Addin Foo benötigt OpenSim 0.9.2.0 und wird in OpenSim 0.9.3.1 installiert''' ==&amp;gt; Addin-Kompatibilität ok. Binäre Kompatibilität ''kann'' fehlschlagen, abhängig von API-Änderungen. Wenn Foo gegen OpenSim 0.9.2.0 kompiliert wurde, kann es fehlschlagen, da sich OpenSim-APIs zwischen Releases ändern können. Aber wenn Foo gegen 0.9.3.1 kompiliert wurde, die Entwickler von Foo aber vergessen haben, die deklarierte Abhängigkeit zu aktualisieren, ist die binäre Kompatibilität ok.&lt;br /&gt;
&lt;br /&gt;
* '''Addin Foo benötigt OpenSim 0.9.4.0 und wird in OpenSim 0.9.3.1 installiert''' ==&amp;gt; Addin-Kompatibilität wird fehlschlagen. Foo wird nicht einmal laufen, um die binäre Kompatibilität zu prüfen. Die Installation wird blockiert.&lt;br /&gt;
&lt;br /&gt;
== Fehlerbehebung ==&lt;br /&gt;
&lt;br /&gt;
=== Häufige Probleme ===&lt;br /&gt;
&lt;br /&gt;
'''Addin lädt nicht'''&lt;br /&gt;
* Überprüfen Sie das OpenSim-Log auf Fehlermeldungen&lt;br /&gt;
* Überprüfen Sie, ob die Addin-Version mit Ihrer OpenSim-Version übereinstimmt&lt;br /&gt;
* Stellen Sie sicher, dass alle Abhängigkeiten installiert sind&lt;br /&gt;
* Prüfen Sie, ob Konfigurationsdateien vorhanden und korrekt bearbeitet sind&lt;br /&gt;
&lt;br /&gt;
'''Versions-Mismatch-Fehler'''&lt;br /&gt;
* Aktualisieren Sie das Addin auf eine mit Ihrem OpenSim kompatible Version&lt;br /&gt;
* Oder downgraden/upgraden Sie Ihr OpenSim, um mit dem Addin übereinzustimmen&lt;br /&gt;
* Fragen Sie beim Addin-Anbieter nach kompatiblen Versionen&lt;br /&gt;
&lt;br /&gt;
'''Konfigurations-Probleme'''&lt;br /&gt;
* Überprüfen Sie, ob .ini-Dateien im richtigen ConfigDirectory sind&lt;br /&gt;
* Prüfen Sie, ob ConfigDirectory in OpenSim.ini richtig gesetzt ist&lt;br /&gt;
* Überprüfen Sie Log-Dateien auf konfigurationsbezogene Fehler&lt;br /&gt;
&lt;br /&gt;
'''Registry-Beschädigung'''&lt;br /&gt;
* Wenn die Registry beschädigt wird, müssen Sie sie möglicherweise löschen und neu erstellen:&lt;br /&gt;
  1. Löschen Sie das Registry-Verzeichnis&lt;br /&gt;
  2. Führen Sie '''mautil.exe -reg &amp;quot;pfad&amp;quot; reg-update''' erneut aus&lt;br /&gt;
  3. Fügen Sie Repositories wieder hinzu&lt;br /&gt;
  4. Installieren Sie Addins neu&lt;br /&gt;
&lt;br /&gt;
=== .NET 8.0 spezifische Probleme ===&lt;br /&gt;
&lt;br /&gt;
* Stellen Sie sicher, dass .NET 8.0 Runtime auf Ihrem System installiert ist&lt;br /&gt;
* Einige ältere Addins, die für .NET Framework kompiliert wurden, funktionieren möglicherweise nicht mit .NET 8.0&lt;br /&gt;
* Fragen Sie bei Addin-Anbietern nach .NET 8.0-Kompatibilität&lt;br /&gt;
&lt;br /&gt;
=== Hilfe erhalten ===&lt;br /&gt;
&lt;br /&gt;
Wenn Sie auf Probleme stoßen:&lt;br /&gt;
* Überprüfen Sie die OpenSim-Log-Dateien im bin-Verzeichnis&lt;br /&gt;
* Konsultieren Sie die Dokumentation des Addin-Anbieters&lt;br /&gt;
* Besuchen Sie die OpenSimulator-Foren oder Discord&lt;br /&gt;
* Prüfen Sie die [[List of 3rd Party Addin Repositories]] für Kontaktinformationen&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
&lt;br /&gt;
* '''Separate Registry:''' Verwenden Sie immer ein separates Verzeichnis für die Addin-Registry außerhalb des bin-Ordners&lt;br /&gt;
* '''Separate Konfiguration:''' Speichern Sie Addin-Konfigurationen in einem dedizierten ConfigDirectory&lt;br /&gt;
* '''Zuerst testen:''' Testen Sie Addins in einer Entwicklungsumgebung, bevor Sie sie in der Produktion einsetzen&lt;br /&gt;
* '''Backup:''' Sichern Sie Ihre Konfigurationen vor dem Aktualisieren von Addins oder OpenSim&lt;br /&gt;
* '''Kompatibilität prüfen:''' Überprüfen Sie immer die Versionskompatibilität vor der Installation oder Aktualisierung&lt;br /&gt;
* '''Dokumentation lesen:''' Lesen Sie die Dokumentation des Addin-Anbieters für spezifische Installationsanweisungen&lt;br /&gt;
* '''Aktuell bleiben:''' Prüfen Sie regelmäßig auf Addin-Updates, um die Kompatibilität mit Ihrer OpenSim-Version sicherzustellen&lt;br /&gt;
* '''Logs überwachen:''' Beobachten Sie OpenSim-Logs nach der Installation neuer Addins auf Fehler oder Warnungen&lt;br /&gt;
&lt;br /&gt;
== Erweiterte Nutzung ==&lt;br /&gt;
&lt;br /&gt;
=== Verwendung mehrerer Registries ===&lt;br /&gt;
&lt;br /&gt;
In einigen Fällen möchten Sie möglicherweise separate Registries für verschiedene Zwecke pflegen (Testing, Produktion, etc.). Sie können dies tun, indem Sie verschiedene Registry-Pfade angeben:&lt;br /&gt;
&lt;br /&gt;
  $ mautil.exe -reg &amp;quot;C:\addins-registry-test&amp;quot; rep-add http://example.com/repo&lt;br /&gt;
  $ mautil.exe -reg &amp;quot;C:\addins-registry-prod&amp;quot; rep-add http://example.com/repo&lt;br /&gt;
&lt;br /&gt;
Konfigurieren Sie dann OpenSim.ini entsprechend für jede Umgebung.&lt;br /&gt;
&lt;br /&gt;
=== Scripting für Addin-Verwaltung ===&lt;br /&gt;
&lt;br /&gt;
Sie können Skripte erstellen, um die Addin-Verwaltung zu automatisieren:&lt;br /&gt;
&lt;br /&gt;
'''Windows (PowerShell):'''&lt;br /&gt;
  $registry = &amp;quot;C:\addins-registry&amp;quot;&lt;br /&gt;
  &amp;amp; .\mautil.exe -reg $registry list-update&lt;br /&gt;
  &amp;amp; .\mautil.exe -reg $registry update&lt;br /&gt;
&lt;br /&gt;
'''Linux (Bash):'''&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  REGISTRY=&amp;quot;/pfad/zu/registry&amp;quot;&lt;br /&gt;
  mono mautil.exe -reg &amp;quot;$REGISTRY&amp;quot; list-update&lt;br /&gt;
  mono mautil.exe -reg &amp;quot;$REGISTRY&amp;quot; update&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[Developing OpenSim Addins]] - Informationen für Addin-Entwickler&lt;br /&gt;
* [[List of 3rd Party Addin Repositories]] - Community-Repositories&lt;br /&gt;
* [[New Region Modules]] - Entwicklung von Kern-Region-Modulen&lt;br /&gt;
&lt;br /&gt;
== Externe Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/opensim/opensim OpenSimulator GitHub Repository]&lt;br /&gt;
* [https://dotnet.microsoft.com/en-us/download/dotnet/8.0 .NET 8.0 Download]&lt;br /&gt;
* [http://opensimulator.org/ OpenSimulator Webseite]&lt;br /&gt;
* [http://opensimulator.org/wiki/ OpenSimulator Wiki]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Developing_OpenSim_Addins/de</id>
		<title>Developing OpenSim Addins/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Developing_OpenSim_Addins/de"/>
				<updated>2025-12-16T09:18:49Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: Created page with &amp;quot;{{Quicklinks|Developing_OpenSim_Addins}} = Developing OpenSim Addins = Diese Seite erklärt, wie man OpenSimulator Region Module Addins entwickelt, paketiert und verteilt. Sie...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|Developing_OpenSim_Addins}}&lt;br /&gt;
= Developing OpenSim Addins =&lt;br /&gt;
Diese Seite erklärt, wie man OpenSimulator Region Module Addins entwickelt, paketiert und verteilt. Sie richtet sich an Entwickler, die zusätzliche Funktionalität bereitstellen möchten, die über die Kernverteilung von OpenSim hinausgeht, und die diese in binärer Form an andere weitergeben möchten. Diese Anleitung bezieht sich auf [[New Region Modules|Region Module]], die auf den Simulatoren laufen. Es wird vorausgesetzt, dass Sie bereits mit den Grundlagen der Entwicklung von Region Modulen vertraut sind.&lt;br /&gt;
&lt;br /&gt;
'''Hinweis:''' Diese Dokumentation wurde für OpenSimulator Version 0.9.3.x mit .NET 8.0 Runtime aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nach der Installation von Drittanbieter-Addins suchen, lesen Sie bitte [[Installing 3rd party addins|diese andere Seite]].&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
&lt;br /&gt;
Bevor Sie OpenSim Addins entwickeln, stellen Sie sicher, dass Sie Folgendes haben:&lt;br /&gt;
* .NET 8.0 SDK installiert (https://dotnet.microsoft.com/en-us/download/dotnet/8.0)&lt;br /&gt;
* OpenSimulator 0.9.3.x Quellcode oder Entwicklungsumgebung&lt;br /&gt;
* Grundlegendes Verständnis von C# und OpenSim Region Module Entwicklung&lt;br /&gt;
&lt;br /&gt;
== Das finale Paket ==&lt;br /&gt;
&lt;br /&gt;
OpenSim enthält mehrere eingebaute Addins, die als Beispiele dienen. Zwei gute Referenzen sind:&lt;br /&gt;
* '''OpenSim.Addons.OfflineIM''' - Verarbeitet Offline-Sofortnachrichten&lt;br /&gt;
* '''OpenSim.Addons.Groups''' - Stellt Gruppenfunktionalität bereit&lt;br /&gt;
&lt;br /&gt;
Ein typisches Addin-Paket enthält:&lt;br /&gt;
* Die Region Module DLL&lt;br /&gt;
* Alle externen Abhängigkeiten (zusätzliche DLLs)&lt;br /&gt;
* Konfigurationsdateien (.ini)&lt;br /&gt;
* Zusätzliche Ressourcen (HTML-Dateien, Bilder, etc.)&lt;br /&gt;
&lt;br /&gt;
Dies sind alle Dateien, die OpenSim-Benutzer benötigen, um das Addin in ihren Installationen auszuführen.&lt;br /&gt;
&lt;br /&gt;
== Addin-Direktiven ==&lt;br /&gt;
&lt;br /&gt;
Wie üblich sollte das Region Module mit dem Extension-Attribut als OpenSim Region Module annotiert werden:&lt;br /&gt;
&lt;br /&gt;
     ['''Extension'''(Path = &amp;quot;/OpenSim/RegionModules&amp;quot;, NodeName = &amp;quot;RegionModule&amp;quot;, Id = &amp;quot;IhrModulId&amp;quot;)]&lt;br /&gt;
     public class IhrModul : ISharedRegionModule&lt;br /&gt;
     {&lt;br /&gt;
       ...&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
Für nicht-geteilte Region Module verwenden Sie stattdessen '''INonSharedRegionModule'''.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich sollte das Assembly, das das Region Module enthält, die folgenden Direktiven in Properties/AssemblyInfo.cs enthalten:&lt;br /&gt;
&lt;br /&gt;
 // Diese Zeilen sind für die Addin-Paketierung erforderlich&lt;br /&gt;
 [assembly: '''Addin'''(&amp;quot;IhrAddin.Name&amp;quot;, OpenSim.VersionInfo.VersionNumber + &amp;quot;.1&amp;quot;)]&lt;br /&gt;
 [assembly: '''AddinDependency'''(&amp;quot;OpenSim.Region.Framework&amp;quot;, OpenSim.VersionInfo.VersionNumber)]&lt;br /&gt;
 [assembly: '''AddinDescription'''(&amp;quot;Beschreibung Ihres Addins&amp;quot;)]&lt;br /&gt;
 [assembly: '''AddinAuthor'''(&amp;quot;Ihr Name&amp;quot;)]&lt;br /&gt;
 &lt;br /&gt;
 // Die nächsten Zeilen sind optional - externe Abhängigkeiten einbinden&lt;br /&gt;
 [assembly: '''ImportAddinAssembly'''(&amp;quot;ExterneBibliothek.dll&amp;quot;)]&lt;br /&gt;
 [assembly: '''ImportAddinFile'''(&amp;quot;IhreKonfig.ini&amp;quot;)]&lt;br /&gt;
 [assembly: '''ImportAddinFile'''(&amp;quot;ressource.html&amp;quot;)]&lt;br /&gt;
&lt;br /&gt;
=== Addin-Direktiven verstehen ===&lt;br /&gt;
&lt;br /&gt;
Die erste Direktive [assembly: '''Addin'''(&amp;quot;IhrAddin.Name&amp;quot;, OpenSim.VersionInfo.VersionNumber + &amp;quot;.1&amp;quot;)] legt den öffentlichen Namen Ihres Addins fest: Dies ist, was die Benutzer sehen werden. Achten Sie besonders auf die Versionsnummer. Während Sie jede beliebige Versionsnummer verwenden können, wird dringend empfohlen, die Versionsnummer Ihres Addins mit der OpenSim-Version zu verknüpfen, gegen die Sie Ihren Code kompilieren.&lt;br /&gt;
&lt;br /&gt;
Mit .NET 8.0 ist die Binärkompatibilität weiterhin wichtig, daher sollten Sie Ihre Benutzer darüber informieren, mit welcher OpenSim-Version dieses Addin kompatibel ist. Der direkteste Weg, diese Information weiterzugeben, besteht darin, sie zur Versionsnummer Ihres Addins hinzuzufügen. In diesem Fall verwenden wir die ersten Ziffern, um die OpenSim-Versionsnummer (z.B. 0.9.3.1) anzugeben, und die letzte Ziffer, um die eigene Version dieses Addins anzugeben. Wenn wir dieses Addin zwischen OpenSim-Releases weiterentwickeln würden, würde diese letzte Ziffer auf 2 erhöht, während die ersten Ziffern gleich blieben.&lt;br /&gt;
&lt;br /&gt;
Die zweite Direktive [assembly: '''AddinDependency'''(&amp;quot;OpenSim.Region.Framework&amp;quot;, OpenSim.VersionInfo.VersionNumber)] legt die Abhängigkeit mit der konkreten OpenSim-DLL fest, die dieses Addin erweitert. Alle Region Module Addins erweitern OpenSim.Region.Framework. Auch hier sollte die Versionsnummer die aktuelle OpenSim-Versionsnummer sein, da dies die DLL ist, gegen die Sie Ihren Code kompilieren. Für eine Erklärung, wie die Versionierung funktioniert, siehe [[Installing_3rd_party_addins#Versioning]]&lt;br /&gt;
&lt;br /&gt;
Die dritte und vierte Direktive geben eine Beschreibung und Autorenschaft-Informationen für Ihr Addin.&lt;br /&gt;
&lt;br /&gt;
Die letzten Direktiven (ImportAddinAssembly, ImportAddinFile) binden zusätzliche Dateien in das Paket ein, die notwendig sind, damit die Addins in den Umgebungen Ihrer Benutzer funktionieren. Die Direktive [assembly: '''ImportAddinAssembly'''(&amp;quot;ExterneBibliothek.dll&amp;quot;)] hat zwei Zwecke: (1) sie bindet diese DLL in das Paket ein und (2) sie informiert die Laufzeitumgebung des Benutzers, dass diese DLL ebenfalls geladen werden sollte, wenn unser Addin in den Speicher geladen wird.&lt;br /&gt;
&lt;br /&gt;
== Beispiel: OfflineIM Addon ==&lt;br /&gt;
&lt;br /&gt;
Das OfflineIM-Addon, das mit OpenSim ausgeliefert wird, demonstriert Best Practices:&lt;br /&gt;
&lt;br /&gt;
'''Modul-Deklaration:'''&lt;br /&gt;
 [Extension(Path = &amp;quot;/OpenSim/RegionModules&amp;quot;, NodeName = &amp;quot;RegionModule&amp;quot;, Id = &amp;quot;OfflineIMConnectorModule&amp;quot;)]&lt;br /&gt;
 public class OfflineIMRegionModule : ISharedRegionModule, IOfflineIMService&lt;br /&gt;
 {&lt;br /&gt;
     public void Initialise(IConfigSource config)&lt;br /&gt;
     {&lt;br /&gt;
         IConfig cnf = config.Configs[&amp;quot;Messaging&amp;quot;];&lt;br /&gt;
         if (cnf == null)&lt;br /&gt;
             return;&lt;br /&gt;
         if (cnf != null &amp;amp;&amp;amp; cnf.GetString(&amp;quot;OfflineMessageModule&amp;quot;, string.Empty) != Name)&lt;br /&gt;
             return;&lt;br /&gt;
         &lt;br /&gt;
         m_Enabled = true;&lt;br /&gt;
         // ... Initialisierungscode&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     public void AddRegion(Scene scene)&lt;br /&gt;
     {&lt;br /&gt;
         if (!m_Enabled)&lt;br /&gt;
             return;&lt;br /&gt;
         &lt;br /&gt;
         scene.RegisterModuleInterface&amp;lt;IOfflineIMService&amp;gt;(this);&lt;br /&gt;
         // ... Region-Setup&lt;br /&gt;
     }&lt;br /&gt;
     // ... andere Interface-Methoden&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
'''AssemblyInfo.cs:'''&lt;br /&gt;
 [assembly: Addin(&amp;quot;OpenSim.OfflineIM&amp;quot;, OpenSim.VersionInfo.VersionNumber)]&lt;br /&gt;
 [assembly: AddinDependency(&amp;quot;OpenSim.Region.Framework&amp;quot;, OpenSim.VersionInfo.VersionNumber)]&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Ein sehr wichtiger Teil des Prozesses hat mit der Konfiguration Ihres Addins zu tun. Anstatt Benutzer zu zwingen, ihre OpenSim.ini-Dateien manuell zu bearbeiten und den zu Ihrem Addin gehörenden Konfigurationsabschnitt hinzuzufügen, empfehlen wir die Verwendung modularer Konfigurationen. In modularen Konfigurationen sind Ihre Komponenten dafür verantwortlich, ihre eigenen Konfigurationsdateien zu lesen.&lt;br /&gt;
&lt;br /&gt;
Hier ist das empfohlene Muster zum Laden der Konfiguration:&lt;br /&gt;
&lt;br /&gt;
        public void Initialise(IConfigSource config)&lt;br /&gt;
        {&lt;br /&gt;
            // Wir laden die Konfigurationsdatei nur, wenn die Hauptkonfiguration noch nichts über dieses Modul weiß&lt;br /&gt;
            IConfig cnf = config.Configs[&amp;quot;IhrModulName&amp;quot;];&lt;br /&gt;
            if (cnf == null)&lt;br /&gt;
            {&lt;br /&gt;
                LoadConfiguration(config);&lt;br /&gt;
                cnf = config.Configs[&amp;quot;IhrModulName&amp;quot;];&lt;br /&gt;
                if (cnf == null)&lt;br /&gt;
                {&lt;br /&gt;
                    m_log.WarnFormat(&amp;quot;[IHR MODUL]: Konfigurationsabschnitt nicht gefunden. Kann nicht fortfahren.&amp;quot;);&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            // Konfigurationswerte lesen&lt;br /&gt;
            m_Enabled = cnf.GetBoolean(&amp;quot;Enabled&amp;quot;, false);&lt;br /&gt;
            // ... weitere Konfiguration&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
LoadConfiguration sollte wie folgt deklariert werden:&lt;br /&gt;
&lt;br /&gt;
        private void LoadConfiguration(IConfigSource config)&lt;br /&gt;
        {&lt;br /&gt;
            string configPath = string.Empty;&lt;br /&gt;
            bool created;&lt;br /&gt;
            if (!Util.MergeConfigurationFile(config, &amp;quot;IhrModul.ini&amp;quot;, &lt;br /&gt;
                Path.Combine(AssemblyDirectory, &amp;quot;IhrModul.ini&amp;quot;), &lt;br /&gt;
                out configPath, out created))&lt;br /&gt;
            {&lt;br /&gt;
                m_log.WarnFormat(&amp;quot;[IHR MODUL]: Konfigurationsdatei nicht zusammengeführt&amp;quot;);&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if (created)&lt;br /&gt;
            {&lt;br /&gt;
                m_log.ErrorFormat(&amp;quot;[IHR MODUL]: BITTE BEARBEITEN SIE {0} VOR DEM AUSFÜHREN DIESES ADDINS&amp;quot;, configPath);&lt;br /&gt;
                throw new Exception(&amp;quot;Addin muss vor dem Ausführen konfiguriert werden&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        private static string AssemblyDirectory&lt;br /&gt;
        {&lt;br /&gt;
            get&lt;br /&gt;
            {&lt;br /&gt;
                string location = Assembly.GetExecutingAssembly().Location;&lt;br /&gt;
                return Path.GetDirectoryName(location);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
Diese Methode verwendet '''OpenSim.Framework.Util.MergeConfigurationFile''', die die ConfigDirectory-Variable aus der OpenSim-Konfiguration liest und prüft, ob die Konfigurationsdatei dieses Moduls bereits vorhanden ist. Wenn ja, wird sie einfach mit den OpenSim-Konfigurationen zusammengeführt. Wenn nicht, kopiert sie die Konfigurationsdatei, die sie im Paket mitgebracht hat, in das ConfigDirectory und warnt den Operator, dass er sie nach seinen Bedürfnissen bearbeiten sollte.&lt;br /&gt;
&lt;br /&gt;
== Projektstruktur ==&lt;br /&gt;
&lt;br /&gt;
OpenSim 0.9.3.x verwendet entweder traditionelle prebuild.xml oder moderne .NET SDK-Style .csproj-Dateien.&lt;br /&gt;
&lt;br /&gt;
=== Verwendung von Prebuild (Traditionell) ===&lt;br /&gt;
&lt;br /&gt;
Wenn Sie prebuild.xml verwenden, stellen Sie sicher, dass alle notwendigen Dateien in das Ausgabeverzeichnis kopiert werden:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;Project name=&amp;quot;OpenSim.Addon.IhrModul&amp;quot; path=&amp;quot;addon-modules/IhrModul&amp;quot; type=&amp;quot;Library&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Configuration name=&amp;quot;Debug&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Options&amp;gt;&lt;br /&gt;
        &amp;lt;OutputPath&amp;gt;../../bin/&amp;lt;/OutputPath&amp;gt;&lt;br /&gt;
        &amp;lt;AllowUnsafe&amp;gt;true&amp;lt;/AllowUnsafe&amp;gt;&lt;br /&gt;
      &amp;lt;/Options&amp;gt;&lt;br /&gt;
    &amp;lt;/Configuration&amp;gt;&lt;br /&gt;
    &amp;lt;Configuration name=&amp;quot;Release&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Options&amp;gt;&lt;br /&gt;
        &amp;lt;OutputPath&amp;gt;../../bin/&amp;lt;/OutputPath&amp;gt;&lt;br /&gt;
        &amp;lt;AllowUnsafe&amp;gt;true&amp;lt;/AllowUnsafe&amp;gt;&lt;br /&gt;
      &amp;lt;/Options&amp;gt;&lt;br /&gt;
    &amp;lt;/Configuration&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;ReferencePath&amp;gt;../../bin/&amp;lt;/ReferencePath&amp;gt;&lt;br /&gt;
    &amp;lt;Reference name=&amp;quot;Nini&amp;quot; path=&amp;quot;../../bin/&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;Reference name=&amp;quot;log4net&amp;quot; path=&amp;quot;../../bin/&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;Reference name=&amp;quot;Mono.Addins&amp;quot; path=&amp;quot;../../bin/&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Weitere OpenSim-Referenzen hinzufügen --&amp;gt;&lt;br /&gt;
    &amp;lt;Reference name=&amp;quot;OpenSim.Region.Framework&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;Reference name=&amp;quot;OpenSim.Framework&amp;quot;/&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;Files&amp;gt;&lt;br /&gt;
      &amp;lt;Match pattern=&amp;quot;*.cs&amp;quot; recurse=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;Exclude name=&amp;quot;obj&amp;quot; pattern=&amp;quot;obj&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Exclude name=&amp;quot;Tests&amp;quot; pattern=&amp;quot;Tests&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/Match&amp;gt;&lt;br /&gt;
      &amp;lt;Match pattern=&amp;quot;*.ini&amp;quot; buildAction=&amp;quot;Copy&amp;quot; destination=&amp;quot;../../bin/&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;Match pattern=&amp;quot;*.html&amp;quot; buildAction=&amp;quot;Copy&amp;quot; destination=&amp;quot;../../bin/&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/Files&amp;gt;&lt;br /&gt;
  &amp;lt;/Project&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Erstellen/Ändern von prebuild.xml ausführen:&lt;br /&gt;
  $ runprebuild.bat       (Windows)&lt;br /&gt;
  $ ./runprebuild.sh      (Linux/Mac)&lt;br /&gt;
&lt;br /&gt;
=== Verwendung von .NET SDK-Style Projekten (Modern) ===&lt;br /&gt;
&lt;br /&gt;
Moderne .NET 8.0-Projekte können SDK-Style .csproj-Dateien direkt verwenden:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;Project Sdk=&amp;quot;Microsoft.NET.Sdk&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;PropertyGroup&amp;gt;&lt;br /&gt;
      &amp;lt;TargetFramework&amp;gt;net8.0&amp;lt;/TargetFramework&amp;gt;&lt;br /&gt;
      &amp;lt;OutputPath&amp;gt;../../bin/&amp;lt;/OutputPath&amp;gt;&lt;br /&gt;
      &amp;lt;GenerateAssemblyInfo&amp;gt;false&amp;lt;/GenerateAssemblyInfo&amp;gt;&lt;br /&gt;
      &amp;lt;AllowUnsafeBlocks&amp;gt;true&amp;lt;/AllowUnsafeBlocks&amp;gt;&lt;br /&gt;
    &amp;lt;/PropertyGroup&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;ItemGroup&amp;gt;&lt;br /&gt;
      &amp;lt;Reference Include=&amp;quot;Mono.Addins&amp;quot; HintPath=&amp;quot;../../bin/Mono.Addins.dll&amp;quot; Private=&amp;quot;False&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;ProjectReference Include=&amp;quot;../../OpenSim/Region/Framework/OpenSim.Region.Framework.csproj&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;ProjectReference Include=&amp;quot;../../OpenSim/Framework/OpenSim.Framework.csproj&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/ItemGroup&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;ItemGroup&amp;gt;&lt;br /&gt;
      &amp;lt;None Update=&amp;quot;*.ini&amp;quot; CopyToOutputDirectory=&amp;quot;PreserveNewest&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/ItemGroup&amp;gt;&lt;br /&gt;
  &amp;lt;/Project&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ihr Addon bauen ==&lt;br /&gt;
&lt;br /&gt;
=== Mit Prebuild ===&lt;br /&gt;
  1. Führen Sie Prebuild aus, um Projektdateien zu generieren&lt;br /&gt;
  2. Bauen Sie mit dotnet oder Visual Studio:&lt;br /&gt;
     $ dotnet build IhrAddon.csproj -c Release&lt;br /&gt;
&lt;br /&gt;
=== Mit direkter .csproj ===&lt;br /&gt;
  $ dotnet build IhrAddon.csproj -c Release&lt;br /&gt;
&lt;br /&gt;
Alle Ausgabedateien sollten im bin/-Verzeichnis neben anderen OpenSim-Assemblies landen.&lt;br /&gt;
&lt;br /&gt;
== Das Addin paketieren ==&lt;br /&gt;
&lt;br /&gt;
Um die Dateien für die Verteilung zu paketieren, verwenden Sie das '''mautil''' Kommandozeilen-Tool, das im OpenSim bin-Verzeichnis enthalten ist.&lt;br /&gt;
&lt;br /&gt;
  $ /pfad/zu/mautil.exe pack bin/IhrAddon.dll&lt;br /&gt;
&lt;br /&gt;
Dies erstellt eine Datei namens '''IhrAddon_0.9.3.1.1.mpack''' (Version kann variieren). Dies ist das Addin-Paket, das an den Standorten der Benutzer verteilt und installiert wird.&lt;br /&gt;
&lt;br /&gt;
Beachten Sie, dass .mpack-Dateien komprimierte (zip) Archive sind. Sie können sie öffnen und ihren Inhalt mit Tools zur Inspektion von Zip-Dateien überprüfen.&lt;br /&gt;
&lt;br /&gt;
=== mautil-Befehle ===&lt;br /&gt;
&lt;br /&gt;
Das mautil-Tool (Mono.Addins Manager) unterstützt mehrere Befehle:&lt;br /&gt;
&lt;br /&gt;
* '''pack''' - Erstellt ein .mpack-Paket aus einer DLL&lt;br /&gt;
* '''rep-build''' - Baut ein Addin-Repository&lt;br /&gt;
* '''install''' - Installiert ein Addin aus einem Repository&lt;br /&gt;
* '''uninstall''' - Deinstalliert ein Addin&lt;br /&gt;
* '''list''' - Listet installierte Addins auf&lt;br /&gt;
&lt;br /&gt;
Für weitere Informationen:&lt;br /&gt;
  $ /pfad/zu/mautil.exe --help&lt;br /&gt;
&lt;br /&gt;
== Ihre Addins verteilen ==&lt;br /&gt;
&lt;br /&gt;
Um Ihre Addins anderen zur Verfügung zu stellen, müssen Sie Ihr eigenes Addin-Repository erstellen und es auf einem Webserver hosten.&lt;br /&gt;
&lt;br /&gt;
Um das Repository zu erstellen, erstellen Sie irgendwo einen Ordner und platzieren Sie alle Ihre Addin-Pakete (.mpack) darin. Dann:&lt;br /&gt;
&lt;br /&gt;
  $ /pfad/zu/mautil.exe rep-build /pfad/zu/repo/ordner&lt;br /&gt;
&lt;br /&gt;
Dies erstellt zusätzliche Indexdateien (main.mrep, root.mrep) mit den richtigen Einträgen. Alles, was Sie als Nächstes tun müssen, ist den gesamten Inhalt dieses Ordners auf einen Webserver hochzuladen.&lt;br /&gt;
&lt;br /&gt;
Schließlich müssen Sie Ihre Benutzer über die URL Ihres Repositorys informieren, damit sie es zu ihren Registern hinzufügen und Addins aus Ihrem Repository installieren können. Sie können Ihr Repo [[List of 3rd Party Addin Repositories|hier]] hinzufügen.&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
&lt;br /&gt;
* '''Versionskompatibilität:''' Kompilieren Sie immer gegen die spezifische OpenSim-Version, die Ihr Addon anvisiert&lt;br /&gt;
* '''Konfiguration:''' Verwenden Sie modulare Konfigurationsdateien, anstatt manuelle OpenSim.ini-Bearbeitungen zu erfordern&lt;br /&gt;
* '''Abhängigkeiten:''' Dokumentieren Sie alle externen Abhängigkeiten klar&lt;br /&gt;
* '''Testen:''' Testen Sie Ihr Addon sowohl mit Standalone- als auch mit Grid-Konfigurationen&lt;br /&gt;
* '''Dokumentation:''' Stellen Sie klare Installations- und Konfigurationsanweisungen bereit&lt;br /&gt;
* '''Protokollierung:''' Verwenden Sie geeignete Log-Level (Debug, Info, Warn, Error)&lt;br /&gt;
* '''.NET 8.0:''' Stellen Sie Kompatibilität mit .NET 8.0 Runtime sicher&lt;br /&gt;
* '''Fehlerbehandlung:''' Implementieren Sie ordnungsgemäße Fehlerbehandlung und geben Sie aussagekräftige Fehlermeldungen&lt;br /&gt;
&lt;br /&gt;
== Fehlerbehebung ==&lt;br /&gt;
&lt;br /&gt;
=== Häufige Probleme ===&lt;br /&gt;
&lt;br /&gt;
* '''Assembly nicht gefunden:''' Stellen Sie sicher, dass alle referenzierten Assemblies im bin-Verzeichnis sind&lt;br /&gt;
* '''Versions-Missmatch:''' Überprüfen Sie, dass OpenSim.VersionInfo.VersionNumber mit Ihrer OpenSim-Installation übereinstimmt&lt;br /&gt;
* '''Modul lädt nicht:''' Prüfen Sie, dass das Extension-Attribut korrekt ist und das Modul das richtige Interface implementiert&lt;br /&gt;
* '''Konfiguration nicht gefunden:''' Überprüfen Sie, dass die .ini-Datei ins bin-Verzeichnis kopiert wurde und MergeConfigurationFile aufgerufen wird&lt;br /&gt;
* '''.NET Runtime-Probleme:''' Stellen Sie sicher, dass .NET 8.0 Runtime installiert ist&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[New Region Modules]] - Dokumentation zur Region Module Entwicklung&lt;br /&gt;
* [[Installing 3rd party addins]] - Anleitung für Benutzer zur Installation von Addins&lt;br /&gt;
* [[List of 3rd Party Addin Repositories]] - Community-Addon-Repositories&lt;br /&gt;
&lt;br /&gt;
== Externe Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/opensim/opensim OpenSimulator GitHub Repository]&lt;br /&gt;
* [https://dotnet.microsoft.com/en-us/download/dotnet/8.0 .NET 8.0 Download]&lt;br /&gt;
* [http://opensimulator.org/ OpenSimulator Webseite]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/GridInfo/de</id>
		<title>GridInfo/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/GridInfo/de"/>
				<updated>2025-11-07T21:52:27Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: Created page with &amp;quot;{{Quicklinks|GridInfo}} Das '''GridInfo-Protokoll''' wurde von [http://mjm.game-host.org/opensim:viewer:contents mana janus] vorgeschlagen, um die Autokonfiguration von Client...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|GridInfo}}&lt;br /&gt;
Das '''GridInfo-Protokoll''' wurde von [http://mjm.game-host.org/opensim:viewer:contents mana janus] vorgeschlagen, um die Autokonfiguration von Clients zu erleichtern. Mit dem GridInfo-Protokoll muss ein smarter Client nur die URI des User-Servers oder des Standalone-Servers haben und kann dann Parameter wie die Willkommensseite, die Helper-URI (für das Wirtschaftssubsystem), den Namen des Grids und andere Informationen automatisch abrufen.&lt;br /&gt;
&lt;br /&gt;
Das Abrufen der GridInfo ist lediglich ein einfacher HTTP-GET-Aufruf an /get_grid_info, entweder auf die URL des Standalone-Servers oder auf den User-Server des Grids:&lt;br /&gt;
&amp;lt;pre&amp;gt;% GET http://127.0.0.1:9000/get_grid_info | xml_pp&lt;br /&gt;
&amp;amp;lt;gridinfo&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;login&amp;amp;gt;http://127.0.0.1:9000/&amp;amp;lt;/login&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;gridname&amp;amp;gt;the lost continent of hippo&amp;amp;lt;/gridname&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;mode&amp;amp;gt;standalone&amp;amp;lt;/mode&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;register&amp;amp;gt;http://127.0.0.1/register&amp;amp;lt;/register&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;platform&amp;amp;gt;OpenSim&amp;amp;lt;/platform&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;help&amp;amp;gt;http://127.0.0.1/help&amp;amp;lt;/help&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;about&amp;amp;gt;http://127.0.0.1/about/&amp;amp;lt;/about&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;welcome&amp;amp;gt;http://127.0.0.1/welcome&amp;amp;lt;/welcome&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;gridnick&amp;amp;gt;hippogrid&amp;amp;lt;/gridnick&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;password&amp;amp;gt;http://127.0.0.1/password&amp;amp;lt;/password&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;economy&amp;amp;gt;http://127.0.0.1:9000/&amp;amp;lt;/economy&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/gridinfo&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dies wurde von dem folgenden [GridInfo]-Abschnitt &amp;quot;generiert&amp;quot;:&lt;br /&gt;
&amp;lt;pre&amp;gt;[GridInfo]&lt;br /&gt;
; login uri&lt;br /&gt;
login = http://127.0.0.1:9000/&lt;br /&gt;
; login page&lt;br /&gt;
welcome = http://127.0.0.1/welcome&lt;br /&gt;
; helper uri&lt;br /&gt;
economy = http://127.0.0.1:9000/&lt;br /&gt;
; web page of grid&lt;br /&gt;
about = http://127.0.0.1/about/&lt;br /&gt;
; account creation&lt;br /&gt;
register = http://127.0.0.1/register&lt;br /&gt;
; help&lt;br /&gt;
help = http://127.0.0.1/help&lt;br /&gt;
; password help&lt;br /&gt;
password = http://127.0.0.1/password&lt;br /&gt;
; long grid name&lt;br /&gt;
gridname = &amp;quot;the lost continent of hippo&amp;quot;&lt;br /&gt;
; short grid name&lt;br /&gt;
gridnick = &amp;quot;hippogrid&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Werfen Sie einen Blick in OpenSim.ini.example, um alle GridInfo-Optionen zu sehen --- beachten Sie, dass Sie dort zusätzliche Schlüssel hinzufügen können, sie werden automatisch in die Antwort aufgenommen.&lt;br /&gt;
&lt;br /&gt;
HINWEIS: Der Konfigurationsort für GridInfo hat sich geändert.&lt;br /&gt;
&lt;br /&gt;
* In den Versionen 0.6.9 und darunter findet es sich in OpenSim.ini&lt;br /&gt;
* In Version 0.7.0 fehlt GridInfo. Bitte aktualisieren Sie auf 0.7.0.1 oder neuer&lt;br /&gt;
* In Version 0.7.0.1 und neuer befindet es sich für Standalones in StandaloneCommon.ini und für Grids in Robust.ini&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Grid_List</id>
		<title>Grid List</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Grid_List"/>
				<updated>2025-10-23T14:59:41Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Quicklinks|Grid_List}}&lt;br /&gt;
&lt;br /&gt;
== What is the Grid List? ==&lt;br /&gt;
There are hundreds (thousands?) of OpenSimulator-based virtual worlds out there. Many of them are free to use and welcome new users. This grid list is a community-generated list of such worlds. If you would like to experience an OpenSimulator-based virtual world before installing your own, try one of these. &lt;br /&gt;
&lt;br /&gt;
'''IMPORTANT NOTE:''' The OpenSimulator project is not responsible for, nor in any way associated with, any grid listed on this page, nor for any grid's content or activities. Visit at your own risk. Also, there are no guarantees that these worlds are up and running.&lt;br /&gt;
&lt;br /&gt;
== Grid Lists ==&lt;br /&gt;
* Hypergrid Business Active OpenSim Grids: [https://www.hypergridbusiness.com/statistics/active-grids/ https://www.hypergridbusiness.com/statistics/active-grids/]&lt;br /&gt;
* Firestorm Grid List: [https://phoenixviewer.com/app/fsdata/fs_grid_builder.html https://phoenixviewer.com/app/fsdata/fs_grid_builder.html]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In the Firestorm Viewer, the grid list is directly accessible under &amp;quot;+ Click to add more grids&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Public grids  ==&lt;br /&gt;
&lt;br /&gt;
'''Grid List Policy:''' Please list your grid only if uses OpenSimulator as a component. Do not include advertising language. The entries in the main list should just contain the grid name and the plain numbers as defined by the column headers. '''Please use [[Grid List/Template|this template]] for the subpages to keep the information in a comparable manner.''' Grids are listed in the order of appearance, so please add your entry to the bottom of the list. Anyone found inserting a grid up higher in the list will have their entry moved or removed. &lt;br /&gt;
&lt;br /&gt;
You may want provide a link on your world's website back to the project by using the [[OpenSim Graphics|Powered by OpenSimulator logo]].&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' This is only a partial listing of grids. Hypergrid Business maintains a list of active grids, updated monthly: [http://www.hypergridbusiness.com/statistics/active-grids/ Active OpenSimulator grids]&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Grid Page last updated on Sep 13 2020&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#57C604;font-size:10pt;font-weight:bold;border-bottom:1px solid;&amp;quot; align=&amp;quot;center&amp;quot; valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
! Grid Name &lt;br /&gt;
! # Regions &lt;br /&gt;
! Approx # Users &lt;br /&gt;
! Unique last 30days&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/OSGrid|OSGrid]] &lt;br /&gt;
| 4665 &lt;br /&gt;
| 125000&lt;br /&gt;
| 4380&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Francogrid|FrancoGrid]] &lt;br /&gt;
| 298&lt;br /&gt;
| 5593&lt;br /&gt;
| 298&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/3rd Rock Grid|3rd Rock Grid]] &lt;br /&gt;
| 283&lt;br /&gt;
| 11765&lt;br /&gt;
| 347&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Metropolis|Metropolis Metaversum]] &lt;br /&gt;
| 1581&lt;br /&gt;
| 14706&lt;br /&gt;
| 3579&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Open-Neuland|OpenSimulator-Club - Open Neuland]] &lt;br /&gt;
| 216 &lt;br /&gt;
| 384 &lt;br /&gt;
| 60&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Wilder-Westen|OpenSimulator-Club - Wilder Westen]] &lt;br /&gt;
| 41 &lt;br /&gt;
| 122 &lt;br /&gt;
| 36&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Myopengrid.com|MyOpenGrid]] &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Your Alternative Life|Your Alternative Life]] &lt;br /&gt;
| 47 &lt;br /&gt;
| 2089 &lt;br /&gt;
| 1458&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Openvue|Openvue]] &lt;br /&gt;
| 16&lt;br /&gt;
| 24&lt;br /&gt;
| 64&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Logicamp|Logicamp - Outdoor Grid]] &lt;br /&gt;
| 179&lt;br /&gt;
| 3300 &lt;br /&gt;
| 577&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Jamgrid|Jamgrid]] &lt;br /&gt;
| 15 &lt;br /&gt;
| 55 &lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/JOGrid|Japan Open Grid]] &lt;br /&gt;
| 158&lt;br /&gt;
| 682&lt;br /&gt;
| 142&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Tlön|Tlön]] &lt;br /&gt;
| 11 &lt;br /&gt;
| 65 &lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/PMGrid|PMGrid]] &lt;br /&gt;
| 80 &lt;br /&gt;
| 100 &lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/jokaydiagrid|jokaydiaGRID]] &lt;br /&gt;
| 20 &lt;br /&gt;
| 253 &lt;br /&gt;
| 75&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Craft-World|Craft-World]] &lt;br /&gt;
| 207 &lt;br /&gt;
| 9429 &lt;br /&gt;
| 607&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Virtual RP|Virtual RP]] &lt;br /&gt;
| 17 &lt;br /&gt;
| 714 &lt;br /&gt;
| 55&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/GerGrid|GerGrid]] &lt;br /&gt;
| 98 &lt;br /&gt;
| 408&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/AnSky|AnSky]] &lt;br /&gt;
| 14 &lt;br /&gt;
| 106&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Virtual Worlds Grid|Virtual Worlds Grid]] &lt;br /&gt;
| 527 &lt;br /&gt;
| 30 &lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/3DGrid World|3DGrid World (formerly The SecondLearning Grid)]]&lt;br /&gt;
| 4 &lt;br /&gt;
| 55 &lt;br /&gt;
| 46&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Sofitek|Sofitek]] &lt;br /&gt;
| 8 &lt;br /&gt;
| 21 &lt;br /&gt;
| 21&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Dorenas World|Dorenas World]] &lt;br /&gt;
| 143&lt;br /&gt;
| 448&lt;br /&gt;
| 300&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Speculoos|Speculoos]] &lt;br /&gt;
| 30&lt;br /&gt;
| 50 &lt;br /&gt;
| 35&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Pathlandia|Pathlandia]] &lt;br /&gt;
| 4 &lt;br /&gt;
| 1 &lt;br /&gt;
| 30&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Austria|Austria]] &lt;br /&gt;
| 11 &lt;br /&gt;
| 6 &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Psychedelia|Psychedelia]] &lt;br /&gt;
| 7 &lt;br /&gt;
| 7 &lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/M001|M001]]&lt;br /&gt;
| 10&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/HyperGrid Plaza|HyperGrid Plaza]] &lt;br /&gt;
| 1&lt;br /&gt;
| 100&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| [http://adreans-world.from-fl.com/home/ Adreans-World]&lt;br /&gt;
| 147&lt;br /&gt;
| 518 &lt;br /&gt;
| 43&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.jopensim.com jOpenSimWorld]&lt;br /&gt;
| 39&lt;br /&gt;
| 327&lt;br /&gt;
| 39&lt;br /&gt;
|-&lt;br /&gt;
|[[Grid List/RevWorld|Rev World]]&lt;br /&gt;
| 56 &lt;br /&gt;
| 1461&lt;br /&gt;
| 256&lt;br /&gt;
|-&lt;br /&gt;
|[[Grid List/Littlefield_Grid|Littlefield Grid]]&lt;br /&gt;
| 351&lt;br /&gt;
| 2078&lt;br /&gt;
| 383&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Alife Virtual|Alife Virtual]] &lt;br /&gt;
| 1000&lt;br /&gt;
| 10000&lt;br /&gt;
| 2000&lt;br /&gt;
|-&lt;br /&gt;
|[[Grid List/Athabasca University|Athabasca University]]&lt;br /&gt;
| 16 &lt;br /&gt;
| 15 (in development stage)&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/IgnisFatuus|Ignis Fatuus]] &lt;br /&gt;
| 47 &lt;br /&gt;
| 14&lt;br /&gt;
| 72&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/DigiWorldz|DigiWorldz]]&lt;br /&gt;
| 3518&lt;br /&gt;
| 12821&lt;br /&gt;
| 2144&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/gimisaOS|gimisaOS]] &lt;br /&gt;
| 10 &lt;br /&gt;
| 1 &lt;br /&gt;
| 30&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/DSGrid|DSGrid]]&lt;br /&gt;
| 17 &lt;br /&gt;
| 52 &lt;br /&gt;
| 71&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Regno di Camlaan|Regno di Camlaan]] &lt;br /&gt;
| 8&lt;br /&gt;
| 19&lt;br /&gt;
| 60&lt;br /&gt;
|-&lt;br /&gt;
| [http://partydestinationgrid.com Party Destination Grid] &lt;br /&gt;
| 120 &lt;br /&gt;
| 1500 &lt;br /&gt;
| 1050&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/pathway_universe|pathway universe]]&lt;br /&gt;
| 26&lt;br /&gt;
| 62&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/Neverworld_Grid|Neverworld Grid ]]&lt;br /&gt;
| 328&lt;br /&gt;
| 1221&lt;br /&gt;
| 383&lt;br /&gt;
|-&lt;br /&gt;
|[[Grid List/Zone Nations|Zone Nations®]]&lt;br /&gt;
| 31&lt;br /&gt;
| 6107&lt;br /&gt;
| 3678&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.vibel.eu Vibel]&lt;br /&gt;
| 15&lt;br /&gt;
| 839&lt;br /&gt;
| 839&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/openmanniland|openmanniland - OpenSim 0.9.3, PBR Terrain, DTL/NSL RPG MoneyServer, DotNet 8]]&lt;br /&gt;
| 37&lt;br /&gt;
| 5&lt;br /&gt;
| 83&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/ReactionGrid|ReactionGrid]]&lt;br /&gt;
| 76&lt;br /&gt;
| 9756&lt;br /&gt;
| 406&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/GorGrid|GorGrid]]&lt;br /&gt;
| 887&lt;br /&gt;
| 84&lt;br /&gt;
| 119&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Outworldz|www.Outworldz.com and DreamGrid Home]]&lt;br /&gt;
| 170&lt;br /&gt;
| 826&lt;br /&gt;
| 161&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/ZetaWorlds|ZetaWorlds]]&lt;br /&gt;
| 10000&lt;br /&gt;
| 2000&lt;br /&gt;
| 1300&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Bubble-Grid|Bubble-Grid]]&lt;br /&gt;
| 22&lt;br /&gt;
| 50&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Active Public grids  ==&lt;br /&gt;
&lt;br /&gt;
{{ambox&lt;br /&gt;
| type = inactive &lt;br /&gt;
| text = This is a list of Grids that been inactive for a few days and or have claimed to be inactive by the owner. &amp;lt;!-- MAJ le 30/12/2011 --&amp;gt;[[Category:Grid List]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#57C604;font-size:10pt;font-weight:bold;border-bottom:1px solid;&amp;quot; valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
! Grid Name &lt;br /&gt;
! # Regions &lt;br /&gt;
! Approx # Users &lt;br /&gt;
! Unique last 30days&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Cybergrid|Cybergrid]] &lt;br /&gt;
| 1 &lt;br /&gt;
| 44 &lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/MOSES|MOSES: Military Open Simulator Enterprise Strategy]] &lt;br /&gt;
| 117 &lt;br /&gt;
| 227 &lt;br /&gt;
| 102&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/SirinHGpole-Grid|SirinHGpole-Grid]] (regions merged into OSGrid)&lt;br /&gt;
| 238&lt;br /&gt;
| 120&lt;br /&gt;
| 70&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/The New World Grid|The New World Grid]] &lt;br /&gt;
| 330 &lt;br /&gt;
| 5200 &lt;br /&gt;
| 590&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Uvatar|Uvatar]] &lt;br /&gt;
| &amp;amp;nbsp;??? &lt;br /&gt;
| &amp;amp;nbsp;??? &lt;br /&gt;
| 0 &amp;lt;!-- Logins are disabled. Last update to the website was in 2012, many unfixed errors to the site. --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Cyberlandia|Cyberlandia]] &lt;br /&gt;
| 185 &lt;br /&gt;
| 1600 &lt;br /&gt;
| 269&lt;br /&gt;
|-&lt;br /&gt;
|[[Grid List/CloneLife|Clone Life]]&lt;br /&gt;
| 31&lt;br /&gt;
| 6107&lt;br /&gt;
| 3678&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.goreanlifestyle.com/ Gorean Life Style]&lt;br /&gt;
|30&lt;br /&gt;
|50&lt;br /&gt;
|45&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/COSIE Grid|COSIE Grid]] &lt;br /&gt;
| 6 &lt;br /&gt;
| 3&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/H omeland3D|Homeland3D]] &lt;br /&gt;
| 40 &lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.meetinstantly.com/ MeetInstantly]&lt;br /&gt;
| 32&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
|[[Grid List/Traduverse|Traduverse]]&lt;br /&gt;
| 49&lt;br /&gt;
| 27&lt;br /&gt;
| 27&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Regno di Camlaan|Regno di Camlaan]] &lt;br /&gt;
| 8&lt;br /&gt;
| 19&lt;br /&gt;
| 60&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/AndromedaGrid|Andromeda Grid]] &lt;br /&gt;
| 10&lt;br /&gt;
| 4 &lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/EduGrid|EduGrid]] &lt;br /&gt;
| 15&lt;br /&gt;
| 2000&lt;br /&gt;
| 50&lt;br /&gt;
|-&lt;br /&gt;
|[https://web.archive.org/web/20110602161855/http://virtualhighway.us:80/ Virtual Highway]&lt;br /&gt;
| 706&lt;br /&gt;
| 6318&lt;br /&gt;
| 285&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Ice Grid|Ice Grid]] &lt;br /&gt;
| 40 &lt;br /&gt;
| 32 &lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/ART|ART]] &lt;br /&gt;
| 3(real) &lt;br /&gt;
| ? (real)&lt;br /&gt;
| 150(real)&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Stone Grid|Stone Grid]] &lt;br /&gt;
| 3&lt;br /&gt;
| 4 &lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/LifeStyle3D - ItalianGrid|LifeStyle3D - ItalianGrid]] &lt;br /&gt;
| 32&lt;br /&gt;
| 350 &lt;br /&gt;
| 108&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/My3dLife|My3DLife]] &lt;br /&gt;
| 10 &lt;br /&gt;
| 20 &lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/DaseinWorld|DaseinWorld]] &lt;br /&gt;
| 16 &lt;br /&gt;
| 3 &lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/OpenSim Creations Grid|OpenSim Creations Grid]] &lt;br /&gt;
| 15 &lt;br /&gt;
| 11&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/StarGates Matrix|StarGates Matrix]] &lt;br /&gt;
| 5 &lt;br /&gt;
| 7&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/You3D|You3D]] &lt;br /&gt;
| 11 &lt;br /&gt;
| 6 &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Virtual Realms Grid|Virtual Realms Grid]] &lt;br /&gt;
| 8 &lt;br /&gt;
| 10 &lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Gor Grid|Gor Grid]] &lt;br /&gt;
| 8 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Enakai|Enakai]] &lt;br /&gt;
| 16 &lt;br /&gt;
| 14 &lt;br /&gt;
| 34&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Greeklife|GreekLife]] &lt;br /&gt;
| 30&lt;br /&gt;
| 50&lt;br /&gt;
| 35&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/EverWorlds.com|EverWorlds: Bringing People Together (formerly Destiny Zero)]] &lt;br /&gt;
| 17 &lt;br /&gt;
| 2 &lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/IcaruSRealmS|=IcaruS= RealmS]] &lt;br /&gt;
| 26 &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/lpgrid.com|Lost Paradise]] &lt;br /&gt;
| 2847&lt;br /&gt;
| 820&lt;br /&gt;
| 670&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Valhalla Virtual|Valhalla Virtual]] &lt;br /&gt;
| 9 &lt;br /&gt;
| 25 &lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Cyber Wrld|Cyber Wrld]] &lt;br /&gt;
| 5 &lt;br /&gt;
| 8 &lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/FleepGrid|FleepGrid]] &lt;br /&gt;
| 11 &lt;br /&gt;
| 150 &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Lisat|ArtGridOnLine]] &lt;br /&gt;
| 12 &lt;br /&gt;
| 48 &lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/EU-Grid|EU-Grid]] &lt;br /&gt;
| 10 &lt;br /&gt;
| 350 &lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/GiantGrid|GiantGrid]] &lt;br /&gt;
| 169 &lt;br /&gt;
| 261 &lt;br /&gt;
| 157&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/pseudospace|Pseudospace]] &lt;br /&gt;
| 12 &lt;br /&gt;
| 46 &lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Metapocalypse|Metapocalypse Grid]] &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/UFSGrid|UFSGrid]] &lt;br /&gt;
| 36 &lt;br /&gt;
| 897 &lt;br /&gt;
| +/-50&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Unica|Unica]] &lt;br /&gt;
| 16 &lt;br /&gt;
| 60 &lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/LISAT|Lost-in-Space-and-Time]] &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Rezzable Visions|Rezzable Visions]] &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/SimValley NL|SimValley NL]] &lt;br /&gt;
| 1087 &lt;br /&gt;
| 364 &lt;br /&gt;
| 32&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Your2Live|Your2Live]] &lt;br /&gt;
| 3 &lt;br /&gt;
| 8 &lt;br /&gt;
| *&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/OPENSIM NL|OpenSim NL]] &lt;br /&gt;
| 9 &lt;br /&gt;
| 426 &lt;br /&gt;
| 34&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/VirtualFrance3D|VirtualFrance3D]] &lt;br /&gt;
| 16 &lt;br /&gt;
| 143 &lt;br /&gt;
| 31&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Twisted Sky|Twisted Sky]] &lt;br /&gt;
| 60 &lt;br /&gt;
| 290 &lt;br /&gt;
| 68&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/REDISIS|redOasis (formerly RedIsis)]] &lt;br /&gt;
| 130 &lt;br /&gt;
| 60 &lt;br /&gt;
| 20&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/PearGrid|PearGrid]] &lt;br /&gt;
| 18 &lt;br /&gt;
| 34 &lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/HAVEN: Your World|HAVEN: Your World]] &lt;br /&gt;
| 13 &lt;br /&gt;
| 11 &lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Flatlandia.cc|Flatlandia]] &lt;br /&gt;
| 33 &lt;br /&gt;
| 177 &lt;br /&gt;
| 110&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/TertiaryGrid|Tertiary Grid]] &lt;br /&gt;
| 41 &lt;br /&gt;
| 379&lt;br /&gt;
| 42&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Annuna Grid|Annuna Grid]] &lt;br /&gt;
| 60 &lt;br /&gt;
| 60 &lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/VeeSome|VeeSome]] &lt;br /&gt;
| 48 &lt;br /&gt;
| 106 &lt;br /&gt;
| 53&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/VirtuaLife|Virtualife]]&lt;br /&gt;
| 132 &lt;br /&gt;
| 1000 &lt;br /&gt;
| 500&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Avatar Hangout|Avatar Hangout (with OMC)]] &lt;br /&gt;
| 73 &lt;br /&gt;
| 8,626 &lt;br /&gt;
| 58&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/DGP Grid|DGP Grid]] &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| [[Grid List/tescos.org.uk|tescos.org.uk (curency ƒ)]] &lt;br /&gt;
| 30 &lt;br /&gt;
| 20 &lt;br /&gt;
| 20&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Role Play Worlds|Role Play Worlds - Your Fantasy, your world]] &lt;br /&gt;
| 129 &lt;br /&gt;
| 2276 &lt;br /&gt;
| 298&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Avatrian|Avatrian]] &lt;br /&gt;
| 11 &lt;br /&gt;
| 25 &lt;br /&gt;
| 150&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/OSBEST|OSBEST]] &lt;br /&gt;
| 12 &lt;br /&gt;
| 8 &lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/MCM Realm|MCM Realm]] &lt;br /&gt;
| 22 &lt;br /&gt;
| 73 &lt;br /&gt;
| 23&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Oasis Grid|Oasis Grid]] &lt;br /&gt;
| 89 &lt;br /&gt;
| 3068 &lt;br /&gt;
| 228&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/AtMeeting|AtMeeting Grid]] &lt;br /&gt;
| 20 &lt;br /&gt;
| 30 &lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/OpenUtopia|OpenUtopia Grid]] &lt;br /&gt;
| 1 &lt;br /&gt;
| 3 &lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Virtualgames3d|Virtualgames3d]] &lt;br /&gt;
| 140 &lt;br /&gt;
| 1350 &lt;br /&gt;
| 500&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Grid4Us|Grid4Us]] &lt;br /&gt;
| 22 &lt;br /&gt;
| 130 &lt;br /&gt;
| 50&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/K-grid|K-grid]] &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Le Monde de Darwin|Le Monde de Darwin]] &lt;br /&gt;
| 73 &lt;br /&gt;
| 83 &lt;br /&gt;
| 36&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/NeXtLife|NeXtLife Grid]] &lt;br /&gt;
| 15 &lt;br /&gt;
| 7 &lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Sensation Games|Sensation Games]] &lt;br /&gt;
| 1 &lt;br /&gt;
| 2 &lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/SLI-Grid|SLI-Grid]] &lt;br /&gt;
| 5 &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| TGGrid &lt;br /&gt;
| 11 &lt;br /&gt;
| 9 &lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/4AllGrid|4AllGrid]] &lt;br /&gt;
| 68&lt;br /&gt;
| 6&lt;br /&gt;
| 23&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/AlphaTowne|Alpha Towne]] &lt;br /&gt;
| 308 &lt;br /&gt;
| 1172 &lt;br /&gt;
| 909&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/AstralGrid|AstralGrid]]&lt;br /&gt;
| 70&lt;br /&gt;
| 40&lt;br /&gt;
| 30&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/Avination|Avination]]&lt;br /&gt;
| 110&lt;br /&gt;
| 300&lt;br /&gt;
| 20&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/EduverseGrid|EduverseGrid]]&lt;br /&gt;
| 147 &lt;br /&gt;
| 400&lt;br /&gt;
| Data Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/German Grid|German Grid]] &lt;br /&gt;
| 107 &lt;br /&gt;
| 2353 &lt;br /&gt;
| 385&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Heritage Key|Heritage Key]]&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/ccdbbs.com|LPgrid]]&lt;br /&gt;
| 345&lt;br /&gt;
| 331&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| [[NewtonGrid]]&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/RPGRID_NL|RPGRID NL]]&lt;br /&gt;
| 30&lt;br /&gt;
| 141&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/ScienceSim|ScienceSim]] &lt;br /&gt;
| 25 &lt;br /&gt;
| 30 &lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/SkyLifeGrid|SkyLifeGrid]]&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/slitalia|Slitalia]]&lt;br /&gt;
| 7&lt;br /&gt;
| 10&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/SunlightGrid|SunlightGrid]]&lt;br /&gt;
| 167&lt;br /&gt;
| 503&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/Taekwondoverse|Taekwondoverse]]&lt;br /&gt;
| 162 &lt;br /&gt;
| 400&lt;br /&gt;
| Data Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/Virtual_Life|Virtual Life]]&lt;br /&gt;
| 34&lt;br /&gt;
| 1004&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/VirtuLife|VirtuLife]]&lt;br /&gt;
| 21&lt;br /&gt;
| 10&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/virtyou|virtyou]] &lt;br /&gt;
| 110 &lt;br /&gt;
| 1676 &lt;br /&gt;
| 70&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/World4US|World4US]]&lt;br /&gt;
| 25&lt;br /&gt;
| 37&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/digsynth.com|World of the Free]] &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/YrGrid|YrGrid]]&lt;br /&gt;
| 33&lt;br /&gt;
| 2150&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Zairus Grid|Zairus Grid]] &lt;br /&gt;
| 72 &lt;br /&gt;
| 10&lt;br /&gt;
| 3&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
&lt;br /&gt;
* [[Grid Associations]]&lt;br /&gt;
* [[Public Hypergrid Nodes|HyperGrid Nodes]]&lt;br /&gt;
* [[Uncategorized Grid List|Uncategorized Grid List]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Grids]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Grid_List</id>
		<title>Grid List</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Grid_List"/>
				<updated>2025-10-23T14:53:56Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Quicklinks|Grid_List}}&lt;br /&gt;
&lt;br /&gt;
== What is the Grid List? ==&lt;br /&gt;
There are hundreds (thousands?) of OpenSimulator-based virtual worlds out there. Many of them are free to use and welcome new users. This grid list is a community-generated list of such worlds. If you would like to experience an OpenSimulator-based virtual world before installing your own, try one of these. &lt;br /&gt;
&lt;br /&gt;
'''IMPORTANT NOTE:''' The OpenSimulator project is not responsible for, nor in any way associated with, any grid listed on this page, nor for any grid's content or activities. Visit at your own risk. Also, there are no guarantees that these worlds are up and running.&lt;br /&gt;
&lt;br /&gt;
== Grid Lists ==&lt;br /&gt;
* Hypergrid Business Active OpenSim Grids: [https://www.hypergridbusiness.com/statistics/active-grids/ https://www.hypergridbusiness.com/statistics/active-grids/]&lt;br /&gt;
* Firestorm Grid List: [https://phoenixviewer.com/app/fsdata/fs_grid_builder.html https://phoenixviewer.com/app/fsdata/fs_grid_builder.html]&lt;br /&gt;
&lt;br /&gt;
== Public grids  ==&lt;br /&gt;
&lt;br /&gt;
'''Grid List Policy:''' Please list your grid only if uses OpenSimulator as a component. Do not include advertising language. The entries in the main list should just contain the grid name and the plain numbers as defined by the column headers. '''Please use [[Grid List/Template|this template]] for the subpages to keep the information in a comparable manner.''' Grids are listed in the order of appearance, so please add your entry to the bottom of the list. Anyone found inserting a grid up higher in the list will have their entry moved or removed. &lt;br /&gt;
&lt;br /&gt;
You may want provide a link on your world's website back to the project by using the [[OpenSim Graphics|Powered by OpenSimulator logo]].&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' This is only a partial listing of grids. Hypergrid Business maintains a list of active grids, updated monthly: [http://www.hypergridbusiness.com/statistics/active-grids/ Active OpenSimulator grids]&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Grid Page last updated on Sep 13 2020&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#57C604;font-size:10pt;font-weight:bold;border-bottom:1px solid;&amp;quot; align=&amp;quot;center&amp;quot; valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
! Grid Name &lt;br /&gt;
! # Regions &lt;br /&gt;
! Approx # Users &lt;br /&gt;
! Unique last 30days&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/OSGrid|OSGrid]] &lt;br /&gt;
| 4665 &lt;br /&gt;
| 125000&lt;br /&gt;
| 4380&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Francogrid|FrancoGrid]] &lt;br /&gt;
| 298&lt;br /&gt;
| 5593&lt;br /&gt;
| 298&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/3rd Rock Grid|3rd Rock Grid]] &lt;br /&gt;
| 283&lt;br /&gt;
| 11765&lt;br /&gt;
| 347&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Metropolis|Metropolis Metaversum]] &lt;br /&gt;
| 1581&lt;br /&gt;
| 14706&lt;br /&gt;
| 3579&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Open-Neuland|OpenSimulator-Club - Open Neuland]] &lt;br /&gt;
| 216 &lt;br /&gt;
| 384 &lt;br /&gt;
| 60&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Wilder-Westen|OpenSimulator-Club - Wilder Westen]] &lt;br /&gt;
| 41 &lt;br /&gt;
| 122 &lt;br /&gt;
| 36&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Myopengrid.com|MyOpenGrid]] &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Your Alternative Life|Your Alternative Life]] &lt;br /&gt;
| 47 &lt;br /&gt;
| 2089 &lt;br /&gt;
| 1458&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Openvue|Openvue]] &lt;br /&gt;
| 16&lt;br /&gt;
| 24&lt;br /&gt;
| 64&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Logicamp|Logicamp - Outdoor Grid]] &lt;br /&gt;
| 179&lt;br /&gt;
| 3300 &lt;br /&gt;
| 577&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Jamgrid|Jamgrid]] &lt;br /&gt;
| 15 &lt;br /&gt;
| 55 &lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/JOGrid|Japan Open Grid]] &lt;br /&gt;
| 158&lt;br /&gt;
| 682&lt;br /&gt;
| 142&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Tlön|Tlön]] &lt;br /&gt;
| 11 &lt;br /&gt;
| 65 &lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/PMGrid|PMGrid]] &lt;br /&gt;
| 80 &lt;br /&gt;
| 100 &lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/jokaydiagrid|jokaydiaGRID]] &lt;br /&gt;
| 20 &lt;br /&gt;
| 253 &lt;br /&gt;
| 75&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Craft-World|Craft-World]] &lt;br /&gt;
| 207 &lt;br /&gt;
| 9429 &lt;br /&gt;
| 607&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Virtual RP|Virtual RP]] &lt;br /&gt;
| 17 &lt;br /&gt;
| 714 &lt;br /&gt;
| 55&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/GerGrid|GerGrid]] &lt;br /&gt;
| 98 &lt;br /&gt;
| 408&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/AnSky|AnSky]] &lt;br /&gt;
| 14 &lt;br /&gt;
| 106&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Virtual Worlds Grid|Virtual Worlds Grid]] &lt;br /&gt;
| 527 &lt;br /&gt;
| 30 &lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/3DGrid World|3DGrid World (formerly The SecondLearning Grid)]]&lt;br /&gt;
| 4 &lt;br /&gt;
| 55 &lt;br /&gt;
| 46&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Sofitek|Sofitek]] &lt;br /&gt;
| 8 &lt;br /&gt;
| 21 &lt;br /&gt;
| 21&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Dorenas World|Dorenas World]] &lt;br /&gt;
| 143&lt;br /&gt;
| 448&lt;br /&gt;
| 300&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Speculoos|Speculoos]] &lt;br /&gt;
| 30&lt;br /&gt;
| 50 &lt;br /&gt;
| 35&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Pathlandia|Pathlandia]] &lt;br /&gt;
| 4 &lt;br /&gt;
| 1 &lt;br /&gt;
| 30&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Austria|Austria]] &lt;br /&gt;
| 11 &lt;br /&gt;
| 6 &lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Psychedelia|Psychedelia]] &lt;br /&gt;
| 7 &lt;br /&gt;
| 7 &lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/M001|M001]]&lt;br /&gt;
| 10&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/HyperGrid Plaza|HyperGrid Plaza]] &lt;br /&gt;
| 1&lt;br /&gt;
| 100&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| [http://adreans-world.from-fl.com/home/ Adreans-World]&lt;br /&gt;
| 147&lt;br /&gt;
| 518 &lt;br /&gt;
| 43&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.jopensim.com jOpenSimWorld]&lt;br /&gt;
| 39&lt;br /&gt;
| 327&lt;br /&gt;
| 39&lt;br /&gt;
|-&lt;br /&gt;
|[[Grid List/RevWorld|Rev World]]&lt;br /&gt;
| 56 &lt;br /&gt;
| 1461&lt;br /&gt;
| 256&lt;br /&gt;
|-&lt;br /&gt;
|[[Grid List/Littlefield_Grid|Littlefield Grid]]&lt;br /&gt;
| 351&lt;br /&gt;
| 2078&lt;br /&gt;
| 383&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Alife Virtual|Alife Virtual]] &lt;br /&gt;
| 1000&lt;br /&gt;
| 10000&lt;br /&gt;
| 2000&lt;br /&gt;
|-&lt;br /&gt;
|[[Grid List/Athabasca University|Athabasca University]]&lt;br /&gt;
| 16 &lt;br /&gt;
| 15 (in development stage)&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/IgnisFatuus|Ignis Fatuus]] &lt;br /&gt;
| 47 &lt;br /&gt;
| 14&lt;br /&gt;
| 72&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/DigiWorldz|DigiWorldz]]&lt;br /&gt;
| 3518&lt;br /&gt;
| 12821&lt;br /&gt;
| 2144&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/gimisaOS|gimisaOS]] &lt;br /&gt;
| 10 &lt;br /&gt;
| 1 &lt;br /&gt;
| 30&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/DSGrid|DSGrid]]&lt;br /&gt;
| 17 &lt;br /&gt;
| 52 &lt;br /&gt;
| 71&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Regno di Camlaan|Regno di Camlaan]] &lt;br /&gt;
| 8&lt;br /&gt;
| 19&lt;br /&gt;
| 60&lt;br /&gt;
|-&lt;br /&gt;
| [http://partydestinationgrid.com Party Destination Grid] &lt;br /&gt;
| 120 &lt;br /&gt;
| 1500 &lt;br /&gt;
| 1050&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/pathway_universe|pathway universe]]&lt;br /&gt;
| 26&lt;br /&gt;
| 62&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/Neverworld_Grid|Neverworld Grid ]]&lt;br /&gt;
| 328&lt;br /&gt;
| 1221&lt;br /&gt;
| 383&lt;br /&gt;
|-&lt;br /&gt;
|[[Grid List/Zone Nations|Zone Nations®]]&lt;br /&gt;
| 31&lt;br /&gt;
| 6107&lt;br /&gt;
| 3678&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.vibel.eu Vibel]&lt;br /&gt;
| 15&lt;br /&gt;
| 839&lt;br /&gt;
| 839&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/openmanniland|openmanniland - OpenSim 0.9.3, PBR Terrain, DTL/NSL RPG MoneyServer, DotNet 8]]&lt;br /&gt;
| 37&lt;br /&gt;
| 5&lt;br /&gt;
| 83&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/ReactionGrid|ReactionGrid]]&lt;br /&gt;
| 76&lt;br /&gt;
| 9756&lt;br /&gt;
| 406&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/GorGrid|GorGrid]]&lt;br /&gt;
| 887&lt;br /&gt;
| 84&lt;br /&gt;
| 119&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Outworldz|www.Outworldz.com and DreamGrid Home]]&lt;br /&gt;
| 170&lt;br /&gt;
| 826&lt;br /&gt;
| 161&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/ZetaWorlds|ZetaWorlds]]&lt;br /&gt;
| 10000&lt;br /&gt;
| 2000&lt;br /&gt;
| 1300&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Bubble-Grid|Bubble-Grid]]&lt;br /&gt;
| 22&lt;br /&gt;
| 50&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Active Public grids  ==&lt;br /&gt;
&lt;br /&gt;
{{ambox&lt;br /&gt;
| type = inactive &lt;br /&gt;
| text = This is a list of Grids that been inactive for a few days and or have claimed to be inactive by the owner. &amp;lt;!-- MAJ le 30/12/2011 --&amp;gt;[[Category:Grid List]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#57C604;font-size:10pt;font-weight:bold;border-bottom:1px solid;&amp;quot; valign=&amp;quot;bottom&amp;quot;&lt;br /&gt;
! Grid Name &lt;br /&gt;
! # Regions &lt;br /&gt;
! Approx # Users &lt;br /&gt;
! Unique last 30days&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Cybergrid|Cybergrid]] &lt;br /&gt;
| 1 &lt;br /&gt;
| 44 &lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/MOSES|MOSES: Military Open Simulator Enterprise Strategy]] &lt;br /&gt;
| 117 &lt;br /&gt;
| 227 &lt;br /&gt;
| 102&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/SirinHGpole-Grid|SirinHGpole-Grid]] (regions merged into OSGrid)&lt;br /&gt;
| 238&lt;br /&gt;
| 120&lt;br /&gt;
| 70&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/The New World Grid|The New World Grid]] &lt;br /&gt;
| 330 &lt;br /&gt;
| 5200 &lt;br /&gt;
| 590&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Uvatar|Uvatar]] &lt;br /&gt;
| &amp;amp;nbsp;??? &lt;br /&gt;
| &amp;amp;nbsp;??? &lt;br /&gt;
| 0 &amp;lt;!-- Logins are disabled. Last update to the website was in 2012, many unfixed errors to the site. --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Cyberlandia|Cyberlandia]] &lt;br /&gt;
| 185 &lt;br /&gt;
| 1600 &lt;br /&gt;
| 269&lt;br /&gt;
|-&lt;br /&gt;
|[[Grid List/CloneLife|Clone Life]]&lt;br /&gt;
| 31&lt;br /&gt;
| 6107&lt;br /&gt;
| 3678&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.goreanlifestyle.com/ Gorean Life Style]&lt;br /&gt;
|30&lt;br /&gt;
|50&lt;br /&gt;
|45&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/COSIE Grid|COSIE Grid]] &lt;br /&gt;
| 6 &lt;br /&gt;
| 3&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/H omeland3D|Homeland3D]] &lt;br /&gt;
| 40 &lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.meetinstantly.com/ MeetInstantly]&lt;br /&gt;
| 32&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
|[[Grid List/Traduverse|Traduverse]]&lt;br /&gt;
| 49&lt;br /&gt;
| 27&lt;br /&gt;
| 27&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Regno di Camlaan|Regno di Camlaan]] &lt;br /&gt;
| 8&lt;br /&gt;
| 19&lt;br /&gt;
| 60&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/AndromedaGrid|Andromeda Grid]] &lt;br /&gt;
| 10&lt;br /&gt;
| 4 &lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/EduGrid|EduGrid]] &lt;br /&gt;
| 15&lt;br /&gt;
| 2000&lt;br /&gt;
| 50&lt;br /&gt;
|-&lt;br /&gt;
|[https://web.archive.org/web/20110602161855/http://virtualhighway.us:80/ Virtual Highway]&lt;br /&gt;
| 706&lt;br /&gt;
| 6318&lt;br /&gt;
| 285&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Ice Grid|Ice Grid]] &lt;br /&gt;
| 40 &lt;br /&gt;
| 32 &lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/ART|ART]] &lt;br /&gt;
| 3(real) &lt;br /&gt;
| ? (real)&lt;br /&gt;
| 150(real)&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Stone Grid|Stone Grid]] &lt;br /&gt;
| 3&lt;br /&gt;
| 4 &lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/LifeStyle3D - ItalianGrid|LifeStyle3D - ItalianGrid]] &lt;br /&gt;
| 32&lt;br /&gt;
| 350 &lt;br /&gt;
| 108&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/My3dLife|My3DLife]] &lt;br /&gt;
| 10 &lt;br /&gt;
| 20 &lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/DaseinWorld|DaseinWorld]] &lt;br /&gt;
| 16 &lt;br /&gt;
| 3 &lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/OpenSim Creations Grid|OpenSim Creations Grid]] &lt;br /&gt;
| 15 &lt;br /&gt;
| 11&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/StarGates Matrix|StarGates Matrix]] &lt;br /&gt;
| 5 &lt;br /&gt;
| 7&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/You3D|You3D]] &lt;br /&gt;
| 11 &lt;br /&gt;
| 6 &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Virtual Realms Grid|Virtual Realms Grid]] &lt;br /&gt;
| 8 &lt;br /&gt;
| 10 &lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Gor Grid|Gor Grid]] &lt;br /&gt;
| 8 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Enakai|Enakai]] &lt;br /&gt;
| 16 &lt;br /&gt;
| 14 &lt;br /&gt;
| 34&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Greeklife|GreekLife]] &lt;br /&gt;
| 30&lt;br /&gt;
| 50&lt;br /&gt;
| 35&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/EverWorlds.com|EverWorlds: Bringing People Together (formerly Destiny Zero)]] &lt;br /&gt;
| 17 &lt;br /&gt;
| 2 &lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/IcaruSRealmS|=IcaruS= RealmS]] &lt;br /&gt;
| 26 &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/lpgrid.com|Lost Paradise]] &lt;br /&gt;
| 2847&lt;br /&gt;
| 820&lt;br /&gt;
| 670&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Valhalla Virtual|Valhalla Virtual]] &lt;br /&gt;
| 9 &lt;br /&gt;
| 25 &lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Cyber Wrld|Cyber Wrld]] &lt;br /&gt;
| 5 &lt;br /&gt;
| 8 &lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/FleepGrid|FleepGrid]] &lt;br /&gt;
| 11 &lt;br /&gt;
| 150 &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Lisat|ArtGridOnLine]] &lt;br /&gt;
| 12 &lt;br /&gt;
| 48 &lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/EU-Grid|EU-Grid]] &lt;br /&gt;
| 10 &lt;br /&gt;
| 350 &lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/GiantGrid|GiantGrid]] &lt;br /&gt;
| 169 &lt;br /&gt;
| 261 &lt;br /&gt;
| 157&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/pseudospace|Pseudospace]] &lt;br /&gt;
| 12 &lt;br /&gt;
| 46 &lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Metapocalypse|Metapocalypse Grid]] &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/UFSGrid|UFSGrid]] &lt;br /&gt;
| 36 &lt;br /&gt;
| 897 &lt;br /&gt;
| +/-50&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Unica|Unica]] &lt;br /&gt;
| 16 &lt;br /&gt;
| 60 &lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/LISAT|Lost-in-Space-and-Time]] &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Rezzable Visions|Rezzable Visions]] &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/SimValley NL|SimValley NL]] &lt;br /&gt;
| 1087 &lt;br /&gt;
| 364 &lt;br /&gt;
| 32&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Your2Live|Your2Live]] &lt;br /&gt;
| 3 &lt;br /&gt;
| 8 &lt;br /&gt;
| *&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/OPENSIM NL|OpenSim NL]] &lt;br /&gt;
| 9 &lt;br /&gt;
| 426 &lt;br /&gt;
| 34&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/VirtualFrance3D|VirtualFrance3D]] &lt;br /&gt;
| 16 &lt;br /&gt;
| 143 &lt;br /&gt;
| 31&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Twisted Sky|Twisted Sky]] &lt;br /&gt;
| 60 &lt;br /&gt;
| 290 &lt;br /&gt;
| 68&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/REDISIS|redOasis (formerly RedIsis)]] &lt;br /&gt;
| 130 &lt;br /&gt;
| 60 &lt;br /&gt;
| 20&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/PearGrid|PearGrid]] &lt;br /&gt;
| 18 &lt;br /&gt;
| 34 &lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/HAVEN: Your World|HAVEN: Your World]] &lt;br /&gt;
| 13 &lt;br /&gt;
| 11 &lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Flatlandia.cc|Flatlandia]] &lt;br /&gt;
| 33 &lt;br /&gt;
| 177 &lt;br /&gt;
| 110&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/TertiaryGrid|Tertiary Grid]] &lt;br /&gt;
| 41 &lt;br /&gt;
| 379&lt;br /&gt;
| 42&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Annuna Grid|Annuna Grid]] &lt;br /&gt;
| 60 &lt;br /&gt;
| 60 &lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/VeeSome|VeeSome]] &lt;br /&gt;
| 48 &lt;br /&gt;
| 106 &lt;br /&gt;
| 53&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/VirtuaLife|Virtualife]]&lt;br /&gt;
| 132 &lt;br /&gt;
| 1000 &lt;br /&gt;
| 500&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Avatar Hangout|Avatar Hangout (with OMC)]] &lt;br /&gt;
| 73 &lt;br /&gt;
| 8,626 &lt;br /&gt;
| 58&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/DGP Grid|DGP Grid]] &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| [[Grid List/tescos.org.uk|tescos.org.uk (curency ƒ)]] &lt;br /&gt;
| 30 &lt;br /&gt;
| 20 &lt;br /&gt;
| 20&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Role Play Worlds|Role Play Worlds - Your Fantasy, your world]] &lt;br /&gt;
| 129 &lt;br /&gt;
| 2276 &lt;br /&gt;
| 298&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Avatrian|Avatrian]] &lt;br /&gt;
| 11 &lt;br /&gt;
| 25 &lt;br /&gt;
| 150&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/OSBEST|OSBEST]] &lt;br /&gt;
| 12 &lt;br /&gt;
| 8 &lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/MCM Realm|MCM Realm]] &lt;br /&gt;
| 22 &lt;br /&gt;
| 73 &lt;br /&gt;
| 23&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Oasis Grid|Oasis Grid]] &lt;br /&gt;
| 89 &lt;br /&gt;
| 3068 &lt;br /&gt;
| 228&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/AtMeeting|AtMeeting Grid]] &lt;br /&gt;
| 20 &lt;br /&gt;
| 30 &lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/OpenUtopia|OpenUtopia Grid]] &lt;br /&gt;
| 1 &lt;br /&gt;
| 3 &lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Virtualgames3d|Virtualgames3d]] &lt;br /&gt;
| 140 &lt;br /&gt;
| 1350 &lt;br /&gt;
| 500&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Grid4Us|Grid4Us]] &lt;br /&gt;
| 22 &lt;br /&gt;
| 130 &lt;br /&gt;
| 50&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/K-grid|K-grid]] &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Le Monde de Darwin|Le Monde de Darwin]] &lt;br /&gt;
| 73 &lt;br /&gt;
| 83 &lt;br /&gt;
| 36&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/NeXtLife|NeXtLife Grid]] &lt;br /&gt;
| 15 &lt;br /&gt;
| 7 &lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Sensation Games|Sensation Games]] &lt;br /&gt;
| 1 &lt;br /&gt;
| 2 &lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/SLI-Grid|SLI-Grid]] &lt;br /&gt;
| 5 &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| TGGrid &lt;br /&gt;
| 11 &lt;br /&gt;
| 9 &lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/4AllGrid|4AllGrid]] &lt;br /&gt;
| 68&lt;br /&gt;
| 6&lt;br /&gt;
| 23&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/AlphaTowne|Alpha Towne]] &lt;br /&gt;
| 308 &lt;br /&gt;
| 1172 &lt;br /&gt;
| 909&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/AstralGrid|AstralGrid]]&lt;br /&gt;
| 70&lt;br /&gt;
| 40&lt;br /&gt;
| 30&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/Avination|Avination]]&lt;br /&gt;
| 110&lt;br /&gt;
| 300&lt;br /&gt;
| 20&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/EduverseGrid|EduverseGrid]]&lt;br /&gt;
| 147 &lt;br /&gt;
| 400&lt;br /&gt;
| Data Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/German Grid|German Grid]] &lt;br /&gt;
| 107 &lt;br /&gt;
| 2353 &lt;br /&gt;
| 385&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Heritage Key|Heritage Key]]&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/ccdbbs.com|LPgrid]]&lt;br /&gt;
| 345&lt;br /&gt;
| 331&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| [[NewtonGrid]]&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/RPGRID_NL|RPGRID NL]]&lt;br /&gt;
| 30&lt;br /&gt;
| 141&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/ScienceSim|ScienceSim]] &lt;br /&gt;
| 25 &lt;br /&gt;
| 30 &lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/SkyLifeGrid|SkyLifeGrid]]&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/slitalia|Slitalia]]&lt;br /&gt;
| 7&lt;br /&gt;
| 10&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/SunlightGrid|SunlightGrid]]&lt;br /&gt;
| 167&lt;br /&gt;
| 503&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/Taekwondoverse|Taekwondoverse]]&lt;br /&gt;
| 162 &lt;br /&gt;
| 400&lt;br /&gt;
| Data Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/Virtual_Life|Virtual Life]]&lt;br /&gt;
| 34&lt;br /&gt;
| 1004&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/VirtuLife|VirtuLife]]&lt;br /&gt;
| 21&lt;br /&gt;
| 10&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/virtyou|virtyou]] &lt;br /&gt;
| 110 &lt;br /&gt;
| 1676 &lt;br /&gt;
| 70&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/World4US|World4US]]&lt;br /&gt;
| 25&lt;br /&gt;
| 37&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/digsynth.com|World of the Free]] &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid_List/YrGrid|YrGrid]]&lt;br /&gt;
| 33&lt;br /&gt;
| 2150&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| [[Grid List/Zairus Grid|Zairus Grid]] &lt;br /&gt;
| 72 &lt;br /&gt;
| 10&lt;br /&gt;
| 3&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
&lt;br /&gt;
* [[Grid Associations]]&lt;br /&gt;
* [[Public Hypergrid Nodes|HyperGrid Nodes]]&lt;br /&gt;
* [[Uncategorized Grid List|Uncategorized Grid List]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Grids]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Community/de</id>
		<title>Community/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Community/de"/>
				<updated>2025-08-31T07:40:12Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Deutsche OpenSimulator Community =&lt;br /&gt;
&lt;br /&gt;
Hier findest du eine Liste mit deutschen Community Seiten.&amp;lt;br&amp;gt;&lt;br /&gt;
Es gibt ohne zweifel noch viel mehr. Wenn du noch weitere kennst, fühle dich frei neue Seiten hinzuzufügen.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn du merkst das eine Community nicht mehr existiert so entferne sie doch bitte aus der Liste.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width: 250px&amp;quot;|'''Name'''&lt;br /&gt;
|'''Beschreibung'''&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.gridtalk.de/ GridTalk]&lt;br /&gt;
|Deutsches OpenSim Forum.&lt;br /&gt;
|-&lt;br /&gt;
|[https://hyperweb.eu/ Hyperweb]&lt;br /&gt;
|Deutsches Wiki rund um OpenSimulator und Linux.&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.ralf-haifisch.biz/ Ralf Haifisch Wiki]&lt;br /&gt;
|Deutsche Anleitungen für OpenSimulator.&lt;br /&gt;
|-&lt;br /&gt;
|[http://opensimworld.com/ OpenSimWorld]&lt;br /&gt;
|Verzeichnis mit vielen Regionen&lt;br /&gt;
|-&lt;br /&gt;
|[https://accounts.osgrid.org/?q=forum Forums Osgrid]&lt;br /&gt;
|Deutscher Forum Bereich verfügbar&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.slinfo.de/ SLinfo]&lt;br /&gt;
|OpenSim Bereich verfügbar&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Community/de</id>
		<title>Community/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Community/de"/>
				<updated>2025-08-31T07:28:33Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Deutsche OpenSimulator Community =&lt;br /&gt;
&lt;br /&gt;
Hier findest du eine Liste mit deutschen Community Seiten.&amp;lt;br&amp;gt;&lt;br /&gt;
Es gibt ohne zweifel noch viel mehr. Wenn du noch weitere kennst, fühle dich frei neue Seiten hinzuzufügen.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn du merkst das eine Community nicht mehr existiert so entferne sie doch bitte aus der Liste.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width: 250px&amp;quot;|'''Name'''&lt;br /&gt;
|'''Beschreibung'''&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.gridtalk.de/ GridTalk]&lt;br /&gt;
|Deutsches OpenSim Forum.&lt;br /&gt;
|-&lt;br /&gt;
|[https://hyperweb.eu/ Hyperweb]&lt;br /&gt;
|Deutsches Wiki rund um OpenSimulator und Linux.&lt;br /&gt;
|-&lt;br /&gt;
|[http://www.ralf-haifisch.biz/ Ralf Haifisch Wiki]&lt;br /&gt;
|Deutsche Anleitungen für OpenSimulator.&lt;br /&gt;
|-&lt;br /&gt;
|[http://opensimworld.com/ OpenSimWorld]&lt;br /&gt;
|Verzeichnis mit vielen Regionen&lt;br /&gt;
|-&lt;br /&gt;
|[https://accounts.osgrid.org/?q=forum Forums Osgrid]&lt;br /&gt;
|Deutscher Forum Bereich verfügbar&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Monitoring_Module/fr</id>
		<title>Monitoring Module/fr</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Monitoring_Module/fr"/>
				<updated>2025-08-04T00:41:02Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|Monitoring_Module}}&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
Cette faculté fournit une façon de récupérer des données par région.&lt;br /&gt;
&lt;br /&gt;
= Activation =&lt;br /&gt;
&lt;br /&gt;
Dans OpenSimulator 0.7.2 elle est tout le temps active. Dans les développements actuels, elle est active par défaut mais peut être désactivée par le réglage&lt;br /&gt;
&lt;br /&gt;
 [Monitoring]&lt;br /&gt;
 Enabled = false&lt;br /&gt;
&lt;br /&gt;
= Récupérer les données =&lt;br /&gt;
== OpenSimulator 0.7.2 et précédents ==&lt;br /&gt;
Dans OpenSimulator 0.7.2 et précédents, chaque région fournit une URL par le serveur HTTP intégré à OpenSimulator sous le format&lt;br /&gt;
&lt;br /&gt;
 /monitorstats/&amp;lt;region-uuid&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si vous tapez &lt;br /&gt;
&lt;br /&gt;
 show http-handlers&lt;br /&gt;
&lt;br /&gt;
dans la console de région vous verrez quelque chose comme cela dans la section HTTP&lt;br /&gt;
&lt;br /&gt;
 /monitorstats/dd5b77f8-bf88-45ac-aace-35bd76426c81 &lt;br /&gt;
 /SStats/ &lt;br /&gt;
 /CAPS/VS/ &lt;br /&gt;
 regionImagedd5b77f8bf8845acaace35bd76426c81 &lt;br /&gt;
 /monitorstats/dd5b77f8-bf88-45ac-aace-35bd76426c82 &lt;br /&gt;
 regionImagedd5b77f8bf8845acaace35bd76426c82&lt;br /&gt;
&lt;br /&gt;
où l'UUID suivant monitorstats correspond à l'ID de région.&lt;br /&gt;
&lt;br /&gt;
== Code en développement de OpenSimulator ==&lt;br /&gt;
Dans le code en développement de OpenSimulator, les données de région peuvent aussi être accessibles par le nom de région. Par conséquent, taper&lt;br /&gt;
&lt;br /&gt;
 show http-handlers&lt;br /&gt;
&lt;br /&gt;
retournera quelque chose comme&lt;br /&gt;
&lt;br /&gt;
 /monitorstats/dd5b77f8-bf88-45ac-aace-35bd76426c81 &lt;br /&gt;
 /monitorstats/test &lt;br /&gt;
 /SStats/ &lt;br /&gt;
 /CAPS/VS/ &lt;br /&gt;
 regionImagedd5b77f8bf8845acaace35bd76426c81 &lt;br /&gt;
 /monitorstats/dd5b77f8-bf88-45ac-aace-35bd76426c82 &lt;br /&gt;
 /monitorstats/test2 &lt;br /&gt;
 regionImagedd5b77f8bf8845acaace35bd76426c82 &lt;br /&gt;
&lt;br /&gt;
où les données peuvent aussi être récupérées par le nom de région (test and test2).&lt;br /&gt;
&lt;br /&gt;
= Récupérer les données =&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
 ! Nom de la donnée       !! Descriptoin&lt;br /&gt;
 |-&lt;br /&gt;
 | AgentCountMonitor      || Nombre d'avatars sur la région.&lt;br /&gt;
 |-&lt;br /&gt;
 | ChildAgentCountMonitor || Nombre d'agents enfants dans la région. Ils sont utilisés par les viewers avec les avatars dans les régions voisines afin de voir l'impact sur les régions voisines.&lt;br /&gt;
 |-&lt;br /&gt;
 | GCMemoryMonitor        || Quantité de mémoire actuellement allouée au garbage collector de la machine virtuelle.&lt;br /&gt;
 |-&lt;br /&gt;
 | ObjectCountMonitor     || Quantité de primitives sur la région.&lt;br /&gt;
 |-&lt;br /&gt;
 | PWSMemoryMonitor       || Mémoire Virtual Machine Private Working Set&lt;br /&gt;
 |-&lt;br /&gt;
 | ThreadCountMonitor     || Quantité de threads utilisés par le processus en cours. Peut être non implémenté (d'où le fait que ce soit toujours à zero) avec Mono.&lt;br /&gt;
 |-&lt;br /&gt;
 | TotalFrameMonitor      || Temps pris en millisecondes pour la dernière frame. Dans OpenSimulator 0.7.3.1 et précédents ceci n'inclut pas le temps de réserve. Dans les versions suivantes de OpenSimulator ceci inclut le temps de réserve.&lt;br /&gt;
 |-&lt;br /&gt;
 | EventFrameMonitor      || Temps de calcul en millisecondes de l'incidence pour la dernière frame.&lt;br /&gt;
 |-&lt;br /&gt;
 | LandFrameMonitor       || Temps de calcul en millisecondes relatif au Land pour la dernière frame.&lt;br /&gt;
 |-&lt;br /&gt;
 | LastFrameTimeMonitor   || Nombre de millisecondes depuis que la dernière frame de région a été complétée.&lt;br /&gt;
 |-&lt;br /&gt;
 | TimeDilationMonitor    || Temps de dilatation du calcul de la physique comparé au calcul de la scène principale.&lt;br /&gt;
 |-&lt;br /&gt;
 | SimFPSMonitor          || Frames par seconde calculé par la scène.&lt;br /&gt;
 |-&lt;br /&gt;
 | AgentUpdatesPerSecondMonitor || Mises à jour par seconde envoyées au viewer.&lt;br /&gt;
 |- &lt;br /&gt;
 | ActiveObjectCountMonitor || Objets sujets à la physique.&lt;br /&gt;
 |-&lt;br /&gt;
 | ActiveScriptsMonitor   || Scripts actifs sur la région&lt;br /&gt;
 |-&lt;br /&gt;
 | ScriptEventsPerSecondMonitor || Evenements de scripts calculés par seconde.&lt;br /&gt;
 |-&lt;br /&gt;
 | InPacketsPerSecondMonitor || Paquets UDP reçus depuis le viewer par seconde.&lt;br /&gt;
 |-&lt;br /&gt;
 | OutPacketsPerSecondMonitor || Paquets UDP envoyés au viewer par seconde.&lt;br /&gt;
 |-&lt;br /&gt;
 | UnackedBytesMonitor    || Octets qui n'ont pas encore été acceptés par les viewers. Une valeur haute persistante indique une mauvaise connexion entre les viewers et le simulateur.&lt;br /&gt;
 |-&lt;br /&gt;
 | PendingDownloadsMonitor || Downloads en attente depuis le simulateur vers les viewers. Pas encore implémenté, sera toujours zéro.&lt;br /&gt;
 |- &lt;br /&gt;
 | PendingUploadsMonitor   || Uploads en attente depuis les viewers vers le simulateur. Pas encore implémenté, sera toujours zéro.&lt;br /&gt;
 |-&lt;br /&gt;
 | TotalFrameTimeMonitor      || Temps moyen pris en millisecondes pour les frames dans les 3 dernières secondes. Dans OpenSimulator 0.7.3.1 et précédents, ceci n'incluait pas le temps de réserve et se réferait par erreur au montant total d'une seconde qui constituait le temps de non-reserve. Dans les versions supérieures de OpenSimulator ceci se refere correctement au temps de frame en incluant le temps de réserve.&lt;br /&gt;
 |-&lt;br /&gt;
 | NetFrameTimeMonitor        || Temps moyen en millisecondes pour les activités de réseau dans les frames pour les 3 dernières secondes. Non utilisé actuellement.&lt;br /&gt;
 |-&lt;br /&gt;
 | SimulationFrameTimeMonitor || Temps moyen en millisecondes pour les activités liées aux frames dans les 3 dernières secondes. Dans OpenSimulator 0.7.3.1 et précédents, ceci se réfère par erreur à la quantité total dans une seconde qui constituait le temps de la simulation.&lt;br /&gt;
 |-&lt;br /&gt;
 | AgentFrameTimeMonitor      || Temps moyen pris en millisecondes pour les activités relatives aux agents dans les 3 dernières secondes. Dans OpenSimulator 0.7.3.1 et précédents, ceci se réfère par erreur au montant total dans une seconde qui constituait le temps d'agent.&lt;br /&gt;
 |-&lt;br /&gt;
 | ImagesFrameTimeMonitor     || Non utilisé par OpenSimulator&lt;br /&gt;
 |-&lt;br /&gt;
 | LastReportedObjectUpdates  || Actuellement inutilisé.&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
== Physique ==&lt;br /&gt;
&lt;br /&gt;
Tous les temps de frames içi correspondent à une moyenne prise pendant la période des 3 dernières secondes.&lt;br /&gt;
&lt;br /&gt;
Les données suivantes sont toujours présentes.&lt;br /&gt;
&lt;br /&gt;
 {| border=&amp;quot;1&amp;quot;&lt;br /&gt;
 | PhysicsFPSMonitor       || Frames par seconde calculés par le code de physique.&lt;br /&gt;
 |-&lt;br /&gt;
 | PhysicsFrameMonitor     || Obsolète. Identique à PhysicsFrameTimeMonitor&lt;br /&gt;
 |-&lt;br /&gt;
 | PhysicsFrameTimeMonitor || Temps moyen pris par le calcul de la physique.&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Les données suivantes sont seulement présentes si collect_stats = true dans la section [ODEPhysicsSettings] de OpenSim.ini depuis le master gita 6375db1 (post OpenSimulator 0.7.3.1 development code). Ces données sont expérimentales et peuvent changer.&lt;br /&gt;
&lt;br /&gt;
 {| border=&amp;quot;1&amp;quot;&lt;br /&gt;
 | ODETotalFrameMS         || Calcul de la physique ODE. Cela devrait correspondre à PhysicsFrameTimeMonitor.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODEAvatarTaintFrameMS   || Calcul de l'avatar.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODEPrimTaintFrameMS     || Calcul des primitives.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODEAvatarForcesFrameMS  || Calcul des forces de l'avatar.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODEPrimForcesFrameMS    || Calcul des forces des primitives.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODERaycastingFrameMS    || Raycasting.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODENativeStepFrameMS    || Temps pris pour effectuer un pas de physique dans le code natif de ODE.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODENativeSpaceCollisionFrameMS || Calcul des collisions possibles par les espaces dans le code natif de ODE.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODENativeGeomCollisionFrameMS  || Résolution des collisions actuelles entre les géométries dans le code natif de ODE.&lt;br /&gt;
 |- &lt;br /&gt;
 | ODEOtherCollisionFrameMS       || Calcul des collisions non couvertes par les autres mesures 'Native'. Ceci couvre principalement les opérations effectuées dans le plugin du simulateur lui même, bien que quelques appels au code natif de ODE soient toujours effectués.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODECollisionNotificationFrameMS || Notification d'autres parties de OpenSimulator qui sont efectuées en dehors du code du plugin ODE.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODEAvatarUpdateFrameMS          || Temps pris pour calculer les mises à jour d'avatar depuis le code de physique.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODEPrimUpdateFrameMS            || Temps pris pour calculer les mises à jour des primitives depuis le code de physique.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODEAvatarContacts               || Nombre de contacts causés par l'avatar dans la période des 3 dernières secondes. Ceci peut être supérieur à un contact par collision.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODEPrimContacts                 || Nombre de contacts causés par les prims dans la période des 3 dernières secondes. Ceci peut être supérieur à un contact par collision.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODETotalAvatars                 || Quantités d'avatars modelés par la physique. Ceci devrait correspondre à AgentCountMonitor. &lt;br /&gt;
 |-&lt;br /&gt;
 | ODETotalPrims                   || Nombre de prims non fantôme. Ceci couvre autant les prims physiques que les prims qui ne sont pas sujettes à la physique mais sont heurtables. Ceci ne couvre pas les prims fantômes car ils n'ont pas de représentation dans la scêne physique.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODEActivePrims                  || Nombre de prims sujettes à la physique. Ceci doit corresponre à ActiveObjectCountMonitor.&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
== Exemples ==&lt;br /&gt;
=== OpenSimulator 0.7.2 et précédents ===&lt;br /&gt;
Dans OpenSimulator 0.7.2 et précédents, récupérer&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;http://192.168.1.2:9000/dd5b77f8-bf88-45ac-aace-35bd76426c81&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
retournera quelque chose comme&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;data&amp;gt;&lt;br /&gt;
  &amp;lt;AgentCountMonitor&amp;gt;0&amp;lt;/AgentCountMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;ChildAgentCountMonitor&amp;gt;0&amp;lt;/ChildAgentCountMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;GCMemoryMonitor&amp;gt;32358400&amp;lt;/GCMemoryMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;ObjectCountMonitor&amp;gt;0&amp;lt;/ObjectCountMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;PhysicsFrameMonitor&amp;gt;0&amp;lt;/PhysicsFrameMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;PhysicsUpdateFrameMonitor&amp;gt;0&amp;lt;/PhysicsUpdateFrameMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;PWSMemoryMonitor&amp;gt;354172928&amp;lt;/PWSMemoryMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;ThreadCountMonitor&amp;gt;0&amp;lt;/ThreadCountMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;TotalFrameMonitor&amp;gt;1&amp;lt;/TotalFrameMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;EventFrameMonitor&amp;gt;0&amp;lt;/EventFrameMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;LandFrameMonitor&amp;gt;0&amp;lt;/LandFrameMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;LastFrameTimeMonitor&amp;gt;87&amp;lt;/LastFrameTimeMonitor&amp;gt;&lt;br /&gt;
&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenSimulator 0.7.3 et supérieurs ===&lt;br /&gt;
Dans le code actuellement en développement, plus de statistiques peuvent être ajoutées donc vous verrez quelque chose comme&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;data&amp;gt;&lt;br /&gt;
  &amp;lt;AgentCountMonitor&amp;gt;0&amp;lt;/AgentCountMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;ChildAgentCountMonitor&amp;gt;0&amp;lt;/ChildAgentCountMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;GCMemoryMonitor&amp;gt;32358400&amp;lt;/GCMemoryMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;ObjectCountMonitor&amp;gt;0&amp;lt;/ObjectCountMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;PhysicsFrameMonitor&amp;gt;0&amp;lt;/PhysicsFrameMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;PhysicsUpdateFrameMonitor&amp;gt;0&amp;lt;/PhysicsUpdateFrameMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;PWSMemoryMonitor&amp;gt;354172928&amp;lt;/PWSMemoryMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;ThreadCountMonitor&amp;gt;0&amp;lt;/ThreadCountMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;TotalFrameMonitor&amp;gt;1&amp;lt;/TotalFrameMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;EventFrameMonitor&amp;gt;0&amp;lt;/EventFrameMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;LandFrameMonitor&amp;gt;0&amp;lt;/LandFrameMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;LastFrameTimeMonitor&amp;gt;87&amp;lt;/LastFrameTimeMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;TimeDilationMonitor&amp;gt;1&amp;lt;/TimeDilationMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;SimFPSMonitor&amp;gt;56.6666679382324&amp;lt;/SimFPSMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;PhysicsFPSMonitor&amp;gt;46.9475212097168&amp;lt;/PhysicsFPSMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;AgentUpdatesPerSecondMonitor&amp;gt;0&amp;lt;/AgentUpdatesPerSecondMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;ActiveObjectCountMonitor&amp;gt;0&amp;lt;/ActiveObjectCountMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;ActiveScriptsMonitor&amp;gt;0&amp;lt;/ActiveScriptsMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;ScriptEventsPerSecondMonitor&amp;gt;0&amp;lt;/ScriptEventsPerSecondMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;InPacketsPerSecondMonitor&amp;gt;0&amp;lt;/InPacketsPerSecondMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;OutPacketsPerSecondMonitor&amp;gt;0&amp;lt;/OutPacketsPerSecondMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;UnackedBytesMonitor&amp;gt;0&amp;lt;/UnackedBytesMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;PendingDownloadsMonitor&amp;gt;0&amp;lt;/PendingDownloadsMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;PendingUploadsMonitor&amp;gt;0&amp;lt;/PendingUploadsMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;TotalFrameTimeMonitor&amp;gt;0&amp;lt;/TotalFrameTimeMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;NetFrameTimeMonitor&amp;gt;0&amp;lt;/NetFrameTimeMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;PhysicsFrameTimeMonitor&amp;gt;0&amp;lt;/PhysicsFrameTimeMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;SimulationFrameTimeMonitor&amp;gt;0&amp;lt;/SimulationFrameTimeMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;AgentFrameTimeMonitor&amp;gt;0&amp;lt;/AgentFrameTimeMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;ImagesFrameTimeMonitor&amp;gt;0&amp;lt;/ImagesFrameTimeMonitor&amp;gt;&lt;br /&gt;
&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Monitoring_Module/de</id>
		<title>Monitoring Module/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Monitoring_Module/de"/>
				<updated>2025-08-04T00:40:05Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: Created page with &amp;quot;{{Quicklinks|Monitoring_Module}}  =Einleitung=  Diese Funktion bietet eine Möglichkeit, Daten pro Region abzurufen.  HINWEIS: Diese Funktion ist veraltet und könnte in zukü...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|Monitoring_Module}}&lt;br /&gt;
&lt;br /&gt;
=Einleitung=&lt;br /&gt;
&lt;br /&gt;
Diese Funktion bietet eine Möglichkeit, Daten pro Region abzurufen.&lt;br /&gt;
&lt;br /&gt;
HINWEIS: Diese Funktion ist veraltet und könnte in zukünftigen Versionen des Simulators entfernt werden. Siehe [[Monitoring]] für Informationen zu den aktuellen Monitoring-Schnittstellen.&lt;br /&gt;
&lt;br /&gt;
=Aktivierung=&lt;br /&gt;
&lt;br /&gt;
In OpenSimulator 0.7.2 ist sie immer aktiv. Im aktuellen Entwicklungscode ist sie standardmäßig aktiv, kann aber deaktiviert werden durch&lt;br /&gt;
&lt;br /&gt;
 [Monitoring]&lt;br /&gt;
 Enabled = false&lt;br /&gt;
&lt;br /&gt;
=Daten abrufen=&lt;br /&gt;
== OpenSimulator 0.7.2 und früher ==&lt;br /&gt;
In OpenSimulator 0.7.2 und früher registriert jede Region eine URL auf dem eingebauten HTTP-Server von OpenSimulator im Format&lt;br /&gt;
&lt;br /&gt;
 /monitorstats/&amp;lt;region-uuid&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn du&lt;br /&gt;
&lt;br /&gt;
 show http-handlers&lt;br /&gt;
&lt;br /&gt;
in der Region-Konsole eingibst, siehst du im HTTP-Abschnitt etwa Folgendes:&lt;br /&gt;
&lt;br /&gt;
 /monitorstats/dd5b77f8-bf88-45ac-aace-35bd76426c81 &lt;br /&gt;
 /SStats/ &lt;br /&gt;
 /CAPS/VS/ &lt;br /&gt;
 regionImagedd5b77f8bf8845acaace35bd76426c81 &lt;br /&gt;
 /monitorstats/dd5b77f8-bf88-45ac-aace-35bd76426c82 &lt;br /&gt;
 regionImagedd5b77f8bf8845acaace35bd76426c82&lt;br /&gt;
&lt;br /&gt;
wobei die UUID nach monitorstats der Regions-ID entspricht.&lt;br /&gt;
&lt;br /&gt;
== OpenSimulator Entwicklungscode ==&lt;br /&gt;
Im Entwicklungscode von OpenSimulator können Regionsdaten auch über den Regionsnamen abgerufen werden. Daher ergibt die Eingabe von&lt;br /&gt;
&lt;br /&gt;
 show http-handlers&lt;br /&gt;
&lt;br /&gt;
etwa Folgendes:&lt;br /&gt;
&lt;br /&gt;
 /monitorstats/dd5b77f8-bf88-45ac-aace-35bd76426c81 &lt;br /&gt;
 /monitorstats/test &lt;br /&gt;
 /SStats/ &lt;br /&gt;
 /CAPS/VS/ &lt;br /&gt;
 regionImagedd5b77f8bf8845acaace35bd76426c81 &lt;br /&gt;
 /monitorstats/dd5b77f8-bf88-45ac-aace-35bd76426c82 &lt;br /&gt;
 /monitorstats/test2 &lt;br /&gt;
 regionImagedd5b77f8bf8845acaace35bd76426c82 &lt;br /&gt;
&lt;br /&gt;
wobei die Daten auch über den Regionsnamen (test und test2) abgerufen werden können.&lt;br /&gt;
&lt;br /&gt;
=Abgerufene Daten=&lt;br /&gt;
&lt;br /&gt;
==Allgemein==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
 ! Stat name              !! Beschreibung&lt;br /&gt;
 |-&lt;br /&gt;
 | AgentCountMonitor      || Anzahl der Avatare in der Region.&lt;br /&gt;
 |-&lt;br /&gt;
 | ChildAgentCountMonitor || Anzahl der Child Agents in der Region. Diese werden von Viewern mit Avataren in benachbarten Regionen verwendet, um in die Nachbarregion zu sehen und sie zu beeinflussen.&lt;br /&gt;
 |-&lt;br /&gt;
 | GCMemoryMonitor        || Menge des aktuell vom Garbage Collector der virtuellen Maschine belegten Speichers.&lt;br /&gt;
 |-&lt;br /&gt;
 | ObjectCountMonitor     || Anzahl der Prims in der Region.&lt;br /&gt;
 |-&lt;br /&gt;
 | PWSMemoryMonitor       || Private Working Set Speicher der virtuellen Maschine.&lt;br /&gt;
 |-&lt;br /&gt;
 | ThreadCountMonitor     || Anzahl der vom aktuellen Prozess verwendeten Threads. Unter Mono möglicherweise nicht implementiert (daher immer null).&lt;br /&gt;
 |-&lt;br /&gt;
 | TotalFrameMonitor      || Zeit in Millisekunden für das letzte Frame. In OpenSimulator 0.7.3.1 und früher war die Reserve-Frame-Zeit nicht enthalten. In späteren Versionen ist sie enthalten.&lt;br /&gt;
 |-&lt;br /&gt;
 | EventFrameMonitor      || Zeit für die Ereignisverarbeitung im letzten Frame in Millisekunden.&lt;br /&gt;
 |-&lt;br /&gt;
 | LandFrameMonitor       || Zeit für landbezogene Verarbeitung im letzten Frame in Millisekunden.&lt;br /&gt;
 |-&lt;br /&gt;
 | LastFrameTimeMonitor   || Anzahl der Millisekunden seit Abschluss des letzten Region-Frames.&lt;br /&gt;
 |-&lt;br /&gt;
 | TimeDilationMonitor    || Zeitdilatation der Physikverarbeitung im Vergleich zur Hauptszenenverarbeitung.&lt;br /&gt;
 |-&lt;br /&gt;
 | SimFPSMonitor          || Frames pro Sekunde, die von der Szene verarbeitet werden.&lt;br /&gt;
 |-&lt;br /&gt;
 | AgentUpdatesPerSecondMonitor || Updates pro Sekunde, die an Viewer gesendet werden.&lt;br /&gt;
 |- &lt;br /&gt;
 | ActiveObjectCountMonitor || Objekte, die der Physik unterliegen.&lt;br /&gt;
 |-&lt;br /&gt;
 | ActiveScriptsMonitor   || Skripte, die in der Region ausgeführt werden.&lt;br /&gt;
 |-&lt;br /&gt;
 | ScriptEventsPerSecondMonitor || Skript-Ereignisse pro Sekunde.&lt;br /&gt;
 |-&lt;br /&gt;
 | InPacketsPerSecondMonitor || UDP-Pakete von Viewern, die pro Sekunde verarbeitet werden.&lt;br /&gt;
 |-&lt;br /&gt;
 | OutPacketsPerSecondMonitor || UDP-Pakete, die pro Sekunde an Viewer gesendet werden.&lt;br /&gt;
 |-&lt;br /&gt;
 | UnackedBytesMonitor    || Bytes, die noch nicht von Viewern bestätigt wurden. Eine dauerhaft hohe Zahl weist auf schlechte Netzwerkverbindungen zwischen Viewern und Simulator hin.&lt;br /&gt;
 |-&lt;br /&gt;
 | PendingDownloadsMonitor || Ausstehende Downloads vom Simulator zu Viewern. Derzeit nicht implementiert, daher immer null.&lt;br /&gt;
 |- &lt;br /&gt;
 | PendingUploadsMonitor   || Ausstehende Uploads von Viewern zum Simulator. Derzeit nicht implementiert, daher immer null.&lt;br /&gt;
 |-&lt;br /&gt;
 | TotalFrameTimeMonitor      || Durchschnittliche Zeit in Millisekunden für Frames in den letzten 3 Sekunden. In OpenSimulator 0.7.3.1 und früher wurde die Reserve-Frame-Zeit nicht berücksichtigt und fälschlich als Gesamtzeit eines Frames ohne Reservezeit angegeben. In späteren Versionen wird die Frame-Zeit korrekt angegeben und enthält die Reservezeit.&lt;br /&gt;
 |-&lt;br /&gt;
 | NetFrameTimeMonitor        || Durchschnittliche Zeit in Millisekunden für Netzwerkaktivitäten in Frames der letzten 3 Sekunden. Derzeit nicht verwendet.&lt;br /&gt;
 |-&lt;br /&gt;
 | SimulationFrameTimeMonitor || Durchschnittliche Zeit in Millisekunden für simulationsbezogene Aktivitäten in Frames der letzten 3 Sekunden. In OpenSimulator 0.7.3.1 und früher fälschlich als Gesamtzeit eines Frames für Simulation angegeben.&lt;br /&gt;
 |-&lt;br /&gt;
 | AgentFrameTimeMonitor      || Durchschnittliche Zeit in Millisekunden für agentenbezogene Aktivitäten in den letzten 3 Sekunden. In OpenSimulator 0.7.3.1 und früher fälschlich als Gesamtzeit eines Frames für Agenten angegeben.&lt;br /&gt;
 |-&lt;br /&gt;
 | ImagesFrameTimeMonitor     || Wird von OpenSimulator nicht verwendet.&lt;br /&gt;
 |-&lt;br /&gt;
 | LastReportedObjectUpdates  || Derzeit nicht verwendet.&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Physik==&lt;br /&gt;
&lt;br /&gt;
Alle Zeiten pro Frame beziehen sich hier auf einen Durchschnitt über die letzten 3 Sekunden.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Statistiken sind immer vorhanden:&lt;br /&gt;
&lt;br /&gt;
 {| border=&amp;quot;1&amp;quot;&lt;br /&gt;
 | PhysicsFPSMonitor       || Frames pro Sekunde, die vom Physik-Code verarbeitet werden.&lt;br /&gt;
 |-&lt;br /&gt;
 | PhysicsFrameMonitor     || Veraltet. Entspricht PhysicsFrameTimeMonitor.&lt;br /&gt;
 |-&lt;br /&gt;
 | PhysicsFrameTimeMonitor || Durchschnittliche Zeit für die Physikverarbeitung.&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Die folgenden Statistiken sind nur vorhanden, wenn collect_stats = true im Abschnitt [ODEPhysicsSettings] der OpenSim.ini gesetzt ist (ab git master 6375db1, nach OpenSimulator 0.7.3.1 Entwicklungscode). Diese Statistiken sind experimentell und können sich ändern.&lt;br /&gt;
&lt;br /&gt;
 {| border=&amp;quot;1&amp;quot;&lt;br /&gt;
 | ODETotalFrameMS         || ODE Physikverarbeitung. Sollte mit PhysicsFrameTimeMonitor übereinstimmen.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODEAvatarTaintFrameMS   || Verarbeitung von Avatar-Taint.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODEPrimTaintFrameMS     || Verarbeitung von Prim-Taint.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODEAvatarForcesFrameMS  || Berechnung von Avatar-Kräften.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODEPrimForcesFrameMS    || Berechnung von Prim-Kräften.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODERaycastingFrameMS    || Raycasting.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODENativeStepFrameMS    || Zeit für einen Physikschritt durch nativen ODE-Code.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODENativeSpaceCollisionFrameMS || Berechnung möglicher Kollisionen über Räume im nativen ODE-Code.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODENativeGeomCollisionFrameMS  || Auflösung tatsächlicher Kollisionen zwischen Geometrien im nativen ODE-Code.&lt;br /&gt;
 |- &lt;br /&gt;
 | ODEOtherCollisionFrameMS       || Verarbeitung von Kollisionen, die nicht durch andere „Native“-Maßnahmen abgedeckt sind. Dies betrifft hauptsächlich Operationen im OpenSimulator-Plugin selbst, obwohl einige native ODE-Funktionen weiterhin aufgerufen werden.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODECollisionNotificationFrameMS || Benachrichtigung anderer Teile von OpenSimulator über Kollisionen außerhalb des ODE-Plugins.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODEAvatarUpdateFrameMS          || Zeit zur Verarbeitung von Avatar-Updates aus dem Physik-Code.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODEPrimUpdateFrameMS            || Zeit zur Verarbeitung von Prim-Updates aus dem Physik-Code.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODEAvatarContacts               || Anzahl der durch Avatare verursachten Kollisionskontakte im letzten 3-Sekunden-Zeitraum. Es kann mehr als einen Kontakt pro Kollision geben.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODEPrimContacts                 || Anzahl der durch Prims verursachten Kollisionskontakte im letzten 3-Sekunden-Zeitraum. Es kann mehr als einen Kontakt pro Kollision geben.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODETotalAvatars                 || Anzahl der von der Physik modellierten Avatare. Sollte mit AgentCountMonitor übereinstimmen.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODETotalPrims                   || Anzahl der nicht-phantomhaften Prims. Beinhaltet sowohl Physik-Prims als auch kollidierbare Prims ohne Physik. Phantom-Prims sind nicht enthalten, da sie keine Repräsentation in der Physikszene haben.&lt;br /&gt;
 |-&lt;br /&gt;
 | ODEActivePrims                  || Anzahl der Prims, die der Physik unterliegen. Sollte mit ActiveObjectCountMonitor übereinstimmen.&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
=== OpenSimulator 0.7.2 und früher ===&lt;br /&gt;
Unter OpenSimulator 0.7.2 und früher liefert der Abruf von&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;http://192.168.1.2:9000/dd5b77f8-bf88-45ac-aace-35bd76426c81&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
etwa Folgendes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;data&amp;gt;&lt;br /&gt;
  &amp;lt;AgentCountMonitor&amp;gt;0&amp;lt;/AgentCountMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;ChildAgentCountMonitor&amp;gt;0&amp;lt;/ChildAgentCountMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;GCMemoryMonitor&amp;gt;32358400&amp;lt;/GCMemoryMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;ObjectCountMonitor&amp;gt;0&amp;lt;/ObjectCountMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;PhysicsFrameMonitor&amp;gt;0&amp;lt;/PhysicsFrameMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;PhysicsUpdateFrameMonitor&amp;gt;0&amp;lt;/PhysicsUpdateFrameMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;PWSMemoryMonitor&amp;gt;354172928&amp;lt;/PWSMemoryMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;ThreadCountMonitor&amp;gt;0&amp;lt;/ThreadCountMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;TotalFrameMonitor&amp;gt;1&amp;lt;/TotalFrameMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;EventFrameMonitor&amp;gt;0&amp;lt;/EventFrameMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;LandFrameMonitor&amp;gt;0&amp;lt;/LandFrameMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;LastFrameTimeMonitor&amp;gt;87&amp;lt;/LastFrameTimeMonitor&amp;gt;&lt;br /&gt;
&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenSimulator 0.7.3 und höher ===&lt;br /&gt;
Im aktuellen Entwicklungscode wurden weitere Statistiken hinzugefügt, sodass Sie stattdessen etwas wie&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;data&amp;gt;&lt;br /&gt;
  &amp;lt;AgentCountMonitor&amp;gt;0&amp;lt;/AgentCountMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;ChildAgentCountMonitor&amp;gt;0&amp;lt;/ChildAgentCountMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;GCMemoryMonitor&amp;gt;32358400&amp;lt;/GCMemoryMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;ObjectCountMonitor&amp;gt;0&amp;lt;/ObjectCountMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;PhysicsFrameMonitor&amp;gt;0&amp;lt;/PhysicsFrameMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;PhysicsUpdateFrameMonitor&amp;gt;0&amp;lt;/PhysicsUpdateFrameMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;PWSMemoryMonitor&amp;gt;354172928&amp;lt;/PWSMemoryMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;ThreadCountMonitor&amp;gt;0&amp;lt;/ThreadCountMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;TotalFrameMonitor&amp;gt;1&amp;lt;/TotalFrameMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;EventFrameMonitor&amp;gt;0&amp;lt;/EventFrameMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;LandFrameMonitor&amp;gt;0&amp;lt;/LandFrameMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;LastFrameTimeMonitor&amp;gt;87&amp;lt;/LastFrameTimeMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;TimeDilationMonitor&amp;gt;1&amp;lt;/TimeDilationMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;SimFPSMonitor&amp;gt;56.6666679382324&amp;lt;/SimFPSMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;PhysicsFPSMonitor&amp;gt;46.9475212097168&amp;lt;/PhysicsFPSMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;AgentUpdatesPerSecondMonitor&amp;gt;0&amp;lt;/AgentUpdatesPerSecondMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;ActiveObjectCountMonitor&amp;gt;0&amp;lt;/ActiveObjectCountMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;ActiveScriptsMonitor&amp;gt;0&amp;lt;/ActiveScriptsMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;ScriptEventsPerSecondMonitor&amp;gt;0&amp;lt;/ScriptEventsPerSecondMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;InPacketsPerSecondMonitor&amp;gt;0&amp;lt;/InPacketsPerSecondMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;OutPacketsPerSecondMonitor&amp;gt;0&amp;lt;/OutPacketsPerSecondMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;UnackedBytesMonitor&amp;gt;0&amp;lt;/UnackedBytesMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;PendingDownloadsMonitor&amp;gt;0&amp;lt;/PendingDownloadsMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;PendingUploadsMonitor&amp;gt;0&amp;lt;/PendingUploadsMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;TotalFrameTimeMonitor&amp;gt;0&amp;lt;/TotalFrameTimeMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;NetFrameTimeMonitor&amp;gt;0&amp;lt;/NetFrameTimeMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;PhysicsFrameTimeMonitor&amp;gt;0&amp;lt;/PhysicsFrameTimeMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;SimulationFrameTimeMonitor&amp;gt;0&amp;lt;/SimulationFrameTimeMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;AgentFrameTimeMonitor&amp;gt;0&amp;lt;/AgentFrameTimeMonitor&amp;gt;&lt;br /&gt;
  &amp;lt;ImagesFrameTimeMonitor&amp;gt;0&amp;lt;/ImagesFrameTimeMonitor&amp;gt;&lt;br /&gt;
&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:German Translations]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Estate_Support/de</id>
		<title>Estate Support/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Estate_Support/de"/>
				<updated>2025-04-24T08:28:14Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: Created page with &amp;quot;{{Quicklinks|Estate_Support}} &amp;lt;br /&amp;gt;  = Einführung =  Grundstücke (Estates) in OpenSimulator werden entweder lokal für jeden Simulator oder zentral über den Estate-Connect...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|Estate_Support}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Einführung =&lt;br /&gt;
&lt;br /&gt;
Grundstücke (Estates) in OpenSimulator werden entweder lokal für jeden Simulator oder zentral über den Estate-Connector unterstützt. Die EstateData-Verbindung kann separat von der normalen Datenbankkonfiguration eingerichtet werden.&lt;br /&gt;
&lt;br /&gt;
Grundstücke werden in der Regionskonsole unterstützt oder beim Einrichten eines neuen Grundstücks während der Regionserstellung. Befehle zum Löschen von Grundstücken sind derzeit nicht möglich. Derzeit kann dies nur durch direkte Manipulation der Regionsdatenbank erfolgen.&lt;br /&gt;
&lt;br /&gt;
Ab Version 9.2.0 können Grundstücke über die Estate.ini im Estates-Ordner eines Simulators vorkonfiguriert werden, was eine vollständige Konfiguration ohne Konsoleneingabe ermöglicht. Siehe [http://opensimulator.org/viewgit/?a=commit&amp;amp;p=opensim&amp;amp;h=ce9f8804b6730a96429f8574642c33eb45357037 relevanten Commit] und [http://opensimulator.org/viewgit/?a=commit&amp;amp;p=opensim&amp;amp;h=a9697975123d8eab10cbd54569411c438ddbba98 diesen hier]. Einmal gesetzt, haben die Datenbankinformationen Vorrang.&lt;br /&gt;
&lt;br /&gt;
=== Estate-Befehle ===&lt;br /&gt;
* reload estate - Lädt Estate-Daten neu&lt;br /&gt;
* estate link region &amp;lt;estate ID&amp;gt; &amp;lt;region ID&amp;gt; - Fügt die angegebene Region zum angegebenen Grundstück hinzu.&lt;br /&gt;
* estate show - Zeigt den Estate-Namen, die ID und den Besitzer für aktuell laufende Regionen im Simulator. Diese Liste enthält nicht unbedingt alle Grundstücke, die in der Datenbank vorhanden sind.&lt;br /&gt;
* estate set name &amp;lt;estate ID&amp;gt; &amp;lt;neuer Name&amp;gt; - Benennt ein Grundstück um&lt;br /&gt;
* estate set owner &amp;lt;estate ID&amp;gt; &amp;lt;Vorname&amp;gt; &amp;lt;Nachname&amp;gt; - Ändert den Besitzer eines Grundstücks. Dieser Befehl unterstützt zwei Formen; diese verwendet den Namen des Besitzers.&lt;br /&gt;
* estate set owner &amp;lt;estate ID&amp;gt; &amp;lt;Besitzer-UUID&amp;gt; - Ändert den Besitzer eines Grundstücks. Dieser Befehl unterstützt zwei Formen; diese verwendet die UUID des Besitzers.&lt;br /&gt;
* estate create &amp;lt;Besitzer-UUID&amp;gt; &amp;lt;Estatename&amp;gt; - Muss eine Benutzer-UUID sein, die Sie mit 'show names' erhalten können&lt;br /&gt;
&lt;br /&gt;
== Beispiel zur Änderung einer Region zu einem anderen Grundstück ==&lt;br /&gt;
&lt;br /&gt;
 # estate show&lt;br /&gt;
 Estate-Informationen für Region TestRegion&lt;br /&gt;
 Estate-Name ID Besitzer&lt;br /&gt;
 Mein Grundstück 103 Testbenutzer&lt;br /&gt;
 # show names&lt;br /&gt;
 UUID Name HomeURL&lt;br /&gt;
 00000000-0000-0000-0000-000000000000 Unbekannter Benutzer&lt;br /&gt;
 461efe20-c098-4685-ab41-ef761538d3bc Testbenutzer&lt;br /&gt;
 # estate create 461efe20-c098-4685-ab41-ef761538d3bc Neues Grundstück&lt;br /&gt;
 Grundstück 105 erstellt als &amp;quot;Neues Grundstück&amp;quot;&lt;br /&gt;
 # estate link region 105 8c5fdd1b-d25a-4852-97b2-2369d5b99adf&lt;br /&gt;
 Region 8c5fdd1b-d25a-4852-97b2-2369d5b99adf ist jetzt mit Grundstück 105 verbunden&lt;br /&gt;
 # estate show&lt;br /&gt;
 Estate-Informationen für Region TestRegion&lt;br /&gt;
 Estate-Name ID Besitzer&lt;br /&gt;
 Neues Grundstück 105 Testbenutzer&lt;br /&gt;
&lt;br /&gt;
== Umbenennung eines Grundstücks ==&lt;br /&gt;
&lt;br /&gt;
Ein Grundstück kann über den Befehl &amp;quot;estate set name&amp;quot; umbenannt werden.&lt;br /&gt;
 # estate set name &amp;lt;estate ID&amp;gt; &amp;lt;neuer Name&amp;gt;&lt;br /&gt;
== Besitzeränderung eines Grundstücks ==&lt;br /&gt;
Einem Grundstück kann ein neuer Besitzer über den Befehl &amp;quot;estate set owner&amp;quot; zugewiesen werden.&lt;br /&gt;
Dieser Befehl unterstützt zwei Formen, eine mit dem Namen des Besitzers und eine mit der UUID des Besitzers.&lt;br /&gt;
 # estate set owner &amp;lt;estate ID&amp;gt; &amp;lt;Vorname&amp;gt; &amp;lt;Nachname&amp;gt;&lt;br /&gt;
 # estate set owner &amp;lt;estate ID&amp;gt; &amp;lt;Besitzer-UUID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Verwendung eines Viewers ==&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit ist, sich mit einem Viewer bei der OpenSimulator-Installation anzumelden und den &amp;quot;Covenant&amp;quot;-Tab im &amp;quot;Über Land&amp;quot;-Dialog zu betrachten.&lt;br /&gt;
&lt;br /&gt;
== Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Alternativ kann folgender Datenbankbefehl ausgeführt werden, um die Besitzer aller vom Simulator referenzierten Grundstücke anzuzeigen:&lt;br /&gt;
&lt;br /&gt;
 select PrincipalID, FirstName, LastName, EstateID, EstateName from UserAccounts, estate_settings as es where PrincipalID=es.EstateOwner;&lt;br /&gt;
&lt;br /&gt;
= Aufgaben =&lt;br /&gt;
&lt;br /&gt;
'''TODO: Weitere Aufgaben nach Bedarf hinzufügen:&lt;br /&gt;
  * Grundstück löschen&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
= Datenbanktabellen =&lt;br /&gt;
&lt;br /&gt;
* estate_groups - im Grundstück erlaubte Gruppen.&lt;br /&gt;
* [[estate_managers]] - Manager des Grundstücks.&lt;br /&gt;
* estate_map - verknüpft Regions-IDs mit der Estate-ID.&lt;br /&gt;
* [[Estate_settings]] - enthält alle Estate-Eigenschaften (Estate-Besitzer, Estate-Name etc.).&lt;br /&gt;
* estate_users - im Grundstück erlaubte Bewohner.&lt;br /&gt;
* estateban - vom Grundstück gebannte Bewohner.&lt;br /&gt;
&lt;br /&gt;
= Alte Notizen =&lt;br /&gt;
&lt;br /&gt;
Dies ist der alte Seiteninhalt. Er könnte für historische Informationen nützlich sein.&lt;br /&gt;
&lt;br /&gt;
== SVN r5525 führte die Estate-Unterstützung in OpenSimulator ein. ==&lt;br /&gt;
&lt;br /&gt;
Ein Update auf diese oder eine spätere Version erstellt die Estate-Unterstützung in Ihrer Instanz. Es konvertiert die vorherige Konfigurationsdatei in eine Reihe von Datenbanktabellen.&lt;br /&gt;
&lt;br /&gt;
=== Folgende Tabellen werden erstellt ===&lt;br /&gt;
 &lt;br /&gt;
 regionsettings (wird gelöscht und neu erstellt, falls vorhanden)&lt;br /&gt;
 estate_settings&lt;br /&gt;
 estate_map&lt;br /&gt;
 estatebans&lt;br /&gt;
 estate_users&lt;br /&gt;
 estate_groups&lt;br /&gt;
 estate_managers&lt;br /&gt;
&lt;br /&gt;
Diese Tabellen werden standardmäßig im Regions-Datenspeicher erstellt.&lt;br /&gt;
&lt;br /&gt;
Bei der Konvertierung wird eine Umgebung eingerichtet, die möglichst nahe an der bisherigen liegt.&lt;br /&gt;
&lt;br /&gt;
Es erstellt automatisch ein Grundstück pro Region mit Standard-Estate-IDs ab 100. Alle neuen Grundstücke werden ebenfalls von Grundstück 100 übergeordnet.&lt;br /&gt;
Dann platziert es die Region darin, konvertiert alte Regionssperren in neue Estate-Sperren für dieses Grundstück und setzt die neuen Estate-Flags auf Standardwerte.&lt;br /&gt;
Alle Informationen werden in den neuen Tabellen der Datenbank gespeichert.&lt;br /&gt;
&lt;br /&gt;
Regionseinstellungen sind jetzt wirklich regionsspezifisch, nicht mehr pro Instanz.&lt;br /&gt;
&lt;br /&gt;
Dieser Patch bewirkt, dass alle Regionen zu den Einstellungen aus estate_settings.xml zurückkehren. Dies behebt den Verlust von Bodentexturen, über den einige Benutzer beim letzten Patch berichtet haben. Allerdings gehen regionsspezifische Einstellungen des letzten Patches verloren. Dies ist ein Kompromiss, um den häufigsten Migrationsfall robuster zu gestalten.&lt;br /&gt;
&lt;br /&gt;
== Estate-Besitzer ==&lt;br /&gt;
&lt;br /&gt;
Estate-Besitzer werden jetzt unterstützt, müssen aber manuell in die Datenbank eingetragen werden, da der Client dies nicht unterstützt. Setzen Sie das Feld EstateOwner in estate_settings auf die UUID des Benutzers, der Estate-Besitzer werden soll. Dies wird in jeder Region beim nächsten Neustart wirksam.&lt;br /&gt;
&lt;br /&gt;
== Verhinderung des Zugangs von Minderjährigen zu Erwachsenen-Grundstücken ==&lt;br /&gt;
&lt;br /&gt;
Wenn Sie Minderjährige vom Betreten eines Grundstücks ausschließen müssen, siehe [[Minors_in_your_Grid|Minderjährige in Ihrem Grid]].&lt;br /&gt;
&lt;br /&gt;
== Korrektur von Estate-IDs ==&lt;br /&gt;
&lt;br /&gt;
Frühere Versionen von OpenSimulator erstellten automatisch Grundstücke mit einer EstateID gleich 1, und diese ID wird in der OpenSimulator-Datenbank gespeichert. Leider funktionieren SL-basierte Viewer nicht richtig mit EstateID-Werten zwischen 1 und 5, da diese Nummern für die interne Nutzung durch Linden Labs reserviert sind.&lt;br /&gt;
&lt;br /&gt;
Im Estate-Tab des Estate-Managers sind die Listen der Estate-Manager sowie der erlaubten und gebannten Avatare für Grundstücke mit diesen reservierten EstateID-Werten ausgegraut. Um dieses Problem zu beheben, führen Sie die folgenden SQL-Anweisungen aus, um die EstateIDs wie folgt anzupassen:&lt;br /&gt;
&lt;br /&gt;
 Alt Neu&lt;br /&gt;
 ---------&lt;br /&gt;
 1 --&amp;gt; 100&lt;br /&gt;
 2 --&amp;gt; 101&lt;br /&gt;
 3 --&amp;gt; 102&lt;br /&gt;
 4 --&amp;gt; 103&lt;br /&gt;
 5 --&amp;gt; 104&lt;br /&gt;
&lt;br /&gt;
Führen Sie folgenden Befehl aus, während OpenSimulator nicht läuft:&lt;br /&gt;
 mysql -u&amp;lt;Benutzer&amp;gt; -p&amp;lt;Passwort&amp;gt; &amp;lt;Datenbank&amp;gt; &amp;lt; FixEstateID.sql&lt;br /&gt;
&lt;br /&gt;
SQL-Anweisungen in FixEstateID.sql:&lt;br /&gt;
 UPDATE estate_groups SET EstateID=100 WHERE EstateID=1;&lt;br /&gt;
 UPDATE estate_managers SET EstateID=100 WHERE EstateID=1;&lt;br /&gt;
 UPDATE estate_map SET EstateID=100 WHERE EstateID=1;&lt;br /&gt;
 UPDATE estate_settings SET EstateID=100 WHERE EstateID=1;&lt;br /&gt;
 UPDATE estate_users SET EstateID=100 WHERE EstateID=1;&lt;br /&gt;
 UPDATE estateban SET EstateID=100 WHERE EstateID=1;&lt;br /&gt;
 UPDATE estate_groups SET EstateID=101 WHERE EstateID=2;&lt;br /&gt;
 UPDATE estate_managers SET EstateID=101 WHERE EstateID=2;&lt;br /&gt;
 UPDATE estate_map SET EstateID=101 WHERE EstateID=2;&lt;br /&gt;
 UPDATE estate_settings SET EstateID=101 WHERE EstateID=2;&lt;br /&gt;
 UPDATE estate_users SET EstateID=101 WHERE EstateID=2;&lt;br /&gt;
 UPDATE estateban SET EstateID=101 WHERE EstateID=2;&lt;br /&gt;
 UPDATE estate_groups SET EstateID=102 WHERE EstateID=3;&lt;br /&gt;
 UPDATE estate_managers SET EstateID=102 WHERE EstateID=3;&lt;br /&gt;
 UPDATE estate_map SET EstateID=102 WHERE EstateID=3;&lt;br /&gt;
 UPDATE estate_settings SET EstateID=102 WHERE EstateID=3;&lt;br /&gt;
 UPDATE estate_users SET EstateID=102 WHERE EstateID=3;&lt;br /&gt;
 UPDATE estateban SET EstateID=102 WHERE EstateID=3;&lt;br /&gt;
 UPDATE estate_groups SET EstateID=103 WHERE EstateID=4;&lt;br /&gt;
 UPDATE estate_managers SET EstateID=103 WHERE EstateID=4;&lt;br /&gt;
 UPDATE estate_map SET EstateID=103 WHERE EstateID=4;&lt;br /&gt;
 UPDATE estate_settings SET EstateID=103 WHERE EstateID=4;&lt;br /&gt;
 UPDATE estate_users SET EstateID=103 WHERE EstateID=4;&lt;br /&gt;
 UPDATE estateban SET EstateID=103 WHERE EstateID=4;&lt;br /&gt;
 UPDATE estate_groups SET EstateID=104 WHERE EstateID=5;&lt;br /&gt;
 UPDATE estate_managers SET EstateID=104 WHERE EstateID=5;&lt;br /&gt;
 UPDATE estate_map SET EstateID=104 WHERE EstateID=5;&lt;br /&gt;
 UPDATE estate_settings SET EstateID=104 WHERE EstateID=5;&lt;br /&gt;
 UPDATE estate_users SET EstateID=104 WHERE EstateID=5;&lt;br /&gt;
 UPDATE estateban SET EstateID=104 WHERE EstateID=5;&lt;br /&gt;
&lt;br /&gt;
[[Category:Configuration]]&lt;br /&gt;
[[Category:German Translations]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Free_Assets</id>
		<title>Free Assets</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Free_Assets"/>
				<updated>2025-04-15T13:09:25Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: /* PBR Textures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Textures==&lt;br /&gt;
* &amp;lt;strike&amp;gt;[http://texturebarn.headfirstdm.com/ The Texture Barn]&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;128px&amp;quot; heights=&amp;quot;128px&amp;quot; perrow=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
Image:Smoke.png | Smoke&lt;br /&gt;
Image:Brown_Eye.png | A Brown Eye&lt;br /&gt;
Image:Picketfence.png | A Picket fence.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vint Falken's Free Valentine Eyes:&lt;br /&gt;
[http://www.flickr.com/photos/vintfalken/2258351122/ Heart], &lt;br /&gt;
[http://www.flickr.com/photos/vintfalken/2258351306/ Flowers]&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;strike&amp;gt;http://www.vintfalken.com/free-full-perm-female-skins-sezmras-splendor/&amp;lt;/strike&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;strike&amp;gt;http://www.vintfalken.com/free-full-perm-female-skin-textures/&amp;lt;/strike&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;strike&amp;gt;http://torley.com/torley-textures-available-for-download-in-a-single-zip-pack&amp;lt;/strike&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Note that almost all the links above are broken (except for those on Flickr)''&lt;br /&gt;
&lt;br /&gt;
==OpenSim Exchange==&lt;br /&gt;
Free OpenSim content:&lt;br /&gt;
You can find free mesh, trees, avatar stuff, buidings and full regions&lt;br /&gt;
* &amp;lt;strike&amp;gt;[http://osxchange.org/ OpenSim Exchange]&amp;lt;/strike&amp;gt; ''also a broken link; you can extract a few files from the Wayback Machine: https://web.archive.org/web/20160110172438/http://osxchange.org/ (last update: January 2016)''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Heightmaps ==&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;A Simple Square Island&amp;quot; widths=&amp;quot;128px&amp;quot; heights=&amp;quot;128px&amp;quot; perrow=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
Image:Square_island_1x1.png | 1x1 region&lt;br /&gt;
Image:Square_island_2x2.png | 2x2 regions&lt;br /&gt;
Image:Square_island_4x4.png | 4x4 regions&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;A Complicated Maze&amp;quot; widths=&amp;quot;128px&amp;quot; heights=&amp;quot;128px&amp;quot; perrow=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
Image:Maze.png | 1x1 region&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Buildings ==&lt;br /&gt;
&lt;br /&gt;
== Full Sims ==&lt;br /&gt;
&lt;br /&gt;
== Opensim Archives - OAR Files ==&lt;br /&gt;
&lt;br /&gt;
=== What Are OAR Files? ===&lt;br /&gt;
OAR stands for '''O'''penSimulator '''AR'''chive. With them, you can make a full backup of your region(s), and restore them. Of course, you can also share them, so that other people can enjoy your work on their own servers and/or grid. For more information on how to use OAR files, please read [[OpenSim Archives]].&lt;br /&gt;
&lt;br /&gt;
=== OpenVCE 3D Assets OAR ===&lt;br /&gt;
&lt;br /&gt;
The [https://openvce.net OpenVCE.net] virtual worlds assets described at https://openvce.net/vwassets provided by Clever Zebra and the OpenVCE.net team at AIAI in the University of Edinburgh are available as an OAR (Opensim Archive) file at https://openvce.net/downloads/ ''(note that you will be redirected, since the AIAI has moved this page)''&lt;br /&gt;
&lt;br /&gt;
Get the file &amp;quot;opensim-openvce.oar&amp;quot; from there (right click on the file in the above directory in your browser, and select download is the easiest way to obtain the materials).&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;full&amp;quot; set of the buildings with a large 400 seat amphitheatre intended to be placed on the corner of 4 sims is also available via &amp;quot;opensim-openvce-full.oar&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Images of the buildings in place in Opensim are at:&lt;br /&gt;
[https://openvce.net/resources/downloads/opensim-openvce-1.jpg Image 1],&lt;br /&gt;
[https://openvce.net/resources/downloads/opensim-openvce-2.jpg Image 2]&lt;br /&gt;
&lt;br /&gt;
=== KatiJack Studio OpenSimulator Archive Files ===&lt;br /&gt;
A free collection of original OAR files of empty terraformed islands ready to build on:&lt;br /&gt;
&amp;lt;strike&amp;gt;http://katijackstudio.com/&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Skin Examples (Head) ==&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;Free Skin PSD files&amp;quot; widths=&amp;quot;128px&amp;quot; heights=&amp;quot;128px&amp;quot; perrow=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
File:Skins.jpg|Bald head (add hair separately)&lt;br /&gt;
File:Skin2.jpg|Head with pre-baked hair&lt;br /&gt;
File:Skin3.jpg|Example avatar with skin applied&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
Note that the skins above are just 240x240px in size (it was the largest size uploaded to this wiki) and will '''not''' look great on an avatar; you'll need at least 512x512, preferably 1024x1024 skins.&lt;br /&gt;
&lt;br /&gt;
The links to the original Photoshop files that generated these skins was unfortunately lost...&lt;br /&gt;
&lt;br /&gt;
== Meshed Bento Avatars: Ruth2 (female) and Roth2 (male) ==&lt;br /&gt;
&lt;br /&gt;
This is an ongoing effort of designing a female and a male avatar mesh, respecting the new Bento guidelines (introduced ''circa'' 2016) while still remaining faithful to the original avatar UV map designed by Linden Lab back in 2002 or so. You can get access to all the required elements to build your own system (including a HUD!) at https://github.com/RuthAndRoth/&lt;br /&gt;
&lt;br /&gt;
This is a rather extensive project and includes ''everything'' — from Blender and DAE files, rigging weights, and the diverse components required to 'assemble' a full avatar mesh from scratch — which is not for the faint of heart. The project went already through different iterations and has some 'official splits' (where independent creators added their own tweaks, some of which are ported back to the 'main' Ruth/Roth mesh system. You can also get meshed clothes, hair and other rigged avatar components from the same project.&lt;br /&gt;
&lt;br /&gt;
Fortunately, some kind soul has already packed these into convenient [[IAR Format|IAR]] files, ready to be uploaded to OpenSimulator: &lt;br /&gt;
&lt;br /&gt;
* https://github.com/RuthAndRoth/Ruth2/tree/master/Artifacts/IAR (female)&lt;br /&gt;
* https://github.com/RuthAndRoth/Roth2/tree/master/Artifacts/IAR (male)&lt;br /&gt;
&lt;br /&gt;
Note, however, despite the claims to the contrary, these files do ''not'' contain the latest-of-the-latest release meshes; at the time of writing, these IAR files were assembled in 2020.&lt;br /&gt;
&lt;br /&gt;
Also note that, while these meshes (and all the content in the Ruth2/Roth2 project) are free to use in perpetuity, they are also released under the [https://opensource.org/license/agpl-v3/ GNU Affero General Public License version 3] (aka AGPL-3.0-or-later) license. This means that you're quite welcome to use the meshes, tweak them as you wish, even sell them, and so forth, so long as you publicly publish all the modifications you've made — in other words, a very strong copyleft license. You can read a bit more about [https://www.fsf.org/bulletin/2021/fall/the-fundamentals-of-the-agplv3 AGPL on the Free Software Foundation's website] to understand why this license exists, and how it is used in practice.&lt;br /&gt;
&lt;br /&gt;
[[Category:Users]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Custom_Libraries/de</id>
		<title>Custom Libraries/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Custom_Libraries/de"/>
				<updated>2025-04-15T06:49:08Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|Custom_Libraries}}{{ReleaseInfo}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Bibliotheksübersicht =&lt;br /&gt;
&lt;br /&gt;
Die Bibliothek in OpenSimulator wird in der Datei &amp;lt;tt&amp;gt;bin/inventory/Libraries.xml&amp;lt;/tt&amp;gt; beschrieben. Diese Datei definiert eine Reihe weiterer Bibliotheken, von denen jede eine Datei für Ordner und eine Datei für Inhalte besitzt. Die in &amp;lt;tt&amp;gt;Libraries.xml&amp;lt;/tt&amp;gt; beschriebenen Dateien werden bei jedem Serverstart eingelesen. (Beachte jedoch, dass der Viewer Bibliotheksinformationen zwischenspeichert. Du musst also möglicherweise den Cache im Viewer löschen, um Änderungen zu sehen.)&lt;br /&gt;
&lt;br /&gt;
Wenn du Assets zur Bibliothek deines OpenSimulator-Servers hinzufügen möchtest, gibt es zwei grundlegende Schritte: Zuerst müssen die Assets erstellt, dann die entsprechenden Inventar-XML-Dateien erzeugt werden. Die Assets enthalten Informationen über die Objekte selbst – die Geometrie von Prims, das Bild von Texturen, den Text von Notecards usw. Die Inventarobjekte sind Einträge in Ordnern, die es Benutzern ermöglichen, auf die Assets zuzugreifen.&lt;br /&gt;
&lt;br /&gt;
Wenn du sofort importierbare Bibliotheken möchtest, sieh dir den Abschnitt [[Free Assets]] an...&lt;br /&gt;
&lt;br /&gt;
= Assets erzeugen =&lt;br /&gt;
&lt;br /&gt;
Der Server kann auch Asset-Sätze im Bulk importieren. Diese Asset-Sätze sind in der Datei &amp;lt;tt&amp;gt;bin/assets/AssetSets.xml&amp;lt;/tt&amp;gt; beschrieben. Jeder Asset-Satz hat eine eigene XML-Datei, die die Assets beschreibt, zusammen mit einer weiteren Datei, die die eigentlichen Asset-Daten enthält (Bild- oder Textdaten). Du kannst neue Asset-Sätze definieren und deren XML-Dateien zu &amp;lt;tt&amp;gt;AssetSets.xml&amp;lt;/tt&amp;gt; hinzufügen. Wenn Robust (im Grid-Modus) oder OpenSimulator (im Standalone-Modus) startet, prüft es die &amp;lt;tt&amp;gt;AssetSets.xml&amp;lt;/tt&amp;gt; und importiert alle Assets, die noch nicht im Asset-Store vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
== Assets mit dem Viewer erzeugen ==&lt;br /&gt;
&lt;br /&gt;
Die einfachste Methode zur Asset-Erstellung besteht darin, sie direkt in-world zu erzeugen oder über den Viewer hochzuladen. In diesem Fall ist kein Asset-Set notwendig.&lt;br /&gt;
&lt;br /&gt;
== Im Bulk-Verfahren ==&lt;br /&gt;
&lt;br /&gt;
Wenn du Assets im Bulk erzeugen möchtest, musst du dein eigenes Asset-Set definieren. Schau dir bestehende Einträge in &amp;lt;tt&amp;gt;AssetSets.xml&amp;lt;/tt&amp;gt; an, um ein Gefühl für das Format zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Praktisch betrachtet kannst du derzeit nur LSL-Skripte, Notecards und Texturen auf diese Weise importieren. Es gibt zwei Schritte: Zuerst müssen die Assets in das richtige Format gebracht werden. Zweitens müssen die XML-Dateien für die Assets erstellt werden.&lt;br /&gt;
&lt;br /&gt;
=== Assets in das richtige Format bringen ===&lt;br /&gt;
&lt;br /&gt;
Notecards und LSL-Dateien sind einfache Textdateien.&lt;br /&gt;
&lt;br /&gt;
Bilder müssen eine Seitenlänge haben, die eine Zweierpotenz ist, d.h. Breite und Höhe müssen eine der folgenden Größen sein: 16, 32, 64, 128, 256, 512 oder 1024. Sie müssen im JPEG2000-Format (.j2k) vorliegen. Mit den [http://www.openjpeg.org/ OpenJPEG]-Tools kannst du Bilder in das richtige Format konvertieren. Beachte, dass Version 1.3 der OpenJPEG-Bibliothek keine Graustufenbilder oder Transparenz unterstützt. Ab Revision 824 im OpenJPEG-SVN-Archiv werden Transparenz und PNG-Dateien unterstützt. Es lohnt sich also, eine neuere Version [http://code.google.com/p/openjpeg/source/checkout aus dem SVN-Archiv] zu kompilieren, bis eine offizielle Version diese Funktionen enthält.&lt;br /&gt;
&lt;br /&gt;
Um eine Bilddatei zu konvertieren:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;tt&amp;gt;image_to_j2k -i ''inputfile'' -o ''outputbase''.j2k -r 100,30,10&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Hinweis zur Kompression: Die Werte nach „-r“ sind Kompressionsraten. Wenn du ein Bild über den Viewer hochlädst (z.B. mit Imprudence), werden in der Regel folgende Raten verwendet: 1920,480,120,30,10. Höhere Zahlen bedeuten stärkere Kompression und daher unschärfere Bilder. Der Vorteil mehrerer Kompressionsstufen ist, dass zunächst die niedrig aufgelösten Daten übertragen werden – was ein schnelles, wenn auch verschwommenes Vorschaubild ermöglicht. Eine Rate von 1 ist verlustfrei, verbraucht jedoch viel Speicherplatz und Bandbreite. Eine niedrigste Rate von 10 ist für die meisten Zwecke ausreichend. Für Sculpt Maps oder sehr präzise Texturen kann auch eine Rate von 1 sinnvoll sein.&lt;br /&gt;
&lt;br /&gt;
Es gibt zwei Skripte zur Massenkonvertierung – ein [[jp2 batch converter|Linux-Skript]] und ein [[Jp2 batch converter for windows|Windows-Skript]] in Perl. Diese verwenden ImageMagick und image_to_j2k zur Größenanpassung und Konvertierung in das j2k-Format (trotzdem mit der Endung .jp2, da der Viewer dies erwartet). Aber Vorsicht:&lt;br /&gt;
&lt;br /&gt;
* Das Skript ''löscht'' deine Originaldateien.&lt;br /&gt;
* Das Skript ''prüft nicht auf Fehler''. Wenn die Konvertierung fehlschlägt, wird das Bild trotzdem gelöscht. Das kann frustrierend sein, wenn du keine Sicherung gemacht hast.&lt;br /&gt;
* Das Skript nutzt die Kompressionsraten 20,10,1 – gut für Viewer-Bilder, schlecht für serverseitige Bilder, da die verlustfreie Kompression viel Speicher benötigt.&lt;br /&gt;
&lt;br /&gt;
Vielleicht gibt es irgendwann ein besseres Skript...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Python-Skript siehe Originaltext&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset-Set-XML-Dateien erstellen ===&lt;br /&gt;
&lt;br /&gt;
Wenn alle Assets im richtigen Format sind, musst du eine AssetSet-XML-Datei erstellen. Lege dazu ein Unterverzeichnis in &amp;lt;tt&amp;gt;bin/assets&amp;lt;/tt&amp;gt; an, z. B. &amp;lt;tt&amp;gt;MyAwesomeAssetSet&amp;lt;/tt&amp;gt;. In diesem Verzeichnis erstellst du die Datei &amp;lt;tt&amp;gt;MyAwesomeAssetSet.xml&amp;lt;/tt&amp;gt;. Du kannst das Python-Skript [[updatelibrary.py]] verwenden, um diese Datei sowie die benötigten Inventar-XML-Dateien zu erstellen. Weitere Infos dazu gibt es [[#Generating_Inventory_and_Asset_Files|unten]].&lt;br /&gt;
&lt;br /&gt;
== Terrains ==&lt;br /&gt;
=== Terrain-Höhenkarte erstellen ===&lt;br /&gt;
&lt;br /&gt;
* [[Using L3DT|Eigene Terrains mit L3DT erstellen]]&lt;br /&gt;
&lt;br /&gt;
= Inventarobjekte erzeugen =&lt;br /&gt;
&lt;br /&gt;
Die Ordner, die in der Bibliothek erscheinen, sind in &amp;lt;tt&amp;gt;bin/inventory/Libraries.xml&amp;lt;/tt&amp;gt; definiert. Jede Bibliothek besteht aus zwei XML-Dateien – eine für Ordnerstruktur, eine für die Inhalte. Was du vermutlich tun willst, ist eine neue Bibliothek zu erstellen. Erstelle dafür ein Unterverzeichnis, erzeuge die zwei XML-Dateien, und füge einen Eintrag in &amp;lt;tt&amp;gt;Libraries.xml&amp;lt;/tt&amp;gt; hinzu. Fertig! (Aber sehr aufwendig – UUIDs müssen manuell generiert und eingefügt werden.)&lt;br /&gt;
&lt;br /&gt;
== Inventar- und Asset-Dateien erzeugen ==&lt;br /&gt;
&lt;br /&gt;
Das Python-Skript &amp;lt;tt&amp;gt;[[updatelibrary.py]]&amp;lt;/tt&amp;gt; kann Asset- und Inventar-XML-Dateien gleichzeitig erzeugen. Du verwaltest eine Verzeichnisstruktur mit deinen Assets und führst das Skript aus, um die XML-Dateien zu synchronisieren. (Es werden nur neue Assets hinzugefügt – nicht entfernt.)&lt;br /&gt;
&lt;br /&gt;
Vorgehen:&lt;br /&gt;
* Lege ein Asset-Set-Verzeichnis an.&lt;br /&gt;
* Ordne deine Dateien (.txt für Notecards/Skripte, .j2k für Texturen) in Ordner ein, die später den Inventarordnern entsprechen.&lt;br /&gt;
* Wähle einen Namen für deine Bibliothek und eine Kurzform ohne Leerzeichen.&lt;br /&gt;
&lt;br /&gt;
Beispiel: Du willst eine Bibliothek „My Awesome Library“ erstellen. Nutze das Verzeichnis &amp;lt;tt&amp;gt;MyAwesomeAssetSet&amp;lt;/tt&amp;gt;, darunter z. B. &amp;lt;tt&amp;gt;Textures&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;Clothing&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;Objects&amp;lt;/tt&amp;gt;. Dort hinein kommen die passenden Dateien.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich kannst du in jedem Verzeichnis eine Datei „addassets.lis“ anlegen. Dort können vorhandene Assets aus dem Grid gelistet werden. Das Format:&lt;br /&gt;
&lt;br /&gt;
  asset_uuid  asset_type  inventory_type  Name im Inventar&lt;br /&gt;
&lt;br /&gt;
Ein Viewer wie Imprudence zeigt dir die asset_uuid. Die Typen:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;2&amp;quot;&lt;br /&gt;
!Objekttyp&lt;br /&gt;
!asset_type&lt;br /&gt;
!&lt;br /&gt;
!Objekttyp&lt;br /&gt;
!asset_type&lt;br /&gt;
|-&lt;br /&gt;
|Textur&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|Notecard&lt;br /&gt;
|7&lt;br /&gt;
|-&lt;br /&gt;
|Sound&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|LSL-Text&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|Visitenkarte&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|LSL-Bytecode&lt;br /&gt;
|11&lt;br /&gt;
|-&lt;br /&gt;
|Landmarke&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|Bodypart&lt;br /&gt;
|13&lt;br /&gt;
|-&lt;br /&gt;
|Kleidung&lt;br /&gt;
|5&lt;br /&gt;
|&lt;br /&gt;
|Animation&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
|Objekt (Prim)&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|Geste&lt;br /&gt;
|21&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Inventory_type unterscheidet sich ggf.:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;2&amp;quot;&lt;br /&gt;
!Objekttyp&lt;br /&gt;
!inventory_type&lt;br /&gt;
!&lt;br /&gt;
!Objekttyp&lt;br /&gt;
!inventory_type&lt;br /&gt;
|-&lt;br /&gt;
|Textur&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|Root-Kategorie&lt;br /&gt;
|9&lt;br /&gt;
|-&lt;br /&gt;
|Sound&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|LSL-Skript&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|Visitenkarte&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|Snapshot&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Landmarke&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|Attachment&lt;br /&gt;
|17&lt;br /&gt;
|-&lt;br /&gt;
|Objekt&lt;br /&gt;
|6&lt;br /&gt;
|&lt;br /&gt;
|Wearable&lt;br /&gt;
|18&lt;br /&gt;
|-&lt;br /&gt;
|Notecard&lt;br /&gt;
|7&lt;br /&gt;
|&lt;br /&gt;
|Animation&lt;br /&gt;
|19&lt;br /&gt;
|-&lt;br /&gt;
|Kategorie&lt;br /&gt;
|8&lt;br /&gt;
|&lt;br /&gt;
|Geste&lt;br /&gt;
|20&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(Es gibt auch „None“ mit -1. Bodyparts und Kleidung = Wearables.)&lt;br /&gt;
&lt;br /&gt;
Führe das Skript aus (mit &amp;lt;tt&amp;gt;--help&amp;lt;/tt&amp;gt; für Hilfe). Es durchsucht dein Verzeichnis und ergänzt die XML-Dateien. Danach musst du nur noch &amp;lt;tt&amp;gt;inventory/Libraries.xml&amp;lt;/tt&amp;gt; und &amp;lt;tt&amp;gt;assets/AssetSets.xml&amp;lt;/tt&amp;gt; aktualisieren. Beim nächsten Start von OpenSimulator oder Robust werden Assets und Bibliothekseinträge übernommen. Denke daran: Viewer-Cache leeren!&lt;br /&gt;
&lt;br /&gt;
== Vorsicht ==&lt;br /&gt;
&lt;br /&gt;
Bibliotheksdaten werden derzeit von der Region selbst geladen, nicht vom Inventory-Service. Daher müssen die XML-Dateien auf jedem einzelnen Region-Server vorhanden sein – nicht nur auf dem Robust-Server.&lt;br /&gt;
&lt;br /&gt;
In Zukunft sollte der Inventory-Service zentral die Bibliotheksdaten laden und an Regionen verteilen. Das erhöht die Last dort, ermöglicht aber bessere zentrale Verwaltung.&lt;br /&gt;
&lt;br /&gt;
Fragen zu &amp;lt;tt&amp;gt;[[updatelibrary.py]]&amp;lt;/tt&amp;gt; bitte an Rob Knop (rknop auf freenode, meist in opensim-dev; In-World: Prospero Frobozz).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:German Translations]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Webinterface</id>
		<title>Webinterface</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Webinterface"/>
				<updated>2025-04-07T12:43:51Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Quicklinks}} {{thirdparty}} &lt;br /&gt;
&lt;br /&gt;
{{warning|&amp;lt;!--T:16--&amp;gt; MySQL This extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used. See also MySQL: choosing an API guide and related FAQ for more information. Alternatives to this function include: mysqli_connect(), PDO::__construct()}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Addon Modules ==&lt;br /&gt;
&lt;br /&gt;
* [[Wifi]] - A Simple Account Management Front-end&lt;br /&gt;
&lt;br /&gt;
== PHP ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Name/Link&lt;br /&gt;
! License&lt;br /&gt;
! Framework/CMS&lt;br /&gt;
! Description &lt;br /&gt;
! Last update&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/vortexsystem/VortexWeb VortexWeb]&lt;br /&gt;
| MIT&lt;br /&gt;
| [https://codeigniter.com/ CodeIgniter]&lt;br /&gt;
| Web Interface that will provide the same Features as Wifi and the Second Life Account Site, includes Integretion for Payments of Regions, and For Gloebits.&lt;br /&gt;
| 2019&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.nsl.tuis.ac.jp/xoops/modules/xpwiki/?Modlos%20%28E%29 Modlos]&lt;br /&gt;
| GPLv3&lt;br /&gt;
| [http://moodle.org/ Moodle]&lt;br /&gt;
| Web Interface for [http://moodle.org/ Moodle]. This software is sister application of XoopenSim. Modlos has same functions with XoopenSim and supports cooperation with [http://www.sloodle.org Sloodle]&lt;br /&gt;
| 2016&lt;br /&gt;
|-&lt;br /&gt;
| [http://code.google.com/p/openmetaverse/wiki/SimianGrid SimianGrid]&lt;br /&gt;
| BSD&lt;br /&gt;
| [https://codeigniter.com/ CodeIgniter]&lt;br /&gt;
| A scalable, extensible, light-weight, open source persistence layer for MMOs and virtual worlds, written in PHP. &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Note: OpenSimulator support for SimianGrid was removed in February 2020&amp;lt;/span&amp;gt; (Commit [http://opensimulator.org/viewgit/?a=commit&amp;amp;p=opensim&amp;amp;h=941b65b44a1524d39e9fe2c4e1ad0f9a9aab3f23 #941b65])&lt;br /&gt;
| 2010&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/unga/ unga]&lt;br /&gt;
| MIT&lt;br /&gt;
| [https://codeigniter.com/ CodeIgniter]&lt;br /&gt;
|  Both an UGAIM (User, Grid, Assets, Inventory, Messaging) server system and a backend for configuring that servers. Also, its modular architecture allows to create (or plug) specialized modules created in standard PHP. Last Update: 2013-05-02 . &lt;br /&gt;
| 2010&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.jopensim.com/jopensim/downloads1/category/25-joomla-3-x-compatible.html jOpenSim]&lt;br /&gt;
| GPLv2&lt;br /&gt;
| [https://www.joomla.org/ Joomla!]&lt;br /&gt;
|  Joomla! front end for OpenSimulator server, 2 modules (grid status and friends online) and a plugin (jOpenSimRegister). The component is developed and designed with opensimulator starting from v0.7.3.1 running in grid or standalone mode with MySQL as storage engine. See also the [http://wiki.jopensim.com/index.php/Main_Page jOpenSim wiki]&lt;br /&gt;
| 2019&lt;br /&gt;
|-&lt;br /&gt;
| [https://fgagod.fr OSMW]&lt;br /&gt;
| GPLv3&lt;br /&gt;
| PHP 8&lt;br /&gt;
| OpenSim Web Manager is created in PHP source on [https://github.com/Nino85Whitman/OSMW-OpenSim-Manager-Web Github]&lt;br /&gt;
| 2024&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.drupal.org/project/d4os d4os]&lt;br /&gt;
| GPLv3&lt;br /&gt;
| [https://drupal.org Drupal]&lt;br /&gt;
| Integration to control an OpenSim grid from a Drupal website&lt;br /&gt;
| 2018&lt;br /&gt;
|-&lt;br /&gt;
| [https://wordpress.org/plugins/w4os-opensimulator-web-interface/ W4OS]&lt;br /&gt;
| AGPLv3&lt;br /&gt;
| [https://wordpress.org/ WordPress]&lt;br /&gt;
| WordPress interface for OpenSimulator. Provide web avatar registration, user profiles, grid info shortocdes, blocks and widgets, login page, web assets server, popular places, destination guide... [https://github.com/GuduleLapointe/w4os/ source on GiHub], includes [https://github.com/justincc/opensimulator-helper OpenSim Helpers] (currency, helpers, in-world search, land tools, offline messages...)&lt;br /&gt;
| 2025&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/ManfredAabye/oswebinterface oswebinterface]&lt;br /&gt;
| MIT&lt;br /&gt;
| [https://github.com/ManfredAabye/oswebinterface Many frameworks]&lt;br /&gt;
| This web interface is exclusively designed to bridge the communication gap between OpenSimulator and the viewer, such as Firestorm. The whole thing is designed to work with various frameworks.&lt;br /&gt;
| 2025&lt;br /&gt;
|}&lt;br /&gt;
=== See Also ===&lt;br /&gt;
&lt;br /&gt;
* [http://code.google.com/p/flotsam/wiki/XmlRpcGroups XmlRpcGroups] - An optional module for older version of OpenSimulator, update v0.7.5 that provides a set of xmlrpc methods to manage groups. See [[Groups]] for configure information.&lt;br /&gt;
&lt;br /&gt;
* [[V2_Groups|Groups Modules V2]] - The current Groups modules for OpenSimulator, supported since v0.7.6. &lt;br /&gt;
&lt;br /&gt;
* [[Wixtd]] - archived information about a web interface for OpenSimulator that is no longer available&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Hypergrid_Security/de</id>
		<title>Hypergrid Security/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Hypergrid_Security/de"/>
				<updated>2025-04-07T12:20:41Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|Hypergrid Security}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Aufgaben =&lt;br /&gt;
&lt;br /&gt;
Dieser Aufgaben-Text befindet sich in Entwicklung und sollte derzeit nicht ohne direkte Tests als verlässlich angesehen werden.&lt;br /&gt;
&lt;br /&gt;
== Verhindern, dass lokale Nutzer Hypergrid-URLs zu fremden Zielen auflösen ==&lt;br /&gt;
&lt;br /&gt;
Setze:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[GridService]&lt;br /&gt;
AllowHypergridMapSearch = false&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Standard ist ebenfalls `false`.  &lt;br /&gt;
&lt;br /&gt;
Sowohl die Hauptkartensuche als auch die Adressleiste nutzen diese Einstellung, um Regions-Adressen aufzulösen. Wenn `false` gesetzt ist, werden keine Versuche unternommen, Hypergrid-Adressen aufzulösen.&lt;br /&gt;
&lt;br /&gt;
Dies verhindert möglicherweise nicht, dass Nutzer über bestehende Hyperlink-Lesezeichen teleportieren, wenn Hypergrid zuvor aktiviert war.&lt;br /&gt;
&lt;br /&gt;
Diese Einstellung sollte theoretisch weiterhin externen Nutzern den Besuch der Installation erlauben.&lt;br /&gt;
&lt;br /&gt;
== Verhindern, dass Nutzer eines bestimmten UserLevels zu fremden Zielen reisen ==&lt;br /&gt;
&lt;br /&gt;
Dies wird pro UserLevel konfiguriert. Um beispielsweise gewöhnlichen lokalen Nutzern (UserLevel 0) Auslandsreisen zu verbieten, setze:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[UserAgentService]&lt;br /&gt;
ForeignTripsAllowed_Level_0 = false&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Man kann auch bestimmte Ziele für Nutzer freischalten, die sonst nicht reisen dürfen, oder andere für Nutzer sperren, die normalerweise überall hinreisen können. Siehe [[Hypergrid_Parameters]] für Details.&lt;br /&gt;
&lt;br /&gt;
== Verhindern, dass fremde Nutzer auf den Simulator zugreifen ==&lt;br /&gt;
&lt;br /&gt;
Setze:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[GatekeeperService]&lt;br /&gt;
ForeignAgentsAllowed = false&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies sollte lokalen Nutzern weiterhin Teleporte ins Ausland erlauben.&lt;br /&gt;
&lt;br /&gt;
Man kann auch alle Agenten von bestimmten Quell-Simulatoren über AllowExcept/DisallowExcept auf Whitelist oder Blacklist setzen. Siehe [[Hypergrid_Parameters]] für Details.&lt;br /&gt;
&lt;br /&gt;
== Bestimmte fremde Nutzer sperren ==&lt;br /&gt;
&lt;br /&gt;
Siehe [[Banning Foreign Users in Hypergrid]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Diskussion =&lt;br /&gt;
&lt;br /&gt;
**Hinweis: Dies ist eine historische Diskussion über Inhalte im Hypergrid, nicht über Sicherheitsfragen an sich.**&lt;br /&gt;
&lt;br /&gt;
Es gibt eine weit verbreitete Annahme, dass offene Grids wie OSGrid und neue Grid-Formen wie der Hypergrid inhärent unsicher sind und dass es unmöglich sein wird, eine &amp;quot;warenbasierte&amp;quot; Wirtschaft auf ihnen aufzubauen; nur abgeschottete Systeme (&amp;quot;walled gardens&amp;quot;) können gesichert werden. Dies ist sowohl wahr als auch falsch. Während es im aktuellen Zustand zutrifft, können offene Grids – unabhängig von ihrer Form – so sicher gemacht werden wie das Web. Der erste Schritt dahin ist, die Sicherheitsbedrohungen genau zu definieren und zu klären, wie sie offene/geschlossene Grids (nicht) betreffen. Gehen wir sie konkret durch, um fundierte Lösungen zu entwickeln.&lt;br /&gt;
&lt;br /&gt;
== Bösartige Clients ==&lt;br /&gt;
&lt;br /&gt;
=== CopyBots ===&lt;br /&gt;
&lt;br /&gt;
Jeder kennt den berüchtigten [http://en.wikipedia.org/wiki/CopyBot CopyBot]. Mit Bibliotheken wie [http://www.libsecondlife.org/wiki/Main_Page LibSL] (jetzt OpenMetaverse) oder durch Modifikation bestehender Viewer kann man Clients für OpenSim-Server entwickeln, die unorthodoxe Dinge tun – z.B. das Permissions-System umgehen, um Assets zu kopieren. Bots von Griefers können noch viel Schlimmeres anrichten.&lt;br /&gt;
&lt;br /&gt;
Bösartige Bots sind ein Problem für alle OpenSim-Administratoren, auch in &amp;quot;walled gardens&amp;quot;. Sie können teilweise durch exotechnische Lösungen wie Nutzungsbedingungen oder reale Klagen verhindert werden. Technisch gesehen ist die einzige Möglichkeit, Eindringlinge fernzuhalten, OpenSim hinter einer Firewall zu betreiben – wie bei jeder anderen Client/Server-Software. Falls das für Ihren Fall akzeptabel ist, tun Sie es.&lt;br /&gt;
&lt;br /&gt;
Leider schließen Firewalls auch die Öffentlichkeit aus, und die meisten OpenSim-Betreiber (selbst in &amp;quot;walled gardens&amp;quot;) wollen öffentlich erreichbar sein. In diesem Fall können technische Hürden für Bots ähnlich wie im Web implementiert werden – z.B. Human-Captchas während Login/Teleport. (Dies stoppt nur Bots, keine modifizierten Viewer, die von Menschen bedient werden.)&lt;br /&gt;
&lt;br /&gt;
Jede Hürde verringert das Risiko von Angriffen. Aber bedenken Sie: Ein ausreichend qualifizierter Angreifer wird immer Wege finden, um öffentlich zugängliche OpenSim-Instanzen zu penetrieren – egal ob Hypergrid oder &amp;quot;walled garden&amp;quot;. Das betrifft **alle** mit dem Internet verbundenen Server (Web, OpenSim etc.). Glücklicherweise sind solche Angriffe selten – sonst gäbe es das Web längst nicht mehr.&lt;br /&gt;
&lt;br /&gt;
== Bösartige Hosts ==&lt;br /&gt;
&lt;br /&gt;
=== Aktive Schadhosts ===&lt;br /&gt;
&lt;br /&gt;
Die neue Sicherheitsbedrohung durch Offenheit (die in geschlossenen Grids nicht existiert) ist die Möglichkeit, dass Nutzer Regionen mit bösartigem Code besuchen. Aktuell kann ein Schadhost ernsthafte Schäden an Nutzer-Assets verursachen:&lt;br /&gt;
&lt;br /&gt;
- Der Host erhält Ihre Session-ID und kann Inventory-Items in Ihrem Namen anfordern/kopieren – oder sogar löschen.&lt;br /&gt;
- Selbst ohne direkten Zugriff werden genutzte Items im Regions-Cache gespeichert und können dort persistent gesichert werden.&lt;br /&gt;
&lt;br /&gt;
Es gibt einfache Lösungen nach dem Prinzip &amp;quot;Schutz vor sich selbst&amp;quot;, beschrieben unter [[Hypergrid Inventory Access|hier]].&lt;br /&gt;
&lt;br /&gt;
=== Piraterie ===&lt;br /&gt;
&lt;br /&gt;
Eine weitere Bedrohung betrifft den Handel mit virtuellen Gütern. Wenn Sie etwas in Ihrem Hypergrid-OpenSim verkaufen, erhält der Käufer eine Kopie der Assets auf seinem/ihrem Asset-Server – mit den von Ihnen definierten Permissions. Bei Backend-Zugriff kann der Nutzer diese Permissions jedoch ändern ('''Piraterie'''). (Das gleiche Problem besteht bei Client-Cache-Zugriff – allerdings können so keine Skripte kopiert werden, da diese nur serverseitig interpretiert werden.)&lt;br /&gt;
&lt;br /&gt;
Dies nährt den Glauben, offene Grids seien für virtuelle Wirtschaft ungeeignet. Doch ähnliche Bedenken gab es beim Musikverkauf im Web – und iTunes wurde trotz Piraterie erfolgreich. Wer wird das &amp;quot;iTunes für virtuelle Haare, Skins und Kleidung&amp;quot;?&lt;br /&gt;
&lt;br /&gt;
[[Category:Hypergrid]]&lt;br /&gt;
[[Category:German Translations]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Hypergrid_Security/de</id>
		<title>Hypergrid Security/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Hypergrid_Security/de"/>
				<updated>2025-04-07T12:20:18Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|Hypergrid Security}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Aufgaben =&lt;br /&gt;
&lt;br /&gt;
Dieser Aufgaben-Text befindet sich in Entwicklung und sollte derzeit nicht ohne direkte Tests als verlässlich angesehen werden.&lt;br /&gt;
&lt;br /&gt;
== Verhindern, dass lokale Nutzer Hypergrid-URLs zu fremden Zielen auflösen ==&lt;br /&gt;
&lt;br /&gt;
Setze:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[GridService]&lt;br /&gt;
AllowHypergridMapSearch = false&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Standard ist ebenfalls `false`.  &lt;br /&gt;
&lt;br /&gt;
Sowohl die Hauptkartensuche als auch die Adressleiste nutzen diese Einstellung, um Regions-Adressen aufzulösen. Wenn `false` gesetzt ist, werden keine Versuche unternommen, Hypergrid-Adressen aufzulösen.&lt;br /&gt;
&lt;br /&gt;
Dies verhindert möglicherweise nicht, dass Nutzer über bestehende Hyperlink-Lesezeichen teleportieren, wenn Hypergrid zuvor aktiviert war.&lt;br /&gt;
&lt;br /&gt;
Diese Einstellung sollte theoretisch weiterhin externen Nutzern den Besuch der Installation erlauben.&lt;br /&gt;
&lt;br /&gt;
== Verhindern, dass Nutzer eines bestimmten UserLevels zu fremden Zielen reisen ==&lt;br /&gt;
&lt;br /&gt;
Dies wird pro UserLevel konfiguriert. Um beispielsweise gewöhnlichen lokalen Nutzern (UserLevel 0) Auslandsreisen zu verbieten, setze:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[UserAgentService]&lt;br /&gt;
ForeignTripsAllowed_Level_0 = false&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Man kann auch bestimmte Ziele für Nutzer freischalten, die sonst nicht reisen dürfen, oder andere für Nutzer sperren, die normalerweise überall hinreisen können. Siehe [[Hypergrid_Parameters]] für Details.&lt;br /&gt;
&lt;br /&gt;
== Verhindern, dass fremde Nutzer auf den Simulator zugreifen ==&lt;br /&gt;
&lt;br /&gt;
Setze:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[GatekeeperService]&lt;br /&gt;
ForeignAgentsAllowed = false&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies sollte lokalen Nutzern weiterhin Teleporte ins Ausland erlauben.&lt;br /&gt;
&lt;br /&gt;
Man kann auch alle Agenten von bestimmten Quell-Simulatoren über AllowExcept/DisallowExcept auf Whitelist oder Blacklist setzen. Siehe [[Hypergrid_Parameters]] für Details.&lt;br /&gt;
&lt;br /&gt;
== Bestimmte fremde Nutzer sperren ==&lt;br /&gt;
&lt;br /&gt;
Siehe [[Banning Foreign Users in Hypergrid]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Diskussion =&lt;br /&gt;
&lt;br /&gt;
**Hinweis: Dies ist eine historische Diskussion über Inhalte im Hypergrid, nicht über Sicherheitsfragen an sich.**&lt;br /&gt;
&lt;br /&gt;
Es gibt eine weit verbreitete Annahme, dass offene Grids wie OSGrid und neue Grid-Formen wie der Hypergrid inhärent unsicher sind und dass es unmöglich sein wird, eine &amp;quot;warenbasierte&amp;quot; Wirtschaft auf ihnen aufzubauen; nur abgeschottete Systeme (&amp;quot;walled gardens&amp;quot;) können gesichert werden. Dies ist sowohl wahr als auch falsch. Während es im aktuellen Zustand zutrifft, können offene Grids – unabhängig von ihrer Form – so sicher gemacht werden wie das Web. Der erste Schritt dahin ist, die Sicherheitsbedrohungen genau zu definieren und zu klären, wie sie offene/geschlossene Grids (nicht) betreffen. Gehen wir sie konkret durch, um fundierte Lösungen zu entwickeln.&lt;br /&gt;
&lt;br /&gt;
== Bösartige Clients ==&lt;br /&gt;
&lt;br /&gt;
=== CopyBots ===&lt;br /&gt;
&lt;br /&gt;
Jeder kennt den berüchtigten [http://en.wikipedia.org/wiki/CopyBot CopyBot]. Mit Bibliotheken wie [http://www.libsecondlife.org/wiki/Main_Page LibSL] (jetzt OpenMetaverse) oder durch Modifikation bestehender Viewer kann man Clients für OpenSim-Server entwickeln, die unorthodoxe Dinge tun – z.B. das Permissions-System umgehen, um Assets zu kopieren. Bots von Griefers können noch viel Schlimmeres anrichten.&lt;br /&gt;
&lt;br /&gt;
Bösartige Bots sind ein Problem für alle OpenSim-Administratoren, auch in &amp;quot;walled gardens&amp;quot;. Sie können teilweise durch exotechnische Lösungen wie Nutzungsbedingungen oder reale Klagen verhindert werden. Technisch gesehen ist die einzige Möglichkeit, Eindringlinge fernzuhalten, OpenSim hinter einer Firewall zu betreiben – wie bei jeder anderen Client/Server-Software. Falls das für Ihren Fall akzeptabel ist, tun Sie es.&lt;br /&gt;
&lt;br /&gt;
Leider schließen Firewalls auch die Öffentlichkeit aus, und die meisten OpenSim-Betreiber (selbst in &amp;quot;walled gardens&amp;quot;) wollen öffentlich erreichbar sein. In diesem Fall können technische Hürden für Bots ähnlich wie im Web implementiert werden – z.B. Human-Captchas während Login/Teleport. (Dies stoppt nur Bots, keine modifizierten Viewer, die von Menschen bedient werden.)&lt;br /&gt;
&lt;br /&gt;
Jede Hürde verringert das Risiko von Angriffen. Aber bedenken Sie: Ein ausreichend qualifizierter Angreifer wird immer Wege finden, um öffentlich zugängliche OpenSim-Instanzen zu penetrieren – egal ob Hypergrid oder &amp;quot;walled garden&amp;quot;. Das betrifft **alle** mit dem Internet verbundenen Server (Web, OpenSim etc.). Glücklicherweise sind solche Angriffe selten – sonst gäbe es das Web längst nicht mehr.&lt;br /&gt;
&lt;br /&gt;
== Bösartige Hosts ==&lt;br /&gt;
&lt;br /&gt;
=== Aktive Schadhosts ===&lt;br /&gt;
&lt;br /&gt;
Die neue Sicherheitsbedrohung durch Offenheit (die in geschlossenen Grids nicht existiert) ist die Möglichkeit, dass Nutzer Regionen mit bösartigem Code besuchen. Aktuell kann ein Schadhost ernsthafte Schäden an Nutzer-Assets verursachen:&lt;br /&gt;
&lt;br /&gt;
- Der Host erhält Ihre Session-ID und kann Inventory-Items in Ihrem Namen anfordern/kopieren – oder sogar löschen.&lt;br /&gt;
- Selbst ohne direkten Zugriff werden genutzte Items im Regions-Cache gespeichert und können dort persistent gesichert werden.&lt;br /&gt;
&lt;br /&gt;
Es gibt einfache Lösungen nach dem Prinzip &amp;quot;Schutz vor sich selbst&amp;quot;, beschrieben unter [[Hypergrid Inventory Access|hier]].&lt;br /&gt;
&lt;br /&gt;
=== Piraterie ===&lt;br /&gt;
&lt;br /&gt;
Eine weitere Bedrohung betrifft den Handel mit virtuellen Gütern. Wenn Sie etwas in Ihrem Hypergrid-OpenSim verkaufen, erhält der Käufer eine Kopie der Assets auf seinem/ihrem Asset-Server – mit den von Ihnen definierten Permissions. Bei Backend-Zugriff kann der Nutzer diese Permissions jedoch ändern ('''Piraterie'''). (Das gleiche Problem besteht bei Client-Cache-Zugriff – allerdings können so keine Skripte kopiert werden, da diese nur serverseitig interpretiert werden.)&lt;br /&gt;
&lt;br /&gt;
Dies nährt den Glauben, offene Grids seien für virtuelle Wirtschaft ungeeignet. Doch ähnliche Bedenken gab es beim Musikverkauf im Web – und iTunes wurde trotz Piraterie erfolgreich. Wer wird das &amp;quot;iTunes für virtuelle Haare, Skins und Kleidung&amp;quot;?&lt;br /&gt;
&lt;br /&gt;
[[Category:Hypergrid]]&lt;br /&gt;
[[:Category:German Translations]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Hypergrid_Security/de</id>
		<title>Hypergrid Security/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Hypergrid_Security/de"/>
				<updated>2025-04-07T12:19:26Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|Hypergrid Security}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Aufgaben =&lt;br /&gt;
&lt;br /&gt;
Dieser Aufgaben-Text befindet sich in Entwicklung und sollte derzeit nicht ohne direkte Tests als verlässlich angesehen werden.&lt;br /&gt;
&lt;br /&gt;
== Verhindern, dass lokale Nutzer Hypergrid-URLs zu fremden Zielen auflösen ==&lt;br /&gt;
&lt;br /&gt;
Setze:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[GridService]&lt;br /&gt;
AllowHypergridMapSearch = false&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Standard ist ebenfalls `false`.  &lt;br /&gt;
&lt;br /&gt;
Sowohl die Hauptkartensuche als auch die Adressleiste nutzen diese Einstellung, um Regions-Adressen aufzulösen. Wenn `false` gesetzt ist, werden keine Versuche unternommen, Hypergrid-Adressen aufzulösen.&lt;br /&gt;
&lt;br /&gt;
Dies verhindert möglicherweise nicht, dass Nutzer über bestehende Hyperlink-Lesezeichen teleportieren, wenn Hypergrid zuvor aktiviert war.&lt;br /&gt;
&lt;br /&gt;
Diese Einstellung sollte theoretisch weiterhin externen Nutzern den Besuch der Installation erlauben.&lt;br /&gt;
&lt;br /&gt;
== Verhindern, dass Nutzer eines bestimmten UserLevels zu fremden Zielen reisen ==&lt;br /&gt;
&lt;br /&gt;
Dies wird pro UserLevel konfiguriert. Um beispielsweise gewöhnlichen lokalen Nutzern (UserLevel 0) Auslandsreisen zu verbieten, setze:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[UserAgentService]&lt;br /&gt;
ForeignTripsAllowed_Level_0 = false&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Man kann auch bestimmte Ziele für Nutzer freischalten, die sonst nicht reisen dürfen, oder andere für Nutzer sperren, die normalerweise überall hinreisen können. Siehe [[Hypergrid_Parameters]] für Details.&lt;br /&gt;
&lt;br /&gt;
== Verhindern, dass fremde Nutzer auf den Simulator zugreifen ==&lt;br /&gt;
&lt;br /&gt;
Setze:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[GatekeeperService]&lt;br /&gt;
ForeignAgentsAllowed = false&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies sollte lokalen Nutzern weiterhin Teleporte ins Ausland erlauben.&lt;br /&gt;
&lt;br /&gt;
Man kann auch alle Agenten von bestimmten Quell-Simulatoren über AllowExcept/DisallowExcept auf Whitelist oder Blacklist setzen. Siehe [[Hypergrid_Parameters]] für Details.&lt;br /&gt;
&lt;br /&gt;
== Bestimmte fremde Nutzer sperren ==&lt;br /&gt;
&lt;br /&gt;
Siehe [[Banning Foreign Users in Hypergrid]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Diskussion =&lt;br /&gt;
&lt;br /&gt;
**Hinweis: Dies ist eine historische Diskussion über Inhalte im Hypergrid, nicht über Sicherheitsfragen an sich.**&lt;br /&gt;
&lt;br /&gt;
Es gibt eine weit verbreitete Annahme, dass offene Grids wie OSGrid und neue Grid-Formen wie der Hypergrid inhärent unsicher sind und dass es unmöglich sein wird, eine &amp;quot;warenbasierte&amp;quot; Wirtschaft auf ihnen aufzubauen; nur abgeschottete Systeme (&amp;quot;walled gardens&amp;quot;) können gesichert werden. Dies ist sowohl wahr als auch falsch. Während es im aktuellen Zustand zutrifft, können offene Grids – unabhängig von ihrer Form – so sicher gemacht werden wie das Web. Der erste Schritt dahin ist, die Sicherheitsbedrohungen genau zu definieren und zu klären, wie sie offene/geschlossene Grids (nicht) betreffen. Gehen wir sie konkret durch, um fundierte Lösungen zu entwickeln.&lt;br /&gt;
&lt;br /&gt;
== Bösartige Clients ==&lt;br /&gt;
&lt;br /&gt;
=== CopyBots ===&lt;br /&gt;
&lt;br /&gt;
Jeder kennt den berüchtigten [http://en.wikipedia.org/wiki/CopyBot CopyBot]. Mit Bibliotheken wie [http://www.libsecondlife.org/wiki/Main_Page LibSL] (jetzt OpenMetaverse) oder durch Modifikation bestehender Viewer kann man Clients für OpenSim-Server entwickeln, die unorthodoxe Dinge tun – z.B. das Permissions-System umgehen, um Assets zu kopieren. Bots von Griefers können noch viel Schlimmeres anrichten.&lt;br /&gt;
&lt;br /&gt;
Bösartige Bots sind ein Problem für alle OpenSim-Administratoren, auch in &amp;quot;walled gardens&amp;quot;. Sie können teilweise durch exotechnische Lösungen wie Nutzungsbedingungen oder reale Klagen verhindert werden. Technisch gesehen ist die einzige Möglichkeit, Eindringlinge fernzuhalten, OpenSim hinter einer Firewall zu betreiben – wie bei jeder anderen Client/Server-Software. Falls das für Ihren Fall akzeptabel ist, tun Sie es.&lt;br /&gt;
&lt;br /&gt;
Leider schließen Firewalls auch die Öffentlichkeit aus, und die meisten OpenSim-Betreiber (selbst in &amp;quot;walled gardens&amp;quot;) wollen öffentlich erreichbar sein. In diesem Fall können technische Hürden für Bots ähnlich wie im Web implementiert werden – z.B. Human-Captchas während Login/Teleport. (Dies stoppt nur Bots, keine modifizierten Viewer, die von Menschen bedient werden.)&lt;br /&gt;
&lt;br /&gt;
Jede Hürde verringert das Risiko von Angriffen. Aber bedenken Sie: Ein ausreichend qualifizierter Angreifer wird immer Wege finden, um öffentlich zugängliche OpenSim-Instanzen zu penetrieren – egal ob Hypergrid oder &amp;quot;walled garden&amp;quot;. Das betrifft **alle** mit dem Internet verbundenen Server (Web, OpenSim etc.). Glücklicherweise sind solche Angriffe selten – sonst gäbe es das Web längst nicht mehr.&lt;br /&gt;
&lt;br /&gt;
== Bösartige Hosts ==&lt;br /&gt;
&lt;br /&gt;
=== Aktive Schadhosts ===&lt;br /&gt;
&lt;br /&gt;
Die neue Sicherheitsbedrohung durch Offenheit (die in geschlossenen Grids nicht existiert) ist die Möglichkeit, dass Nutzer Regionen mit bösartigem Code besuchen. Aktuell kann ein Schadhost ernsthafte Schäden an Nutzer-Assets verursachen:&lt;br /&gt;
&lt;br /&gt;
- Der Host erhält Ihre Session-ID und kann Inventory-Items in Ihrem Namen anfordern/kopieren – oder sogar löschen.&lt;br /&gt;
- Selbst ohne direkten Zugriff werden genutzte Items im Regions-Cache gespeichert und können dort persistent gesichert werden.&lt;br /&gt;
&lt;br /&gt;
Es gibt einfache Lösungen nach dem Prinzip &amp;quot;Schutz vor sich selbst&amp;quot;, beschrieben unter [[Hypergrid Inventory Access|hier]].&lt;br /&gt;
&lt;br /&gt;
=== Piraterie ===&lt;br /&gt;
&lt;br /&gt;
Eine weitere Bedrohung betrifft den Handel mit virtuellen Gütern. Wenn Sie etwas in Ihrem Hypergrid-OpenSim verkaufen, erhält der Käufer eine Kopie der Assets auf seinem/ihrem Asset-Server – mit den von Ihnen definierten Permissions. Bei Backend-Zugriff kann der Nutzer diese Permissions jedoch ändern ('''Piraterie'''). (Das gleiche Problem besteht bei Client-Cache-Zugriff – allerdings können so keine Skripte kopiert werden, da diese nur serverseitig interpretiert werden.)&lt;br /&gt;
&lt;br /&gt;
Dies nährt den Glauben, offene Grids seien für virtuelle Wirtschaft ungeeignet. Doch ähnliche Bedenken gab es beim Musikverkauf im Web – und iTunes wurde trotz Piraterie erfolgreich. Wer wird das &amp;quot;iTunes für virtuelle Haare, Skins und Kleidung&amp;quot;?&lt;br /&gt;
&lt;br /&gt;
[[Category:Hypergrid]]&lt;br /&gt;
[[:Category:German Translations | Deutsche Seiten]]&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Hypergrid_Security/de</id>
		<title>Hypergrid Security/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Hypergrid_Security/de"/>
				<updated>2025-04-07T12:18:46Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: Created page with &amp;quot;{{Quicklinks}} &amp;lt;br /&amp;gt;  = Aufgaben =  Dieser Aufgaben-Text befindet sich in Entwicklung und sollte derzeit nicht ohne direkte Tests als verlässlich angesehen werden.  == Verhi...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Aufgaben =&lt;br /&gt;
&lt;br /&gt;
Dieser Aufgaben-Text befindet sich in Entwicklung und sollte derzeit nicht ohne direkte Tests als verlässlich angesehen werden.&lt;br /&gt;
&lt;br /&gt;
== Verhindern, dass lokale Nutzer Hypergrid-URLs zu fremden Zielen auflösen ==&lt;br /&gt;
&lt;br /&gt;
Setze:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[GridService]&lt;br /&gt;
AllowHypergridMapSearch = false&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Standard ist ebenfalls `false`.  &lt;br /&gt;
&lt;br /&gt;
Sowohl die Hauptkartensuche als auch die Adressleiste nutzen diese Einstellung, um Regions-Adressen aufzulösen. Wenn `false` gesetzt ist, werden keine Versuche unternommen, Hypergrid-Adressen aufzulösen.&lt;br /&gt;
&lt;br /&gt;
Dies verhindert möglicherweise nicht, dass Nutzer über bestehende Hyperlink-Lesezeichen teleportieren, wenn Hypergrid zuvor aktiviert war.&lt;br /&gt;
&lt;br /&gt;
Diese Einstellung sollte theoretisch weiterhin externen Nutzern den Besuch der Installation erlauben.&lt;br /&gt;
&lt;br /&gt;
== Verhindern, dass Nutzer eines bestimmten UserLevels zu fremden Zielen reisen ==&lt;br /&gt;
&lt;br /&gt;
Dies wird pro UserLevel konfiguriert. Um beispielsweise gewöhnlichen lokalen Nutzern (UserLevel 0) Auslandsreisen zu verbieten, setze:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[UserAgentService]&lt;br /&gt;
ForeignTripsAllowed_Level_0 = false&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Man kann auch bestimmte Ziele für Nutzer freischalten, die sonst nicht reisen dürfen, oder andere für Nutzer sperren, die normalerweise überall hinreisen können. Siehe [[Hypergrid_Parameters]] für Details.&lt;br /&gt;
&lt;br /&gt;
== Verhindern, dass fremde Nutzer auf den Simulator zugreifen ==&lt;br /&gt;
&lt;br /&gt;
Setze:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[GatekeeperService]&lt;br /&gt;
ForeignAgentsAllowed = false&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies sollte lokalen Nutzern weiterhin Teleporte ins Ausland erlauben.&lt;br /&gt;
&lt;br /&gt;
Man kann auch alle Agenten von bestimmten Quell-Simulatoren über AllowExcept/DisallowExcept auf Whitelist oder Blacklist setzen. Siehe [[Hypergrid_Parameters]] für Details.&lt;br /&gt;
&lt;br /&gt;
== Bestimmte fremde Nutzer sperren ==&lt;br /&gt;
&lt;br /&gt;
Siehe [[Banning Foreign Users in Hypergrid]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Diskussion =&lt;br /&gt;
&lt;br /&gt;
**Hinweis: Dies ist eine historische Diskussion über Inhalte im Hypergrid, nicht über Sicherheitsfragen an sich.**&lt;br /&gt;
&lt;br /&gt;
Es gibt eine weit verbreitete Annahme, dass offene Grids wie OSGrid und neue Grid-Formen wie der Hypergrid inhärent unsicher sind und dass es unmöglich sein wird, eine &amp;quot;warenbasierte&amp;quot; Wirtschaft auf ihnen aufzubauen; nur abgeschottete Systeme (&amp;quot;walled gardens&amp;quot;) können gesichert werden. Dies ist sowohl wahr als auch falsch. Während es im aktuellen Zustand zutrifft, können offene Grids – unabhängig von ihrer Form – so sicher gemacht werden wie das Web. Der erste Schritt dahin ist, die Sicherheitsbedrohungen genau zu definieren und zu klären, wie sie offene/geschlossene Grids (nicht) betreffen. Gehen wir sie konkret durch, um fundierte Lösungen zu entwickeln.&lt;br /&gt;
&lt;br /&gt;
== Bösartige Clients ==&lt;br /&gt;
&lt;br /&gt;
=== CopyBots ===&lt;br /&gt;
&lt;br /&gt;
Jeder kennt den berüchtigten [http://en.wikipedia.org/wiki/CopyBot CopyBot]. Mit Bibliotheken wie [http://www.libsecondlife.org/wiki/Main_Page LibSL] (jetzt OpenMetaverse) oder durch Modifikation bestehender Viewer kann man Clients für OpenSim-Server entwickeln, die unorthodoxe Dinge tun – z.B. das Permissions-System umgehen, um Assets zu kopieren. Bots von Griefers können noch viel Schlimmeres anrichten.&lt;br /&gt;
&lt;br /&gt;
Bösartige Bots sind ein Problem für alle OpenSim-Administratoren, auch in &amp;quot;walled gardens&amp;quot;. Sie können teilweise durch exotechnische Lösungen wie Nutzungsbedingungen oder reale Klagen verhindert werden. Technisch gesehen ist die einzige Möglichkeit, Eindringlinge fernzuhalten, OpenSim hinter einer Firewall zu betreiben – wie bei jeder anderen Client/Server-Software. Falls das für Ihren Fall akzeptabel ist, tun Sie es.&lt;br /&gt;
&lt;br /&gt;
Leider schließen Firewalls auch die Öffentlichkeit aus, und die meisten OpenSim-Betreiber (selbst in &amp;quot;walled gardens&amp;quot;) wollen öffentlich erreichbar sein. In diesem Fall können technische Hürden für Bots ähnlich wie im Web implementiert werden – z.B. Human-Captchas während Login/Teleport. (Dies stoppt nur Bots, keine modifizierten Viewer, die von Menschen bedient werden.)&lt;br /&gt;
&lt;br /&gt;
Jede Hürde verringert das Risiko von Angriffen. Aber bedenken Sie: Ein ausreichend qualifizierter Angreifer wird immer Wege finden, um öffentlich zugängliche OpenSim-Instanzen zu penetrieren – egal ob Hypergrid oder &amp;quot;walled garden&amp;quot;. Das betrifft **alle** mit dem Internet verbundenen Server (Web, OpenSim etc.). Glücklicherweise sind solche Angriffe selten – sonst gäbe es das Web längst nicht mehr.&lt;br /&gt;
&lt;br /&gt;
== Bösartige Hosts ==&lt;br /&gt;
&lt;br /&gt;
=== Aktive Schadhosts ===&lt;br /&gt;
&lt;br /&gt;
Die neue Sicherheitsbedrohung durch Offenheit (die in geschlossenen Grids nicht existiert) ist die Möglichkeit, dass Nutzer Regionen mit bösartigem Code besuchen. Aktuell kann ein Schadhost ernsthafte Schäden an Nutzer-Assets verursachen:&lt;br /&gt;
&lt;br /&gt;
- Der Host erhält Ihre Session-ID und kann Inventory-Items in Ihrem Namen anfordern/kopieren – oder sogar löschen.&lt;br /&gt;
- Selbst ohne direkten Zugriff werden genutzte Items im Regions-Cache gespeichert und können dort persistent gesichert werden.&lt;br /&gt;
&lt;br /&gt;
Es gibt einfache Lösungen nach dem Prinzip &amp;quot;Schutz vor sich selbst&amp;quot;, beschrieben unter [[Hypergrid Inventory Access|hier]].&lt;br /&gt;
&lt;br /&gt;
=== Piraterie ===&lt;br /&gt;
&lt;br /&gt;
Eine weitere Bedrohung betrifft den Handel mit virtuellen Gütern. Wenn Sie etwas in Ihrem Hypergrid-OpenSim verkaufen, erhält der Käufer eine Kopie der Assets auf seinem/ihrem Asset-Server – mit den von Ihnen definierten Permissions. Bei Backend-Zugriff kann der Nutzer diese Permissions jedoch ändern ('''Piraterie'''). (Das gleiche Problem besteht bei Client-Cache-Zugriff – allerdings können so keine Skripte kopiert werden, da diese nur serverseitig interpretiert werden.)&lt;br /&gt;
&lt;br /&gt;
Dies nährt den Glauben, offene Grids seien für virtuelle Wirtschaft ungeeignet. Doch ähnliche Bedenken gab es beim Musikverkauf im Web – und iTunes wurde trotz Piraterie erfolgreich. Wer wird das &amp;quot;iTunes für virtuelle Haare, Skins und Kleidung&amp;quot;?&lt;br /&gt;
&lt;br /&gt;
[[Category:Hypergrid]]&lt;br /&gt;
[[:Category:German Translations | Deutsche Seiten]]&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/RemoteAdmin/de</id>
		<title>RemoteAdmin/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/RemoteAdmin/de"/>
				<updated>2025-04-02T17:28:23Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: /* Python 3.6 RemoteAdmin nur teilweise getestet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|RemoteAdmin}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Einführung ==&lt;br /&gt;
&lt;br /&gt;
RemoteAdmin ist eine Schnittstelle für Simulatoren, die es ermöglicht, verschiedene Operationen von außerhalb des Simulators auszuführen. '''Operationen, die sich auf den Simulator selbst beziehen (z. B. Teleportation eines Benutzers), sind immer verfügbar. Diejenigen, die sich auf Grid-Dienste beziehen (Benutzererstellung und -aktualisierung), sind nur im Standalone-Modus verfügbar. Im Grid-Modus muss man stattdessen ROBUST-Level [[UserManipulation]]-Fähigkeiten verwenden.'''&lt;br /&gt;
&lt;br /&gt;
== Einrichtung der Remote-Admin-Schnittstelle ==&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte die Remote-Admin-Schnittstelle aktiviert werden. Füge dazu einfach die folgenden Zeilen in deine OpenSim.ini-Datei ein. Der Port sollte auf einen von Null verschiedenen Wert gesetzt werden, damit RemoteAdmin auf einem anderen Port läuft.&lt;br /&gt;
&lt;br /&gt;
Seit r/16843 kannst du den Zugriff auf RemoteAdmin auf bestimmte IP-Adressen beschränken, indem du die optionale access_ip_addresses verwendest. Du kannst alle IPs auflisten, die Zugriff auf RemoteAdmin haben sollen, indem du sie durch ein Komma trennst. Falls access_ip_addresses nicht gesetzt ist, können alle IP-Adressen auf RemoteAdmin zugreifen.&lt;br /&gt;
&lt;br /&gt;
Du kannst auch einen anderen Port für den XMLRPCAdmin-Befehlshörer festlegen, der sich vom Standard-Simulator-HTTP-Port unterscheidet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
  [RemoteAdmin]&lt;br /&gt;
    ;; This is the remote admin module, which uses XMLRPC requests to&lt;br /&gt;
    ;; manage regions from a web interface.&lt;br /&gt;
  &lt;br /&gt;
    ;# {enabled} {} {Enable the remote admin interface?} {true false} false&lt;br /&gt;
    enabled = true&lt;br /&gt;
  &lt;br /&gt;
    ;# {port} {enabled:true} {Port to use for the remote admin interface? (0 = default)} {} 0&lt;br /&gt;
    ;; Set this to a nonzero value to have remote admin use a different port&lt;br /&gt;
    port = 10000&lt;br /&gt;
  &lt;br /&gt;
    ;# {access_password} {enabled:true} {Password for the remote admin interface} {}&lt;br /&gt;
    ;; This password is required to make any XMLRPC call (should be set as&lt;br /&gt;
    ;; the &amp;quot;password&amp;quot; parameter)&lt;br /&gt;
    access_password = &amp;quot;passwd123&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
    ;# {access_ip_addresses} {enabled:true} {List the IP addresses allowed to call RemoteAdmin?} {}&lt;br /&gt;
    ;; List the IP addresses allowed to call RemoteAdmin&lt;br /&gt;
    ;; If access_ip_addresses isn't set, then all IP addresses can access RemoteAdmin.&lt;br /&gt;
    ;; access_ip_addresses = 0.0.0.0, 0.0.0.0 ...&lt;br /&gt;
    ; access_ip_addresses =&lt;br /&gt;
  &lt;br /&gt;
    ;# {create_region_enable_voice} {enabled:true} {Enable voice for newly created regions?} {true false} false&lt;br /&gt;
    ;; set this variable to true if you want the create_region XmlRpc&lt;br /&gt;
    ;; call to unconditionally enable voice on all parcels for a newly&lt;br /&gt;
    ;; created region&lt;br /&gt;
    ; create_region_enable_voice = false&lt;br /&gt;
  &lt;br /&gt;
    ;# {create_region_public} {enabled:true} {Make newly created regions public?} {true false} false&lt;br /&gt;
    ;; set this variable to false if you want the create_region XmlRpc&lt;br /&gt;
    ;; call to create all regions as private per default (can be&lt;br /&gt;
    ;; overridden in the XmlRpc call)&lt;br /&gt;
    ; create_region_public = false&lt;br /&gt;
  &lt;br /&gt;
    ;# {enabled_methods} {enabled:true} {List of methods to allow, separated by |} {} all&lt;br /&gt;
    ;; enable only those methods you deem to be appropriate using a | delimited&lt;br /&gt;
    ;; whitelist.&lt;br /&gt;
    ;; For example:&lt;br /&gt;
    ;; enabled_methods = admin_broadcast|admin_save_oar|admin_save_xml&lt;br /&gt;
    ;; if this parameter is not specified but enabled = true, all methods&lt;br /&gt;
    ;; will be available&lt;br /&gt;
    enabled_methods = all&lt;br /&gt;
  &lt;br /&gt;
    ;; specify the default appearance for an avatar created through the remote&lt;br /&gt;
    ;; admin interface&lt;br /&gt;
    ;; This will only take effect is the file specified by the&lt;br /&gt;
    ;; default_appearance setting below exists&lt;br /&gt;
    ; default_male = Default Male&lt;br /&gt;
    ; default_female = Default Female&lt;br /&gt;
  &lt;br /&gt;
    ;; Update appearance copies inventory items and wearables of default&lt;br /&gt;
    ;; avatars. if this value is false, just worn assets are copied to the&lt;br /&gt;
    ;; Clothes folder; if true, all Clothes and Bodyparts subfolders are copied.&lt;br /&gt;
    ;; The receiver will wear the same items the default avatar did wear.&lt;br /&gt;
    ; copy_folders = false&lt;br /&gt;
  &lt;br /&gt;
    ;; Path to default appearance XML file that specifies the look of the&lt;br /&gt;
    ;; default avatars&lt;br /&gt;
    ; default_appearance = default_appearance.xml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Siehe OpenSim.ini.example im opensim/bin/ Verzeichnis für weitere Details.&lt;br /&gt;
&lt;br /&gt;
== PHP Beispiele ==&lt;br /&gt;
&lt;br /&gt;
RemoteAdminTest.php (ACHTUNG: $params nicht $parameters BEACHTEN!)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
// Dieses Beispiel gibt eine Meldung heraus und fährt OpenSim herunter&lt;br /&gt;
//&lt;br /&gt;
// admin_broadcast ist das kommando für Nachrichten&lt;br /&gt;
// $params hier wird die Meldung hineingeschrieben&lt;br /&gt;
// &lt;br /&gt;
// Das Kommando admin_shutdown fährt OpenSim herunter&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
include('RemoteAdmin.php'); // RemoteAdmin.php Ist der Name der PHP-Klasse&lt;br /&gt;
&lt;br /&gt;
// Instanzieren der Klasse (IP oder Adresse, Port, Passwort)&lt;br /&gt;
$myRA = new RemoteAdmin('127.0.0.1', 9000, 'secret');&lt;br /&gt;
&lt;br /&gt;
// RemoteAdmin-Befehle ausführen&lt;br /&gt;
$params = array('message' =&amp;gt; 'Diese Nachricht wird an alle Regionen des OpenSimulators gesendet!');&lt;br /&gt;
&lt;br /&gt;
$myRA-&amp;gt;SendCommand('admin_broadcast', $params);&lt;br /&gt;
&lt;br /&gt;
// Wenn für einen RemoteAdmin-Befehl keine Parameter benötigt, &lt;br /&gt;
// müssen Sie den zweiten Parameter in der Funktion SendCommand nicht angeben.&lt;br /&gt;
$myRA-&amp;gt;SendCommand('admin_shutdown'); &lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RemoteAdmin.php&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	&lt;br /&gt;
/***********************************************************************&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
Copyright (c) 2008, The New World Grid Regents http://www.newworldgrid.com and Contributors &lt;br /&gt;
All rights reserved.&lt;br /&gt;
&lt;br /&gt;
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:&lt;br /&gt;
&lt;br /&gt;
	* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.&lt;br /&gt;
	* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer &lt;br /&gt;
	in the documentation and/or other materials provided with the distribution.&lt;br /&gt;
	* Neither the name of the New World Grid nor the names of its contributors may be used to endorse or promote products derived &lt;br /&gt;
	from this software without specific prior written permission.&lt;br /&gt;
&lt;br /&gt;
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &amp;quot;AS IS&amp;quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, &lt;br /&gt;
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. &lt;br /&gt;
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, &lt;br /&gt;
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; &lt;br /&gt;
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE &lt;br /&gt;
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
***********************************************************************/&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	// How to instantiate a RemoteAdmin object ?&lt;br /&gt;
	// $myremoteadmin = new RemoteAdmin(&amp;quot;mySimulatorURL&amp;quot;, Port, &amp;quot;secret password&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	// How to send commands to remoteadmin plugin ?&lt;br /&gt;
	// $myremoteadmin-&amp;gt;SendCommand('admin_broadcast', array('message' =&amp;gt; 'Message to broadcast to all regions'));&lt;br /&gt;
	// $myremoteadmin-&amp;gt;SendCommand('admin_shutdown');&lt;br /&gt;
	// Commands like admin_shutdown don't need params, so you can left the second SendCommand functino param empty ;)&lt;br /&gt;
	&lt;br /&gt;
	// Example for error handling&lt;br /&gt;
	// &lt;br /&gt;
	// include('classes/RemoteAdmin.php');&lt;br /&gt;
	// $RA = new RemoteAdmin('localhost', 9000, 'secret');&lt;br /&gt;
	// $retour = $RA-&amp;gt;SendCommand('admin_shutdown');&lt;br /&gt;
	// if ($retour === FALSE)&lt;br /&gt;
	// {&lt;br /&gt;
	// 	echo 'ERROR';&lt;br /&gt;
	// }&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	class RemoteAdmin&lt;br /&gt;
	{&lt;br /&gt;
		&lt;br /&gt;
		function RemoteAdmin($sURL, $sPort, $pass)&lt;br /&gt;
		{&lt;br /&gt;
			&lt;br /&gt;
			$this-&amp;gt;simulatorURL = $sURL;		// String&lt;br /&gt;
			$this-&amp;gt;simulatorPort = $sPort;	// Integer&lt;br /&gt;
			$this-&amp;gt;password = $pass;&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		function SendCommand($command, $params=array())&lt;br /&gt;
		{&lt;br /&gt;
			&lt;br /&gt;
			$paramsNames = array_keys($params);&lt;br /&gt;
			$paramsValues = array_values($params);&lt;br /&gt;
			&lt;br /&gt;
			// Building the XML data to pass to RemoteAdmin through XML-RPC ;)&lt;br /&gt;
			&lt;br /&gt;
			$xml = '&amp;lt;methodCall&amp;gt;&lt;br /&gt;
						&amp;lt;methodName&amp;gt;' . htmlspecialchars($command) . '&amp;lt;/methodName&amp;gt;&lt;br /&gt;
						&amp;lt;params&amp;gt;&lt;br /&gt;
							&amp;lt;param&amp;gt;&lt;br /&gt;
								&amp;lt;value&amp;gt;&lt;br /&gt;
									&amp;lt;struct&amp;gt;&lt;br /&gt;
										&amp;lt;member&amp;gt;&lt;br /&gt;
											&amp;lt;name&amp;gt;password&amp;lt;/name&amp;gt;&lt;br /&gt;
											&amp;lt;value&amp;gt;&amp;lt;string&amp;gt;' . htmlspecialchars($this-&amp;gt;password) . '&amp;lt;/string&amp;gt;&amp;lt;/value&amp;gt;&lt;br /&gt;
										&amp;lt;/member&amp;gt;';&lt;br /&gt;
			if (count($params) != 0)&lt;br /&gt;
			{&lt;br /&gt;
				&lt;br /&gt;
				for ($p = 0; $p &amp;lt; count($params); $p++)&lt;br /&gt;
				{&lt;br /&gt;
					&lt;br /&gt;
					$xml .= '&amp;lt;member&amp;gt;&amp;lt;name&amp;gt;' . htmlspecialchars($paramsNames[$p]) . '&amp;lt;/name&amp;gt;';&lt;br /&gt;
					$xml .= '&amp;lt;value&amp;gt;' . htmlspecialchars($paramsValues[$p]) . '&amp;lt;/value&amp;gt;&amp;lt;/member&amp;gt;';&lt;br /&gt;
					&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
									&lt;br /&gt;
			$xml .= '				&amp;lt;/struct&amp;gt;&lt;br /&gt;
								&amp;lt;/value&amp;gt;&lt;br /&gt;
							&amp;lt;/param&amp;gt;&lt;br /&gt;
						&amp;lt;/params&amp;gt;&lt;br /&gt;
					&amp;lt;/methodCall&amp;gt;';&lt;br /&gt;
				&lt;br /&gt;
			//&lt;br /&gt;
			// echo $xml;&lt;br /&gt;
			//&lt;br /&gt;
				&lt;br /&gt;
					&lt;br /&gt;
			// Now building headers and sending the data ;)&lt;br /&gt;
			$host = $this-&amp;gt;simulatorURL;&lt;br /&gt;
			$port = $this-&amp;gt;simulatorPort;&lt;br /&gt;
			$timeout = 5; // Timeout in seconds&lt;br /&gt;
			&lt;br /&gt;
			error_reporting(0);&lt;br /&gt;
			&lt;br /&gt;
			$fp = fsockopen($host, $port, $errno, $errstr, $timeout);&lt;br /&gt;
			if (!$fp)&lt;br /&gt;
			{&lt;br /&gt;
				return FALSE; // If contacting host timeouts or impossible to create the socket, the method returns FALSE&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				fputs($fp, &amp;quot;POST / HTTP/1.1\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, &amp;quot;Host: $host\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, &amp;quot;Content-type: text/xml\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, &amp;quot;Content-length: &amp;quot;. strlen($xml) .&amp;quot;\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, &amp;quot;Connection: close\r\n\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, $xml);&lt;br /&gt;
				$res = &amp;quot;&amp;quot;;&lt;br /&gt;
				while(!feof($fp)) {&lt;br /&gt;
					$res .= fgets($fp, 128);&lt;br /&gt;
				}&lt;br /&gt;
				fclose($fp);&lt;br /&gt;
				$response = substr($res, strpos($res, &amp;quot;\r\n\r\n&amp;quot;));;&lt;br /&gt;
						&lt;br /&gt;
				// Now parsing the XML response from RemoteAdmin ;)&lt;br /&gt;
				&lt;br /&gt;
				$result = array();&lt;br /&gt;
				if (preg_match_all('#&amp;lt;name&amp;gt;(.+)&amp;lt;/name&amp;gt;&amp;lt;value&amp;gt;&amp;lt;(string|int)&amp;gt;(.*)&amp;lt;/\2&amp;gt;&amp;lt;/value&amp;gt;#U', $response, $regs, PREG_SET_ORDER)) {&lt;br /&gt;
				  foreach($regs as $key=&amp;gt;$val) {&lt;br /&gt;
					$result[$val[1]] = $val[3];&lt;br /&gt;
				  }&lt;br /&gt;
				}&lt;br /&gt;
				return $result;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
		&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Python 3.6 Beispiele ==&lt;br /&gt;
&lt;br /&gt;
=== Python 3.6 Beispiel - admin_broadcast -  ===&lt;br /&gt;
&lt;br /&gt;
Dieser Python 3.6 Beitrag ist ein User Projekt, es wird kein Support über die Admins geben.&lt;br /&gt;
&lt;br /&gt;
Bitte seit vorsichtig, ich schließe jede Gewährleistung aus.&lt;br /&gt;
&lt;br /&gt;
Ohne Programmierkenntnisse oder unsachgemäßer Anwendung, kann es zu Schäden am OpenSimulator oder/und dem Betriebssystem kommen.&lt;br /&gt;
&lt;br /&gt;
Faustregel: Wenn ihr nicht sicher seit, ob ihr gesichert habt, dann sichert.&lt;br /&gt;
&lt;br /&gt;
Dies ist zuletzt getestet am 23.04.2018 mit Python 3.6.3 auf Windows 10 und Ubuntu Server 17.10.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python3&lt;br /&gt;
 &lt;br /&gt;
# admin_broadcast senden einer Nachricht an alle in einer Region.&lt;br /&gt;
# Python 3.6 - 21.04.2018 by Manfred Aabye&lt;br /&gt;
 &lt;br /&gt;
# Module laden&lt;br /&gt;
import xmlrpc.client &lt;br /&gt;
 &lt;br /&gt;
# Information&lt;br /&gt;
print('---------------------------------------------------------------------')&lt;br /&gt;
print('Setup: Opensim.ini - Del ; - ConsoleUser -  ConsolePass')&lt;br /&gt;
print('---------------------------------------------------------------------')&lt;br /&gt;
print('Beispiel:')&lt;br /&gt;
print('---------------------------------------------------------------------')&lt;br /&gt;
print('SimulatorAdress = http://127.0.0.1:9000/ or http://myserver.com:9000/')&lt;br /&gt;
print('ConsoleUser = Test')&lt;br /&gt;
print('ConsolePass = secret')&lt;br /&gt;
print('RegionMessage = Dies ist ein toller Text an einem tollen Tag.')&lt;br /&gt;
print('---------------------------------------------------------------------')&lt;br /&gt;
&lt;br /&gt;
# Abfragen&lt;br /&gt;
SimulatorAdress = input('SimulatorAdress:')&lt;br /&gt;
ConsoleUser = input('ConsoleUser:')&lt;br /&gt;
ConsolePass = input('ConsolePass:')&lt;br /&gt;
RegionMessage = input('RegionMessage:')&lt;br /&gt;
# Eingabe kann X Belibig geaendert werden RegionMessage = input('RegionMessage:') - X_Belibig = input('geben sie etwas fuer X_Belibig ein:')&lt;br /&gt;
# X_Belibig ist die Speicherstelle von input, der Text innerhalb der Klammern ist nur ein Text.&lt;br /&gt;
 &lt;br /&gt;
# Funktion admin_broadcast&lt;br /&gt;
def admin_broadcast():&lt;br /&gt;
    # Server Initialisieren &lt;br /&gt;
    Simulator = xmlrpc.client.Server(SimulatorAdress) &lt;br /&gt;
    # Password und Nachricht senden RegionMessage. Hier funktionieren auch alle anderen admin_ Befehle.&lt;br /&gt;
    # Bitte nicht vergessen auch die Eingabe zu aendern&lt;br /&gt;
    Simulator.admin_broadcast({'password': ConsolePass, 'message': RegionMessage})&lt;br /&gt;
 &lt;br /&gt;
# admin_broadcast Aufruf dieser kann nun an irgendeiner stelle aufgerufen werden. &lt;br /&gt;
admin_broadcast()&lt;br /&gt;
 &lt;br /&gt;
# Ende admin_broadcast&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python 3.6 RemoteAdmin nur teilweise getestet ===&lt;br /&gt;
&lt;br /&gt;
Dies basiert auf dem Python 3.6 Beispiel - admin_broadcast – und soll die Erweiterung/Veränderung des source vereinfachen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    # Agent Management&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_teleport_agent({'password':ConsolePass,'agent_first_name':agent_first_name,'agent_last_name':agent_last_name,'region_name':region_name, 'pos_x':pos_x, 'pos_y':pos_y})&lt;br /&gt;
    Simulator.admin_get_agents({'password':ConsolePass,'region_name':region_name,'Regions-ID':Regions-ID})&lt;br /&gt;
&lt;br /&gt;
    # Benutzerkontenverwaltung&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_create_user({'password':ConsolePass,'user_firstname':user_firstname,'user_lastname':user_lastname,'user_password':user_password,'start_region_x':start_region_x,'start_region_y':start_region_y,'user_email':user_email})&lt;br /&gt;
    # Simulator.admin_create_user_email dies ist jetzt in admin_create_user enthalten.&lt;br /&gt;
    Simulator.admin_exists_user({'password':ConsolePass,'user_firstname':user_firstname,'user_lastname':user_lastname})&lt;br /&gt;
    Simulator.admin_update_user({'password':ConsolePass,'user_firstname':user_firstname,'user_lastname':user_lastname})&lt;br /&gt;
    Simulator.admin_authenticate_user({'password':ConsolePass,'user_firstname':user_firstname,'user_lastname':user_lastname,'user_password':user_password,'token_lifetime':token_lifetime})&lt;br /&gt;
&lt;br /&gt;
    # Region Management&lt;br /&gt;
&lt;br /&gt;
    Simulator.Simulator.admin_broadcast({'password': ConsolePass, 'message': RegionMessage})&lt;br /&gt;
    Simulator.admin_close_region({'password':ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_create_region({'password':ConsolePass,'region_name':region_name,'listen_ip':listen_ip,'listen_port':listen_port,'external_address':external_address,'region_x':region_x,'region_y':region_y,'estate_name':estate_name})&lt;br /&gt;
    Simulator.admin_delete_region({'password':ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_modify_region({'password':ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_region_query({'password':ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_restart({'password':ConsolePass,'region_id':region_id})&lt;br /&gt;
    Simulator.admin_shutdown({'password':ConsolePass,'milliseconds':milliseconds})&lt;br /&gt;
&lt;br /&gt;
    # Region Dateiverwaltung&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_load_heightmap({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_load_oar({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_load_xml({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_save_heightmap({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_save_oar({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_save_xml({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
&lt;br /&gt;
    # Region Zugangsmanagement&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_acl_list({'password': ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_acl_clear({'password': ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_acl_add({'password': ConsolePass,'region_name':region_name,'users':users})&lt;br /&gt;
    Simulator.admin_acl_remove({'password': ConsolePass,'region_name':region_name,'users':users})&lt;br /&gt;
&lt;br /&gt;
    # Estate Immobilienverwaltung&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_estate_reload({'password':ConsolePass})&lt;br /&gt;
&lt;br /&gt;
    # Administrationskonsole&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_console_command({'password':ConsolePass,'console_command':console_command})&lt;br /&gt;
&lt;br /&gt;
    # Verschiedenes &lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_dialog({'password': ConsolePass, 'message': RegionMessage})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RemoteAdmin Befehle ==&lt;br /&gt;
&lt;br /&gt;
Alle Befehlsparameter die UUID einer Region nutzen &amp;quot;region_id&amp;quot; als Parameter.&lt;br /&gt;
&lt;br /&gt;
=== Agentenverwaltung ===&lt;br /&gt;
*[[Remoteadmin:admin teleport agent|admin_teleport_agent]]&lt;br /&gt;
*[[Remoteadmin:admin get agents|admin_get_agents]]&lt;br /&gt;
&lt;br /&gt;
=== Benutzerkontenverwaltung ===&lt;br /&gt;
*[[RemoteAdmin:admin create user|admin_create_user]] &lt;br /&gt;
*[[RemoteAdmin:admin create user email|admin_create_user_email]] &lt;br /&gt;
*[[RemoteAdmin:admin exists user|admin_exists_user]] &lt;br /&gt;
*[[RemoteAdmin:admin update user|admin_update_user]]&lt;br /&gt;
*[[RemoteAdmin:admin authenticate user|admin_authenticate_user]]&lt;br /&gt;
&lt;br /&gt;
=== Objektverwaltung ===&lt;br /&gt;
&lt;br /&gt;
=== Parzellenverwaltung ===&lt;br /&gt;
&lt;br /&gt;
=== Regionenverwaltung ===&lt;br /&gt;
*[[RemoteAdmin:admin broadcast|admin_broadcast]] &lt;br /&gt;
*[[RemoteAdmin:admin close region|admin_close_region]] &lt;br /&gt;
*[[RemoteAdmin:admin create region|admin_create_region]] &lt;br /&gt;
*[[RemoteAdmin:admin delete region|admin_delete_region]] &lt;br /&gt;
*[[RemoteAdmin:admin modify region|admin_modify_region]] &lt;br /&gt;
*[[RemoteAdmin:admin region query|admin_region_query]] &lt;br /&gt;
*[[RemoteAdmin:admin restart|admin_restart]] &lt;br /&gt;
*[[RemoteAdmin:admin shutdown|admin_shutdown]] &lt;br /&gt;
&lt;br /&gt;
=== Regionsdateiverwaltung ===&lt;br /&gt;
* [[RemoteAdmin:admin load heightmap|admin_load_heightmap]]&lt;br /&gt;
* [[RemoteAdmin:admin load oar|admin_load_oar]] &lt;br /&gt;
* [[RemoteAdmin:admin load xml|admin_load_xml]] &lt;br /&gt;
* [[RemoteAdmin:admin save heightmap|admin_save_heightmap]] &lt;br /&gt;
* [[RemoteAdmin:admin save oar|admin_save_oar]] &lt;br /&gt;
* [[RemoteAdmin:admin save xml|admin_save_xml]]&lt;br /&gt;
&lt;br /&gt;
=== Regionszugriffsverwaltung ===&lt;br /&gt;
* [[RemoteAdmin:admin acl list|admin_acl_list]] &lt;br /&gt;
* [[RemoteAdmin:admin acl clear|admin_acl_clear]] &lt;br /&gt;
* [[RemoteAdmin:admin acl add|admin_acl_add]] &lt;br /&gt;
* [[RemoteAdmin:admin acl remove|admin_acl_remove]]&lt;br /&gt;
&lt;br /&gt;
=== Grundstücksverwaltung ===&lt;br /&gt;
* [[RemoteAdmin:admin estate reload|admin_estate_reload]]&lt;br /&gt;
&lt;br /&gt;
=== Administration ===&lt;br /&gt;
* [[RemoteAdmin:admin console command|admin_console_command]]&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges (undokumentiert) ===&lt;br /&gt;
* [[RemoteAdmin:admin dialog|admin_dialog]]&lt;br /&gt;
* [[RemoteAdmin:admin reset land|admin_reset_land]]&lt;br /&gt;
* [[RemoteAdmin:admin refresh search|admin_refresh_search]]&lt;br /&gt;
* [[RemoteAdmin:admin refresh map|admin_refresh_map]]&lt;br /&gt;
* [[RemoteAdmin:admin get opensim version|admin_get_opensim_version]]&lt;br /&gt;
* [[RemoteAdmin:admin get agent count|admin_get_agent_count]]&lt;br /&gt;
&lt;br /&gt;
== Unterkategorien ==&lt;br /&gt;
&lt;br /&gt;
* [[RemoteAdmin:RemoteAdmin Examples|RemoteAdmin Beispiele]] &lt;br /&gt;
* [[RemoteAdmin:RemoteAdmin Proposals|RemoteAdmin Vorschläge]] &lt;br /&gt;
* [[RemoteAdmin:RemoteAdmin Standards|RemoteAdmin Standards]]&lt;br /&gt;
* [[RemoteAdmin:RemoteAdmin Implement new command|RemoteAdmin Wie man neue Befehle implementiert]]&lt;br /&gt;
* [[RemoteAdmin:RemoteAdmin Class|RemoteAdmin Klasse]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:RemoteAdmin]]&lt;br /&gt;
[[Category:German Translations]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/RemoteAdmin/de</id>
		<title>RemoteAdmin/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/RemoteAdmin/de"/>
				<updated>2025-04-02T17:26:41Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|RemoteAdmin}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Einführung ==&lt;br /&gt;
&lt;br /&gt;
RemoteAdmin ist eine Schnittstelle für Simulatoren, die es ermöglicht, verschiedene Operationen von außerhalb des Simulators auszuführen. '''Operationen, die sich auf den Simulator selbst beziehen (z. B. Teleportation eines Benutzers), sind immer verfügbar. Diejenigen, die sich auf Grid-Dienste beziehen (Benutzererstellung und -aktualisierung), sind nur im Standalone-Modus verfügbar. Im Grid-Modus muss man stattdessen ROBUST-Level [[UserManipulation]]-Fähigkeiten verwenden.'''&lt;br /&gt;
&lt;br /&gt;
== Einrichtung der Remote-Admin-Schnittstelle ==&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte die Remote-Admin-Schnittstelle aktiviert werden. Füge dazu einfach die folgenden Zeilen in deine OpenSim.ini-Datei ein. Der Port sollte auf einen von Null verschiedenen Wert gesetzt werden, damit RemoteAdmin auf einem anderen Port läuft.&lt;br /&gt;
&lt;br /&gt;
Seit r/16843 kannst du den Zugriff auf RemoteAdmin auf bestimmte IP-Adressen beschränken, indem du die optionale access_ip_addresses verwendest. Du kannst alle IPs auflisten, die Zugriff auf RemoteAdmin haben sollen, indem du sie durch ein Komma trennst. Falls access_ip_addresses nicht gesetzt ist, können alle IP-Adressen auf RemoteAdmin zugreifen.&lt;br /&gt;
&lt;br /&gt;
Du kannst auch einen anderen Port für den XMLRPCAdmin-Befehlshörer festlegen, der sich vom Standard-Simulator-HTTP-Port unterscheidet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
  [RemoteAdmin]&lt;br /&gt;
    ;; This is the remote admin module, which uses XMLRPC requests to&lt;br /&gt;
    ;; manage regions from a web interface.&lt;br /&gt;
  &lt;br /&gt;
    ;# {enabled} {} {Enable the remote admin interface?} {true false} false&lt;br /&gt;
    enabled = true&lt;br /&gt;
  &lt;br /&gt;
    ;# {port} {enabled:true} {Port to use for the remote admin interface? (0 = default)} {} 0&lt;br /&gt;
    ;; Set this to a nonzero value to have remote admin use a different port&lt;br /&gt;
    port = 10000&lt;br /&gt;
  &lt;br /&gt;
    ;# {access_password} {enabled:true} {Password for the remote admin interface} {}&lt;br /&gt;
    ;; This password is required to make any XMLRPC call (should be set as&lt;br /&gt;
    ;; the &amp;quot;password&amp;quot; parameter)&lt;br /&gt;
    access_password = &amp;quot;passwd123&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
    ;# {access_ip_addresses} {enabled:true} {List the IP addresses allowed to call RemoteAdmin?} {}&lt;br /&gt;
    ;; List the IP addresses allowed to call RemoteAdmin&lt;br /&gt;
    ;; If access_ip_addresses isn't set, then all IP addresses can access RemoteAdmin.&lt;br /&gt;
    ;; access_ip_addresses = 0.0.0.0, 0.0.0.0 ...&lt;br /&gt;
    ; access_ip_addresses =&lt;br /&gt;
  &lt;br /&gt;
    ;# {create_region_enable_voice} {enabled:true} {Enable voice for newly created regions?} {true false} false&lt;br /&gt;
    ;; set this variable to true if you want the create_region XmlRpc&lt;br /&gt;
    ;; call to unconditionally enable voice on all parcels for a newly&lt;br /&gt;
    ;; created region&lt;br /&gt;
    ; create_region_enable_voice = false&lt;br /&gt;
  &lt;br /&gt;
    ;# {create_region_public} {enabled:true} {Make newly created regions public?} {true false} false&lt;br /&gt;
    ;; set this variable to false if you want the create_region XmlRpc&lt;br /&gt;
    ;; call to create all regions as private per default (can be&lt;br /&gt;
    ;; overridden in the XmlRpc call)&lt;br /&gt;
    ; create_region_public = false&lt;br /&gt;
  &lt;br /&gt;
    ;# {enabled_methods} {enabled:true} {List of methods to allow, separated by |} {} all&lt;br /&gt;
    ;; enable only those methods you deem to be appropriate using a | delimited&lt;br /&gt;
    ;; whitelist.&lt;br /&gt;
    ;; For example:&lt;br /&gt;
    ;; enabled_methods = admin_broadcast|admin_save_oar|admin_save_xml&lt;br /&gt;
    ;; if this parameter is not specified but enabled = true, all methods&lt;br /&gt;
    ;; will be available&lt;br /&gt;
    enabled_methods = all&lt;br /&gt;
  &lt;br /&gt;
    ;; specify the default appearance for an avatar created through the remote&lt;br /&gt;
    ;; admin interface&lt;br /&gt;
    ;; This will only take effect is the file specified by the&lt;br /&gt;
    ;; default_appearance setting below exists&lt;br /&gt;
    ; default_male = Default Male&lt;br /&gt;
    ; default_female = Default Female&lt;br /&gt;
  &lt;br /&gt;
    ;; Update appearance copies inventory items and wearables of default&lt;br /&gt;
    ;; avatars. if this value is false, just worn assets are copied to the&lt;br /&gt;
    ;; Clothes folder; if true, all Clothes and Bodyparts subfolders are copied.&lt;br /&gt;
    ;; The receiver will wear the same items the default avatar did wear.&lt;br /&gt;
    ; copy_folders = false&lt;br /&gt;
  &lt;br /&gt;
    ;; Path to default appearance XML file that specifies the look of the&lt;br /&gt;
    ;; default avatars&lt;br /&gt;
    ; default_appearance = default_appearance.xml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Siehe OpenSim.ini.example im opensim/bin/ Verzeichnis für weitere Details.&lt;br /&gt;
&lt;br /&gt;
== PHP Beispiele ==&lt;br /&gt;
&lt;br /&gt;
RemoteAdminTest.php (ACHTUNG: $params nicht $parameters BEACHTEN!)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
// Dieses Beispiel gibt eine Meldung heraus und fährt OpenSim herunter&lt;br /&gt;
//&lt;br /&gt;
// admin_broadcast ist das kommando für Nachrichten&lt;br /&gt;
// $params hier wird die Meldung hineingeschrieben&lt;br /&gt;
// &lt;br /&gt;
// Das Kommando admin_shutdown fährt OpenSim herunter&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
include('RemoteAdmin.php'); // RemoteAdmin.php Ist der Name der PHP-Klasse&lt;br /&gt;
&lt;br /&gt;
// Instanzieren der Klasse (IP oder Adresse, Port, Passwort)&lt;br /&gt;
$myRA = new RemoteAdmin('127.0.0.1', 9000, 'secret');&lt;br /&gt;
&lt;br /&gt;
// RemoteAdmin-Befehle ausführen&lt;br /&gt;
$params = array('message' =&amp;gt; 'Diese Nachricht wird an alle Regionen des OpenSimulators gesendet!');&lt;br /&gt;
&lt;br /&gt;
$myRA-&amp;gt;SendCommand('admin_broadcast', $params);&lt;br /&gt;
&lt;br /&gt;
// Wenn für einen RemoteAdmin-Befehl keine Parameter benötigt, &lt;br /&gt;
// müssen Sie den zweiten Parameter in der Funktion SendCommand nicht angeben.&lt;br /&gt;
$myRA-&amp;gt;SendCommand('admin_shutdown'); &lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RemoteAdmin.php&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	&lt;br /&gt;
/***********************************************************************&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
Copyright (c) 2008, The New World Grid Regents http://www.newworldgrid.com and Contributors &lt;br /&gt;
All rights reserved.&lt;br /&gt;
&lt;br /&gt;
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:&lt;br /&gt;
&lt;br /&gt;
	* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.&lt;br /&gt;
	* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer &lt;br /&gt;
	in the documentation and/or other materials provided with the distribution.&lt;br /&gt;
	* Neither the name of the New World Grid nor the names of its contributors may be used to endorse or promote products derived &lt;br /&gt;
	from this software without specific prior written permission.&lt;br /&gt;
&lt;br /&gt;
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &amp;quot;AS IS&amp;quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, &lt;br /&gt;
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. &lt;br /&gt;
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, &lt;br /&gt;
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; &lt;br /&gt;
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE &lt;br /&gt;
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
***********************************************************************/&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	// How to instantiate a RemoteAdmin object ?&lt;br /&gt;
	// $myremoteadmin = new RemoteAdmin(&amp;quot;mySimulatorURL&amp;quot;, Port, &amp;quot;secret password&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	// How to send commands to remoteadmin plugin ?&lt;br /&gt;
	// $myremoteadmin-&amp;gt;SendCommand('admin_broadcast', array('message' =&amp;gt; 'Message to broadcast to all regions'));&lt;br /&gt;
	// $myremoteadmin-&amp;gt;SendCommand('admin_shutdown');&lt;br /&gt;
	// Commands like admin_shutdown don't need params, so you can left the second SendCommand functino param empty ;)&lt;br /&gt;
	&lt;br /&gt;
	// Example for error handling&lt;br /&gt;
	// &lt;br /&gt;
	// include('classes/RemoteAdmin.php');&lt;br /&gt;
	// $RA = new RemoteAdmin('localhost', 9000, 'secret');&lt;br /&gt;
	// $retour = $RA-&amp;gt;SendCommand('admin_shutdown');&lt;br /&gt;
	// if ($retour === FALSE)&lt;br /&gt;
	// {&lt;br /&gt;
	// 	echo 'ERROR';&lt;br /&gt;
	// }&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	class RemoteAdmin&lt;br /&gt;
	{&lt;br /&gt;
		&lt;br /&gt;
		function RemoteAdmin($sURL, $sPort, $pass)&lt;br /&gt;
		{&lt;br /&gt;
			&lt;br /&gt;
			$this-&amp;gt;simulatorURL = $sURL;		// String&lt;br /&gt;
			$this-&amp;gt;simulatorPort = $sPort;	// Integer&lt;br /&gt;
			$this-&amp;gt;password = $pass;&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		function SendCommand($command, $params=array())&lt;br /&gt;
		{&lt;br /&gt;
			&lt;br /&gt;
			$paramsNames = array_keys($params);&lt;br /&gt;
			$paramsValues = array_values($params);&lt;br /&gt;
			&lt;br /&gt;
			// Building the XML data to pass to RemoteAdmin through XML-RPC ;)&lt;br /&gt;
			&lt;br /&gt;
			$xml = '&amp;lt;methodCall&amp;gt;&lt;br /&gt;
						&amp;lt;methodName&amp;gt;' . htmlspecialchars($command) . '&amp;lt;/methodName&amp;gt;&lt;br /&gt;
						&amp;lt;params&amp;gt;&lt;br /&gt;
							&amp;lt;param&amp;gt;&lt;br /&gt;
								&amp;lt;value&amp;gt;&lt;br /&gt;
									&amp;lt;struct&amp;gt;&lt;br /&gt;
										&amp;lt;member&amp;gt;&lt;br /&gt;
											&amp;lt;name&amp;gt;password&amp;lt;/name&amp;gt;&lt;br /&gt;
											&amp;lt;value&amp;gt;&amp;lt;string&amp;gt;' . htmlspecialchars($this-&amp;gt;password) . '&amp;lt;/string&amp;gt;&amp;lt;/value&amp;gt;&lt;br /&gt;
										&amp;lt;/member&amp;gt;';&lt;br /&gt;
			if (count($params) != 0)&lt;br /&gt;
			{&lt;br /&gt;
				&lt;br /&gt;
				for ($p = 0; $p &amp;lt; count($params); $p++)&lt;br /&gt;
				{&lt;br /&gt;
					&lt;br /&gt;
					$xml .= '&amp;lt;member&amp;gt;&amp;lt;name&amp;gt;' . htmlspecialchars($paramsNames[$p]) . '&amp;lt;/name&amp;gt;';&lt;br /&gt;
					$xml .= '&amp;lt;value&amp;gt;' . htmlspecialchars($paramsValues[$p]) . '&amp;lt;/value&amp;gt;&amp;lt;/member&amp;gt;';&lt;br /&gt;
					&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
									&lt;br /&gt;
			$xml .= '				&amp;lt;/struct&amp;gt;&lt;br /&gt;
								&amp;lt;/value&amp;gt;&lt;br /&gt;
							&amp;lt;/param&amp;gt;&lt;br /&gt;
						&amp;lt;/params&amp;gt;&lt;br /&gt;
					&amp;lt;/methodCall&amp;gt;';&lt;br /&gt;
				&lt;br /&gt;
			//&lt;br /&gt;
			// echo $xml;&lt;br /&gt;
			//&lt;br /&gt;
				&lt;br /&gt;
					&lt;br /&gt;
			// Now building headers and sending the data ;)&lt;br /&gt;
			$host = $this-&amp;gt;simulatorURL;&lt;br /&gt;
			$port = $this-&amp;gt;simulatorPort;&lt;br /&gt;
			$timeout = 5; // Timeout in seconds&lt;br /&gt;
			&lt;br /&gt;
			error_reporting(0);&lt;br /&gt;
			&lt;br /&gt;
			$fp = fsockopen($host, $port, $errno, $errstr, $timeout);&lt;br /&gt;
			if (!$fp)&lt;br /&gt;
			{&lt;br /&gt;
				return FALSE; // If contacting host timeouts or impossible to create the socket, the method returns FALSE&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				fputs($fp, &amp;quot;POST / HTTP/1.1\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, &amp;quot;Host: $host\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, &amp;quot;Content-type: text/xml\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, &amp;quot;Content-length: &amp;quot;. strlen($xml) .&amp;quot;\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, &amp;quot;Connection: close\r\n\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, $xml);&lt;br /&gt;
				$res = &amp;quot;&amp;quot;;&lt;br /&gt;
				while(!feof($fp)) {&lt;br /&gt;
					$res .= fgets($fp, 128);&lt;br /&gt;
				}&lt;br /&gt;
				fclose($fp);&lt;br /&gt;
				$response = substr($res, strpos($res, &amp;quot;\r\n\r\n&amp;quot;));;&lt;br /&gt;
						&lt;br /&gt;
				// Now parsing the XML response from RemoteAdmin ;)&lt;br /&gt;
				&lt;br /&gt;
				$result = array();&lt;br /&gt;
				if (preg_match_all('#&amp;lt;name&amp;gt;(.+)&amp;lt;/name&amp;gt;&amp;lt;value&amp;gt;&amp;lt;(string|int)&amp;gt;(.*)&amp;lt;/\2&amp;gt;&amp;lt;/value&amp;gt;#U', $response, $regs, PREG_SET_ORDER)) {&lt;br /&gt;
				  foreach($regs as $key=&amp;gt;$val) {&lt;br /&gt;
					$result[$val[1]] = $val[3];&lt;br /&gt;
				  }&lt;br /&gt;
				}&lt;br /&gt;
				return $result;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
		&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Python 3.6 Beispiele ==&lt;br /&gt;
&lt;br /&gt;
=== Python 3.6 Beispiel - admin_broadcast -  ===&lt;br /&gt;
&lt;br /&gt;
Dieser Python 3.6 Beitrag ist ein User Projekt, es wird kein Support über die Admins geben.&lt;br /&gt;
&lt;br /&gt;
Bitte seit vorsichtig, ich schließe jede Gewährleistung aus.&lt;br /&gt;
&lt;br /&gt;
Ohne Programmierkenntnisse oder unsachgemäßer Anwendung, kann es zu Schäden am OpenSimulator oder/und dem Betriebssystem kommen.&lt;br /&gt;
&lt;br /&gt;
Faustregel: Wenn ihr nicht sicher seit, ob ihr gesichert habt, dann sichert.&lt;br /&gt;
&lt;br /&gt;
Dies ist zuletzt getestet am 23.04.2018 mit Python 3.6.3 auf Windows 10 und Ubuntu Server 17.10.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python3&lt;br /&gt;
 &lt;br /&gt;
# admin_broadcast senden einer Nachricht an alle in einer Region.&lt;br /&gt;
# Python 3.6 - 21.04.2018 by Manfred Aabye&lt;br /&gt;
 &lt;br /&gt;
# Module laden&lt;br /&gt;
import xmlrpc.client &lt;br /&gt;
 &lt;br /&gt;
# Information&lt;br /&gt;
print('---------------------------------------------------------------------')&lt;br /&gt;
print('Setup: Opensim.ini - Del ; - ConsoleUser -  ConsolePass')&lt;br /&gt;
print('---------------------------------------------------------------------')&lt;br /&gt;
print('Beispiel:')&lt;br /&gt;
print('---------------------------------------------------------------------')&lt;br /&gt;
print('SimulatorAdress = http://127.0.0.1:9000/ or http://myserver.com:9000/')&lt;br /&gt;
print('ConsoleUser = Test')&lt;br /&gt;
print('ConsolePass = secret')&lt;br /&gt;
print('RegionMessage = Dies ist ein toller Text an einem tollen Tag.')&lt;br /&gt;
print('---------------------------------------------------------------------')&lt;br /&gt;
&lt;br /&gt;
# Abfragen&lt;br /&gt;
SimulatorAdress = input('SimulatorAdress:')&lt;br /&gt;
ConsoleUser = input('ConsoleUser:')&lt;br /&gt;
ConsolePass = input('ConsolePass:')&lt;br /&gt;
RegionMessage = input('RegionMessage:')&lt;br /&gt;
# Eingabe kann X Belibig geaendert werden RegionMessage = input('RegionMessage:') - X_Belibig = input('geben sie etwas fuer X_Belibig ein:')&lt;br /&gt;
# X_Belibig ist die Speicherstelle von input, der Text innerhalb der Klammern ist nur ein Text.&lt;br /&gt;
 &lt;br /&gt;
# Funktion admin_broadcast&lt;br /&gt;
def admin_broadcast():&lt;br /&gt;
    # Server Initialisieren &lt;br /&gt;
    Simulator = xmlrpc.client.Server(SimulatorAdress) &lt;br /&gt;
    # Password und Nachricht senden RegionMessage. Hier funktionieren auch alle anderen admin_ Befehle.&lt;br /&gt;
    # Bitte nicht vergessen auch die Eingabe zu aendern&lt;br /&gt;
    Simulator.admin_broadcast({'password': ConsolePass, 'message': RegionMessage})&lt;br /&gt;
 &lt;br /&gt;
# admin_broadcast Aufruf dieser kann nun an irgendeiner stelle aufgerufen werden. &lt;br /&gt;
admin_broadcast()&lt;br /&gt;
 &lt;br /&gt;
# Ende admin_broadcast&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python 3.6 RemoteAdmin nur teilweise getestet ===&lt;br /&gt;
&lt;br /&gt;
Dies basiert auf dem Python 3.6 Beispiel - admin_broadcast – und soll die Erweiterung/Veränderung des source vereinfachen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    # Agent Management&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_teleport_agent({'password':ConsolePass,'agent_first_name':agent_first_name,'agent_last_name':agent_last_name,'region_name':region_name, 'pos_x':pos_x, 'pos_y':pos_y})&lt;br /&gt;
    Simulator.admin_get_agents({'password':ConsolePass,'region_name':region_name,'Regions-ID':Regions-ID})&lt;br /&gt;
&lt;br /&gt;
    # Benutzerkontenverwaltung&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_create_user({'password':ConsolePass,'user_firstname':user_firstname,'user_lastname':user_lastname,'user_password':user_password,'start_region_x':start_region_x,'start_region_y':start_region_y,'user_email':user_email})&lt;br /&gt;
    # Simulator.admin_create_user_email dies ist jetzt in admin_create_user enthalten.&lt;br /&gt;
    Simulator.admin_exists_user({'password':ConsolePass,'user_firstname':user_firstname,'user_lastname':user_lastname})&lt;br /&gt;
    Simulator.admin_update_user({'password':ConsolePass,'user_firstname':user_firstname,'user_lastname':user_lastname})&lt;br /&gt;
    Simulator.admin_authenticate_user({'password':ConsolePass,'user_firstname':user_firstname,'user_lastname':user_lastname,'user_password':user_password,'token_lifetime':token_lifetime})&lt;br /&gt;
&lt;br /&gt;
    # Region Management&lt;br /&gt;
&lt;br /&gt;
    Simulator.Simulator.admin_broadcast({'password': ConsolePass, 'message': RegionMessage})&lt;br /&gt;
    Simulator.admin_close_region({'password':ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_create_region({'password':ConsolePass,'region_name':region_name,'listen_ip':listen_ip,'listen_port':listen_port,'external_address':external_address,'region_x':region_x,'region_y':region_y,'estate_name':estate_name})&lt;br /&gt;
    Simulator.admin_delete_region({'password':ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_modify_region({'password':ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_region_query({'password':ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_restart({'password':ConsolePass,'region_id':region_id})&lt;br /&gt;
    Simulator.admin_shutdown({'password':ConsolePass,'milliseconds':milliseconds})&lt;br /&gt;
&lt;br /&gt;
    # Region Dateiverwaltung&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_load_heightmap({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_load_oar({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_load_xml({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_save_heightmap({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_save_oar({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_save_xml({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
&lt;br /&gt;
    # Region Zugangsmanagement&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_acl_list({'password': ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_acl_clear({'password': ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_acl_add({'password': ConsolePass,'region_name':region_name,'users':users})&lt;br /&gt;
    Simulator.admin_acl_remove({'password': ConsolePass,'region_name':region_name,'users':users})&lt;br /&gt;
&lt;br /&gt;
    # Estate Immobilienverwaltung&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_estate_reload({'password':ConsolePass})&lt;br /&gt;
&lt;br /&gt;
    # Administrationskonsole&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_console_command({'password':ConsolePass,'console_command':console_command})&lt;br /&gt;
&lt;br /&gt;
    # Verschiedenes &lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_dialog({'password': ConsolePass, 'message': RegionMessage})&lt;br /&gt;
    #Simulator.admin_reset_land({'password':ConsolePass}) # keine ahnung&lt;br /&gt;
    #Simulator.admin_refresh_search({'password':ConsolePass}) # keine ahnung&lt;br /&gt;
    #Simulator.admin_refresh_map({'password':ConsolePass}) # keine ahnung&lt;br /&gt;
    #Simulator.admin_get_opensim_version({'password':ConsolePass}) # Rueckgabeparameter: Ich weiss nicht wie das geht.&lt;br /&gt;
    #Simulator.admin_get_agent_count({'password':ConsolePass}) # keine ahnung&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RemoteAdmin Befehle ==&lt;br /&gt;
&lt;br /&gt;
Alle Befehlsparameter die UUID einer Region nutzen &amp;quot;region_id&amp;quot; als Parameter.&lt;br /&gt;
&lt;br /&gt;
=== Agentenverwaltung ===&lt;br /&gt;
*[[Remoteadmin:admin teleport agent|admin_teleport_agent]]&lt;br /&gt;
*[[Remoteadmin:admin get agents|admin_get_agents]]&lt;br /&gt;
&lt;br /&gt;
=== Benutzerkontenverwaltung ===&lt;br /&gt;
*[[RemoteAdmin:admin create user|admin_create_user]] &lt;br /&gt;
*[[RemoteAdmin:admin create user email|admin_create_user_email]] &lt;br /&gt;
*[[RemoteAdmin:admin exists user|admin_exists_user]] &lt;br /&gt;
*[[RemoteAdmin:admin update user|admin_update_user]]&lt;br /&gt;
*[[RemoteAdmin:admin authenticate user|admin_authenticate_user]]&lt;br /&gt;
&lt;br /&gt;
=== Objektverwaltung ===&lt;br /&gt;
&lt;br /&gt;
=== Parzellenverwaltung ===&lt;br /&gt;
&lt;br /&gt;
=== Regionenverwaltung ===&lt;br /&gt;
*[[RemoteAdmin:admin broadcast|admin_broadcast]] &lt;br /&gt;
*[[RemoteAdmin:admin close region|admin_close_region]] &lt;br /&gt;
*[[RemoteAdmin:admin create region|admin_create_region]] &lt;br /&gt;
*[[RemoteAdmin:admin delete region|admin_delete_region]] &lt;br /&gt;
*[[RemoteAdmin:admin modify region|admin_modify_region]] &lt;br /&gt;
*[[RemoteAdmin:admin region query|admin_region_query]] &lt;br /&gt;
*[[RemoteAdmin:admin restart|admin_restart]] &lt;br /&gt;
*[[RemoteAdmin:admin shutdown|admin_shutdown]] &lt;br /&gt;
&lt;br /&gt;
=== Regionsdateiverwaltung ===&lt;br /&gt;
* [[RemoteAdmin:admin load heightmap|admin_load_heightmap]]&lt;br /&gt;
* [[RemoteAdmin:admin load oar|admin_load_oar]] &lt;br /&gt;
* [[RemoteAdmin:admin load xml|admin_load_xml]] &lt;br /&gt;
* [[RemoteAdmin:admin save heightmap|admin_save_heightmap]] &lt;br /&gt;
* [[RemoteAdmin:admin save oar|admin_save_oar]] &lt;br /&gt;
* [[RemoteAdmin:admin save xml|admin_save_xml]]&lt;br /&gt;
&lt;br /&gt;
=== Regionszugriffsverwaltung ===&lt;br /&gt;
* [[RemoteAdmin:admin acl list|admin_acl_list]] &lt;br /&gt;
* [[RemoteAdmin:admin acl clear|admin_acl_clear]] &lt;br /&gt;
* [[RemoteAdmin:admin acl add|admin_acl_add]] &lt;br /&gt;
* [[RemoteAdmin:admin acl remove|admin_acl_remove]]&lt;br /&gt;
&lt;br /&gt;
=== Grundstücksverwaltung ===&lt;br /&gt;
* [[RemoteAdmin:admin estate reload|admin_estate_reload]]&lt;br /&gt;
&lt;br /&gt;
=== Administration ===&lt;br /&gt;
* [[RemoteAdmin:admin console command|admin_console_command]]&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges (undokumentiert) ===&lt;br /&gt;
* [[RemoteAdmin:admin dialog|admin_dialog]]&lt;br /&gt;
* [[RemoteAdmin:admin reset land|admin_reset_land]]&lt;br /&gt;
* [[RemoteAdmin:admin refresh search|admin_refresh_search]]&lt;br /&gt;
* [[RemoteAdmin:admin refresh map|admin_refresh_map]]&lt;br /&gt;
* [[RemoteAdmin:admin get opensim version|admin_get_opensim_version]]&lt;br /&gt;
* [[RemoteAdmin:admin get agent count|admin_get_agent_count]]&lt;br /&gt;
&lt;br /&gt;
== Unterkategorien ==&lt;br /&gt;
&lt;br /&gt;
* [[RemoteAdmin:RemoteAdmin Examples|RemoteAdmin Beispiele]] &lt;br /&gt;
* [[RemoteAdmin:RemoteAdmin Proposals|RemoteAdmin Vorschläge]] &lt;br /&gt;
* [[RemoteAdmin:RemoteAdmin Standards|RemoteAdmin Standards]]&lt;br /&gt;
* [[RemoteAdmin:RemoteAdmin Implement new command|RemoteAdmin Wie man neue Befehle implementiert]]&lt;br /&gt;
* [[RemoteAdmin:RemoteAdmin Class|RemoteAdmin Klasse]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:RemoteAdmin]]&lt;br /&gt;
[[Category:German Translations]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/RemoteAdmin/de</id>
		<title>RemoteAdmin/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/RemoteAdmin/de"/>
				<updated>2025-04-02T17:18:02Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: /* Das Remote Admin Interface Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|RemoteAdmin}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Einführung ==&lt;br /&gt;
&lt;br /&gt;
RemoteAdmin  ist eine Schnittstelle des OpenSimulator, die verschiedene Operationen können  außerhalb des OpenSimulator ausgeführt werden. Operationen, die sich selbst auf den Simulator beziehen (zB teleport user) sind immer verfügbar. Diejenigen, die sich auf Griddienstleistungen (user creation  und updating) beziehen, sind nur im Standalone-Modus Verfügbar. Im Gridmodus, muss man die ROBUST Ebene verwenden [[UserManipulation]] statt Fähigkeiten. '''&lt;br /&gt;
&lt;br /&gt;
== Das Remote Admin Interface Setup ==&lt;br /&gt;
&lt;br /&gt;
Zuerst sollte man die Remote-Admin-Interface ermöglichen. Nur die folgenden Zeilen zu Ihrer OpenSim.ini FILE-Port hinzufügen sollte auf einen Wert ungleich null gesetzt werden, um die Remote-Admin auf einem anderen Port zu haben. &lt;br /&gt;
&lt;br /&gt;
Ab Version r/16843 können Sie den Zugriff auf Remote-Admin auf bestimmte IP-Adressen beschränken, indem sie optionale access_ip_addresses verwenden. Sie können alle IP-Liste erlaubt durch RemoteAdmin  für den Zugriff auf jede IP durch ein Komma trennt. Wenn access_ip_addresses nicht gesetzt ist, dann können alle IP-Adressen RemoteAdmin zugreifen. &lt;br /&gt;
&lt;br /&gt;
Sie können auch einen anderen Port für die XMLRPCAdmin command listener  aus dem Standard-Simulator HTTP-Port angeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
  [RemoteAdmin]&lt;br /&gt;
    ;; This is the remote admin module, which uses XMLRPC requests to&lt;br /&gt;
    ;; manage regions from a web interface.&lt;br /&gt;
  &lt;br /&gt;
    ;# {enabled} {} {Enable the remote admin interface?} {true false} false&lt;br /&gt;
    enabled = true&lt;br /&gt;
  &lt;br /&gt;
    ;# {port} {enabled:true} {Port to use for the remote admin interface? (0 = default)} {} 0&lt;br /&gt;
    ;; Set this to a nonzero value to have remote admin use a different port&lt;br /&gt;
    port = 10000&lt;br /&gt;
  &lt;br /&gt;
    ;# {access_password} {enabled:true} {Password for the remote admin interface} {}&lt;br /&gt;
    ;; This password is required to make any XMLRPC call (should be set as&lt;br /&gt;
    ;; the &amp;quot;password&amp;quot; parameter)&lt;br /&gt;
    access_password = &amp;quot;passwd123&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
    ;# {access_ip_addresses} {enabled:true} {List the IP addresses allowed to call RemoteAdmin?} {}&lt;br /&gt;
    ;; List the IP addresses allowed to call RemoteAdmin&lt;br /&gt;
    ;; If access_ip_addresses isn't set, then all IP addresses can access RemoteAdmin.&lt;br /&gt;
    ;; access_ip_addresses = 0.0.0.0, 0.0.0.0 ...&lt;br /&gt;
    ; access_ip_addresses =&lt;br /&gt;
  &lt;br /&gt;
    ;# {create_region_enable_voice} {enabled:true} {Enable voice for newly created regions?} {true false} false&lt;br /&gt;
    ;; set this variable to true if you want the create_region XmlRpc&lt;br /&gt;
    ;; call to unconditionally enable voice on all parcels for a newly&lt;br /&gt;
    ;; created region&lt;br /&gt;
    ; create_region_enable_voice = false&lt;br /&gt;
  &lt;br /&gt;
    ;# {create_region_public} {enabled:true} {Make newly created regions public?} {true false} false&lt;br /&gt;
    ;; set this variable to false if you want the create_region XmlRpc&lt;br /&gt;
    ;; call to create all regions as private per default (can be&lt;br /&gt;
    ;; overridden in the XmlRpc call)&lt;br /&gt;
    ; create_region_public = false&lt;br /&gt;
  &lt;br /&gt;
    ;# {enabled_methods} {enabled:true} {List of methods to allow, separated by |} {} all&lt;br /&gt;
    ;; enable only those methods you deem to be appropriate using a | delimited&lt;br /&gt;
    ;; whitelist.&lt;br /&gt;
    ;; For example:&lt;br /&gt;
    ;; enabled_methods = admin_broadcast|admin_save_oar|admin_save_xml&lt;br /&gt;
    ;; if this parameter is not specified but enabled = true, all methods&lt;br /&gt;
    ;; will be available&lt;br /&gt;
    enabled_methods = all&lt;br /&gt;
  &lt;br /&gt;
    ;; specify the default appearance for an avatar created through the remote&lt;br /&gt;
    ;; admin interface&lt;br /&gt;
    ;; This will only take effect is the file specified by the&lt;br /&gt;
    ;; default_appearance setting below exists&lt;br /&gt;
    ; default_male = Default Male&lt;br /&gt;
    ; default_female = Default Female&lt;br /&gt;
  &lt;br /&gt;
    ;; Update appearance copies inventory items and wearables of default&lt;br /&gt;
    ;; avatars. if this value is false, just worn assets are copied to the&lt;br /&gt;
    ;; Clothes folder; if true, all Clothes and Bodyparts subfolders are copied.&lt;br /&gt;
    ;; The receiver will wear the same items the default avatar did wear.&lt;br /&gt;
    ; copy_folders = false&lt;br /&gt;
  &lt;br /&gt;
    ;; Path to default appearance XML file that specifies the look of the&lt;br /&gt;
    ;; default avatars&lt;br /&gt;
    ; default_appearance = default_appearance.xml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Siehe OpenSim.ini.example im opensim/bin/ Verzeichnis für weitere Details.&lt;br /&gt;
&lt;br /&gt;
== PHP Beispiele ==&lt;br /&gt;
&lt;br /&gt;
RemoteAdminTest.php (ACHTUNG: $params nicht $parameters BEACHTEN!)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
// Dieses Beispiel gibt eine Meldung heraus und fährt OpenSim herunter&lt;br /&gt;
//&lt;br /&gt;
// admin_broadcast ist das kommando für Nachrichten&lt;br /&gt;
// $params hier wird die Meldung hineingeschrieben&lt;br /&gt;
// &lt;br /&gt;
// Das Kommando admin_shutdown fährt OpenSim herunter&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
include('RemoteAdmin.php'); // RemoteAdmin.php Ist der Name der PHP-Klasse&lt;br /&gt;
&lt;br /&gt;
// Instanzieren der Klasse (IP oder Adresse, Port, Passwort)&lt;br /&gt;
$myRA = new RemoteAdmin('127.0.0.1', 9000, 'secret');&lt;br /&gt;
&lt;br /&gt;
// RemoteAdmin-Befehle ausführen&lt;br /&gt;
$params = array('message' =&amp;gt; 'Diese Nachricht wird an alle Regionen des OpenSimulators gesendet!');&lt;br /&gt;
&lt;br /&gt;
$myRA-&amp;gt;SendCommand('admin_broadcast', $params);&lt;br /&gt;
&lt;br /&gt;
// Wenn für einen RemoteAdmin-Befehl keine Parameter benötigt, &lt;br /&gt;
// müssen Sie den zweiten Parameter in der Funktion SendCommand nicht angeben.&lt;br /&gt;
$myRA-&amp;gt;SendCommand('admin_shutdown'); &lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RemoteAdmin.php&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	&lt;br /&gt;
/***********************************************************************&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
Copyright (c) 2008, The New World Grid Regents http://www.newworldgrid.com and Contributors &lt;br /&gt;
All rights reserved.&lt;br /&gt;
&lt;br /&gt;
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:&lt;br /&gt;
&lt;br /&gt;
	* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.&lt;br /&gt;
	* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer &lt;br /&gt;
	in the documentation and/or other materials provided with the distribution.&lt;br /&gt;
	* Neither the name of the New World Grid nor the names of its contributors may be used to endorse or promote products derived &lt;br /&gt;
	from this software without specific prior written permission.&lt;br /&gt;
&lt;br /&gt;
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &amp;quot;AS IS&amp;quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, &lt;br /&gt;
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. &lt;br /&gt;
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, &lt;br /&gt;
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; &lt;br /&gt;
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE &lt;br /&gt;
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
***********************************************************************/&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	// How to instantiate a RemoteAdmin object ?&lt;br /&gt;
	// $myremoteadmin = new RemoteAdmin(&amp;quot;mySimulatorURL&amp;quot;, Port, &amp;quot;secret password&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	// How to send commands to remoteadmin plugin ?&lt;br /&gt;
	// $myremoteadmin-&amp;gt;SendCommand('admin_broadcast', array('message' =&amp;gt; 'Message to broadcast to all regions'));&lt;br /&gt;
	// $myremoteadmin-&amp;gt;SendCommand('admin_shutdown');&lt;br /&gt;
	// Commands like admin_shutdown don't need params, so you can left the second SendCommand functino param empty ;)&lt;br /&gt;
	&lt;br /&gt;
	// Example for error handling&lt;br /&gt;
	// &lt;br /&gt;
	// include('classes/RemoteAdmin.php');&lt;br /&gt;
	// $RA = new RemoteAdmin('localhost', 9000, 'secret');&lt;br /&gt;
	// $retour = $RA-&amp;gt;SendCommand('admin_shutdown');&lt;br /&gt;
	// if ($retour === FALSE)&lt;br /&gt;
	// {&lt;br /&gt;
	// 	echo 'ERROR';&lt;br /&gt;
	// }&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	class RemoteAdmin&lt;br /&gt;
	{&lt;br /&gt;
		&lt;br /&gt;
		function RemoteAdmin($sURL, $sPort, $pass)&lt;br /&gt;
		{&lt;br /&gt;
			&lt;br /&gt;
			$this-&amp;gt;simulatorURL = $sURL;		// String&lt;br /&gt;
			$this-&amp;gt;simulatorPort = $sPort;	// Integer&lt;br /&gt;
			$this-&amp;gt;password = $pass;&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		function SendCommand($command, $params=array())&lt;br /&gt;
		{&lt;br /&gt;
			&lt;br /&gt;
			$paramsNames = array_keys($params);&lt;br /&gt;
			$paramsValues = array_values($params);&lt;br /&gt;
			&lt;br /&gt;
			// Building the XML data to pass to RemoteAdmin through XML-RPC ;)&lt;br /&gt;
			&lt;br /&gt;
			$xml = '&amp;lt;methodCall&amp;gt;&lt;br /&gt;
						&amp;lt;methodName&amp;gt;' . htmlspecialchars($command) . '&amp;lt;/methodName&amp;gt;&lt;br /&gt;
						&amp;lt;params&amp;gt;&lt;br /&gt;
							&amp;lt;param&amp;gt;&lt;br /&gt;
								&amp;lt;value&amp;gt;&lt;br /&gt;
									&amp;lt;struct&amp;gt;&lt;br /&gt;
										&amp;lt;member&amp;gt;&lt;br /&gt;
											&amp;lt;name&amp;gt;password&amp;lt;/name&amp;gt;&lt;br /&gt;
											&amp;lt;value&amp;gt;&amp;lt;string&amp;gt;' . htmlspecialchars($this-&amp;gt;password) . '&amp;lt;/string&amp;gt;&amp;lt;/value&amp;gt;&lt;br /&gt;
										&amp;lt;/member&amp;gt;';&lt;br /&gt;
			if (count($params) != 0)&lt;br /&gt;
			{&lt;br /&gt;
				&lt;br /&gt;
				for ($p = 0; $p &amp;lt; count($params); $p++)&lt;br /&gt;
				{&lt;br /&gt;
					&lt;br /&gt;
					$xml .= '&amp;lt;member&amp;gt;&amp;lt;name&amp;gt;' . htmlspecialchars($paramsNames[$p]) . '&amp;lt;/name&amp;gt;';&lt;br /&gt;
					$xml .= '&amp;lt;value&amp;gt;' . htmlspecialchars($paramsValues[$p]) . '&amp;lt;/value&amp;gt;&amp;lt;/member&amp;gt;';&lt;br /&gt;
					&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
									&lt;br /&gt;
			$xml .= '				&amp;lt;/struct&amp;gt;&lt;br /&gt;
								&amp;lt;/value&amp;gt;&lt;br /&gt;
							&amp;lt;/param&amp;gt;&lt;br /&gt;
						&amp;lt;/params&amp;gt;&lt;br /&gt;
					&amp;lt;/methodCall&amp;gt;';&lt;br /&gt;
				&lt;br /&gt;
			//&lt;br /&gt;
			// echo $xml;&lt;br /&gt;
			//&lt;br /&gt;
				&lt;br /&gt;
					&lt;br /&gt;
			// Now building headers and sending the data ;)&lt;br /&gt;
			$host = $this-&amp;gt;simulatorURL;&lt;br /&gt;
			$port = $this-&amp;gt;simulatorPort;&lt;br /&gt;
			$timeout = 5; // Timeout in seconds&lt;br /&gt;
			&lt;br /&gt;
			error_reporting(0);&lt;br /&gt;
			&lt;br /&gt;
			$fp = fsockopen($host, $port, $errno, $errstr, $timeout);&lt;br /&gt;
			if (!$fp)&lt;br /&gt;
			{&lt;br /&gt;
				return FALSE; // If contacting host timeouts or impossible to create the socket, the method returns FALSE&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				fputs($fp, &amp;quot;POST / HTTP/1.1\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, &amp;quot;Host: $host\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, &amp;quot;Content-type: text/xml\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, &amp;quot;Content-length: &amp;quot;. strlen($xml) .&amp;quot;\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, &amp;quot;Connection: close\r\n\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, $xml);&lt;br /&gt;
				$res = &amp;quot;&amp;quot;;&lt;br /&gt;
				while(!feof($fp)) {&lt;br /&gt;
					$res .= fgets($fp, 128);&lt;br /&gt;
				}&lt;br /&gt;
				fclose($fp);&lt;br /&gt;
				$response = substr($res, strpos($res, &amp;quot;\r\n\r\n&amp;quot;));;&lt;br /&gt;
						&lt;br /&gt;
				// Now parsing the XML response from RemoteAdmin ;)&lt;br /&gt;
				&lt;br /&gt;
				$result = array();&lt;br /&gt;
				if (preg_match_all('#&amp;lt;name&amp;gt;(.+)&amp;lt;/name&amp;gt;&amp;lt;value&amp;gt;&amp;lt;(string|int)&amp;gt;(.*)&amp;lt;/\2&amp;gt;&amp;lt;/value&amp;gt;#U', $response, $regs, PREG_SET_ORDER)) {&lt;br /&gt;
				  foreach($regs as $key=&amp;gt;$val) {&lt;br /&gt;
					$result[$val[1]] = $val[3];&lt;br /&gt;
				  }&lt;br /&gt;
				}&lt;br /&gt;
				return $result;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
		&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Python 3.6 Beispiele ==&lt;br /&gt;
&lt;br /&gt;
=== Python 3.6 Beispiel - admin_broadcast -  ===&lt;br /&gt;
&lt;br /&gt;
Dieser Python 3.6 Beitrag ist ein User Projekt, es wird kein Support über die Admins geben.&lt;br /&gt;
&lt;br /&gt;
Bitte seit vorsichtig, ich schließe jede Gewährleistung aus.&lt;br /&gt;
&lt;br /&gt;
Ohne Programmierkenntnisse oder unsachgemäßer Anwendung, kann es zu Schäden am OpenSimulator oder/und dem Betriebssystem kommen.&lt;br /&gt;
&lt;br /&gt;
Faustregel: Wenn ihr nicht sicher seit, ob ihr gesichert habt, dann sichert.&lt;br /&gt;
&lt;br /&gt;
Dies ist zuletzt getestet am 23.04.2018 mit Python 3.6.3 auf Windows 10 und Ubuntu Server 17.10.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python3&lt;br /&gt;
 &lt;br /&gt;
# admin_broadcast senden einer Nachricht an alle in einer Region.&lt;br /&gt;
# Python 3.6 - 21.04.2018 by Manfred Aabye&lt;br /&gt;
 &lt;br /&gt;
# Module laden&lt;br /&gt;
import xmlrpc.client &lt;br /&gt;
 &lt;br /&gt;
# Information&lt;br /&gt;
print('---------------------------------------------------------------------')&lt;br /&gt;
print('Setup: Opensim.ini - Del ; - ConsoleUser -  ConsolePass')&lt;br /&gt;
print('---------------------------------------------------------------------')&lt;br /&gt;
print('Beispiel:')&lt;br /&gt;
print('---------------------------------------------------------------------')&lt;br /&gt;
print('SimulatorAdress = http://127.0.0.1:9000/ or http://myserver.com:9000/')&lt;br /&gt;
print('ConsoleUser = Test')&lt;br /&gt;
print('ConsolePass = secret')&lt;br /&gt;
print('RegionMessage = Dies ist ein toller Text an einem tollen Tag.')&lt;br /&gt;
print('---------------------------------------------------------------------')&lt;br /&gt;
&lt;br /&gt;
# Abfragen&lt;br /&gt;
SimulatorAdress = input('SimulatorAdress:')&lt;br /&gt;
ConsoleUser = input('ConsoleUser:')&lt;br /&gt;
ConsolePass = input('ConsolePass:')&lt;br /&gt;
RegionMessage = input('RegionMessage:')&lt;br /&gt;
# Eingabe kann X Belibig geaendert werden RegionMessage = input('RegionMessage:') - X_Belibig = input('geben sie etwas fuer X_Belibig ein:')&lt;br /&gt;
# X_Belibig ist die Speicherstelle von input, der Text innerhalb der Klammern ist nur ein Text.&lt;br /&gt;
 &lt;br /&gt;
# Funktion admin_broadcast&lt;br /&gt;
def admin_broadcast():&lt;br /&gt;
    # Server Initialisieren &lt;br /&gt;
    Simulator = xmlrpc.client.Server(SimulatorAdress) &lt;br /&gt;
    # Password und Nachricht senden RegionMessage. Hier funktionieren auch alle anderen admin_ Befehle.&lt;br /&gt;
    # Bitte nicht vergessen auch die Eingabe zu aendern&lt;br /&gt;
    Simulator.admin_broadcast({'password': ConsolePass, 'message': RegionMessage})&lt;br /&gt;
 &lt;br /&gt;
# admin_broadcast Aufruf dieser kann nun an irgendeiner stelle aufgerufen werden. &lt;br /&gt;
admin_broadcast()&lt;br /&gt;
 &lt;br /&gt;
# Ende admin_broadcast&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python 3.6 RemoteAdmin nur teilweise getestet ===&lt;br /&gt;
&lt;br /&gt;
Dies basiert auf dem Python 3.6 Beispiel - admin_broadcast – und soll die Erweiterung/Veränderung des source vereinfachen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    # Agent Management&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_teleport_agent({'password':ConsolePass,'agent_first_name':agent_first_name,'agent_last_name':agent_last_name,'region_name':region_name, 'pos_x':pos_x, 'pos_y':pos_y})&lt;br /&gt;
    Simulator.admin_get_agents({'password':ConsolePass,'region_name':region_name,'Regions-ID':Regions-ID})&lt;br /&gt;
&lt;br /&gt;
    # Benutzerkontenverwaltung&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_create_user({'password':ConsolePass,'user_firstname':user_firstname,'user_lastname':user_lastname,'user_password':user_password,'start_region_x':start_region_x,'start_region_y':start_region_y,'user_email':user_email})&lt;br /&gt;
    # Simulator.admin_create_user_email dies ist jetzt in admin_create_user enthalten.&lt;br /&gt;
    Simulator.admin_exists_user({'password':ConsolePass,'user_firstname':user_firstname,'user_lastname':user_lastname})&lt;br /&gt;
    Simulator.admin_update_user({'password':ConsolePass,'user_firstname':user_firstname,'user_lastname':user_lastname})&lt;br /&gt;
    Simulator.admin_authenticate_user({'password':ConsolePass,'user_firstname':user_firstname,'user_lastname':user_lastname,'user_password':user_password,'token_lifetime':token_lifetime})&lt;br /&gt;
&lt;br /&gt;
    # Region Management&lt;br /&gt;
&lt;br /&gt;
    Simulator.Simulator.admin_broadcast({'password': ConsolePass, 'message': RegionMessage})&lt;br /&gt;
    Simulator.admin_close_region({'password':ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_create_region({'password':ConsolePass,'region_name':region_name,'listen_ip':listen_ip,'listen_port':listen_port,'external_address':external_address,'region_x':region_x,'region_y':region_y,'estate_name':estate_name})&lt;br /&gt;
    Simulator.admin_delete_region({'password':ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_modify_region({'password':ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_region_query({'password':ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_restart({'password':ConsolePass,'region_id':region_id})&lt;br /&gt;
    Simulator.admin_shutdown({'password':ConsolePass,'milliseconds':milliseconds})&lt;br /&gt;
&lt;br /&gt;
    # Region Dateiverwaltung&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_load_heightmap({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_load_oar({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_load_xml({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_save_heightmap({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_save_oar({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_save_xml({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
&lt;br /&gt;
    # Region Zugangsmanagement&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_acl_list({'password': ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_acl_clear({'password': ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_acl_add({'password': ConsolePass,'region_name':region_name,'users':users})&lt;br /&gt;
    Simulator.admin_acl_remove({'password': ConsolePass,'region_name':region_name,'users':users})&lt;br /&gt;
&lt;br /&gt;
    # Estate Immobilienverwaltung&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_estate_reload({'password':ConsolePass})&lt;br /&gt;
&lt;br /&gt;
    # Administrationskonsole&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_console_command({'password':ConsolePass,'console_command':console_command})&lt;br /&gt;
&lt;br /&gt;
    # Verschiedenes &lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_dialog({'password': ConsolePass, 'message': RegionMessage})&lt;br /&gt;
    #Simulator.admin_reset_land({'password':ConsolePass}) # keine ahnung&lt;br /&gt;
    #Simulator.admin_refresh_search({'password':ConsolePass}) # keine ahnung&lt;br /&gt;
    #Simulator.admin_refresh_map({'password':ConsolePass}) # keine ahnung&lt;br /&gt;
    #Simulator.admin_get_opensim_version({'password':ConsolePass}) # Rueckgabeparameter: Ich weiss nicht wie das geht.&lt;br /&gt;
    #Simulator.admin_get_agent_count({'password':ConsolePass}) # keine ahnung&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RemoteAdmin Befehle ==&lt;br /&gt;
&lt;br /&gt;
Alle Befehlsparameter die UUID einer Region nutzen &amp;quot;region_id&amp;quot; als Parameter. Alle anderen Parameter wie zB. region_uuid oder regionId sind nach Juni 2012 entfernt worden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Agent management ===&lt;br /&gt;
*[[Remoteadmin:admin teleport agent|admin_teleport_agent]]&lt;br /&gt;
*[[Remoteadmin:admin get agents|admin_get_agents]]&lt;br /&gt;
&lt;br /&gt;
=== User account management ===&lt;br /&gt;
*[[RemoteAdmin:admin create user|admin_create_user]] &lt;br /&gt;
*[[RemoteAdmin:admin create user email|admin_create_user_email]] &lt;br /&gt;
*[[RemoteAdmin:admin exists user|admin_exists_user]] &lt;br /&gt;
*[[RemoteAdmin:admin update user|admin_update_user]]&lt;br /&gt;
*[[RemoteAdmin:admin authenticate user|admin_authenticate_user]]&lt;br /&gt;
&lt;br /&gt;
=== Object management ===&lt;br /&gt;
&lt;br /&gt;
Noch keine RemoteAdmin Befehle vorhanden.&lt;br /&gt;
&lt;br /&gt;
=== Parcel management ===&lt;br /&gt;
&lt;br /&gt;
Noch keine RemoteAdmin Befehle vorhanden.&lt;br /&gt;
&lt;br /&gt;
=== Region management ===&lt;br /&gt;
*[[RemoteAdmin:admin broadcast|admin_broadcast]] &lt;br /&gt;
*[[RemoteAdmin:admin close region|admin_close_region]] &lt;br /&gt;
*[[RemoteAdmin:admin create region|admin_create_region]] &lt;br /&gt;
*[[RemoteAdmin:admin delete region|admin_delete_region]] &lt;br /&gt;
*[[RemoteAdmin:admin modify region|admin_modify_region]] &lt;br /&gt;
*[[RemoteAdmin:admin region query|admin_region_query]] &lt;br /&gt;
*[[RemoteAdmin:admin restart|admin_restart]] &lt;br /&gt;
*[[RemoteAdmin:admin shutdown|admin_shutdown]] &lt;br /&gt;
&lt;br /&gt;
=== Region file management ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
* [[RemoteAdmin:admin load heightmap|admin_load_heightmap]]&lt;br /&gt;
* [[RemoteAdmin:admin load oar|admin_load_oar]] &lt;br /&gt;
* [[RemoteAdmin:admin load xml|admin_load_xml]] &lt;br /&gt;
* [[RemoteAdmin:admin save heightmap|admin_save_heightmap]] &lt;br /&gt;
* [[RemoteAdmin:admin save oar|admin_save_oar]] &lt;br /&gt;
* [[RemoteAdmin:admin save xml|admin_save_xml]]&lt;br /&gt;
&lt;br /&gt;
=== Region access management ===&lt;br /&gt;
* [[RemoteAdmin:admin acl list|admin_acl_list]] &lt;br /&gt;
* [[RemoteAdmin:admin acl clear|admin_acl_clear]] &lt;br /&gt;
* [[RemoteAdmin:admin acl add|admin_acl_add]] &lt;br /&gt;
* [[RemoteAdmin:admin acl remove|admin_acl_remove]]&lt;br /&gt;
&lt;br /&gt;
=== Estate management ===&lt;br /&gt;
* [[RemoteAdmin:admin estate reload|admin_estate_reload]]&lt;br /&gt;
&lt;br /&gt;
=== Administration ===&lt;br /&gt;
* [[RemoteAdmin:admin console command|admin_console_command]]&lt;br /&gt;
&lt;br /&gt;
=== Verschiedenes ===&lt;br /&gt;
* [[RemoteAdmin:admin dialog|admin_dialog]]&lt;br /&gt;
* [[RemoteAdmin:admin reset land|admin_reset_land]]&lt;br /&gt;
* [[RemoteAdmin:admin refresh search|admin_refresh_search]]&lt;br /&gt;
* [[RemoteAdmin:admin refresh map|admin_refresh_map]]&lt;br /&gt;
* [[RemoteAdmin:admin get opensim version|admin_get_opensim_version]]&lt;br /&gt;
* [[RemoteAdmin:admin get agent count|admin_get_agent_count]]&lt;br /&gt;
&lt;br /&gt;
== Unterkategorien ==&lt;br /&gt;
&lt;br /&gt;
* [[RemoteAdmin:RemoteAdmin Examples|RemoteAdmin Examples]] &lt;br /&gt;
* [[RemoteAdmin:RemoteAdmin Proposals|RemoteAdmin Proposals]] &lt;br /&gt;
* [[RemoteAdmin:RemoteAdmin Standards|RemoteAdmin Standards]]&lt;br /&gt;
* [[RemoteAdmin:RemoteAdmin Implement new command|RemoteAdmin How to implement new commands]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:RemoteAdmin]]&lt;br /&gt;
[[Category:German Translations]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/RemoteAdmin/de</id>
		<title>RemoteAdmin/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/RemoteAdmin/de"/>
				<updated>2025-04-02T17:17:27Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: /* Weitere Optionen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|RemoteAdmin}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Einführung ==&lt;br /&gt;
&lt;br /&gt;
RemoteAdmin  ist eine Schnittstelle des OpenSimulator, die verschiedene Operationen können  außerhalb des OpenSimulator ausgeführt werden. Operationen, die sich selbst auf den Simulator beziehen (zB teleport user) sind immer verfügbar. Diejenigen, die sich auf Griddienstleistungen (user creation  und updating) beziehen, sind nur im Standalone-Modus Verfügbar. Im Gridmodus, muss man die ROBUST Ebene verwenden [[UserManipulation]] statt Fähigkeiten. '''&lt;br /&gt;
&lt;br /&gt;
== Das Remote Admin Interface Setup ==&lt;br /&gt;
&lt;br /&gt;
Zuerst sollte man die Remote-Admin-Interface ermöglichen. Nur die folgenden Zeilen zu Ihrer OpenSim.ini FILE-Port hinzufügen sollte auf einen Wert ungleich null gesetzt werden, um die Remote-Admin auf einem anderen Port zu haben. &lt;br /&gt;
&lt;br /&gt;
Ab Version r/16843 können Sie den Zugriff auf Remote-Admin auf bestimmte IP-Adressen beschränken, indem sie optionale access_ip_addresses verwenden. Sie können alle IP-Liste erlaubt durch RemoteAdmin  für den Zugriff auf jede IP durch ein Komma trennt. Wenn access_ip_addresses nicht gesetzt ist, dann können alle IP-Adressen RemoteAdmin zugreifen. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
  [RemoteAdmin]&lt;br /&gt;
    ;; This is the remote admin module, which uses XMLRPC requests to&lt;br /&gt;
    ;; manage regions from a web interface.&lt;br /&gt;
  &lt;br /&gt;
    ;# {enabled} {} {Enable the remote admin interface?} {true false} false&lt;br /&gt;
    enabled = true&lt;br /&gt;
  &lt;br /&gt;
    ;# {port} {enabled:true} {Port to use for the remote admin interface? (0 = default)} {} 0&lt;br /&gt;
    ;; Set this to a nonzero value to have remote admin use a different port&lt;br /&gt;
    port = 10000&lt;br /&gt;
  &lt;br /&gt;
    ;# {access_password} {enabled:true} {Password for the remote admin interface} {}&lt;br /&gt;
    ;; This password is required to make any XMLRPC call (should be set as&lt;br /&gt;
    ;; the &amp;quot;password&amp;quot; parameter)&lt;br /&gt;
    access_password = &amp;quot;passwd123&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
    ;# {access_ip_addresses} {enabled:true} {List the IP addresses allowed to call RemoteAdmin?} {}&lt;br /&gt;
    ;; List the IP addresses allowed to call RemoteAdmin&lt;br /&gt;
    ;; If access_ip_addresses isn't set, then all IP addresses can access RemoteAdmin.&lt;br /&gt;
    ;; access_ip_addresses = 0.0.0.0, 0.0.0.0 ...&lt;br /&gt;
    ; access_ip_addresses =&lt;br /&gt;
  &lt;br /&gt;
    ;# {create_region_enable_voice} {enabled:true} {Enable voice for newly created regions?} {true false} false&lt;br /&gt;
    ;; set this variable to true if you want the create_region XmlRpc&lt;br /&gt;
    ;; call to unconditionally enable voice on all parcels for a newly&lt;br /&gt;
    ;; created region&lt;br /&gt;
    ; create_region_enable_voice = false&lt;br /&gt;
  &lt;br /&gt;
    ;# {create_region_public} {enabled:true} {Make newly created regions public?} {true false} false&lt;br /&gt;
    ;; set this variable to false if you want the create_region XmlRpc&lt;br /&gt;
    ;; call to create all regions as private per default (can be&lt;br /&gt;
    ;; overridden in the XmlRpc call)&lt;br /&gt;
    ; create_region_public = false&lt;br /&gt;
  &lt;br /&gt;
    ;# {enabled_methods} {enabled:true} {List of methods to allow, separated by |} {} all&lt;br /&gt;
    ;; enable only those methods you deem to be appropriate using a | delimited&lt;br /&gt;
    ;; whitelist.&lt;br /&gt;
    ;; For example:&lt;br /&gt;
    ;; enabled_methods = admin_broadcast|admin_save_oar|admin_save_xml&lt;br /&gt;
    ;; if this parameter is not specified but enabled = true, all methods&lt;br /&gt;
    ;; will be available&lt;br /&gt;
    enabled_methods = all&lt;br /&gt;
  &lt;br /&gt;
    ;; specify the default appearance for an avatar created through the remote&lt;br /&gt;
    ;; admin interface&lt;br /&gt;
    ;; This will only take effect is the file specified by the&lt;br /&gt;
    ;; default_appearance setting below exists&lt;br /&gt;
    ; default_male = Default Male&lt;br /&gt;
    ; default_female = Default Female&lt;br /&gt;
  &lt;br /&gt;
    ;; Update appearance copies inventory items and wearables of default&lt;br /&gt;
    ;; avatars. if this value is false, just worn assets are copied to the&lt;br /&gt;
    ;; Clothes folder; if true, all Clothes and Bodyparts subfolders are copied.&lt;br /&gt;
    ;; The receiver will wear the same items the default avatar did wear.&lt;br /&gt;
    ; copy_folders = false&lt;br /&gt;
  &lt;br /&gt;
    ;; Path to default appearance XML file that specifies the look of the&lt;br /&gt;
    ;; default avatars&lt;br /&gt;
    ; default_appearance = default_appearance.xml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Siehe OpenSim.ini.example im opensim/bin/ Verzeichnis für weitere Details.&lt;br /&gt;
&lt;br /&gt;
== PHP Beispiele ==&lt;br /&gt;
&lt;br /&gt;
RemoteAdminTest.php (ACHTUNG: $params nicht $parameters BEACHTEN!)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
// Dieses Beispiel gibt eine Meldung heraus und fährt OpenSim herunter&lt;br /&gt;
//&lt;br /&gt;
// admin_broadcast ist das kommando für Nachrichten&lt;br /&gt;
// $params hier wird die Meldung hineingeschrieben&lt;br /&gt;
// &lt;br /&gt;
// Das Kommando admin_shutdown fährt OpenSim herunter&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
include('RemoteAdmin.php'); // RemoteAdmin.php Ist der Name der PHP-Klasse&lt;br /&gt;
&lt;br /&gt;
// Instanzieren der Klasse (IP oder Adresse, Port, Passwort)&lt;br /&gt;
$myRA = new RemoteAdmin('127.0.0.1', 9000, 'secret');&lt;br /&gt;
&lt;br /&gt;
// RemoteAdmin-Befehle ausführen&lt;br /&gt;
$params = array('message' =&amp;gt; 'Diese Nachricht wird an alle Regionen des OpenSimulators gesendet!');&lt;br /&gt;
&lt;br /&gt;
$myRA-&amp;gt;SendCommand('admin_broadcast', $params);&lt;br /&gt;
&lt;br /&gt;
// Wenn für einen RemoteAdmin-Befehl keine Parameter benötigt, &lt;br /&gt;
// müssen Sie den zweiten Parameter in der Funktion SendCommand nicht angeben.&lt;br /&gt;
$myRA-&amp;gt;SendCommand('admin_shutdown'); &lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RemoteAdmin.php&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	&lt;br /&gt;
/***********************************************************************&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
Copyright (c) 2008, The New World Grid Regents http://www.newworldgrid.com and Contributors &lt;br /&gt;
All rights reserved.&lt;br /&gt;
&lt;br /&gt;
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:&lt;br /&gt;
&lt;br /&gt;
	* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.&lt;br /&gt;
	* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer &lt;br /&gt;
	in the documentation and/or other materials provided with the distribution.&lt;br /&gt;
	* Neither the name of the New World Grid nor the names of its contributors may be used to endorse or promote products derived &lt;br /&gt;
	from this software without specific prior written permission.&lt;br /&gt;
&lt;br /&gt;
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &amp;quot;AS IS&amp;quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, &lt;br /&gt;
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. &lt;br /&gt;
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, &lt;br /&gt;
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; &lt;br /&gt;
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE &lt;br /&gt;
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
***********************************************************************/&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	// How to instantiate a RemoteAdmin object ?&lt;br /&gt;
	// $myremoteadmin = new RemoteAdmin(&amp;quot;mySimulatorURL&amp;quot;, Port, &amp;quot;secret password&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	// How to send commands to remoteadmin plugin ?&lt;br /&gt;
	// $myremoteadmin-&amp;gt;SendCommand('admin_broadcast', array('message' =&amp;gt; 'Message to broadcast to all regions'));&lt;br /&gt;
	// $myremoteadmin-&amp;gt;SendCommand('admin_shutdown');&lt;br /&gt;
	// Commands like admin_shutdown don't need params, so you can left the second SendCommand functino param empty ;)&lt;br /&gt;
	&lt;br /&gt;
	// Example for error handling&lt;br /&gt;
	// &lt;br /&gt;
	// include('classes/RemoteAdmin.php');&lt;br /&gt;
	// $RA = new RemoteAdmin('localhost', 9000, 'secret');&lt;br /&gt;
	// $retour = $RA-&amp;gt;SendCommand('admin_shutdown');&lt;br /&gt;
	// if ($retour === FALSE)&lt;br /&gt;
	// {&lt;br /&gt;
	// 	echo 'ERROR';&lt;br /&gt;
	// }&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	class RemoteAdmin&lt;br /&gt;
	{&lt;br /&gt;
		&lt;br /&gt;
		function RemoteAdmin($sURL, $sPort, $pass)&lt;br /&gt;
		{&lt;br /&gt;
			&lt;br /&gt;
			$this-&amp;gt;simulatorURL = $sURL;		// String&lt;br /&gt;
			$this-&amp;gt;simulatorPort = $sPort;	// Integer&lt;br /&gt;
			$this-&amp;gt;password = $pass;&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		function SendCommand($command, $params=array())&lt;br /&gt;
		{&lt;br /&gt;
			&lt;br /&gt;
			$paramsNames = array_keys($params);&lt;br /&gt;
			$paramsValues = array_values($params);&lt;br /&gt;
			&lt;br /&gt;
			// Building the XML data to pass to RemoteAdmin through XML-RPC ;)&lt;br /&gt;
			&lt;br /&gt;
			$xml = '&amp;lt;methodCall&amp;gt;&lt;br /&gt;
						&amp;lt;methodName&amp;gt;' . htmlspecialchars($command) . '&amp;lt;/methodName&amp;gt;&lt;br /&gt;
						&amp;lt;params&amp;gt;&lt;br /&gt;
							&amp;lt;param&amp;gt;&lt;br /&gt;
								&amp;lt;value&amp;gt;&lt;br /&gt;
									&amp;lt;struct&amp;gt;&lt;br /&gt;
										&amp;lt;member&amp;gt;&lt;br /&gt;
											&amp;lt;name&amp;gt;password&amp;lt;/name&amp;gt;&lt;br /&gt;
											&amp;lt;value&amp;gt;&amp;lt;string&amp;gt;' . htmlspecialchars($this-&amp;gt;password) . '&amp;lt;/string&amp;gt;&amp;lt;/value&amp;gt;&lt;br /&gt;
										&amp;lt;/member&amp;gt;';&lt;br /&gt;
			if (count($params) != 0)&lt;br /&gt;
			{&lt;br /&gt;
				&lt;br /&gt;
				for ($p = 0; $p &amp;lt; count($params); $p++)&lt;br /&gt;
				{&lt;br /&gt;
					&lt;br /&gt;
					$xml .= '&amp;lt;member&amp;gt;&amp;lt;name&amp;gt;' . htmlspecialchars($paramsNames[$p]) . '&amp;lt;/name&amp;gt;';&lt;br /&gt;
					$xml .= '&amp;lt;value&amp;gt;' . htmlspecialchars($paramsValues[$p]) . '&amp;lt;/value&amp;gt;&amp;lt;/member&amp;gt;';&lt;br /&gt;
					&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
									&lt;br /&gt;
			$xml .= '				&amp;lt;/struct&amp;gt;&lt;br /&gt;
								&amp;lt;/value&amp;gt;&lt;br /&gt;
							&amp;lt;/param&amp;gt;&lt;br /&gt;
						&amp;lt;/params&amp;gt;&lt;br /&gt;
					&amp;lt;/methodCall&amp;gt;';&lt;br /&gt;
				&lt;br /&gt;
			//&lt;br /&gt;
			// echo $xml;&lt;br /&gt;
			//&lt;br /&gt;
				&lt;br /&gt;
					&lt;br /&gt;
			// Now building headers and sending the data ;)&lt;br /&gt;
			$host = $this-&amp;gt;simulatorURL;&lt;br /&gt;
			$port = $this-&amp;gt;simulatorPort;&lt;br /&gt;
			$timeout = 5; // Timeout in seconds&lt;br /&gt;
			&lt;br /&gt;
			error_reporting(0);&lt;br /&gt;
			&lt;br /&gt;
			$fp = fsockopen($host, $port, $errno, $errstr, $timeout);&lt;br /&gt;
			if (!$fp)&lt;br /&gt;
			{&lt;br /&gt;
				return FALSE; // If contacting host timeouts or impossible to create the socket, the method returns FALSE&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				fputs($fp, &amp;quot;POST / HTTP/1.1\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, &amp;quot;Host: $host\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, &amp;quot;Content-type: text/xml\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, &amp;quot;Content-length: &amp;quot;. strlen($xml) .&amp;quot;\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, &amp;quot;Connection: close\r\n\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, $xml);&lt;br /&gt;
				$res = &amp;quot;&amp;quot;;&lt;br /&gt;
				while(!feof($fp)) {&lt;br /&gt;
					$res .= fgets($fp, 128);&lt;br /&gt;
				}&lt;br /&gt;
				fclose($fp);&lt;br /&gt;
				$response = substr($res, strpos($res, &amp;quot;\r\n\r\n&amp;quot;));;&lt;br /&gt;
						&lt;br /&gt;
				// Now parsing the XML response from RemoteAdmin ;)&lt;br /&gt;
				&lt;br /&gt;
				$result = array();&lt;br /&gt;
				if (preg_match_all('#&amp;lt;name&amp;gt;(.+)&amp;lt;/name&amp;gt;&amp;lt;value&amp;gt;&amp;lt;(string|int)&amp;gt;(.*)&amp;lt;/\2&amp;gt;&amp;lt;/value&amp;gt;#U', $response, $regs, PREG_SET_ORDER)) {&lt;br /&gt;
				  foreach($regs as $key=&amp;gt;$val) {&lt;br /&gt;
					$result[$val[1]] = $val[3];&lt;br /&gt;
				  }&lt;br /&gt;
				}&lt;br /&gt;
				return $result;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
		&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Python 3.6 Beispiele ==&lt;br /&gt;
&lt;br /&gt;
=== Python 3.6 Beispiel - admin_broadcast -  ===&lt;br /&gt;
&lt;br /&gt;
Dieser Python 3.6 Beitrag ist ein User Projekt, es wird kein Support über die Admins geben.&lt;br /&gt;
&lt;br /&gt;
Bitte seit vorsichtig, ich schließe jede Gewährleistung aus.&lt;br /&gt;
&lt;br /&gt;
Ohne Programmierkenntnisse oder unsachgemäßer Anwendung, kann es zu Schäden am OpenSimulator oder/und dem Betriebssystem kommen.&lt;br /&gt;
&lt;br /&gt;
Faustregel: Wenn ihr nicht sicher seit, ob ihr gesichert habt, dann sichert.&lt;br /&gt;
&lt;br /&gt;
Dies ist zuletzt getestet am 23.04.2018 mit Python 3.6.3 auf Windows 10 und Ubuntu Server 17.10.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python3&lt;br /&gt;
 &lt;br /&gt;
# admin_broadcast senden einer Nachricht an alle in einer Region.&lt;br /&gt;
# Python 3.6 - 21.04.2018 by Manfred Aabye&lt;br /&gt;
 &lt;br /&gt;
# Module laden&lt;br /&gt;
import xmlrpc.client &lt;br /&gt;
 &lt;br /&gt;
# Information&lt;br /&gt;
print('---------------------------------------------------------------------')&lt;br /&gt;
print('Setup: Opensim.ini - Del ; - ConsoleUser -  ConsolePass')&lt;br /&gt;
print('---------------------------------------------------------------------')&lt;br /&gt;
print('Beispiel:')&lt;br /&gt;
print('---------------------------------------------------------------------')&lt;br /&gt;
print('SimulatorAdress = http://127.0.0.1:9000/ or http://myserver.com:9000/')&lt;br /&gt;
print('ConsoleUser = Test')&lt;br /&gt;
print('ConsolePass = secret')&lt;br /&gt;
print('RegionMessage = Dies ist ein toller Text an einem tollen Tag.')&lt;br /&gt;
print('---------------------------------------------------------------------')&lt;br /&gt;
&lt;br /&gt;
# Abfragen&lt;br /&gt;
SimulatorAdress = input('SimulatorAdress:')&lt;br /&gt;
ConsoleUser = input('ConsoleUser:')&lt;br /&gt;
ConsolePass = input('ConsolePass:')&lt;br /&gt;
RegionMessage = input('RegionMessage:')&lt;br /&gt;
# Eingabe kann X Belibig geaendert werden RegionMessage = input('RegionMessage:') - X_Belibig = input('geben sie etwas fuer X_Belibig ein:')&lt;br /&gt;
# X_Belibig ist die Speicherstelle von input, der Text innerhalb der Klammern ist nur ein Text.&lt;br /&gt;
 &lt;br /&gt;
# Funktion admin_broadcast&lt;br /&gt;
def admin_broadcast():&lt;br /&gt;
    # Server Initialisieren &lt;br /&gt;
    Simulator = xmlrpc.client.Server(SimulatorAdress) &lt;br /&gt;
    # Password und Nachricht senden RegionMessage. Hier funktionieren auch alle anderen admin_ Befehle.&lt;br /&gt;
    # Bitte nicht vergessen auch die Eingabe zu aendern&lt;br /&gt;
    Simulator.admin_broadcast({'password': ConsolePass, 'message': RegionMessage})&lt;br /&gt;
 &lt;br /&gt;
# admin_broadcast Aufruf dieser kann nun an irgendeiner stelle aufgerufen werden. &lt;br /&gt;
admin_broadcast()&lt;br /&gt;
 &lt;br /&gt;
# Ende admin_broadcast&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python 3.6 RemoteAdmin nur teilweise getestet ===&lt;br /&gt;
&lt;br /&gt;
Dies basiert auf dem Python 3.6 Beispiel - admin_broadcast – und soll die Erweiterung/Veränderung des source vereinfachen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    # Agent Management&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_teleport_agent({'password':ConsolePass,'agent_first_name':agent_first_name,'agent_last_name':agent_last_name,'region_name':region_name, 'pos_x':pos_x, 'pos_y':pos_y})&lt;br /&gt;
    Simulator.admin_get_agents({'password':ConsolePass,'region_name':region_name,'Regions-ID':Regions-ID})&lt;br /&gt;
&lt;br /&gt;
    # Benutzerkontenverwaltung&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_create_user({'password':ConsolePass,'user_firstname':user_firstname,'user_lastname':user_lastname,'user_password':user_password,'start_region_x':start_region_x,'start_region_y':start_region_y,'user_email':user_email})&lt;br /&gt;
    # Simulator.admin_create_user_email dies ist jetzt in admin_create_user enthalten.&lt;br /&gt;
    Simulator.admin_exists_user({'password':ConsolePass,'user_firstname':user_firstname,'user_lastname':user_lastname})&lt;br /&gt;
    Simulator.admin_update_user({'password':ConsolePass,'user_firstname':user_firstname,'user_lastname':user_lastname})&lt;br /&gt;
    Simulator.admin_authenticate_user({'password':ConsolePass,'user_firstname':user_firstname,'user_lastname':user_lastname,'user_password':user_password,'token_lifetime':token_lifetime})&lt;br /&gt;
&lt;br /&gt;
    # Region Management&lt;br /&gt;
&lt;br /&gt;
    Simulator.Simulator.admin_broadcast({'password': ConsolePass, 'message': RegionMessage})&lt;br /&gt;
    Simulator.admin_close_region({'password':ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_create_region({'password':ConsolePass,'region_name':region_name,'listen_ip':listen_ip,'listen_port':listen_port,'external_address':external_address,'region_x':region_x,'region_y':region_y,'estate_name':estate_name})&lt;br /&gt;
    Simulator.admin_delete_region({'password':ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_modify_region({'password':ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_region_query({'password':ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_restart({'password':ConsolePass,'region_id':region_id})&lt;br /&gt;
    Simulator.admin_shutdown({'password':ConsolePass,'milliseconds':milliseconds})&lt;br /&gt;
&lt;br /&gt;
    # Region Dateiverwaltung&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_load_heightmap({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_load_oar({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_load_xml({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_save_heightmap({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_save_oar({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_save_xml({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
&lt;br /&gt;
    # Region Zugangsmanagement&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_acl_list({'password': ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_acl_clear({'password': ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_acl_add({'password': ConsolePass,'region_name':region_name,'users':users})&lt;br /&gt;
    Simulator.admin_acl_remove({'password': ConsolePass,'region_name':region_name,'users':users})&lt;br /&gt;
&lt;br /&gt;
    # Estate Immobilienverwaltung&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_estate_reload({'password':ConsolePass})&lt;br /&gt;
&lt;br /&gt;
    # Administrationskonsole&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_console_command({'password':ConsolePass,'console_command':console_command})&lt;br /&gt;
&lt;br /&gt;
    # Verschiedenes &lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_dialog({'password': ConsolePass, 'message': RegionMessage})&lt;br /&gt;
    #Simulator.admin_reset_land({'password':ConsolePass}) # keine ahnung&lt;br /&gt;
    #Simulator.admin_refresh_search({'password':ConsolePass}) # keine ahnung&lt;br /&gt;
    #Simulator.admin_refresh_map({'password':ConsolePass}) # keine ahnung&lt;br /&gt;
    #Simulator.admin_get_opensim_version({'password':ConsolePass}) # Rueckgabeparameter: Ich weiss nicht wie das geht.&lt;br /&gt;
    #Simulator.admin_get_agent_count({'password':ConsolePass}) # keine ahnung&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RemoteAdmin Befehle ==&lt;br /&gt;
&lt;br /&gt;
Alle Befehlsparameter die UUID einer Region nutzen &amp;quot;region_id&amp;quot; als Parameter. Alle anderen Parameter wie zB. region_uuid oder regionId sind nach Juni 2012 entfernt worden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Agent management ===&lt;br /&gt;
*[[Remoteadmin:admin teleport agent|admin_teleport_agent]]&lt;br /&gt;
*[[Remoteadmin:admin get agents|admin_get_agents]]&lt;br /&gt;
&lt;br /&gt;
=== User account management ===&lt;br /&gt;
*[[RemoteAdmin:admin create user|admin_create_user]] &lt;br /&gt;
*[[RemoteAdmin:admin create user email|admin_create_user_email]] &lt;br /&gt;
*[[RemoteAdmin:admin exists user|admin_exists_user]] &lt;br /&gt;
*[[RemoteAdmin:admin update user|admin_update_user]]&lt;br /&gt;
*[[RemoteAdmin:admin authenticate user|admin_authenticate_user]]&lt;br /&gt;
&lt;br /&gt;
=== Object management ===&lt;br /&gt;
&lt;br /&gt;
Noch keine RemoteAdmin Befehle vorhanden.&lt;br /&gt;
&lt;br /&gt;
=== Parcel management ===&lt;br /&gt;
&lt;br /&gt;
Noch keine RemoteAdmin Befehle vorhanden.&lt;br /&gt;
&lt;br /&gt;
=== Region management ===&lt;br /&gt;
*[[RemoteAdmin:admin broadcast|admin_broadcast]] &lt;br /&gt;
*[[RemoteAdmin:admin close region|admin_close_region]] &lt;br /&gt;
*[[RemoteAdmin:admin create region|admin_create_region]] &lt;br /&gt;
*[[RemoteAdmin:admin delete region|admin_delete_region]] &lt;br /&gt;
*[[RemoteAdmin:admin modify region|admin_modify_region]] &lt;br /&gt;
*[[RemoteAdmin:admin region query|admin_region_query]] &lt;br /&gt;
*[[RemoteAdmin:admin restart|admin_restart]] &lt;br /&gt;
*[[RemoteAdmin:admin shutdown|admin_shutdown]] &lt;br /&gt;
&lt;br /&gt;
=== Region file management ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
* [[RemoteAdmin:admin load heightmap|admin_load_heightmap]]&lt;br /&gt;
* [[RemoteAdmin:admin load oar|admin_load_oar]] &lt;br /&gt;
* [[RemoteAdmin:admin load xml|admin_load_xml]] &lt;br /&gt;
* [[RemoteAdmin:admin save heightmap|admin_save_heightmap]] &lt;br /&gt;
* [[RemoteAdmin:admin save oar|admin_save_oar]] &lt;br /&gt;
* [[RemoteAdmin:admin save xml|admin_save_xml]]&lt;br /&gt;
&lt;br /&gt;
=== Region access management ===&lt;br /&gt;
* [[RemoteAdmin:admin acl list|admin_acl_list]] &lt;br /&gt;
* [[RemoteAdmin:admin acl clear|admin_acl_clear]] &lt;br /&gt;
* [[RemoteAdmin:admin acl add|admin_acl_add]] &lt;br /&gt;
* [[RemoteAdmin:admin acl remove|admin_acl_remove]]&lt;br /&gt;
&lt;br /&gt;
=== Estate management ===&lt;br /&gt;
* [[RemoteAdmin:admin estate reload|admin_estate_reload]]&lt;br /&gt;
&lt;br /&gt;
=== Administration ===&lt;br /&gt;
* [[RemoteAdmin:admin console command|admin_console_command]]&lt;br /&gt;
&lt;br /&gt;
=== Verschiedenes ===&lt;br /&gt;
* [[RemoteAdmin:admin dialog|admin_dialog]]&lt;br /&gt;
* [[RemoteAdmin:admin reset land|admin_reset_land]]&lt;br /&gt;
* [[RemoteAdmin:admin refresh search|admin_refresh_search]]&lt;br /&gt;
* [[RemoteAdmin:admin refresh map|admin_refresh_map]]&lt;br /&gt;
* [[RemoteAdmin:admin get opensim version|admin_get_opensim_version]]&lt;br /&gt;
* [[RemoteAdmin:admin get agent count|admin_get_agent_count]]&lt;br /&gt;
&lt;br /&gt;
== Unterkategorien ==&lt;br /&gt;
&lt;br /&gt;
* [[RemoteAdmin:RemoteAdmin Examples|RemoteAdmin Examples]] &lt;br /&gt;
* [[RemoteAdmin:RemoteAdmin Proposals|RemoteAdmin Proposals]] &lt;br /&gt;
* [[RemoteAdmin:RemoteAdmin Standards|RemoteAdmin Standards]]&lt;br /&gt;
* [[RemoteAdmin:RemoteAdmin Implement new command|RemoteAdmin How to implement new commands]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:RemoteAdmin]]&lt;br /&gt;
[[Category:German Translations]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/RemoteAdmin/de</id>
		<title>RemoteAdmin/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/RemoteAdmin/de"/>
				<updated>2025-04-02T17:14:40Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|RemoteAdmin}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Einführung ==&lt;br /&gt;
&lt;br /&gt;
RemoteAdmin  ist eine Schnittstelle des OpenSimulator, die verschiedene Operationen können  außerhalb des OpenSimulator ausgeführt werden. Operationen, die sich selbst auf den Simulator beziehen (zB teleport user) sind immer verfügbar. Diejenigen, die sich auf Griddienstleistungen (user creation  und updating) beziehen, sind nur im Standalone-Modus Verfügbar. Im Gridmodus, muss man die ROBUST Ebene verwenden [[UserManipulation]] statt Fähigkeiten. '''&lt;br /&gt;
&lt;br /&gt;
== Das Remote Admin Interface Setup ==&lt;br /&gt;
&lt;br /&gt;
Zuerst sollte man die Remote-Admin-Interface ermöglichen. Nur die folgenden Zeilen zu Ihrer OpenSim.ini FILE-Port hinzufügen sollte auf einen Wert ungleich null gesetzt werden, um die Remote-Admin auf einem anderen Port zu haben. &lt;br /&gt;
&lt;br /&gt;
Ab Version r/16843 können Sie den Zugriff auf Remote-Admin auf bestimmte IP-Adressen beschränken, indem sie optionale access_ip_addresses verwenden. Sie können alle IP-Liste erlaubt durch RemoteAdmin  für den Zugriff auf jede IP durch ein Komma trennt. Wenn access_ip_addresses nicht gesetzt ist, dann können alle IP-Adressen RemoteAdmin zugreifen. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
  [RemoteAdmin]&lt;br /&gt;
    ;; This is the remote admin module, which uses XMLRPC requests to&lt;br /&gt;
    ;; manage regions from a web interface.&lt;br /&gt;
  &lt;br /&gt;
    ;# {enabled} {} {Enable the remote admin interface?} {true false} false&lt;br /&gt;
    enabled = true&lt;br /&gt;
  &lt;br /&gt;
    ;# {port} {enabled:true} {Port to use for the remote admin interface? (0 = default)} {} 0&lt;br /&gt;
    ;; Set this to a nonzero value to have remote admin use a different port&lt;br /&gt;
    port = 10000&lt;br /&gt;
  &lt;br /&gt;
    ;# {access_password} {enabled:true} {Password for the remote admin interface} {}&lt;br /&gt;
    ;; This password is required to make any XMLRPC call (should be set as&lt;br /&gt;
    ;; the &amp;quot;password&amp;quot; parameter)&lt;br /&gt;
    access_password = &amp;quot;passwd123&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
    ;# {access_ip_addresses} {enabled:true} {List the IP addresses allowed to call RemoteAdmin?} {}&lt;br /&gt;
    ;; List the IP addresses allowed to call RemoteAdmin&lt;br /&gt;
    ;; If access_ip_addresses isn't set, then all IP addresses can access RemoteAdmin.&lt;br /&gt;
    ;; access_ip_addresses = 0.0.0.0, 0.0.0.0 ...&lt;br /&gt;
    ; access_ip_addresses =&lt;br /&gt;
  &lt;br /&gt;
    ;# {create_region_enable_voice} {enabled:true} {Enable voice for newly created regions?} {true false} false&lt;br /&gt;
    ;; set this variable to true if you want the create_region XmlRpc&lt;br /&gt;
    ;; call to unconditionally enable voice on all parcels for a newly&lt;br /&gt;
    ;; created region&lt;br /&gt;
    ; create_region_enable_voice = false&lt;br /&gt;
  &lt;br /&gt;
    ;# {create_region_public} {enabled:true} {Make newly created regions public?} {true false} false&lt;br /&gt;
    ;; set this variable to false if you want the create_region XmlRpc&lt;br /&gt;
    ;; call to create all regions as private per default (can be&lt;br /&gt;
    ;; overridden in the XmlRpc call)&lt;br /&gt;
    ; create_region_public = false&lt;br /&gt;
  &lt;br /&gt;
    ;# {enabled_methods} {enabled:true} {List of methods to allow, separated by |} {} all&lt;br /&gt;
    ;; enable only those methods you deem to be appropriate using a | delimited&lt;br /&gt;
    ;; whitelist.&lt;br /&gt;
    ;; For example:&lt;br /&gt;
    ;; enabled_methods = admin_broadcast|admin_save_oar|admin_save_xml&lt;br /&gt;
    ;; if this parameter is not specified but enabled = true, all methods&lt;br /&gt;
    ;; will be available&lt;br /&gt;
    enabled_methods = all&lt;br /&gt;
  &lt;br /&gt;
    ;; specify the default appearance for an avatar created through the remote&lt;br /&gt;
    ;; admin interface&lt;br /&gt;
    ;; This will only take effect is the file specified by the&lt;br /&gt;
    ;; default_appearance setting below exists&lt;br /&gt;
    ; default_male = Default Male&lt;br /&gt;
    ; default_female = Default Female&lt;br /&gt;
  &lt;br /&gt;
    ;; Update appearance copies inventory items and wearables of default&lt;br /&gt;
    ;; avatars. if this value is false, just worn assets are copied to the&lt;br /&gt;
    ;; Clothes folder; if true, all Clothes and Bodyparts subfolders are copied.&lt;br /&gt;
    ;; The receiver will wear the same items the default avatar did wear.&lt;br /&gt;
    ; copy_folders = false&lt;br /&gt;
  &lt;br /&gt;
    ;; Path to default appearance XML file that specifies the look of the&lt;br /&gt;
    ;; default avatars&lt;br /&gt;
    ; default_appearance = default_appearance.xml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Siehe OpenSim.ini.example im opensim/bin/ Verzeichnis für weitere Details.&lt;br /&gt;
&lt;br /&gt;
=== Weitere Optionen ===&lt;br /&gt;
&lt;br /&gt;
Sie können auch einen anderen Port für die XMLRPCAdmin command listener  aus dem Standard-Simulator HTTP-Port angeben.&lt;br /&gt;
&lt;br /&gt;
 [RemoteAdmin]&lt;br /&gt;
 port = &amp;lt;port-number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PHP Beispiele ==&lt;br /&gt;
&lt;br /&gt;
RemoteAdminTest.php (ACHTUNG: $params nicht $parameters BEACHTEN!)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
// Dieses Beispiel gibt eine Meldung heraus und fährt OpenSim herunter&lt;br /&gt;
//&lt;br /&gt;
// admin_broadcast ist das kommando für Nachrichten&lt;br /&gt;
// $params hier wird die Meldung hineingeschrieben&lt;br /&gt;
// &lt;br /&gt;
// Das Kommando admin_shutdown fährt OpenSim herunter&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
include('RemoteAdmin.php'); // RemoteAdmin.php Ist der Name der PHP-Klasse&lt;br /&gt;
&lt;br /&gt;
// Instanzieren der Klasse (IP oder Adresse, Port, Passwort)&lt;br /&gt;
$myRA = new RemoteAdmin('127.0.0.1', 9000, 'secret');&lt;br /&gt;
&lt;br /&gt;
// RemoteAdmin-Befehle ausführen&lt;br /&gt;
$params = array('message' =&amp;gt; 'Diese Nachricht wird an alle Regionen des OpenSimulators gesendet!');&lt;br /&gt;
&lt;br /&gt;
$myRA-&amp;gt;SendCommand('admin_broadcast', $params);&lt;br /&gt;
&lt;br /&gt;
// Wenn für einen RemoteAdmin-Befehl keine Parameter benötigt, &lt;br /&gt;
// müssen Sie den zweiten Parameter in der Funktion SendCommand nicht angeben.&lt;br /&gt;
$myRA-&amp;gt;SendCommand('admin_shutdown'); &lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RemoteAdmin.php&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	&lt;br /&gt;
/***********************************************************************&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
Copyright (c) 2008, The New World Grid Regents http://www.newworldgrid.com and Contributors &lt;br /&gt;
All rights reserved.&lt;br /&gt;
&lt;br /&gt;
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:&lt;br /&gt;
&lt;br /&gt;
	* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.&lt;br /&gt;
	* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer &lt;br /&gt;
	in the documentation and/or other materials provided with the distribution.&lt;br /&gt;
	* Neither the name of the New World Grid nor the names of its contributors may be used to endorse or promote products derived &lt;br /&gt;
	from this software without specific prior written permission.&lt;br /&gt;
&lt;br /&gt;
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &amp;quot;AS IS&amp;quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, &lt;br /&gt;
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. &lt;br /&gt;
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, &lt;br /&gt;
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; &lt;br /&gt;
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE &lt;br /&gt;
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
***********************************************************************/&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	// How to instantiate a RemoteAdmin object ?&lt;br /&gt;
	// $myremoteadmin = new RemoteAdmin(&amp;quot;mySimulatorURL&amp;quot;, Port, &amp;quot;secret password&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	// How to send commands to remoteadmin plugin ?&lt;br /&gt;
	// $myremoteadmin-&amp;gt;SendCommand('admin_broadcast', array('message' =&amp;gt; 'Message to broadcast to all regions'));&lt;br /&gt;
	// $myremoteadmin-&amp;gt;SendCommand('admin_shutdown');&lt;br /&gt;
	// Commands like admin_shutdown don't need params, so you can left the second SendCommand functino param empty ;)&lt;br /&gt;
	&lt;br /&gt;
	// Example for error handling&lt;br /&gt;
	// &lt;br /&gt;
	// include('classes/RemoteAdmin.php');&lt;br /&gt;
	// $RA = new RemoteAdmin('localhost', 9000, 'secret');&lt;br /&gt;
	// $retour = $RA-&amp;gt;SendCommand('admin_shutdown');&lt;br /&gt;
	// if ($retour === FALSE)&lt;br /&gt;
	// {&lt;br /&gt;
	// 	echo 'ERROR';&lt;br /&gt;
	// }&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	class RemoteAdmin&lt;br /&gt;
	{&lt;br /&gt;
		&lt;br /&gt;
		function RemoteAdmin($sURL, $sPort, $pass)&lt;br /&gt;
		{&lt;br /&gt;
			&lt;br /&gt;
			$this-&amp;gt;simulatorURL = $sURL;		// String&lt;br /&gt;
			$this-&amp;gt;simulatorPort = $sPort;	// Integer&lt;br /&gt;
			$this-&amp;gt;password = $pass;&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		function SendCommand($command, $params=array())&lt;br /&gt;
		{&lt;br /&gt;
			&lt;br /&gt;
			$paramsNames = array_keys($params);&lt;br /&gt;
			$paramsValues = array_values($params);&lt;br /&gt;
			&lt;br /&gt;
			// Building the XML data to pass to RemoteAdmin through XML-RPC ;)&lt;br /&gt;
			&lt;br /&gt;
			$xml = '&amp;lt;methodCall&amp;gt;&lt;br /&gt;
						&amp;lt;methodName&amp;gt;' . htmlspecialchars($command) . '&amp;lt;/methodName&amp;gt;&lt;br /&gt;
						&amp;lt;params&amp;gt;&lt;br /&gt;
							&amp;lt;param&amp;gt;&lt;br /&gt;
								&amp;lt;value&amp;gt;&lt;br /&gt;
									&amp;lt;struct&amp;gt;&lt;br /&gt;
										&amp;lt;member&amp;gt;&lt;br /&gt;
											&amp;lt;name&amp;gt;password&amp;lt;/name&amp;gt;&lt;br /&gt;
											&amp;lt;value&amp;gt;&amp;lt;string&amp;gt;' . htmlspecialchars($this-&amp;gt;password) . '&amp;lt;/string&amp;gt;&amp;lt;/value&amp;gt;&lt;br /&gt;
										&amp;lt;/member&amp;gt;';&lt;br /&gt;
			if (count($params) != 0)&lt;br /&gt;
			{&lt;br /&gt;
				&lt;br /&gt;
				for ($p = 0; $p &amp;lt; count($params); $p++)&lt;br /&gt;
				{&lt;br /&gt;
					&lt;br /&gt;
					$xml .= '&amp;lt;member&amp;gt;&amp;lt;name&amp;gt;' . htmlspecialchars($paramsNames[$p]) . '&amp;lt;/name&amp;gt;';&lt;br /&gt;
					$xml .= '&amp;lt;value&amp;gt;' . htmlspecialchars($paramsValues[$p]) . '&amp;lt;/value&amp;gt;&amp;lt;/member&amp;gt;';&lt;br /&gt;
					&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
									&lt;br /&gt;
			$xml .= '				&amp;lt;/struct&amp;gt;&lt;br /&gt;
								&amp;lt;/value&amp;gt;&lt;br /&gt;
							&amp;lt;/param&amp;gt;&lt;br /&gt;
						&amp;lt;/params&amp;gt;&lt;br /&gt;
					&amp;lt;/methodCall&amp;gt;';&lt;br /&gt;
				&lt;br /&gt;
			//&lt;br /&gt;
			// echo $xml;&lt;br /&gt;
			//&lt;br /&gt;
				&lt;br /&gt;
					&lt;br /&gt;
			// Now building headers and sending the data ;)&lt;br /&gt;
			$host = $this-&amp;gt;simulatorURL;&lt;br /&gt;
			$port = $this-&amp;gt;simulatorPort;&lt;br /&gt;
			$timeout = 5; // Timeout in seconds&lt;br /&gt;
			&lt;br /&gt;
			error_reporting(0);&lt;br /&gt;
			&lt;br /&gt;
			$fp = fsockopen($host, $port, $errno, $errstr, $timeout);&lt;br /&gt;
			if (!$fp)&lt;br /&gt;
			{&lt;br /&gt;
				return FALSE; // If contacting host timeouts or impossible to create the socket, the method returns FALSE&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				fputs($fp, &amp;quot;POST / HTTP/1.1\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, &amp;quot;Host: $host\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, &amp;quot;Content-type: text/xml\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, &amp;quot;Content-length: &amp;quot;. strlen($xml) .&amp;quot;\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, &amp;quot;Connection: close\r\n\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, $xml);&lt;br /&gt;
				$res = &amp;quot;&amp;quot;;&lt;br /&gt;
				while(!feof($fp)) {&lt;br /&gt;
					$res .= fgets($fp, 128);&lt;br /&gt;
				}&lt;br /&gt;
				fclose($fp);&lt;br /&gt;
				$response = substr($res, strpos($res, &amp;quot;\r\n\r\n&amp;quot;));;&lt;br /&gt;
						&lt;br /&gt;
				// Now parsing the XML response from RemoteAdmin ;)&lt;br /&gt;
				&lt;br /&gt;
				$result = array();&lt;br /&gt;
				if (preg_match_all('#&amp;lt;name&amp;gt;(.+)&amp;lt;/name&amp;gt;&amp;lt;value&amp;gt;&amp;lt;(string|int)&amp;gt;(.*)&amp;lt;/\2&amp;gt;&amp;lt;/value&amp;gt;#U', $response, $regs, PREG_SET_ORDER)) {&lt;br /&gt;
				  foreach($regs as $key=&amp;gt;$val) {&lt;br /&gt;
					$result[$val[1]] = $val[3];&lt;br /&gt;
				  }&lt;br /&gt;
				}&lt;br /&gt;
				return $result;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
		&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Python 3.6 Beispiele ==&lt;br /&gt;
&lt;br /&gt;
=== Python 3.6 Beispiel - admin_broadcast -  ===&lt;br /&gt;
&lt;br /&gt;
Dieser Python 3.6 Beitrag ist ein User Projekt, es wird kein Support über die Admins geben.&lt;br /&gt;
&lt;br /&gt;
Bitte seit vorsichtig, ich schließe jede Gewährleistung aus.&lt;br /&gt;
&lt;br /&gt;
Ohne Programmierkenntnisse oder unsachgemäßer Anwendung, kann es zu Schäden am OpenSimulator oder/und dem Betriebssystem kommen.&lt;br /&gt;
&lt;br /&gt;
Faustregel: Wenn ihr nicht sicher seit, ob ihr gesichert habt, dann sichert.&lt;br /&gt;
&lt;br /&gt;
Dies ist zuletzt getestet am 23.04.2018 mit Python 3.6.3 auf Windows 10 und Ubuntu Server 17.10.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python3&lt;br /&gt;
 &lt;br /&gt;
# admin_broadcast senden einer Nachricht an alle in einer Region.&lt;br /&gt;
# Python 3.6 - 21.04.2018 by Manfred Aabye&lt;br /&gt;
 &lt;br /&gt;
# Module laden&lt;br /&gt;
import xmlrpc.client &lt;br /&gt;
 &lt;br /&gt;
# Information&lt;br /&gt;
print('---------------------------------------------------------------------')&lt;br /&gt;
print('Setup: Opensim.ini - Del ; - ConsoleUser -  ConsolePass')&lt;br /&gt;
print('---------------------------------------------------------------------')&lt;br /&gt;
print('Beispiel:')&lt;br /&gt;
print('---------------------------------------------------------------------')&lt;br /&gt;
print('SimulatorAdress = http://127.0.0.1:9000/ or http://myserver.com:9000/')&lt;br /&gt;
print('ConsoleUser = Test')&lt;br /&gt;
print('ConsolePass = secret')&lt;br /&gt;
print('RegionMessage = Dies ist ein toller Text an einem tollen Tag.')&lt;br /&gt;
print('---------------------------------------------------------------------')&lt;br /&gt;
&lt;br /&gt;
# Abfragen&lt;br /&gt;
SimulatorAdress = input('SimulatorAdress:')&lt;br /&gt;
ConsoleUser = input('ConsoleUser:')&lt;br /&gt;
ConsolePass = input('ConsolePass:')&lt;br /&gt;
RegionMessage = input('RegionMessage:')&lt;br /&gt;
# Eingabe kann X Belibig geaendert werden RegionMessage = input('RegionMessage:') - X_Belibig = input('geben sie etwas fuer X_Belibig ein:')&lt;br /&gt;
# X_Belibig ist die Speicherstelle von input, der Text innerhalb der Klammern ist nur ein Text.&lt;br /&gt;
 &lt;br /&gt;
# Funktion admin_broadcast&lt;br /&gt;
def admin_broadcast():&lt;br /&gt;
    # Server Initialisieren &lt;br /&gt;
    Simulator = xmlrpc.client.Server(SimulatorAdress) &lt;br /&gt;
    # Password und Nachricht senden RegionMessage. Hier funktionieren auch alle anderen admin_ Befehle.&lt;br /&gt;
    # Bitte nicht vergessen auch die Eingabe zu aendern&lt;br /&gt;
    Simulator.admin_broadcast({'password': ConsolePass, 'message': RegionMessage})&lt;br /&gt;
 &lt;br /&gt;
# admin_broadcast Aufruf dieser kann nun an irgendeiner stelle aufgerufen werden. &lt;br /&gt;
admin_broadcast()&lt;br /&gt;
 &lt;br /&gt;
# Ende admin_broadcast&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python 3.6 RemoteAdmin nur teilweise getestet ===&lt;br /&gt;
&lt;br /&gt;
Dies basiert auf dem Python 3.6 Beispiel - admin_broadcast – und soll die Erweiterung/Veränderung des source vereinfachen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    # Agent Management&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_teleport_agent({'password':ConsolePass,'agent_first_name':agent_first_name,'agent_last_name':agent_last_name,'region_name':region_name, 'pos_x':pos_x, 'pos_y':pos_y})&lt;br /&gt;
    Simulator.admin_get_agents({'password':ConsolePass,'region_name':region_name,'Regions-ID':Regions-ID})&lt;br /&gt;
&lt;br /&gt;
    # Benutzerkontenverwaltung&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_create_user({'password':ConsolePass,'user_firstname':user_firstname,'user_lastname':user_lastname,'user_password':user_password,'start_region_x':start_region_x,'start_region_y':start_region_y,'user_email':user_email})&lt;br /&gt;
    # Simulator.admin_create_user_email dies ist jetzt in admin_create_user enthalten.&lt;br /&gt;
    Simulator.admin_exists_user({'password':ConsolePass,'user_firstname':user_firstname,'user_lastname':user_lastname})&lt;br /&gt;
    Simulator.admin_update_user({'password':ConsolePass,'user_firstname':user_firstname,'user_lastname':user_lastname})&lt;br /&gt;
    Simulator.admin_authenticate_user({'password':ConsolePass,'user_firstname':user_firstname,'user_lastname':user_lastname,'user_password':user_password,'token_lifetime':token_lifetime})&lt;br /&gt;
&lt;br /&gt;
    # Region Management&lt;br /&gt;
&lt;br /&gt;
    Simulator.Simulator.admin_broadcast({'password': ConsolePass, 'message': RegionMessage})&lt;br /&gt;
    Simulator.admin_close_region({'password':ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_create_region({'password':ConsolePass,'region_name':region_name,'listen_ip':listen_ip,'listen_port':listen_port,'external_address':external_address,'region_x':region_x,'region_y':region_y,'estate_name':estate_name})&lt;br /&gt;
    Simulator.admin_delete_region({'password':ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_modify_region({'password':ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_region_query({'password':ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_restart({'password':ConsolePass,'region_id':region_id})&lt;br /&gt;
    Simulator.admin_shutdown({'password':ConsolePass,'milliseconds':milliseconds})&lt;br /&gt;
&lt;br /&gt;
    # Region Dateiverwaltung&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_load_heightmap({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_load_oar({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_load_xml({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_save_heightmap({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_save_oar({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_save_xml({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
&lt;br /&gt;
    # Region Zugangsmanagement&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_acl_list({'password': ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_acl_clear({'password': ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_acl_add({'password': ConsolePass,'region_name':region_name,'users':users})&lt;br /&gt;
    Simulator.admin_acl_remove({'password': ConsolePass,'region_name':region_name,'users':users})&lt;br /&gt;
&lt;br /&gt;
    # Estate Immobilienverwaltung&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_estate_reload({'password':ConsolePass})&lt;br /&gt;
&lt;br /&gt;
    # Administrationskonsole&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_console_command({'password':ConsolePass,'console_command':console_command})&lt;br /&gt;
&lt;br /&gt;
    # Verschiedenes &lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_dialog({'password': ConsolePass, 'message': RegionMessage})&lt;br /&gt;
    #Simulator.admin_reset_land({'password':ConsolePass}) # keine ahnung&lt;br /&gt;
    #Simulator.admin_refresh_search({'password':ConsolePass}) # keine ahnung&lt;br /&gt;
    #Simulator.admin_refresh_map({'password':ConsolePass}) # keine ahnung&lt;br /&gt;
    #Simulator.admin_get_opensim_version({'password':ConsolePass}) # Rueckgabeparameter: Ich weiss nicht wie das geht.&lt;br /&gt;
    #Simulator.admin_get_agent_count({'password':ConsolePass}) # keine ahnung&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RemoteAdmin Befehle ==&lt;br /&gt;
&lt;br /&gt;
Alle Befehlsparameter die UUID einer Region nutzen &amp;quot;region_id&amp;quot; als Parameter. Alle anderen Parameter wie zB. region_uuid oder regionId sind nach Juni 2012 entfernt worden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Agent management ===&lt;br /&gt;
*[[Remoteadmin:admin teleport agent|admin_teleport_agent]]&lt;br /&gt;
*[[Remoteadmin:admin get agents|admin_get_agents]]&lt;br /&gt;
&lt;br /&gt;
=== User account management ===&lt;br /&gt;
*[[RemoteAdmin:admin create user|admin_create_user]] &lt;br /&gt;
*[[RemoteAdmin:admin create user email|admin_create_user_email]] &lt;br /&gt;
*[[RemoteAdmin:admin exists user|admin_exists_user]] &lt;br /&gt;
*[[RemoteAdmin:admin update user|admin_update_user]]&lt;br /&gt;
*[[RemoteAdmin:admin authenticate user|admin_authenticate_user]]&lt;br /&gt;
&lt;br /&gt;
=== Object management ===&lt;br /&gt;
&lt;br /&gt;
Noch keine RemoteAdmin Befehle vorhanden.&lt;br /&gt;
&lt;br /&gt;
=== Parcel management ===&lt;br /&gt;
&lt;br /&gt;
Noch keine RemoteAdmin Befehle vorhanden.&lt;br /&gt;
&lt;br /&gt;
=== Region management ===&lt;br /&gt;
*[[RemoteAdmin:admin broadcast|admin_broadcast]] &lt;br /&gt;
*[[RemoteAdmin:admin close region|admin_close_region]] &lt;br /&gt;
*[[RemoteAdmin:admin create region|admin_create_region]] &lt;br /&gt;
*[[RemoteAdmin:admin delete region|admin_delete_region]] &lt;br /&gt;
*[[RemoteAdmin:admin modify region|admin_modify_region]] &lt;br /&gt;
*[[RemoteAdmin:admin region query|admin_region_query]] &lt;br /&gt;
*[[RemoteAdmin:admin restart|admin_restart]] &lt;br /&gt;
*[[RemoteAdmin:admin shutdown|admin_shutdown]] &lt;br /&gt;
&lt;br /&gt;
=== Region file management ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
* [[RemoteAdmin:admin load heightmap|admin_load_heightmap]]&lt;br /&gt;
* [[RemoteAdmin:admin load oar|admin_load_oar]] &lt;br /&gt;
* [[RemoteAdmin:admin load xml|admin_load_xml]] &lt;br /&gt;
* [[RemoteAdmin:admin save heightmap|admin_save_heightmap]] &lt;br /&gt;
* [[RemoteAdmin:admin save oar|admin_save_oar]] &lt;br /&gt;
* [[RemoteAdmin:admin save xml|admin_save_xml]]&lt;br /&gt;
&lt;br /&gt;
=== Region access management ===&lt;br /&gt;
* [[RemoteAdmin:admin acl list|admin_acl_list]] &lt;br /&gt;
* [[RemoteAdmin:admin acl clear|admin_acl_clear]] &lt;br /&gt;
* [[RemoteAdmin:admin acl add|admin_acl_add]] &lt;br /&gt;
* [[RemoteAdmin:admin acl remove|admin_acl_remove]]&lt;br /&gt;
&lt;br /&gt;
=== Estate management ===&lt;br /&gt;
* [[RemoteAdmin:admin estate reload|admin_estate_reload]]&lt;br /&gt;
&lt;br /&gt;
=== Administration ===&lt;br /&gt;
* [[RemoteAdmin:admin console command|admin_console_command]]&lt;br /&gt;
&lt;br /&gt;
=== Verschiedenes ===&lt;br /&gt;
* [[RemoteAdmin:admin dialog|admin_dialog]]&lt;br /&gt;
* [[RemoteAdmin:admin reset land|admin_reset_land]]&lt;br /&gt;
* [[RemoteAdmin:admin refresh search|admin_refresh_search]]&lt;br /&gt;
* [[RemoteAdmin:admin refresh map|admin_refresh_map]]&lt;br /&gt;
* [[RemoteAdmin:admin get opensim version|admin_get_opensim_version]]&lt;br /&gt;
* [[RemoteAdmin:admin get agent count|admin_get_agent_count]]&lt;br /&gt;
&lt;br /&gt;
== Unterkategorien ==&lt;br /&gt;
&lt;br /&gt;
* [[RemoteAdmin:RemoteAdmin Examples|RemoteAdmin Examples]] &lt;br /&gt;
* [[RemoteAdmin:RemoteAdmin Proposals|RemoteAdmin Proposals]] &lt;br /&gt;
* [[RemoteAdmin:RemoteAdmin Standards|RemoteAdmin Standards]]&lt;br /&gt;
* [[RemoteAdmin:RemoteAdmin Implement new command|RemoteAdmin How to implement new commands]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:RemoteAdmin]]&lt;br /&gt;
[[Category:German Translations]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/RemoteAdmin/de</id>
		<title>RemoteAdmin/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/RemoteAdmin/de"/>
				<updated>2025-04-02T17:12:23Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: /* Das Remote Admin Interface Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|RemoteAdmin}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Einführung ==&lt;br /&gt;
&lt;br /&gt;
RemoteAdmin  ist eine Schnittstelle des OpenSimulator, die verschiedene Operationen können  außerhalb des OpenSimulator ausgeführt werden. Operationen, die sich selbst auf den Simulator beziehen (zB teleport user) sind immer verfügbar. Diejenigen, die sich auf Griddienstleistungen (user creation  und updating) beziehen, sind nur im Standalone-Modus Verfügbar. Im Gridmodus, muss man die ROBUST Ebene verwenden [[UserManipulation]] statt Fähigkeiten. '''&lt;br /&gt;
&lt;br /&gt;
== Das Remote Admin Interface Setup ==&lt;br /&gt;
&lt;br /&gt;
Zuerst sollte man die Remote-Admin-Interface ermöglichen. Nur die folgenden Zeilen zu Ihrer OpenSim.ini FILE-Port hinzufügen sollte auf einen Wert ungleich null gesetzt werden, um die Remote-Admin auf einem anderen Port zu haben. &lt;br /&gt;
&lt;br /&gt;
Ab Version r/16843 können Sie den Zugriff auf Remote-Admin auf bestimmte IP-Adressen beschränken, indem sie optionale access_ip_addresses verwenden. Sie können alle IP-Liste erlaubt durch RemoteAdmin  für den Zugriff auf jede IP durch ein Komma trennt. Wenn access_ip_addresses nicht gesetzt ist, dann können alle IP-Adressen RemoteAdmin zugreifen. &lt;br /&gt;
&lt;br /&gt;
  [RemoteAdmin]&lt;br /&gt;
    ;; This is the remote admin module, which uses XMLRPC requests to&lt;br /&gt;
    ;; manage regions from a web interface.&lt;br /&gt;
  &lt;br /&gt;
    ;# {enabled} {} {Enable the remote admin interface?} {true false} false&lt;br /&gt;
    enabled = true&lt;br /&gt;
  &lt;br /&gt;
    ;# {port} {enabled:true} {Port to use for the remote admin interface? (0 = default)} {} 0&lt;br /&gt;
    ;; Set this to a nonzero value to have remote admin use a different port&lt;br /&gt;
    port = 10000&lt;br /&gt;
  &lt;br /&gt;
    ;# {access_password} {enabled:true} {Password for the remote admin interface} {}&lt;br /&gt;
    ;; This password is required to make any XMLRPC call (should be set as&lt;br /&gt;
    ;; the &amp;quot;password&amp;quot; parameter)&lt;br /&gt;
    access_password = &amp;quot;passwd123&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
    ;# {access_ip_addresses} {enabled:true} {List the IP addresses allowed to call RemoteAdmin?} {}&lt;br /&gt;
    ;; List the IP addresses allowed to call RemoteAdmin&lt;br /&gt;
    ;; If access_ip_addresses isn't set, then all IP addresses can access RemoteAdmin.&lt;br /&gt;
    ;; access_ip_addresses = 0.0.0.0, 0.0.0.0 ...&lt;br /&gt;
    ; access_ip_addresses =&lt;br /&gt;
  &lt;br /&gt;
    ;# {create_region_enable_voice} {enabled:true} {Enable voice for newly created regions?} {true false} false&lt;br /&gt;
    ;; set this variable to true if you want the create_region XmlRpc&lt;br /&gt;
    ;; call to unconditionally enable voice on all parcels for a newly&lt;br /&gt;
    ;; created region&lt;br /&gt;
    ; create_region_enable_voice = false&lt;br /&gt;
  &lt;br /&gt;
    ;# {create_region_public} {enabled:true} {Make newly created regions public?} {true false} false&lt;br /&gt;
    ;; set this variable to false if you want the create_region XmlRpc&lt;br /&gt;
    ;; call to create all regions as private per default (can be&lt;br /&gt;
    ;; overridden in the XmlRpc call)&lt;br /&gt;
    ; create_region_public = false&lt;br /&gt;
  &lt;br /&gt;
    ;# {enabled_methods} {enabled:true} {List of methods to allow, separated by |} {} all&lt;br /&gt;
    ;; enable only those methods you deem to be appropriate using a | delimited&lt;br /&gt;
    ;; whitelist.&lt;br /&gt;
    ;; For example:&lt;br /&gt;
    ;; enabled_methods = admin_broadcast|admin_save_oar|admin_save_xml&lt;br /&gt;
    ;; if this parameter is not specified but enabled = true, all methods&lt;br /&gt;
    ;; will be available&lt;br /&gt;
    ; enabled_methods = all&lt;br /&gt;
  &lt;br /&gt;
    ;; specify the default appearance for an avatar created through the remote&lt;br /&gt;
    ;; admin interface&lt;br /&gt;
    ;; This will only take effect is the file specified by the&lt;br /&gt;
    ;; default_appearance setting below exists&lt;br /&gt;
    ; default_male = Default Male&lt;br /&gt;
    ; default_female = Default Female&lt;br /&gt;
  &lt;br /&gt;
    ;; Update appearance copies inventory items and wearables of default&lt;br /&gt;
    ;; avatars. if this value is false, just worn assets are copied to the&lt;br /&gt;
    ;; Clothes folder; if true, all Clothes and Bodyparts subfolders are copied.&lt;br /&gt;
    ;; The receiver will wear the same items the default avatar did wear.&lt;br /&gt;
    ; copy_folders = false&lt;br /&gt;
  &lt;br /&gt;
    ;; Path to default appearance XML file that specifies the look of the&lt;br /&gt;
    ;; default avatars&lt;br /&gt;
    ; default_appearance = default_appearance.xml&lt;br /&gt;
&lt;br /&gt;
Siehe OpenSim.ini.example im opensim/bin/ Verzeichnis für weitere Details.&lt;br /&gt;
&lt;br /&gt;
=== Weitere Optionen ===&lt;br /&gt;
&lt;br /&gt;
Sie können auch einen anderen Port für die XMLRPCAdmin command listener  aus dem Standard-Simulator HTTP-Port angeben.&lt;br /&gt;
&lt;br /&gt;
 [RemoteAdmin]&lt;br /&gt;
 port = &amp;lt;port-number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PHP Beispiele ==&lt;br /&gt;
&lt;br /&gt;
RemoteAdminTest.php (ACHTUNG: $params nicht $parameters BEACHTEN!)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
// Dieses Beispiel gibt eine Meldung heraus und fährt OpenSim herunter&lt;br /&gt;
//&lt;br /&gt;
// admin_broadcast ist das kommando für Nachrichten&lt;br /&gt;
// $params hier wird die Meldung hineingeschrieben&lt;br /&gt;
// &lt;br /&gt;
// Das Kommando admin_shutdown fährt OpenSim herunter&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
include('RemoteAdmin.php'); // RemoteAdmin.php Ist der Name der PHP-Klasse&lt;br /&gt;
&lt;br /&gt;
// Instanzieren der Klasse (IP oder Adresse, Port, Passwort)&lt;br /&gt;
$myRA = new RemoteAdmin('127.0.0.1', 9000, 'secret');&lt;br /&gt;
&lt;br /&gt;
// RemoteAdmin-Befehle ausführen&lt;br /&gt;
$params = array('message' =&amp;gt; 'Diese Nachricht wird an alle Regionen des OpenSimulators gesendet!');&lt;br /&gt;
&lt;br /&gt;
$myRA-&amp;gt;SendCommand('admin_broadcast', $params);&lt;br /&gt;
&lt;br /&gt;
// Wenn für einen RemoteAdmin-Befehl keine Parameter benötigt, &lt;br /&gt;
// müssen Sie den zweiten Parameter in der Funktion SendCommand nicht angeben.&lt;br /&gt;
$myRA-&amp;gt;SendCommand('admin_shutdown'); &lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RemoteAdmin.php&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	&lt;br /&gt;
/***********************************************************************&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
Copyright (c) 2008, The New World Grid Regents http://www.newworldgrid.com and Contributors &lt;br /&gt;
All rights reserved.&lt;br /&gt;
&lt;br /&gt;
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:&lt;br /&gt;
&lt;br /&gt;
	* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.&lt;br /&gt;
	* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer &lt;br /&gt;
	in the documentation and/or other materials provided with the distribution.&lt;br /&gt;
	* Neither the name of the New World Grid nor the names of its contributors may be used to endorse or promote products derived &lt;br /&gt;
	from this software without specific prior written permission.&lt;br /&gt;
&lt;br /&gt;
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &amp;quot;AS IS&amp;quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, &lt;br /&gt;
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. &lt;br /&gt;
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, &lt;br /&gt;
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; &lt;br /&gt;
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE &lt;br /&gt;
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
***********************************************************************/&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	// How to instantiate a RemoteAdmin object ?&lt;br /&gt;
	// $myremoteadmin = new RemoteAdmin(&amp;quot;mySimulatorURL&amp;quot;, Port, &amp;quot;secret password&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	// How to send commands to remoteadmin plugin ?&lt;br /&gt;
	// $myremoteadmin-&amp;gt;SendCommand('admin_broadcast', array('message' =&amp;gt; 'Message to broadcast to all regions'));&lt;br /&gt;
	// $myremoteadmin-&amp;gt;SendCommand('admin_shutdown');&lt;br /&gt;
	// Commands like admin_shutdown don't need params, so you can left the second SendCommand functino param empty ;)&lt;br /&gt;
	&lt;br /&gt;
	// Example for error handling&lt;br /&gt;
	// &lt;br /&gt;
	// include('classes/RemoteAdmin.php');&lt;br /&gt;
	// $RA = new RemoteAdmin('localhost', 9000, 'secret');&lt;br /&gt;
	// $retour = $RA-&amp;gt;SendCommand('admin_shutdown');&lt;br /&gt;
	// if ($retour === FALSE)&lt;br /&gt;
	// {&lt;br /&gt;
	// 	echo 'ERROR';&lt;br /&gt;
	// }&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	class RemoteAdmin&lt;br /&gt;
	{&lt;br /&gt;
		&lt;br /&gt;
		function RemoteAdmin($sURL, $sPort, $pass)&lt;br /&gt;
		{&lt;br /&gt;
			&lt;br /&gt;
			$this-&amp;gt;simulatorURL = $sURL;		// String&lt;br /&gt;
			$this-&amp;gt;simulatorPort = $sPort;	// Integer&lt;br /&gt;
			$this-&amp;gt;password = $pass;&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		function SendCommand($command, $params=array())&lt;br /&gt;
		{&lt;br /&gt;
			&lt;br /&gt;
			$paramsNames = array_keys($params);&lt;br /&gt;
			$paramsValues = array_values($params);&lt;br /&gt;
			&lt;br /&gt;
			// Building the XML data to pass to RemoteAdmin through XML-RPC ;)&lt;br /&gt;
			&lt;br /&gt;
			$xml = '&amp;lt;methodCall&amp;gt;&lt;br /&gt;
						&amp;lt;methodName&amp;gt;' . htmlspecialchars($command) . '&amp;lt;/methodName&amp;gt;&lt;br /&gt;
						&amp;lt;params&amp;gt;&lt;br /&gt;
							&amp;lt;param&amp;gt;&lt;br /&gt;
								&amp;lt;value&amp;gt;&lt;br /&gt;
									&amp;lt;struct&amp;gt;&lt;br /&gt;
										&amp;lt;member&amp;gt;&lt;br /&gt;
											&amp;lt;name&amp;gt;password&amp;lt;/name&amp;gt;&lt;br /&gt;
											&amp;lt;value&amp;gt;&amp;lt;string&amp;gt;' . htmlspecialchars($this-&amp;gt;password) . '&amp;lt;/string&amp;gt;&amp;lt;/value&amp;gt;&lt;br /&gt;
										&amp;lt;/member&amp;gt;';&lt;br /&gt;
			if (count($params) != 0)&lt;br /&gt;
			{&lt;br /&gt;
				&lt;br /&gt;
				for ($p = 0; $p &amp;lt; count($params); $p++)&lt;br /&gt;
				{&lt;br /&gt;
					&lt;br /&gt;
					$xml .= '&amp;lt;member&amp;gt;&amp;lt;name&amp;gt;' . htmlspecialchars($paramsNames[$p]) . '&amp;lt;/name&amp;gt;';&lt;br /&gt;
					$xml .= '&amp;lt;value&amp;gt;' . htmlspecialchars($paramsValues[$p]) . '&amp;lt;/value&amp;gt;&amp;lt;/member&amp;gt;';&lt;br /&gt;
					&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
									&lt;br /&gt;
			$xml .= '				&amp;lt;/struct&amp;gt;&lt;br /&gt;
								&amp;lt;/value&amp;gt;&lt;br /&gt;
							&amp;lt;/param&amp;gt;&lt;br /&gt;
						&amp;lt;/params&amp;gt;&lt;br /&gt;
					&amp;lt;/methodCall&amp;gt;';&lt;br /&gt;
				&lt;br /&gt;
			//&lt;br /&gt;
			// echo $xml;&lt;br /&gt;
			//&lt;br /&gt;
				&lt;br /&gt;
					&lt;br /&gt;
			// Now building headers and sending the data ;)&lt;br /&gt;
			$host = $this-&amp;gt;simulatorURL;&lt;br /&gt;
			$port = $this-&amp;gt;simulatorPort;&lt;br /&gt;
			$timeout = 5; // Timeout in seconds&lt;br /&gt;
			&lt;br /&gt;
			error_reporting(0);&lt;br /&gt;
			&lt;br /&gt;
			$fp = fsockopen($host, $port, $errno, $errstr, $timeout);&lt;br /&gt;
			if (!$fp)&lt;br /&gt;
			{&lt;br /&gt;
				return FALSE; // If contacting host timeouts or impossible to create the socket, the method returns FALSE&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				fputs($fp, &amp;quot;POST / HTTP/1.1\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, &amp;quot;Host: $host\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, &amp;quot;Content-type: text/xml\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, &amp;quot;Content-length: &amp;quot;. strlen($xml) .&amp;quot;\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, &amp;quot;Connection: close\r\n\r\n&amp;quot;);&lt;br /&gt;
				fputs($fp, $xml);&lt;br /&gt;
				$res = &amp;quot;&amp;quot;;&lt;br /&gt;
				while(!feof($fp)) {&lt;br /&gt;
					$res .= fgets($fp, 128);&lt;br /&gt;
				}&lt;br /&gt;
				fclose($fp);&lt;br /&gt;
				$response = substr($res, strpos($res, &amp;quot;\r\n\r\n&amp;quot;));;&lt;br /&gt;
						&lt;br /&gt;
				// Now parsing the XML response from RemoteAdmin ;)&lt;br /&gt;
				&lt;br /&gt;
				$result = array();&lt;br /&gt;
				if (preg_match_all('#&amp;lt;name&amp;gt;(.+)&amp;lt;/name&amp;gt;&amp;lt;value&amp;gt;&amp;lt;(string|int)&amp;gt;(.*)&amp;lt;/\2&amp;gt;&amp;lt;/value&amp;gt;#U', $response, $regs, PREG_SET_ORDER)) {&lt;br /&gt;
				  foreach($regs as $key=&amp;gt;$val) {&lt;br /&gt;
					$result[$val[1]] = $val[3];&lt;br /&gt;
				  }&lt;br /&gt;
				}&lt;br /&gt;
				return $result;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
		&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Python 3.6 Beispiele ==&lt;br /&gt;
&lt;br /&gt;
=== Python 3.6 Beispiel - admin_broadcast -  ===&lt;br /&gt;
&lt;br /&gt;
Dieser Python 3.6 Beitrag ist ein User Projekt, es wird kein Support über die Admins geben.&lt;br /&gt;
&lt;br /&gt;
Bitte seit vorsichtig, ich schließe jede Gewährleistung aus.&lt;br /&gt;
&lt;br /&gt;
Ohne Programmierkenntnisse oder unsachgemäßer Anwendung, kann es zu Schäden am OpenSimulator oder/und dem Betriebssystem kommen.&lt;br /&gt;
&lt;br /&gt;
Faustregel: Wenn ihr nicht sicher seit, ob ihr gesichert habt, dann sichert.&lt;br /&gt;
&lt;br /&gt;
Dies ist zuletzt getestet am 23.04.2018 mit Python 3.6.3 auf Windows 10 und Ubuntu Server 17.10.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python3&lt;br /&gt;
 &lt;br /&gt;
# admin_broadcast senden einer Nachricht an alle in einer Region.&lt;br /&gt;
# Python 3.6 - 21.04.2018 by Manfred Aabye&lt;br /&gt;
 &lt;br /&gt;
# Module laden&lt;br /&gt;
import xmlrpc.client &lt;br /&gt;
 &lt;br /&gt;
# Information&lt;br /&gt;
print('---------------------------------------------------------------------')&lt;br /&gt;
print('Setup: Opensim.ini - Del ; - ConsoleUser -  ConsolePass')&lt;br /&gt;
print('---------------------------------------------------------------------')&lt;br /&gt;
print('Beispiel:')&lt;br /&gt;
print('---------------------------------------------------------------------')&lt;br /&gt;
print('SimulatorAdress = http://127.0.0.1:9000/ or http://myserver.com:9000/')&lt;br /&gt;
print('ConsoleUser = Test')&lt;br /&gt;
print('ConsolePass = secret')&lt;br /&gt;
print('RegionMessage = Dies ist ein toller Text an einem tollen Tag.')&lt;br /&gt;
print('---------------------------------------------------------------------')&lt;br /&gt;
&lt;br /&gt;
# Abfragen&lt;br /&gt;
SimulatorAdress = input('SimulatorAdress:')&lt;br /&gt;
ConsoleUser = input('ConsoleUser:')&lt;br /&gt;
ConsolePass = input('ConsolePass:')&lt;br /&gt;
RegionMessage = input('RegionMessage:')&lt;br /&gt;
# Eingabe kann X Belibig geaendert werden RegionMessage = input('RegionMessage:') - X_Belibig = input('geben sie etwas fuer X_Belibig ein:')&lt;br /&gt;
# X_Belibig ist die Speicherstelle von input, der Text innerhalb der Klammern ist nur ein Text.&lt;br /&gt;
 &lt;br /&gt;
# Funktion admin_broadcast&lt;br /&gt;
def admin_broadcast():&lt;br /&gt;
    # Server Initialisieren &lt;br /&gt;
    Simulator = xmlrpc.client.Server(SimulatorAdress) &lt;br /&gt;
    # Password und Nachricht senden RegionMessage. Hier funktionieren auch alle anderen admin_ Befehle.&lt;br /&gt;
    # Bitte nicht vergessen auch die Eingabe zu aendern&lt;br /&gt;
    Simulator.admin_broadcast({'password': ConsolePass, 'message': RegionMessage})&lt;br /&gt;
 &lt;br /&gt;
# admin_broadcast Aufruf dieser kann nun an irgendeiner stelle aufgerufen werden. &lt;br /&gt;
admin_broadcast()&lt;br /&gt;
 &lt;br /&gt;
# Ende admin_broadcast&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python 3.6 RemoteAdmin nur teilweise getestet ===&lt;br /&gt;
&lt;br /&gt;
Dies basiert auf dem Python 3.6 Beispiel - admin_broadcast – und soll die Erweiterung/Veränderung des source vereinfachen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    # Agent Management&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_teleport_agent({'password':ConsolePass,'agent_first_name':agent_first_name,'agent_last_name':agent_last_name,'region_name':region_name, 'pos_x':pos_x, 'pos_y':pos_y})&lt;br /&gt;
    Simulator.admin_get_agents({'password':ConsolePass,'region_name':region_name,'Regions-ID':Regions-ID})&lt;br /&gt;
&lt;br /&gt;
    # Benutzerkontenverwaltung&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_create_user({'password':ConsolePass,'user_firstname':user_firstname,'user_lastname':user_lastname,'user_password':user_password,'start_region_x':start_region_x,'start_region_y':start_region_y,'user_email':user_email})&lt;br /&gt;
    # Simulator.admin_create_user_email dies ist jetzt in admin_create_user enthalten.&lt;br /&gt;
    Simulator.admin_exists_user({'password':ConsolePass,'user_firstname':user_firstname,'user_lastname':user_lastname})&lt;br /&gt;
    Simulator.admin_update_user({'password':ConsolePass,'user_firstname':user_firstname,'user_lastname':user_lastname})&lt;br /&gt;
    Simulator.admin_authenticate_user({'password':ConsolePass,'user_firstname':user_firstname,'user_lastname':user_lastname,'user_password':user_password,'token_lifetime':token_lifetime})&lt;br /&gt;
&lt;br /&gt;
    # Region Management&lt;br /&gt;
&lt;br /&gt;
    Simulator.Simulator.admin_broadcast({'password': ConsolePass, 'message': RegionMessage})&lt;br /&gt;
    Simulator.admin_close_region({'password':ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_create_region({'password':ConsolePass,'region_name':region_name,'listen_ip':listen_ip,'listen_port':listen_port,'external_address':external_address,'region_x':region_x,'region_y':region_y,'estate_name':estate_name})&lt;br /&gt;
    Simulator.admin_delete_region({'password':ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_modify_region({'password':ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_region_query({'password':ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_restart({'password':ConsolePass,'region_id':region_id})&lt;br /&gt;
    Simulator.admin_shutdown({'password':ConsolePass,'milliseconds':milliseconds})&lt;br /&gt;
&lt;br /&gt;
    # Region Dateiverwaltung&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_load_heightmap({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_load_oar({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_load_xml({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_save_heightmap({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_save_oar({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
    Simulator.admin_save_xml({'password': ConsolePass,'region_name':region_name,'filename': filename})&lt;br /&gt;
&lt;br /&gt;
    # Region Zugangsmanagement&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_acl_list({'password': ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_acl_clear({'password': ConsolePass,'region_name':region_name})&lt;br /&gt;
    Simulator.admin_acl_add({'password': ConsolePass,'region_name':region_name,'users':users})&lt;br /&gt;
    Simulator.admin_acl_remove({'password': ConsolePass,'region_name':region_name,'users':users})&lt;br /&gt;
&lt;br /&gt;
    # Estate Immobilienverwaltung&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_estate_reload({'password':ConsolePass})&lt;br /&gt;
&lt;br /&gt;
    # Administrationskonsole&lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_console_command({'password':ConsolePass,'console_command':console_command})&lt;br /&gt;
&lt;br /&gt;
    # Verschiedenes &lt;br /&gt;
&lt;br /&gt;
    Simulator.admin_dialog({'password': ConsolePass, 'message': RegionMessage})&lt;br /&gt;
    #Simulator.admin_reset_land({'password':ConsolePass}) # keine ahnung&lt;br /&gt;
    #Simulator.admin_refresh_search({'password':ConsolePass}) # keine ahnung&lt;br /&gt;
    #Simulator.admin_refresh_map({'password':ConsolePass}) # keine ahnung&lt;br /&gt;
    #Simulator.admin_get_opensim_version({'password':ConsolePass}) # Rueckgabeparameter: Ich weiss nicht wie das geht.&lt;br /&gt;
    #Simulator.admin_get_agent_count({'password':ConsolePass}) # keine ahnung&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RemoteAdmin Befehle ==&lt;br /&gt;
&lt;br /&gt;
Alle Befehlsparameter die UUID einer Region nutzen &amp;quot;region_id&amp;quot; als Parameter. Alle anderen Parameter wie zB. region_uuid oder regionId sind nach Juni 2012 entfernt worden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Agent management ===&lt;br /&gt;
*[[Remoteadmin:admin teleport agent|admin_teleport_agent]]&lt;br /&gt;
*[[Remoteadmin:admin get agents|admin_get_agents]]&lt;br /&gt;
&lt;br /&gt;
=== User account management ===&lt;br /&gt;
*[[RemoteAdmin:admin create user|admin_create_user]] &lt;br /&gt;
*[[RemoteAdmin:admin create user email|admin_create_user_email]] &lt;br /&gt;
*[[RemoteAdmin:admin exists user|admin_exists_user]] &lt;br /&gt;
*[[RemoteAdmin:admin update user|admin_update_user]]&lt;br /&gt;
*[[RemoteAdmin:admin authenticate user|admin_authenticate_user]]&lt;br /&gt;
&lt;br /&gt;
=== Object management ===&lt;br /&gt;
&lt;br /&gt;
Noch keine RemoteAdmin Befehle vorhanden.&lt;br /&gt;
&lt;br /&gt;
=== Parcel management ===&lt;br /&gt;
&lt;br /&gt;
Noch keine RemoteAdmin Befehle vorhanden.&lt;br /&gt;
&lt;br /&gt;
=== Region management ===&lt;br /&gt;
*[[RemoteAdmin:admin broadcast|admin_broadcast]] &lt;br /&gt;
*[[RemoteAdmin:admin close region|admin_close_region]] &lt;br /&gt;
*[[RemoteAdmin:admin create region|admin_create_region]] &lt;br /&gt;
*[[RemoteAdmin:admin delete region|admin_delete_region]] &lt;br /&gt;
*[[RemoteAdmin:admin modify region|admin_modify_region]] &lt;br /&gt;
*[[RemoteAdmin:admin region query|admin_region_query]] &lt;br /&gt;
*[[RemoteAdmin:admin restart|admin_restart]] &lt;br /&gt;
*[[RemoteAdmin:admin shutdown|admin_shutdown]] &lt;br /&gt;
&lt;br /&gt;
=== Region file management ===&lt;br /&gt;
{{multicol}}&lt;br /&gt;
* [[RemoteAdmin:admin load heightmap|admin_load_heightmap]]&lt;br /&gt;
* [[RemoteAdmin:admin load oar|admin_load_oar]] &lt;br /&gt;
* [[RemoteAdmin:admin load xml|admin_load_xml]] &lt;br /&gt;
* [[RemoteAdmin:admin save heightmap|admin_save_heightmap]] &lt;br /&gt;
* [[RemoteAdmin:admin save oar|admin_save_oar]] &lt;br /&gt;
* [[RemoteAdmin:admin save xml|admin_save_xml]]&lt;br /&gt;
&lt;br /&gt;
=== Region access management ===&lt;br /&gt;
* [[RemoteAdmin:admin acl list|admin_acl_list]] &lt;br /&gt;
* [[RemoteAdmin:admin acl clear|admin_acl_clear]] &lt;br /&gt;
* [[RemoteAdmin:admin acl add|admin_acl_add]] &lt;br /&gt;
* [[RemoteAdmin:admin acl remove|admin_acl_remove]]&lt;br /&gt;
&lt;br /&gt;
=== Estate management ===&lt;br /&gt;
* [[RemoteAdmin:admin estate reload|admin_estate_reload]]&lt;br /&gt;
&lt;br /&gt;
=== Administration ===&lt;br /&gt;
* [[RemoteAdmin:admin console command|admin_console_command]]&lt;br /&gt;
&lt;br /&gt;
=== Verschiedenes ===&lt;br /&gt;
* [[RemoteAdmin:admin dialog|admin_dialog]]&lt;br /&gt;
* [[RemoteAdmin:admin reset land|admin_reset_land]]&lt;br /&gt;
* [[RemoteAdmin:admin refresh search|admin_refresh_search]]&lt;br /&gt;
* [[RemoteAdmin:admin refresh map|admin_refresh_map]]&lt;br /&gt;
* [[RemoteAdmin:admin get opensim version|admin_get_opensim_version]]&lt;br /&gt;
* [[RemoteAdmin:admin get agent count|admin_get_agent_count]]&lt;br /&gt;
&lt;br /&gt;
== Unterkategorien ==&lt;br /&gt;
&lt;br /&gt;
* [[RemoteAdmin:RemoteAdmin Examples|RemoteAdmin Examples]] &lt;br /&gt;
* [[RemoteAdmin:RemoteAdmin Proposals|RemoteAdmin Proposals]] &lt;br /&gt;
* [[RemoteAdmin:RemoteAdmin Standards|RemoteAdmin Standards]]&lt;br /&gt;
* [[RemoteAdmin:RemoteAdmin Implement new command|RemoteAdmin How to implement new commands]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:RemoteAdmin]]&lt;br /&gt;
[[Category:German Translations]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OpenSimProfile/de</id>
		<title>OpenSimProfile/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OpenSimProfile/de"/>
				<updated>2025-03-27T09:32:05Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
{{Languages|OpenSimProfile}}&lt;br /&gt;
&lt;br /&gt;
OpenSimProfile ermöglicht es, funktionierende Profile in OpenSimulator zu haben.&lt;br /&gt;
&lt;br /&gt;
== Wie man OSP einrichtet ==&lt;br /&gt;
&lt;br /&gt;
* Stellen Sie sicher, dass Sie eine Apache/PHP/MySQL-Konfiguration bereit haben, da Profile sonst nicht funktionieren!!&lt;br /&gt;
* Sie müssen außerdem sicherstellen, dass Sie php-xmlrpc haben, oder Sie müssen es mit PHP kompilieren.&lt;br /&gt;
&lt;br /&gt;
Sie können die neueste Version von OpenSimProfile von GitHub abrufen. Verwenden Sie den folgenden Befehl, um den Code auszuchecken:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
git clone https://github.com/kcozens/OpenSimProfile&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweis: Für Windows-Benutzer oder diejenigen, die Git noch nicht verwendet haben, könnte die Seite &amp;quot;Setting Up Git on Windows in Four Easy Steps&amp;quot; hilfreich sein. Verwenden Sie die Informationen aus den Schritten 1 und 2. Nachdem Sie TortoiseGit installiert haben, erstellen Sie ein Verzeichnis an einem Ort Ihrer Wahl und klicken Sie dann mit der rechten Maustaste darauf - wählen Sie &amp;quot;Git Checkout...&amp;quot; - und geben Sie die oben angegebene URL ein, um das gesamte Paket herunterzuladen.&lt;br /&gt;
&lt;br /&gt;
[HINWEIS: Der letzte Satz im obigen Absatz muss von jemandem überprüft werden, der TortoiseGit verwendet.]&lt;br /&gt;
&lt;br /&gt;
== Website ins Webroot hochladen ==&lt;br /&gt;
&lt;br /&gt;
Der nächste Schritt ist das Hochladen Ihrer profile.php und databaseinfo.php, die sich in /trunk/webroot/ befinden, in Ihren öffentlichen http-Ordner, damit Regionen darauf zugreifen können.&lt;br /&gt;
&lt;br /&gt;
== Eine Datenbank erstellen ==&lt;br /&gt;
&lt;br /&gt;
Zuerst müssen Sie eine Datenbank erstellen. Sobald dies abgeschlossen ist, können Sie die SQL-Datei osprofiles.sql, die sich in /trunk/webroot/sql/ des SVN befindet, ausführen.&lt;br /&gt;
&lt;br /&gt;
Anschließend müssen Sie Ihre Datenbankverbindungsdatei einrichten, die sich entweder in /trunk/webroot/databaseinfo.php oder in Ihrem Webroot befindet, wo Sie databaseinfo.php hochgeladen haben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$DB_HOST = &amp;quot;&amp;lt;servername&amp;gt;&amp;quot;;&lt;br /&gt;
$DB_USER = &amp;quot;&amp;lt;username&amp;gt;&amp;quot;;&lt;br /&gt;
$DB_PASSWORD = &amp;quot;&amp;lt;password&amp;gt;&amp;quot;;&lt;br /&gt;
$DB_NAME = &amp;quot;&amp;lt;database&amp;gt;&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modul einrichten ==&lt;br /&gt;
&lt;br /&gt;
Nachdem wir alles andere eingerichtet haben, müssen Sie nur noch das Modul installieren und Ihren Regions-Server zurücksetzen.&lt;br /&gt;
&lt;br /&gt;
Kopieren Sie zunächst trunk/bin/OpenSimProfile.Modules.dll und legen Sie diese in Ihrem OpenSim/bin-Ordner ab.&lt;br /&gt;
&lt;br /&gt;
Bearbeiten Sie anschließend Ihre OpenSim.ini auf allen Servern, die Regionen hosten.&lt;br /&gt;
&lt;br /&gt;
Fügen Sie in OpenSim.ini Folgendes hinzu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
[Profile]&lt;br /&gt;
Module = &amp;quot;OpenSimProfile&amp;quot;&lt;br /&gt;
; Ändern Sie dies in Ihren eigenen HTTP-Server, damit der Profilserver funktioniert&lt;br /&gt;
ProfileURL = http://gridserver/profile.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fertiggestellt ==&lt;br /&gt;
&lt;br /&gt;
Starten Sie einfach Ihren Regions-Server neu, und Sie sollten jetzt in der Lage sein, Ihre Profile zu bearbeiten und zu speichern! &lt;br /&gt;
&lt;br /&gt;
[[Category:German Translations]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OpenSimProfile/de</id>
		<title>OpenSimProfile/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OpenSimProfile/de"/>
				<updated>2025-03-27T09:31:38Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Quicklinks}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
{{Languages|OpenSimProfile}}&lt;br /&gt;
&lt;br /&gt;
OpenSimProfile ermöglicht es, funktionierende Profile in OpenSimulator zu haben.&lt;br /&gt;
&lt;br /&gt;
== Wie man OSP einrichtet ==&lt;br /&gt;
&lt;br /&gt;
* Stellen Sie sicher, dass Sie eine Apache/PHP/MySQL-Konfiguration bereit haben, da Profile sonst nicht funktionieren!!&lt;br /&gt;
* Sie müssen außerdem sicherstellen, dass Sie php-xmlrpc haben, oder Sie müssen es mit PHP kompilieren.&lt;br /&gt;
&lt;br /&gt;
Sie können die neueste Version von OpenSimProfile von GitHub abrufen. Verwenden Sie den folgenden Befehl, um den Code auszuchecken:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
git clone https://github.com/kcozens/OpenSimProfile&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweis: Für Windows-Benutzer oder diejenigen, die Git noch nicht verwendet haben, könnte die Seite &amp;quot;Setting Up Git on Windows in Four Easy Steps&amp;quot; hilfreich sein. Verwenden Sie die Informationen aus den Schritten 1 und 2. Nachdem Sie TortoiseGit installiert haben, erstellen Sie ein Verzeichnis an einem Ort Ihrer Wahl und klicken Sie dann mit der rechten Maustaste darauf - wählen Sie &amp;quot;Git Checkout...&amp;quot; - und geben Sie die oben angegebene URL ein, um das gesamte Paket herunterzuladen.&lt;br /&gt;
&lt;br /&gt;
[HINWEIS: Der letzte Satz im obigen Absatz muss von jemandem überprüft werden, der TortoiseGit verwendet.]&lt;br /&gt;
&lt;br /&gt;
== Website ins Webroot hochladen ==&lt;br /&gt;
&lt;br /&gt;
Der nächste Schritt ist das Hochladen Ihrer profile.php und databaseinfo.php, die sich in /trunk/webroot/ befinden, in Ihren öffentlichen http-Ordner, damit Regionen darauf zugreifen können.&lt;br /&gt;
&lt;br /&gt;
== Eine Datenbank erstellen ==&lt;br /&gt;
&lt;br /&gt;
Zuerst müssen Sie eine Datenbank erstellen. Sobald dies abgeschlossen ist, können Sie die SQL-Datei osprofiles.sql, die sich in /trunk/webroot/sql/ des SVN befindet, ausführen.&lt;br /&gt;
&lt;br /&gt;
Anschließend müssen Sie Ihre Datenbankverbindungsdatei einrichten, die sich entweder in /trunk/webroot/databaseinfo.php oder in Ihrem Webroot befindet, wo Sie databaseinfo.php hochgeladen haben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$DB_HOST = &amp;quot;&amp;lt;servername&amp;gt;&amp;quot;;&lt;br /&gt;
$DB_USER = &amp;quot;&amp;lt;username&amp;gt;&amp;quot;;&lt;br /&gt;
$DB_PASSWORD = &amp;quot;&amp;lt;password&amp;gt;&amp;quot;;&lt;br /&gt;
$DB_NAME = &amp;quot;&amp;lt;database&amp;gt;&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modul einrichten ==&lt;br /&gt;
&lt;br /&gt;
Nachdem wir alles andere eingerichtet haben, müssen Sie nur noch das Modul installieren und Ihren Regions-Server zurücksetzen.&lt;br /&gt;
&lt;br /&gt;
Kopieren Sie zunächst trunk/bin/OpenSimProfile.Modules.dll und legen Sie diese in Ihrem OpenSim/bin-Ordner ab.&lt;br /&gt;
&lt;br /&gt;
Bearbeiten Sie anschließend Ihre OpenSim.ini auf allen Servern, die Regionen hosten.&lt;br /&gt;
&lt;br /&gt;
Fügen Sie in OpenSim.ini Folgendes hinzu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
[Profile]&lt;br /&gt;
Module = &amp;quot;OpenSimProfile&amp;quot;&lt;br /&gt;
; Ändern Sie dies in Ihren eigenen HTTP-Server, damit der Profilserver funktioniert&lt;br /&gt;
ProfileURL = http://gridserver/profile.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fertiggestellt ==&lt;br /&gt;
&lt;br /&gt;
Starten Sie einfach Ihren Regions-Server neu, und Sie sollten jetzt in der Lage sein, Ihre Profile zu bearbeiten und zu speichern! &lt;br /&gt;
&lt;br /&gt;
[[Category:German Translations]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OpenSimProfile/de</id>
		<title>OpenSimProfile/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OpenSimProfile/de"/>
				<updated>2025-03-27T09:30:30Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|OpenSimProfile}}&lt;br /&gt;
&lt;br /&gt;
OpenSimProfile ermöglicht es, funktionierende Profile in OpenSimulator zu haben.&lt;br /&gt;
&lt;br /&gt;
== Wie man OSP einrichtet ==&lt;br /&gt;
&lt;br /&gt;
* Stellen Sie sicher, dass Sie eine Apache/PHP/MySQL-Konfiguration bereit haben, da Profile sonst nicht funktionieren!!&lt;br /&gt;
* Sie müssen außerdem sicherstellen, dass Sie php-xmlrpc haben, oder Sie müssen es mit PHP kompilieren.&lt;br /&gt;
&lt;br /&gt;
Sie können die neueste Version von OpenSimProfile von GitHub abrufen. Verwenden Sie den folgenden Befehl, um den Code auszuchecken:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
git clone https://github.com/kcozens/OpenSimProfile&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweis: Für Windows-Benutzer oder diejenigen, die Git noch nicht verwendet haben, könnte die Seite &amp;quot;Setting Up Git on Windows in Four Easy Steps&amp;quot; hilfreich sein. Verwenden Sie die Informationen aus den Schritten 1 und 2. Nachdem Sie TortoiseGit installiert haben, erstellen Sie ein Verzeichnis an einem Ort Ihrer Wahl und klicken Sie dann mit der rechten Maustaste darauf - wählen Sie &amp;quot;Git Checkout...&amp;quot; - und geben Sie die oben angegebene URL ein, um das gesamte Paket herunterzuladen.&lt;br /&gt;
&lt;br /&gt;
[HINWEIS: Der letzte Satz im obigen Absatz muss von jemandem überprüft werden, der TortoiseGit verwendet.]&lt;br /&gt;
&lt;br /&gt;
== Website ins Webroot hochladen ==&lt;br /&gt;
&lt;br /&gt;
Der nächste Schritt ist das Hochladen Ihrer profile.php und databaseinfo.php, die sich in /trunk/webroot/ befinden, in Ihren öffentlichen http-Ordner, damit Regionen darauf zugreifen können.&lt;br /&gt;
&lt;br /&gt;
== Eine Datenbank erstellen ==&lt;br /&gt;
&lt;br /&gt;
Zuerst müssen Sie eine Datenbank erstellen. Sobald dies abgeschlossen ist, können Sie die SQL-Datei osprofiles.sql, die sich in /trunk/webroot/sql/ des SVN befindet, ausführen.&lt;br /&gt;
&lt;br /&gt;
Anschließend müssen Sie Ihre Datenbankverbindungsdatei einrichten, die sich entweder in /trunk/webroot/databaseinfo.php oder in Ihrem Webroot befindet, wo Sie databaseinfo.php hochgeladen haben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$DB_HOST = &amp;quot;&amp;lt;servername&amp;gt;&amp;quot;;&lt;br /&gt;
$DB_USER = &amp;quot;&amp;lt;username&amp;gt;&amp;quot;;&lt;br /&gt;
$DB_PASSWORD = &amp;quot;&amp;lt;password&amp;gt;&amp;quot;;&lt;br /&gt;
$DB_NAME = &amp;quot;&amp;lt;database&amp;gt;&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modul einrichten ==&lt;br /&gt;
&lt;br /&gt;
Nachdem wir alles andere eingerichtet haben, müssen Sie nur noch das Modul installieren und Ihren Regions-Server zurücksetzen.&lt;br /&gt;
&lt;br /&gt;
Kopieren Sie zunächst trunk/bin/OpenSimProfile.Modules.dll und legen Sie diese in Ihrem OpenSim/bin-Ordner ab.&lt;br /&gt;
&lt;br /&gt;
Bearbeiten Sie anschließend Ihre OpenSim.ini auf allen Servern, die Regionen hosten.&lt;br /&gt;
&lt;br /&gt;
Fügen Sie in OpenSim.ini Folgendes hinzu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
[Profile]&lt;br /&gt;
Module = &amp;quot;OpenSimProfile&amp;quot;&lt;br /&gt;
; Ändern Sie dies in Ihren eigenen HTTP-Server, damit der Profilserver funktioniert&lt;br /&gt;
ProfileURL = http://gridserver/profile.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fertiggestellt ==&lt;br /&gt;
&lt;br /&gt;
Starten Sie einfach Ihren Regions-Server neu, und Sie sollten jetzt in der Lage sein, Ihre Profile zu bearbeiten und zu speichern! &lt;br /&gt;
&lt;br /&gt;
[[Category:German Translations]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OpenSimProfile/de</id>
		<title>OpenSimProfile/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OpenSimProfile/de"/>
				<updated>2025-03-27T09:29:45Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: Created page with &amp;quot;__NOTOC__ {{Quicklinks}} &amp;lt;br /&amp;gt;  OpenSimProfile ermöglicht es, funktionierende Profile in OpenSimulator zu haben.  == Wie man OSP einrichtet ==  * Stellen Sie sicher, dass Si...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Quicklinks}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenSimProfile ermöglicht es, funktionierende Profile in OpenSimulator zu haben.&lt;br /&gt;
&lt;br /&gt;
== Wie man OSP einrichtet ==&lt;br /&gt;
&lt;br /&gt;
* Stellen Sie sicher, dass Sie eine Apache/PHP/MySQL-Konfiguration bereit haben, da Profile sonst nicht funktionieren!!&lt;br /&gt;
* Sie müssen außerdem sicherstellen, dass Sie php-xmlrpc haben, oder Sie müssen es mit PHP kompilieren.&lt;br /&gt;
&lt;br /&gt;
Sie können die neueste Version von OpenSimProfile von GitHub abrufen. Verwenden Sie den folgenden Befehl, um den Code auszuchecken:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
git clone https://github.com/kcozens/OpenSimProfile&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweis: Für Windows-Benutzer oder diejenigen, die Git noch nicht verwendet haben, könnte die Seite &amp;quot;Setting Up Git on Windows in Four Easy Steps&amp;quot; hilfreich sein. Verwenden Sie die Informationen aus den Schritten 1 und 2. Nachdem Sie TortoiseGit installiert haben, erstellen Sie ein Verzeichnis an einem Ort Ihrer Wahl und klicken Sie dann mit der rechten Maustaste darauf - wählen Sie &amp;quot;Git Checkout...&amp;quot; - und geben Sie die oben angegebene URL ein, um das gesamte Paket herunterzuladen.&lt;br /&gt;
&lt;br /&gt;
[HINWEIS: Der letzte Satz im obigen Absatz muss von jemandem überprüft werden, der TortoiseGit verwendet.]&lt;br /&gt;
&lt;br /&gt;
== Website ins Webroot hochladen ==&lt;br /&gt;
&lt;br /&gt;
Der nächste Schritt ist das Hochladen Ihrer profile.php und databaseinfo.php, die sich in /trunk/webroot/ befinden, in Ihren öffentlichen http-Ordner, damit Regionen darauf zugreifen können.&lt;br /&gt;
&lt;br /&gt;
== Eine Datenbank erstellen ==&lt;br /&gt;
&lt;br /&gt;
Zuerst müssen Sie eine Datenbank erstellen. Sobald dies abgeschlossen ist, können Sie die SQL-Datei osprofiles.sql, die sich in /trunk/webroot/sql/ des SVN befindet, ausführen.&lt;br /&gt;
&lt;br /&gt;
Anschließend müssen Sie Ihre Datenbankverbindungsdatei einrichten, die sich entweder in /trunk/webroot/databaseinfo.php oder in Ihrem Webroot befindet, wo Sie databaseinfo.php hochgeladen haben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$DB_HOST = &amp;quot;&amp;lt;servername&amp;gt;&amp;quot;;&lt;br /&gt;
$DB_USER = &amp;quot;&amp;lt;username&amp;gt;&amp;quot;;&lt;br /&gt;
$DB_PASSWORD = &amp;quot;&amp;lt;password&amp;gt;&amp;quot;;&lt;br /&gt;
$DB_NAME = &amp;quot;&amp;lt;database&amp;gt;&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modul einrichten ==&lt;br /&gt;
&lt;br /&gt;
Nachdem wir alles andere eingerichtet haben, müssen Sie nur noch das Modul installieren und Ihren Regions-Server zurücksetzen.&lt;br /&gt;
&lt;br /&gt;
Kopieren Sie zunächst trunk/bin/OpenSimProfile.Modules.dll und legen Sie diese in Ihrem OpenSim/bin-Ordner ab.&lt;br /&gt;
&lt;br /&gt;
Bearbeiten Sie anschließend Ihre OpenSim.ini auf allen Servern, die Regionen hosten.&lt;br /&gt;
&lt;br /&gt;
Fügen Sie in OpenSim.ini Folgendes hinzu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
[Profile]&lt;br /&gt;
Module = &amp;quot;OpenSimProfile&amp;quot;&lt;br /&gt;
; Ändern Sie dies in Ihren eigenen HTTP-Server, damit der Profilserver funktioniert&lt;br /&gt;
ProfileURL = http://gridserver/profile.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fertiggestellt ==&lt;br /&gt;
&lt;br /&gt;
Starten Sie einfach Ihren Regions-Server neu, und Sie sollten jetzt in der Lage sein, Ihre Profile zu bearbeiten und zu speichern! &lt;br /&gt;
&lt;br /&gt;
[[Category:German Translations]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/UserProfiles/de</id>
		<title>UserProfiles/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/UserProfiles/de"/>
				<updated>2025-03-27T09:05:56Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: Created page with &amp;quot;{{Languages|UserProfiles}} =Einleitung= OpenSimulator 0.7.6 und später wird mit eingebauter Unterstützung für Benutzerprofile ausgeliefert. Dies unterstützt die dialogbasi...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|UserProfiles}}&lt;br /&gt;
=Einleitung=&lt;br /&gt;
OpenSimulator 0.7.6 und später wird mit eingebauter Unterstützung für Benutzerprofile ausgeliefert. Dies unterstützt die dialogbasierten Benutzerprofile, die in Singularity und ähnlichen Drittanbieter-Viewer angezeigt werden, jedoch nicht die rein webbasierten Profile, die in anderen Viewern zu finden sind.&lt;br /&gt;
&lt;br /&gt;
Das System erlaubt nicht, dass der vorherige Mechanismus zur Unterstützung von Profilen mit dem eingebauten Mechanismus geteilt wird.&lt;br /&gt;
&lt;br /&gt;
Vor OpenSimulator 0.7.6 wurden Benutzerprofile durch ein extern hinzugefügtes Modul unterstützt. Weitere Informationen finden Sie unter [[Profile]].&lt;br /&gt;
&lt;br /&gt;
=Aktivierung=&lt;br /&gt;
Die Aktivierung der eingebauten Unterstützung für Benutzerprofile erfordert&lt;br /&gt;
&lt;br /&gt;
# Konfiguration des Dienstes für ein Grid (in Robust.ini oder Robust.HG.ini) oder für einen Standalone-Modus (in StandaloneCommon.ini), je nach Bedarf.&lt;br /&gt;
# Konfiguration in OpenSim.ini&lt;br /&gt;
&lt;br /&gt;
=Konfiguration für einen Grid-Dienst=&lt;br /&gt;
Der Benutzerprofil-Dienst muss aktiviert und der Connector eingerichtet werden, sodass die entsprechenden JSON-RPC-Methoden den Simulatoren zur Verfügung stehen.&lt;br /&gt;
&lt;br /&gt;
== Dienst aktivieren ==&lt;br /&gt;
Dies erfordert einen Abschnitt UserProfilesService. Sie sollten den aus Robust.ini.example (oder Robust.HG.ini.example) mit Enabled = true verwenden können. Beispielsweise&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[UserProfilesService]&lt;br /&gt;
    LocalServiceModule = &amp;quot;OpenSim.Services.UserProfilesService.dll:UserProfilesService&amp;quot;&lt;br /&gt;
    Enabled = true&lt;br /&gt;
    ;; Für separate Profile-Datenbank konfigurieren&lt;br /&gt;
    ;; ConnectionString = &amp;quot;Data Source=localhost;Database=opensim;User ID=opensim;Password=*****;Old Guids=true;&amp;quot;&lt;br /&gt;
    ;; Realm = UserProfiles&lt;br /&gt;
    UserAccountService = OpenSim.Services.UserAccountService.dll:UserAccountService&lt;br /&gt;
    AuthenticationServiceModule = &amp;quot;OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls gewünscht, kann eine separate Datenbank für die Benutzerdaten konfiguriert werden, indem der führende ';' von ConnectionString und Realm entfernt wird. Die erforderlichen Werte müssen eingegeben werden, damit der Dienst auf Ihre Datenquelle zugreifen kann. Die Datenquelle muss vor der Nutzung erstellt und konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
== Connector aktivieren ==&lt;br /&gt;
Im Abschnitt [ServiceList] der Robust.ini oder Robust.HG.ini muss der Connector für einen Port eingerichtet werden, der den Simulatoren zur Verfügung steht (und nur den Simulatoren). Normalerweise handelt es sich dabei um denselben privaten Port, über den andere Grid-Dienste verfügbar sind. Beispielsweise&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ServiceList]&lt;br /&gt;
UserProfilesServiceConnector = &amp;quot;8002/OpenSim.Server.Handlers.dll:UserProfilesConnector&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== URI des Profilservers für HyperGrid veröffentlichen ==&lt;br /&gt;
Der Abschnitt [LoginService] der Robust.HG.ini-Datei benötigt die Verbindungsdetails für den Profil-Dienst, sodass ausländische Benutzer die Profile Ihrer Benutzer sehen können, wenn sie über HyperGrid zu anderen Grids reisen. Legen Sie den Wert von SRV_ProfileServerURI auf die URI fest, die Ihr Profil-Dienst verwendet. Beispielsweise:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[LoginService]&lt;br /&gt;
SRV_ProfileServerURI = http://example.com:8002&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Konfiguration für Regionsserver in OpenSim.ini ==&lt;br /&gt;
Für jeden OpenSim-Regionserver (OpenSim.exe) muss die Datei OpenSim.ini einen Abschnitt [UserProfiles] enthalten, wobei die ProfileServiceURL so eingestellt wird, dass der Simulator darauf zugreifen kann (nicht der Viewer). Wenn Ihre Grid-Dienste beispielsweise im selben LAN wie Ihre Regionsserver laufen und auf einem Rechner mit der IP-Adresse 192.168.1.3 ausgeführt werden, lautet die Einstellung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[UserProfiles]&lt;br /&gt;
  ProfileServiceURL = http://192.168.1.3:8002&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details finden Sie in der Datei OpenSim.ini.example.&lt;br /&gt;
&lt;br /&gt;
= Konfiguration für einen Standalone-Dienst =&lt;br /&gt;
Die Konfiguration des Standalone-Simulators, um den eingebauten Profil-Dienst verfügbar zu machen, wird durch Bearbeiten der StandaloneCommon.ini-Datei im Verzeichnis bin/config-include durchgeführt.&lt;br /&gt;
&lt;br /&gt;
== Dienst aktivieren ==&lt;br /&gt;
Finden Sie den Abschnitt [UserProfileService] in Ihrer StandaloneCommon.ini und nehmen Sie die notwendigen Änderungen für Ihre Seite vor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[UserProfilesService]&lt;br /&gt;
    LocalServiceModule = &amp;quot;OpenSim.Services.UserProfilesService.dll:UserProfilesService&amp;quot;&lt;br /&gt;
    Enabled = true&lt;br /&gt;
&lt;br /&gt;
    ;; Für separate Datenbank konfigurieren&lt;br /&gt;
    ; ConnectionString = &amp;quot;Data Source=localhost;Database=opensim;User ID=opensim;Password=***;Old Guids=true;&amp;quot;&lt;br /&gt;
    ; Realm = UserProfiles&lt;br /&gt;
&lt;br /&gt;
    UserAccountService = OpenSim.Services.UserAccountService.dll:UserAccountService&lt;br /&gt;
    AuthenticationServiceModule = &amp;quot;OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das obige Beispiel wird den UserProfiles-Dienst mit der Hauptdatenbank für die Profil-Tabellen aktivieren. Falls für die Profildaten eine separate Datenbank gewünscht ist, entfernen Sie den führenden ';' von den Einträgen ConnectionString und Realm. Geben Sie die korrekten Werte in die ConnectionString für Ihre Profildatenbank ein. Die Datenquelle muss vor der Nutzung erstellt und konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
== URI des Profilservers für HyperGrid veröffentlichen ==&lt;br /&gt;
Falls der Standalone für den HyperGrid-Betrieb konfiguriert ist, muss die URL des Profil-Dienstes veröffentlicht werden, damit ausländische Benutzer die Profile Ihrer Benutzer sehen können, wenn sie zu anderen Grids reisen. Dies geschieht, indem der Wert von SRV_ProfileServerURI eingestellt wird, der im Abschnitt [LoginService] der StandaloneCommon.ini zu finden ist. Beispielsweise:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[LoginService]&lt;br /&gt;
SRV_ProfileServerURI = http://example.com:8002&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Konfiguration in OpenSim.ini ==&lt;br /&gt;
Die OpenSim.ini-Datei muss einen Abschnitt [UserProfiles] enthalten, mit einer ProfileServiceURL, z. B.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[UserProfiles]&lt;br /&gt;
  ProfileServiceURL = http://127.0.0.1:9000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details finden Sie in der Datei OpenSim.ini.example.&lt;br /&gt;
&lt;br /&gt;
=Hinweis=&lt;br /&gt;
Wenn Sie das eingebaute Benutzerprofil verwenden, stellen Sie sicher, dass Sie kein weiteres Profil-Modul im bin-Ordner haben (z. B.: OpenSimProfile-Modul). Dies könnte zu Fehlern führen.&lt;br /&gt;
&lt;br /&gt;
[[Category:German Translations]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Server_Commands/de</id>
		<title>Server Commands/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Server_Commands/de"/>
				<updated>2025-02-08T13:17:45Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: /* Archivbefehle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|Server_Commands}}&lt;br /&gt;
&lt;br /&gt;
= Was sind Konsolenbefehle? =&lt;br /&gt;
&lt;br /&gt;
Serverbefehle sind Befehle, die Sie in die Konsole eingeben können, um den Server verschiedene Dinge tun zu lassen.&lt;br /&gt;
&lt;br /&gt;
Die Befehle können in solche unterteilt werden, die auf den Simulator (Simulatorbefehle) und solche, die auf die Grid-Dienste (Servicebefehle) angewendet werden.&lt;br /&gt;
&lt;br /&gt;
Auf einem eigenständigen System stehen sowohl Simulator- als auch Servicebefehle auf der einzelnen Konsole des eigenständigen Systems zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
In einer Grid-Architektur stehen die Simulatorbefehle auf den Simulatoren zur Verfügung, während die Servicebefehle auf der ROBUST-Konsole verfügbar sind.&lt;br /&gt;
&lt;br /&gt;
'''Haftungsausschluss''': Einige Befehle funktionieren möglicherweise nicht wie erwartet, einige funktionieren möglicherweise gar nicht, und es besteht die Möglichkeit, dass Sie sogar alle Ihre Einstellungen/Inhalte verlieren könnten. Diese Zusammenfassung veraltet schnell - der beste Ort, um Befehle zu finden, ist das Eingeben von &amp;quot;help&amp;quot; in die Regionkonsole.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anders angegeben, sollte diese Liste ab OpenSimulator 0.7.1 aktuell sein.&lt;br /&gt;
&lt;br /&gt;
= Befehle =&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Konsolenbefehle ==&lt;br /&gt;
&lt;br /&gt;
Diese Befehle sind sowohl in Simulator- als auch in Robust Konsolen verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
&lt;br /&gt;
* command-script [skriptdatei] - Führt ein Befehlsskript aus, das Konsolenbefehle enthält.&lt;br /&gt;
* quit - Server herunterfahren.&lt;br /&gt;
* show info - Zeigt Serverinformationen an (Version und Startpfad). Vor OpenSimulator 0.7.5 ist dies nur auf der Simulator-Konsole verfügbar.&lt;br /&gt;
* show uptime - Zeigt Startzeit und Betriebszeit des Servers an. Vor OpenSimulator 0.7.5 ist dies nur auf der Simulator-Konsole verfügbar.&lt;br /&gt;
* show version - Zeigt Serverversion an. Vor OpenSimulator 0.7.5 ist dies nur auf der Simulator-Konsole verfügbar.&lt;br /&gt;
* shutdown - Synonym für quit.&lt;br /&gt;
* get log level - In OpenSimulator 0.7.5 und später: Gibt das aktuelle Konsolenprotokollierungslevel aus. In OpenSimulator 0.7.4 und früher bitte den Befehl &amp;quot;set log level&amp;quot; ohne Levelparameter verwenden.&lt;br /&gt;
* set log level [level] - Ändert nur das Konsolenprotokollierungslevel. Zum Beispiel: off oder debug. Siehe [[Logging]] für weitere Informationen. In OpenSimulator 0.7.4 und früher, wenn ohne Levelargument aufgerufen, gibt es das aktuelle Level aus. Ab OpenSimulator 0.7.5 bitte den Befehl &amp;quot;get log level&amp;quot; verwenden. Nur auf der ROBUST-Konsole ab OpenSimulator 0.7.5 verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== Debug ===&lt;br /&gt;
&lt;br /&gt;
* debug http [&amp;lt;level&amp;gt;] - Schaltet zusätzliches Logging für HTTP-Anforderungs-Debugging ein/aus. Nur auf der Robust-Konsole ab Commit 94517c8 (Entwicklungscode nach 0.7.3.1) verfügbar. Im aktuellen Entwicklungszweig (für OpenSimulator 0.7.5) ist dies debug http in|out|all [&amp;lt;level&amp;gt;], da ausgehende HTTP-Nachrichten jetzt auch protokolliert werden können (was zuvor nur für eingehende möglich war). Weitere Informationen zu diesem Befehl finden Sie unter [[Debugging]].&lt;br /&gt;
&lt;br /&gt;
* debug threadpool level &amp;lt;level&amp;gt; - Schaltet das Protokollieren der Aktivität im Haupt-Threadpool ein/aus. Weitere Informationen finden Sie unter [[General-Purpose Threadpool]].&lt;br /&gt;
&lt;br /&gt;
== Simulatorbefehle ==&lt;br /&gt;
&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
&lt;br /&gt;
* change region &amp;lt;Regionname&amp;gt; - Nachfolgende Befehle gelten nur für die angegebene Region. Wenn der Regionsname &amp;quot;root&amp;quot; ist, sind alle Regionen ausgewählt.&lt;br /&gt;
* debug packet &amp;lt;level&amp;gt; - Schaltet das Packet-Debugging ein, wobei OpenSimulator Zusammenfassungen von eingehenden und ausgehenden Paketen für Viewer entsprechend dem eingestellten Level ausgibt.&lt;br /&gt;
* emergency-monitoring - Schaltet den Notfall-Debugging-Überwachungsmodus ein oder aus.&lt;br /&gt;
* help [&amp;lt;Befehl&amp;gt;] - Zeigt die allgemeine Befehlsliste an oder detailliertere Hilfe zu einem spezifischen Befehl oder einer Befehlsgruppe.&lt;br /&gt;
* link-mapping - Setzt eine lokale Grid-Koordinate, um eine Verknüpfung zu einem entfernten Hypergrid herzustellen.&lt;br /&gt;
* link-region - Verknüpft eine HyperGrid-Region. Nicht sicher, wie sich dies von link-mapping unterscheidet.&lt;br /&gt;
* modules list - Listet Module auf.&lt;br /&gt;
* modules load &amp;lt;Name&amp;gt; - Lädt ein Modul.&lt;br /&gt;
* modules unload &amp;lt;Name&amp;gt; - Entlädt ein Modul.&lt;br /&gt;
* monitor report - Gibt verschiedene Statistiken zur aktuellen Region und/oder zum Simulator zurück.&lt;br /&gt;
* set terrain heights &amp;lt;Ecke&amp;gt; &amp;lt;Min&amp;gt; &amp;lt;Max&amp;gt; [&amp;lt;x&amp;gt;] [&amp;lt;y&amp;gt;] - Setzt die Terrainhöhen für Textur-Ecken #&amp;lt;Ecke&amp;gt; auf &amp;lt;Min&amp;gt;/&amp;lt;Max&amp;gt;, wenn &amp;lt;x&amp;gt; oder &amp;lt;y&amp;gt; angegeben sind, wird dies nur auf Regionen mit übereinstimmender Koordinate angewendet. &amp;quot;-1&amp;quot; in &amp;lt;x&amp;gt; oder &amp;lt;y&amp;gt; bedeutet Platzhalter für diese Koordinate. Ecke # SW = 0, NW = 1, SE = 2, NE = 3.&lt;br /&gt;
* set terrain texture &amp;lt;Nummer&amp;gt; &amp;lt;UUID&amp;gt; [&amp;lt;x&amp;gt;] [&amp;lt;y&amp;gt;] - Setzt die Terrain-&amp;lt;Nummer&amp;gt; auf &amp;lt;UUID&amp;gt;, wenn &amp;lt;x&amp;gt; oder &amp;lt;y&amp;gt; angegeben sind, wird dies nur auf Regionen mit übereinstimmender Koordinate angewendet. &amp;quot;-1&amp;quot; in &amp;lt;x&amp;gt; oder &amp;lt;y&amp;gt; bedeutet Platzhalter für diese Koordinate.&lt;br /&gt;
* show caps - Zeigt alle registrierten Capabilities-URLs an.&lt;br /&gt;
* : HINWEIS: In OpenSimulator 0.7.1 wird &amp;quot;show capabilities&amp;quot; als Ergebnis für den Hilfe-Befehl angezeigt, tatsächlich wird jedoch nur &amp;quot;show caps&amp;quot; akzeptiert. ([http://opensimulator.org/mantis/view.php?id=5467 #5467])&lt;br /&gt;
* set water height # - Setzt die Höhe simulatorweit oder für einzelne Regionen, wenn Sie change region verwenden.&lt;br /&gt;
* show circuits - Zeigt Agenten-Schaltkreisdaten an.&lt;br /&gt;
* show connections - Zeigt Verbindungsdaten an.&lt;br /&gt;
* show http-handlers - Zeigt alle registrierten HTTP-Handler an.&lt;br /&gt;
* show hyperlinks - Listet HG-Regionen auf.&lt;br /&gt;
* show modules - Zeigt Moduldaten an.&lt;br /&gt;
* show pending-objects - Zeigt die Anzahl der Objekte in den Warteschlangen aller Viewer an.&lt;br /&gt;
* show pqueues [full] - Zeigt Daten der Prioritätswarteschlange für jeden Client an. Ohne die Option 'full' werden nur Root-Agenten angezeigt. Mit der Option 'full' werden auch Child-Agenten angezeigt.&lt;br /&gt;
* show queues - Zeigt Warteschlangendaten für Agentenverbindungen an.&lt;br /&gt;
* show threads - Zeigt die persistenten Threads an, die im System registriert sind. Enthält keine Threadpool-Threads.&lt;br /&gt;
* show throttles [full] - Zeigt Throttle-Daten für jede Client-Verbindung und das vom Server für jede Verbindung maximal erlaubte Limit an. Ohne die Option 'full' werden nur Root-Agenten angezeigt. Mit der Option 'full' werden auch Child-Agenten angezeigt.&lt;br /&gt;
* unlink-region &amp;lt;Lokaler Name&amp;gt; - Entfernt die Verknüpfung einer HyperGrid-Region.&lt;br /&gt;
&lt;br /&gt;
=== Aussehensbefehle ===&lt;br /&gt;
&lt;br /&gt;
* appearance find &amp;lt;UUID-oder-Teil-der-UUID&amp;gt; - Ermittelt, welcher Avatar ein bestimmtes Asset als &amp;quot;baked texture&amp;quot; verwendet, falls vorhanden.&lt;br /&gt;
* appearance rebake &amp;lt;Vorname&amp;gt; &amp;lt;Nachname&amp;gt; - Sendet eine Anfrage an den Viewer des Benutzers, um seine Aussehens-Texturen neu zu backen und neu hochzuladen.&lt;br /&gt;
* appearance send [&amp;lt;Vorname&amp;gt; &amp;lt;Nachname&amp;gt;] - Sendet Aussehensdaten für jeden Avatar im Simulator an andere Viewer.&lt;br /&gt;
* appearance show [&amp;lt;Vorname&amp;gt; &amp;lt;Nachname&amp;gt;] - Zeigt Aussehensinformationen für Avatare an.&lt;br /&gt;
&lt;br /&gt;
Existiert derzeit nur im Entwicklungscode.&lt;br /&gt;
&lt;br /&gt;
=== Archivbefehle ===&lt;br /&gt;
&lt;br /&gt;
* load iar &amp;lt;vorname&amp;gt; &amp;lt;nachname&amp;gt; &amp;lt;inventar pfad&amp;gt; &amp;lt;passwort&amp;gt; [&amp;lt;archiv pfad&amp;gt;] - Benutzerinventararchiv laden. Siehe [[Inventory Archives]].&lt;br /&gt;
* load oar [dateiname] - Ein OpenSimulator-Archiv laden. Dies ersetzt vollständig die aktuelle Region. Standarddateiname ist '''region.oar'''. Siehe [[OpenSim Archives]].&lt;br /&gt;
* load xml [-newIDs [&amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt;]] - Daten einer Region aus dem XML-Format laden (0.7.*: VERALTET und könnte bald ENTFERNT werden. Verwenden Sie stattdessen &amp;quot;load xml2&amp;quot;)&lt;br /&gt;
* XML-Dateien sind das Ergebnis des Exportierens mit dem Befehl export save oder *export save-all&lt;br /&gt;
* load xml2 [dateiname] - optionale Parameter werden für das XML2-Format ab dem 1. Juli 2008 nicht unterstützt&lt;br /&gt;
* save iar &amp;lt;vorname&amp;gt; &amp;lt;nachname&amp;gt; &amp;lt;inventar pfad&amp;gt; &amp;lt;passwort&amp;gt; [&amp;lt;archiv pfad&amp;gt;] - Benutzerinventararchiv speichern. Siehe [[Inventar Archives]]&lt;br /&gt;
* save oar [dateiname] - Die aktuelle Region in ein OpenSimulator-Archiv speichern. Standarddateiname ist '''region.oar'''. Siehe [[OpenSim Archives]].&lt;br /&gt;
* save prims xml2 [&amp;lt;prim name&amp;gt; &amp;lt;dateiname&amp;gt;] - Benannten Prim in XML2 speichern&lt;br /&gt;
* save xml [dateiname] - Prims in XML speichern&lt;br /&gt;
* save xml2 [dateiname] - Prims in XML (Format 2 - Umstrukturierung einiger Knoten zur Vereinfachung des Ladens/Speicherns) speichern&lt;br /&gt;
&lt;br /&gt;
=== Assetbefehle ===&lt;br /&gt;
&lt;br /&gt;
Die fcache-Befehle erscheinen derzeit nur, wenn Sie den fcache-Asset-Cache verwenden. Dies ist der Standard in OpenSimulator.&lt;br /&gt;
&lt;br /&gt;
* fcache assets - Versuch einer tiefen Untersuchung und Zwischenspeicherung aller Assets in allen Szenen&lt;br /&gt;
* fcache clear [datei] [speicher] - Alle Assets im Cache entfernen. Wenn datei oder speicher angegeben ist, wird nur dieser Cache geleert.&lt;br /&gt;
* fcache expire &amp;lt;datum-zeit&amp;gt; - Zwischengespeicherte Assets löschen, die älter als das angegebene Datum/Uhrzeit sind&lt;br /&gt;
* fcache status - Cache-Status anzeigen&lt;br /&gt;
* j2k decode &amp;lt;ID&amp;gt; - JPEG2000-Dekodierung eines Assets durchführen.&lt;br /&gt;
&lt;br /&gt;
=== Konfigurationsbefehle ===&lt;br /&gt;
&lt;br /&gt;
* config get [&amp;lt;abschnitt&amp;gt;] [&amp;lt;schlüssel&amp;gt;] - Aktuelle Konfiguration abrufen, entweder für einen bestimmten Schlüssel, einen bestimmten Abschnitt oder die gesamte Konfiguration.&lt;br /&gt;
* config save &amp;lt;pfad&amp;gt; - Aktuelle Konfiguration in einer Datei speichern.&lt;br /&gt;
* config set &amp;lt;abschnitt&amp;gt; &amp;lt;schlüssel&amp;gt; - Einen bestimmten Konfigurationswert setzen. Im Großen und Ganzen ist dies nutzlos, da weder OpenSimulator noch Module Konfigurationswerte dynamisch neu laden.&lt;br /&gt;
* config show [&amp;lt;abschnitt&amp;gt;] [&amp;lt;schlüssel&amp;gt;] - Synonym für 'config get'&lt;br /&gt;
&lt;br /&gt;
=== Landbefehle ===&lt;br /&gt;
&lt;br /&gt;
* land show - Zeigt alle Parzellen in der aktuellen Region an.&lt;br /&gt;
* land clear - Löscht alle Parzellen auf dem Land.&lt;br /&gt;
&lt;br /&gt;
=== Kartenbefehle ===&lt;br /&gt;
&lt;br /&gt;
* export-map [&amp;lt;pfad&amp;gt;] - Ein Bild der Weltkarte speichern (Standardname ist exportmap.jpg)&lt;br /&gt;
* generate map - Generiert und speichert eine Kartenkachel neu. Nur im Entwicklungscode nach 0.7.6.&lt;br /&gt;
&lt;br /&gt;
=== Objektbefehle ===&lt;br /&gt;
&lt;br /&gt;
* backup - Aktuell ungespeicherte Objektänderungen sofort speichern, anstatt auf den normalen Persistenzaufruf zu warten. Dies sollte normalerweise nicht erforderlich sein - der Simulator speichert Regionsobjekte automatisch in regelmäßigen Abständen und beim Herunterfahren.&lt;br /&gt;
* delete object creator &amp;lt;UUID&amp;gt; - Ein Szenenobjekt nach Ersteller löschen&lt;br /&gt;
* delete object name [--regex] &amp;lt;name&amp;gt; - Ein Szenenobjekt nach Name löschen.&lt;br /&gt;
* delete object outside - Alle Szenenobjekte außerhalb der Regionsgrenzen löschen. Dies gilt derzeit, wenn z &amp;lt; 0 oder z &amp;gt; 10000. Objekte außerhalb dieser Grenzen haben bekanntermaßen Probleme mit der Verwendung einiger Physik-Engines von OpenSimulator verursacht (wie der Open Dynamics Engine).&lt;br /&gt;
* delete object owner &amp;lt;UUID&amp;gt; - Ein Szenenobjekt nach Besitzer löschen&lt;br /&gt;
* delete object uuid &amp;lt;UUID&amp;gt; - Ein Szenenobjekt nach UUID löschen. Im aktuellen Entwicklungscode (nach 0.7.5) ist dies &amp;quot;show object id&amp;quot; und erlaubt auch eine lokale ID.&lt;br /&gt;
* dump object id &amp;lt;UUID-or-localID&amp;gt; - Die Serialisierung des angegebenen Objekts zur Fehlersuche in einer Datei speichern.&lt;br /&gt;
* edit scale &amp;lt;name&amp;gt; &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt; - Die Skalierung eines benannten Prim ändern&lt;br /&gt;
* force update - Die Region zwingen, allen Clients Updates über alle Objekte zu senden.&lt;br /&gt;
* show object name [--regex] &amp;lt;name&amp;gt; - Details von Szenenobjekten mit dem angegebenen Namen anzeigen.&lt;br /&gt;
* show object uuid &amp;lt;UUID&amp;gt; - Details eines Szenenobjekts mit der angegebenen UUID anzeigen. Im aktuellen Entwicklungscode (nach 0.7.5) ist dies &amp;quot;show object id&amp;quot; und erlaubt auch eine lokale ID.&lt;br /&gt;
* show part name [--regex] &amp;lt;name&amp;gt; - Details von Teilen eines Szenenobjekts mit dem angegebenen Namen anzeigen.&lt;br /&gt;
* show part uuid &amp;lt;UUID&amp;gt; - Details von Teilen eines Szenenobjekts mit der angegebenen UUID anzeigen. Im aktuellen Entwicklungscode (nach 0.7.5) ist dies &amp;quot;show object id&amp;quot; und erlaubt auch eine lokale ID.&lt;br /&gt;
&lt;br /&gt;
=== Estatebefehle ===&lt;br /&gt;
&lt;br /&gt;
* reload estate - Estate-Daten neu laden&lt;br /&gt;
* estate link region &amp;lt;estate ID&amp;gt; &amp;lt;region ID&amp;gt; - Verknüpft die angegebene Region mit dem angegebenen Estate.&lt;br /&gt;
* estate show - Dieser Befehl zeigt den Estate-Namen, die ID und den Besitzer für die Regionen an, die derzeit im Simulator laufen. Diese Liste enthält nicht unbedingt alle Estates, die in der Datenbank vorhanden sind.&lt;br /&gt;
* Beispiel:&lt;br /&gt;
* estate show&amp;lt;Enter&amp;gt;&lt;br /&gt;
* Estate-Informationen für die Region TestRegion&lt;br /&gt;
* Estate Name ID Besitzer&lt;br /&gt;
* My Estate 103 Test User&lt;br /&gt;
* estate set name &amp;lt;estate ID&amp;gt; &amp;lt;neuer Name&amp;gt; - Ein Estate umbenennen&lt;br /&gt;
* estate set owner &amp;lt;estate ID&amp;gt; &amp;lt;Vorname&amp;gt; &amp;lt;Nachname&amp;gt; - Den Besitzer eines Estates ändern. Dieser Befehl unterstützt zwei Formen; diese verwendet den Namen des Besitzers.&lt;br /&gt;
* estate set owner &amp;lt;estate ID&amp;gt; &amp;lt;Besitzer-UUID&amp;gt; - Den Besitzer eines Estates ändern. Dieser Befehl unterstützt zwei Formen; diese verwendet die UUID des Besitzers.&lt;br /&gt;
* estate create &amp;lt;Besitzer-UUID&amp;gt; &amp;lt;Estate-Name&amp;gt; - Muss eine Benutzer-UUID sein, die Sie von 'show names' erhalten können&lt;br /&gt;
&lt;br /&gt;
=== Regionsbefehle ===&lt;br /&gt;
&lt;br /&gt;
* change region &amp;lt;Regionsname&amp;gt; - Nachfolgende Befehle gelten nur für die angegebene Region. Wenn der Regionsname &amp;quot;root&amp;quot; ist, werden alle Regionen ausgewählt.&lt;br /&gt;
* create region [name] [dateiname] - Eine neue Region erstellen&lt;br /&gt;
* delete-region &amp;lt;name&amp;gt; - Eine Region von der Festplatte löschen.&lt;br /&gt;
* region get - Post OpenSimulator 0.8.0.*. Regionsparameter anzeigen (Regionsname, Regions-UUID, Standort, URI, Besitzer-ID, Flags).&lt;br /&gt;
* region restart abort [&amp;lt;nachricht&amp;gt;] - Einen geplanten Regionsneustart abbrechen, mit optionaler Nachricht&lt;br /&gt;
* region restart bluebox &amp;lt;nachricht&amp;gt; &amp;lt;delta sekunden&amp;gt;+ - Einen Regionsneustart planen. Wenn ein Delta angegeben ist, wird die Region nach Delta-Sekunden neu gestartet. Den Benutzern in der Region wird eine Uhrzeit zum Neustart als abweisbare Bluebox-Benachrichtigung angezeigt. Wenn mehrere Deltas angegeben sind, wird eine Benachrichtigung gesendet, wenn wir jedes Delta erreichen.&lt;br /&gt;
* region restart notice &amp;lt;nachricht&amp;gt; &amp;lt;delta sekunden&amp;gt;+ - Einen Regionsneustart planen. Dasselbe wie oben, außer dass eine vorübergehende Benachrichtigung anstelle einer abweisbaren Bluebox angezeigt wird.&lt;br /&gt;
* region set - Post OpenSimulator 0.8.0.*. Bestimmte Regionsparameter setzen. Derzeit können&lt;br /&gt;
* ** agent-limit - Das aktuelle Avatar-Limit für die Region. In der Regel wird dies über den Regions-/Estate-Dialog in einem typischen Viewer eingestellt. Dies bleibt über Simulatorneustarts hinweg bestehen.&lt;br /&gt;
* ** max-agent-limit - Der maximale Wert, den agent-limit haben kann. Leider bleibt diese Einstellung hier derzeit nicht über Serverneustarts hinweg bestehen. Damit dies geschieht, muss es separat als MaxAgents-Parameter in der Regionskonfigurationsdatei gesetzt werden.&lt;br /&gt;
* remove-region - Eine Region aus dem Simulator entfernen&lt;br /&gt;
* restart - Startet alle Sims in dieser Instanz neu&lt;br /&gt;
* restart region &amp;lt;regionsname&amp;gt; - Startet nur einen Sim in einer Instanz neu. Stellen Sie die Konsole zuerst auf den Regionsnamen ein, mit 'change region &amp;lt;regionsname&amp;gt;', oder alle Regionen werden neu gestartet.&lt;br /&gt;
* set region flags &amp;lt;Regionsname&amp;gt; &amp;lt;flags&amp;gt; - Datenbank-Flags für die Region setzen&lt;br /&gt;
* können eine der folgenden sein:&lt;br /&gt;
* :'''DefaultRegion''' Wird für neue Rez verwendet. Zufällig, wenn mehrere definiert sind&lt;br /&gt;
* :'''FallbackRegion''' Regionen, auf die wir umleiten, wenn das Ziel nicht erreichbar ist&lt;br /&gt;
* :'''RegionOnline''' Wird gesetzt, wenn eine Region online geht, und zurückgesetzt, wenn sie sich abmeldet und DeleteOnUnregister falsch ist&lt;br /&gt;
* :'''NoDirectLogin''' Region nicht für direkte Anmeldungen verfügbar (nach Name)&lt;br /&gt;
* :'''Persistent''' Beim Abmelden nicht entfernen&lt;br /&gt;
* :'''LockedOut''' Registrierung nicht zulassen&lt;br /&gt;
* :'''NoMove''' Verschieben dieser Region nicht zulassen&lt;br /&gt;
* :'''Reservation''' Dies ist eine inaktive Reservierung&lt;br /&gt;
* :'''Authenticate''' Authentifizierung erforderlich&lt;br /&gt;
* :'''Hyperlink''' Eintrag repräsentiert einen HG-Link&lt;br /&gt;
* :'''DefaultHGRegion''' Eintrag repräsentiert eine Standardregion nur für Hypergrid-Teleports.&lt;br /&gt;
* :Hinweis: Flags sind additiv, es gibt keine Möglichkeit, sie von der Konsole aus zurückzusetzen.&lt;br /&gt;
* show neighbours - Zeigt die Nachbarregionen an&lt;br /&gt;
* show ratings - Bewertungsdaten anzeigen&lt;br /&gt;
* show region - Regionsparameter anzeigen (Regionsname, Regions-UUID, Standort, URI, Besitzer-ID, Flags).&lt;br /&gt;
* show regions - Regionsdaten anzeigen (Regionsnamen, XLocation YLocation-Koordinaten, Regionsports, Estatenamen)&lt;br /&gt;
&lt;br /&gt;
=== Szenenbefehle ===&lt;br /&gt;
&lt;br /&gt;
* debug scene - Szenen-Debugging aktivieren&lt;br /&gt;
* rotate scene &amp;lt;grad&amp;gt; - Dreht die Szene um die Achse 128,128 um x Grad, wobei x=0-360 ist.&lt;br /&gt;
* scale scene &amp;lt;faktor&amp;gt; - Skaliert alle Szenenobjekte um einen Faktor, wobei die Originalgröße = 1,0 ist.&lt;br /&gt;
* translate scene &amp;lt;x,y,z&amp;gt; - Verschiebt die gesamte Szene zu einer neuen Koordinate. Nützlich, um eine Szene an einen anderen Ort in einer Mega- oder variablen Region zu verschieben.&lt;br /&gt;
* (Bitte sichern Sie Ihre Region, bevor Sie einen dieser Befehle verwenden, und beachten Sie mögliche Gleitkommafehler, je häufiger sie verwendet werden.)&lt;br /&gt;
&lt;br /&gt;
=== Skriptbefehle ===&lt;br /&gt;
&lt;br /&gt;
Diese existieren derzeit nur im Git-Master-OpenSimulator-Entwicklungscode nach der Version 0.7.2.&lt;br /&gt;
&lt;br /&gt;
* scripts resume [&amp;lt;skript-element-uuid&amp;gt;] - Alle angehaltenen Skripte fortsetzen&lt;br /&gt;
* scripts show [&amp;lt;skript-element-uuid&amp;gt;] - Skriptinformationen anzeigen. Die Option &amp;lt;skript-element-uuid&amp;gt; existiert nur ab Git-Master 82f0e19 (14.01.2012) (nach OpenSimulator 0.7.2).&lt;br /&gt;
* scripts start [&amp;lt;skript-element-uuid&amp;gt;] - Alle angehaltenen Skripte starten&lt;br /&gt;
* scripts stop [&amp;lt;skript-element-uuid&amp;gt;] - Alle laufenden Skripte stoppen&lt;br /&gt;
* scripts suspend [&amp;lt;skript-element-uuid&amp;gt;] - Alle laufenden Skripte anhalten&lt;br /&gt;
&lt;br /&gt;
=== Statistikbefehle ===&lt;br /&gt;
&lt;br /&gt;
* show stats - Nützliche statistische Informationen für diesen Server anzeigen. Weitere Informationen finden Sie unter [[#Frame Statistics Values|Frame Statistics Values]] unten.&lt;br /&gt;
* stats show - Ein Synonym für &amp;quot;show stats&amp;quot; (nur OpenSimulator-Entwicklungscode nach dem 19. März 2014).&lt;br /&gt;
* stats record - Statistiken periodisch in einer separaten Protokolldatei aufzeichnen.&lt;br /&gt;
* stats save - Einen Schnappschuss der aktuellen Statistiken in einer Datei speichern (nur OpenSimulator-Entwicklungscode nach dem 19. März 2014).&lt;br /&gt;
&lt;br /&gt;
=== Terrainbefehle ===&lt;br /&gt;
&lt;br /&gt;
Einige dieser Befehle erfordern möglicherweise einen Sim-Neustart, um korrekt angezeigt zu werden.&lt;br /&gt;
&lt;br /&gt;
* terrain load - Lädt ein Terrain aus einer angegebenen Datei. (siehe Hinweis1)&lt;br /&gt;
* terrain load-tile - Lädt ein Terrain aus einem Abschnitt einer größeren Datei.&lt;br /&gt;
* terrain save - Speichert die aktuelle Höhenkarte in einer angegebenen Datei.&lt;br /&gt;
* terrain save-tile - Speichert die aktuelle Höhenkarte in der größeren Datei.&lt;br /&gt;
* terrain fill - Füllt die aktuelle Höhenkarte mit einem angegebenen Wert.&lt;br /&gt;
* terrain elevate - Hebt die aktuelle Höhenkarte um den angegebenen Betrag an.&lt;br /&gt;
* terrain lower - Senkt die aktuelle Höhenkarte um den angegebenen Betrag ab.&lt;br /&gt;
* terrain multiply - Multipliziert die Höhenkarte mit dem angegebenen Wert.&lt;br /&gt;
* terrain bake - Speichert das aktuelle Terrain in der gebackenen Karte der Region.&lt;br /&gt;
* terrain revert - Lädt das gebackene Karten-Terrain in die Höhenkarte der Region.&lt;br /&gt;
* terrain newbrushes - Aktiviert experimentelle Pinsel, die die Standard-Terrain-Pinsel ersetzen.&lt;br /&gt;
* terrain show - Zeigt die Terrain-Höhe an einer angegebenen Koordinate.&lt;br /&gt;
* terrain stats - Zeigt einige Informationen über die Höhenkarte der Region zu Debugging-Zwecken an.&lt;br /&gt;
* terrain effect - Führt einen angegebenen Plugin-Effekt aus.&lt;br /&gt;
* terrain flip - Spiegelt das aktuelle Terrain entlang der X- oder Y-Achse.&lt;br /&gt;
* terrain rescale - Skaliert das aktuelle Terrain so, dass es zwischen den angegebenen Minimal- und Maximalhöhen passt.&lt;br /&gt;
* terrain min - Setzt die minimale Terrainhöhe auf den angegebenen Wert.&lt;br /&gt;
* terrain max - Setzt die maximale Terrainhöhe auf den angegebenen Wert.&lt;br /&gt;
* terrain modify - Bietet mehrere Terraforming-Befehle im Bereichseffekt an.&lt;br /&gt;
&lt;br /&gt;
Hinweis1: Wenn Sie einen Sim mit mehreren Regionen haben und alle Regionen dieses Sims aus einem größeren Bild bestehen sollen, können Sie 'terrain load &amp;lt;datei&amp;gt; &amp;lt;breite in regionen&amp;gt; &amp;lt;höhe in regionen&amp;gt; &amp;lt;regionX&amp;gt; &amp;lt;regionY&amp;gt;' verwenden, wobei regionX und regionY die Koordinaten der unteren linken Region sind.&lt;br /&gt;
&lt;br /&gt;
=== Baum Modul Befehle ===&lt;br /&gt;
&lt;br /&gt;
* tree active - Ändert den Aktivitätsstatus für das Baum-Modul&lt;br /&gt;
* tree freeze - Friert/Entfriert die Aktivität für einen definierten Hain&lt;br /&gt;
* tree load - Lädt eine Hain-Definition aus einer XML-Datei&lt;br /&gt;
* tree plant - Beginnt das Pflanzen in einem Hain&lt;br /&gt;
* tree rate - Setzt die Baum-Aktualisierungsrate zurück (mSec)&lt;br /&gt;
* tree reload - Lädt Hain-Definitionen aus den Szenenbäumen neu&lt;br /&gt;
* tree remove - Entfernt eine Hain-Definition und alle darin befindlichen Szenenbäume&lt;br /&gt;
* tree statistics - Protokolliert Statistiken über die Bäume&lt;br /&gt;
	&lt;br /&gt;
=== Benutzerbefehle ===&lt;br /&gt;
&lt;br /&gt;
* alert &amp;lt;nachricht&amp;gt; - Sendet eine In-World-Warnung an alle&lt;br /&gt;
* alert-user &amp;lt;vorname&amp;gt; &amp;lt;nachname&amp;gt; &amp;lt;nachricht&amp;gt; - Sendet eine In-World-Warnung an einen bestimmten Benutzer&lt;br /&gt;
* bypass permissions &amp;lt;true / false&amp;gt; - Umgeht In-World-Berechtigungsprüfungen&lt;br /&gt;
* debug permissions - Aktiviert das Berechtigungs-Debugging&lt;br /&gt;
* force permissions - Erzwingt das Ein- oder Ausschalten der Berechtigungen.&lt;br /&gt;
* kick user &amp;lt;vorname&amp;gt; &amp;lt;nachname&amp;gt; [nachricht] - Wirft einen Benutzer aus dem Simulator&lt;br /&gt;
* login disable - Deaktiviert den Benutzerzugang zu diesem Simulator&lt;br /&gt;
* login enable - Aktiviert den Benutzerzugang zu diesem Simulator&lt;br /&gt;
* login status - Zeigt an, ob Anmeldungen zu diesem Simulator aktiviert oder deaktiviert sind&lt;br /&gt;
* show users [full] - Zeigt Informationen über aktuell verbundene Benutzer in dieser Region an. Ohne die Option 'full' werden nur Benutzer angezeigt, die sich tatsächlich in der Region befinden. Mit der Option 'full' werden auch Kind-Agenten von Benutzern in benachbarten Regionen angezeigt.&lt;br /&gt;
* teleport user &amp;lt;ziel&amp;gt; - Teleportiert einen Benutzer in diesem Simulator zu einem bestimmten Ziel. Derzeit nur im OpenSimulator-Entwicklungscode nach der Version 0.7.3.1 (Commit bf0b817) verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== Windlight/[[LightShare]] Befehle ===&lt;br /&gt;
&lt;br /&gt;
* windlight load - Lädt das Windlight-Profil aus der Datenbank und sendet es&lt;br /&gt;
* windlight enable - Aktiviert das Windlight-Plugin&lt;br /&gt;
* windlight disable - Deaktiviert das Windlight-Plugin&lt;br /&gt;
&lt;br /&gt;
=== [[YEngine]] Befehle ===&lt;br /&gt;
&lt;br /&gt;
* yeng help&lt;br /&gt;
* yeng reset -all | &amp;lt;teil-des-skriptnamens&amp;gt;&lt;br /&gt;
* yeng resume - Setzt die Skriptausführung fort&lt;br /&gt;
* yeng suspend - Unterbricht die Skriptausführung&lt;br /&gt;
* yeng ls -full -max=&amp;lt;nummer&amp;gt; -out=&amp;lt;dateiname&amp;gt; -queues -topcpu&lt;br /&gt;
* yeng cvv - Zeigt den Compiler-Version-Wert an&lt;br /&gt;
* yeng mvv [&amp;lt;neuerwert&amp;gt;] - Zeigt den Migrationsversion-Wert an&lt;br /&gt;
* yeng tracecalls [ja | nein]&lt;br /&gt;
* yeng verbose [ja | nein]&lt;br /&gt;
* yeng pev -all | &amp;lt;teil-des-skriptnamens&amp;gt; &amp;lt;ereignis-name&amp;gt; &amp;lt;parameter...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ROBUST Befehle ==&lt;br /&gt;
&lt;br /&gt;
Diese können auch direkt über die Simulator-Befehlskonsole im Standalone-Modus aufgerufen werden.&lt;br /&gt;
&lt;br /&gt;
=== Asset Befehle ===&lt;br /&gt;
&lt;br /&gt;
* delete asset &amp;lt;ID&amp;gt; - Löscht ein Asset aus der Datenbank. Scheint nicht implementiert zu sein.&lt;br /&gt;
* dump asset &amp;lt;ID&amp;gt; - Exportiert ein Asset auf das Dateisystem. Ab OpenSimulator 0.7.3.&lt;br /&gt;
* show digest &amp;lt;ID&amp;gt; - Zeigt Zusammenfassungsinformationen über ein Asset an. Ab OpenSimulator 0.7.3 wird dies in &amp;quot;show asset&amp;quot; umbenannt.&lt;br /&gt;
&lt;br /&gt;
=== Grid Befehle ===&lt;br /&gt;
&lt;br /&gt;
* set region flags &amp;lt;Regionname&amp;gt; &amp;lt;flags&amp;gt; - Setzt Datenbank-Flags für die Region&lt;br /&gt;
* show region &amp;lt;Regionname&amp;gt; - Zeigt die Einzelheiten einer angegebenen Region an. Dieser Befehl wird in den Entwicklungsversionen von OpenSimulator in &amp;quot;show region name&amp;quot; umbenannt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Befehle existieren derzeit nur in den Entwicklungsversionen von OpenSimulator (nach 0.7.3.1). Diese finden sich derzeit im Abschnitt &amp;quot;Regions&amp;quot; der Hilfe.&lt;br /&gt;
&lt;br /&gt;
* deregister region id &amp;lt;Region UUID&amp;gt; - Deregistriert eine Region manuell. Dies kann hilfreich sein, wenn eine Region aufgrund eines fehlerhaften Simulator-Neustarts nicht ordnungsgemäß entfernt wurde und der Simulator seitdem nicht neu gestartet oder die Regionskonfiguration geändert wurde.&lt;br /&gt;
* show region at &amp;lt;x-koordinate&amp;gt; &amp;lt;y-koordinate&amp;gt; - Zeigt Einzelheiten zu einer Region an der angegebenen Koordinate an.&lt;br /&gt;
* show region name &amp;lt;Regionname&amp;gt; - Zeigt Einzelheiten zu einer Region an&lt;br /&gt;
* show regions - Zeigt Einzelheiten zu allen Regionen an. Im Standalone-Modus ist diese Version des Befehls derzeit nicht verfügbar – stattdessen wird die Simulator-Version von &amp;quot;show regions&amp;quot; verwendet, die ähnliche Informationen anzeigt.&lt;br /&gt;
&lt;br /&gt;
=== Benutzerbefehle ===&lt;br /&gt;
&lt;br /&gt;
* create user [vorname] [nachname] [passw] [Email] [Primäre UUID] [Modell] - Erstellt einen neuen Benutzer&lt;br /&gt;
* einfach: create user - und der Server fordert alle Daten an&lt;br /&gt;
* :&lt;br /&gt;
* UUID null oder Leerzeichen ist, wird eine UUID für Sie generiert.&lt;br /&gt;
* :&lt;br /&gt;
* ist der &amp;quot;Vorname Nachname&amp;quot; eines anderen Benutzers, das Outfit dieses Benutzers wird auf den neuen Benutzer kopiert.&lt;br /&gt;
* :&lt;br /&gt;
* reset user password - Dieser Befehl setzt ein neues Passwort für einen Benutzer und aktualisiert direkt die Datenbank. Es setzt das Passwort nicht auf einen Standard- oder temporären Wert zurück, wie der Begriff vermuten lässt.&lt;br /&gt;
* show account &amp;lt;vorname&amp;gt; &amp;lt;nachname&amp;gt; - Zeigt die Kontodetails für den angegebenen Benutzernamen an (0.7.2-dev)&lt;br /&gt;
&lt;br /&gt;
=== Login Befehle ===&lt;br /&gt;
&lt;br /&gt;
* login level &amp;lt;wert&amp;gt; - Setzt das minimale Benutzerlevel, das zur Anmeldung erlaubt ist (siehe [[Userlevel|Benutzerlevel]]).&lt;br /&gt;
* login reset - Setzt das Login-Level auf den Standardwert zurück.&lt;br /&gt;
* login text &amp;lt;text zum Drucken während des Logins&amp;gt;&lt;br /&gt;
* set user level &amp;lt;vorname&amp;gt; &amp;lt;nachname&amp;gt; &amp;lt;level&amp;gt; - Setzt das Benutzerlevel für den Benutzer, das bestimmt, ob ein Benutzer ein Gott-Konto hat oder sich überhaupt anmelden kann (0.7.2-dev) (siehe [[Userlevel|Benutzerlevel]]).&lt;br /&gt;
&lt;br /&gt;
== Einzelheiten zu Terrain-Modul-Befehlen ==&lt;br /&gt;
&lt;br /&gt;
==== terrain load ====&lt;br /&gt;
Lädt ein Terrain aus einer angegebenen Datei.&lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
* filename (String)&lt;br /&gt;
* Die Datei, aus der Sie laden möchten. Die Dateierweiterung bestimmt den zu verwendenden Loader. Unterstützte Erweiterungen sind: .r32 (RAW32) .f32 (RAW32) .ter (Terragen) .raw (LL/SL RAW) .jpg (JPEG) .jpeg (JPEG) .bmp (BMP) .png (PNG) .gif (GIF) .tif (TIFF) .tiff (TIFF)&lt;br /&gt;
&lt;br /&gt;
==== terrain load-tile ====&lt;br /&gt;
Lädt ein Terrain aus einem Abschnitt einer größeren Datei.&lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
* filename (String)&lt;br /&gt;
* Die Datei, aus der Sie laden möchten. Die Dateierweiterung bestimmt den zu verwendenden Loader. Unterstützte Erweiterungen sind: .r32 (RAW32) .f32 (RAW32) .ter (Terragen) .raw (LL/SL RAW) .jpg (JPEG) .jpeg (JPEG) .bmp (BMP) .png (PNG) .gif (GIF) .tif (TIFF) .tiff (TIFF)&lt;br /&gt;
* file width (Integer)&lt;br /&gt;
* Die Breite der Datei in Kacheln&lt;br /&gt;
* file height (Integer)&lt;br /&gt;
* Die Höhe der Datei in Kacheln&lt;br /&gt;
* minimum X tile (Integer)&lt;br /&gt;
* Die X-Region-Koordinate des ersten Abschnitts in der Datei&lt;br /&gt;
* minimum Y tile (Integer)&lt;br /&gt;
* Die Y-Region-Koordinate des ersten Abschnitts in der Datei&lt;br /&gt;
&lt;br /&gt;
==== terrain save ====&lt;br /&gt;
Speichert die aktuelle Höhenkarte in einer angegebenen Datei.&lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
* filename (String)&lt;br /&gt;
* Der Ziel-Dateiname für Ihre Höhenkarte, die Dateierweiterung bestimmt das Format, in dem gespeichert wird. Unterstützte Erweiterungen sind: .r32 (RAW32) .f32 (RAW32) .ter (Terragen) .raw (LL/SL RAW) .jpg (JPEG) .jpeg (JPEG) .bmp (BMP) .png (PNG) .gif (GIF) .tif (TIFF) .tiff (TIFF)&lt;br /&gt;
&lt;br /&gt;
==== terrain fill ====&lt;br /&gt;
Füllt die aktuelle Höhenkarte mit einem angegebenen Wert.&lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
* value (Double)&lt;br /&gt;
* Der numerische Wert der Höhe, auf den Sie Ihre Region setzen möchten.&lt;br /&gt;
&lt;br /&gt;
==== terrain elevate ====&lt;br /&gt;
Hebt die aktuelle Höhenkarte um den angegebenen Betrag an.&lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
* amount (Double)&lt;br /&gt;
&lt;br /&gt;
==== terrain lower ====&lt;br /&gt;
Senkt die aktuelle Höhenkarte um den angegebenen Betrag ab.&lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
* amount (Double)&lt;br /&gt;
* Der Betrag der Höhe, der vom Terrain in Metern entfernt werden soll.&lt;br /&gt;
&lt;br /&gt;
==== terrain multiply ====&lt;br /&gt;
Multipliziert die Höhenkarte mit dem angegebenen Wert.&lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
* value (Double)&lt;br /&gt;
* Der Wert, mit dem die Höhenkarte multipliziert werden soll.&lt;br /&gt;
&lt;br /&gt;
==== terrain bake ====&lt;br /&gt;
Speichert das aktuelle Terrain in der Rücksetzkarte der Region.&lt;br /&gt;
&lt;br /&gt;
==== terrain revert ====&lt;br /&gt;
Lädt das Rücksetz-Karten-Terrain in die Höhenkarte der Region.&lt;br /&gt;
&lt;br /&gt;
==== terrain newbrushes ====&lt;br /&gt;
Aktiviert experimentelle Pinsel, die die Standard-Terrain-Pinsel ersetzen. WARNUNG: Dies ist eine Debug-Einstellung und kann jederzeit entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
* Enabled? (Boolean)&lt;br /&gt;
* true / false - Neue Pinsel aktivieren&lt;br /&gt;
&lt;br /&gt;
==== terrain stats ====&lt;br /&gt;
Zeigt einige Informationen über die Höhenkarte der Region zu Debugging-Zwecken an.&lt;br /&gt;
&lt;br /&gt;
==== terrain effect ====&lt;br /&gt;
Führt einen angegebenen Plugin-Effekt aus.&lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
* name (String)&lt;br /&gt;
* Der Plugin-Effekt, den Sie ausführen möchten, oder 'list', um alle Plugins zu sehen.&lt;br /&gt;
&lt;br /&gt;
==== terrain modify ====&lt;br /&gt;
Ermöglicht Effekte auf bestimmte Bereiche und Abstufungen mit Standard-Höhenkarten-Manipulationen.&lt;br /&gt;
&lt;br /&gt;
Allgemeine Befehlsnutzung:&lt;br /&gt;
:''terrain modify &amp;lt;operation&amp;gt; value [&amp;lt;mask&amp;gt;] [-taper=&amp;lt;value2&amp;gt;]''&lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
:* value: Basiswert, der bei der Anwendung der Operation verwendet wird.&lt;br /&gt;
:* mask:&lt;br /&gt;
:** -rec=x1,y1,dx[,dy] erstellt eine rechteckige Maske basierend auf x1,y1&lt;br /&gt;
:** -ell=x0,y0,rx[,ry] erstellt eine elliptische Maske, die auf x0,y0 zentriert ist.&lt;br /&gt;
:* taper:&lt;br /&gt;
:** rechteckige Masken verjüngen sich wie Pyramiden&lt;br /&gt;
:** elliptische Masken verjüngen sich wie Kegel&lt;br /&gt;
&lt;br /&gt;
Terrainer Manipulation (fill, min, max)&lt;br /&gt;
:* value repräsentiert die Zielhöhe (in der Mitte des Bereichs)&lt;br /&gt;
:* value2 repräsentiert die Zielhöhe (an den Rändern des Bereichs)&lt;br /&gt;
&lt;br /&gt;
Terrainer Bewegung (raise, lower, noise)&lt;br /&gt;
:* value repräsentiert eine Delta-Menge (in der Mitte des Bereichs)&lt;br /&gt;
:* value2 repräsentiert eine Delta-Menge (an den Rändern des Bereichs)&lt;br /&gt;
&lt;br /&gt;
Terrainer Glättung (smooth)&lt;br /&gt;
Glättungsoperation ist etwas anders als die anderen, da sie sich nicht mit Höhenwerten befasst, sondern mit Stärkewerten (im Bereich von 0.01 bis 0.99). Der Algorithmus ist einfach, indem die Werte um einen Punkt herum gemittelt werden, und wird wie folgt implementiert:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;strength&amp;quot;-Parameter gibt an, wie viel vom Ergebnis vom Originalwert stammt (&amp;quot;strength&amp;quot; * map[x,y]).&lt;br /&gt;
&amp;quot;taper&amp;quot;-Parameter gibt an, wie viel vom Rest vom ersten Ring um den Punkt (1.0 - &amp;quot;strength&amp;quot;) * &amp;quot;taper&amp;quot; stammt. Es gibt 8 Elemente im ersten Ring.&lt;br /&gt;
verbleibende Beitrag stammt aus dem zweiten Ring um den Punkt. Es gibt 16 Elemente im zweiten Ring.&lt;br /&gt;
Beispiel:&lt;br /&gt;
:''terrain modify smooth 0.5 -taper=0.6''&lt;br /&gt;
:* das Originalelement wird 0.5 * map[x0,y0] beitragen&lt;br /&gt;
:* jedes Element 1m vom Punkt entfernt wird ((1-0.5)0.6)/8 * map[x1,y1] beitragen&lt;br /&gt;
: jedes Element 2m vom Punkt entfernt wird ((1-0.5)*0.4)/16 * map[x2,y2] beitragen&lt;br /&gt;
&lt;br /&gt;
Hinweise:&lt;br /&gt;
&amp;quot;taper&amp;quot;-Wert muss möglicherweise aufgrund der ganzzahligen Mathematik, die in Karten verwendet wird, übertrieben werden.&lt;br /&gt;
Beispiel, um eine 512x512 Var-Insel zu erstellen:&lt;br /&gt;
:''terrain modify min 30 -ell=256,256,240 -taper=-29''&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
: https://www.youtube.com/watch?v=pehyqr3H8I0 (dead link)&lt;br /&gt;
&lt;br /&gt;
== Einzelheiten zu Hypergrid-Befehlen ==&lt;br /&gt;
&lt;br /&gt;
Für vollständige Details und Erklärungen zu Hypergrid-Befehlen siehe die [http://opensimulator.org/wiki/Installing_and_Running_Hypergrid#Linking_regions_.28Optional.29 Linking Regions] Abschnitte der [http://opensimulator.org/wiki/Installing_and_Running_Hypergrid Installing and Running Hypergrid] Seite.&lt;br /&gt;
&lt;br /&gt;
'''show hyperlinks'''&lt;br /&gt;
&lt;br /&gt;
Dieser Befehl zeigt eine Liste aller Hypergrid-verbundenen Regionen an.&lt;br /&gt;
&lt;br /&gt;
'''link-region &amp;lt;Xloc&amp;gt; &amp;lt;Yloc&amp;gt; &amp;lt;host&amp;gt; &amp;lt;port&amp;gt; &amp;lt;location-name&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* Verwenden Sie Xloc und Yloc, die für Ihre Welt sinnvoll sind, d.h. nahe bei Ihren Regionen, aber nicht angrenzend.&lt;br /&gt;
* Ersetzen Sie osl2.nac.uci.edu und 9006 durch den Domainnamen / die IP-Adresse und den Port der Region, zu der Sie verbinden möchten.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: link-region 8998 8998 osl2.nac.uci.edu 9006 OSGrid Gateway&lt;br /&gt;
&lt;br /&gt;
'''unlink-region &amp;lt;lokaler Regionsname&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Dieser Befehl trennt die angegebene Hypergrid-verbundene Region - stellen Sie sicher, dass Sie den genauen lokalen Namen verwenden, der vom Befehl &amp;quot;show hyperlinks&amp;quot; gemeldet wird.&lt;br /&gt;
&lt;br /&gt;
link-mapping - Verknüpft eine HyperGrid-Region. Unklar, wie sich dies von link-mapping unterscheidet.&lt;br /&gt;
&lt;br /&gt;
== Frame Statistics Values ==&lt;br /&gt;
&lt;br /&gt;
Die Bezeichnungen der von dem Konsolenbefehl &amp;quot;show stats&amp;quot; angezeigten Frame-Statistikwerte sind etwas kryptisch. Hier ist eine Liste der Bedeutungen dieser Werte:&lt;br /&gt;
&lt;br /&gt;
* Dilatn - Zeitdilatation&lt;br /&gt;
* SimFPS - Frames pro Sekunde des Simulators&lt;br /&gt;
* PhyFPS - Physik-Frames pro Sekunde&lt;br /&gt;
* AgntUp - Anzahl der Agenten Updates&lt;br /&gt;
* RootAg - Anzahl der Root Agenten&lt;br /&gt;
* ChldAg - Anzahl der Kind Agenten&lt;br /&gt;
* Prims - Anzahl der Prim Objekte&lt;br /&gt;
* AtvPrm - Anzahl der aktiven Prim-Objekte&lt;br /&gt;
* AtvScr - Anzahl der aktiven Skripte&lt;br /&gt;
* ScrLPS - Anzahl der Skriptzeilen pro Sekunde&lt;br /&gt;
* PktsIn - Anzahl der eingehenden Pakete pro Sekunde&lt;br /&gt;
* PktOut - Anzahl der ausgehenden Pakete pro Sekunde&lt;br /&gt;
* PendDl - Anzahl der ausstehenden Downloads&lt;br /&gt;
* PendUl - Anzahl der ausstehenden Uploads&lt;br /&gt;
* UnackB - Anzahl der nicht anerkannten Bytes&lt;br /&gt;
* TotlFt - Gesamte Frame-Zeit&lt;br /&gt;
* NetFt - Netz Frame Zeit&lt;br /&gt;
* PhysFt - Physik Frame Zeit&lt;br /&gt;
* OthrFt - Andere Frame Zeit&lt;br /&gt;
* AgntFt - Agenten Frame Zeit&lt;br /&gt;
* ImgsFt - Bild Frame Zeit&lt;br /&gt;
&lt;br /&gt;
[[Category:Support]]&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:German Translations]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Map/de</id>
		<title>Map/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Map/de"/>
				<updated>2025-02-08T09:19:37Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: Created page with &amp;quot;{{Languages|Map}}  =Einleitung=  Das Konzept der „Karte“ in OpenSimulator kann sich auf zwei Dinge beziehen.  # Die '''Minikarte''' – Dies ist die kleine Karte, die die ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|Map}}&lt;br /&gt;
&lt;br /&gt;
=Einleitung=&lt;br /&gt;
&lt;br /&gt;
Das Konzept der „Karte“ in OpenSimulator kann sich auf zwei Dinge beziehen.&lt;br /&gt;
&lt;br /&gt;
# Die '''Minikarte''' – Dies ist die kleine Karte, die die aktuelle und umliegende Regionen im Viewer anzeigt.&lt;br /&gt;
# Die '''Hauptkarte''' – Dies ist die Karte, die erscheint, wenn du das Hauptkartenfenster öffnest.&lt;br /&gt;
&lt;br /&gt;
Die Minikarte wird ausschließlich vom Viewer generiert und enthält ein Bild des Terrains, die Positionen anderer Avatare in der Region, farbcodierte Objekte je nach Eigentum usw.&lt;br /&gt;
&lt;br /&gt;
Die Hauptkarte hingegen wird ausschließlich von OpenSimulator generiert.&lt;br /&gt;
&lt;br /&gt;
Im weiteren Verlauf dieses Dokuments sprechen wir über die Hauptkarte, aber möglicherweise werden in Zukunft weitere Informationen zur Minikarte ergänzt.&lt;br /&gt;
&lt;br /&gt;
=Die Hauptkarte=&lt;br /&gt;
&lt;br /&gt;
==Übersicht==&lt;br /&gt;
&lt;br /&gt;
Linden Lab Viewer 1 und zugehörige TPVs sowie Linden Lab Viewer 2 und 3 und zugehörige TPVs nutzen unterschiedliche Methoden, um Kartendaten zu empfangen. Leider bedeutet dies, dass einige Konfigurationsoperationen (z. B. das vollständige Deaktivieren der Kartengenerierung) an zwei verschiedenen Stellen durchgeführt werden müssen.&lt;br /&gt;
&lt;br /&gt;
==Viewer 1==&lt;br /&gt;
&lt;br /&gt;
Für Viewer 1 wurden Kartentexturen generiert und im Asset-Dienst gespeichert, wobei die UUID des Assets in der Spalte `regionMapTexture` der Tabelle `regions` durch den Grid-Dienst erfasst wurde. Beim Öffnen der Hauptkarte sendete der Viewer eine `MapBlockRequest`-UDP-Nachricht, um die Kartenblöcke für einen bestimmten Bereich anzufordern. Der Simulator interpretierte diese Nachricht, rief die entsprechenden Kartentextur-UUIDs ab, indem er die Regionsinformationen vom Grid-Dienst anforderte (und ggf. auch das Parzellenbild, worauf wir hier nicht näher eingehen), und sendete sie an den Viewer zurück. Der Viewer forderte dann bei Bedarf die Texturen mit den erhaltenen UUIDs an.&lt;br /&gt;
&lt;br /&gt;
Die Weltkarte ist standardmäßig für Viewer 1 und zugehörige TPVs aktiviert mit den folgenden Einstellungen in `OpenSimDefaults.ini`, die in `OpenSim.ini` überschrieben werden können:&lt;br /&gt;
&lt;br /&gt;
 [Map]&lt;br /&gt;
 WorldMapModule = WorldMap&lt;br /&gt;
 MapImageModule = MapImagemodule&lt;br /&gt;
&lt;br /&gt;
Zusätzlich kann man festlegen:&lt;br /&gt;
&lt;br /&gt;
 [Map]&lt;br /&gt;
 GenerateMapTiles = true|false&lt;br /&gt;
 MaptileRefresh = &amp;lt;Sekunden&amp;gt;&lt;br /&gt;
 DrawPrimOnMapTile = true|false&lt;br /&gt;
 TextureOnMapTile = true|false&lt;br /&gt;
&lt;br /&gt;
* '''GenerateMapTiles''' steuert, ob Kartenkacheln überhaupt generiert werden.&lt;br /&gt;
* '''MaptileRefresh''' legt fest, ob Kartenkacheln periodisch neu generiert werden.&lt;br /&gt;
* '''DrawPrimOnMapTile''' bestimmt, ob Prims auf Kartenkacheln gezeichnet werden (Standard: true).&lt;br /&gt;
* '''TextureOnMapTile''' legt fest, ob Terraintexturen für Kartenkacheln verwendet oder ob alles einfach grün schattiert wird.&lt;br /&gt;
&lt;br /&gt;
Es gibt ein alternatives, qualitativ hochwertigeres, aber ressourcenintensiveres `MapImageModule` namens `Warp3DImageModule`, auf das wir weiter unten eingehen.&lt;br /&gt;
&lt;br /&gt;
==Viewer 2 und später==&lt;br /&gt;
&lt;br /&gt;
Viewer 2 und 3 rufen stattdessen gewöhnliche JPEG-Bilder von einer Adresse ab, die ihnen während des Logins mitgeteilt wird. In OpenSimulator wird diese Adresse mit&lt;br /&gt;
&lt;br /&gt;
 [LoginService]&lt;br /&gt;
 MapTileURL = &amp;quot;http://&amp;lt;robust-oder-standalone-ip&amp;gt;:&amp;lt;public-port&amp;gt;/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
in der `[LoginService]`-Sektion von `Robust.ini` (bei Grid-Modus) oder `StandaloneCommon.ini` (bei Standalone-Modus) festgelegt. Die Anfragen werden vom `MapGetServiceConnector` verarbeitet, der auf dem öffentlichen Dienstport lauscht (typischerweise 8002 im Grid-Modus, 9000 im Standalone-Modus).&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
 [LoginService]&lt;br /&gt;
 MapTileURL = &amp;quot;http://192.0.43.10:9000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Die Viewer-Anfragen folgen dem Format:&lt;br /&gt;
&lt;br /&gt;
 /map-&amp;lt;zoom-stufe&amp;gt;-&amp;lt;x-koordinate&amp;gt;-&amp;lt;y-koordinate&amp;gt;-objects.jpg&lt;br /&gt;
&lt;br /&gt;
wobei `1` die maximale Zoomstufe und `8` die minimale ist. Zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
 GET /map-1-1000-1000-objects.jpg&lt;br /&gt;
&lt;br /&gt;
Bei höheren Zoomstufen als `1` zeigt das Bild mehrere Kartenblöcke an, wobei der im Dateinamen angegebene Block in der SW-Ecke liegt (z. B. `map-2-1000-1000-objects.jpg` zeigt 4 Regionen).&lt;br /&gt;
&lt;br /&gt;
Die gelieferten Dateien sind gewöhnliche JPEGs und nicht JPEG2000, wie es das Asset-Textursystem verwendet.&lt;br /&gt;
&lt;br /&gt;
Wie bei Viewer 1 sind die Simulatoren für die Generierung der Kartenkacheln verantwortlich. Dies wird in der `[MapImageService]`-Sektion von `StandaloneCommon.ini` oder `GridCommon.ini` gesteuert. In `StandaloneCommon.ini` ist der konfigurierbare Parameter:&lt;br /&gt;
&lt;br /&gt;
 [MapImageService]&lt;br /&gt;
 RefreshTime = 60&lt;br /&gt;
&lt;br /&gt;
Dies steuert die Aktualisierungszeit für Kartenkacheln in Minuten (Standard: 60). Verwirrenderweise erfolgt diese Angabe in Minuten, während es für Viewer 1 in Sekunden ist.&lt;br /&gt;
&lt;br /&gt;
Um die Kartenkachel-Generierung für Viewer 2/3 vollständig zu deaktivieren, muss man den Parameter&lt;br /&gt;
&lt;br /&gt;
 [Modules]&lt;br /&gt;
 MapImageService = MapImageServiceModule &lt;br /&gt;
&lt;br /&gt;
in `Standalone.ini` überschreiben, indem man ihn einfach leer setzt:&lt;br /&gt;
&lt;br /&gt;
 [Modules]&lt;br /&gt;
 MapImageService =&lt;br /&gt;
&lt;br /&gt;
In `GridCommon.ini` kann `RefreshTime` ebenfalls angepasst werden. Zudem gibt es dort einen weiteren Parameter, der dem Simulator mitteilt, wohin das generierte Bild hochgeladen wird:&lt;br /&gt;
&lt;br /&gt;
 [MapImageService]&lt;br /&gt;
 MapImageServerURI = &amp;lt;ROBUST-map-image-service&amp;gt;:&amp;lt;private-port&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
 MapImageServerURI = http://192.168.1.4:8003&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu `MapTileURL` ist dieser Port privat (Standard: 8003), da wir nicht möchten, dass Viewer eigene Kartenkacheln hinzufügen können! Daher muss die IP nur vom Simulator erreichbar sein. Falls Simulator und Dienste im selben LAN laufen, kann dies eine lokale LAN-IP-Adresse sein.&lt;br /&gt;
&lt;br /&gt;
Das `MapImageServiceModule` für Viewer 2/3 lädt eine generierte JPEG-Datei direkt zum Map-Image-Dienst hoch (entweder im Prozess für Standalone oder über `MapImageServerURI` im Grid-Modus). Der Map-Image-Dienst speichert sie dann in einem Verzeichnis, das durch&lt;br /&gt;
&lt;br /&gt;
 [MapImageService]&lt;br /&gt;
 TilesStoragePath = &amp;quot;maptiles&amp;quot;&lt;br /&gt;
&lt;br /&gt;
in `Robust.ini` oder `StandaloneCommon.ini` festgelegt ist. Standardmäßig ist dies `bin/maptiles`. In diesem Verzeichnis sind alle generierten und hochgeladenen JPG-Dateien zu finden.&lt;br /&gt;
&lt;br /&gt;
==Kartenkachel-Generierung==&lt;br /&gt;
Obwohl Viewer 1 und Viewer 2/3 Kartenkacheln unterschiedlich nutzen und anfordern, werden die Bilder durch denselben Bildgenerierungscode erstellt.&lt;br /&gt;
&lt;br /&gt;
===Generatoren===&lt;br /&gt;
Derzeit gibt es in OpenSimulator zwei Möglichkeiten zur Kartengenerierung.&lt;br /&gt;
&lt;br /&gt;
====MapImageModule====&lt;br /&gt;
Dies ist das ältere Kartenbildmodul. Um es zu verwenden, setze:&lt;br /&gt;
&lt;br /&gt;
 [Map]&lt;br /&gt;
 MapImageModule = MapImageModule&lt;br /&gt;
&lt;br /&gt;
====Warp3DImageModule====&lt;br /&gt;
Dies ist ein neueres Modul, das qualitativ hochwertigere Kartenbilder erzeugt, aber starken Speicherverbrauch hat. Dies wird in einer zukünftigen OpenSimulator-Version (nach 0.8) behoben. Bis dahin sollte dieses Modul nur einmal pro Sitzung zum Generieren von Kartenkacheln verwendet werden (z. B. beim Start). Um es zu aktivieren, setze:&lt;br /&gt;
&lt;br /&gt;
 [Map]&lt;br /&gt;
 MapImageModule = Warp3DImageModule&lt;br /&gt;
&lt;br /&gt;
Siehe [[Warp3DImageModule]] für weitere Informationen.&lt;br /&gt;
&lt;br /&gt;
===Allgemeine Konfiguration===&lt;br /&gt;
Zusätzlich zu spezifischen [[Warp3DImageModule]]-Parametern befinden sich die Einstellungen zur Kartenkachel-Generierung in der `[Map]`-Sektion von `OpenSim.ini`. Die Parameter sollten hier dokumentiert werden, aber bis dahin siehe `OpenSim.ini.example`.&lt;br /&gt;
&lt;br /&gt;
===Manuelle Neugenerierung===&lt;br /&gt;
Normalerweise werden Kartenkacheln beim Start und/oder in regelmäßigen Abständen generiert. Seit OpenSimulator 0.8 kann man dies auch manuell mit folgendem Konsolenbefehl tun:&lt;br /&gt;
&lt;br /&gt;
 # generate map&lt;br /&gt;
&lt;br /&gt;
=Code=&lt;br /&gt;
&lt;br /&gt;
Dies ist eine sehr grobe Code-Übersicht, die später noch erweitert werden kann.&lt;br /&gt;
&lt;br /&gt;
{|border = 1 &lt;br /&gt;
 ! Class/Interface                                                                 !! Description&lt;br /&gt;
 |-&lt;br /&gt;
 | OpenSim.Region.Framework.Interfaces.IWorldMapModule                             || v1 map generation.  Invoked directly from scene.  Uses IMapImageGenerator.  Also contain code for parcel overlays.&lt;br /&gt;
 |-&lt;br /&gt;
 | OpenSim.Region.Framework.Interfaces.IMapImageGenerator                          || Interface to modules that actually generate map images.  Implemented by MapImageModule, Warp3DImageModule.&lt;br /&gt;
 |-&lt;br /&gt;
 | OpenSim.Region.CoreModules.ServicesConnectorsOut.MapImage.MapImageServiceModule || Triggers v2/v3 map image generation via IMapImageGenerator and uploads using IMapImageService&lt;br /&gt;
 |-&lt;br /&gt;
 | OpenSim.Services.Interfaces.IMapImageService                                    || Interface for v2/v3 map image upload.  Implemented by OpenSim.Services.Connectors.MapImageServicesConnector for upload and OpenSim.Services.MapImageService to add and server map images.&lt;br /&gt;
 |-&lt;br /&gt;
 | OpenSim.Server.Handlers.Map.MapAddServerConnector                               || Handles POST of map images.  Should only be exposed to simulators.&lt;br /&gt;
 |-&lt;br /&gt;
 | OpenSim.Server.Handlers.Map.MapGetServerConnector                               || Serves map images.  Must be reachable by viewers.&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
[[Category:Configuration]]&lt;br /&gt;
[[Category:German Translations]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OSSL_Script_Library/JsonStore</id>
		<title>OSSL Script Library/JsonStore</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OSSL_Script_Library/JsonStore"/>
				<updated>2025-01-12T15:27:54Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|OSSL Script Library/JsonStore}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This page describes two scripts, a generator and a consumer, that demonstrate how to use the JsonStore JsonStoreRead and JsonStoreTake operations for creating a master/worker pair of scripts. Place the generator script in an object and the consumer script in another object. Touch the generator to start the process. &lt;br /&gt;
&lt;br /&gt;
To see the value of the master/worker pattern, try to make multiple copies of the consumer object. Each one will read tasks created by the generator.&lt;br /&gt;
&lt;br /&gt;
This functionality current only exists in OpenSimulator development code (0.7.4-dev).  Please be aware that it is currently experimental and subject to change which may make older scripts fail to work or work slightly differently.  You can find documentation of all the functions available and examples of their use can be found on the [[JsonStore Module]] page.&lt;br /&gt;
&lt;br /&gt;
== Enabling the JsonStore Module ==&lt;br /&gt;
&lt;br /&gt;
The first thing is to enable the JsonStore module in OpenSim.ini. Add the following to enable the module:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[JsonStore]&lt;br /&gt;
Enabled = True&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The Generator Script ==&lt;br /&gt;
&lt;br /&gt;
The generator script writes values to a shared array where consumers can pull those values. The script uses the global store (public scratch storage space) to share the identity of the Json store that it creates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
string sStoreName = &amp;quot;JsonStoreTest&amp;quot;;&lt;br /&gt;
key kGlobalStore = (key)NULL_KEY;&lt;br /&gt;
&lt;br /&gt;
integer iCounter = 0;&lt;br /&gt;
key kStoreID;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(&amp;quot;running...&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer i)&lt;br /&gt;
    {&lt;br /&gt;
        state running;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
state running&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // Create a JsonStore initialized with an empty array associated with the key 'Event'&lt;br /&gt;
        kStoreID = JsonCreateStore(&amp;quot;{'Event' : []}&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        // Save the store that was just created in the global store, this makes it easier for&lt;br /&gt;
        // other scripts to find; an alternative is to say the store id in a private channel&lt;br /&gt;
        JsonSetValue(kGlobalStore,sStoreName,(string)kStoreID);&lt;br /&gt;
&lt;br /&gt;
        // Start a timer that will generate counters periodically&lt;br /&gt;
        llSetTimerEvent(1.0);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        // Generate a new counter and add it to the end of the Event array&lt;br /&gt;
        iCounter += 1;&lt;br /&gt;
        JsonSetValue(kStoreID,&amp;quot;Event[+]&amp;quot;,(string)iCounter);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer i)&lt;br /&gt;
    {&lt;br /&gt;
        // When the test is done, remove the identity of the store and destroy it&lt;br /&gt;
        JsonRemoveValue(kGlobalStore,sStoreName);&lt;br /&gt;
        JsonDestroyStore(kStoreID);&lt;br /&gt;
&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The Consumer Script ==&lt;br /&gt;
&lt;br /&gt;
The consumer script waits for the generator to create the store and place its identity into the global store. At that&lt;br /&gt;
point it begins to read values from the generator's store. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
string sStoreName = &amp;quot;JsonStoreTest&amp;quot;;&lt;br /&gt;
key kGlobalStore = (key)NULL_KEY;&lt;br /&gt;
&lt;br /&gt;
key kStoreID;&lt;br /&gt;
key kReqID;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // Set up a request for the identity of the generator's store&lt;br /&gt;
        // This posts a request, when the value is available a link message event will be fired&lt;br /&gt;
        kReqID = JsonReadValue(kGlobalStore,sStoreName);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    link_message(integer sender, integer result, string msg, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if (sender != -1)&lt;br /&gt;
            return;&lt;br /&gt;
&lt;br /&gt;
        llOwnerSay(&amp;quot;shared store id: &amp;quot; + msg);&lt;br /&gt;
        kStoreID = (key)msg;&lt;br /&gt;
&lt;br /&gt;
        state running;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
state running&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // Set up a request that will take a value (remove it from the store) when it is available&lt;br /&gt;
        // A link_message will be fired when the value is available&lt;br /&gt;
        kReqID = JsonTakeValue(kStoreID,&amp;quot;Event[0]&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    link_message(integer sender, integer result, string msg, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if (sender != -1)&lt;br /&gt;
            return;&lt;br /&gt;
&lt;br /&gt;
        llOwnerSay(&amp;quot;read &amp;quot; + msg);&lt;br /&gt;
        kReqID = JsonTakeValue(kStoreID,&amp;quot;Event[0]&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer i)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripts]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OSSL_Script_Library/JsonStore/de</id>
		<title>OSSL Script Library/JsonStore/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OSSL_Script_Library/JsonStore/de"/>
				<updated>2025-01-12T15:27:19Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|OSSL Script Library/JsonStore}}&lt;br /&gt;
&lt;br /&gt;
== Einführung ==&lt;br /&gt;
&lt;br /&gt;
Diese Seite beschreibt zwei Skripte, einen Generator und einen Verbraucher, die demonstrieren, wie man die JsonStore-Methoden JsonStoreRead und JsonStoreTake verwendet, um ein Master/Worker-Skriptpaar zu erstellen. Platzieren Sie das Generatorskript in einem Objekt und das Verbraucherskript in einem anderen Objekt. Berühren Sie den Generator, um den Prozess zu starten.&lt;br /&gt;
&lt;br /&gt;
Um den Wert des Master/Worker-Musters zu sehen, versuchen Sie, mehrere Kopien des Verbraucherobjekts zu erstellen. Jedes wird Aufgaben lesen, die vom Generator erstellt wurden.&lt;br /&gt;
&lt;br /&gt;
Diese Funktionalität existiert derzeit nur im Entwicklungscode von OpenSimulator (0.7.4-dev). Bitte beachten Sie, dass sie sich derzeit im experimentellen Stadium befindet und Änderungen unterliegen kann, die dazu führen können, dass ältere Skripte nicht mehr funktionieren oder leicht anders funktionieren. Sie können eine Dokumentation aller verfügbaren Funktionen und Beispiele für deren Verwendung auf der Seite [[JsonStore Module]] finden.&lt;br /&gt;
&lt;br /&gt;
== Aktivieren des JsonStore-Moduls ==&lt;br /&gt;
&lt;br /&gt;
Das erste, was zu tun ist, um das JsonStore-Modul in OpenSim.ini zu aktivieren. Fügen Sie Folgendes hinzu, um das Modul zu aktivieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[JsonStore]&lt;br /&gt;
Enabled = True&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Das Generatorskript ==&lt;br /&gt;
&lt;br /&gt;
Das Generatorskript schreibt Werte in ein freigegebenes Array, aus dem Verbraucher diese Werte ziehen können. Das Skript verwendet den globalen Speicher (öffentlicher Zwischenspeicherraum), um die Identität des erstellten Json-Speichers zu teilen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
string sStoreName = &amp;quot;JsonStoreTest&amp;quot;;&lt;br /&gt;
key kGlobalStore = (key)NULL_KEY;&lt;br /&gt;
&lt;br /&gt;
integer iCounter = 0;&lt;br /&gt;
key kStoreID;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(&amp;quot;running...&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer i)&lt;br /&gt;
    {&lt;br /&gt;
        state running;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
state running&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // Erstellen eines JsonStore, der mit einem leeren Array initialisiert wird, das dem Schlüssel 'Event' zugeordnet ist&lt;br /&gt;
        kStoreID = JsonCreateStore(&amp;quot;{'Event' : []}&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        // Speichern des gerade erstellten Stores im globalen Speicher, dies erleichtert es anderen Skripten, ihn zu finden; &lt;br /&gt;
        // eine Alternative wäre, die Store-ID in einem privaten Kanal zu sagen&lt;br /&gt;
        JsonSetValue(kGlobalStore, sStoreName, (string)kStoreID);&lt;br /&gt;
&lt;br /&gt;
        // Starten eines Timers, der periodisch Zähler generiert&lt;br /&gt;
        llSetTimerEvent(1.0);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        // Generieren eines neuen Zählers und Hinzufügen zum Ende des Event-Arrays&lt;br /&gt;
        iCounter += 1;&lt;br /&gt;
        JsonSetValue(kStoreID, &amp;quot;Event[+]&amp;quot;, (string)iCounter);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer i)&lt;br /&gt;
    {&lt;br /&gt;
        // Wenn der Test abgeschlossen ist, entfernen Sie die Identität des Stores und zerstören Sie ihn&lt;br /&gt;
        JsonRemoveValue(kGlobalStore, sStoreName);&lt;br /&gt;
        JsonDestroyStore(kStoreID);&lt;br /&gt;
&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Das Verbraucherskript ==&lt;br /&gt;
&lt;br /&gt;
Das Verbraucherskript wartet darauf, dass der Generator den Store erstellt und seine Identität in den globalen Store einfügt. An diesem Punkt beginnt es, Werte aus dem Store des Generators zu lesen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
string sStoreName = &amp;quot;JsonStoreTest&amp;quot;;&lt;br /&gt;
key kGlobalStore = (key)NULL_KEY;&lt;br /&gt;
&lt;br /&gt;
key kStoreID;&lt;br /&gt;
key kReqID;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // Einrichten einer Anforderung für die Identität des Stores des Generators&lt;br /&gt;
        // Dies postet eine Anfrage, wenn der Wert verfügbar ist, wird ein Link-Nachricht-Ereignis ausgelöst&lt;br /&gt;
        kReqID = JsonReadValue(kGlobalStore, sStoreName);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    link_message(integer sender, integer result, string msg, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if (sender != -1)&lt;br /&gt;
            return;&lt;br /&gt;
&lt;br /&gt;
        llOwnerSay(&amp;quot;shared store id: &amp;quot; + msg);&lt;br /&gt;
        kStoreID = (key)msg;&lt;br /&gt;
&lt;br /&gt;
        state running;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
state running&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // Einrichten einer Anforderung, die einen Wert nimmt (aus dem Store entfernt), wenn er verfügbar ist&lt;br /&gt;
        // Ein Link-Nachricht-Ereignis wird ausgelöst, wenn der Wert verfügbar ist&lt;br /&gt;
        kReqID = JsonTakeValue(kStoreID, &amp;quot;Event[0]&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    link_message(integer sender, integer result, string msg, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if (sender != -1)&lt;br /&gt;
            return;&lt;br /&gt;
&lt;br /&gt;
        llOwnerSay(&amp;quot;read &amp;quot; + msg);&lt;br /&gt;
        kReqID = JsonTakeValue(kStoreID, &amp;quot;Event[0]&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer i)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripts]]&lt;br /&gt;
&lt;br /&gt;
[[Category:German Translations]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OSSL_Script_Library/JsonStore/de</id>
		<title>OSSL Script Library/JsonStore/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OSSL_Script_Library/JsonStore/de"/>
				<updated>2025-01-12T15:25:38Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: Created page with &amp;quot;{{Quicklinks|JsonStore}}  == Einführung ==  Diese Seite beschreibt zwei Skripte, einen Generator und einen Verbraucher, die demonstrieren, wie man die JsonStore-Methoden Json...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|JsonStore}}&lt;br /&gt;
&lt;br /&gt;
== Einführung ==&lt;br /&gt;
&lt;br /&gt;
Diese Seite beschreibt zwei Skripte, einen Generator und einen Verbraucher, die demonstrieren, wie man die JsonStore-Methoden JsonStoreRead und JsonStoreTake verwendet, um ein Master/Worker-Skriptpaar zu erstellen. Platzieren Sie das Generatorskript in einem Objekt und das Verbraucherskript in einem anderen Objekt. Berühren Sie den Generator, um den Prozess zu starten.&lt;br /&gt;
&lt;br /&gt;
Um den Wert des Master/Worker-Musters zu sehen, versuchen Sie, mehrere Kopien des Verbraucherobjekts zu erstellen. Jedes wird Aufgaben lesen, die vom Generator erstellt wurden.&lt;br /&gt;
&lt;br /&gt;
Diese Funktionalität existiert derzeit nur im Entwicklungscode von OpenSimulator (0.7.4-dev). Bitte beachten Sie, dass sie sich derzeit im experimentellen Stadium befindet und Änderungen unterliegen kann, die dazu führen können, dass ältere Skripte nicht mehr funktionieren oder leicht anders funktionieren. Sie können eine Dokumentation aller verfügbaren Funktionen und Beispiele für deren Verwendung auf der Seite [[JsonStore Module]] finden.&lt;br /&gt;
&lt;br /&gt;
== Aktivieren des JsonStore-Moduls ==&lt;br /&gt;
&lt;br /&gt;
Das erste, was zu tun ist, um das JsonStore-Modul in OpenSim.ini zu aktivieren. Fügen Sie Folgendes hinzu, um das Modul zu aktivieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[JsonStore]&lt;br /&gt;
Enabled = True&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Das Generatorskript ==&lt;br /&gt;
&lt;br /&gt;
Das Generatorskript schreibt Werte in ein freigegebenes Array, aus dem Verbraucher diese Werte ziehen können. Das Skript verwendet den globalen Speicher (öffentlicher Zwischenspeicherraum), um die Identität des erstellten Json-Speichers zu teilen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
string sStoreName = &amp;quot;JsonStoreTest&amp;quot;;&lt;br /&gt;
key kGlobalStore = (key)NULL_KEY;&lt;br /&gt;
&lt;br /&gt;
integer iCounter = 0;&lt;br /&gt;
key kStoreID;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(&amp;quot;running...&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer i)&lt;br /&gt;
    {&lt;br /&gt;
        state running;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
state running&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // Erstellen eines JsonStore, der mit einem leeren Array initialisiert wird, das dem Schlüssel 'Event' zugeordnet ist&lt;br /&gt;
        kStoreID = JsonCreateStore(&amp;quot;{'Event' : []}&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        // Speichern des gerade erstellten Stores im globalen Speicher, dies erleichtert es anderen Skripten, ihn zu finden; &lt;br /&gt;
        // eine Alternative wäre, die Store-ID in einem privaten Kanal zu sagen&lt;br /&gt;
        JsonSetValue(kGlobalStore, sStoreName, (string)kStoreID);&lt;br /&gt;
&lt;br /&gt;
        // Starten eines Timers, der periodisch Zähler generiert&lt;br /&gt;
        llSetTimerEvent(1.0);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        // Generieren eines neuen Zählers und Hinzufügen zum Ende des Event-Arrays&lt;br /&gt;
        iCounter += 1;&lt;br /&gt;
        JsonSetValue(kStoreID, &amp;quot;Event[+]&amp;quot;, (string)iCounter);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer i)&lt;br /&gt;
    {&lt;br /&gt;
        // Wenn der Test abgeschlossen ist, entfernen Sie die Identität des Stores und zerstören Sie ihn&lt;br /&gt;
        JsonRemoveValue(kGlobalStore, sStoreName);&lt;br /&gt;
        JsonDestroyStore(kStoreID);&lt;br /&gt;
&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Das Verbraucherskript ==&lt;br /&gt;
&lt;br /&gt;
Das Verbraucherskript wartet darauf, dass der Generator den Store erstellt und seine Identität in den globalen Store einfügt. An diesem Punkt beginnt es, Werte aus dem Store des Generators zu lesen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
string sStoreName = &amp;quot;JsonStoreTest&amp;quot;;&lt;br /&gt;
key kGlobalStore = (key)NULL_KEY;&lt;br /&gt;
&lt;br /&gt;
key kStoreID;&lt;br /&gt;
key kReqID;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // Einrichten einer Anforderung für die Identität des Stores des Generators&lt;br /&gt;
        // Dies postet eine Anfrage, wenn der Wert verfügbar ist, wird ein Link-Nachricht-Ereignis ausgelöst&lt;br /&gt;
        kReqID = JsonReadValue(kGlobalStore, sStoreName);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    link_message(integer sender, integer result, string msg, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if (sender != -1)&lt;br /&gt;
            return;&lt;br /&gt;
&lt;br /&gt;
        llOwnerSay(&amp;quot;shared store id: &amp;quot; + msg);&lt;br /&gt;
        kStoreID = (key)msg;&lt;br /&gt;
&lt;br /&gt;
        state running;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
state running&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // Einrichten einer Anforderung, die einen Wert nimmt (aus dem Store entfernt), wenn er verfügbar ist&lt;br /&gt;
        // Ein Link-Nachricht-Ereignis wird ausgelöst, wenn der Wert verfügbar ist&lt;br /&gt;
        kReqID = JsonTakeValue(kStoreID, &amp;quot;Event[0]&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    link_message(integer sender, integer result, string msg, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if (sender != -1)&lt;br /&gt;
            return;&lt;br /&gt;
&lt;br /&gt;
        llOwnerSay(&amp;quot;read &amp;quot; + msg);&lt;br /&gt;
        kReqID = JsonTakeValue(kStoreID, &amp;quot;Event[0]&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer i)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripts]]&lt;br /&gt;
&lt;br /&gt;
[[Category:German Translations]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/JsonStore_Module</id>
		<title>JsonStore Module</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/JsonStore_Module"/>
				<updated>2025-01-12T15:15:16Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|JsonStore Module}}&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
The JsonStore module enables scripts and region modules to share structured data.  Please be aware that it is currently experimental and subject to change which may make older scripts fail to work or work slightly differently.&lt;br /&gt;
&lt;br /&gt;
To use JsonStore when running OpenSimulator on Mono, the version of mono needs to be later than 2.8 (preferably at least in the 2.10 series).  On Windows, JsonStore is available from OpenSimulator 0.8.0 Dev Master at r/24021 (when the underlying .NET in use changed from v3.5 to v4).&lt;br /&gt;
&lt;br /&gt;
Nodes are currently restricted to array, object and string.  If JSON is added (via JsonCreateStore(), JsonSetJson() or other such methods) that contains raw number values, then these can still be retrieved but only as strings.&lt;br /&gt;
&lt;br /&gt;
= Enabling the Module =&lt;br /&gt;
&lt;br /&gt;
Add the following to your OpenSim.ini to enable the JsonStore module: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[JsonStore]&lt;br /&gt;
Enabled = true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to access JsonStore via script methods, you will also need to enable permission for MOD functions to run, if you have not done so already:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[XEngine]&lt;br /&gt;
AllowMODFunctions = true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= General Points =&lt;br /&gt;
&lt;br /&gt;
* The module works by allow scripts to create their own stores for JSON data.  JSON can either be written directly, read in from a notecard or added via some other means (such as a separate request to fetch data from an external server).&lt;br /&gt;
&lt;br /&gt;
* Stores are referenced via a key.  This key can be passed to other scripts so that they can share the same store.&lt;br /&gt;
&lt;br /&gt;
* Stores are not persisted.  Once the simulator is reset the data will disappear if other steps aren't taken to store it (such as within notecards).&lt;br /&gt;
&lt;br /&gt;
* If you have finished with a store, you should remove it with the JsonDestroyStore() function. However, stores created by a script will be garbage collected when the script is deleted or reset. This can affect other scripts if they have access to a shared store.&lt;br /&gt;
&lt;br /&gt;
* If you want to see the whole contents of a store via script for debugging purposes, then a good way to do this is to print the serialized JsonStore with the script line&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
llOwnerSay(JsonGetJson(storeID, &amp;quot;.&amp;quot;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= JsonStore Path Syntax =&lt;br /&gt;
&lt;br /&gt;
A JsonStore path is a '.' separated string of tokens that reference elements of the Json store. Path tokens are either strings (for structure access) or array references. The '+' token refers to the end of the array and is used to append values to an array. Strings are quoted with &amp;quot;{&amp;quot; and &amp;quot;}&amp;quot; characters. Array references are quoted with &amp;quot;[&amp;quot; and &amp;quot;]&amp;quot;. When there is no ambiguity, the '.' separator can be dropped.  &lt;br /&gt;
&lt;br /&gt;
The function JsonList2Path can be used to convert a list of tokens into a JsonStore path. This is particularly useful if you want to iterate through arrays in the store.&lt;br /&gt;
&lt;br /&gt;
== Formal Syntax ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Path --&amp;gt; Token | Path '.' Token&lt;br /&gt;
Token --&amp;gt; '[' Index ']' | '{' Identifier '}' | SimpleIdentifier&lt;br /&gt;
Index --&amp;gt; '+' | [0-9]+&lt;br /&gt;
Identifier --&amp;gt; [^}]+&lt;br /&gt;
SimpleIdentifier --&amp;gt; [a-zA-Z]+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// reference the root node, as used in calls such as JsonGetJson(storeId, &amp;quot;.&amp;quot;) &lt;br /&gt;
// to serialize the whole store&lt;br /&gt;
&amp;quot;.&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
// reference an element&lt;br /&gt;
&amp;quot;elem&amp;quot; &lt;br /&gt;
&lt;br /&gt;
// reference an array item&lt;br /&gt;
&amp;quot;[0]&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
// reference an array item where elem is the key.  This is a shortcut for elem.[0]&lt;br /&gt;
&amp;quot;elem[0]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
// reference an array item where elem is the key.&lt;br /&gt;
&amp;quot;elem.[0]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
// reference an array item where elem is the key and elem itself &lt;br /&gt;
// contains braces {}, brackets [] or periods .&lt;br /&gt;
&amp;quot;{elem}.[0]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
// this is a two token path with the identifier &amp;quot;foo.bar&amp;quot; and array reference &amp;quot;0&amp;quot;&lt;br /&gt;
&amp;quot;{foo.bar}.[0]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
// this is a two token path with the identifier &amp;quot;foo.bar&amp;quot; and array reference &amp;quot;0&amp;quot; &lt;br /&gt;
// and foo or bar contain elements that need to be delineated.&lt;br /&gt;
&amp;quot;{foo}.{bar}.[0]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
// this is a four token path: [{foo}, {bar}, [0], {goof}]&lt;br /&gt;
&amp;quot;foo.bar[0].goof&amp;quot; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= JsonStore Value Syntax =&lt;br /&gt;
&lt;br /&gt;
= JsonStore Region Module API =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Methods for manipulating the region store are made accessible via the IJsonStore interface in the Interfaces directory of OpenSim.Region.Framework.dll.  These methods are&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    public delegate void TakeValueCallback(string s);&lt;br /&gt;
&lt;br /&gt;
    public enum JsonStoreNodeType&lt;br /&gt;
    {&lt;br /&gt;
        Undefined = 0,&lt;br /&gt;
        Object = 1,&lt;br /&gt;
        Array = 2,&lt;br /&gt;
        Value = 3&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public enum JsonStoreValueType&lt;br /&gt;
    {&lt;br /&gt;
        Undefined = 0,&lt;br /&gt;
        Boolean = 1,&lt;br /&gt;
        Integer = 2,&lt;br /&gt;
        Float = 3,&lt;br /&gt;
        String = 4,&lt;br /&gt;
        UUID = 5&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public interface IJsonStoreModule&lt;br /&gt;
    {&lt;br /&gt;
        bool AttachObjectStore(UUID objectID);&lt;br /&gt;
        bool CreateStore(string value, ref UUID result);&lt;br /&gt;
        bool DestroyStore(UUID storeID);&lt;br /&gt;
&lt;br /&gt;
        JsonStoreNodeType GetNodeType(UUID storeID, string path);&lt;br /&gt;
        JsonStoreValueType GetValueType(UUID storeID, string path);&lt;br /&gt;
&lt;br /&gt;
        bool TestStore(UUID storeID);&lt;br /&gt;
&lt;br /&gt;
        bool SetValue(UUID storeID, string path, string value, bool useJson);&lt;br /&gt;
        bool RemoveValue(UUID storeID, string path);&lt;br /&gt;
        bool GetValue(UUID storeID, string path, bool useJson, out string value);&lt;br /&gt;
&lt;br /&gt;
        void TakeValue(UUID storeID, string path, bool useJson, TakeValueCallback cback);&lt;br /&gt;
        void ReadValue(UUID storeID, string path, bool useJson, TakeValueCallback cback);&lt;br /&gt;
&lt;br /&gt;
        int GetArrayLength(UUID storeID, string path);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''TODO: Documentation on these methods.  At this point, you will need to refer to the comparable script functions below.'''&lt;br /&gt;
&lt;br /&gt;
= JsonStore Script Functions =&lt;br /&gt;
&lt;br /&gt;
== Constants ==&lt;br /&gt;
&lt;br /&gt;
The JsonStore module provides functions to interrogate the store to test for node and value types. The following constants are returned by the JsonGetNodeType function:&lt;br /&gt;
&lt;br /&gt;
* JSON_NODETYPE_UNDEF - the node type is unknown or the node does not exist&lt;br /&gt;
* JSON_NODETYPE_OBJECT - the node is a key-accessed dictionary&lt;br /&gt;
* JSON_NODETYPE_ARRAY - the node is an index-accessed array&lt;br /&gt;
* JSON_NODETYPE_VALUE - the node is a value &lt;br /&gt;
&lt;br /&gt;
And the following constants describe the value types of a JSON_NODETYPE_VALUE node:&lt;br /&gt;
&lt;br /&gt;
* JSON_VALUETYPE_UNDEF - the value is unknown or the node is not a value&lt;br /&gt;
* JSON_VALUETYPE_BOOLEAN - the value of the node is a boolean&lt;br /&gt;
* JSON_VALUETYPE_INTEGER - the node has an integer value&lt;br /&gt;
* JSON_VALUETYPE_FLOAT - the node has a float value&lt;br /&gt;
* JSON_VALUEYTYPE_STRING - the node has a string value&lt;br /&gt;
&lt;br /&gt;
Note that all accessors on a JsonStore currently return a string that can be cast to another value type.&lt;br /&gt;
&lt;br /&gt;
== Basic Functions ==&lt;br /&gt;
&lt;br /&gt;
These functions allow you to manipulate stores, set get and test values and read and write JSON to notecards.&lt;br /&gt;
&lt;br /&gt;
*JsonCreateStore &lt;br /&gt;
*JsonAttachObjectStore&lt;br /&gt;
*JsonDestroyStore &lt;br /&gt;
*JsonTestStore &lt;br /&gt;
*JsonRezAtRoot&lt;br /&gt;
*JsonReadNotecard &lt;br /&gt;
*JsonWriteNotecard&lt;br /&gt;
*JsonList2Path&lt;br /&gt;
*JsonGetNodeType/JsonGetValueType&lt;br /&gt;
*JsonGetValue/JsonGetJson &lt;br /&gt;
*JsonSetValue/JsonSetJson&lt;br /&gt;
*JsonRemoveValue &lt;br /&gt;
*JsonGetArrayLength&lt;br /&gt;
*JsonTakeValue/JsonTakeJson&lt;br /&gt;
*JsonReadValue/JsonReadJson&lt;br /&gt;
&lt;br /&gt;
=== key storeID = JsonCreateStore(string jsonvalue) ===&lt;br /&gt;
&lt;br /&gt;
Create a JsonStore and initialize it using the Json encoded value. The new store identifier is returned. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Create a JsonStore initialized with a key 'Hello' point towards the string 'World' &lt;br /&gt;
// and a key 'Event' pointing to an array with two values '1, 2'&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        key storeID = JsonCreateStore(&amp;quot;{'Hello' : 'World', 'Event' : ['1', '2']}&amp;quot;);&lt;br /&gt;
        JsonDestroyStore(storeID);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== integer status = JsonAttachObjectStore()  ===&lt;br /&gt;
&lt;br /&gt;
Ensure that a store is associated with the object (create the store if it doesn't already exist). The store identifier will be the same as the object identifier in which the script is running.&lt;br /&gt;
&lt;br /&gt;
=== integer status = JsonDestroyStore(key storeID)  ===&lt;br /&gt;
&lt;br /&gt;
Destroy the JsonStore associated with the provided identifier.  You should call this whenever you're finished with a JsonStore.&lt;br /&gt;
&lt;br /&gt;
Returns 1 if the operation is successful.  Returns 0 if the operation was not successful or the store does not exist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        key storeID = JsonCreateStore(&amp;quot;{'Hello' : 'World', 'Event' : ['1', '2']}&amp;quot;);&lt;br /&gt;
        integer res = JsonDestroyStore(storeID);&lt;br /&gt;
        llOwnerSay(&amp;quot;Result &amp;quot; + (string)res);&lt;br /&gt;
        JsonDestroyStore(storeID);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== integer status = JsonTestStore(key storeID)  ===&lt;br /&gt;
&lt;br /&gt;
Returns 1 if the identified store exists or 0 if it does not. Used to test if a shared store has been created.&lt;br /&gt;
&lt;br /&gt;
=== key requestID = JsonWriteNotecard(key storeID, string path, string notecard)  ===&lt;br /&gt;
&lt;br /&gt;
Request that the value identified by the given path be Json encoded and written to the notecard. The function returns the request identifier. When the operation completes, a link_message event is generated with the request identifier.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
key requestID;&lt;br /&gt;
key storeID;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        storeID = JsonCreateStore(&amp;quot;{'Hello' : 'World', 'Event' : ['1', '2']}&amp;quot;);&lt;br /&gt;
        requestID = JsonWriteNotecard(storeID, &amp;quot;&amp;quot;, &amp;quot;nc1&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    link_message(integer sender, integer ival, string sval, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if (sender != -1) return;&lt;br /&gt;
&lt;br /&gt;
        if (id == requestID)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Notecard written&amp;quot;);&lt;br /&gt;
            JsonDestroyStore(storeID);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== key requestID = JsonReadNotecard(key storeID, string path, key assetID)  ===&lt;br /&gt;
&lt;br /&gt;
Request that the Json encoded content of a notecard be decoded and &amp;amp;nbsp;placed in the structure in the store at the given path. The function returns the request identifier. When the operation completes, a link_message event is generated with the request identifier.&lt;br /&gt;
&lt;br /&gt;
This example presumes that the prim contains the &amp;quot;nc1&amp;quot; notecard saved in the JsonWriteNotecard() example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
key requestID;&lt;br /&gt;
key storeID;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer n)&lt;br /&gt;
    {       &lt;br /&gt;
        storeID = JsonCreateStore(&amp;quot;{}&amp;quot;); &lt;br /&gt;
        requestID = JsonReadNotecard(storeID, &amp;quot;&amp;quot;, &amp;quot;nc1&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    link_message(integer sender, integer ival, string sval, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if (sender != -1) return;&lt;br /&gt;
        &lt;br /&gt;
        if (id == requestID)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;notecard read: &amp;quot; + JsonGetValue(storeID,&amp;quot;Event[0]&amp;quot;));&lt;br /&gt;
            JsonDestroyStore(storeID);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== key requestID = JsonRezAtRoot(string item, vector pos, vector velocity, rotation rot, string param)  ===&lt;br /&gt;
&lt;br /&gt;
This function is very similar to llRezAtRoot except for two differences. The first is that the string &amp;quot;param&amp;quot; is parsed as JSON and placed into a store identified by the newly created objects identifier. The second is that a link_message event is generated for each of the objects created. The integer parameter is the number of objects remaining to be created (for coalesced objects), the string parameter is the identifier of the newly created object, and the key parameter is the request identifier returned by the call to JsonRezAtRoot.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
key requestID;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer i)&lt;br /&gt;
    {&lt;br /&gt;
        // Rez the object &amp;quot;reztest&amp;quot; from the current object's inventory, give it the json&lt;br /&gt;
        // fragment &amp;quot;{ 'start' : 'abc&amp;quot; }&amp;quot; as a start parameter in its object store&lt;br /&gt;
        string sparam = &amp;quot;{ 'start' : 'abc' }&amp;quot;;&lt;br /&gt;
        requestID = JsonRezAtRoot(&amp;quot;Object&amp;quot;, llGetPos() + &amp;lt;0.0, 0.0, 5.0&amp;gt;, ZERO_VECTOR, llGetRot(), sparam);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    link_message(integer sender, integer result, string msg, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if (sender != -1)&lt;br /&gt;
            return;&lt;br /&gt;
        &lt;br /&gt;
        if (id == requestID)&lt;br /&gt;
            llOwnerSay(&amp;quot;created object &amp;quot; + msg);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And the new object could have use the following code to extract the value from the object store:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
default &lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        if (JsonTestStore(llGetKey()))&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Pulling start parameters from object store&amp;quot;);&lt;br /&gt;
            llOwnerSay(&amp;quot;Start parameters are &amp;quot; + JsonGetJson(llGetKey(), &amp;quot;.&amp;quot;));&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
    on_rez(integer p)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== string value = JsonGetValue(key storeID, string path) ===&lt;br /&gt;
&lt;br /&gt;
Return the value identified by the path. In the case of JsonGetValue() the value must be a string.  If the value exists then it is returned.  If the value does not exist or the store does not exist then an empty string is returned.&lt;br /&gt;
&lt;br /&gt;
The raw string is returned.  If you want a string token that you could then use with JsonSetValueJson() then you will need to use JsonGetValueJson().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        key storeID = JsonCreateStore(&amp;quot;{'Hello' : { 'World' : 'Today' } }&amp;quot;);&lt;br /&gt;
        string res = JsonGetValue(storeID, &amp;quot;Hello.World&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Result &amp;quot; + res); // res will be Today&lt;br /&gt;
        JsonDestroyStore(storeID);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== string jsonvalue = JsonGetJson(key storeID, string path) ===&lt;br /&gt;
&lt;br /&gt;
Return the value identified by the path.  In the case of JsonGetJson() the value will be Json encoded string, array or dictionary.  If the value does not exist or the store does not exist then an empty string is returned.&lt;br /&gt;
&lt;br /&gt;
Please note that if the value is a string (i.e. a leaf-node), then it will be returned as a token surrounded by single quotes (') instead of as a raw string.  This can then be used in JsonSetJson().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        key storeID = JsonCreateStore(&amp;quot;{'Hello' : { 'World' : 'Today' } }&amp;quot;);&lt;br /&gt;
        string res = JsonGetJson(storeID, &amp;quot;Hello&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Result &amp;quot; + res);&lt;br /&gt;
        JsonDestroyStore(storeID);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== integer status = JsonSetValue(key storeID, string path, string value) ===&lt;br /&gt;
&lt;br /&gt;
Save the value at the location identified by the path in the store. Any value currently at the location will be replaced. JsonSetValue() assumes that the value is a string.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        key storeID = JsonCreateStore(&amp;quot;{'Hello' : 'World', 'Event' : ['1', '2']}&amp;quot;);&lt;br /&gt;
        integer intRes = JsonSetValue(storeID, &amp;quot;Pancake.Banana&amp;quot;, &amp;quot;Apple&amp;quot;);   &lt;br /&gt;
        llOwnerSay(&amp;quot;Set result &amp;quot; + (string)intRes);&lt;br /&gt;
        string stringRes = JsonGetValue(storeID, &amp;quot;Pancake.Banana&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Get result &amp;quot; + stringRes);&lt;br /&gt;
        JsonDestroyStore(storeID);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== integer status = JsonSetJson(key storeID, string path, string jsonvalue) ===&lt;br /&gt;
&lt;br /&gt;
Save the JSON at the location identified by the path in the store. Any data currently at the location will be replaced.  The value given must be a JSON encoded string.  If you want to specify a string leaf-node, then this must be surrounded by single quotes (').&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        key storeID = JsonCreateStore(&amp;quot;{'Hello' : 'World'}&amp;quot;);&lt;br /&gt;
        integer intRes = JsonSetValue(storeID, &amp;quot;Hello.World&amp;quot;, &amp;quot;'Apple'&amp;quot;);   &lt;br /&gt;
        llOwnerSay(&amp;quot;Set result &amp;quot; + (string)intRes);&lt;br /&gt;
&lt;br /&gt;
        string stringRes = JsonGetValue(storeID, &amp;quot;Hello.World&amp;quot;); // returns Apple&lt;br /&gt;
        llOwnerSay(&amp;quot;Get result &amp;quot; + stringRes);&lt;br /&gt;
&lt;br /&gt;
        intRes = JsonSetJson(storeID, &amp;quot;.&amp;quot;, &amp;quot;{'Event' : ['1', '2']}&amp;quot;);   &lt;br /&gt;
        llOwnerSay(&amp;quot;Set result &amp;quot; + (string)intRes);&lt;br /&gt;
&lt;br /&gt;
        string stringRes = JsonGetValue(storeID, &amp;quot;Event[0]&amp;quot;); // returns 1&lt;br /&gt;
        llOwnerSay(&amp;quot;Get result &amp;quot; + stringRes);&lt;br /&gt;
&lt;br /&gt;
        JsonDestroyStore(storeID);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== integer status = JsonRemoveValue(key storeID, string path)  ===&lt;br /&gt;
&lt;br /&gt;
Remove from the store the value identified by the path.  &lt;br /&gt;
&lt;br /&gt;
(In OpenSimulator 0.7.5). Returns 1 if the value was removed or the value did not exist.  Returns 0 if the store does not exist.&lt;br /&gt;
&lt;br /&gt;
(In next release). Returns 1 if value was removed.  Returns 0 if the path does not exist or the store does not exist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        key storeID = JsonCreateStore(&amp;quot;{'Hello' : 'World', 'Event' : ['1', '2']}&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        integer intRes = JsonRemoveValue(storeID, &amp;quot;Hello&amp;quot;);   &lt;br /&gt;
        llOwnerSay(&amp;quot;Remove result &amp;quot; + (string)intRes);&lt;br /&gt;
        &lt;br /&gt;
        intRes = JsonTestPath(storeID, &amp;quot;Hello&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;TestPath result &amp;quot; + (string)intRes);&lt;br /&gt;
&lt;br /&gt;
        JsonDestroyStore(storeID);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== integer res = JsonGetArrayLength(key storeID, string path) ===&lt;br /&gt;
&lt;br /&gt;
'''Current development code only (will be released in OpenSimulator 0.7.6).  &lt;br /&gt;
&lt;br /&gt;
Get the length of the array at the given path.  Returns -1 if &lt;br /&gt;
&lt;br /&gt;
* The path does not exist&lt;br /&gt;
* The node at the path is not an array &lt;br /&gt;
* The JsonStore for the storeID does not exist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        key storeID = JsonCreateStore(&amp;quot;{'Hello' : { 'World' : ['1', '2'] } }&amp;quot;);&lt;br /&gt;
        integer res= JsonGetArrayLength(storeID, &amp;quot;Hello.World&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Result &amp;quot; + (integer)res);  // should be 2&lt;br /&gt;
        JsonDestroyStore(storeID);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Helper Functions ==&lt;br /&gt;
&lt;br /&gt;
These are functions to help with manipulating JSON or using the store.&lt;br /&gt;
&lt;br /&gt;
* JsonList2Path&lt;br /&gt;
* JsonGetNodeType&lt;br /&gt;
* JsonGetValueType&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== string path = JsonList2Path(list components) ===&lt;br /&gt;
&lt;br /&gt;
Convert the given list of components to a path.  Components can be strings or integers.  Strings are used as ordinary path name components.  Integers are used as index components to arrays.&lt;br /&gt;
&lt;br /&gt;
This method exists chiefly to make it easier to iterate through arrays.  For example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        key storeID = JsonCreateStore(&amp;quot;{'Hello' : {'World' : [{'name' : 'pete'}, {'name' : 'tom'}, {'name' : 'wilma'}]}}&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        integer i;&lt;br /&gt;
        string path;&lt;br /&gt;
        string name;&lt;br /&gt;
&lt;br /&gt;
        for (i = 0; i &amp;lt; JsonGetArrayLength(storeID, &amp;quot;Hello.World&amp;quot;); i++)&lt;br /&gt;
        {&lt;br /&gt;
            path = JsonList2Path([&amp;quot;Hello.World&amp;quot;, i, &amp;quot;name&amp;quot;]);           &lt;br /&gt;
            name = JsonGetValue(storeID, path);&lt;br /&gt;
            llOwnerSay(path + &amp;quot; is '&amp;quot; + name + &amp;quot;'&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        JsonDestroyStore(storeID);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== int nodetype = JsonGetNodeType(key storeid, string path) ===&lt;br /&gt;
&lt;br /&gt;
Return the type of node identified by the specified path. The following node types could be returned: &lt;br /&gt;
&lt;br /&gt;
* JSON_NODETYPE_UNDEF - the node type is unknown or the node does not exist&lt;br /&gt;
* JSON_NODETYPE_OBJECT - the node is a key-accessed dictionary&lt;br /&gt;
* JSON_NODETYPE_ARRAY - the node is an index-accessed array&lt;br /&gt;
* JSON_NODETYPE_VALUE - the node is a value &lt;br /&gt;
&lt;br /&gt;
=== int valuetype = JsonGetValueType(key storeid, string path) ===&lt;br /&gt;
&lt;br /&gt;
For nodes in the store that specify values, return the type of value stored. Note that currently only string values can be set or returned through the JsonGetValue and JsonSetValue script functions. However, other values can be specified inside Json fragments in notecards or using the JsonSetJson or JsonGetJson functions.&lt;br /&gt;
&lt;br /&gt;
The following value types could be returned:&lt;br /&gt;
&lt;br /&gt;
* JSON_VALUETYPE_UNDEF - the value is unknown or the node is not a value&lt;br /&gt;
* JSON_VALUETYPE_BOOLEAN - the value of the node is a boolean&lt;br /&gt;
* JSON_VALUETYPE_INTEGER - the node has an integer value&lt;br /&gt;
* JSON_VALUETYPE_FLOAT - the node has a float value&lt;br /&gt;
* JSON_VALUEYTYPE_STRING - the node has a string value&lt;br /&gt;
&lt;br /&gt;
== Advanced Functions ==&lt;br /&gt;
&lt;br /&gt;
These are functions that allow scripts to receive notifications of values when they become available.  This is useful for signalling between scripts or between scripts and region modules.&lt;br /&gt;
&lt;br /&gt;
*JsonTakeValue/JsonTakeValueJson &lt;br /&gt;
*JsonReadValue/JsonReadValueJson &lt;br /&gt;
&lt;br /&gt;
=== key requestID = JsonTakeValue(key storeID, string path)&amp;lt;br&amp;gt;key requestID = JsonTakeValueJson(key storeID, string path)  ===&lt;br /&gt;
&lt;br /&gt;
Request that the value identified by the path be removed from the store and returned to the script when it is available. The value will be returned through a link_message event with the requestID. JsonTakeValue() will request a string value. JsonTakeValueJson() will request a Json encoded string that corresponds to a string, array or hash value.&lt;br /&gt;
&lt;br /&gt;
This function is used to wait for a value to be available and then return. Since the operation of read and remove is atomic, it can be used to implement locks, task queues and other synchronization primitives.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
key requestID;&lt;br /&gt;
key storeID;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        storeID = JsonCreateStore(&amp;quot;{'Hello' : 'World', 'Event' : ['1', '2']}&amp;quot;);&lt;br /&gt;
        JsonWriteNotecard(storeID, &amp;quot;&amp;quot;, &amp;quot;nc1&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        requestID = JsonReadNotecard(storeID, &amp;quot;&amp;quot;, &amp;quot;nc1&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    link_message(integer sender, integer ival, string sval, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if (sender != -1) return;&lt;br /&gt;
        &lt;br /&gt;
        if (id == requestID)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;notecard read: &amp;quot; + JsonGetValue(storeID,&amp;quot;Event[0]&amp;quot;));&lt;br /&gt;
            JsonDestroyStore(storeID);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== key requestID = JsonReadValue(key storeID, string path)&amp;lt;br&amp;gt;key requestID = JsonReadValueJson(key storeID, string path) ===&lt;br /&gt;
&lt;br /&gt;
Request that the value identified by the path be returned to the script when it is available. The value will be returned through a link_message event with the requestID. JsonReadValue() will request a string value. JsonReadValueJson() will request a Json encoded string that corresponds to a string, array or hash value.&lt;br /&gt;
&lt;br /&gt;
Unlike the JsonTakeValue() operation, the JsonReadValue operation does not remove the value from the store once it becomes available.&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&lt;br /&gt;
*[[OSSL Script Library/JsonStore|Generator/Consumer]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/JsonStore_Module/de</id>
		<title>JsonStore Module/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/JsonStore_Module/de"/>
				<updated>2025-01-12T15:13:11Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: Created page with &amp;quot;{{Quicklinks|JsonStore Module}}  = Einführung =  Das JsonStore-Modul ermöglicht es Skripten und Region-Modulen, strukturierte Daten zu teilen. Bitte beachten Sie, dass es si...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|JsonStore Module}}&lt;br /&gt;
&lt;br /&gt;
= Einführung =&lt;br /&gt;
&lt;br /&gt;
Das JsonStore-Modul ermöglicht es Skripten und Region-Modulen, strukturierte Daten zu teilen. Bitte beachten Sie, dass es sich derzeit im experimentellen Stadium befindet und Änderungen unterliegen kann, die dazu führen können, dass ältere Skripte nicht mehr funktionieren oder leicht anders funktionieren.&lt;br /&gt;
&lt;br /&gt;
Um JsonStore zu verwenden, wenn Sie OpenSimulator auf Mono ausführen, muss die Version von Mono höher als 2.8 sein (vorzugsweise mindestens in der 2.10er Reihe). Unter Windows ist JsonStore ab OpenSimulator 0.8.0 Dev Master bei r/24021 verfügbar (wenn das zugrunde liegende .NET von v3.5 auf v4 geändert wurde).&lt;br /&gt;
&lt;br /&gt;
Knoten sind derzeit auf Array, Objekt und String beschränkt. Wenn JSON hinzugefügt wird (über JsonCreateStore(), JsonSetJson() oder andere solche Methoden), das rohe Zahlenwerte enthält, können diese dennoch abgerufen werden, aber nur als Strings.&lt;br /&gt;
&lt;br /&gt;
= Aktivierung des Moduls =&lt;br /&gt;
&lt;br /&gt;
Fügen Sie Folgendes zu Ihrer OpenSim.ini hinzu, um das JsonStore-Modul zu aktivieren: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[JsonStore]&lt;br /&gt;
Enabled = true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn Sie über Skriptmethoden auf JsonStore zugreifen möchten, müssen Sie auch die Berechtigung für MOD-Funktionen aktivieren, falls Sie dies noch nicht getan haben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[XEngine]&lt;br /&gt;
AllowMODFunctions = true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Allgemeine Punkte =&lt;br /&gt;
&lt;br /&gt;
* Das Modul funktioniert, indem es Skripten ermöglicht, ihre eigenen Stores für JSON-Daten zu erstellen. JSON kann entweder direkt geschrieben, von einer Notizkarte gelesen oder auf andere Weise hinzugefügt werden (z. B. durch eine separate Anfrage, um Daten von einem externen Server abzurufen).&lt;br /&gt;
&lt;br /&gt;
* Stores werden über einen Schlüssel referenziert. Dieser Schlüssel kann an andere Skripte weitergegeben werden, sodass sie denselben Store teilen können.&lt;br /&gt;
&lt;br /&gt;
* Stores werden nicht gespeichert. Sobald der Simulator zurückgesetzt wird, verschwinden die Daten, wenn keine weiteren Schritte unternommen werden, um sie zu speichern (z. B. in Notizkarten).&lt;br /&gt;
&lt;br /&gt;
* Wenn Sie mit einem Store fertig sind, sollten Sie ihn mit der Funktion JsonDestroyStore() entfernen. Stores, die von einem Skript erstellt wurden, werden jedoch beim Löschen oder Zurücksetzen des Skripts vom Garbage Collector entfernt. Dies kann andere Skripte beeinträchtigen, wenn sie Zugriff auf einen freigegebenen Store haben.&lt;br /&gt;
&lt;br /&gt;
* Wenn Sie den gesamten Inhalt eines Stores zu Debugging-Zwecken über ein Skript anzeigen möchten, ist eine gute Möglichkeit, dies zu tun, das serialisierte JsonStore mit der Skriptzeile auszugeben&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
llOwnerSay(JsonGetJson(storeID, &amp;quot;.&amp;quot;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= JsonStore-Pfadsyntax =&lt;br /&gt;
&lt;br /&gt;
Ein JsonStore-Pfad ist eine durch '.' getrennte Zeichenkette von Tokens, die Elemente des Json-Stores referenzieren. Pfad-Tokens sind entweder Strings (für den Strukturzugriff) oder Array-Referenzen. Das '+'-Token bezieht sich auf das Ende des Arrays und wird verwendet, um Werte an ein Array anzuhängen. Strings werden mit den Zeichen &amp;quot;{&amp;quot; und &amp;quot;}&amp;quot; zitiert. Array-Referenzen werden mit &amp;quot;[&amp;quot; und &amp;quot;]&amp;quot; zitiert. Wenn keine Mehrdeutigkeit besteht, kann der '.'-Separator weggelassen werden.&lt;br /&gt;
&lt;br /&gt;
Die Funktion JsonList2Path kann verwendet werden, um eine Liste von Tokens in einen JsonStore-Pfad zu konvertieren. Dies ist besonders nützlich, wenn Sie durch Arrays im Store iterieren möchten.&lt;br /&gt;
&lt;br /&gt;
== Formale Syntax ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Path --&amp;gt; Token | Path '.' Token&lt;br /&gt;
Token --&amp;gt; '[' Index ']' | '{' Identifier '}' | SimpleIdentifier&lt;br /&gt;
Index --&amp;gt; '+' | [0-9]+&lt;br /&gt;
Identifier --&amp;gt; [^}]+&lt;br /&gt;
SimpleIdentifier --&amp;gt; [a-zA-Z]+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Referenzieren des Wurzelknotens, wie in Aufrufen wie JsonGetJson(storeId, &amp;quot;.&amp;quot;) &lt;br /&gt;
// um den gesamten Store zu serialisieren&lt;br /&gt;
&amp;quot;.&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
// Referenzieren eines Elements&lt;br /&gt;
&amp;quot;elem&amp;quot; &lt;br /&gt;
&lt;br /&gt;
// Referenzieren eines Array-Elements&lt;br /&gt;
&amp;quot;[0]&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
// Referenzieren eines Array-Elements, bei dem elem der Schlüssel ist. Dies ist eine Abkürzung für elem.[0]&lt;br /&gt;
&amp;quot;elem[0]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
// Referenzieren eines Array-Elements, bei dem elem der Schlüssel ist.&lt;br /&gt;
&amp;quot;elem.[0]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
// Referenzieren eines Array-Elements, bei dem elem der Schlüssel ist und elem selbst &lt;br /&gt;
// Klammern {}, eckige Klammern [] oder Punkte . enthält&lt;br /&gt;
&amp;quot;{elem}.[0]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
// Dies ist ein Pfad mit zwei Tokens, mit dem Bezeichner &amp;quot;foo.bar&amp;quot; und der Array-Referenz &amp;quot;0&amp;quot;&lt;br /&gt;
&amp;quot;{foo.bar}.[0]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
// Dies ist ein Pfad mit zwei Tokens, mit dem Bezeichner &amp;quot;foo.bar&amp;quot; und der Array-Referenz &amp;quot;0&amp;quot; &lt;br /&gt;
// und foo oder bar enthalten Elemente, die abgegrenzt werden müssen.&lt;br /&gt;
&amp;quot;{foo}.{bar}.[0]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
// Dies ist ein Pfad mit vier Tokens: [{foo}, {bar}, [0], {goof}]&lt;br /&gt;
&amp;quot;foo.bar[0].goof&amp;quot; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= JsonStore-Wertschnittstelle =&lt;br /&gt;
&lt;br /&gt;
= JsonStore-Region-Modul-API =&lt;br /&gt;
&lt;br /&gt;
Methoden zur Manipulation des Regionsspeichers sind über die IJsonStore-Schnittstelle im Interfaces-Verzeichnis von OpenSim.Region.Framework.dll zugänglich.&lt;br /&gt;
&lt;br /&gt;
Diese Methoden sind:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    public delegate void TakeValueCallback(string s);&lt;br /&gt;
&lt;br /&gt;
    public enum JsonStoreNodeType&lt;br /&gt;
    {&lt;br /&gt;
        Undefined = 0,&lt;br /&gt;
        Object = 1,&lt;br /&gt;
        Array = 2,&lt;br /&gt;
        Value = 3&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public enum JsonStoreValueType&lt;br /&gt;
    {&lt;br /&gt;
        Undefined = 0,&lt;br /&gt;
        Boolean = 1,&lt;br /&gt;
        Integer = 2,&lt;br /&gt;
        Float = 3,&lt;br /&gt;
        String = 4,&lt;br /&gt;
        UUID = 5&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public interface IJsonStoreModule&lt;br /&gt;
    {&lt;br /&gt;
        bool AttachObjectStore(UUID objectID);&lt;br /&gt;
        bool CreateStore(string value, ref UUID result);&lt;br /&gt;
        bool DestroyStore(UUID storeID);&lt;br /&gt;
&lt;br /&gt;
        JsonStoreNodeType GetNodeType(UUID storeID, string path);&lt;br /&gt;
        JsonStoreValueType GetValueType(UUID storeID, string path);&lt;br /&gt;
&lt;br /&gt;
        bool TestStore(UUID storeID);&lt;br /&gt;
&lt;br /&gt;
        bool SetValue(UUID storeID, string path, string value, bool useJson);&lt;br /&gt;
        bool RemoveValue(UUID storeID, string path);&lt;br /&gt;
        bool GetValue(UUID storeID, string path, bool useJson, out string value);&lt;br /&gt;
&lt;br /&gt;
        void TakeValue(UUID storeID, string path, bool useJson, TakeValueCallback cback);&lt;br /&gt;
        void ReadValue(UUID storeID, string path, bool useJson, TakeValueCallback cback);&lt;br /&gt;
&lt;br /&gt;
        int GetArrayLength(UUID storeID, string path);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''TODO: Dokumentation zu diesen Methoden. An diesem Punkt müssen Sie sich auf die untenstehenden vergleichbaren Skriptfunktionen beziehen.'''&lt;br /&gt;
&lt;br /&gt;
= JsonStore-Skriptfunktionen =&lt;br /&gt;
&lt;br /&gt;
== Konstanten ==&lt;br /&gt;
&lt;br /&gt;
Das JsonStore-Modul bietet Funktionen zur Abfrage des Speichers, um Knoten- und Werttypen zu testen. Die folgenden Konstanten werden von der JsonGetNodeType-Funktion zurückgegeben:&lt;br /&gt;
&lt;br /&gt;
* JSON_NODETYPE_UNDEF - der Knotentyp ist unbekannt oder der Knoten existiert nicht&lt;br /&gt;
* JSON_NODETYPE_OBJECT - der Knoten ist ein schlüsselzugreifendes Wörterbuch&lt;br /&gt;
* JSON_NODETYPE_ARRAY - der Knoten ist ein indexzugreifendes Array&lt;br /&gt;
* JSON_NODETYPE_VALUE - der Knoten ist ein Wert&lt;br /&gt;
&lt;br /&gt;
Und die folgenden Konstanten beschreiben die Werttypen eines JSON_NODETYPE_VALUE-Knotens:&lt;br /&gt;
&lt;br /&gt;
* JSON_VALUETYPE_UNDEF - der Wert ist unbekannt oder der Knoten ist kein Wert&lt;br /&gt;
* JSON_VALUETYPE_BOOLEAN - der Wert des Knotens ist ein boolescher Wert&lt;br /&gt;
* JSON_VALUETYPE_INTEGER - der Knoten hat einen ganzzahligen Wert&lt;br /&gt;
* JSON_VALUETYPE_FLOAT - der Knoten hat einen Fließkommawert&lt;br /&gt;
* JSON_VALUETYPE_STRING - der Knoten hat einen Zeichenfolgenwert&lt;br /&gt;
&lt;br /&gt;
Beachten Sie, dass alle Zugriffsmethoden auf einem JsonStore derzeit eine Zeichenfolge zurückgeben, die in einen anderen Wertetyp umgewandelt werden kann.&lt;br /&gt;
&lt;br /&gt;
== Grundfunktionen ==&lt;br /&gt;
&lt;br /&gt;
Diese Funktionen ermöglichen es Ihnen, Speicher zu manipulieren, Werte zu setzen, zu erhalten und zu testen sowie JSON auf Notizkarten zu lesen und zu schreiben.&lt;br /&gt;
&lt;br /&gt;
*JsonCreateStore&lt;br /&gt;
*JsonAttachObjectStore&lt;br /&gt;
*JsonDestroyStore&lt;br /&gt;
*JsonTestStore&lt;br /&gt;
*JsonRezAtRoot&lt;br /&gt;
*JsonReadNotecard&lt;br /&gt;
*JsonWriteNotecard&lt;br /&gt;
*JsonList2Path&lt;br /&gt;
*JsonGetNodeType/JsonGetValueType&lt;br /&gt;
*JsonGetValue/JsonGetJson&lt;br /&gt;
*JsonSetValue/JsonSetJson&lt;br /&gt;
*JsonRemoveValue&lt;br /&gt;
*JsonGetArrayLength&lt;br /&gt;
*JsonTakeValue/JsonTakeJson&lt;br /&gt;
*JsonReadValue/JsonReadJson&lt;br /&gt;
&lt;br /&gt;
=== Schlüssel storeID = JsonCreateStore(string jsonvalue) ===&lt;br /&gt;
&lt;br /&gt;
Erstellen Sie einen JsonStore und initialisieren Sie ihn mit dem Json-codierten Wert. Der neue Speicherbezeichner wird zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Erstellen Sie einen JsonStore, der mit einem Schlüssel 'Hello' initialisiert wird, &lt;br /&gt;
// der auf die Zeichenfolge 'World' zeigt, und einem Schlüssel 'Event', der auf ein Array mit zwei Werten '1, 2' zeigt.&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        key storeID = JsonCreateStore(&amp;quot;{'Hello' : 'World', 'Event' : ['1', '2']}&amp;quot;);&lt;br /&gt;
        JsonDestroyStore(storeID);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== integer status = JsonAttachObjectStore() ===&lt;br /&gt;
&lt;br /&gt;
Stellen Sie sicher, dass ein Store mit dem Objekt verknüpft ist (erstellt den Store, falls er noch nicht existiert). Der Store-Bezeichner ist derselbe wie der Objekt-Bezeichner, in dem das Skript ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
=== integer status = JsonDestroyStore(key storeID) ===&lt;br /&gt;
&lt;br /&gt;
Zerstören Sie den JsonStore, der mit dem angegebenen Bezeichner verknüpft ist. Sie sollten dies aufrufen, wenn Sie mit einem JsonStore fertig sind.&lt;br /&gt;
&lt;br /&gt;
Gibt 1 zurück, wenn die Operation erfolgreich war. Gibt 0 zurück, wenn die Operation nicht erfolgreich war oder der Store nicht existiert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        key storeID = JsonCreateStore(&amp;quot;{'Hello' : 'World', 'Event' : ['1', '2']}&amp;quot;);&lt;br /&gt;
        integer res = JsonDestroyStore(storeID);&lt;br /&gt;
        llOwnerSay(&amp;quot;Ergebnis &amp;quot; + (string)res);&lt;br /&gt;
        JsonDestroyStore(storeID);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== integer status = JsonTestStore(key storeID) ===&lt;br /&gt;
&lt;br /&gt;
Gibt 1 zurück, wenn der angegebene Store existiert, oder 0, wenn er nicht existiert. Wird verwendet, um zu testen, ob ein freigegebener Store erstellt wurde.&lt;br /&gt;
&lt;br /&gt;
=== key requestID = JsonWriteNotecard(key storeID, string path, string notecard) ===&lt;br /&gt;
&lt;br /&gt;
Fordern Sie an, dass der durch den angegebenen Pfad identifizierte Wert Json-kodiert und in die Notizkarte geschrieben wird. Die Funktion gibt den Anforderungsbezeichner zurück. Wenn die Operation abgeschlossen ist, wird ein link_message-Ereignis mit dem Anforderungsbezeichner generiert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
key requestID;&lt;br /&gt;
key storeID;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        storeID = JsonCreateStore(&amp;quot;{'Hello' : 'World', 'Event' : ['1', '2']}&amp;quot;);&lt;br /&gt;
        requestID = JsonWriteNotecard(storeID, &amp;quot;&amp;quot;, &amp;quot;nc1&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    link_message(integer sender, integer ival, string sval, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if (sender != -1) return;&lt;br /&gt;
&lt;br /&gt;
        if (id == requestID)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Notizkarte geschrieben&amp;quot;);&lt;br /&gt;
            JsonDestroyStore(storeID);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== key requestID = JsonReadNotecard(key storeID, string path, key assetID) ===&lt;br /&gt;
&lt;br /&gt;
Fordern Sie an, dass der Json-kodierte Inhalt einer Notizkarte dekodiert und an der angegebenen Pfadstruktur im Store platziert wird. Die Funktion gibt den Anforderungsbezeichner zurück. Wenn die Operation abgeschlossen ist, wird ein link_message-Ereignis mit dem Anforderungsbezeichner generiert.&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel geht davon aus, dass das Prim die &amp;quot;nc1&amp;quot;-Notizkarte enthält, die im Beispiel JsonWriteNotecard() gespeichert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
key requestID;&lt;br /&gt;
key storeID;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer n)&lt;br /&gt;
    {       &lt;br /&gt;
        storeID = JsonCreateStore(&amp;quot;{}&amp;quot;); &lt;br /&gt;
        requestID = JsonReadNotecard(storeID, &amp;quot;&amp;quot;, &amp;quot;nc1&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    link_message(integer sender, integer ival, string sval, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if (sender != -1) return;&lt;br /&gt;
        &lt;br /&gt;
        if (id == requestID)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Notizkarte gelesen: &amp;quot; + JsonGetValue(storeID,&amp;quot;Event[0]&amp;quot;));&lt;br /&gt;
            JsonDestroyStore(storeID);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== key requestID = JsonRezAtRoot(string item, vector pos, vector velocity, rotation rot, string param) ===&lt;br /&gt;
&lt;br /&gt;
Diese Funktion ist sehr ähnlich wie llRezAtRoot, mit zwei Unterschieden. Der erste ist, dass die Zeichenfolge &amp;quot;param&amp;quot; als JSON analysiert und in einem Speicher gespeichert wird, der durch den neu erstellten Objektbezeichner identifiziert wird. Der zweite Unterschied besteht darin, dass für jedes der erstellten Objekte ein link_message-Ereignis generiert wird. Der ganzzahlige Parameter ist die Anzahl der noch zu erstellenden Objekte (für koaleszierte Objekte), der string Parameter ist der Bezeichner des neu erstellten Objekts und der key Parameter ist der Anforderungsbezeichner, der durch den Aufruf von JsonRezAtRoot zurückgegeben wird.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
key requestID;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer i)&lt;br /&gt;
    {&lt;br /&gt;
        // Rez das Objekt &amp;quot;reztest&amp;quot; aus dem aktuellen Objektinventar, gebe ihm das JSON&lt;br /&gt;
        // Fragment &amp;quot;{ 'start' : 'abc' }&amp;quot; als Startparameter in seinem Objektspeicher&lt;br /&gt;
        string sparam = &amp;quot;{ 'start' : 'abc' }&amp;quot;;&lt;br /&gt;
        requestID = JsonRezAtRoot(&amp;quot;Object&amp;quot;, llGetPos() + &amp;lt;0.0, 0.0, 5.0&amp;gt;, ZERO_VECTOR, llGetRot(), sparam);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    link_message(integer sender, integer result, string msg, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if (sender != -1)&lt;br /&gt;
            return;&lt;br /&gt;
&lt;br /&gt;
        if (id == requestID)&lt;br /&gt;
            llOwnerSay(&amp;quot;Objekt erstellt &amp;quot; + msg);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und das neue Objekt könnte den folgenden Code verwenden, um den Wert aus dem Objektspeicher zu extrahieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
default &lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        if (JsonTestStore(llGetKey()))&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Lese Startparameter aus dem Objektspeicher&amp;quot;);&lt;br /&gt;
            llOwnerSay(&amp;quot;Startparameter sind &amp;quot; + JsonGetJson(llGetKey(), &amp;quot;.&amp;quot;));&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
    on_rez(integer p)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== string value = JsonGetValue(key storeID, string path) ===&lt;br /&gt;
&lt;br /&gt;
Gibt den durch den Pfad identifizierten Wert zurück. Im Falle von JsonGetValue() muss der Wert eine Zeichenfolge sein. Wenn der Wert existiert, wird er zurückgegeben. Wenn der Wert nicht existiert oder der Speicher nicht existiert, wird eine leere Zeichenfolge zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Die rohe Zeichenfolge wird zurückgegeben. Wenn Sie ein Zeichenfolgen-Token möchten, das Sie dann mit JsonSetValueJson() verwenden können, müssen Sie JsonGetValueJson() verwenden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        key storeID = JsonCreateStore(&amp;quot;{'Hello' : { 'World' : 'Today' } }&amp;quot;);&lt;br /&gt;
        string res = JsonGetValue(storeID, &amp;quot;Hello.World&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Ergebnis &amp;quot; + res); // res wird Today sein&lt;br /&gt;
        JsonDestroyStore(storeID);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== string jsonvalue = JsonGetJson(key storeID, string path) ===&lt;br /&gt;
&lt;br /&gt;
Gibt den durch den Pfad identifizierten Wert zurück. Im Falle von JsonGetJson() wird der Wert eine Json-kodierte Zeichenfolge, ein Array oder ein Wörterbuch sein. Wenn der Wert nicht existiert oder der Speicher nicht existiert, wird eine leere Zeichenfolge zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Bitte beachten Sie, dass, wenn der Wert eine Zeichenfolge ist (d. h. ein Blattknoten), er als Token zurückgegeben wird, das von einfachen Anführungszeichen (') umgeben ist, anstatt als rohe Zeichenfolge. Dies kann dann in JsonSetJson() verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        key storeID = JsonCreateStore(&amp;quot;{'Hello' : { 'World' : 'Today' } }&amp;quot;);&lt;br /&gt;
        string res = JsonGetJson(storeID, &amp;quot;Hello&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Ergebnis &amp;quot; + res);&lt;br /&gt;
        JsonDestroyStore(storeID);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== integer status = JsonSetValue(key storeID, string path, string value) ===&lt;br /&gt;
&lt;br /&gt;
Speichert den Wert an der durch den Pfad im Speicher identifizierten Stelle. Jeder Wert, der sich derzeit an dieser Stelle befindet, wird ersetzt. JsonSetValue() geht davon aus, dass der Wert eine Zeichenfolge ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        key storeID = JsonCreateStore(&amp;quot;{'Hello' : 'World', 'Event' : ['1', '2']}&amp;quot;);&lt;br /&gt;
        integer intRes = JsonSetValue(storeID, &amp;quot;Pancake.Banana&amp;quot;, &amp;quot;Apple&amp;quot;);   &lt;br /&gt;
        llOwnerSay(&amp;quot;Set-Ergebnis &amp;quot; + (string)intRes);&lt;br /&gt;
        string stringRes = JsonGetValue(storeID, &amp;quot;Pancake.Banana&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Get-Ergebnis &amp;quot; + stringRes);&lt;br /&gt;
        JsonDestroyStore(storeID);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== integer status = JsonSetJson(key storeID, string path, string jsonvalue) ===&lt;br /&gt;
&lt;br /&gt;
Speichern Sie das JSON an der durch den Pfad im Store identifizierten Stelle. Alle derzeit an dieser Stelle vorhandenen Daten werden ersetzt. Der angegebene Wert muss eine JSON-kodierte Zeichenfolge sein. Wenn Sie einen Zeichenfolgen-Blattknoten angeben möchten, muss dieser von einfachen Anführungszeichen (') umgeben sein.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        key storeID = JsonCreateStore(&amp;quot;{'Hello' : 'World'}&amp;quot;);&lt;br /&gt;
        integer intRes = JsonSetValue(storeID, &amp;quot;Hello.World&amp;quot;, &amp;quot;'Apple'&amp;quot;);   &lt;br /&gt;
        llOwnerSay(&amp;quot;Set result &amp;quot; + (string)intRes);&lt;br /&gt;
&lt;br /&gt;
        string stringRes = JsonGetValue(storeID, &amp;quot;Hello.World&amp;quot;); // returns Apple&lt;br /&gt;
        llOwnerSay(&amp;quot;Get result &amp;quot; + stringRes);&lt;br /&gt;
&lt;br /&gt;
        intRes = JsonSetJson(storeID, &amp;quot;.&amp;quot;, &amp;quot;{'Event' : ['1', '2']}&amp;quot;);   &lt;br /&gt;
        llOwnerSay(&amp;quot;Set result &amp;quot; + (string)intRes);&lt;br /&gt;
&lt;br /&gt;
        string stringRes = JsonGetValue(storeID, &amp;quot;Event[0]&amp;quot;); // returns 1&lt;br /&gt;
        llOwnerSay(&amp;quot;Get result &amp;quot; + stringRes);&lt;br /&gt;
&lt;br /&gt;
        JsonDestroyStore(storeID);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== integer status = JsonRemoveValue(key storeID, string path) ===&lt;br /&gt;
&lt;br /&gt;
Entfernen Sie den durch den Pfad identifizierten Wert aus dem Store.&lt;br /&gt;
&lt;br /&gt;
(In OpenSimulator 0.7.5). Gibt 1 zurück, wenn der Wert entfernt wurde oder der Wert nicht existierte. Gibt 0 zurück, wenn der Store nicht existiert.&lt;br /&gt;
&lt;br /&gt;
(In der nächsten Veröffentlichung). Gibt 1 zurück, wenn der Wert entfernt wurde. Gibt 0 zurück, wenn der Pfad nicht existiert oder der Store nicht existiert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        key storeID = JsonCreateStore(&amp;quot;{'Hello' : 'World', 'Event' : ['1', '2']}&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        integer intRes = JsonRemoveValue(storeID, &amp;quot;Hello&amp;quot;);   &lt;br /&gt;
        llOwnerSay(&amp;quot;Remove result &amp;quot; + (string)intRes);&lt;br /&gt;
        &lt;br /&gt;
        intRes = JsonTestPath(storeID, &amp;quot;Hello&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;TestPath result &amp;quot; + (string)intRes);&lt;br /&gt;
&lt;br /&gt;
        JsonDestroyStore(storeID);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== integer res = JsonGetArrayLength(key storeID, string path) ===&lt;br /&gt;
&lt;br /&gt;
'''Nur aktueller Entwicklungscode (wird in OpenSimulator 0.7.6 veröffentlicht).  &lt;br /&gt;
&lt;br /&gt;
Erhalten Sie die Länge des Arrays am angegebenen Pfad. Gibt -1 zurück, wenn &lt;br /&gt;
&lt;br /&gt;
* Der Pfad nicht existiert&lt;br /&gt;
* Der Knoten am Pfad kein Array ist &lt;br /&gt;
* Der JsonStore für den storeID nicht existiert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        key storeID = JsonCreateStore(&amp;quot;{'Hello' : { 'World' : ['1', '2'] } }&amp;quot;);&lt;br /&gt;
        integer res = JsonGetArrayLength(storeID, &amp;quot;Hello.World&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Ergebnis &amp;quot; + (integer)res);  // sollte 2 sein&lt;br /&gt;
        JsonDestroyStore(storeID);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hilfsfunktionen ==&lt;br /&gt;
&lt;br /&gt;
Dies sind Funktionen, die beim Manipulieren von JSON oder der Verwendung des Stores helfen.&lt;br /&gt;
&lt;br /&gt;
* JsonList2Path&lt;br /&gt;
* JsonGetNodeType&lt;br /&gt;
* JsonGetValueType&lt;br /&gt;
&lt;br /&gt;
=== string path = JsonList2Path(list components) ===&lt;br /&gt;
&lt;br /&gt;
Konvertieren Sie die angegebene Liste von Komponenten in einen Pfad. Komponenten können Zeichenfolgen oder Ganzzahlen sein. Zeichenfolgen werden als normale Pfadnamenskomponenten verwendet. Ganzzahlen werden als Indexkomponenten zu Arrays verwendet.&lt;br /&gt;
&lt;br /&gt;
Diese Methode existiert hauptsächlich, um das Iterieren durch Arrays zu erleichtern. &lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        key storeID = JsonCreateStore(&amp;quot;{'Hello' : {'World' : [{'name' : 'pete'}, {'name' : 'tom'}, {'name' : 'wilma'}]}}&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        integer i;&lt;br /&gt;
        string path;&lt;br /&gt;
        string name;&lt;br /&gt;
&lt;br /&gt;
        for (i = 0; i &amp;lt; JsonGetArrayLength(storeID, &amp;quot;Hello.World&amp;quot;); i++)&lt;br /&gt;
        {&lt;br /&gt;
            path = JsonList2Path([&amp;quot;Hello.World&amp;quot;, i, &amp;quot;name&amp;quot;]);           &lt;br /&gt;
            name = JsonGetValue(storeID, path);&lt;br /&gt;
            llOwnerSay(path + &amp;quot; ist '&amp;quot; + name + &amp;quot;'&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        JsonDestroyStore(storeID);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== int nodetype = JsonGetNodeType(key storeid, string path) ===&lt;br /&gt;
&lt;br /&gt;
Gibt den Typ des Knotens zurück, der durch den angegebenen Pfad identifiziert wird. Die folgenden Knotentypen können zurückgegeben werden:&lt;br /&gt;
&lt;br /&gt;
* JSON_NODETYPE_UNDEF - der Knotentyp ist unbekannt oder der Knoten existiert nicht&lt;br /&gt;
* JSON_NODETYPE_OBJECT - der Knoten ist ein schlüsselzugreifendes Wörterbuch&lt;br /&gt;
* JSON_NODETYPE_ARRAY - der Knoten ist ein indexzugreifendes Array&lt;br /&gt;
* JSON_NODETYPE_VALUE - der Knoten ist ein Wert&lt;br /&gt;
&lt;br /&gt;
=== int valuetype = JsonGetValueType(key storeid, string path) ===&lt;br /&gt;
&lt;br /&gt;
Für Knoten im Speicher, die Werte angeben, wird der gespeicherte Wertetyp zurückgegeben. Beachten Sie, dass derzeit nur Zeichenfolgenwerte über die JsonGetValue- und JsonSetValue-Skriptfunktionen gesetzt oder zurückgegeben werden können. Andere Werte können jedoch in JSON-Fragmenten in Notizkarten oder mithilfe der JsonSetJson- oder JsonGetJson-Funktionen angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Wertetypen können zurückgegeben werden:&lt;br /&gt;
&lt;br /&gt;
* JSON_VALUETYPE_UNDEF - der Wert ist unbekannt oder der Knoten ist kein Wert&lt;br /&gt;
* JSON_VALUETYPE_BOOLEAN - der Wert des Knotens ist ein Boolescher Wert&lt;br /&gt;
* JSON_VALUETYPE_INTEGER - der Knoten hat einen ganzzahligen Wert&lt;br /&gt;
* JSON_VALUETYPE_FLOAT - der Knoten hat einen Fließkommawert&lt;br /&gt;
* JSON_VALUETYPE_STRING - der Knoten hat einen Zeichenfolgenwert&lt;br /&gt;
&lt;br /&gt;
== Erweiterte Funktionen ==&lt;br /&gt;
&lt;br /&gt;
Dies sind Funktionen, die es Skripten ermöglichen, Benachrichtigungen über Werte zu erhalten, wenn sie verfügbar werden. Dies ist nützlich für die Signalübertragung zwischen Skripten oder zwischen Skripten und Regionsmodulen.&lt;br /&gt;
&lt;br /&gt;
*JsonTakeValue/JsonTakeValueJson &lt;br /&gt;
*JsonReadValue/JsonReadValueJson &lt;br /&gt;
&lt;br /&gt;
=== key requestID = JsonTakeValue(key storeID, string path)&amp;lt;br&amp;gt;key requestID = JsonTakeValueJson(key storeID, string path) ===&lt;br /&gt;
&lt;br /&gt;
Fordern Sie an, dass der durch den Pfad identifizierte Wert aus dem Store entfernt und an das Skript zurückgegeben wird, wenn er verfügbar ist. Der Wert wird über ein link_message-Ereignis mit der requestID zurückgegeben. JsonTakeValue() fordert einen Zeichenfolgenwert an. JsonTakeValueJson() fordert eine JSON-kodierte Zeichenfolge an, die einer Zeichenfolge, einem Array oder einem Hash-Wert entspricht.&lt;br /&gt;
&lt;br /&gt;
Diese Funktion wird verwendet, um auf einen verfügbaren Wert zu warten und dann zurückzukehren. Da die Operation von Lesen und Entfernen atomar ist, kann sie verwendet werden, um Sperren, Aufgabenwarteschlangen und andere Synchronisationsprimitive zu implementieren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
key requestID;&lt;br /&gt;
key storeID;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        storeID = JsonCreateStore(&amp;quot;{'Hello' : 'World', 'Event' : ['1', '2']}&amp;quot;);&lt;br /&gt;
        JsonWriteNotecard(storeID, &amp;quot;&amp;quot;, &amp;quot;nc1&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer n)&lt;br /&gt;
    {&lt;br /&gt;
        requestID = JsonReadNotecard(storeID, &amp;quot;&amp;quot;, &amp;quot;nc1&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    link_message(integer sender, integer ival, string sval, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if (sender != -1) return;&lt;br /&gt;
&lt;br /&gt;
        if (id == requestID)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Notizkarte gelesen: &amp;quot; + JsonGetValue(storeID, &amp;quot;Event[0]&amp;quot;));&lt;br /&gt;
            JsonDestroyStore(storeID);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== key requestID = JsonReadValue(key storeID, string path)&amp;lt;br&amp;gt;key requestID = JsonReadValueJson(key storeID, string path) ===&lt;br /&gt;
&lt;br /&gt;
Fordern Sie an, dass der durch den Pfad identifizierte Wert an das Skript zurückgegeben wird, wenn er verfügbar ist. Der Wert wird über ein link_message-Ereignis mit der requestID zurückgegeben. JsonReadValue() fordert einen Zeichenfolgenwert an. JsonReadValueJson() fordert eine JSON-kodierte Zeichenfolge an, die einer Zeichenfolge, einem Array oder einem Hash-Wert entspricht.&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zur JsonTakeValue()-Operation entfernt die JsonReadValue-Operation den Wert nicht aus dem Store, sobald er verfügbar wird.&lt;br /&gt;
&lt;br /&gt;
= Beispiele =&lt;br /&gt;
&lt;br /&gt;
*[[OSSL Script Library/JsonStore|Generator/Consumer]]&lt;br /&gt;
&lt;br /&gt;
[[Category:German Translations]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Server_Commands/de</id>
		<title>Server Commands/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Server_Commands/de"/>
				<updated>2024-12-25T11:16:18Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: /* Benutzerbefehle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|Server_Commands}}&lt;br /&gt;
&lt;br /&gt;
= Was sind Konsolenbefehle? =&lt;br /&gt;
&lt;br /&gt;
Serverbefehle sind Befehle, die Sie in die Konsole eingeben können, um den Server verschiedene Dinge tun zu lassen.&lt;br /&gt;
&lt;br /&gt;
Die Befehle können in solche unterteilt werden, die auf den Simulator (Simulatorbefehle) und solche, die auf die Grid-Dienste (Servicebefehle) angewendet werden.&lt;br /&gt;
&lt;br /&gt;
Auf einem eigenständigen System stehen sowohl Simulator- als auch Servicebefehle auf der einzelnen Konsole des eigenständigen Systems zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
In einer Grid-Architektur stehen die Simulatorbefehle auf den Simulatoren zur Verfügung, während die Servicebefehle auf der ROBUST-Konsole verfügbar sind.&lt;br /&gt;
&lt;br /&gt;
'''Haftungsausschluss''': Einige Befehle funktionieren möglicherweise nicht wie erwartet, einige funktionieren möglicherweise gar nicht, und es besteht die Möglichkeit, dass Sie sogar alle Ihre Einstellungen/Inhalte verlieren könnten. Diese Zusammenfassung veraltet schnell - der beste Ort, um Befehle zu finden, ist das Eingeben von &amp;quot;help&amp;quot; in die Regionkonsole.&lt;br /&gt;
&lt;br /&gt;
Sofern nicht anders angegeben, sollte diese Liste ab OpenSimulator 0.7.1 aktuell sein.&lt;br /&gt;
&lt;br /&gt;
= Befehle =&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Konsolenbefehle ==&lt;br /&gt;
&lt;br /&gt;
Diese Befehle sind sowohl in Simulator- als auch in Robust Konsolen verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
&lt;br /&gt;
* command-script [skriptdatei] - Führt ein Befehlsskript aus, das Konsolenbefehle enthält.&lt;br /&gt;
* quit - Server herunterfahren.&lt;br /&gt;
* show info - Zeigt Serverinformationen an (Version und Startpfad). Vor OpenSimulator 0.7.5 ist dies nur auf der Simulator-Konsole verfügbar.&lt;br /&gt;
* show uptime - Zeigt Startzeit und Betriebszeit des Servers an. Vor OpenSimulator 0.7.5 ist dies nur auf der Simulator-Konsole verfügbar.&lt;br /&gt;
* show version - Zeigt Serverversion an. Vor OpenSimulator 0.7.5 ist dies nur auf der Simulator-Konsole verfügbar.&lt;br /&gt;
* shutdown - Synonym für quit.&lt;br /&gt;
* get log level - In OpenSimulator 0.7.5 und später: Gibt das aktuelle Konsolenprotokollierungslevel aus. In OpenSimulator 0.7.4 und früher bitte den Befehl &amp;quot;set log level&amp;quot; ohne Levelparameter verwenden.&lt;br /&gt;
* set log level [level] - Ändert nur das Konsolenprotokollierungslevel. Zum Beispiel: off oder debug. Siehe [[Logging]] für weitere Informationen. In OpenSimulator 0.7.4 und früher, wenn ohne Levelargument aufgerufen, gibt es das aktuelle Level aus. Ab OpenSimulator 0.7.5 bitte den Befehl &amp;quot;get log level&amp;quot; verwenden. Nur auf der ROBUST-Konsole ab OpenSimulator 0.7.5 verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== Debug ===&lt;br /&gt;
&lt;br /&gt;
* debug http [&amp;lt;level&amp;gt;] - Schaltet zusätzliches Logging für HTTP-Anforderungs-Debugging ein/aus. Nur auf der Robust-Konsole ab Commit 94517c8 (Entwicklungscode nach 0.7.3.1) verfügbar. Im aktuellen Entwicklungszweig (für OpenSimulator 0.7.5) ist dies debug http in|out|all [&amp;lt;level&amp;gt;], da ausgehende HTTP-Nachrichten jetzt auch protokolliert werden können (was zuvor nur für eingehende möglich war). Weitere Informationen zu diesem Befehl finden Sie unter [[Debugging]].&lt;br /&gt;
&lt;br /&gt;
* debug threadpool level &amp;lt;level&amp;gt; - Schaltet das Protokollieren der Aktivität im Haupt-Threadpool ein/aus. Weitere Informationen finden Sie unter [[General-Purpose Threadpool]].&lt;br /&gt;
&lt;br /&gt;
== Simulatorbefehle ==&lt;br /&gt;
&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
&lt;br /&gt;
* change region &amp;lt;Regionname&amp;gt; - Nachfolgende Befehle gelten nur für die angegebene Region. Wenn der Regionsname &amp;quot;root&amp;quot; ist, sind alle Regionen ausgewählt.&lt;br /&gt;
* debug packet &amp;lt;level&amp;gt; - Schaltet das Packet-Debugging ein, wobei OpenSimulator Zusammenfassungen von eingehenden und ausgehenden Paketen für Viewer entsprechend dem eingestellten Level ausgibt.&lt;br /&gt;
* emergency-monitoring - Schaltet den Notfall-Debugging-Überwachungsmodus ein oder aus.&lt;br /&gt;
* help [&amp;lt;Befehl&amp;gt;] - Zeigt die allgemeine Befehlsliste an oder detailliertere Hilfe zu einem spezifischen Befehl oder einer Befehlsgruppe.&lt;br /&gt;
* link-mapping - Setzt eine lokale Grid-Koordinate, um eine Verknüpfung zu einem entfernten Hypergrid herzustellen.&lt;br /&gt;
* link-region - Verknüpft eine HyperGrid-Region. Nicht sicher, wie sich dies von link-mapping unterscheidet.&lt;br /&gt;
* modules list - Listet Module auf.&lt;br /&gt;
* modules load &amp;lt;Name&amp;gt; - Lädt ein Modul.&lt;br /&gt;
* modules unload &amp;lt;Name&amp;gt; - Entlädt ein Modul.&lt;br /&gt;
* monitor report - Gibt verschiedene Statistiken zur aktuellen Region und/oder zum Simulator zurück.&lt;br /&gt;
* set terrain heights &amp;lt;Ecke&amp;gt; &amp;lt;Min&amp;gt; &amp;lt;Max&amp;gt; [&amp;lt;x&amp;gt;] [&amp;lt;y&amp;gt;] - Setzt die Terrainhöhen für Textur-Ecken #&amp;lt;Ecke&amp;gt; auf &amp;lt;Min&amp;gt;/&amp;lt;Max&amp;gt;, wenn &amp;lt;x&amp;gt; oder &amp;lt;y&amp;gt; angegeben sind, wird dies nur auf Regionen mit übereinstimmender Koordinate angewendet. &amp;quot;-1&amp;quot; in &amp;lt;x&amp;gt; oder &amp;lt;y&amp;gt; bedeutet Platzhalter für diese Koordinate. Ecke # SW = 0, NW = 1, SE = 2, NE = 3.&lt;br /&gt;
* set terrain texture &amp;lt;Nummer&amp;gt; &amp;lt;UUID&amp;gt; [&amp;lt;x&amp;gt;] [&amp;lt;y&amp;gt;] - Setzt die Terrain-&amp;lt;Nummer&amp;gt; auf &amp;lt;UUID&amp;gt;, wenn &amp;lt;x&amp;gt; oder &amp;lt;y&amp;gt; angegeben sind, wird dies nur auf Regionen mit übereinstimmender Koordinate angewendet. &amp;quot;-1&amp;quot; in &amp;lt;x&amp;gt; oder &amp;lt;y&amp;gt; bedeutet Platzhalter für diese Koordinate.&lt;br /&gt;
* show caps - Zeigt alle registrierten Capabilities-URLs an.&lt;br /&gt;
* : HINWEIS: In OpenSimulator 0.7.1 wird &amp;quot;show capabilities&amp;quot; als Ergebnis für den Hilfe-Befehl angezeigt, tatsächlich wird jedoch nur &amp;quot;show caps&amp;quot; akzeptiert. ([http://opensimulator.org/mantis/view.php?id=5467 #5467])&lt;br /&gt;
* set water height # - Setzt die Höhe simulatorweit oder für einzelne Regionen, wenn Sie change region verwenden.&lt;br /&gt;
* show circuits - Zeigt Agenten-Schaltkreisdaten an.&lt;br /&gt;
* show connections - Zeigt Verbindungsdaten an.&lt;br /&gt;
* show http-handlers - Zeigt alle registrierten HTTP-Handler an.&lt;br /&gt;
* show hyperlinks - Listet HG-Regionen auf.&lt;br /&gt;
* show modules - Zeigt Moduldaten an.&lt;br /&gt;
* show pending-objects - Zeigt die Anzahl der Objekte in den Warteschlangen aller Viewer an.&lt;br /&gt;
* show pqueues [full] - Zeigt Daten der Prioritätswarteschlange für jeden Client an. Ohne die Option 'full' werden nur Root-Agenten angezeigt. Mit der Option 'full' werden auch Child-Agenten angezeigt.&lt;br /&gt;
* show queues - Zeigt Warteschlangendaten für Agentenverbindungen an.&lt;br /&gt;
* show threads - Zeigt die persistenten Threads an, die im System registriert sind. Enthält keine Threadpool-Threads.&lt;br /&gt;
* show throttles [full] - Zeigt Throttle-Daten für jede Client-Verbindung und das vom Server für jede Verbindung maximal erlaubte Limit an. Ohne die Option 'full' werden nur Root-Agenten angezeigt. Mit der Option 'full' werden auch Child-Agenten angezeigt.&lt;br /&gt;
* unlink-region &amp;lt;Lokaler Name&amp;gt; - Entfernt die Verknüpfung einer HyperGrid-Region.&lt;br /&gt;
&lt;br /&gt;
=== Aussehensbefehle ===&lt;br /&gt;
&lt;br /&gt;
* appearance find &amp;lt;UUID-oder-Teil-der-UUID&amp;gt; - Ermittelt, welcher Avatar ein bestimmtes Asset als &amp;quot;baked texture&amp;quot; verwendet, falls vorhanden.&lt;br /&gt;
* appearance rebake &amp;lt;Vorname&amp;gt; &amp;lt;Nachname&amp;gt; - Sendet eine Anfrage an den Viewer des Benutzers, um seine Aussehens-Texturen neu zu backen und neu hochzuladen.&lt;br /&gt;
* appearance send [&amp;lt;Vorname&amp;gt; &amp;lt;Nachname&amp;gt;] - Sendet Aussehensdaten für jeden Avatar im Simulator an andere Viewer.&lt;br /&gt;
* appearance show [&amp;lt;Vorname&amp;gt; &amp;lt;Nachname&amp;gt;] - Zeigt Aussehensinformationen für Avatare an.&lt;br /&gt;
&lt;br /&gt;
Existiert derzeit nur im Entwicklungscode.&lt;br /&gt;
&lt;br /&gt;
=== Archivbefehle ===&lt;br /&gt;
&lt;br /&gt;
* load iar &amp;lt;vorname&amp;gt; &amp;lt;nachname&amp;gt; &amp;lt;inventar pfad&amp;gt; &amp;lt;passwort&amp;gt; [&amp;lt;archiv pfad&amp;gt;] - Benutzerinventararchiv laden. Siehe [[Inventar Archive]].&lt;br /&gt;
* load oar [dateiname] - Ein OpenSimulator-Archiv laden. Dies ersetzt vollständig die aktuelle Region. Standarddateiname ist '''region.oar'''. Siehe [[OpenSim Archive]].&lt;br /&gt;
* load xml [-newIDs [&amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt;]] - Daten einer Region aus dem XML-Format laden (0.7.*: VERALTET und könnte bald ENTFERNT werden. Verwenden Sie stattdessen &amp;quot;load xml2&amp;quot;)&lt;br /&gt;
* XML-Dateien sind das Ergebnis des Exportierens mit dem Befehl export save oder *export save-all&lt;br /&gt;
* load xml2 [dateiname] - optionale Parameter werden für das XML2-Format ab dem 1. Juli 2008 nicht unterstützt&lt;br /&gt;
* save iar &amp;lt;vorname&amp;gt; &amp;lt;nachname&amp;gt; &amp;lt;inventar pfad&amp;gt; &amp;lt;passwort&amp;gt; [&amp;lt;archiv pfad&amp;gt;] - Benutzerinventararchiv speichern. Siehe [[Inventar Archive]]&lt;br /&gt;
* save oar [dateiname] - Die aktuelle Region in ein OpenSimulator-Archiv speichern. Standarddateiname ist '''region.oar'''. Siehe [[OpenSim Archive]].&lt;br /&gt;
* save prims xml2 [&amp;lt;prim name&amp;gt; &amp;lt;dateiname&amp;gt;] - Benannten Prim in XML2 speichern&lt;br /&gt;
* save xml [dateiname] - Prims in XML speichern&lt;br /&gt;
* save xml2 [dateiname] - Prims in XML (Format 2 - Umstrukturierung einiger Knoten zur Vereinfachung des Ladens/Speicherns) speichern&lt;br /&gt;
&lt;br /&gt;
=== Assetbefehle ===&lt;br /&gt;
&lt;br /&gt;
Die fcache-Befehle erscheinen derzeit nur, wenn Sie den fcache-Asset-Cache verwenden. Dies ist der Standard in OpenSimulator.&lt;br /&gt;
&lt;br /&gt;
* fcache assets - Versuch einer tiefen Untersuchung und Zwischenspeicherung aller Assets in allen Szenen&lt;br /&gt;
* fcache clear [datei] [speicher] - Alle Assets im Cache entfernen. Wenn datei oder speicher angegeben ist, wird nur dieser Cache geleert.&lt;br /&gt;
* fcache expire &amp;lt;datum-zeit&amp;gt; - Zwischengespeicherte Assets löschen, die älter als das angegebene Datum/Uhrzeit sind&lt;br /&gt;
* fcache status - Cache-Status anzeigen&lt;br /&gt;
* j2k decode &amp;lt;ID&amp;gt; - JPEG2000-Dekodierung eines Assets durchführen.&lt;br /&gt;
&lt;br /&gt;
=== Konfigurationsbefehle ===&lt;br /&gt;
&lt;br /&gt;
* config get [&amp;lt;abschnitt&amp;gt;] [&amp;lt;schlüssel&amp;gt;] - Aktuelle Konfiguration abrufen, entweder für einen bestimmten Schlüssel, einen bestimmten Abschnitt oder die gesamte Konfiguration.&lt;br /&gt;
* config save &amp;lt;pfad&amp;gt; - Aktuelle Konfiguration in einer Datei speichern.&lt;br /&gt;
* config set &amp;lt;abschnitt&amp;gt; &amp;lt;schlüssel&amp;gt; - Einen bestimmten Konfigurationswert setzen. Im Großen und Ganzen ist dies nutzlos, da weder OpenSimulator noch Module Konfigurationswerte dynamisch neu laden.&lt;br /&gt;
* config show [&amp;lt;abschnitt&amp;gt;] [&amp;lt;schlüssel&amp;gt;] - Synonym für 'config get'&lt;br /&gt;
&lt;br /&gt;
=== Landbefehle ===&lt;br /&gt;
&lt;br /&gt;
* land show - Zeigt alle Parzellen in der aktuellen Region an.&lt;br /&gt;
* land clear - Löscht alle Parzellen auf dem Land.&lt;br /&gt;
&lt;br /&gt;
=== Kartenbefehle ===&lt;br /&gt;
&lt;br /&gt;
* export-map [&amp;lt;pfad&amp;gt;] - Ein Bild der Weltkarte speichern (Standardname ist exportmap.jpg)&lt;br /&gt;
* generate map - Generiert und speichert eine Kartenkachel neu. Nur im Entwicklungscode nach 0.7.6.&lt;br /&gt;
&lt;br /&gt;
=== Objektbefehle ===&lt;br /&gt;
&lt;br /&gt;
* backup - Aktuell ungespeicherte Objektänderungen sofort speichern, anstatt auf den normalen Persistenzaufruf zu warten. Dies sollte normalerweise nicht erforderlich sein - der Simulator speichert Regionsobjekte automatisch in regelmäßigen Abständen und beim Herunterfahren.&lt;br /&gt;
* delete object creator &amp;lt;UUID&amp;gt; - Ein Szenenobjekt nach Ersteller löschen&lt;br /&gt;
* delete object name [--regex] &amp;lt;name&amp;gt; - Ein Szenenobjekt nach Name löschen.&lt;br /&gt;
* delete object outside - Alle Szenenobjekte außerhalb der Regionsgrenzen löschen. Dies gilt derzeit, wenn z &amp;lt; 0 oder z &amp;gt; 10000. Objekte außerhalb dieser Grenzen haben bekanntermaßen Probleme mit der Verwendung einiger Physik-Engines von OpenSimulator verursacht (wie der Open Dynamics Engine).&lt;br /&gt;
* delete object owner &amp;lt;UUID&amp;gt; - Ein Szenenobjekt nach Besitzer löschen&lt;br /&gt;
* delete object uuid &amp;lt;UUID&amp;gt; - Ein Szenenobjekt nach UUID löschen. Im aktuellen Entwicklungscode (nach 0.7.5) ist dies &amp;quot;show object id&amp;quot; und erlaubt auch eine lokale ID.&lt;br /&gt;
* dump object id &amp;lt;UUID-or-localID&amp;gt; - Die Serialisierung des angegebenen Objekts zur Fehlersuche in einer Datei speichern.&lt;br /&gt;
* edit scale &amp;lt;name&amp;gt; &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt; - Die Skalierung eines benannten Prim ändern&lt;br /&gt;
* force update - Die Region zwingen, allen Clients Updates über alle Objekte zu senden.&lt;br /&gt;
* show object name [--regex] &amp;lt;name&amp;gt; - Details von Szenenobjekten mit dem angegebenen Namen anzeigen.&lt;br /&gt;
* show object uuid &amp;lt;UUID&amp;gt; - Details eines Szenenobjekts mit der angegebenen UUID anzeigen. Im aktuellen Entwicklungscode (nach 0.7.5) ist dies &amp;quot;show object id&amp;quot; und erlaubt auch eine lokale ID.&lt;br /&gt;
* show part name [--regex] &amp;lt;name&amp;gt; - Details von Teilen eines Szenenobjekts mit dem angegebenen Namen anzeigen.&lt;br /&gt;
* show part uuid &amp;lt;UUID&amp;gt; - Details von Teilen eines Szenenobjekts mit der angegebenen UUID anzeigen. Im aktuellen Entwicklungscode (nach 0.7.5) ist dies &amp;quot;show object id&amp;quot; und erlaubt auch eine lokale ID.&lt;br /&gt;
&lt;br /&gt;
=== Estatebefehle ===&lt;br /&gt;
&lt;br /&gt;
* reload estate - Estate-Daten neu laden&lt;br /&gt;
* estate link region &amp;lt;estate ID&amp;gt; &amp;lt;region ID&amp;gt; - Verknüpft die angegebene Region mit dem angegebenen Estate.&lt;br /&gt;
* estate show - Dieser Befehl zeigt den Estate-Namen, die ID und den Besitzer für die Regionen an, die derzeit im Simulator laufen. Diese Liste enthält nicht unbedingt alle Estates, die in der Datenbank vorhanden sind.&lt;br /&gt;
* Beispiel:&lt;br /&gt;
* estate show&amp;lt;Enter&amp;gt;&lt;br /&gt;
* Estate-Informationen für die Region TestRegion&lt;br /&gt;
* Estate Name ID Besitzer&lt;br /&gt;
* My Estate 103 Test User&lt;br /&gt;
* estate set name &amp;lt;estate ID&amp;gt; &amp;lt;neuer Name&amp;gt; - Ein Estate umbenennen&lt;br /&gt;
* estate set owner &amp;lt;estate ID&amp;gt; &amp;lt;Vorname&amp;gt; &amp;lt;Nachname&amp;gt; - Den Besitzer eines Estates ändern. Dieser Befehl unterstützt zwei Formen; diese verwendet den Namen des Besitzers.&lt;br /&gt;
* estate set owner &amp;lt;estate ID&amp;gt; &amp;lt;Besitzer-UUID&amp;gt; - Den Besitzer eines Estates ändern. Dieser Befehl unterstützt zwei Formen; diese verwendet die UUID des Besitzers.&lt;br /&gt;
* estate create &amp;lt;Besitzer-UUID&amp;gt; &amp;lt;Estate-Name&amp;gt; - Muss eine Benutzer-UUID sein, die Sie von 'show names' erhalten können&lt;br /&gt;
&lt;br /&gt;
=== Regionsbefehle ===&lt;br /&gt;
&lt;br /&gt;
* change region &amp;lt;Regionsname&amp;gt; - Nachfolgende Befehle gelten nur für die angegebene Region. Wenn der Regionsname &amp;quot;root&amp;quot; ist, werden alle Regionen ausgewählt.&lt;br /&gt;
* create region [name] [dateiname] - Eine neue Region erstellen&lt;br /&gt;
* delete-region &amp;lt;name&amp;gt; - Eine Region von der Festplatte löschen.&lt;br /&gt;
* region get - Post OpenSimulator 0.8.0.*. Regionsparameter anzeigen (Regionsname, Regions-UUID, Standort, URI, Besitzer-ID, Flags).&lt;br /&gt;
* region restart abort [&amp;lt;nachricht&amp;gt;] - Einen geplanten Regionsneustart abbrechen, mit optionaler Nachricht&lt;br /&gt;
* region restart bluebox &amp;lt;nachricht&amp;gt; &amp;lt;delta sekunden&amp;gt;+ - Einen Regionsneustart planen. Wenn ein Delta angegeben ist, wird die Region nach Delta-Sekunden neu gestartet. Den Benutzern in der Region wird eine Uhrzeit zum Neustart als abweisbare Bluebox-Benachrichtigung angezeigt. Wenn mehrere Deltas angegeben sind, wird eine Benachrichtigung gesendet, wenn wir jedes Delta erreichen.&lt;br /&gt;
* region restart notice &amp;lt;nachricht&amp;gt; &amp;lt;delta sekunden&amp;gt;+ - Einen Regionsneustart planen. Dasselbe wie oben, außer dass eine vorübergehende Benachrichtigung anstelle einer abweisbaren Bluebox angezeigt wird.&lt;br /&gt;
* region set - Post OpenSimulator 0.8.0.*. Bestimmte Regionsparameter setzen. Derzeit können&lt;br /&gt;
* ** agent-limit - Das aktuelle Avatar-Limit für die Region. In der Regel wird dies über den Regions-/Estate-Dialog in einem typischen Viewer eingestellt. Dies bleibt über Simulatorneustarts hinweg bestehen.&lt;br /&gt;
* ** max-agent-limit - Der maximale Wert, den agent-limit haben kann. Leider bleibt diese Einstellung hier derzeit nicht über Serverneustarts hinweg bestehen. Damit dies geschieht, muss es separat als MaxAgents-Parameter in der Regionskonfigurationsdatei gesetzt werden.&lt;br /&gt;
* remove-region - Eine Region aus dem Simulator entfernen&lt;br /&gt;
* restart - Startet alle Sims in dieser Instanz neu&lt;br /&gt;
* restart region &amp;lt;regionsname&amp;gt; - Startet nur einen Sim in einer Instanz neu. Stellen Sie die Konsole zuerst auf den Regionsnamen ein, mit 'change region &amp;lt;regionsname&amp;gt;', oder alle Regionen werden neu gestartet.&lt;br /&gt;
* set region flags &amp;lt;Regionsname&amp;gt; &amp;lt;flags&amp;gt; - Datenbank-Flags für die Region setzen&lt;br /&gt;
* können eine der folgenden sein:&lt;br /&gt;
* :'''DefaultRegion''' Wird für neue Rez verwendet. Zufällig, wenn mehrere definiert sind&lt;br /&gt;
* :'''FallbackRegion''' Regionen, auf die wir umleiten, wenn das Ziel nicht erreichbar ist&lt;br /&gt;
* :'''RegionOnline''' Wird gesetzt, wenn eine Region online geht, und zurückgesetzt, wenn sie sich abmeldet und DeleteOnUnregister falsch ist&lt;br /&gt;
* :'''NoDirectLogin''' Region nicht für direkte Anmeldungen verfügbar (nach Name)&lt;br /&gt;
* :'''Persistent''' Beim Abmelden nicht entfernen&lt;br /&gt;
* :'''LockedOut''' Registrierung nicht zulassen&lt;br /&gt;
* :'''NoMove''' Verschieben dieser Region nicht zulassen&lt;br /&gt;
* :'''Reservation''' Dies ist eine inaktive Reservierung&lt;br /&gt;
* :'''Authenticate''' Authentifizierung erforderlich&lt;br /&gt;
* :'''Hyperlink''' Eintrag repräsentiert einen HG-Link&lt;br /&gt;
* :'''DefaultHGRegion''' Eintrag repräsentiert eine Standardregion nur für Hypergrid-Teleports.&lt;br /&gt;
* :Hinweis: Flags sind additiv, es gibt keine Möglichkeit, sie von der Konsole aus zurückzusetzen.&lt;br /&gt;
* show neighbours - Zeigt die Nachbarregionen an&lt;br /&gt;
* show ratings - Bewertungsdaten anzeigen&lt;br /&gt;
* show region - Regionsparameter anzeigen (Regionsname, Regions-UUID, Standort, URI, Besitzer-ID, Flags).&lt;br /&gt;
* show regions - Regionsdaten anzeigen (Regionsnamen, XLocation YLocation-Koordinaten, Regionsports, Estatenamen)&lt;br /&gt;
&lt;br /&gt;
=== Szenenbefehle ===&lt;br /&gt;
&lt;br /&gt;
* debug scene - Szenen-Debugging aktivieren&lt;br /&gt;
* rotate scene &amp;lt;grad&amp;gt; - Dreht die Szene um die Achse 128,128 um x Grad, wobei x=0-360 ist.&lt;br /&gt;
* scale scene &amp;lt;faktor&amp;gt; - Skaliert alle Szenenobjekte um einen Faktor, wobei die Originalgröße = 1,0 ist.&lt;br /&gt;
* translate scene &amp;lt;x,y,z&amp;gt; - Verschiebt die gesamte Szene zu einer neuen Koordinate. Nützlich, um eine Szene an einen anderen Ort in einer Mega- oder variablen Region zu verschieben.&lt;br /&gt;
* (Bitte sichern Sie Ihre Region, bevor Sie einen dieser Befehle verwenden, und beachten Sie mögliche Gleitkommafehler, je häufiger sie verwendet werden.)&lt;br /&gt;
&lt;br /&gt;
=== Skriptbefehle ===&lt;br /&gt;
&lt;br /&gt;
Diese existieren derzeit nur im Git-Master-OpenSimulator-Entwicklungscode nach der Version 0.7.2.&lt;br /&gt;
&lt;br /&gt;
* scripts resume [&amp;lt;skript-element-uuid&amp;gt;] - Alle angehaltenen Skripte fortsetzen&lt;br /&gt;
* scripts show [&amp;lt;skript-element-uuid&amp;gt;] - Skriptinformationen anzeigen. Die Option &amp;lt;skript-element-uuid&amp;gt; existiert nur ab Git-Master 82f0e19 (14.01.2012) (nach OpenSimulator 0.7.2).&lt;br /&gt;
* scripts start [&amp;lt;skript-element-uuid&amp;gt;] - Alle angehaltenen Skripte starten&lt;br /&gt;
* scripts stop [&amp;lt;skript-element-uuid&amp;gt;] - Alle laufenden Skripte stoppen&lt;br /&gt;
* scripts suspend [&amp;lt;skript-element-uuid&amp;gt;] - Alle laufenden Skripte anhalten&lt;br /&gt;
&lt;br /&gt;
=== Statistikbefehle ===&lt;br /&gt;
&lt;br /&gt;
* show stats - Nützliche statistische Informationen für diesen Server anzeigen. Weitere Informationen finden Sie unter [[#Frame Statistics Values|Frame Statistics Values]] unten.&lt;br /&gt;
* stats show - Ein Synonym für &amp;quot;show stats&amp;quot; (nur OpenSimulator-Entwicklungscode nach dem 19. März 2014).&lt;br /&gt;
* stats record - Statistiken periodisch in einer separaten Protokolldatei aufzeichnen.&lt;br /&gt;
* stats save - Einen Schnappschuss der aktuellen Statistiken in einer Datei speichern (nur OpenSimulator-Entwicklungscode nach dem 19. März 2014).&lt;br /&gt;
&lt;br /&gt;
=== Terrainbefehle ===&lt;br /&gt;
&lt;br /&gt;
Einige dieser Befehle erfordern möglicherweise einen Sim-Neustart, um korrekt angezeigt zu werden.&lt;br /&gt;
&lt;br /&gt;
* terrain load - Lädt ein Terrain aus einer angegebenen Datei. (siehe Hinweis1)&lt;br /&gt;
* terrain load-tile - Lädt ein Terrain aus einem Abschnitt einer größeren Datei.&lt;br /&gt;
* terrain save - Speichert die aktuelle Höhenkarte in einer angegebenen Datei.&lt;br /&gt;
* terrain save-tile - Speichert die aktuelle Höhenkarte in der größeren Datei.&lt;br /&gt;
* terrain fill - Füllt die aktuelle Höhenkarte mit einem angegebenen Wert.&lt;br /&gt;
* terrain elevate - Hebt die aktuelle Höhenkarte um den angegebenen Betrag an.&lt;br /&gt;
* terrain lower - Senkt die aktuelle Höhenkarte um den angegebenen Betrag ab.&lt;br /&gt;
* terrain multiply - Multipliziert die Höhenkarte mit dem angegebenen Wert.&lt;br /&gt;
* terrain bake - Speichert das aktuelle Terrain in der gebackenen Karte der Region.&lt;br /&gt;
* terrain revert - Lädt das gebackene Karten-Terrain in die Höhenkarte der Region.&lt;br /&gt;
* terrain newbrushes - Aktiviert experimentelle Pinsel, die die Standard-Terrain-Pinsel ersetzen.&lt;br /&gt;
* terrain show - Zeigt die Terrain-Höhe an einer angegebenen Koordinate.&lt;br /&gt;
* terrain stats - Zeigt einige Informationen über die Höhenkarte der Region zu Debugging-Zwecken an.&lt;br /&gt;
* terrain effect - Führt einen angegebenen Plugin-Effekt aus.&lt;br /&gt;
* terrain flip - Spiegelt das aktuelle Terrain entlang der X- oder Y-Achse.&lt;br /&gt;
* terrain rescale - Skaliert das aktuelle Terrain so, dass es zwischen den angegebenen Minimal- und Maximalhöhen passt.&lt;br /&gt;
* terrain min - Setzt die minimale Terrainhöhe auf den angegebenen Wert.&lt;br /&gt;
* terrain max - Setzt die maximale Terrainhöhe auf den angegebenen Wert.&lt;br /&gt;
* terrain modify - Bietet mehrere Terraforming-Befehle im Bereichseffekt an.&lt;br /&gt;
&lt;br /&gt;
Hinweis1: Wenn Sie einen Sim mit mehreren Regionen haben und alle Regionen dieses Sims aus einem größeren Bild bestehen sollen, können Sie 'terrain load &amp;lt;datei&amp;gt; &amp;lt;breite in regionen&amp;gt; &amp;lt;höhe in regionen&amp;gt; &amp;lt;regionX&amp;gt; &amp;lt;regionY&amp;gt;' verwenden, wobei regionX und regionY die Koordinaten der unteren linken Region sind.&lt;br /&gt;
&lt;br /&gt;
=== Baum Modul Befehle ===&lt;br /&gt;
&lt;br /&gt;
* tree active - Ändert den Aktivitätsstatus für das Baum-Modul&lt;br /&gt;
* tree freeze - Friert/Entfriert die Aktivität für einen definierten Hain&lt;br /&gt;
* tree load - Lädt eine Hain-Definition aus einer XML-Datei&lt;br /&gt;
* tree plant - Beginnt das Pflanzen in einem Hain&lt;br /&gt;
* tree rate - Setzt die Baum-Aktualisierungsrate zurück (mSec)&lt;br /&gt;
* tree reload - Lädt Hain-Definitionen aus den Szenenbäumen neu&lt;br /&gt;
* tree remove - Entfernt eine Hain-Definition und alle darin befindlichen Szenenbäume&lt;br /&gt;
* tree statistics - Protokolliert Statistiken über die Bäume&lt;br /&gt;
	&lt;br /&gt;
=== Benutzerbefehle ===&lt;br /&gt;
&lt;br /&gt;
* alert &amp;lt;nachricht&amp;gt; - Sendet eine In-World-Warnung an alle&lt;br /&gt;
* alert-user &amp;lt;vorname&amp;gt; &amp;lt;nachname&amp;gt; &amp;lt;nachricht&amp;gt; - Sendet eine In-World-Warnung an einen bestimmten Benutzer&lt;br /&gt;
* bypass permissions &amp;lt;true / false&amp;gt; - Umgeht In-World-Berechtigungsprüfungen&lt;br /&gt;
* debug permissions - Aktiviert das Berechtigungs-Debugging&lt;br /&gt;
* force permissions - Erzwingt das Ein- oder Ausschalten der Berechtigungen.&lt;br /&gt;
* kick user &amp;lt;vorname&amp;gt; &amp;lt;nachname&amp;gt; [nachricht] - Wirft einen Benutzer aus dem Simulator&lt;br /&gt;
* login disable - Deaktiviert den Benutzerzugang zu diesem Simulator&lt;br /&gt;
* login enable - Aktiviert den Benutzerzugang zu diesem Simulator&lt;br /&gt;
* login status - Zeigt an, ob Anmeldungen zu diesem Simulator aktiviert oder deaktiviert sind&lt;br /&gt;
* show users [full] - Zeigt Informationen über aktuell verbundene Benutzer in dieser Region an. Ohne die Option 'full' werden nur Benutzer angezeigt, die sich tatsächlich in der Region befinden. Mit der Option 'full' werden auch Kind-Agenten von Benutzern in benachbarten Regionen angezeigt.&lt;br /&gt;
* teleport user &amp;lt;ziel&amp;gt; - Teleportiert einen Benutzer in diesem Simulator zu einem bestimmten Ziel. Derzeit nur im OpenSimulator-Entwicklungscode nach der Version 0.7.3.1 (Commit bf0b817) verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== Windlight/[[LightShare]] Befehle ===&lt;br /&gt;
&lt;br /&gt;
* windlight load - Lädt das Windlight-Profil aus der Datenbank und sendet es&lt;br /&gt;
* windlight enable - Aktiviert das Windlight-Plugin&lt;br /&gt;
* windlight disable - Deaktiviert das Windlight-Plugin&lt;br /&gt;
&lt;br /&gt;
=== [[YEngine]] Befehle ===&lt;br /&gt;
&lt;br /&gt;
* yeng help&lt;br /&gt;
* yeng reset -all | &amp;lt;teil-des-skriptnamens&amp;gt;&lt;br /&gt;
* yeng resume - Setzt die Skriptausführung fort&lt;br /&gt;
* yeng suspend - Unterbricht die Skriptausführung&lt;br /&gt;
* yeng ls -full -max=&amp;lt;nummer&amp;gt; -out=&amp;lt;dateiname&amp;gt; -queues -topcpu&lt;br /&gt;
* yeng cvv - Zeigt den Compiler-Version-Wert an&lt;br /&gt;
* yeng mvv [&amp;lt;neuerwert&amp;gt;] - Zeigt den Migrationsversion-Wert an&lt;br /&gt;
* yeng tracecalls [ja | nein]&lt;br /&gt;
* yeng verbose [ja | nein]&lt;br /&gt;
* yeng pev -all | &amp;lt;teil-des-skriptnamens&amp;gt; &amp;lt;ereignis-name&amp;gt; &amp;lt;parameter...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ROBUST Befehle ==&lt;br /&gt;
&lt;br /&gt;
Diese können auch direkt über die Simulator-Befehlskonsole im Standalone-Modus aufgerufen werden.&lt;br /&gt;
&lt;br /&gt;
=== Asset Befehle ===&lt;br /&gt;
&lt;br /&gt;
* delete asset &amp;lt;ID&amp;gt; - Löscht ein Asset aus der Datenbank. Scheint nicht implementiert zu sein.&lt;br /&gt;
* dump asset &amp;lt;ID&amp;gt; - Exportiert ein Asset auf das Dateisystem. Ab OpenSimulator 0.7.3.&lt;br /&gt;
* show digest &amp;lt;ID&amp;gt; - Zeigt Zusammenfassungsinformationen über ein Asset an. Ab OpenSimulator 0.7.3 wird dies in &amp;quot;show asset&amp;quot; umbenannt.&lt;br /&gt;
&lt;br /&gt;
=== Grid Befehle ===&lt;br /&gt;
&lt;br /&gt;
* set region flags &amp;lt;Regionname&amp;gt; &amp;lt;flags&amp;gt; - Setzt Datenbank-Flags für die Region&lt;br /&gt;
* show region &amp;lt;Regionname&amp;gt; - Zeigt die Einzelheiten einer angegebenen Region an. Dieser Befehl wird in den Entwicklungsversionen von OpenSimulator in &amp;quot;show region name&amp;quot; umbenannt.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Befehle existieren derzeit nur in den Entwicklungsversionen von OpenSimulator (nach 0.7.3.1). Diese finden sich derzeit im Abschnitt &amp;quot;Regions&amp;quot; der Hilfe.&lt;br /&gt;
&lt;br /&gt;
* deregister region id &amp;lt;Region UUID&amp;gt; - Deregistriert eine Region manuell. Dies kann hilfreich sein, wenn eine Region aufgrund eines fehlerhaften Simulator-Neustarts nicht ordnungsgemäß entfernt wurde und der Simulator seitdem nicht neu gestartet oder die Regionskonfiguration geändert wurde.&lt;br /&gt;
* show region at &amp;lt;x-koordinate&amp;gt; &amp;lt;y-koordinate&amp;gt; - Zeigt Einzelheiten zu einer Region an der angegebenen Koordinate an.&lt;br /&gt;
* show region name &amp;lt;Regionname&amp;gt; - Zeigt Einzelheiten zu einer Region an&lt;br /&gt;
* show regions - Zeigt Einzelheiten zu allen Regionen an. Im Standalone-Modus ist diese Version des Befehls derzeit nicht verfügbar – stattdessen wird die Simulator-Version von &amp;quot;show regions&amp;quot; verwendet, die ähnliche Informationen anzeigt.&lt;br /&gt;
&lt;br /&gt;
=== Benutzerbefehle ===&lt;br /&gt;
&lt;br /&gt;
* create user [vorname] [nachname] [passw] [Email] [Primäre UUID] [Modell] - Erstellt einen neuen Benutzer&lt;br /&gt;
* einfach: create user - und der Server fordert alle Daten an&lt;br /&gt;
* :&lt;br /&gt;
* UUID null oder Leerzeichen ist, wird eine UUID für Sie generiert.&lt;br /&gt;
* :&lt;br /&gt;
* ist der &amp;quot;Vorname Nachname&amp;quot; eines anderen Benutzers, das Outfit dieses Benutzers wird auf den neuen Benutzer kopiert.&lt;br /&gt;
* :&lt;br /&gt;
* reset user password - Dieser Befehl setzt ein neues Passwort für einen Benutzer und aktualisiert direkt die Datenbank. Es setzt das Passwort nicht auf einen Standard- oder temporären Wert zurück, wie der Begriff vermuten lässt.&lt;br /&gt;
* show account &amp;lt;vorname&amp;gt; &amp;lt;nachname&amp;gt; - Zeigt die Kontodetails für den angegebenen Benutzernamen an (0.7.2-dev)&lt;br /&gt;
&lt;br /&gt;
=== Login Befehle ===&lt;br /&gt;
&lt;br /&gt;
* login level &amp;lt;wert&amp;gt; - Setzt das minimale Benutzerlevel, das zur Anmeldung erlaubt ist (siehe [[Userlevel|Benutzerlevel]]).&lt;br /&gt;
* login reset - Setzt das Login-Level auf den Standardwert zurück.&lt;br /&gt;
* login text &amp;lt;text zum Drucken während des Logins&amp;gt;&lt;br /&gt;
* set user level &amp;lt;vorname&amp;gt; &amp;lt;nachname&amp;gt; &amp;lt;level&amp;gt; - Setzt das Benutzerlevel für den Benutzer, das bestimmt, ob ein Benutzer ein Gott-Konto hat oder sich überhaupt anmelden kann (0.7.2-dev) (siehe [[Userlevel|Benutzerlevel]]).&lt;br /&gt;
&lt;br /&gt;
== Einzelheiten zu Terrain-Modul-Befehlen ==&lt;br /&gt;
&lt;br /&gt;
==== terrain load ====&lt;br /&gt;
Lädt ein Terrain aus einer angegebenen Datei.&lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
* filename (String)&lt;br /&gt;
* Die Datei, aus der Sie laden möchten. Die Dateierweiterung bestimmt den zu verwendenden Loader. Unterstützte Erweiterungen sind: .r32 (RAW32) .f32 (RAW32) .ter (Terragen) .raw (LL/SL RAW) .jpg (JPEG) .jpeg (JPEG) .bmp (BMP) .png (PNG) .gif (GIF) .tif (TIFF) .tiff (TIFF)&lt;br /&gt;
&lt;br /&gt;
==== terrain load-tile ====&lt;br /&gt;
Lädt ein Terrain aus einem Abschnitt einer größeren Datei.&lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
* filename (String)&lt;br /&gt;
* Die Datei, aus der Sie laden möchten. Die Dateierweiterung bestimmt den zu verwendenden Loader. Unterstützte Erweiterungen sind: .r32 (RAW32) .f32 (RAW32) .ter (Terragen) .raw (LL/SL RAW) .jpg (JPEG) .jpeg (JPEG) .bmp (BMP) .png (PNG) .gif (GIF) .tif (TIFF) .tiff (TIFF)&lt;br /&gt;
* file width (Integer)&lt;br /&gt;
* Die Breite der Datei in Kacheln&lt;br /&gt;
* file height (Integer)&lt;br /&gt;
* Die Höhe der Datei in Kacheln&lt;br /&gt;
* minimum X tile (Integer)&lt;br /&gt;
* Die X-Region-Koordinate des ersten Abschnitts in der Datei&lt;br /&gt;
* minimum Y tile (Integer)&lt;br /&gt;
* Die Y-Region-Koordinate des ersten Abschnitts in der Datei&lt;br /&gt;
&lt;br /&gt;
==== terrain save ====&lt;br /&gt;
Speichert die aktuelle Höhenkarte in einer angegebenen Datei.&lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
* filename (String)&lt;br /&gt;
* Der Ziel-Dateiname für Ihre Höhenkarte, die Dateierweiterung bestimmt das Format, in dem gespeichert wird. Unterstützte Erweiterungen sind: .r32 (RAW32) .f32 (RAW32) .ter (Terragen) .raw (LL/SL RAW) .jpg (JPEG) .jpeg (JPEG) .bmp (BMP) .png (PNG) .gif (GIF) .tif (TIFF) .tiff (TIFF)&lt;br /&gt;
&lt;br /&gt;
==== terrain fill ====&lt;br /&gt;
Füllt die aktuelle Höhenkarte mit einem angegebenen Wert.&lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
* value (Double)&lt;br /&gt;
* Der numerische Wert der Höhe, auf den Sie Ihre Region setzen möchten.&lt;br /&gt;
&lt;br /&gt;
==== terrain elevate ====&lt;br /&gt;
Hebt die aktuelle Höhenkarte um den angegebenen Betrag an.&lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
* amount (Double)&lt;br /&gt;
&lt;br /&gt;
==== terrain lower ====&lt;br /&gt;
Senkt die aktuelle Höhenkarte um den angegebenen Betrag ab.&lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
* amount (Double)&lt;br /&gt;
* Der Betrag der Höhe, der vom Terrain in Metern entfernt werden soll.&lt;br /&gt;
&lt;br /&gt;
==== terrain multiply ====&lt;br /&gt;
Multipliziert die Höhenkarte mit dem angegebenen Wert.&lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
* value (Double)&lt;br /&gt;
* Der Wert, mit dem die Höhenkarte multipliziert werden soll.&lt;br /&gt;
&lt;br /&gt;
==== terrain bake ====&lt;br /&gt;
Speichert das aktuelle Terrain in der Rücksetzkarte der Region.&lt;br /&gt;
&lt;br /&gt;
==== terrain revert ====&lt;br /&gt;
Lädt das Rücksetz-Karten-Terrain in die Höhenkarte der Region.&lt;br /&gt;
&lt;br /&gt;
==== terrain newbrushes ====&lt;br /&gt;
Aktiviert experimentelle Pinsel, die die Standard-Terrain-Pinsel ersetzen. WARNUNG: Dies ist eine Debug-Einstellung und kann jederzeit entfernt werden.&lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
* Enabled? (Boolean)&lt;br /&gt;
* true / false - Neue Pinsel aktivieren&lt;br /&gt;
&lt;br /&gt;
==== terrain stats ====&lt;br /&gt;
Zeigt einige Informationen über die Höhenkarte der Region zu Debugging-Zwecken an.&lt;br /&gt;
&lt;br /&gt;
==== terrain effect ====&lt;br /&gt;
Führt einen angegebenen Plugin-Effekt aus.&lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
* name (String)&lt;br /&gt;
* Der Plugin-Effekt, den Sie ausführen möchten, oder 'list', um alle Plugins zu sehen.&lt;br /&gt;
&lt;br /&gt;
==== terrain modify ====&lt;br /&gt;
Ermöglicht Effekte auf bestimmte Bereiche und Abstufungen mit Standard-Höhenkarten-Manipulationen.&lt;br /&gt;
&lt;br /&gt;
Allgemeine Befehlsnutzung:&lt;br /&gt;
:''terrain modify &amp;lt;operation&amp;gt; value [&amp;lt;mask&amp;gt;] [-taper=&amp;lt;value2&amp;gt;]''&lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
:* value: Basiswert, der bei der Anwendung der Operation verwendet wird.&lt;br /&gt;
:* mask:&lt;br /&gt;
:** -rec=x1,y1,dx[,dy] erstellt eine rechteckige Maske basierend auf x1,y1&lt;br /&gt;
:** -ell=x0,y0,rx[,ry] erstellt eine elliptische Maske, die auf x0,y0 zentriert ist.&lt;br /&gt;
:* taper:&lt;br /&gt;
:** rechteckige Masken verjüngen sich wie Pyramiden&lt;br /&gt;
:** elliptische Masken verjüngen sich wie Kegel&lt;br /&gt;
&lt;br /&gt;
Terrainer Manipulation (fill, min, max)&lt;br /&gt;
:* value repräsentiert die Zielhöhe (in der Mitte des Bereichs)&lt;br /&gt;
:* value2 repräsentiert die Zielhöhe (an den Rändern des Bereichs)&lt;br /&gt;
&lt;br /&gt;
Terrainer Bewegung (raise, lower, noise)&lt;br /&gt;
:* value repräsentiert eine Delta-Menge (in der Mitte des Bereichs)&lt;br /&gt;
:* value2 repräsentiert eine Delta-Menge (an den Rändern des Bereichs)&lt;br /&gt;
&lt;br /&gt;
Terrainer Glättung (smooth)&lt;br /&gt;
Glättungsoperation ist etwas anders als die anderen, da sie sich nicht mit Höhenwerten befasst, sondern mit Stärkewerten (im Bereich von 0.01 bis 0.99). Der Algorithmus ist einfach, indem die Werte um einen Punkt herum gemittelt werden, und wird wie folgt implementiert:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;strength&amp;quot;-Parameter gibt an, wie viel vom Ergebnis vom Originalwert stammt (&amp;quot;strength&amp;quot; * map[x,y]).&lt;br /&gt;
&amp;quot;taper&amp;quot;-Parameter gibt an, wie viel vom Rest vom ersten Ring um den Punkt (1.0 - &amp;quot;strength&amp;quot;) * &amp;quot;taper&amp;quot; stammt. Es gibt 8 Elemente im ersten Ring.&lt;br /&gt;
verbleibende Beitrag stammt aus dem zweiten Ring um den Punkt. Es gibt 16 Elemente im zweiten Ring.&lt;br /&gt;
Beispiel:&lt;br /&gt;
:''terrain modify smooth 0.5 -taper=0.6''&lt;br /&gt;
:* das Originalelement wird 0.5 * map[x0,y0] beitragen&lt;br /&gt;
:* jedes Element 1m vom Punkt entfernt wird ((1-0.5)0.6)/8 * map[x1,y1] beitragen&lt;br /&gt;
: jedes Element 2m vom Punkt entfernt wird ((1-0.5)*0.4)/16 * map[x2,y2] beitragen&lt;br /&gt;
&lt;br /&gt;
Hinweise:&lt;br /&gt;
&amp;quot;taper&amp;quot;-Wert muss möglicherweise aufgrund der ganzzahligen Mathematik, die in Karten verwendet wird, übertrieben werden.&lt;br /&gt;
Beispiel, um eine 512x512 Var-Insel zu erstellen:&lt;br /&gt;
:''terrain modify min 30 -ell=256,256,240 -taper=-29''&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
: https://www.youtube.com/watch?v=pehyqr3H8I0 (dead link)&lt;br /&gt;
&lt;br /&gt;
== Einzelheiten zu Hypergrid-Befehlen ==&lt;br /&gt;
&lt;br /&gt;
Für vollständige Details und Erklärungen zu Hypergrid-Befehlen siehe die [http://opensimulator.org/wiki/Installing_and_Running_Hypergrid#Linking_regions_.28Optional.29 Linking Regions] Abschnitte der [http://opensimulator.org/wiki/Installing_and_Running_Hypergrid Installing and Running Hypergrid] Seite.&lt;br /&gt;
&lt;br /&gt;
'''show hyperlinks'''&lt;br /&gt;
&lt;br /&gt;
Dieser Befehl zeigt eine Liste aller Hypergrid-verbundenen Regionen an.&lt;br /&gt;
&lt;br /&gt;
'''link-region &amp;lt;Xloc&amp;gt; &amp;lt;Yloc&amp;gt; &amp;lt;host&amp;gt; &amp;lt;port&amp;gt; &amp;lt;location-name&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* Verwenden Sie Xloc und Yloc, die für Ihre Welt sinnvoll sind, d.h. nahe bei Ihren Regionen, aber nicht angrenzend.&lt;br /&gt;
* Ersetzen Sie osl2.nac.uci.edu und 9006 durch den Domainnamen / die IP-Adresse und den Port der Region, zu der Sie verbinden möchten.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel: link-region 8998 8998 osl2.nac.uci.edu 9006 OSGrid Gateway&lt;br /&gt;
&lt;br /&gt;
'''unlink-region &amp;lt;lokaler Regionsname&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Dieser Befehl trennt die angegebene Hypergrid-verbundene Region - stellen Sie sicher, dass Sie den genauen lokalen Namen verwenden, der vom Befehl &amp;quot;show hyperlinks&amp;quot; gemeldet wird.&lt;br /&gt;
&lt;br /&gt;
link-mapping - Verknüpft eine HyperGrid-Region. Unklar, wie sich dies von link-mapping unterscheidet.&lt;br /&gt;
&lt;br /&gt;
== Frame Statistics Values ==&lt;br /&gt;
&lt;br /&gt;
Die Bezeichnungen der von dem Konsolenbefehl &amp;quot;show stats&amp;quot; angezeigten Frame-Statistikwerte sind etwas kryptisch. Hier ist eine Liste der Bedeutungen dieser Werte:&lt;br /&gt;
&lt;br /&gt;
* Dilatn - Zeitdilatation&lt;br /&gt;
* SimFPS - Frames pro Sekunde des Simulators&lt;br /&gt;
* PhyFPS - Physik-Frames pro Sekunde&lt;br /&gt;
* AgntUp - Anzahl der Agenten Updates&lt;br /&gt;
* RootAg - Anzahl der Root Agenten&lt;br /&gt;
* ChldAg - Anzahl der Kind Agenten&lt;br /&gt;
* Prims - Anzahl der Prim Objekte&lt;br /&gt;
* AtvPrm - Anzahl der aktiven Prim-Objekte&lt;br /&gt;
* AtvScr - Anzahl der aktiven Skripte&lt;br /&gt;
* ScrLPS - Anzahl der Skriptzeilen pro Sekunde&lt;br /&gt;
* PktsIn - Anzahl der eingehenden Pakete pro Sekunde&lt;br /&gt;
* PktOut - Anzahl der ausgehenden Pakete pro Sekunde&lt;br /&gt;
* PendDl - Anzahl der ausstehenden Downloads&lt;br /&gt;
* PendUl - Anzahl der ausstehenden Uploads&lt;br /&gt;
* UnackB - Anzahl der nicht anerkannten Bytes&lt;br /&gt;
* TotlFt - Gesamte Frame-Zeit&lt;br /&gt;
* NetFt - Netz Frame Zeit&lt;br /&gt;
* PhysFt - Physik Frame Zeit&lt;br /&gt;
* OthrFt - Andere Frame Zeit&lt;br /&gt;
* AgntFt - Agenten Frame Zeit&lt;br /&gt;
* ImgsFt - Bild Frame Zeit&lt;br /&gt;
&lt;br /&gt;
[[Category:Support]]&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:German Translations]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Economy</id>
		<title>Economy</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Economy"/>
				<updated>2024-11-30T19:27:58Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|Economy}}&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
'''Note: this page is in development.  Additions welcome.'''&lt;br /&gt;
&lt;br /&gt;
Two major aspects relating to currency are buying and selling money units (i.e. by clicking the currency display in the top-right hand corner of most viewers) and buying and selling land.&lt;br /&gt;
&lt;br /&gt;
These involve calls to a pair of external PHP scripts.  The names of these scripts (currency.php and landtool.php) are actually hard-coded (!) in the viewer source.  However, third-party viewers will allow the path to be changed if we specify it in the economy parameter of the [GridInfo] section of Robust.ini (or Robust.HG.ini, config-include/StandaloneCommon.ini).&lt;br /&gt;
&lt;br /&gt;
=Buying and selling money=&lt;br /&gt;
OpenSimulator does not come with a working currency implementation, though there is a very limited sample money module that works in standalone mode only.&lt;br /&gt;
&lt;br /&gt;
You can find third party currency implementations on the [[Related Software]] page.  The OpenSimulator project cannot supply any support for these modules.&lt;br /&gt;
&lt;br /&gt;
Clicking the currency display in a viewer generates a request to currency.php following whatever path has been set up in the economy [GridInfo] section of Robust.ini.&lt;br /&gt;
&lt;br /&gt;
=Buying and selling land=&lt;br /&gt;
Buying and selling land also requires the grid to have a landtool.php page that services a preflightBuyLandPrep XMLRPC call.&lt;br /&gt;
&lt;br /&gt;
For an OpenSimulator standalone installation, the SampleMoneyModule will supply the required minimal functionality ('''TODO: properly document this.''').&lt;br /&gt;
&lt;br /&gt;
Unfortunately, this is not available in ROBUST at this time.  A grid installation will need to supply an external implementation of the preflightBuyLandPrep XMLRPC function.&lt;br /&gt;
&lt;br /&gt;
There is a very minimal version of this (with installation instructions) at https://github.com/justincc/opensimulator-helper.  This allows $0 transfers.&lt;br /&gt;
&lt;br /&gt;
For newer php version after 7.x and for newer viewer versions a different version of landtool.php may be required: https://gist.github.com/Tampa/af55bb150f423e78bfa3d144bf98bc85&lt;br /&gt;
&lt;br /&gt;
A slightly more fleshed out example can be found at https://download.osgrid.org/helper_tools_opensim_2024.zip.&lt;br /&gt;
&lt;br /&gt;
Both these files ultimately derive from an original implementation at:&lt;br /&gt;
&lt;br /&gt;
https://sourceforge.net/projects/opensimwi/&lt;br /&gt;
&lt;br /&gt;
https://sourceforge.net/projects/opensimwiredux/&lt;br /&gt;
&lt;br /&gt;
= Buying land and money =&lt;br /&gt;
Buying money and land without PHP is now possible with OpenSim Currency Server for OpenSim 0.9.3.&lt;br /&gt;
&lt;br /&gt;
original DTL/NSL Money Server by Fumi.Iseki and NSL http://www.nsl.tuis.ac.jp &lt;br /&gt;
&lt;br /&gt;
Here is a revision for DotNet6 &amp;amp; DotNet8:&lt;br /&gt;
&lt;br /&gt;
https://github.com/ManfredAabye/opensimcurrencyserver-dotnet&lt;br /&gt;
&lt;br /&gt;
This MoneyServer is designed to be used only for gaming as a points system, please do not confuse it with real currency.&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
* http://opensim-users.2152040.n2.nabble.com/Buying-and-Selling-Land-What-module-is-needed-td7578626.html - A mailing list thread on getting landtool.php working.&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Economy/de</id>
		<title>Economy/de</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Economy/de"/>
				<updated>2024-11-30T19:27:18Z</updated>
		
		<summary type="html">&lt;p&gt;Manni: /* Land und Geld kaufen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quicklinks|Economy}}&lt;br /&gt;
&lt;br /&gt;
=Einführung=&lt;br /&gt;
&lt;br /&gt;
'''Hinweis: Diese Seite ist in Entwicklung. Ergänzungen willkommen.'''&lt;br /&gt;
&lt;br /&gt;
Zwei wichtige Aspekte in Bezug auf die Währung sind Kauf und Verkauf von Geldeinheiten (dh durch Klicken auf die Währungsanzeige in der oberen rechten Ecke der meisten Viewer) und Kauf und Verkauf von Land.&lt;br /&gt;
&lt;br /&gt;
Diese beinhalten Aufrufe an ein Paar externer PHP-Skripte. Die Namen dieser Skripte (currency.php und landtool.php) sind in der Viewer-Quelle tatsächlich fest codiert (!). Drittanbieter-Viewer erlauben jedoch, dass der Pfad geändert wird, wenn wir ihn im Economy-Parameter des Abschnitts [GridInfo] von Robust.ini (oder Robust.HG.ini, config-include/StandaloneCommon.ini) angeben.&lt;br /&gt;
&lt;br /&gt;
=Geld kaufen und verkaufen=&lt;br /&gt;
OpenSimulator verfügt nicht über eine funktionierende Währungsimplementierung, obwohl es ein sehr eingeschränktes Beispielgeldmodul gibt, das nur im eigenständigen Modus funktioniert.&lt;br /&gt;
&lt;br /&gt;
Sie können Währungsimplementierungen von Drittanbietern auf der Seite [[Related Software]] finden. Das OpenSimulator-Projekt kann keine Unterstützung für diese Module bereitstellen.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie auf die Währungsanzeige in einem Viewer klicken, wird eine Anfrage an die Datei &amp;quot;currency.php&amp;quot; erstellt, die dem Pfad folgt, der im Abschnitt &amp;quot;GridInfo&amp;quot; von Robust.ini eingerichtet wurde.&lt;br /&gt;
&lt;br /&gt;
=Land kaufen und verkaufen=&lt;br /&gt;
Das Kaufen und Verkaufen von Land erfordert auch, dass das Raster eine Seite landtool.php hat, die einen preflightBuyLandPrep XMLRPC-Aufruf bedient.&lt;br /&gt;
&lt;br /&gt;
Bei einer OpenSimulator-Standalone-Installation liefert das SampleMoneyModule die erforderliche Mindestfunktionalität ( TODO: dies ordnungsgemäß dokumentieren ).&lt;br /&gt;
&lt;br /&gt;
Leider ist dies momentan in ROBUST nicht verfügbar. Eine Grid-Installation muss eine externe Implementierung der preflightBuyLandPrep XMLRPC-Funktion bereitstellen.&lt;br /&gt;
&lt;br /&gt;
Es gibt eine sehr minimale Version davon (mit Installationsanweisungen) unter https://github.com/justincc/opensimulator-helper. Dies ermöglicht $ 0 Übertragungen.&lt;br /&gt;
&lt;br /&gt;
Für neuere php Versionen 7.x und neuere Viewers wird eine andere Version der landtool.php benötigt: https://gist.github.com/Tampa/af55bb150f423e78bfa3d144bf98bc85&lt;br /&gt;
&lt;br /&gt;
Ein etwas ausgefeilteres Beispiel finden Sie unter https://download.osgrid.org/helper_tools_opensim_2024.zip.&lt;br /&gt;
&lt;br /&gt;
Beide Dateien funktionieren nicht mehr und stammen letztlich aus einer ursprünglichen Implementierung bei: &lt;br /&gt;
&lt;br /&gt;
https://sourceforge.net/projects/opensimwi/&lt;br /&gt;
&lt;br /&gt;
https://sourceforge.net/projects/opensimwiredux/&lt;br /&gt;
&lt;br /&gt;
= Land und Geld kaufen =&lt;br /&gt;
Geld und Land kaufen ohne PHP ist jetzt möglich mit OpenSim Currency Server for OpenSim 0.9.3.&lt;br /&gt;
&lt;br /&gt;
original DTL/NSL Money Server von Fumi.Iseki and NSL http://www.nsl.tuis.ac.jp.&lt;br /&gt;
&lt;br /&gt;
Hier ist eine Version für DotNet6 &amp;amp; DotNet8.&lt;br /&gt;
&lt;br /&gt;
https://github.com/ManfredAabye/opensimcurrencyserver-dotnet&lt;br /&gt;
&lt;br /&gt;
Dieser MoneyServer ist so erarbeitet, dass es nur für Spiele gedacht ist als Punktesystem, bitte verwechseln Sie es nicht mit echter Währung.&lt;br /&gt;
&lt;br /&gt;
=Verweise=&lt;br /&gt;
* http://opensim-users.2152040.n2.nabble.com/Buying-and-Selling-Land-What-module-is-needed-td7578626.html - Ein Alter Mailinglisten-Thread über landtool.php.&lt;br /&gt;
&lt;br /&gt;
[[Category:German Translations]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	</feed>