<?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=Ubit</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=Ubit"/>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Special:Contributions/Ubit"/>
		<updated>2026-05-07T16:23:14Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.19.9</generator>

	<entry>
		<id>http://opensimulator.org/wiki/Coding_standards</id>
		<title>Coding standards</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Coding_standards"/>
				<updated>2026-03-19T18:51:08Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: /* Formatting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Quicklinks|Coding_standards}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
== Guidelines ==&lt;br /&gt;
&lt;br /&gt;
Current maximum C# version to use is 12.&lt;br /&gt;
&lt;br /&gt;
Dotnet version is 8.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We follow standard C# coding guidelines unless otherwise stated: [http://msdn.microsoft.com/en-us/library/czefa0ke.aspx]. Corrections to existing files to follow these standards are welcome.&lt;br /&gt;
&lt;br /&gt;
=== Formatting ===&lt;br /&gt;
&lt;br /&gt;
* We put curly brackets on separate lines and use 4 space tabs. &lt;br /&gt;
* Tab themselves must be be 4 spaces, not actual hard tabs.&lt;br /&gt;
* Use c# object type instead of Dotnet support class name, i.e. string, object, double etc. instead of String, Object, Double .&lt;br /&gt;
&lt;br /&gt;
=== Naming ===&lt;br /&gt;
&lt;br /&gt;
* We use full words to name things.&lt;br /&gt;
* Aim for assosiative naming so that the logic is clear without explicit comments.&lt;br /&gt;
&lt;br /&gt;
=== Classes ===&lt;br /&gt;
&lt;br /&gt;
Unless the classes are very trivial, there should be one class per file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class SimpleExample&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
Method names have all their words capitalized (as opposed to Java, which culturally uses camelCase).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class SimpleExample&lt;br /&gt;
{&lt;br /&gt;
    public void ExampleMethod(int exampleAttribute)&lt;br /&gt;
    {&lt;br /&gt;
        string exampleVariable = &amp;quot;test value&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fields ===&lt;br /&gt;
&lt;br /&gt;
Fields should be always initialized when declared. Member fields start with m_ and continue in camelCase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class SimpleExample&lt;br /&gt;
{&lt;br /&gt;
    private long m_exampleMemberField = 0;&lt;br /&gt;
    private static double m_exampleStaticMemberField = 2;&lt;br /&gt;
&lt;br /&gt;
    public void ExampleMethod(int exampleAttribute)&lt;br /&gt;
    {&lt;br /&gt;
        string exampleVariable = &amp;quot;test value&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Warnings ===&lt;br /&gt;
&lt;br /&gt;
* Please keep the code warning free, using #pragma only if absolutely necessary. For instance &lt;br /&gt;
&lt;br /&gt;
 #pragma warning disable 0612&lt;br /&gt;
            ASSET_TYPE_TO_EXTENSION[(sbyte)AssetType.Script]              = &amp;quot;_script.txt&amp;quot;;   // Not sure if we'll ever see this&lt;br /&gt;
 #pragma warning restore 0612&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
&lt;br /&gt;
Each class, when needed, should have their own logger which is declared private and is not inherited:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class SimpleExample&lt;br /&gt;
{&lt;br /&gt;
    private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use of var and new()===&lt;br /&gt;
&lt;br /&gt;
Only use var in a variable declaration when the type of the variable is clear on the right side&lt;br /&gt;
Only use new(..) in a variable declaration when the type of the variable is clear on the left side&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    var a = new List&amp;lt;string&amp;gt;();&lt;br /&gt;
//or&lt;br /&gt;
    List&amp;lt;string&amp;gt; b = new(); // preferred&lt;br /&gt;
&lt;br /&gt;
    var c = mything(); // not ok. we cant see the type without looking for mything details.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if fact just DO NOT use var&lt;br /&gt;
&lt;br /&gt;
[[Category:Standards]]&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Coding_standards</id>
		<title>Coding standards</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Coding_standards"/>
				<updated>2026-03-19T18:47:13Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: /* use of var and new() */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Quicklinks|Coding_standards}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
