ignoring a repeated UseCircuitCode

Categories: Editorial
Comments: No Comments
Published on: November 2, 2011

While working on smoothing the rest of the kinks out of my grid, i have bumped into this error:

[Opensim-users] ignoring a repeated UseCircuitCode - Client IP verification not performed

This annoying little scuff on my otherwise immaculate console stream has been the object of my attention for two reasons:
1. Whatever causes it, seems to be able to crash the server when logged in from the Pocket Metaverse© client.

2. It makes groups and profiles terribly unstable.

Bare in mind that when i say terribly i refer to a grid like mine, which is running on extremely low resources… which incidentally seems to be the best platform to troubleshoot errors, as they will manifest a lot quicker when undiluted by other factors.

Since this post is meant to be simply a stub connected with other groups and profile issues which i will probably encounter more and more in the future, i want to keep it short and concise:

Following a post from this link i decided to open my region configuration file and change the internal address assigned to each region, to my router address. I did have some reservations about that… which they soon manifested as an abrupt termination of the server on start-up. Yet i had suspicion that i was still on the right track. Following my instincts i replaced the internal address with something, to my eyes, more suitable, and set the internal address of my server computer from within the router. Once replacing my router number with 192.168.1.x, i began to enjoy a relatively error-free environment both from Imprudence and Pocket Metaverse.

Stay tuned for more as i have a feeling this yellow line reading:

unhandled packet CloseCircuit

is going to be my next stub to write about… :-)

The problem with Groud Zero… and Groups.

Categories: Editorial
Comments: No Comments
Published on: November 1, 2011

The Problem with Ground Zero:

Ground Zero is what i call the starting region of my grid. Located at coordinates 5000,5000 this region communicated through port 9000 and i have to say… i have learned my lesson on why it should remain that way.

At some point i decided i wanted to completely re-haul my grid and redesign it using a proper map and a layout that would make more sense. I thought of creating a 9-region layout in a Tic-Tac-Toe grid formation, with Ground Zero as the center grid. It would have looked perfect, except for one problem: It just doesn’t work that way.

Having set my starting region at 5001,5001 and the surrounding regions around it, i began experiencing a range of unpleasant occurrences: for one, no other regions but ground-zero was visible. I could walk and cross regions, but i was basically walking on air and unable to select any other terrain but the starting region’s. Other problems related to region instability, lag, crashes and other frustrating problems affected the grid to the point that i went through a few completely fresh installations. Needless to say they all failed and showed identical issues as soon as i fed my regions configuration file to the server.

I finally succumbed and switched my South/Western region (5000,5000) with Ground Zero (5001,5001), and, you guessed it: everything was back to normal.

 

Needless to say, in the process of troubleshooting, i did my share of unwanted damage to other components of my grid, which brings me to the second part of this post:

The problem with Groups:

Groups in Opensim are handled by a module created under the project name Floatsam and available here.

In the simplest terms, the Floatsam project relies on an array of .php files and the support of a MySQL database which must communicate through a set port.

A few days ago i encountered a problem while redesigning my grid, which lead me to accidentally close a few ports which i needed my router to forward in order to allow a number of services to communicate with the outside world.

As my grid was brand new, i was lucky enough to be able to narrow the problem down to very basic factors, but it wasn’t until i started experiencing logins problems that i realized the source of my troubles was right under my nose:

In my experience, closing the port responsible for groups actually didn’t seem to shut down groups at all, or even impact profiles, as they displayed correctly and still allowed me to make changes, until i logged in simultaneously with two users at the same time. The console started throwing errors related to the XML-RPC Groups module. It just didn’t make sense. Groups were up, profiles were working… then suddenly the server just… crashed. Within a few hours things got progressively worse. Logging was completely out of the question, and yet, the XML-RPC module was the only thing throwing errors.

The file responsible for allowing communication with the groups module, config.php, has a line which i had commented out (for reasons i can’t quite recall) a long time ago, which specifies a port number. I didn’t know why i needed one, since i was formerly hosting the XML-RPC files remotely, but apparently i didn’t take into account the fact that the server is still running off my router at home. Once i reinstated port forwarding on that particular port (whether or not it was commented, it didn’t make much of a difference), everything went back to normal.

Opensim – Terra-forming

Categories: Editorial
Comments: No Comments
Published on: October 13, 2011

Terra-forming is the term used to define the action of re-shaping a landscape to suit numerous purposes, for instance, to create a more practical, viable or visually appealing background for a community, or to design a more biologically and structurally harmonious and balanced habitat.

Terra-forming is, in most cases, the first action that follows careful planning and generation of all the regions within a simulation grid.
There are a few important considerations to make when Terra-forming on a grid:

1. Terra-forming while being logged on the grid is impractical, as it entails to manually sculpt the landscape, causing network lag and potential crashes, not to mention an impractical waste of hardware resources.
2. Terra-forming must be performed one region at a time.
3. If performed properly, Terra-forming can be surprisingly quick and fun to do.

Let’s get started.

Software needed:

• Any paint program that support layers, such as Adobe Photoshop™ or Gimp.
• A procedural fractal generator able to export to any of the most common graphic formats. There is literally hundreds on the net, but be careful what you choose, as you may have to find a way to translate your files into readable formats from exotic/proprietary ones.

My suggestion is a very small but powerful generator called gwTerraNoise. You can download a free copy at: http://www.guruware.at/main/terraNoise/index.html
In spite of the unusual interface, the learning curve is very quick and it allows to generate very high resolution images in seconds, using a combination of easy to plug in algorithms.

The procedure

As i have recently added two more regions to Utopia with the intent of using them as potential residential land, i have been faced with an aesthetic dilemma. In short, Utopia began to look… really ugly, really fast.

On OpenSimulator.org i began reading about Mega Regions and options available to be able to terraform quickly several regions within a grid.

The answer is simple: height-maps (see picture below).

Height-map sample

height-map sample

As you can see from the picture, height-maps are nothing more than flat, two-dimensional pictures made of 256 shades of grey.

The function of this map is to control the look of the terrain within the grid by sculpting the surface of the terrain according to a direct correlation between the brightness of the shades of grey and the altitude of the terrain.

Think of it as a mesh or a net in a hypothetical “game” where the rules are to “paint” the net with brighter or darker shades of grey: wherever dark paint is found on the net, the mesh will be pulled down, while where brighter paint is applied, the mesh must be pulled up. Naturally this is a very simplistic explanation, as there is more involved in this process.

As previously mentioned, regions must be modified individually, so what if we need to apply a consistent look throughout an entire grid?

The texture needed to  modify a region is rather tiny, measuring at 256 by 256 pixels. Not much, but enough to give any terrain a very complex and exotic look.

In order to change the look of an entire grid made of several regions, some planning must be done:

First of all, all regions must be adjacent, possibly in a rectangular or square formation, merely for practical reasons.

Make a map with all your regions and make sure you note down their names. For example, in the case of Utopia, we have 6 regions, which i have named slightly differently. The formation of these regions is very simple, three to the left and three to the right, so as to form a rectangle.

In terms of creating a complex height-map for all my regions, i resorted to generate a map using gwTerraNoise of exactly 512 pixels (256+256 in width), by 768 pixels (256×3 in height). This allows me be as creative as i want to be with my total canvas for my grid, and in the end being able to split the height-map into the six regions while maintaining consistency.

Once i have generated an ideal look for my map, it was time to export the map into a .tga (Targa) file, open it in Photoshop and perform the following steps:

1. double-click the imported map and turn it into a layer.

2. right click the layer of the map and select “convert to smart object”. This will turn the layer into an external file that will be unaffected by scaling or stretching.

3. create a new layer and fill it in black

4. change the transparency level so as to barely let the underlying height-map layer through the black layer.

5. select the black square and copy it to the clipboard.

6. double-click the height-map (this will open it in a new window)

7. paste the copy of the black square layer into the newly opened height-map layer

8. let the black square be in the middle of the canvas as it is automatically pasted

9. close the new window and return to the 256×256 canvas.

10. Select and “Control+T” the height-map layer. This will render the layer movable.

11. move the height-map layer so that it’s bottom left corner touches the boundary of the 256×256 pixels canvas. We now have a ready-to export first region for the grid!

In order to generate the remaining five regions, all we need is to Control+T the height-map layer that we converted into a smart object, and move it so that we can export it in each region of the grid’s map.

A few consideration over the above points:

Q. Why the black filled layer?
A. When we create a fractal map, there is usually far too much contrast, which in turns will generate huge mountain peaks in place of what we would expect as low rolling hills. The black layer allows us to use a cautionary measure to limit the height of our terrains so that we can make smaller adjustment and get a sense of just how much contrast an ideal height-map should have.

Q. Why do i need to copy the black square into the new canvas where the height-map is?
A. This is merely a quick way to have a reference of how far you should move the height-map across, so that it will be perfectly aligned without causing discrepancies of seams between terrains.

Q. Ok… I’m just totally lost.
A. Well, I’m jotting this post down very quickly, but don’t fret, i will edit it into a proper tutorial later on… with pictures.

So… now i have a bunch of grey-scaled pictures. Now what??

Now it’s time to run your grid and get ready to type some commands into your grid’s console. Make sure all your height-maps are saved under your /bin folder with names you can remember easily, and as in .PNG format (currently it’s the one that gave me less problems).
At your #root: prompt type the following:

change region (name of the region you want to Terra-form)

Hit Enter and as soon as you see the prompt setting the current region as the one you specified, type the following:

terrain load file_name_of_your_terrain.png

Hit enter and watch as your terrain is instantly being sculpted into according to the .PNG map specified. This can be done while being logged into the grid and it won’t affect performance.

One last consideration:

It is recommended to plan Terra-forming in consideration of the architecture already built on the land. even better if it’s possible to just clear the regions before Terra-forming. for instance, as i went to modify the look of two regions where i have a monorail running, i realized i had to spend a bit of time digging my train suddenly turned into an unusable subway… a small price to pay for a better looking grid.

Grid – Basic Definitions

Categories: Editorial
Comments: No Comments
Published on: October 7, 2011

Grid

Basic Definitions

There is a number of terms commonly used when referring to elements on a Grid.
The list is not complete as this is merely considered “jargon” which is subjected to modifications up to individual interpretation.

The Grid: The Grid is the digital space where the virtual simulation exists. It can be compared to a micro-universe. The Grid alone cannot be explored, it simply exists, it cannot be seen, as it’s just the infrastructure for the virtual simulation to take place. It’s like the blackness of space that some assume to be the edge of the universe or “dark matter”, the invisible space between cosmic bodies.

Regions: regions can be compared to planets, and are necessary so that the virtual simulation can be explored and seen. Regions are square areas that can be adjacent to each other, or separate. If two regions do not touch each other, they cannot be crossed directly. Teleportation is the only way to travel from and to regions not physically connected to one another.

Regions are made of four elements:

  • Region floor, or foundation: A finite flat area at the bottom of the region.
    Region landscape, or terrain: A finite textured surface that exists above the region floor. It can be sculpted to resemble any kind of landscape and it can be raised or lowered.
    Water plane: An apparently infinite surface resembling a body of water featuring reflections, water texture and a wave pattern.
    Sky: An empty space, as big at the grid itself. It allows for any object or user to exist at any altitude. It features cloud formations, a customizable sky texture, custom sun-moon cycle, fog and other atmospheric effects.

Prim: “prim” stands for “primitive” and it defines the primitive solid geometries used to build any object within the Grid. Prims can be modified in various ways, they can be scaled, twisted, skewed or tapered, hollowed out, sliced, and each face of their basic geometry can be textured individually. A prim cannot be split or divided into other prims. A prim can be given physical properties, such as being susceptible to gravity or wind, turned into a flexible cloth-like object, it can be turned into a light source or controlled by a programming script.

Root Prim: Prims can be linked to each other so that they can be interacted with as a unit. The last prim to which all other prims are linked to is called the “root prim”. The primary reason to keep track of a root prim is when using scripts. Ideally scripts that are meant to affect a large number of prims as a unit should be contained within the root prim.

Rezzing: This term is synonym of “rendering” or “appearing”, and is commonly associated with the process of visualizing objects and users within the Grid.

Utopia – How it’s made

What is Utopia, first of all?

Utopia is a virtual world built entirely on a platform developed by OpenSimulator, as described on the source website, an “…open source multi-platform, multi-user 3D application server.”

UPDATE:
Althought this article pertains and can be found helpful in the making of an OpenSim grid, Utopia has been discontinued as a project and replaced with SkyLine Grid, whose progress will aid to the development of further documentation on BacklitKeys. See details and create an avatar to explore SkyLine Grid at: http://skylinegrid.com.

Yes, i know, it is a mouthful, so let me break it down: a “multi-user 3D application server” could be described as something similar to an operating system which other computers can connect to and run programs from, using a three-dimensional interface, much like in the movie Tron©.

As a matter of fact, the technical similarities between the OpenSimulator project and the movie are surprising, as both run on a self-contained server and provide support for multiple users to access the system at the same time and communicate with each other, and both provide support for modifying and developing the 3D environment to resemble realistic surroundings. The most obvious similarity though, is the fact that the term “simulation grid” is used to define both systems in terms of what it is.

Of course the differences are obvious: OpenSimulator does not run off a sci-fi grade supercomputer capable of true Artificial Intelligence, nor it allows for computer generated characters to come to life outside of the server machine. It would be awesome… but no… it just doesn’t do that.

Depending on each individual’s skills, a modest amount of reading is required, if anything, to grasp the basic concepts necessary to build the infrastructure of a virtual world. Thankfully, the team at OpenSimulator.org have provided enough documentation to help those who are willing to help themselves.

Requirements

The team at OpenSimulator.org has developed a very convenient way to get started creating a simulation grid, in the form of a “Distribution” of a “template operating system” that can be installed and run, almost automatically, on various computer platforms. The most popular distribution is called “Diva”, which features the latest version of the simulation grid, as well as many other enhancements designed to provide for an easy installation and configuration.

In order for Diva to work, there are a few requirements to meet:

1. A modest but reliable computer able to run 24 hours a day, 7 days a week without missing a beat.
2. A broadband internet connection, cable if possible.
3. A router that allows for NAT, port forwarding and, most importantly, dynamic DNS.
4. 3 MySQL databases running on a web server. You could use a virtual server running on your computer, but why wasting hardware resources that might add stability to your grid?
4. The ability to remote control the server computer through desktop sharing applications such as LogMeIn©

PC requirements:

The server application that allows for the simulation grid to exist has very modest requirements in terms of hardware. I have found my $500 home laptop running Microsoft Windows 7™ to be quite sufficient for the task, as long as no other heavy applications are running that might cause the computer to overheat and produce blue screens or other system errors. I can assume Linux system might have the upper hand, as Linux system requirements are usually considerably more economical.

