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

	<entry>
		<id>http://opensimulator.org/wiki/OpenSim.Region.ScriptEngine.Common</id>
		<title>OpenSim.Region.ScriptEngine.Common</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OpenSim.Region.ScriptEngine.Common"/>
				<updated>2010-10-22T18:50:18Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Template:Quicklinks}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=WARNING! THIS PAGE IS OBSOLETE! ScriptEngine has been replaced by xengine!=&lt;br /&gt;
&lt;br /&gt;
=OpenSim.Region.ScriptEngine.Common=&lt;br /&gt;
&lt;br /&gt;
==How to implement your own script engine==&lt;br /&gt;
Creating a new script engine for OpenSim is simple (haha).&amp;lt;br /&amp;gt;&lt;br /&gt;
What I mean by simple is that if you already have a VM (Virtual Machine) or script engine of some sort then integrating it as a OpenSim ScriptEngine plugin is simple.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===What do I get for free?===&lt;br /&gt;
1. Loading/unloading of scripts are queued and executed in sequence. Only one load/unload at the time.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
2. What script belongs to what object is automatically taken care of. You just need to provide the scripts classes - nothing else.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
3. OpenSim events are translated and given to you as LSL events. Your script functions are executed automatically, no need to hook up to events or anything.&amp;lt;br /&amp;gt;&lt;br /&gt;
If you want to implement your own event handlers, feel free to do so. Look in &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.EventManager.cs&amp;quot; how its done. Your own events can run together with LSL events without any problem.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
4. Whenever an event is executed, the execution is queued. Only one event per script is ever executed simultaneous. But multithreading is used to run multiple scripts in parallel.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
5. Errors during script execution is automatically handled and relayed to users in-world.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
6. You get all LSL commands in an easy to use object, no need to keep track of scene or objects to execute functions. Running an LSL command from your script engine is as easy as running it from inside any LSL-script.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
7. Long LSL-commands that returns with an event is also handled.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Getting started===&lt;br /&gt;
1. Create a new project named &amp;quot;OpenSim.Region.MySuperScriptEngine&amp;quot; (replace &amp;quot;MySuperScriptEngine&amp;quot; with the name of your scriptengine).&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Create a new class (file) named &amp;quot;ScriptEngine&amp;quot;. It must be named exactly ScriptEngine for OpenSim to use it. ScriptEngine must inherit from &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptEngine&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
3. You need to override a couple of functions. Most probably you don't want to do any special work here, so look below for a sample default file.&amp;lt;br /&amp;gt;&lt;br /&gt;
4. Create a new class (file) named &amp;quot;ScriptManager&amp;quot; that inherits from &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptManager&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
5. Your ScriptManager class needs to override two functions. One to start a script and one to stop a script.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ScriptEngine class===&lt;br /&gt;
The main purpose of ScriptEngine class is to be able to intercept scene, for example starting with a &amp;quot;fake&amp;quot; scene instead of OpenSim's scene. You probably don't want this, so just go for the standard initialization.&amp;lt;br /&amp;gt;&lt;br /&gt;
A standard class would look like this:&amp;lt;br /&amp;gt;&lt;br /&gt;
 using System;&lt;br /&gt;
 using Nini.Config;&lt;br /&gt;
 using OpenSim.Framework.Console;&lt;br /&gt;
 using OpenSim.Region.Environment.Scenes;&lt;br /&gt;
 namespace OpenSim.Region.ScriptEngine.MySuperScriptEngine&lt;br /&gt;
 {&lt;br /&gt;
     [Serializable]&lt;br /&gt;
     public class ScriptEngine : OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptEngine&lt;br /&gt;
     {&lt;br /&gt;
         public override void Initialise(Scene scene, IConfigSource config)&lt;br /&gt;
         {&lt;br /&gt;
            InitializeEngine(scene, MainLog.Instance, true, GetScriptManager());&lt;br /&gt;
         }&lt;br /&gt;
         public override OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptManager _GetScriptManager()&lt;br /&gt;
         {&lt;br /&gt;
             return new ScriptManager(this);&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===ScriptManager class===&lt;br /&gt;
A script is refecenced by object id &amp;quot;localID&amp;quot; (the object/prim it is inside) and script id &amp;quot;itemID&amp;quot; (the particular (unique) instance of that script). These parameters along with a string &amp;quot;Script&amp;quot; containing the script text (source code) are passed to your (overriden) start script function in your ScriptManager class.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Keeping track of active scripts is done automatically, so your job is simply to create a new script and hand it over. After that your work is done until the script is asked to stop, then you have to do a few simple tasks to remove it again.&amp;lt;br /&amp;gt;&lt;br /&gt;
Here is a sample on a minimal script startup:&lt;br /&gt;
 public override void _StartScript(uint localID, LLUUID itemID, string Script)&lt;br /&gt;
 {&lt;br /&gt;
     SceneObjectPart m_host = World.GetSceneObjectPart(localID);&lt;br /&gt;
     try&lt;br /&gt;
     {&lt;br /&gt;
         IScript CompiledScript = MySpecialCompiler.DoCompile(Script);  // Compile and return an IScript object that is the actual script&lt;br /&gt;
         CompiledScript.Source = ScriptSource;                          // Store source for recompile on script reset events&lt;br /&gt;
         SetScript(localID, itemID, CompiledScript);                    // All is ok. Add script to OpenSim's script manager. From here on its on autopilot.&lt;br /&gt;
         // Create a private instance of LSL commands (note that m_scriptEngine, m_host are from baseclass, so you don't need to change them)&lt;br /&gt;
         LSL_BuiltIn_Commands LSLB = new LSL_BuiltIn_Commands(m_scriptEngine, m_host, localID, itemID);&lt;br /&gt;
         CompiledScript.Start(LSLB);                                    // Start the script - giving it LSL commands&lt;br /&gt;
         // Fire the first start-event, this is the event run on LSL scripts when they first start&lt;br /&gt;
         m_scriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, &amp;quot;state_entry&amp;quot;, EventQueueManager.llDetectNull, new object[] { });&lt;br /&gt;
     }&lt;br /&gt;
     catch (Exception e)&lt;br /&gt;
     {&lt;br /&gt;
       // To see how you can send the compile error in-world, have a look at OpenSim.Region.ScriptEngine.DotNetEngine.ScriptManager&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And your minimal script shutdown would be:&lt;br /&gt;
 public override void _StopScript(uint localID, LLUUID itemID)&lt;br /&gt;
 {&lt;br /&gt;
     m_scriptEngine.m_LSLLongCmdHandler.RemoveScript(localID, itemID);   // Stop long command on script like timers, http requests, etc.&lt;br /&gt;
     IScript LSLBC = GetScript(localID, itemID);                         // Get the script we are stopping&lt;br /&gt;
     if (LSLBC == null)                                                  // Nothing to do? Exit.&lt;br /&gt;
         return;&lt;br /&gt;
     try&lt;br /&gt;
     {&lt;br /&gt;
         LSLBC.Exec.StopScript();                                        // Tell script to stop&lt;br /&gt;
         RemoveScript(localID, itemID);                                  // Remove script from internal memory structure&lt;br /&gt;
    }&lt;br /&gt;
     catch (Exception e)&lt;br /&gt;
     {&lt;br /&gt;
       // You probably want to log this to console or something&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===IScript interface===&lt;br /&gt;
So you have implemented the two classes described above. Now how does this connect to your JavaScript or Perl or YourCustomSuperLanguage script engine or VM?&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
You have to create a class. This class must inherit &amp;quot;OpenSim.Region.ScriptEngine.Common.IScript&amp;quot;. Inside IScript your class will have two important things: &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
1. During script start (in ScriptManager), you call yourscript.Start() and give it a LSL command module. So insite your script class where you override this Start() function you need to remember this LSL command module.&amp;lt;br /&amp;gt;&lt;br /&gt;
How you bind this LSL command module to your custom engine is totally up to you. The LSL command module contains all LSL functions, and any function you use there will affect the correct object/region/whatever. You don't need to do more than ''myLSLCommandModule.llSay(0, &amp;quot;Hello world!&amp;quot;);'' to make it work.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Any time a LSL event is generated either by an in-world event or by for example a timer, a function in your script class needs to be executed. For this you have the &amp;quot;Exec&amp;quot; override. I suggest you have a look at &amp;quot;OpenSim.Region.ScriptEngine.Common.Executor&amp;quot; to see how this work. Basically you receive a string containing function name and the parameters for that event.&amp;lt;br /&amp;gt;&lt;br /&gt;
If you use the default Executor you need to initialize it by giving it a reference to yourself (the IScript script class). Then you need to have functions in your class matching LSL functions when it comes to both name and parameters. Example:&amp;lt;br /&amp;gt;&lt;br /&gt;
 public touch_start(int number_of_touches) {&lt;br /&gt;
     // whatever code for this event... probably calling your own VM's function with the same name? ;)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===AppDomain security===&lt;br /&gt;
If you are writing a .Net based script engine and want AppDomain security and loading/unloading then:&lt;br /&gt;
 // Load script:&lt;br /&gt;
 IScript CompiledScript = m_scriptEngine.m_AppDomainManager.LoadScript(filename);&lt;br /&gt;
and&lt;br /&gt;
  // Unload script:&lt;br /&gt;
  m_scriptEngine.m_AppDomainManager.StopScript(LSLBC.Exec.GetAppDomain());&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Startup_script_linux</id>
		<title>Startup script linux</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Startup_script_linux"/>
				<updated>2010-03-05T11:52:28Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== /etc/init.d script for Linux  ==&lt;br /&gt;
&lt;br /&gt;
=== Instructions  ===&lt;br /&gt;
&lt;br /&gt;
Tested on Debian 5. CHUIDS user to opensim user. Supports: start, stop, restart, status &lt;br /&gt;
&lt;br /&gt;
To implement: Type: cat &amp;amp;gt; /etc/init.d/opensim Paste in script from this page Press: CTRL+D Type: chmod +x /etc/init.d/opensim Script should now be located on server and be executable. &lt;br /&gt;
&lt;br /&gt;
Type: update-rc.d opensim defaults Script should now be in your startup. &lt;br /&gt;
&lt;br /&gt;
Modify header in script to adapt it to your installation folder and user. &lt;br /&gt;
&lt;br /&gt;
NOTE: stop-command currently doesn't work properly (it doesn't do a soft shutdown). It will kill OpenSim first with kill pid, then kill -9 pid. So make sure you have saved your data.&amp;amp;nbsp;:) &lt;br /&gt;
&lt;br /&gt;
=== Script  ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #! /bin/sh&lt;br /&gt;
 ### BEGIN INIT INFO&lt;br /&gt;
 # Provides:          OpenSim&lt;br /&gt;
 # Required-Start:    $local_fs $network &lt;br /&gt;
 # Required-Stop:     $local_fs&lt;br /&gt;
 # Default-Start:     2 3 4 5&lt;br /&gt;
 # Default-Stop:      0 1 6&lt;br /&gt;
 # Short-Description: Tedds OpenSim init.d-script&lt;br /&gt;
 ### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
 # Put script in /etc/init.d/&lt;br /&gt;
 # then execute: update-rc.d opensim defaults&lt;br /&gt;
&lt;br /&gt;
 set -e&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # Directories&lt;br /&gt;
 #&lt;br /&gt;
 # Location of OpenSim installation&lt;br /&gt;
 DIR=/home/opensim/OpenSim/bin/&lt;br /&gt;
 # Different PID dir?&lt;br /&gt;
 PIDDIR=$DIR&lt;br /&gt;
&lt;br /&gt;
 USER=opensim&lt;br /&gt;
 SERVICES=&amp;quot;OpenSim.Grid.UserServer.exe OpenSim.Server.exe OpenSim.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # Kill values (in seconds)&lt;br /&gt;
 #&lt;br /&gt;
 # How long between each service being started&lt;br /&gt;
 DELAY_STARTUP=10&lt;br /&gt;
 # How long between each service is sent shutdown command&lt;br /&gt;
 DELAY_KILL=10&lt;br /&gt;
 # After shutdown has been sent to all we do another loop with &amp;quot;kill&amp;quot;, then &amp;quot;kill -9&amp;quot;. How long between &amp;quot;kill&amp;quot; and &amp;quot;kill -9&amp;quot;.&lt;br /&gt;
 DELAY_FORCEKILL=10&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # Info on service handled by this script&lt;br /&gt;
&lt;br /&gt;
 # Name of service&lt;br /&gt;
 NAME=opensim&lt;br /&gt;
 # Description of service&lt;br /&gt;
 DESC=&amp;quot;OpenSim Server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 # Binaries&lt;br /&gt;
 SCREEN=/usr/bin/screen&lt;br /&gt;
 MONO=/usr/bin/mono&lt;br /&gt;
&lt;br /&gt;
 ###########################&lt;br /&gt;
 ##### START OF SCRIPT #####&lt;br /&gt;
 ###########################&lt;br /&gt;
&lt;br /&gt;
 export PATH=&amp;quot;${PATH:+$PATH:}/usr/sbin:/sbin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # Load LSB log functions&lt;br /&gt;
 _lsbFile=&amp;quot;&amp;quot;&lt;br /&gt;
 if [ -e /etc/debian_version ]; then&lt;br /&gt;
     _lsbFile=&amp;quot;/lib/lsb/init-functions&amp;quot;&lt;br /&gt;
     if [ -f $_lsbFile ]; then&lt;br /&gt;
         . $_lsbFile&lt;br /&gt;
     else&lt;br /&gt;
         echo This script requires LSB init-functions file which doesn't exist: $_lsbFile&lt;br /&gt;
         exit 1&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
 # [ -e /etc/init.d/functions ]&amp;amp;nbsp;; then&lt;br /&gt;
     _lsbFile=&amp;quot;/etc/init.d/functions&amp;quot;&lt;br /&gt;
     if [ -e $_lsbFile ]; then&lt;br /&gt;
         . $_lsbFile&lt;br /&gt;
     else&lt;br /&gt;
         echo This script requires LSB init-functions file which doesn't exist: $_lsbFile&lt;br /&gt;
         exit 1&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
 # Lets use fancy output&lt;br /&gt;
 log_use_fancy_output&lt;br /&gt;
&lt;br /&gt;
 # Check that target directory exists&lt;br /&gt;
 if test&amp;amp;nbsp;! -d &amp;quot;$DIR&amp;quot;; then&lt;br /&gt;
     log_failure_msg &amp;quot;$NAME&amp;quot; &amp;quot;Target directory \&amp;quot;$DIR\&amp;quot; does not exist. Can not continue.&amp;quot;&lt;br /&gt;
     exit 1&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
 # Create a reverse order for shutdown&lt;br /&gt;
 SERVICES_REVERSE=&amp;quot;&amp;quot;&lt;br /&gt;
 reverse() { SERVICES_REVERSE=&amp;quot;$9 $8 $7 $6 $5 $4 $3 $2 $1&amp;quot;; }&lt;br /&gt;
 reverse $SERVICES&lt;br /&gt;
&lt;br /&gt;
 # Check if a service is running&lt;br /&gt;
 isrunning() { &lt;br /&gt;
     ISRUNNING=&amp;quot;0&amp;quot;&lt;br /&gt;
     # Do we have PID-file?&lt;br /&gt;
     if [ -f &amp;quot;$PIDDIR/$1.pid&amp;quot; ]; then&lt;br /&gt;
         # Check if proc is running&lt;br /&gt;
         pid=`cat &amp;quot;$PIDDIR/$1.pid&amp;quot; 2&amp;amp;gt; /dev/null`&lt;br /&gt;
         if [ &amp;quot;$pid&amp;quot;&amp;amp;nbsp;!= &amp;quot;&amp;quot; ]; then&lt;br /&gt;
             if [ -d /proc/$pid ]; then&lt;br /&gt;
                 # Process is running&lt;br /&gt;
                 ISRUNNING=&amp;quot;1&amp;quot;&lt;br /&gt;
             fi&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
     #ISRUNNING=&amp;quot;0&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # Process commands&lt;br /&gt;
 #&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
 start)&lt;br /&gt;
     # Start all services one by one&lt;br /&gt;
     for server in $SERVICES; do&lt;br /&gt;
         log_daemon_msg &amp;quot;Starting $NAME&amp;quot; &amp;quot;$server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
         isrunning $server&lt;br /&gt;
         case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
             1) log_progress_msg &amp;quot;Process already started. Please stop first&amp;quot;; log_end_msg 1&amp;amp;nbsp;;;&lt;br /&gt;
             0) &lt;br /&gt;
                 # Process is not running&lt;br /&gt;
                 # Start process and sleep...&lt;br /&gt;
                 exefile=&amp;quot;/tmp/exe.OpenSim.$server.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
                 # Need to make external file, had big problems with screen params&lt;br /&gt;
                 echo \#\!/bin/bash &amp;amp;gt; $exefile&lt;br /&gt;
                 echo cd $DIR &amp;amp;gt;&amp;amp;gt; $exefile&lt;br /&gt;
                 echo $MONO $server &amp;amp;gt;&amp;amp;gt; $exefile&lt;br /&gt;
                 chmod +x $exefile&lt;br /&gt;
&lt;br /&gt;
                 cmd_screen=&amp;quot;screen -S $server -d -m $exefile&amp;quot;&lt;br /&gt;
                 start-stop-daemon --start -b -x /bin/su -m --pidfile=/tmp/su.$server.pid --chdir &amp;quot;$DIR&amp;quot; -- - $USER &amp;quot;-c $cmd_screen&amp;quot;&lt;br /&gt;
&lt;br /&gt;
                 # Delay between services that are started&lt;br /&gt;
                 sleep $DELAY_STARTUP&lt;br /&gt;
&lt;br /&gt;
                 rm $exefile 2&amp;amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
                 # Make PID-file&lt;br /&gt;
                 ps afxu | grep &amp;quot;mono $server&amp;quot; | grep -iEv &amp;quot;grep|screen&amp;quot; | awk {'print $2'} &amp;amp;gt; &amp;quot;$PIDDIR/$server.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
                 isrunning $server&lt;br /&gt;
                 case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
                     1) &lt;br /&gt;
                         # Process started ok&lt;br /&gt;
                         #log_progress_msg &amp;quot;Success&amp;quot;; &lt;br /&gt;
                         log_end_msg 0 &lt;br /&gt;
                        &amp;amp;nbsp;;;&lt;br /&gt;
                     0) &lt;br /&gt;
                         # Process didn't start... remove pid-file&lt;br /&gt;
                         rm &amp;quot;$PIDDIR/$server.pid&amp;quot; 2&amp;amp;gt; /dev/null&lt;br /&gt;
                         #log_progress_msg &amp;quot;Failure&amp;quot;; &lt;br /&gt;
                         log_end_msg 1 &lt;br /&gt;
                        &amp;amp;nbsp;;;&lt;br /&gt;
                 esac&lt;br /&gt;
                &amp;amp;nbsp;;;&lt;br /&gt;
         esac&lt;br /&gt;
&lt;br /&gt;
     done&lt;br /&gt;
    &amp;amp;nbsp;;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 stop)&lt;br /&gt;
     _killCount=0&lt;br /&gt;
&lt;br /&gt;
     for server in $SERVICES_REVERSE; do&lt;br /&gt;
         log_daemon_msg &amp;quot;Stopping $NAME&amp;quot; &amp;quot;$server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
         isrunning $server&lt;br /&gt;
         case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
         1) &lt;br /&gt;
             _killCount=`expr $_killCount + 1`&lt;br /&gt;
             log_progress_msg &amp;quot;Sending shutdown command:&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
             # We add some backspaces to the command in case something is on the console already&lt;br /&gt;
             echo `screen -S $server -X stuff \&amp;quot;                             &lt;br /&gt;
&lt;br /&gt;
             # Wait for it to shut down...&lt;br /&gt;
             sleep $DELAY_KILL&lt;br /&gt;
&lt;br /&gt;
             isrunning $server&lt;br /&gt;
             case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
                 1) log_progress_msg &amp;quot;is still running.&amp;quot;; log_end_msg 0&amp;amp;nbsp;;;&lt;br /&gt;
                 0) log_progress_msg &amp;quot;has been shutdown&amp;quot;; log_end_msg 0&amp;amp;nbsp;;;&lt;br /&gt;
             esac&lt;br /&gt;
&lt;br /&gt;
            &amp;amp;nbsp;;;&lt;br /&gt;
         0) &lt;br /&gt;
             log_progress_msg &amp;quot;is not running&amp;quot;; log_end_msg 0&lt;br /&gt;
            &amp;amp;nbsp;;;&lt;br /&gt;
         esac&lt;br /&gt;
&lt;br /&gt;
     done&lt;br /&gt;
&lt;br /&gt;
     # Check if any procs are still running&lt;br /&gt;
     for server in $SERVICES; do&lt;br /&gt;
         isrunning $server&lt;br /&gt;
         case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
         1) &lt;br /&gt;
             log_warning_msg &amp;quot;Stopping $NAME&amp;quot; &amp;quot;$server is still running: Forcing kill&amp;quot;&lt;br /&gt;
             echo `kill $pid 2&amp;amp;gt; /dev/null`;&lt;br /&gt;
             sleep $DELAY_FORCEKILL&lt;br /&gt;
             echo `kill -9 $pid 2&amp;amp;gt; /dev/null`;&lt;br /&gt;
             sleep 1&lt;br /&gt;
&lt;br /&gt;
             # Now check again if it is still running...&lt;br /&gt;
             isrunning $server&lt;br /&gt;
             case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
                 0) log_progress_msg &amp;quot;Success&amp;quot;; log_end_msg 0&amp;amp;nbsp;;;&lt;br /&gt;
                 1) log_progress_msg &amp;quot;Process is still running... Even after \&amp;quot;kill -9 $pid\&amp;quot;. WOW...&amp;quot;; log_end_msg 0&amp;amp;nbsp;;;&lt;br /&gt;
             esac&lt;br /&gt;
            &amp;amp;nbsp;;;&lt;br /&gt;
         0) &lt;br /&gt;
             #log_progress_msg &amp;quot;&amp;quot;; &lt;br /&gt;
            &amp;amp;nbsp;;;&lt;br /&gt;
         esac&lt;br /&gt;
     done&lt;br /&gt;
&lt;br /&gt;
     log_begin_msg &amp;quot;$NAME: All done (killed $_killCount procs)&amp;quot;; log_end_msg 0&lt;br /&gt;
&lt;br /&gt;
    &amp;amp;nbsp;;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 status)&lt;br /&gt;
     # Count how many processes we need&lt;br /&gt;
     PROCCOUNT=0&lt;br /&gt;
     for i in $SERVICES; do&lt;br /&gt;
         PROCCOUNT=`expr $PROCCOUNT + 1`&lt;br /&gt;
     done&lt;br /&gt;
&lt;br /&gt;
     # Go through server PID files and count how many are running&lt;br /&gt;
     log_begin_msg &amp;quot;$NAME: Running processed:&amp;quot;&lt;br /&gt;
     _pidCount=0&lt;br /&gt;
     for server in $SERVICES; do&lt;br /&gt;
&lt;br /&gt;
         isrunning $server&lt;br /&gt;
         case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
             1) &lt;br /&gt;
                 # This server is running&lt;br /&gt;
                 _pidCount=`expr $_pidCount + 1`&lt;br /&gt;
                 log_progress_msg &amp;quot;$server&amp;quot;&lt;br /&gt;
                &amp;amp;nbsp;;;&lt;br /&gt;
             0) &lt;br /&gt;
                &amp;amp;nbsp;;;&lt;br /&gt;
         esac&lt;br /&gt;
     done&lt;br /&gt;
&lt;br /&gt;
     log_begin_msg &amp;quot; ($_pidCount of $PROCCOUNT processes are running)&amp;quot;; log_end_msg 0&lt;br /&gt;
   &lt;br /&gt;
     # Check if running proc count matches requires proc count&lt;br /&gt;
     log_begin_msg &amp;quot;$NAME is&amp;quot;&lt;br /&gt;
     if [ $_pidCount -eq $PROCCOUNT ]; then&lt;br /&gt;
         log_progress_msg &amp;quot;running&amp;quot;; log_end_msg 0&lt;br /&gt;
         exit 0&lt;br /&gt;
     else&lt;br /&gt;
         log_progress_msg &amp;quot;NOT running&amp;quot;; log_end_msg 0&lt;br /&gt;
         exit 1&lt;br /&gt;
     fi&lt;br /&gt;
    &amp;amp;nbsp;;;&lt;br /&gt;
&lt;br /&gt;
 restart)&lt;br /&gt;
     $0 stop&lt;br /&gt;
     $0 start&lt;br /&gt;
    &amp;amp;nbsp;;;&lt;br /&gt;
 *)&lt;br /&gt;
     echo &amp;quot;Usage: /etc/init.d/$NAME {start|stop|restart|status}&amp;quot; &amp;amp;gt;&amp;amp;amp;2&lt;br /&gt;
     exit 1&lt;br /&gt;
    &amp;amp;nbsp;;;&lt;br /&gt;
 esac&lt;br /&gt;
&lt;br /&gt;
 exit 0&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Startup_script_linux</id>
		<title>Startup script linux</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Startup_script_linux"/>
				<updated>2010-03-05T11:52:01Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: Undo revision 16911 by Tedd (Talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== /etc/init.d script for Linux ==&lt;br /&gt;
&lt;br /&gt;
=== Instructions ===&lt;br /&gt;
&lt;br /&gt;
Tested on Debian 5. CHUIDS user to opensim user. Supports: start, stop, restart, status &lt;br /&gt;
&lt;br /&gt;
To implement: Type: cat &amp;amp;gt; /etc/init.d/opensim Paste in script from this page Press: CTRL+D Type: chmod +x /etc/init.d/opensim Script should now be located on server and be executable. &lt;br /&gt;
&lt;br /&gt;
Type: update-rc.d opensim defaults Script should now be in your startup. &lt;br /&gt;
&lt;br /&gt;
Modify header in script to adapt it to your installation folder and user. &lt;br /&gt;
&lt;br /&gt;
NOTE: stop-command currently doesn't work properly (it doesn't do a soft shutdown). It will kill OpenSim first with kill pid, then kill -9 pid. So make sure you have saved your data.&amp;amp;nbsp;:) &lt;br /&gt;
&lt;br /&gt;
=== Script ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #! /bin/sh&lt;br /&gt;
 ### BEGIN INIT INFO&lt;br /&gt;
 # Provides:          OpenSim&lt;br /&gt;
 # Required-Start:    $local_fs $network &lt;br /&gt;
 # Required-Stop:     $local_fs&lt;br /&gt;
 # Default-Start:     2 3 4 5&lt;br /&gt;
 # Default-Stop:      0 1 6&lt;br /&gt;
 # Short-Description: Tedds OpenSim init.d-script&lt;br /&gt;
 ### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
 # Put script in /etc/init.d/&lt;br /&gt;
 # then execute: update-rc.d opensim defaults&lt;br /&gt;
&lt;br /&gt;
 set -e&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # Directories&lt;br /&gt;
 #&lt;br /&gt;
 # Location of OpenSim installation&lt;br /&gt;
 DIR=/home/opensim/OpenSim/bin/&lt;br /&gt;
 # Different PID dir?&lt;br /&gt;
 PIDDIR=$DIR&lt;br /&gt;
&lt;br /&gt;
 USER=opensim&lt;br /&gt;
 SERVICES=&amp;quot;OpenSim.Grid.UserServer.exe OpenSim.Server.exe OpenSim.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # Kill values (in seconds)&lt;br /&gt;
 #&lt;br /&gt;
 # How long between each service being started&lt;br /&gt;
 DELAY_STARTUP=10&lt;br /&gt;
 # How long between each service is sent shutdown command&lt;br /&gt;
 DELAY_KILL=10&lt;br /&gt;
 # After shutdown has been sent to all we do another loop with &amp;quot;kill&amp;quot;, then &amp;quot;kill -9&amp;quot;. How long between &amp;quot;kill&amp;quot; and &amp;quot;kill -9&amp;quot;.&lt;br /&gt;
 DELAY_FORCEKILL=10&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # Info on service handled by this script&lt;br /&gt;
#&lt;br /&gt;
 # Name of service&lt;br /&gt;
 NAME=opensim&lt;br /&gt;
 # Description of service&lt;br /&gt;
 DESC=&amp;quot;OpenSim Server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 # Binaries&lt;br /&gt;
 SCREEN=/usr/bin/screen&lt;br /&gt;
 MONO=/usr/bin/mono&lt;br /&gt;
&lt;br /&gt;
 ###########################&lt;br /&gt;
 ##### START OF SCRIPT #####&lt;br /&gt;
 ###########################&lt;br /&gt;
&lt;br /&gt;
 export PATH=&amp;quot;${PATH:+$PATH:}/usr/sbin:/sbin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # Load LSB log functions&lt;br /&gt;
 _lsbFile=&amp;quot;&amp;quot;&lt;br /&gt;
 if [ -e /etc/debian_version ]; then&lt;br /&gt;
     _lsbFile=&amp;quot;/lib/lsb/init-functions&amp;quot;&lt;br /&gt;
     if [ -f $_lsbFile ]; then&lt;br /&gt;
         . $_lsbFile&lt;br /&gt;
     else&lt;br /&gt;
         echo This script requires LSB init-functions file which doesn't exist: $_lsbFile&lt;br /&gt;
         exit 1&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
 # [ -e /etc/init.d/functions ]&amp;amp;nbsp;; then&lt;br /&gt;
     _lsbFile=&amp;quot;/etc/init.d/functions&amp;quot;&lt;br /&gt;
     if [ -e $_lsbFile ]; then&lt;br /&gt;
         . $_lsbFile&lt;br /&gt;
     else&lt;br /&gt;
         echo This script requires LSB init-functions file which doesn't exist: $_lsbFile&lt;br /&gt;
         exit 1&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
 # Lets use fancy output&lt;br /&gt;
 log_use_fancy_output&lt;br /&gt;
&lt;br /&gt;
 # Check that target directory exists&lt;br /&gt;
 if test&amp;amp;nbsp;! -d &amp;quot;$DIR&amp;quot;; then&lt;br /&gt;
     log_failure_msg &amp;quot;$NAME&amp;quot; &amp;quot;Target directory \&amp;quot;$DIR\&amp;quot; does not exist. Can not continue.&amp;quot;&lt;br /&gt;
     exit 1&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
 # Create a reverse order for shutdown&lt;br /&gt;
 SERVICES_REVERSE=&amp;quot;&amp;quot;&lt;br /&gt;
 reverse() { SERVICES_REVERSE=&amp;quot;$9 $8 $7 $6 $5 $4 $3 $2 $1&amp;quot;; }&lt;br /&gt;
 reverse $SERVICES&lt;br /&gt;
&lt;br /&gt;
 # Check if a service is running&lt;br /&gt;
 isrunning() { &lt;br /&gt;
     ISRUNNING=&amp;quot;0&amp;quot;&lt;br /&gt;
     # Do we have PID-file?&lt;br /&gt;
     if [ -f &amp;quot;$PIDDIR/$1.pid&amp;quot; ]; then&lt;br /&gt;
         # Check if proc is running&lt;br /&gt;
         pid=`cat &amp;quot;$PIDDIR/$1.pid&amp;quot; 2&amp;amp;gt; /dev/null`&lt;br /&gt;
         if [ &amp;quot;$pid&amp;quot;&amp;amp;nbsp;!= &amp;quot;&amp;quot; ]; then&lt;br /&gt;
             if [ -d /proc/$pid ]; then&lt;br /&gt;
                 # Process is running&lt;br /&gt;
                 ISRUNNING=&amp;quot;1&amp;quot;&lt;br /&gt;
             fi&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
     #ISRUNNING=&amp;quot;0&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # Process commands&lt;br /&gt;
 #&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
 start)&lt;br /&gt;
     # Start all services one by one&lt;br /&gt;
     for server in $SERVICES; do&lt;br /&gt;
         log_daemon_msg &amp;quot;Starting $NAME&amp;quot; &amp;quot;$server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
         isrunning $server&lt;br /&gt;
         case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
             1) log_progress_msg &amp;quot;Process already started. Please stop first&amp;quot;; log_end_msg 1&amp;amp;nbsp;;;&lt;br /&gt;
             0) &lt;br /&gt;
                 # Process is not running&lt;br /&gt;
                 # Start process and sleep...&lt;br /&gt;
                 exefile=&amp;quot;/tmp/exe.OpenSim.$server.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
                 # Need to make external file, had big problems with screen params&lt;br /&gt;
                 echo \#\!/bin/bash &amp;amp;gt; $exefile&lt;br /&gt;
                 echo cd $DIR &amp;amp;gt;&amp;amp;gt; $exefile&lt;br /&gt;
                 echo $MONO $server &amp;amp;gt;&amp;amp;gt; $exefile&lt;br /&gt;
                 chmod +x $exefile&lt;br /&gt;
&lt;br /&gt;
                 cmd_screen=&amp;quot;screen -S $server -d -m $exefile&amp;quot;&lt;br /&gt;
                 start-stop-daemon --start -b -x /bin/su -m --pidfile=/tmp/su.$server.pid --chdir &amp;quot;$DIR&amp;quot; -- - $USER &amp;quot;-c $cmd_screen&amp;quot;&lt;br /&gt;
&lt;br /&gt;
                 # Delay between services that are started&lt;br /&gt;
                 sleep $DELAY_STARTUP&lt;br /&gt;
&lt;br /&gt;
                 rm $exefile 2&amp;amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
                 # Make PID-file&lt;br /&gt;
                 ps afxu | grep &amp;quot;mono $server&amp;quot; | grep -iEv &amp;quot;grep|screen&amp;quot; | awk {'print $2'} &amp;amp;gt; &amp;quot;$PIDDIR/$server.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
                 isrunning $server&lt;br /&gt;
                 case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
                     1) &lt;br /&gt;
                         # Process started ok&lt;br /&gt;
                         #log_progress_msg &amp;quot;Success&amp;quot;; &lt;br /&gt;
                         log_end_msg 0 &lt;br /&gt;
                        &amp;amp;nbsp;;;&lt;br /&gt;
                     0) &lt;br /&gt;
                         # Process didn't start... remove pid-file&lt;br /&gt;
                         rm &amp;quot;$PIDDIR/$server.pid&amp;quot; 2&amp;amp;gt; /dev/null&lt;br /&gt;
                         #log_progress_msg &amp;quot;Failure&amp;quot;; &lt;br /&gt;
                         log_end_msg 1 &lt;br /&gt;
                        &amp;amp;nbsp;;;&lt;br /&gt;
                 esac&lt;br /&gt;
                &amp;amp;nbsp;;;&lt;br /&gt;
         esac&lt;br /&gt;
&lt;br /&gt;
     done&lt;br /&gt;
    &amp;amp;nbsp;;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 stop)&lt;br /&gt;
     _killCount=0&lt;br /&gt;
&lt;br /&gt;
     for server in $SERVICES_REVERSE; do&lt;br /&gt;
         log_daemon_msg &amp;quot;Stopping $NAME&amp;quot; &amp;quot;$server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
         isrunning $server&lt;br /&gt;
         case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
         1) &lt;br /&gt;
             _killCount=`expr $_killCount + 1`&lt;br /&gt;
             log_progress_msg &amp;quot;Sending shutdown command:&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
             # We add some backspaces to the command in case something is on the console already&lt;br /&gt;
             echo `screen -S $server -X stuff \&amp;quot;                             &lt;br /&gt;
&lt;br /&gt;
             # Wait for it to shut down...&lt;br /&gt;
             sleep $DELAY_KILL&lt;br /&gt;
&lt;br /&gt;
             isrunning $server&lt;br /&gt;
             case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
                 1) log_progress_msg &amp;quot;is still running.&amp;quot;; log_end_msg 0&amp;amp;nbsp;;;&lt;br /&gt;
                 0) log_progress_msg &amp;quot;has been shutdown&amp;quot;; log_end_msg 0&amp;amp;nbsp;;;&lt;br /&gt;
             esac&lt;br /&gt;
&lt;br /&gt;
            &amp;amp;nbsp;;;&lt;br /&gt;
         0) &lt;br /&gt;
             log_progress_msg &amp;quot;is not running&amp;quot;; log_end_msg 0&lt;br /&gt;
            &amp;amp;nbsp;;;&lt;br /&gt;
         esac&lt;br /&gt;
&lt;br /&gt;
     done&lt;br /&gt;
&lt;br /&gt;
     # Check if any procs are still running&lt;br /&gt;
     for server in $SERVICES; do&lt;br /&gt;
         isrunning $server&lt;br /&gt;
         case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
         1) &lt;br /&gt;
             log_warning_msg &amp;quot;Stopping $NAME&amp;quot; &amp;quot;$server is still running: Forcing kill&amp;quot;&lt;br /&gt;
             echo `kill $pid 2&amp;amp;gt; /dev/null`;&lt;br /&gt;
             sleep $DELAY_FORCEKILL&lt;br /&gt;
             echo `kill -9 $pid 2&amp;amp;gt; /dev/null`;&lt;br /&gt;
             sleep 1&lt;br /&gt;
&lt;br /&gt;
             # Now check again if it is still running...&lt;br /&gt;
             isrunning $server&lt;br /&gt;
             case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
                 0) log_progress_msg &amp;quot;Success&amp;quot;; log_end_msg 0&amp;amp;nbsp;;;&lt;br /&gt;
                 1) log_progress_msg &amp;quot;Process is still running... Even after \&amp;quot;kill -9 $pid\&amp;quot;. WOW...&amp;quot;; log_end_msg 0&amp;amp;nbsp;;;&lt;br /&gt;
             esac&lt;br /&gt;
            &amp;amp;nbsp;;;&lt;br /&gt;
         0) &lt;br /&gt;
             #log_progress_msg &amp;quot;&amp;quot;; &lt;br /&gt;
            &amp;amp;nbsp;;;&lt;br /&gt;
         esac&lt;br /&gt;
     done&lt;br /&gt;
&lt;br /&gt;
     log_begin_msg &amp;quot;$NAME: All done (killed $_killCount procs)&amp;quot;; log_end_msg 0&lt;br /&gt;
&lt;br /&gt;
    &amp;amp;nbsp;;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 status)&lt;br /&gt;
     # Count how many processes we need&lt;br /&gt;
     PROCCOUNT=0&lt;br /&gt;
     for i in $SERVICES; do&lt;br /&gt;
         PROCCOUNT=`expr $PROCCOUNT + 1`&lt;br /&gt;
     done&lt;br /&gt;
&lt;br /&gt;
     # Go through server PID files and count how many are running&lt;br /&gt;
     log_begin_msg &amp;quot;$NAME: Running processed:&amp;quot;&lt;br /&gt;
     _pidCount=0&lt;br /&gt;
     for server in $SERVICES; do&lt;br /&gt;
&lt;br /&gt;
         isrunning $server&lt;br /&gt;
         case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
             1) &lt;br /&gt;
                 # This server is running&lt;br /&gt;
                 _pidCount=`expr $_pidCount + 1`&lt;br /&gt;
                 log_progress_msg &amp;quot;$server&amp;quot;&lt;br /&gt;
                &amp;amp;nbsp;;;&lt;br /&gt;
             0) &lt;br /&gt;
                &amp;amp;nbsp;;;&lt;br /&gt;
         esac&lt;br /&gt;
     done&lt;br /&gt;
&lt;br /&gt;
     log_begin_msg &amp;quot; ($_pidCount of $PROCCOUNT processes are running)&amp;quot;; log_end_msg 0&lt;br /&gt;
   &lt;br /&gt;
     # Check if running proc count matches requires proc count&lt;br /&gt;
     log_begin_msg &amp;quot;$NAME is&amp;quot;&lt;br /&gt;
     if [ $_pidCount -eq $PROCCOUNT ]; then&lt;br /&gt;
         log_progress_msg &amp;quot;running&amp;quot;; log_end_msg 0&lt;br /&gt;
         exit 0&lt;br /&gt;
     else&lt;br /&gt;
         log_progress_msg &amp;quot;NOT running&amp;quot;; log_end_msg 0&lt;br /&gt;
         exit 1&lt;br /&gt;
     fi&lt;br /&gt;
    &amp;amp;nbsp;;;&lt;br /&gt;
&lt;br /&gt;
 restart)&lt;br /&gt;
     $0 stop&lt;br /&gt;
     $0 start&lt;br /&gt;
    &amp;amp;nbsp;;;&lt;br /&gt;
 *)&lt;br /&gt;
     echo &amp;quot;Usage: /etc/init.d/$NAME {start|stop|restart|status}&amp;quot; &amp;amp;gt;&amp;amp;amp;2&lt;br /&gt;
     exit 1&lt;br /&gt;
    &amp;amp;nbsp;;;&lt;br /&gt;
 esac&lt;br /&gt;
&lt;br /&gt;
 exit 0&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Startup_script_linux</id>
		<title>Startup script linux</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Startup_script_linux"/>
				<updated>2010-03-05T11:50:53Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== /etc/init.d script for Linux  ==&lt;br /&gt;
&lt;br /&gt;
=== Instructions  ===&lt;br /&gt;
&lt;br /&gt;
Tested on Debian 5. CHUIDS user to opensim user. Supports: start, stop, restart, status &lt;br /&gt;
&lt;br /&gt;
To implement: Type: cat &amp;amp;gt; /etc/init.d/opensim Paste in script from this page Press: CTRL+D Type: chmod +x /etc/init.d/opensim Script should now be located on server and be executable. &lt;br /&gt;
&lt;br /&gt;
Type: update-rc.d opensim defaults Script should now be in your startup. &lt;br /&gt;
&lt;br /&gt;
Modify header in script to adapt it to your installation folder and user. &lt;br /&gt;
&lt;br /&gt;
NOTE: stop-command currently doesn't work properly (it doesn't do a soft shutdown). It will kill OpenSim first with kill pid, then kill -9 pid. So make sure you have saved your data.&amp;amp;nbsp;:) &lt;br /&gt;
&lt;br /&gt;
=== Script  ===&lt;br /&gt;
&amp;lt;pre&amp;gt;#! /bin/sh&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides: OpenSim&lt;br /&gt;
# Required-Start: $local_fs $network &lt;br /&gt;
# Required-Stop: $local_fs&lt;br /&gt;
# Default-Start: 2 3 4 5&lt;br /&gt;
# Default-Stop: 0 1 6&lt;br /&gt;
# Short-Description: Tedds OpenSim init.d-script&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
# Put script in /etc/init.d/&lt;br /&gt;
# then execute: update-rc.d opensim defaults&lt;br /&gt;
&lt;br /&gt;
set -e&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Directories&lt;br /&gt;
#&lt;br /&gt;
# Location of OpenSim installation&lt;br /&gt;
DIR=/home/opensim/OpenSim/bin/&lt;br /&gt;
# Different PID dir?&lt;br /&gt;
PIDDIR=$DIR&lt;br /&gt;
&lt;br /&gt;
USER=opensim&lt;br /&gt;
SERVICES=&amp;quot;OpenSim.Grid.UserServer.exe OpenSim.Server.exe OpenSim.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Kill values (in seconds)&lt;br /&gt;
#&lt;br /&gt;
# How long between each service being started&lt;br /&gt;
DELAY_STARTUP=10&lt;br /&gt;
# How long between each service is sent shutdown command&lt;br /&gt;
DELAY_KILL=10&lt;br /&gt;
# After shutdown has been sent to all we do another loop with &amp;quot;kill&amp;quot;, then &amp;quot;kill -9&amp;quot;. How long between &amp;quot;kill&amp;quot; and &amp;quot;kill -9&amp;quot;.&lt;br /&gt;
DELAY_FORCEKILL=10&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Info on service handled by this script&lt;br /&gt;
#&lt;br /&gt;
# Name of service&lt;br /&gt;
NAME=opensim&lt;br /&gt;
# Description of service&lt;br /&gt;
DESC=&amp;quot;OpenSim Server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Binaries&lt;br /&gt;
SCREEN=/usr/bin/screen&lt;br /&gt;
MONO=/usr/bin/mono&lt;br /&gt;
&lt;br /&gt;
###########################&lt;br /&gt;
##### START OF SCRIPT #####&lt;br /&gt;
###########################&lt;br /&gt;
&lt;br /&gt;
export PATH=&amp;quot;${PATH:+$PATH:}/usr/sbin:/sbin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Load LSB log functions&lt;br /&gt;
_lsbFile=&amp;quot;&amp;quot;&lt;br /&gt;
if [ -e /etc/debian_version ]; then&lt;br /&gt;
_lsbFile=&amp;quot;/lib/lsb/init-functions&amp;quot;&lt;br /&gt;
if [ -f $_lsbFile ]; then&lt;br /&gt;
. $_lsbFile&lt;br /&gt;
else&lt;br /&gt;
echo This script requires LSB init-functions file which doesn't exist: $_lsbFile&lt;br /&gt;
exit 1&lt;br /&gt;
fi&lt;br /&gt;
else&lt;br /&gt;
# [ -e /etc/init.d/functions ]&amp;amp;amp;nbsp;; then&lt;br /&gt;
_lsbFile=&amp;quot;/etc/init.d/functions&amp;quot;&lt;br /&gt;
if [ -e $_lsbFile ]; then&lt;br /&gt;
. $_lsbFile&lt;br /&gt;
else&lt;br /&gt;
echo This script requires LSB init-functions file which doesn't exist: $_lsbFile&lt;br /&gt;
exit 1&lt;br /&gt;
fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Lets use fancy output&lt;br /&gt;
log_use_fancy_output&lt;br /&gt;
&lt;br /&gt;
# Check that target directory exists&lt;br /&gt;
if test&amp;amp;amp;nbsp;! -d &amp;quot;$DIR&amp;quot;; then&lt;br /&gt;
log_failure_msg &amp;quot;$NAME&amp;quot; &amp;quot;Target directory \&amp;quot;$DIR\&amp;quot; does not exist. Can not continue.&amp;quot;&lt;br /&gt;
exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Create a reverse order for shutdown&lt;br /&gt;
SERVICES_REVERSE=&amp;quot;&amp;quot;&lt;br /&gt;
reverse() { SERVICES_REVERSE=&amp;quot;$9 $8 $7 $6 $5 $4 $3 $2 $1&amp;quot;; }&lt;br /&gt;
reverse $SERVICES&lt;br /&gt;
&lt;br /&gt;
# Check if a service is running&lt;br /&gt;
isrunning() { &lt;br /&gt;
ISRUNNING=&amp;quot;0&amp;quot;&lt;br /&gt;
# Do we have PID-file?&lt;br /&gt;
if [ -f &amp;quot;$PIDDIR/$1.pid&amp;quot; ]; then&lt;br /&gt;
# Check if proc is running&lt;br /&gt;
pid=`cat &amp;quot;$PIDDIR/$1.pid&amp;quot; 2&amp;amp;amp;gt; /dev/null`&lt;br /&gt;
if [ &amp;quot;$pid&amp;quot;&amp;amp;amp;nbsp;!= &amp;quot;&amp;quot; ]; then&lt;br /&gt;
if [ -d /proc/$pid ]; then&lt;br /&gt;
# Process is running&lt;br /&gt;
ISRUNNING=&amp;quot;1&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
fi&lt;br /&gt;
fi&lt;br /&gt;
#ISRUNNING=&amp;quot;0&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Process commands&lt;br /&gt;
#&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
start)&lt;br /&gt;
# Start all services one by one&lt;br /&gt;
for server in $SERVICES; do&lt;br /&gt;
log_daemon_msg &amp;quot;Starting $NAME&amp;quot; &amp;quot;$server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
isrunning $server&lt;br /&gt;
case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
1) log_progress_msg &amp;quot;Process already started. Please stop first&amp;quot;; log_end_msg 1&amp;amp;amp;nbsp;;;&lt;br /&gt;
0) &lt;br /&gt;
# Process is not running&lt;br /&gt;
# Start process and sleep...&lt;br /&gt;
exefile=&amp;quot;/tmp/exe.OpenSim.$server.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Need to make external file, had big problems with screen params&lt;br /&gt;
echo \#\!/bin/bash &amp;amp;amp;gt; $exefile&lt;br /&gt;
echo cd $DIR &amp;amp;amp;gt;&amp;amp;amp;gt; $exefile&lt;br /&gt;
echo $MONO $server &amp;amp;amp;gt;&amp;amp;amp;gt; $exefile&lt;br /&gt;
chmod +x $exefile&lt;br /&gt;
&lt;br /&gt;
cmd_screen=&amp;quot;screen -S $server -d -m $exefile&amp;quot;&lt;br /&gt;
start-stop-daemon --start -b -x /bin/su -m --pidfile=/tmp/su.$server.pid --chdir &amp;quot;$DIR&amp;quot; -- - $USER &amp;quot;-c $cmd_screen&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Delay between services that are started&lt;br /&gt;
sleep $DELAY_STARTUP&lt;br /&gt;
&lt;br /&gt;
rm $exefile 2&amp;amp;amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
# Make PID-file&lt;br /&gt;
ps afxu | grep &amp;quot;mono $server&amp;quot; | grep -iEv &amp;quot;grep|screen&amp;quot; | awk {'print $2'} &amp;amp;amp;gt; &amp;quot;$PIDDIR/$server.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
isrunning $server&lt;br /&gt;
case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
1) &lt;br /&gt;
# Process started ok&lt;br /&gt;
#log_progress_msg &amp;quot;Success&amp;quot;; &lt;br /&gt;
log_end_msg 0 &lt;br /&gt;
&amp;amp;amp;nbsp;;;&lt;br /&gt;
0) &lt;br /&gt;
# Process didn't start... remove pid-file&lt;br /&gt;
rm &amp;quot;$PIDDIR/$server.pid&amp;quot; 2&amp;amp;amp;gt; /dev/null&lt;br /&gt;
#log_progress_msg &amp;quot;Failure&amp;quot;; &lt;br /&gt;
log_end_msg 1 &lt;br /&gt;
&amp;amp;amp;nbsp;;;&lt;br /&gt;
esac&lt;br /&gt;
&amp;amp;amp;nbsp;;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
done&lt;br /&gt;
&amp;amp;amp;nbsp;;;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
stop)&lt;br /&gt;
_killCount=0&lt;br /&gt;
&lt;br /&gt;
for server in $SERVICES_REVERSE; do&lt;br /&gt;
log_daemon_msg &amp;quot;Stopping $NAME&amp;quot; &amp;quot;$server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
isrunning $server&lt;br /&gt;
case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
1) &lt;br /&gt;
_killCount=`expr $_killCount + 1`&lt;br /&gt;
log_progress_msg &amp;quot;Sending shutdown command:&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
# We add some backspaces to the command in case something is on the console already&lt;br /&gt;
echo `screen -S $server -X stuff \&amp;quot; &lt;br /&gt;
&lt;br /&gt;
# Wait for it to shut down...&lt;br /&gt;
sleep $DELAY_KILL&lt;br /&gt;
&lt;br /&gt;
isrunning $server&lt;br /&gt;
case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
1) log_progress_msg &amp;quot;is still running.&amp;quot;; log_end_msg 0&amp;amp;amp;nbsp;;;&lt;br /&gt;
0) log_progress_msg &amp;quot;has been shutdown&amp;quot;; log_end_msg 0&amp;amp;amp;nbsp;;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
&amp;amp;amp;nbsp;;;&lt;br /&gt;
0) &lt;br /&gt;
log_progress_msg &amp;quot;is not running&amp;quot;; log_end_msg 0&lt;br /&gt;
&amp;amp;amp;nbsp;;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
# Check if any procs are still running&lt;br /&gt;
for server in $SERVICES; do&lt;br /&gt;
isrunning $server&lt;br /&gt;
case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
1) &lt;br /&gt;
log_warning_msg &amp;quot;Stopping $NAME&amp;quot; &amp;quot;$server is still running: Forcing kill&amp;quot;&lt;br /&gt;
echo `kill $pid 2&amp;amp;amp;gt; /dev/null`;&lt;br /&gt;
sleep $DELAY_FORCEKILL&lt;br /&gt;
echo `kill -9 $pid 2&amp;amp;amp;gt; /dev/null`;&lt;br /&gt;
sleep 1&lt;br /&gt;
&lt;br /&gt;
# Now check again if it is still running...&lt;br /&gt;
isrunning $server&lt;br /&gt;
case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
0) log_progress_msg &amp;quot;Success&amp;quot;; log_end_msg 0&amp;amp;amp;nbsp;;;&lt;br /&gt;
1) log_progress_msg &amp;quot;Process is still running... Even after \&amp;quot;kill -9 $pid\&amp;quot;. WOW...&amp;quot;; log_end_msg 0&amp;amp;amp;nbsp;;;&lt;br /&gt;
esac&lt;br /&gt;
&amp;amp;amp;nbsp;;;&lt;br /&gt;
0) &lt;br /&gt;
#log_progress_msg &amp;quot;&amp;quot;; &lt;br /&gt;
&amp;amp;amp;nbsp;;;&lt;br /&gt;
esac&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
log_begin_msg &amp;quot;$NAME: All done (killed $_killCount procs)&amp;quot;; log_end_msg 0&lt;br /&gt;
&lt;br /&gt;
&amp;amp;amp;nbsp;;;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
status)&lt;br /&gt;
# Count how many processes we need&lt;br /&gt;
PROCCOUNT=0&lt;br /&gt;
for i in $SERVICES; do&lt;br /&gt;
PROCCOUNT=`expr $PROCCOUNT + 1`&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
# Go through server PID files and count how many are running&lt;br /&gt;
log_begin_msg &amp;quot;$NAME: Running processed:&amp;quot;&lt;br /&gt;
_pidCount=0&lt;br /&gt;
for server in $SERVICES; do&lt;br /&gt;
&lt;br /&gt;
isrunning $server&lt;br /&gt;
case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
1) &lt;br /&gt;
# This server is running&lt;br /&gt;
_pidCount=`expr $_pidCount + 1`&lt;br /&gt;
log_progress_msg &amp;quot;$server&amp;quot;&lt;br /&gt;
&amp;amp;amp;nbsp;;;&lt;br /&gt;
0) &lt;br /&gt;
&amp;amp;amp;nbsp;;;&lt;br /&gt;
esac&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
log_begin_msg &amp;quot; ($_pidCount of $PROCCOUNT processes are running)&amp;quot;; log_end_msg 0&lt;br /&gt;
&lt;br /&gt;
# Check if running proc count matches requires proc count&lt;br /&gt;
log_begin_msg &amp;quot;$NAME is&amp;quot;&lt;br /&gt;
if [ $_pidCount -eq $PROCCOUNT ]; then&lt;br /&gt;
log_progress_msg &amp;quot;running&amp;quot;; log_end_msg 0&lt;br /&gt;
exit 0&lt;br /&gt;
else&lt;br /&gt;
log_progress_msg &amp;quot;NOT running&amp;quot;; log_end_msg 0&lt;br /&gt;
exit 1&lt;br /&gt;
fi&lt;br /&gt;
&amp;amp;amp;nbsp;;;&lt;br /&gt;
&lt;br /&gt;
restart)&lt;br /&gt;
$0 stop&lt;br /&gt;
$0 start&lt;br /&gt;
&amp;amp;amp;nbsp;;;&lt;br /&gt;
*)&lt;br /&gt;
echo &amp;quot;Usage: /etc/init.d/$NAME {start|stop|restart|status}&amp;quot; &amp;amp;amp;gt;&amp;amp;amp;amp;2&lt;br /&gt;
exit 1&lt;br /&gt;
&amp;amp;amp;nbsp;;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Backup</id>
		<title>Backup</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Backup"/>
				<updated>2010-03-05T11:46:05Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: New page: = Backup of OpenSim MySQL&amp;amp;nbsp;database =  == Linux ==  Add something like this to crontab for a weekly/daily/hourly run. (“crontab -e” to edit, “man crontab” to understand how to ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Backup of OpenSim MySQL&amp;amp;nbsp;database =&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
&lt;br /&gt;
Add something like this to crontab for a weekly/daily/hourly run. (“crontab -e” to edit, “man crontab” to understand how to edit)&lt;br /&gt;
&amp;lt;pre&amp;gt;mysqldump -uuser -ppass dbname | gzip &amp;amp;gt; /tmp/mydb_`date +%Y%m%d_%H%M%S`.sql.gz&amp;lt;/pre&amp;gt;&lt;br /&gt;
Crontab should e-mail you and errors in backup if it fails. (If your *nix is set up correctly)&lt;br /&gt;
&lt;br /&gt;
To verify the backup gunzip it and look inside the .sql-file, it should contain a DB-dump. For example by executing:&lt;br /&gt;
&amp;lt;pre&amp;gt;zcat /tmp/mydb_YYYYMMDD_HHmmSS.sql.gz | more&amp;lt;/pre&amp;gt;&lt;br /&gt;
To restore a given db:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /tmp/mydb_YYYYMMDD_HHmmSS.sql.gz | gunzip | mysql -uuser -ppass dbname &amp;lt;/pre&amp;gt;&lt;br /&gt;
== Windows ==&lt;br /&gt;
&lt;br /&gt;
The same as above can be done in Windows, but rotating the date can't be done in batch scripting afaik. I&amp;amp;nbsp;do however have a script for Windows I&amp;amp;nbsp;wrote for my OpenSim.&lt;br /&gt;
&lt;br /&gt;
This is a script for taking a full MySQL backup on Windows (all databases). It required ActiveState Perl and 7zip command line to work. ''It works equally well for Linux, but a few adjustments to paths in header needs to be made.''&lt;br /&gt;
&lt;br /&gt;
ActiveState Perl:&amp;amp;nbsp;[http://www.activestate.com/activeperl/ http://www.activestate.com/activeperl/]&amp;lt;br&amp;gt;7-Zip Command line: [http://www.7-zip.org/download.html http://www.7-zip.org/download.html]&lt;br /&gt;
&amp;lt;pre&amp;gt;use strict;&lt;br /&gt;
use locale;&lt;br /&gt;
#&lt;br /&gt;
# MySQL Backup Script by Tedd Hansen, tedd@konge.net, feb 2010&lt;br /&gt;
#&lt;br /&gt;
# THIS SCRIPT REQUIRES PERL INSTALLED. FOR WINDOWS USE ACTIVESTATE PERL.&lt;br /&gt;
#&lt;br /&gt;
# (1)&lt;br /&gt;
# This script requires a backup-user to be created on the database.&lt;br /&gt;
# Execute this: GRANT ALL on *.* to 'backup-user'@'localhost' identified by 'ZeBackup0perat00r'; &lt;br /&gt;
&lt;br /&gt;
#&amp;amp;nbsp;(change user and password at start of script))&lt;br /&gt;
#&lt;br /&gt;
# (2)&lt;br /&gt;
# To schedule script in Windows you must create a user with log on locally rights like Administrator has.&lt;br /&gt;
# DO NOT USE ADMINISTRATOR USER. If you do then backup will stop working next time we change password.&lt;br /&gt;
# Set startup path to the location of script, and schedule script to execute every 5 hours for example.&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Where to put backup&lt;br /&gt;
my $DIR_ROOT = &amp;quot;E:\\Backup&amp;quot;;&lt;br /&gt;
my $DIR_BACKUP = &amp;quot;$DIR_ROOT\\MySQL_Backup&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# What to name backup&lt;br /&gt;
# Note: !DB! will be replaced with database name, !DATE! with current date yyyyMMdd and !TIME! with current time HHmmss&lt;br /&gt;
my $FILETEMPLATE = &amp;quot;MySQL !DB! !DATE! !TIME!.sqldump.7z&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
my $MYSQL_USER=&amp;quot;backup-user&amp;quot;;&lt;br /&gt;
my $MYSQL_PASSWORD=&amp;quot;ZeBackup0perat00r&amp;quot;;&lt;br /&gt;
my $MYSQL_HOST=&amp;quot;localhost&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Full path to binary files we need&lt;br /&gt;
my $BIN_7Z = &amp;quot;$DIR_ROOT\\7za.exe&amp;quot;;&lt;br /&gt;
my $BIN_MYSQLDUMP = &amp;quot;E:\\MySQL\\bin\\mysqldump.exe&amp;quot;;&lt;br /&gt;
my $BIN_MYSQL = &amp;quot;E:\\MySQL\\bin\\mysql.exe&amp;quot;;&lt;br /&gt;
my $CMD_LIST_DB = &amp;quot;echo show databases; | $BIN_MYSQL -u$MYSQL_USER -p$MYSQL_PASSWORD -h $MYSQL_HOST&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# How long before we delete it?&lt;br /&gt;
my $KEEP_HISTORY_FOR_DAYS = 30;&lt;br /&gt;
&lt;br /&gt;
# We are piping MySQLDump output directly into 7z for compression. 7z writes to filesystem.&lt;br /&gt;
#&lt;br /&gt;
# Note: !DB! and !OUTFILE! will be replaced with database name and filename for output file&lt;br /&gt;
# -t7z = 7zip format&lt;br /&gt;
# -mx5 = Medium compression: 0 = none , 9 = ultra .. Note: Increasing compression will use more CPU, and we want to reserve CPU for customers... :)&lt;br /&gt;
# -ms = Create solid archive&lt;br /&gt;
# -mmt = Multithreading&lt;br /&gt;
# -mo=PPMd = PPMd algorithm (good for text, and we have only text)&lt;br /&gt;
my $BACKUP_ARGS = &amp;quot;-u $MYSQL_USER -p$MYSQL_PASSWORD -h $MYSQL_HOST !DB! | $BIN_7Z a -y -t7z -mx7 -ms -mmt -si !OUTFILE!&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#####################&lt;br /&gt;
## START OF SCRIPT ##&lt;br /&gt;
### ### &lt;br /&gt;
my %DBDONE = {};&lt;br /&gt;
&lt;br /&gt;
# Attempt to create missing dirs&lt;br /&gt;
mkdir &amp;quot;$DIR_ROOT&amp;quot; unless (-d $DIR_ROOT);&lt;br /&gt;
mkdir &amp;quot;$DIR_BACKUP&amp;quot; unless (-d $DIR_BACKUP);&lt;br /&gt;
&lt;br /&gt;
# Check that we got all we need&lt;br /&gt;
die &amp;quot;ERROR: ROOT DIR $DIR_ROOT DOES NOT EXIS!\n&amp;quot; unless (-d $DIR_ROOT);&lt;br /&gt;
die &amp;quot;ERROR: BACKUP DIR $DIR_BACKUP DOES NOT EXIS!\n&amp;quot; unless (-d $DIR_BACKUP);&lt;br /&gt;
die &amp;quot;ERROR: 7Z DOES NOT EXIST AT $BIN_7Z!\n&amp;quot; unless (-f $BIN_7Z);&lt;br /&gt;
die &amp;quot;ERROR: MYSQLDUMP DOES NOT EXIST AT $BIN_MYSQLDUMP!\n&amp;quot; unless (-f $BIN_MYSQLDUMP);&lt;br /&gt;
die &amp;quot;ERROR: MYSQLDUMP DOES NOT EXIST AT $BIN_MYSQL!\n&amp;quot; unless (-f $BIN_MYSQL);&lt;br /&gt;
&lt;br /&gt;
# Delete old backups&lt;br /&gt;
print &amp;quot;Removing backups older than $KEEP_HISTORY_FOR_DAYS days.\n&amp;quot;;&lt;br /&gt;
CleanupOldies();&lt;br /&gt;
&lt;br /&gt;
# Make new backup&lt;br /&gt;
print &amp;quot;Backing up all MySQL databases on $MYSQL_HOST...\n&amp;quot;;&lt;br /&gt;
open(DBLIST, &amp;quot;$CMD_LIST_DB |&amp;quot;);&lt;br /&gt;
while (my $dbname = &amp;amp;lt;DBLIST&amp;amp;gt;) {&lt;br /&gt;
chomp $dbname;&lt;br /&gt;
BackupDatabase($dbname);&lt;br /&gt;
}&lt;br /&gt;
close(DBLIST);&lt;br /&gt;
&lt;br /&gt;
sub CleanupOldies&lt;br /&gt;
{&lt;br /&gt;
# Get what time we should delete files at&lt;br /&gt;
$KEEP_HISTORY_FOR_DAYS = 30 if ($KEEP_HISTORY_FOR_DAYS &amp;amp;lt; 1);&lt;br /&gt;
&lt;br /&gt;
my ($dsec,$dmin,$dhour,$dmday,$dmon,$dyear) = localtime(time - ($KEEP_HISTORY_FOR_DAYS * 24 * 60 * 60));&lt;br /&gt;
my $DDATE = &amp;quot;0000&amp;quot;.($dyear+1900).&amp;quot;:00&amp;quot;.($dmon+1).&amp;quot;:00$dmday&amp;quot;;&lt;br /&gt;
my $DTIME = &amp;quot;00$dhour:00$dmin:00$dsec&amp;quot;;&lt;br /&gt;
$DDATE =~ s/^0*([^:]{4}):0*([^:]{2}):0*([^:]{2}).*/$1$2$3/;&lt;br /&gt;
$DTIME =~ s/^0*([^:]{2}):0*([^:]{2}):0*([^:]{2}).*/$1$2$3/;&lt;br /&gt;
my $CLEANTIME = $DDATE.$DTIME;&lt;br /&gt;
&lt;br /&gt;
opendir(BDIR, &amp;quot;$DIR_BACKUP&amp;quot;);&lt;br /&gt;
while (my $bfile = readdir(BDIR)) &lt;br /&gt;
{&lt;br /&gt;
# Does filename match?&lt;br /&gt;
if ($bfile =~ m/(\d{8})\s+(\d{6})/) {&lt;br /&gt;
my $bfiledate = $1.$2;&lt;br /&gt;
# Is it old?&lt;br /&gt;
if ($bfiledate &amp;amp;lt; $CLEANTIME) {&lt;br /&gt;
print &amp;quot;Deleting old backup file: $bfile\n&amp;quot;;&lt;br /&gt;
unlink &amp;quot;$DIR_BACKUP\\$bfile&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
closedir(BDIR);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub BackupDatabase&lt;br /&gt;
{&lt;br /&gt;
my $dbname = shift;&lt;br /&gt;
&lt;br /&gt;
# Only process each DB once&lt;br /&gt;
return if ($DBDONE{lc($dbname)});&lt;br /&gt;
$DBDONE{lc($dbname)} = 1;&lt;br /&gt;
&lt;br /&gt;
# Get current date&lt;br /&gt;
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);&lt;br /&gt;
my $DATE = &amp;quot;0000&amp;quot;.($year+1900).&amp;quot;:00&amp;quot;.($mon+1).&amp;quot;:00$mday&amp;quot;;&lt;br /&gt;
my $TIME = &amp;quot;00$hour:00$min:00$sec&amp;quot;;&lt;br /&gt;
$DATE =~ s/^0*([^:]{4}):0*([^:]{2}):0*([^:]{2}).*/$1$2$3/;&lt;br /&gt;
$TIME =~ s/^0*([^:]{2}):0*([^:]{2}):0*([^:]{2}).*/$1$2$3/;&lt;br /&gt;
&lt;br /&gt;
# Get output filename&lt;br /&gt;
my ($backup_filename) = $FILETEMPLATE;&lt;br /&gt;
$backup_filename =~ s/!DB!/$dbname/i;&lt;br /&gt;
$backup_filename =~ s/!DATE!/$DATE/i;&lt;br /&gt;
$backup_filename =~ s/!TIME!/$TIME/i;&lt;br /&gt;
my ($backupfile) = &amp;quot;$DIR_BACKUP\\$backup_filename&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Get output command&lt;br /&gt;
my ($cmd_mysqldump) = &amp;quot;$BIN_MYSQLDUMP $BACKUP_ARGS&amp;quot;;&lt;br /&gt;
$cmd_mysqldump =~ s/!DB!/$dbname/i;&lt;br /&gt;
$cmd_mysqldump =~ s/!OUTFILE!/\&amp;quot;$backupfile\&amp;quot;/i;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Make backup...&lt;br /&gt;
#&lt;br /&gt;
print &amp;quot;* Backing up database '$dbname'\nTo file: $backupfile\n&amp;quot;;&lt;br /&gt;
print `$cmd_mysqldump`;&lt;br /&gt;
my ($dsec,$dmin,$dhour,$dmday)=localtime(time);&lt;br /&gt;
my $doneTime = &amp;quot;00&amp;quot;.($dmday - $mday).&amp;quot;:00&amp;quot;.($dhour - $hour).&amp;quot;:00&amp;quot;.($dmin - $min).&amp;quot;:00&amp;quot;.($dsec - $sec);&lt;br /&gt;
$doneTime =~ s/^0*([^:]{2}):0*([^:]{2}):0*([^:]{2}):0*([^:]{2}).*/$1d $2:$3:$4/;&lt;br /&gt;
print &amp;quot;Backup of $dbname done in $doneTime.\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;font style=&amp;quot;background-color: #f9f9f9&amp;quot; face=&amp;quot;Courier New&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Startup_script_linux</id>
		<title>Startup script linux</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Startup_script_linux"/>
				<updated>2010-02-20T07:20:44Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==/etc/init.d script for Linux==&lt;br /&gt;
===Instructions===&lt;br /&gt;
Tested on Debian 5.&lt;br /&gt;
CHUIDS user to opensim user.&lt;br /&gt;
Supports: start, stop, restart, status&lt;br /&gt;
&lt;br /&gt;
To implement:&lt;br /&gt;
Type: cat &amp;gt; /etc/init.d/opensim&lt;br /&gt;
Paste in script from this page&lt;br /&gt;
Press: CTRL+D&lt;br /&gt;
Type: chmod +x /etc/init.d/opensim&lt;br /&gt;
Script should now be located on server and be executable.&lt;br /&gt;
&lt;br /&gt;
Type: update-rc.d opensim defaults&lt;br /&gt;
Script should now be in your startup.&lt;br /&gt;
&lt;br /&gt;
Modify header in script to adapt it to your installation folder and user.&lt;br /&gt;
&lt;br /&gt;
NOTE:&lt;br /&gt;
stop-command currently doesn't work properly (it doesn't do a soft shutdown). It will kill OpenSim first with kill pid, then kill -9 pid. So make sure you have saved your data. :)&lt;br /&gt;
&lt;br /&gt;
===Script===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 #! /bin/sh&lt;br /&gt;
 ### BEGIN INIT INFO&lt;br /&gt;
 # Provides:          OpenSim&lt;br /&gt;
 # Required-Start:    $local_fs $network &lt;br /&gt;
 # Required-Stop:     $local_fs&lt;br /&gt;
 # Default-Start:     2 3 4 5&lt;br /&gt;
 # Default-Stop:      0 1 6&lt;br /&gt;
 # Short-Description: Tedds OpenSim init.d-script&lt;br /&gt;
 ### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
 # Put script in /etc/init.d/&lt;br /&gt;
 # then execute: update-rc.d opensim defaults&lt;br /&gt;
&lt;br /&gt;
 set -e&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # Directories&lt;br /&gt;
 #&lt;br /&gt;
 # Location of OpenSim installation&lt;br /&gt;
 DIR=/home/opensim/OpenSim/bin/&lt;br /&gt;
 # Different PID dir?&lt;br /&gt;
 PIDDIR=$DIR&lt;br /&gt;
&lt;br /&gt;
 USER=opensim&lt;br /&gt;
 SERVICES=&amp;quot;OpenSim.Grid.UserServer.exe OpenSim.Server.exe OpenSim.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # Kill values (in seconds)&lt;br /&gt;
 #&lt;br /&gt;
 # How long between each service being started&lt;br /&gt;
 DELAY_STARTUP=10&lt;br /&gt;
 # How long between each service is sent shutdown command&lt;br /&gt;
 DELAY_KILL=10&lt;br /&gt;
 # After shutdown has been sent to all we do another loop with &amp;quot;kill&amp;quot;, then &amp;quot;kill -9&amp;quot;. How long between &amp;quot;kill&amp;quot; and &amp;quot;kill -9&amp;quot;.&lt;br /&gt;
 DELAY_FORCEKILL=10&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # Info on service handled by this script&lt;br /&gt;
 #&lt;br /&gt;
 # Name of service&lt;br /&gt;
 NAME=opensim&lt;br /&gt;
 # Description of service&lt;br /&gt;
 DESC=&amp;quot;OpenSim Server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 # Binaries&lt;br /&gt;
 SCREEN=/usr/bin/screen&lt;br /&gt;
 MONO=/usr/bin/mono&lt;br /&gt;
&lt;br /&gt;
 ###########################&lt;br /&gt;
 ##### START OF SCRIPT #####&lt;br /&gt;
 ###########################&lt;br /&gt;
&lt;br /&gt;
 export PATH=&amp;quot;${PATH:+$PATH:}/usr/sbin:/sbin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 # Load LSB log functions&lt;br /&gt;
 _lsbFile=&amp;quot;&amp;quot;&lt;br /&gt;
 if [ -e /etc/debian_version ]; then&lt;br /&gt;
     _lsbFile=&amp;quot;/lib/lsb/init-functions&amp;quot;&lt;br /&gt;
     if [ -f $_lsbFile ]; then&lt;br /&gt;
         . $_lsbFile&lt;br /&gt;
     else&lt;br /&gt;
         echo This script requires LSB init-functions file which doesn't exist: $_lsbFile&lt;br /&gt;
         exit 1&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
 # [ -e /etc/init.d/functions ] ; then&lt;br /&gt;
     _lsbFile=&amp;quot;/etc/init.d/functions&amp;quot;&lt;br /&gt;
     if [ -e $_lsbFile ]; then&lt;br /&gt;
         . $_lsbFile&lt;br /&gt;
     else&lt;br /&gt;
         echo This script requires LSB init-functions file which doesn't exist: $_lsbFile&lt;br /&gt;
         exit 1&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
 # Lets use fancy output&lt;br /&gt;
 log_use_fancy_output&lt;br /&gt;
&lt;br /&gt;
 # Check that target directory exists&lt;br /&gt;
 if test ! -d &amp;quot;$DIR&amp;quot;; then&lt;br /&gt;
     log_failure_msg &amp;quot;$NAME&amp;quot; &amp;quot;Target directory \&amp;quot;$DIR\&amp;quot; does not exist. Can not continue.&amp;quot;&lt;br /&gt;
     exit 1&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
 # Create a reverse order for shutdown&lt;br /&gt;
 SERVICES_REVERSE=&amp;quot;&amp;quot;&lt;br /&gt;
 reverse() { SERVICES_REVERSE=&amp;quot;$9 $8 $7 $6 $5 $4 $3 $2 $1&amp;quot;; }&lt;br /&gt;
 reverse $SERVICES&lt;br /&gt;
&lt;br /&gt;
 # Check if a service is running&lt;br /&gt;
 isrunning() { &lt;br /&gt;
     ISRUNNING=&amp;quot;0&amp;quot;&lt;br /&gt;
     # Do we have PID-file?&lt;br /&gt;
     if [ -f &amp;quot;$PIDDIR/$1.pid&amp;quot; ]; then&lt;br /&gt;
         # Check if proc is running&lt;br /&gt;
         pid=`cat &amp;quot;$PIDDIR/$1.pid&amp;quot; 2&amp;gt; /dev/null`&lt;br /&gt;
         if [ &amp;quot;$pid&amp;quot; != &amp;quot;&amp;quot; ]; then&lt;br /&gt;
             if [ -d /proc/$pid ]; then&lt;br /&gt;
                 # Process is running&lt;br /&gt;
                 ISRUNNING=&amp;quot;1&amp;quot;&lt;br /&gt;
             fi&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
     #ISRUNNING=&amp;quot;0&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # Process commands&lt;br /&gt;
 #&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
 start)&lt;br /&gt;
     # Start all services one by one&lt;br /&gt;
     for server in $SERVICES; do&lt;br /&gt;
         log_daemon_msg &amp;quot;Starting $NAME&amp;quot; &amp;quot;$server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
         isrunning $server&lt;br /&gt;
         case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
             1) log_progress_msg &amp;quot;Process already started. Please stop first&amp;quot;; log_end_msg 1 ;;&lt;br /&gt;
             0) &lt;br /&gt;
                 # Process is not running&lt;br /&gt;
                 # Start process and sleep...&lt;br /&gt;
                 exefile=&amp;quot;/tmp/exe.OpenSim.$server.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
                 # Need to make external file, had big problems with screen params&lt;br /&gt;
                 echo \#\!/bin/bash &amp;gt; $exefile&lt;br /&gt;
                 echo cd $DIR &amp;gt;&amp;gt; $exefile&lt;br /&gt;
                 echo $MONO $server &amp;gt;&amp;gt; $exefile&lt;br /&gt;
                 chmod +x $exefile&lt;br /&gt;
&lt;br /&gt;
                 cmd_screen=&amp;quot;screen -S $server -d -m $exefile&amp;quot;&lt;br /&gt;
                 start-stop-daemon --start -b -x /bin/su -m --pidfile=/tmp/su.$server.pid --chdir &amp;quot;$DIR&amp;quot; -- - $USER &amp;quot;-c $cmd_screen&amp;quot;&lt;br /&gt;
&lt;br /&gt;
                 # Delay between services that are started&lt;br /&gt;
                 sleep $DELAY_STARTUP&lt;br /&gt;
&lt;br /&gt;
                 rm $exefile 2&amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
                 # Make PID-file&lt;br /&gt;
                 ps afxu | grep &amp;quot;mono $server&amp;quot; | grep -iEv &amp;quot;grep|screen&amp;quot; | awk {'print $2'} &amp;gt; &amp;quot;$PIDDIR/$server.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
                 isrunning $server&lt;br /&gt;
                 case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
                     1) &lt;br /&gt;
                         # Process started ok&lt;br /&gt;
                         #log_progress_msg &amp;quot;Success&amp;quot;; &lt;br /&gt;
                         log_end_msg 0 &lt;br /&gt;
                         ;;&lt;br /&gt;
                     0) &lt;br /&gt;
                         # Process didn't start... remove pid-file&lt;br /&gt;
                         rm &amp;quot;$PIDDIR/$server.pid&amp;quot; 2&amp;gt; /dev/null&lt;br /&gt;
                         #log_progress_msg &amp;quot;Failure&amp;quot;; &lt;br /&gt;
                         log_end_msg 1 &lt;br /&gt;
                         ;;&lt;br /&gt;
                 esac&lt;br /&gt;
                 ;;&lt;br /&gt;
         esac&lt;br /&gt;
&lt;br /&gt;
     done&lt;br /&gt;
     ;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 stop)&lt;br /&gt;
     _killCount=0&lt;br /&gt;
&lt;br /&gt;
     for server in $SERVICES_REVERSE; do&lt;br /&gt;
         log_daemon_msg &amp;quot;Stopping $NAME&amp;quot; &amp;quot;$server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
         isrunning $server&lt;br /&gt;
         case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
         1) &lt;br /&gt;
             _killCount=`expr $_killCount + 1`&lt;br /&gt;
             log_progress_msg &amp;quot;Sending shutdown command:&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
             # We add some backspaces to the command in case something is on the console already&lt;br /&gt;
             echo `screen -S $server -X stuff \&amp;quot;                             &lt;br /&gt;
&lt;br /&gt;
             # Wait for it to shut down...&lt;br /&gt;
             sleep $DELAY_KILL&lt;br /&gt;
&lt;br /&gt;
             isrunning $server&lt;br /&gt;
             case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
                 1) log_progress_msg &amp;quot;is still running.&amp;quot;; log_end_msg 0 ;;&lt;br /&gt;
                 0) log_progress_msg &amp;quot;has been shutdown&amp;quot;; log_end_msg 0 ;;&lt;br /&gt;
             esac&lt;br /&gt;
&lt;br /&gt;
             ;;&lt;br /&gt;
         0) &lt;br /&gt;
             log_progress_msg &amp;quot;is not running&amp;quot;; log_end_msg 0&lt;br /&gt;
             ;;&lt;br /&gt;
         esac&lt;br /&gt;
&lt;br /&gt;
     done&lt;br /&gt;
&lt;br /&gt;
     # Check if any procs are still running&lt;br /&gt;
     for server in $SERVICES; do&lt;br /&gt;
         isrunning $server&lt;br /&gt;
         case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
         1) &lt;br /&gt;
             log_warning_msg &amp;quot;Stopping $NAME&amp;quot; &amp;quot;$server is still running: Forcing kill&amp;quot;&lt;br /&gt;
             echo `kill $pid 2&amp;gt; /dev/null`;&lt;br /&gt;
             sleep $DELAY_FORCEKILL&lt;br /&gt;
             echo `kill -9 $pid 2&amp;gt; /dev/null`;&lt;br /&gt;
             sleep 1&lt;br /&gt;
&lt;br /&gt;
             # Now check again if it is still running...&lt;br /&gt;
             isrunning $server&lt;br /&gt;
             case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
                 0) log_progress_msg &amp;quot;Success&amp;quot;; log_end_msg 0 ;;&lt;br /&gt;
                 1) log_progress_msg &amp;quot;Process is still running... Even after \&amp;quot;kill -9 $pid\&amp;quot;. WOW...&amp;quot;; log_end_msg 0 ;;&lt;br /&gt;
             esac&lt;br /&gt;
             ;;&lt;br /&gt;
         0) &lt;br /&gt;
             #log_progress_msg &amp;quot;&amp;quot;; &lt;br /&gt;
             ;;&lt;br /&gt;
         esac&lt;br /&gt;
     done&lt;br /&gt;
&lt;br /&gt;
     log_begin_msg &amp;quot;$NAME: All done (killed $_killCount procs)&amp;quot;; log_end_msg 0&lt;br /&gt;
&lt;br /&gt;
     ;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 status)&lt;br /&gt;
     # Count how many processes we need&lt;br /&gt;
     PROCCOUNT=0&lt;br /&gt;
     for i in $SERVICES; do&lt;br /&gt;
         PROCCOUNT=`expr $PROCCOUNT + 1`&lt;br /&gt;
     done&lt;br /&gt;
&lt;br /&gt;
     # Go through server PID files and count how many are running&lt;br /&gt;
     log_begin_msg &amp;quot;$NAME: Running processed:&amp;quot;&lt;br /&gt;
     _pidCount=0&lt;br /&gt;
     for server in $SERVICES; do&lt;br /&gt;
&lt;br /&gt;
         isrunning $server&lt;br /&gt;
         case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
             1) &lt;br /&gt;
                 # This server is running&lt;br /&gt;
                 _pidCount=`expr $_pidCount + 1`&lt;br /&gt;
                 log_progress_msg &amp;quot;$server&amp;quot;&lt;br /&gt;
                 ;;&lt;br /&gt;
             0) &lt;br /&gt;
                 ;;&lt;br /&gt;
         esac&lt;br /&gt;
     done&lt;br /&gt;
&lt;br /&gt;
     log_begin_msg &amp;quot; ($_pidCount of $PROCCOUNT processes are running)&amp;quot;; log_end_msg 0&lt;br /&gt;
   &lt;br /&gt;
     # Check if running proc count matches requires proc count&lt;br /&gt;
     log_begin_msg &amp;quot;$NAME is&amp;quot;&lt;br /&gt;
     if [ $_pidCount -eq $PROCCOUNT ]; then&lt;br /&gt;
         log_progress_msg &amp;quot;running&amp;quot;; log_end_msg 0&lt;br /&gt;
         exit 0&lt;br /&gt;
     else&lt;br /&gt;
         log_progress_msg &amp;quot;NOT running&amp;quot;; log_end_msg 0&lt;br /&gt;
         exit 1&lt;br /&gt;
     fi&lt;br /&gt;
     ;;&lt;br /&gt;
&lt;br /&gt;
 restart)&lt;br /&gt;
     $0 stop&lt;br /&gt;
     $0 start&lt;br /&gt;
     ;;&lt;br /&gt;
 *)&lt;br /&gt;
     echo &amp;quot;Usage: /etc/init.d/$NAME {start|stop|restart|status}&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
     exit 1&lt;br /&gt;
     ;;&lt;br /&gt;
 esac&lt;br /&gt;
&lt;br /&gt;
 exit 0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Startup_script_linux</id>
		<title>Startup script linux</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Startup_script_linux"/>
				<updated>2010-02-20T07:18:13Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==/etc/init.d script for Linux==&lt;br /&gt;
===Instructions===&lt;br /&gt;
Tested on Debian 5.&lt;br /&gt;
CHUIDS user to opensim user.&lt;br /&gt;
Supports: start, stop, restart, status&lt;br /&gt;
&lt;br /&gt;
To implement:&lt;br /&gt;
Type: cat &amp;gt; /etc/init.d/opensim&lt;br /&gt;
Paste in script from this page&lt;br /&gt;
Press: CTRL+D&lt;br /&gt;
Type: chmod +x /etc/init.d/opensim&lt;br /&gt;
Script should now be located on server and be executable.&lt;br /&gt;
&lt;br /&gt;
Type: update-rc.d opensim defaults&lt;br /&gt;
Script should now be in your startup.&lt;br /&gt;
&lt;br /&gt;
===Script===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 #! /bin/sh&lt;br /&gt;
 ### BEGIN INIT INFO&lt;br /&gt;
 # Provides:          OpenSim&lt;br /&gt;
 # Required-Start:    $local_fs $network &lt;br /&gt;
 # Required-Stop:     $local_fs&lt;br /&gt;
 # Default-Start:     2 3 4 5&lt;br /&gt;
 # Default-Stop:      0 1 6&lt;br /&gt;
 # Short-Description: Tedds OpenSim init.d-script&lt;br /&gt;
 ### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
 # Put script in /etc/init.d/&lt;br /&gt;
 # then execute: update-rc.d opensim defaults&lt;br /&gt;
&lt;br /&gt;
 set -e&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # Directories&lt;br /&gt;
 #&lt;br /&gt;
 # Location of OpenSim installation&lt;br /&gt;
 DIR=/home/opensim/OpenSim/bin/&lt;br /&gt;
 # Different PID dir?&lt;br /&gt;
 PIDDIR=$DIR&lt;br /&gt;
&lt;br /&gt;
 USER=opensim&lt;br /&gt;
 SERVICES=&amp;quot;OpenSim.Grid.UserServer.exe OpenSim.Server.exe OpenSim.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # Kill values (in seconds)&lt;br /&gt;
 #&lt;br /&gt;
 # How long between each service being started&lt;br /&gt;
 DELAY_STARTUP=10&lt;br /&gt;
 # How long between each service is sent shutdown command&lt;br /&gt;
 DELAY_KILL=10&lt;br /&gt;
 # After shutdown has been sent to all we do another loop with &amp;quot;kill&amp;quot;, then &amp;quot;kill -9&amp;quot;. How long between &amp;quot;kill&amp;quot; and &amp;quot;kill -9&amp;quot;.&lt;br /&gt;
 DELAY_FORCEKILL=10&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # Info on service handled by this script&lt;br /&gt;
 #&lt;br /&gt;
 # Name of service&lt;br /&gt;
 NAME=opensim&lt;br /&gt;
 # Description of service&lt;br /&gt;
 DESC=&amp;quot;OpenSim Server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 # Binaries&lt;br /&gt;
 SCREEN=/usr/bin/screen&lt;br /&gt;
 MONO=/usr/bin/mono&lt;br /&gt;
&lt;br /&gt;
 ###########################&lt;br /&gt;
 ##### START OF SCRIPT #####&lt;br /&gt;
 ###########################&lt;br /&gt;
&lt;br /&gt;
 export PATH=&amp;quot;${PATH:+$PATH:}/usr/sbin:/sbin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 # Load LSB log functions&lt;br /&gt;
 _lsbFile=&amp;quot;&amp;quot;&lt;br /&gt;
 if [ -e /etc/debian_version ]; then&lt;br /&gt;
     _lsbFile=&amp;quot;/lib/lsb/init-functions&amp;quot;&lt;br /&gt;
     if [ -f $_lsbFile ]; then&lt;br /&gt;
         . $_lsbFile&lt;br /&gt;
     else&lt;br /&gt;
         echo This script requires LSB init-functions file which doesn't exist: $_lsbFile&lt;br /&gt;
         exit 1&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
 # [ -e /etc/init.d/functions ] ; then&lt;br /&gt;
     _lsbFile=&amp;quot;/etc/init.d/functions&amp;quot;&lt;br /&gt;
     if [ -e $_lsbFile ]; then&lt;br /&gt;
         . $_lsbFile&lt;br /&gt;
     else&lt;br /&gt;
         echo This script requires LSB init-functions file which doesn't exist: $_lsbFile&lt;br /&gt;
         exit 1&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
 # Lets use fancy output&lt;br /&gt;
 log_use_fancy_output&lt;br /&gt;
&lt;br /&gt;
 # Check that target directory exists&lt;br /&gt;
 if test ! -d &amp;quot;$DIR&amp;quot;; then&lt;br /&gt;
     log_failure_msg &amp;quot;$NAME&amp;quot; &amp;quot;Target directory \&amp;quot;$DIR\&amp;quot; does not exist. Can not continue.&amp;quot;&lt;br /&gt;
     exit 1&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
 # Create a reverse order for shutdown&lt;br /&gt;
 SERVICES_REVERSE=&amp;quot;&amp;quot;&lt;br /&gt;
 reverse() { SERVICES_REVERSE=&amp;quot;$9 $8 $7 $6 $5 $4 $3 $2 $1&amp;quot;; }&lt;br /&gt;
 reverse $SERVICES&lt;br /&gt;
&lt;br /&gt;
 # Check if a service is running&lt;br /&gt;
 isrunning() { &lt;br /&gt;
     ISRUNNING=&amp;quot;0&amp;quot;&lt;br /&gt;
     # Do we have PID-file?&lt;br /&gt;
     if [ -f &amp;quot;$PIDDIR/$1.pid&amp;quot; ]; then&lt;br /&gt;
         # Check if proc is running&lt;br /&gt;
         pid=`cat &amp;quot;$PIDDIR/$1.pid&amp;quot; 2&amp;gt; /dev/null`&lt;br /&gt;
         if [ &amp;quot;$pid&amp;quot; != &amp;quot;&amp;quot; ]; then&lt;br /&gt;
             if [ -d /proc/$pid ]; then&lt;br /&gt;
                 # Process is running&lt;br /&gt;
                 ISRUNNING=&amp;quot;1&amp;quot;&lt;br /&gt;
             fi&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
     #ISRUNNING=&amp;quot;0&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # Process commands&lt;br /&gt;
 #&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
 start)&lt;br /&gt;
     # Start all services one by one&lt;br /&gt;
     for server in $SERVICES; do&lt;br /&gt;
         log_daemon_msg &amp;quot;Starting $NAME&amp;quot; &amp;quot;$server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
         isrunning $server&lt;br /&gt;
         case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
             1) log_progress_msg &amp;quot;Process already started. Please stop first&amp;quot;; log_end_msg 1 ;;&lt;br /&gt;
             0) &lt;br /&gt;
                 # Process is not running&lt;br /&gt;
                 # Start process and sleep...&lt;br /&gt;
                 exefile=&amp;quot;/tmp/exe.OpenSim.$server.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
                 # Need to make external file, had big problems with screen params&lt;br /&gt;
                 echo \#\!/bin/bash &amp;gt; $exefile&lt;br /&gt;
                 echo cd $DIR &amp;gt;&amp;gt; $exefile&lt;br /&gt;
                 echo $MONO $server &amp;gt;&amp;gt; $exefile&lt;br /&gt;
                 chmod +x $exefile&lt;br /&gt;
&lt;br /&gt;
                 cmd_screen=&amp;quot;screen -S $server -d -m $exefile&amp;quot;&lt;br /&gt;
                 start-stop-daemon --start -b -x /bin/su -m --pidfile=/tmp/su.$server.pid --chdir &amp;quot;$DIR&amp;quot; -- - $USER &amp;quot;-c $cmd_screen&amp;quot;&lt;br /&gt;
&lt;br /&gt;
                 # Delay between services that are started&lt;br /&gt;
                 sleep $DELAY_STARTUP&lt;br /&gt;
&lt;br /&gt;
                 rm $exefile 2&amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
                 # Make PID-file&lt;br /&gt;
                 ps afxu | grep &amp;quot;mono $server&amp;quot; | grep -iEv &amp;quot;grep|screen&amp;quot; | awk {'print $2'} &amp;gt; &amp;quot;$PIDDIR/$server.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
                 isrunning $server&lt;br /&gt;
                 case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
                     1) &lt;br /&gt;
                         # Process started ok&lt;br /&gt;
                         #log_progress_msg &amp;quot;Success&amp;quot;; &lt;br /&gt;
                         log_end_msg 0 &lt;br /&gt;
                         ;;&lt;br /&gt;
                     0) &lt;br /&gt;
                         # Process didn't start... remove pid-file&lt;br /&gt;
                         rm &amp;quot;$PIDDIR/$server.pid&amp;quot; 2&amp;gt; /dev/null&lt;br /&gt;
                         #log_progress_msg &amp;quot;Failure&amp;quot;; &lt;br /&gt;
                         log_end_msg 1 &lt;br /&gt;
                         ;;&lt;br /&gt;
                 esac&lt;br /&gt;
                 ;;&lt;br /&gt;
         esac&lt;br /&gt;
&lt;br /&gt;
     done&lt;br /&gt;
     ;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 stop)&lt;br /&gt;
     _killCount=0&lt;br /&gt;
&lt;br /&gt;
     for server in $SERVICES_REVERSE; do&lt;br /&gt;
         log_daemon_msg &amp;quot;Stopping $NAME&amp;quot; &amp;quot;$server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
         isrunning $server&lt;br /&gt;
         case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
         1) &lt;br /&gt;
             _killCount=`expr $_killCount + 1`&lt;br /&gt;
             log_progress_msg &amp;quot;Sending shutdown command:&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
             # We add some backspaces to the command in case something is on the console already&lt;br /&gt;
             echo `screen -S $server -X stuff \&amp;quot;                             &lt;br /&gt;
&lt;br /&gt;
             # Wait for it to shut down...&lt;br /&gt;
             sleep $DELAY_KILL&lt;br /&gt;
&lt;br /&gt;
             isrunning $server&lt;br /&gt;
             case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
                 1) log_progress_msg &amp;quot;is still running.&amp;quot;; log_end_msg 0 ;;&lt;br /&gt;
                 0) log_progress_msg &amp;quot;has been shutdown&amp;quot;; log_end_msg 0 ;;&lt;br /&gt;
             esac&lt;br /&gt;
&lt;br /&gt;
             ;;&lt;br /&gt;
         0) &lt;br /&gt;
             log_progress_msg &amp;quot;is not running&amp;quot;; log_end_msg 0&lt;br /&gt;
             ;;&lt;br /&gt;
         esac&lt;br /&gt;
&lt;br /&gt;
     done&lt;br /&gt;
&lt;br /&gt;
     # Check if any procs are still running&lt;br /&gt;
     for server in $SERVICES; do&lt;br /&gt;
         isrunning $server&lt;br /&gt;
         case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
         1) &lt;br /&gt;
             log_warning_msg &amp;quot;Stopping $NAME&amp;quot; &amp;quot;$server is still running: Forcing kill&amp;quot;&lt;br /&gt;
             echo `kill $pid 2&amp;gt; /dev/null`;&lt;br /&gt;
             sleep $DELAY_FORCEKILL&lt;br /&gt;
             echo `kill -9 $pid 2&amp;gt; /dev/null`;&lt;br /&gt;
             sleep 1&lt;br /&gt;
&lt;br /&gt;
             # Now check again if it is still running...&lt;br /&gt;
             isrunning $server&lt;br /&gt;
             case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
                 0) log_progress_msg &amp;quot;Success&amp;quot;; log_end_msg 0 ;;&lt;br /&gt;
                 1) log_progress_msg &amp;quot;Process is still running... Even after \&amp;quot;kill -9 $pid\&amp;quot;. WOW...&amp;quot;; log_end_msg 0 ;;&lt;br /&gt;
             esac&lt;br /&gt;
             ;;&lt;br /&gt;
         0) &lt;br /&gt;
             #log_progress_msg &amp;quot;&amp;quot;; &lt;br /&gt;
             ;;&lt;br /&gt;
         esac&lt;br /&gt;
     done&lt;br /&gt;
&lt;br /&gt;
     log_begin_msg &amp;quot;$NAME: All done (killed $_killCount procs)&amp;quot;; log_end_msg 0&lt;br /&gt;
&lt;br /&gt;
     ;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 status)&lt;br /&gt;
     # Count how many processes we need&lt;br /&gt;
     PROCCOUNT=0&lt;br /&gt;
     for i in $SERVICES; do&lt;br /&gt;
         PROCCOUNT=`expr $PROCCOUNT + 1`&lt;br /&gt;
     done&lt;br /&gt;
&lt;br /&gt;
     # Go through server PID files and count how many are running&lt;br /&gt;
     log_begin_msg &amp;quot;$NAME: Running processed:&amp;quot;&lt;br /&gt;
     _pidCount=0&lt;br /&gt;
     for server in $SERVICES; do&lt;br /&gt;
&lt;br /&gt;
         isrunning $server&lt;br /&gt;
         case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
             1) &lt;br /&gt;
                 # This server is running&lt;br /&gt;
                 _pidCount=`expr $_pidCount + 1`&lt;br /&gt;
                 log_progress_msg &amp;quot;$server&amp;quot;&lt;br /&gt;
                 ;;&lt;br /&gt;
             0) &lt;br /&gt;
                 ;;&lt;br /&gt;
         esac&lt;br /&gt;
     done&lt;br /&gt;
&lt;br /&gt;
     log_begin_msg &amp;quot; ($_pidCount of $PROCCOUNT processes are running)&amp;quot;; log_end_msg 0&lt;br /&gt;
   &lt;br /&gt;
     # Check if running proc count matches requires proc count&lt;br /&gt;
     log_begin_msg &amp;quot;$NAME is&amp;quot;&lt;br /&gt;
     if [ $_pidCount -eq $PROCCOUNT ]; then&lt;br /&gt;
         log_progress_msg &amp;quot;running&amp;quot;; log_end_msg 0&lt;br /&gt;
         exit 0&lt;br /&gt;
     else&lt;br /&gt;
         log_progress_msg &amp;quot;NOT running&amp;quot;; log_end_msg 0&lt;br /&gt;
         exit 1&lt;br /&gt;
     fi&lt;br /&gt;
     ;;&lt;br /&gt;
&lt;br /&gt;
 restart)&lt;br /&gt;
     $0 stop&lt;br /&gt;
     $0 start&lt;br /&gt;
     ;;&lt;br /&gt;
 *)&lt;br /&gt;
     echo &amp;quot;Usage: /etc/init.d/$NAME {start|stop|restart|status}&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
     exit 1&lt;br /&gt;
     ;;&lt;br /&gt;
 esac&lt;br /&gt;
&lt;br /&gt;
 exit 0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Startup_script_linux</id>
		<title>Startup script linux</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Startup_script_linux"/>
				<updated>2010-02-20T07:15:44Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: Linux init script&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==/etc/init.d script for Linux==&lt;br /&gt;
===Instructions===&lt;br /&gt;
Tested on Debian 5.&lt;br /&gt;
CHUIDS user to opensim user.&lt;br /&gt;
Supports: start, stop, restart, status&lt;br /&gt;
&lt;br /&gt;
To implement:&lt;br /&gt;
Type: cat &amp;gt; /etc/init.d/opensim&lt;br /&gt;
Paste in script from this page&lt;br /&gt;
Press: CTRL+D&lt;br /&gt;
Type: chmod +x /etc/init.d/opensim&lt;br /&gt;
Script should now be located on server and be executable.&lt;br /&gt;
&lt;br /&gt;
Type: update-rc.d opensim defaults&lt;br /&gt;
Script should now be in your startup.&lt;br /&gt;
&lt;br /&gt;
===Script===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #! /bin/sh&lt;br /&gt;
 ### BEGIN INIT INFO&lt;br /&gt;
 # Provides:          OpenSim&lt;br /&gt;
 # Required-Start:    $local_fs $network &lt;br /&gt;
 # Required-Stop:     $local_fs&lt;br /&gt;
 # Default-Start:     2 3 4 5&lt;br /&gt;
 # Default-Stop:      0 1 6&lt;br /&gt;
 # Short-Description: Tedds OpenSim init.d-script&lt;br /&gt;
 ### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
 # Put script in /etc/init.d/&lt;br /&gt;
 # then execute: update-rc.d opensim defaults&lt;br /&gt;
&lt;br /&gt;
 set -e&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # Directories&lt;br /&gt;
 #&lt;br /&gt;
 # Location of OpenSim installation&lt;br /&gt;
 DIR=/home/opensim/OpenSim/bin/&lt;br /&gt;
 # Different PID dir?&lt;br /&gt;
 PIDDIR=$DIR&lt;br /&gt;
&lt;br /&gt;
 USER=opensim&lt;br /&gt;
 SERVICES=&amp;quot;OpenSim.Grid.UserServer.exe OpenSim.Server.exe OpenSim.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # Kill values (in seconds)&lt;br /&gt;
 #&lt;br /&gt;
 # How long between each service being started&lt;br /&gt;
 DELAY_STARTUP=10&lt;br /&gt;
 # How long between each service is sent shutdown command&lt;br /&gt;
 DELAY_KILL=10&lt;br /&gt;
 # After shutdown has been sent to all we do another loop with &amp;quot;kill&amp;quot;, then &amp;quot;kill -9&amp;quot;. How long between &amp;quot;kill&amp;quot; and &amp;quot;kill -9&amp;quot;.&lt;br /&gt;
 DELAY_FORCEKILL=10&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # Info on service handled by this script&lt;br /&gt;
 #&lt;br /&gt;
 # Name of service&lt;br /&gt;
 NAME=opensim&lt;br /&gt;
 # Description of service&lt;br /&gt;
 DESC=&amp;quot;OpenSim Server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 # Binaries&lt;br /&gt;
 SCREEN=/usr/bin/screen&lt;br /&gt;
 MONO=/usr/bin/mono&lt;br /&gt;
&lt;br /&gt;
 ###########################&lt;br /&gt;
 ##### START OF SCRIPT #####&lt;br /&gt;
 ###########################&lt;br /&gt;
&lt;br /&gt;
 export PATH=&amp;quot;${PATH:+$PATH:}/usr/sbin:/sbin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 # Load LSB log functions&lt;br /&gt;
 _lsbFile=&amp;quot;&amp;quot;&lt;br /&gt;
 if [ -e /etc/debian_version ]; then&lt;br /&gt;
     _lsbFile=&amp;quot;/lib/lsb/init-functions&amp;quot;&lt;br /&gt;
     if [ -f $_lsbFile ]; then&lt;br /&gt;
         . $_lsbFile&lt;br /&gt;
     else&lt;br /&gt;
         echo This script requires LSB init-functions file which doesn't exist: $_lsbFile&lt;br /&gt;
         exit 1&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
 # [ -e /etc/init.d/functions ] ; then&lt;br /&gt;
     _lsbFile=&amp;quot;/etc/init.d/functions&amp;quot;&lt;br /&gt;
     if [ -e $_lsbFile ]; then&lt;br /&gt;
         . $_lsbFile&lt;br /&gt;
     else&lt;br /&gt;
         echo This script requires LSB init-functions file which doesn't exist: $_lsbFile&lt;br /&gt;
         exit 1&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
 # Lets use fancy output&lt;br /&gt;
 log_use_fancy_output&lt;br /&gt;
&lt;br /&gt;
 # Check that target directory exists&lt;br /&gt;
 if test ! -d &amp;quot;$DIR&amp;quot;; then&lt;br /&gt;
     log_failure_msg &amp;quot;$NAME&amp;quot; &amp;quot;Target directory \&amp;quot;$DIR\&amp;quot; does not exist. Can not continue.&amp;quot;&lt;br /&gt;
     exit 1&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
 # Create a reverse order for shutdown&lt;br /&gt;
 SERVICES_REVERSE=&amp;quot;&amp;quot;&lt;br /&gt;
 reverse() { SERVICES_REVERSE=&amp;quot;$9 $8 $7 $6 $5 $4 $3 $2 $1&amp;quot;; }&lt;br /&gt;
 reverse $SERVICES&lt;br /&gt;
&lt;br /&gt;
 # Check if a service is running&lt;br /&gt;
 isrunning() { &lt;br /&gt;
     ISRUNNING=&amp;quot;0&amp;quot;&lt;br /&gt;
     # Do we have PID-file?&lt;br /&gt;
     if [ -f &amp;quot;$PIDDIR/$1.pid&amp;quot; ]; then&lt;br /&gt;
         # Check if proc is running&lt;br /&gt;
         pid=`cat &amp;quot;$PIDDIR/$1.pid&amp;quot; 2&amp;gt; /dev/null`&lt;br /&gt;
         if [ &amp;quot;$pid&amp;quot; != &amp;quot;&amp;quot; ]; then&lt;br /&gt;
             if [ -d /proc/$pid ]; then&lt;br /&gt;
                 # Process is running&lt;br /&gt;
                 ISRUNNING=&amp;quot;1&amp;quot;&lt;br /&gt;
             fi&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
     #ISRUNNING=&amp;quot;0&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # Process commands&lt;br /&gt;
 #&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
 start)&lt;br /&gt;
     # Start all services one by one&lt;br /&gt;
     for server in $SERVICES; do&lt;br /&gt;
         log_daemon_msg &amp;quot;Starting $NAME&amp;quot; &amp;quot;$server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
         isrunning $server&lt;br /&gt;
         case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
             1) log_progress_msg &amp;quot;Process already started. Please stop first&amp;quot;; log_end_msg 1 ;;&lt;br /&gt;
             0) &lt;br /&gt;
                 # Process is not running&lt;br /&gt;
                 # Start process and sleep...&lt;br /&gt;
                 exefile=&amp;quot;/tmp/exe.OpenSim.$server.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
                 # Need to make external file, had big problems with screen params&lt;br /&gt;
                 echo \#\!/bin/bash &amp;gt; $exefile&lt;br /&gt;
                 echo cd $DIR &amp;gt;&amp;gt; $exefile&lt;br /&gt;
                 echo $MONO $server &amp;gt;&amp;gt; $exefile&lt;br /&gt;
                 chmod +x $exefile&lt;br /&gt;
&lt;br /&gt;
                 cmd_screen=&amp;quot;screen -S $server -d -m $exefile&amp;quot;&lt;br /&gt;
                 start-stop-daemon --start -b -x /bin/su -m --pidfile=/tmp/su.$server.pid --chdir &amp;quot;$DIR&amp;quot; -- - $USER &amp;quot;-c $cmd_screen&amp;quot;&lt;br /&gt;
&lt;br /&gt;
                 # Delay between services that are started&lt;br /&gt;
                 sleep $DELAY_STARTUP&lt;br /&gt;
&lt;br /&gt;
                 rm $exefile 2&amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
                 # Make PID-file&lt;br /&gt;
                 ps afxu | grep &amp;quot;mono $server&amp;quot; | grep -iEv &amp;quot;grep|screen&amp;quot; | awk {'print $2'} &amp;gt; &amp;quot;$PIDDIR/$server.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
                 isrunning $server&lt;br /&gt;
                 case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
                     1) &lt;br /&gt;
                         # Process started ok&lt;br /&gt;
                         #log_progress_msg &amp;quot;Success&amp;quot;; &lt;br /&gt;
                         log_end_msg 0 &lt;br /&gt;
                         ;;&lt;br /&gt;
                     0) &lt;br /&gt;
                         # Process didn't start... remove pid-file&lt;br /&gt;
                         rm &amp;quot;$PIDDIR/$server.pid&amp;quot; 2&amp;gt; /dev/null&lt;br /&gt;
                         #log_progress_msg &amp;quot;Failure&amp;quot;; &lt;br /&gt;
                         log_end_msg 1 &lt;br /&gt;
                         ;;&lt;br /&gt;
                 esac&lt;br /&gt;
                 ;;&lt;br /&gt;
         esac&lt;br /&gt;
&lt;br /&gt;
     done&lt;br /&gt;
     ;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 stop)&lt;br /&gt;
     _killCount=0&lt;br /&gt;
&lt;br /&gt;
     for server in $SERVICES_REVERSE; do&lt;br /&gt;
         log_daemon_msg &amp;quot;Stopping $NAME&amp;quot; &amp;quot;$server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
         isrunning $server&lt;br /&gt;
         case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
         1) &lt;br /&gt;
             _killCount=`expr $_killCount + 1`&lt;br /&gt;
             log_progress_msg &amp;quot;Sending shutdown command:&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
             # We add some backspaces to the command in case something is on the console already&lt;br /&gt;
             echo `screen -S $server -X stuff \&amp;quot;                             &lt;br /&gt;
&lt;br /&gt;
             # Wait for it to shut down...&lt;br /&gt;
             sleep $DELAY_KILL&lt;br /&gt;
&lt;br /&gt;
             isrunning $server&lt;br /&gt;
             case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
                 1) log_progress_msg &amp;quot;is still running.&amp;quot;; log_end_msg 0 ;;&lt;br /&gt;
                 0) log_progress_msg &amp;quot;has been shutdown&amp;quot;; log_end_msg 0 ;;&lt;br /&gt;
             esac&lt;br /&gt;
&lt;br /&gt;
             ;;&lt;br /&gt;
         0) &lt;br /&gt;
             log_progress_msg &amp;quot;is not running&amp;quot;; log_end_msg 0&lt;br /&gt;
             ;;&lt;br /&gt;
         esac&lt;br /&gt;
&lt;br /&gt;
     done&lt;br /&gt;
&lt;br /&gt;
     # Check if any procs are still running&lt;br /&gt;
     for server in $SERVICES; do&lt;br /&gt;
         isrunning $server&lt;br /&gt;
         case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
         1) &lt;br /&gt;
             log_warning_msg &amp;quot;Stopping $NAME&amp;quot; &amp;quot;$server is still running: Forcing kill&amp;quot;&lt;br /&gt;
             echo `kill $pid 2&amp;gt; /dev/null`;&lt;br /&gt;
             sleep $DELAY_FORCEKILL&lt;br /&gt;
             echo `kill -9 $pid 2&amp;gt; /dev/null`;&lt;br /&gt;
             sleep 1&lt;br /&gt;
&lt;br /&gt;
             # Now check again if it is still running...&lt;br /&gt;
             isrunning $server&lt;br /&gt;
             case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
                 0) log_progress_msg &amp;quot;Success&amp;quot;; log_end_msg 0 ;;&lt;br /&gt;
                 1) log_progress_msg &amp;quot;Process is still running... Even after \&amp;quot;kill -9 $pid\&amp;quot;. WOW...&amp;quot;; log_end_msg 0 ;;&lt;br /&gt;
             esac&lt;br /&gt;
             ;;&lt;br /&gt;
         0) &lt;br /&gt;
             #log_progress_msg &amp;quot;&amp;quot;; &lt;br /&gt;
             ;;&lt;br /&gt;
         esac&lt;br /&gt;
     done&lt;br /&gt;
&lt;br /&gt;
     log_begin_msg &amp;quot;$NAME: All done (killed $_killCount procs)&amp;quot;; log_end_msg 0&lt;br /&gt;
&lt;br /&gt;
     ;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 status)&lt;br /&gt;
     # Count how many processes we need&lt;br /&gt;
     PROCCOUNT=0&lt;br /&gt;
     for i in $SERVICES; do&lt;br /&gt;
         PROCCOUNT=`expr $PROCCOUNT + 1`&lt;br /&gt;
     done&lt;br /&gt;
&lt;br /&gt;
     # Go through server PID files and count how many are running&lt;br /&gt;
     log_begin_msg &amp;quot;$NAME: Running processed:&amp;quot;&lt;br /&gt;
     _pidCount=0&lt;br /&gt;
     for server in $SERVICES; do&lt;br /&gt;
&lt;br /&gt;
         isrunning $server&lt;br /&gt;
         case &amp;quot;$ISRUNNING&amp;quot; in&lt;br /&gt;
             1) &lt;br /&gt;
                 # This server is running&lt;br /&gt;
                 _pidCount=`expr $_pidCount + 1`&lt;br /&gt;
                 log_progress_msg &amp;quot;$server&amp;quot;&lt;br /&gt;
                 ;;&lt;br /&gt;
             0) &lt;br /&gt;
                 ;;&lt;br /&gt;
         esac&lt;br /&gt;
     done&lt;br /&gt;
&lt;br /&gt;
     log_begin_msg &amp;quot; ($_pidCount of $PROCCOUNT processes are running)&amp;quot;; log_end_msg 0&lt;br /&gt;
   &lt;br /&gt;
     # Check if running proc count matches requires proc count&lt;br /&gt;
     log_begin_msg &amp;quot;$NAME is&amp;quot;&lt;br /&gt;
     if [ $_pidCount -eq $PROCCOUNT ]; then&lt;br /&gt;
         log_progress_msg &amp;quot;running&amp;quot;; log_end_msg 0&lt;br /&gt;
         exit 0&lt;br /&gt;
     else&lt;br /&gt;
         log_progress_msg &amp;quot;NOT running&amp;quot;; log_end_msg 0&lt;br /&gt;
         exit 1&lt;br /&gt;
     fi&lt;br /&gt;
     ;;&lt;br /&gt;
&lt;br /&gt;
 restart)&lt;br /&gt;
     $0 stop&lt;br /&gt;
     $0 start&lt;br /&gt;
     ;;&lt;br /&gt;
 *)&lt;br /&gt;
     echo &amp;quot;Usage: /etc/init.d/$NAME {start|stop|restart|status}&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
     exit 1&lt;br /&gt;
     ;;&lt;br /&gt;
 esac&lt;br /&gt;
&lt;br /&gt;
 exit 0&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Build_Instructions</id>
		<title>Build Instructions</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Build_Instructions"/>
				<updated>2010-01-29T19:51:48Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: /* Debian 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Users]]&lt;br /&gt;
This page covers building OpenSim from source code on multiple platforms.  Please help us keep this page up to date as the project progresses.&lt;br /&gt;
&lt;br /&gt;
==Download OpenSim ==&lt;br /&gt;
Check out the [[Download]] page for instructions on obtaining an OpenSim source release.&lt;br /&gt;
&lt;br /&gt;
==MS Windows==&lt;br /&gt;
&lt;br /&gt;
OpenSim requires either the .Net framework version 2.0, or the latest Mono. It supports the following compilers:&lt;br /&gt;
* [http://msdn2.microsoft.com/en-us/express/aa700756.aspx Microsoft Visual C# Express Edition] (note: not Visual C++)&lt;br /&gt;
* [http://www.mono-project.com/ mono]&lt;br /&gt;
&lt;br /&gt;
Additional note: If you like IDE's you will need C# express 2008 or VS 2008.&lt;br /&gt;
&lt;br /&gt;
Additional note: Microsoft C# Express v9 may install .Net 3.5 with resultant path error.&lt;br /&gt;
# To avoid install .Net framework version 2.0&lt;br /&gt;
&lt;br /&gt;
Additional note: It is possible to develop on Windows Vista 64 bits with the following tweaks:&lt;br /&gt;
# Select OpenSim project properties from solution and choose platform to be x86. Rebuild solution.&lt;br /&gt;
# Select OpenSim.exe properties under solution bin folder and choose windows xp sp 2 compatibility mode + run as administrator.&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
&lt;br /&gt;
* In the top-level directory, run the '&amp;lt;tt&amp;gt;runprebuild.bat&amp;lt;/tt&amp;gt;' file. This will create a VS2008 solution file, a nant build file and a '&amp;lt;tt&amp;gt;compile.bat&amp;lt;/tt&amp;gt;' file.&lt;br /&gt;
&lt;br /&gt;
* Open the resulting sln file with visual studio and build it there, or&lt;br /&gt;
* Run the '&amp;lt;tt&amp;gt;compile.bat&amp;lt;/tt&amp;gt;' file. This will build the executable using MSBuild.&lt;br /&gt;
* if you prefer to use nant, run nant in the same top-level directory. This will build the executables.&lt;br /&gt;
&lt;br /&gt;
If you don't care about physics (walking on prims, etc), ignore the rest of this section.&lt;br /&gt;
&lt;br /&gt;
=== Running ===&lt;br /&gt;
&lt;br /&gt;
Recent versions of OpenSim come without an &amp;lt;tt&amp;gt;OpenSim.ini&amp;lt;/tt&amp;gt; file. Copy the &amp;lt;tt&amp;gt;OpenSim.ini.example&amp;lt;/tt&amp;gt; file to &amp;lt;tt&amp;gt;OpenSim.ini&amp;lt;/tt&amp;gt; before making any changes.&lt;br /&gt;
&lt;br /&gt;
Double-click on the &amp;lt;tt&amp;gt;OpenSim.exe&amp;lt;/tt&amp;gt; executable file in the &amp;lt;tt&amp;gt;bin&amp;lt;/tt&amp;gt; directory. This will start up OpenSim in standalone mode.&lt;br /&gt;
&lt;br /&gt;
The debugger in VS2005 C# may be used to step through the code. For those that use a Cygwin shell, you may find that one or more dll's have permissions that cause problems running. Most find that a &amp;quot;&amp;lt;tt&amp;gt;chmod 777 *&amp;lt;/tt&amp;gt;&amp;quot; from the &amp;lt;tt&amp;gt;bin&amp;lt;/tt&amp;gt; directory solves this.&lt;br /&gt;
&lt;br /&gt;
Physics can be invoked by adding the appropriate line to the [Startup] section of &amp;lt;tt&amp;gt;OpenSim.ini&amp;lt;/tt&amp;gt;.  For ODE, that would be:&lt;br /&gt;
&lt;br /&gt;
 physics = OpenDynamicsEngine&lt;br /&gt;
&lt;br /&gt;
You can also add a command line option to a shortcut, or run from a command prompt with:&lt;br /&gt;
&lt;br /&gt;
 -physics=OpenDynamicsEngine&lt;br /&gt;
&lt;br /&gt;
'''''Windows Vista'''''&lt;br /&gt;
&lt;br /&gt;
Some people have reported that to run on Windows Vista, you must first disable Windows Firewall.  Under the new &amp;quot;Start&amp;quot; button of Vista, select &amp;quot;Control panel&amp;quot;.  Then double-click &amp;quot;Windows Firewall&amp;quot;.  In the window that pops up, on the left column, select &amp;quot;Turn Windows Firewall on or off&amp;quot;.  You will have to give permission for this to run, then select the option &amp;quot;Off (not recommended)&amp;quot;.  Click &amp;quot;OK&amp;quot; and exit from the Windows Firewall window.&lt;br /&gt;
&lt;br /&gt;
If you have McAfee SecurityCenter, see the description below.&lt;br /&gt;
&lt;br /&gt;
Once all the security features are disabled, right click on &amp;lt;tt&amp;gt;OpenSim.exe&amp;lt;/tt&amp;gt; and select &amp;quot;Run as administrator&amp;quot;.  This will pop up a window asking permission, select &amp;quot;Allow&amp;quot;.  Your OpenSim server should run in a DOS-like window and accept connections.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''McAfee Security'''''&lt;br /&gt;
&lt;br /&gt;
McAfee Security does not allow applications to listen on ports not explicitly specified.  You have two options: 1) disable firewall protection all together, 2) enable &amp;lt;tt&amp;gt;OpenSim.exe&amp;lt;/tt&amp;gt; to be able to open ports.&lt;br /&gt;
&lt;br /&gt;
''Disable firewall''&lt;br /&gt;
&lt;br /&gt;
Open McAfee SecurityCenter.  Select &amp;quot;Internet &amp;amp; Network&amp;quot;.  In the lower left corner is a small link to &amp;quot;Configure...&amp;quot;.  Select this.  In the right side of the window, select the bar that says &amp;quot;Firewall protection is enabled&amp;quot;.  Here you can select &amp;quot;Off&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
''Enable &amp;lt;tt&amp;gt;OpenSim.exe&amp;lt;/tt&amp;gt; to open ports''&lt;br /&gt;
&lt;br /&gt;
Open McAfee SecurityCenter.  Select &amp;quot;Internet &amp;amp; Network&amp;quot;.  In the lower left corner is a small link to &amp;quot;Configure...&amp;quot;.  Select this.  In the right side of the window, select the bar that says &amp;quot;Firewall protection is enabled&amp;quot;.  Select the &amp;quot;Advanced...&amp;quot; button.  This will pop up a new window.&lt;br /&gt;
&lt;br /&gt;
In the new window, on the left side, select &amp;quot;Program Permissions.&amp;quot;  In the middle on the right side of the window, select the &amp;quot;Add Allowed Program&amp;quot; button.  Use the browser that pops up to find the OpenSim executable and select it.&lt;br /&gt;
&lt;br /&gt;
Finally, select &amp;quot;OK&amp;quot; and exit the McAfee SecurityCenter window.&lt;br /&gt;
&lt;br /&gt;
==Linux/Mac OS X/FreeBSD==&lt;br /&gt;
&lt;br /&gt;
The easiest plaform to get running on the Linux side is Ubuntu 8.10, 32bit.  This is what most of the developers running Linux use.  If you are looking for the quick path, start there.&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu ===&lt;br /&gt;
&lt;br /&gt;
For Ubuntu users on older distributions (7.10, 8.04, etc.) '''you need''' to upgrade your version of mono to at least 2.4. For anyone who needs to upgrade their Mono, see [[Update Mono on Ubuntu]].&lt;br /&gt;
&lt;br /&gt;
Ubuntu Karmic (9.10) includes mono 2.4.2.3 packages.&lt;br /&gt;
&lt;br /&gt;
To build:&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install nant mono-gmcs libmono-microsoft8.0-cil \&lt;br /&gt;
      libmono-system-runtime2.0-cil libgdiplus libmono-i18n2.0-cil libmono-oracle2.0-cil&lt;br /&gt;
 [[Download]] opensim&lt;br /&gt;
 cd opensim&lt;br /&gt;
 ./runprebuild.sh&lt;br /&gt;
 nant&lt;br /&gt;
&lt;br /&gt;
=== openSUSE 10.3/11/11.1 ===&lt;br /&gt;
&lt;br /&gt;
Install an openSUSE 11.1, 11 or 10.3 with its default options, add the online repositories&lt;br /&gt;
when finished installing do an online update with all the latest packages.&lt;br /&gt;
&lt;br /&gt;
In yast install these packages, for running Opensim in standalone mode.&lt;br /&gt;
(there is a slight diffrence between 10.3 and 11/11.1 but following should be same)&lt;br /&gt;
 subversion&lt;br /&gt;
 nant&lt;br /&gt;
 mono-jscript&lt;br /&gt;
 - check that mono-core is installed&lt;br /&gt;
&lt;br /&gt;
just in case you do not already have it installed &lt;br /&gt;
&lt;br /&gt;
  sudo zypper install mono-data-oracle&lt;br /&gt;
&lt;br /&gt;
A tip for OpenSuSE 11.1 users - you can install packages from the command line using the 'zypper' tool.  For example, to install 'nant', use this command:&lt;br /&gt;
&lt;br /&gt;
  sudo zypper install nant&lt;br /&gt;
&lt;br /&gt;
If you just want to use SQLite then jump to last section &lt;br /&gt;
within this post.&lt;br /&gt;
&lt;br /&gt;
* Optional mysql - for Opensim running in Grid mode:&lt;br /&gt;
Install these mysql packages via yast&lt;br /&gt;
  mysql&lt;br /&gt;
  mysql-client&lt;br /&gt;
  mysql-administrator&lt;br /&gt;
  mysql-gui-tools&lt;br /&gt;
  mysql-query-browser&lt;br /&gt;
&lt;br /&gt;
(note that selecting mysql in the Yast2 Installer will select the other packages automatically)&lt;br /&gt;
&lt;br /&gt;
Before building create the mysql database.&lt;br /&gt;
 /etc/init.d/mysql start&lt;br /&gt;
 mysql -u root -p -h localhost&lt;br /&gt;
 (when asked for password just hit enter)&lt;br /&gt;
&lt;br /&gt;
 mysql&amp;gt; create database opensim;&lt;br /&gt;
 mysql&amp;gt; use opensim;&lt;br /&gt;
 mysql&amp;gt; create user 'opensim'@'localhost' identified by 'thePassword';&lt;br /&gt;
 mysql&amp;gt; grant all on *.* to 'opensim'@'localhost';&lt;br /&gt;
 mysql&amp;gt; quit&lt;br /&gt;
&lt;br /&gt;
*note that the '''grant all''' command may differ if you're adding the opensim database to an existing mysql installation.&lt;br /&gt;
&lt;br /&gt;
On current builds set the connection string inside bin/OpenSim.ini after coppying the OpenSim.ini.example file.&lt;br /&gt;
If you are changing to MySQL from SQLite, the connection string for mysql also exists in the bin/Region/*xml files.&lt;br /&gt;
* It is '''important''' to remember this if you start out using the built-in SQLite database engine.&lt;br /&gt;
&lt;br /&gt;
Build after installation of above in bash terminal. I save it in /opt&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 cd /opt&lt;br /&gt;
 [[Download]] opensim&lt;br /&gt;
 cd opensim&lt;br /&gt;
 ./runprebuild.sh&lt;br /&gt;
 nant&lt;br /&gt;
&lt;br /&gt;
Or, if you have a current (0.6+), you can simply execute:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
After this you should be able to continue on starting the diffrent Servers, look in the mysql-config section,or&lt;br /&gt;
just run your OpenSim as a Standalone. By - eagleFX&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X 10.5/10.4 ===&lt;br /&gt;
* OpenSim is now working on PowerPC Macs! Thanks to DrScofield and those who helped him. Current nightly builds for PowerPC are not working, not sure about Intel so use the 0.5 Build. OpenSim works on Intel Macs. I'm testing on PowerBook G4. Tested these step on 10.5, but not 10.4 but should work --[[User:Mokele|Mokele]] 22:36, 14 February 2008 (PST) (Works on iMac G5 with OS 10.4.11, including expanding to local grid mode. --[[User:Magnuz|Magnuz]] 2008-12-15 10:50 (CET))&lt;br /&gt;
* Install XCode Developers Tools from DVD/CD Installation Disk or download  from http://developer.apple.com/. You have to create an Apple account to access the downloads if you don't have an Apple account.&lt;br /&gt;
* Install X11 for 10.4 from the Optional Install from the DVD/CD Installation Disk. X11 for 10.5 is installed by default.&lt;br /&gt;
* Install Mono 1.2.5 from http://ftp.novell.com/pub/mono/archive/1.2.5/macos-10-universal/5/MonoFramework-1.2.5_5.macos10.novell.universal.dmg (The more recent releases Mono 1.2.6, 1.9.1 and 2.0.1 do not appear to work with these installation instructions. --[[User:Magnuz|Magnuz]] 2008-12-14 15:56 (CET)) and in Terminal or X11 edit the .profile file  and add the following line:&lt;br /&gt;
 export PKG_CONFIG_PATH=&amp;quot;/Library/Frameworks/Mono.framework/Versions/Current/lib/pkgconfig/:${PKG_CONFIG_PATH}&amp;quot;&lt;br /&gt;
* Compile OpenSim&lt;br /&gt;
 svn co http://opensimulator.org/svn/opensim/tags/0.5.0-release opensim&lt;br /&gt;
 cd opensim &lt;br /&gt;
 ./runprebuild.sh&lt;br /&gt;
 nant&lt;br /&gt;
&lt;br /&gt;
* Download and Compile libopenjpeg-libsl-2.1.2.0.dylib and libsecondlife.dll&lt;br /&gt;
* libopenjpeg-libsl-2.1.2.0.dylib:&lt;br /&gt;
 svn co http://opensimulator.org/svn/opensim-libs/old/libsl1550 opensim-libs&lt;br /&gt;
 cd opensim-libs/openjpeg-libsl&lt;br /&gt;
 make -f Makefile.osx&lt;br /&gt;
 cp libopenjpeg-libsl-2.1.2.0.dylib ../../bin&lt;br /&gt;
* Note: The Makefile that creates the libopenjpeg-libsl-2.1.2.0.so does not compile on PowerPC, but works properly on Intel Macs. Looks like a gcc issue with compile options. (It appears to work on iMac G5 with OS X 10.4.11. --[[User:Magnuz|Magnuz]] 2008-12-14 15:55 (CET))&lt;br /&gt;
&lt;br /&gt;
* libsecondlife.dll: (for PowerPC Only, see  details on this step [http://xyzzyxyzzy.net/2008/02/12/installing-opensim-on-powerpcor-of-eggs-and-virtual-worlds installing OpenSim on PowerPC…or: of eggs and virtual worlds])&lt;br /&gt;
 cd .. (back into opensim-libs)&lt;br /&gt;
 nant&lt;br /&gt;
 cp bin/libsecondlife.dll ../bin&lt;br /&gt;
&lt;br /&gt;
* Edit the libsecondlife.dll.config (PowerPC Only). Remove the cpu=&amp;quot;x86&amp;quot; tag in the last dllmap line.&lt;br /&gt;
&lt;br /&gt;
Here is what worked for me (OS X 10.5.7, Intel):&lt;br /&gt;
&lt;br /&gt;
* make sure you have X11 installed&lt;br /&gt;
* grab the Apple Dev Tools from [http://developer.apple.com/]&lt;br /&gt;
* install Mono Framework 2.4 from [http://www.go-mono.com/mono-downloads/download.html]&lt;br /&gt;
* Get OpenSim source:&lt;br /&gt;
  svn co http://opensimulator.org/svn/opensim/tags/0.6.5-post-fixes opensim&lt;br /&gt;
* Compile OpenSim:&lt;br /&gt;
  cd opensim&lt;br /&gt;
  ./runprebuild.sh&lt;br /&gt;
  nant&lt;br /&gt;
--[[User:Kusako|Kusako]] 08:06, 19 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
Here is what worked for me (OS X 10.5.7 and 10.6, Intel) on (8/9/09):&lt;br /&gt;
&lt;br /&gt;
* make sure you have X11 installed&lt;br /&gt;
* Very important to grab the latest Apple Dev Tools (3.2.1 on 8/9/09) (from [http://developer.apple.com/] - You will need a developer account, it is free.&lt;br /&gt;
* install Mono Framework 2.4 (version 2.4.2.3 on 8/9/09) from [http://www.go-mono.com/mono-downloads/download.html]&lt;br /&gt;
* install Mac Ports from [http://www.macports.org/]&lt;br /&gt;
* Mac Ports should update its packages on install, but to be safe, type the following at the Terminal: &lt;br /&gt;
  sudo port -v selfupdate&lt;br /&gt;
* Use mac ports to install nant. (This should pull in everything you need. I think this will also try to install mono, but since I already had it installed, that errored on me. Don't worry about it though, it should install everything else you need.) At the Terminal type: &lt;br /&gt;
  sudo port install nant &lt;br /&gt;
    &lt;br /&gt;
* Get OpenSim source. I downloaded 0.6.6 from [http://opensimulator.org/wiki/Download]&lt;br /&gt;
* Uncompress the download.&lt;br /&gt;
* Compile OpenSim:&lt;br /&gt;
  cd opensim&lt;br /&gt;
  ./runprebuild.sh&lt;br /&gt;
  nant&lt;br /&gt;
  &lt;br /&gt;
*Then of course the issue with the 0.6.6 release. &lt;br /&gt;
This release had some bugs with default automatic configuration on the first startup of OpenSim.exe.  bin/Regions/default.xml (region configuration file) is not automatically created in the main directory.  Therefore, you must manually create this file.  Here is an example.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;Root&amp;gt;&lt;br /&gt;
  &amp;lt;Config sim_UUID=&amp;quot;UUID&amp;quot; sim_name=&amp;quot;NAME&amp;quot; sim_location_x=&amp;quot;1000&amp;quot; sim_location_y=&amp;quot;1000&amp;quot;&lt;br /&gt;
 internal_ip_address=&amp;quot;IP_ADDRESS_OF_SERVER&amp;quot; internal_ip_port=&amp;quot;9000&amp;quot; allow_alternate_ports=&amp;quot;false&amp;quot;&lt;br /&gt;
 external_host_name=&amp;quot;DNS_NAME_OF_SERVER&amp;quot; master_avatar_uuid=&amp;quot;00000000-0000-0000-0000-000000000000&amp;quot;&lt;br /&gt;
 estate_covanant_uuid=&amp;quot;00000000-0000-0000-0000-000000000000&amp;quot; master_avatar_first=&amp;quot;FIRST_NAME&amp;quot;&lt;br /&gt;
 master_avatar_last=&amp;quot;SECOND_NAME&amp;quot; master_avatar_pass=&amp;quot;PASSWORD&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Root&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must change UUID, NAME, IP_ADDRESS_OF_SERVER, DNS_NAME_OF_SERVER, FIRST_NAME, SECOND_NAME and PASSWORD to your own values.&lt;br /&gt;
(I noticed than IP_ADDRESS_OF_SERVER should be set to real IP not to 127.0.0.1)&lt;br /&gt;
&lt;br /&gt;
'''Summary''':&lt;br /&gt;
&lt;br /&gt;
*Run OpenSim0.6.6Setup.exe and install OpenSim in Windows&lt;br /&gt;
*Run OpenSim.exe and enter default values - record them!&lt;br /&gt;
*Shutdown simulator (command: shutdown)&lt;br /&gt;
*Create default.xml with copy of above&lt;br /&gt;
*Change values in default.xml with recoded values&lt;br /&gt;
*Be sure default.xml be in main directory (same with OpenSim.ini)&lt;br /&gt;
*Run again OpenSim.exe&lt;br /&gt;
*Connect with viewer&lt;br /&gt;
--[[User:thart|thart]] 12:00, 10 October 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD 6.2 ===&lt;br /&gt;
 su&lt;br /&gt;
 cd /usr/ports/devel/subversion/ &amp;amp;&amp;amp; make install clean (you may also need to rebuild apr-svn if this step fails)&lt;br /&gt;
 cd /usr/ports/lang/mono/ &amp;amp;&amp;amp; make install clean&lt;br /&gt;
 cd /usr/ports/devel/nant/ &amp;amp;&amp;amp; make install clean&lt;br /&gt;
 cd /usr/ports/databases/sqlite3/ &amp;amp;&amp;amp; make install clean&lt;br /&gt;
 cd /usr/ports/x11-toolkits/libgdiplus/ &amp;amp;&amp;amp; make install clean&lt;br /&gt;
 cd /opensim/installation/directory/&lt;br /&gt;
 [[Download]] opensim&lt;br /&gt;
 cd opensim&lt;br /&gt;
 ./runprebuild.sh&lt;br /&gt;
 nant&lt;br /&gt;
&lt;br /&gt;
 Note: [http://opensimulator.org/wiki/OpenSim:FAQ#System.DllNotFoundException:_..2Flibopenjpeg-libsl-2.1.2.0.so|Follow the instructions on the FAQ to fix the]&lt;br /&gt;
 &amp;quot;System.DllNotFoundException: ./libopenjpeg-libsl-2.1.2.0.so&amp;quot; issue, but use &amp;quot;gmake&amp;quot; instead of &amp;quot;make&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For ODE Physics you must do the following:&lt;br /&gt;
 cd /usr/ports/graphics/libGL/ &amp;amp;&amp;amp; make install clean&lt;br /&gt;
 cd /usr/ports/graphics/libGLU/ &amp;amp;&amp;amp; make install clean&lt;br /&gt;
 cd /opensim/installation/directory/&lt;br /&gt;
 svn co http://opensimulator.org/svn/opensim-libs/trunk opensim-libs&lt;br /&gt;
 cd opensim-libs/unmanaged/OpenDynamicsEngine2/&lt;br /&gt;
 sh autogen.sh&lt;br /&gt;
 ./configure --enable-shared --enable-release --disable-demos&lt;br /&gt;
 make&lt;br /&gt;
 mv ./ode/src/.libs/libode.so /opensim/installation/directory/opensim/bin/&lt;br /&gt;
&lt;br /&gt;
=== RedHat Enterprise Linux 4 ===&lt;br /&gt;
 sudo vi /etc/yum.repos.d/mono.repo&lt;br /&gt;
&lt;br /&gt;
  [mono]&lt;br /&gt;
  name=Mono for rhel-4-i386 (stable)&lt;br /&gt;
  baseurl=http://ftp.novell.com/pub/mono/download-stable/rhel-4-i386/&lt;br /&gt;
  enabled=1&lt;br /&gt;
  gpgcheck=0&lt;br /&gt;
&lt;br /&gt;
 sudo yum install mono-complete monodoc-core nant&lt;br /&gt;
 [[Download]] opensim&lt;br /&gt;
 cd opensim&lt;br /&gt;
 ./runprebuild.sh&lt;br /&gt;
 nant&lt;br /&gt;
&lt;br /&gt;
=== RedHat Enterprise Linux 5 ===&lt;br /&gt;
&lt;br /&gt;
The instructions below also work on other RedHat Linux flavors such as CentOS or maybe Fedora.&lt;br /&gt;
&lt;br /&gt;
1. Put the [http://download.opensuse.org/repositories/Mono/RHEL_5/Mono.repo Mono.repo] file in the /etc/yum.repo.d/ directory:&lt;br /&gt;
 $ sudo su -&lt;br /&gt;
 $ cd /etc/yum.repos.d/&lt;br /&gt;
 $ wget http://download.opensuse.org/repositories/Mono/RHEL_5/Mono.repo&lt;br /&gt;
Naturally use the most [http://download.opensuse.org/repositories/Mono up-to-date link for your distribution].&lt;br /&gt;
&lt;br /&gt;
2. Install Mono and related tools with yum:&lt;br /&gt;
 $ yum install mono nant mono-jscript mono-nunit&lt;br /&gt;
Make sure to use nunit-console2 to run your tests.&lt;br /&gt;
&lt;br /&gt;
=== Fedora 5 ===&lt;br /&gt;
* I needed to build latest mono and nant from sources to build OpenSim successfully, the ones available in yum repository didn't work so I had to uninstall and build and configure the packages.&lt;br /&gt;
&lt;br /&gt;
For detailed instructions go [http://ruakuu.blogspot.com/2008/06/installing-and-configuring-opensim-on.html here]&lt;br /&gt;
&lt;br /&gt;
=== Debian 4 ===&lt;br /&gt;
&lt;br /&gt;
For detailed instructions please see [[Debian 4 Build Instructions]]&lt;br /&gt;
&lt;br /&gt;
=== Debian 5 ===&lt;br /&gt;
&lt;br /&gt;
1. Install Debian in the usual way. In the package list choose just the last option - 'Standard system' Leave all other install options unchecked unless you have other reason to install them.&lt;br /&gt;
&lt;br /&gt;
2. Log in as your root user make sure it works.&lt;br /&gt;
&lt;br /&gt;
3. type: aptitude update (or apt-get update)&lt;br /&gt;
&lt;br /&gt;
4. type: aptitude install nant and answer 'y' to 'Do you want to continue'- This will install nant and all of its dependancies.&lt;br /&gt;
&lt;br /&gt;
5. type: apt-get install git-core and answer 'y' to 'Do you want to continue'.&lt;br /&gt;
&lt;br /&gt;
6. type: aptitude install build-essential swig autoconf gawk mono-common binfmt-support bison libglib2.0-dev gettext and answer 'y' to 'Do you want to continue'&lt;br /&gt;
&lt;br /&gt;
7. type: wget http://ftp.novell.com/pub/mono/sources/mono/mono-2.4.3.tar.bz2 to download mono&lt;br /&gt;
&lt;br /&gt;
8. type: tar xf mono-2.4.3.tar.bz2 to extract the mono source code to a directory (substitute the latest build)&lt;br /&gt;
&lt;br /&gt;
9. type: cd mono-2.4.3 to change int the directory you just created&lt;br /&gt;
&lt;br /&gt;
10. type: ./configure --with-libgdiplus=yes - wait for it to finish&lt;br /&gt;
&lt;br /&gt;
11. type: make - and wait some more as this takes a bit - moreso on older machines&lt;br /&gt;
&lt;br /&gt;
12. type: make install&lt;br /&gt;
&lt;br /&gt;
13. type: cd /&lt;br /&gt;
&lt;br /&gt;
14 type: git clone git://opensimulator.org/git/opensim&lt;br /&gt;
&lt;br /&gt;
15 type: cd opensim&lt;br /&gt;
&lt;br /&gt;
16. type: git checkout -b 0.6.8-post-fixes origin/0.6.8-post-fixes (substitute the latest build)&lt;br /&gt;
&lt;br /&gt;
17. type: git pull&lt;br /&gt;
&lt;br /&gt;
18. type: apt-get -u upgrade and answer 'y' to 'do you want to continue?'. This will update all packages to their latest versions via apt (it will not upgrade opensim or mono as they were compiled seperately)&lt;br /&gt;
&lt;br /&gt;
19. Reboot, just to make sure it all comes up cleanly (type: shutdown -r now)&lt;br /&gt;
&lt;br /&gt;
20. Login, type: cd /&lt;br /&gt;
&lt;br /&gt;
21. type: cd opensim&lt;br /&gt;
&lt;br /&gt;
22. type: ./runprebuild.sh&lt;br /&gt;
&lt;br /&gt;
23 type: nant - wait for this to finish&lt;br /&gt;
&lt;br /&gt;
24. type: cd bin&lt;br /&gt;
&lt;br /&gt;
25. type: cp OpenSim.ini.example OpenSim.ini&lt;br /&gt;
&lt;br /&gt;
26. type: mono OpenSim.exe&lt;br /&gt;
&lt;br /&gt;
27. Answer the onscreen wizard promts and Opensim will start in standalone mode.&lt;br /&gt;
&lt;br /&gt;
To add MySql support type: apt-get install mysql-server and answer 'y' to 'Do you want to Continue'. You will be prompted for a password for the MySQL root user, enter it twice as requested. Edit OpenSim.ini to use MySql as directed elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== CentOS 5.2 32bit ===&lt;br /&gt;
&lt;br /&gt;
For detailed instructions please see [[CentOS 5.2 Build Instructions]]&lt;br /&gt;
&lt;br /&gt;
=== CentOS 5.3 32bit ===&lt;br /&gt;
&lt;br /&gt;
For detailed installation and configuration instructions please see this [http://www.linuxtraining.org.uk/blogger4.html blog]&lt;br /&gt;
&lt;br /&gt;
=== 64bit ===&lt;br /&gt;
Please note that only 32bit binaries are provided in the bin/ directory of subversion.  If you want to use 64bit, you'll need to rebuild these shared objects.  See [[Installing and running on x86-64]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Physics (Open Dynamics Engine ODE) ===&lt;br /&gt;
As installed from svn, ODE will work on most 32 bit platforms.  If you get an ODE-related crash, and/or a &amp;lt;i&amp;gt;libode.so not found&amp;lt;/i&amp;gt; type of error, you will need to build libode from source.&lt;br /&gt;
&lt;br /&gt;
Remove &amp;lt;tt&amp;gt;libode.so&amp;lt;/tt&amp;gt; from the &amp;lt;tt&amp;gt;./bin&amp;lt;/tt&amp;gt; folder.  (Note that subsequent svn updates may replace it again; best fix is to copy your built &amp;lt;tt&amp;gt;libode.so&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;bin&amp;lt;/tt&amp;gt;).  Do NOT remove &amp;lt;tt&amp;gt;ode.net.dll&amp;lt;/tt&amp;gt;!  Download the latest source from:&lt;br /&gt;
&lt;br /&gt;
 svn co http://opensimulator.org/svn/opensim-libs/trunk/unmanaged/OpenDynamicsEngine&lt;br /&gt;
&lt;br /&gt;
OpenSim requires a couple of patches on top of ODE which are not yet included upstream.  When compiling, make sure to use the following configure options:&lt;br /&gt;
&lt;br /&gt;
 --with-trimesh=gimpact &lt;br /&gt;
 --enable-shared&lt;br /&gt;
&lt;br /&gt;
Make sure the configure script confirms these choices, and always compile with single precision (I believe that's the default).  Try &amp;lt;code&amp;gt; make -k &amp;lt;/code&amp;gt; if you get errors relating to drawstuff, test*, or openGL.  &amp;lt;code&amp;gt; make install &amp;lt;/code&amp;gt; should put &amp;lt;tt&amp;gt;libode.so&amp;lt;/tt&amp;gt; in the proper place (usually &amp;lt;tt&amp;gt;/usr/local/lib&amp;lt;/tt&amp;gt;), and it should be seen by opensim (&amp;lt;tt&amp;gt;ode.net.dll&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
'''''Note:''' if OpenSim fails to launch with &amp;lt;tt&amp;gt;Exception: System.DllNotFoundException: ode&amp;lt;/tt&amp;gt;, after compiling ODE, just copy &amp;lt;tt&amp;gt;libode.so&amp;lt;/tt&amp;gt; from its usual place (probably &amp;lt;tt&amp;gt;/usr/local/lib/&amp;lt;/tt&amp;gt;) to ./bin/, as per [http://metafuturing.net/index.php/OpenSim_Notebook_1 this suggestion]''&lt;br /&gt;
&lt;br /&gt;
==== Setting up ODE for 64 Bits systems: ====&lt;br /&gt;
&lt;br /&gt;
HOWTO on setting up and Install OpenSim on SLES10 - SP1 64Bit&lt;br /&gt;
&lt;br /&gt;
1. I installed Mono 2.01, added this installation source in Yast2&lt;br /&gt;
    This distro supports installing packages via YaST. Add the following installation source to YaST:&lt;br /&gt;
    * http://ftp.novell.com/pub/mono/download-stable/SLE_10 [^]&lt;br /&gt;
    For assistance with using repositories and installing packages with YaST, visit the Yast help page.&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;nant&amp;quot; was installed also via this operation.&lt;br /&gt;
&lt;br /&gt;
2. I installed subversion from http://software.opensuse.org/search [^]&lt;br /&gt;
&lt;br /&gt;
   SLES/SLED10 -&amp;gt;&lt;br /&gt;
   subversion-1.5.2-34.2.x86_64.rpm&lt;br /&gt;
&lt;br /&gt;
3. I downloaded and installed the lastest SVN version of opensim as usual (like a 32 bit system):&lt;br /&gt;
   http://opensimulator.org/wiki/Build_Instructions [^]&lt;br /&gt;
&lt;br /&gt;
4. I downloaded and installed the Open Dynamics Engine (ODE) to replace the 32 bit version of ODE with a 64 bit version.&lt;br /&gt;
 &lt;br /&gt;
   I did that with the following linux commands:&lt;br /&gt;
  (it is expected that you have all required Linux building tools installed):&lt;br /&gt;
   &lt;br /&gt;
   # cd&lt;br /&gt;
   # svn co http://opensimulator.org/svn/opensim-libs/trunk/unmanaged/OpenDynamicsEngine [^]&lt;br /&gt;
   # cd OpenDynamicEngine&lt;br /&gt;
   # chmod a+x ou/bootstrap&lt;br /&gt;
   # sh autogen.sh&lt;br /&gt;
&lt;br /&gt;
 I installed/updated SLES10 with these rpm's for autogen.sh to run properly. http://software.opensuse.org/search [^]&lt;br /&gt;
&lt;br /&gt;
   SLES/SLED10 -&amp;gt;&lt;br /&gt;
   - autoconf-2.61-168.1.x86_64.rpm&lt;br /&gt;
   - automake-1.10.1-5.3.x86_64.rpm&lt;br /&gt;
&lt;br /&gt;
   # CFLAGS=&amp;quot;-m64&amp;quot; ./configure --enable-shared&lt;br /&gt;
   # make&lt;br /&gt;
&lt;br /&gt;
 I installed gtk2-devel via yast2, and all its dependancies, because make keept failing.&lt;br /&gt;
&lt;br /&gt;
   # cp ./ode/src/.libs/libode.so /opt/opensim/bin/&lt;br /&gt;
&lt;br /&gt;
 note:&lt;br /&gt;
 in this directory it had made several versions of the &amp;quot;libode.so&amp;quot; because of running the previous commands several times&lt;br /&gt;
 so i had to copy libode.so.1.0.0 to /opt/opensim/bin/libode.so&lt;br /&gt;
&lt;br /&gt;
   # vi ../opensim/bin/OpenSim.ini (change av_capsule_standup_tensor_linux to 1700000)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The 'chmod' command is required to fix permissions that are wrong.&lt;br /&gt;
The change in OpenSim.ini is required to avoid that avatars have bend legs and/or their feet are in the ground.&lt;br /&gt;
&lt;br /&gt;
==== Running ====&lt;br /&gt;
Recent versions of OpenSim come without an &amp;lt;tt&amp;gt;OpenSim.ini&amp;lt;/tt&amp;gt; file. Copy the &amp;lt;tt&amp;gt;OpenSim.ini.example&amp;lt;/tt&amp;gt; file to &amp;lt;tt&amp;gt;OpenSim.ini&amp;lt;/tt&amp;gt; before making any changes.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 cd bin&lt;br /&gt;
 mono OpenSim.exe&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: if you are running a 32bit Server such as Ubuntu 8.0.4 you need the alternative launcher:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
mono OpenSim.32BitLaunch.exe&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* To invoke ODE, add the option:&lt;br /&gt;
 -physics=OpenDynamicsEngine&lt;br /&gt;
to the &amp;lt;tt&amp;gt;mono OpenSim.exe&amp;lt;/tt&amp;gt; line&lt;br /&gt;
&lt;br /&gt;
or add &amp;lt;code&amp;gt;  physics = OpenDynamicsEngine &amp;lt;/code&amp;gt; to the [Startup] section of &amp;lt;tt&amp;gt;OpenSim.ini&amp;lt;/tt&amp;gt;.  Same deal for other physics engines, when available.&lt;br /&gt;
&lt;br /&gt;
On mono 1.2.6, some distributions may see&lt;br /&gt;
 Unhandled Exception: System.NotSupportedException: CodePage 1252 not supported&lt;br /&gt;
on startup when using mysql.  This can be resolved by installing the package libmono-i18n2.0-cil (see http://bugs.mysql.com/bug.php?id=33938).&lt;br /&gt;
&lt;br /&gt;
== Hardware selection guide ==&lt;br /&gt;
&lt;br /&gt;
An often-asked question is &amp;quot;what kind of hardware do I need to successfully run OpenSim?&amp;quot;  Unfortunately, the answer is &amp;quot;it depends&amp;quot;.  The number of regions hosted on a given machine, number of simultaneous avatars on those regions, number of prims, use of scripts, etc., all affect hardware requirements.  So, to help you make a more informed selection, some examples of hardware used are listed in the [[Hardware_Selection_Guide|hardware selection guide]]. &lt;br /&gt;
&lt;br /&gt;
[[Category:Users]]&lt;br /&gt;
[[Category:Getting Started]]&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Build_Instructions</id>
		<title>Build Instructions</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Build_Instructions"/>
				<updated>2010-01-29T19:51:36Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: /* Debian 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Quicklinks}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Users]]&lt;br /&gt;
This page covers building OpenSim from source code on multiple platforms.  Please help us keep this page up to date as the project progresses.&lt;br /&gt;
&lt;br /&gt;
==Download OpenSim ==&lt;br /&gt;
Check out the [[Download]] page for instructions on obtaining an OpenSim source release.&lt;br /&gt;
&lt;br /&gt;
==MS Windows==&lt;br /&gt;
&lt;br /&gt;
OpenSim requires either the .Net framework version 2.0, or the latest Mono. It supports the following compilers:&lt;br /&gt;
* [http://msdn2.microsoft.com/en-us/express/aa700756.aspx Microsoft Visual C# Express Edition] (note: not Visual C++)&lt;br /&gt;
* [http://www.mono-project.com/ mono]&lt;br /&gt;
&lt;br /&gt;
Additional note: If you like IDE's you will need C# express 2008 or VS 2008.&lt;br /&gt;
&lt;br /&gt;
Additional note: Microsoft C# Express v9 may install .Net 3.5 with resultant path error.&lt;br /&gt;
# To avoid install .Net framework version 2.0&lt;br /&gt;
&lt;br /&gt;
Additional note: It is possible to develop on Windows Vista 64 bits with the following tweaks:&lt;br /&gt;
# Select OpenSim project properties from solution and choose platform to be x86. Rebuild solution.&lt;br /&gt;
# Select OpenSim.exe properties under solution bin folder and choose windows xp sp 2 compatibility mode + run as administrator.&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
&lt;br /&gt;
* In the top-level directory, run the '&amp;lt;tt&amp;gt;runprebuild.bat&amp;lt;/tt&amp;gt;' file. This will create a VS2008 solution file, a nant build file and a '&amp;lt;tt&amp;gt;compile.bat&amp;lt;/tt&amp;gt;' file.&lt;br /&gt;
&lt;br /&gt;
* Open the resulting sln file with visual studio and build it there, or&lt;br /&gt;
* Run the '&amp;lt;tt&amp;gt;compile.bat&amp;lt;/tt&amp;gt;' file. This will build the executable using MSBuild.&lt;br /&gt;
* if you prefer to use nant, run nant in the same top-level directory. This will build the executables.&lt;br /&gt;
&lt;br /&gt;
If you don't care about physics (walking on prims, etc), ignore the rest of this section.&lt;br /&gt;
&lt;br /&gt;
=== Running ===&lt;br /&gt;
&lt;br /&gt;
Recent versions of OpenSim come without an &amp;lt;tt&amp;gt;OpenSim.ini&amp;lt;/tt&amp;gt; file. Copy the &amp;lt;tt&amp;gt;OpenSim.ini.example&amp;lt;/tt&amp;gt; file to &amp;lt;tt&amp;gt;OpenSim.ini&amp;lt;/tt&amp;gt; before making any changes.&lt;br /&gt;
&lt;br /&gt;
Double-click on the &amp;lt;tt&amp;gt;OpenSim.exe&amp;lt;/tt&amp;gt; executable file in the &amp;lt;tt&amp;gt;bin&amp;lt;/tt&amp;gt; directory. This will start up OpenSim in standalone mode.&lt;br /&gt;
&lt;br /&gt;
The debugger in VS2005 C# may be used to step through the code. For those that use a Cygwin shell, you may find that one or more dll's have permissions that cause problems running. Most find that a &amp;quot;&amp;lt;tt&amp;gt;chmod 777 *&amp;lt;/tt&amp;gt;&amp;quot; from the &amp;lt;tt&amp;gt;bin&amp;lt;/tt&amp;gt; directory solves this.&lt;br /&gt;
&lt;br /&gt;
Physics can be invoked by adding the appropriate line to the [Startup] section of &amp;lt;tt&amp;gt;OpenSim.ini&amp;lt;/tt&amp;gt;.  For ODE, that would be:&lt;br /&gt;
&lt;br /&gt;
 physics = OpenDynamicsEngine&lt;br /&gt;
&lt;br /&gt;
You can also add a command line option to a shortcut, or run from a command prompt with:&lt;br /&gt;
&lt;br /&gt;
 -physics=OpenDynamicsEngine&lt;br /&gt;
&lt;br /&gt;
'''''Windows Vista'''''&lt;br /&gt;
&lt;br /&gt;
Some people have reported that to run on Windows Vista, you must first disable Windows Firewall.  Under the new &amp;quot;Start&amp;quot; button of Vista, select &amp;quot;Control panel&amp;quot;.  Then double-click &amp;quot;Windows Firewall&amp;quot;.  In the window that pops up, on the left column, select &amp;quot;Turn Windows Firewall on or off&amp;quot;.  You will have to give permission for this to run, then select the option &amp;quot;Off (not recommended)&amp;quot;.  Click &amp;quot;OK&amp;quot; and exit from the Windows Firewall window.&lt;br /&gt;
&lt;br /&gt;
If you have McAfee SecurityCenter, see the description below.&lt;br /&gt;
&lt;br /&gt;
Once all the security features are disabled, right click on &amp;lt;tt&amp;gt;OpenSim.exe&amp;lt;/tt&amp;gt; and select &amp;quot;Run as administrator&amp;quot;.  This will pop up a window asking permission, select &amp;quot;Allow&amp;quot;.  Your OpenSim server should run in a DOS-like window and accept connections.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''McAfee Security'''''&lt;br /&gt;
&lt;br /&gt;
McAfee Security does not allow applications to listen on ports not explicitly specified.  You have two options: 1) disable firewall protection all together, 2) enable &amp;lt;tt&amp;gt;OpenSim.exe&amp;lt;/tt&amp;gt; to be able to open ports.&lt;br /&gt;
&lt;br /&gt;
''Disable firewall''&lt;br /&gt;
&lt;br /&gt;
Open McAfee SecurityCenter.  Select &amp;quot;Internet &amp;amp; Network&amp;quot;.  In the lower left corner is a small link to &amp;quot;Configure...&amp;quot;.  Select this.  In the right side of the window, select the bar that says &amp;quot;Firewall protection is enabled&amp;quot;.  Here you can select &amp;quot;Off&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
''Enable &amp;lt;tt&amp;gt;OpenSim.exe&amp;lt;/tt&amp;gt; to open ports''&lt;br /&gt;
&lt;br /&gt;
Open McAfee SecurityCenter.  Select &amp;quot;Internet &amp;amp; Network&amp;quot;.  In the lower left corner is a small link to &amp;quot;Configure...&amp;quot;.  Select this.  In the right side of the window, select the bar that says &amp;quot;Firewall protection is enabled&amp;quot;.  Select the &amp;quot;Advanced...&amp;quot; button.  This will pop up a new window.&lt;br /&gt;
&lt;br /&gt;
In the new window, on the left side, select &amp;quot;Program Permissions.&amp;quot;  In the middle on the right side of the window, select the &amp;quot;Add Allowed Program&amp;quot; button.  Use the browser that pops up to find the OpenSim executable and select it.&lt;br /&gt;
&lt;br /&gt;
Finally, select &amp;quot;OK&amp;quot; and exit the McAfee SecurityCenter window.&lt;br /&gt;
&lt;br /&gt;
==Linux/Mac OS X/FreeBSD==&lt;br /&gt;
&lt;br /&gt;
The easiest plaform to get running on the Linux side is Ubuntu 8.10, 32bit.  This is what most of the developers running Linux use.  If you are looking for the quick path, start there.&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu ===&lt;br /&gt;
&lt;br /&gt;
For Ubuntu users on older distributions (7.10, 8.04, etc.) '''you need''' to upgrade your version of mono to at least 2.4. For anyone who needs to upgrade their Mono, see [[Update Mono on Ubuntu]].&lt;br /&gt;
&lt;br /&gt;
Ubuntu Karmic (9.10) includes mono 2.4.2.3 packages.&lt;br /&gt;
&lt;br /&gt;
To build:&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install nant mono-gmcs libmono-microsoft8.0-cil \&lt;br /&gt;
      libmono-system-runtime2.0-cil libgdiplus libmono-i18n2.0-cil libmono-oracle2.0-cil&lt;br /&gt;
 [[Download]] opensim&lt;br /&gt;
 cd opensim&lt;br /&gt;
 ./runprebuild.sh&lt;br /&gt;
 nant&lt;br /&gt;
&lt;br /&gt;
=== openSUSE 10.3/11/11.1 ===&lt;br /&gt;
&lt;br /&gt;
Install an openSUSE 11.1, 11 or 10.3 with its default options, add the online repositories&lt;br /&gt;
when finished installing do an online update with all the latest packages.&lt;br /&gt;
&lt;br /&gt;
In yast install these packages, for running Opensim in standalone mode.&lt;br /&gt;
(there is a slight diffrence between 10.3 and 11/11.1 but following should be same)&lt;br /&gt;
 subversion&lt;br /&gt;
 nant&lt;br /&gt;
 mono-jscript&lt;br /&gt;
 - check that mono-core is installed&lt;br /&gt;
&lt;br /&gt;
just in case you do not already have it installed &lt;br /&gt;
&lt;br /&gt;
  sudo zypper install mono-data-oracle&lt;br /&gt;
&lt;br /&gt;
A tip for OpenSuSE 11.1 users - you can install packages from the command line using the 'zypper' tool.  For example, to install 'nant', use this command:&lt;br /&gt;
&lt;br /&gt;
  sudo zypper install nant&lt;br /&gt;
&lt;br /&gt;
If you just want to use SQLite then jump to last section &lt;br /&gt;
within this post.&lt;br /&gt;
&lt;br /&gt;
* Optional mysql - for Opensim running in Grid mode:&lt;br /&gt;
Install these mysql packages via yast&lt;br /&gt;
  mysql&lt;br /&gt;
  mysql-client&lt;br /&gt;
  mysql-administrator&lt;br /&gt;
  mysql-gui-tools&lt;br /&gt;
  mysql-query-browser&lt;br /&gt;
&lt;br /&gt;
(note that selecting mysql in the Yast2 Installer will select the other packages automatically)&lt;br /&gt;
&lt;br /&gt;
Before building create the mysql database.&lt;br /&gt;
 /etc/init.d/mysql start&lt;br /&gt;
 mysql -u root -p -h localhost&lt;br /&gt;
 (when asked for password just hit enter)&lt;br /&gt;
&lt;br /&gt;
 mysql&amp;gt; create database opensim;&lt;br /&gt;
 mysql&amp;gt; use opensim;&lt;br /&gt;
 mysql&amp;gt; create user 'opensim'@'localhost' identified by 'thePassword';&lt;br /&gt;
 mysql&amp;gt; grant all on *.* to 'opensim'@'localhost';&lt;br /&gt;
 mysql&amp;gt; quit&lt;br /&gt;
&lt;br /&gt;
*note that the '''grant all''' command may differ if you're adding the opensim database to an existing mysql installation.&lt;br /&gt;
&lt;br /&gt;
On current builds set the connection string inside bin/OpenSim.ini after coppying the OpenSim.ini.example file.&lt;br /&gt;
If you are changing to MySQL from SQLite, the connection string for mysql also exists in the bin/Region/*xml files.&lt;br /&gt;
* It is '''important''' to remember this if you start out using the built-in SQLite database engine.&lt;br /&gt;
&lt;br /&gt;
Build after installation of above in bash terminal. I save it in /opt&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 cd /opt&lt;br /&gt;
 [[Download]] opensim&lt;br /&gt;
 cd opensim&lt;br /&gt;
 ./runprebuild.sh&lt;br /&gt;
 nant&lt;br /&gt;
&lt;br /&gt;
Or, if you have a current (0.6+), you can simply execute:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
After this you should be able to continue on starting the diffrent Servers, look in the mysql-config section,or&lt;br /&gt;
just run your OpenSim as a Standalone. By - eagleFX&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X 10.5/10.4 ===&lt;br /&gt;
* OpenSim is now working on PowerPC Macs! Thanks to DrScofield and those who helped him. Current nightly builds for PowerPC are not working, not sure about Intel so use the 0.5 Build. OpenSim works on Intel Macs. I'm testing on PowerBook G4. Tested these step on 10.5, but not 10.4 but should work --[[User:Mokele|Mokele]] 22:36, 14 February 2008 (PST) (Works on iMac G5 with OS 10.4.11, including expanding to local grid mode. --[[User:Magnuz|Magnuz]] 2008-12-15 10:50 (CET))&lt;br /&gt;
* Install XCode Developers Tools from DVD/CD Installation Disk or download  from http://developer.apple.com/. You have to create an Apple account to access the downloads if you don't have an Apple account.&lt;br /&gt;
* Install X11 for 10.4 from the Optional Install from the DVD/CD Installation Disk. X11 for 10.5 is installed by default.&lt;br /&gt;
* Install Mono 1.2.5 from http://ftp.novell.com/pub/mono/archive/1.2.5/macos-10-universal/5/MonoFramework-1.2.5_5.macos10.novell.universal.dmg (The more recent releases Mono 1.2.6, 1.9.1 and 2.0.1 do not appear to work with these installation instructions. --[[User:Magnuz|Magnuz]] 2008-12-14 15:56 (CET)) and in Terminal or X11 edit the .profile file  and add the following line:&lt;br /&gt;
 export PKG_CONFIG_PATH=&amp;quot;/Library/Frameworks/Mono.framework/Versions/Current/lib/pkgconfig/:${PKG_CONFIG_PATH}&amp;quot;&lt;br /&gt;
* Compile OpenSim&lt;br /&gt;
 svn co http://opensimulator.org/svn/opensim/tags/0.5.0-release opensim&lt;br /&gt;
 cd opensim &lt;br /&gt;
 ./runprebuild.sh&lt;br /&gt;
 nant&lt;br /&gt;
&lt;br /&gt;
* Download and Compile libopenjpeg-libsl-2.1.2.0.dylib and libsecondlife.dll&lt;br /&gt;
* libopenjpeg-libsl-2.1.2.0.dylib:&lt;br /&gt;
 svn co http://opensimulator.org/svn/opensim-libs/old/libsl1550 opensim-libs&lt;br /&gt;
 cd opensim-libs/openjpeg-libsl&lt;br /&gt;
 make -f Makefile.osx&lt;br /&gt;
 cp libopenjpeg-libsl-2.1.2.0.dylib ../../bin&lt;br /&gt;
* Note: The Makefile that creates the libopenjpeg-libsl-2.1.2.0.so does not compile on PowerPC, but works properly on Intel Macs. Looks like a gcc issue with compile options. (It appears to work on iMac G5 with OS X 10.4.11. --[[User:Magnuz|Magnuz]] 2008-12-14 15:55 (CET))&lt;br /&gt;
&lt;br /&gt;
* libsecondlife.dll: (for PowerPC Only, see  details on this step [http://xyzzyxyzzy.net/2008/02/12/installing-opensim-on-powerpcor-of-eggs-and-virtual-worlds installing OpenSim on PowerPC…or: of eggs and virtual worlds])&lt;br /&gt;
 cd .. (back into opensim-libs)&lt;br /&gt;
 nant&lt;br /&gt;
 cp bin/libsecondlife.dll ../bin&lt;br /&gt;
&lt;br /&gt;
* Edit the libsecondlife.dll.config (PowerPC Only). Remove the cpu=&amp;quot;x86&amp;quot; tag in the last dllmap line.&lt;br /&gt;
&lt;br /&gt;
Here is what worked for me (OS X 10.5.7, Intel):&lt;br /&gt;
&lt;br /&gt;
* make sure you have X11 installed&lt;br /&gt;
* grab the Apple Dev Tools from [http://developer.apple.com/]&lt;br /&gt;
* install Mono Framework 2.4 from [http://www.go-mono.com/mono-downloads/download.html]&lt;br /&gt;
* Get OpenSim source:&lt;br /&gt;
  svn co http://opensimulator.org/svn/opensim/tags/0.6.5-post-fixes opensim&lt;br /&gt;
* Compile OpenSim:&lt;br /&gt;
  cd opensim&lt;br /&gt;
  ./runprebuild.sh&lt;br /&gt;
  nant&lt;br /&gt;
--[[User:Kusako|Kusako]] 08:06, 19 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
Here is what worked for me (OS X 10.5.7 and 10.6, Intel) on (8/9/09):&lt;br /&gt;
&lt;br /&gt;
* make sure you have X11 installed&lt;br /&gt;
* Very important to grab the latest Apple Dev Tools (3.2.1 on 8/9/09) (from [http://developer.apple.com/] - You will need a developer account, it is free.&lt;br /&gt;
* install Mono Framework 2.4 (version 2.4.2.3 on 8/9/09) from [http://www.go-mono.com/mono-downloads/download.html]&lt;br /&gt;
* install Mac Ports from [http://www.macports.org/]&lt;br /&gt;
* Mac Ports should update its packages on install, but to be safe, type the following at the Terminal: &lt;br /&gt;
  sudo port -v selfupdate&lt;br /&gt;
* Use mac ports to install nant. (This should pull in everything you need. I think this will also try to install mono, but since I already had it installed, that errored on me. Don't worry about it though, it should install everything else you need.) At the Terminal type: &lt;br /&gt;
  sudo port install nant &lt;br /&gt;
    &lt;br /&gt;
* Get OpenSim source. I downloaded 0.6.6 from [http://opensimulator.org/wiki/Download]&lt;br /&gt;
* Uncompress the download.&lt;br /&gt;
* Compile OpenSim:&lt;br /&gt;
  cd opensim&lt;br /&gt;
  ./runprebuild.sh&lt;br /&gt;
  nant&lt;br /&gt;
  &lt;br /&gt;
*Then of course the issue with the 0.6.6 release. &lt;br /&gt;
This release had some bugs with default automatic configuration on the first startup of OpenSim.exe.  bin/Regions/default.xml (region configuration file) is not automatically created in the main directory.  Therefore, you must manually create this file.  Here is an example.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;Root&amp;gt;&lt;br /&gt;
  &amp;lt;Config sim_UUID=&amp;quot;UUID&amp;quot; sim_name=&amp;quot;NAME&amp;quot; sim_location_x=&amp;quot;1000&amp;quot; sim_location_y=&amp;quot;1000&amp;quot;&lt;br /&gt;
 internal_ip_address=&amp;quot;IP_ADDRESS_OF_SERVER&amp;quot; internal_ip_port=&amp;quot;9000&amp;quot; allow_alternate_ports=&amp;quot;false&amp;quot;&lt;br /&gt;
 external_host_name=&amp;quot;DNS_NAME_OF_SERVER&amp;quot; master_avatar_uuid=&amp;quot;00000000-0000-0000-0000-000000000000&amp;quot;&lt;br /&gt;
 estate_covanant_uuid=&amp;quot;00000000-0000-0000-0000-000000000000&amp;quot; master_avatar_first=&amp;quot;FIRST_NAME&amp;quot;&lt;br /&gt;
 master_avatar_last=&amp;quot;SECOND_NAME&amp;quot; master_avatar_pass=&amp;quot;PASSWORD&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Root&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must change UUID, NAME, IP_ADDRESS_OF_SERVER, DNS_NAME_OF_SERVER, FIRST_NAME, SECOND_NAME and PASSWORD to your own values.&lt;br /&gt;
(I noticed than IP_ADDRESS_OF_SERVER should be set to real IP not to 127.0.0.1)&lt;br /&gt;
&lt;br /&gt;
'''Summary''':&lt;br /&gt;
&lt;br /&gt;
*Run OpenSim0.6.6Setup.exe and install OpenSim in Windows&lt;br /&gt;
*Run OpenSim.exe and enter default values - record them!&lt;br /&gt;
*Shutdown simulator (command: shutdown)&lt;br /&gt;
*Create default.xml with copy of above&lt;br /&gt;
*Change values in default.xml with recoded values&lt;br /&gt;
*Be sure default.xml be in main directory (same with OpenSim.ini)&lt;br /&gt;
*Run again OpenSim.exe&lt;br /&gt;
*Connect with viewer&lt;br /&gt;
--[[User:thart|thart]] 12:00, 10 October 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD 6.2 ===&lt;br /&gt;
 su&lt;br /&gt;
 cd /usr/ports/devel/subversion/ &amp;amp;&amp;amp; make install clean (you may also need to rebuild apr-svn if this step fails)&lt;br /&gt;
 cd /usr/ports/lang/mono/ &amp;amp;&amp;amp; make install clean&lt;br /&gt;
 cd /usr/ports/devel/nant/ &amp;amp;&amp;amp; make install clean&lt;br /&gt;
 cd /usr/ports/databases/sqlite3/ &amp;amp;&amp;amp; make install clean&lt;br /&gt;
 cd /usr/ports/x11-toolkits/libgdiplus/ &amp;amp;&amp;amp; make install clean&lt;br /&gt;
 cd /opensim/installation/directory/&lt;br /&gt;
 [[Download]] opensim&lt;br /&gt;
 cd opensim&lt;br /&gt;
 ./runprebuild.sh&lt;br /&gt;
 nant&lt;br /&gt;
&lt;br /&gt;
 Note: [http://opensimulator.org/wiki/OpenSim:FAQ#System.DllNotFoundException:_..2Flibopenjpeg-libsl-2.1.2.0.so|Follow the instructions on the FAQ to fix the]&lt;br /&gt;
 &amp;quot;System.DllNotFoundException: ./libopenjpeg-libsl-2.1.2.0.so&amp;quot; issue, but use &amp;quot;gmake&amp;quot; instead of &amp;quot;make&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For ODE Physics you must do the following:&lt;br /&gt;
 cd /usr/ports/graphics/libGL/ &amp;amp;&amp;amp; make install clean&lt;br /&gt;
 cd /usr/ports/graphics/libGLU/ &amp;amp;&amp;amp; make install clean&lt;br /&gt;
 cd /opensim/installation/directory/&lt;br /&gt;
 svn co http://opensimulator.org/svn/opensim-libs/trunk opensim-libs&lt;br /&gt;
 cd opensim-libs/unmanaged/OpenDynamicsEngine2/&lt;br /&gt;
 sh autogen.sh&lt;br /&gt;
 ./configure --enable-shared --enable-release --disable-demos&lt;br /&gt;
 make&lt;br /&gt;
 mv ./ode/src/.libs/libode.so /opensim/installation/directory/opensim/bin/&lt;br /&gt;
&lt;br /&gt;
=== RedHat Enterprise Linux 4 ===&lt;br /&gt;
 sudo vi /etc/yum.repos.d/mono.repo&lt;br /&gt;
&lt;br /&gt;
  [mono]&lt;br /&gt;
  name=Mono for rhel-4-i386 (stable)&lt;br /&gt;
  baseurl=http://ftp.novell.com/pub/mono/download-stable/rhel-4-i386/&lt;br /&gt;
  enabled=1&lt;br /&gt;
  gpgcheck=0&lt;br /&gt;
&lt;br /&gt;
 sudo yum install mono-complete monodoc-core nant&lt;br /&gt;
 [[Download]] opensim&lt;br /&gt;
 cd opensim&lt;br /&gt;
 ./runprebuild.sh&lt;br /&gt;
 nant&lt;br /&gt;
&lt;br /&gt;
=== RedHat Enterprise Linux 5 ===&lt;br /&gt;
&lt;br /&gt;
The instructions below also work on other RedHat Linux flavors such as CentOS or maybe Fedora.&lt;br /&gt;
&lt;br /&gt;
1. Put the [http://download.opensuse.org/repositories/Mono/RHEL_5/Mono.repo Mono.repo] file in the /etc/yum.repo.d/ directory:&lt;br /&gt;
 $ sudo su -&lt;br /&gt;
 $ cd /etc/yum.repos.d/&lt;br /&gt;
 $ wget http://download.opensuse.org/repositories/Mono/RHEL_5/Mono.repo&lt;br /&gt;
Naturally use the most [http://download.opensuse.org/repositories/Mono up-to-date link for your distribution].&lt;br /&gt;
&lt;br /&gt;
2. Install Mono and related tools with yum:&lt;br /&gt;
 $ yum install mono nant mono-jscript mono-nunit&lt;br /&gt;
Make sure to use nunit-console2 to run your tests.&lt;br /&gt;
&lt;br /&gt;
=== Fedora 5 ===&lt;br /&gt;
* I needed to build latest mono and nant from sources to build OpenSim successfully, the ones available in yum repository didn't work so I had to uninstall and build and configure the packages.&lt;br /&gt;
&lt;br /&gt;
For detailed instructions go [http://ruakuu.blogspot.com/2008/06/installing-and-configuring-opensim-on.html here]&lt;br /&gt;
&lt;br /&gt;
=== Debian 4 ===&lt;br /&gt;
&lt;br /&gt;
For detailed instructions please see [[Debian 4 Build Instructions]]&lt;br /&gt;
&lt;br /&gt;
=== Debian 5 ===&lt;br /&gt;
&lt;br /&gt;
1. Install Debian in the usual way. In the package list choose just the last option - 'Standard system' Leave all other install options unchecked unless you have other reason to install them.&lt;br /&gt;
&lt;br /&gt;
2. Log in as your root user make sure it works.&lt;br /&gt;
&lt;br /&gt;
3. type: aptiude update (or apt-get update)&lt;br /&gt;
&lt;br /&gt;
4. type: aptitude install nant and answer 'y' to 'Do you want to continue'- This will install nant and all of its dependancies.&lt;br /&gt;
&lt;br /&gt;
5. type: apt-get install git-core and answer 'y' to 'Do you want to continue'.&lt;br /&gt;
&lt;br /&gt;
6. type: aptitude install build-essential swig autoconf gawk mono-common binfmt-support bison libglib2.0-dev gettext and answer 'y' to 'Do you want to continue'&lt;br /&gt;
&lt;br /&gt;
7. type: wget http://ftp.novell.com/pub/mono/sources/mono/mono-2.4.3.tar.bz2 to download mono&lt;br /&gt;
&lt;br /&gt;
8. type: tar xf mono-2.4.3.tar.bz2 to extract the mono source code to a directory (substitute the latest build)&lt;br /&gt;
&lt;br /&gt;
9. type: cd mono-2.4.3 to change int the directory you just created&lt;br /&gt;
&lt;br /&gt;
10. type: ./configure --with-libgdiplus=yes - wait for it to finish&lt;br /&gt;
&lt;br /&gt;
11. type: make - and wait some more as this takes a bit - moreso on older machines&lt;br /&gt;
&lt;br /&gt;
12. type: make install&lt;br /&gt;
&lt;br /&gt;
13. type: cd /&lt;br /&gt;
&lt;br /&gt;
14 type: git clone git://opensimulator.org/git/opensim&lt;br /&gt;
&lt;br /&gt;
15 type: cd opensim&lt;br /&gt;
&lt;br /&gt;
16. type: git checkout -b 0.6.8-post-fixes origin/0.6.8-post-fixes (substitute the latest build)&lt;br /&gt;
&lt;br /&gt;
17. type: git pull&lt;br /&gt;
&lt;br /&gt;
18. type: apt-get -u upgrade and answer 'y' to 'do you want to continue?'. This will update all packages to their latest versions via apt (it will not upgrade opensim or mono as they were compiled seperately)&lt;br /&gt;
&lt;br /&gt;
19. Reboot, just to make sure it all comes up cleanly (type: shutdown -r now)&lt;br /&gt;
&lt;br /&gt;
20. Login, type: cd /&lt;br /&gt;
&lt;br /&gt;
21. type: cd opensim&lt;br /&gt;
&lt;br /&gt;
22. type: ./runprebuild.sh&lt;br /&gt;
&lt;br /&gt;
23 type: nant - wait for this to finish&lt;br /&gt;
&lt;br /&gt;
24. type: cd bin&lt;br /&gt;
&lt;br /&gt;
25. type: cp OpenSim.ini.example OpenSim.ini&lt;br /&gt;
&lt;br /&gt;
26. type: mono OpenSim.exe&lt;br /&gt;
&lt;br /&gt;
27. Answer the onscreen wizard promts and Opensim will start in standalone mode.&lt;br /&gt;
&lt;br /&gt;
To add MySql support type: apt-get install mysql-server and answer 'y' to 'Do you want to Continue'. You will be prompted for a password for the MySQL root user, enter it twice as requested. Edit OpenSim.ini to use MySql as directed elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== CentOS 5.2 32bit ===&lt;br /&gt;
&lt;br /&gt;
For detailed instructions please see [[CentOS 5.2 Build Instructions]]&lt;br /&gt;
&lt;br /&gt;
=== CentOS 5.3 32bit ===&lt;br /&gt;
&lt;br /&gt;
For detailed installation and configuration instructions please see this [http://www.linuxtraining.org.uk/blogger4.html blog]&lt;br /&gt;
&lt;br /&gt;
=== 64bit ===&lt;br /&gt;
Please note that only 32bit binaries are provided in the bin/ directory of subversion.  If you want to use 64bit, you'll need to rebuild these shared objects.  See [[Installing and running on x86-64]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Physics (Open Dynamics Engine ODE) ===&lt;br /&gt;
As installed from svn, ODE will work on most 32 bit platforms.  If you get an ODE-related crash, and/or a &amp;lt;i&amp;gt;libode.so not found&amp;lt;/i&amp;gt; type of error, you will need to build libode from source.&lt;br /&gt;
&lt;br /&gt;
Remove &amp;lt;tt&amp;gt;libode.so&amp;lt;/tt&amp;gt; from the &amp;lt;tt&amp;gt;./bin&amp;lt;/tt&amp;gt; folder.  (Note that subsequent svn updates may replace it again; best fix is to copy your built &amp;lt;tt&amp;gt;libode.so&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;bin&amp;lt;/tt&amp;gt;).  Do NOT remove &amp;lt;tt&amp;gt;ode.net.dll&amp;lt;/tt&amp;gt;!  Download the latest source from:&lt;br /&gt;
&lt;br /&gt;
 svn co http://opensimulator.org/svn/opensim-libs/trunk/unmanaged/OpenDynamicsEngine&lt;br /&gt;
&lt;br /&gt;
OpenSim requires a couple of patches on top of ODE which are not yet included upstream.  When compiling, make sure to use the following configure options:&lt;br /&gt;
&lt;br /&gt;
 --with-trimesh=gimpact &lt;br /&gt;
 --enable-shared&lt;br /&gt;
&lt;br /&gt;
Make sure the configure script confirms these choices, and always compile with single precision (I believe that's the default).  Try &amp;lt;code&amp;gt; make -k &amp;lt;/code&amp;gt; if you get errors relating to drawstuff, test*, or openGL.  &amp;lt;code&amp;gt; make install &amp;lt;/code&amp;gt; should put &amp;lt;tt&amp;gt;libode.so&amp;lt;/tt&amp;gt; in the proper place (usually &amp;lt;tt&amp;gt;/usr/local/lib&amp;lt;/tt&amp;gt;), and it should be seen by opensim (&amp;lt;tt&amp;gt;ode.net.dll&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
'''''Note:''' if OpenSim fails to launch with &amp;lt;tt&amp;gt;Exception: System.DllNotFoundException: ode&amp;lt;/tt&amp;gt;, after compiling ODE, just copy &amp;lt;tt&amp;gt;libode.so&amp;lt;/tt&amp;gt; from its usual place (probably &amp;lt;tt&amp;gt;/usr/local/lib/&amp;lt;/tt&amp;gt;) to ./bin/, as per [http://metafuturing.net/index.php/OpenSim_Notebook_1 this suggestion]''&lt;br /&gt;
&lt;br /&gt;
==== Setting up ODE for 64 Bits systems: ====&lt;br /&gt;
&lt;br /&gt;
HOWTO on setting up and Install OpenSim on SLES10 - SP1 64Bit&lt;br /&gt;
&lt;br /&gt;
1. I installed Mono 2.01, added this installation source in Yast2&lt;br /&gt;
    This distro supports installing packages via YaST. Add the following installation source to YaST:&lt;br /&gt;
    * http://ftp.novell.com/pub/mono/download-stable/SLE_10 [^]&lt;br /&gt;
    For assistance with using repositories and installing packages with YaST, visit the Yast help page.&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;nant&amp;quot; was installed also via this operation.&lt;br /&gt;
&lt;br /&gt;
2. I installed subversion from http://software.opensuse.org/search [^]&lt;br /&gt;
&lt;br /&gt;
   SLES/SLED10 -&amp;gt;&lt;br /&gt;
   subversion-1.5.2-34.2.x86_64.rpm&lt;br /&gt;
&lt;br /&gt;
3. I downloaded and installed the lastest SVN version of opensim as usual (like a 32 bit system):&lt;br /&gt;
   http://opensimulator.org/wiki/Build_Instructions [^]&lt;br /&gt;
&lt;br /&gt;
4. I downloaded and installed the Open Dynamics Engine (ODE) to replace the 32 bit version of ODE with a 64 bit version.&lt;br /&gt;
 &lt;br /&gt;
   I did that with the following linux commands:&lt;br /&gt;
  (it is expected that you have all required Linux building tools installed):&lt;br /&gt;
   &lt;br /&gt;
   # cd&lt;br /&gt;
   # svn co http://opensimulator.org/svn/opensim-libs/trunk/unmanaged/OpenDynamicsEngine [^]&lt;br /&gt;
   # cd OpenDynamicEngine&lt;br /&gt;
   # chmod a+x ou/bootstrap&lt;br /&gt;
   # sh autogen.sh&lt;br /&gt;
&lt;br /&gt;
 I installed/updated SLES10 with these rpm's for autogen.sh to run properly. http://software.opensuse.org/search [^]&lt;br /&gt;
&lt;br /&gt;
   SLES/SLED10 -&amp;gt;&lt;br /&gt;
   - autoconf-2.61-168.1.x86_64.rpm&lt;br /&gt;
   - automake-1.10.1-5.3.x86_64.rpm&lt;br /&gt;
&lt;br /&gt;
   # CFLAGS=&amp;quot;-m64&amp;quot; ./configure --enable-shared&lt;br /&gt;
   # make&lt;br /&gt;
&lt;br /&gt;
 I installed gtk2-devel via yast2, and all its dependancies, because make keept failing.&lt;br /&gt;
&lt;br /&gt;
   # cp ./ode/src/.libs/libode.so /opt/opensim/bin/&lt;br /&gt;
&lt;br /&gt;
 note:&lt;br /&gt;
 in this directory it had made several versions of the &amp;quot;libode.so&amp;quot; because of running the previous commands several times&lt;br /&gt;
 so i had to copy libode.so.1.0.0 to /opt/opensim/bin/libode.so&lt;br /&gt;
&lt;br /&gt;
   # vi ../opensim/bin/OpenSim.ini (change av_capsule_standup_tensor_linux to 1700000)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The 'chmod' command is required to fix permissions that are wrong.&lt;br /&gt;
The change in OpenSim.ini is required to avoid that avatars have bend legs and/or their feet are in the ground.&lt;br /&gt;
&lt;br /&gt;
==== Running ====&lt;br /&gt;
Recent versions of OpenSim come without an &amp;lt;tt&amp;gt;OpenSim.ini&amp;lt;/tt&amp;gt; file. Copy the &amp;lt;tt&amp;gt;OpenSim.ini.example&amp;lt;/tt&amp;gt; file to &amp;lt;tt&amp;gt;OpenSim.ini&amp;lt;/tt&amp;gt; before making any changes.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 cd bin&lt;br /&gt;
 mono OpenSim.exe&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: if you are running a 32bit Server such as Ubuntu 8.0.4 you need the alternative launcher:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
mono OpenSim.32BitLaunch.exe&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* To invoke ODE, add the option:&lt;br /&gt;
 -physics=OpenDynamicsEngine&lt;br /&gt;
to the &amp;lt;tt&amp;gt;mono OpenSim.exe&amp;lt;/tt&amp;gt; line&lt;br /&gt;
&lt;br /&gt;
or add &amp;lt;code&amp;gt;  physics = OpenDynamicsEngine &amp;lt;/code&amp;gt; to the [Startup] section of &amp;lt;tt&amp;gt;OpenSim.ini&amp;lt;/tt&amp;gt;.  Same deal for other physics engines, when available.&lt;br /&gt;
&lt;br /&gt;
On mono 1.2.6, some distributions may see&lt;br /&gt;
 Unhandled Exception: System.NotSupportedException: CodePage 1252 not supported&lt;br /&gt;
on startup when using mysql.  This can be resolved by installing the package libmono-i18n2.0-cil (see http://bugs.mysql.com/bug.php?id=33938).&lt;br /&gt;
&lt;br /&gt;
== Hardware selection guide ==&lt;br /&gt;
&lt;br /&gt;
An often-asked question is &amp;quot;what kind of hardware do I need to successfully run OpenSim?&amp;quot;  Unfortunately, the answer is &amp;quot;it depends&amp;quot;.  The number of regions hosted on a given machine, number of simultaneous avatars on those regions, number of prims, use of scripts, etc., all affect hardware requirements.  So, to help you make a more informed selection, some examples of hardware used are listed in the [[Hardware_Selection_Guide|hardware selection guide]]. &lt;br /&gt;
&lt;br /&gt;
[[Category:Users]]&lt;br /&gt;
[[Category:Getting Started]]&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Jp2_batch_converter</id>
		<title>Jp2 batch converter</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Jp2_batch_converter"/>
				<updated>2008-05-13T11:17:43Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: /* Usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Description==&lt;br /&gt;
The jp2 files used by the Secondlife client, are actually j2k files. These can be encoded by image_to_j2k from openjpeg. The script identifies the image-resolution, and converts the image to a valid SL-resolution/aspect ratio. Subsequently it checks for jpg-files, and converts them to valid openjpeg input files if necessary. Valid openjpeg files are then converted to j2k fileformat, by image_to_j2k. At last the j2k file is renamed to jp2, and can be used as an secondlife texture. Use genassets.pl to generate an asset-set out of these files.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/perl -s -U&lt;br /&gt;
# jp2batch.pl&lt;br /&gt;
# OpenSim jp2 texture preparation script&lt;br /&gt;
# Converts jpg/jpeg/bmp/tga files to valid jp2(jk2) files for SL&lt;br /&gt;
# Author: Phrearch&lt;br /&gt;
# Credits: Tedd1&lt;br /&gt;
&lt;br /&gt;
$dirs=0;&lt;br /&gt;
$files=0;&lt;br /&gt;
&lt;br /&gt;
sub ScanDirectory{&lt;br /&gt;
  my ($workdir) = @_;&lt;br /&gt;
  local (@names);&lt;br /&gt;
  $dirs++;&lt;br /&gt;
opendir(DIR, $workdir) or die &amp;quot;Unable to open $workdir:$!\n&amp;quot;;&lt;br /&gt;
@names = readdir(DIR) or die &amp;quot;Unable to read $workdir:$!\n&amp;quot;;&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
	foreach my $tmpName (@names){&lt;br /&gt;
	my $name = $workdir.&amp;quot;/&amp;quot;.$tmpName;&lt;br /&gt;
		#\. or \.. in directory&lt;br /&gt;
		if ($tmpName =~ /^\.\.?$/){&lt;br /&gt;
		next;&lt;br /&gt;
		}	&lt;br /&gt;
		#directory&lt;br /&gt;
		if (-d $name){&lt;br /&gt;
		print &amp;quot;Entering directory $name\n&amp;quot;;&lt;br /&gt;
		&amp;amp;ScanDirectory($name);&lt;br /&gt;
		next;&lt;br /&gt;
		}	&lt;br /&gt;
		#jpg or jpeg&lt;br /&gt;
		if ($name =~ /^(.*)\.(jpe?g|bmp|tga|tif|raw)$/){&lt;br /&gt;
		$rawname = $1;&lt;br /&gt;
		$ext = lc($2);&lt;br /&gt;
		$files++;&lt;br /&gt;
		print &amp;quot;\nProcessing $name...&amp;quot;;&lt;br /&gt;
		&amp;amp;Convert($rawname,$ext);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
sub Convert{&lt;br /&gt;
my ($rawname, $ext) = @_;&lt;br /&gt;
my @imageid = split(/ /,`identify $rawname.$ext`); &lt;br /&gt;
my @imageXY = split('x',@imageid[2]);&lt;br /&gt;
my $imageX = pop(@imageXY);&lt;br /&gt;
my $imageY = pop(@imageXY);&lt;br /&gt;
my $optX;&lt;br /&gt;
my $optY;&lt;br /&gt;
my $ar;&lt;br /&gt;
my $optar;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#landscape or square, search for optimal X&lt;br /&gt;
	if ($imageX &amp;gt;= $imageY){&lt;br /&gt;
	$ar = sprintf(&amp;quot;%.4f&amp;quot;,$imageY / $imageX);&lt;br /&gt;
	$optar =  &amp;amp;supportedAR($ar);&lt;br /&gt;
	$optX = &amp;amp;supportedXY($imageX);&lt;br /&gt;
	$optY = $optX * $optar;&lt;br /&gt;
		#both aspectratio and resolution are correct&lt;br /&gt;
		unless(($imageX==$optRes) &amp;amp;&amp;amp; ($ar==$optar)) {&lt;br /&gt;
		print &amp;quot;\nResizing ($imageX\xx$imageY =&amp;gt; $optY\xx$optX)...&amp;quot;;&lt;br /&gt;
		system(`convert -resize ${optX}x${optY}! $rawname.$ext $rawname.$ext &amp;amp;&amp;gt;/dev/null`);&lt;br /&gt;
		print &amp;quot;Done&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
 &lt;br /&gt;
	#portrait, search for optimal Y&lt;br /&gt;
	else {&lt;br /&gt;
	$ar = sprintf(&amp;quot;%.4f&amp;quot;,$imageX / $imageY);&lt;br /&gt;
	$optar =  &amp;amp;supportedAR($ar);&lt;br /&gt;
	$optY = &amp;amp;supportedXY($imageY);&lt;br /&gt;
	$optX = $optY * $optar;&lt;br /&gt;
		#Needs conversion&lt;br /&gt;
		unless(($imageY==$optRes) &amp;amp;&amp;amp; ($ar==$optar)) {&lt;br /&gt;
		print &amp;quot;\nResizing ($imageX\xx$imageY =&amp;gt; $optX\xx$optY)...&amp;quot;;&lt;br /&gt;
		system(&amp;quot;convert -resize ${optX}x${optY}! $rawname.$ext $rawname.$ext &amp;amp;&amp;gt;/dev/null&amp;quot;);&lt;br /&gt;
		print &amp;quot;Done&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
 	}&lt;br /&gt;
	if (($ext eq &amp;quot;jpg&amp;quot;) || ($ext eq &amp;quot;jpeg&amp;quot;)){&lt;br /&gt;
	print &amp;quot;\nConverting jpg to valid openjpeg format...&amp;quot;;&lt;br /&gt;
	system(&amp;quot;convert -format tga $rawname.$ext $rawname.tga &amp;amp;&amp;gt;/dev/null&amp;quot;);&lt;br /&gt;
	system(&amp;quot;rm $rawname.$ext &amp;amp;&amp;gt;/dev/null&amp;quot;);&lt;br /&gt;
	print &amp;quot;Done&amp;quot;;&lt;br /&gt;
	$ext=&amp;quot;tga&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
print &amp;quot;\nCreating jp2 file...&amp;quot;;&lt;br /&gt;
system(&amp;quot;image_to_j2k -i $rawname.$ext -o $rawname.j2k -r 20,10,1 &amp;amp;&amp;gt;/dev/null&amp;quot;);&lt;br /&gt;
system(&amp;quot;mv $rawname.j2k $rawname.jp2 &amp;amp;&amp;gt;/dev/null&amp;quot;);&lt;br /&gt;
system(&amp;quot;rm $rawname.$ext &amp;amp;&amp;gt;/dev/null&amp;quot;);&lt;br /&gt;
print &amp;quot;Done\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub supportedAR{&lt;br /&gt;
my ($ar) = @_;&lt;br /&gt;
my @arReference=(1.0,0.5,0.25,0.125,0.0625);&lt;br /&gt;
my $arOptimal;&lt;br /&gt;
my $arDivTemp=1.0;&lt;br /&gt;
my $arDiv;&lt;br /&gt;
	#Get optimal aspect ratio&lt;br /&gt;
	foreach (@arReference){&lt;br /&gt;
	$arDiv=abs($ar-$_);&lt;br /&gt;
		if($arDiv &amp;lt; $arDivTemp) {&lt;br /&gt;
		$arDivTemp=$arDiv;&lt;br /&gt;
		$arOptimal=$_;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
return $arOptimal;&lt;br /&gt;
}  &lt;br /&gt;
&lt;br /&gt;
sub supportedXY{&lt;br /&gt;
my ($res) = @_;&lt;br /&gt;
my @resReference=(64.0,128.0,256.0,512.0,1024.0);&lt;br /&gt;
my $resOptimal;&lt;br /&gt;
my $resDivTemp=4096.0;&lt;br /&gt;
my $resDiv;&lt;br /&gt;
	#Get optimal axis resolution&lt;br /&gt;
	foreach (@resReference){&lt;br /&gt;
 	$resDiv=abs($res-$_);&lt;br /&gt;
		if($resDiv &amp;lt; $resDivTemp) {&lt;br /&gt;
		$resDivTemp=$resDiv;&lt;br /&gt;
		$resOptimal=$_;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
return $resOptimal;&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
if ( @ARGV &amp;gt; 0 ){&lt;br /&gt;
print &amp;quot;Processing &amp;quot;.@ARGV[0].&amp;quot;...\n&amp;quot;;&lt;br /&gt;
&amp;amp;ScanDirectory(&amp;quot;.&amp;quot;);&lt;br /&gt;
print &amp;quot;\nDirectories scanned:$dirs\nFiles processed:$files\n&amp;quot; ;&lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
print &amp;quot;Provide a directory to process...\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
* Install OpenJPEG svn (if you have trouble compiling, you could try the binaries on their site)&lt;br /&gt;
 svn co http://www.openjpeg.org/svn/trunk&lt;br /&gt;
 cd trunk&lt;br /&gt;
 mkdir bin&lt;br /&gt;
 cd bin&lt;br /&gt;
 cmake .. -DBUILD_EXAMPLES:BOOL=ON&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
 PATH=/usr/local/bin:$PATH&lt;br /&gt;
* Make sure that the binaries image_to_j2k and j2k_to_image can be executed from anywhere&lt;br /&gt;
Add /usr/local/bin to /etc/profile for a permanent path.&lt;br /&gt;
&lt;br /&gt;
* Put the code in a file named jp2batch.pl, and copy it to the /opt/opensim/scripts directory. The script uses a directory as parameter:&lt;br /&gt;
 perl jp2batch.pl &amp;quot;/some directory/with/images&amp;quot;&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Contributions_Policy</id>
		<title>Contributions Policy</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Contributions_Policy"/>
				<updated>2008-03-07T09:01:42Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: /* The code is not the documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
=Important=&lt;br /&gt;
Any contributions must comply with the following OpenSim contribution policy&lt;br /&gt;
&lt;br /&gt;
In order to accept your contribution you need to read and adhere to the OpenSim Code Conventions and also follow the licensing conditions.&lt;br /&gt;
&lt;br /&gt;
==OpenSim Core Values==&lt;br /&gt;
&lt;br /&gt;
So, you're thinking of contributing? Great! In order to make your ride as smooth as possible, here's listing some of this projects guiding principles:&lt;br /&gt;
 &lt;br /&gt;
====This is an early alpha experimental project====&lt;br /&gt;
This means that we value simple and naive solutions over efficiency - we will optimize but first we need to get the basics right.&lt;br /&gt;
It also means a very optimistic use of the word 'stable'.&lt;br /&gt;
 &lt;br /&gt;
====This is a 3D application platform, ''not a Second Life wannabe world simulator''====&lt;br /&gt;
This means that we value decoupling, modularity and indirection over clock&lt;br /&gt;
cycles and feature completeness.&lt;br /&gt;
 &lt;br /&gt;
====We are all in this for our own separate reasons, some to have fun, some to make money====&lt;br /&gt;
This means that any given patch, fix or feature is very much up to whether somebody thinks it fun, worthwile or would pay good money for it.&lt;br /&gt;
 &lt;br /&gt;
====This is a young project====&lt;br /&gt;
Being through four major architectural changes in &amp;lt;s&amp;gt;six&amp;lt;/s&amp;gt; twelve months means we still&lt;br /&gt;
have lots of tangly and bushy remnants of old ways of doing stuff.&lt;br /&gt;
&lt;br /&gt;
====This is a noob-friendly project====&lt;br /&gt;
Yes, believe it or not, we're aiming at continously trying to make the code as simple, structured and readable for newcomers as time and experience will let us.&lt;br /&gt;
 &lt;br /&gt;
====The code is the documentation====&lt;br /&gt;
Even though we're trying to document the things that are reasonably set, instead of documentation and commenting we try to make the code as simple, strightforward and readable as possible.&lt;br /&gt;
&lt;br /&gt;
====Documentation is good, comments are good====&lt;br /&gt;
There is a dispute about above point. Some of us are trying to comment code correctly so that it is obvious to newcomers how things are connected (large and small), where to make changes, what the change will affect and how to extend OpenSim.&lt;br /&gt;
&lt;br /&gt;
====We are a multi-platform project====&lt;br /&gt;
This means we will go to lengths to avoid bringing in new technologies that would provide thresholds for installing and using the code on different environments. The default configuration should always be build- and runnable on checkout, provided you are on a c# .net/mono environment with either vs build or nant. Other technologies than those can be provided, but will not be guaranteed not to break at any given time.&lt;br /&gt;
 &lt;br /&gt;
Codewise, we're trying to move towards looser coupling and better code reuse - and to separate the code into a 'framework' layer, a 'service' layer and an 'application' layer; the framework layer defines all base classes and interfaces, the service layer provide networked and persistent implementations of those, and the application layer provides configuration logic and executables.&lt;br /&gt;
&lt;br /&gt;
== OpenSim Licensing Conditions ==&lt;br /&gt;
To make sure that we can accept your contribution and continue to distribute the OpenSim materials under the most free license possible, any contributions to the OpenSim project need to follow the following licensing conditions:&lt;br /&gt;
&lt;br /&gt;
* Your contribution is either wholly your own, or if it contains third party materials, they are licensed in a manner compatible with the OpenSim project. If you rely on third party contributions, acknowledge them and include a copy of the license conditions for those components if they differ from the OpenSim project license. We cannot accept virally licensed code unless there is a specific F/OSS exemption for BSD-licensed projects.&lt;br /&gt;
&lt;br /&gt;
* You accept whole liability for any contributions you make for inclusion of third party intellectual property, in the jurisdiction of both yourself, and where the servers are located (United States). If you are unsure about the licensing conditions for a piece of source, do not include it and work around it. If you have a problem here, ask the rest of the developers as they may be able to help.&lt;br /&gt;
&lt;br /&gt;
* You have not witnessed, seen or been party to the development of the official Linden Lab Server Software. If you have been involved in the official server development your contributions may affect the licensing of the main codebase and we cannot accept the contributions without a waiver from Linden Lab disclaiming any interest in your contributions.&lt;br /&gt;
&lt;br /&gt;
* You have not studied or copied sourcecode from the GPL Second Life viewer to submit your contribution&lt;br /&gt;
&lt;br /&gt;
* You submit your contribution to the repository under the BSD license below.&lt;br /&gt;
&lt;br /&gt;
===OpenSim BSD License===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Copyright (c) Contributors, http://opensimulator.org/&lt;br /&gt;
See CONTRIBUTORS.TXT for a full list of copyright holders.&lt;br /&gt;
&lt;br /&gt;
Redistribution and use in source and binary forms, with or without&lt;br /&gt;
modification, are permitted provided that the following conditions are met:&lt;br /&gt;
    * Redistributions of source code must retain the above copyright&lt;br /&gt;
      notice, this list of conditions and the following disclaimer.&lt;br /&gt;
     * Redistributions in binary form must reproduce the above copyright&lt;br /&gt;
      notice, this list of conditions and the following disclaimer in the&lt;br /&gt;
      documentation and/or other materials provided with the distribution.&lt;br /&gt;
    * Neither the name of the OpenSim Project nor the&lt;br /&gt;
      names of its contributors may be used to endorse or promote products&lt;br /&gt;
      derived from this software without specific prior written permission.&lt;br /&gt;
&lt;br /&gt;
THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR&lt;br /&gt;
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED&lt;br /&gt;
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE&lt;br /&gt;
DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY&lt;br /&gt;
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL&lt;br /&gt;
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE&lt;br /&gt;
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS&lt;br /&gt;
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER&lt;br /&gt;
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR&lt;br /&gt;
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF&lt;br /&gt;
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Main]]&lt;br /&gt;
[[Category:Users]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Scripting_Languages</id>
		<title>Scripting Languages</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Scripting_Languages"/>
				<updated>2008-02-02T04:55:02Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Scripting Languages =&lt;br /&gt;
&lt;br /&gt;
OpenSim currently supports 3 scripting languages, and more are under way.&amp;lt;br /&amp;gt;&lt;br /&gt;
Scripts are restored automatically when OpenSim starts.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LSL ==&lt;br /&gt;
LSLv2 is the well know Second Life scripting language. It is basically a C#/Java-like language.&lt;br /&gt;
Allthough many commands are still being developed, the majority of ll-functions has been implemented and it is possible to make usable scripts.&lt;br /&gt;
If you want to ensure that the compiler treats your script as LSL you should have &amp;quot;//lsl&amp;quot; as the first 5 letters in script.&lt;br /&gt;
Example code:&lt;br /&gt;
 default&lt;br /&gt;
 {&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
       llSay(0, &amp;quot;This is an incredibly useless program.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== C# ==&lt;br /&gt;
C# is a .Net language.&amp;lt;br /&amp;gt;&lt;br /&gt;
Allthough it is C# the behaviour is much like LSL in the sense that you still use ll-functions like llSay(), and still use the same events as in LSL.&amp;lt;br /&amp;gt;&lt;br /&gt;
The first 4 characters in your script must be &amp;quot;//cs&amp;quot; for the compiler to treat it as C#.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Example code:&lt;br /&gt;
 //cs&lt;br /&gt;
 public void default_event_state_entry()&lt;br /&gt;
 {&lt;br /&gt;
     llSay(0, &amp;quot;This is an incredibly useless program.&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== VB.Net ==&lt;br /&gt;
''Note! Mono does not have compiler for VB.Net, so VB.Net scripts may not work on Mono. :)''&lt;br /&gt;
VB.Net is a .Net language.&amp;lt;br /&amp;gt;&lt;br /&gt;
Allthough it is VB.Net the behaviour is much like LSL in the sense that you still use ll-functions like llSay(), and still use the same events as in LSL.&amp;lt;br /&amp;gt;&lt;br /&gt;
The first 4 characters in your script must be &amp;quot;//vb&amp;quot; for the compiler to treat it as VB.Net.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example code:&lt;br /&gt;
 //vb&lt;br /&gt;
 Public Sub default_event_state_entry()&lt;br /&gt;
     llSay(0, &amp;quot;This is an incredibly useless program.&amp;quot;)&lt;br /&gt;
 End Sub&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Scripting_Languages</id>
		<title>Scripting Languages</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Scripting_Languages"/>
				<updated>2008-02-02T04:17:52Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Scripting Languages =&lt;br /&gt;
&lt;br /&gt;
OpenSim currently supports 3 scripting languages, and more are under way.&amp;lt;br /&amp;gt;&lt;br /&gt;
Scripts are restored automatically when OpenSim starts.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LSL ==&lt;br /&gt;
LSLv2 is the well know Second Life scripting language. It is basically a C#/Java-like language.&lt;br /&gt;
Allthough many commands are still being developed, the majority of ll-functions has been implemented and it is possible to make usable scripts.&lt;br /&gt;
If you want to ensure that the compiler treats your script as LSL you should have &amp;quot;//lsl&amp;quot; as the first 5 letters in script.&lt;br /&gt;
Example code:&lt;br /&gt;
 default&lt;br /&gt;
 {&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
       llSay(0, &amp;quot;This is an incredibly useless program.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== C# ==&lt;br /&gt;
C# is a .Net language.&amp;lt;br /&amp;gt;&lt;br /&gt;
Allthough it is C# the behaviour is much like LSL in the sense that you still use ll-functions like llSay(), and still use the same events as in LSL.&amp;lt;br /&amp;gt;&lt;br /&gt;
The first 4 characters in your script must be &amp;quot;//cs&amp;quot; for the compiler to treat it as C#.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Example code:&lt;br /&gt;
 //cs&lt;br /&gt;
 public void default_event_state_entry()&lt;br /&gt;
 {&lt;br /&gt;
     llSay(0, &amp;quot;This is an incredibly useless program.&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== VB.Net ==&lt;br /&gt;
VB.Net is a .Net language.&amp;lt;br /&amp;gt;&lt;br /&gt;
Allthough it is VB.Net the behaviour is much like LSL in the sense that you still use ll-functions like llSay(), and still use the same events as in LSL.&amp;lt;br /&amp;gt;&lt;br /&gt;
The first 4 characters in your script must be &amp;quot;//vb&amp;quot; for the compiler to treat it as VB.Net.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example code:&lt;br /&gt;
 //vb&lt;br /&gt;
 Public Sub default_event_state_entry()&lt;br /&gt;
     llSay(0, &amp;quot;This is an incredibly useless program.&amp;quot;)&lt;br /&gt;
 End Sub&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Scripting_Languages</id>
		<title>Scripting Languages</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Scripting_Languages"/>
				<updated>2008-02-02T03:51:48Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: New page: = Scripting Languages =  OpenSim currently supports 3 scripting languages, and more are under way.&amp;lt;br /&amp;gt; Scripts are restored automatically when OpenSim starts.&amp;lt;br /&amp;gt;  == LSL == LSLv2 is t...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Scripting Languages =&lt;br /&gt;
&lt;br /&gt;
OpenSim currently supports 3 scripting languages, and more are under way.&amp;lt;br /&amp;gt;&lt;br /&gt;
Scripts are restored automatically when OpenSim starts.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LSL ==&lt;br /&gt;
LSLv2 is the well know Second Life scripting language. It is basically a C#/Java-like language.&lt;br /&gt;
Allthough many commands are still being developed, the majority of ll-functions has been implemented and it is possible to make usable scripts.&lt;br /&gt;
If you want to ensure that the compiler treats your script as LSL you should have &amp;quot;//lsl&amp;quot; as the first 5 letters in script.&lt;br /&gt;
&lt;br /&gt;
== C# ==&lt;br /&gt;
C# is a .Net language.&amp;lt;br /&amp;gt;&lt;br /&gt;
Allthough it is C# the behaviour is much like LSL in the sense that you still use ll-functions like llSay(), and still use the same events as in LSL.&amp;lt;br /&amp;gt;&lt;br /&gt;
The first 4 characters in your script must be &amp;quot;//cs&amp;quot; for the compiler to treat it as C#.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Example code:&lt;br /&gt;
    //cs&lt;br /&gt;
    public void default_event_state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0, &amp;quot;This is an incredibly useless program.&amp;quot; );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
== VB.Net ==&lt;br /&gt;
VB.Net is a .Net language.&amp;lt;br /&amp;gt;&lt;br /&gt;
Allthough it is VB.Net the behaviour is much like LSL in the sense that you still use ll-functions like llSay(), and still use the same events as in LSL.&amp;lt;br /&amp;gt;&lt;br /&gt;
The first 4 characters in your script must be &amp;quot;//vb&amp;quot; for the compiler to treat it as VB.Net.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example code:&lt;br /&gt;
    //vb&lt;br /&gt;
    Public Sub default_event_state_entry()&lt;br /&gt;
        llSay(0, &amp;quot;This is an incredibly useless program.&amp;quot;)&lt;br /&gt;
    End Sub&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Scripting</id>
		<title>Scripting</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Scripting"/>
				<updated>2008-02-02T03:44:31Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Users]]&lt;br /&gt;
== OpenSim Scripting ==&lt;br /&gt;
&lt;br /&gt;
===Users===&lt;br /&gt;
* [[LSL_osFunctions|OSL Proposals]] - Suggestions for custom OSL-functions&lt;br /&gt;
* [[LSL_osFunctions_implemented|implemented OSL-functions]] - A list of OSL-functions that are available&lt;br /&gt;
* [[LSL_Status|implemented LSL-functions]] - A list of LSL-functions that are available&lt;br /&gt;
* [[OpenSim:Scripting|Script usage]] - Tutorial how to use scripts in-world&lt;br /&gt;
* [[OpenSim:Scripting_Languages|Scripting Languages]] - What languages are supported and how to use them&lt;br /&gt;
&lt;br /&gt;
===Developers===&lt;br /&gt;
* [[OpenSim: Scripting]] - Overview&lt;br /&gt;
* [[LSL_OSSL_Standards|OSSL Standards]] - A whitepaper concerning naming-standards for the OpenSim scripting language&lt;br /&gt;
* [[OpenSim.Region.ScriptEngine.Common]] - How to create your own script engine&lt;br /&gt;
* [[OpenSim.Region.ScriptEngine.DotNetEngine|DotNet-Engine]] - Describes some of the esoteric parts of the DotNet-Engine &lt;br /&gt;
* [[Build_Bot|Bot-Design(.Net)]] - A whitepaper about a buildbot-design in Opensim&lt;br /&gt;
&lt;br /&gt;
Back to [[Main_Page]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Getting Started]]&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Scripting</id>
		<title>Scripting</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Scripting"/>
				<updated>2008-02-02T03:44:06Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: Added link to page for languages&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Users]]&lt;br /&gt;
== OpenSim Scripting ==&lt;br /&gt;
&lt;br /&gt;
===Users===&lt;br /&gt;
* [[LSL_osFunctions|OSL Proposals]] - Suggestions for custom OSL-functions&lt;br /&gt;
* [[LSL_osFunctions_implemented|implemented OSL-functions]] - A list of OSL-functions that are available&lt;br /&gt;
* [[LSL_Status|implemented LSL-functions]] - A list of LSL-functions that are available&lt;br /&gt;
* [[OpenSim:Scripting|Script usage]] - Tutorial how to use scripts in-world&lt;br /&gt;
* [[OpenSim:Scripting|Languages]] - What languages are supported and how to use them&lt;br /&gt;
&lt;br /&gt;
===Developers===&lt;br /&gt;
* [[OpenSim: Scripting]] - Overview&lt;br /&gt;
* [[LSL_OSSL_Standards|OSSL Standards]] - A whitepaper concerning naming-standards for the OpenSim scripting language&lt;br /&gt;
* [[OpenSim.Region.ScriptEngine.Common]] - How to create your own script engine&lt;br /&gt;
* [[OpenSim.Region.ScriptEngine.DotNetEngine|DotNet-Engine]] - Describes some of the esoteric parts of the DotNet-Engine &lt;br /&gt;
* [[Build_Bot|Bot-Design(.Net)]] - A whitepaper about a buildbot-design in Opensim&lt;br /&gt;
&lt;br /&gt;
Back to [[Main_Page]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Getting Started]]&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OpenSim.Region.ScriptEngine.Common</id>
		<title>OpenSim.Region.ScriptEngine.Common</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OpenSim.Region.ScriptEngine.Common"/>
				<updated>2008-01-21T11:40:34Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: &amp;lt;br /&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=OpenSim.Region.ScriptEngine.Common=&lt;br /&gt;
&lt;br /&gt;
==How to implement your own script engine==&lt;br /&gt;
Creating a new script engine for OpenSim is simple (haha).&amp;lt;br /&amp;gt;&lt;br /&gt;
What I mean by simple is that if you already have a VM (Virtual Machine) or script engine of some sort then integrating it as a OpenSim ScriptEngine plugin is simple.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===What do I get for free?===&lt;br /&gt;
1. Loading/unloading of scripts are queued and executed in sequence. Only one load/unload at the time.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
2. What script belongs to what object is automatically taken care of. You just need to provide the scripts classes - nothing else.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
3. OpenSim events are translated and given to you as LSL events. Your script functions are executed automatically, no need to hook up to events or anything.&amp;lt;br /&amp;gt;&lt;br /&gt;
If you want to implement your own event handlers, feel free to do so. Look in &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.EventManager.cs&amp;quot; how its done. Your own events can run together with LSL events without any problem.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
4. Whenever an event is executed, the execution is queued. Only one event per script is ever executed simultaneous. But multithreading is used to run multiple scripts in parallel.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
5. Errors during script execution is automatically handled and relayed to users in-world.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
6. You get all LSL commands in an easy to use object, no need to keep track of scene or objects to execute functions. Running an LSL command from your script engine is as easy as running it from inside any LSL-script.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
7. Long LSL-commands that returns with an event is also handled.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Getting started===&lt;br /&gt;
1. Create a new project named &amp;quot;OpenSim.Region.MySuperScriptEngine&amp;quot; (replace &amp;quot;MySuperScriptEngine&amp;quot; with the name of your scriptengine).&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Create a new class (file) named &amp;quot;ScriptEngine&amp;quot;. It must be named exactly ScriptEngine for OpenSim to use it. ScriptEngine must inherit from &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptEngine&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
3. You need to override a couple of functions. Most probably you don't want to do any special work here, so look below for a sample default file.&amp;lt;br /&amp;gt;&lt;br /&gt;
4. Create a new class (file) named &amp;quot;ScriptManager&amp;quot; that inherits from &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptManager&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
5. Your ScriptManager class needs to override two functions. One to start a script and one to stop a script.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ScriptEngine class===&lt;br /&gt;
The main purpose of ScriptEngine class is to be able to intercept scene, for example starting with a &amp;quot;fake&amp;quot; scene instead of OpenSim's scene. You probably don't want this, so just go for the standard initialization.&amp;lt;br /&amp;gt;&lt;br /&gt;
A standard class would look like this:&amp;lt;br /&amp;gt;&lt;br /&gt;
 using System;&lt;br /&gt;
 using Nini.Config;&lt;br /&gt;
 using OpenSim.Framework.Console;&lt;br /&gt;
 using OpenSim.Region.Environment.Scenes;&lt;br /&gt;
 namespace OpenSim.Region.ScriptEngine.MySuperScriptEngine&lt;br /&gt;
 {&lt;br /&gt;
     [Serializable]&lt;br /&gt;
     public class ScriptEngine : OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptEngine&lt;br /&gt;
     {&lt;br /&gt;
         public override void Initialise(Scene scene, IConfigSource config)&lt;br /&gt;
         {&lt;br /&gt;
            InitializeEngine(scene, MainLog.Instance, true, GetScriptManager());&lt;br /&gt;
         }&lt;br /&gt;
         public override OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptManager _GetScriptManager()&lt;br /&gt;
         {&lt;br /&gt;
             return new ScriptManager(this);&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===ScriptManager class===&lt;br /&gt;
A script is refecenced by object id &amp;quot;localID&amp;quot; (the object/prim it is inside) and script id &amp;quot;itemID&amp;quot; (the particular (unique) instance of that script). These parameters along with a string &amp;quot;Script&amp;quot; containing the script text (source code) are passed to your (overriden) start script function in your ScriptManager class.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Keeping track of active scripts is done automatically, so your job is simply to create a new script and hand it over. After that your work is done until the script is asked to stop, then you have to do a few simple tasks to remove it again.&amp;lt;br /&amp;gt;&lt;br /&gt;
Here is a sample on a minimal script startup:&lt;br /&gt;
 public override void _StartScript(uint localID, LLUUID itemID, string Script)&lt;br /&gt;
 {&lt;br /&gt;
     SceneObjectPart m_host = World.GetSceneObjectPart(localID);&lt;br /&gt;
     try&lt;br /&gt;
     {&lt;br /&gt;
         IScript CompiledScript = MySpecialCompiler.DoCompile(Script);  // Compile and return an IScript object that is the actual script&lt;br /&gt;
         CompiledScript.Source = ScriptSource;                          // Store source for recompile on script reset events&lt;br /&gt;
         SetScript(localID, itemID, CompiledScript);                    // All is ok. Add script to OpenSim's script manager. From here on its on autopilot.&lt;br /&gt;
         // Create a private instance of LSL commands (note that m_scriptEngine, m_host are from baseclass, so you don't need to change them)&lt;br /&gt;
         LSL_BuiltIn_Commands LSLB = new LSL_BuiltIn_Commands(m_scriptEngine, m_host, localID, itemID);&lt;br /&gt;
         CompiledScript.Start(LSLB);                                    // Start the script - giving it LSL commands&lt;br /&gt;
         // Fire the first start-event, this is the event run on LSL scripts when they first start&lt;br /&gt;
         m_scriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, &amp;quot;state_entry&amp;quot;, EventQueueManager.llDetectNull, new object[] { });&lt;br /&gt;
     }&lt;br /&gt;
     catch (Exception e)&lt;br /&gt;
     {&lt;br /&gt;
       // To see how you can send the compile error in-world, have a look at OpenSim.Region.ScriptEngine.DotNetEngine.ScriptManager&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And your minimal script shutdown would be:&lt;br /&gt;
 public override void _StopScript(uint localID, LLUUID itemID)&lt;br /&gt;
 {&lt;br /&gt;
     m_scriptEngine.m_LSLLongCmdHandler.RemoveScript(localID, itemID);   // Stop long command on script like timers, http requests, etc.&lt;br /&gt;
     IScript LSLBC = GetScript(localID, itemID);                         // Get the script we are stopping&lt;br /&gt;
     if (LSLBC == null)                                                  // Nothing to do? Exit.&lt;br /&gt;
         return;&lt;br /&gt;
     try&lt;br /&gt;
     {&lt;br /&gt;
         LSLBC.Exec.StopScript();                                        // Tell script to stop&lt;br /&gt;
         RemoveScript(localID, itemID);                                  // Remove script from internal memory structure&lt;br /&gt;
    }&lt;br /&gt;
     catch (Exception e)&lt;br /&gt;
     {&lt;br /&gt;
       // You probably want to log this to console or something&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===IScript interface===&lt;br /&gt;
So you have implemented the two classes described above. Now how does this connect to your JavaScript or Perl or YourCustomSuperLanguage script engine or VM?&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
You have to create a class. This class must inherit &amp;quot;OpenSim.Region.ScriptEngine.Common.IScript&amp;quot;. Inside IScript your class will have two important things: &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
1. During script start (in ScriptManager), you call yourscript.Start() and give it a LSL command module. So insite your script class where you override this Start() function you need to remember this LSL command module.&amp;lt;br /&amp;gt;&lt;br /&gt;
How you bind this LSL command module to your custom engine is totally up to you. The LSL command module contains all LSL functions, and any function you use there will affect the correct object/region/whatever. You don't need to do more than ''myLSLCommandModule.llSay(0, &amp;quot;Hello world!&amp;quot;);'' to make it work.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Any time a LSL event is generated either by an in-world event or by for example a timer, a function in your script class needs to be executed. For this you have the &amp;quot;Exec&amp;quot; override. I suggest you have a look at &amp;quot;OpenSim.Region.ScriptEngine.Common.Executor&amp;quot; to see how this work. Basically you receive a string containing function name and the parameters for that event.&amp;lt;br /&amp;gt;&lt;br /&gt;
If you use the default Executor you need to initialize it by giving it a reference to yourself (the IScript script class). Then you need to have functions in your class matching LSL functions when it comes to both name and parameters. Example:&amp;lt;br /&amp;gt;&lt;br /&gt;
 public touch_start(int number_of_touches) {&lt;br /&gt;
     // whatever code for this event... probably calling your own VM's function with the same name? ;)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===AppDomain security===&lt;br /&gt;
If you are writing a .Net based script engine and want AppDomain security and loading/unloading then:&lt;br /&gt;
 // Load script:&lt;br /&gt;
 IScript CompiledScript = m_scriptEngine.m_AppDomainManager.LoadScript(filename);&lt;br /&gt;
and&lt;br /&gt;
  // Unload script:&lt;br /&gt;
  m_scriptEngine.m_AppDomainManager.StopScript(LSLBC.Exec.GetAppDomain());&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OpenSim.Region.ScriptEngine.Common</id>
		<title>OpenSim.Region.ScriptEngine.Common</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OpenSim.Region.ScriptEngine.Common"/>
				<updated>2008-01-21T09:34:10Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: Cosmetics&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=OpenSim.Region.ScriptEngine.Common=&lt;br /&gt;
&lt;br /&gt;
==How to implement your own script engine==&lt;br /&gt;
Creating a new script engine for OpenSim is simple (haha).&amp;lt;br /&amp;gt;&lt;br /&gt;
What I mean by simple is that if you already have a VM (Virtual Machine) or script engine of some sort then integrating it as a OpenSim ScriptEngine plugin is simple.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===What do I get for free?===&lt;br /&gt;
1. Loading/unloading of scripts are queued and executed in sequence. Only one load/unload at the time.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
2. What script belongs to what object is automatically taken care of. You just need to provide the scripts classes - nothing else.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
3. OpenSim events are translated and given to you as LSL events. Your script functions are executed automatically, no need to hook up to events or anything.&amp;lt;br /&amp;gt;&lt;br /&gt;
If you want to implement your own event handlers, feel free to do so. Look in &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.EventManager.cs&amp;quot; how its done. Your own events can run together with LSL events without any problem.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
4. Whenever an event is executed, the execution is queued. Only one event per script is ever executed simultaneous. But multithreading is used to run multiple scripts in parallel.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
5. Errors during script execution is automatically handled and relayed to users in-world.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
6. You get all LSL commands in an easy to use object, no need to keep track of scene or objects to execute functions. Running an LSL command from your script engine is as easy as running it from inside any LSL-script.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
7. Long LSL-commands that returns with an event is also handled.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Getting started===&lt;br /&gt;
1. Create a new project named &amp;quot;OpenSim.Region.MySuperScriptEngine&amp;quot; (replace &amp;quot;MySuperScriptEngine&amp;quot; with the name of your scriptengine).&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Create a new class (file) named &amp;quot;ScriptEngine&amp;quot;. It must be named exactly ScriptEngine for OpenSim to use it. ScriptEngine must inherit from &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptEngine&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
3. You need to override a couple of functions. Most probably you don't want to do any special work here, so look below for a sample default file.&lt;br /&gt;
4. Create a new class (file) named &amp;quot;ScriptManager&amp;quot; that inherits from &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptManager&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
5. Your ScriptManager class needs to override two functions. One to start a script and one to stop a script.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ScriptEngine class===&lt;br /&gt;
The main purpose of ScriptEngine class is to be able to intercept scene, for example starting with a &amp;quot;fake&amp;quot; scene instead of OpenSim's scene. You probably don't want this, so just go for the standard initialization.&amp;lt;br /&amp;gt;&lt;br /&gt;
A standard class would look like this:&amp;lt;br /&amp;gt;&lt;br /&gt;
 using System;&lt;br /&gt;
 using Nini.Config;&lt;br /&gt;
 using OpenSim.Framework.Console;&lt;br /&gt;
 using OpenSim.Region.Environment.Scenes;&lt;br /&gt;
 namespace OpenSim.Region.ScriptEngine.MySuperScriptEngine&lt;br /&gt;
 {&lt;br /&gt;
     [Serializable]&lt;br /&gt;
     public class ScriptEngine : OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptEngine&lt;br /&gt;
     {&lt;br /&gt;
         public override void Initialise(Scene scene, IConfigSource config)&lt;br /&gt;
         {&lt;br /&gt;
            InitializeEngine(scene, MainLog.Instance, true, GetScriptManager());&lt;br /&gt;
         }&lt;br /&gt;
         public override OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptManager _GetScriptManager()&lt;br /&gt;
         {&lt;br /&gt;
             return new ScriptManager(this);&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===ScriptManager class===&lt;br /&gt;
A script is refecenced by object id &amp;quot;localID&amp;quot; (the object/prim it is inside) and script id &amp;quot;itemID&amp;quot; (the particular (unique) instance of that script). These parameters along with a string &amp;quot;Script&amp;quot; containing the script text (source code) are passed to your (overriden) start script function in your ScriptManager class.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Keeping track of active scripts is done automatically, so your job is simply to create a new script and hand it over. After that your work is done until the script is asked to stop, then you have to do a few simple tasks to remove it again.&amp;lt;br /&amp;gt;&lt;br /&gt;
Here is a sample on a minimal script startup:&lt;br /&gt;
 public override void _StartScript(uint localID, LLUUID itemID, string Script)&lt;br /&gt;
 {&lt;br /&gt;
     SceneObjectPart m_host = World.GetSceneObjectPart(localID);&lt;br /&gt;
     try&lt;br /&gt;
     {&lt;br /&gt;
         IScript CompiledScript = MySpecialCompiler.DoCompile(Script);  // Compile and return an IScript object that is the actual script&lt;br /&gt;
         CompiledScript.Source = ScriptSource;                          // Store source for recompile on script reset events&lt;br /&gt;
         SetScript(localID, itemID, CompiledScript);                    // All is ok. Add script to OpenSim's script manager. From here on its on autopilot.&lt;br /&gt;
         // Create a private instance of LSL commands (note that m_scriptEngine, m_host are from baseclass, so you don't need to change them)&lt;br /&gt;
         LSL_BuiltIn_Commands LSLB = new LSL_BuiltIn_Commands(m_scriptEngine, m_host, localID, itemID);&lt;br /&gt;
         CompiledScript.Start(LSLB);                                    // Start the script - giving it LSL commands&lt;br /&gt;
         // Fire the first start-event, this is the event run on LSL scripts when they first start&lt;br /&gt;
         m_scriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, &amp;quot;state_entry&amp;quot;, EventQueueManager.llDetectNull, new object[] { });&lt;br /&gt;
     }&lt;br /&gt;
     catch (Exception e)&lt;br /&gt;
     {&lt;br /&gt;
       // To see how you can send the compile error in-world, have a look at OpenSim.Region.ScriptEngine.DotNetEngine.ScriptManager&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And your minimal script shutdown would be:&lt;br /&gt;
 public override void _StopScript(uint localID, LLUUID itemID)&lt;br /&gt;
 {&lt;br /&gt;
     m_scriptEngine.m_LSLLongCmdHandler.RemoveScript(localID, itemID);   // Stop long command on script like timers, http requests, etc.&lt;br /&gt;
     IScript LSLBC = GetScript(localID, itemID);                         // Get the script we are stopping&lt;br /&gt;
     if (LSLBC == null)                                                  // Nothing to do? Exit.&lt;br /&gt;
         return;&lt;br /&gt;
     try&lt;br /&gt;
     {&lt;br /&gt;
         LSLBC.Exec.StopScript();                                        // Tell script to stop&lt;br /&gt;
         RemoveScript(localID, itemID);                                  // Remove script from internal memory structure&lt;br /&gt;
    }&lt;br /&gt;
     catch (Exception e)&lt;br /&gt;
     {&lt;br /&gt;
       // You probably want to log this to console or something&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===IScript interface===&lt;br /&gt;
So you have implemented the two classes described above. Now how does this connect to your JavaScript or Perl or YourCustomSuperLanguage script engine or VM?&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
You have to create a class. This class must inherit &amp;quot;OpenSim.Region.ScriptEngine.Common.IScript&amp;quot;. Inside IScript your class will have two important things: &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
1. During script start (in ScriptManager), you call yourscript.Start() and give it a LSL command module. So insite your script class where you override this Start() function you need to remember this LSL command module.&amp;lt;br /&amp;gt;&lt;br /&gt;
How you bind this LSL command module to your custom engine is totally up to you. The LSL command module contains all LSL functions, and any function you use there will affect the correct object/region/whatever. You don't need to do more than ''myLSLCommandModule.llSay(0, &amp;quot;Hello world!&amp;quot;);'' to make it work.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Any time a LSL event is generated either by an in-world event or by for example a timer, a function in your script class needs to be executed. For this you have the &amp;quot;Exec&amp;quot; override. I suggest you have a look at &amp;quot;OpenSim.Region.ScriptEngine.Common.Executor&amp;quot; to see how this work. Basically you receive a string containing function name and the parameters for that event.&amp;lt;br /&amp;gt;&lt;br /&gt;
If you use the default Executor you need to initialize it by giving it a reference to yourself (the IScript script class). Then you need to have functions in your class matching LSL functions when it comes to both name and parameters. Example:&amp;lt;br /&amp;gt;&lt;br /&gt;
 public touch_start(int number_of_touches) {&lt;br /&gt;
     // whatever code for this event... probably calling your own VM's function with the same name? ;)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===AppDomain security===&lt;br /&gt;
If you are writing a .Net based script engine and want AppDomain security and loading/unloading then:&lt;br /&gt;
 // Load script:&lt;br /&gt;
 IScript CompiledScript = m_scriptEngine.m_AppDomainManager.LoadScript(filename);&lt;br /&gt;
and&lt;br /&gt;
  // Unload script:&lt;br /&gt;
  m_scriptEngine.m_AppDomainManager.StopScript(LSLBC.Exec.GetAppDomain());&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Scripting</id>
		<title>Scripting</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Scripting"/>
				<updated>2008-01-20T19:25:11Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: Added: create your own script engine&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== OpenSim Scripting ==&lt;br /&gt;
&lt;br /&gt;
===Users===&lt;br /&gt;
* [[LSL_osFunctions|OSL Proposals]] - Suggestions for custom OSL-functions&lt;br /&gt;
* [[LSL_osFunctions_implemented|implemented OSL-functions]] - A list of OSL-functions that are available&lt;br /&gt;
* [[LSL_Status|implemented LSL-functions]] - A list of LSL-functions that are available&lt;br /&gt;
* [[OpenSim:Scripting|Script usage]] - Tutorial how to use scripts in-world&lt;br /&gt;
&lt;br /&gt;
===Developers===&lt;br /&gt;
* [[LSL_OSSL_Standards|OSSL Standards]] - A whitepaper concerning naming-standards for the OpenSim scripting language&lt;br /&gt;
* [[OpenSim.Region.ScriptEngine.Common]] - How to create your own script engine&lt;br /&gt;
* [[OpenSim.Region.ScriptEngine.DotNetEngine|DotNet-Engine]] - Describes some of the esoteric parts of the DotNet-Engine &lt;br /&gt;
* [[Build_Bot|Bot-Design(.Net)]] - A whitepaper about a buildbot-design in Opensim&lt;br /&gt;
&lt;br /&gt;
Back to [[Main_Page]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Getting Started]]&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OpenSim.Region.ScriptEngine.Common</id>
		<title>OpenSim.Region.ScriptEngine.Common</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OpenSim.Region.ScriptEngine.Common"/>
				<updated>2008-01-20T19:23:49Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: Added AppDomain description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OpenSim.Region.ScriptEngine.Common =&lt;br /&gt;
&lt;br /&gt;
== How to implement your own script engine ==&lt;br /&gt;
Creating a new script engine for OpenSim is simple (haha).&amp;lt;br /&amp;gt;&lt;br /&gt;
What I mean by simple is that if you already have a VM (Virtual Machine) or script engine of some sort then integrating it as a OpenSim ScriptEngine plugin is simple.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== So what do I get for free? ==&lt;br /&gt;
1. Loading/unloading of scripts are queued and executed in sequence. Only one load/unload at the time.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
2. What script belongs to what object is automatically taken care of. You just need to provide the scripts classes - nothing else.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
3. OpenSim events are translated and given to you as LSL events. Your script functions are executed automatically, no need to hook up to events or anything.&amp;lt;br /&amp;gt;&lt;br /&gt;
If you want to implement your own event handlers, feel free to do so. Look in &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.EventManager.cs&amp;quot; how its done. Your own events can run together with LSL events without any problem.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
4. Whenever an event is executed, the execution is queued. Only one event per script is ever executed simultaneous. But multithreading is used to run multiple scripts in parallel.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
5. Errors during script execution is automatically handled and relayed to users in-world.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
6. You get all LSL commands in an easy to use object, no need to keep track of scene or objects to execute functions. Running an LSL command from your script engine is as easy as running it from inside any LSL-script.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
7. Long LSL-commands that returns with an event is also handled.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===How do I get started?===&lt;br /&gt;
1. Create a new project named &amp;quot;OpenSim.Region.MySuperScriptEngine&amp;quot; (replace &amp;quot;MySuperScriptEngine&amp;quot; with the name of your scriptengine).&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Create a new class (file) named &amp;quot;ScriptEngine&amp;quot;. It must be named exactly ScriptEngine for OpenSim to use it. ScriptEngine must inherit from &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptEngine&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
3. You need to override a couple of functions. Most probably you don't want to do any special work here, so look below for a sample default file.&lt;br /&gt;
4. Create a new class (file) named &amp;quot;ScriptManager&amp;quot; that inherits from &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptManager&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
5. Your ScriptManager class needs to override two functions. One to start a script and one to stop a script.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ScriptEngine class ===&lt;br /&gt;
The main purpose of ScriptEngine class is to be able to intercept scene, for example starting with a &amp;quot;fake&amp;quot; scene instead of OpenSim's scene. You probably don't want this, so just go for the standard initialization.&amp;lt;br /&amp;gt;&lt;br /&gt;
A standard class would look like this:&amp;lt;br /&amp;gt;&lt;br /&gt;
 using System;&lt;br /&gt;
 using Nini.Config;&lt;br /&gt;
 using OpenSim.Framework.Console;&lt;br /&gt;
 using OpenSim.Region.Environment.Scenes;&lt;br /&gt;
 namespace OpenSim.Region.ScriptEngine.MySuperScriptEngine&lt;br /&gt;
 {&lt;br /&gt;
     [Serializable]&lt;br /&gt;
     public class ScriptEngine : OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptEngine&lt;br /&gt;
     {&lt;br /&gt;
         public override void Initialise(Scene scene, IConfigSource config)&lt;br /&gt;
         {&lt;br /&gt;
            InitializeEngine(scene, MainLog.Instance, true, GetScriptManager());&lt;br /&gt;
         }&lt;br /&gt;
         public override OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptManager _GetScriptManager()&lt;br /&gt;
         {&lt;br /&gt;
             return new ScriptManager(this);&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== ScriptManager class ===&lt;br /&gt;
A script is refecenced by object id &amp;quot;localID&amp;quot; (the object/prim it is inside) and script id &amp;quot;itemID&amp;quot; (the particular (unique) instance of that script). These parameters along with a string &amp;quot;Script&amp;quot; containing the script text (source code) are passed to your (overriden) start script function in your ScriptManager class.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Keeping track of active scripts is done automatically, so your job is simply to create a new script and hand it over. After that your work is done until the script is asked to stop, then you have to do a few simple tasks to remove it again.&amp;lt;br /&amp;gt;&lt;br /&gt;
Here is a sample on a minimal script startup:&lt;br /&gt;
 public override void _StartScript(uint localID, LLUUID itemID, string Script)&lt;br /&gt;
 {&lt;br /&gt;
     SceneObjectPart m_host = World.GetSceneObjectPart(localID);&lt;br /&gt;
     try&lt;br /&gt;
     {&lt;br /&gt;
         IScript CompiledScript = MySpecialCompiler.DoCompile(Script);  // Compile and return an IScript object that is the actual script&lt;br /&gt;
         CompiledScript.Source = ScriptSource;                          // Store source for recompile on script reset events&lt;br /&gt;
         SetScript(localID, itemID, CompiledScript);                    // All is ok. Add script to OpenSim's script manager. From here on its on autopilot.&lt;br /&gt;
         // Create a private instance of LSL commands (note that m_scriptEngine, m_host are from baseclass, so you don't need to change them)&lt;br /&gt;
         LSL_BuiltIn_Commands LSLB = new LSL_BuiltIn_Commands(m_scriptEngine, m_host, localID, itemID);&lt;br /&gt;
         CompiledScript.Start(LSLB);                                    // Start the script - giving it LSL commands&lt;br /&gt;
         // Fire the first start-event, this is the event run on LSL scripts when they first start&lt;br /&gt;
         m_scriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, &amp;quot;state_entry&amp;quot;, EventQueueManager.llDetectNull, new object[] { });&lt;br /&gt;
     }&lt;br /&gt;
     catch (Exception e)&lt;br /&gt;
     {&lt;br /&gt;
       // To see how you can send the compile error in-world, have a look at OpenSim.Region.ScriptEngine.DotNetEngine.ScriptManager&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And your minimal script shutdown would be:&lt;br /&gt;
 public override void _StopScript(uint localID, LLUUID itemID)&lt;br /&gt;
 {&lt;br /&gt;
     m_scriptEngine.m_LSLLongCmdHandler.RemoveScript(localID, itemID);   // Stop long command on script like timers, http requests, etc.&lt;br /&gt;
     IScript LSLBC = GetScript(localID, itemID);                         // Get the script we are stopping&lt;br /&gt;
     if (LSLBC == null)                                                  // Nothing to do? Exit.&lt;br /&gt;
         return;&lt;br /&gt;
     try&lt;br /&gt;
     {&lt;br /&gt;
         LSLBC.Exec.StopScript();                                        // Tell script to stop&lt;br /&gt;
         RemoveScript(localID, itemID);                                  // Remove script from internal memory structure&lt;br /&gt;
    }&lt;br /&gt;
     catch (Exception e)&lt;br /&gt;
     {&lt;br /&gt;
       // You probably want to log this to console or something&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===IScript interface===&lt;br /&gt;
So you have implemented the two classes described above. Now how does this connect to your JavaScript or Perl or YourCustomSuperLanguage script engine or VM?&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
You have to create a class. This class must inherit &amp;quot;OpenSim.Region.ScriptEngine.Common.IScript&amp;quot;. Inside IScript your class will have two important things: &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
1. During script start (in ScriptManager), you call yourscript.Start() and give it a LSL command module. So insite your script class where you override this Start() function you need to remember this LSL command module.&amp;lt;br /&amp;gt;&lt;br /&gt;
How you bind this LSL command module to your custom engine is totally up to you. The LSL command module contains all LSL functions, and any function you use there will affect the correct object/region/whatever. You don't need to do more than ''myLSLCommandModule.llSay(0, &amp;quot;Hello world!&amp;quot;);'' to make it work.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Any time a LSL event is generated either by an in-world event or by for example a timer, a function in your script class needs to be executed. For this you have the &amp;quot;Exec&amp;quot; override. I suggest you have a look at &amp;quot;OpenSim.Region.ScriptEngine.Common.Executor&amp;quot; to see how this work. Basically you receive a string containing function name and the parameters for that event.&amp;lt;br /&amp;gt;&lt;br /&gt;
If you use the default Executor you need to initialize it by giving it a reference to yourself (the IScript script class). Then you need to have functions in your class matching LSL functions when it comes to both name and parameters. Example:&amp;lt;br /&amp;gt;&lt;br /&gt;
 public touch_start(int number_of_touches) {&lt;br /&gt;
     // whatever code for this event... probably calling your own VM's function with the same name? ;)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===AppDomain security===&lt;br /&gt;
If you are writing a .Net based script engine and want AppDomain security and loading/unloading then:&lt;br /&gt;
 // Load script:&lt;br /&gt;
 IScript CompiledScript = m_scriptEngine.m_AppDomainManager.LoadScript(filename);&lt;br /&gt;
and&lt;br /&gt;
  // Unload script:&lt;br /&gt;
  m_scriptEngine.m_AppDomainManager.StopScript(LSLBC.Exec.GetAppDomain());&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OpenSim.Region.ScriptEngine.Common</id>
		<title>OpenSim.Region.ScriptEngine.Common</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OpenSim.Region.ScriptEngine.Common"/>
				<updated>2008-01-20T19:20:11Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OpenSim.Region.ScriptEngine.Common =&lt;br /&gt;
&lt;br /&gt;
== How to implement your own script engine ==&lt;br /&gt;
Creating a new script engine for OpenSim is simple (haha).&amp;lt;br /&amp;gt;&lt;br /&gt;
What I mean by simple is that if you already have a VM (Virtual Machine) or script engine of some sort then integrating it as a OpenSim ScriptEngine plugin is simple.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== So what do I get for free? ==&lt;br /&gt;
1. Loading/unloading of scripts are queued and executed in sequence. Only one load/unload at the time.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
2. What script belongs to what object is automatically taken care of. You just need to provide the scripts classes - nothing else.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
3. OpenSim events are translated and given to you as LSL events. Your script functions are executed automatically, no need to hook up to events or anything.&amp;lt;br /&amp;gt;&lt;br /&gt;
If you want to implement your own event handlers, feel free to do so. Look in &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.EventManager.cs&amp;quot; how its done. Your own events can run together with LSL events without any problem.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
4. Whenever an event is executed, the execution is queued. Only one event per script is ever executed simultaneous. But multithreading is used to run multiple scripts in parallel.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
5. Errors during script execution is automatically handled and relayed to users in-world.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
6. You get all LSL commands in an easy to use object, no need to keep track of scene or objects to execute functions. Running an LSL command from your script engine is as easy as running it from inside any LSL-script.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
7. Long LSL-commands that returns with an event is also handled.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===How do I get started?===&lt;br /&gt;
1. Create a new project named &amp;quot;OpenSim.Region.MySuperScriptEngine&amp;quot; (replace &amp;quot;MySuperScriptEngine&amp;quot; with the name of your scriptengine).&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Create a new class (file) named &amp;quot;ScriptEngine&amp;quot;. It must be named exactly ScriptEngine for OpenSim to use it. ScriptEngine must inherit from &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptEngine&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
3. You need to override a couple of functions. Most probably you don't want to do any special work here, so look below for a sample default file.&lt;br /&gt;
4. Create a new class (file) named &amp;quot;ScriptManager&amp;quot; that inherits from &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptManager&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
5. Your ScriptManager class needs to override two functions. One to start a script and one to stop a script.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ScriptEngine class ===&lt;br /&gt;
The main purpose of ScriptEngine class is to be able to intercept scene, for example starting with a &amp;quot;fake&amp;quot; scene instead of OpenSim's scene. You probably don't want this, so just go for the standard initialization.&amp;lt;br /&amp;gt;&lt;br /&gt;
A standard class would look like this:&amp;lt;br /&amp;gt;&lt;br /&gt;
 using System;&lt;br /&gt;
 using Nini.Config;&lt;br /&gt;
 using OpenSim.Framework.Console;&lt;br /&gt;
 using OpenSim.Region.Environment.Scenes;&lt;br /&gt;
 namespace OpenSim.Region.ScriptEngine.MySuperScriptEngine&lt;br /&gt;
 {&lt;br /&gt;
     [Serializable]&lt;br /&gt;
     public class ScriptEngine : OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptEngine&lt;br /&gt;
     {&lt;br /&gt;
         public override void Initialise(Scene scene, IConfigSource config)&lt;br /&gt;
         {&lt;br /&gt;
            InitializeEngine(scene, MainLog.Instance, true, GetScriptManager());&lt;br /&gt;
         }&lt;br /&gt;
         public override OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptManager _GetScriptManager()&lt;br /&gt;
         {&lt;br /&gt;
             return new ScriptManager(this);&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== ScriptManager class ===&lt;br /&gt;
A script is refecenced by object id &amp;quot;localID&amp;quot; (the object/prim it is inside) and script id &amp;quot;itemID&amp;quot; (the particular (unique) instance of that script). These parameters along with a string &amp;quot;Script&amp;quot; containing the script text (source code) are passed to your (overriden) start script function in your ScriptManager class.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Keeping track of active scripts is done automatically, so your job is simply to create a new script and hand it over. After that your work is done until the script is asked to stop, then you have to do a few simple tasks to remove it again.&amp;lt;br /&amp;gt;&lt;br /&gt;
Here is a sample on a minimal script startup:&lt;br /&gt;
 public override void _StartScript(uint localID, LLUUID itemID, string Script)&lt;br /&gt;
 {&lt;br /&gt;
     SceneObjectPart m_host = World.GetSceneObjectPart(localID);&lt;br /&gt;
     try&lt;br /&gt;
     {&lt;br /&gt;
         IScript CompiledScript = MySpecialCompiler.DoCompile(Script);  // Compile and return an IScript object that is the actual script&lt;br /&gt;
         CompiledScript.Source = ScriptSource;                          // Store source for recompile on script reset events&lt;br /&gt;
         SetScript(localID, itemID, CompiledScript);                    // All is ok. Add script to OpenSim's script manager. From here on its on autopilot.&lt;br /&gt;
         // Create a private instance of LSL commands (note that m_scriptEngine, m_host are from baseclass, so you don't need to change them)&lt;br /&gt;
         LSL_BuiltIn_Commands LSLB = new LSL_BuiltIn_Commands(m_scriptEngine, m_host, localID, itemID);&lt;br /&gt;
         CompiledScript.Start(LSLB);                                    // Start the script - giving it LSL commands&lt;br /&gt;
         // Fire the first start-event, this is the event run on LSL scripts when they first start&lt;br /&gt;
         m_scriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, &amp;quot;state_entry&amp;quot;, EventQueueManager.llDetectNull, new object[] { });&lt;br /&gt;
     }&lt;br /&gt;
     catch (Exception e)&lt;br /&gt;
     {&lt;br /&gt;
       // To see how you can send the compile error in-world, have a look at OpenSim.Region.ScriptEngine.DotNetEngine.ScriptManager&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And your minimal script shutdown would be:&lt;br /&gt;
 public override void _StopScript(uint localID, LLUUID itemID)&lt;br /&gt;
 {&lt;br /&gt;
     m_scriptEngine.m_LSLLongCmdHandler.RemoveScript(localID, itemID);   // Stop long command on script like timers, http requests, etc.&lt;br /&gt;
     IScript LSLBC = GetScript(localID, itemID);                         // Get the script we are stopping&lt;br /&gt;
     if (LSLBC == null)                                                  // Nothing to do? Exit.&lt;br /&gt;
         return;&lt;br /&gt;
     try&lt;br /&gt;
     {&lt;br /&gt;
         LSLBC.Exec.StopScript();                                        // Tell script to stop&lt;br /&gt;
         RemoveScript(localID, itemID);                                  // Remove script from internal memory structure&lt;br /&gt;
    }&lt;br /&gt;
     catch (Exception e)&lt;br /&gt;
     {&lt;br /&gt;
       // You probably want to log this to console or something&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===IScript interface===&lt;br /&gt;
So you have implemented the two classes described above. Now how does this connect to your JavaScript or Perl or YourCustomSuperLanguage script engine or VM?&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
You have to create a class. This class must inherit &amp;quot;OpenSim.Region.ScriptEngine.Common.IScript&amp;quot;. Inside IScript your class will have two important things: &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
1. During script start (in ScriptManager), you call yourscript.Start() and give it a LSL command module. So insite your script class where you override this Start() function you need to remember this LSL command module.&amp;lt;br /&amp;gt;&lt;br /&gt;
How you bind this LSL command module to your custom engine is totally up to you. The LSL command module contains all LSL functions, and any function you use there will affect the correct object/region/whatever. You don't need to do more than ''myLSLCommandModule.llSay(0, &amp;quot;Hello world!&amp;quot;);'' to make it work.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Any time a LSL event is generated either by an in-world event or by for example a timer, a function in your script class needs to be executed. For this you have the &amp;quot;Exec&amp;quot; override. I suggest you have a look at &amp;quot;OpenSim.Region.ScriptEngine.Common.Executor&amp;quot; to see how this work. Basically you receive a string containing function name and the parameters for that event.&amp;lt;br /&amp;gt;&lt;br /&gt;
If you use the default Executor you need to initialize it by giving it a reference to yourself (the IScript script class). Then you need to have functions in your class matching LSL functions when it comes to both name and parameters. Example:&amp;lt;br /&amp;gt;&lt;br /&gt;
 public touch_start(int number_of_touches) {&lt;br /&gt;
     // whatever code for this event... probably calling your own VM's function with the same name? ;)&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OpenSim.Region.ScriptEngine.Common</id>
		<title>OpenSim.Region.ScriptEngine.Common</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OpenSim.Region.ScriptEngine.Common"/>
				<updated>2008-01-20T19:19:39Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OpenSim.Region.ScriptEngine.Common =&lt;br /&gt;
&lt;br /&gt;
== How to implement your own script engine ==&lt;br /&gt;
Creating a new script engine for OpenSim is simple (haha).&amp;lt;br /&amp;gt;&lt;br /&gt;
What I mean by simple is that if you already have a VM (Virtual Machine) or script engine of some sort then integrating it as a OpenSim ScriptEngine plugin is simple.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===How do I get started?===&lt;br /&gt;
1. Create a new project named &amp;quot;OpenSim.Region.MySuperScriptEngine&amp;quot; (replace &amp;quot;MySuperScriptEngine&amp;quot; with the name of your scriptengine).&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Create a new class (file) named &amp;quot;ScriptEngine&amp;quot;. It must be named exactly ScriptEngine for OpenSim to use it. ScriptEngine must inherit from &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptEngine&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
3. You need to override a couple of functions. Most probably you don't want to do any special work here, so look below for a sample default file.&lt;br /&gt;
4. Create a new class (file) named &amp;quot;ScriptManager&amp;quot; that inherits from &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptManager&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
5. Your ScriptManager class needs to override two functions. One to start a script and one to stop a script.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ScriptEngine class ===&lt;br /&gt;
The main purpose of ScriptEngine class is to be able to intercept scene, for example starting with a &amp;quot;fake&amp;quot; scene instead of OpenSim's scene. You probably don't want this, so just go for the standard initialization.&amp;lt;br /&amp;gt;&lt;br /&gt;
A standard class would look like this:&amp;lt;br /&amp;gt;&lt;br /&gt;
 using System;&lt;br /&gt;
 using Nini.Config;&lt;br /&gt;
 using OpenSim.Framework.Console;&lt;br /&gt;
 using OpenSim.Region.Environment.Scenes;&lt;br /&gt;
 namespace OpenSim.Region.ScriptEngine.MySuperScriptEngine&lt;br /&gt;
 {&lt;br /&gt;
     [Serializable]&lt;br /&gt;
     public class ScriptEngine : OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptEngine&lt;br /&gt;
     {&lt;br /&gt;
         public override void Initialise(Scene scene, IConfigSource config)&lt;br /&gt;
         {&lt;br /&gt;
            InitializeEngine(scene, MainLog.Instance, true, GetScriptManager());&lt;br /&gt;
         }&lt;br /&gt;
         public override OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptManager _GetScriptManager()&lt;br /&gt;
         {&lt;br /&gt;
             return new ScriptManager(this);&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== ScriptManager class ===&lt;br /&gt;
A script is refecenced by object id &amp;quot;localID&amp;quot; (the object/prim it is inside) and script id &amp;quot;itemID&amp;quot; (the particular (unique) instance of that script). These parameters along with a string &amp;quot;Script&amp;quot; containing the script text (source code) are passed to your (overriden) start script function in your ScriptManager class.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Keeping track of active scripts is done automatically, so your job is simply to create a new script and hand it over. After that your work is done until the script is asked to stop, then you have to do a few simple tasks to remove it again.&amp;lt;br /&amp;gt;&lt;br /&gt;
Here is a sample on a minimal script startup:&lt;br /&gt;
 public override void _StartScript(uint localID, LLUUID itemID, string Script)&lt;br /&gt;
 {&lt;br /&gt;
     SceneObjectPart m_host = World.GetSceneObjectPart(localID);&lt;br /&gt;
     try&lt;br /&gt;
     {&lt;br /&gt;
         IScript CompiledScript = MySpecialCompiler.DoCompile(Script);  // Compile and return an IScript object that is the actual script&lt;br /&gt;
         CompiledScript.Source = ScriptSource;                          // Store source for recompile on script reset events&lt;br /&gt;
         SetScript(localID, itemID, CompiledScript);                    // All is ok. Add script to OpenSim's script manager. From here on its on autopilot.&lt;br /&gt;
         // Create a private instance of LSL commands (note that m_scriptEngine, m_host are from baseclass, so you don't need to change them)&lt;br /&gt;
         LSL_BuiltIn_Commands LSLB = new LSL_BuiltIn_Commands(m_scriptEngine, m_host, localID, itemID);&lt;br /&gt;
         CompiledScript.Start(LSLB);                                    // Start the script - giving it LSL commands&lt;br /&gt;
         // Fire the first start-event, this is the event run on LSL scripts when they first start&lt;br /&gt;
         m_scriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, &amp;quot;state_entry&amp;quot;, EventQueueManager.llDetectNull, new object[] { });&lt;br /&gt;
     }&lt;br /&gt;
     catch (Exception e)&lt;br /&gt;
     {&lt;br /&gt;
       // To see how you can send the compile error in-world, have a look at OpenSim.Region.ScriptEngine.DotNetEngine.ScriptManager&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And your minimal script shutdown would be:&lt;br /&gt;
 public override void _StopScript(uint localID, LLUUID itemID)&lt;br /&gt;
 {&lt;br /&gt;
     m_scriptEngine.m_LSLLongCmdHandler.RemoveScript(localID, itemID);   // Stop long command on script like timers, http requests, etc.&lt;br /&gt;
     IScript LSLBC = GetScript(localID, itemID);                         // Get the script we are stopping&lt;br /&gt;
     if (LSLBC == null)                                                  // Nothing to do? Exit.&lt;br /&gt;
         return;&lt;br /&gt;
     try&lt;br /&gt;
     {&lt;br /&gt;
         LSLBC.Exec.StopScript();                                        // Tell script to stop&lt;br /&gt;
         RemoveScript(localID, itemID);                                  // Remove script from internal memory structure&lt;br /&gt;
    }&lt;br /&gt;
     catch (Exception e)&lt;br /&gt;
     {&lt;br /&gt;
       // You probably want to log this to console or something&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===IScript interface===&lt;br /&gt;
So you have implemented the two classes described above. Now how does this connect to your JavaScript or Perl or YourCustomSuperLanguage script engine or VM?&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
You have to create a class. This class must inherit &amp;quot;OpenSim.Region.ScriptEngine.Common.IScript&amp;quot;. Inside IScript your class will have two important things: &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
1. During script start (in ScriptManager), you call yourscript.Start() and give it a LSL command module. So insite your script class where you override this Start() function you need to remember this LSL command module.&amp;lt;br /&amp;gt;&lt;br /&gt;
How you bind this LSL command module to your custom engine is totally up to you. The LSL command module contains all LSL functions, and any function you use there will affect the correct object/region/whatever. You don't need to do more than ''myLSLCommandModule.llSay(0, &amp;quot;Hello world!&amp;quot;);'' to make it work.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Any time a LSL event is generated either by an in-world event or by for example a timer, a function in your script class needs to be executed. For this you have the &amp;quot;Exec&amp;quot; override. I suggest you have a look at &amp;quot;OpenSim.Region.ScriptEngine.Common.Executor&amp;quot; to see how this work. Basically you receive a string containing function name and the parameters for that event.&amp;lt;br /&amp;gt;&lt;br /&gt;
If you use the default Executor you need to initialize it by giving it a reference to yourself (the IScript script class). Then you need to have functions in your class matching LSL functions when it comes to both name and parameters. Example:&amp;lt;br /&amp;gt;&lt;br /&gt;
 public touch_start(int number_of_touches) {&lt;br /&gt;
     // whatever code for this event... probably calling your own VM's function with the same name? ;)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== So what do I get for free? ==&lt;br /&gt;
1. Loading/unloading of scripts are queued and executed in sequence. Only one load/unload at the time.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
2. What script belongs to what object is automatically taken care of. You just need to provide the scripts classes - nothing else.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
3. OpenSim events are translated and given to you as LSL events. Your script functions are executed automatically, no need to hook up to events or anything.&amp;lt;br /&amp;gt;&lt;br /&gt;
If you want to implement your own event handlers, feel free to do so. Look in &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.EventManager.cs&amp;quot; how its done. Your own events can run together with LSL events without any problem.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
4. Whenever an event is executed, the execution is queued. Only one event per script is ever executed simultaneous. But multithreading is used to run multiple scripts in parallel.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
5. Errors during script execution is automatically handled and relayed to users in-world.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
6. You get all LSL commands in an easy to use object, no need to keep track of scene or objects to execute functions. Running an LSL command from your script engine is as easy as running it from inside any LSL-script.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
7. Long LSL-commands that returns with an event is also handled.&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OpenSim.Region.ScriptEngine.Common</id>
		<title>OpenSim.Region.ScriptEngine.Common</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OpenSim.Region.ScriptEngine.Common"/>
				<updated>2008-01-20T19:18:19Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OpenSim.Region.ScriptEngine.Common =&lt;br /&gt;
&lt;br /&gt;
== How to implement your own script engine ==&lt;br /&gt;
Creating a new script engine for OpenSim is simple (haha).&amp;lt;br /&amp;gt;&lt;br /&gt;
What I mean by simple is that if you already have a VM (Virtual Machine) or script engine of some sort then integrating it as a OpenSim ScriptEngine plugin is simple.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===How do I get started?===&lt;br /&gt;
1. Create a new project named &amp;quot;OpenSim.Region.MySuperScriptEngine&amp;quot; (replace &amp;quot;MySuperScriptEngine&amp;quot; with the name of your scriptengine).&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Create a new class (file) named &amp;quot;ScriptEngine&amp;quot;. It must be named exactly ScriptEngine for OpenSim to use it. ScriptEngine must inherit from &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptEngine&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
3. You need to override a couple of functions. Most probably you don't want to do any special work here, so look below for a sample default file.&lt;br /&gt;
4. Create a new class (file) named &amp;quot;ScriptManager&amp;quot; that inherits from &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptManager&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
5. Your ScriptManager class needs to override two functions. One to start a script and one to stop a script.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ScriptEngine class ===&lt;br /&gt;
The main purpose of ScriptEngine class is to be able to intercept scene, for example starting with a &amp;quot;fake&amp;quot; scene instead of OpenSim's scene. You probably don't want this, so just go for the standard initialization.&amp;lt;br /&amp;gt;&lt;br /&gt;
A standard class would look like this:&amp;lt;br /&amp;gt;&lt;br /&gt;
 using System;&lt;br /&gt;
 using Nini.Config;&lt;br /&gt;
 using OpenSim.Framework.Console;&lt;br /&gt;
 using OpenSim.Region.Environment.Scenes;&lt;br /&gt;
 namespace OpenSim.Region.ScriptEngine.MySuperScriptEngine&lt;br /&gt;
 {&lt;br /&gt;
     [Serializable]&lt;br /&gt;
     public class ScriptEngine : OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptEngine&lt;br /&gt;
     {&lt;br /&gt;
         public override void Initialise(Scene scene, IConfigSource config)&lt;br /&gt;
         {&lt;br /&gt;
            InitializeEngine(scene, MainLog.Instance, true, GetScriptManager());&lt;br /&gt;
         }&lt;br /&gt;
         public override OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptManager _GetScriptManager()&lt;br /&gt;
         {&lt;br /&gt;
             return new ScriptManager(this);&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== ScriptManager class ===&lt;br /&gt;
A script is refecenced by object id &amp;quot;localID&amp;quot; (the object/prim it is inside) and script id &amp;quot;itemID&amp;quot; (the particular (unique) instance of that script). These parameters along with a string &amp;quot;Script&amp;quot; containing the script text (source code) are passed to your (overriden) start script function in your ScriptManager class.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Keeping track of active scripts is done automatically, so your job is simply to create a new script and hand it over. After that your work is done until the script is asked to stop, then you have to do a few simple tasks to remove it again.&amp;lt;br /&amp;gt;&lt;br /&gt;
Here is a sample on a minimal script startup:&lt;br /&gt;
 public override void _StartScript(uint localID, LLUUID itemID, string Script)&lt;br /&gt;
 {&lt;br /&gt;
     SceneObjectPart m_host = World.GetSceneObjectPart(localID);&lt;br /&gt;
     try&lt;br /&gt;
     {&lt;br /&gt;
         IScript CompiledScript = MySpecialCompiler.DoCompile(Script);  // Compile and return an IScript object that is the actual script&lt;br /&gt;
         CompiledScript.Source = ScriptSource;                          // Store source for recompile on script reset events&lt;br /&gt;
         SetScript(localID, itemID, CompiledScript);                    // All is ok. Add script to OpenSim's script manager. From here on its on autopilot.&lt;br /&gt;
         // Create a private instance of LSL commands (note that m_scriptEngine, m_host are from baseclass, so you don't need to change them)&lt;br /&gt;
         LSL_BuiltIn_Commands LSLB = new LSL_BuiltIn_Commands(m_scriptEngine, m_host, localID, itemID);&lt;br /&gt;
         CompiledScript.Start(LSLB);                                    // Start the script - giving it LSL commands&lt;br /&gt;
         // Fire the first start-event, this is the event run on LSL scripts when they first start&lt;br /&gt;
         m_scriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, &amp;quot;state_entry&amp;quot;, EventQueueManager.llDetectNull, new object[] { });&lt;br /&gt;
     }&lt;br /&gt;
     catch (Exception e)&lt;br /&gt;
     {&lt;br /&gt;
       // To see how you can send the compile error in-world, have a look at OpenSim.Region.ScriptEngine.DotNetEngine.ScriptManager&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And your minimal script shutdown would be:&lt;br /&gt;
 public override void _StopScript(uint localID, LLUUID itemID)&lt;br /&gt;
 {&lt;br /&gt;
     m_scriptEngine.m_LSLLongCmdHandler.RemoveScript(localID, itemID);   // Stop long command on script like timers, http requests, etc.&lt;br /&gt;
     IScript LSLBC = GetScript(localID, itemID);                         // Get the script we are stopping&lt;br /&gt;
     if (LSLBC == null)                                                  // Nothing to do? Exit.&lt;br /&gt;
         return;&lt;br /&gt;
     try&lt;br /&gt;
     {&lt;br /&gt;
         LSLBC.Exec.StopScript();                                        // Tell script to stop&lt;br /&gt;
         RemoveScript(localID, itemID);                                  // Remove script from internal memory structure&lt;br /&gt;
    }&lt;br /&gt;
     catch (Exception e)&lt;br /&gt;
     {&lt;br /&gt;
       // You probably want to log this to console or something&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===IScript interface===&lt;br /&gt;
So you have implemented the two classes described above. Now how does this connect to your JavaScript or Perl or YourCustomSuperLanguage script engine or VM?&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
You have to create a class. This class must inherit &amp;quot;OpenSim.Region.ScriptEngine.Common.IScript&amp;quot;. Inside IScript your class will have two major things: &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
1. During script start (in ScriptManager), you call yourscript.Start() and give it a LSL command module. So insite your script class where you override this Start() function you need to remember this LSL command module.&amp;lt;br /&amp;gt;&lt;br /&gt;
How you bind this LSL command module to your custom engine is totally up to you. The LSL command module contains all LSL functions, and any function you use there will affect the correct object/region/whatever. You don't need to do more than ''myLSLCommandModule.llSay(0, &amp;quot;Hello world!&amp;quot;);'' to make it work.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Any time a LSL event is generated either by an in-world event or by for example a timer, a function in your script class needs to be executed. For this you have the &amp;quot;Exec&amp;quot; override. I suggest you have a look at &amp;quot;OpenSim.Region.ScriptEngine.Common.Executor&amp;quot; to see how this work. Basically you receive a string containing function name and the parameters for that event.&amp;lt;br /&amp;gt;&lt;br /&gt;
If you use the default Executor you need to initialize it by giving it a reference to yourself (the IScript script class). Then you need to have functions in your class matching LSL functions when it comes to both name and parameters. Example:&amp;lt;br /&amp;gt;&lt;br /&gt;
 public touch_start(int number_of_touches) {&lt;br /&gt;
     // whatever code for this event... probably calling your own VM's function with the same name? ;)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== So what do I get for free? ==&lt;br /&gt;
1. Loading/unloading of scripts are queued and executed in sequence. Only one load/unload at the time.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
2. What script belongs to what object is automatically taken care of. You just need to provide the scripts classes - nothing else.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
3. OpenSim events are translated and given to you as LSL events. Your script functions are executed automatically, no need to hook up to events or anything.&amp;lt;br /&amp;gt;&lt;br /&gt;
If you want to implement your own event handlers, feel free to do so. Look in &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.EventManager.cs&amp;quot; how its done. Your own events can run together with LSL events without any problem.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
4. Whenever an event is executed, the execution is queued. Only one event per script is ever executed simultaneous. But multithreading is used to run multiple scripts in parallel.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
5. Errors during script execution is automatically handled and relayed to users in-world.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
6. You get all LSL commands in an easy to use object, no need to keep track of scene or objects to execute functions. Running an LSL command from your script engine is as easy as running it from inside any LSL-script.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
7. Long LSL-commands that returns with an event is also handled.&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OpenSim.Region.ScriptEngine.Common</id>
		<title>OpenSim.Region.ScriptEngine.Common</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OpenSim.Region.ScriptEngine.Common"/>
				<updated>2008-01-20T19:09:39Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OpenSim.Region.ScriptEngine.Common =&lt;br /&gt;
&lt;br /&gt;
== How to implement your own script engine ==&lt;br /&gt;
Creating a new script engine for OpenSim is simple (haha).&amp;lt;br /&amp;gt;&lt;br /&gt;
What I mean by simple is that if you already have a VM (Virtual Machine) or script engine of some sort then integrating it as a OpenSim ScriptEngine plugin is simple.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===How do I get started?===&lt;br /&gt;
1. Create a new project named &amp;quot;OpenSim.Region.MySuperScriptEngine&amp;quot; (replace &amp;quot;MySuperScriptEngine&amp;quot; with the name of your scriptengine).&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Create a new class (file) named &amp;quot;ScriptEngine&amp;quot;. It must be named exactly ScriptEngine for OpenSim to use it. ScriptEngine must inherit from &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptEngine&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
3. You need to override a couple of functions. Most probably you don't want to do any special work here, so look below for a sample default file.&lt;br /&gt;
4. Create a new class (file) named &amp;quot;ScriptManager&amp;quot; that inherits from &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptManager&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
5. Your ScriptManager class needs to override two functions. One to start a script and one to stop a script.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ScriptEngine class ===&lt;br /&gt;
The main purpose of ScriptEngine class is to be able to intercept scene, for example starting with a &amp;quot;fake&amp;quot; scene instead of OpenSim's scene. You probably don't want this, so just go for the standard initialization.&amp;lt;br /&amp;gt;&lt;br /&gt;
A standard class would look like this:&amp;lt;br /&amp;gt;&lt;br /&gt;
 using System;&lt;br /&gt;
 using Nini.Config;&lt;br /&gt;
 using OpenSim.Framework.Console;&lt;br /&gt;
 using OpenSim.Region.Environment.Scenes;&lt;br /&gt;
 namespace OpenSim.Region.ScriptEngine.MySuperScriptEngine&lt;br /&gt;
 {&lt;br /&gt;
     [Serializable]&lt;br /&gt;
     public class ScriptEngine : OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptEngine&lt;br /&gt;
     {&lt;br /&gt;
         public override void Initialise(Scene scene, IConfigSource config)&lt;br /&gt;
         {&lt;br /&gt;
            InitializeEngine(scene, MainLog.Instance, true, GetScriptManager());&lt;br /&gt;
         }&lt;br /&gt;
         public override OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptManager _GetScriptManager()&lt;br /&gt;
         {&lt;br /&gt;
             return new ScriptManager(this);&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== ScriptManager class ===&lt;br /&gt;
A script is refecenced by object id &amp;quot;localID&amp;quot; (the object/prim it is inside) and script id &amp;quot;itemID&amp;quot; (the particular (unique) instance of that script). These parameters along with a string &amp;quot;Script&amp;quot; containing the script text (source code) are passed to your (overriden) start script function in your ScriptManager class.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Keeping track of active scripts is done automatically, so your job is simply to create a new script and hand it over. After that your work is done until the script is asked to stop, then you have to do a few simple tasks to remove it again.&amp;lt;br /&amp;gt;&lt;br /&gt;
Here is a sample on a minimal script startup:&lt;br /&gt;
 public override void _StartScript(uint localID, LLUUID itemID, string Script)&lt;br /&gt;
 {&lt;br /&gt;
     SceneObjectPart m_host = World.GetSceneObjectPart(localID);&lt;br /&gt;
     try&lt;br /&gt;
     {&lt;br /&gt;
         IScript CompiledScript = MySpecialCompiler.DoCompile(Script);  // Compile and return an IScript object that is the actual script&lt;br /&gt;
         CompiledScript.Source = ScriptSource;                          // Store source for recompile on script reset events&lt;br /&gt;
         SetScript(localID, itemID, CompiledScript);                    // All is ok. Add script to OpenSim's script manager. From here on its on autopilot.&lt;br /&gt;
         // Create a private instance of LSL commands (note that m_scriptEngine, m_host are from baseclass, so you don't need to change them)&lt;br /&gt;
         LSL_BuiltIn_Commands LSLB = new LSL_BuiltIn_Commands(m_scriptEngine, m_host, localID, itemID);&lt;br /&gt;
         CompiledScript.Start(LSLB);                                    // Start the script - giving it LSL commands&lt;br /&gt;
         // Fire the first start-event, this is the event run on LSL scripts when they first start&lt;br /&gt;
         m_scriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, &amp;quot;state_entry&amp;quot;, EventQueueManager.llDetectNull, new object[] { });&lt;br /&gt;
     }&lt;br /&gt;
     catch (Exception e)&lt;br /&gt;
     {&lt;br /&gt;
       // To see how you can send the compile error in-world, have a look at OpenSim.Region.ScriptEngine.DotNetEngine.ScriptManager&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And your minimal script shutdown would be:&lt;br /&gt;
 public override void _StopScript(uint localID, LLUUID itemID)&lt;br /&gt;
 {&lt;br /&gt;
     m_scriptEngine.m_LSLLongCmdHandler.RemoveScript(localID, itemID);   // Stop long command on script like timers, http requests, etc.&lt;br /&gt;
     IScript LSLBC = GetScript(localID, itemID);                         // Get the script we are stopping&lt;br /&gt;
     if (LSLBC == null)                                                  // Nothing to do? Exit.&lt;br /&gt;
         return;&lt;br /&gt;
     try&lt;br /&gt;
     {&lt;br /&gt;
         LSLBC.Exec.StopScript();                                        // Tell script to stop&lt;br /&gt;
         RemoveScript(localID, itemID);                                  // Remove script from internal memory structure&lt;br /&gt;
    }&lt;br /&gt;
     catch (Exception e)&lt;br /&gt;
     {&lt;br /&gt;
       // You probably want to log this to console or something&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===IScript interface===&lt;br /&gt;
So you have implemented the two classes described above. Now how does this connect to your JavaScript or Perl or YourCustomSuperLanguage script engine or VM?&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
You have to create a class. This class must inherit &amp;quot;OpenSim.Region.ScriptEngine.Common.IScript&amp;quot;. Inside IScript your class will have two major things: &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
1. During script start (in ScriptManager), you call yourscript.Start() and give it a LSL command module. So insite your script class where you override this Start() function you need to remember this LSL command module.&amp;lt;br /&amp;gt;&lt;br /&gt;
How you bind this LSL command module to your custom engine is totally up to you. The LSL command module contains all LSL functions, and any function you use there will affect the correct object/region/whatever. You don't need to do more than ''myLSLCommandModule.llSay(0, &amp;quot;Hello world!&amp;quot;);'' to make it work.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Any time a LSL event is generated either by an in-world event or by for example a timer, a function in your script class needs to be executed. For this you have the &amp;quot;Exec&amp;quot; override. I suggest you have a look at &amp;quot;OpenSim.Region.ScriptEngine.Common.Executor&amp;quot; to see how this work. Basically you receive a string containing function name and the parameters for that event.&amp;lt;br /&amp;gt;&lt;br /&gt;
If you use the default Executor you need to initialize it by giving it a reference to yourself (the IScript script class). Then you need to have functions in your class matching LSL functions when it comes to both name and parameters. Example:&amp;lt;br /&amp;gt;&lt;br /&gt;
 public touch_start(int number_of_touches) {&lt;br /&gt;
     // whatever code for this event... probably calling your own VM's function with the same name? ;)&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OpenSim.Region.ScriptEngine.Common</id>
		<title>OpenSim.Region.ScriptEngine.Common</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OpenSim.Region.ScriptEngine.Common"/>
				<updated>2008-01-20T19:07:30Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OpenSim.Region.ScriptEngine.Common =&lt;br /&gt;
&lt;br /&gt;
== How to implement your own script engine ==&lt;br /&gt;
Creating a new script engine for OpenSim is simple (haha).&amp;lt;br /&amp;gt;&lt;br /&gt;
What I mean by simple is that if you already have a VM (Virtual Machine) or script engine of some sort then integrating it as a OpenSim ScriptEngine plugin is simple.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===How do I get started?===&lt;br /&gt;
1. Create a new project named &amp;quot;OpenSim.Region.MySuperScriptEngine&amp;quot; (replace &amp;quot;MySuperScriptEngine&amp;quot; with the name of your scriptengine).&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Create a new class (file) named &amp;quot;ScriptEngine&amp;quot;. It must be named exactly ScriptEngine for OpenSim to use it. ScriptEngine must inherit from &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptEngine&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
3. You need to override a couple of functions. Most probably you don't want to do any special work here, so look below for a sample default file.&lt;br /&gt;
4. Create a new class (file) named &amp;quot;ScriptManager&amp;quot; that inherits from &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptManager&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
5. Your ScriptManager class needs to override two functions. One to start a script and one to stop a script.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ScriptEngine class ===&lt;br /&gt;
The main purpose of ScriptEngine class is to be able to intercept scene, for example starting with a &amp;quot;fake&amp;quot; scene instead of OpenSim's scene. You probably don't want this, so just go for the standard initialization.&amp;lt;br /&amp;gt;&lt;br /&gt;
A standard class would look like this:&amp;lt;br /&amp;gt;&lt;br /&gt;
 using System;&lt;br /&gt;
 using Nini.Config;&lt;br /&gt;
 using OpenSim.Framework.Console;&lt;br /&gt;
 using OpenSim.Region.Environment.Scenes;&lt;br /&gt;
 namespace OpenSim.Region.ScriptEngine.MySuperScriptEngine&lt;br /&gt;
 {&lt;br /&gt;
     [Serializable]&lt;br /&gt;
     public class ScriptEngine : OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptEngine&lt;br /&gt;
     {&lt;br /&gt;
         public override void Initialise(Scene scene, IConfigSource config)&lt;br /&gt;
         {&lt;br /&gt;
            InitializeEngine(scene, MainLog.Instance, true, GetScriptManager());&lt;br /&gt;
         }&lt;br /&gt;
         public override OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptManager _GetScriptManager()&lt;br /&gt;
         {&lt;br /&gt;
             return new ScriptManager(this);&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== ScriptManager class ===&lt;br /&gt;
A script is refecenced by object id &amp;quot;localID&amp;quot; (the object/prim it is inside) and script id &amp;quot;itemID&amp;quot; (the particular (unique) instance of that script). These parameters along with a string &amp;quot;Script&amp;quot; containing the script text (source code) are passed to your (overriden) start script function in your ScriptManager class.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Keeping track of active scripts is done automatically, so your job is simply to create a new script and hand it over. After that your work is done until the script is asked to stop, then you have to do a few simple tasks to remove it again.&amp;lt;br /&amp;gt;&lt;br /&gt;
Here is a sample on a minimal script startup:&lt;br /&gt;
 public override void _StartScript(uint localID, LLUUID itemID, string Script)&lt;br /&gt;
 {&lt;br /&gt;
     SceneObjectPart m_host = World.GetSceneObjectPart(localID);&lt;br /&gt;
     try&lt;br /&gt;
     {&lt;br /&gt;
         IScript CompiledScript = MySpecialCompiler.DoCompile(Script);  // Compile and return an IScript object that is the actual script&lt;br /&gt;
         CompiledScript.Source = ScriptSource;                          // Store source for recompile on script reset events&lt;br /&gt;
         SetScript(localID, itemID, CompiledScript);                    // All is ok. Add script to OpenSim's script manager. From here on its on autopilot.&lt;br /&gt;
         // Create a private instance of LSL commands (note that m_scriptEngine, m_host are from baseclass, so you don't need to change them)&lt;br /&gt;
         LSL_BuiltIn_Commands LSLB = new LSL_BuiltIn_Commands(m_scriptEngine, m_host, localID, itemID);&lt;br /&gt;
         CompiledScript.Start(LSLB);                                    // Start the script - giving it LSL commands&lt;br /&gt;
         // Fire the first start-event, this is the event run on LSL scripts when they first start&lt;br /&gt;
         m_scriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, &amp;quot;state_entry&amp;quot;, EventQueueManager.llDetectNull, new object[] { });&lt;br /&gt;
     }&lt;br /&gt;
     catch (Exception e)&lt;br /&gt;
     {&lt;br /&gt;
       // To see how you can send the compile error in-world, have a look at OpenSim.Region.ScriptEngine.DotNetEngine.ScriptManager&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And your minimal script shutdown would be:&lt;br /&gt;
 public override void _StopScript(uint localID, LLUUID itemID)&lt;br /&gt;
 {&lt;br /&gt;
     m_scriptEngine.m_LSLLongCmdHandler.RemoveScript(localID, itemID);   // Stop long command on script like timers, http requests, etc.&lt;br /&gt;
     IScript LSLBC = GetScript(localID, itemID);                         // Get the script we are stopping&lt;br /&gt;
     if (LSLBC == null)                                                  // Nothing to do? Exit.&lt;br /&gt;
         return;&lt;br /&gt;
     try&lt;br /&gt;
     {&lt;br /&gt;
         LSLBC.Exec.StopScript();                                        // Tell script to stop&lt;br /&gt;
         RemoveScript(localID, itemID);                                  // Remove script from internal memory structure&lt;br /&gt;
    }&lt;br /&gt;
     catch (Exception e)&lt;br /&gt;
     {&lt;br /&gt;
       // You probably want to log this to console or something&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===IScript interface===&lt;br /&gt;
So you have implemented the two classes described above. Now how does this connect to your JavaScript or Perl or YourCustomSuperLanguage script engine or VM?&amp;lt;br /&amp;gt;&lt;br /&gt;
You have to create a class. This class must inherit &amp;quot;OpenSim.Region.ScriptEngine.Common.IScript&amp;quot;. Inside IScript your class will have two major things: &amp;lt;br /&amp;gt;&lt;br /&gt;
1. During script start (in ScriptManager), you call yourscript.Start() and give it a LSL command module. So insite your script class where you override this Start() function you need to remember this LSL command module.&amp;lt;br /&amp;gt;&lt;br /&gt;
How you bind this LSL command module to your custom engine is totally up to you. The LSL command module contains all LSL functions, and any function you use there will affect the correct object/region/whatever. You don't need to do more than ''myLSLCommandModule.llSay(0, &amp;quot;Hello world!&amp;quot;);'' to make it work.&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Any time a LSL event is generated either by an in-world event or by for example a timer, a function in your script class needs to be executed. For this you have the &amp;quot;Exec&amp;quot; override. I suggest you have a look at &amp;quot;OpenSim.Region.ScriptEngine.Common.Executor&amp;quot; to see how this work. Basically you receive a string containing function name and the parameters for that event.&amp;lt;br /&amp;gt;&lt;br /&gt;
If you use the default Executor you need to initialize it by giving it a reference to yourself (the IScript script class). Then you need to have functions in your class matching LSL functions when it comes to both name and parameters. Example:&amp;lt;br /&amp;gt;&lt;br /&gt;
 public touch_start&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OpenSim.Region.ScriptEngine.Common</id>
		<title>OpenSim.Region.ScriptEngine.Common</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OpenSim.Region.ScriptEngine.Common"/>
				<updated>2008-01-20T18:55:34Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OpenSim.Region.ScriptEngine.Common =&lt;br /&gt;
&lt;br /&gt;
== How to implement your own script engine ==&lt;br /&gt;
Creating a new script engine for OpenSim is simple (haha).&amp;lt;br /&amp;gt;&lt;br /&gt;
What I mean by simple is that if you already have a VM (Virtual Machine) or script engine of some sort then integrating it as a OpenSim ScriptEngine plugin is simple.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===How do I get started?===&lt;br /&gt;
1. Create a new project named &amp;quot;OpenSim.Region.MySuperScriptEngine&amp;quot; (replace &amp;quot;MySuperScriptEngine&amp;quot; with the name of your scriptengine).&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Create a new class (file) named &amp;quot;ScriptEngine&amp;quot;. It must be named exactly ScriptEngine for OpenSim to use it. ScriptEngine must inherit from &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptEngine&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
3. You need to override a couple of functions. Most probably you don't want to do any special work here, so look below for a sample default file.&lt;br /&gt;
4. Create a new class (file) named &amp;quot;ScriptManager&amp;quot; that inherits from &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptManager&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
5. Your ScriptManager class needs to override two functions. One to start a script and one to stop a script.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ScriptEngine class ===&lt;br /&gt;
The main purpose of ScriptEngine class is to be able to intercept scene, for example starting with a &amp;quot;fake&amp;quot; scene instead of OpenSim's scene. You probably don't want this, so just go for the standard initialization.&amp;lt;br /&amp;gt;&lt;br /&gt;
A standard class would look like this:&amp;lt;br /&amp;gt;&lt;br /&gt;
 using System;&lt;br /&gt;
 using Nini.Config;&lt;br /&gt;
 using OpenSim.Framework.Console;&lt;br /&gt;
 using OpenSim.Region.Environment.Scenes;&lt;br /&gt;
 namespace OpenSim.Region.ScriptEngine.MySuperScriptEngine&lt;br /&gt;
 {&lt;br /&gt;
     [Serializable]&lt;br /&gt;
     public class ScriptEngine : OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptEngine&lt;br /&gt;
     {&lt;br /&gt;
         public override void Initialise(Scene scene, IConfigSource config)&lt;br /&gt;
         {&lt;br /&gt;
            InitializeEngine(scene, MainLog.Instance, true, GetScriptManager());&lt;br /&gt;
         }&lt;br /&gt;
         public override OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptManager _GetScriptManager()&lt;br /&gt;
         {&lt;br /&gt;
             return new ScriptManager(this);&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== ScriptManager class ===&lt;br /&gt;
A script is refecenced by object id &amp;quot;localID&amp;quot; (the object/prim it is inside) and script id &amp;quot;itemID&amp;quot; (the particular (unique) instance of that script). These parameters along with a string &amp;quot;Script&amp;quot; containing the script text (source code) are passed to your (overriden) start script function in your ScriptManager class.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Keeping track of active scripts is done automatically, so your job is simply to create a new script and hand it over. After that your work is done until the script is asked to stop, then you have to do a few simple tasks to remove it again.&amp;lt;br /&amp;gt;&lt;br /&gt;
Here is a sample on a minimal script startup:&lt;br /&gt;
 public override void _StartScript(uint localID, LLUUID itemID, string Script)&lt;br /&gt;
 {&lt;br /&gt;
     SceneObjectPart m_host = World.GetSceneObjectPart(localID);&lt;br /&gt;
     try&lt;br /&gt;
     {&lt;br /&gt;
         IScript CompiledScript = MySpecialCompiler.DoCompile(Script);  // Compile and return an IScript object that is the actual script&lt;br /&gt;
         CompiledScript.Source = ScriptSource;                          // Store source for recompile on script reset events&lt;br /&gt;
         SetScript(localID, itemID, CompiledScript);                    // All is ok. Add script to OpenSim's script manager. From here on its on autopilot.&lt;br /&gt;
         // Create a private instance of LSL commands (note that m_scriptEngine, m_host are from baseclass, so you don't need to change them)&lt;br /&gt;
         LSL_BuiltIn_Commands LSLB = new LSL_BuiltIn_Commands(m_scriptEngine, m_host, localID, itemID);&lt;br /&gt;
         CompiledScript.Start(LSLB);                                    // Start the script - giving it LSL commands&lt;br /&gt;
         // Fire the first start-event, this is the event run on LSL scripts when they first start&lt;br /&gt;
         m_scriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, &amp;quot;state_entry&amp;quot;, EventQueueManager.llDetectNull, new object[] { });&lt;br /&gt;
     }&lt;br /&gt;
     catch (Exception e)&lt;br /&gt;
     {&lt;br /&gt;
       // To see how you can send the compile error in-world, have a look at OpenSim.Region.ScriptEngine.DotNetEngine.ScriptManager&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And your minimal script shutdown would be:&lt;br /&gt;
 public override void _StopScript(uint localID, LLUUID itemID)&lt;br /&gt;
 {&lt;br /&gt;
     m_scriptEngine.m_LSLLongCmdHandler.RemoveScript(localID, itemID);   // Stop long command on script like timers, http requests, etc.&lt;br /&gt;
     IScript LSLBC = GetScript(localID, itemID);                         // Get the script we are stopping&lt;br /&gt;
     if (LSLBC == null)                                                  // Nothing to do? Exit.&lt;br /&gt;
         return;&lt;br /&gt;
     try&lt;br /&gt;
     {&lt;br /&gt;
         LSLBC.Exec.StopScript();                                        // Tell script to stop&lt;br /&gt;
         RemoveScript(localID, itemID);                                  // Remove script from internal memory structure&lt;br /&gt;
    }&lt;br /&gt;
     catch (Exception e)&lt;br /&gt;
     {&lt;br /&gt;
       // You probably want to log this to console or something&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OpenSim.Region.ScriptEngine.Common</id>
		<title>OpenSim.Region.ScriptEngine.Common</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OpenSim.Region.ScriptEngine.Common"/>
				<updated>2008-01-20T18:54:45Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: Explanation on how to implement your own ScriptEngine&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OpenSim.Region.ScriptEngine.Common =&lt;br /&gt;
&lt;br /&gt;
== How to implement your own script engine ==&lt;br /&gt;
Creating a new script engine for OpenSim is simple (haha).&amp;lt;br /&amp;gt;&lt;br /&gt;
What I mean by simple is that if you already have a VM (Virtual Machine) or script engine of some sort then integrating it as a OpenSim ScriptEngine plugin is simple.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===How do I get started?===&lt;br /&gt;
1. Create a new project named &amp;quot;OpenSim.Region.MySuperScriptEngine&amp;quot; (replace &amp;quot;MySuperScriptEngine&amp;quot; with the name of your scriptengine).&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Create a new class (file) named &amp;quot;ScriptEngine&amp;quot;. It must be named exactly ScriptEngine for OpenSim to use it. ScriptEngine must inherit from &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptEngine&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
3. You need to override a couple of functions. Most probably you don't want to do any special work here, so look below for a sample default file.&lt;br /&gt;
4. Create a new class (file) named &amp;quot;ScriptManager&amp;quot; that inherits from &amp;quot;OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptManager&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
5. Your ScriptManager class needs to override two functions. One to start a script and one to stop a script.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ScriptEngine ===&lt;br /&gt;
The main purpose of ScriptEngine class is to be able to intercept scene, for example starting with a &amp;quot;fake&amp;quot; scene instead of OpenSim's scene. You probably don't want this, so just go for the standard initialization.&amp;lt;br /&amp;gt;&lt;br /&gt;
A standard class would look like this:&amp;lt;br /&amp;gt;&lt;br /&gt;
 using System;&lt;br /&gt;
 using Nini.Config;&lt;br /&gt;
 using OpenSim.Framework.Console;&lt;br /&gt;
 using OpenSim.Region.Environment.Scenes;&lt;br /&gt;
 namespace OpenSim.Region.ScriptEngine.MySuperScriptEngine&lt;br /&gt;
 {&lt;br /&gt;
     [Serializable]&lt;br /&gt;
     public class ScriptEngine : OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptEngine&lt;br /&gt;
     {&lt;br /&gt;
         public override void Initialise(Scene scene, IConfigSource config)&lt;br /&gt;
         {&lt;br /&gt;
            InitializeEngine(scene, MainLog.Instance, true, GetScriptManager());&lt;br /&gt;
         }&lt;br /&gt;
         public override OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.ScriptManager _GetScriptManager()&lt;br /&gt;
         {&lt;br /&gt;
             return new ScriptManager(this);&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== ScriptManager ===&lt;br /&gt;
A script is refecenced by object id &amp;quot;localID&amp;quot; (the object/prim it is inside) and script id &amp;quot;itemID&amp;quot; (the particular (unique) instance of that script). These parameters along with a string &amp;quot;Script&amp;quot; containing the script text (source code) are passed to your (overriden) start script function in your ScriptManager class.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Keeping track of active scripts is done automatically, so your job is simply to create a new script and hand it over. After that your work is done until the script is asked to stop, then you have to do a few simple tasks to remove it again.&amp;lt;br /&amp;gt;&lt;br /&gt;
Here is a sample on a minimal script startup:&lt;br /&gt;
 public override void _StartScript(uint localID, LLUUID itemID, string Script)&lt;br /&gt;
 {&lt;br /&gt;
     SceneObjectPart m_host = World.GetSceneObjectPart(localID);&lt;br /&gt;
     try&lt;br /&gt;
     {&lt;br /&gt;
         IScript CompiledScript = MySpecialCompiler.DoCompile(Script);  // Compile and return an IScript object that is the actual script&lt;br /&gt;
         CompiledScript.Source = ScriptSource;                          // Store source for recompile on script reset events&lt;br /&gt;
         SetScript(localID, itemID, CompiledScript);                    // All is ok. Add script to OpenSim's script manager. From here on its on autopilot.&lt;br /&gt;
         // Create a private instance of LSL commands (note that m_scriptEngine, m_host are from baseclass, so you don't need to change them)&lt;br /&gt;
         LSL_BuiltIn_Commands LSLB = new LSL_BuiltIn_Commands(m_scriptEngine, m_host, localID, itemID);&lt;br /&gt;
         CompiledScript.Start(LSLB);                                    // Start the script - giving it LSL commands&lt;br /&gt;
         // Fire the first start-event, this is the event run on LSL scripts when they first start&lt;br /&gt;
         m_scriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, &amp;quot;state_entry&amp;quot;, EventQueueManager.llDetectNull, new object[] { });&lt;br /&gt;
     }&lt;br /&gt;
     catch (Exception e)&lt;br /&gt;
     {&lt;br /&gt;
       // To see how you can send the compile error in-world, have a look at OpenSim.Region.ScriptEngine.DotNetEngine.ScriptManager&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And your minimal script shutdown would be:&lt;br /&gt;
 public override void _StopScript(uint localID, LLUUID itemID)&lt;br /&gt;
 {&lt;br /&gt;
     m_scriptEngine.m_LSLLongCmdHandler.RemoveScript(localID, itemID);   // Stop long command on script like timers, http requests, etc.&lt;br /&gt;
     IScript LSLBC = GetScript(localID, itemID);                         // Get the script we are stopping&lt;br /&gt;
     if (LSLBC == null)                                                  // Nothing to do? Exit.&lt;br /&gt;
         return;&lt;br /&gt;
     try&lt;br /&gt;
     {&lt;br /&gt;
         LSLBC.Exec.StopScript();                                        // Tell script to stop&lt;br /&gt;
         RemoveScript(localID, itemID);                                  // Remove script from internal memory structure&lt;br /&gt;
    }&lt;br /&gt;
     catch (Exception e)&lt;br /&gt;
     {&lt;br /&gt;
       // You probably want to log this to console or something&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Configuration</id>
		<title>Configuration</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Configuration"/>
				<updated>2008-01-01T15:59:12Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: /* Shutdown Servers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;It is recommended that you first get OpenSim running in standalone mode, before you attempt to connect it to a grid, either your own grid or a public grid.&lt;br /&gt;
&lt;br /&gt;
A simulator actually consists of four services, known as UGAS which stand for User, Grid, Asset &amp;amp; Simulator. They are started in that order.&lt;br /&gt;
&lt;br /&gt;
A simulator running in its default standalone mode has all the services self-contained, but they are very modest. This means any first/last/password works. It also means inventory is all local with no region or grid-wide connections.&lt;br /&gt;
&lt;br /&gt;
A simulator running as a local grid runs all four services on the same computer. Multiple sims can be run, across-region crossing including teleporting and a set of inventory items that are within this local grid.&lt;br /&gt;
&lt;br /&gt;
A simulator running as part of a public grid runs only OpenSim.exe and the other three services are running on a server common to many regions. This also means that understanding the needed UUID, X,Y location, server handshake passwords, master avatar first/last/password and a couple of other settings. These are not difficult, but do require a little care in setting up.&lt;br /&gt;
&lt;br /&gt;
=Command Line arguments passed to OpenSim.exe=&lt;br /&gt;
&lt;br /&gt;
OpenSim.exe responds to various command line arguments. These include &amp;quot;-inifile&amp;quot;, &amp;quot;-configfile&amp;quot;, &amp;quot;-gridmode&amp;quot;, &amp;quot;-physics&amp;quot;, &amp;quot;-config&amp;quot; &amp;amp; &amp;quot;-noverbose&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
When starting OpenSim in either Windows or Linux, one can add &amp;quot;-physics=OpenDynamicsEngine&amp;quot; to run the OpenDynamicsEngine instead of basicphysics. &lt;br /&gt;
&lt;br /&gt;
Most users in standalone mode will not add any command line arguments. For local grid or public grid, the &amp;quot;-gridmode=true&amp;quot; is usually the only argument used. The rest are for more advanced configuration.&lt;br /&gt;
&lt;br /&gt;
=OpenSim configuration file=&lt;br /&gt;
The simulator configuration is managed using a file called [[OpenSim.ini]]. This file is used regardless of whether the sim is running in standalone or grid mode. Detailed information on the options available for setttings in this file can be found [[OpenSim.ini|here]].&lt;br /&gt;
=Standalone mode=&lt;br /&gt;
&lt;br /&gt;
When you start OpenSim in standalone mode, it will ask you several question at the console. The first set of prompts that start with &amp;quot;NETWORK SERVERS INFO&amp;quot;, you can just hit return to accept the defaults if you will be running in standalone mode.&lt;br /&gt;
&lt;br /&gt;
The prompts that start with &amp;quot;DEFAULT REGION CONFIG&amp;quot; are where you need to start paying attention. Some are self-explanatory. Here are explanations for the others:&lt;br /&gt;
&lt;br /&gt;
* Grid Location. OpenSim regions can be placed anywhere on a 65536 by 65536 grid. In standalone mode, it is safe to leave these X and Y locations at their defaults.&lt;br /&gt;
&lt;br /&gt;
* Filename for local storage. Safe to leave at default.&lt;br /&gt;
&lt;br /&gt;
* Internal IP address; This should always be 0.0.0.0&lt;br /&gt;
&lt;br /&gt;
* Internal IP port for incoming UDP client connection. You can make this any port you want, but it is safe to leave at the default 9000.&lt;br /&gt;
&lt;br /&gt;
* External host name. If you will only be attaching to your sim from a SecondLife client on the same machine, you can leave this at the default 127.0.0.1. If you will be wanting to connect to it from a client on another machine, this should be the IP address or hostname of the machine you are running this sim on.&lt;br /&gt;
&lt;br /&gt;
To connect to your new sim, start up secondlife with the following command line switches: &lt;br /&gt;
&lt;br /&gt;
 -loginuri http://127.0.0.1:9000/&lt;br /&gt;
&lt;br /&gt;
This assumes you are running the secondlife client on the same box. If you are running it on a separate box, substitute the IP address of your sim machine.&lt;br /&gt;
&lt;br /&gt;
To create a user:&lt;br /&gt;
type &amp;quot;create user &amp;lt;first&amp;gt; &amp;lt;last&amp;gt; &amp;lt;password&amp;gt; &amp;lt;x_loc&amp;gt; &amp;lt;y_loc&amp;gt;&amp;quot; in the server console&lt;br /&gt;
&lt;br /&gt;
=Grid mode=&lt;br /&gt;
&lt;br /&gt;
You want to run your own grid. Great! Assuming that you already got your sim running in standalone mode, here is what you need to do:&lt;br /&gt;
&lt;br /&gt;
1. Current builds of OpenSim grid mode are using mysql to store the grid information. You must have this installed and configured if you want to run your own grid. See [[mysql-config]] for more information.&lt;br /&gt;
&lt;br /&gt;
2. The servers should be started in a certain order. UGAS: UserServer, GridServer, AssetServer, InventoryServer, Sim. These are all found in the bin directory. In windows, you can just double-click on the executables to start them. In linux, you will probably have to start them with mono. The executable names are:&lt;br /&gt;
&lt;br /&gt;
 OpenSim.Grid.UserServer.exe&lt;br /&gt;
 OpenSim.Grid.GridServer.exe&lt;br /&gt;
 OpenSim.Grid.AssetServer.exe&lt;br /&gt;
 OpenSim.Grid.InventoryServer.exe&lt;br /&gt;
 OpenSim.exe&lt;br /&gt;
&lt;br /&gt;
3. Start the UserServer. If you will be running the GridServer on the same box, hit enter to accept the defaults, until it gives you the prompt &lt;br /&gt;
&lt;br /&gt;
 OpenUser#&lt;br /&gt;
&lt;br /&gt;
This is the main prompt for the user server. If you will be running the GridServer on another box, change the Default Grid Server URI as appropriate.&lt;br /&gt;
&lt;br /&gt;
4. Start the GridServer. Again, you can hit return at all the prompts if you are running them all on the same machine. If not, change the URIs for the Asset Server and User server to point to where you are running them. You will finally get to the console prompt for the GridServer which looks like this:&lt;br /&gt;
&lt;br /&gt;
 OpenGrid#&lt;br /&gt;
&lt;br /&gt;
5. Start the AssetServer. The console prompt for this server will be:&lt;br /&gt;
&lt;br /&gt;
 OpenAsset#&lt;br /&gt;
&lt;br /&gt;
6. Start the InventoryServer. The console prompt for this server will be:&lt;br /&gt;
&lt;br /&gt;
 INVENTORY#&lt;br /&gt;
&lt;br /&gt;
7. If you are running all of these servers on the same box, which would be the normal configuration. You should be ready to start up your sim. Since the OpenSim.exe starts up by default in standalone mode, you will need to give it a command line switch to tell it to use gridmode instead:&lt;br /&gt;
&lt;br /&gt;
 OpenSim.exe -gridmode=true&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 mono OpenSim.exe -gridmode=true&lt;br /&gt;
&lt;br /&gt;
With any luck, everything will come up without too many errors.&lt;br /&gt;
&lt;br /&gt;
8. Go to the UserServer console, and type 'create user' to create a new avatar. It will prompt you for the name and password, and the X and Y of the sim that should be his home location. Use 1000 and 1000, or wherever you told your sim to live when you brought it up in standalone mode.&lt;br /&gt;
&lt;br /&gt;
At the console of any of these servers, you should be able to type 'help' to get a list of commands.&lt;br /&gt;
&lt;br /&gt;
You should now be able to connect to your new grid with your secondlife client. You need to tell your client to point at the UserServer rather than directly at the sim, though:&lt;br /&gt;
&lt;br /&gt;
 secondlife -loginuri http://127.0.0.1:8002/&lt;br /&gt;
&lt;br /&gt;
8002 is the default port for the UserServer, and that IP address should be changed to the server you are running the UserServer on, if they are not all on the same box.&lt;br /&gt;
&lt;br /&gt;
Happy OpenSimming!&lt;br /&gt;
&lt;br /&gt;
''Note: if you are using Windows Vista, remeber to start servers as Admin. If not it will prompt you an error in console like &amp;quot;Error - Access denied&amp;quot;&lt;br /&gt;
''&lt;br /&gt;
=== Technical Addendum ===&lt;br /&gt;
For running multiple regions on the same box, you simply make multiple copies of the 'default.xml' file inside the &amp;lt;tt&amp;gt;bin/Regions/&amp;lt;/tt&amp;gt; directory.  You can do this using the script &amp;lt;tt&amp;gt;make.php&amp;lt;/tt&amp;gt; in &amp;lt;tt&amp;gt;share/regions&amp;lt;/tt&amp;gt;, or you can generate the files by hand.&lt;br /&gt;
&lt;br /&gt;
If you want to create the files by hand, first copy the default.xml file in the &amp;lt;tt&amp;gt;bin/Regions&amp;lt;/tt&amp;gt; directory, and name them anything you want (I name mine x.y.xml, where x znd y are the grid coords.)&lt;br /&gt;
&lt;br /&gt;
Open each xml file and edit the uuid (each must be unique, a generator can be found at  [http://www.famkruithof.net/uuid/uuidgen uuidgen webpage]), region name, x &amp;amp; y positions, datastore (if you are using the prim thing) and internal ip port. EACH OF THESE MUST BE UNIQUE!&lt;br /&gt;
&lt;br /&gt;
Once you have 2 or more xml files in the regions folder, running a ''single copy'' of &amp;lt;tt&amp;gt;OpenSim.exe&amp;lt;/tt&amp;gt; will boot all of your sims! If you come across any errors, there is most likely an error in the xml files.&lt;br /&gt;
&lt;br /&gt;
=Attaching your sim to someone else's grid=&lt;br /&gt;
&lt;br /&gt;
To set up the simulation server (i.e., &amp;lt;tt&amp;gt;OpenSim.exe&amp;lt;/tt&amp;gt;) to connect to an external grid, you should edit the &amp;lt;tt&amp;gt;OpenSim.ini&amp;lt;/tt&amp;gt; file in the &amp;lt;tt&amp;gt;bin&amp;lt;/tt&amp;gt; directory.  In that file, there is a &amp;lt;tt&amp;gt;[Network]&amp;lt;/tt&amp;gt; section with URLs for the grid, user, and asset servers, as well as send and receive keys (for a basic level of security).  The addresses and send/receive keys will vary depending on the grid you are connecting to, and the grid operator should tell you what values to use.&lt;br /&gt;
&lt;br /&gt;
The other file you may have to change is in your &amp;lt;tt&amp;gt;bin/Regions&amp;lt;/tt&amp;gt; directory. This is where your individual region config files are. If you only have one region, it will by default be called &amp;lt;tt&amp;gt;default.xml&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This can be edited with any text editor. The grid owner may tell you what X and Y location you can place your sim at (you can't have multiple sims at the smae location on the grid). If so, the fields you will need to change in this file are &amp;lt;tt&amp;gt;sim_location_x&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;sim_location_y&amp;lt;/tt&amp;gt;.  And the &amp;lt;tt&amp;gt;external_host_name&amp;lt;/tt&amp;gt; should be set to the hostname or IP address of your simulation server (i.e., the machine that is running &amp;lt;tt&amp;gt;OpenSim.exe&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
A list of public grids that you can attach your sim to is at [[OpenSim: Grids]]&lt;br /&gt;
&lt;br /&gt;
=Automate Grid Startup=&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
Create a file called StartGrid.BAT:&lt;br /&gt;
  start OpenSim.Grid.UserServer.exe&lt;br /&gt;
  sleep 3&lt;br /&gt;
  start OpenSim.Grid.GridServer.exe&lt;br /&gt;
  sleep 3&lt;br /&gt;
  start OpenSim.Grid.AssetServer.exe&lt;br /&gt;
  sleep 3&lt;br /&gt;
  start OpenSim.Grid.InventoryServer.exe&lt;br /&gt;
  sleep 3&lt;br /&gt;
  start OpenSim.exe -gridmode=true&lt;br /&gt;
&lt;br /&gt;
PS! Check that you have sleep command installed, I'm unsure if all Windows versions have that.&amp;lt;br&amp;gt;&lt;br /&gt;
This knowledgebase article describes how to add a batch file to startup of Windows (before logon).&amp;lt;br&amp;gt;&lt;br /&gt;
[http://support.microsoft.com/kb/q243486/ http://support.microsoft.com/kb/q243486/]&amp;lt;br&amp;gt;&lt;br /&gt;
Note that you have to start all applications and answer the configuration questions once before adding it to any startup.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you start the server before logon then there will be no window to close if you want to shut down the server, so you can create a &amp;quot;StopGrid.BAT&amp;quot; with:&lt;br /&gt;
 taskkill /FI &amp;quot;IMAGENAME eq OpenSim.*&amp;quot;&lt;br /&gt;
 sleep 3&lt;br /&gt;
 taskkill /FI &amp;quot;IMAGENAME eq OpenSim.*&amp;quot;&lt;br /&gt;
 sleep 3&lt;br /&gt;
 taskkill /F /FI &amp;quot;IMAGENAME eq OpenSim.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''(Do they have to be shut down in any particular order?)''&lt;br /&gt;
&lt;br /&gt;
==Linux/Mac OS X==&lt;br /&gt;
&lt;br /&gt;
===Use Screen Command===&lt;br /&gt;
Use the screen command to automate startup&lt;br /&gt;
&lt;br /&gt;
==== Setup screen command and setup shell file====&lt;br /&gt;
screen install:&lt;br /&gt;
&lt;br /&gt;
Linux&lt;br /&gt;
 apt-get install screen&lt;br /&gt;
Mac OS X: Download either MacPorts, http://www.macports.org/, or Fink, http://www.finkproject.org/ to download *nix packages&lt;br /&gt;
MacPorts&lt;br /&gt;
 sudo port install screen&lt;br /&gt;
Fink&lt;br /&gt;
 Need command line for Fink.&lt;br /&gt;
&lt;br /&gt;
Create file runsim.sh&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 cd opensim/bin&lt;br /&gt;
 sleep 3&lt;br /&gt;
 screen -S UserServer -d -m  mono OpenSim.Grid.UserServer.exe&lt;br /&gt;
 sleep 3&lt;br /&gt;
 screen -S GridServer -d -m mono OpenSim.Grid.GridServer.exe&lt;br /&gt;
 sleep 3&lt;br /&gt;
 screen -S AssetServer -d -m mono OpenSim.Grid.AssetServer.exe&lt;br /&gt;
 sleep 3&lt;br /&gt;
 screen -S InventoryServer -d -m mono OpenSim.Grid.InventoryServer.exe&lt;br /&gt;
 sleep 3&lt;br /&gt;
 screen -S OpenSim -d -m mono OpenSim.exe -gridmode=true&lt;br /&gt;
&lt;br /&gt;
====Startup and access servers====&lt;br /&gt;
 ./runsim.sh&lt;br /&gt;
&lt;br /&gt;
If you have permission issues &lt;br /&gt;
 chmod 755 runsim.sh&lt;br /&gt;
&lt;br /&gt;
To see a list of the servers in screen:&lt;br /&gt;
 screen -ls or screen -list&lt;br /&gt;
&lt;br /&gt;
Output will look like the following:&lt;br /&gt;
 There are screens on:&lt;br /&gt;
      8419.OpenSim  (Detached)&lt;br /&gt;
      8403.InventoryServer  (Detached)&lt;br /&gt;
      8378.AssetServer  (Detached)&lt;br /&gt;
      8360.GridServer  (Detached)&lt;br /&gt;
      8347.UserServer  (Detached)&lt;br /&gt;
&lt;br /&gt;
To access server&lt;br /&gt;
 screen -r 8419.OpenSim&lt;br /&gt;
 screen -r 8403.InventoryServer&lt;br /&gt;
 etc.&lt;br /&gt;
&lt;br /&gt;
To exit screen, leaving server running, and to return to shell&lt;br /&gt;
 ctrl-a d&lt;br /&gt;
&lt;br /&gt;
====Shutdown Servers====&lt;br /&gt;
Either manually access each sceen&lt;br /&gt;
 screen -r 8419.OpenSim&lt;br /&gt;
 shutdown&lt;br /&gt;
&lt;br /&gt;
Or use&lt;br /&gt;
 killall mono&lt;br /&gt;
Or&lt;br /&gt;
 for i in `ps afxu | grep -i &amp;quot;mono.*OpenSim&amp;quot; | grep -v grep | awk {'print $2'}`; do kill $i; done&lt;br /&gt;
&lt;br /&gt;
Need to see if there is a way to use a shell script using screen to shutdown servers&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/FAQ</id>
		<title>FAQ</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/FAQ"/>
				<updated>2008-01-01T15:45:34Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: /* Exceptions on the Console */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A list of frequently asked questions.  Please add anything you think is reasonable here.&lt;br /&gt;
&lt;br /&gt;
= What is OpenSim? =&lt;br /&gt;
&lt;br /&gt;
OpenSim is a platform for operating a virtual world, and supports multiple independent regions connecting to a single centralized grid.  This is somewhat similar to the web, where anyone can run their own web server, tied together through the internet.  It can also be used to create a private grid, analogous to a private intranet.&lt;br /&gt;
&lt;br /&gt;
=== What is a region? ===&lt;br /&gt;
&lt;br /&gt;
A region is what you see when you log into OpenSim.  It is the physical place (well, virtually physical) where avatars move and interact.  It is a square patch of land which may contain an island, mountains, a plain, buildings, etc., or just an ocean.&lt;br /&gt;
&lt;br /&gt;
=== What is the grid? ===&lt;br /&gt;
&lt;br /&gt;
The grid is the level that organizes the regions and their positions in the world, and handles things that need to exist across regions, such as a user's inventory.  You can think of it as similar to the world map.&lt;br /&gt;
&lt;br /&gt;
=== What does ... mean? ===&lt;br /&gt;
&lt;br /&gt;
See [[OpenSim:TechRef]] for definitions of some terms commonly used in OpenSim.&lt;br /&gt;
&lt;br /&gt;
= Building OpenSim =&lt;br /&gt;
&lt;br /&gt;
=== I can't find any build files or solution files ===&lt;br /&gt;
&lt;br /&gt;
* If you're on Windows, run &amp;lt;tt&amp;gt;runprebuild.bat&amp;lt;/tt&amp;gt; - on Linux/Mac/FreeBSD, run &amp;lt;tt&amp;gt;runprebuild.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== VS2005 won't open the .sln file ===&lt;br /&gt;
&lt;br /&gt;
* Try running VS2005 C#. You are probably running VS2005 C++. This is a C# project.&lt;br /&gt;
&lt;br /&gt;
= Running OpenSim =&lt;br /&gt;
&lt;br /&gt;
=== Running OpenSim.exe from a Cygwin shell has access denied for some dll's ===&lt;br /&gt;
&lt;br /&gt;
* Do a '&amp;lt;tt&amp;gt;cd bin&amp;lt;/tt&amp;gt;' followed by '&amp;lt;tt&amp;gt;chmod a+x *&amp;lt;/tt&amp;gt;' to make all dll files executable.&lt;br /&gt;
&lt;br /&gt;
=== I cannot start my sim ===&lt;br /&gt;
&lt;br /&gt;
* See [[OpenSim: Running]].&lt;br /&gt;
&lt;br /&gt;
= Configuring OpenSim =&lt;br /&gt;
&lt;br /&gt;
First, read [[OpenSim: Configuration]].&lt;br /&gt;
&lt;br /&gt;
=== Where can I get a new UUID for my sim config? ===&lt;br /&gt;
&lt;br /&gt;
Use '&amp;lt;tt&amp;gt;uuidgen&amp;lt;/tt&amp;gt;' or generate one on the [http://www.famkruithof.net/uuid/uuidgen uuidgen webpage].&lt;br /&gt;
&lt;br /&gt;
=== Can I run multiple regions with OpenSim? ===&lt;br /&gt;
&lt;br /&gt;
Yes.  To do this add another xml file to &amp;lt;tt&amp;gt;bin/Regions&amp;lt;/tt&amp;gt;. You need to create a new 'sim_UUID' (see above) and change the 'sim_name', 'internal_ip_port', 'sim_location_x' and 'sim_location_y' (and anything else you wish to change). The script &amp;lt;tt&amp;gt;share/regions/make.php&amp;lt;/tt&amp;gt; may be useful for generating region files automatically.  Once the new region files have been added to &amp;lt;tt&amp;gt;bin/Regions&amp;lt;/tt&amp;gt;, restart OpenSim.&lt;br /&gt;
&lt;br /&gt;
Note that &amp;lt;tt&amp;gt;sim_location_x&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;sim_location_y&amp;lt;/tt&amp;gt; should be in adjacent regions, so you will be able to run back and forth between regions.&lt;br /&gt;
&lt;br /&gt;
* See [[OpenSim: Configuration]].&lt;br /&gt;
&lt;br /&gt;
=== How do I enable prim storage? ===&lt;br /&gt;
&lt;br /&gt;
* In the &amp;lt;tt&amp;gt;OpenSim.ini&amp;lt;/tt&amp;gt; file, change the &amp;lt;tt&amp;gt;storage_plugin&amp;lt;/tt&amp;gt; entry to &lt;br /&gt;
 storage_plugin = OpenSim.DataStore.MonoSqlite.dll&lt;br /&gt;
or&lt;br /&gt;
 storage_plugin = OpenSim.Framework.Data.MySQL.dll&lt;br /&gt;
&lt;br /&gt;
You will also need to provide connection details in a &amp;lt;tt&amp;gt;storage_connection_string&amp;lt;/tt&amp;gt; attribute - see the &amp;lt;tt&amp;gt;OpenSim.ini.example&amp;lt;/tt&amp;gt; file in the bin directory of the OpenSim package for more information.&lt;br /&gt;
&lt;br /&gt;
=== There are a bunch of textures in the library, but they are all 0x0? What's wrong? ===&lt;br /&gt;
To enable these extra textures for your use, you must delete your &amp;lt;tt&amp;gt;regionassets.yap&amp;lt;/tt&amp;gt; file, and restart your sim. WARNING: IF YOU DO THIS, YOU WILL LOSE ANY ASSETS (textures, scripts, animations, etc) THAT YOU HAVE UPLOADED!&lt;br /&gt;
&lt;br /&gt;
=== What databases can be used with OpenSim? ===&lt;br /&gt;
For running in standalone mode, OpenSim provides database plugins for both sqlite and MySQL.  There is also an MSSQL plugin, though this has not been thoroughly tested.  Sqlite requires no user configuration to set up while MySQL requires some minimal user configuration (see [[mysql-config]]).&lt;br /&gt;
&lt;br /&gt;
Running in grid mode is usually done using the MySQL database.  Sqlite and MSSQL may work but have not been thoroughly tested.&lt;br /&gt;
&lt;br /&gt;
=== Can I export all my prims, for safe keeping? ===&lt;br /&gt;
&lt;br /&gt;
Yes.  From the console type &lt;br /&gt;
 save_xml yourbackupfile&lt;br /&gt;
&lt;br /&gt;
You can later load those prims with&lt;br /&gt;
 load_xml yourbackupfile&lt;br /&gt;
&lt;br /&gt;
This is also a good way to dump and clone prims from one OpenSim server to another.&lt;br /&gt;
&lt;br /&gt;
= Something Has Gone Wrong! =&lt;br /&gt;
&lt;br /&gt;
=== I get a timeout during region handshake ===&lt;br /&gt;
&lt;br /&gt;
* Do you have the correct IP in your Regions\* config files?&lt;br /&gt;
* Do you have multiple interfaces on the server running OpenSim? OpenSim will not bind outgoing UDP packets to a specific IP, its default IP to reach you will be what the Region answers UDP with. If you have configured the region for another IP you will get a timeout during connect.&lt;br /&gt;
&lt;br /&gt;
=== I cannot connect to my OpenSim ===&lt;br /&gt;
&lt;br /&gt;
* See [[OpenSim: Connecting]].&lt;br /&gt;
&lt;br /&gt;
=== I can connect but cannot move ===&lt;br /&gt;
&lt;br /&gt;
If the client connects but the avatar can only spin in place and not move, then the sim is not correctly configured. It completed the initial login function, but packets are not being exchanged between the client and the sim, probably due to a network configuration error on the sim.&lt;br /&gt;
&lt;br /&gt;
* See [[OpenSim: Configuration]].&lt;br /&gt;
&lt;br /&gt;
=== From time to time my Avatar seems to get stuck ===&lt;br /&gt;
Right now there is a bottle neck when syncing prims off to the database.  This will cause small (5 - 10 second) apparent hangs of the Avatar, but it will recover fine once the data is synced.  It is a known issue based on legacy architecture of some of the data storage code.  We hope this will be removed soon.&lt;br /&gt;
&lt;br /&gt;
=== I have problems with viewing the worldmap ===&lt;br /&gt;
&lt;br /&gt;
* This may happen when running OpenSim on a Linux server, both in grid or standalone mode.&lt;br /&gt;
* Symptoms: when opening the worldmap window in the SL-viewer, the sims are not displayed grahically in the worldmap, the server console shows some error related to openjpeg, the current session freezes...&lt;br /&gt;
* Reason: your svn source trunk does not have the correct (or whatever...) &amp;lt;tt&amp;gt;libopenjpeg-libsl&amp;lt;/tt&amp;gt; library.&lt;br /&gt;
* Solution: get the newest code from libsecondlife (&amp;lt;tt&amp;gt;svn co svn://opensecondlife.org/libsl/trunk&amp;lt;/tt&amp;gt;), '&amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt;' manually in the subdir &amp;lt;tt&amp;gt;openjpeg-libsl&amp;lt;/tt&amp;gt;, and copy the resulting &amp;lt;tt&amp;gt;libopenjpeg-libsl-2.1.2.0.so&amp;lt;/tt&amp;gt; into your OpenSim &amp;lt;tt&amp;gt;bin&amp;lt;/tt&amp;gt; subdir, overwriting the existing one.&lt;br /&gt;
* Recompile &amp;amp; restart OpenSim.&lt;br /&gt;
&lt;br /&gt;
= Exceptions on the Console =&lt;br /&gt;
This is a list of Exceptions that you may see on the console, what they mean, and if they are a problem.&lt;br /&gt;
&lt;br /&gt;
=== System.DllNotFoundException: ./libopenjpeg-libsl-2.1.2.0.so ===&lt;br /&gt;
 Failed generating terrain map: System.DllNotFoundException: ./libopenjpeg-libsl-2.1.2.0.so&lt;br /&gt;
 at (wrapper managed-to-native) OpenJPEGNet.OpenJPEG:LibslAllocDecoded OpenJPEGNet.OpenJPEG/LibslImage&amp;amp;)&lt;br /&gt;
 at OpenJPEGNet.OpenJPEG.Encode (System.Byte[] decoded, Int32 width, Int32 height, Int32 components, Boolean lossless) [0x00000]&lt;br /&gt;
 at OpenJPEGNet.OpenJPEG.EncodeFromImage (System.Drawing.Bitmap bitmap, Boolean lossless) [0x00000]&lt;br /&gt;
 at OpenSim.Region.Terrain.TerrainEngine.ExportJpegImage (System.String gradientmap) [0x00000]&lt;br /&gt;
&lt;br /&gt;
You are on Linux, and the native lib libopenjpeg-libsl-2.1.2.0.so is not compatible with your system for one of the following reasons:&lt;br /&gt;
* You have an old processor (libopenjpeg has been compiled with optimizations)&lt;br /&gt;
* You are running in 64bit mode (none of the native libs are built for 64bit)&lt;br /&gt;
&lt;br /&gt;
You can rebuild your own libopenjpeg from source, or run in a compatible environment.&lt;br /&gt;
You can do this by:&lt;br /&gt;
 svn co svn://opensecondlife.org/libsl/trunk libsl&lt;br /&gt;
 cd libsl/openjpeg-libsl/&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
then copy libopenjpeg-libsl-2.1.2.0.so into OpenSim bin-folder.&lt;br /&gt;
&lt;br /&gt;
= OpenSim in the Wild =&lt;br /&gt;
&lt;br /&gt;
=== Are there test servers running OpenSim I can connect to? ===&lt;br /&gt;
&lt;br /&gt;
Yes.  Check out http://www.deepgrid.com, http://osgrid.org&lt;br /&gt;
&lt;br /&gt;
There are also often many private servers up for testing.  Hang out on the IRC channel (Freenode #opensim), and troll for URI's.&lt;br /&gt;
&lt;br /&gt;
=== Can I teleport from the Linden Lab Second Life grid to my Sim? ===&lt;br /&gt;
&lt;br /&gt;
No, OpenSim islands cannot connect to the Linden Lab grid.&lt;br /&gt;
&lt;br /&gt;
= Terrain Tidbits =&lt;br /&gt;
=== What programs can I use to create terrains for OpenSim? ===&lt;br /&gt;
If you are after simple terrain files (jpg, gif, etc), you can use Photoshop or any number of freeware programs, like [http://www.gimp.org/ Gimp]. If you want more complex terrains, you will need programs that output to standard 3d raw format (aka r32 or r64). [http://www.bundysoft.com/L3DT/ L3DT] and [http://www.planetside.co.uk/terragen/ Terragen] are two of the top commercial programs for this. (anyone know of a freeware one?), or you could, with some practice, use [http://www.blender.org/ Blender]. The free version of L3DT can make terrains up to 2048x2048 in size, or 8x8 regions.&lt;br /&gt;
&lt;br /&gt;
=== Where do I put the files for my terrains? ===&lt;br /&gt;
This one is actually pretty simple, but first the 'hard' answer: anywhere in the PATH will work. Lost? yeah, I was too, so... just drop the file into the &amp;lt;tt&amp;gt;bin&amp;lt;/tt&amp;gt; directory (right where your &amp;lt;tt&amp;gt;OpenSim.exe&amp;lt;/tt&amp;gt; file is).&lt;br /&gt;
&lt;br /&gt;
=== How do I change the terrain for a group of sims? ===&lt;br /&gt;
First, the file must be in f32 (or f64?) format. This is easy to do with L3DT's export feature. (Use the RAW format and set the options to &amp;lt;tt&amp;gt;Y flipped = true&amp;lt;/tt&amp;gt; and at the bottom, change it to read 'float' instead of 'ushort'). It also needs to be a file that will cover each sim in a 256x256 layer (so, for 2x2 regions, you need a 512x512 file).&lt;br /&gt;
&lt;br /&gt;
Then, once you have it saved, on the &amp;lt;tt&amp;gt;OpenSim.exe&amp;lt;/tt&amp;gt; console, type in:&lt;br /&gt;
&lt;br /&gt;
 terrain load-tile f32 &amp;lt;filename&amp;gt; &amp;lt;image X&amp;gt; &amp;lt;image y&amp;gt; &amp;lt;bottomleftsim X&amp;gt; &amp;lt;bottomleftsim y&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, I run a square of 4 sims in a 2x2 pattern. I started my sim placement at 0, 0 and ended at 1, 1. my line reads:&lt;br /&gt;
&lt;br /&gt;
 terrain load-tile f32 simalpha.raw 512 512 0 0&lt;br /&gt;
&lt;br /&gt;
Next, before you log in, you may want to go to type in:&lt;br /&gt;
&lt;br /&gt;
 terrain multiply 0.4&lt;br /&gt;
&lt;br /&gt;
This should scale it down from the nearly 300 meters altitude I ran into to something a little more reasonable for the minimap.&lt;br /&gt;
&lt;br /&gt;
=== How do I load a terrain file on startup? ===&lt;br /&gt;
Edit the file &amp;lt;tt&amp;gt;startup_commands.txt&amp;lt;/tt&amp;gt; in the bin directory and add the above commands &amp;quot;&amp;lt;tt&amp;gt;terrain load-tile ...&amp;lt;/tt&amp;gt;&amp;quot; and &amp;quot;&amp;lt;tt&amp;gt;terrain multiply ...&amp;lt;/tt&amp;gt;&amp;quot; one per line.&lt;br /&gt;
&lt;br /&gt;
Terrain Tidbits brought to you by Tilde, with a few questions in IRC :) - [[User:Tildeampersand|Tilde]] 10:32, 15 August 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
=== How do I import into OpenSim the terrain shape of my Second Life sim? ===&lt;br /&gt;
&lt;br /&gt;
Use the command&lt;br /&gt;
&lt;br /&gt;
 terrain load&lt;br /&gt;
&lt;br /&gt;
Watch [http://archimedix.wordpress.com/2007/11/26/opensim/ this video] for a step-by-step tutorial.&lt;br /&gt;
&lt;br /&gt;
= In World Questions =&lt;br /&gt;
&lt;br /&gt;
=== Does in world scripting work yet? ===&lt;br /&gt;
&lt;br /&gt;
Not fully implemented, but there is a lot of work going on here.  Please see [[LSL Status]] for the latest info.&lt;br /&gt;
&lt;br /&gt;
=== Why do I walk through objects? ===&lt;br /&gt;
&lt;br /&gt;
Basicphysics doesn't support collisions between objects (just between you and the ground).  There is active work on other physics engines for OpenSim, but these are quite experimental at this point, so not considered supported.&lt;br /&gt;
&lt;br /&gt;
=== Can I customize my avatar? ===&lt;br /&gt;
&lt;br /&gt;
Yes.  In order to do this:&lt;br /&gt;
* Click the Inventory Button&lt;br /&gt;
* Create -&amp;gt; New Clothes -&amp;gt; Shirt, Pants, etc&lt;br /&gt;
* Create -&amp;gt; New Body Parts -&amp;gt; Hair, Shape, etc&lt;br /&gt;
* Edit those from your inventory&lt;br /&gt;
* Wear them&lt;br /&gt;
&lt;br /&gt;
Your avatar doesn't always face a nice direction for doing this, so you'll need to use the camera operations to see your face for some of the modifications.  This is a known issue, will be fixed in the future.&lt;br /&gt;
&lt;br /&gt;
Also, you'll need to rewear you parts once you first join the environment.  Right now default appearance is always &amp;quot;Ruth&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Grid Mode =&lt;br /&gt;
Note: Grid Mode isn't officially supported yet.  As such, you are pretty much on your own if you are trying to get OpenSim up and running in Grid Mode.&lt;br /&gt;
&lt;br /&gt;
=== I start the sim and it doesn't connect to any grid ===&lt;br /&gt;
&lt;br /&gt;
When OpenSim is first started, it needs configuration.&lt;br /&gt;
&lt;br /&gt;
* See [[OpenSim: Configuration]].&lt;br /&gt;
&lt;br /&gt;
=== I start the OpenSim.Grid.UserServer.exe and it gives an error ===&lt;br /&gt;
&lt;br /&gt;
If this error is access denied for &amp;lt;tt&amp;gt;username@localhost&amp;lt;/tt&amp;gt;, the mysql database is not set up.&lt;br /&gt;
&lt;br /&gt;
It will print some text and wait for input - either an enter to accept a default value, or another value you can supply.&lt;br /&gt;
&lt;br /&gt;
* See [[OpenSim: Configuration]].&lt;br /&gt;
&lt;br /&gt;
=== I want to run my own Local Grid but one or more servers fail to start ===&lt;br /&gt;
&lt;br /&gt;
* Be sure that you're able to start &amp;lt;tt&amp;gt;OpenSim.exe&amp;lt;/tt&amp;gt; alone, in Standalone mode, and to be able to login.&lt;br /&gt;
* Start the servers in the correct UGAS order and answer the questions as recommended (see [[OpenSim: Configuration]]).&lt;br /&gt;
* Set all the external URI's to the correct IP: 127.0.0.1 if running on your local machine, or aaa.bbb.ccc.ddd if running on a remote server.&lt;br /&gt;
* Check again all the &amp;lt;tt&amp;gt;*.xml&amp;lt;/tt&amp;gt; configuration files for any wrong settings or typing errors...!&lt;br /&gt;
* Don't forget to connect with your SL-viewer to port 8002 (Grid User-Server) instead of 9000 (Standalone OpenSim-Server).&lt;br /&gt;
* Delete all &amp;lt;tt&amp;gt;*.xml&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;*.yap&amp;lt;/tt&amp;gt; files in the &amp;lt;tt&amp;gt;bin&amp;lt;/tt&amp;gt; directory if you want to run a full reconfiguration again.&lt;br /&gt;
&lt;br /&gt;
=== After the shiny new grid is running, what is next? ===&lt;br /&gt;
* Make sure one can stop/restart UGA &amp;amp;S (sims). Check out any ordering issues of stop/restart UGA w/o stop/restart sim(s).&lt;br /&gt;
* Make sure one can add/delete both a region and a user from the database.&lt;br /&gt;
* Make sure it runs overnight and check it each morning by logging into 1 or 2 key sims.&lt;br /&gt;
* '&amp;lt;tt&amp;gt;tail -f userserver.log&amp;lt;/tt&amp;gt;' and watch/understand the login process.&lt;br /&gt;
* Make sure when you logoff your system, you can log back on and get control of the UGAS consoles.&lt;br /&gt;
&lt;br /&gt;
= How to ask for help =&lt;br /&gt;
&lt;br /&gt;
=== Before asking for help... ===&lt;br /&gt;
&lt;br /&gt;
* Search the wiki and web before asking for help.&lt;br /&gt;
* Check your configuration files for any obvious defects.&lt;br /&gt;
* Check that you're starting up the processes correctly.&lt;br /&gt;
* See [[OpenSim: Install]].&lt;br /&gt;
* See [[OpenSim: Configuration]].&lt;br /&gt;
* See [[OpenSim: Running]].&lt;br /&gt;
* See [[OpenSim: Connecting]].&lt;br /&gt;
&lt;br /&gt;
=== Asking in IRC ===&lt;br /&gt;
&lt;br /&gt;
IRC channels are &amp;lt;tt&amp;gt;#opensim&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;#opensim-dev&amp;lt;/tt&amp;gt; on Freenode. Approach them in that order :) Please be courteous and remember that the developers and anyone else assisting you are volunteers there.&lt;br /&gt;
&lt;br /&gt;
* Don't ask to ask, just ask.&lt;br /&gt;
* Phrase your question in the form of a question.&lt;br /&gt;
* Be specific.&lt;br /&gt;
* Explain the problem.&lt;br /&gt;
* Describe how to reproduce the problem.&lt;br /&gt;
* If you need to paste configuration files or error messages, please paste to [http://pastebin.ca/ pastebin] then send the link in the IRC channel.&lt;br /&gt;
&lt;br /&gt;
=== After you get help ===&lt;br /&gt;
&lt;br /&gt;
* If no-one can help you, please submit a bug.&lt;br /&gt;
* If someone does help you, please document the problem and fix on the wiki on this page.&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Development_Team</id>
		<title>Development Team</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Development_Team"/>
				<updated>2007-10-11T15:55:58Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: /* OpenSim Core Developers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== OpenSim Core Developers ==&lt;br /&gt;
&lt;br /&gt;
(please add in as much info as you like for your name)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;IRC Nick &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;SL Avatar&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Time Zone&amp;lt;br&amp;gt;(UTC)&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Org&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Areas of Interest&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:MW|MW]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Michael Wright&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Wright Juran&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;+0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;everything&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:AdamZaius|AdamZaius]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Adam Frisby&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Adam Zaius&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;+8&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DeepThink Pty Ltd&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Terrain, Performance&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:MingChen|MingChen]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;-6&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DeepThink Pty Ltd&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:lbsa71|lbsa71]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Stefan Andersson&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PierreJoseph Proudhon&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;+1&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Tribal Media AB&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 3D and Web Integration&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:SeanDague|sdague]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Sean Dague&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Neas Bade&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;-5&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;IBM&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Database, Linux&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:babblefrog|babblefrog]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Brian McBee&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Dogen Coldstream&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;-8&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Disorganized&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:Tedd|Tedd]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Tedd Hansen&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Tedd Maa&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;+1&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Tedd Hansen&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Programming/Scripting/Architecture&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:danx0r|danx0r]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Dan Miller&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Albert Pascal&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;-8&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;squiggle.com&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PHEEZIKS; everything&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:dalien|dalien]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ZeroPoint&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Guilderoy&amp;amp;nbsp;Dench&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;-5&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Programming/Database&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Tleiades&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Tleiades&amp;amp;nbsp;Hax&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;+2&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Grid servers/Database&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;cfk&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Charles&amp;amp;nbsp;Krinke&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Charlesk&amp;amp;nbsp;Bing&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;-8&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Reliability/Grid servers/ll-functions&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Additional Developers/Testers/Contributors ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;IRC Nick &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;SL Avatar&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Time Zone&amp;lt;br&amp;gt;(UTC)&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Org&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Areas of Interest&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Gareth&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;BigFootAg&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:Darok|Darok]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Darok Kaminski&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;+1&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Physics engines (especially BulletX)&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Ldvoipeng&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;idoru&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:Magi|Magi]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Andy Agnew&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Magi Merlin&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;+10&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Spun Pty Ltd&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;3D Web Integration, Database stuff and playing with the odds and ends box.&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;john_&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;John&amp;amp;nbsp;Moyer&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;VAJohn&amp;amp;nbsp;GeekSquad or&amp;amp;nbsp;Matthew&amp;amp;nbsp;Kendal&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;-5&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Best&amp;amp;nbsp;Buy/Geek&amp;amp;nbsp;Squad&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:ClarkZone|ClarkZone]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Troy Admin(@ClarkZone)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Troy Childs(Secondlife)\Troy Admin (ClarkZone)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;-5&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Http://clarkzone.dyndns.org&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Tester and Grid Host&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:aiaustin|aiaustin]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Ai Austin&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Ai&amp;amp;nbsp;Austin&amp;amp;nbsp;(Second&amp;amp;nbsp;Life)&amp;lt;br&amp;gt;Ai&amp;amp;nbsp;Beta&amp;amp;nbsp;(DeepGrid)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;+0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;AIAI,&amp;amp;nbsp;University&amp;amp;nbsp;of&amp;amp;nbsp;Edinburgh&amp;lt;br&amp;gt;http://www.aiai.ed.ac.uk/~ai/&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Windows Vista tests&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:balthazar|balthazar]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Trevor Brooks&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Balthazar Sin&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;-5&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;None&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Terrains, testing and some small coding tasks&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:jimbo2120|jimbo2120]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Michael Osias&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Illuminous Beltran&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;-5&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;IBM&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Grid, AI, Skynet, coding and testing&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:chi11ken|chi11ken]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Jeff Ames&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Chillken Proto&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;+9&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Development_Team</id>
		<title>Development Team</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Development_Team"/>
				<updated>2007-10-11T15:54:48Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: /* OpenSim Core Developers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== OpenSim Core Developers ==&lt;br /&gt;
&lt;br /&gt;
(please add in as much info as you like for your name)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;IRC Nick &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;SL Avatar&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Time Zone&amp;lt;br&amp;gt;(UTC)&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Org&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Areas of Interest&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:MW|MW]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Michael Wright&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Wright Juran&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;+0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;everything&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:AdamZaius|AdamZaius]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Adam Frisby&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Adam Zaius&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;+8&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DeepThink Pty Ltd&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Terrain, Performance&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:MingChen|MingChen]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;-6&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;DeepThink Pty Ltd&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:lbsa71|lbsa71]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Stefan Andersson&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PierreJoseph Proudhon&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;+1&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Tribal Media AB&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; 3D and Web Integration&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:SeanDague|sdague]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Sean Dague&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Neas Bade&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;-5&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;IBM&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Database, Linux&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:babblefrog|babblefrog]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Brian McBee&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Dogen Coldstream&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;-8&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Disorganized&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:Tedd|Tedd]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Tedd Hansen&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Tedd Maa&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;-9&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Tedd Hansen&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Programming/Scripting/Architecture&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:danx0r|danx0r]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Dan Miller&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Albert Pascal&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;-8&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;squiggle.com&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PHEEZIKS; everything&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:dalien|dalien]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ZeroPoint&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Guilderoy&amp;amp;nbsp;Dench&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;-5&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Programming/Database&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Tleiades&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Tleiades&amp;amp;nbsp;Hax&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;+2&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Grid servers/Database&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;cfk&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Charles&amp;amp;nbsp;Krinke&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Charlesk&amp;amp;nbsp;Bing&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;-8&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Reliability/Grid servers/ll-functions&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Additional Developers/Testers/Contributors ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;IRC Nick &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;SL Avatar&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Time Zone&amp;lt;br&amp;gt;(UTC)&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Org&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Areas of Interest&amp;lt;/th&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Gareth&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;BigFootAg&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:Darok|Darok]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Darok Kaminski&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;+1&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Physics engines (especially BulletX)&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Ldvoipeng&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;idoru&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:Magi|Magi]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Andy Agnew&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Magi Merlin&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;+10&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Spun Pty Ltd&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;3D Web Integration, Database stuff and playing with the odds and ends box.&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;john_&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;John&amp;amp;nbsp;Moyer&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;VAJohn&amp;amp;nbsp;GeekSquad or&amp;amp;nbsp;Matthew&amp;amp;nbsp;Kendal&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;-5&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Best&amp;amp;nbsp;Buy/Geek&amp;amp;nbsp;Squad&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:ClarkZone|ClarkZone]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Troy Admin(@ClarkZone)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Troy Childs(Secondlife)\Troy Admin (ClarkZone)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;-5&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Http://clarkzone.dyndns.org&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Tester and Grid Host&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:aiaustin|aiaustin]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Ai Austin&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Ai&amp;amp;nbsp;Austin&amp;amp;nbsp;(Second&amp;amp;nbsp;Life)&amp;lt;br&amp;gt;Ai&amp;amp;nbsp;Beta&amp;amp;nbsp;(DeepGrid)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;+0&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;AIAI,&amp;amp;nbsp;University&amp;amp;nbsp;of&amp;amp;nbsp;Edinburgh&amp;lt;br&amp;gt;http://www.aiai.ed.ac.uk/~ai/&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Windows Vista tests&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:balthazar|balthazar]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Trevor Brooks&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Balthazar Sin&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;-5&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;None&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Terrains, testing and some small coding tasks&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:jimbo2120|jimbo2120]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Michael Osias&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Illuminous Beltran&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;-5&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;IBM&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Grid, AI, Skynet, coding and testing&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[User:chi11ken|chi11ken]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Jeff Ames&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Chillken Proto&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;+9&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Configuration</id>
		<title>Configuration</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Configuration"/>
				<updated>2007-09-11T11:54:03Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: /* Tips */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;It is recommended that you first get OpenSim running in standalone mode, before you attempt to connect it to a grid, either your own grid or a public grid.&lt;br /&gt;
&lt;br /&gt;
A simulator actually consists of four services, known as UGAS which stand for User, Grid, Asset &amp;amp; Simulator. They are started in that order.&lt;br /&gt;
&lt;br /&gt;
A simulator running in its default standalone mode has all the services self-contained, but they are very modest. This means any first/last/password works. It also means inventory is all local with no region or grid-wide connections.&lt;br /&gt;
&lt;br /&gt;
A simulator running as a local grid runs all four services on the same computer. Multiple sims can be run, across-region crossing including teleporting and a set of inventory items that are within this local grid.&lt;br /&gt;
&lt;br /&gt;
A simulator running as part of a public grid runs only OpenSim.exe and the other three services are running on a server common to many regions. This also means that understanding the needed UUID, X,Y location, server handshake passwords, master avatar first/last/password and a couple of other settings. These are not difficult, but do require a little care in setting up.&lt;br /&gt;
&lt;br /&gt;
=Command Line arguments passed to OpenSim.exe=&lt;br /&gt;
&lt;br /&gt;
OpenSim.exe responds to various command line arguments. These include &amp;quot;-inifile&amp;quot;, &amp;quot;-configfile&amp;quot;, &amp;quot;-gridmode&amp;quot;, &amp;quot;-physics&amp;quot;, &amp;quot;-config&amp;quot; &amp;amp; &amp;quot;-noverbose&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
When starting OpenSim in either Windows or Linux, one can add &amp;quot;-physics=OpenDynamicsEngine&amp;quot; to run the OpenDynamicsEngine instead of basicphysics. &lt;br /&gt;
&lt;br /&gt;
Most users in standalone mode will not add any command line arguments. For local grid or public grid, the &amp;quot;-gridmode=true&amp;quot; is usually the only argument used. The rest are for more advanced configuration.&lt;br /&gt;
&lt;br /&gt;
=Standalone mode=&lt;br /&gt;
&lt;br /&gt;
When you start OpenSim in standalone mode, it will ask you several question at the console. The first set of prompts that start with &amp;quot;NETWORK SERVERS INFO&amp;quot;, you can just hit return to accept the defaults if you will be running in standalone mode.&lt;br /&gt;
&lt;br /&gt;
The prompts that start with &amp;quot;DEFAULT REGION CONFIG&amp;quot; are where you need to start paying attention. Some are self-explanatory. Here are explanations for the others:&lt;br /&gt;
&lt;br /&gt;
* Grid Location. OpenSim regions can be placed anywhere on a 65536 by 65536 grid. In standalone mode, it is safe to leave these X and Y locations at their defaults.&lt;br /&gt;
&lt;br /&gt;
* Filename for local storage. Safe to leave at default.&lt;br /&gt;
&lt;br /&gt;
* Internal IP address; This should always be 0.0.0.0&lt;br /&gt;
&lt;br /&gt;
* Internal IP port for incoming UDP client connection. You can make this any port you want, but it is safe to leave at the default 9000.&lt;br /&gt;
&lt;br /&gt;
* External host name. If you will only be attaching to your sim from a SecondLife client on the same machine, you can leave this at the default 127.0.0.1. If you will be wanting to connect to it from a client on another machine, this should be the IP address or hostname of the machine you are running this sim on.&lt;br /&gt;
&lt;br /&gt;
To connect to your new sim, start up secondlife with the following command line switches: &lt;br /&gt;
&lt;br /&gt;
 -loginuri http://127.0.0.1:9000/&lt;br /&gt;
&lt;br /&gt;
This assumes you are running the secondlife client on the same box. If you are running it on a separate box, substitute the IP address of your sim machine.&lt;br /&gt;
&lt;br /&gt;
=Grid mode=&lt;br /&gt;
&lt;br /&gt;
You want to run your own grid. Great! Assuming that you already got your sim running in standalone mode, here is what you need to do:&lt;br /&gt;
&lt;br /&gt;
1. Current builds of OpenSim grid mode are using mysql to store the grid information. You must have this installed and configured if you want to run your own grid. See [[mysql-config]] for more information.&lt;br /&gt;
&lt;br /&gt;
2. The servers should be started in a certain order. UGAS: UserServer, GridServer, AssetServer, Sim. These are all found in the bin directory. In windows, you can just double-click on the executables to start them. In linux, you will probably have to start them with mono. The executable names are:&lt;br /&gt;
&lt;br /&gt;
 OpenSim.Grid.UserServer.exe&lt;br /&gt;
 OpenSim.Grid.GridServer.exe&lt;br /&gt;
 OpenSim.Grid.AssetServer.exe&lt;br /&gt;
 OpenSim.exe&lt;br /&gt;
&lt;br /&gt;
3. Start the UserServer. If you will be running the GridServer on the same box, hit enter to accept the defaults, until  it gives you the prompt &lt;br /&gt;
&lt;br /&gt;
 OpenUser#&lt;br /&gt;
&lt;br /&gt;
This is the main prompt for the user server. If you will be running the GridServer on another box, change the Default Grid Server URI as appropriate.&lt;br /&gt;
&lt;br /&gt;
4. Start the GridServer. Again, you can hit return at all the prompts if you are running them all on the same machine. If not, change the URIs for the Asset Server and User server to point to where you are running them. You will finally get to the console prompt for the GridServer which looks like this:&lt;br /&gt;
&lt;br /&gt;
 OpenGrid#&lt;br /&gt;
&lt;br /&gt;
5. Start the AssetServer. This is not used at the current time, so you don't need to start it. The console prompt for this server will be:&lt;br /&gt;
&lt;br /&gt;
 OpenAsset#&lt;br /&gt;
&lt;br /&gt;
6. If you are running all of these servers on the same box, which would be the normal configuration. You should be ready to start up your sim. Since the OpenSim.exe starts up by default in standalone mode, you will need to give it a command line switch to tell it to use gridmode instead:&lt;br /&gt;
&lt;br /&gt;
 OpenSim.exe -gridmode=true&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 mono OpenSim.exe -gridmode=true&lt;br /&gt;
&lt;br /&gt;
With any luck, everything will come up without too many arrors.&lt;br /&gt;
&lt;br /&gt;
7. Go to the UserServer console, and type 'create user' to create a new avatar. It will prompt you for the name and password, and the X and Y of the sim that should be his home location. Use 1000 and 1000, or wherever you told your sim to live when you brought it up in standalone mode.&lt;br /&gt;
&lt;br /&gt;
At the console of any of these servers, you should be able to type 'help' to get a list of commands.&lt;br /&gt;
&lt;br /&gt;
You should now be able to connect to your new grid with your secondlife client. You need to tell your client to point at the UserServer rather than direclty at the sim, though:&lt;br /&gt;
&lt;br /&gt;
 secondlife -loginuri http://127.0.0.1:8002/&lt;br /&gt;
&lt;br /&gt;
8002 is the default port for the UserServer, and that IP address should be changed to the server you are running the UserServer on, if they are not all on the same box.&lt;br /&gt;
&lt;br /&gt;
Happy OpenSimming!&lt;br /&gt;
&lt;br /&gt;
=== Technical Addendum ===&lt;br /&gt;
For running multiple regions on the same box, you simply make multiple copies of the 'default.xml' file inside the /bin/regions/ directory. Name them anything you want (I name mine x.y.xml, where x znd y are the grid coords)&lt;br /&gt;
&lt;br /&gt;
Open each xml file and edit the uuid (each must be unique, a generator is listed in this wiki, remove the dashes), region name, x &amp;amp; y positions, datastore (if you are using the prim thing) and internal ip port. EACH OF THESE MUST BE UNIQUE!&lt;br /&gt;
&lt;br /&gt;
Once you have 2 or more xml files in the regions folder, you can run a SINGLE COPY of opensim.exe and it will boot all of your sims! If you come across any errors, there is, most likely, an error in the xml files.&lt;br /&gt;
&lt;br /&gt;
=Attaching your sim to someone else's grid=&lt;br /&gt;
&lt;br /&gt;
** [[OpenSim: SampleConfigs]]     (Yin, Bao &amp;amp; Yang config files as samples)&lt;br /&gt;
&lt;br /&gt;
In your bin directory, you will find a file called &lt;br /&gt;
&lt;br /&gt;
 network_servers_information.xml&lt;br /&gt;
&lt;br /&gt;
This file has the configuration for telling your sim how to attach to a grid. You can edit this file with any text editor.&lt;br /&gt;
&lt;br /&gt;
The grid owner should provide you with the following information to configure this file so that you can attach to their grid:&lt;br /&gt;
&lt;br /&gt;
* GridServerURL&lt;br /&gt;
&lt;br /&gt;
* GridSendKey&lt;br /&gt;
&lt;br /&gt;
* GridRecvKey&lt;br /&gt;
&lt;br /&gt;
* UserServerURL&lt;br /&gt;
&lt;br /&gt;
* UserSendKey&lt;br /&gt;
&lt;br /&gt;
* UserRecvKey&lt;br /&gt;
&lt;br /&gt;
* AssetServerURL&lt;br /&gt;
&lt;br /&gt;
The keys are used to make sure that you can both know that you are connecting to the correct box at the other end. This offers a level of security.&lt;br /&gt;
&lt;br /&gt;
The other file you may have to change is in your bin/Regions directory. This is where your individual region config files are. If you only have one region, it will by default be called:&lt;br /&gt;
&lt;br /&gt;
 default.xml&lt;br /&gt;
&lt;br /&gt;
This can be edited with any text editor. The grid owner may tell you what X and Y location you can place your sim at (you can't have multiple sims at the smae location on the grid). If so, the fields you will need to change in this file are sim_location_x, and sim_location_y.&lt;br /&gt;
&lt;br /&gt;
A list of public grids that you can attach your sim to are at [[OpenSim:_Grids]]&lt;br /&gt;
&lt;br /&gt;
=Tips=&lt;br /&gt;
In Windows, to automate startup, you can create a file called StartGrid.BAT:&lt;br /&gt;
 start OpenSim.Grid.UserServer.exe&lt;br /&gt;
 sleep 3&lt;br /&gt;
 start OpenSim.Grid.GridServer.exe&lt;br /&gt;
 sleep 3&lt;br /&gt;
 start OpenSim.Grid.AssetServer.exe&lt;br /&gt;
 sleep 3&lt;br /&gt;
 start OpenSim.exe -gridmode=true&lt;br /&gt;
&lt;br /&gt;
PS! Check that you have sleep command installed, I'm unsure if all Windows-versions has that.&amp;lt;br&amp;gt;&lt;br /&gt;
This knowledgebase article describes how to add a batch file to startup of Windows (before logon).&amp;lt;br&amp;gt;&lt;br /&gt;
[http://support.microsoft.com/kb/q243486/ http://support.microsoft.com/kb/q243486/]&amp;lt;br&amp;gt;&lt;br /&gt;
Note that you have to start all applications and answer the configuration questions once before adding it to any startup.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you start the server before logon then there will be no window to close if you want to shut down the server, so you can create a &amp;quot;StopGrid.BAT&amp;quot; with:&lt;br /&gt;
 taskkill /FI &amp;quot;IMAGENAME eq OpenSim.*&amp;quot;&lt;br /&gt;
 sleep 3&lt;br /&gt;
 taskkill /FI &amp;quot;IMAGENAME eq OpenSim.*&amp;quot;&lt;br /&gt;
 sleep 3&lt;br /&gt;
 taskkill /F /FI &amp;quot;IMAGENAME eq OpenSim.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Do they have to be shut down in any particular order?''&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Configuration</id>
		<title>Configuration</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Configuration"/>
				<updated>2007-09-11T11:52:08Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;It is recommended that you first get OpenSim running in standalone mode, before you attempt to connect it to a grid, either your own grid or a public grid.&lt;br /&gt;
&lt;br /&gt;
A simulator actually consists of four services, known as UGAS which stand for User, Grid, Asset &amp;amp; Simulator. They are started in that order.&lt;br /&gt;
&lt;br /&gt;
A simulator running in its default standalone mode has all the services self-contained, but they are very modest. This means any first/last/password works. It also means inventory is all local with no region or grid-wide connections.&lt;br /&gt;
&lt;br /&gt;
A simulator running as a local grid runs all four services on the same computer. Multiple sims can be run, across-region crossing including teleporting and a set of inventory items that are within this local grid.&lt;br /&gt;
&lt;br /&gt;
A simulator running as part of a public grid runs only OpenSim.exe and the other three services are running on a server common to many regions. This also means that understanding the needed UUID, X,Y location, server handshake passwords, master avatar first/last/password and a couple of other settings. These are not difficult, but do require a little care in setting up.&lt;br /&gt;
&lt;br /&gt;
=Command Line arguments passed to OpenSim.exe=&lt;br /&gt;
&lt;br /&gt;
OpenSim.exe responds to various command line arguments. These include &amp;quot;-inifile&amp;quot;, &amp;quot;-configfile&amp;quot;, &amp;quot;-gridmode&amp;quot;, &amp;quot;-physics&amp;quot;, &amp;quot;-config&amp;quot; &amp;amp; &amp;quot;-noverbose&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
When starting OpenSim in either Windows or Linux, one can add &amp;quot;-physics=OpenDynamicsEngine&amp;quot; to run the OpenDynamicsEngine instead of basicphysics. &lt;br /&gt;
&lt;br /&gt;
Most users in standalone mode will not add any command line arguments. For local grid or public grid, the &amp;quot;-gridmode=true&amp;quot; is usually the only argument used. The rest are for more advanced configuration.&lt;br /&gt;
&lt;br /&gt;
=Standalone mode=&lt;br /&gt;
&lt;br /&gt;
When you start OpenSim in standalone mode, it will ask you several question at the console. The first set of prompts that start with &amp;quot;NETWORK SERVERS INFO&amp;quot;, you can just hit return to accept the defaults if you will be running in standalone mode.&lt;br /&gt;
&lt;br /&gt;
The prompts that start with &amp;quot;DEFAULT REGION CONFIG&amp;quot; are where you need to start paying attention. Some are self-explanatory. Here are explanations for the others:&lt;br /&gt;
&lt;br /&gt;
* Grid Location. OpenSim regions can be placed anywhere on a 65536 by 65536 grid. In standalone mode, it is safe to leave these X and Y locations at their defaults.&lt;br /&gt;
&lt;br /&gt;
* Filename for local storage. Safe to leave at default.&lt;br /&gt;
&lt;br /&gt;
* Internal IP address; This should always be 0.0.0.0&lt;br /&gt;
&lt;br /&gt;
* Internal IP port for incoming UDP client connection. You can make this any port you want, but it is safe to leave at the default 9000.&lt;br /&gt;
&lt;br /&gt;
* External host name. If you will only be attaching to your sim from a SecondLife client on the same machine, you can leave this at the default 127.0.0.1. If you will be wanting to connect to it from a client on another machine, this should be the IP address or hostname of the machine you are running this sim on.&lt;br /&gt;
&lt;br /&gt;
To connect to your new sim, start up secondlife with the following command line switches: &lt;br /&gt;
&lt;br /&gt;
 -loginuri http://127.0.0.1:9000/&lt;br /&gt;
&lt;br /&gt;
This assumes you are running the secondlife client on the same box. If you are running it on a separate box, substitute the IP address of your sim machine.&lt;br /&gt;
&lt;br /&gt;
=Grid mode=&lt;br /&gt;
&lt;br /&gt;
You want to run your own grid. Great! Assuming that you already got your sim running in standalone mode, here is what you need to do:&lt;br /&gt;
&lt;br /&gt;
1. Current builds of OpenSim grid mode are using mysql to store the grid information. You must have this installed and configured if you want to run your own grid. See [[mysql-config]] for more information.&lt;br /&gt;
&lt;br /&gt;
2. The servers should be started in a certain order. UGAS: UserServer, GridServer, AssetServer, Sim. These are all found in the bin directory. In windows, you can just double-click on the executables to start them. In linux, you will probably have to start them with mono. The executable names are:&lt;br /&gt;
&lt;br /&gt;
 OpenSim.Grid.UserServer.exe&lt;br /&gt;
 OpenSim.Grid.GridServer.exe&lt;br /&gt;
 OpenSim.Grid.AssetServer.exe&lt;br /&gt;
 OpenSim.exe&lt;br /&gt;
&lt;br /&gt;
3. Start the UserServer. If you will be running the GridServer on the same box, hit enter to accept the defaults, until  it gives you the prompt &lt;br /&gt;
&lt;br /&gt;
 OpenUser#&lt;br /&gt;
&lt;br /&gt;
This is the main prompt for the user server. If you will be running the GridServer on another box, change the Default Grid Server URI as appropriate.&lt;br /&gt;
&lt;br /&gt;
4. Start the GridServer. Again, you can hit return at all the prompts if you are running them all on the same machine. If not, change the URIs for the Asset Server and User server to point to where you are running them. You will finally get to the console prompt for the GridServer which looks like this:&lt;br /&gt;
&lt;br /&gt;
 OpenGrid#&lt;br /&gt;
&lt;br /&gt;
5. Start the AssetServer. This is not used at the current time, so you don't need to start it. The console prompt for this server will be:&lt;br /&gt;
&lt;br /&gt;
 OpenAsset#&lt;br /&gt;
&lt;br /&gt;
6. If you are running all of these servers on the same box, which would be the normal configuration. You should be ready to start up your sim. Since the OpenSim.exe starts up by default in standalone mode, you will need to give it a command line switch to tell it to use gridmode instead:&lt;br /&gt;
&lt;br /&gt;
 OpenSim.exe -gridmode=true&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 mono OpenSim.exe -gridmode=true&lt;br /&gt;
&lt;br /&gt;
With any luck, everything will come up without too many arrors.&lt;br /&gt;
&lt;br /&gt;
7. Go to the UserServer console, and type 'create user' to create a new avatar. It will prompt you for the name and password, and the X and Y of the sim that should be his home location. Use 1000 and 1000, or wherever you told your sim to live when you brought it up in standalone mode.&lt;br /&gt;
&lt;br /&gt;
At the console of any of these servers, you should be able to type 'help' to get a list of commands.&lt;br /&gt;
&lt;br /&gt;
You should now be able to connect to your new grid with your secondlife client. You need to tell your client to point at the UserServer rather than direclty at the sim, though:&lt;br /&gt;
&lt;br /&gt;
 secondlife -loginuri http://127.0.0.1:8002/&lt;br /&gt;
&lt;br /&gt;
8002 is the default port for the UserServer, and that IP address should be changed to the server you are running the UserServer on, if they are not all on the same box.&lt;br /&gt;
&lt;br /&gt;
Happy OpenSimming!&lt;br /&gt;
&lt;br /&gt;
=== Technical Addendum ===&lt;br /&gt;
For running multiple regions on the same box, you simply make multiple copies of the 'default.xml' file inside the /bin/regions/ directory. Name them anything you want (I name mine x.y.xml, where x znd y are the grid coords)&lt;br /&gt;
&lt;br /&gt;
Open each xml file and edit the uuid (each must be unique, a generator is listed in this wiki, remove the dashes), region name, x &amp;amp; y positions, datastore (if you are using the prim thing) and internal ip port. EACH OF THESE MUST BE UNIQUE!&lt;br /&gt;
&lt;br /&gt;
Once you have 2 or more xml files in the regions folder, you can run a SINGLE COPY of opensim.exe and it will boot all of your sims! If you come across any errors, there is, most likely, an error in the xml files.&lt;br /&gt;
&lt;br /&gt;
=Attaching your sim to someone else's grid=&lt;br /&gt;
&lt;br /&gt;
** [[OpenSim: SampleConfigs]]     (Yin, Bao &amp;amp; Yang config files as samples)&lt;br /&gt;
&lt;br /&gt;
In your bin directory, you will find a file called &lt;br /&gt;
&lt;br /&gt;
 network_servers_information.xml&lt;br /&gt;
&lt;br /&gt;
This file has the configuration for telling your sim how to attach to a grid. You can edit this file with any text editor.&lt;br /&gt;
&lt;br /&gt;
The grid owner should provide you with the following information to configure this file so that you can attach to their grid:&lt;br /&gt;
&lt;br /&gt;
* GridServerURL&lt;br /&gt;
&lt;br /&gt;
* GridSendKey&lt;br /&gt;
&lt;br /&gt;
* GridRecvKey&lt;br /&gt;
&lt;br /&gt;
* UserServerURL&lt;br /&gt;
&lt;br /&gt;
* UserSendKey&lt;br /&gt;
&lt;br /&gt;
* UserRecvKey&lt;br /&gt;
&lt;br /&gt;
* AssetServerURL&lt;br /&gt;
&lt;br /&gt;
The keys are used to make sure that you can both know that you are connecting to the correct box at the other end. This offers a level of security.&lt;br /&gt;
&lt;br /&gt;
The other file you may have to change is in your bin/Regions directory. This is where your individual region config files are. If you only have one region, it will by default be called:&lt;br /&gt;
&lt;br /&gt;
 default.xml&lt;br /&gt;
&lt;br /&gt;
This can be edited with any text editor. The grid owner may tell you what X and Y location you can place your sim at (you can't have multiple sims at the smae location on the grid). If so, the fields you will need to change in this file are sim_location_x, and sim_location_y.&lt;br /&gt;
&lt;br /&gt;
A list of public grids that you can attach your sim to are at [[OpenSim:_Grids]]&lt;br /&gt;
&lt;br /&gt;
=Tips=&lt;br /&gt;
In Windows, to automate startup, you can create a file called StartGrid.BAT:&lt;br /&gt;
 start OpenSim.Grid.UserServer.exe&lt;br /&gt;
 sleep 3&lt;br /&gt;
 start OpenSim.Grid.GridServer.exe&lt;br /&gt;
 sleep 3&lt;br /&gt;
 start OpenSim.Grid.AssetServer.exe&lt;br /&gt;
 sleep 3&lt;br /&gt;
 start OpenSim.exe -gridmode=true&lt;br /&gt;
&lt;br /&gt;
PS! Check that you have sleep command installed, I'm unsure if all Windows-versions has that.&amp;lt;br&amp;gt;&lt;br /&gt;
This technet article describes how to add a batch file to startup of Windows (before logon).&amp;lt;br&amp;gt;&lt;br /&gt;
[http://support.microsoft.com/kb/q243486/ http://support.microsoft.com/kb/q243486/]&amp;lt;br&amp;gt;&lt;br /&gt;
Note that you have to start all applications and answer the configuration questions once before adding it to any startup.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you start the server before logon then there will be no window to close if you want to shut down the server, so you can create a &amp;quot;StopGrid.BAT&amp;quot; with:&lt;br /&gt;
 taskkill /FI &amp;quot;IMAGENAME eq OpenSim.*&amp;quot;&lt;br /&gt;
 sleep 3&lt;br /&gt;
 taskkill /FI &amp;quot;IMAGENAME eq OpenSim.*&amp;quot;&lt;br /&gt;
 sleep 3&lt;br /&gt;
 taskkill /F /FI &amp;quot;IMAGENAME eq OpenSim.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Do they have to be shut down in any particular order?''&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/FAQ</id>
		<title>FAQ</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/FAQ"/>
				<updated>2007-08-30T18:12:58Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: /* Something Has Gone Wrong! */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A list of frequently asked questions.  Please add anything you think is reasonable here.&lt;br /&gt;
= Building OpenSim =&lt;br /&gt;
&lt;br /&gt;
=== I can't find any build files or solution files ===&lt;br /&gt;
&lt;br /&gt;
* If you're on windows, run prebuild.bat - on linux prebuild.sh&lt;br /&gt;
&lt;br /&gt;
=== VS2005 wont open the .sln file ===&lt;br /&gt;
&lt;br /&gt;
* Try running the VS2005 C#. You are probably running VS2005 C++. This is a C# project.&lt;br /&gt;
&lt;br /&gt;
= Running OpenSim =&lt;br /&gt;
&lt;br /&gt;
=== Running OpenSim.exe from a Cygwin shell has access denied for some dll's ===&lt;br /&gt;
&lt;br /&gt;
* Do a 'cd bin' followed by 'chmod a+x *' to make all dll files executable.&lt;br /&gt;
&lt;br /&gt;
=== I cannot start my sim ===&lt;br /&gt;
&lt;br /&gt;
* See [[OpenSim: Running]].&lt;br /&gt;
&lt;br /&gt;
= Configuring OpenSim =&lt;br /&gt;
&lt;br /&gt;
First, read [[OpenSim: Configuration]].&lt;br /&gt;
&lt;br /&gt;
=== Where can I get a new UUID for my sim config? ===&lt;br /&gt;
&lt;br /&gt;
Use 'uuidgen' or generate one on the [http://www.famkruithof.net/uuid/uuidgen uuidgen webpage].&lt;br /&gt;
&lt;br /&gt;
=== Can I run multiple regions with OpenSim? ===&lt;br /&gt;
&lt;br /&gt;
Yes.  To do this add another xml file to bin/Regions. You need to create a new 'sim_UUID' (see above) and change the 'sim_name', 'internal_ip_port', 'sim_location_x' and 'sim_location_y' (and anything else you wish to change). Restart OpenSim.&lt;br /&gt;
&lt;br /&gt;
sim_location_x and sim_location_y should be in adjacent regions, then you will be able to run back and forth between regions.&lt;br /&gt;
&lt;br /&gt;
* See [[OpenSim: Configuration]].&lt;br /&gt;
&lt;br /&gt;
=== How do I enable prim storage? ===&lt;br /&gt;
&lt;br /&gt;
* In the OpenSim.ini file, change the storage_plugin so it points to OpenSim.DataStore.MonoSqlite.dll (storage_plugin =  OpenSim.DataStore.MonoSqlite.dll).&lt;br /&gt;
&lt;br /&gt;
Note: you can specify the same database for all region.xml files, as information in the database is stored with the region.&lt;br /&gt;
&lt;br /&gt;
Currently, sqlite is the only database provider that works for prim storage, this will change in the future.&lt;br /&gt;
&lt;br /&gt;
=== There are a bunch of textures in the library, but they are all 0x0? What's wrong? ===&lt;br /&gt;
To enable these extra textures for your use, you must delete your regionassets.yap file, and restart your sim. WARNING: IF YOU DO THIS, YOU WILL LOSE ANY ASSETS (textures, scripts, animations, etc) THAT YOU HAVE UPLOADED!&lt;br /&gt;
&lt;br /&gt;
=== What databases are supported in OpenSim? ===&lt;br /&gt;
Right now the only database supported is sqlite.  This is being done first to ensure all our persistent data is SQL friendly for storage, and because sqlite requires no user interaction to setup.  The architexture for OpenSim specifically allows for different data store backends, and others will be created in the near future.&lt;br /&gt;
&lt;br /&gt;
=== Can I export all my prims, for safe keeping? ===&lt;br /&gt;
&lt;br /&gt;
Yes.  From the console type &lt;br /&gt;
 save_xml yourbackupfile&lt;br /&gt;
&lt;br /&gt;
You can later load those prims with&lt;br /&gt;
 load_xml yourbackupfile&lt;br /&gt;
&lt;br /&gt;
This is also a good way to dump and clone prims from one OpenSim server to another.&lt;br /&gt;
&lt;br /&gt;
= Something Has Gone Wrong! =&lt;br /&gt;
&lt;br /&gt;
=== I get a timeout during region handshake ===&lt;br /&gt;
&lt;br /&gt;
* Do you have the correct IP in your Regions\* config file?&lt;br /&gt;
* Do you have multiple interfaces on the server running OpenSim? OpenSim will not bind outgoing UDP packets to a specific IP, its default IP to reach you will be what the Region answers UDP with. If you have configured the region for another IP you will get a timeout during connect.&lt;br /&gt;
&lt;br /&gt;
=== I cannot connect to my OpenSim ===&lt;br /&gt;
&lt;br /&gt;
* See [[OpenSim: Connecting]].&lt;br /&gt;
&lt;br /&gt;
=== I connect but cannot move ===&lt;br /&gt;
&lt;br /&gt;
If the client connects but the avatar can only spin in place and not move, then the sim is not correctly configured. It completed the initial login function, but packets are not being exchanged between the client and the sim, probably due to a network configuration error on the sim.&lt;br /&gt;
&lt;br /&gt;
* See [[OpenSim: Configuration]].&lt;br /&gt;
&lt;br /&gt;
=== From time to time my Avatar seems to get stuck ===&lt;br /&gt;
Right now there is a bottle neck when syncing prims off to the database.  This will cause small (5 - 10 second) apparent hangs of the Avatar, but it will recover fine once the data is synced.  It is a known issue based on legacy architecture of some of the data storage code.  We hope this will be removed soon.&lt;br /&gt;
&lt;br /&gt;
=== I have problems with viewing the worldmap ===&lt;br /&gt;
&lt;br /&gt;
* This may happen when running OpenSim on a Linux server, both in grid or standalone mode.&lt;br /&gt;
* Symptoms: when opening the worldmap window in the SL-viewer, the sims are not displayed grahically in the worldmap, the server console shows some error related to openjpeg, the current session freezes...&lt;br /&gt;
* Reason: your svn source trunk has not the correct (or whatever...) libopenjpeg-libsl library.&lt;br /&gt;
* Solution: get the newest code from libsecondlife (svn co svn://opensecondlife.org/libsl/trunk), 'make' manually in the subdir openjpeg-libsl, and copy the resulting libopenjpeg-libsl-2.1.2.0.so into your OpenSim .../bin subdir, overwriting the existing one.&lt;br /&gt;
* Recompile &amp;amp; restart OpenSim.&lt;br /&gt;
&lt;br /&gt;
= Exceptions on the Console =&lt;br /&gt;
This is a list of Exceptions that you may see on the console, what they mean, and if they are a problem.&lt;br /&gt;
&lt;br /&gt;
=== System.DllNotFoundException: ./libopenjpeg-libsl-2.1.2.0.so ===&lt;br /&gt;
 Failed generating terrain map: System.DllNotFoundException: ./libopenjpeg-libsl-2.1.2.0.so&lt;br /&gt;
 at (wrapper managed-to-native) OpenJPEGNet.OpenJPEG:LibslAllocDecoded OpenJPEGNet.OpenJPEG/LibslImage&amp;amp;)&lt;br /&gt;
 at OpenJPEGNet.OpenJPEG.Encode (System.Byte[] decoded, Int32 width, Int32 height, Int32 components, Boolean lossless) [0x00000]&lt;br /&gt;
 at OpenJPEGNet.OpenJPEG.EncodeFromImage (System.Drawing.Bitmap bitmap, Boolean lossless) [0x00000]&lt;br /&gt;
 at OpenSim.Region.Terrain.TerrainEngine.ExportJpegImage (System.String gradientmap) [0x00000]&lt;br /&gt;
&lt;br /&gt;
You are on Linux, and the native lib libopenjpeg-libsl-2.1.2.0.so is not compatible with your system for one of the following reasons:&lt;br /&gt;
* You have an old processor (libopenjpeg has been compiled with optimizations)&lt;br /&gt;
* You are running in 64bit mode (none of the native libs are built for 64bit)&lt;br /&gt;
&lt;br /&gt;
You can rebuild your own libopenjpeg from source, or run in a compatible environment.&lt;br /&gt;
&lt;br /&gt;
= OpenSim in the Wild =&lt;br /&gt;
&lt;br /&gt;
=== Are there test servers running OpenSim I can connect to? ===&lt;br /&gt;
&lt;br /&gt;
Yes.  Check out http://deepgid.org, http://osgrid.org&lt;br /&gt;
&lt;br /&gt;
=== Can I teleport from the Linden Lab Second Life grid to my Sim? ===&lt;br /&gt;
&lt;br /&gt;
No, OpenSim islands cannot connect to the Linden Lab grid.&lt;br /&gt;
&lt;br /&gt;
= Terrain Tidbits =&lt;br /&gt;
=== What programs can I use to create terrains for OpenSim? ===&lt;br /&gt;
If you are after simple terrain files (jpg, gif, etc), you can use Photoshop or any number of freeware programs, like Gimp. If you want more complex terrains, you will need programs that output to standard 3d raw format (aka r32 or r64). L3DT and Terragen are two of the top commercial programs for this. (anyone know of a freeware one?), or you could, with some practice, use Blender. The free version of L3DT can make terrains up to 2048x2048 in size, or 8x8 regions.&lt;br /&gt;
&lt;br /&gt;
=== Where do I put the files for my terrains? ===&lt;br /&gt;
This one is actually pretty simple, but first the 'hard' answer: anywhere in the PATH will work. Lost? yeah, I was too, so... just drop the file into the /bin directory (right where your opensim.exe file is).&lt;br /&gt;
&lt;br /&gt;
=== How do I change the terrain for a group of sims? ===&lt;br /&gt;
First, the file must be in f32 (or f64?) format. This is done easliy with L3DT's export feature. (use the RAW format and set the oprions to Y flipped = true and at the bottom, change it to read 'float' instead of 'ushort'). It also needs to be a file that will cover each sim in a 256x256 layer (so, for 2x2 regions, you need a 512x512 file).&lt;br /&gt;
&lt;br /&gt;
Then, once you have it saved, on the OpenSim.exe console, type in:&lt;br /&gt;
&lt;br /&gt;
 terrain load-tile f32 &amp;lt;filename&amp;gt; &amp;lt;image X&amp;gt; &amp;lt;image y&amp;gt; &amp;lt;bottomleftsim X&amp;gt; &amp;lt;bottomleftsim y&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, I run a square of 4 sims in a 2x2 pattern. I started my sim placement at 0, 0 and ended at 1, 1. my line reads:&lt;br /&gt;
&lt;br /&gt;
 terrain load-tile f32 simalpha.raw 512 512 0 0&lt;br /&gt;
&lt;br /&gt;
Next, before you log in, you may want to go to type in:&lt;br /&gt;
&lt;br /&gt;
 terrain multiply 0.4&lt;br /&gt;
&lt;br /&gt;
This should scale it down from the nearly 300 meters altitude I ran into to something a little more reasonable for the minimap.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Terrain Tidbits brought to you by Tilde, with a few questions in IRC :) - [[User:Tildeampersand|Tilde]] 10:32, 15 August 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
= In World Questions =&lt;br /&gt;
&lt;br /&gt;
=== Does in world scripting work yet? ===&lt;br /&gt;
&lt;br /&gt;
Not yet, but there is a lot of work going on here.  Please see [[LlFunction_implementation_status]] for the latest info.&lt;br /&gt;
&lt;br /&gt;
=== Why do I walk through objects? ===&lt;br /&gt;
&lt;br /&gt;
Basicphysics doesn't support collisions between objects (just between you and the ground).  There is active work on other physics engines for OpenSim, but these are quite experimental at this point, so not considered supported.&lt;br /&gt;
&lt;br /&gt;
=== Can I edit my avatar? ===&lt;br /&gt;
&lt;br /&gt;
Yes, but you need to create a Shape, Hair, Shirt, and Pants first via the Inventory button.  There are no defaults created for each user at this point.&lt;br /&gt;
&lt;br /&gt;
= Grid Mode =&lt;br /&gt;
Note: Grid Mode isn't officially supported yet.  As such, you are pretty much on your own if you are trying to get OpenSim up and running in Grid Mode.&lt;br /&gt;
&lt;br /&gt;
=== I start the sim and it doesn't connect to any grid ===&lt;br /&gt;
&lt;br /&gt;
When OpenSim is first started, it needs configuration.&lt;br /&gt;
&lt;br /&gt;
* See [[OpenSim: Configuration]].&lt;br /&gt;
&lt;br /&gt;
=== I start the OpenSim.Grid.UserServer.exe and it gives an error ===&lt;br /&gt;
&lt;br /&gt;
If this error is access denied for username@localhost, the mysql database is not set up.&lt;br /&gt;
&lt;br /&gt;
It will print some text and wait for input - either an enter to accept a default value, or another value you can supply.&lt;br /&gt;
&lt;br /&gt;
* See [[OpenSim: Configuration]].&lt;br /&gt;
&lt;br /&gt;
=== I want to run my own Local Grid but one or more servers fail to start ===&lt;br /&gt;
&lt;br /&gt;
* Be sure that you're able to start OpenSim.exe alone, in Standalone mode, and to be able to login.&lt;br /&gt;
* Start the servers in the correct UGAS order and answer the questions as recommended (see [[OpenSim: Configuration]]).&lt;br /&gt;
* Set all the external URI's to the correct IP: 127.0.0.1 if running on your local machine, or aaa.bbb.ccc.ddd if running on a remote server.&lt;br /&gt;
* Check again all the *.xml configuration files for any wrong settings or typing errors...!&lt;br /&gt;
* Don't forget to connect with your SL-viewer to port 8002 (Grid User-Server) instead of 9000 (Standalone OpenSim-Server).&lt;br /&gt;
* Delete all *.xml and *.yap files in the bin directory if you want to run a full reconfiguration again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= How to ask for help =&lt;br /&gt;
&lt;br /&gt;
=== Before asking for help... ===&lt;br /&gt;
&lt;br /&gt;
* Search the wiki and web before asking for help.&lt;br /&gt;
* Check your configuration files for any obvious defects.&lt;br /&gt;
* Check that you're starting up the processes correctly.&lt;br /&gt;
* See [[OpenSim: Install]].&lt;br /&gt;
* See [[OpenSim: Configuration]].&lt;br /&gt;
* See [[OpenSim: Running]].&lt;br /&gt;
* See [[OpenSim: Connecting]].&lt;br /&gt;
&lt;br /&gt;
=== Asking in IRC ===&lt;br /&gt;
&lt;br /&gt;
IRC channels are #opensim-help, #opensim and #opensim-dev on EFNet. Approach them in that order :) Please be courteous and remember that the developers and anyone else assisting you are volunteers there.&lt;br /&gt;
&lt;br /&gt;
* Don't ask to ask, just ask.&lt;br /&gt;
* Phrase your question in the form of a question.&lt;br /&gt;
* Be specific.&lt;br /&gt;
* Explain the problem.&lt;br /&gt;
* Describe how to reproduce the problem.&lt;br /&gt;
* If you need to paste configuration files or error messages, please paste to [http://pastebin.ca/ pastebin] then send the link in the IRC channel.&lt;br /&gt;
&lt;br /&gt;
=== After you get help ===&lt;br /&gt;
&lt;br /&gt;
* If no-one can help you, please submit a bug.&lt;br /&gt;
* If someone does help you, please document the problem and fix on the wiki on this page.&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OpenSim:_FAQ</id>
		<title>OpenSim: FAQ</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OpenSim:_FAQ"/>
				<updated>2007-08-30T18:12:58Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: /* Something Has Gone Wrong! */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A list of frequently asked questions.  Please add anything you think is reasonable here.&lt;br /&gt;
= Building OpenSim =&lt;br /&gt;
&lt;br /&gt;
=== I can't find any build files or solution files ===&lt;br /&gt;
&lt;br /&gt;
* If you're on windows, run prebuild.bat - on linux prebuild.sh&lt;br /&gt;
&lt;br /&gt;
=== VS2005 wont open the .sln file ===&lt;br /&gt;
&lt;br /&gt;
* Try running the VS2005 C#. You are probably running VS2005 C++. This is a C# project.&lt;br /&gt;
&lt;br /&gt;
= Running OpenSim =&lt;br /&gt;
&lt;br /&gt;
=== Running OpenSim.exe from a Cygwin shell has access denied for some dll's ===&lt;br /&gt;
&lt;br /&gt;
* Do a 'cd bin' followed by 'chmod a+x *' to make all dll files executable.&lt;br /&gt;
&lt;br /&gt;
=== I cannot start my sim ===&lt;br /&gt;
&lt;br /&gt;
* See [[OpenSim: Running]].&lt;br /&gt;
&lt;br /&gt;
= Configuring OpenSim =&lt;br /&gt;
&lt;br /&gt;
First, read [[OpenSim: Configuration]].&lt;br /&gt;
&lt;br /&gt;
=== Where can I get a new UUID for my sim config? ===&lt;br /&gt;
&lt;br /&gt;
Use 'uuidgen' or generate one on the [http://www.famkruithof.net/uuid/uuidgen uuidgen webpage].&lt;br /&gt;
&lt;br /&gt;
=== Can I run multiple regions with OpenSim? ===&lt;br /&gt;
&lt;br /&gt;
Yes.  To do this add another xml file to bin/Regions. You need to create a new 'sim_UUID' (see above) and change the 'sim_name', 'internal_ip_port', 'sim_location_x' and 'sim_location_y' (and anything else you wish to change). Restart OpenSim.&lt;br /&gt;
&lt;br /&gt;
sim_location_x and sim_location_y should be in adjacent regions, then you will be able to run back and forth between regions.&lt;br /&gt;
&lt;br /&gt;
* See [[OpenSim: Configuration]].&lt;br /&gt;
&lt;br /&gt;
=== How do I enable prim storage? ===&lt;br /&gt;
&lt;br /&gt;
* In the OpenSim.ini file, change the storage_plugin so it points to OpenSim.DataStore.MonoSqlite.dll (storage_plugin =  OpenSim.DataStore.MonoSqlite.dll).&lt;br /&gt;
&lt;br /&gt;
Note: you can specify the same database for all region.xml files, as information in the database is stored with the region.&lt;br /&gt;
&lt;br /&gt;
Currently, sqlite is the only database provider that works for prim storage, this will change in the future.&lt;br /&gt;
&lt;br /&gt;
=== There are a bunch of textures in the library, but they are all 0x0? What's wrong? ===&lt;br /&gt;
To enable these extra textures for your use, you must delete your regionassets.yap file, and restart your sim. WARNING: IF YOU DO THIS, YOU WILL LOSE ANY ASSETS (textures, scripts, animations, etc) THAT YOU HAVE UPLOADED!&lt;br /&gt;
&lt;br /&gt;
=== What databases are supported in OpenSim? ===&lt;br /&gt;
Right now the only database supported is sqlite.  This is being done first to ensure all our persistent data is SQL friendly for storage, and because sqlite requires no user interaction to setup.  The architexture for OpenSim specifically allows for different data store backends, and others will be created in the near future.&lt;br /&gt;
&lt;br /&gt;
=== Can I export all my prims, for safe keeping? ===&lt;br /&gt;
&lt;br /&gt;
Yes.  From the console type &lt;br /&gt;
 save_xml yourbackupfile&lt;br /&gt;
&lt;br /&gt;
You can later load those prims with&lt;br /&gt;
 load_xml yourbackupfile&lt;br /&gt;
&lt;br /&gt;
This is also a good way to dump and clone prims from one OpenSim server to another.&lt;br /&gt;
&lt;br /&gt;
= Something Has Gone Wrong! =&lt;br /&gt;
&lt;br /&gt;
=== I get a timeout during region handshake ===&lt;br /&gt;
&lt;br /&gt;
* Do you have the correct IP in your Regions\* config file?&lt;br /&gt;
* Do you have multiple interfaces on the server running OpenSim? OpenSim will not bind outgoing UDP packets to a specific IP, its default IP to reach you will be what the Region answers UDP with. If you have configured the region for another IP you will get a timeout during connect.&lt;br /&gt;
&lt;br /&gt;
=== I cannot connect to my OpenSim ===&lt;br /&gt;
&lt;br /&gt;
* See [[OpenSim: Connecting]].&lt;br /&gt;
&lt;br /&gt;
=== I connect but cannot move ===&lt;br /&gt;
&lt;br /&gt;
If the client connects but the avatar can only spin in place and not move, then the sim is not correctly configured. It completed the initial login function, but packets are not being exchanged between the client and the sim, probably due to a network configuration error on the sim.&lt;br /&gt;
&lt;br /&gt;
* See [[OpenSim: Configuration]].&lt;br /&gt;
&lt;br /&gt;
=== From time to time my Avatar seems to get stuck ===&lt;br /&gt;
Right now there is a bottle neck when syncing prims off to the database.  This will cause small (5 - 10 second) apparent hangs of the Avatar, but it will recover fine once the data is synced.  It is a known issue based on legacy architecture of some of the data storage code.  We hope this will be removed soon.&lt;br /&gt;
&lt;br /&gt;
=== I have problems with viewing the worldmap ===&lt;br /&gt;
&lt;br /&gt;
* This may happen when running OpenSim on a Linux server, both in grid or standalone mode.&lt;br /&gt;
* Symptoms: when opening the worldmap window in the SL-viewer, the sims are not displayed grahically in the worldmap, the server console shows some error related to openjpeg, the current session freezes...&lt;br /&gt;
* Reason: your svn source trunk has not the correct (or whatever...) libopenjpeg-libsl library.&lt;br /&gt;
* Solution: get the newest code from libsecondlife (svn co svn://opensecondlife.org/libsl/trunk), 'make' manually in the subdir openjpeg-libsl, and copy the resulting libopenjpeg-libsl-2.1.2.0.so into your OpenSim .../bin subdir, overwriting the existing one.&lt;br /&gt;
* Recompile &amp;amp; restart OpenSim.&lt;br /&gt;
&lt;br /&gt;
= Exceptions on the Console =&lt;br /&gt;
This is a list of Exceptions that you may see on the console, what they mean, and if they are a problem.&lt;br /&gt;
&lt;br /&gt;
=== System.DllNotFoundException: ./libopenjpeg-libsl-2.1.2.0.so ===&lt;br /&gt;
 Failed generating terrain map: System.DllNotFoundException: ./libopenjpeg-libsl-2.1.2.0.so&lt;br /&gt;
 at (wrapper managed-to-native) OpenJPEGNet.OpenJPEG:LibslAllocDecoded OpenJPEGNet.OpenJPEG/LibslImage&amp;amp;)&lt;br /&gt;
 at OpenJPEGNet.OpenJPEG.Encode (System.Byte[] decoded, Int32 width, Int32 height, Int32 components, Boolean lossless) [0x00000]&lt;br /&gt;
 at OpenJPEGNet.OpenJPEG.EncodeFromImage (System.Drawing.Bitmap bitmap, Boolean lossless) [0x00000]&lt;br /&gt;
 at OpenSim.Region.Terrain.TerrainEngine.ExportJpegImage (System.String gradientmap) [0x00000]&lt;br /&gt;
&lt;br /&gt;
You are on Linux, and the native lib libopenjpeg-libsl-2.1.2.0.so is not compatible with your system for one of the following reasons:&lt;br /&gt;
* You have an old processor (libopenjpeg has been compiled with optimizations)&lt;br /&gt;
* You are running in 64bit mode (none of the native libs are built for 64bit)&lt;br /&gt;
&lt;br /&gt;
You can rebuild your own libopenjpeg from source, or run in a compatible environment.&lt;br /&gt;
&lt;br /&gt;
= OpenSim in the Wild =&lt;br /&gt;
&lt;br /&gt;
=== Are there test servers running OpenSim I can connect to? ===&lt;br /&gt;
&lt;br /&gt;
Yes.  Check out http://deepgid.org, http://osgrid.org&lt;br /&gt;
&lt;br /&gt;
=== Can I teleport from the Linden Lab Second Life grid to my Sim? ===&lt;br /&gt;
&lt;br /&gt;
No, OpenSim islands cannot connect to the Linden Lab grid.&lt;br /&gt;
&lt;br /&gt;
= Terrain Tidbits =&lt;br /&gt;
=== What programs can I use to create terrains for OpenSim? ===&lt;br /&gt;
If you are after simple terrain files (jpg, gif, etc), you can use Photoshop or any number of freeware programs, like Gimp. If you want more complex terrains, you will need programs that output to standard 3d raw format (aka r32 or r64). L3DT and Terragen are two of the top commercial programs for this. (anyone know of a freeware one?), or you could, with some practice, use Blender. The free version of L3DT can make terrains up to 2048x2048 in size, or 8x8 regions.&lt;br /&gt;
&lt;br /&gt;
=== Where do I put the files for my terrains? ===&lt;br /&gt;
This one is actually pretty simple, but first the 'hard' answer: anywhere in the PATH will work. Lost? yeah, I was too, so... just drop the file into the /bin directory (right where your opensim.exe file is).&lt;br /&gt;
&lt;br /&gt;
=== How do I change the terrain for a group of sims? ===&lt;br /&gt;
First, the file must be in f32 (or f64?) format. This is done easliy with L3DT's export feature. (use the RAW format and set the oprions to Y flipped = true and at the bottom, change it to read 'float' instead of 'ushort'). It also needs to be a file that will cover each sim in a 256x256 layer (so, for 2x2 regions, you need a 512x512 file).&lt;br /&gt;
&lt;br /&gt;
Then, once you have it saved, on the OpenSim.exe console, type in:&lt;br /&gt;
&lt;br /&gt;
 terrain load-tile f32 &amp;lt;filename&amp;gt; &amp;lt;image X&amp;gt; &amp;lt;image y&amp;gt; &amp;lt;bottomleftsim X&amp;gt; &amp;lt;bottomleftsim y&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, I run a square of 4 sims in a 2x2 pattern. I started my sim placement at 0, 0 and ended at 1, 1. my line reads:&lt;br /&gt;
&lt;br /&gt;
 terrain load-tile f32 simalpha.raw 512 512 0 0&lt;br /&gt;
&lt;br /&gt;
Next, before you log in, you may want to go to type in:&lt;br /&gt;
&lt;br /&gt;
 terrain multiply 0.4&lt;br /&gt;
&lt;br /&gt;
This should scale it down from the nearly 300 meters altitude I ran into to something a little more reasonable for the minimap.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Terrain Tidbits brought to you by Tilde, with a few questions in IRC :) - [[User:Tildeampersand|Tilde]] 10:32, 15 August 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
= In World Questions =&lt;br /&gt;
&lt;br /&gt;
=== Does in world scripting work yet? ===&lt;br /&gt;
&lt;br /&gt;
Not yet, but there is a lot of work going on here.  Please see [[LlFunction_implementation_status]] for the latest info.&lt;br /&gt;
&lt;br /&gt;
=== Why do I walk through objects? ===&lt;br /&gt;
&lt;br /&gt;
Basicphysics doesn't support collisions between objects (just between you and the ground).  There is active work on other physics engines for OpenSim, but these are quite experimental at this point, so not considered supported.&lt;br /&gt;
&lt;br /&gt;
=== Can I edit my avatar? ===&lt;br /&gt;
&lt;br /&gt;
Yes, but you need to create a Shape, Hair, Shirt, and Pants first via the Inventory button.  There are no defaults created for each user at this point.&lt;br /&gt;
&lt;br /&gt;
= Grid Mode =&lt;br /&gt;
Note: Grid Mode isn't officially supported yet.  As such, you are pretty much on your own if you are trying to get OpenSim up and running in Grid Mode.&lt;br /&gt;
&lt;br /&gt;
=== I start the sim and it doesn't connect to any grid ===&lt;br /&gt;
&lt;br /&gt;
When OpenSim is first started, it needs configuration.&lt;br /&gt;
&lt;br /&gt;
* See [[OpenSim: Configuration]].&lt;br /&gt;
&lt;br /&gt;
=== I start the OpenSim.Grid.UserServer.exe and it gives an error ===&lt;br /&gt;
&lt;br /&gt;
If this error is access denied for username@localhost, the mysql database is not set up.&lt;br /&gt;
&lt;br /&gt;
It will print some text and wait for input - either an enter to accept a default value, or another value you can supply.&lt;br /&gt;
&lt;br /&gt;
* See [[OpenSim: Configuration]].&lt;br /&gt;
&lt;br /&gt;
=== I want to run my own Local Grid but one or more servers fail to start ===&lt;br /&gt;
&lt;br /&gt;
* Be sure that you're able to start OpenSim.exe alone, in Standalone mode, and to be able to login.&lt;br /&gt;
* Start the servers in the correct UGAS order and answer the questions as recommended (see [[OpenSim: Configuration]]).&lt;br /&gt;
* Set all the external URI's to the correct IP: 127.0.0.1 if running on your local machine, or aaa.bbb.ccc.ddd if running on a remote server.&lt;br /&gt;
* Check again all the *.xml configuration files for any wrong settings or typing errors...!&lt;br /&gt;
* Don't forget to connect with your SL-viewer to port 8002 (Grid User-Server) instead of 9000 (Standalone OpenSim-Server).&lt;br /&gt;
* Delete all *.xml and *.yap files in the bin directory if you want to run a full reconfiguration again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= How to ask for help =&lt;br /&gt;
&lt;br /&gt;
=== Before asking for help... ===&lt;br /&gt;
&lt;br /&gt;
* Search the wiki and web before asking for help.&lt;br /&gt;
* Check your configuration files for any obvious defects.&lt;br /&gt;
* Check that you're starting up the processes correctly.&lt;br /&gt;
* See [[OpenSim: Install]].&lt;br /&gt;
* See [[OpenSim: Configuration]].&lt;br /&gt;
* See [[OpenSim: Running]].&lt;br /&gt;
* See [[OpenSim: Connecting]].&lt;br /&gt;
&lt;br /&gt;
=== Asking in IRC ===&lt;br /&gt;
&lt;br /&gt;
IRC channels are #opensim-help, #opensim and #opensim-dev on EFNet. Approach them in that order :) Please be courteous and remember that the developers and anyone else assisting you are volunteers there.&lt;br /&gt;
&lt;br /&gt;
* Don't ask to ask, just ask.&lt;br /&gt;
* Phrase your question in the form of a question.&lt;br /&gt;
* Be specific.&lt;br /&gt;
* Explain the problem.&lt;br /&gt;
* Describe how to reproduce the problem.&lt;br /&gt;
* If you need to paste configuration files or error messages, please paste to [http://pastebin.ca/ pastebin] then send the link in the IRC channel.&lt;br /&gt;
&lt;br /&gt;
=== After you get help ===&lt;br /&gt;
&lt;br /&gt;
* If no-one can help you, please submit a bug.&lt;br /&gt;
* If someone does help you, please document the problem and fix on the wiki on this page.&lt;/div&gt;</summary>
		<author><name>Tedd</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>2007-08-29T19:33:31Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OpenSim =&lt;br /&gt;
[[Image:opensim_avatar.png]]&lt;br /&gt;
&lt;br /&gt;
Hello,&lt;br /&gt;
&lt;br /&gt;
This is the top level page for the OpenSim wiki. The links below are to various pages useful in obtaining, compiling and running OpenSim on both Windows &amp;amp; Linux.&lt;br /&gt;
&lt;br /&gt;
* [[OpenSim]]&lt;br /&gt;
** [[OpenSim: FAQ]]     (A set of Frequently Asked Questions)&lt;br /&gt;
** [[OpenSim: Install]] (How to install the simulator software)&lt;br /&gt;
** [[OpenSim: Configuration]] (How to configure the simulator for various modes)&lt;br /&gt;
** [[OpenSim: Network settings]] (How to setup the network for the simulator)&lt;br /&gt;
** [[OpenSim: Running]] (How to run standalone, local grid &amp;amp; public grid modes)&lt;br /&gt;
** [[OpenSim: Testing]] (What is tested)&lt;br /&gt;
** [[OpenSim: TechRef]] (A technical description of the simulator operation)&lt;br /&gt;
** [[OpenSim: Grids]]   (Known Public grids currently available)&lt;br /&gt;
** [[Opensim: 0.4 Release Target Discussion]]&lt;br /&gt;
** [[Opensim: 0.5 Release Target Discussion]]&lt;br /&gt;
** [[OpenSim: Development Team]]&lt;br /&gt;
** [[OpenSim: Class Diagrams]]&lt;br /&gt;
** [[OpenSim: Scripting]] (How to use scripts and what limitations apply)&lt;br /&gt;
&lt;br /&gt;
* Development Documentation&lt;br /&gt;
** [[PhysicsEngines]]   (Options for physics engines in OpenSim)&lt;br /&gt;
** [[MonoSqlite]] (How the database model currently works)&lt;br /&gt;
** [[llFunction implementation status]] (What LSL commands has been implemented)&lt;br /&gt;
** [[OpenSim.Region.ScriptEngine]] (How the ScriptEngine looks internally)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
== Who are the developers ==&lt;br /&gt;
OpenSim is an [http://en.wikipedia.org/wiki/Open_source open source] project. This means that it is developed by anyone who wants to participate. This could be you!&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
== Making first contact ==&lt;br /&gt;
We welcome testers and developers alike.&amp;lt;br /&amp;gt;&lt;br /&gt;
If you ''need help'' or ''want to help'' the best way to get in touch is IRC (chat network). There is a lot of activity there every day. &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC on EFNet, channel #OpenSim. Download an IRC client like [http://www.xchat.org/ X-Chat] and go to EFNet (server irc.efnet.net), channel #OpenSim. If you already have an IRC client installed you can just follow [irc://irc.efnet.org/OpenSim this link].&lt;br /&gt;
* The official website for OpenSim can be found at [http://www.opensimulator.org/ www.opensimulator.org]&lt;br /&gt;
* The mailing lists are in the process of moving to another server. The archives are available for [http://openmv.org/pipermail/opensim-dev/ OpenSim-Dev] and [http://openmv.org/pipermail/opensim-commits/ OpenSim-Commits].&lt;br /&gt;
* You can browse the source code for opensim at [http://openmetaverse.org/svn/index.cgi/opensim/ OpenSim SVN browser] (currently broken - use svn directly - &amp;lt;tt&amp;gt;svn co svn://opensecondlife.org/opensim/trunk opensim.new/trunk&amp;lt;/tt&amp;gt;)&lt;br /&gt;
* You can report bugs at the [http://bug.opensecondlife.org/ Mantis opensim bug tracker]&lt;/div&gt;</summary>
		<author><name>Tedd</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>2007-08-29T19:27:32Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OpenSim =&lt;br /&gt;
[[Image:opensim_avatar.png]]&lt;br /&gt;
&lt;br /&gt;
Hello,&lt;br /&gt;
&lt;br /&gt;
This is the top level page for the OpenSim wiki. The links below are to various pages useful in obtaining, compiling and running OpenSim on both Windows &amp;amp; Linux.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* [[OpenSim]]&lt;br /&gt;
** [[OpenSim: FAQ]]     (A set of Frequently Asked Questions)&lt;br /&gt;
** [[OpenSim: Install]] (How to install the simulator software)&lt;br /&gt;
** [[OpenSim: Configuration]] (How to configure the simulator for various modes)&lt;br /&gt;
** [[OpenSim: Network settings]] (How to setup the network for the simulator)&lt;br /&gt;
** [[OpenSim: Running]] (How to run standalone, local grid &amp;amp; public grid modes)&lt;br /&gt;
** [[OpenSim: Testing]] (What is tested)&lt;br /&gt;
** [[OpenSim: TechRef]] (A technical description of the simulator operation)&lt;br /&gt;
** [[OpenSim: Grids]]   (Known Public grids currently available)&lt;br /&gt;
** [[Opensim: 0.4 Release Target Discussion]]&lt;br /&gt;
** [[Opensim: 0.5 Release Target Discussion]]&lt;br /&gt;
** [[OpenSim: Development Team]]&lt;br /&gt;
** [[OpenSim: Class Diagrams]]&lt;br /&gt;
** [[OpenSim: Scripting]] (How to use scripting and what limitations apply)&lt;br /&gt;
&lt;br /&gt;
* Development Documentation&lt;br /&gt;
** [[PhysicsEngines]]   (Options for physics engines in OpenSim)&lt;br /&gt;
** [[MonoSqlite]] (How the database model currently works)&lt;br /&gt;
** [[llFunction implementation status]] (What LSL commands has been implemented)&lt;br /&gt;
** [[OpenSim.Region.ScriptEngine]] (How the ScriptEngine looks internally)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
== Who are the developers ==&lt;br /&gt;
OpenSim is an [http://en.wikipedia.org/wiki/Open_source open source] project. This means that it is developed by anyone who wants to participate. This could be you!&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
== Making first contact ==&lt;br /&gt;
We welcome testers and developers alike.&amp;lt;br /&amp;gt;&lt;br /&gt;
If you ''need help'' or ''want to help'' the best way to get in touch is IRC (chat network). There is a lot of activity there every day. &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC on EFNet, channel #OpenSim. Download an IRC client like [http://www.xchat.org/ X-Chat] and go to EFNet (server irc.efnet.net), channel #OpenSim. If you already have an IRC client installed you can just follow [irc://irc.efnet.org/OpenSim this link].&lt;br /&gt;
* The official website for OpenSim can be found at [http://www.opensimulator.org/ www.opensimulator.org]&lt;br /&gt;
* The mailing lists are in the process of moving to another server. The archives are available for [http://openmv.org/pipermail/opensim-dev/ OpenSim-Dev] and [http://openmv.org/pipermail/opensim-commits/ OpenSim-Commits].&lt;br /&gt;
* You can browse the source code for opensim at [http://openmetaverse.org/svn/index.cgi/opensim/ OpenSim SVN browser] (currently broken - use svn directly - &amp;lt;tt&amp;gt;svn co svn://opensecondlife.org/opensim/trunk opensim.new/trunk&amp;lt;/tt&amp;gt;)&lt;br /&gt;
* You can report bugs at the [http://bug.opensecondlife.org/ Mantis opensim bug tracker]&lt;/div&gt;</summary>
		<author><name>Tedd</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>2007-08-29T19:26:38Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:opensim_avatar.png]]&lt;br /&gt;
&lt;br /&gt;
Hello,&lt;br /&gt;
&lt;br /&gt;
This is the top level page for the OpenSim wiki. The links below are to various pages useful in obtaining, compiling and running OpenSim on both Windows &amp;amp; Linux.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* [[OpenSim]]&lt;br /&gt;
** [[OpenSim: FAQ]]     (A set of Frequently Asked Questions)&lt;br /&gt;
** [[OpenSim: Install]] (How to install the simulator software)&lt;br /&gt;
** [[OpenSim: Configuration]] (How to configure the simulator for various modes)&lt;br /&gt;
** [[OpenSim: Network settings]] (How to setup the network for the simulator)&lt;br /&gt;
** [[OpenSim: Running]] (How to run standalone, local grid &amp;amp; public grid modes)&lt;br /&gt;
** [[OpenSim: Testing]] (What is tested)&lt;br /&gt;
** [[OpenSim: TechRef]] (A technical description of the simulator operation)&lt;br /&gt;
** [[OpenSim: Grids]]   (Known Public grids currently available)&lt;br /&gt;
** [[Opensim: 0.4 Release Target Discussion]]&lt;br /&gt;
** [[Opensim: 0.5 Release Target Discussion]]&lt;br /&gt;
** [[OpenSim: Development Team]]&lt;br /&gt;
** [[OpenSim: Class Diagrams]]&lt;br /&gt;
** [[OpenSim: Scripting]] (How to use scripting and what limitations apply)&lt;br /&gt;
&lt;br /&gt;
* Development Documentation&lt;br /&gt;
** [[PhysicsEngines]]   (Options for physics engines in OpenSim)&lt;br /&gt;
** [[MonoSqlite]] (How the database model currently works)&lt;br /&gt;
** [[llFunction implementation status]] (What LSL commands has been implemented)&lt;br /&gt;
** [[OpenSim.Region.ScriptEngine]] (How the ScriptEngine looks internally)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
== Who are the developers ==&lt;br /&gt;
OpenSim is an [http://en.wikipedia.org/wiki/Open_source open source] project. This means that it is developed by anyone who wants to participate. This could be you!&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
== Making first contact ==&lt;br /&gt;
We welcome testers and developers alike.&amp;lt;br /&amp;gt;&lt;br /&gt;
If you ''need help'' or ''want to help'' the best way to get in touch is IRC (chat network). There is a lot of activity there every day. &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC on EFNet, channel #OpenSim. Download an IRC client like [http://www.xchat.org/ X-Chat] and go to EFNet (server irc.efnet.net), channel #OpenSim. If you already have an IRC client installed you can just follow [irc://irc.efnet.org/OpenSim this link].&lt;br /&gt;
* The official website for OpenSim can be found at [http://www.opensimulator.org/ www.opensimulator.org]&lt;br /&gt;
* The mailing lists are in the process of moving to another server. The archives are available for [http://openmv.org/pipermail/opensim-dev/ OpenSim-Dev] and [http://openmv.org/pipermail/opensim-commits/ OpenSim-Commits].&lt;br /&gt;
* You can browse the source code for opensim at [http://openmetaverse.org/svn/index.cgi/opensim/ OpenSim SVN browser] (currently broken - use svn directly - &amp;lt;tt&amp;gt;svn co svn://opensecondlife.org/opensim/trunk opensim.new/trunk&amp;lt;/tt&amp;gt;)&lt;br /&gt;
* You can report bugs at the [http://bug.opensecondlife.org/ Mantis opensim bug tracker]&lt;/div&gt;</summary>
		<author><name>Tedd</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>2007-08-29T19:26:03Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:opensim_avatar.png]]&lt;br /&gt;
&lt;br /&gt;
Hello,&lt;br /&gt;
&lt;br /&gt;
This is the top level page for the OpenSim wiki. The links below are to various pages useful in obtaining, compiling and running OpenSim on both Windows &amp;amp; Linux.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* [[OpenSim]]&lt;br /&gt;
** [[OpenSim: FAQ]]     (A set of Frequently Asked Questions)&lt;br /&gt;
** [[OpenSim: Install]] (How to install the simulator software)&lt;br /&gt;
** [[OpenSim: Configuration]] (How to configure the simulator for various modes)&lt;br /&gt;
** [[OpenSim: Network settings]] (How to setup the network for the simulator)&lt;br /&gt;
** [[OpenSim: Running]] (How to run standalone, local grid &amp;amp; public grid modes)&lt;br /&gt;
** [[OpenSim: Testing]] (What is tested)&lt;br /&gt;
** [[OpenSim: TechRef]] (A technical description of the simulator operation)&lt;br /&gt;
** [[OpenSim: Grids]]   (Known Public grids currently available)&lt;br /&gt;
** [[Opensim: 0.4 Release Target Discussion]]&lt;br /&gt;
** [[Opensim: 0.5 Release Target Discussion]]&lt;br /&gt;
** [[OpenSim: Development Team]]&lt;br /&gt;
** [[OpenSim: Class Diagrams]]&lt;br /&gt;
** [[OpenSim: Scripting]]&lt;br /&gt;
&lt;br /&gt;
* Development Documentation&lt;br /&gt;
** [[PhysicsEngines]]   (Options for physics engines in OpenSim)&lt;br /&gt;
** [[MonoSqlite]] (How the database model currently works)&lt;br /&gt;
** [[llFunction implementation status]] (What LSL commands has been implemented)&lt;br /&gt;
** [[OpenSim.Region.ScriptEngine]] (How the ScriptEngine looks internally)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
== Who are the developers ==&lt;br /&gt;
OpenSim is an [http://en.wikipedia.org/wiki/Open_source open source] project. This means that it is developed by anyone who wants to participate. This could be you!&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
== Making first contact ==&lt;br /&gt;
We welcome testers and developers alike.&amp;lt;br /&amp;gt;&lt;br /&gt;
If you ''need help'' or ''want to help'' the best way to get in touch is IRC (chat network). There is a lot of activity there every day. &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC on EFNet, channel #OpenSim. Download an IRC client like [http://www.xchat.org/ X-Chat] and go to EFNet (server irc.efnet.net), channel #OpenSim. If you already have an IRC client installed you can just follow [irc://irc.efnet.org/OpenSim this link].&lt;br /&gt;
* The official website for OpenSim can be found at [http://www.opensimulator.org/ www.opensimulator.org]&lt;br /&gt;
* The mailing lists are in the process of moving to another server. The archives are available for [http://openmv.org/pipermail/opensim-dev/ OpenSim-Dev] and [http://openmv.org/pipermail/opensim-commits/ OpenSim-Commits].&lt;br /&gt;
* You can browse the source code for opensim at [http://openmetaverse.org/svn/index.cgi/opensim/ OpenSim SVN browser] (currently broken - use svn directly - &amp;lt;tt&amp;gt;svn co svn://opensecondlife.org/opensim/trunk opensim.new/trunk&amp;lt;/tt&amp;gt;)&lt;br /&gt;
* You can report bugs at the [http://bug.opensecondlife.org/ Mantis opensim bug tracker]&lt;/div&gt;</summary>
		<author><name>Tedd</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>2007-08-29T19:25:31Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:opensim_avatar.png]]&lt;br /&gt;
&lt;br /&gt;
Hello,&lt;br /&gt;
&lt;br /&gt;
This is the top level page for the OpenSim wiki. The links below are to various pages useful in obtaining, compiling and running OpenSim on both Windows &amp;amp; Linux.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* [[OpenSim]]&lt;br /&gt;
** [[OpenSim: FAQ]]     (A set of Frequently Asked Questions)&lt;br /&gt;
** [[OpenSim: Install]] (How to install the simulator software)&lt;br /&gt;
** [[OpenSim: Configuration]] (How to configure the simulator for various modes)&lt;br /&gt;
** [[OpenSim: Network settings]] (How to setup the network for the simulator)&lt;br /&gt;
** [[OpenSim: Running]] (How to run standalone, local grid &amp;amp; public grid modes)&lt;br /&gt;
** [[OpenSim: Testing]] (What is tested)&lt;br /&gt;
** [[OpenSim: TechRef]] (A technical description of the simulator operation)&lt;br /&gt;
** [[OpenSim: Grids]]   (Known Public grids currently available)&lt;br /&gt;
** [[Opensim: 0.4_Release_Target_Discussion]]&lt;br /&gt;
** [[OpenSim: Development Team]]&lt;br /&gt;
** [[OpenSim: Class Diagrams]]&lt;br /&gt;
** [[OpenSim: Scripting]]&lt;br /&gt;
&lt;br /&gt;
* Development Documentation&lt;br /&gt;
** [[PhysicsEngines]]   (Options for physics engines in OpenSim)&lt;br /&gt;
** [[MonoSqlite]] (How the database model currently works)&lt;br /&gt;
** [[llFunction implementation status]] (What LSL commands has been implemented)&lt;br /&gt;
** [[OpenSim.Region.ScriptEngine]] (How the ScriptEngine looks internally)&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
== Who are the developers ==&lt;br /&gt;
OpenSim is an [http://en.wikipedia.org/wiki/Open_source open source] project. This means that it is developed by anyone who wants to participate. This could be you!&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
== Making first contact ==&lt;br /&gt;
We welcome testers and developers alike.&amp;lt;br /&amp;gt;&lt;br /&gt;
If you ''need help'' or ''want to help'' the best way to get in touch is IRC (chat network). There is a lot of activity there every day. &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC on EFNet, channel #OpenSim. Download an IRC client like [http://www.xchat.org/ X-Chat] and go to EFNet (server irc.efnet.net), channel #OpenSim. If you already have an IRC client installed you can just follow [irc://irc.efnet.org/OpenSim this link].&lt;br /&gt;
* The official website for OpenSim can be found at [http://www.opensimulator.org/ www.opensimulator.org]&lt;br /&gt;
* The mailing lists are in the process of moving to another server. The archives are available for [http://openmv.org/pipermail/opensim-dev/ OpenSim-Dev] and [http://openmv.org/pipermail/opensim-commits/ OpenSim-Commits].&lt;br /&gt;
* You can browse the source code for opensim at [http://openmetaverse.org/svn/index.cgi/opensim/ OpenSim SVN browser] (currently broken - use svn directly - &amp;lt;tt&amp;gt;svn co svn://opensecondlife.org/opensim/trunk opensim.new/trunk&amp;lt;/tt&amp;gt;)&lt;br /&gt;
* You can report bugs at the [http://bug.opensecondlife.org/ Mantis opensim bug tracker]&lt;/div&gt;</summary>
		<author><name>Tedd</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>2007-08-29T19:24:49Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:opensim_avatar.png]]&lt;br /&gt;
&lt;br /&gt;
Hello,&lt;br /&gt;
&lt;br /&gt;
This is the top level page for the OpenSim wiki. The links below are to various pages useful in obtaining, compiling and running OpenSim on both Windows &amp;amp; Linux.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* [[OpenSim]]&lt;br /&gt;
** [[OpenSim: FAQ]]     (A set of Frequently Asked Questions)&lt;br /&gt;
** [[OpenSim: Install]] (How to install the simulator software)&lt;br /&gt;
** [[OpenSim: Configuration]] (How to configure the simulator for various modes)&lt;br /&gt;
** [[OpenSim: Network settings]] (How to setup the network for the simulator)&lt;br /&gt;
** [[OpenSim: Running]] (How to run standalone, local grid &amp;amp; public grid modes)&lt;br /&gt;
** [[OpenSim: Testing]] (What is tested)&lt;br /&gt;
** [[OpenSim: TechRef]] (A technical description of the simulator operation)&lt;br /&gt;
** [[OpenSim: Grids]]   (Known Public grids currently available)&lt;br /&gt;
** [[Opensim: 0.4_Release_Target_Discussion]]&lt;br /&gt;
** [[OpenSim: Development Team]]&lt;br /&gt;
** [[OpenSim: Class Diagrams]]&lt;br /&gt;
** [[OpenSim: Scripting]]&lt;br /&gt;
&lt;br /&gt;
* Development Documentation&lt;br /&gt;
** [[PhysicsEngines]]   (Options for physics engines in OpenSim)&lt;br /&gt;
** [[MonoSqlite]] (How the database model currently works)&lt;br /&gt;
** [[llFunction implementation status]] (What LSL commands has been implemented)&lt;br /&gt;
** [[OpenSim.Region.ScriptEngine]] (How the ScriptEngine works)&lt;br /&gt;
&lt;br /&gt;
== Who are the developers ==&lt;br /&gt;
OpenSim is an [http://en.wikipedia.org/wiki/Open_source open source] project. This means that it is developed by anyone who wants to participate. This could be you!&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
== Making first contact ==&lt;br /&gt;
We welcome testers and developers alike.&amp;lt;br /&amp;gt;&lt;br /&gt;
If you ''need help'' or ''want to help'' the best way to get in touch is IRC (chat network). There is a lot of activity there every day. &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC on EFNet, channel #OpenSim. Download an IRC client like [http://www.xchat.org/ X-Chat] and go to EFNet (server irc.efnet.net), channel #OpenSim. If you already have an IRC client installed you can just follow [irc://irc.efnet.org/OpenSim this link].&lt;br /&gt;
* The official website for OpenSim can be found at [http://www.opensimulator.org/ www.opensimulator.org]&lt;br /&gt;
* The mailing lists are in the process of moving to another server. The archives are available for [http://openmv.org/pipermail/opensim-dev/ OpenSim-Dev] and [http://openmv.org/pipermail/opensim-commits/ OpenSim-Commits].&lt;br /&gt;
* You can browse the source code for opensim at [http://openmetaverse.org/svn/index.cgi/opensim/ OpenSim SVN browser] (currently broken - use svn directly - &amp;lt;tt&amp;gt;svn co svn://opensecondlife.org/opensim/trunk opensim.new/trunk&amp;lt;/tt&amp;gt;)&lt;br /&gt;
* You can report bugs at the [http://bug.opensecondlife.org/ Mantis opensim bug tracker]&lt;/div&gt;</summary>
		<author><name>Tedd</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>2007-08-29T19:22:51Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:opensim_avatar.png]]&lt;br /&gt;
&lt;br /&gt;
Hello,&lt;br /&gt;
&lt;br /&gt;
This is the top level page for the OpenSim wiki. The links below are to various pages useful in obtaining, compiling and running OpenSim on both Windows &amp;amp; Linux.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* [[OpenSim]]&lt;br /&gt;
** [[OpenSim: FAQ]]     (A set of Frequently Asked Questions)&lt;br /&gt;
** [[OpenSim: Install]] (How to install the simulator software)&lt;br /&gt;
** [[OpenSim: Configuration]] (How to configure the simulator for various modes)&lt;br /&gt;
** [[OpenSim: Network settings]] (How to setup the network for the simulator)&lt;br /&gt;
** [[OpenSim: Running]] (How to run standalone, local grid &amp;amp; public grid modes)&lt;br /&gt;
** [[OpenSim: Testing]] (What is tested)&lt;br /&gt;
** [[OpenSim: TechRef]] (A technical description of the simulator operation)&lt;br /&gt;
** [[OpenSim: Grids]]   (Known Public grids currently available)&lt;br /&gt;
** [[Opensim: 0.4_Release_Target_Discussion]]&lt;br /&gt;
** [[OpenSim: Development Team]]&lt;br /&gt;
** [[OpenSim: Class Diagrams]]&lt;br /&gt;
** [[OpenSim: Scripting]]&lt;br /&gt;
&lt;br /&gt;
* Development Documentation&lt;br /&gt;
** [[PhysicsEngines]]   (Options for physics engines in OpenSim)&amp;lt;br&amp;gt;&lt;br /&gt;
** [[MonoSqlite]] (How the database model currently works)&lt;br /&gt;
&lt;br /&gt;
== Who are the developers ==&lt;br /&gt;
OpenSim is an [http://en.wikipedia.org/wiki/Open_source open source] project. This means that it is developed by anyone who wants to participate. This could be you!&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
== Making first contact ==&lt;br /&gt;
We welcome testers and developers alike.&amp;lt;br /&amp;gt;&lt;br /&gt;
If you ''need help'' or ''want to help'' the best way to get in touch is IRC (chat network). There is a lot of activity there every day. &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
* IRC on EFNet, channel #OpenSim. Download an IRC client like [http://www.xchat.org/ X-Chat] and go to EFNet (server irc.efnet.net), channel #OpenSim. If you already have an IRC client installed you can just follow [irc://irc.efnet.org/OpenSim this link].&lt;br /&gt;
* The official website for OpenSim can be found at [http://www.opensimulator.org/ www.opensimulator.org]&lt;br /&gt;
* The mailing lists are in the process of moving to another server. The archives are available for [http://openmv.org/pipermail/opensim-dev/ OpenSim-Dev] and [http://openmv.org/pipermail/opensim-commits/ OpenSim-Commits].&lt;br /&gt;
* You can browse the source code for opensim at [http://openmetaverse.org/svn/index.cgi/opensim/ OpenSim SVN browser] (currently broken - use svn directly - &amp;lt;tt&amp;gt;svn co svn://opensecondlife.org/opensim/trunk opensim.new/trunk&amp;lt;/tt&amp;gt;)&lt;br /&gt;
* You can report bugs at the [http://bug.opensecondlife.org/ Mantis opensim bug tracker]&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Scripting_About</id>
		<title>Scripting About</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Scripting_About"/>
				<updated>2007-08-29T19:00:51Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: /* How to contribute */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How to use scripts in OpenSim ==&lt;br /&gt;
&lt;br /&gt;
Have a look at the [http://wiki.secondlife.com/wiki/LSL_Portal LSL wiki] to learn LSL.&amp;lt;br /&amp;gt;&lt;br /&gt;
The current procedure to get a script working in OpenSim is:&lt;br /&gt;
* Create a new script in inventory.&lt;br /&gt;
* Write whatever script you want there. Check [[llFunction implementation status]] for what commands that is supported.&lt;br /&gt;
* Drag the script over to an object.&lt;br /&gt;
* Delete the script from the object to deactivate script.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
There are still some defects:&lt;br /&gt;
* You can not edit script while it is inside object.&lt;br /&gt;
* When restarting OpenSim server scripts are lost and not started.&lt;br /&gt;
* Line numbers in error messages may miss by 1 or 2 lines.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About OpenSim scripting ==&lt;br /&gt;
An important ingredience in Second Life is scripting. It is the engine that drives it all.&amp;lt;br /&amp;gt;&lt;br /&gt;
In SL [http://wiki.secondlife.com/wiki/LSL_Portal LSL (Linden Scripting Language)] is the language you have to use. This language has its limitations, and is executed very slowly. But nevertheless it works and it gets the job done.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Linden Labs are planning to move LSL scripting over to C# on Mono some time in the future. This has been in the works since 2005 at least. There are many difficult technical challenges related to this.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
OpenSim supports LSL and C# scripts. But with limitations:&amp;lt;br /&amp;gt;&lt;br /&gt;
* Not all commands and events has been implemented. See [[llFunction implementation status]] for details on what commands work and not.&lt;br /&gt;
* Scripts that are running can not cross regions.&lt;br /&gt;
* You can not use loops inside your scripts. Actually you can use loops, but it will block other scripts from executing.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The OpenSim script engine compiles the LSL code down to .Net code that is JIT'ed to CPU native gode. In effect this means that a LSL script in OpenSim should run faster than in Second Life.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
== How to contribute ==&lt;br /&gt;
The ScriptEngine is being developed by the many developers.&amp;lt;br /&amp;gt;&lt;br /&gt;
New developers are always welcome. If you want to contribute, even just a tiny little bit, have a look at the [[OpenSim.Region.ScriptEngine]] page. There is a low of developer activity on IRC ([[Contact us]]), feel free to drop in.&amp;lt;br /&amp;gt;&lt;br /&gt;
A blog with development status can be found at [http://teddmaa.blogspot.com/ http://teddmaa.blogspot.com/].&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OpenSim:_Scripting</id>
		<title>OpenSim: Scripting</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OpenSim:_Scripting"/>
				<updated>2007-08-29T19:00:51Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: /* How to contribute */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How to use scripts in OpenSim ==&lt;br /&gt;
&lt;br /&gt;
Have a look at the [http://wiki.secondlife.com/wiki/LSL_Portal LSL wiki] to learn LSL.&amp;lt;br /&amp;gt;&lt;br /&gt;
The current procedure to get a script working in OpenSim is:&lt;br /&gt;
* Create a new script in inventory.&lt;br /&gt;
* Write whatever script you want there. Check [[llFunction implementation status]] for what commands that is supported.&lt;br /&gt;
* Drag the script over to an object.&lt;br /&gt;
* Delete the script from the object to deactivate script.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
There are still some defects:&lt;br /&gt;
* You can not edit script while it is inside object.&lt;br /&gt;
* When restarting OpenSim server scripts are lost and not started.&lt;br /&gt;
* Line numbers in error messages may miss by 1 or 2 lines.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About OpenSim scripting ==&lt;br /&gt;
An important ingredience in Second Life is scripting. It is the engine that drives it all.&amp;lt;br /&amp;gt;&lt;br /&gt;
In SL [http://wiki.secondlife.com/wiki/LSL_Portal LSL (Linden Scripting Language)] is the language you have to use. This language has its limitations, and is executed very slowly. But nevertheless it works and it gets the job done.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Linden Labs are planning to move LSL scripting over to C# on Mono some time in the future. This has been in the works since 2005 at least. There are many difficult technical challenges related to this.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
OpenSim supports LSL and C# scripts. But with limitations:&amp;lt;br /&amp;gt;&lt;br /&gt;
* Not all commands and events has been implemented. See [[llFunction implementation status]] for details on what commands work and not.&lt;br /&gt;
* Scripts that are running can not cross regions.&lt;br /&gt;
* You can not use loops inside your scripts. Actually you can use loops, but it will block other scripts from executing.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The OpenSim script engine compiles the LSL code down to .Net code that is JIT'ed to CPU native gode. In effect this means that a LSL script in OpenSim should run faster than in Second Life.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
== How to contribute ==&lt;br /&gt;
The ScriptEngine is being developed by the many developers.&amp;lt;br /&amp;gt;&lt;br /&gt;
New developers are always welcome. If you want to contribute, even just a tiny little bit, have a look at the [[OpenSim.Region.ScriptEngine]] page. There is a low of developer activity on IRC ([[Contact us]]), feel free to drop in.&amp;lt;br /&amp;gt;&lt;br /&gt;
A blog with development status can be found at [http://teddmaa.blogspot.com/ http://teddmaa.blogspot.com/].&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Scripting_About</id>
		<title>Scripting About</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Scripting_About"/>
				<updated>2007-08-29T18:58:07Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How to use scripts in OpenSim ==&lt;br /&gt;
&lt;br /&gt;
Have a look at the [http://wiki.secondlife.com/wiki/LSL_Portal LSL wiki] to learn LSL.&amp;lt;br /&amp;gt;&lt;br /&gt;
The current procedure to get a script working in OpenSim is:&lt;br /&gt;
* Create a new script in inventory.&lt;br /&gt;
* Write whatever script you want there. Check [[llFunction implementation status]] for what commands that is supported.&lt;br /&gt;
* Drag the script over to an object.&lt;br /&gt;
* Delete the script from the object to deactivate script.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
There are still some defects:&lt;br /&gt;
* You can not edit script while it is inside object.&lt;br /&gt;
* When restarting OpenSim server scripts are lost and not started.&lt;br /&gt;
* Line numbers in error messages may miss by 1 or 2 lines.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About OpenSim scripting ==&lt;br /&gt;
An important ingredience in Second Life is scripting. It is the engine that drives it all.&amp;lt;br /&amp;gt;&lt;br /&gt;
In SL [http://wiki.secondlife.com/wiki/LSL_Portal LSL (Linden Scripting Language)] is the language you have to use. This language has its limitations, and is executed very slowly. But nevertheless it works and it gets the job done.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Linden Labs are planning to move LSL scripting over to C# on Mono some time in the future. This has been in the works since 2005 at least. There are many difficult technical challenges related to this.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
OpenSim supports LSL and C# scripts. But with limitations:&amp;lt;br /&amp;gt;&lt;br /&gt;
* Not all commands and events has been implemented. See [[llFunction implementation status]] for details on what commands work and not.&lt;br /&gt;
* Scripts that are running can not cross regions.&lt;br /&gt;
* You can not use loops inside your scripts. Actually you can use loops, but it will block other scripts from executing.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The OpenSim script engine compiles the LSL code down to .Net code that is JIT'ed to CPU native gode. In effect this means that a LSL script in OpenSim should run faster than in Second Life.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
== How to contribute ==&lt;br /&gt;
The ScriptEngine is being developed by many developers. New developers are always welcome. If you want to contribute, even just a tiny little bit, have a look at the [[OpenSim.Region.ScriptEngine]] page.&amp;lt;br /&amp;gt;&lt;br /&gt;
A blog with development status can be found at [http://teddmaa.blogspot.com/ http://teddmaa.blogspot.com/].&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OpenSim:_Scripting</id>
		<title>OpenSim: Scripting</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OpenSim:_Scripting"/>
				<updated>2007-08-29T18:58:07Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How to use scripts in OpenSim ==&lt;br /&gt;
&lt;br /&gt;
Have a look at the [http://wiki.secondlife.com/wiki/LSL_Portal LSL wiki] to learn LSL.&amp;lt;br /&amp;gt;&lt;br /&gt;
The current procedure to get a script working in OpenSim is:&lt;br /&gt;
* Create a new script in inventory.&lt;br /&gt;
* Write whatever script you want there. Check [[llFunction implementation status]] for what commands that is supported.&lt;br /&gt;
* Drag the script over to an object.&lt;br /&gt;
* Delete the script from the object to deactivate script.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
There are still some defects:&lt;br /&gt;
* You can not edit script while it is inside object.&lt;br /&gt;
* When restarting OpenSim server scripts are lost and not started.&lt;br /&gt;
* Line numbers in error messages may miss by 1 or 2 lines.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About OpenSim scripting ==&lt;br /&gt;
An important ingredience in Second Life is scripting. It is the engine that drives it all.&amp;lt;br /&amp;gt;&lt;br /&gt;
In SL [http://wiki.secondlife.com/wiki/LSL_Portal LSL (Linden Scripting Language)] is the language you have to use. This language has its limitations, and is executed very slowly. But nevertheless it works and it gets the job done.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Linden Labs are planning to move LSL scripting over to C# on Mono some time in the future. This has been in the works since 2005 at least. There are many difficult technical challenges related to this.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
OpenSim supports LSL and C# scripts. But with limitations:&amp;lt;br /&amp;gt;&lt;br /&gt;
* Not all commands and events has been implemented. See [[llFunction implementation status]] for details on what commands work and not.&lt;br /&gt;
* Scripts that are running can not cross regions.&lt;br /&gt;
* You can not use loops inside your scripts. Actually you can use loops, but it will block other scripts from executing.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The OpenSim script engine compiles the LSL code down to .Net code that is JIT'ed to CPU native gode. In effect this means that a LSL script in OpenSim should run faster than in Second Life.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
== How to contribute ==&lt;br /&gt;
The ScriptEngine is being developed by many developers. New developers are always welcome. If you want to contribute, even just a tiny little bit, have a look at the [[OpenSim.Region.ScriptEngine]] page.&amp;lt;br /&amp;gt;&lt;br /&gt;
A blog with development status can be found at [http://teddmaa.blogspot.com/ http://teddmaa.blogspot.com/].&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Scripting_About</id>
		<title>Scripting About</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Scripting_About"/>
				<updated>2007-08-29T16:52:19Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How to use scripts in OpenSim ==&lt;br /&gt;
&lt;br /&gt;
Have a look at the [http://wiki.secondlife.com/wiki/LSL_Portal LSL wiki] to learn LSL.&amp;lt;br /&amp;gt;&lt;br /&gt;
The current procedure to get a script working in OpenSim is:&lt;br /&gt;
* Create a new script in inventory.&lt;br /&gt;
* Write whatever script you want there. Check [[llFunction implementation status]] for what commands that is supported.&lt;br /&gt;
* Drag the script over to an object.&lt;br /&gt;
* Delete the script from the object to deactivate script.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
There are still some defects:&lt;br /&gt;
* You can not edit script while it is inside object.&lt;br /&gt;
* When restarting OpenSim server scripts are lost and not started.&lt;br /&gt;
* Line numbers in error messages may miss by 1 or 2 lines.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About OpenSim scripting ==&lt;br /&gt;
An important ingredience in Second Life is scripting. It is the engine that drives it all.&amp;lt;br /&amp;gt;&lt;br /&gt;
In SL [http://wiki.secondlife.com/wiki/LSL_Portal LSL (Linden Scripting Language)] is the language you have to use. This language has its limitations, and is executed very slowly. But nevertheless it works and it gets the job done.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Linden Labs are planning to move LSL scripting over to C# on Mono some time in the future. This has been in the works since 2005 at least. There are many difficult technical challenges related to this.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
OpenSim supports LSL and C# scripts. But with limitations:&amp;lt;br /&amp;gt;&lt;br /&gt;
* Not all commands and events has been implemented. See [[llFunction implementation status]] for details on what commands work and not.&lt;br /&gt;
* Scripts that are running can not cross regions.&lt;br /&gt;
* You can not use loops inside your scripts. Actually you can use loops, but it will block other scripts from executing.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The OpenSim script engine compiles the LSL code down to .Net code that is JIT'ed to CPU native gode. In effect this means that a LSL script in OpenSim should run faster than in Second Life.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The ScriptEngine is being developed by many developers. If you want to contribute, have a look at the [[OpenSim.Region.ScriptEngine]] page.&amp;lt;br /&amp;gt;&lt;br /&gt;
A blog with development status can be found at [http://teddmaa.blogspot.com/ http://teddmaa.blogspot.com/].&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OpenSim:_Scripting</id>
		<title>OpenSim: Scripting</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OpenSim:_Scripting"/>
				<updated>2007-08-29T16:52:19Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How to use scripts in OpenSim ==&lt;br /&gt;
&lt;br /&gt;
Have a look at the [http://wiki.secondlife.com/wiki/LSL_Portal LSL wiki] to learn LSL.&amp;lt;br /&amp;gt;&lt;br /&gt;
The current procedure to get a script working in OpenSim is:&lt;br /&gt;
* Create a new script in inventory.&lt;br /&gt;
* Write whatever script you want there. Check [[llFunction implementation status]] for what commands that is supported.&lt;br /&gt;
* Drag the script over to an object.&lt;br /&gt;
* Delete the script from the object to deactivate script.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
There are still some defects:&lt;br /&gt;
* You can not edit script while it is inside object.&lt;br /&gt;
* When restarting OpenSim server scripts are lost and not started.&lt;br /&gt;
* Line numbers in error messages may miss by 1 or 2 lines.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About OpenSim scripting ==&lt;br /&gt;
An important ingredience in Second Life is scripting. It is the engine that drives it all.&amp;lt;br /&amp;gt;&lt;br /&gt;
In SL [http://wiki.secondlife.com/wiki/LSL_Portal LSL (Linden Scripting Language)] is the language you have to use. This language has its limitations, and is executed very slowly. But nevertheless it works and it gets the job done.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Linden Labs are planning to move LSL scripting over to C# on Mono some time in the future. This has been in the works since 2005 at least. There are many difficult technical challenges related to this.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
OpenSim supports LSL and C# scripts. But with limitations:&amp;lt;br /&amp;gt;&lt;br /&gt;
* Not all commands and events has been implemented. See [[llFunction implementation status]] for details on what commands work and not.&lt;br /&gt;
* Scripts that are running can not cross regions.&lt;br /&gt;
* You can not use loops inside your scripts. Actually you can use loops, but it will block other scripts from executing.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The OpenSim script engine compiles the LSL code down to .Net code that is JIT'ed to CPU native gode. In effect this means that a LSL script in OpenSim should run faster than in Second Life.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The ScriptEngine is being developed by many developers. If you want to contribute, have a look at the [[OpenSim.Region.ScriptEngine]] page.&amp;lt;br /&amp;gt;&lt;br /&gt;
A blog with development status can be found at [http://teddmaa.blogspot.com/ http://teddmaa.blogspot.com/].&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Scripting_About</id>
		<title>Scripting About</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Scripting_About"/>
				<updated>2007-08-29T16:51:56Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: /* About OpenSim scripting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About OpenSim scripting ==&lt;br /&gt;
An important ingredience in Second Life is scripting. It is the engine that drives it all.&amp;lt;br /&amp;gt;&lt;br /&gt;
In SL [http://wiki.secondlife.com/wiki/LSL_Portal LSL (Linden Scripting Language)] is the language you have to use. This language has its limitations, and is executed very slowly. But nevertheless it works and it gets the job done.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Linden Labs are planning to move LSL scripting over to C# on Mono some time in the future. This has been in the works since 2005 at least. There are many difficult technical challenges related to this.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
OpenSim supports LSL and C# scripts. But with limitations:&amp;lt;br /&amp;gt;&lt;br /&gt;
* Not all commands and events has been implemented. See [[llFunction implementation status]] for details on what commands work and not.&lt;br /&gt;
* Scripts that are running can not cross regions.&lt;br /&gt;
* You can not use loops inside your scripts. Actually you can use loops, but it will block other scripts from executing.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The OpenSim script engine compiles the LSL code down to .Net code that is JIT'ed to CPU native gode. In effect this means that a LSL script in OpenSim should run faster than in Second Life.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The ScriptEngine is being developed by many developers. If you want to contribute, have a look at the [[OpenSim.Region.ScriptEngine]] page.&amp;lt;br /&amp;gt;&lt;br /&gt;
A blog with development status can be found at [http://teddmaa.blogspot.com/ http://teddmaa.blogspot.com/].&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to use scripts in OpenSim ==&lt;br /&gt;
&lt;br /&gt;
Have a look at the [http://wiki.secondlife.com/wiki/LSL_Portal LSL wiki] to learn LSL.&amp;lt;br /&amp;gt;&lt;br /&gt;
The current procedure to get a script working in OpenSim is:&lt;br /&gt;
* Create a new script in inventory.&lt;br /&gt;
* Write whatever script you want there. Check [[llFunction implementation status]] for what commands that is supported.&lt;br /&gt;
* Drag the script over to an object.&lt;br /&gt;
* Delete the script from the object to deactivate script.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
There are still some defects:&lt;br /&gt;
* You can not edit script while it is inside object.&lt;br /&gt;
* When restarting OpenSim server scripts are lost and not started.&lt;br /&gt;
* Line numbers in error messages may miss by 1 or 2 lines.&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/OpenSim:_Scripting</id>
		<title>OpenSim: Scripting</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/OpenSim:_Scripting"/>
				<updated>2007-08-29T16:51:56Z</updated>
		
		<summary type="html">&lt;p&gt;Tedd: /* About OpenSim scripting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About OpenSim scripting ==&lt;br /&gt;
An important ingredience in Second Life is scripting. It is the engine that drives it all.&amp;lt;br /&amp;gt;&lt;br /&gt;
In SL [http://wiki.secondlife.com/wiki/LSL_Portal LSL (Linden Scripting Language)] is the language you have to use. This language has its limitations, and is executed very slowly. But nevertheless it works and it gets the job done.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Linden Labs are planning to move LSL scripting over to C# on Mono some time in the future. This has been in the works since 2005 at least. There are many difficult technical challenges related to this.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
OpenSim supports LSL and C# scripts. But with limitations:&amp;lt;br /&amp;gt;&lt;br /&gt;
* Not all commands and events has been implemented. See [[llFunction implementation status]] for details on what commands work and not.&lt;br /&gt;
* Scripts that are running can not cross regions.&lt;br /&gt;
* You can not use loops inside your scripts. Actually you can use loops, but it will block other scripts from executing.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The OpenSim script engine compiles the LSL code down to .Net code that is JIT'ed to CPU native gode. In effect this means that a LSL script in OpenSim should run faster than in Second Life.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The ScriptEngine is being developed by many developers. If you want to contribute, have a look at the [[OpenSim.Region.ScriptEngine]] page.&amp;lt;br /&amp;gt;&lt;br /&gt;
A blog with development status can be found at [http://teddmaa.blogspot.com/ http://teddmaa.blogspot.com/].&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to use scripts in OpenSim ==&lt;br /&gt;
&lt;br /&gt;
Have a look at the [http://wiki.secondlife.com/wiki/LSL_Portal LSL wiki] to learn LSL.&amp;lt;br /&amp;gt;&lt;br /&gt;
The current procedure to get a script working in OpenSim is:&lt;br /&gt;
* Create a new script in inventory.&lt;br /&gt;
* Write whatever script you want there. Check [[llFunction implementation status]] for what commands that is supported.&lt;br /&gt;
* Drag the script over to an object.&lt;br /&gt;
* Delete the script from the object to deactivate script.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
There are still some defects:&lt;br /&gt;
* You can not edit script while it is inside object.&lt;br /&gt;
* When restarting OpenSim server scripts are lost and not started.&lt;br /&gt;
* Line numbers in error messages may miss by 1 or 2 lines.&lt;/div&gt;</summary>
		<author><name>Tedd</name></author>	</entry>

	</feed>