== Guidelines ==&lt;br /&gt;
&lt;br /&gt;
Current maximum C# version to use is 12.&lt;br /&gt;
&lt;br /&gt;
Dotnet version is 8.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We follow standard C# coding guidelines unless otherwise stated: [http://msdn.microsoft.com/en-us/library/czefa0ke.aspx]. Corrections to existing files to follow these standards are welcome.&lt;br /&gt;
&lt;br /&gt;
=== Formatting ===&lt;br /&gt;
&lt;br /&gt;
* We put curly brackets on separate lines and use 4 space tabs. &lt;br /&gt;
* Tab themselves should be spaces, not actual hard tabs.&lt;br /&gt;
* Use string instead of String when refering to the System.String type.&lt;br /&gt;
&lt;br /&gt;
=== Naming ===&lt;br /&gt;
&lt;br /&gt;
* We use full words to name things.&lt;br /&gt;
* Aim for assosiative naming so that the logic is clear without explicit comments.&lt;br /&gt;
&lt;br /&gt;
=== Classes ===&lt;br /&gt;
&lt;br /&gt;
Unless the classes are very trivial, there should be one class per file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class SimpleExample&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
Method names have all their words capitalized (as opposed to Java, which culturally uses camelCase).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class SimpleExample&lt;br /&gt;
{&lt;br /&gt;
    public void ExampleMethod(int exampleAttribute)&lt;br /&gt;
    {&lt;br /&gt;
        string exampleVariable = &amp;quot;test value&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fields ===&lt;br /&gt;
&lt;br /&gt;
Fields should be always initialized when declared. Member fields start with m_ and continue in camelCase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class SimpleExample&lt;br /&gt;
{&lt;br /&gt;
    private long m_exampleMemberField = 0;&lt;br /&gt;
    private static double m_exampleStaticMemberField = 2;&lt;br /&gt;
&lt;br /&gt;
    public void ExampleMethod(int exampleAttribute)&lt;br /&gt;
    {&lt;br /&gt;
        string exampleVariable = &amp;quot;test value&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Warnings ===&lt;br /&gt;
&lt;br /&gt;
* Please keep the code warning free, using #pragma only if absolutely necessary. For instance &lt;br /&gt;
&lt;br /&gt;
 #pragma warning disable 0612&lt;br /&gt;
            ASSET_TYPE_TO_EXTENSION[(sbyte)AssetType.Script]              = &amp;quot;_script.txt&amp;quot;;   // Not sure if we'll ever see this&lt;br /&gt;
 #pragma warning restore 0612&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
&lt;br /&gt;
Each class, when needed, should have their own logger which is declared private and is not inherited:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class SimpleExample&lt;br /&gt;
{&lt;br /&gt;
    private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use of var and new()===&lt;br /&gt;
&lt;br /&gt;
Only use var in a variable declaration when the type of the variable is clear on the right side&lt;br /&gt;
Only use new(..) in a variable declaration when the type of the variable is clear on the left side&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    var a = new List&amp;lt;string&amp;gt;();&lt;br /&gt;
//or&lt;br /&gt;
    List&amp;lt;string&amp;gt; b = new(); // preferred&lt;br /&gt;
&lt;br /&gt;
    var c = mything(); // not ok. we cant see the type without looking for mything details.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if fact just DO NOT use var&lt;br /&gt;
&lt;br /&gt;
[[Category:Standards]]&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/MediaWiki:Sidebar</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/MediaWiki:Sidebar"/>
				<updated>2026-02-21T20:53:15Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* General&lt;br /&gt;
** mainpage|mainpage&lt;br /&gt;
** News|News&lt;br /&gt;
* For Administrators&lt;br /&gt;
** User_Documentation|Admin Home&lt;br /&gt;
** Download|Download&lt;br /&gt;
** Dependencies|Running&lt;br /&gt;
** Configuration|Configuration&lt;br /&gt;
** Build Instructions|Building&lt;br /&gt;
** FAQ|FAQ&lt;br /&gt;
** Related Software|Related Software&lt;br /&gt;
** Support|Support&lt;br /&gt;
** http://opensimulator.org/mantis|Report a Bug&lt;br /&gt;
* For Developers&lt;br /&gt;
** Development|Dev Home&lt;br /&gt;
** Contributions Policy|Contributions Policy&lt;br /&gt;
** http://opensimulator.org/mantis|Bug Tracking&lt;br /&gt;
* For Creators&lt;br /&gt;
** Artist Home|Content Creation&lt;br /&gt;
** Scripting Documentation|Scripting&lt;br /&gt;
* For Grid Users&lt;br /&gt;
** Connecting|Connecting&lt;br /&gt;
** Grid List|Grid List&lt;br /&gt;
** Screenshots|Screenshots&lt;br /&gt;
* Related Links&lt;br /&gt;
** Related Software|Related Software&lt;br /&gt;
** https://www.openhub.net/p/opensimulator|Black Duck&lt;br /&gt;
* About This Wiki&lt;br /&gt;
** recentchanges-url|recentchanges&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetDynamicTextureData</id>
		<title>OsSetDynamicTextureData</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetDynamicTextureData"/>
				<updated>2026-01-21T01:37:21Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|threat_level=VeryLow&lt;br /&gt;
|permissions=${OSSL&amp;amp;#124;osslParcelOG}ESTATE_MANAGER,ESTATE_OWNER&lt;br /&gt;
|delay=0&lt;br /&gt;
|function_syntax=key osSetDynamicTextureData(string dynamicID, string contentType, string data, string extraParams, integer timer)&lt;br /&gt;
|ossl_example=&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Example of OsSetDynamicTextureData used to render custom drawings on a prim&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        string CommandList = &amp;quot;&amp;quot;; // Storage for our drawing commands&lt;br /&gt;
&lt;br /&gt;
        CommandList = osSetPenSize( CommandList, 3 );                 // Set the pen width to 3 pixels&lt;br /&gt;
        CommandList = osSetPenColor( CommandList, &amp;quot;Red&amp;quot; );           // Set the pen color to red&lt;br /&gt;
        CommandList = osMovePen( CommandList, 28, 78 );               // Upper left corner at &amp;lt;28,78&amp;gt;&lt;br /&gt;
        CommandList = osDrawFilledRectangle( CommandList, 200, 100 ); // 200 pixels by 100 pixels&lt;br /&gt;
&lt;br /&gt;
        // Now draw the rectangle&lt;br /&gt;
        osSetDynamicTextureData( &amp;quot;&amp;quot;, &amp;quot;vector&amp;quot;, CommandList, &amp;quot;width:256,height:256&amp;quot;, 0 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|description=*Renders a dynamically created texture on the prim containing the script and returns the UUID of the newly created texture.&lt;br /&gt;
*If you use this feature, you have to turn on any cache. If not, you'll see complete white texture.&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
The script [[OsSetDynamicdata example1|osTextBoard.lsl]] from the standard OpenSimulator Library also uses this function.&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; style=&amp;quot;border: thin solid black;&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot;  align=&amp;quot;center&amp;quot; style=background:orange | '''Parameters'''&lt;br /&gt;
|-&lt;br /&gt;
|'''Name'''&lt;br /&gt;
|'''Description'''&lt;br /&gt;
|'''Remarks'''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align: top;&amp;quot; | '''dynamicID'''&lt;br /&gt;
|style=&amp;quot;vertical-align: top;&amp;quot; | UUID of already existing dynamic texture. Intended to accept UUID from a previous call to OsSetDynamicTextureXXXX functions in order to provide modification of an existing dynamic texture&lt;br /&gt;
|style=&amp;quot;vertical-align: top;&amp;quot; |  NOT IMPLEMENTED YET&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align: top;&amp;quot; | '''contentType''' &lt;br /&gt;
|style=&amp;quot;vertical-align: top;&amp;quot; | specifies the type of the '''data''' parameter. &lt;br /&gt;
The following values are allowed:&lt;br /&gt;
* vector - the '''data''' parameter contains a list of drawing instructions. See [[Drawing commands]] for details&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align: top;&amp;quot; |'''data'''&lt;br /&gt;
|style=&amp;quot;vertical-align: top;&amp;quot; | Contains a series of drawing instructions. See [[Drawing commands]] for details&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
|style=&amp;quot;vertical-align: top;&amp;quot; | '''extraParams'''&lt;br /&gt;
|style=&amp;quot;vertical-align: top;&amp;quot; | additional optional parameters in the following format: [param]:[value],[param]:[value]&lt;br /&gt;
Multiple parameters are separated by commas. The following ones are supported:&lt;br /&gt;
* width - width of the dynamic texture in pixels (example:  width:256)&lt;br /&gt;
* height - height of the dynamic texture in pixels (example:  height:256)&lt;br /&gt;
* alpha - alpha (transparency) component of the dynamic texture. Values are from 0-clear to 255-solid&lt;br /&gt;
* bgcolor - specifies the background color of the texture (example:   bgcolor:Red)&lt;br /&gt;
* altdatadelim - specifies a delimiter between the draw commands contained in the '''data''' parameter.&lt;br /&gt;
* setalpha - integer value is treated like specifying alpha component&lt;br /&gt;
* lossless - true or false, default false.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align: top;&amp;quot; |'''timer'''&lt;br /&gt;
|style=&amp;quot;vertical-align: top;&amp;quot; | specify a time interval to update the texture&lt;br /&gt;
|style=&amp;quot;vertical-align: top;&amp;quot; | NOT IMPLEMENTED YET&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
&lt;br /&gt;
The '''dynamicID''' parameter is not yet implemented. The value passed will be ignored.&amp;lt;br&amp;gt;&lt;br /&gt;
The '''timer''' parameter is not yet implemented. The value passed will be ignored. Instead, you can use a timer event and recall the function to get the same effect.&amp;lt;br&amp;gt;&lt;br /&gt;
'''lossless''' parameter added on version 0.9.1.1, Nov 4th 2019. Old versions did as true, but that should only be used if needed&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[osSetDynamicTextureURL]]&lt;br /&gt;
* [[osSetDynamicTextureURLBlend]]&lt;br /&gt;
* [[osSetDynamicTextureURLBlendFace]]&lt;br /&gt;
* [[osSetDynamicTextureDataBlend]]&lt;br /&gt;
* [[osSetDynamicTextureDataBlendFace]]&lt;br /&gt;
&lt;br /&gt;
[[Category:OSSL pages in need of parameters template]]&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Main_Page</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Main_Page"/>
				<updated>2025-12-06T16:38:10Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: /* What is OpenSimulator? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{MainPageQuicklinks}}&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Please use the Information Template to announce new things, the other languages are added as well&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--{{Information}}--&amp;gt;&lt;br /&gt;
=== What is OpenSimulator? ===&lt;br /&gt;
{{FrontPageSidebar}}&lt;br /&gt;
&lt;br /&gt;
OpenSimulator is an open source multi-platform, multi-user 3D application server. It can be used to create a virtual environment (or world) which can be accessed through a variety of clients, on multiple protocols. It also has an optional facility (the [[Hypergrid]]) to allow users to visit other OpenSimulator installations across the web from their 'home' OpenSimulator installation.  In this way, it is the basis of a nascent distributed Metaverse.&lt;br /&gt;
&lt;br /&gt;
OpenSimulator allows virtual world developers to customize their worlds using the technologies they feel work best - we've designed the framework to be easily extensible. OpenSimulator is written in [http://www.ecma-international.org/publications/standards/Ecma-334.htm C#], running on Windows, Unix-like machines and on several plaforms on  [https://dotnet.microsoft.com/ .NET]. If you want to know about our development history, see [[History]].&lt;br /&gt;
&lt;br /&gt;
Out of the box, OpenSimulator can be used to simulate virtual environments similar to [http://www.secondlifegrid.net Second Life™], given that it supports the core of [http://wiki.secondlife.com/wiki/Protocol SL's messaging protocol]. However, OpenSimulator is not just a clone of the Second Life server platform. Rather, the project aims to enable innovative feature development for virtual environments and the Metaverse at large. So only a subset of viewers for Second Life  do implement Opensimulator features, see [[Compatible Viewers]].&lt;br /&gt;
&lt;br /&gt;
OpenSimulator is getting more stable over time but is still a high complex software system that can suffer various bugs and quirks; handle with care!&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
&lt;br /&gt;
* Supports online, multi-user 3D environments as small as 1 simulator or as large as thousands of simulators.&lt;br /&gt;
* Supports 3D virtual spaces of variable size.&lt;br /&gt;
* Supports multiple clients and protocols - access the same world at the same time via multiple protocols.&lt;br /&gt;
* Supports realtime Physics Simulation, with multiple engine options.&lt;br /&gt;
* Supports clients that create 3D content in real time. &lt;br /&gt;
* Supports inworld scripting using LSL/OSSL.&lt;br /&gt;
* Provides unlimited ability to customize virtual world applications through the use of [[IRegionModule|scene plugin modules]].&lt;br /&gt;
&lt;br /&gt;
For a more extensive list, see the [[Feature Matrix]].&lt;br /&gt;
&lt;br /&gt;
=== Running an OpenSimulator-Based World ===&lt;br /&gt;
&lt;br /&gt;
*[[Download|Downloading OpenSimulator]] &lt;br /&gt;
*[[Dependencies|Required Dependencies]]&lt;br /&gt;
*[[Build Instructions|Building OpenSimulator]] &lt;br /&gt;
*[[Configuration|Configuring and Running OpenSimulator]] &lt;br /&gt;
*[[Server Commands]] &lt;br /&gt;
*[[FAQ|Frequently Asked Questions]]&lt;br /&gt;
&lt;br /&gt;
=== Participating in the OpenSimulator Community ===&lt;br /&gt;
OpenSimulator is an [http://en.wikipedia.org/wiki/Open_source open source] project, and is powered by the community members that devote time and energy to the effort.  There are many ways to participate and contribute to the community:&lt;br /&gt;
* Participate via [[IRC]].  There are channels for users and developers.&lt;br /&gt;
* Participate via the [[Mailing Lists]].  There are mailing lists for OpenSimulator use and development, as well as broader topics such as education and the Hypergrid.&lt;br /&gt;
* [[WikiStructure|Contribute to this wiki]], making the OpenSimulator documentation even better.  Don't be afraid of making mistakes - they can be easily corrected.&lt;br /&gt;
* Report [[bugs]] or submit [[Submitting code to OpenSim|patches]] via our [http://opensimulator.org/mantis/ mantis bug tracker].  If you're submitting code, please read through the [[Contributions Policy]] before starting.&lt;br /&gt;
* Create an OpenSimulator related project hosted on the [http://forge.opensimulator.org Forge] or [[Related Software|elsewhere]] on the web.  In the forge there are over a dozen registered projects, and it's a great way to further extend the OpenSimulator community.&lt;br /&gt;
* Participate to open content creation for OpenSimulator. More details at [[Artist Home]].&lt;br /&gt;
* Participate in the weekly [[Office Hours]] for OpenSimulator development. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Layout_box2|1=&lt;br /&gt;
=== Pages by Category: ===&lt;br /&gt;
'''[[:Category:Getting_Started | Getting Started]] , [[:Category:Support | Support]] , [[:Category:Tech Reference|Technical Reference Pages]] , [[:Category:Help|Help]] , [[:Category:Configuration|Configuration Pages]] , [[:Category:Users|User's Pages]] , [[:Category:Development | Development Pages]] , [[:Category:Scripts|Scripts]] , [[Special:Recentchanges| Recent Wiki Changes]]'''&amp;lt;br /&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;cleanpage title=hide cats=hide /&amp;gt;&lt;br /&gt;
[[Category:Getting Started]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Support]]&lt;br /&gt;
[[Category:Help]]&lt;br /&gt;
[[Category:Configuration]]&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/0.9.3.1</id>
		<title>0.9.3.1</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/0.9.3.1"/>
				<updated>2025-12-06T14:28:33Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: /* Changes and Fixes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ReleaseInfo}}&lt;br /&gt;
{{Quicklinks|0.9.3.1}}&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
''' VERSION UNDER DEVELOPMENT'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
This version requires dotnet 8. If you can only use Mono or .Net4x, please use version [[0.9.2.2]] ( http://opensimulator.org/dist )&amp;lt;br&amp;gt;&lt;br /&gt;
Also see [http://opensimulator.org/wiki/0.9.3.0_Release 0.9.3.0 Release Notes]&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.9.3.1 requires:&lt;br /&gt;
&lt;br /&gt;
* [https://dotnet.microsoft.com/en-us/download/dotnet/8.0 dotnet8] runtime for your platform (also the SDK if you wish to compile) &lt;br /&gt;
* On Windows you may need to install the [https://docs.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170 run time files for vc++]&lt;br /&gt;
* On windows you may need to authorize the install of older .NetFramework 3.5&lt;br /&gt;
* on linux you will need libgdiplus&lt;br /&gt;
**if you have mono 6.x complete, you already have libgdiplus, otherwise you need to install it for example on 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;
* To keep support for current and older viewers, new viewers must request for terrain PBR materials or textures by sending a request for a fake capability named &amp;quot;VETPBR&amp;quot; ( ViewerExtendedTerrainPBR)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Due to database migration renumbering which occurred at release 0.9.0.0, if you are upgrading from a version of OpenSimulator prior to 0.8.2.1, then you MUST first upgrade to *0.8.2.1* and then proceed to upgrade directly to 0.9.3.0. See [[0.9.0.0_Release#Pivot_Release:_0.8.2.1]] for more advice.&lt;br /&gt;
&lt;br /&gt;
= Breaking Changes =&lt;br /&gt;
&lt;br /&gt;
* Scripts compiled with older versions will be recompiled and reset their state, either on first region start after update or teleport.&lt;br /&gt;
&lt;br /&gt;
= Changes and Fixes =&lt;br /&gt;
&lt;br /&gt;
* new OSSL functions [[osSetTerrainTextures]]. With this function one can change the set of terrain textures for old viewers and map generators or the set textures or materials for new viewers, without the need to use a different viewer for each case, set of functions [[osListAs*]]&lt;br /&gt;
&lt;br /&gt;
* new LSL functions like llGetStartString, llRezObjectWithParams, llGetLinkSitFlags, llSetLinkSitFlags, osListFindListNext, llGetInventoryDesc, llGetSimStats, llGetHealth, llHMAC, llListFindListNext, llGetVisualParams, llMapBeacon, llGetRenderMaterial, llIsLinkGLTFMaterial, llWorldPosToHUD&lt;br /&gt;
&lt;br /&gt;
= Acknowledgements =&lt;br /&gt;
&lt;br /&gt;
Many thanks to all the developers (and their cats), testers and community members who contributed to this release and who help out with OpenSimulator generally. Your hard work makes this all possible.&lt;br /&gt;
&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/0.9.3.1</id>
		<title>0.9.3.1</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/0.9.3.1"/>
				<updated>2025-12-06T14:26:20Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: /* Changes and Fixes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ReleaseInfo}}&lt;br /&gt;
{{Quicklinks|0.9.3.1}}&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
''' VERSION UNDER DEVELOPMENT'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
This version requires dotnet 8. If you can only use Mono or .Net4x, please use version [[0.9.2.2]] ( http://opensimulator.org/dist )&amp;lt;br&amp;gt;&lt;br /&gt;
Also see [http://opensimulator.org/wiki/0.9.3.0_Release 0.9.3.0 Release Notes]&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.9.3.1 requires:&lt;br /&gt;
&lt;br /&gt;
* [https://dotnet.microsoft.com/en-us/download/dotnet/8.0 dotnet8] runtime for your platform (also the SDK if you wish to compile) &lt;br /&gt;
* On Windows you may need to install the [https://docs.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170 run time files for vc++]&lt;br /&gt;
* On windows you may need to authorize the install of older .NetFramework 3.5&lt;br /&gt;
* on linux you will need libgdiplus&lt;br /&gt;
**if you have mono 6.x complete, you already have libgdiplus, otherwise you need to install it for example on 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;
* To keep support for current and older viewers, new viewers must request for terrain PBR materials or textures by sending a request for a fake capability named &amp;quot;VETPBR&amp;quot; ( ViewerExtendedTerrainPBR)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Due to database migration renumbering which occurred at release 0.9.0.0, if you are upgrading from a version of OpenSimulator prior to 0.8.2.1, then you MUST first upgrade to *0.8.2.1* and then proceed to upgrade directly to 0.9.3.0. See [[0.9.0.0_Release#Pivot_Release:_0.8.2.1]] for more advice.&lt;br /&gt;
&lt;br /&gt;
= Breaking Changes =&lt;br /&gt;
&lt;br /&gt;
* Scripts compiled with older versions will be recompiled and reset their state, either on first region start after update or teleport.&lt;br /&gt;
&lt;br /&gt;
= Changes and Fixes =&lt;br /&gt;
&lt;br /&gt;
* new OSSL functions [[osSetTerrainTextures]]. With this function one can change the set of terrain textures for old viewers and map generators or the set textures or materials for new viewers, without the need to use a different viewer for each case, [[osListAs]]&lt;br /&gt;
&lt;br /&gt;
* new LSL functions like llGetStartString, llRezObjectWithParams, llGetLinkSitFlags, llSetLinkSitFlags, osListFindListNext, llGetInventoryDesc, llGetSimStats, llGetHealth, llHMAC, llListFindListNext, llGetVisualParams, llMapBeacon, llGetRenderMaterial, llIsLinkGLTFMaterial, llWorldPosToHUD&lt;br /&gt;
&lt;br /&gt;
= Acknowledgements =&lt;br /&gt;
&lt;br /&gt;
Many thanks to all the developers (and their cats), testers and community members who contributed to this release and who help out with OpenSimulator generally. Your hard work makes this all possible.&lt;br /&gt;
&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/0.9.3.1</id>
		<title>0.9.3.1</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/0.9.3.1"/>
				<updated>2025-12-06T14:25:13Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: /* Changes and Fixes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ReleaseInfo}}&lt;br /&gt;
{{Quicklinks|0.9.3.1}}&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
''' VERSION UNDER DEVELOPMENT'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
This version requires dotnet 8. If you can only use Mono or .Net4x, please use version [[0.9.2.2]] ( http://opensimulator.org/dist )&amp;lt;br&amp;gt;&lt;br /&gt;
Also see [http://opensimulator.org/wiki/0.9.3.0_Release 0.9.3.0 Release Notes]&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.9.3.1 requires:&lt;br /&gt;
&lt;br /&gt;
* [https://dotnet.microsoft.com/en-us/download/dotnet/8.0 dotnet8] runtime for your platform (also the SDK if you wish to compile) &lt;br /&gt;
* On Windows you may need to install the [https://docs.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170 run time files for vc++]&lt;br /&gt;
* On windows you may need to authorize the install of older .NetFramework 3.5&lt;br /&gt;
* on linux you will need libgdiplus&lt;br /&gt;
**if you have mono 6.x complete, you already have libgdiplus, otherwise you need to install it for example on 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;
* To keep support for current and older viewers, new viewers must request for terrain PBR materials or textures by sending a request for a fake capability named &amp;quot;VETPBR&amp;quot; ( ViewerExtendedTerrainPBR)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Due to database migration renumbering which occurred at release 0.9.0.0, if you are upgrading from a version of OpenSimulator prior to 0.8.2.1, then you MUST first upgrade to *0.8.2.1* and then proceed to upgrade directly to 0.9.3.0. See [[0.9.0.0_Release#Pivot_Release:_0.8.2.1]] for more advice.&lt;br /&gt;
&lt;br /&gt;
= Breaking Changes =&lt;br /&gt;
&lt;br /&gt;
* Scripts compiled with older versions will be recompiled and reset their state, either on first region start after update or teleport.&lt;br /&gt;
&lt;br /&gt;
= Changes and Fixes =&lt;br /&gt;
&lt;br /&gt;
* new OSSL functions [[osSetTerrainTextures]]. With this function one can change the set of terrain textures for old viewers and map generators or the set textures or materials for new viewers, without the need to use a different viewer for each case, osListAs&lt;br /&gt;
&lt;br /&gt;
* new LSL functions like llGetStartString, llRezObjectWithParams, llGetLinkSitFlags, llSetLinkSitFlags, osListFindListNext, llGetInventoryDesc, llGetSimStats, llGetHealth, llHMAC, llListFindListNext, llGetVisualParams, llMapBeacon, llGetRenderMaterial, llIsLinkGLTFMaterial, llWorldPosToHUD&lt;br /&gt;
&lt;br /&gt;
= Acknowledgements =&lt;br /&gt;
&lt;br /&gt;
Many thanks to all the developers (and their cats), testers and community members who contributed to this release and who help out with OpenSimulator generally. Your hard work makes this all possible.&lt;br /&gt;
&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/0.9.3.1</id>
		<title>0.9.3.1</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/0.9.3.1"/>
				<updated>2025-12-06T14:18:19Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: /* Changes and Fixes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ReleaseInfo}}&lt;br /&gt;
{{Quicklinks|0.9.3.1}}&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
''' VERSION UNDER DEVELOPMENT'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
This version requires dotnet 8. If you can only use Mono or .Net4x, please use version [[0.9.2.2]] ( http://opensimulator.org/dist )&amp;lt;br&amp;gt;&lt;br /&gt;
Also see [http://opensimulator.org/wiki/0.9.3.0_Release 0.9.3.0 Release Notes]&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.9.3.1 requires:&lt;br /&gt;
&lt;br /&gt;
* [https://dotnet.microsoft.com/en-us/download/dotnet/8.0 dotnet8] runtime for your platform (also the SDK if you wish to compile) &lt;br /&gt;
* On Windows you may need to install the [https://docs.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170 run time files for vc++]&lt;br /&gt;
* On windows you may need to authorize the install of older .NetFramework 3.5&lt;br /&gt;
* on linux you will need libgdiplus&lt;br /&gt;
**if you have mono 6.x complete, you already have libgdiplus, otherwise you need to install it for example on 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;
* To keep support for current and older viewers, new viewers must request for terrain PBR materials or textures by sending a request for a fake capability named &amp;quot;VETPBR&amp;quot; ( ViewerExtendedTerrainPBR)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Due to database migration renumbering which occurred at release 0.9.0.0, if you are upgrading from a version of OpenSimulator prior to 0.8.2.1, then you MUST first upgrade to *0.8.2.1* and then proceed to upgrade directly to 0.9.3.0. See [[0.9.0.0_Release#Pivot_Release:_0.8.2.1]] for more advice.&lt;br /&gt;
&lt;br /&gt;
= Breaking Changes =&lt;br /&gt;
&lt;br /&gt;
* Scripts compiled with older versions will be recompiled and reset their state, either on first region start after update or teleport.&lt;br /&gt;
&lt;br /&gt;
= Changes and Fixes =&lt;br /&gt;
&lt;br /&gt;
* new OSSL functions [[osSetTerrainTextures]]. With this function one can change the set of terrain textures for old viewers and map generators or the set textures or materials for new viewers, without the need to use a different viewer for each case, [[osListAs]]&lt;br /&gt;
&lt;br /&gt;
* new LSL functions like llGetStartString, llRezObjectWithParams, llGetLinkSitFlags, llSetLinkSitFlags, osListFindListNext, llGetInventoryDesc, llGetSimStats, llGetHealth, llHMAC, llListFindListNext, llGetVisualParams,&lt;br /&gt;
&lt;br /&gt;
= Acknowledgements =&lt;br /&gt;
&lt;br /&gt;
Many thanks to all the developers (and their cats), testers and community members who contributed to this release and who help out with OpenSimulator generally. Your hard work makes this all possible.&lt;br /&gt;
&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Coding_standards</id>
		<title>Coding standards</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Coding_standards"/>
				<updated>2025-10-05T23:54:27Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: /* Logging */&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;
== Guidelines ==&lt;br /&gt;
&lt;br /&gt;
Current maximum C# version to use is 12.&lt;br /&gt;
&lt;br /&gt;
Dotnet version is 8.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We follow standard C# coding guidelines unless otherwise stated: [http://msdn.microsoft.com/en-us/library/czefa0ke.aspx]. Corrections to existing files to follow these standards are welcome.&lt;br /&gt;
&lt;br /&gt;
=== Formatting ===&lt;br /&gt;
&lt;br /&gt;
* We put curly brackets on separate lines and use 4 space tabs. &lt;br /&gt;
* Tab themselves should be spaces, not actual hard tabs.&lt;br /&gt;
* Use string instead of String when refering to the System.String type.&lt;br /&gt;
&lt;br /&gt;
=== Naming ===&lt;br /&gt;
&lt;br /&gt;
* We use full words to name things.&lt;br /&gt;
* Aim for assosiative naming so that the logic is clear without explicit comments.&lt;br /&gt;
&lt;br /&gt;
=== Classes ===&lt;br /&gt;
&lt;br /&gt;
Unless the classes are very trivial, there should be one class per file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class SimpleExample&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
Method names have all their words capitalized (as opposed to Java, which culturally uses camelCase).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class SimpleExample&lt;br /&gt;
{&lt;br /&gt;
    public void ExampleMethod(int exampleAttribute)&lt;br /&gt;
    {&lt;br /&gt;
        string exampleVariable = &amp;quot;test value&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fields ===&lt;br /&gt;
&lt;br /&gt;
Fields should be always initialized when declared. Member fields start with m_ and continue in camelCase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class SimpleExample&lt;br /&gt;
{&lt;br /&gt;
    private long m_exampleMemberField = 0;&lt;br /&gt;
    private static double m_exampleStaticMemberField = 2;&lt;br /&gt;
&lt;br /&gt;
    public void ExampleMethod(int exampleAttribute)&lt;br /&gt;
    {&lt;br /&gt;
        string exampleVariable = &amp;quot;test value&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Warnings ===&lt;br /&gt;
&lt;br /&gt;
* Please keep the code warning free, using #pragma only if absolutely necessary. For instance &lt;br /&gt;
&lt;br /&gt;
 #pragma warning disable 0612&lt;br /&gt;
            ASSET_TYPE_TO_EXTENSION[(sbyte)AssetType.Script]              = &amp;quot;_script.txt&amp;quot;;   // Not sure if we'll ever see this&lt;br /&gt;
 #pragma warning restore 0612&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
&lt;br /&gt;
Each class, when needed, should have their own logger which is declared private and is not inherited:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class SimpleExample&lt;br /&gt;
{&lt;br /&gt;
    private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use of var and new()===&lt;br /&gt;
&lt;br /&gt;
Only use var in a variable declaration when the type of the variable is clear on the right side&lt;br /&gt;
Only use new(..) in a variable declaration when the type of the variable is clear on the left side&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    var a = new List&amp;lt;string&amp;gt;();&lt;br /&gt;
//or&lt;br /&gt;
    List&amp;lt;string&amp;gt; b = new(); // ok&lt;br /&gt;
&lt;br /&gt;
    var c = mything(); // not ok. we cant see the type without looking for mything details.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Standards]]&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Coding_standards</id>
		<title>Coding standards</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Coding_standards"/>
				<updated>2025-10-05T23:51:17Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: /* Guidelines */&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;
== Guidelines ==&lt;br /&gt;
&lt;br /&gt;
Current maximum C# version to use is 12.&lt;br /&gt;
&lt;br /&gt;
Dotnet version is 8.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We follow standard C# coding guidelines unless otherwise stated: [http://msdn.microsoft.com/en-us/library/czefa0ke.aspx]. Corrections to existing files to follow these standards are welcome.&lt;br /&gt;
&lt;br /&gt;
=== Formatting ===&lt;br /&gt;
&lt;br /&gt;
* We put curly brackets on separate lines and use 4 space tabs. &lt;br /&gt;
* Tab themselves should be spaces, not actual hard tabs.&lt;br /&gt;
* Use string instead of String when refering to the System.String type.&lt;br /&gt;
&lt;br /&gt;
=== Naming ===&lt;br /&gt;
&lt;br /&gt;
* We use full words to name things.&lt;br /&gt;
* Aim for assosiative naming so that the logic is clear without explicit comments.&lt;br /&gt;
&lt;br /&gt;
=== Classes ===&lt;br /&gt;
&lt;br /&gt;
Unless the classes are very trivial, there should be one class per file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class SimpleExample&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
Method names have all their words capitalized (as opposed to Java, which culturally uses camelCase).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class SimpleExample&lt;br /&gt;
{&lt;br /&gt;
    public void ExampleMethod(int exampleAttribute)&lt;br /&gt;
    {&lt;br /&gt;
        string exampleVariable = &amp;quot;test value&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fields ===&lt;br /&gt;
&lt;br /&gt;
Fields should be always initialized when declared. Member fields start with m_ and continue in camelCase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class SimpleExample&lt;br /&gt;
{&lt;br /&gt;
    private long m_exampleMemberField = 0;&lt;br /&gt;
    private static double m_exampleStaticMemberField = 2;&lt;br /&gt;
&lt;br /&gt;
    public void ExampleMethod(int exampleAttribute)&lt;br /&gt;
    {&lt;br /&gt;
        string exampleVariable = &amp;quot;test value&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Warnings ===&lt;br /&gt;
&lt;br /&gt;
* Please keep the code warning free, using #pragma only if absolutely necessary. For instance &lt;br /&gt;
&lt;br /&gt;
 #pragma warning disable 0612&lt;br /&gt;
            ASSET_TYPE_TO_EXTENSION[(sbyte)AssetType.Script]              = &amp;quot;_script.txt&amp;quot;;   // Not sure if we'll ever see this&lt;br /&gt;
 #pragma warning restore 0612&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
&lt;br /&gt;
Each class should have their own logger which is declared private and is not inherited:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class SimpleExample&lt;br /&gt;
{&lt;br /&gt;
    private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use of var and new()===&lt;br /&gt;
&lt;br /&gt;
Only use var in a variable declaration when the type of the variable is clear on the right side&lt;br /&gt;
Only use new(..) in a variable declaration when the type of the variable is clear on the left side&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    var a = new List&amp;lt;string&amp;gt;();&lt;br /&gt;
//or&lt;br /&gt;
    List&amp;lt;string&amp;gt; b = new(); // ok&lt;br /&gt;
&lt;br /&gt;
    var c = mything(); // not ok. we cant see the type without looking for mything details.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Standards]]&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Coding_standards</id>
		<title>Coding standards</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Coding_standards"/>
				<updated>2025-10-05T23:48:24Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: /* use of var and new() */&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;
== Guidelines ==&lt;br /&gt;
&lt;br /&gt;
We follow standard C# coding guidelines unless otherwise stated: [http://msdn.microsoft.com/en-us/library/czefa0ke.aspx]. Corrections to existing files to follow these standards are welcome.&lt;br /&gt;
&lt;br /&gt;
=== Formatting ===&lt;br /&gt;
&lt;br /&gt;
* We put curly brackets on separate lines and use 4 space tabs. &lt;br /&gt;
* Tab themselves should be spaces, not actual hard tabs.&lt;br /&gt;
* Use string instead of String when refering to the System.String type.&lt;br /&gt;
&lt;br /&gt;
=== Naming ===&lt;br /&gt;
&lt;br /&gt;
* We use full words to name things.&lt;br /&gt;
* Aim for assosiative naming so that the logic is clear without explicit comments.&lt;br /&gt;
&lt;br /&gt;
=== Classes ===&lt;br /&gt;
&lt;br /&gt;
Unless the classes are very trivial, there should be one class per file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class SimpleExample&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
Method names have all their words capitalized (as opposed to Java, which culturally uses camelCase).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class SimpleExample&lt;br /&gt;
{&lt;br /&gt;
    public void ExampleMethod(int exampleAttribute)&lt;br /&gt;
    {&lt;br /&gt;
        string exampleVariable = &amp;quot;test value&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fields ===&lt;br /&gt;
&lt;br /&gt;
Fields should be always initialized when declared. Member fields start with m_ and continue in camelCase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class SimpleExample&lt;br /&gt;
{&lt;br /&gt;
    private long m_exampleMemberField = 0;&lt;br /&gt;
    private static double m_exampleStaticMemberField = 2;&lt;br /&gt;
&lt;br /&gt;
    public void ExampleMethod(int exampleAttribute)&lt;br /&gt;
    {&lt;br /&gt;
        string exampleVariable = &amp;quot;test value&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Warnings ===&lt;br /&gt;
&lt;br /&gt;
* Please keep the code warning free, using #pragma only if absolutely necessary. For instance &lt;br /&gt;
&lt;br /&gt;
 #pragma warning disable 0612&lt;br /&gt;
            ASSET_TYPE_TO_EXTENSION[(sbyte)AssetType.Script]              = &amp;quot;_script.txt&amp;quot;;   // Not sure if we'll ever see this&lt;br /&gt;
 #pragma warning restore 0612&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
&lt;br /&gt;
Each class should have their own logger which is declared private and is not inherited:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class SimpleExample&lt;br /&gt;
{&lt;br /&gt;
    private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use of var and new()===&lt;br /&gt;
&lt;br /&gt;
Only use var in a variable declaration when the type of the variable is clear on the right side&lt;br /&gt;
Only use new(..) in a variable declaration when the type of the variable is clear on the left side&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    var a = new List&amp;lt;string&amp;gt;();&lt;br /&gt;
//or&lt;br /&gt;
    List&amp;lt;string&amp;gt; b = new(); // ok&lt;br /&gt;
&lt;br /&gt;
    var c = mything(); // not ok. we cant see the type without looking for mything details.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Standards]]&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/0.9.3.1</id>
		<title>0.9.3.1</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/0.9.3.1"/>
				<updated>2025-08-26T19:31:11Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: /* Breaking Changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ReleaseInfo}}&lt;br /&gt;
{{Quicklinks|0.9.3.1}}&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
''' VERSION UNDER DEVELOPMENT'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
This version requires dotnet 8. If you can only use Mono or .Net4x, please use version [[0.9.2.2]] ( http://opensimulator.org/dist )&amp;lt;br&amp;gt;&lt;br /&gt;
Also see [http://opensimulator.org/wiki/0.9.3.0_Release 0.9.3.0 Release Notes]&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.9.3.1 requires:&lt;br /&gt;
&lt;br /&gt;
* [https://dotnet.microsoft.com/en-us/download/dotnet/8.0 dotnet8] runtime for your platform (also the SDK if you wish to compile) &lt;br /&gt;
* On Windows you may need to install the [https://docs.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170 run time files for vc++]&lt;br /&gt;
* On windows you may need to authorize the install of older .NetFramework 3.5&lt;br /&gt;
* on linux you will need libgdiplus&lt;br /&gt;
**if you have mono 6.x complete, you already have libgdiplus, otherwise you need to install it for example on 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;
* To keep support for current and older viewers, new viewers must request for terrain PBR materials or textures by sending a request for a fake capability named &amp;quot;VETPBR&amp;quot; ( ViewerExtendedTerrainPBR)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Due to database migration renumbering which occurred at release 0.9.0.0, if you are upgrading from a version of OpenSimulator prior to 0.8.2.1, then you MUST first upgrade to *0.8.2.1* and then proceed to upgrade directly to 0.9.3.0. See [[0.9.0.0_Release#Pivot_Release:_0.8.2.1]] for more advice.&lt;br /&gt;
&lt;br /&gt;
= Breaking Changes =&lt;br /&gt;
&lt;br /&gt;
* Scripts compiled with older versions will be recompiled and reset their state, either on first region start after update or teleport.&lt;br /&gt;
&lt;br /&gt;
= Changes and Fixes =&lt;br /&gt;
&lt;br /&gt;
* new function [[osSetTerrainTextures]]. With this function one can change the set of terrain textures for old viewers and map generators or the set textures or materials for new viewers, without the need to use a different viewer for each case&lt;br /&gt;
&lt;br /&gt;
= Acknowledgements =&lt;br /&gt;
&lt;br /&gt;
Many thanks to all the developers (and their cats), testers and community members who contributed to this release and who help out with OpenSimulator generally. Your hard work makes this all possible.&lt;br /&gt;
&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/0.9.3.1</id>
		<title>0.9.3.1</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/0.9.3.1"/>
				<updated>2025-08-26T19:30:48Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: /* Changes and Fixes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ReleaseInfo}}&lt;br /&gt;
{{Quicklinks|0.9.3.1}}&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
''' VERSION UNDER DEVELOPMENT'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
This version requires dotnet 8. If you can only use Mono or .Net4x, please use version [[0.9.2.2]] ( http://opensimulator.org/dist )&amp;lt;br&amp;gt;&lt;br /&gt;
Also see [http://opensimulator.org/wiki/0.9.3.0_Release 0.9.3.0 Release Notes]&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.9.3.1 requires:&lt;br /&gt;
&lt;br /&gt;
* [https://dotnet.microsoft.com/en-us/download/dotnet/8.0 dotnet8] runtime for your platform (also the SDK if you wish to compile) &lt;br /&gt;
* On Windows you may need to install the [https://docs.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170 run time files for vc++]&lt;br /&gt;
* On windows you may need to authorize the install of older .NetFramework 3.5&lt;br /&gt;
* on linux you will need libgdiplus&lt;br /&gt;
**if you have mono 6.x complete, you already have libgdiplus, otherwise you need to install it for example on 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;
* To keep support for current and older viewers, new viewers must request for terrain PBR materials or textures by sending a request for a fake capability named &amp;quot;VETPBR&amp;quot; ( ViewerExtendedTerrainPBR)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Due to database migration renumbering which occurred at release 0.9.0.0, if you are upgrading from a version of OpenSimulator prior to 0.8.2.1, then you MUST first upgrade to *0.8.2.1* and then proceed to upgrade directly to 0.9.3.0. See [[0.9.0.0_Release#Pivot_Release:_0.8.2.1]] for more advice.&lt;br /&gt;
&lt;br /&gt;
= Breaking Changes =&lt;br /&gt;
&lt;br /&gt;
* Scripts compiled with older versions will be recompiled and reset their state, Either on first region start after update or teleport.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Changes and Fixes =&lt;br /&gt;
&lt;br /&gt;
* new function [[osSetTerrainTextures]]. With this function one can change the set of terrain textures for old viewers and map generators or the set textures or materials for new viewers, without the need to use a different viewer for each case&lt;br /&gt;
&lt;br /&gt;
= Acknowledgements =&lt;br /&gt;
&lt;br /&gt;
Many thanks to all the developers (and their cats), testers and community members who contributed to this release and who help out with OpenSimulator generally. Your hard work makes this all possible.&lt;br /&gt;
&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Using_Git</id>
		<title>Using Git</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Using_Git"/>
				<updated>2025-05-10T15:17:03Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: /* Git Repositories for OpenSimulator */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an introduction to using '''git''' for OpenSimulator. If you just want to know the git cloning path, jump to [[#Cloning the Repository (for Non-Core Developers)]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Installing Git =&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
&lt;br /&gt;
=== CLI ===&lt;br /&gt;
:Git is provided as a package with all modern Linux distributions. Install the following packages depending on environment:&lt;br /&gt;
::* Debian, Ubuntu: &amp;lt;code&amp;gt;apt-get install git-core&amp;lt;/code&amp;gt;&lt;br /&gt;
::* Centos: see the instructions at http://www.how-to-linux.com/2009/01/install-git-161-on-centos-52/&lt;br /&gt;
&lt;br /&gt;
=== GUIs ===&lt;br /&gt;
:[http://www.kernel.org/pub/software/scm/git/docs/git-gui.html git-gui]&lt;br /&gt;
::* Debian, Ubuntu:&lt;br /&gt;
 $ sudo apt-get install git-gui&lt;br /&gt;
 $ git gui&lt;br /&gt;
&lt;br /&gt;
:[http://cola.tuxfamily.org/ git-cola]&lt;br /&gt;
::* Debian, Ubuntu:&lt;br /&gt;
 $ apt-get install git-cola&lt;br /&gt;
 $ git-cola&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
&lt;br /&gt;
Git is now integrated in recent Visual Studio versions. You can install it with Visual Studio Setup.&lt;br /&gt;
Tortoise Git may still be useful.&lt;br /&gt;
&lt;br /&gt;
Alternatively, you need to install two packages:&lt;br /&gt;
* [http://code.google.com/p/msysgit/ msysgit] - the basic git port for Windows. Install this first. &lt;br /&gt;
* [http://code.google.com/p/tortoisegit/ Tortoise Git] - the git explorer. Install this second.&lt;br /&gt;
&lt;br /&gt;
When '''installing msysgit''' be sure to choose&lt;br /&gt;
'''Unix style line endings'''. This will manage all the line endings correctly, which will prevent merge issues in the future.&lt;br /&gt;
&lt;br /&gt;
[[Image:msysgit1.png]] [[Image:msysgit2.png]] [[Image:msysgit3.png]] [[Image:msysgit4.png]] [[Image:msysgit5.png]]&lt;br /&gt;
&lt;br /&gt;
== macOS ==&lt;br /&gt;
&lt;br /&gt;
If you have [https://www.macports.org/ MacPorts] installed, then open a Terminal window and run:&lt;br /&gt;
&lt;br /&gt;
 sudo port install git&lt;br /&gt;
&lt;br /&gt;
Or you can even obtain the GitX GUI tool, either using &amp;lt;code&amp;gt;sudo port install GitX&amp;lt;/code&amp;gt;, or as a direct download from the [https://gitx.frim.nl/ GitX Website] and put it into application folder.&lt;br /&gt;
&lt;br /&gt;
Alternatively, if you use the more popular [https://brew.sh Homebrew] package manager, the command to run from Terminal is:&lt;br /&gt;
&lt;br /&gt;
 brew install git&lt;br /&gt;
&lt;br /&gt;
Note that Apple already includes its own &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt; under &amp;lt;code&amp;gt;/usr/bin/git&amp;lt;/code&amp;gt; — usually several versions behind (but nevertheless fully functional). Homebrew will not overwrite Apple's own &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt;. Instead, it will be symbolically linked to &amp;lt;code&amp;gt;/usr/local/bin/git&amp;lt;/code&amp;gt; — it will be up to you to configure your shell to execute applications from &amp;lt;code&amp;gt;/usr/local/bin/&amp;lt;/code&amp;gt; before &amp;lt;code&amp;gt;/usr/bin&amp;lt;/code&amp;gt; (by default, the reverse is true).&lt;br /&gt;
&lt;br /&gt;
GitX is also available via Homebrew:&lt;br /&gt;
&lt;br /&gt;
 brew install GitX&lt;br /&gt;
&lt;br /&gt;
Finally, note that, unlike MacPorts, Homebrew is ''not'' invoked with &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt; (mostly for security reasons).&lt;br /&gt;
&lt;br /&gt;
= Configuring Git =&lt;br /&gt;
&lt;br /&gt;
Git has both a global config and a local config for each repo. As one might expect, local trumps global. The first important thing to do is set your name and email address, as that will be used in your commits.&lt;br /&gt;
&lt;br /&gt;
On Linux / macOS this is done via:&lt;br /&gt;
&lt;br /&gt;
 git config user.email YOUR@EMAIL.ADDR&lt;br /&gt;
 git config user.name &amp;quot;Your Name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
On Windows this is done with the config menu.&lt;br /&gt;
&lt;br /&gt;
[[Image:Config1.png]]&amp;amp;nbsp;[[Image:Config2.png]]&lt;br /&gt;
&lt;br /&gt;
To setup your Context Menu to make your options easier, select the Context Menu options as shown above and choose what you want to have displayed immediately.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Config3.png]]&lt;br /&gt;
&lt;br /&gt;
= Git Repositories for OpenSimulator =&lt;br /&gt;
&lt;br /&gt;
The URLs for the repositories are as follows:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! Repository !! Developer URL !! Anon URL&lt;br /&gt;
|-&lt;br /&gt;
|| opensim (main repository) || ssh://opensimulator.org/var/git/opensim || git://opensimulator.org/git/opensim&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Our code is also present at GitHub: https://github.com/opensim  &lt;br /&gt;
&lt;br /&gt;
And at BitBucket: https://bitbucket.org/opensimulator/workspace/repositories/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cloning the Repository (for Core Developers) ==&lt;br /&gt;
&lt;br /&gt;
If you are a core developer, use the developer URL above. If you aren't a core developer, use the Anon URL above. The initial clone will take a few minutes, as it needs to pull the entire change history. Don't be concerned about space, all the change history stored in git takes up less space than a single checked out copy of OpenSimulator. Welcome to the wonderful world of content addressable storage.&lt;br /&gt;
&lt;br /&gt;
Unlike with '''svn''', you can define multiple sources to pull from. So, if you initially start with an anon tree (which is read only), you can still later define the core tree (or some other remote target on GitHub/GitLab) and push to that.&lt;br /&gt;
&lt;br /&gt;
=== Linux / macOS ===&lt;br /&gt;
Run the following on the command line:&lt;br /&gt;
&lt;br /&gt;
 git clone ssh://opensimulator.org/var/git/opensim&lt;br /&gt;
&lt;br /&gt;
This will create an &amp;lt;code&amp;gt;opensim-test&amp;lt;/code&amp;gt; directory locally.&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
Right click on the Desktop (or wherever) and select &amp;lt;code&amp;gt;'Git Clone...'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When prompted for a URL provide &amp;lt;code&amp;gt;ssh://opensimulator.org/var/git/opensim&amp;lt;/code&amp;gt;. Your username and password will be the ones used for [http://opensimulator.org opensimulator.org].&lt;br /&gt;
&lt;br /&gt;
== Cloning the Repository (for Non-Core Developers) ==&lt;br /&gt;
&lt;br /&gt;
 git clone git://opensimulator.org/git/opensim&lt;br /&gt;
&lt;br /&gt;
This is the equivalent of anonymous svn access.&lt;br /&gt;
&lt;br /&gt;
== Resolving git hash &amp;amp;amp; revision numbers ==&lt;br /&gt;
&lt;br /&gt;
These generate the &amp;lt;code&amp;gt;bin/.version&amp;lt;/code&amp;gt; file which is used to identify the Git-Hash Revision.&amp;amp;nbsp; The git hash is used to track the builds for troubleshooting and for filling Mantis Reports.&amp;amp;nbsp; Without proper Version Identification, developers / contributors cannot locate &amp;amp;amp;&amp;amp;nbsp;address problems within the source code, resulting in un-usable Mantis reports.&amp;amp;nbsp; Please Version your Builds to help everyone make a better OpenSimulator.&lt;br /&gt;
&lt;br /&gt;
[[Show git version numbers - Windows|Windows batchfile]] &lt;br /&gt;
&lt;br /&gt;
[[Show git version numbers - Linux|Linux bash script]] &lt;br /&gt;
&lt;br /&gt;
NOTE:&amp;amp;nbsp; Older versions of Git — such as 1.6.0.4 — do not support the extra functions.&amp;amp;nbsp; To make use of the above scripts it is recomended you update your Git&amp;amp;nbsp;installation to the most current version.&amp;amp;nbsp; All versions are available from [https://git-scm.com/ git-scm.com/].&lt;br /&gt;
&lt;br /&gt;
(Note from 2023: if you're ''really'' using such a Jurassic version of '''git''', you ''must'' upgrade to a newer one! At the very least, pick one from the '''''2'''''.X branch).&lt;br /&gt;
&lt;br /&gt;
= Conceptual Changes from Subversion =&lt;br /&gt;
&lt;br /&gt;
Distributed source code control is a substantially different mental model than centralized source code control. If it freaks you out a bit, don't worry, everyone has that same reaction initially. This [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ blog post] is the best explanation that I've seen of the concepts involved.&lt;br /&gt;
&lt;br /&gt;
For heavy users of Subversion, you should read the [http://git.or.cz/course/svn.html git / svn cheat sheet]. This provides a very solid basis for making your changes. That being said, there are some conceptual changes to note:&lt;br /&gt;
&lt;br /&gt;
* Terminology&lt;br /&gt;
** '''master''' is the name of the primary upstream branch (in Subversion terms, this is '''trunk''').&lt;br /&gt;
** '''origin''' is the name and location of the tree you cloned from.&lt;br /&gt;
* All repositories are full peers to all other repositories. Your cloned git repo is all the history of the entire project, available locally. It means you can sync between any 2 clones of the repository, not just between your clone and the master repo. This lets people work together on changes not in '''master''' before submitting them.&lt;br /&gt;
* Version numbers are SHA1 hashes, not sequential integers. This means referring to specific revisions is a bit more interesting. For most of the git commands, you only need to give it the first 6-8 digits of the hash for them to work.&lt;br /&gt;
* Committing&lt;br /&gt;
** Commits are local. This means they are fast (no network involved) and they are committed against the last state of the tree. Any conflict resolution will be handled after commits, during your next pull. This is slightly different than pull-resolve-then-commit model of Subversion.&lt;br /&gt;
** By default, only files you explicitly &amp;lt;code&amp;gt;git add&amp;lt;/code&amp;gt; are put into the commit. To get &amp;lt;code&amp;gt;svn ci&amp;lt;/code&amp;gt; equivalency use &amp;lt;code&amp;gt;git commit -a&amp;lt;/code&amp;gt; to commit all outstanding files (I think Tortoise handles this for you).&lt;br /&gt;
** After making a commit you must then '''push''' it to a remote repository (probably origin). By default, you push only branches you have previously pushed, typically '''master'''.&lt;br /&gt;
&lt;br /&gt;
The biggest real change is that Subversion dictates a very specific workflow. Git does not. Git allows for many different workflows, and lets each developer use the one that is best suited to his/herself.&lt;br /&gt;
&lt;br /&gt;
= Using Git like Subversion/trunk development =&lt;br /&gt;
&lt;br /&gt;
This is a set of quick instructions to use '''git''' like we do Subversion development today. It is targeted for core developers (so it assumes you are using '''ssh''' access), though most of it will work for non-developers by just changing a URL.&lt;br /&gt;
&lt;br /&gt;
The instructions below are given using the command-line tool '''git'''. These options should all be available in the context menu on Tortoise Git (and on other GUIs) as well.&lt;br /&gt;
&lt;br /&gt;
== Getting the source code ==&lt;br /&gt;
&lt;br /&gt;
 git clone ssh://opensimulator.org/git/opensim-test&lt;br /&gt;
&lt;br /&gt;
This is the equivalent of &amp;lt;code&amp;gt;svn co&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' all other operations assume that you are in the git directory.&lt;br /&gt;
&lt;br /&gt;
== Updating your checkout ==&lt;br /&gt;
&lt;br /&gt;
 git pull&lt;br /&gt;
&lt;br /&gt;
This is the equivalent of &amp;lt;code&amp;gt;svn update&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Inspecting what has changed in your working tree ==&lt;br /&gt;
&lt;br /&gt;
 git status&lt;br /&gt;
&lt;br /&gt;
This is the equivalent of &amp;lt;code&amp;gt;svn status&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Committing a change ==&lt;br /&gt;
&lt;br /&gt;
Either:&lt;br /&gt;
&lt;br /&gt;
 git add file1 file2 ...&lt;br /&gt;
 git commit&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 git commit -a&lt;br /&gt;
&lt;br /&gt;
By default, git does not add all files during a commit.&lt;br /&gt;
&lt;br /&gt;
== Pushing the committed change ==&lt;br /&gt;
&lt;br /&gt;
The first time you do this you'll need to specify which branch to push to.&lt;br /&gt;
&lt;br /&gt;
 git push origin master&lt;br /&gt;
&lt;br /&gt;
After the first time, a simple &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; will be enough, as it defaults to origin, and now git knows that master should by synced to origin.&lt;br /&gt;
&lt;br /&gt;
'''Important:''' Commits in git are ''local''. They are not included in the main tree '''until you push''' them. This means you can create commits when you are not on the network and sync afterwards.&lt;br /&gt;
&lt;br /&gt;
== Setting the checkout directory to a specific revision ==&lt;br /&gt;
&lt;br /&gt;
 git reset --hard #HASHVALUE&lt;br /&gt;
&lt;br /&gt;
This will effectively rewind the tree to the specific revision, and modify the checkout dir accordingly. This is equivalent to &amp;lt;code&amp;gt;svn up -R#version&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git reset&amp;lt;/code&amp;gt; can also be useful if you screwed up commits and want to get rid of them&lt;br /&gt;
&lt;br /&gt;
== Resetting the tree to master (i.e. trunk) ==&lt;br /&gt;
&lt;br /&gt;
 git pull&lt;br /&gt;
&lt;br /&gt;
per previous&lt;br /&gt;
&lt;br /&gt;
== Creating a Patch ==&lt;br /&gt;
&lt;br /&gt;
 git format-patch #HASHVALUE&lt;br /&gt;
&lt;br /&gt;
This will create a patch suitable for attaching or emailing from a single commit. You can also specify a range of commits.&lt;br /&gt;
&lt;br /&gt;
This is closest to &amp;lt;code&amp;gt;svn diff &amp;gt; patchfile.txt&amp;lt;/code&amp;gt; for uncommitted changes in Subversion.&lt;br /&gt;
&lt;br /&gt;
== Applying a Git Patch ==&lt;br /&gt;
&lt;br /&gt;
If someone has formatted a git patch you can apply it directly (including all file adds, file mode changes, and their change log entry) with:&lt;br /&gt;
&lt;br /&gt;
preferred method (preserves creator info): &amp;lt;code&amp;gt;git am --signoff patchfile.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
this also works (try above method first): &amp;lt;code&amp;gt;git apply patchfile.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reverting a Change ==&lt;br /&gt;
&lt;br /&gt;
 git revert #HASHVALUE&lt;br /&gt;
&lt;br /&gt;
This directly reverts the change, with a commit message stating that fact. There is no svn direct equivalence, though this is often accomplished through: &amp;lt;code&amp;gt;svn diff -R revisions &amp;gt; revert.patch &amp;amp;&amp;amp; patch -p0 &amp;lt; revert.patch &amp;amp;&amp;amp; svn ci -m &amp;quot;reverting revisions&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resetting part of the tree to master ==&lt;br /&gt;
&lt;br /&gt;
 git checkout -- file1 file2 ...&lt;br /&gt;
&lt;br /&gt;
Checkout is an operation that populates the working directory from the git repository. Doing a &amp;lt;code&amp;gt;git checkout&amp;lt;/code&amp;gt; (master is the implied branch) &amp;lt;code&amp;gt;-- file1 file2&amp;lt;/code&amp;gt; re-pulls those files from the git repo, clobbering them in your local directory. This is like &amp;lt;code&amp;gt;svn revert&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Diffing Changes ==&lt;br /&gt;
&lt;br /&gt;
Against your most recently committed changes:&lt;br /&gt;
&lt;br /&gt;
 git diff&lt;br /&gt;
&lt;br /&gt;
From your most recent changes to a past change:&lt;br /&gt;
&lt;br /&gt;
 git diff #HASHVALUE&lt;br /&gt;
&lt;br /&gt;
Between any 2 changes:&lt;br /&gt;
&lt;br /&gt;
 git diff #HASHVALUE1 #HASHVALUE1&lt;br /&gt;
&lt;br /&gt;
== Branches ==&lt;br /&gt;
&lt;br /&gt;
=== Creating a Branch ===&lt;br /&gt;
&lt;br /&gt;
To create a new branch based on the current one, do:&lt;br /&gt;
&lt;br /&gt;
 git branch &amp;lt;branchname&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Changing Branches ===&lt;br /&gt;
&lt;br /&gt;
To change between branches, do:&lt;br /&gt;
&lt;br /&gt;
 git checkout &amp;lt;branchname&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tracking a Branch ===&lt;br /&gt;
&lt;br /&gt;
If you want to work on a specific branch, you can track it, by creating a local version of it on which you can pull and push. If you have already pulled (or fetched) from origin, you should have all the names for the remote branches:&lt;br /&gt;
&lt;br /&gt;
 git branch -a&lt;br /&gt;
&lt;br /&gt;
Will show all branches, local and remote. Choose a remote branch to track, then do:&lt;br /&gt;
&lt;br /&gt;
 git branch --track &amp;lt;localbranchname&amp;gt; remotes/origin/&amp;lt;remotebranchname&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A new local branch will be created, which will push and pull to the specific remote branch.&lt;br /&gt;
&lt;br /&gt;
* Alternate method that also works:&lt;br /&gt;
&lt;br /&gt;
 git checkout -b &amp;lt;wanted_branch&amp;gt; origin/&amp;lt;wanted_branch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources &amp;amp;amp; References ==&lt;br /&gt;
&lt;br /&gt;
* ''Git - SVN Crash Course'' at [http://git-scm.com/course/svn.html git-scm.com/course/svn.html] &lt;br /&gt;
* ''Git for the lazy'' tutorial at [http://www.spheredev.org/wiki/Git_for_the_lazy www.spheredev.org/wiki/Git_for_the_lazy] &lt;br /&gt;
* Git video tutorials at [http://gitcasts.com/ http://gitcasts.com/]&amp;amp;nbsp; (several excellent video tutorials)&lt;br /&gt;
* ''The Git Community Book'' at [http://book.git-scm.com/ http://book.git-scm.com/]&lt;br /&gt;
* [https://git-scm.com/doc Git reference, documents and videos] and [https://training.github.com/kit/downloads/github-git-cheat-sheet.pdf Git Cheat Sheet]&lt;br /&gt;
* [http://www.kernel.org/pub/software/scm/git/docs/v1.6.3.3/git-svn.html The git-svn(1) Manual Page] (git-svn = Bidirectional operation between a single Subversion branch and git)&lt;br /&gt;
* [http://cheat.errtheblog.com/s/gitsvn/ The Git-Svn Cheat Sheet]&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Using_Git</id>
		<title>Using Git</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Using_Git"/>
				<updated>2025-05-10T15:16:15Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: /* Git Repositories for OpenSimulator */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an introduction to using '''git''' for OpenSimulator. If you just want to know the git cloning path, jump to [[#Cloning the Repository (for Non-Core Developers)]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Installing Git =&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
&lt;br /&gt;
=== CLI ===&lt;br /&gt;
:Git is provided as a package with all modern Linux distributions. Install the following packages depending on environment:&lt;br /&gt;
::* Debian, Ubuntu: &amp;lt;code&amp;gt;apt-get install git-core&amp;lt;/code&amp;gt;&lt;br /&gt;
::* Centos: see the instructions at http://www.how-to-linux.com/2009/01/install-git-161-on-centos-52/&lt;br /&gt;
&lt;br /&gt;
=== GUIs ===&lt;br /&gt;
:[http://www.kernel.org/pub/software/scm/git/docs/git-gui.html git-gui]&lt;br /&gt;
::* Debian, Ubuntu:&lt;br /&gt;
 $ sudo apt-get install git-gui&lt;br /&gt;
 $ git gui&lt;br /&gt;
&lt;br /&gt;
:[http://cola.tuxfamily.org/ git-cola]&lt;br /&gt;
::* Debian, Ubuntu:&lt;br /&gt;
 $ apt-get install git-cola&lt;br /&gt;
 $ git-cola&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
&lt;br /&gt;
Git is now integrated in recent Visual Studio versions. You can install it with Visual Studio Setup.&lt;br /&gt;
Tortoise Git may still be useful.&lt;br /&gt;
&lt;br /&gt;
Alternatively, you need to install two packages:&lt;br /&gt;
* [http://code.google.com/p/msysgit/ msysgit] - the basic git port for Windows. Install this first. &lt;br /&gt;
* [http://code.google.com/p/tortoisegit/ Tortoise Git] - the git explorer. Install this second.&lt;br /&gt;
&lt;br /&gt;
When '''installing msysgit''' be sure to choose&lt;br /&gt;
'''Unix style line endings'''. This will manage all the line endings correctly, which will prevent merge issues in the future.&lt;br /&gt;
&lt;br /&gt;
[[Image:msysgit1.png]] [[Image:msysgit2.png]] [[Image:msysgit3.png]] [[Image:msysgit4.png]] [[Image:msysgit5.png]]&lt;br /&gt;
&lt;br /&gt;
== macOS ==&lt;br /&gt;
&lt;br /&gt;
If you have [https://www.macports.org/ MacPorts] installed, then open a Terminal window and run:&lt;br /&gt;
&lt;br /&gt;
 sudo port install git&lt;br /&gt;
&lt;br /&gt;
Or you can even obtain the GitX GUI tool, either using &amp;lt;code&amp;gt;sudo port install GitX&amp;lt;/code&amp;gt;, or as a direct download from the [https://gitx.frim.nl/ GitX Website] and put it into application folder.&lt;br /&gt;
&lt;br /&gt;
Alternatively, if you use the more popular [https://brew.sh Homebrew] package manager, the command to run from Terminal is:&lt;br /&gt;
&lt;br /&gt;
 brew install git&lt;br /&gt;
&lt;br /&gt;
Note that Apple already includes its own &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt; under &amp;lt;code&amp;gt;/usr/bin/git&amp;lt;/code&amp;gt; — usually several versions behind (but nevertheless fully functional). Homebrew will not overwrite Apple's own &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt;. Instead, it will be symbolically linked to &amp;lt;code&amp;gt;/usr/local/bin/git&amp;lt;/code&amp;gt; — it will be up to you to configure your shell to execute applications from &amp;lt;code&amp;gt;/usr/local/bin/&amp;lt;/code&amp;gt; before &amp;lt;code&amp;gt;/usr/bin&amp;lt;/code&amp;gt; (by default, the reverse is true).&lt;br /&gt;
&lt;br /&gt;
GitX is also available via Homebrew:&lt;br /&gt;
&lt;br /&gt;
 brew install GitX&lt;br /&gt;
&lt;br /&gt;
Finally, note that, unlike MacPorts, Homebrew is ''not'' invoked with &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt; (mostly for security reasons).&lt;br /&gt;
&lt;br /&gt;
= Configuring Git =&lt;br /&gt;
&lt;br /&gt;
Git has both a global config and a local config for each repo. As one might expect, local trumps global. The first important thing to do is set your name and email address, as that will be used in your commits.&lt;br /&gt;
&lt;br /&gt;
On Linux / macOS this is done via:&lt;br /&gt;
&lt;br /&gt;
 git config user.email YOUR@EMAIL.ADDR&lt;br /&gt;
 git config user.name &amp;quot;Your Name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
On Windows this is done with the config menu.&lt;br /&gt;
&lt;br /&gt;
[[Image:Config1.png]]&amp;amp;nbsp;[[Image:Config2.png]]&lt;br /&gt;
&lt;br /&gt;
To setup your Context Menu to make your options easier, select the Context Menu options as shown above and choose what you want to have displayed immediately.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Config3.png]]&lt;br /&gt;
&lt;br /&gt;
= Git Repositories for OpenSimulator =&lt;br /&gt;
&lt;br /&gt;
The URLs for the repositories are as follows:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! Repository !! Developer URL !! Anon URL&lt;br /&gt;
|-&lt;br /&gt;
|| opensim (main repository) || ssh://opensimulator.org/var/git/opensim || git://opensimulator.org/git/opensim&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Our code is also present at GitHub  &lt;br /&gt;
https://github.com/opensim  &lt;br /&gt;
&lt;br /&gt;
And at BitBucket:  &lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/opensimulator/workspace/repositories/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cloning the Repository (for Core Developers) ==&lt;br /&gt;
&lt;br /&gt;
If you are a core developer, use the developer URL above. If you aren't a core developer, use the Anon URL above. The initial clone will take a few minutes, as it needs to pull the entire change history. Don't be concerned about space, all the change history stored in git takes up less space than a single checked out copy of OpenSimulator. Welcome to the wonderful world of content addressable storage.&lt;br /&gt;
&lt;br /&gt;
Unlike with '''svn''', you can define multiple sources to pull from. So, if you initially start with an anon tree (which is read only), you can still later define the core tree (or some other remote target on GitHub/GitLab) and push to that.&lt;br /&gt;
&lt;br /&gt;
=== Linux / macOS ===&lt;br /&gt;
Run the following on the command line:&lt;br /&gt;
&lt;br /&gt;
 git clone ssh://opensimulator.org/var/git/opensim&lt;br /&gt;
&lt;br /&gt;
This will create an &amp;lt;code&amp;gt;opensim-test&amp;lt;/code&amp;gt; directory locally.&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
Right click on the Desktop (or wherever) and select &amp;lt;code&amp;gt;'Git Clone...'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When prompted for a URL provide &amp;lt;code&amp;gt;ssh://opensimulator.org/var/git/opensim&amp;lt;/code&amp;gt;. Your username and password will be the ones used for [http://opensimulator.org opensimulator.org].&lt;br /&gt;
&lt;br /&gt;
== Cloning the Repository (for Non-Core Developers) ==&lt;br /&gt;
&lt;br /&gt;
 git clone git://opensimulator.org/git/opensim&lt;br /&gt;
&lt;br /&gt;
This is the equivalent of anonymous svn access.&lt;br /&gt;
&lt;br /&gt;
== Resolving git hash &amp;amp;amp; revision numbers ==&lt;br /&gt;
&lt;br /&gt;
These generate the &amp;lt;code&amp;gt;bin/.version&amp;lt;/code&amp;gt; file which is used to identify the Git-Hash Revision.&amp;amp;nbsp; The git hash is used to track the builds for troubleshooting and for filling Mantis Reports.&amp;amp;nbsp; Without proper Version Identification, developers / contributors cannot locate &amp;amp;amp;&amp;amp;nbsp;address problems within the source code, resulting in un-usable Mantis reports.&amp;amp;nbsp; Please Version your Builds to help everyone make a better OpenSimulator.&lt;br /&gt;
&lt;br /&gt;
[[Show git version numbers - Windows|Windows batchfile]] &lt;br /&gt;
&lt;br /&gt;
[[Show git version numbers - Linux|Linux bash script]] &lt;br /&gt;
&lt;br /&gt;
NOTE:&amp;amp;nbsp; Older versions of Git — such as 1.6.0.4 — do not support the extra functions.&amp;amp;nbsp; To make use of the above scripts it is recomended you update your Git&amp;amp;nbsp;installation to the most current version.&amp;amp;nbsp; All versions are available from [https://git-scm.com/ git-scm.com/].&lt;br /&gt;
&lt;br /&gt;
(Note from 2023: if you're ''really'' using such a Jurassic version of '''git''', you ''must'' upgrade to a newer one! At the very least, pick one from the '''''2'''''.X branch).&lt;br /&gt;
&lt;br /&gt;
= Conceptual Changes from Subversion =&lt;br /&gt;
&lt;br /&gt;
Distributed source code control is a substantially different mental model than centralized source code control. If it freaks you out a bit, don't worry, everyone has that same reaction initially. This [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ blog post] is the best explanation that I've seen of the concepts involved.&lt;br /&gt;
&lt;br /&gt;
For heavy users of Subversion, you should read the [http://git.or.cz/course/svn.html git / svn cheat sheet]. This provides a very solid basis for making your changes. That being said, there are some conceptual changes to note:&lt;br /&gt;
&lt;br /&gt;
* Terminology&lt;br /&gt;
** '''master''' is the name of the primary upstream branch (in Subversion terms, this is '''trunk''').&lt;br /&gt;
** '''origin''' is the name and location of the tree you cloned from.&lt;br /&gt;
* All repositories are full peers to all other repositories. Your cloned git repo is all the history of the entire project, available locally. It means you can sync between any 2 clones of the repository, not just between your clone and the master repo. This lets people work together on changes not in '''master''' before submitting them.&lt;br /&gt;
* Version numbers are SHA1 hashes, not sequential integers. This means referring to specific revisions is a bit more interesting. For most of the git commands, you only need to give it the first 6-8 digits of the hash for them to work.&lt;br /&gt;
* Committing&lt;br /&gt;
** Commits are local. This means they are fast (no network involved) and they are committed against the last state of the tree. Any conflict resolution will be handled after commits, during your next pull. This is slightly different than pull-resolve-then-commit model of Subversion.&lt;br /&gt;
** By default, only files you explicitly &amp;lt;code&amp;gt;git add&amp;lt;/code&amp;gt; are put into the commit. To get &amp;lt;code&amp;gt;svn ci&amp;lt;/code&amp;gt; equivalency use &amp;lt;code&amp;gt;git commit -a&amp;lt;/code&amp;gt; to commit all outstanding files (I think Tortoise handles this for you).&lt;br /&gt;
** After making a commit you must then '''push''' it to a remote repository (probably origin). By default, you push only branches you have previously pushed, typically '''master'''.&lt;br /&gt;
&lt;br /&gt;
The biggest real change is that Subversion dictates a very specific workflow. Git does not. Git allows for many different workflows, and lets each developer use the one that is best suited to his/herself.&lt;br /&gt;
&lt;br /&gt;
= Using Git like Subversion/trunk development =&lt;br /&gt;
&lt;br /&gt;
This is a set of quick instructions to use '''git''' like we do Subversion development today. It is targeted for core developers (so it assumes you are using '''ssh''' access), though most of it will work for non-developers by just changing a URL.&lt;br /&gt;
&lt;br /&gt;
The instructions below are given using the command-line tool '''git'''. These options should all be available in the context menu on Tortoise Git (and on other GUIs) as well.&lt;br /&gt;
&lt;br /&gt;
== Getting the source code ==&lt;br /&gt;
&lt;br /&gt;
 git clone ssh://opensimulator.org/git/opensim-test&lt;br /&gt;
&lt;br /&gt;
This is the equivalent of &amp;lt;code&amp;gt;svn co&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' all other operations assume that you are in the git directory.&lt;br /&gt;
&lt;br /&gt;
== Updating your checkout ==&lt;br /&gt;
&lt;br /&gt;
 git pull&lt;br /&gt;
&lt;br /&gt;
This is the equivalent of &amp;lt;code&amp;gt;svn update&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Inspecting what has changed in your working tree ==&lt;br /&gt;
&lt;br /&gt;
 git status&lt;br /&gt;
&lt;br /&gt;
This is the equivalent of &amp;lt;code&amp;gt;svn status&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Committing a change ==&lt;br /&gt;
&lt;br /&gt;
Either:&lt;br /&gt;
&lt;br /&gt;
 git add file1 file2 ...&lt;br /&gt;
 git commit&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 git commit -a&lt;br /&gt;
&lt;br /&gt;
By default, git does not add all files during a commit.&lt;br /&gt;
&lt;br /&gt;
== Pushing the committed change ==&lt;br /&gt;
&lt;br /&gt;
The first time you do this you'll need to specify which branch to push to.&lt;br /&gt;
&lt;br /&gt;
 git push origin master&lt;br /&gt;
&lt;br /&gt;
After the first time, a simple &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; will be enough, as it defaults to origin, and now git knows that master should by synced to origin.&lt;br /&gt;
&lt;br /&gt;
'''Important:''' Commits in git are ''local''. They are not included in the main tree '''until you push''' them. This means you can create commits when you are not on the network and sync afterwards.&lt;br /&gt;
&lt;br /&gt;
== Setting the checkout directory to a specific revision ==&lt;br /&gt;
&lt;br /&gt;
 git reset --hard #HASHVALUE&lt;br /&gt;
&lt;br /&gt;
This will effectively rewind the tree to the specific revision, and modify the checkout dir accordingly. This is equivalent to &amp;lt;code&amp;gt;svn up -R#version&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git reset&amp;lt;/code&amp;gt; can also be useful if you screwed up commits and want to get rid of them&lt;br /&gt;
&lt;br /&gt;
== Resetting the tree to master (i.e. trunk) ==&lt;br /&gt;
&lt;br /&gt;
 git pull&lt;br /&gt;
&lt;br /&gt;
per previous&lt;br /&gt;
&lt;br /&gt;
== Creating a Patch ==&lt;br /&gt;
&lt;br /&gt;
 git format-patch #HASHVALUE&lt;br /&gt;
&lt;br /&gt;
This will create a patch suitable for attaching or emailing from a single commit. You can also specify a range of commits.&lt;br /&gt;
&lt;br /&gt;
This is closest to &amp;lt;code&amp;gt;svn diff &amp;gt; patchfile.txt&amp;lt;/code&amp;gt; for uncommitted changes in Subversion.&lt;br /&gt;
&lt;br /&gt;
== Applying a Git Patch ==&lt;br /&gt;
&lt;br /&gt;
If someone has formatted a git patch you can apply it directly (including all file adds, file mode changes, and their change log entry) with:&lt;br /&gt;
&lt;br /&gt;
preferred method (preserves creator info): &amp;lt;code&amp;gt;git am --signoff patchfile.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
this also works (try above method first): &amp;lt;code&amp;gt;git apply patchfile.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reverting a Change ==&lt;br /&gt;
&lt;br /&gt;
 git revert #HASHVALUE&lt;br /&gt;
&lt;br /&gt;
This directly reverts the change, with a commit message stating that fact. There is no svn direct equivalence, though this is often accomplished through: &amp;lt;code&amp;gt;svn diff -R revisions &amp;gt; revert.patch &amp;amp;&amp;amp; patch -p0 &amp;lt; revert.patch &amp;amp;&amp;amp; svn ci -m &amp;quot;reverting revisions&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resetting part of the tree to master ==&lt;br /&gt;
&lt;br /&gt;
 git checkout -- file1 file2 ...&lt;br /&gt;
&lt;br /&gt;
Checkout is an operation that populates the working directory from the git repository. Doing a &amp;lt;code&amp;gt;git checkout&amp;lt;/code&amp;gt; (master is the implied branch) &amp;lt;code&amp;gt;-- file1 file2&amp;lt;/code&amp;gt; re-pulls those files from the git repo, clobbering them in your local directory. This is like &amp;lt;code&amp;gt;svn revert&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Diffing Changes ==&lt;br /&gt;
&lt;br /&gt;
Against your most recently committed changes:&lt;br /&gt;
&lt;br /&gt;
 git diff&lt;br /&gt;
&lt;br /&gt;
From your most recent changes to a past change:&lt;br /&gt;
&lt;br /&gt;
 git diff #HASHVALUE&lt;br /&gt;
&lt;br /&gt;
Between any 2 changes:&lt;br /&gt;
&lt;br /&gt;
 git diff #HASHVALUE1 #HASHVALUE1&lt;br /&gt;
&lt;br /&gt;
== Branches ==&lt;br /&gt;
&lt;br /&gt;
=== Creating a Branch ===&lt;br /&gt;
&lt;br /&gt;
To create a new branch based on the current one, do:&lt;br /&gt;
&lt;br /&gt;
 git branch &amp;lt;branchname&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Changing Branches ===&lt;br /&gt;
&lt;br /&gt;
To change between branches, do:&lt;br /&gt;
&lt;br /&gt;
 git checkout &amp;lt;branchname&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tracking a Branch ===&lt;br /&gt;
&lt;br /&gt;
If you want to work on a specific branch, you can track it, by creating a local version of it on which you can pull and push. If you have already pulled (or fetched) from origin, you should have all the names for the remote branches:&lt;br /&gt;
&lt;br /&gt;
 git branch -a&lt;br /&gt;
&lt;br /&gt;
Will show all branches, local and remote. Choose a remote branch to track, then do:&lt;br /&gt;
&lt;br /&gt;
 git branch --track &amp;lt;localbranchname&amp;gt; remotes/origin/&amp;lt;remotebranchname&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A new local branch will be created, which will push and pull to the specific remote branch.&lt;br /&gt;
&lt;br /&gt;
* Alternate method that also works:&lt;br /&gt;
&lt;br /&gt;
 git checkout -b &amp;lt;wanted_branch&amp;gt; origin/&amp;lt;wanted_branch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources &amp;amp;amp; References ==&lt;br /&gt;
&lt;br /&gt;
* ''Git - SVN Crash Course'' at [http://git-scm.com/course/svn.html git-scm.com/course/svn.html] &lt;br /&gt;
* ''Git for the lazy'' tutorial at [http://www.spheredev.org/wiki/Git_for_the_lazy www.spheredev.org/wiki/Git_for_the_lazy] &lt;br /&gt;
* Git video tutorials at [http://gitcasts.com/ http://gitcasts.com/]&amp;amp;nbsp; (several excellent video tutorials)&lt;br /&gt;
* ''The Git Community Book'' at [http://book.git-scm.com/ http://book.git-scm.com/]&lt;br /&gt;
* [https://git-scm.com/doc Git reference, documents and videos] and [https://training.github.com/kit/downloads/github-git-cheat-sheet.pdf Git Cheat Sheet]&lt;br /&gt;
* [http://www.kernel.org/pub/software/scm/git/docs/v1.6.3.3/git-svn.html The git-svn(1) Manual Page] (git-svn = Bidirectional operation between a single Subversion branch and git)&lt;br /&gt;
* [http://cheat.errtheblog.com/s/gitsvn/ The Git-Svn Cheat Sheet]&lt;/div&gt;</summary>
		<author><name>Ubit</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>2025-05-09T19:42:15Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: /* Misc */&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;
* [[osGrantScriptPermissions]]&lt;br /&gt;
* [[osInviteToGroup]]&lt;br /&gt;
* [[osKickAvatar]]&lt;br /&gt;
* [[osOwnerSaveAppearance]]&lt;br /&gt;
* [[osRevokeScriptPermissions]]&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;
* [[osGetLinkInventoryKey]] {{new}}&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;
* [[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;
* [[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;
* [[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;
* [[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;
* [[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>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsListAs*</id>
		<title>OsListAs*</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsListAs*"/>
				<updated>2025-05-09T19:40:53Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|permissions=true&lt;br /&gt;
|threat_level=ignored&lt;br /&gt;
|delay=0&lt;br /&gt;
|function_syntax=&lt;br /&gt;
integer osListAsInteger(list src, integer index)&amp;lt;br/&amp;gt;&lt;br /&gt;
float osListAsFloat(list src, integer index)&amp;lt;br/&amp;gt;&lt;br /&gt;
string osListAsString(list src, integer index)&amp;lt;br/&amp;gt;&lt;br /&gt;
vector osListAsVector(list src, integer index)&amp;lt;br/&amp;gt;&lt;br /&gt;
rotation osListAsRotation(list src, integer index)&amp;lt;br/&amp;gt;&lt;br /&gt;
|description=Return the element at index as integer, float, string, vector or rotation. Index must me &amp;gt;= 0 and the element on at that position must be of the requested type. Because of this restrictions, This should be a bit faster than the llList2* functions&lt;br /&gt;
|ossl_example=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|additional_info= add to 0.9.3.1&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsListAs*</id>
		<title>OsListAs*</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsListAs*"/>
				<updated>2025-05-09T19:39:40Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|permissions=true&lt;br /&gt;
|threat_level=ignored&lt;br /&gt;
|delay=0&lt;br /&gt;
|function_syntax=&lt;br /&gt;
integer osListAsInteger(list src, integer index)&amp;lt;br/&amp;gt;&lt;br /&gt;
float osListAsFloat(list src, integer index)&amp;lt;br/&amp;gt;&lt;br /&gt;
string osListAsString(list src, integer index)&amp;lt;br/&amp;gt;&lt;br /&gt;
vector osListAsVector(list src, integer index)&amp;lt;br/&amp;gt;&lt;br /&gt;
rotation osListAsRotation(list src, integer index)&amp;lt;br/&amp;gt;&lt;br /&gt;
|description=return the element at index as integer, float, string, vector or rotation. Index must me &amp;gt;= 0 only and the element on the list must be of the requested type. Because of this restrictions, should be a bit faster than the llList2* functions&lt;br /&gt;
|ossl_example=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|additional_info= add to 0.9.3.1&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsListAs*</id>
		<title>OsListAs*</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsListAs*"/>
				<updated>2025-05-09T19:39:23Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: Created page with &amp;quot;{{osslfunc |permissions=true |threat_level=ignored |delay=0 |function_syntax= integer osListAs(list src, integer index)&amp;lt;br/&amp;gt; integer osListAsInteger(list src, integer index)&amp;lt;b...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|permissions=true&lt;br /&gt;
|threat_level=ignored&lt;br /&gt;
|delay=0&lt;br /&gt;
|function_syntax= integer osListAs(list src, integer index)&amp;lt;br/&amp;gt;&lt;br /&gt;
integer osListAsInteger(list src, integer index)&amp;lt;br/&amp;gt;&lt;br /&gt;
float osListAsFloat(list src, integer index)&amp;lt;br/&amp;gt;&lt;br /&gt;
string osListAsString(list src, integer index)&amp;lt;br/&amp;gt;&lt;br /&gt;
vector osListAsVector(list src, integer index)&amp;lt;br/&amp;gt;&lt;br /&gt;
rotation osListAsRotation(list src, integer index)&amp;lt;br/&amp;gt;&lt;br /&gt;
|description=return the element at index as integer, float, string, vector or rotation. Index must me &amp;gt;= 0 only and the element on the list must be of the requested type. Because of this restrictions, should be a bit faster than the llList2* functions&lt;br /&gt;
|ossl_example=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|additional_info= add to 0.9.3.1&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ubit</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>2025-05-09T19:32:55Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: /* Misc */&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;
* [[osGrantScriptPermissions]]&lt;br /&gt;
* [[osInviteToGroup]]&lt;br /&gt;
* [[osKickAvatar]]&lt;br /&gt;
* [[osOwnerSaveAppearance]]&lt;br /&gt;
* [[osRevokeScriptPermissions]]&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;
* [[osGetLinkInventoryKey]] {{new}}&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;
* [[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;
* [[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*]]&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;
* [[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;
* [[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>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/0.9.3.1</id>
		<title>0.9.3.1</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/0.9.3.1"/>
				<updated>2025-05-07T14:23:30Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: /* Requirements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ReleaseInfo}}&lt;br /&gt;
{{Quicklinks|0.9.3.1}}&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
''' VERSION UNDER DEVELOPMENT'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
This version requires dotnet 8. If you can only use Mono or .Net4x, please use version [[0.9.2.2]] ( http://opensimulator.org/dist )&amp;lt;br&amp;gt;&lt;br /&gt;
Also see [http://opensimulator.org/wiki/0.9.3.0_Release 0.9.3.0 Release Notes]&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.9.3.1 requires:&lt;br /&gt;
&lt;br /&gt;
* [https://dotnet.microsoft.com/en-us/download/dotnet/8.0 dotnet8] runtime for your platform (also the SDK if you wish to compile) &lt;br /&gt;
* On Windows you may need to install the [https://docs.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170 run time files for vc++]&lt;br /&gt;
* On windows you may need to authorize the install of older .NetFramework 3.5&lt;br /&gt;
* on linux you will need libgdiplus&lt;br /&gt;
**if you have mono 6.x complete, you already have libgdiplus, otherwise you need to install it for example on 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;
* To keep support for current and older viewers, new viewers must request for terrain PBR materials or textures by sending a request for a fake capability named &amp;quot;VETPBR&amp;quot; ( ViewerExtendedTerrainPBR)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Due to database migration renumbering which occurred at release 0.9.0.0, if you are upgrading from a version of OpenSimulator prior to 0.8.2.1, then you MUST first upgrade to *0.8.2.1* and then proceed to upgrade directly to 0.9.3.0. See [[0.9.0.0_Release#Pivot_Release:_0.8.2.1]] for more advice.&lt;br /&gt;
&lt;br /&gt;
= Changes and Fixes =&lt;br /&gt;
&lt;br /&gt;
* new function [[osSetTerrainTextures]]. With this function one can change the set of terrain textures for old viewers and map generators or the set textures or materials for new viewers, without the need to use a different viewer for each case&lt;br /&gt;
&lt;br /&gt;
= Acknowledgements =&lt;br /&gt;
&lt;br /&gt;
Many thanks to all the developers (and their cats), testers and community members who contributed to this release and who help out with OpenSimulator generally. Your hard work makes this all possible.&lt;br /&gt;
&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/0.9.3.1</id>
		<title>0.9.3.1</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/0.9.3.1"/>
				<updated>2025-05-07T14:22:45Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: /* Changes and Fixes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ReleaseInfo}}&lt;br /&gt;
{{Quicklinks|0.9.3.1}}&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
''' VERSION UNDER DEVELOPMENT'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
This version requires dotnet 8. If you can only use Mono or .Net4x, please use version [[0.9.2.2]] ( http://opensimulator.org/dist )&amp;lt;br&amp;gt;&lt;br /&gt;
Also see [http://opensimulator.org/wiki/0.9.3.0_Release 0.9.3.0 Release Notes]&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.9.3.1 requires:&lt;br /&gt;
&lt;br /&gt;
* [https://dotnet.microsoft.com/en-us/download/dotnet/8.0 dotnet8] runtime for your platform (also the SDK if you wish to compile) &lt;br /&gt;
* On Windows you may need to install the [https://docs.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170 run time files for vc++]&lt;br /&gt;
* On windows you may need to authorize the install of older .NetFramework 3.5&lt;br /&gt;
* on linux you will need libgdiplus&lt;br /&gt;
**if you have mono 6.x complete, you already have libgdiplus, otherwise you need to install it for example on 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;
* To keep support for current and older viewers, new viewers must request for terrain PBR materials by sending a request for a fake capability named &amp;quot;VETPBR&amp;quot; ( ViewerExtendedTerrainPBR)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Due to database migration renumbering which occurred at release 0.9.0.0, if you are upgrading from a version of OpenSimulator prior to 0.8.2.1, then you MUST first upgrade to *0.8.2.1* and then proceed to upgrade directly to 0.9.3.0. See [[0.9.0.0_Release#Pivot_Release:_0.8.2.1]] for more advice.&lt;br /&gt;
&lt;br /&gt;
= Changes and Fixes =&lt;br /&gt;
&lt;br /&gt;
* new function [[osSetTerrainTextures]]. With this function one can change the set of terrain textures for old viewers and map generators or the set textures or materials for new viewers, without the need to use a different viewer for each case&lt;br /&gt;
&lt;br /&gt;
= Acknowledgements =&lt;br /&gt;
&lt;br /&gt;
Many thanks to all the developers (and their cats), testers and community members who contributed to this release and who help out with OpenSimulator generally. Your hard work makes this all possible.&lt;br /&gt;
&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/0.9.3.1</id>
		<title>0.9.3.1</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/0.9.3.1"/>
				<updated>2025-05-07T14:22:14Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: /* Changes and Fixes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ReleaseInfo}}&lt;br /&gt;
{{Quicklinks|0.9.3.1}}&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
''' VERSION UNDER DEVELOPMENT'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
This version requires dotnet 8. If you can only use Mono or .Net4x, please use version [[0.9.2.2]] ( http://opensimulator.org/dist )&amp;lt;br&amp;gt;&lt;br /&gt;
Also see [http://opensimulator.org/wiki/0.9.3.0_Release 0.9.3.0 Release Notes]&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.9.3.1 requires:&lt;br /&gt;
&lt;br /&gt;
* [https://dotnet.microsoft.com/en-us/download/dotnet/8.0 dotnet8] runtime for your platform (also the SDK if you wish to compile) &lt;br /&gt;
* On Windows you may need to install the [https://docs.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170 run time files for vc++]&lt;br /&gt;
* On windows you may need to authorize the install of older .NetFramework 3.5&lt;br /&gt;
* on linux you will need libgdiplus&lt;br /&gt;
**if you have mono 6.x complete, you already have libgdiplus, otherwise you need to install it for example on 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;
* To keep support for current and older viewers, new viewers must request for terrain PBR materials by sending a request for a fake capability named &amp;quot;VETPBR&amp;quot; ( ViewerExtendedTerrainPBR)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Due to database migration renumbering which occurred at release 0.9.0.0, if you are upgrading from a version of OpenSimulator prior to 0.8.2.1, then you MUST first upgrade to *0.8.2.1* and then proceed to upgrade directly to 0.9.3.0. See [[0.9.0.0_Release#Pivot_Release:_0.8.2.1]] for more advice.&lt;br /&gt;
&lt;br /&gt;
= Changes and Fixes =&lt;br /&gt;
&lt;br /&gt;
* new function [[osSetTerrainTextures]]. With this function one can change the set of terrain textures for old viewer or the set textures or materials for new viewers, without the need to use a different viewer for each case&lt;br /&gt;
&lt;br /&gt;
= Acknowledgements =&lt;br /&gt;
&lt;br /&gt;
Many thanks to all the developers (and their cats), testers and community members who contributed to this release and who help out with OpenSimulator generally. Your hard work makes this all possible.&lt;br /&gt;
&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/0.9.3.1</id>
		<title>0.9.3.1</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/0.9.3.1"/>
				<updated>2025-05-07T14:21:15Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: /* Changes and Fixes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ReleaseInfo}}&lt;br /&gt;
{{Quicklinks|0.9.3.1}}&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
''' VERSION UNDER DEVELOPMENT'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
This version requires dotnet 8. If you can only use Mono or .Net4x, please use version [[0.9.2.2]] ( http://opensimulator.org/dist )&amp;lt;br&amp;gt;&lt;br /&gt;
Also see [http://opensimulator.org/wiki/0.9.3.0_Release 0.9.3.0 Release Notes]&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.9.3.1 requires:&lt;br /&gt;
&lt;br /&gt;
* [https://dotnet.microsoft.com/en-us/download/dotnet/8.0 dotnet8] runtime for your platform (also the SDK if you wish to compile) &lt;br /&gt;
* On Windows you may need to install the [https://docs.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170 run time files for vc++]&lt;br /&gt;
* On windows you may need to authorize the install of older .NetFramework 3.5&lt;br /&gt;
* on linux you will need libgdiplus&lt;br /&gt;
**if you have mono 6.x complete, you already have libgdiplus, otherwise you need to install it for example on 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;
* To keep support for current and older viewers, new viewers must request for terrain PBR materials by sending a request for a fake capability named &amp;quot;VETPBR&amp;quot; ( ViewerExtendedTerrainPBR)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Due to database migration renumbering which occurred at release 0.9.0.0, if you are upgrading from a version of OpenSimulator prior to 0.8.2.1, then you MUST first upgrade to *0.8.2.1* and then proceed to upgrade directly to 0.9.3.0. See [[0.9.0.0_Release#Pivot_Release:_0.8.2.1]] for more advice.&lt;br /&gt;
&lt;br /&gt;
= Changes and Fixes =&lt;br /&gt;
  * new funtion [[osSetTerrainTextures]]. With this function one can change the set of terrain textures for old viewer or the set textures or materials fro new viewers, without the need to use a different viewer for each case&lt;br /&gt;
&lt;br /&gt;
= Acknowledgements =&lt;br /&gt;
&lt;br /&gt;
Many thanks to all the developers (and their cats), testers and community members who contributed to this release and who help out with OpenSimulator generally. Your hard work makes this all possible.&lt;br /&gt;
&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/0.9.3.1</id>
		<title>0.9.3.1</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/0.9.3.1"/>
				<updated>2025-05-07T14:20:52Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: /* Changes and Fixes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ReleaseInfo}}&lt;br /&gt;
{{Quicklinks|0.9.3.1}}&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
''' VERSION UNDER DEVELOPMENT'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
This version requires dotnet 8. If you can only use Mono or .Net4x, please use version [[0.9.2.2]] ( http://opensimulator.org/dist )&amp;lt;br&amp;gt;&lt;br /&gt;
Also see [http://opensimulator.org/wiki/0.9.3.0_Release 0.9.3.0 Release Notes]&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
&lt;br /&gt;
OpenSimulator 0.9.3.1 requires:&lt;br /&gt;
&lt;br /&gt;
* [https://dotnet.microsoft.com/en-us/download/dotnet/8.0 dotnet8] runtime for your platform (also the SDK if you wish to compile) &lt;br /&gt;
* On Windows you may need to install the [https://docs.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170 run time files for vc++]&lt;br /&gt;
* On windows you may need to authorize the install of older .NetFramework 3.5&lt;br /&gt;
* on linux you will need libgdiplus&lt;br /&gt;
**if you have mono 6.x complete, you already have libgdiplus, otherwise you need to install it for example on 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;
* To keep support for current and older viewers, new viewers must request for terrain PBR materials by sending a request for a fake capability named &amp;quot;VETPBR&amp;quot; ( ViewerExtendedTerrainPBR)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Due to database migration renumbering which occurred at release 0.9.0.0, if you are upgrading from a version of OpenSimulator prior to 0.8.2.1, then you MUST first upgrade to *0.8.2.1* and then proceed to upgrade directly to 0.9.3.0. See [[0.9.0.0_Release#Pivot_Release:_0.8.2.1]] for more advice.&lt;br /&gt;
&lt;br /&gt;
= Changes and Fixes =&lt;br /&gt;
 * new funtion [[osSetTerrainTextures]]. With this function one can change the set of terrain textures for old viewer or the set textures or materials fro new viewers, without the need to use a different viewer for each case&lt;br /&gt;
&lt;br /&gt;
= Acknowledgements =&lt;br /&gt;
&lt;br /&gt;
Many thanks to all the developers (and their cats), testers and community members who contributed to this release and who help out with OpenSimulator generally. Your hard work makes this all possible.&lt;br /&gt;
&lt;br /&gt;
[[Category:Release Notes]]&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetTerrainTextures</id>
		<title>OsSetTerrainTextures</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetTerrainTextures"/>
				<updated>2025-05-06T22:43:03Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax= osSetTerrainTextures(list textureKeys, integer types)&lt;br /&gt;
|description=&lt;br /&gt;
Opensimulator regions store two sets of texture or material keys:&lt;br /&gt;
* a set of texture keys for legacy viewers and map&lt;br /&gt;
* a set of texture or pbr material keys for new viewers.&amp;lt;br&amp;gt;&lt;br /&gt;
so this function allows to change those keys depending on the value of &amp;lt;b&amp;gt;types&amp;lt;/b&amp;gt;:&lt;br /&gt;
* 0 applies keys for legacy viewers and map, keys must represent textures&lt;br /&gt;
* 1 applies keys for new viewers, keys represent either textures or PBR materials&lt;br /&gt;
* 2 applies keys to to both, Keys must represent textures&lt;br /&gt;
The list &amp;lt;b&amp;gt;textureKeys&amp;lt;/b&amp;gt; must contain keys or names of 4 textures or 4 pbr materials. They must be of the same type due to viewers restrictions.&amp;lt;br&amp;gt;&lt;br /&gt;
This defines the textures or materials the viewer will use to draw the terrain texture&amp;lt;br&amp;gt;&lt;br /&gt;
They are ordered from low to high terrain height level, as on viewers World -&amp;gt; Region Details -&amp;gt; Terrain menu tab.&amp;lt;br&amp;gt;&lt;br /&gt;
If an entry is a name, then the material or texture must be present on the prim inventory.&amp;lt;br&amp;gt;&lt;br /&gt;
If an entry is an empty string, then that level is unchanged.&amp;lt;br&amp;gt;&lt;br /&gt;
Uses same threat level as osSetTerrainTexture in ossl_enable.ini&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|permissions=ESTATE_MANAGER,ESTATE_OWNER&lt;br /&gt;
|delay=0&lt;br /&gt;
|&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|additional_info=This function was added in 0.9.3.1&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ubit</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>2025-05-06T22:36:52Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: /* Terrain */&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;
* [[osGrantScriptPermissions]]&lt;br /&gt;
* [[osInviteToGroup]]&lt;br /&gt;
* [[osKickAvatar]]&lt;br /&gt;
* [[osOwnerSaveAppearance]]&lt;br /&gt;
* [[osRevokeScriptPermissions]]&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;
* [[osGetLinkInventoryKey]] {{new}}&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;
* [[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;
* [[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;
* [[osListSortInPlace]]&lt;br /&gt;
* [[osListSortInPlaceStrided]] {{new}}&lt;br /&gt;
* [[osIsUUID]]&lt;br /&gt;
{{multicol-break}}&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;
* [[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;
* [[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>Ubit</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>2025-05-06T22:36:07Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: /* Terrain */&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;
* [[osGrantScriptPermissions]]&lt;br /&gt;
* [[osInviteToGroup]]&lt;br /&gt;
* [[osKickAvatar]]&lt;br /&gt;
* [[osOwnerSaveAppearance]]&lt;br /&gt;
* [[osRevokeScriptPermissions]]&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;
* [[osGetLinkInventoryKey]] {{new}}&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;
* [[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;
* [[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;
* [[osListSortInPlace]]&lt;br /&gt;
* [[osListSortInPlaceStrided]] {{new}}&lt;br /&gt;
* [[osIsUUID]]&lt;br /&gt;
{{multicol-break}}&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;
* [[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;
* [[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>Ubit</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>2025-05-06T22:35:10Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: /* Terrain */&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;
* [[osGrantScriptPermissions]]&lt;br /&gt;
* [[osInviteToGroup]]&lt;br /&gt;
* [[osKickAvatar]]&lt;br /&gt;
* [[osOwnerSaveAppearance]]&lt;br /&gt;
* [[osRevokeScriptPermissions]]&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;
* [[osGetLinkInventoryKey]] {{new}}&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;
* [[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;
* [[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;
* [[osGetTerrainHeight]] &lt;br /&gt;
* [[osSetTerrainHeight]] &lt;br /&gt;
* [[osSetTerrainTexture]]&lt;br /&gt;
* [[osSetTerrainTextures]] {{new}}&lt;br /&gt;
* [[osSetTerrainTextureHeight]]&lt;br /&gt;
* [[osTerrainFlush]]&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;
* [[osListSortInPlace]]&lt;br /&gt;
* [[osListSortInPlaceStrided]] {{new}}&lt;br /&gt;
* [[osIsUUID]]&lt;br /&gt;
{{multicol-break}}&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;
* [[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;
* [[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>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetTerrainTexture</id>
		<title>OsSetTerrainTexture</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetTerrainTexture"/>
				<updated>2025-05-06T22:33:20Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax= osSetTerrainTexture(integer level, key texture)&lt;br /&gt;
|description=&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Obsolete&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; use [[osSetTerrainTextures]]&amp;lt;br&amp;gt;&lt;br /&gt;
Set the terrain texture of the estate to the texture given as key for legacy viewers and map. The level can be 0, 1, 2 or 3.&amp;lt;br&amp;gt;&lt;br /&gt;
This will not set the textures seen by recent viewers, use instead [[osSetTerrainTextures]]&lt;br /&gt;
&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|permissions=ESTATE_MANAGER,ESTATE_OWNER&lt;br /&gt;
|delay=0&lt;br /&gt;
|ossl_example=&amp;lt;source lang = &amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Default Terrain Textures by djphil 2018&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        osSetTerrainTexture(0, &amp;quot;b8d3965a-ad78-bf43-699b-bff8eca6c975&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(0, 10.0, 60.0);&lt;br /&gt;
        osSetTerrainTexture(1, &amp;quot;abb783e6-3e93-26c0-248a-247666855da3&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(1, 10.0, 60.0);&lt;br /&gt;
        osSetTerrainTexture(2, &amp;quot;179cdabd-398a-9b6b-1391-4dc333ba321f&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(2, 10.0, 60.0);&lt;br /&gt;
        osSetTerrainTexture(3, &amp;quot;beb169c7-11ea-fff2-efe5-0f24dc881df2&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(3, 10.0, 60.0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Random Terrain Texture&lt;br /&gt;
&lt;br /&gt;
integer gTimerInterval = 300;  // 300 seconds (5 minutes)&lt;br /&gt;
&lt;br /&gt;
changeTextures()&lt;br /&gt;
{&lt;br /&gt;
    // Get the number of terrain textures in the prim inventory&lt;br /&gt;
    integer numTextures = llGetInventoryNumber(INVENTORY_TEXTURE);&lt;br /&gt;
&lt;br /&gt;
    // If there is at least one terrain texture&lt;br /&gt;
    if (numTextures &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        // Loop through each corner&lt;br /&gt;
        integer i;&lt;br /&gt;
        for (i = 0; i &amp;lt; 4; ++i)&lt;br /&gt;
        {&lt;br /&gt;
            // Select a random terrain texture from the inventory&lt;br /&gt;
            string randomTextureName = llGetInventoryName(INVENTORY_TEXTURE, llFloor(llFrand(numTextures)));&lt;br /&gt;
&lt;br /&gt;
            // Get the UUID&lt;br /&gt;
            key randomTextureUUID = llGetInventoryKey(randomTextureName);&lt;br /&gt;
&lt;br /&gt;
            // Set the selected terrain texture for the current corner&lt;br /&gt;
            osSetTerrainTexture(i, randomTextureUUID);&lt;br /&gt;
&lt;br /&gt;
            // Display the selected random texture UUID in chat&lt;br /&gt;
            llOwnerSay(&amp;quot;Selected random terrain texture&amp;quot; + (string)i + &amp;quot;: &amp;quot; + randomTextureName + &amp;quot; - &amp;quot; + randomTextureUUID);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(&amp;quot;No terrain textures found in the prim inventory.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // Start the timer to change textures every xxx seconds&lt;br /&gt;
        llSetTimerEvent(gTimerInterval);&lt;br /&gt;
        // Initial texture change&lt;br /&gt;
        changeTextures();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        // Change textures when the timer fires&lt;br /&gt;
        changeTextures();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
osSetTerrainTexture(integer level, key texture)&lt;br /&gt;
osSetTerrainTextureHeight(integer corner, float low, float high) &lt;br /&gt;
&lt;br /&gt;
Material:&lt;br /&gt;
Base Color&lt;br /&gt;
Metallic-Roughness&lt;br /&gt;
Emissive&lt;br /&gt;
Normal&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// This line defines an integer variable 'currentTextureSet'.&lt;br /&gt;
// This variable is used to store the current texture set.&lt;br /&gt;
// The value 0 represents Texture Set A, and the value 1 represents Texture Set B.&lt;br /&gt;
integer currentTextureSet = 0;&lt;br /&gt;
float TextureLow = 10.0;&lt;br /&gt;
float TextureHigh = 60.0;&lt;br /&gt;
&lt;br /&gt;
// Standard Texture Set A (Base color only)&lt;br /&gt;
key Terrain_Dirt_A = &amp;quot;b8d3965a-ad78-bf43-699b-bff8eca6c975&amp;quot;;&lt;br /&gt;
key Terrain_Grass_A = &amp;quot;abb783e6-3e93-26c0-248a-247666855da3&amp;quot;;&lt;br /&gt;
key Terrain_Mountain_A = &amp;quot;179cdabd-398a-9b6b-1391-4dc333ba321f&amp;quot;;&lt;br /&gt;
key Terrain_Rock_A = &amp;quot;beb169c7-11ea-fff2-efe5-0f24dc881df2&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// PBR Texture Set B (Material)&lt;br /&gt;
key Terrain_Dirt_B = &amp;quot;8da1cb17-8ced-4a70-94e8-41b2c45d952d&amp;quot;;&lt;br /&gt;
key Terrain_Grass_B = &amp;quot;4d1ec4f5-069a-4301-aa12-7d3cc5d46a70&amp;quot;;&lt;br /&gt;
key Terrain_Mountain_B = &amp;quot;95b317e4-c671-46d3-818a-270641aeb463&amp;quot;;&lt;br /&gt;
key Terrain_Rock_B = &amp;quot;f1bc94f2-f276-4aff-8687-5501e42148ac&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// This function sets the texture to Texture Set A.&lt;br /&gt;
// It is called to set the default texture set.&lt;br /&gt;
setTextureSetA()&lt;br /&gt;
{&lt;br /&gt;
    osSetTerrainTexture(0, Terrain_Dirt_A);&lt;br /&gt;
    osSetTerrainTextureHeight(0, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(1, Terrain_Grass_A);&lt;br /&gt;
    osSetTerrainTextureHeight(1, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(2, Terrain_Mountain_A);&lt;br /&gt;
    osSetTerrainTextureHeight(2, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(3, Terrain_Rock_A);&lt;br /&gt;
    osSetTerrainTextureHeight(3, TextureLow, TextureHigh);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// This function sets the texture to Texture Set B.&lt;br /&gt;
// It is called to set the alternative texture set.&lt;br /&gt;
setTextureSetB()&lt;br /&gt;
{&lt;br /&gt;
    osSetTerrainTexture(0, Terrain_Dirt_B);&lt;br /&gt;
    osSetTerrainTextureHeight(0, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(1, Terrain_Grass_B);&lt;br /&gt;
    osSetTerrainTextureHeight(1, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(2, Terrain_Mountain_B);&lt;br /&gt;
    osSetTerrainTextureHeight(2, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(3, Terrain_Rock_B);&lt;br /&gt;
    osSetTerrainTextureHeight(3, TextureLow, TextureHigh);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // This function is called upon entering the state.&lt;br /&gt;
        // It sets the initial texture set to Texture Set A.&lt;br /&gt;
        setTextureSetA();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        // This function is called when the object is touched.&lt;br /&gt;
        // It toggles between Texture Set A and B.&lt;br /&gt;
        if (currentTextureSet == 0)&lt;br /&gt;
        {&lt;br /&gt;
            setTextureSetB();&lt;br /&gt;
            currentTextureSet = 1;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            setTextureSetA();&lt;br /&gt;
            currentTextureSet = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|additional_info=This function was added in 0.7.4-post-fixes&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetTerrainTexture</id>
		<title>OsSetTerrainTexture</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetTerrainTexture"/>
				<updated>2025-05-06T22:29:48Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax= osSetTerrainTexture(integer level, key texture)&lt;br /&gt;
|csharp_syntax=&lt;br /&gt;
|description=&lt;br /&gt;
&amp;lt;b&amp;gt;Obsolete&amp;lt;/b&amp;gt; use [[osSetTerrainTextures]]&amp;lt;br&amp;gt;&lt;br /&gt;
Set the terrain texture of the estate to the texture given as key for legacy viewers and map. The level can be 0, 1, 2 or 3.&amp;lt;br&amp;gt;&lt;br /&gt;
This will not set the textures seen by recent viewers, use instead [[osSetTerrainTextures]]&lt;br /&gt;
&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|permissions=ESTATE_MANAGER,ESTATE_OWNER&lt;br /&gt;
|delay=0&lt;br /&gt;
|ossl_example=&amp;lt;source lang = &amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Default Terrain Textures by djphil 2018&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        osSetTerrainTexture(0, &amp;quot;b8d3965a-ad78-bf43-699b-bff8eca6c975&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(0, 10.0, 60.0);&lt;br /&gt;
        osSetTerrainTexture(1, &amp;quot;abb783e6-3e93-26c0-248a-247666855da3&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(1, 10.0, 60.0);&lt;br /&gt;
        osSetTerrainTexture(2, &amp;quot;179cdabd-398a-9b6b-1391-4dc333ba321f&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(2, 10.0, 60.0);&lt;br /&gt;
        osSetTerrainTexture(3, &amp;quot;beb169c7-11ea-fff2-efe5-0f24dc881df2&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(3, 10.0, 60.0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Random Terrain Texture&lt;br /&gt;
&lt;br /&gt;
integer gTimerInterval = 300;  // 300 seconds (5 minutes)&lt;br /&gt;
&lt;br /&gt;
changeTextures()&lt;br /&gt;
{&lt;br /&gt;
    // Get the number of terrain textures in the prim inventory&lt;br /&gt;
    integer numTextures = llGetInventoryNumber(INVENTORY_TEXTURE);&lt;br /&gt;
&lt;br /&gt;
    // If there is at least one terrain texture&lt;br /&gt;
    if (numTextures &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        // Loop through each corner&lt;br /&gt;
        integer i;&lt;br /&gt;
        for (i = 0; i &amp;lt; 4; ++i)&lt;br /&gt;
        {&lt;br /&gt;
            // Select a random terrain texture from the inventory&lt;br /&gt;
            string randomTextureName = llGetInventoryName(INVENTORY_TEXTURE, llFloor(llFrand(numTextures)));&lt;br /&gt;
&lt;br /&gt;
            // Get the UUID&lt;br /&gt;
            key randomTextureUUID = llGetInventoryKey(randomTextureName);&lt;br /&gt;
&lt;br /&gt;
            // Set the selected terrain texture for the current corner&lt;br /&gt;
            osSetTerrainTexture(i, randomTextureUUID);&lt;br /&gt;
&lt;br /&gt;
            // Display the selected random texture UUID in chat&lt;br /&gt;
            llOwnerSay(&amp;quot;Selected random terrain texture&amp;quot; + (string)i + &amp;quot;: &amp;quot; + randomTextureName + &amp;quot; - &amp;quot; + randomTextureUUID);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(&amp;quot;No terrain textures found in the prim inventory.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // Start the timer to change textures every xxx seconds&lt;br /&gt;
        llSetTimerEvent(gTimerInterval);&lt;br /&gt;
        // Initial texture change&lt;br /&gt;
        changeTextures();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        // Change textures when the timer fires&lt;br /&gt;
        changeTextures();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
osSetTerrainTexture(integer level, key texture)&lt;br /&gt;
osSetTerrainTextureHeight(integer corner, float low, float high) &lt;br /&gt;
&lt;br /&gt;
Material:&lt;br /&gt;
Base Color&lt;br /&gt;
Metallic-Roughness&lt;br /&gt;
Emissive&lt;br /&gt;
Normal&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// This line defines an integer variable 'currentTextureSet'.&lt;br /&gt;
// This variable is used to store the current texture set.&lt;br /&gt;
// The value 0 represents Texture Set A, and the value 1 represents Texture Set B.&lt;br /&gt;
integer currentTextureSet = 0;&lt;br /&gt;
float TextureLow = 10.0;&lt;br /&gt;
float TextureHigh = 60.0;&lt;br /&gt;
&lt;br /&gt;
// Standard Texture Set A (Base color only)&lt;br /&gt;
key Terrain_Dirt_A = &amp;quot;b8d3965a-ad78-bf43-699b-bff8eca6c975&amp;quot;;&lt;br /&gt;
key Terrain_Grass_A = &amp;quot;abb783e6-3e93-26c0-248a-247666855da3&amp;quot;;&lt;br /&gt;
key Terrain_Mountain_A = &amp;quot;179cdabd-398a-9b6b-1391-4dc333ba321f&amp;quot;;&lt;br /&gt;
key Terrain_Rock_A = &amp;quot;beb169c7-11ea-fff2-efe5-0f24dc881df2&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// PBR Texture Set B (Material)&lt;br /&gt;
key Terrain_Dirt_B = &amp;quot;8da1cb17-8ced-4a70-94e8-41b2c45d952d&amp;quot;;&lt;br /&gt;
key Terrain_Grass_B = &amp;quot;4d1ec4f5-069a-4301-aa12-7d3cc5d46a70&amp;quot;;&lt;br /&gt;
key Terrain_Mountain_B = &amp;quot;95b317e4-c671-46d3-818a-270641aeb463&amp;quot;;&lt;br /&gt;
key Terrain_Rock_B = &amp;quot;f1bc94f2-f276-4aff-8687-5501e42148ac&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// This function sets the texture to Texture Set A.&lt;br /&gt;
// It is called to set the default texture set.&lt;br /&gt;
setTextureSetA()&lt;br /&gt;
{&lt;br /&gt;
    osSetTerrainTexture(0, Terrain_Dirt_A);&lt;br /&gt;
    osSetTerrainTextureHeight(0, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(1, Terrain_Grass_A);&lt;br /&gt;
    osSetTerrainTextureHeight(1, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(2, Terrain_Mountain_A);&lt;br /&gt;
    osSetTerrainTextureHeight(2, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(3, Terrain_Rock_A);&lt;br /&gt;
    osSetTerrainTextureHeight(3, TextureLow, TextureHigh);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// This function sets the texture to Texture Set B.&lt;br /&gt;
// It is called to set the alternative texture set.&lt;br /&gt;
setTextureSetB()&lt;br /&gt;
{&lt;br /&gt;
    osSetTerrainTexture(0, Terrain_Dirt_B);&lt;br /&gt;
    osSetTerrainTextureHeight(0, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(1, Terrain_Grass_B);&lt;br /&gt;
    osSetTerrainTextureHeight(1, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(2, Terrain_Mountain_B);&lt;br /&gt;
    osSetTerrainTextureHeight(2, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(3, Terrain_Rock_B);&lt;br /&gt;
    osSetTerrainTextureHeight(3, TextureLow, TextureHigh);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // This function is called upon entering the state.&lt;br /&gt;
        // It sets the initial texture set to Texture Set A.&lt;br /&gt;
        setTextureSetA();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        // This function is called when the object is touched.&lt;br /&gt;
        // It toggles between Texture Set A and B.&lt;br /&gt;
        if (currentTextureSet == 0)&lt;br /&gt;
        {&lt;br /&gt;
            setTextureSetB();&lt;br /&gt;
            currentTextureSet = 1;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            setTextureSetA();&lt;br /&gt;
            currentTextureSet = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|additional_info=This function was added in 0.7.4-post-fixes&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetTerrainTexture</id>
		<title>OsSetTerrainTexture</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetTerrainTexture"/>
				<updated>2025-05-06T22:28:37Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax= osSetTerrainTexture(integer level, key texture)&lt;br /&gt;
|csharp_syntax=&lt;br /&gt;
|description=Set the terrain texture of the estate to the texture given as key for legacy viewers and map. The level can be 0, 1, 2 or 3.&amp;lt;br&amp;gt;&lt;br /&gt;
This will not set the textures seen by recent viewers, use instead [[osSetTerrainTextures]]&lt;br /&gt;
&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|permissions=ESTATE_MANAGER,ESTATE_OWNER&lt;br /&gt;
|delay=0&lt;br /&gt;
|ossl_example=&amp;lt;source lang = &amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Default Terrain Textures by djphil 2018&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        osSetTerrainTexture(0, &amp;quot;b8d3965a-ad78-bf43-699b-bff8eca6c975&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(0, 10.0, 60.0);&lt;br /&gt;
        osSetTerrainTexture(1, &amp;quot;abb783e6-3e93-26c0-248a-247666855da3&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(1, 10.0, 60.0);&lt;br /&gt;
        osSetTerrainTexture(2, &amp;quot;179cdabd-398a-9b6b-1391-4dc333ba321f&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(2, 10.0, 60.0);&lt;br /&gt;
        osSetTerrainTexture(3, &amp;quot;beb169c7-11ea-fff2-efe5-0f24dc881df2&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(3, 10.0, 60.0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Random Terrain Texture&lt;br /&gt;
&lt;br /&gt;
integer gTimerInterval = 300;  // 300 seconds (5 minutes)&lt;br /&gt;
&lt;br /&gt;
changeTextures()&lt;br /&gt;
{&lt;br /&gt;
    // Get the number of terrain textures in the prim inventory&lt;br /&gt;
    integer numTextures = llGetInventoryNumber(INVENTORY_TEXTURE);&lt;br /&gt;
&lt;br /&gt;
    // If there is at least one terrain texture&lt;br /&gt;
    if (numTextures &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        // Loop through each corner&lt;br /&gt;
        integer i;&lt;br /&gt;
        for (i = 0; i &amp;lt; 4; ++i)&lt;br /&gt;
        {&lt;br /&gt;
            // Select a random terrain texture from the inventory&lt;br /&gt;
            string randomTextureName = llGetInventoryName(INVENTORY_TEXTURE, llFloor(llFrand(numTextures)));&lt;br /&gt;
&lt;br /&gt;
            // Get the UUID&lt;br /&gt;
            key randomTextureUUID = llGetInventoryKey(randomTextureName);&lt;br /&gt;
&lt;br /&gt;
            // Set the selected terrain texture for the current corner&lt;br /&gt;
            osSetTerrainTexture(i, randomTextureUUID);&lt;br /&gt;
&lt;br /&gt;
            // Display the selected random texture UUID in chat&lt;br /&gt;
            llOwnerSay(&amp;quot;Selected random terrain texture&amp;quot; + (string)i + &amp;quot;: &amp;quot; + randomTextureName + &amp;quot; - &amp;quot; + randomTextureUUID);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(&amp;quot;No terrain textures found in the prim inventory.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // Start the timer to change textures every xxx seconds&lt;br /&gt;
        llSetTimerEvent(gTimerInterval);&lt;br /&gt;
        // Initial texture change&lt;br /&gt;
        changeTextures();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        // Change textures when the timer fires&lt;br /&gt;
        changeTextures();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
osSetTerrainTexture(integer level, key texture)&lt;br /&gt;
osSetTerrainTextureHeight(integer corner, float low, float high) &lt;br /&gt;
&lt;br /&gt;
Material:&lt;br /&gt;
Base Color&lt;br /&gt;
Metallic-Roughness&lt;br /&gt;
Emissive&lt;br /&gt;
Normal&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// This line defines an integer variable 'currentTextureSet'.&lt;br /&gt;
// This variable is used to store the current texture set.&lt;br /&gt;
// The value 0 represents Texture Set A, and the value 1 represents Texture Set B.&lt;br /&gt;
integer currentTextureSet = 0;&lt;br /&gt;
float TextureLow = 10.0;&lt;br /&gt;
float TextureHigh = 60.0;&lt;br /&gt;
&lt;br /&gt;
// Standard Texture Set A (Base color only)&lt;br /&gt;
key Terrain_Dirt_A = &amp;quot;b8d3965a-ad78-bf43-699b-bff8eca6c975&amp;quot;;&lt;br /&gt;
key Terrain_Grass_A = &amp;quot;abb783e6-3e93-26c0-248a-247666855da3&amp;quot;;&lt;br /&gt;
key Terrain_Mountain_A = &amp;quot;179cdabd-398a-9b6b-1391-4dc333ba321f&amp;quot;;&lt;br /&gt;
key Terrain_Rock_A = &amp;quot;beb169c7-11ea-fff2-efe5-0f24dc881df2&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// PBR Texture Set B (Material)&lt;br /&gt;
key Terrain_Dirt_B = &amp;quot;8da1cb17-8ced-4a70-94e8-41b2c45d952d&amp;quot;;&lt;br /&gt;
key Terrain_Grass_B = &amp;quot;4d1ec4f5-069a-4301-aa12-7d3cc5d46a70&amp;quot;;&lt;br /&gt;
key Terrain_Mountain_B = &amp;quot;95b317e4-c671-46d3-818a-270641aeb463&amp;quot;;&lt;br /&gt;
key Terrain_Rock_B = &amp;quot;f1bc94f2-f276-4aff-8687-5501e42148ac&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// This function sets the texture to Texture Set A.&lt;br /&gt;
// It is called to set the default texture set.&lt;br /&gt;
setTextureSetA()&lt;br /&gt;
{&lt;br /&gt;
    osSetTerrainTexture(0, Terrain_Dirt_A);&lt;br /&gt;
    osSetTerrainTextureHeight(0, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(1, Terrain_Grass_A);&lt;br /&gt;
    osSetTerrainTextureHeight(1, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(2, Terrain_Mountain_A);&lt;br /&gt;
    osSetTerrainTextureHeight(2, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(3, Terrain_Rock_A);&lt;br /&gt;
    osSetTerrainTextureHeight(3, TextureLow, TextureHigh);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// This function sets the texture to Texture Set B.&lt;br /&gt;
// It is called to set the alternative texture set.&lt;br /&gt;
setTextureSetB()&lt;br /&gt;
{&lt;br /&gt;
    osSetTerrainTexture(0, Terrain_Dirt_B);&lt;br /&gt;
    osSetTerrainTextureHeight(0, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(1, Terrain_Grass_B);&lt;br /&gt;
    osSetTerrainTextureHeight(1, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(2, Terrain_Mountain_B);&lt;br /&gt;
    osSetTerrainTextureHeight(2, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(3, Terrain_Rock_B);&lt;br /&gt;
    osSetTerrainTextureHeight(3, TextureLow, TextureHigh);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // This function is called upon entering the state.&lt;br /&gt;
        // It sets the initial texture set to Texture Set A.&lt;br /&gt;
        setTextureSetA();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        // This function is called when the object is touched.&lt;br /&gt;
        // It toggles between Texture Set A and B.&lt;br /&gt;
        if (currentTextureSet == 0)&lt;br /&gt;
        {&lt;br /&gt;
            setTextureSetB();&lt;br /&gt;
            currentTextureSet = 1;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            setTextureSetA();&lt;br /&gt;
            currentTextureSet = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|additional_info=This function was added in 0.7.4-post-fixes&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetTerrainTexture</id>
		<title>OsSetTerrainTexture</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetTerrainTexture"/>
				<updated>2025-05-06T22:28:09Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax= osSetTerrainTexture(integer level, key texture)&lt;br /&gt;
|csharp_syntax=&lt;br /&gt;
|description=Set the terrain texture of the estate to the texture given as key for legacy viewers and map. The level can be 0, 1, 2 or 3.&amp;lt;br&amp;gt;&lt;br /&gt;
This will not set the textures seen by PBR viewers, use instead [[osSetTerrainTextures]]&lt;br /&gt;
&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|permissions=ESTATE_MANAGER,ESTATE_OWNER&lt;br /&gt;
|delay=0&lt;br /&gt;
|ossl_example=&amp;lt;source lang = &amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Default Terrain Textures by djphil 2018&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        osSetTerrainTexture(0, &amp;quot;b8d3965a-ad78-bf43-699b-bff8eca6c975&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(0, 10.0, 60.0);&lt;br /&gt;
        osSetTerrainTexture(1, &amp;quot;abb783e6-3e93-26c0-248a-247666855da3&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(1, 10.0, 60.0);&lt;br /&gt;
        osSetTerrainTexture(2, &amp;quot;179cdabd-398a-9b6b-1391-4dc333ba321f&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(2, 10.0, 60.0);&lt;br /&gt;
        osSetTerrainTexture(3, &amp;quot;beb169c7-11ea-fff2-efe5-0f24dc881df2&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(3, 10.0, 60.0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Random Terrain Texture&lt;br /&gt;
&lt;br /&gt;
integer gTimerInterval = 300;  // 300 seconds (5 minutes)&lt;br /&gt;
&lt;br /&gt;
changeTextures()&lt;br /&gt;
{&lt;br /&gt;
    // Get the number of terrain textures in the prim inventory&lt;br /&gt;
    integer numTextures = llGetInventoryNumber(INVENTORY_TEXTURE);&lt;br /&gt;
&lt;br /&gt;
    // If there is at least one terrain texture&lt;br /&gt;
    if (numTextures &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        // Loop through each corner&lt;br /&gt;
        integer i;&lt;br /&gt;
        for (i = 0; i &amp;lt; 4; ++i)&lt;br /&gt;
        {&lt;br /&gt;
            // Select a random terrain texture from the inventory&lt;br /&gt;
            string randomTextureName = llGetInventoryName(INVENTORY_TEXTURE, llFloor(llFrand(numTextures)));&lt;br /&gt;
&lt;br /&gt;
            // Get the UUID&lt;br /&gt;
            key randomTextureUUID = llGetInventoryKey(randomTextureName);&lt;br /&gt;
&lt;br /&gt;
            // Set the selected terrain texture for the current corner&lt;br /&gt;
            osSetTerrainTexture(i, randomTextureUUID);&lt;br /&gt;
&lt;br /&gt;
            // Display the selected random texture UUID in chat&lt;br /&gt;
            llOwnerSay(&amp;quot;Selected random terrain texture&amp;quot; + (string)i + &amp;quot;: &amp;quot; + randomTextureName + &amp;quot; - &amp;quot; + randomTextureUUID);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(&amp;quot;No terrain textures found in the prim inventory.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // Start the timer to change textures every xxx seconds&lt;br /&gt;
        llSetTimerEvent(gTimerInterval);&lt;br /&gt;
        // Initial texture change&lt;br /&gt;
        changeTextures();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        // Change textures when the timer fires&lt;br /&gt;
        changeTextures();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
osSetTerrainTexture(integer level, key texture)&lt;br /&gt;
osSetTerrainTextureHeight(integer corner, float low, float high) &lt;br /&gt;
&lt;br /&gt;
Material:&lt;br /&gt;
Base Color&lt;br /&gt;
Metallic-Roughness&lt;br /&gt;
Emissive&lt;br /&gt;
Normal&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// This line defines an integer variable 'currentTextureSet'.&lt;br /&gt;
// This variable is used to store the current texture set.&lt;br /&gt;
// The value 0 represents Texture Set A, and the value 1 represents Texture Set B.&lt;br /&gt;
integer currentTextureSet = 0;&lt;br /&gt;
float TextureLow = 10.0;&lt;br /&gt;
float TextureHigh = 60.0;&lt;br /&gt;
&lt;br /&gt;
// Standard Texture Set A (Base color only)&lt;br /&gt;
key Terrain_Dirt_A = &amp;quot;b8d3965a-ad78-bf43-699b-bff8eca6c975&amp;quot;;&lt;br /&gt;
key Terrain_Grass_A = &amp;quot;abb783e6-3e93-26c0-248a-247666855da3&amp;quot;;&lt;br /&gt;
key Terrain_Mountain_A = &amp;quot;179cdabd-398a-9b6b-1391-4dc333ba321f&amp;quot;;&lt;br /&gt;
key Terrain_Rock_A = &amp;quot;beb169c7-11ea-fff2-efe5-0f24dc881df2&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// PBR Texture Set B (Material)&lt;br /&gt;
key Terrain_Dirt_B = &amp;quot;8da1cb17-8ced-4a70-94e8-41b2c45d952d&amp;quot;;&lt;br /&gt;
key Terrain_Grass_B = &amp;quot;4d1ec4f5-069a-4301-aa12-7d3cc5d46a70&amp;quot;;&lt;br /&gt;
key Terrain_Mountain_B = &amp;quot;95b317e4-c671-46d3-818a-270641aeb463&amp;quot;;&lt;br /&gt;
key Terrain_Rock_B = &amp;quot;f1bc94f2-f276-4aff-8687-5501e42148ac&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// This function sets the texture to Texture Set A.&lt;br /&gt;
// It is called to set the default texture set.&lt;br /&gt;
setTextureSetA()&lt;br /&gt;
{&lt;br /&gt;
    osSetTerrainTexture(0, Terrain_Dirt_A);&lt;br /&gt;
    osSetTerrainTextureHeight(0, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(1, Terrain_Grass_A);&lt;br /&gt;
    osSetTerrainTextureHeight(1, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(2, Terrain_Mountain_A);&lt;br /&gt;
    osSetTerrainTextureHeight(2, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(3, Terrain_Rock_A);&lt;br /&gt;
    osSetTerrainTextureHeight(3, TextureLow, TextureHigh);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// This function sets the texture to Texture Set B.&lt;br /&gt;
// It is called to set the alternative texture set.&lt;br /&gt;
setTextureSetB()&lt;br /&gt;
{&lt;br /&gt;
    osSetTerrainTexture(0, Terrain_Dirt_B);&lt;br /&gt;
    osSetTerrainTextureHeight(0, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(1, Terrain_Grass_B);&lt;br /&gt;
    osSetTerrainTextureHeight(1, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(2, Terrain_Mountain_B);&lt;br /&gt;
    osSetTerrainTextureHeight(2, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(3, Terrain_Rock_B);&lt;br /&gt;
    osSetTerrainTextureHeight(3, TextureLow, TextureHigh);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // This function is called upon entering the state.&lt;br /&gt;
        // It sets the initial texture set to Texture Set A.&lt;br /&gt;
        setTextureSetA();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        // This function is called when the object is touched.&lt;br /&gt;
        // It toggles between Texture Set A and B.&lt;br /&gt;
        if (currentTextureSet == 0)&lt;br /&gt;
        {&lt;br /&gt;
            setTextureSetB();&lt;br /&gt;
            currentTextureSet = 1;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            setTextureSetA();&lt;br /&gt;
            currentTextureSet = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|additional_info=This function was added in 0.7.4-post-fixes&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetTerrainTexture</id>
		<title>OsSetTerrainTexture</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetTerrainTexture"/>
				<updated>2025-05-06T22:26:27Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax= osSetTerrainTexture(integer level, key texture)&lt;br /&gt;
|csharp_syntax=&lt;br /&gt;
|description=Set the terrain texture of the estate to the texture given as key for legacy viewers and map. The level can be 0, 1, 2 or 3.&amp;lt;br&amp;gt;&lt;br /&gt;
use instead [[osSetTerrainTextures]]&lt;br /&gt;
&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|permissions=ESTATE_MANAGER,ESTATE_OWNER&lt;br /&gt;
|delay=0&lt;br /&gt;
|ossl_example=&amp;lt;source lang = &amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Default Terrain Textures by djphil 2018&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        osSetTerrainTexture(0, &amp;quot;b8d3965a-ad78-bf43-699b-bff8eca6c975&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(0, 10.0, 60.0);&lt;br /&gt;
        osSetTerrainTexture(1, &amp;quot;abb783e6-3e93-26c0-248a-247666855da3&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(1, 10.0, 60.0);&lt;br /&gt;
        osSetTerrainTexture(2, &amp;quot;179cdabd-398a-9b6b-1391-4dc333ba321f&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(2, 10.0, 60.0);&lt;br /&gt;
        osSetTerrainTexture(3, &amp;quot;beb169c7-11ea-fff2-efe5-0f24dc881df2&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(3, 10.0, 60.0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Random Terrain Texture&lt;br /&gt;
&lt;br /&gt;
integer gTimerInterval = 300;  // 300 seconds (5 minutes)&lt;br /&gt;
&lt;br /&gt;
changeTextures()&lt;br /&gt;
{&lt;br /&gt;
    // Get the number of terrain textures in the prim inventory&lt;br /&gt;
    integer numTextures = llGetInventoryNumber(INVENTORY_TEXTURE);&lt;br /&gt;
&lt;br /&gt;
    // If there is at least one terrain texture&lt;br /&gt;
    if (numTextures &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        // Loop through each corner&lt;br /&gt;
        integer i;&lt;br /&gt;
        for (i = 0; i &amp;lt; 4; ++i)&lt;br /&gt;
        {&lt;br /&gt;
            // Select a random terrain texture from the inventory&lt;br /&gt;
            string randomTextureName = llGetInventoryName(INVENTORY_TEXTURE, llFloor(llFrand(numTextures)));&lt;br /&gt;
&lt;br /&gt;
            // Get the UUID&lt;br /&gt;
            key randomTextureUUID = llGetInventoryKey(randomTextureName);&lt;br /&gt;
&lt;br /&gt;
            // Set the selected terrain texture for the current corner&lt;br /&gt;
            osSetTerrainTexture(i, randomTextureUUID);&lt;br /&gt;
&lt;br /&gt;
            // Display the selected random texture UUID in chat&lt;br /&gt;
            llOwnerSay(&amp;quot;Selected random terrain texture&amp;quot; + (string)i + &amp;quot;: &amp;quot; + randomTextureName + &amp;quot; - &amp;quot; + randomTextureUUID);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(&amp;quot;No terrain textures found in the prim inventory.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // Start the timer to change textures every xxx seconds&lt;br /&gt;
        llSetTimerEvent(gTimerInterval);&lt;br /&gt;
        // Initial texture change&lt;br /&gt;
        changeTextures();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        // Change textures when the timer fires&lt;br /&gt;
        changeTextures();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
osSetTerrainTexture(integer level, key texture)&lt;br /&gt;
osSetTerrainTextureHeight(integer corner, float low, float high) &lt;br /&gt;
&lt;br /&gt;
Material:&lt;br /&gt;
Base Color&lt;br /&gt;
Metallic-Roughness&lt;br /&gt;
Emissive&lt;br /&gt;
Normal&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// This line defines an integer variable 'currentTextureSet'.&lt;br /&gt;
// This variable is used to store the current texture set.&lt;br /&gt;
// The value 0 represents Texture Set A, and the value 1 represents Texture Set B.&lt;br /&gt;
integer currentTextureSet = 0;&lt;br /&gt;
float TextureLow = 10.0;&lt;br /&gt;
float TextureHigh = 60.0;&lt;br /&gt;
&lt;br /&gt;
// Standard Texture Set A (Base color only)&lt;br /&gt;
key Terrain_Dirt_A = &amp;quot;b8d3965a-ad78-bf43-699b-bff8eca6c975&amp;quot;;&lt;br /&gt;
key Terrain_Grass_A = &amp;quot;abb783e6-3e93-26c0-248a-247666855da3&amp;quot;;&lt;br /&gt;
key Terrain_Mountain_A = &amp;quot;179cdabd-398a-9b6b-1391-4dc333ba321f&amp;quot;;&lt;br /&gt;
key Terrain_Rock_A = &amp;quot;beb169c7-11ea-fff2-efe5-0f24dc881df2&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// PBR Texture Set B (Material)&lt;br /&gt;
key Terrain_Dirt_B = &amp;quot;8da1cb17-8ced-4a70-94e8-41b2c45d952d&amp;quot;;&lt;br /&gt;
key Terrain_Grass_B = &amp;quot;4d1ec4f5-069a-4301-aa12-7d3cc5d46a70&amp;quot;;&lt;br /&gt;
key Terrain_Mountain_B = &amp;quot;95b317e4-c671-46d3-818a-270641aeb463&amp;quot;;&lt;br /&gt;
key Terrain_Rock_B = &amp;quot;f1bc94f2-f276-4aff-8687-5501e42148ac&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// This function sets the texture to Texture Set A.&lt;br /&gt;
// It is called to set the default texture set.&lt;br /&gt;
setTextureSetA()&lt;br /&gt;
{&lt;br /&gt;
    osSetTerrainTexture(0, Terrain_Dirt_A);&lt;br /&gt;
    osSetTerrainTextureHeight(0, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(1, Terrain_Grass_A);&lt;br /&gt;
    osSetTerrainTextureHeight(1, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(2, Terrain_Mountain_A);&lt;br /&gt;
    osSetTerrainTextureHeight(2, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(3, Terrain_Rock_A);&lt;br /&gt;
    osSetTerrainTextureHeight(3, TextureLow, TextureHigh);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// This function sets the texture to Texture Set B.&lt;br /&gt;
// It is called to set the alternative texture set.&lt;br /&gt;
setTextureSetB()&lt;br /&gt;
{&lt;br /&gt;
    osSetTerrainTexture(0, Terrain_Dirt_B);&lt;br /&gt;
    osSetTerrainTextureHeight(0, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(1, Terrain_Grass_B);&lt;br /&gt;
    osSetTerrainTextureHeight(1, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(2, Terrain_Mountain_B);&lt;br /&gt;
    osSetTerrainTextureHeight(2, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(3, Terrain_Rock_B);&lt;br /&gt;
    osSetTerrainTextureHeight(3, TextureLow, TextureHigh);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // This function is called upon entering the state.&lt;br /&gt;
        // It sets the initial texture set to Texture Set A.&lt;br /&gt;
        setTextureSetA();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        // This function is called when the object is touched.&lt;br /&gt;
        // It toggles between Texture Set A and B.&lt;br /&gt;
        if (currentTextureSet == 0)&lt;br /&gt;
        {&lt;br /&gt;
            setTextureSetB();&lt;br /&gt;
            currentTextureSet = 1;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            setTextureSetA();&lt;br /&gt;
            currentTextureSet = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|additional_info=This function was added in 0.7.4-post-fixes&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetTerrainTexture</id>
		<title>OsSetTerrainTexture</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetTerrainTexture"/>
				<updated>2025-05-06T22:26:00Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax= osSetTerrainTexture(integer level, key texture)&lt;br /&gt;
|csharp_syntax=&lt;br /&gt;
|description=Set the terrain texture of the estate to the texture given as key for legacy viewers and map. The level can be 0, 1, 2 or 3.&amp;lt;br&amp;gt;&lt;br /&gt;
use instead [osSetTerrainTexture]&lt;br /&gt;
&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|permissions=ESTATE_MANAGER,ESTATE_OWNER&lt;br /&gt;
|delay=0&lt;br /&gt;
|ossl_example=&amp;lt;source lang = &amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Default Terrain Textures by djphil 2018&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        osSetTerrainTexture(0, &amp;quot;b8d3965a-ad78-bf43-699b-bff8eca6c975&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(0, 10.0, 60.0);&lt;br /&gt;
        osSetTerrainTexture(1, &amp;quot;abb783e6-3e93-26c0-248a-247666855da3&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(1, 10.0, 60.0);&lt;br /&gt;
        osSetTerrainTexture(2, &amp;quot;179cdabd-398a-9b6b-1391-4dc333ba321f&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(2, 10.0, 60.0);&lt;br /&gt;
        osSetTerrainTexture(3, &amp;quot;beb169c7-11ea-fff2-efe5-0f24dc881df2&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(3, 10.0, 60.0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Random Terrain Texture&lt;br /&gt;
&lt;br /&gt;
integer gTimerInterval = 300;  // 300 seconds (5 minutes)&lt;br /&gt;
&lt;br /&gt;
changeTextures()&lt;br /&gt;
{&lt;br /&gt;
    // Get the number of terrain textures in the prim inventory&lt;br /&gt;
    integer numTextures = llGetInventoryNumber(INVENTORY_TEXTURE);&lt;br /&gt;
&lt;br /&gt;
    // If there is at least one terrain texture&lt;br /&gt;
    if (numTextures &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        // Loop through each corner&lt;br /&gt;
        integer i;&lt;br /&gt;
        for (i = 0; i &amp;lt; 4; ++i)&lt;br /&gt;
        {&lt;br /&gt;
            // Select a random terrain texture from the inventory&lt;br /&gt;
            string randomTextureName = llGetInventoryName(INVENTORY_TEXTURE, llFloor(llFrand(numTextures)));&lt;br /&gt;
&lt;br /&gt;
            // Get the UUID&lt;br /&gt;
            key randomTextureUUID = llGetInventoryKey(randomTextureName);&lt;br /&gt;
&lt;br /&gt;
            // Set the selected terrain texture for the current corner&lt;br /&gt;
            osSetTerrainTexture(i, randomTextureUUID);&lt;br /&gt;
&lt;br /&gt;
            // Display the selected random texture UUID in chat&lt;br /&gt;
            llOwnerSay(&amp;quot;Selected random terrain texture&amp;quot; + (string)i + &amp;quot;: &amp;quot; + randomTextureName + &amp;quot; - &amp;quot; + randomTextureUUID);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(&amp;quot;No terrain textures found in the prim inventory.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // Start the timer to change textures every xxx seconds&lt;br /&gt;
        llSetTimerEvent(gTimerInterval);&lt;br /&gt;
        // Initial texture change&lt;br /&gt;
        changeTextures();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        // Change textures when the timer fires&lt;br /&gt;
        changeTextures();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
osSetTerrainTexture(integer level, key texture)&lt;br /&gt;
osSetTerrainTextureHeight(integer corner, float low, float high) &lt;br /&gt;
&lt;br /&gt;
Material:&lt;br /&gt;
Base Color&lt;br /&gt;
Metallic-Roughness&lt;br /&gt;
Emissive&lt;br /&gt;
Normal&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// This line defines an integer variable 'currentTextureSet'.&lt;br /&gt;
// This variable is used to store the current texture set.&lt;br /&gt;
// The value 0 represents Texture Set A, and the value 1 represents Texture Set B.&lt;br /&gt;
integer currentTextureSet = 0;&lt;br /&gt;
float TextureLow = 10.0;&lt;br /&gt;
float TextureHigh = 60.0;&lt;br /&gt;
&lt;br /&gt;
// Standard Texture Set A (Base color only)&lt;br /&gt;
key Terrain_Dirt_A = &amp;quot;b8d3965a-ad78-bf43-699b-bff8eca6c975&amp;quot;;&lt;br /&gt;
key Terrain_Grass_A = &amp;quot;abb783e6-3e93-26c0-248a-247666855da3&amp;quot;;&lt;br /&gt;
key Terrain_Mountain_A = &amp;quot;179cdabd-398a-9b6b-1391-4dc333ba321f&amp;quot;;&lt;br /&gt;
key Terrain_Rock_A = &amp;quot;beb169c7-11ea-fff2-efe5-0f24dc881df2&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// PBR Texture Set B (Material)&lt;br /&gt;
key Terrain_Dirt_B = &amp;quot;8da1cb17-8ced-4a70-94e8-41b2c45d952d&amp;quot;;&lt;br /&gt;
key Terrain_Grass_B = &amp;quot;4d1ec4f5-069a-4301-aa12-7d3cc5d46a70&amp;quot;;&lt;br /&gt;
key Terrain_Mountain_B = &amp;quot;95b317e4-c671-46d3-818a-270641aeb463&amp;quot;;&lt;br /&gt;
key Terrain_Rock_B = &amp;quot;f1bc94f2-f276-4aff-8687-5501e42148ac&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// This function sets the texture to Texture Set A.&lt;br /&gt;
// It is called to set the default texture set.&lt;br /&gt;
setTextureSetA()&lt;br /&gt;
{&lt;br /&gt;
    osSetTerrainTexture(0, Terrain_Dirt_A);&lt;br /&gt;
    osSetTerrainTextureHeight(0, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(1, Terrain_Grass_A);&lt;br /&gt;
    osSetTerrainTextureHeight(1, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(2, Terrain_Mountain_A);&lt;br /&gt;
    osSetTerrainTextureHeight(2, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(3, Terrain_Rock_A);&lt;br /&gt;
    osSetTerrainTextureHeight(3, TextureLow, TextureHigh);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// This function sets the texture to Texture Set B.&lt;br /&gt;
// It is called to set the alternative texture set.&lt;br /&gt;
setTextureSetB()&lt;br /&gt;
{&lt;br /&gt;
    osSetTerrainTexture(0, Terrain_Dirt_B);&lt;br /&gt;
    osSetTerrainTextureHeight(0, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(1, Terrain_Grass_B);&lt;br /&gt;
    osSetTerrainTextureHeight(1, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(2, Terrain_Mountain_B);&lt;br /&gt;
    osSetTerrainTextureHeight(2, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(3, Terrain_Rock_B);&lt;br /&gt;
    osSetTerrainTextureHeight(3, TextureLow, TextureHigh);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // This function is called upon entering the state.&lt;br /&gt;
        // It sets the initial texture set to Texture Set A.&lt;br /&gt;
        setTextureSetA();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        // This function is called when the object is touched.&lt;br /&gt;
        // It toggles between Texture Set A and B.&lt;br /&gt;
        if (currentTextureSet == 0)&lt;br /&gt;
        {&lt;br /&gt;
            setTextureSetB();&lt;br /&gt;
            currentTextureSet = 1;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            setTextureSetA();&lt;br /&gt;
            currentTextureSet = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|additional_info=This function was added in 0.7.4-post-fixes&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetTerrainTexture</id>
		<title>OsSetTerrainTexture</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetTerrainTexture"/>
				<updated>2025-05-06T22:25:37Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax= osSetTerrainTexture(integer level, key texture)&lt;br /&gt;
|csharp_syntax=&lt;br /&gt;
|description=Set the terrain texture of the estate to the texture given as key for legacy viewers and map. The level can be 0, 1, 2 or 3.&amp;lt;br&amp;gt;&lt;br /&gt;
use instead [[osSetTerrainTexture]]&lt;br /&gt;
&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|permissions=ESTATE_MANAGER,ESTATE_OWNER&lt;br /&gt;
|delay=0&lt;br /&gt;
|ossl_example=&amp;lt;source lang = &amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Default Terrain Textures by djphil 2018&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        osSetTerrainTexture(0, &amp;quot;b8d3965a-ad78-bf43-699b-bff8eca6c975&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(0, 10.0, 60.0);&lt;br /&gt;
        osSetTerrainTexture(1, &amp;quot;abb783e6-3e93-26c0-248a-247666855da3&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(1, 10.0, 60.0);&lt;br /&gt;
        osSetTerrainTexture(2, &amp;quot;179cdabd-398a-9b6b-1391-4dc333ba321f&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(2, 10.0, 60.0);&lt;br /&gt;
        osSetTerrainTexture(3, &amp;quot;beb169c7-11ea-fff2-efe5-0f24dc881df2&amp;quot;);&lt;br /&gt;
        osSetTerrainTextureHeight(3, 10.0, 60.0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Random Terrain Texture&lt;br /&gt;
&lt;br /&gt;
integer gTimerInterval = 300;  // 300 seconds (5 minutes)&lt;br /&gt;
&lt;br /&gt;
changeTextures()&lt;br /&gt;
{&lt;br /&gt;
    // Get the number of terrain textures in the prim inventory&lt;br /&gt;
    integer numTextures = llGetInventoryNumber(INVENTORY_TEXTURE);&lt;br /&gt;
&lt;br /&gt;
    // If there is at least one terrain texture&lt;br /&gt;
    if (numTextures &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        // Loop through each corner&lt;br /&gt;
        integer i;&lt;br /&gt;
        for (i = 0; i &amp;lt; 4; ++i)&lt;br /&gt;
        {&lt;br /&gt;
            // Select a random terrain texture from the inventory&lt;br /&gt;
            string randomTextureName = llGetInventoryName(INVENTORY_TEXTURE, llFloor(llFrand(numTextures)));&lt;br /&gt;
&lt;br /&gt;
            // Get the UUID&lt;br /&gt;
            key randomTextureUUID = llGetInventoryKey(randomTextureName);&lt;br /&gt;
&lt;br /&gt;
            // Set the selected terrain texture for the current corner&lt;br /&gt;
            osSetTerrainTexture(i, randomTextureUUID);&lt;br /&gt;
&lt;br /&gt;
            // Display the selected random texture UUID in chat&lt;br /&gt;
            llOwnerSay(&amp;quot;Selected random terrain texture&amp;quot; + (string)i + &amp;quot;: &amp;quot; + randomTextureName + &amp;quot; - &amp;quot; + randomTextureUUID);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(&amp;quot;No terrain textures found in the prim inventory.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // Start the timer to change textures every xxx seconds&lt;br /&gt;
        llSetTimerEvent(gTimerInterval);&lt;br /&gt;
        // Initial texture change&lt;br /&gt;
        changeTextures();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        // Change textures when the timer fires&lt;br /&gt;
        changeTextures();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
osSetTerrainTexture(integer level, key texture)&lt;br /&gt;
osSetTerrainTextureHeight(integer corner, float low, float high) &lt;br /&gt;
&lt;br /&gt;
Material:&lt;br /&gt;
Base Color&lt;br /&gt;
Metallic-Roughness&lt;br /&gt;
Emissive&lt;br /&gt;
Normal&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// This line defines an integer variable 'currentTextureSet'.&lt;br /&gt;
// This variable is used to store the current texture set.&lt;br /&gt;
// The value 0 represents Texture Set A, and the value 1 represents Texture Set B.&lt;br /&gt;
integer currentTextureSet = 0;&lt;br /&gt;
float TextureLow = 10.0;&lt;br /&gt;
float TextureHigh = 60.0;&lt;br /&gt;
&lt;br /&gt;
// Standard Texture Set A (Base color only)&lt;br /&gt;
key Terrain_Dirt_A = &amp;quot;b8d3965a-ad78-bf43-699b-bff8eca6c975&amp;quot;;&lt;br /&gt;
key Terrain_Grass_A = &amp;quot;abb783e6-3e93-26c0-248a-247666855da3&amp;quot;;&lt;br /&gt;
key Terrain_Mountain_A = &amp;quot;179cdabd-398a-9b6b-1391-4dc333ba321f&amp;quot;;&lt;br /&gt;
key Terrain_Rock_A = &amp;quot;beb169c7-11ea-fff2-efe5-0f24dc881df2&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// PBR Texture Set B (Material)&lt;br /&gt;
key Terrain_Dirt_B = &amp;quot;8da1cb17-8ced-4a70-94e8-41b2c45d952d&amp;quot;;&lt;br /&gt;
key Terrain_Grass_B = &amp;quot;4d1ec4f5-069a-4301-aa12-7d3cc5d46a70&amp;quot;;&lt;br /&gt;
key Terrain_Mountain_B = &amp;quot;95b317e4-c671-46d3-818a-270641aeb463&amp;quot;;&lt;br /&gt;
key Terrain_Rock_B = &amp;quot;f1bc94f2-f276-4aff-8687-5501e42148ac&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// This function sets the texture to Texture Set A.&lt;br /&gt;
// It is called to set the default texture set.&lt;br /&gt;
setTextureSetA()&lt;br /&gt;
{&lt;br /&gt;
    osSetTerrainTexture(0, Terrain_Dirt_A);&lt;br /&gt;
    osSetTerrainTextureHeight(0, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(1, Terrain_Grass_A);&lt;br /&gt;
    osSetTerrainTextureHeight(1, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(2, Terrain_Mountain_A);&lt;br /&gt;
    osSetTerrainTextureHeight(2, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(3, Terrain_Rock_A);&lt;br /&gt;
    osSetTerrainTextureHeight(3, TextureLow, TextureHigh);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// This function sets the texture to Texture Set B.&lt;br /&gt;
// It is called to set the alternative texture set.&lt;br /&gt;
setTextureSetB()&lt;br /&gt;
{&lt;br /&gt;
    osSetTerrainTexture(0, Terrain_Dirt_B);&lt;br /&gt;
    osSetTerrainTextureHeight(0, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(1, Terrain_Grass_B);&lt;br /&gt;
    osSetTerrainTextureHeight(1, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(2, Terrain_Mountain_B);&lt;br /&gt;
    osSetTerrainTextureHeight(2, TextureLow, TextureHigh);&lt;br /&gt;
    osSetTerrainTexture(3, Terrain_Rock_B);&lt;br /&gt;
    osSetTerrainTextureHeight(3, TextureLow, TextureHigh);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // This function is called upon entering the state.&lt;br /&gt;
        // It sets the initial texture set to Texture Set A.&lt;br /&gt;
        setTextureSetA();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        // This function is called when the object is touched.&lt;br /&gt;
        // It toggles between Texture Set A and B.&lt;br /&gt;
        if (currentTextureSet == 0)&lt;br /&gt;
        {&lt;br /&gt;
            setTextureSetB();&lt;br /&gt;
            currentTextureSet = 1;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            setTextureSetA();&lt;br /&gt;
            currentTextureSet = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|additional_info=This function was added in 0.7.4-post-fixes&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetTerrainTextures</id>
		<title>OsSetTerrainTextures</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetTerrainTextures"/>
				<updated>2025-05-06T22:24:06Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax= osSetTerrainTextures(list textureKeys, integer types)&lt;br /&gt;
|description=&lt;br /&gt;
Opensimulator regions store two sets of textures or materials keys:&lt;br /&gt;
* a set of texture keys for legacy viewers and map&lt;br /&gt;
* a set of texture or pbr material keys for new viewers.&amp;lt;br&amp;gt;&lt;br /&gt;
so this function allows to change those keys depending on the value of &amp;lt;b&amp;gt;types&amp;lt;/b&amp;gt;:&lt;br /&gt;
* 0 applies keys for legacy viewers and map, keys must represent textures&lt;br /&gt;
* 1 applies keys for new viewers, keys represent either textures or PBR materials&lt;br /&gt;
* 2 applies keys to to both, Keys must represent textures&lt;br /&gt;
The list &amp;lt;b&amp;gt;textureKeys&amp;lt;/b&amp;gt; must contain keys or names of 4 textures or 4 pbr materials. They must be of the same type due to viewers restrictions.&amp;lt;br&amp;gt;&lt;br /&gt;
This defines the textures or materials the viewer will use to draw the terrain texture&amp;lt;br&amp;gt;&lt;br /&gt;
They are ordered from low to high terrain height level, as on viewers World -&amp;gt; Region Details -&amp;gt; Terrain menu tab.&amp;lt;br&amp;gt;&lt;br /&gt;
If an entry is a name, then the material or texture must be present on the prim inventory.&amp;lt;br&amp;gt;&lt;br /&gt;
If an entry is an empty string, then that level is unchanged.&amp;lt;br&amp;gt;&lt;br /&gt;
Uses same threat level as osSetTerrainTexture in ossl_enable.ini&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|permissions=ESTATE_MANAGER,ESTATE_OWNER&lt;br /&gt;
|delay=0&lt;br /&gt;
|&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|additional_info=This function was added in 0.9.3.1&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetTerrainTextures</id>
		<title>OsSetTerrainTextures</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetTerrainTextures"/>
				<updated>2025-05-06T19:00:21Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax= osSetTerrainTextures(list textureKeys, integer types)&lt;br /&gt;
|description=&lt;br /&gt;
Opensimulator regions store two sets of textures or materials keys:&lt;br /&gt;
* a set of texture keys for legacy viewers and map&lt;br /&gt;
* a set of texture or pbr material keys for new viewers.&amp;lt;br&amp;gt;&lt;br /&gt;
so this function allows to change those keys depending on the value of &amp;lt;b&amp;gt;types&amp;lt;/b&amp;gt;:&lt;br /&gt;
* 0 applies keys for legacy viewers and map, keys must represent textures&lt;br /&gt;
* 1 applies keys for new viewers, keys represent either textures or PBR materials&lt;br /&gt;
* 2 applies keys to to both, Keys must represent textures&lt;br /&gt;
The list &amp;lt;b&amp;gt;textureKeys&amp;lt;/b&amp;gt; must contain keys or names of 4 textures or 4 pbr materials. They must be of the same type due to viewers restrictions.&amp;lt;br&amp;gt;&lt;br /&gt;
This defines the textures or materials the viewer will use to draw the terrain texture&amp;lt;br&amp;gt;&lt;br /&gt;
They are ordered from low to high terrain height level, as on viewers World -&amp;gt; Region Details -&amp;gt; Terrain menu tab.&amp;lt;br&amp;gt;&lt;br /&gt;
If an entry is a name, then the material or texture must be present on the prim inventory.&amp;lt;br&amp;gt;&lt;br /&gt;
If an entry is an empty string, then that level is unchanged.&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|permissions=ESTATE_MANAGER,ESTATE_OWNER&lt;br /&gt;
|delay=0&lt;br /&gt;
|&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|additional_info=This function was added in 0.9.3.1&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetTerrainTextures</id>
		<title>OsSetTerrainTextures</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetTerrainTextures"/>
				<updated>2025-05-06T18:10:29Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax= osSetTerrainTextures(list textureKeys, integer types)&lt;br /&gt;
|description=&lt;br /&gt;
Opensimulator regions store two sets of textures or materials keys:&lt;br /&gt;
* a set of texture keys for legacy viewers and map&lt;br /&gt;
* a set of texture or pbr material keys for new viewers.&amp;lt;br&amp;gt;&lt;br /&gt;
so this function allows to change those keys depending on the value of &amp;lt;b&amp;gt;types&amp;lt;/b&amp;gt;:&lt;br /&gt;
* 0 applies keys for legacy viewers and map, keys must be from textures&lt;br /&gt;
* 1 applies keys for new viewers, keys must be from either textures or PBR materials&lt;br /&gt;
* 2 applies keys to to both, Keys must be from textures&lt;br /&gt;
The list &amp;lt;b&amp;gt;textureKeys&amp;lt;/b&amp;gt; must contain keys or names of 4 textures or 4 pbr materials. They must be of the same type due to viewers restrictions.&amp;lt;br&amp;gt;&lt;br /&gt;
This defines the textures or materials the viewer will use to draw the terrain texture&amp;lt;br&amp;gt;&lt;br /&gt;
They are ordered from low to high terrain height level, as on viewers World -&amp;gt; Region Details -&amp;gt; Terrain menu tab.&amp;lt;br&amp;gt;&lt;br /&gt;
If an entry is a name, then the material or texture must be present on the prim inventory.&amp;lt;br&amp;gt;&lt;br /&gt;
If an entry is an empty string, then that level is unchanged.&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|permissions=ESTATE_MANAGER,ESTATE_OWNER&lt;br /&gt;
|delay=0&lt;br /&gt;
|&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|additional_info=This function was added in 0.9.3.1&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetTerrainTextures</id>
		<title>OsSetTerrainTextures</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetTerrainTextures"/>
				<updated>2025-05-06T18:10:16Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax= osSetTerrainTextures(list textureKeys, integer types)&lt;br /&gt;
|description=&lt;br /&gt;
Opensimulator regions store two sets of textures or materials keys:&lt;br /&gt;
* a set of texture keys for legacy viewers and map&lt;br /&gt;
* a set of texture or pbr material keys for new viewers.&amp;lt;br&amp;gt;&lt;br /&gt;
so this function allows to change those keys depending on the value of &amp;lt;b&amp;gt;types&amp;lt;/b&amp;gt;:&lt;br /&gt;
* 0 capplies keys for legacy viewers and map, keys must be from textures&lt;br /&gt;
* 1 applies keys for new viewers, keys must be from either textures or PBR materials&lt;br /&gt;
* 2 applies keys to to both, Keys must be from textures&lt;br /&gt;
The list &amp;lt;b&amp;gt;textureKeys&amp;lt;/b&amp;gt; must contain keys or names of 4 textures or 4 pbr materials. They must be of the same type due to viewers restrictions.&amp;lt;br&amp;gt;&lt;br /&gt;
This defines the textures or materials the viewer will use to draw the terrain texture&amp;lt;br&amp;gt;&lt;br /&gt;
They are ordered from low to high terrain height level, as on viewers World -&amp;gt; Region Details -&amp;gt; Terrain menu tab.&amp;lt;br&amp;gt;&lt;br /&gt;
If an entry is a name, then the material or texture must be present on the prim inventory.&amp;lt;br&amp;gt;&lt;br /&gt;
If an entry is an empty string, then that level is unchanged.&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|permissions=ESTATE_MANAGER,ESTATE_OWNER&lt;br /&gt;
|delay=0&lt;br /&gt;
|&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|additional_info=This function was added in 0.9.3.1&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetTerrainTextures</id>
		<title>OsSetTerrainTextures</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetTerrainTextures"/>
				<updated>2025-05-06T01:54:50Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax= osSetTerrainTextures(list textureKeys, integer types)&lt;br /&gt;
|description=&lt;br /&gt;
Opensimulator regions store two sets of textures or materials keys:&lt;br /&gt;
* a set of texture keys for legacy viewers and map&lt;br /&gt;
* a set of texture or pbr material keys for new viewers.&amp;lt;br&amp;gt;&lt;br /&gt;
so this function allows the change of:&lt;br /&gt;
* textures for legacy viewers and map if &amp;lt;b&amp;gt;types&amp;lt;/b&amp;gt; == 0 or 2 &lt;br /&gt;
* textures for new viewers if &amp;lt;b&amp;gt;types&amp;lt;/b&amp;gt; == 1 or 2 &lt;br /&gt;
* PBR materials for new viewers if &amp;lt;b&amp;gt;types&amp;lt;/b&amp;gt; == 1&amp;lt;br&amp;gt;&lt;br /&gt;
The list &amp;lt;b&amp;gt;textureKeys&amp;lt;/b&amp;gt; must contain keys or names of 4 textures or 4 pbr materials. They must be of the same type due to viewers restrictions.&amp;lt;br&amp;gt;&lt;br /&gt;
This defines the textures or materials the viewer will use to draw the terrain texture&amp;lt;br&amp;gt;&lt;br /&gt;
They are ordered from low to high terrain height level, as on viewers World -&amp;gt; Region Details -&amp;gt; Terrain menu tab.&amp;lt;br&amp;gt;&lt;br /&gt;
If an entry is a name, then the material or texture must be present on the prim inventory.&amp;lt;br&amp;gt;&lt;br /&gt;
If an entry is an empty string, then that level is unchanged.&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|permissions=ESTATE_MANAGER,ESTATE_OWNER&lt;br /&gt;
|delay=0&lt;br /&gt;
|&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|additional_info=This function was added in 0.9.3.1&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetTerrainTextures</id>
		<title>OsSetTerrainTextures</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetTerrainTextures"/>
				<updated>2025-05-06T01:54:20Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax= osSetTerrainTextures(list textureKeys, integer types)&lt;br /&gt;
|description=&lt;br /&gt;
Opensimulator regions store two sets of textures or materials keys:&lt;br /&gt;
* a set of texture keys for legacy viewers and map&lt;br /&gt;
* a set of texture or pbr material keys for new viewers.&amp;lt;br&amp;gt;&lt;br /&gt;
so this function allows the change of:&lt;br /&gt;
* textures for legacy viewers and map if &amp;lt;b&amp;gt;types&amp;lt;/b&amp;gt; == 0 or 2 &lt;br /&gt;
* textures for new viewers if &amp;lt;b&amp;gt;types&amp;lt;/b&amp;gt; == 1 or 2 &lt;br /&gt;
* PBR materials for new viewers if &amp;lt;b&amp;gt;types&amp;lt;/b&amp;gt; == 1&amp;lt;br&amp;gt;&lt;br /&gt;
The list &amp;lt;b&amp;gt;textureKeys&amp;lt;/b&amp;gt; must contain keys or names of 4 textures or 4 pbr materials. They must be of the same type due to viewers restrictions.&amp;lt;br&amp;gt;&lt;br /&gt;
This defines the textures or materials the viewer will use to draw the terrain texture&amp;lt;br&amp;gt;&lt;br /&gt;
They are ordered from low to high terrain height level, as on viewers World -&amp;gt; Region Details -&amp;gt; Terrain menu tab.&amp;lt;br&amp;gt;&lt;br /&gt;
If an entry is a name, then the material or texture must be present on the prim inventory.&amp;lt;br&amp;gt;&lt;br /&gt;
If an entry is a empty string, then that level is unchanged.&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|permissions=ESTATE_MANAGER,ESTATE_OWNER&lt;br /&gt;
|delay=0&lt;br /&gt;
|&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|additional_info=This function was added in 0.9.3.1&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetTerrainTextures</id>
		<title>OsSetTerrainTextures</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetTerrainTextures"/>
				<updated>2025-05-06T01:53:57Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax= osSetTerrainTextures(list textureKeys, integer types)&lt;br /&gt;
|description=&lt;br /&gt;
Opensimulator regions store two sets of textures or materials keys:&lt;br /&gt;
* a set of texture keys for legacy viewers and map&lt;br /&gt;
* a set of texture or pbr material keys for new viewers.&amp;lt;br&amp;gt;&lt;br /&gt;
so this function allows the change of:&lt;br /&gt;
* textures for legacy viewers and map if &amp;lt;b&amp;gt;types&amp;lt;/b&amp;gt; == 0 or 2 &lt;br /&gt;
* textures for new viewers if &amp;lt;b&amp;gt;types&amp;lt;/b&amp;gt; == 1 or 2 &lt;br /&gt;
* PBR materials for new viewers if &amp;lt;b&amp;gt;types&amp;lt;/b&amp;gt; == 1&amp;lt;br&amp;gt;&lt;br /&gt;
The list &amp;lt;b&amp;gt;textureKeys&amp;lt;/b&amp;gt; must contain keys or names of 4 textures or 4 pbr materials. They must be of the same type due to viewers restrictions.&amp;lt;br&amp;gt;&lt;br /&gt;
This defines the textures or materials the viewer will use to draw the terrain texture&amp;lt;br&amp;gt;&lt;br /&gt;
They are ordered from low to high terrain height level, as on viewers World -&amp;gt; Region Details -&amp;gt; Terrain menu tab.&amp;lt;br&amp;gt;&lt;br /&gt;
If a entry is a name, then the material or texture must be present on the prim inventory.&amp;lt;br&amp;gt;&lt;br /&gt;
If a entry is a empty string, then that level is unchanged.&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|permissions=ESTATE_MANAGER,ESTATE_OWNER&lt;br /&gt;
|delay=0&lt;br /&gt;
|&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|additional_info=This function was added in 0.9.3.1&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetTerrainTextures</id>
		<title>OsSetTerrainTextures</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetTerrainTextures"/>
				<updated>2025-05-06T01:53:20Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax= osSetTerrainTextures(list textureKeys, integer types)&lt;br /&gt;
|description=&lt;br /&gt;
Opensimulator regions store two sets of textures or materials keys:&lt;br /&gt;
* a set of texture keys for legacy viewers and map&lt;br /&gt;
* a set of texture or pbr material keys for new viewers.&amp;lt;br&amp;gt;&lt;br /&gt;
so this function allowes the change of:&lt;br /&gt;
* textures for legacy viewers and map if &amp;lt;b&amp;gt;types&amp;lt;/b&amp;gt; == 0 or 2 &lt;br /&gt;
* textures for new viewers if &amp;lt;b&amp;gt;types&amp;lt;/b&amp;gt; == 1 or 2 &lt;br /&gt;
* PBR materials for new viewers if &amp;lt;b&amp;gt;types&amp;lt;/b&amp;gt; == 1&amp;lt;br&amp;gt;&lt;br /&gt;
The list &amp;lt;b&amp;gt;textureKeys&amp;lt;/b&amp;gt; must contain keys or names of 4 textures or 4 pbr materials. They must be of the same type due to viewers restrictions.&amp;lt;br&amp;gt;&lt;br /&gt;
This define the textures or materials the viewer will use to draw the terrain texture&amp;lt;br&amp;gt;&lt;br /&gt;
They are ordered from low to high terrain height level, as on viewers World -&amp;gt; Region Details -&amp;gt; Terrain menu tab.&amp;lt;br&amp;gt;&lt;br /&gt;
If a entry is a name, then the material or texture must be present on the prim inventory.&amp;lt;br&amp;gt;&lt;br /&gt;
If a entry is a empty string, then that level is unchanged.&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|permissions=ESTATE_MANAGER,ESTATE_OWNER&lt;br /&gt;
|delay=0&lt;br /&gt;
|&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|additional_info=This function was added in 0.9.3.1&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetTerrainTextures</id>
		<title>OsSetTerrainTextures</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetTerrainTextures"/>
				<updated>2025-05-06T01:03:49Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax= osSetTerrainTextures(list textureKeys, integer types)&lt;br /&gt;
|description=&lt;br /&gt;
Opensimulator regions store two sets of textures or materials keys:&lt;br /&gt;
* a set of texture keys for legacy viewers and map&lt;br /&gt;
* a set of texture or pbr material keys for new viewers.&amp;lt;br&amp;gt;&lt;br /&gt;
so this function alloes the change of:&lt;br /&gt;
* textures for legacy viewers and map if &amp;lt;b&amp;gt;types&amp;lt;/b&amp;gt; == 0 or 2 &lt;br /&gt;
* textures for new viewers if &amp;lt;b&amp;gt;types&amp;lt;/b&amp;gt; == 1 or 2 &lt;br /&gt;
* PBR materials for new viewers if &amp;lt;b&amp;gt;types&amp;lt;/b&amp;gt; == 1&amp;lt;br&amp;gt;&lt;br /&gt;
The list &amp;lt;b&amp;gt;textureKeys&amp;lt;/b&amp;gt; must contain keys or names of 4 textures or 4 pbr materials. They must be of the same type due to viewers restrictions.&amp;lt;br&amp;gt;&lt;br /&gt;
This define the textures or materials the viewer will use to draw the terrain texture&amp;lt;br&amp;gt;&lt;br /&gt;
They are ordered from low to high terrain height level, as on viewers World -&amp;gt; Region Details -&amp;gt; Terrain menu tab.&amp;lt;br&amp;gt;&lt;br /&gt;
If a entry is a name, then the material or texture must be present on the prim inventory.&amp;lt;br&amp;gt;&lt;br /&gt;
If a entry is a empty string, then that level is unchanged.&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|permissions=ESTATE_MANAGER,ESTATE_OWNER&lt;br /&gt;
|delay=0&lt;br /&gt;
|&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|additional_info=This function was added in 0.9.3.1&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetTerrainTextures</id>
		<title>OsSetTerrainTextures</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetTerrainTextures"/>
				<updated>2025-05-06T01:02:40Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax= osSetTerrainTextures(list textureKeys, integer types)&lt;br /&gt;
|description=&lt;br /&gt;
Opensimulator regions store two sets of textures or materials keys:&lt;br /&gt;
* a set of texture keys for legacy viewers and map&lt;br /&gt;
* a set of texture or pbr material keys for new viewers.&amp;lt;br&amp;gt;&lt;br /&gt;
so this function alloes the change of:&lt;br /&gt;
* textures for legacy viewers and map if types == 0 or 2 &lt;br /&gt;
* textures for new viewers if types == 1 or 2 &lt;br /&gt;
* PBR materials for new viewers if types == 1&amp;lt;br&amp;gt;&lt;br /&gt;
The list textureKeys must contain keys or names of 4 textures or 4 pbr materials. They must be of the same type due to viewers restrictions.&amp;lt;br&amp;gt;&lt;br /&gt;
This define the textures or materials the viewer will use to draw the terrain texture&amp;lt;br&amp;gt;&lt;br /&gt;
They are ordered from low to high terrain height level, as on viewers World -&amp;gt; Region Details -&amp;gt; Terrain menu tab.&amp;lt;br&amp;gt;&lt;br /&gt;
If a entry is a name, then the material or texture must be present on the prim inventory.&amp;lt;br&amp;gt;&lt;br /&gt;
If a entry is a empty string, then that level is unchanged.&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|permissions=ESTATE_MANAGER,ESTATE_OWNER&lt;br /&gt;
|delay=0&lt;br /&gt;
|&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|additional_info=This function was added in 0.9.3.1&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetTerrainTextures</id>
		<title>OsSetTerrainTextures</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetTerrainTextures"/>
				<updated>2025-05-06T01:02:24Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax= osSetTerrainTextures(list textureKeys, integer types)&lt;br /&gt;
|description=&lt;br /&gt;
Opensimulator regions store two sets of textures or materials keys:&lt;br /&gt;
* a set of texture keys for legacy viewers and map&lt;br /&gt;
* a set of texture or pbr materials keys for new viewers.&amp;lt;br&amp;gt;&lt;br /&gt;
so this function alloes the change of:&lt;br /&gt;
* textures for legacy viewers and map if types == 0 or 2 &lt;br /&gt;
* textures for new viewers if types == 1 or 2 &lt;br /&gt;
* PBR materials for new viewers if types == 1&amp;lt;br&amp;gt;&lt;br /&gt;
The list textureKeys must contain keys or names of 4 textures or 4 pbr materials. They must be of the same type due to viewers restrictions.&amp;lt;br&amp;gt;&lt;br /&gt;
This define the textures or materials the viewer will use to draw the terrain texture&amp;lt;br&amp;gt;&lt;br /&gt;
They are ordered from low to high terrain height level, as on viewers World -&amp;gt; Region Details -&amp;gt; Terrain menu tab.&amp;lt;br&amp;gt;&lt;br /&gt;
If a entry is a name, then the material or texture must be present on the prim inventory.&amp;lt;br&amp;gt;&lt;br /&gt;
If a entry is a empty string, then that level is unchanged.&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|permissions=ESTATE_MANAGER,ESTATE_OWNER&lt;br /&gt;
|delay=0&lt;br /&gt;
|&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|additional_info=This function was added in 0.9.3.1&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetTerrainTextures</id>
		<title>OsSetTerrainTextures</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetTerrainTextures"/>
				<updated>2025-05-06T01:01:00Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax= osSetTerrainTextures(list textureKeys, integer types)&lt;br /&gt;
|description=&lt;br /&gt;
Opensimulator regions store two sets of textures or materials:&lt;br /&gt;
* a set of texture keys for legacy viewers and map&lt;br /&gt;
* a set of texture or pbr materials keys for new viewers.&amp;lt;br&amp;gt;&lt;br /&gt;
so this function alloes the change of:&lt;br /&gt;
* textures for legacy viewers and map if types == 0 or 2 &lt;br /&gt;
* textures for new viewers if types == 1 or 2 &lt;br /&gt;
* PBR materials for new viewers if types == 1&amp;lt;br&amp;gt;&lt;br /&gt;
The list textureKeys must contain keys or names of 4 textures or 4 pbr materials. They must be of the same type due to viewers restrictions.&amp;lt;br&amp;gt;&lt;br /&gt;
This define the textures or materials the viewer will use to draw the terrain texture&amp;lt;br&amp;gt;&lt;br /&gt;
They are ordered from low to high terrain height level, as on viewers World -&amp;gt; Region Details -&amp;gt; Terrain menu tab.&amp;lt;br&amp;gt;&lt;br /&gt;
If a entry is a name, then the material or texture must be present on the prim inventory.&amp;lt;br&amp;gt;&lt;br /&gt;
If a entry is a empty string, then that level is unchanged.&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|permissions=ESTATE_MANAGER,ESTATE_OWNER&lt;br /&gt;
|delay=0&lt;br /&gt;
|&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|additional_info=This function was added in 0.9.3.1&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetTerrainTextures</id>
		<title>OsSetTerrainTextures</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetTerrainTextures"/>
				<updated>2025-05-06T01:00:10Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax= osSetTerrainTextures(list textureKeys, integer types)&lt;br /&gt;
|description=&lt;br /&gt;
Opensimulator regions store two sets of textures or materials:&lt;br /&gt;
* a set of texture keys for legacy viewers and map&lt;br /&gt;
* a set of texture or pbr materials keys for new viewers.&amp;lt;br&amp;gt;&lt;br /&gt;
so this function sets terrain:&lt;br /&gt;
* textures for legacy viewers and map if types == 0 or 2 &lt;br /&gt;
* textures for new viewers if types == 1 or 2 &lt;br /&gt;
* PBR materials for new viewers if types == 1&amp;lt;br&amp;gt;&lt;br /&gt;
The list textureKeys must contain keys or names of 4 textures or 4 pbr materials. They must be of the same type due to viewers restrictions.&amp;lt;br&amp;gt;&lt;br /&gt;
This define the textures or materials the viewer will use to draw the terrain texture&amp;lt;br&amp;gt;&lt;br /&gt;
They are ordered from low to high terrain height level, as on viewers World -&amp;gt; Region Details -&amp;gt; Terrain menu tab.&amp;lt;br&amp;gt;&lt;br /&gt;
If a entry is a name, then the material or texture must be present on the prim inventory.&amp;lt;br&amp;gt;&lt;br /&gt;
If a entry is a empty string, then that level is unchanged.&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|permissions=ESTATE_MANAGER,ESTATE_OWNER&lt;br /&gt;
|delay=0&lt;br /&gt;
|&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|additional_info=This function was added in 0.9.3.1&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OsSetTerrainTextures</id>
		<title>OsSetTerrainTextures</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OsSetTerrainTextures"/>
				<updated>2025-05-06T00:59:09Z</updated>
		
		<summary type="html">&lt;p&gt;Ubit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{osslfunc&lt;br /&gt;
|function_syntax= osSetTerrainTextures(list textureKeys, integer types)&lt;br /&gt;
|description=&lt;br /&gt;
Opensimulator regions store two sets of textures or materials:&lt;br /&gt;
* a set of texture keys for legacy viewers and map&lt;br /&gt;
* a set of keys of textures or pbr materials for new viewers.&amp;lt;br&amp;gt;&lt;br /&gt;
so this function sets terrain:&lt;br /&gt;
* textures for legacy viewers and map if types == 0 or 2 &lt;br /&gt;
* textures for new viewers if types == 1 or 2 &lt;br /&gt;
* PBR materials for new viewers if types == 1&amp;lt;br&amp;gt;&lt;br /&gt;
The list textureKeys must contain keys or names of 4 textures or 4 pbr materials. They must be of the same type due to viewers restrictions.&amp;lt;br&amp;gt;&lt;br /&gt;
This define the textures or materials the viewer will use to draw the terrain texture&amp;lt;br&amp;gt;&lt;br /&gt;
They are ordered from low to high terrain height level, as on viewers World -&amp;gt; Region Details -&amp;gt; Terrain menu tab.&amp;lt;br&amp;gt;&lt;br /&gt;
If a entry is a name, then the material or texture must be present on the prim inventory.&amp;lt;br&amp;gt;&lt;br /&gt;
If a entry is a empty string, then that level is unchanged.&lt;br /&gt;
|threat_level=High&lt;br /&gt;
|permissions=ESTATE_MANAGER,ESTATE_OWNER&lt;br /&gt;
|delay=0&lt;br /&gt;
|&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|additional_info=This function was added in 0.9.3.1&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ubit</name></author>	</entry>

	</feed>