Network Requirements:

While virtually any modern home computer system will provide a stable environment for the server application to run, network requirements are a different matter altogether. A cable connection is usually ideal as it provides plenty of bandwidth, at a reasonable price where available. Sadly it’s not available everywhere, so i can assume DSL might be where the bar is set the lowest.

Provided a capable Internet connection speed, the choice of a router is crucial to a successful setup. My choice of a router is usually Linksys©, as i consider them personally the easiest to setup, with the most options.

If you are like me and you have multiple computers connected wirelessly to the same router, you really want the ability to fix the IP address of the computer where you are running the simulation grid from so that it doesn’t change whenever your computer goes off-line. Linksys routers usually allow for that.

The next step is to setup your port forwarding. The ports that need to be open are quite a few to allow for all required services to reach the outside world.
The most important ones are: 8002, 8003, 9000, 9001, 9002, 9003 and 9004 on your local IP address assigned to your computer.

For example, if your PC is identified by your router as 192.168.1.6, you will need to open all the above ports for that address only. This will allow you to connect to that computer directly by using those ports from a remote computer somewhere out on the web.

Needless to say, each port can only be open for one single computer. You can’t open the same port on multiple computers on the same network. I say “needless” because the router will simply not allow you to.

At this point we need to setup Dynamic DNS, literally the easiest part of your network setup.

Our goal is to be able to type in a web address in a browser which will connect us to the home computer running the simulation, for which we have opened the above ports through the router.

The service i use is provided for free by http://dyndns.org. Once a free account is created, a domain name can be picked and assigned to the external IP address of our router. This address can be found by opening a browser on the server computer and typing: http://www.whatismyip.org/. The number appearing on the top of the browser window is the external IP address of your router.

Lastly: find a free service that provides you the ability to remote control your server computer. I like LogMeIn, as it’s the most stable in my experience and it allows to remote to several different computers, with the added bonus of being usable on Google Chrome.
If you are planning on using Windows™ native desktop sharing application, I’d advise not to waste time after the first try, as it’s going to be a major headache. There is plenty of third party applications on the web to choose from that require minimal learning curve and setup time.

“Why would you want to setup desktop sharing?” you might ask, and the answer is simple: once the installation of your grid is complete, there will always be a minimal amount of server-side adjustment to be done, and since this is a server application providing multi-user with a shared platform, you will definitely need the ability to reach your home computer even when you are on the go, especially if the grid crashes, the computer crashes, or restarts on its own due to operating system updates (especially on Windows). If you are using Windows (any version after Vista), here is a precious tip: hit Start, Run, and type “netplwiz”, then un-check “Users must enter a username and password to use this computer”.
The reason for this is that if the computer restarts and gets to the login screen, you will not be able to remotely login, because the remote desktop application is simply not running yet. You’re welcome.

Set up your MySQL databases

You will need three databases:
1. One will support the grid and save all your user, objects and land settings, as well as providing a platform to manage real estate within the grid. This not only allows to landscape the virtual land where users will interact with each other, but also defines identities of the users, and the ownership of everything they create within the grid, among other things. This allows for users to create, for instance, objects that cannot be copied or stolen by other users as their ownership is hard-coded in the database itself.

2. Another will support groups within the simulation grid. Groups are like “clubs” or “circles” where users can gather and share information, communicate and interact separately from the rest of the grid.

3. The last will provide support for saving personal profiles information for the users and create the infrastructure for in-world social networking. Users will be able to upload and set profile pictures, display a profile bio and provide other information for other users to see, much like an “identity card”.

While explaining this, i assume the reader has basic knowledge of SQL databases and how to import and manage data tables. Fortunately, in most cases, it is usually a simple matter of using the Import feature of your database management system of choice to build the required tables from pre-packaged .sql files contained in the Diva distribution downloaded from OpenSimulator.org.

Mind you, building the proper tables in MySQL is not easy, and things WILL break down causing you to have to wipe out your databases a few times before getting it right.

For your convenience, i have provided the template tables that i use for my databases to run Utopia:


Grid Database Tables


-- phpMyAdmin SQL Dump
-- version 3.3.8.1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Oct 05, 2011 at 03:18 PM
-- Server version: 5.0.91
-- PHP Version: 5.3.6-pl0-gentoo

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Database: `utopiagrid`
--

-- --------------------------------------------------------

--
-- Table structure for table `assets`
--

CREATE TABLE IF NOT EXISTS `assets` (
`name` varchar(64) NOT NULL,
`description` varchar(64) NOT NULL,
`assetType` tinyint(4) NOT NULL,
`local` tinyint(1) NOT NULL,
`temporary` tinyint(1) NOT NULL,
`data` longblob NOT NULL,
`id` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`create_time` int(11) default '0',
`access_time` int(11) default '0',
`asset_flags` int(11) NOT NULL default '0',
`CreatorID` varchar(128) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Rev. 1';

-- --------------------------------------------------------

--
-- Table structure for table `auth`
--

CREATE TABLE IF NOT EXISTS `auth` (
`UUID` char(36) NOT NULL,
`passwordHash` char(32) NOT NULL default '',
`passwordSalt` char(32) NOT NULL default '',
`webLoginKey` varchar(255) NOT NULL default '',
`accountType` varchar(32) NOT NULL default 'UserAccount',
PRIMARY KEY (`UUID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Table structure for table `Avatars`
--

CREATE TABLE IF NOT EXISTS `Avatars` (
`PrincipalID` char(36) NOT NULL,
`Name` varchar(32) NOT NULL,
`Value` text,
PRIMARY KEY (`PrincipalID`,`Name`),
KEY `PrincipalID` (`PrincipalID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Table structure for table `estateban`
--

CREATE TABLE IF NOT EXISTS `estateban` (
`EstateID` int(10) unsigned NOT NULL,
`bannedUUID` varchar(36) NOT NULL,
`bannedIp` varchar(16) NOT NULL,
`bannedIpHostMask` varchar(16) NOT NULL,
`bannedNameMask` varchar(64) default NULL,
KEY `estateban_EstateID` (`EstateID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Table structure for table `estate_groups`
--

CREATE TABLE IF NOT EXISTS `estate_groups` (
`EstateID` int(10) unsigned NOT NULL,
`uuid` char(36) NOT NULL,
KEY `EstateID` (`EstateID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Table structure for table `estate_managers`
--

CREATE TABLE IF NOT EXISTS `estate_managers` (
`EstateID` int(10) unsigned NOT NULL,
`uuid` char(36) NOT NULL,
KEY `EstateID` (`EstateID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Table structure for table `estate_map`
--

CREATE TABLE IF NOT EXISTS `estate_map` (
`RegionID` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`EstateID` int(11) NOT NULL,
PRIMARY KEY (`RegionID`),
KEY `EstateID` (`EstateID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Table structure for table `estate_settings`
--

CREATE TABLE IF NOT EXISTS `estate_settings` (
`EstateID` int(10) unsigned NOT NULL auto_increment,
`EstateName` varchar(64) default NULL,
`AbuseEmailToEstateOwner` tinyint(4) NOT NULL,
`DenyAnonymous` tinyint(4) NOT NULL,
`ResetHomeOnTeleport` tinyint(4) NOT NULL,
`FixedSun` tinyint(4) NOT NULL,
`DenyTransacted` tinyint(4) NOT NULL,
`BlockDwell` tinyint(4) NOT NULL,
`DenyIdentified` tinyint(4) NOT NULL,
`AllowVoice` tinyint(4) NOT NULL,
`UseGlobalTime` tinyint(4) NOT NULL,
`PricePerMeter` int(11) NOT NULL,
`TaxFree` tinyint(4) NOT NULL,
`AllowDirectTeleport` tinyint(4) NOT NULL,
`RedirectGridX` int(11) NOT NULL,
`RedirectGridY` int(11) NOT NULL,
`ParentEstateID` int(10) unsigned NOT NULL,
`SunPosition` double NOT NULL,
`EstateSkipScripts` tinyint(4) NOT NULL,
`BillableFactor` float NOT NULL,
`PublicAccess` tinyint(4) NOT NULL,
`AbuseEmail` varchar(255) NOT NULL,
`EstateOwner` varchar(36) NOT NULL,
`DenyMinors` tinyint(4) NOT NULL,
PRIMARY KEY (`EstateID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=101 ;

-- --------------------------------------------------------

--
-- Table structure for table `estate_users`
--

CREATE TABLE IF NOT EXISTS `estate_users` (
`EstateID` int(10) unsigned NOT NULL,
`uuid` char(36) NOT NULL,
KEY `EstateID` (`EstateID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Table structure for table `Friends`
--

CREATE TABLE IF NOT EXISTS `Friends` (
`PrincipalID` char(36) NOT NULL,
`Friend` varchar(255) NOT NULL,
`Flags` varchar(16) NOT NULL default '0',
`Offered` varchar(32) NOT NULL default '0',
PRIMARY KEY (`PrincipalID`,`Friend`),
KEY `PrincipalID` (`PrincipalID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Table structure for table `GridUser`
--

CREATE TABLE IF NOT EXISTS `GridUser` (
`UserID` varchar(255) NOT NULL,
`HomeRegionID` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`HomePosition` char(64) NOT NULL default '',
`HomeLookAt` char(64) NOT NULL default '',
`LastRegionID` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`LastPosition` char(64) NOT NULL default '',
`LastLookAt` char(64) NOT NULL default '',
`Online` char(5) NOT NULL default 'false',
`Login` char(16) NOT NULL default '0',
`Logout` char(16) NOT NULL default '0',
PRIMARY KEY (`UserID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Table structure for table `inventoryfolders`
--

CREATE TABLE IF NOT EXISTS `inventoryfolders` (
`folderName` varchar(64) default NULL,
`type` smallint(6) NOT NULL default '0',
`version` int(11) NOT NULL default '0',
`folderID` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`agentID` char(36) default NULL,
`parentFolderID` char(36) default NULL,
PRIMARY KEY (`folderID`),
KEY `inventoryfolders_agentid` (`agentID`),
KEY `inventoryfolders_parentFolderid` (`parentFolderID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Table structure for table `inventoryitems`
--

CREATE TABLE IF NOT EXISTS `inventoryitems` (
`assetID` varchar(36) default NULL,
`assetType` int(11) default NULL,
`inventoryName` varchar(64) default NULL,
`inventoryDescription` varchar(128) default NULL,
`inventoryNextPermissions` int(10) unsigned default NULL,
`inventoryCurrentPermissions` int(10) unsigned default NULL,
`invType` int(11) default NULL,
`creatorID` varchar(255) NOT NULL default '00000000-0000-0000-0000-000000000000',
`inventoryBasePermissions` int(10) unsigned NOT NULL default '0',
`inventoryEveryOnePermissions` int(10) unsigned NOT NULL default '0',
`salePrice` int(11) NOT NULL default '0',
`saleType` tinyint(4) NOT NULL default '0',
`creationDate` int(11) NOT NULL default '0',
`groupID` varchar(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`groupOwned` tinyint(4) NOT NULL default '0',
`flags` int(11) unsigned NOT NULL default '0',
`inventoryID` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`avatarID` char(36) default NULL,
`parentFolderID` char(36) default NULL,
`inventoryGroupPermissions` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`inventoryID`),
KEY `inventoryitems_avatarid` (`avatarID`),
KEY `inventoryitems_parentFolderid` (`parentFolderID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Table structure for table `land`
--

CREATE TABLE IF NOT EXISTS `land` (
`UUID` varchar(255) NOT NULL,
`RegionUUID` varchar(255) default NULL,
`LocalLandID` int(11) default NULL,
`Bitmap` longblob,
`Name` varchar(255) default NULL,
`Description` varchar(255) default NULL,
`OwnerUUID` varchar(255) default NULL,
`IsGroupOwned` int(11) default NULL,
`Area` int(11) default NULL,
`AuctionID` int(11) default NULL,
`Category` int(11) default NULL,
`ClaimDate` int(11) default NULL,
`ClaimPrice` int(11) default NULL,
`GroupUUID` varchar(255) default NULL,
`SalePrice` int(11) default NULL,
`LandStatus` int(11) default NULL,
`LandFlags` int(11) default NULL,
`LandingType` int(11) default NULL,
`MediaAutoScale` int(11) default NULL,
`MediaTextureUUID` varchar(255) default NULL,
`MediaURL` varchar(255) default NULL,
`MusicURL` varchar(255) default NULL,
`PassHours` float default NULL,
`PassPrice` int(11) default NULL,
`SnapshotUUID` varchar(255) default NULL,
`UserLocationX` float default NULL,
`UserLocationY` float default NULL,
`UserLocationZ` float default NULL,
`UserLookAtX` float default NULL,
`UserLookAtY` float default NULL,
`UserLookAtZ` float default NULL,
`AuthbuyerID` varchar(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`OtherCleanTime` int(11) NOT NULL default '0',
`Dwell` int(11) NOT NULL default '0',
`MediaType` varchar(32) NOT NULL default 'none/none',
`MediaDescription` varchar(255) NOT NULL default '',
`MediaSize` varchar(16) NOT NULL default '0,0',
`MediaLoop` tinyint(1) NOT NULL default '0',
`ObscureMusic` tinyint(1) NOT NULL default '0',
`ObscureMedia` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`UUID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Table structure for table `landaccesslist`
--

CREATE TABLE IF NOT EXISTS `landaccesslist` (
`LandUUID` varchar(255) default NULL,
`AccessUUID` varchar(255) default NULL,
`Flags` int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Table structure for table `migrations`
--

CREATE TABLE IF NOT EXISTS `migrations` (
`name` varchar(100) default NULL,
`version` int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Table structure for table `Presence`
--

CREATE TABLE IF NOT EXISTS `Presence` (
`UserID` varchar(255) NOT NULL,
`RegionID` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`SessionID` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`SecureSessionID` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`LastSeen` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
UNIQUE KEY `SessionID` (`SessionID`),
KEY `UserID` (`UserID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Table structure for table `primitems`
--

CREATE TABLE IF NOT EXISTS `primitems` (
`invType` int(11) default NULL,
`assetType` int(11) default NULL,
`name` varchar(255) default NULL,
`description` varchar(255) default NULL,
`creationDate` bigint(20) default NULL,
`nextPermissions` int(11) default NULL,
`currentPermissions` int(11) default NULL,
`basePermissions` int(11) default NULL,
`everyonePermissions` int(11) default NULL,
`groupPermissions` int(11) default NULL,
`flags` int(11) NOT NULL default '0',
`itemID` char(36) NOT NULL default '',
`primID` char(36) default NULL,
`assetID` char(36) default NULL,
`parentFolderID` char(36) default NULL,
`CreatorID` varchar(255) NOT NULL default '',
`ownerID` char(36) default NULL,
`groupID` char(36) default NULL,
`lastOwnerID` char(36) default NULL,
PRIMARY KEY (`itemID`),
KEY `primitems_primid` (`primID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Table structure for table `prims`
--

CREATE TABLE IF NOT EXISTS `prims` (
`CreationDate` int(11) default NULL,
`Name` varchar(255) default NULL,
`Text` varchar(255) default NULL,
`Description` varchar(255) default NULL,
`SitName` varchar(255) default NULL,
`TouchName` varchar(255) default NULL,
`ObjectFlags` int(11) default NULL,
`OwnerMask` int(11) default NULL,
`NextOwnerMask` int(11) default NULL,
`GroupMask` int(11) default NULL,
`EveryoneMask` int(11) default NULL,
`BaseMask` int(11) default NULL,
`PositionX` double default NULL,
`PositionY` double default NULL,
`PositionZ` double default NULL,
`GroupPositionX` double default NULL,
`GroupPositionY` double default NULL,
`GroupPositionZ` double default NULL,
`VelocityX` double default NULL,
`VelocityY` double default NULL,
`VelocityZ` double default NULL,
`AngularVelocityX` double default NULL,
`AngularVelocityY` double default NULL,
`AngularVelocityZ` double default NULL,
`AccelerationX` double default NULL,
`AccelerationY` double default NULL,
`AccelerationZ` double default NULL,
`RotationX` double default NULL,
`RotationY` double default NULL,
`RotationZ` double default NULL,
`RotationW` double default NULL,
`SitTargetOffsetX` double default NULL,
`SitTargetOffsetY` double default NULL,
`SitTargetOffsetZ` double default NULL,
`SitTargetOrientW` double default NULL,
`SitTargetOrientX` double default NULL,
`SitTargetOrientY` double default NULL,
`SitTargetOrientZ` double default NULL,
`UUID` char(36) NOT NULL default '',
`RegionUUID` char(36) default NULL,
`CreatorID` varchar(255) NOT NULL default '',
`OwnerID` char(36) default NULL,
`GroupID` char(36) default NULL,
`LastOwnerID` char(36) default NULL,
`SceneGroupID` char(36) default NULL,
`PayPrice` int(11) NOT NULL default '0',
`PayButton1` int(11) NOT NULL default '0',
`PayButton2` int(11) NOT NULL default '0',
`PayButton3` int(11) NOT NULL default '0',
`PayButton4` int(11) NOT NULL default '0',
`LoopedSound` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`LoopedSoundGain` double NOT NULL default '0',
`TextureAnimation` blob,
`OmegaX` double NOT NULL default '0',
`OmegaY` double NOT NULL default '0',
`OmegaZ` double NOT NULL default '0',
`CameraEyeOffsetX` double NOT NULL default '0',
`CameraEyeOffsetY` double NOT NULL default '0',
`CameraEyeOffsetZ` double NOT NULL default '0',
`CameraAtOffsetX` double NOT NULL default '0',
`CameraAtOffsetY` double NOT NULL default '0',
`CameraAtOffsetZ` double NOT NULL default '0',
`ForceMouselook` tinyint(4) NOT NULL default '0',
`ScriptAccessPin` int(11) NOT NULL default '0',
`AllowedDrop` tinyint(4) NOT NULL default '0',
`DieAtEdge` tinyint(4) NOT NULL default '0',
`SalePrice` int(11) NOT NULL default '10',
`SaleType` tinyint(4) NOT NULL default '0',
`ColorR` int(11) NOT NULL default '0',
`ColorG` int(11) NOT NULL default '0',
`ColorB` int(11) NOT NULL default '0',
`ColorA` int(11) NOT NULL default '0',
`ParticleSystem` blob,
`ClickAction` tinyint(4) NOT NULL default '0',
`Material` tinyint(4) NOT NULL default '3',
`CollisionSound` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`CollisionSoundVolume` double NOT NULL default '0',
`LinkNumber` int(11) NOT NULL default '0',
`PassTouches` tinyint(4) NOT NULL default '0',
`MediaURL` varchar(255) default NULL,
PRIMARY KEY (`UUID`),
KEY `prims_regionuuid` (`RegionUUID`),
KEY `prims_scenegroupid` (`SceneGroupID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Table structure for table `primshapes`
--

CREATE TABLE IF NOT EXISTS `primshapes` (
`Shape` int(11) default NULL,
`ScaleX` double NOT NULL default '0',
`ScaleY` double NOT NULL default '0',
`ScaleZ` double NOT NULL default '0',
`PCode` int(11) default NULL,
`PathBegin` int(11) default NULL,
`PathEnd` int(11) default NULL,
`PathScaleX` int(11) default NULL,
`PathScaleY` int(11) default NULL,
`PathShearX` int(11) default NULL,
`PathShearY` int(11) default NULL,
`PathSkew` int(11) default NULL,
`PathCurve` int(11) default NULL,
`PathRadiusOffset` int(11) default NULL,
`PathRevolutions` int(11) default NULL,
`PathTaperX` int(11) default NULL,
`PathTaperY` int(11) default NULL,
`PathTwist` int(11) default NULL,
`PathTwistBegin` int(11) default NULL,
`ProfileBegin` int(11) default NULL,
`ProfileEnd` int(11) default NULL,
`ProfileCurve` int(11) default NULL,
`ProfileHollow` int(11) default NULL,
`State` int(11) default NULL,
`Texture` longblob,
`ExtraParams` longblob,
`UUID` char(36) NOT NULL default '',
`Media` text,
PRIMARY KEY (`UUID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Table structure for table `regionban`
--

CREATE TABLE IF NOT EXISTS `regionban` (
`regionUUID` varchar(36) NOT NULL,
`bannedUUID` varchar(36) NOT NULL,
`bannedIp` varchar(16) NOT NULL,
`bannedIpHostMask` varchar(16) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Rev. 1';

-- --------------------------------------------------------

--
-- Table structure for table `regions`
--

CREATE TABLE IF NOT EXISTS `regions` (
`uuid` varchar(36) NOT NULL,
`regionHandle` bigint(20) unsigned NOT NULL,
`regionName` varchar(128) default NULL,
`regionRecvKey` varchar(128) default NULL,
`regionSendKey` varchar(128) default NULL,
`regionSecret` varchar(128) default NULL,
`regionDataURI` varchar(255) default NULL,
`serverIP` varchar(64) default NULL,
`serverPort` int(10) unsigned default NULL,
`serverURI` varchar(255) default NULL,
`locX` int(10) unsigned default NULL,
`locY` int(10) unsigned default NULL,
`locZ` int(10) unsigned default NULL,
`eastOverrideHandle` bigint(20) unsigned default NULL,
`westOverrideHandle` bigint(20) unsigned default NULL,
`southOverrideHandle` bigint(20) unsigned default NULL,
`northOverrideHandle` bigint(20) unsigned default NULL,
`regionAssetURI` varchar(255) default NULL,
`regionAssetRecvKey` varchar(128) default NULL,
`regionAssetSendKey` varchar(128) default NULL,
`regionUserURI` varchar(255) default NULL,
`regionUserRecvKey` varchar(128) default NULL,
`regionUserSendKey` varchar(128) default NULL,
`regionMapTexture` varchar(36) default NULL,
`serverHttpPort` int(10) default NULL,
`serverRemotingPort` int(10) default NULL,
`owner_uuid` varchar(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`originUUID` varchar(36) default NULL,
`access` int(10) unsigned default '1',
`ScopeID` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`sizeX` int(11) NOT NULL default '0',
`sizeY` int(11) NOT NULL default '0',
`flags` int(11) NOT NULL default '0',
`last_seen` int(11) NOT NULL default '0',
`PrincipalID` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
`Token` varchar(255) NOT NULL,
PRIMARY KEY (`uuid`),
KEY `regionName` (`regionName`),
KEY `regionHandle` (`regionHandle`),
KEY `overrideHandles` (`eastOverrideHandle`,`westOverrideHandle`,`southOverrideHandle`,`northOverrideHandle`),
KEY `ScopeID` (`ScopeID`),
KEY `flags` (`flags`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Rev. 3';

-- --------------------------------------------------------

--
-- Table structure for table `regionsettings`
--

CREATE TABLE IF NOT EXISTS `regionsettings` (
`regionUUID` char(36) NOT NULL,
`block_terraform` int(11) NOT NULL,
`block_fly` int(11) NOT NULL,
`allow_damage` int(11) NOT NULL,
`restrict_pushing` int(11) NOT NULL,
`allow_land_resell` int(11) NOT NULL,
`allow_land_join_divide` int(11) NOT NULL,
`block_show_in_search` int(11) NOT NULL,
`agent_limit` int(11) NOT NULL,
`object_bonus` double NOT NULL,
`maturity` int(11) NOT NULL,
`disable_scripts` int(11) NOT NULL,
`disable_collisions` int(11) NOT NULL,
`disable_physics` int(11) NOT NULL,
`terrain_texture_1` char(36) NOT NULL,
`terrain_texture_2` char(36) NOT NULL,
`terrain_texture_3` char(36) NOT NULL,
`terrain_texture_4` char(36) NOT NULL,
`elevation_1_nw` double NOT NULL,
`elevation_2_nw` double NOT NULL,
`elevation_1_ne` double NOT NULL,
`elevation_2_ne` double NOT NULL,
`elevation_1_se` double NOT NULL,
`elevation_2_se` double NOT NULL,
`elevation_1_sw` double NOT NULL,
`elevation_2_sw` double NOT NULL,
`water_height` double NOT NULL,
`terrain_raise_limit` double NOT NULL,
`terrain_lower_limit` double NOT NULL,
`use_estate_sun` int(11) NOT NULL,
`fixed_sun` int(11) NOT NULL,
`sun_position` double NOT NULL,
`covenant` char(36) default NULL,
`Sandbox` tinyint(4) NOT NULL,
`sunvectorx` double NOT NULL default '0',
`sunvectory` double NOT NULL default '0',
`sunvectorz` double NOT NULL default '0',
`loaded_creation_id` varchar(64) default NULL,
`loaded_creation_datetime` int(10) unsigned NOT NULL default '0',
`map_tile_ID` char(36) NOT NULL default '00000000-0000-0000-0000-000000000000',
PRIMARY KEY (`regionUUID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Table structure for table `regionwindlight`
--

CREATE TABLE IF NOT EXISTS `regionwindlight` (
`region_id` varchar(36) NOT NULL default '000000-0000-0000-0000-000000000000',
`water_color_r` float(9,6) unsigned NOT NULL default '4.000000',
`water_color_g` float(9,6) unsigned NOT NULL default '38.000000',
`water_color_b` float(9,6) unsigned NOT NULL default '64.000000',
`water_fog_density_exponent` float(3,1) unsigned NOT NULL default '4.0',
`underwater_fog_modifier` float(3,2) unsigned NOT NULL default '0.25',
`reflection_wavelet_scale_1` float(3,1) unsigned NOT NULL default '2.0',
`reflection_wavelet_scale_2` float(3,1) unsigned NOT NULL default '2.0',
`reflection_wavelet_scale_3` float(3,1) unsigned NOT NULL default '2.0',
`fresnel_scale` float(3,2) unsigned NOT NULL default '0.40',
`fresnel_offset` float(3,2) unsigned NOT NULL default '0.50',
`refract_scale_above` float(3,2) unsigned NOT NULL default '0.03',
`refract_scale_below` float(3,2) unsigned NOT NULL default '0.20',
`blur_multiplier` float(4,3) unsigned NOT NULL default '0.040',
`big_wave_direction_x` float(3,2) NOT NULL default '1.05',
`big_wave_direction_y` float(3,2) NOT NULL default '-0.42',
`little_wave_direction_x` float(3,2) NOT NULL default '1.11',
`little_wave_direction_y` float(3,2) NOT NULL default '-1.16',
`normal_map_texture` varchar(36) NOT NULL default '822ded49-9a6c-f61c-cb89-6df54f42cdf4',
`horizon_r` float(3,2) unsigned NOT NULL default '0.25',
`horizon_g` float(3,2) unsigned NOT NULL default '0.25',
`horizon_b` float(3,2) unsigned NOT NULL default '0.32',
`horizon_i` float(3,2) unsigned NOT NULL default '0.32',
`haze_horizon` float(3,2) unsigned NOT NULL default '0.19',
`blue_density_r` float(3,2) unsigned NOT NULL default '0.12',
`blue_density_g` float(3,2) unsigned NOT NULL default '0.22',
`blue_density_b` float(3,2) unsigned NOT NULL default '0.38',
`blue_density_i` float(3,2) unsigned NOT NULL default '0.38',
`haze_density` float(3,2) unsigned NOT NULL default '0.70',
`density_multiplier` float(3,2) unsigned NOT NULL default '0.18',
`distance_multiplier` float(4,1) unsigned NOT NULL default '0.8',
`max_altitude` int(4) unsigned NOT NULL default '1605',
`sun_moon_color_r` float(3,2) unsigned NOT NULL default '0.24',
`sun_moon_color_g` float(3,2) unsigned NOT NULL default '0.26',
`sun_moon_color_b` float(3,2) unsigned NOT NULL default '0.30',
`sun_moon_color_i` float(3,2) unsigned NOT NULL default '0.30',
`sun_moon_position` float(4,3) unsigned NOT NULL default '0.317',
`ambient_r` float(3,2) unsigned NOT NULL default '0.35',
`ambient_g` float(3,2) unsigned NOT NULL default '0.35',
`ambient_b` float(3,2) unsigned NOT NULL default '0.35',
`ambient_i` float(3,2) unsigned NOT NULL default '0.35',
`east_angle` float(3,2) unsigned NOT NULL default '0.00',
`sun_glow_focus` float(3,2) unsigned NOT NULL default '0.10',
`sun_glow_size` float(3,2) unsigned NOT NULL default '1.75',
`scene_gamma` float(4,2) unsigned NOT NULL default '1.00',
`star_brightness` float(3,2) unsigned NOT NULL default '0.00',
`cloud_color_r` float(3,2) unsigned NOT NULL default '0.41',
`cloud_color_g` float(3,2) unsigned NOT NULL default '0.41',
`cloud_color_b` float(3,2) unsigned NOT NULL default '0.41',
`cloud_color_i` float(3,2) unsigned NOT NULL default '0.41',
`cloud_x` float(3,2) unsigned NOT NULL default '1.00',
`cloud_y` float(3,2) unsigned NOT NULL default '0.53',
`cloud_density` float(3,2) unsigned NOT NULL default '1.00',
`cloud_coverage` float(3,2) unsigned NOT NULL default '0.27',
`cloud_scale` float(3,2) unsigned NOT NULL default '0.42',
`cloud_detail_x` float(3,2) unsigned NOT NULL default '1.00',
`cloud_detail_y` float(3,2) unsigned NOT NULL default '0.53',
`cloud_detail_density` float(3,2) unsigned NOT NULL default '0.12',
`cloud_scroll_x` float(4,2) NOT NULL default '0.20',
`cloud_scroll_x_lock` tinyint(1) unsigned NOT NULL default '0',
`cloud_scroll_y` float(4,2) NOT NULL default '0.01',
`cloud_scroll_y_lock` tinyint(1) unsigned NOT NULL default '0',
`draw_classic_clouds` tinyint(1) unsigned NOT NULL default '1',
PRIMARY KEY (`region_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Table structure for table `terrain`
--

CREATE TABLE IF NOT EXISTS `terrain` (
`RegionUUID` varchar(255) default NULL,
`Revision` int(11) default NULL,
`Heightfield` longblob
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Table structure for table `tokens`
--

CREATE TABLE IF NOT EXISTS `tokens` (
`UUID` char(36) NOT NULL,
`token` varchar(255) NOT NULL,
`validity` datetime NOT NULL,
UNIQUE KEY `uuid_token` (`UUID`,`token`),
KEY `UUID` (`UUID`),
KEY `token` (`token`),
KEY `validity` (`validity`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Table structure for table `UserAccounts`
--

CREATE TABLE IF NOT EXISTS `UserAccounts` (
`PrincipalID` char(36) NOT NULL,
`ScopeID` char(36) NOT NULL,
`FirstName` varchar(64) NOT NULL,
`LastName` varchar(64) NOT NULL,
`Email` varchar(64) default NULL,
`ServiceURLs` text,
`Created` int(11) default NULL,
`UserLevel` int(11) NOT NULL default '0',
`UserFlags` int(11) NOT NULL default '0',
`UserTitle` varchar(64) NOT NULL default '',
UNIQUE KEY `PrincipalID` (`PrincipalID`),
KEY `Email` (`Email`),
KEY `FirstName` (`FirstName`),
KEY `LastName` (`LastName`),
KEY `Name` (`FirstName`,`LastName`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Groups database tables:


-- phpMyAdmin SQL Dump
-- version 3.3.8.1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Oct 05, 2011 at 03:21 PM
-- Server version: 5.0.91
-- PHP Version: 5.3.6-pl0-gentoo

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Database: `opengridgroups`
--

-- --------------------------------------------------------

--
-- Table structure for table `osagent`
--

CREATE TABLE IF NOT EXISTS `osagent` (
`AgentID` varchar(128) NOT NULL default '',
`ActiveGroupID` varchar(128) NOT NULL default '',
PRIMARY KEY (`AgentID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Table structure for table `osgroup`
--

CREATE TABLE IF NOT EXISTS `osgroup` (
`GroupID` varchar(128) NOT NULL default '',
`Name` varchar(255) NOT NULL default '',
`Charter` text NOT NULL,
`InsigniaID` varchar(128) NOT NULL default '',
`FounderID` varchar(128) NOT NULL default '',
`MembershipFee` int(11) NOT NULL default '0',
`OpenEnrollment` varchar(255) NOT NULL default '',
`ShowInList` tinyint(1) NOT NULL default '0',
`AllowPublish` tinyint(1) NOT NULL default '0',
`MaturePublish` tinyint(1) NOT NULL default '0',
`OwnerRoleID` varchar(128) NOT NULL default '',
PRIMARY KEY (`GroupID`),
UNIQUE KEY `Name` (`Name`),
FULLTEXT KEY `Name_2` (`Name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Table structure for table `osgroupinvite`
--

CREATE TABLE IF NOT EXISTS `osgroupinvite` (
`InviteID` varchar(128) NOT NULL default '',
`GroupID` varchar(128) NOT NULL default '',
`RoleID` varchar(64) NOT NULL default '',
`AgentID` varchar(128) NOT NULL default '',
`TMStamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (`InviteID`),
UNIQUE KEY `GroupID` (`GroupID`,`RoleID`,`AgentID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Table structure for table `osgroupmembership`
--

CREATE TABLE IF NOT EXISTS `osgroupmembership` (
`GroupID` varchar(128) NOT NULL default '',
`AgentID` varchar(128) NOT NULL default '',
`SelectedRoleID` varchar(128) NOT NULL default '',
`Contribution` int(11) NOT NULL default '0',
`ListInProfile` int(11) NOT NULL default '1',
`AcceptNotices` int(11) NOT NULL default '1',
PRIMARY KEY (`GroupID`,`AgentID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Table structure for table `osgroupnotice`
--

CREATE TABLE IF NOT EXISTS `osgroupnotice` (
`GroupID` varchar(128) NOT NULL default '',
`NoticeID` varchar(128) NOT NULL default '',
`Timestamp` int(10) unsigned NOT NULL default '0',
`FromName` varchar(255) NOT NULL default '',
`Subject` varchar(255) NOT NULL default '',
`Message` text NOT NULL,
`BinaryBucket` text NOT NULL,
PRIMARY KEY (`GroupID`,`NoticeID`),
KEY `Timestamp` (`Timestamp`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Table structure for table `osgrouprolemembership`
--

CREATE TABLE IF NOT EXISTS `osgrouprolemembership` (
`GroupID` varchar(64) NOT NULL default '',
`RoleID` varchar(128) NOT NULL default '',
`AgentID` varchar(128) NOT NULL default '',
PRIMARY KEY (`GroupID`,`RoleID`,`AgentID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Table structure for table `osrole`
--

CREATE TABLE IF NOT EXISTS `osrole` (
`GroupID` varchar(128) NOT NULL default '',
`RoleID` varchar(128) NOT NULL default '',
`Name` varchar(255) NOT NULL default '',
`Description` varchar(255) NOT NULL default '',
`Title` varchar(255) NOT NULL default '',
`Powers` bigint(20) unsigned NOT NULL default '0',
PRIMARY KEY (`GroupID`,`RoleID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Profiles Database Tables


-- phpMyAdmin SQL Dump
-- version 3.3.8.1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Oct 05, 2011 at 03:24 PM
-- Server version: 5.0.91
-- PHP Version: 5.3.6-pl0-gentoo

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Database: `utopiagroups`
--

-- --------------------------------------------------------

--
-- Table structure for table `classifieds`
--

CREATE TABLE IF NOT EXISTS `classifieds` (
`classifieduuid` char(36) NOT NULL,
`creatoruuid` char(36) NOT NULL,
`creationdate` int(20) NOT NULL,
`expirationdate` int(20) NOT NULL,
`category` varchar(20) NOT NULL,
`name` varchar(255) NOT NULL,
`description` text NOT NULL,
`parceluuid` char(36) NOT NULL,
`parentestate` int(11) NOT NULL,
`snapshotuuid` char(36) NOT NULL,
`simname` varchar(255) NOT NULL,
`posglobal` varchar(255) NOT NULL,
`parcelname` varchar(255) NOT NULL,
`classifiedflags` int(8) NOT NULL,
`priceforlisting` int(5) NOT NULL,
PRIMARY KEY (`classifieduuid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Table structure for table `usernotes`
--

CREATE TABLE IF NOT EXISTS `usernotes` (
`useruuid` varchar(36) NOT NULL,
`targetuuid` varchar(36) NOT NULL,
`notes` text NOT NULL,
UNIQUE KEY `useruuid` (`useruuid`,`targetuuid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Table structure for table `userpicks`
--

CREATE TABLE IF NOT EXISTS `userpicks` (
`pickuuid` varchar(36) NOT NULL,
`creatoruuid` varchar(36) NOT NULL,
`toppick` enum('true','false') NOT NULL,
`parceluuid` varchar(36) NOT NULL,
`name` varchar(255) NOT NULL,
`description` text NOT NULL,
`snapshotuuid` varchar(36) NOT NULL,
`user` varchar(255) NOT NULL,
`originalname` varchar(255) NOT NULL,
`simname` varchar(255) NOT NULL,
`posglobal` varchar(255) NOT NULL,
`sortorder` int(2) NOT NULL,
`enabled` enum('true','false') NOT NULL,
PRIMARY KEY (`pickuuid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Table structure for table `userprofile`
--

CREATE TABLE IF NOT EXISTS `userprofile` (
`useruuid` varchar(36) NOT NULL,
`profilePartner` varchar(36) NOT NULL,
`profileAllowPublish` binary(1) NOT NULL,
`profileMaturePublish` binary(1) NOT NULL,
`profileURL` varchar(255) NOT NULL,
`profileWantToMask` int(3) NOT NULL,
`profileWantToText` text NOT NULL,
`profileSkillsMask` int(3) NOT NULL,
`profileSkillsText` text NOT NULL,
`profileLanguages` text NOT NULL,
`profileImage` varchar(36) NOT NULL,
`profileAboutText` text NOT NULL,
`profileFirstImage` varchar(36) NOT NULL,
`profileFirstText` text NOT NULL,
PRIMARY KEY (`useruuid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Table structure for table `usersettings`
--

CREATE TABLE IF NOT EXISTS `usersettings` (
`useruuid` varchar(36) NOT NULL,
`imviaemail` enum('true','false') NOT NULL,
`visible` enum('true','false') NOT NULL,
`email` varchar(254) NOT NULL,
PRIMARY KEY (`useruuid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Post set-up

Once the network requirements are met and your database is built with the proper tables, it’s time to download the latest distribution of the simulation grid server application from: http://opensimulator.org/wiki/Main_Page. The distribution can be downloaded in different flavors, depending on your operating system, or in a bulk file which contains versions of the server application for all available operating systems.

Create a folder anywhere on your computer and name it what you like as long as you can remember it. This will be your root folder, and your total backup you’ll be able to copy if things go wrong. Usually they do, especially in the beginning, so to save yourself some tears, I’d advise you sign up for a free 2Gb DropBox© account, set your DropBox folder within the folder you have created for your grid, and drop all the files of your grid in there. You’re welcome.

The ideal location would be on your C:\ drive, or on a very fast external backup drive. I have found that the speed of my storage drive plays an important role in how stable my grid is. I have tried to run my grid from a stick drive, and it performed horribly. One might argue that it could be due to the quality of the drive as well, so it’s really up to each individual’s situation. The good news is that since the server application is completely self-contained within its folder, one could simply move the entire folder anywhere on the computer without breaking any external connection to the host system itself (as there are none).

Here comes the fun part: The installation process.

Open a console window, for Microsoft™ users just type cmd from the Run dialog box from the Start menu. If you see anything BUT c:\ on the screen, type the following:

cd..(enter)
cd..(enter again)
cd..(rinse and repeat until you see only c:\>)

Then type: cd (path to the folder you created)
finally type: cd bin

You should now see the following:

c:\opensim\mygrid\bin

Now type: opensim.32bitlaunch

At this point if things are setup correctly, the installation will ask you to answer a few simple questions, such as the name you want to give to your grid, the name of the main region within that grid, and the full name and password of your “master avatar”.

This user account is very important, because you will use it to manage your grid. It has privileges that no other user has.

I see a bunch of red text on the screen!! Is my computer calling NORAD and getting ready to launch nukes??

Yes, and you are in trouble now! Just kidding.

If you see any red text, it means that you will need to make some adjustment to a number of text files within your installation. Fortunately it’s not too big a task, but it does require some patience.
The main file you need to be concerned about is located in the /bin folder and it’s called opensim.ini.

For your convenience here is my opensim.ini which you may copy and replace the dummy information with your own.


;; This is the main configuration file for OpenSimulator. If it's named OpenSim.ini
;; then it will be loaded by OpenSimulator. If it's named OpenSim.ini.example then
;; you will need to copy it to OpenSim.ini first (if that file does not already exist)
;;
;; If you are copying, then once you have copied OpenSim.ini.example to OpenSim.ini you will
;; need to pick an architecture in the [Architecture] section at the end of this file.
;;
;; The settings in this file are in the form " = ". For example, save_crashes = false
;; in the [Startup] section below.
;;
;; All settings are initially commented out and the default value used, as found in
;; OpenSimDefaults.ini. To change a setting, first uncomment it by deleting the initial semicolon (;)
;; and then change the value. This will override the value in OpenSimDefaults.ini
;;
;; If you want to find out what configuration OpenSimulator has finished with once all the configuration
;; files are loaded then type "config show" on the region console command line.
;;
;;
;; NOTES FOR DEVELOPERS REGARDING THE FORMAT OF THIS FILE
;;
;; All leading white space is ignored, but preserved.
;;
;; Double semicolons denote a text comment
;;
;; ;# denotes a configuration directive description
;; formatted as:
;; {option} {depends on} {question to ask} {choices} default value
;; Any text comments following the declaration, up to the next blank line.
;; will be copied to the generated file (NOTE: generation is not yet implemented)
;; A * in the choices list will allow an empty entry.
;; An empty question will set the default if the dependencies are
;; satisfied.
;;
;; ; denotes a commented out option.
;; Any options added to OpenSim.ini.example should be initially commented out.

[Startup]
;# {save_crashes} {} {Save crashes to disk?} {true false} false
;; Set this to true if you want to log crashes to disk
;; this can be useful when submitting bug reports.
; save_crashes = false

;# {crash_dir} {save_crashes:true} {Directory to save crashes to?} {} crashes
;; Directory to save crashes to if above is enabled
;; (default is /opensimdir/crashes/*.txt or C:\opensim\crashes\*.txt)
; crash_dir = "crashes"

;# {PIDFile} {} {Path to PID file?} {}
;; Place to create a PID file
; PIDFile = "/tmp/my.pid"

; ##
; ## SYSTEM
; ##

; Sets the method that OpenSim will use to fire asynchronous
; events. Valid values are UnsafeQueueUserWorkItem,
; QueueUserWorkItem, BeginInvoke, SmartThreadPool, and Thread.
; SmartThreadPool is reported to work well on Mono/Linux, but
; UnsafeQueueUserWorkItem has been benchmarked with better
; performance on .NET/Windows
async_call_method = SmartThreadPool

;; Optimizations from Default of 15
;; 15 good for Single Core CPU IE: P4
;; 30 for Dual Core + CPU's
;; 45 for Quad Core + CPU's
;; MaxPoolThreads = 45 ; DEFAULT 15

; Max threads to allocate on the FireAndForget thread pool
; when running with the SmartThreadPool option above
MaxPoolThreads = 30

;; Determine where OpenSimulator looks for the files which tell it
;; which regions to server
;; Default is "filesystem"
; region_info_source = "filesystem"
; region_info_source = "web"

;; Determines where the region XML files are stored if you are loading
;; these from the filesystem.
;; Defaults to bin/Regions in your OpenSimulator installation directory
; regionload_regionsdir="C:\somewhere\xmlfiles\"

;; Determines the page from which regions xml is retrieved if you are
;; loading these from the web.
;; The XML here has the same format as it does on the filesystem
;; (including the tag), except that everything is also enclosed
;; in a tag.
; regionload_webserver_url = "http://example.com/regions.xml";

MapImageModule = Warp3DImageModule
;# {TextureOnMapTile} {} {Use terrain textures for map tiles?} {true false} false
;; Use terrain texture for maptiles if true, use shaded green if false
TextureOnMapTile = true

;# {DrawPrimOnMapTile} {} {Draw prim shapes on map tiles?} {true false} false
;; Draw objects on maptile. This step might take a long time if you've
;; got a large number of objects, so you can turn it off here if you'd like.
DrawPrimOnMapTile = true

;# {NonPhysicalPrimMax} {} {Maximum size of nonphysical prims?} {} 256
;; Maximum size for non-physical prims
; NonPhysicalPrimMax = 256

;# {PhysicalPrimMax} {} {Maximum size of physical prims?} {} 10
;; Maximum size where a prim can be physical
; PhysicalPrimMax = 10

;; Prevent the creation, import and rez of prims that exceed the
;; maximum size.
; ClampPrimSize = false

;# {AllowScriptCrossing} {} {Allow scripts to cross into this region} {true false} false
;; Allow scripts to cross region boundaries. These are recompiled on the
;; new region.
; AllowScriptCrossing = false

;# {TrustBinaries} {AllowScriptCrossing:true} {Accept compiled binary script code? (DANGEROUS!)} {true false} false
;; Allow compiled script binary code to cross region boundaries.
;; If you set this to "true", any region that can teleport to you can
;; inject ARBITRARY BINARY CODE into your system. Use at your own risk.
;; YOU HAVE BEEN WARNED!!!
; TrustBinaries = false

;# {CombineContiguousRegions} {} {Create megaregions where possible? (Do not use with existing content!)} {true false} false
;; Combine all contiguous regions into one large megaregion
;; Order your regions from South to North, West to East in your regions.ini
;; and then set this to true
;; Warning! Don't use this with regions that have existing content!,
;; This will likely break them
; CombineContiguousRegions = false

;; If you have only one region in an instance, or to avoid the many bugs
;; that you can trigger in modules by restarting a region, set this to
;; true to make the entire instance exit instead of restarting the region.
;; This is meant to be used on systems where some external system like
;; Monit will restart any instance that exits, thereby making the shutdown
;; into a restart.
; InworldRestartShutsDown = false

;; Persistence of changed objects happens during regular sweeps. The
;; following control that behaviour to prevent frequently changing objects
;; from heavily loading the region data store.
;; If both of these values are set to zero then persistence of all changed
;; objects will happen on every sweep.

;; Objects will be considered for persistance in the next sweep when they
;; have not changed for this number of seconds.
; MinimumTimeBeforePersistenceConsidered = 60

;; Objects will always be considered for persistance in the next sweep
;; if the first change occurred this number of seconds ago.
; MaximumTimeBeforePersistenceConsidered = 600

;; Should avatars in neighbor sims see objects in this sim?
; see_into_this_sim_from_neighbor = true

;# {physical_prim} {} {Allow prims to be physical?} {true false} true
;; if you would like to allow prims to be physical and move by physics
;; with the physical checkbox in the client set this to true.
; physical_prim = true

;; Select a mesher here.
;;
;; Meshmerizer properly handles complex prims by using triangle meshes.
;; Note that only the ODE physics engine currently deals with meshed
;; prims in a satisfactory way.

;; ZeroMesher is faster but leaves the physics engine to model the mesh
;; using the basic shapes that it supports.
;; Usually this is only a box.
;; Default is Meshmerizer
; meshing = Meshmerizer
; meshing = ZeroMesher

;; Choose one of the physics engines below
;; OpenDynamicsEngine is by some distance the most developed physics engine
;; basicphysics effectively does not model physics at all, making all
;; objects phantom
;; Default is OpenDynamicsEngine
; physics = OpenDynamicsEngine
; physics = basicphysics
; physics = POS
; physics = modified_BulletX

;# {permissionmodules} {} {Permission modules to use (may specify multiple modules, separated by space} {} DefaultPermissionsModule
;; Permission modules to use, separated by space.
permissionmodules = "DefaultPermissionsModule"

;# {serverside_object_permissions} {permissionmodules:DefaultPermissionsModule} {Activate permission handling by the sim?} {true false} true
;; These are the parameters for the default permissions module
;;
;; If set to false, then, in theory, the server never carries out
;; permission checks (allowing anybody to copy
;; any item, etc. This may not yet be implemented uniformally.
;; If set to true, then all permissions checks are carried out
serverside_object_permissions = true

;; This allows users with a UserLevel of 200 or more to assume god
;; powers in the regions in this simulator.
; allow_grid_gods = false

;; This allows some control over permissions
;; please note that this still doesn't duplicate SL, and is not intended to
region_owner_is_god = true
; region_manager_is_god = false
; parcel_owner_is_god = true

;; Default script engine to use. Currently, we only have XEngine
; DefaultScriptEngine = "XEngine"

;; Map tile options. You can choose to generate no map tiles at all,
;; generate normal maptiles, or nominate an uploaded texture to
;; be the map tile
GenerateMaptiles = "true"

;; If desired, a running region can update the map tiles periodically
;; to reflect building activity. This names no sense of you don't have
;; prims on maptiles. Value is in seconds.
; MaptileRefresh = 0

;; If not generating maptiles, use this static texture asset ID
; MaptileStaticUUID = "00000000-0000-0000-0000-000000000000"

;; Http proxy setting for llHTTPRequest and dynamic texture loading, if required
; HttpProxy = "http://proxy.com:8080"

;; If you're using HttpProxy, then you can set HttpProxyExceptions to a list of regular expressions for URLs that you don't want to go through the proxy
;; For example, servers inside your firewall.
;; Separate patterns with a ';'
; HttpProxyExceptions = ".mydomain.com;localhost"

;# {emailmodule} {} {Provide llEmail and llGetNextEmail functionality? (requires SMTP server)} {true false} false
;; The email module requires some configuration. It needs an SMTP
;; server to send mail through.
; emailmodule = DefaultEmailModule

DelayBeforeAppearanceSave = 1
DelayBeforeAppearanceSend = 1

[SMTP]
;; The SMTP server enabled the email module to send email to external
;; destinations.

;# {enabled} {[Startup]emailmodule:DefaultEmailModule} {Enable SMTP service?} {true false} true
;; Enable sending email via SMTP
; enabled = false

;# {internal_object_host} {[Startup]emailmodule:DefaultEmailModule enabled:true} {Host name to treat as internal (object to object) email?} {} lsl.opensim.local
; internal_object_host = lsl.opensim.local

;# {host_domain_header_from} {[Startup]emailmodule:DefaultEmailModule enabled:true} {From address to use in the sent email header?} {} 127.0.0.1
; host_domain_header_from = "127.0.0.1"

;# {SMTP_SERVER_HOSTNAME} {[Startup]emailmodule:DefaultEmailModule enabled:true} {SMTP server name?} {} 127.0.0.1
; SMTP_SERVER_HOSTNAME = "127.0.0.1"

;# {SMTP_SERVER_PORT} {[Startup]emailmodule:DefaultEmailModule enabled:true} {SMTP server name?} {SMTP server port?} {} 25
; SMTP_SERVER_PORT = 25

;# {SMTP_SERVER_LOGIN} {[Startup]emailmodule:DefaultEmailModule enabled:true} {SMTP server user name?} {}
; SMTP_SERVER_LOGIN = ""

;# {SMTP_SERVER_PASSWORD} {[Startup]emailmodule:DefaultEmailModule enabled:true} {SMTP server password} {}
; SMTP_SERVER_PASSWORD = ""

[Network]
;; Configure the remote console user here. This will not actually be used
;; unless you use -console=rest at startup.
; ConsoleUser = "Test"
; ConsolePass = "secret"
; console_port = 0

;# {http_listener_port} {} {TCP Port for this simulator to listen on? (This must be unique to the simulator!)} {} 9000
;; Simulator HTTP port. This is not the region port, but the port the
;; entire simulator listens on. This port uses the TCP protocol, while
;; the region ports use UDP.
; http_listener_port = 9000

;# {ExternalHostNameForLSL} {} {Hostname to use for HTTP-IN URLs. This should be reachable from the internet.} {}
;; Hostname to use in llRequestURL/llRequestSecureURL
;; if not defined - default machine name is being used
;; (on Windows this mean NETBIOS name - useably only inside local network)
; ExternalHostNameForLSL = "127.0.0.1"

;# {shard} {} {Name to use for X-Secondlife-Shard header? (press enter if unsure)} {} OpenSim
;; What is reported as the "X-Secondlife-Shard"
;; Defaults to the user server url if not set
;; The old default is "OpenSim", set here for compatibility
;; The below is not commented for compatibility.
shard = "OpenSim"

;# {user_agent} {} {User agent to report to web servers?} {} OpenSim LSL (Mozilla Compatible)
;; What is reported as the "User-Agent" when using llHTTPRequest
;; Defaults to not sent if not set here. See the notes section in the wiki
;; at http://wiki.secondlife.com/wiki/LlHTTPRequest for comments on adding
;; " (Mozilla Compatible)" to the text where there are problems with a web server
; user_agent = "OpenSim LSL (Mozilla Compatible)"

[ClientStack.LindenUDP]
;; See OpensSimDefaults.ini for the throttle options. You can copy the
;; relevant sections and override them here.
;; DO NOT MODIFY OpenSimDefaults.ini, as your changes would be lost
;; with the next update!

async_packet_handling = true
scene_throttle_max_bps = 800000
client_throttle_max_bps = 100000

;# {DisableFacelights} {} {Stop facelights from working?} {true false} false
;; Quash and remove any light properties from attachments not on the
;; hands. This allows flashlights and lanterns to function, but kills
;; silly vanity "Facelights" dead. Sorry, head mounted miner's lamps
;; will also be affected.
;; This is especially important in artistic builds that depend on lights
;; on the build for their appearance, since facelights will cause the
;; building's lights to possibly not be rendered.
; DisableFacelights = "false"

[ClientStack.LindenCaps]
;; For the long list of capabilities, see OpenSimDefaults.ini
;; Here are the few ones you may want to change. Possible values
;; are:
;; "" -- empty, capability disabled
;; "localhost" -- capability enabled and served by the simulator
;; "" -- capability enabled and served by some other server
;;
; These are enabled by default to localhost. Change if you see fit.
Cap_GetTexture = "localhost"
Cap_GetMesh = "localhost"
; This is disabled by default. Change if you see fit. Note that
; serving this cap from the simulators may lead to poor performace.
Cap_WebFetchInventoryDescendents = ""

[Chat]
;# {whisper_distance} {} {Distance at which a whisper is heard, in meters?} {} 10
;; Distance in meters that whispers should travel.
; whisper_distance = 10

;# {say_distance} {} {Distance at which normal chat is heard, in meters? (SL uses 20 here)} {} 30
;; Distance in meters that ordinary chat should travel.
; say_distance = 30

;# {shout_distance} {Distance at which a shout is heard, in meters?} {} 100
;; Distance in meters that shouts should travel.
; shout_distance = 100

[Messaging]
;# {OfflineMessageModule} {} {Module to use for offline message storage} {OfflineMessageModule *}
;; Module to handle offline messaging. The core module requires an external
;; web service to do this. See OpenSim wiki.
OfflineMessageModule = OfflineMessageModule

;# {OfflineMessageURL} {OfflineMessageModule:OfflineMessageModule} {URL of offline messaging service} {}
;; URL of web service for offline message storage
OfflineMessageURL = http://im.osgrid.org/offline

;# {MuteListModule} {OfflineMessageModule:OfflineMessageModule} {} {} MuteListModule
;; Mute list handler (not yet implemented). MUST BE SET to allow offline
;; messages to work
MuteListModule = MuteListModule

;# {MuteListURL} {OfflineMessageModule:OfflineMessageModule} {} {} http://yourserver/Mute.php
;; URL of the web service that serves mute lists. Not currently used, but
;; must be set to allow offline messaging to work.
MuteListURL = http://im.osgrid.org/mute

;; Control whether group messages are forwarded to offline users.
;; Default is true.
;; This applies to the core groups module (Flotsam) only.
; ForwardOfflineGroupMessages = true

[ODEPhysicsSettings]
;# {mesh_sculpted_prim} {[Startup]physics:OpenDynamicsEngine} {Mesh sculpties so they collide as they look?} {true false} true
;; Do we want to mesh sculpted prim to collide like they look?
;; If you are seeing sculpt texture decode problems
;; (messages such as "Decoded image with unhandled number of components: 0 shortly followed by a physcs exception")
;; then you might want to try setting this to false.
; mesh_sculpted_prim = true

;# {use_NINJA_physics_joints} {[Startup]physics:OpenDynamicsEngine} {Use jointed (NINJA) physics?} {true false} false
;; If you would like physics joints to be enabled through a special naming
;; convention in the client, set this to true.
;; (see NINJA Physics, http://opensimulator.org/wiki/NINJA_Physics)
; use_NINJA_physics_joints = false

av_density = 3

[RemoteAdmin]
;; This is the remote admin module, which uses XMLRPC requests to
;; manage regions from a web interface.

;# {enabled} {} {Enable the remote admin interface?} {true false} false
; enabled = false

;# {port} {enabled:true} {Port to use for the remote admin interface? (0 = default)} {} 0
;; Set this to a nonzero value to have remote admin use a different port
; port = 0

;# {access_password} {enabled:true} {Password for the remote admin interface} {}
;; This password is required to make any XMLRPC call (should be set as
;; the "password" parameter)
; access_password = ""

;# {create_region_enable_voice} {enabled:true} {Enable voice for newly created regions?} {true false} false
;; set this variable to true if you want the create_region XmlRpc
;; call to unconditionally enable voice on all parcels for a newly
;; created region
; create_region_enable_voice = false

;# {create_region_public} {enabled:true} {Make newly created regions public?} {true false} false
;; set this variable to false if you want the create_region XmlRpc
;; call to create all regions as private per default (can be
;; overridden in the XmlRpc call)
; create_region_public = false

;# {enabled_methods} {enabled:true} {List of methods to allow, separated by |} {} all
;; enable only those methods you deem to be appropriate using a | delimited
;; whitelist.
;; For example:
;; enabled_methods = admin_broadcast|admin_save_oar|admin_save_xml
;; if this parameter is not specified but enabled = true, all methods
;; will be available
; enabled_methods = all

;; specify the default appearance for an avatar created through the remote
;; admin interface
;; This will only take effect is the file specified by the
;; default_appearance setting below exists
; default_male = Default Male
; default_female = Default Female

;; Update appearance copies inventory items and wearables of default
;; avatars. if this value is false, just worn assets are copied to the
;; Clothes folder; if true, all Clothes and Bodyparts subfolders are copied.
;; The receiver will wear the same items the default avatar did wear.
; copy_folders = false

;; Path to default appearance XML file that specifies the look of the
;; default avatars
; default_appearance = default_appearance.xml

[Wind]
;# {enabled} {} {Enable wind module?} {true false} true
;; Enables the wind module.
; enabled = true

;# {wind_update_rate} {enabled:true} {Wind update rate in frames?} {} 150
;; How often should wind be updated, as a function of world frames.
;; Approximately 50 frames a second
wind_update_rate = 150

;; The Default Wind Plugin to load
; wind_plugin = SimpleRandomWind

;; These settings are specific to the ConfigurableWind plugin
;; To use ConfigurableWind as the default, simply change wind_plugin
;; to ConfigurableWind and uncomment the following.
; avg_strength = 5.0
; avg_direction = 0.0
; var_strength = 0.0
; var_direction = 0.0
; rate_change = 1.0

;# {strength} {enabled:true wind_plugin:SimpleRandomWind} {Wind strength?} {} 1.0
;; This setting is specific to the SimpleRandomWind plugin
;; Adjusts wind strength. 0.0 = no wind, 1.0 = normal wind.
; strength = 1.0

[LightShare]
;# {enable_windlight} {} {Enable LightShare technology?} {true false} false
;; This enables the transmission of Windlight scenes to supporting clients,
;; such as the Meta7 viewer.
;; It has no ill effect on viewers which do not support server-side
;; windlight settings.
;; Currently we only have support for MySQL databases.
enable_windlight = true

[DataSnapshot]
;# {index_sims} {} {Enable data snapshotting (search)?} {true false} false
;; The following set of configs pertains to search.
;; Set index_sims to true to enable search engines to index your
;; searchable data.
;; If false, no data will be exposed, DataSnapshot module will be off,
;; and you can ignore the rest of these search-related configs.
index_sims = true

;# {data_exposure} {index_sims:true} {How much data should be exposed?} {minimum all} minimum
;; The variable data_exposure controls what the regions expose:
;; minimum: exposes only things explicitly marked for search
;; all: exposes everything
data_exposure = minimum

;# {gridname} {index_sims:true} {Enter the name fo your grid} {} OSGrid
;; If search is on, change this to your grid name; will be ignored for
;; standalones
gridname = "name_of_your_grid"

;# {default_snapshot_period} {index_sims:true} {Period between data snapshots?} {} 1200
;; Period between data snapshots, in seconds. 20 minutes, for starters,
;; so that you see the initial changes fast.
;; Later, you may want to increase this to 3600 (1 hour) or more
default_snapshot_period = 1200

;; This will be created in bin, if it doesn't exist already. It will hold
;; the data snapshots.
snapshot_cache_directory = "DataSnapshot"

;# {data_services} {index_sims:true} {Data service URLs to register with?} {} http://metaverseink.com/cgi-bin/register.py
; This semicolon-separated string serves to notify specific data services
; about the existence of this sim. Uncomment if you want to index your
; data with this and/or other search providers.
; data_services="http://metaverseink.com/cgi-bin/register.py"
data_services="http://domain_name_you_created_on_dyndns.org_to_enable_dynamic_dns.dyndns.org:9000/register.php"

[Search]
SearchURL = http://domain_name_you_created_on_dyndns.org_to_enable_dynamic_dns.dyndns.org:9000/query.php

[Economy]
;; The economy module is not enabled by default and there is no easy,
;; menu controlled way to do this. To enabled this module, insert
;; economymodule = BetaGridLikeMoneyModule
;; into the startup section (at the top of this file).
;; Then configure the options below as needed.

;; Enables selling things for $0
SellEnabled = "true"

;; Money Unit fee to upload textures, animations etc
; PriceUpload = 0

;; Money Unit fee to create groups
; PriceGroupCreate = 0

[XEngine]
;# {Enabled} {} {Enable the XEngine scripting engine?} {true false} true
;; Enable this engine in this OpenSim instance
Enabled = true

;; How many threads to keep alive even if nothing is happening
; MinThreads = 2

;; How many threads to start at maximum load
; MaxThreads = 100

;; Time a thread must be idle (in seconds) before it dies
; IdleTimeout = 60

;# {Priority} {Enabled:true} {Priority for script engine threads?} {Lowest BelowNormal Normal AboveNormal Highest} BelowNormal
;; Thread priority ("Lowest", "BelowNormal", "Normal", "AboveNormal",
;; "Highest")
; Priority = "BelowNormal"

;; Maximum number of events to queue for a script (excluding timers)
; MaxScriptEventQueue = 300

;; Stack size per thread created
; ThreadStackSize = 262144

;; Set this to true (the default) to load each script into a separate
;; AppDomain. Setting this to false will load all script assemblies into the
;; current AppDomain, which will reduce the per-script overhead at the
;; expense of reduced security and the inability to garbage collect the
;; script assemblies
;;
;; If you are on Linux Server keep this set to false
;; If you are on Windows Server set this to true for best performance
AppDomainLoading = false

;# {DefaultCompileLanguage} {Enabled:true} {Default script language?} {lsl vb cs} lsl
;; Default language for scripts
; DefaultCompileLanguage = "lsl"

;# {AllowedCompilers} {Enabled:true} {Languages to allow (comma separated)?} {} lsl
;; List of allowed languages (lsl,vb,cs)
;; AllowedCompilers=lsl,cs,js,vb.
;; *warning*, non lsl languages have access to static methods such as
;; System.IO.File. Enable at your own risk.
; AllowedCompilers = "lsl"

;; Compile debug info (line numbers) into the script assemblies
; CompileWithDebugInformation = true

;; Allow the user of mod* functions. This allows a script to pass messages
;; to a region module via the modSendCommand() function
;; Default is false
; AllowMODFunctions = false

;# {AllowOSFunctions} {Enabled:true} {Allow OSFunctions? (DANGEROUS!)} {true false} false
;; Allow the use of os* functions (some are dangerous)
AllowOSFunctions = true

;# {AllowLightShareFunctions} {Enabled:true [LightShare]enable_windlight:true} {Allow LightShare functions?} {true false} true
; Allow the user of LightShare functions
AllowLightShareFunctions = true

;# {OSFunctionThreatLevel} {Enabled:true AllowOSFunctions:true} {OSFunction threat level? (DANGEROUS!)} {None VeryLow Low Moderate High VeryHigh Severe} VeryLow
;; Threat level to allow, one of None, VeryLow, Low, Moderate, High,
;; VeryHigh, Severe
OSFunctionThreatLevel = VeryLow

;; Time a script can spend in an event handler before it is interrupted
; EventLimit = 30

;; If a script overruns it's event limit, kill the script?
; KillTimedOutScripts = false

;; Sets the multiplier for the scripting delays
; ScriptDelayFactor = 1.0

;; The factor the 10 m distances llimits are multiplied by
; ScriptDistanceLimitFactor = 1.0

;; Maximum length of notecard line read
;; Increasing this to large values potentially opens
;; up the system to malicious scripters
; NotecardLineReadCharsMax = 255

;; Sensor settings
; SensorMaxRange = 96.0
; SensorMaxResults = 16

;; Disable underground movement of prims (default true); set to
;; false to allow script controlled underground positioning of
;; prims
; DisableUndergroundMovement = true

Allow_osGetSimulatorVersion = true

;; Path to script engine assemblies
;; Default is ./bin/ScriptEngines
; ScriptEnginesPath = "ScriptEngines"

[RegionReady]
; Enable this module to get notified once all items and scripts in the region have been completely loaded and compiled
; default is false
enabled = true

; Channel on which to signal region readiness through a message
; formatted as follows: "{server_startup|oar_file_load},{0|1},n,[oar error]"
; - the first field indicating whether this is an initial server startup
; - the second field is a number indicating whether the OAR file loaded ok (1 == ok, 0 == error)
; - the third field is a number indicating how many scripts failed to compile
; - "oar error" if supplied, provides the error message from the OAR load
channel_notify = -800
; - disallow logins while scripts are loading
login_disable = true
; - send an alert as json to a service
; alert_uri = "http://myappserver.net/my_handler/"

[MRM]
;; Enables the Mini Region Modules Script Engine.
; Enabled = false

;; Runs MRM in a Security Sandbox
;; WARNING: DISABLING IS A SECURITY RISK.
; Sandboxed = true

;; The level sandbox to use, adjust at your OWN RISK.
;; Valid values are:
;; * FullTrust
;; * SkipVerification
;; * Execution
;; * Nothing
;; * LocalIntranet
;; * Internet
;; * Everything
; SandboxLevel = "Internet"

;; Only allow Region Owners to run MRMs
;; May represent a security risk if you disable this.
; OwnerOnly = true

[FreeSwitchVoice]
;; In order for this to work you need a functioning FreeSWITCH PBX set up.
;; Configuration details at http://opensimulator.org/wiki/Freeswitch_Module
; Enabled = false

;; You need to load a local service for a standalone, and a remote service
;; for a grid region. Use one of the lines below, as appropriate
;; If you're using Freeswitch on a standalone then you will also need to configure the [FreeswitchService] section in config-include/StandaloneCommon.ini
; LocalServiceModule = OpenSim.Services.FreeswitchService.dll:FreeswitchService
; LocalServiceModule = OpenSim.Services.Connectors.dll:RemoteFreeswitchConnector

;; If using a remote connector, specify the server URL
; FreeswitchServiceURL = http://my.grid.server:8004/fsapi

[FreeswitchService]
;; !!!!!!!!!!!!!!!!!!!!!!!!!!!
;; !!!!!!STANDALONE ONLY!!!!!!
;; !!!!!!!!!!!!!!!!!!!!!!!!!!!
;; The IP address of your FreeSWITCH server. The common case is for this to be the same as the server running the OpenSim standalone
;; This has to be set for the FreeSWITCH service to work
;ServerAddress = 127.0.0.1

;; The following configuration parameters are optional

;; By default, this is the same as the ServerAddress
; Realm = 127.0.0.1

;; By default, this is the same as the ServerAddress on port 5060
; SIPProxy = 127.0.0.1:5060

;; Default is 5000ms
; DefaultTimeout = 5000

;; The dial plan context. Default is "default"
; Context = default

;; Currently unused
; UserName = freeswitch

;; Currently unused
; Password = password

;; The following parameters are for STUN = Simple Traversal of UDP through NATs
;; See http://wiki.freeswitch.org/wiki/NAT_Traversal
;; stun.freeswitch.org is not guaranteed to be running so use it in
;; production at your own risk
; EchoServer = 127.0.0.1+
; EchoPort = 50505
; AttemptSTUN = false

[Groups]
;# {Enabled} {} {Enable groups?} {true false} false
;; Enables the groups module
Enabled = true

;# {Module} {Enabled:true} {Groups module to use? (Use GroupsModule to use Flotsam/Simian)} {} Default
;; This is the current groups stub in Region.CoreModules.Avatar.Groups.
;; All the other settings below only really apply to the Flotsam/SimianGrid
;; GroupsModule.
;; This module can use a PHP XmlRpc server from the Flotsam project at
;; http://code.google.com/p/flotsam/
;; or from the SimianGrid project at http://code.google.com/p/openmetaverse
Module = GroupsModule

;; Service connectors to the Groups Service. Select one depending on
;; whether you're using a Flotsam XmlRpc backend or a SimianGrid backend

;# {ServicesConnectorModule} {Module:GroupsModule} {Service connector to use for groups?} {XmlRpcGroupsServicesConnector SimianGroupsServicesConnector} XmlRpcGroupsServicesConnector
;; The service connector to use for the GroupsModule
ServicesConnectorModule = XmlRpcGroupsServicesConnector

;# {GroupsServerURI} {Module:GroupsModule} {Groups Server URI?} {}
;; URI for the groups services
GroupsServerURI = "http://some_hosted_server_on_the_web.com/osgrid/xmlrpc.php"

;# {NoticesEnabled} {Module:GroupsModule} {Enable group notices?} {true false} true
;; Enable Group Notices
NoticesEnabled = true

;; This makes the Groups modules very chatty on the console.
; DebugEnabled = false

;; Specify which messaging module to use for groups messaging and if it's
;; enabled
MessagingModule = GroupsMessagingModule
MessagingEnabled = true

;; XmlRpc Security settings. These must match those set on your backend
;; groups service.
; XmlRpcServiceReadKey = 1234
; XmlRpcServiceWriteKey = 1234

[PacketPool]
; Enables the experimental packet pool. Yes, we've been here before.
RecyclePackets = true;
RecycleDataBlocks = true;

[InterestManagement]
;# {UpdatePrioritizationScheme} {} {Update prioritization scheme?} {BestAvatarResponsiveness Time Distance SimpleAngularDistance FrontBack} BestAvatarResponsiveness
;; This section controls how state updates are prioritized for each client
;; Valid values are BestAvatarResponsiveness, Time, Distance,
;; SimpleAngularDistance, FrontBack
UpdatePrioritizationScheme = FrontBack
ReprioritizationEnabled = true

[MediaOnAPrim]
;# {Enabled} {} {Enable Media-on-a-Prim (MOAP)} {true false} true
;; Enable media on a prim facilities
Enabled = true;

[PrimLimitsModule]
;# {EnforcePrimLimits} {} {Enforce parcel prim limits} {true false} false
;; Enable parcel prim limits. Off by default to emulate pre-existing behavior.
EnforcePrimLimits = true

[Architecture]
;# {Include-Architecture} {} {Choose one of the following architectures} {config-include/Standalone.ini config-include/StandaloneHypergrid.ini config-include/Grid.ini config-include/GridHypergrid.ini config-include/SimianGrid.ini config-include/HyperSimianGrid.ini} config-include/Standalone.ini
;; Uncomment one of the following includes as required. For instance, to create a standalone OpenSim,
;; uncomment Include-Architecture = "config-include/Standalone.ini"
;;
;; Then you will need to copy and edit the corresponding *Common.example file in config-include/
;; that the referenced .ini file goes on to include.
;;
;; For instance, if you chose "config-include/Standalone.ini" then you will need to copy
;; "config-include/StandaloneCommon.ini.example" to "config-include/StandaloneCommon.ini" before
;; editing it to set the database and backend services that OpenSim will use.
;;
; Include-Architecture = "config-include/Standalone.ini"
; Include-Architecture = "config-include/StandaloneHypergrid.ini"
; Include-Architecture = "config-include/Grid.ini"
; Include-Architecture = "config-include/GridHypergrid.ini"
; Include-Architecture = "config-include/SimianGrid.ini"
; Include-Architecture = "config-include/HyperSimianGrid.ini"
Include-Architecture = "config-include/DivaPreferences.ini"

[Modules]
;;LandServices module is required for ossearch to function properly in grid mode.
LandServices = "RemoteLandServicesConnector"
LandServiceConnector = "True"

[Profile]
; Change it to your own HTTP server to have the Profile server work
Module = "OpenProfileModule"
ProfileURL = http://some_hosted_server_on_the_web.com/osgrid/profile.php

Next we need to look at the file DivaPreferences.ini within the sub-folder /bin/config-include, which i have pasted and modified here so that you can customize it to your needs:


;;
;; Diva's personal preferences
;; Please don't change this file.
;; Instead, override variables in MyWorld.ini
;;

[Startup]
AllowScriptCrossing = true
permissionmodules = "DefaultPermissionsModule"
serverside_object_permissions = true
region_owner_is_god = true
WorldMapModule = "HGWorldMap"
CombineContiguousRegions=true

[DataSnapshot]
index_sims = true
data_exposure = minimum

; 1 hour
default_snapshot_period = 3600

snapshot_cache_directory = "DataSnapshot"
data_services="http://metaverseink.com/cgi-bin/register.py"

[XEngine]
AllowMODFunctions = true
AllowOSFunctions = true
OSFunctionThreatLevel = Moderate

[InterestManagement]
UpdatePrioritizationScheme = BestAvatarResponsiveness

[DatabaseService]
StorageProvider = "Diva.Data.MySQL.dll"

[Modules]
AssetServices = "HGAssetBroker"
InventoryServices = "HGInventoryBroker"
NeighbourServices = "RemoteNeighbourServicesConnector"
AuthenticationServices = "LocalAuthenticationServicesConnector"
GridServices = "LocalGridServicesConnector"
PresenceServices = "LocalPresenceServicesConnector"
UserAccountServices = "LocalUserAccountServicesConnector"
GridUserServices = "LocalGridUserServicesConnector"
SimulationServices = "RemoteSimulationConnectorModule"
AvatarServices = "LocalAvatarServicesConnector"
EntityTransferModule = "HGEntityTransferModule"
InventoryAccessModule = "HGInventoryAccessModule"
AssetCaching = "CenomeMemoryAssetCache"

InventoryServiceInConnector = true
AssetServiceInConnector = true
HypergridServiceInConnector = true
NeighbourServiceInConnector = true
LibraryModule = true
LLLoginServiceInConnector = true
AuthenticationServiceInConnector = true
SimulationServiceInConnector = true
MIImageServiceModule = true
GridInfoServiceInConnector = true
WifiModule = true

[SimulationDataStore]
LocalServiceModule = "OpenSim.Services.Connectors.dll:SimulationDataService"

[EstateDataStore]
LocalServiceModule = "OpenSim.Services.Connectors.dll:EstateDataService"

[AssetService]
DefaultAssetLoader = "OpenSim.Framework.AssetLoader.Filesystem.dll"
AssetLoaderArgs = "assets/AssetSets.xml"
AssetLoaderEnabled = true

; For the AssetServiceInConnector
LocalServiceModule = "OpenSim.Services.AssetService.dll:AssetService"

; For HGAssetBroker
LocalGridAssetService = "OpenSim.Services.AssetService.dll:AssetService"
HypergridAssetService = "OpenSim.Services.Connectors.dll:HGAssetServiceConnector"

[InventoryService]
; For HGInventoryBroker
LocalGridInventoryService = "OpenSim.Services.InventoryService.dll:XInventoryService"

[LibraryService]
LocalServiceModule = "OpenSim.Services.InventoryService.dll:LibraryService"
LibraryName = "OpenSim Library (diva distro)"
DefaultLibrary = "./inventory/Libraries.xml"

[AvatarService]
LocalServiceModule = "OpenSim.Services.AvatarService.dll:AvatarService"

[AuthenticationService]
LocalServiceModule = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService"

[AuthorizationService]
LocalServiceModule = "OpenSim.Services.AuthorizationService.dll:AuthorizationService"

[GridService]
StorageProvider = "Diva.Data.MySQL.dll"
; LocalGridServicesConnector needs this
LocalServiceModule = "OpenSim.Services.GridService.dll:GridService"
AllowHypergridMapSearch = true
AssetService = "OpenSim.Services.AssetService.dll:AssetService"

[PresenceService]
LocalServiceModule = "OpenSim.Services.PresenceService.dll:PresenceService"

[UserAccountService]
LocalServiceModule = "OpenSim.Services.UserAccountService.dll:UserAccountService"

;; These are for creating new accounts by the service
AuthenticationService = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService"
GridUserService = "OpenSim.Services.UserAccountService.dll:GridUserService"
GridService = "OpenSim.Services.GridService.dll:GridService"
InventoryService = "OpenSim.Services.InventoryService.dll:XInventoryService"

[GridUserService]
LocalServiceModule = "OpenSim.Services.UserAccountService.dll:GridUserService"

[FriendsService]
LocalServiceModule = "OpenSim.Services.FriendsService.dll"

[Friends]
Connector = "OpenSim.Services.FriendsService.dll"

[LoginService]
LocalServiceModule = "OpenSim.Services.LLLoginService.dll:LLLoginService"
UserAccountService = "OpenSim.Services.UserAccountService.dll:UserAccountService"
GridUserService = "OpenSim.Services.UserAccountService.dll:GridUserService"
UserAgentService = "OpenSim.Services.HypergridService.dll:UserAgentService"
AuthenticationService = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService"
InventoryService = "OpenSim.Services.InventoryService.dll:XInventoryService"
PresenceService = "OpenSim.Services.PresenceService.dll:PresenceService"
GridService = "OpenSim.Services.GridService.dll:GridService"
AvatarService = "OpenSim.Services.AvatarService.dll:AvatarService"
FriendsService = "OpenSim.Services.FriendsService.dll:FriendsService"
SearchURL = "http://search.metaverseink.com/"

[GatekeeperService]
LocalServiceModule = "OpenSim.Services.HypergridService.dll:GatekeeperService"
;; for the service
UserAccountService = "OpenSim.Services.UserAccountService.dll:UserAccountService"
UserAgentService = "OpenSim.Services.HypergridService.dll:UserAgentService"
PresenceService = "OpenSim.Services.PresenceService.dll:PresenceService"
GridService = "OpenSim.Services.GridService.dll:GridService"
AuthenticationService = "OpenSim.Services.Connectors.dll:AuthenticationServicesConnector"
SimulationService ="OpenSim.Services.Connectors.dll:SimulationServiceConnector"

[UserAgentService]
LocalServiceModule = "OpenSim.Services.HypergridService.dll:UserAgentService"
;; for the service
GridUserService = "OpenSim.Services.UserAccountService.dll:GridUserService"
GridService = "OpenSim.Services.GridService.dll:GridService"
GatekeeperService = "OpenSim.Services.HypergridService.dll:GatekeeperService"

;; The interface that local users get when they are in other grids
;; This greatly restricts the inventory operations while in other grids
[HGInventoryService]
; For the InventoryServiceInConnector
LocalServiceModule = "OpenSim.Services.HypergridService.dll:HGInventoryService"
UserAccountsService = "OpenSim.Services.UserAccountService.dll:UserAccountService"

;; The interface that local users get when they are in other grids
;; This restricts/filters the asset operations from the outside
[HGAssetService]
LocalServiceModule = "OpenSim.Services.HypergridService.dll:HGAssetService"
UserAccountsService = "OpenSim.Services.UserAccountService.dll:UserAccountService"

[WifiService]
AvatarAccount_Female = "Female Avatar"
AvatarAccount_Male = "Male Avatar"
AvatarAccount_Neutral = "Neutral Avatar"

AvatarPreselection = "Neutral"

StatisticsUpdateInterval = 60
StatisticsActiveUsersPeriod = 30

[Includes]
Include-Common = "config-include/MyWorld_laptop.ini"
; Include-Common = "config-include/MyWorld_desktop.ini"

IMPORTANT!

You may notice the last two lines where it says “MyWorld_laptop.ini”. This .ini file was created by me, you will NOT find it in the Diva installation.

I used to run this installation on a different computer so i simply duplicated MyWorld.ini, renamed it MyWorld_laptop.ini and MyWorld_desktop.ini, as the two computers had different network addresses and i didn’t want to bother changing things around every time. Now i decided to stick with the laptop file out of laziness, but as long as you keep the file name consistent in the last two lines of your DivaPreferences.ini file, you can rename it anything you like.

Now, not the last, BUT the most important file to look into:

MyWorld_laptop.ini


[Startup]
; SmartThreadPool is reported to work well on Mono/Linux, but
; UnsafeQueueUserWorkItem has been benchmarked with better
; performance on .NET/Windows
async_call_method = UnsafeQueueUserWorkItem
; recommended: false for mono / true for Windows
use_async_when_possible = true

[DatabaseService]
; ### Set the password (again)
ConnectionString = "Data Source=123.45.67.89;Database=name_of_your_database;User ID=username_to_access_your_database;Password=password_to_your_database;Old Guids=true;Allow Zero Datetime=true;"

[Network]
http_listener_port = 9000

[GridService]
Region_Utopia_1 = "DefaultRegion, FallbackRegion"
Gatekeeper = "http://192.168.1.6:8002" ; ### change this to the internal IP of your computer as seen from your router. Leave the port number to 8002 and make sure it'sforwarded by your router ###

[HGInventoryService]
ProfileServerURI = "http://192.168.1.6:8002/profiles"

[HGAssetService]
ProfileServerURI = "http://192.168.1.6:8002/profiles"

[HGInventoryAccessModule]
ProfileServerURI = "http://192.168.1.6:8002/profiles"
;; If you want to protect your assets from being copied by foreign visitors
;; uncomment the next line. You may want to do this on sims that have licensed content.
; OutboundPermission = False

[DataSnapshot]
gridname = "Utopia"

[LoginService]
WelcomeMessage = "Welcome to Utopia!"
GatekeeperURI = "http://192.168.1.6:8002"

SRV_HomeURI = "http://192.168.1.6:8002"
SRV_InventoryServerURI = "http://192.168.1.6:8002"
SRV_AssetServerURI = "http://192.168.1.6:8002"
SRV_ProfileServerURI = "http://192.168.1.6:8002"

[GatekeeperService]
ExternalName = "http://192.168.1.6:8002"
AllowTeleportsToAnyRegion = false

[GridInfoService]
login = http://192.168.1.6:8002/
gridname = "Utopia"
gridnick = "utopia"
welcome = http://192.168.1.6:8002/wifi/welcome.html
register = http://192.168.1.6:8002/wifi/user/account
password = http://192.168.1.6:8002/wifi/forgotpassword

[WifiService]
GridName = "Utopia"
LoginURL = "http://192.168.1.6:8002"
WebAddress = "http://192.168.1.6:8002"

;; The Wifi Administrator account
;; WIFI is your web interface that you can access from a browser. You can use it to create, manage and delete users and to monitor the status of your grid
;; If your initial installation went OK, there should be already your info in the following lines, otherwise you can set your admin info in here.
AdminFirst = "first_name"
AdminLast = "last_name"
AdminEmail = "admin@email.com"
AdminPassword = "password"

;; Do you want to be able to control grid registrations?
AccountConfirmationRequired = false

;; Variables for your mail server
;; Users will get email notifications from this account.
SmtpHost = "smtp.youremailserver.com"
SmtpPort = "110"
SmtpUsername = "admin@email.com"
SmtpPassword = "password"

Finally: your region.ini file located within /bin/regions/
Within this file you will find the configuration for all the regions you created during the initial setup.
It is recommended to create regions using the grind console. Look at the console window where you run OpenSim.32launch.exe and if you can see root:, that’s your console. Refer to http://opensimulator.org for console commands you can use to create regions.


; * Regions configuration file
; * This is Your World

[Name of your first region]
RegionUUID = "11111111-2222-3333-4444-555555555550"
Location = "5000,5000"
InternalAddress = "0.0.0.0"
InternalPort = 9000
AllowAlternatePorts = False
ExternalHostName = "123.45.67.89"

[Name of your second region]
RegionUUID = "11111111-2222-3333-4444-555555555551"
Location = "5000,5001"
InternalAddress = "0.0.0.0"
InternalPort = 9001
AllowAlternatePorts = False
ExternalHostName = "123.45.67.89"

[Name of your third region]
RegionUUID = "11111111-2222-3333-4444-555555555552"
Location = "5001,5000"
InternalAddress = "0.0.0.0"
InternalPort = 9002
AllowAlternatePorts = False
ExternalHostName = "123.45.67.89"

[Name of your fourth region]
RegionUUID = "11111111-2222-3333-4444-555555555553"
Location = "5001,5001"
InternalAddress = "0.0.0.0"
InternalPort = 9003
AllowAlternatePorts = False
ExternalHostName = "123.45.67.89"

The profiles and Groups problem

Here is one thing i have been battling with for a while before getting it right. There is a few files that need to be downloaded separately for Groups and Profiles to work properly, and they must be hosted on a web server. I tried to make it work locally, but in the end i gave in and just uploaded it on my website and pointed to them from opensim.ini

If you haven’t copied my opensim.ini, here is the lines you have to add right at the bottom of it:


[Profile]
; Change it to your own HTTP server to have the Profile server work
Module = "OpenProfileModule"
ProfileURL = http://your server.com/path_to_the_profiles_folder/profile.php

go to: http://code.google.com/p/flotsam/wiki/XmlRpcGroups and get the latest version of xmlrpc, and upload the entire folder structure that comes packed with xmlrpc onto a web server.

One more very important step:

Open your “MyWorld.ini”, or whatever file is specified within DivaPreferences.ini, and make sure you add this line under Modules:

LandServices	= "RemoteLandServicesConnector"

The above line is the one thing likely to keep you from pulling your hair out for a week wandering why none of your groups and profiles work and why the XML-RPC groups module keeps spitting out red and yellow text in your console.

modify the line: ProfileURL above to point to the location of profile.php on the web server that’s online.

Now you should be good to go and able to create personal profiles and groups within your grid.

What are UUID’s?

Everything that exists within your grid is individually defined with what is called a Universally Unique Identifier or UUID. This is a 128 bit (16 characters) string. This identifier number can be seen in several instances while being logged into the simulation grid. It is associated with users, objects, regions, textures, media, and everything that is allowed into the grid. No two UUID’s can be the same on the same grid, and at any rates, the grid itself auto-generates different UUID’s for new items matching them with already existing UUID’s present on the MySQL tables the grid is connected to.

Now, the REAL fun begins

Once you have done your share of studying the basics from opensimulator.org, as well as having followed the instructions on this article, you should be now ready to launch your grid, and take it for a test drive.

open a console on your desktop, navigate to your /bin folder and run OpenSim.32bitlaunch.exe

If everything is good, there shouldn’t be any red text at all. Starting up your grid could take anywhere from a few seconds to several minutes.

Welcome to the Grid

At this point i assume you are now ready to explore your newly created world.

Your new grid can be accessed through a viewer that can be downloaded online and installed on PC, Mac or Unix/Linux platforms. Limited, text-only applications can be used to access your grid from portable devices like web-enabled tablets and mobile smartphones. The recommended and easiest client to download and configure for easy access of your grid is called Imprudence, and can be found at the following link:http://wiki.kokuaviewer.org/wiki/Downloads

Configuration of Imprudence

1. This document assumes knowledge of basic installation of programs and application on your platform. Once the installation of Imprudence is complete, run Imprudence. You should see the following screen (click on the picture for full size):

2. Click Grid Manager at the bottom of the screen just below the Grid pull down menu item. The Grid Manager Dialog box will appear:

3.Under the Select a Grid box, click Add New Grid. A blank form will appear:

4. In Grid Name type the name of your grid.

5. In Login URI paste the following: http://change_to_your_grid_url.com:9000

6. In Login Page paste the following: http://change_to_your_grid_url.com:9000/wifi/

7. Leave any other field blank, they will be populated automatically.

8. Click Apply to save your settings and OK to close the dialog box.

9. From the Grid pull down menu, select Utopia and fill in the First name, Last name and password you created for your admin avatar, and click Login.

At this point if everything is good, you should be able to login successfully into your grid. In the next article I’m planning to spend a bit of time explaining how to manage and interact with your grid, how to re-design your landscape, build and most importantly, how to establish acceptable policies of conduct for your visitors.

Metaphors of Utopia

Not long ago i decided to re-discover an old interest of mine: online virtual reality.

Funny thing is, whenever i investigate the status of virtual simulations on the web, i hardly ever see any collective enthusiasm towards the development of shared virtual reality from the same masses that seem very much in love with ancient technology such as the stereoscopic vision of the 1950s, every now and then dubbed as “3D”, and dominating in movie and home theaters across the civilized globe as the latest scream in entertainment.

While i could go onto a rant on how an optical illusion induced by a pair of lenses and overlapping flat images manages to arise so much excitement, while hundreds of hours of design and coding to create beautiful online virtual worlds and life-like interactivity sit on the back-burner, I do realize that those who have a realistic and reasonably down-to-earth vision of the trends of modern technology, already know the answer. Those who don’t, they are probably not even interested in knowing, which brings me to the point of this article: why should there be an interest for immersive virtual reality simulation on the web?

A few years back, Linden’s Research Labs made its mark on the web, as well as on many PayPal™ account holders, with its flagship product Second Life™.

Second Life™’s entertainment value, coupled with its potential for financial growth, both from Linden’s perspective AND its users, made for a perfect recipe that to this day still retains a hefty customer-base. Some of us will remember blogs and articles describing how the first and lucky few users with entrepreneurial instincts took advantage of the opportunity of making money using the non-taxable internal currency provided by Second Life™. Several major corporations were enticed into investing in in-world advertising campaigns, especially the entertainment industry.

Sometime in 2007 i was actually invited by a fellow Second Life™ user, to a virtual event hosted for the official box office opening of the fourth installment of the “Die Hard” series, “Live Free or Die Hard”. The event was no joke, as i realized that the voice of Bruce Willis himself streamed through the voice-enabled chat session within the virtual conference room. The man himself agreed to a live interview within Second Life™ and talked about his support for modern technology. A smart move, considering the plot of the movie resonates with those of us who believe that in a world where technology is so hard-wired in our daily life, the lack of it would create mayhem. But i digress.

The point is, Linden Research Labs’ took advantage of an opportunity that manifested only through a leap of faith into a technology that was considered dead and gone by everyone else, and still remains now, perhaps not as popular as it once were, calling for users of a coming-of-age generation that will indeed show increased interest in virtual worlds on the web. But what now? We have seen the success of Second Life™… so why no one else is trying to replicate that model with a new platform? To paraphrase a popular show of my time: “We have the technology, we can rebuild it…”, and considering today’s hardware prices, it will cost us definitely less than six million dollars.

The dilemma is this: unless this technology is not jump started by at least few other entrepreneurs willing to “lose a little to gain a little”, no one will be interested for at least another decade, which will be long enough even for Second Life™ to get old and be discarded as it happened to its predecessors of the 1990s.

The answer, as it usually is, was provided by an open source community of like-minded individuals who volunteered their efforts NOT ONLY to replicate Second Life™, but to also provide the tools to common users to host and manage their own personal virtual worlds, and share them with the rest of the world Wide Web.

The project, hosted at http://opensimulator.org, provides extensive documentation and a starting point to install a complete virtual world onto a home computer, customize it and broadcast it live to the rest of the world by using a home internet connection and enough motivation to learn the basics.

About a month ago a took the challenge myself, just to see how hard it would be. Must i say i was surprised of the results? Perhaps. Then again i have seen other hosted worlds before and i knew the potential was there. Can anybody doing it? Not likely. Yet can anybody design a simple website by writing code instead of using visual aids? Again, not likely.

I guess the point I’m trying to make is the following: the problem with pushing a technology is only partially due to the complexity of the technology itself. The main deterrent is fear.

without any previous experience in creating virtual worlds, i have built one. I have set it up to be broadcasted online, from a laptop running constantly from
under a coffee table, connected to my home wireless hotspot. I have ensured all of its components were stable and working. I have designed on it. I had fun on it and still do it now.

What about practical applications? What good could possibly come out from a self-hosted virtual world? No matter how pretty and “cool”, it has to have a purpose that can be shared and recognized not only by people like me who are already hardwired into this technology, but also by everyone else, the common people, the ones who expect a turn-key product capable of making their lives easier, without worrying about coding or installing custom applications and going through hoops for an experience.

I haven’t had the time to reflect on that lately as i was busy with my personal and professional life, too busy to care about revolutionary concepts in regard to virtual worlds. Just about when i started thinking about it, i found myself writing this article.

What is the simple concept of a turn-key solution applicable to a common user? I look at my daily web browsing experience and i don’t see any complexity there, no hoops. If i can’t remember the name of a website, i just type what i know, and i will instantly see Google narrowing down the choices for me. I do this hundreds of times a day when updating galleries for a bridal store, or when i need to look up information about other resources. There is no “.com” or “.net” anymore, it’s all organic search terms that turn my computer or smartphone alive and dynamic as much as a person on the street whom i could ask for directions.

This is the deal-breaker: the flat, two-dimensional world wide web has matured into something that everybody understands and trusts, and it has been developed to the point of making it easy to browse as much as it is to build.

Back in the 1990s, the concept of a Virtual Reality Markup Language (VRML) was intended to provide a platform for that very use: the problem was, as it is still today, browser limitations. This is what a virtual world needs to be popular and ensure connectivity and natural, organic discovery online. This is what the World Wide Web needs to branch out into the territory of solid geometry.

Once this goal is achieved, it might change the way web design is done, as well as marketing. The implementations of in-world search engines able to locate businesses by using geographical coordinates rather than web-addresses, new ways to express oneself artistically, dynamically and freely in larger metaphorical regions than today’s web browsers could ever display, adding the element of perspective and angle of view, as well as the visual impact of a product’s brand or service. If we add to that the power of an internal currency that can be purchased directly from anywhere in the world, enabling online shopping… there is no reason why this could not be a viable future for web users of the next few generations.

Can this be done today? Perhaps. Realistically, considering the status of a global economy acting like a wrecking ball over any enterprise requiring a minimal amount of risk, not in the cards. It will take a revolution, a change of pace, and the development of trust into a technology that thus far, has not been given the credit it deserves.

In my next few articles, I’d like to spend some time detailing my experience as beginner virtual world administrator, and i would like to do it in a way that resonates with what i do every day as a web designer and webmaster, and perhaps elaborate further on how i feel this technology is just about half way there, in my mind, on its way to re-shape the way we think the Internet should be… and how free it could be.

Utopia – Grid Map

Categories: Editorial
Comments: No Comments
Published on: August 24, 2011

Utopia

The recommended and easiest client to download and configure for easy access of your grid is called Imprudence, and can be found at the following link:http://wiki.kokuaviewer.org/wiki/Downloads

Configuration of Imprudence

1. This document assumes knowledge of basic installation of programs and application on your platform. Once the installation of Imprudence is complete, run Imprudence. You should see the following screen (click on the picture for full size):

2. Click Grid Manager at the bottom of the screen just below the Grid pull down menu item. The Grid Manager Dialog box will appear:

3.Under the Select a Grid box, click Add New Grid. A blank form will appear:

4. In Grid Name type the name of your grid.

5. In Login URI paste the following: http://fabiobasile.dyndns.org:9000

6. In Login Page paste the following: http://fabiobasile.dyndns.org:9000/wifi/

7. Leave any other field blank, they will be populated automatically.

8. Click Apply to save your settings and OK to close the dialog box.

9. From the Grid pull down menu, select Utopia and fill in the First name, Last name and password you created for your admin avatar, and click Login.

At this point you should be successfully logged on and automatically teleported at the Welcome Center in Utopia Landing.

Utopia Downtown - Initial Development

Utopia Downtown - Initial Development

Complete Grid Map:

Utopia DowntownUtopia SandboxUtopia DowntownUtopia Sandbox
Utopia LandingUtopia Industrial

 

Webmasters & Website Owners beware:

Categories: Editorial
Tags: No Tags
Comments: No Comments
Published on: June 3, 2011

Webmasters & Website Owners beware: There is a little known new bloodsport played by stock images websites, a cruel competition on who is going to make more bucks off of suing innocent people on alleged copyright infringement charges. If you own a website and you or your web design contractor or company has used any kind of photographic imagery, there is something you can do to prevent being the next victim of a lawsuit harassment: image search engines like tineye.com are used by these companies to scour the web for images that are potentially violating copyright. Use those services too! Protect yourself and your business and delete/replace from your site any image that might be similar or match one existing on a stock photo repository. Don’t wait! You could be NEXT!!

Good business and how to mess it up.

Categories: Editorial
Tags: No Tags
Comments: No Comments
Published on: November 23, 2010

Any ethically sound IT professional with the intent of making a profit from promoting businesses online, understands that most business owners must go through a learning process themselves before deciding how much of an allotted budget is to be spent on a campaign program. This is an important phase that can build or break the trust between the business owner and the service provider.

It is important to remember (or realize) that ethics is not a skill, it’s a trait. It can be learned, but it can’t be simulated without repercussions. Ethics, or the lack of, is something people don’t forget. Ever.

The learning curve required isn’t steep, mostly consisting in an explanation of common definitions of technical terms and jargon, and a general but clear explanation of what can and cannot be achieved, within a time frame, or ever.

Instant results are definitely not what I personally consider a reasonable expectation.

Promising positioning within the first 5 search results on search engines within a week of a complete or even partial redesign of any website, is not only unreasonable, it’s utterly irresponsible. Which is why claims like these are exclusive of fly-by-night operations with strict “credit card first” policies.

One once argued that no one is inherently evil, although evil is a skill that can be taught far more easily than any other, and just like a gamble, it has the potential to turn out for the worst outcome, which is why the one who gets away with doing wrong, will feel powerful to the point of gambling, again and again, until the rightful punishment is reached, and everything is lost.

In my humble opinion, I see three categories of service providers, in any given field: the Good, the Bad, and the Lazy.

The good service provider is the one with the skills, knowledge and moral standards high enough to be competitive and able to build a clientele willing to sign up for the long term.

The bad service provider, is the one with high skills, but low moral standards, and the intent to deceive, victimize, confuse and ultimately: cash in and disappear.

The lazy service provider is one with somewhat enough moral standards to feel remorse, some skills, but not enough self esteem to believe in the concept of cultivating a competitive skill level. This pattern of behavior has unpredictable damaging potential that can manifest in any number of odd behaviors, and in the inevitable frustration of the client.

Contrary to popular belief, the lazy service provider is nothing more than the second victim of the bad service provider. Laziness and shallow reasoning are routinely exploited by the coward, who will sell smoke and mirrors in exchange for the last bit of integrity left to the Lazy.

Just like the average Joe with below-par education and too much time on his hands, the Lazy is more likely to gamble on hype than to do actual research. It is not uncommon for the Lazy to recommend services that sound too good to be true, when he’s not the one footing the bill.

“As seen on TV” comes to mind when I think of the type of smoke and mirrors available for purchase from oddly sounding and very long domain names, designed to inspire confidence in the heart of those who regard the “Bank of Nikolai” as a reputable financial institution.

Particularly entertaining are those that claim to generate web traffic “without the need for search engines”.

Funny enough the individuals who run these shifty operations are ironically very familiar with the inner workings of search engines, and understand that by choosing an odd name, they will lure potential victims into the scam by generating hundreds of searchable documents packed with instances of that name, containing fictitious and often repetitive positive propaganda, filling several pages of search results, before the real (and bad ones) hit.

One company in particular, maker of a popular and outrageously expensive vacuum cleaner adopted the same strategy, by burying deeper and deeper all the bad comments and articles against the company, with positive, but false propaganda, syndicated across hundreds of sites, especially YouTube, where the most popular videos are often labeled “The truth about…” or “Is… …a scam/fraud/pyramid scheme/etc…?”.

Resorting to any given third-party program which is not sufficiently detailed and self-explanatory in its architecture and engineering is not just a sign of laziness, but also incompetence, and inability to overcome the fear of letting the client know of that portion of the project which is simply… out of your league.

If a skill is lacking, there is no shame in backing down. The client will respect it.

Disclaimer

Categories: Writing Projects
Tags: No Tags
Comments: No Comments
Published on: October 22, 2009

BacklitKeys is a repository and laboratory for my creative writing projects. All unfinished projects will remain password-protected until completion.

page 1 of 1

Welcome , today is Wednesday, February 22, 2012