diff --git a/OpenSim/Data/MSSQL/Resources/GridStore.migrations b/OpenSim/Data/MSSQL/Resources/GridStore.migrations
index c6342fcdfd..de0cea7ab1 100644
--- a/OpenSim/Data/MSSQL/Resources/GridStore.migrations
+++ b/OpenSim/Data/MSSQL/Resources/GridStore.migrations
@@ -235,4 +235,11 @@ CREATE NONCLUSTERED INDEX IX_regions_name ON dbo.regions
regionName
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
-COMMIT
\ No newline at end of file
+COMMIT
+
+:VERSION 9
+
+BEGIN TRANSACTION
+ALTER TABLE regions ADD parcelMapTexture uniqueidentifier NULL;
+
+COMMIT
diff --git a/OpenSim/Data/SQLite/Resources/RegionStore.migrations b/OpenSim/Data/SQLite/Resources/RegionStore.migrations
index 31195af06c..0f40cdc04d 100644
--- a/OpenSim/Data/SQLite/Resources/RegionStore.migrations
+++ b/OpenSim/Data/SQLite/Resources/RegionStore.migrations
@@ -472,3 +472,73 @@ COMMIT;
BEGIN;
ALTER TABLE regionsettings ADD COLUMN covenant_datetime INTEGER NOT NULL default 0;
COMMIT;
+
+:VERSION 23
+BEGIN;
+CREATE TABLE regionwindlight (
+ region_id VARCHAR(36) NOT NULL DEFAULT '000000-0000-0000-0000-000000000000' PRIMARY KEY,
+ water_color_r FLOAT NOT NULL DEFAULT '4.000000',
+ water_color_g FLOAT NOT NULL DEFAULT '38.000000',
+ water_color_b FLOAT NOT NULL DEFAULT '64.000000',
+ water_color_i FLOAT NOT NULL DEFAULT '1.000000',
+ water_fog_density_exponent FLOAT NOT NULL DEFAULT '4.0',
+ underwater_fog_modifier FLOAT NOT NULL DEFAULT '0.25',
+ reflection_wavelet_scale_1 FLOAT NOT NULL DEFAULT '2.0',
+ reflection_wavelet_scale_2 FLOAT NOT NULL DEFAULT '2.0',
+ reflection_wavelet_scale_3 FLOAT NOT NULL DEFAULT '2.0',
+ fresnel_scale FLOAT NOT NULL DEFAULT '0.40',
+ fresnel_offset FLOAT NOT NULL DEFAULT '0.50',
+ refract_scale_above FLOAT NOT NULL DEFAULT '0.03',
+ refract_scale_below FLOAT NOT NULL DEFAULT '0.20',
+ blur_multiplier FLOAT NOT NULL DEFAULT '0.040',
+ big_wave_direction_x FLOAT NOT NULL DEFAULT '1.05',
+ big_wave_direction_y FLOAT NOT NULL DEFAULT '-0.42',
+ little_wave_direction_x FLOAT NOT NULL DEFAULT '1.11',
+ little_wave_direction_y FLOAT NOT NULL DEFAULT '-1.16',
+ normal_map_texture VARCHAR(36) NOT NULL DEFAULT '822ded49-9a6c-f61c-cb89-6df54f42cdf4',
+ horizon_r FLOAT NOT NULL DEFAULT '0.25',
+ horizon_g FLOAT NOT NULL DEFAULT '0.25',
+ horizon_b FLOAT NOT NULL DEFAULT '0.32',
+ horizon_i FLOAT NOT NULL DEFAULT '0.32',
+ haze_horizon FLOAT NOT NULL DEFAULT '0.19',
+ blue_density_r FLOAT NOT NULL DEFAULT '0.12',
+ blue_density_g FLOAT NOT NULL DEFAULT '0.22',
+ blue_density_b FLOAT NOT NULL DEFAULT '0.38',
+ blue_density_i FLOAT NOT NULL DEFAULT '0.38',
+ haze_density FLOAT NOT NULL DEFAULT '0.70',
+ density_multiplier FLOAT NOT NULL DEFAULT '0.18',
+ distance_multiplier FLOAT NOT NULL DEFAULT '0.8',
+ max_altitude INTEGER NOT NULL DEFAULT '1605',
+ sun_moon_color_r FLOAT NOT NULL DEFAULT '0.24',
+ sun_moon_color_g FLOAT NOT NULL DEFAULT '0.26',
+ sun_moon_color_b FLOAT NOT NULL DEFAULT '0.30',
+ sun_moon_color_i FLOAT NOT NULL DEFAULT '0.30',
+ sun_moon_position FLOAT NOT NULL DEFAULT '0.317',
+ ambient_r FLOAT NOT NULL DEFAULT '0.35',
+ ambient_g FLOAT NOT NULL DEFAULT '0.35',
+ ambient_b FLOAT NOT NULL DEFAULT '0.35',
+ ambient_i FLOAT NOT NULL DEFAULT '0.35',
+ east_angle FLOAT NOT NULL DEFAULT '0.00',
+ sun_glow_focus FLOAT NOT NULL DEFAULT '0.10',
+ sun_glow_size FLOAT NOT NULL DEFAULT '1.75',
+ scene_gamma FLOAT NOT NULL DEFAULT '1.00',
+ star_brightness FLOAT NOT NULL DEFAULT '0.00',
+ cloud_color_r FLOAT NOT NULL DEFAULT '0.41',
+ cloud_color_g FLOAT NOT NULL DEFAULT '0.41',
+ cloud_color_b FLOAT NOT NULL DEFAULT '0.41',
+ cloud_color_i FLOAT NOT NULL DEFAULT '0.41',
+ cloud_x FLOAT NOT NULL DEFAULT '1.00',
+ cloud_y FLOAT NOT NULL DEFAULT '0.53',
+ cloud_density FLOAT NOT NULL DEFAULT '1.00',
+ cloud_coverage FLOAT NOT NULL DEFAULT '0.27',
+ cloud_scale FLOAT NOT NULL DEFAULT '0.42',
+ cloud_detail_x FLOAT NOT NULL DEFAULT '1.00',
+ cloud_detail_y FLOAT NOT NULL DEFAULT '0.53',
+ cloud_detail_density FLOAT NOT NULL DEFAULT '0.12',
+ cloud_scroll_x FLOAT NOT NULL DEFAULT '0.20',
+ cloud_scroll_x_lock INTEGER NOT NULL DEFAULT '0',
+ cloud_scroll_y FLOAT NOT NULL DEFAULT '0.01',
+ cloud_scroll_y_lock INTEGER NOT NULL DEFAULT '0',
+ draw_classic_clouds INTEGER NOT NULL DEFAULT '1');
+
+COMMIT;
\ No newline at end of file
diff --git a/OpenSim/Data/SQLite/SQLiteSimulationData.cs b/OpenSim/Data/SQLite/SQLiteSimulationData.cs
index a313c4f51b..ce1b7b4887 100644
--- a/OpenSim/Data/SQLite/SQLiteSimulationData.cs
+++ b/OpenSim/Data/SQLite/SQLiteSimulationData.cs
@@ -35,7 +35,7 @@ using log4net;
#if CSharpSqlite
using Community.CsharpSqlite.Sqlite;
#else
- using Mono.Data.Sqlite;
+using Mono.Data.Sqlite;
#endif
using OpenMetaverse;
using OpenMetaverse.StructuredData;
@@ -60,6 +60,7 @@ namespace OpenSim.Data.SQLite
private const string landAccessListSelect = "select distinct * from landaccesslist";
private const string regionbanListSelect = "select * from regionban";
private const string regionSettingsSelect = "select * from regionsettings";
+ private const string regionWindlightSelect = "select * from regionwindlight";
private DataSet ds;
private SqliteDataAdapter primDa;
@@ -69,9 +70,9 @@ namespace OpenSim.Data.SQLite
private SqliteDataAdapter landDa;
private SqliteDataAdapter landAccessListDa;
private SqliteDataAdapter regionSettingsDa;
+ private SqliteDataAdapter regionWindlightDa;
private SqliteConnection m_conn;
-
private String m_connectionString;
protected virtual Assembly Assembly
@@ -136,6 +137,9 @@ namespace OpenSim.Data.SQLite
SqliteCommand regionSettingsSelectCmd = new SqliteCommand(regionSettingsSelect, m_conn);
regionSettingsDa = new SqliteDataAdapter(regionSettingsSelectCmd);
+
+ SqliteCommand regionWindlightSelectCmd = new SqliteCommand(regionWindlightSelect, m_conn);
+ regionWindlightDa = new SqliteDataAdapter(regionWindlightSelectCmd);
// This actually does the roll forward assembly stuff
Migration m = new Migration(m_conn, Assembly, "RegionStore");
m.Update();
@@ -163,6 +167,9 @@ namespace OpenSim.Data.SQLite
ds.Tables.Add(createRegionSettingsTable());
setupRegionSettingsCommands(regionSettingsDa, m_conn);
+ ds.Tables.Add(createRegionWindlightTable());
+ setupRegionWindlightCommands(regionWindlightDa, m_conn);
+
// WORKAROUND: This is a work around for sqlite on
// windows, which gets really unhappy with blob columns
// that have no sample data in them. At some point we
@@ -171,63 +178,72 @@ namespace OpenSim.Data.SQLite
{
primDa.Fill(ds.Tables["prims"]);
}
- catch (Exception)
+ catch (Exception e)
{
- m_log.Info("[SQLITE REGION DB]: Caught fill error on prims table");
+ m_log.ErrorFormat("[SQLITE REGION DB]: Caught fill error on prims table :{0}", e.Message);
}
try
{
shapeDa.Fill(ds.Tables["primshapes"]);
}
- catch (Exception)
+ catch (Exception e)
{
- m_log.Info("[SQLITE REGION DB]: Caught fill error on primshapes table");
+ m_log.ErrorFormat("[SQLITE REGION DB]: Caught fill error on primshapes table :{0}", e.Message);
}
try
{
itemsDa.Fill(ds.Tables["primitems"]);
}
- catch (Exception)
+ catch (Exception e)
{
- m_log.Info("[SQLITE REGION DB]: Caught fill error on primitems table");
+ m_log.ErrorFormat("[SQLITE REGION DB]: Caught fill error on primitems table :{0}", e.Message);
}
try
{
terrainDa.Fill(ds.Tables["terrain"]);
}
- catch (Exception)
+ catch (Exception e)
{
- m_log.Info("[SQLITE REGION DB]: Caught fill error on terrain table");
+ m_log.ErrorFormat("[SQLITE REGION DB]: Caught fill error on terrain table :{0}", e.Message);
}
try
{
landDa.Fill(ds.Tables["land"]);
}
- catch (Exception)
+ catch (Exception e)
{
- m_log.Info("[SQLITE REGION DB]: Caught fill error on land table");
+ m_log.ErrorFormat("[SQLITE REGION DB]: Caught fill error on land table :{0}", e.Message);
}
try
{
landAccessListDa.Fill(ds.Tables["landaccesslist"]);
}
- catch (Exception)
+ catch (Exception e)
{
- m_log.Info("[SQLITE REGION DB]: Caught fill error on landaccesslist table");
+ m_log.ErrorFormat("[SQLITE REGION DB]: Caught fill error on landaccesslist table :{0}", e.Message);
}
try
{
regionSettingsDa.Fill(ds.Tables["regionsettings"]);
}
- catch (Exception)
+ catch (Exception e)
{
- m_log.Info("[SQLITE REGION DB]: Caught fill error on regionsettings table");
+ m_log.ErrorFormat("[SQLITE REGION DB]: Caught fill error on regionsettings table :{0}", e.Message);
+ }
+
+ try
+ {
+ regionWindlightDa.Fill(ds.Tables["regionwindlight"]);
+ }
+ catch (Exception e)
+ {
+ m_log.ErrorFormat("[SQLITE REGION DB]: Caught fill error on regionwindlight table :{0}", e.Message);
}
// We have to create a data set mapping for every table, otherwise the IDataAdaptor.Update() will not populate rows with values!
@@ -240,14 +256,14 @@ namespace OpenSim.Data.SQLite
CreateDataSetMapping(landDa, "land");
CreateDataSetMapping(landAccessListDa, "landaccesslist");
CreateDataSetMapping(regionSettingsDa, "regionsettings");
+ CreateDataSetMapping(regionWindlightDa, "regionwindlight");
}
}
catch (Exception e)
{
- m_log.Error(e);
- Environment.Exit(23);
+ m_log.ErrorFormat("[SQLITE REGION DB]: ", e);
+ Environment.Exit(23);
}
-
return;
}
@@ -298,6 +314,11 @@ namespace OpenSim.Data.SQLite
regionSettingsDa.Dispose();
regionSettingsDa = null;
}
+ if (regionWindlightDa != null)
+ {
+ regionWindlightDa.Dispose();
+ regionWindlightDa = null;
+ }
}
public void StoreRegionSettings(RegionSettings rs)
@@ -321,19 +342,76 @@ namespace OpenSim.Data.SQLite
Commit();
}
}
+
+ ///
+ /// Load windlight settings from region storage
+ ///
+ /// RegionID
public RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID)
{
- //This connector doesn't support the windlight module yet
- //Return default LL windlight settings
- return new RegionLightShareData();
+ RegionLightShareData wl = null;
+
+ lock (ds)
+ {
+ DataTable windlightTable = ds.Tables["regionwindlight"];
+ DataRow windlightRow = windlightTable.Rows.Find(regionUUID.ToString());
+ if (windlightRow == null)
+ {
+ wl = new RegionLightShareData();
+ wl.regionID = regionUUID;
+ StoreRegionWindlightSettings(wl);
+ return wl;
+ }
+ wl = buildRegionWindlight(windlightRow);
+ return wl;
+ }
}
+
+ ///
+ /// Remove windlight settings from region storage
+ ///
+ /// RegionID
public void RemoveRegionWindlightSettings(UUID regionID)
{
+ lock (ds)
+ {
+ DataTable windlightTable = ds.Tables["regionwindlight"];
+ DataRow windlightRow = windlightTable.Rows.Find(regionID.ToString());
+
+ if (windlightRow != null)
+ {
+ windlightRow.Delete();
+ }
+ }
+ Commit();
}
+
+ ///
+ /// Adds an windlight into region storage
+ ///
+ /// RegionLightShareData
public void StoreRegionWindlightSettings(RegionLightShareData wl)
{
- //This connector doesn't support the windlight module yet
+ lock (ds)
+ {
+ DataTable windlightTable = ds.Tables["regionwindlight"];
+ DataRow windlightRow = windlightTable.Rows.Find(wl.regionID.ToString());
+
+ if (windlightRow == null)
+ {
+ windlightRow = windlightTable.NewRow();
+ fillRegionWindlightRow(windlightRow, wl);
+ windlightTable.Rows.Add(windlightRow);
+ }
+ else
+ {
+ fillRegionWindlightRow(windlightRow, wl);
+ }
+
+ Commit();
+ }
}
+
public RegionSettings LoadRegionSettings(UUID regionUUID)
{
lock (ds)
@@ -387,7 +465,7 @@ namespace OpenSim.Data.SQLite
}
Commit();
- // m_log.Info("[Dump of prims]: " + ds.GetXml());
+// m_log.Info("[Dump of prims]: " + ds.GetXml());
}
///
@@ -397,7 +475,7 @@ namespace OpenSim.Data.SQLite
/// the region UUID
public void RemoveObject(UUID obj, UUID regionUUID)
{
- // m_log.InfoFormat("[REGION DB]: Removing obj: {0} from region: {1}", obj.Guid, regionUUID);
+// m_log.InfoFormat("[REGION DB]: Removing obj: {0} from region: {1}", obj.Guid, regionUUID);
DataTable prims = ds.Tables["prims"];
DataTable shapes = ds.Tables["primshapes"];
@@ -409,7 +487,7 @@ namespace OpenSim.Data.SQLite
foreach (DataRow row in primRows)
{
// Remove shape rows
- UUID uuid = new UUID((string) row["UUID"]);
+ UUID uuid = new UUID((string)row["UUID"]);
DataRow shapeRow = shapes.Rows.Find(uuid.ToString());
if (shapeRow != null)
{
@@ -464,7 +542,7 @@ namespace OpenSim.Data.SQLite
{
DataRow[] primsForRegion = prims.Select(byRegion);
// m_log.Info("[SQLITE REGION DB]: Loaded " + primsForRegion.Length + " prims for region: " + regionUUID);
-
+
// First, create all groups
foreach (DataRow primRow in primsForRegion)
{
@@ -472,9 +550,9 @@ namespace OpenSim.Data.SQLite
{
SceneObjectPart prim = null;
- string uuid = (string) primRow["UUID"];
- string objID = (string) primRow["SceneGroupID"];
-
+ string uuid = (string)primRow["UUID"];
+ string objID = (string)primRow["SceneGroupID"];
+
if (uuid == objID) //is new SceneObjectGroup ?
{
prim = buildPrim(primRow);
@@ -489,7 +567,7 @@ namespace OpenSim.Data.SQLite
"[SQLITE REGION DB]: No shape found for prim in storage, so setting default box shape");
prim.Shape = PrimitiveBaseShape.Default;
}
-
+
SceneObjectGroup group = new SceneObjectGroup(prim);
createdObjects.Add(group.UUID, group);
retvals.Add(group);
@@ -506,7 +584,7 @@ namespace OpenSim.Data.SQLite
}
}
}
-
+
// Now fill the groups with part data
foreach (DataRow primRow in primsForRegion)
{
@@ -514,8 +592,8 @@ namespace OpenSim.Data.SQLite
{
SceneObjectPart prim = null;
- string uuid = (string) primRow["UUID"];
- string objID = (string) primRow["SceneGroupID"];
+ string uuid = (string)primRow["UUID"];
+ string objID = (string)primRow["SceneGroupID"];
if (uuid != objID) //is new SceneObjectGroup ?
{
prim = buildPrim(primRow);
@@ -562,8 +640,7 @@ namespace OpenSim.Data.SQLite
DataRow[] dbItemRows = dbItems.Select(sql);
IList inventory = new List();
-// m_log.DebugFormat(
-// "[SQLITE REGION DB]: Found {0} items for {1} {2}", dbItemRows.Length, prim.Name, prim.UUID);
+// m_log.DebugFormat("[SQLITE REGION DB]: Found {0} items for {1} {2}", dbItemRows.Length, prim.Name, prim.UUID);
foreach (DataRow row in dbItemRows)
{
@@ -742,7 +819,7 @@ namespace OpenSim.Data.SQLite
// cmd.Parameters.Add(new SqliteParameter(":LandUUID", parcel.LandData.GlobalID.ToString()));
// cmd.ExecuteNonQuery();
-// }
+ // }
// This is the slower.. but more appropriate thing to do
@@ -805,7 +882,7 @@ namespace OpenSim.Data.SQLite
///
public void Commit()
{
- //m_log.Debug("[SQLITE]: Starting commit");
+// m_log.Debug("[SQLITE]: Starting commit");
lock (ds)
{
primDa.Update(ds, "prims");
@@ -819,6 +896,7 @@ namespace OpenSim.Data.SQLite
try
{
regionSettingsDa.Update(ds, "regionsettings");
+ regionWindlightDa.Update(ds, "regionwindlight");
}
catch (SqliteException SqlEx)
{
@@ -875,9 +953,9 @@ namespace OpenSim.Data.SQLite
{
DataTable terrain = new DataTable("terrain");
- createCol(terrain, "RegionUUID", typeof (String));
- createCol(terrain, "Revision", typeof (Int32));
- createCol(terrain, "Heightfield", typeof (Byte[]));
+ createCol(terrain, "RegionUUID", typeof(String));
+ createCol(terrain, "Revision", typeof(Int32));
+ createCol(terrain, "Heightfield", typeof(Byte[]));
return terrain;
}
@@ -890,62 +968,62 @@ namespace OpenSim.Data.SQLite
{
DataTable prims = new DataTable("prims");
- createCol(prims, "UUID", typeof (String));
- createCol(prims, "RegionUUID", typeof (String));
- createCol(prims, "CreationDate", typeof (Int32));
- createCol(prims, "Name", typeof (String));
- createCol(prims, "SceneGroupID", typeof (String));
+ createCol(prims, "UUID", typeof(String));
+ createCol(prims, "RegionUUID", typeof(String));
+ createCol(prims, "CreationDate", typeof(Int32));
+ createCol(prims, "Name", typeof(String));
+ createCol(prims, "SceneGroupID", typeof(String));
// various text fields
- createCol(prims, "Text", typeof (String));
- createCol(prims, "ColorR", typeof (Int32));
- createCol(prims, "ColorG", typeof (Int32));
- createCol(prims, "ColorB", typeof (Int32));
- createCol(prims, "ColorA", typeof (Int32));
- createCol(prims, "Description", typeof (String));
- createCol(prims, "SitName", typeof (String));
- createCol(prims, "TouchName", typeof (String));
+ createCol(prims, "Text", typeof(String));
+ createCol(prims, "ColorR", typeof(Int32));
+ createCol(prims, "ColorG", typeof(Int32));
+ createCol(prims, "ColorB", typeof(Int32));
+ createCol(prims, "ColorA", typeof(Int32));
+ createCol(prims, "Description", typeof(String));
+ createCol(prims, "SitName", typeof(String));
+ createCol(prims, "TouchName", typeof(String));
// permissions
- createCol(prims, "ObjectFlags", typeof (Int32));
- createCol(prims, "CreatorID", typeof (String));
- createCol(prims, "OwnerID", typeof (String));
- createCol(prims, "GroupID", typeof (String));
- createCol(prims, "LastOwnerID", typeof (String));
- createCol(prims, "OwnerMask", typeof (Int32));
- createCol(prims, "NextOwnerMask", typeof (Int32));
- createCol(prims, "GroupMask", typeof (Int32));
- createCol(prims, "EveryoneMask", typeof (Int32));
- createCol(prims, "BaseMask", typeof (Int32));
+ createCol(prims, "ObjectFlags", typeof(Int32));
+ createCol(prims, "CreatorID", typeof(String));
+ createCol(prims, "OwnerID", typeof(String));
+ createCol(prims, "GroupID", typeof(String));
+ createCol(prims, "LastOwnerID", typeof(String));
+ createCol(prims, "OwnerMask", typeof(Int32));
+ createCol(prims, "NextOwnerMask", typeof(Int32));
+ createCol(prims, "GroupMask", typeof(Int32));
+ createCol(prims, "EveryoneMask", typeof(Int32));
+ createCol(prims, "BaseMask", typeof(Int32));
// vectors
- createCol(prims, "PositionX", typeof (Double));
- createCol(prims, "PositionY", typeof (Double));
- createCol(prims, "PositionZ", typeof (Double));
- createCol(prims, "GroupPositionX", typeof (Double));
- createCol(prims, "GroupPositionY", typeof (Double));
- createCol(prims, "GroupPositionZ", typeof (Double));
- createCol(prims, "VelocityX", typeof (Double));
- createCol(prims, "VelocityY", typeof (Double));
- createCol(prims, "VelocityZ", typeof (Double));
- createCol(prims, "AngularVelocityX", typeof (Double));
- createCol(prims, "AngularVelocityY", typeof (Double));
- createCol(prims, "AngularVelocityZ", typeof (Double));
- createCol(prims, "AccelerationX", typeof (Double));
- createCol(prims, "AccelerationY", typeof (Double));
- createCol(prims, "AccelerationZ", typeof (Double));
+ createCol(prims, "PositionX", typeof(Double));
+ createCol(prims, "PositionY", typeof(Double));
+ createCol(prims, "PositionZ", typeof(Double));
+ createCol(prims, "GroupPositionX", typeof(Double));
+ createCol(prims, "GroupPositionY", typeof(Double));
+ createCol(prims, "GroupPositionZ", typeof(Double));
+ createCol(prims, "VelocityX", typeof(Double));
+ createCol(prims, "VelocityY", typeof(Double));
+ createCol(prims, "VelocityZ", typeof(Double));
+ createCol(prims, "AngularVelocityX", typeof(Double));
+ createCol(prims, "AngularVelocityY", typeof(Double));
+ createCol(prims, "AngularVelocityZ", typeof(Double));
+ createCol(prims, "AccelerationX", typeof(Double));
+ createCol(prims, "AccelerationY", typeof(Double));
+ createCol(prims, "AccelerationZ", typeof(Double));
// quaternions
- createCol(prims, "RotationX", typeof (Double));
- createCol(prims, "RotationY", typeof (Double));
- createCol(prims, "RotationZ", typeof (Double));
- createCol(prims, "RotationW", typeof (Double));
+ createCol(prims, "RotationX", typeof(Double));
+ createCol(prims, "RotationY", typeof(Double));
+ createCol(prims, "RotationZ", typeof(Double));
+ createCol(prims, "RotationW", typeof(Double));
// sit target
- createCol(prims, "SitTargetOffsetX", typeof (Double));
- createCol(prims, "SitTargetOffsetY", typeof (Double));
- createCol(prims, "SitTargetOffsetZ", typeof (Double));
+ createCol(prims, "SitTargetOffsetX", typeof(Double));
+ createCol(prims, "SitTargetOffsetY", typeof(Double));
+ createCol(prims, "SitTargetOffsetZ", typeof(Double));
- createCol(prims, "SitTargetOrientW", typeof (Double));
- createCol(prims, "SitTargetOrientX", typeof (Double));
- createCol(prims, "SitTargetOrientY", typeof (Double));
- createCol(prims, "SitTargetOrientZ", typeof (Double));
+ createCol(prims, "SitTargetOrientW", typeof(Double));
+ createCol(prims, "SitTargetOrientX", typeof(Double));
+ createCol(prims, "SitTargetOrientY", typeof(Double));
+ createCol(prims, "SitTargetOrientZ", typeof(Double));
createCol(prims, "PayPrice", typeof(Int32));
createCol(prims, "PayButton1", typeof(Int32));
@@ -981,7 +1059,7 @@ namespace OpenSim.Data.SQLite
createCol(prims, "SaleType", typeof(Int16));
// click action
- createCol(prims, "ClickAction", typeof (Byte));
+ createCol(prims, "ClickAction", typeof(Byte));
createCol(prims, "Material", typeof(Byte));
@@ -993,7 +1071,7 @@ namespace OpenSim.Data.SQLite
createCol(prims, "MediaURL", typeof(String));
// Add in contraints
- prims.PrimaryKey = new DataColumn[] {prims.Columns["UUID"]};
+ prims.PrimaryKey = new DataColumn[] { prims.Columns["UUID"] };
return prims;
}
@@ -1005,42 +1083,42 @@ namespace OpenSim.Data.SQLite
private static DataTable createShapeTable()
{
DataTable shapes = new DataTable("primshapes");
- createCol(shapes, "UUID", typeof (String));
+ createCol(shapes, "UUID", typeof(String));
// shape is an enum
- createCol(shapes, "Shape", typeof (Int32));
+ createCol(shapes, "Shape", typeof(Int32));
// vectors
- createCol(shapes, "ScaleX", typeof (Double));
- createCol(shapes, "ScaleY", typeof (Double));
- createCol(shapes, "ScaleZ", typeof (Double));
+ createCol(shapes, "ScaleX", typeof(Double));
+ createCol(shapes, "ScaleY", typeof(Double));
+ createCol(shapes, "ScaleZ", typeof(Double));
// paths
- createCol(shapes, "PCode", typeof (Int32));
- createCol(shapes, "PathBegin", typeof (Int32));
- createCol(shapes, "PathEnd", typeof (Int32));
- createCol(shapes, "PathScaleX", typeof (Int32));
- createCol(shapes, "PathScaleY", typeof (Int32));
- createCol(shapes, "PathShearX", typeof (Int32));
- createCol(shapes, "PathShearY", typeof (Int32));
- createCol(shapes, "PathSkew", typeof (Int32));
- createCol(shapes, "PathCurve", typeof (Int32));
- createCol(shapes, "PathRadiusOffset", typeof (Int32));
- createCol(shapes, "PathRevolutions", typeof (Int32));
- createCol(shapes, "PathTaperX", typeof (Int32));
- createCol(shapes, "PathTaperY", typeof (Int32));
- createCol(shapes, "PathTwist", typeof (Int32));
- createCol(shapes, "PathTwistBegin", typeof (Int32));
+ createCol(shapes, "PCode", typeof(Int32));
+ createCol(shapes, "PathBegin", typeof(Int32));
+ createCol(shapes, "PathEnd", typeof(Int32));
+ createCol(shapes, "PathScaleX", typeof(Int32));
+ createCol(shapes, "PathScaleY", typeof(Int32));
+ createCol(shapes, "PathShearX", typeof(Int32));
+ createCol(shapes, "PathShearY", typeof(Int32));
+ createCol(shapes, "PathSkew", typeof(Int32));
+ createCol(shapes, "PathCurve", typeof(Int32));
+ createCol(shapes, "PathRadiusOffset", typeof(Int32));
+ createCol(shapes, "PathRevolutions", typeof(Int32));
+ createCol(shapes, "PathTaperX", typeof(Int32));
+ createCol(shapes, "PathTaperY", typeof(Int32));
+ createCol(shapes, "PathTwist", typeof(Int32));
+ createCol(shapes, "PathTwistBegin", typeof(Int32));
// profile
- createCol(shapes, "ProfileBegin", typeof (Int32));
- createCol(shapes, "ProfileEnd", typeof (Int32));
- createCol(shapes, "ProfileCurve", typeof (Int32));
- createCol(shapes, "ProfileHollow", typeof (Int32));
+ createCol(shapes, "ProfileBegin", typeof(Int32));
+ createCol(shapes, "ProfileEnd", typeof(Int32));
+ createCol(shapes, "ProfileCurve", typeof(Int32));
+ createCol(shapes, "ProfileHollow", typeof(Int32));
createCol(shapes, "State", typeof(Int32));
// text TODO: this isn't right, but I'm not sure the right
// way to specify this as a blob atm
- createCol(shapes, "Texture", typeof (Byte[]));
- createCol(shapes, "ExtraParams", typeof (Byte[]));
+ createCol(shapes, "Texture", typeof(Byte[]));
+ createCol(shapes, "ExtraParams", typeof(Byte[]));
createCol(shapes, "Media", typeof(String));
- shapes.PrimaryKey = new DataColumn[] {shapes.Columns["UUID"]};
+ shapes.PrimaryKey = new DataColumn[] { shapes.Columns["UUID"] };
return shapes;
}
@@ -1053,29 +1131,29 @@ namespace OpenSim.Data.SQLite
{
DataTable items = new DataTable("primitems");
- createCol(items, "itemID", typeof (String));
- createCol(items, "primID", typeof (String));
- createCol(items, "assetID", typeof (String));
- createCol(items, "parentFolderID", typeof (String));
+ createCol(items, "itemID", typeof(String));
+ createCol(items, "primID", typeof(String));
+ createCol(items, "assetID", typeof(String));
+ createCol(items, "parentFolderID", typeof(String));
- createCol(items, "invType", typeof (Int32));
- createCol(items, "assetType", typeof (Int32));
+ createCol(items, "invType", typeof(Int32));
+ createCol(items, "assetType", typeof(Int32));
- createCol(items, "name", typeof (String));
- createCol(items, "description", typeof (String));
+ createCol(items, "name", typeof(String));
+ createCol(items, "description", typeof(String));
- createCol(items, "creationDate", typeof (Int64));
- createCol(items, "creatorID", typeof (String));
- createCol(items, "ownerID", typeof (String));
- createCol(items, "lastOwnerID", typeof (String));
- createCol(items, "groupID", typeof (String));
+ createCol(items, "creationDate", typeof(Int64));
+ createCol(items, "creatorID", typeof(String));
+ createCol(items, "ownerID", typeof(String));
+ createCol(items, "lastOwnerID", typeof(String));
+ createCol(items, "groupID", typeof(String));
- createCol(items, "nextPermissions", typeof (UInt32));
- createCol(items, "currentPermissions", typeof (UInt32));
- createCol(items, "basePermissions", typeof (UInt32));
- createCol(items, "everyonePermissions", typeof (UInt32));
- createCol(items, "groupPermissions", typeof (UInt32));
- createCol(items, "flags", typeof (UInt32));
+ createCol(items, "nextPermissions", typeof(UInt32));
+ createCol(items, "currentPermissions", typeof(UInt32));
+ createCol(items, "basePermissions", typeof(UInt32));
+ createCol(items, "everyonePermissions", typeof(UInt32));
+ createCol(items, "groupPermissions", typeof(UInt32));
+ createCol(items, "flags", typeof(UInt32));
items.PrimaryKey = new DataColumn[] { items.Columns["itemID"] };
@@ -1089,44 +1167,44 @@ namespace OpenSim.Data.SQLite
private static DataTable createLandTable()
{
DataTable land = new DataTable("land");
- createCol(land, "UUID", typeof (String));
- createCol(land, "RegionUUID", typeof (String));
- createCol(land, "LocalLandID", typeof (UInt32));
+ createCol(land, "UUID", typeof(String));
+ createCol(land, "RegionUUID", typeof(String));
+ createCol(land, "LocalLandID", typeof(UInt32));
// Bitmap is a byte[512]
- createCol(land, "Bitmap", typeof (Byte[]));
+ createCol(land, "Bitmap", typeof(Byte[]));
- createCol(land, "Name", typeof (String));
- createCol(land, "Desc", typeof (String));
- createCol(land, "OwnerUUID", typeof (String));
- createCol(land, "IsGroupOwned", typeof (Boolean));
- createCol(land, "Area", typeof (Int32));
- createCol(land, "AuctionID", typeof (Int32)); //Unemplemented
- createCol(land, "Category", typeof (Int32)); //Enum OpenMetaverse.Parcel.ParcelCategory
- createCol(land, "ClaimDate", typeof (Int32));
- createCol(land, "ClaimPrice", typeof (Int32));
- createCol(land, "GroupUUID", typeof (string));
- createCol(land, "SalePrice", typeof (Int32));
- createCol(land, "LandStatus", typeof (Int32)); //Enum. OpenMetaverse.Parcel.ParcelStatus
- createCol(land, "LandFlags", typeof (UInt32));
- createCol(land, "LandingType", typeof (Byte));
- createCol(land, "MediaAutoScale", typeof (Byte));
- createCol(land, "MediaTextureUUID", typeof (String));
- createCol(land, "MediaURL", typeof (String));
- createCol(land, "MusicURL", typeof (String));
- createCol(land, "PassHours", typeof (Double));
- createCol(land, "PassPrice", typeof (UInt32));
- createCol(land, "SnapshotUUID", typeof (String));
- createCol(land, "UserLocationX", typeof (Double));
- createCol(land, "UserLocationY", typeof (Double));
- createCol(land, "UserLocationZ", typeof (Double));
- createCol(land, "UserLookAtX", typeof (Double));
- createCol(land, "UserLookAtY", typeof (Double));
- createCol(land, "UserLookAtZ", typeof (Double));
+ createCol(land, "Name", typeof(String));
+ createCol(land, "Desc", typeof(String));
+ createCol(land, "OwnerUUID", typeof(String));
+ createCol(land, "IsGroupOwned", typeof(Boolean));
+ createCol(land, "Area", typeof(Int32));
+ createCol(land, "AuctionID", typeof(Int32)); //Unemplemented
+ createCol(land, "Category", typeof(Int32)); //Enum OpenMetaverse.Parcel.ParcelCategory
+ createCol(land, "ClaimDate", typeof(Int32));
+ createCol(land, "ClaimPrice", typeof(Int32));
+ createCol(land, "GroupUUID", typeof(string));
+ createCol(land, "SalePrice", typeof(Int32));
+ createCol(land, "LandStatus", typeof(Int32)); //Enum. OpenMetaverse.Parcel.ParcelStatus
+ createCol(land, "LandFlags", typeof(UInt32));
+ createCol(land, "LandingType", typeof(Byte));
+ createCol(land, "MediaAutoScale", typeof(Byte));
+ createCol(land, "MediaTextureUUID", typeof(String));
+ createCol(land, "MediaURL", typeof(String));
+ createCol(land, "MusicURL", typeof(String));
+ createCol(land, "PassHours", typeof(Double));
+ createCol(land, "PassPrice", typeof(UInt32));
+ createCol(land, "SnapshotUUID", typeof(String));
+ createCol(land, "UserLocationX", typeof(Double));
+ createCol(land, "UserLocationY", typeof(Double));
+ createCol(land, "UserLocationZ", typeof(Double));
+ createCol(land, "UserLookAtX", typeof(Double));
+ createCol(land, "UserLookAtY", typeof(Double));
+ createCol(land, "UserLookAtZ", typeof(Double));
createCol(land, "AuthbuyerID", typeof(String));
createCol(land, "OtherCleanTime", typeof(Int32));
- land.PrimaryKey = new DataColumn[] {land.Columns["UUID"]};
+ land.PrimaryKey = new DataColumn[] { land.Columns["UUID"] };
return land;
}
@@ -1138,9 +1216,9 @@ namespace OpenSim.Data.SQLite
private static DataTable createLandAccessListTable()
{
DataTable landaccess = new DataTable("landaccesslist");
- createCol(landaccess, "LandUUID", typeof (String));
- createCol(landaccess, "AccessUUID", typeof (String));
- createCol(landaccess, "Flags", typeof (UInt32));
+ createCol(landaccess, "LandUUID", typeof(String));
+ createCol(landaccess, "AccessUUID", typeof(String));
+ createCol(landaccess, "Flags", typeof(UInt32));
return landaccess;
}
@@ -1149,41 +1227,41 @@ namespace OpenSim.Data.SQLite
{
DataTable regionsettings = new DataTable("regionsettings");
createCol(regionsettings, "regionUUID", typeof(String));
- createCol(regionsettings, "block_terraform", typeof (Int32));
- createCol(regionsettings, "block_fly", typeof (Int32));
- createCol(regionsettings, "allow_damage", typeof (Int32));
- createCol(regionsettings, "restrict_pushing", typeof (Int32));
- createCol(regionsettings, "allow_land_resell", typeof (Int32));
- createCol(regionsettings, "allow_land_join_divide", typeof (Int32));
- createCol(regionsettings, "block_show_in_search", typeof (Int32));
- createCol(regionsettings, "agent_limit", typeof (Int32));
- createCol(regionsettings, "object_bonus", typeof (Double));
- createCol(regionsettings, "maturity", typeof (Int32));
- createCol(regionsettings, "disable_scripts", typeof (Int32));
- createCol(regionsettings, "disable_collisions", typeof (Int32));
- createCol(regionsettings, "disable_physics", typeof (Int32));
+ createCol(regionsettings, "block_terraform", typeof(Int32));
+ createCol(regionsettings, "block_fly", typeof(Int32));
+ createCol(regionsettings, "allow_damage", typeof(Int32));
+ createCol(regionsettings, "restrict_pushing", typeof(Int32));
+ createCol(regionsettings, "allow_land_resell", typeof(Int32));
+ createCol(regionsettings, "allow_land_join_divide", typeof(Int32));
+ createCol(regionsettings, "block_show_in_search", typeof(Int32));
+ createCol(regionsettings, "agent_limit", typeof(Int32));
+ createCol(regionsettings, "object_bonus", typeof(Double));
+ createCol(regionsettings, "maturity", typeof(Int32));
+ createCol(regionsettings, "disable_scripts", typeof(Int32));
+ createCol(regionsettings, "disable_collisions", typeof(Int32));
+ createCol(regionsettings, "disable_physics", typeof(Int32));
createCol(regionsettings, "terrain_texture_1", typeof(String));
createCol(regionsettings, "terrain_texture_2", typeof(String));
createCol(regionsettings, "terrain_texture_3", typeof(String));
createCol(regionsettings, "terrain_texture_4", typeof(String));
- createCol(regionsettings, "elevation_1_nw", typeof (Double));
- createCol(regionsettings, "elevation_2_nw", typeof (Double));
- createCol(regionsettings, "elevation_1_ne", typeof (Double));
- createCol(regionsettings, "elevation_2_ne", typeof (Double));
- createCol(regionsettings, "elevation_1_se", typeof (Double));
- createCol(regionsettings, "elevation_2_se", typeof (Double));
- createCol(regionsettings, "elevation_1_sw", typeof (Double));
- createCol(regionsettings, "elevation_2_sw", typeof (Double));
- createCol(regionsettings, "water_height", typeof (Double));
- createCol(regionsettings, "terrain_raise_limit", typeof (Double));
- createCol(regionsettings, "terrain_lower_limit", typeof (Double));
- createCol(regionsettings, "use_estate_sun", typeof (Int32));
- createCol(regionsettings, "sandbox", typeof (Int32));
- createCol(regionsettings, "sunvectorx",typeof (Double));
- createCol(regionsettings, "sunvectory",typeof (Double));
- createCol(regionsettings, "sunvectorz",typeof (Double));
- createCol(regionsettings, "fixed_sun", typeof (Int32));
- createCol(regionsettings, "sun_position", typeof (Double));
+ createCol(regionsettings, "elevation_1_nw", typeof(Double));
+ createCol(regionsettings, "elevation_2_nw", typeof(Double));
+ createCol(regionsettings, "elevation_1_ne", typeof(Double));
+ createCol(regionsettings, "elevation_2_ne", typeof(Double));
+ createCol(regionsettings, "elevation_1_se", typeof(Double));
+ createCol(regionsettings, "elevation_2_se", typeof(Double));
+ createCol(regionsettings, "elevation_1_sw", typeof(Double));
+ createCol(regionsettings, "elevation_2_sw", typeof(Double));
+ createCol(regionsettings, "water_height", typeof(Double));
+ createCol(regionsettings, "terrain_raise_limit", typeof(Double));
+ createCol(regionsettings, "terrain_lower_limit", typeof(Double));
+ createCol(regionsettings, "use_estate_sun", typeof(Int32));
+ createCol(regionsettings, "sandbox", typeof(Int32));
+ createCol(regionsettings, "sunvectorx", typeof(Double));
+ createCol(regionsettings, "sunvectory", typeof(Double));
+ createCol(regionsettings, "sunvectorz", typeof(Double));
+ createCol(regionsettings, "fixed_sun", typeof(Int32));
+ createCol(regionsettings, "sun_position", typeof(Double));
createCol(regionsettings, "covenant", typeof(String));
createCol(regionsettings, "covenant_datetime", typeof(Int32));
createCol(regionsettings, "map_tile_ID", typeof(String));
@@ -1191,6 +1269,82 @@ namespace OpenSim.Data.SQLite
return regionsettings;
}
+ ///
+ /// create "regionwindlight" table
+ ///
+ /// RegionWindlight DataTable
+ private static DataTable createRegionWindlightTable()
+ {
+ DataTable regionwindlight = new DataTable("regionwindlight");
+ createCol(regionwindlight, "region_id", typeof(String));
+ createCol(regionwindlight, "water_color_r", typeof(Double));
+ createCol(regionwindlight, "water_color_g", typeof(Double));
+ createCol(regionwindlight, "water_color_b", typeof(Double));
+ createCol(regionwindlight, "water_color_i", typeof(Double));
+ createCol(regionwindlight, "water_fog_density_exponent", typeof(Double));
+ createCol(regionwindlight, "underwater_fog_modifier", typeof(Double));
+ createCol(regionwindlight, "reflection_wavelet_scale_1", typeof(Double));
+ createCol(regionwindlight, "reflection_wavelet_scale_2", typeof(Double));
+ createCol(regionwindlight, "reflection_wavelet_scale_3", typeof(Double));
+ createCol(regionwindlight, "fresnel_scale", typeof(Double));
+ createCol(regionwindlight, "fresnel_offset", typeof(Double));
+ createCol(regionwindlight, "refract_scale_above", typeof(Double));
+ createCol(regionwindlight, "refract_scale_below", typeof(Double));
+ createCol(regionwindlight, "blur_multiplier", typeof(Double));
+ createCol(regionwindlight, "big_wave_direction_x", typeof(Double));
+ createCol(regionwindlight, "big_wave_direction_y", typeof(Double));
+ createCol(regionwindlight, "little_wave_direction_x", typeof(Double));
+ createCol(regionwindlight, "little_wave_direction_y", typeof(Double));
+ createCol(regionwindlight, "normal_map_texture", typeof(String));
+ createCol(regionwindlight, "horizon_r", typeof(Double));
+ createCol(regionwindlight, "horizon_g", typeof(Double));
+ createCol(regionwindlight, "horizon_b", typeof(Double));
+ createCol(regionwindlight, "horizon_i", typeof(Double));
+ createCol(regionwindlight, "haze_horizon", typeof(Double));
+ createCol(regionwindlight, "blue_density_r", typeof(Double));
+ createCol(regionwindlight, "blue_density_g", typeof(Double));
+ createCol(regionwindlight, "blue_density_b", typeof(Double));
+ createCol(regionwindlight, "blue_density_i", typeof(Double));
+ createCol(regionwindlight, "haze_density", typeof(Double));
+ createCol(regionwindlight, "density_multiplier", typeof(Double));
+ createCol(regionwindlight, "distance_multiplier", typeof(Double));
+ createCol(regionwindlight, "max_altitude", typeof(Int32));
+ createCol(regionwindlight, "sun_moon_color_r", typeof(Double));
+ createCol(regionwindlight, "sun_moon_color_g", typeof(Double));
+ createCol(regionwindlight, "sun_moon_color_b", typeof(Double));
+ createCol(regionwindlight, "sun_moon_color_i", typeof(Double));
+ createCol(regionwindlight, "sun_moon_position", typeof(Double));
+ createCol(regionwindlight, "ambient_r", typeof(Double));
+ createCol(regionwindlight, "ambient_g", typeof(Double));
+ createCol(regionwindlight, "ambient_b", typeof(Double));
+ createCol(regionwindlight, "ambient_i", typeof(Double));
+ createCol(regionwindlight, "east_angle", typeof(Double));
+ createCol(regionwindlight, "sun_glow_focus", typeof(Double));
+ createCol(regionwindlight, "sun_glow_size", typeof(Double));
+ createCol(regionwindlight, "scene_gamma", typeof(Double));
+ createCol(regionwindlight, "star_brightness", typeof(Double));
+ createCol(regionwindlight, "cloud_color_r", typeof(Double));
+ createCol(regionwindlight, "cloud_color_g", typeof(Double));
+ createCol(regionwindlight, "cloud_color_b", typeof(Double));
+ createCol(regionwindlight, "cloud_color_i", typeof(Double));
+ createCol(regionwindlight, "cloud_x", typeof(Double));
+ createCol(regionwindlight, "cloud_y", typeof(Double));
+ createCol(regionwindlight, "cloud_density", typeof(Double));
+ createCol(regionwindlight, "cloud_coverage", typeof(Double));
+ createCol(regionwindlight, "cloud_scale", typeof(Double));
+ createCol(regionwindlight, "cloud_detail_x", typeof(Double));
+ createCol(regionwindlight, "cloud_detail_y", typeof(Double));
+ createCol(regionwindlight, "cloud_detail_density", typeof(Double));
+ createCol(regionwindlight, "cloud_scroll_x", typeof(Double));
+ createCol(regionwindlight, "cloud_scroll_x_lock", typeof(Int32));
+ createCol(regionwindlight, "cloud_scroll_y", typeof(Double));
+ createCol(regionwindlight, "cloud_scroll_y_lock", typeof(Int32));
+ createCol(regionwindlight, "draw_classic_clouds", typeof(Int32));
+
+ regionwindlight.PrimaryKey = new DataColumn[] { regionwindlight.Columns["region_id"] };
+ return regionwindlight;
+ }
+
/***********************************************************************
*
* Convert between ADO.NET <=> OpenSim Objects
@@ -1229,26 +1383,26 @@ namespace OpenSim.Data.SQLite
// back out. Not enough time to figure it out yet.
SceneObjectPart prim = new SceneObjectPart();
- prim.UUID = new UUID((String) row["UUID"]);
+ prim.UUID = new UUID((String)row["UUID"]);
// explicit conversion of integers is required, which sort
// of sucks. No idea if there is a shortcut here or not.
prim.CreationDate = Convert.ToInt32(row["CreationDate"]);
prim.Name = row["Name"] == DBNull.Value ? string.Empty : (string)row["Name"];
// various text fields
- prim.Text = (String) row["Text"];
+ prim.Text = (String)row["Text"];
prim.Color = Color.FromArgb(Convert.ToInt32(row["ColorA"]),
Convert.ToInt32(row["ColorR"]),
Convert.ToInt32(row["ColorG"]),
Convert.ToInt32(row["ColorB"]));
- prim.Description = (String) row["Description"];
- prim.SitName = (String) row["SitName"];
- prim.TouchName = (String) row["TouchName"];
+ prim.Description = (String)row["Description"];
+ prim.SitName = (String)row["SitName"];
+ prim.TouchName = (String)row["TouchName"];
// permissions
prim.ObjectFlags = Convert.ToUInt32(row["ObjectFlags"]);
- prim.CreatorIdentification = (String) row["CreatorID"];
- prim.OwnerID = new UUID((String) row["OwnerID"]);
- prim.GroupID = new UUID((String) row["GroupID"]);
- prim.LastOwnerID = new UUID((String) row["LastOwnerID"]);
+ prim.CreatorIdentification = (String)row["CreatorID"];
+ prim.OwnerID = new UUID((String)row["OwnerID"]);
+ prim.GroupID = new UUID((String)row["GroupID"]);
+ prim.LastOwnerID = new UUID((String)row["LastOwnerID"]);
prim.OwnerMask = Convert.ToUInt32(row["OwnerMask"]);
prim.NextOwnerMask = Convert.ToUInt32(row["NextOwnerMask"]);
prim.GroupMask = Convert.ToUInt32(row["GroupMask"]);
@@ -1360,7 +1514,7 @@ namespace OpenSim.Data.SQLite
if (!(row["MediaURL"] is System.DBNull))
{
- //m_log.DebugFormat("[SQLITE]: MediaUrl type [{0}]", row["MediaURL"].GetType());
+// m_log.DebugFormat("[SQLITE]: MediaUrl type [{0}]", row["MediaURL"].GetType());
prim.MediaUrl = (string)row["MediaURL"];
}
@@ -1376,28 +1530,28 @@ namespace OpenSim.Data.SQLite
{
TaskInventoryItem taskItem = new TaskInventoryItem();
- taskItem.ItemID = new UUID((String)row["itemID"]);
- taskItem.ParentPartID = new UUID((String)row["primID"]);
- taskItem.AssetID = new UUID((String)row["assetID"]);
- taskItem.ParentID = new UUID((String)row["parentFolderID"]);
+ taskItem.ItemID = new UUID((String)row["itemID"]);
+ taskItem.ParentPartID = new UUID((String)row["primID"]);
+ taskItem.AssetID = new UUID((String)row["assetID"]);
+ taskItem.ParentID = new UUID((String)row["parentFolderID"]);
- taskItem.InvType = Convert.ToInt32(row["invType"]);
- taskItem.Type = Convert.ToInt32(row["assetType"]);
+ taskItem.InvType = Convert.ToInt32(row["invType"]);
+ taskItem.Type = Convert.ToInt32(row["assetType"]);
- taskItem.Name = (String)row["name"];
- taskItem.Description = (String)row["description"];
- taskItem.CreationDate = Convert.ToUInt32(row["creationDate"]);
+ taskItem.Name = (String)row["name"];
+ taskItem.Description = (String)row["description"];
+ taskItem.CreationDate = Convert.ToUInt32(row["creationDate"]);
taskItem.CreatorIdentification = (String)row["creatorID"];
- taskItem.OwnerID = new UUID((String)row["ownerID"]);
- taskItem.LastOwnerID = new UUID((String)row["lastOwnerID"]);
- taskItem.GroupID = new UUID((String)row["groupID"]);
+ taskItem.OwnerID = new UUID((String)row["ownerID"]);
+ taskItem.LastOwnerID = new UUID((String)row["lastOwnerID"]);
+ taskItem.GroupID = new UUID((String)row["groupID"]);
taskItem.NextPermissions = Convert.ToUInt32(row["nextPermissions"]);
- taskItem.CurrentPermissions = Convert.ToUInt32(row["currentPermissions"]);
- taskItem.BasePermissions = Convert.ToUInt32(row["basePermissions"]);
- taskItem.EveryonePermissions = Convert.ToUInt32(row["everyonePermissions"]);
- taskItem.GroupPermissions = Convert.ToUInt32(row["groupPermissions"]);
- taskItem.Flags = Convert.ToUInt32(row["flags"]);
+ taskItem.CurrentPermissions = Convert.ToUInt32(row["currentPermissions"]);
+ taskItem.BasePermissions = Convert.ToUInt32(row["basePermissions"]);
+ taskItem.EveryonePermissions = Convert.ToUInt32(row["everyonePermissions"]);
+ taskItem.GroupPermissions = Convert.ToUInt32(row["groupPermissions"]);
+ taskItem.Flags = Convert.ToUInt32(row["flags"]);
return taskItem;
}
@@ -1411,35 +1565,35 @@ namespace OpenSim.Data.SQLite
{
LandData newData = new LandData();
- newData.GlobalID = new UUID((String) row["UUID"]);
+ newData.GlobalID = new UUID((String)row["UUID"]);
newData.LocalID = Convert.ToInt32(row["LocalLandID"]);
// Bitmap is a byte[512]
- newData.Bitmap = (Byte[]) row["Bitmap"];
+ newData.Bitmap = (Byte[])row["Bitmap"];
- newData.Name = (String) row["Name"];
- newData.Description = (String) row["Desc"];
- newData.OwnerID = (UUID)(String) row["OwnerUUID"];
- newData.IsGroupOwned = (Boolean) row["IsGroupOwned"];
+ newData.Name = (String)row["Name"];
+ newData.Description = (String)row["Desc"];
+ newData.OwnerID = (UUID)(String)row["OwnerUUID"];
+ newData.IsGroupOwned = (Boolean)row["IsGroupOwned"];
newData.Area = Convert.ToInt32(row["Area"]);
newData.AuctionID = Convert.ToUInt32(row["AuctionID"]); //Unemplemented
- newData.Category = (ParcelCategory) Convert.ToInt32(row["Category"]);
- //Enum OpenMetaverse.Parcel.ParcelCategory
+ newData.Category = (ParcelCategory)Convert.ToInt32(row["Category"]);
+ //Enum OpenMetaverse.Parcel.ParcelCategory
newData.ClaimDate = Convert.ToInt32(row["ClaimDate"]);
newData.ClaimPrice = Convert.ToInt32(row["ClaimPrice"]);
- newData.GroupID = new UUID((String) row["GroupUUID"]);
+ newData.GroupID = new UUID((String)row["GroupUUID"]);
newData.SalePrice = Convert.ToInt32(row["SalePrice"]);
- newData.Status = (ParcelStatus) Convert.ToInt32(row["LandStatus"]);
- //Enum. OpenMetaverse.Parcel.ParcelStatus
+ newData.Status = (ParcelStatus)Convert.ToInt32(row["LandStatus"]);
+ //Enum. OpenMetaverse.Parcel.ParcelStatus
newData.Flags = Convert.ToUInt32(row["LandFlags"]);
- newData.LandingType = (Byte) row["LandingType"];
- newData.MediaAutoScale = (Byte) row["MediaAutoScale"];
- newData.MediaID = new UUID((String) row["MediaTextureUUID"]);
- newData.MediaURL = (String) row["MediaURL"];
- newData.MusicURL = (String) row["MusicURL"];
+ newData.LandingType = (Byte)row["LandingType"];
+ newData.MediaAutoScale = (Byte)row["MediaAutoScale"];
+ newData.MediaID = new UUID((String)row["MediaTextureUUID"]);
+ newData.MediaURL = (String)row["MediaURL"];
+ newData.MusicURL = (String)row["MusicURL"];
newData.PassHours = Convert.ToSingle(row["PassHours"]);
newData.PassPrice = Convert.ToInt32(row["PassPrice"]);
- newData.SnapshotID = (UUID)(String) row["SnapshotUUID"];
+ newData.SnapshotID = (UUID)(String)row["SnapshotUUID"];
try
{
@@ -1471,7 +1625,7 @@ namespace OpenSim.Data.SQLite
{
RegionSettings newSettings = new RegionSettings();
- newSettings.RegionUUID = new UUID((string) row["regionUUID"]);
+ newSettings.RegionUUID = new UUID((string)row["regionUUID"]);
newSettings.BlockTerraform = Convert.ToBoolean(row["block_terraform"]);
newSettings.AllowDamage = Convert.ToBoolean(row["allow_damage"]);
newSettings.BlockFly = Convert.ToBoolean(row["block_fly"]);
@@ -1485,10 +1639,10 @@ namespace OpenSim.Data.SQLite
newSettings.DisableScripts = Convert.ToBoolean(row["disable_scripts"]);
newSettings.DisableCollisions = Convert.ToBoolean(row["disable_collisions"]);
newSettings.DisablePhysics = Convert.ToBoolean(row["disable_physics"]);
- newSettings.TerrainTexture1 = new UUID((String) row["terrain_texture_1"]);
- newSettings.TerrainTexture2 = new UUID((String) row["terrain_texture_2"]);
- newSettings.TerrainTexture3 = new UUID((String) row["terrain_texture_3"]);
- newSettings.TerrainTexture4 = new UUID((String) row["terrain_texture_4"]);
+ newSettings.TerrainTexture1 = new UUID((String)row["terrain_texture_1"]);
+ newSettings.TerrainTexture2 = new UUID((String)row["terrain_texture_2"]);
+ newSettings.TerrainTexture3 = new UUID((String)row["terrain_texture_3"]);
+ newSettings.TerrainTexture4 = new UUID((String)row["terrain_texture_4"]);
newSettings.Elevation1NW = Convert.ToDouble(row["elevation_1_nw"]);
newSettings.Elevation2NW = Convert.ToDouble(row["elevation_2_nw"]);
newSettings.Elevation1NE = Convert.ToDouble(row["elevation_1_ne"]);
@@ -1502,20 +1656,97 @@ namespace OpenSim.Data.SQLite
newSettings.TerrainLowerLimit = Convert.ToDouble(row["terrain_lower_limit"]);
newSettings.UseEstateSun = Convert.ToBoolean(row["use_estate_sun"]);
newSettings.Sandbox = Convert.ToBoolean(row["sandbox"]);
- newSettings.SunVector = new Vector3 (
+ newSettings.SunVector = new Vector3(
Convert.ToSingle(row["sunvectorx"]),
Convert.ToSingle(row["sunvectory"]),
Convert.ToSingle(row["sunvectorz"])
);
newSettings.FixedSun = Convert.ToBoolean(row["fixed_sun"]);
newSettings.SunPosition = Convert.ToDouble(row["sun_position"]);
- newSettings.Covenant = new UUID((String) row["covenant"]);
+ newSettings.Covenant = new UUID((String)row["covenant"]);
newSettings.CovenantChangedDateTime = Convert.ToInt32(row["covenant_datetime"]);
newSettings.TerrainImageID = new UUID((String)row["map_tile_ID"]);
return newSettings;
}
+ ///
+ /// Build a windlight entry from the persisted data.
+ ///
+ ///
+ /// RegionLightShareData
+ private RegionLightShareData buildRegionWindlight(DataRow row)
+ {
+ RegionLightShareData windlight = new RegionLightShareData();
+
+ windlight.regionID = new UUID((string)row["region_id"]);
+ windlight.waterColor.X = Convert.ToSingle(row["water_color_r"]);
+ windlight.waterColor.Y = Convert.ToSingle(row["water_color_g"]);
+ windlight.waterColor.Z = Convert.ToSingle(row["water_color_b"]);
+ //windlight.waterColor.W = Convert.ToSingle(row["water_color_i"]); //not implemented
+ windlight.waterFogDensityExponent = Convert.ToSingle(row["water_fog_density_exponent"]);
+ windlight.underwaterFogModifier = Convert.ToSingle(row["underwater_fog_modifier"]);
+ windlight.reflectionWaveletScale.X = Convert.ToSingle(row["reflection_wavelet_scale_1"]);
+ windlight.reflectionWaveletScale.Y = Convert.ToSingle(row["reflection_wavelet_scale_2"]);
+ windlight.reflectionWaveletScale.Z = Convert.ToSingle(row["reflection_wavelet_scale_3"]);
+ windlight.fresnelScale = Convert.ToSingle(row["fresnel_scale"]);
+ windlight.fresnelOffset = Convert.ToSingle(row["fresnel_offset"]);
+ windlight.refractScaleAbove = Convert.ToSingle(row["refract_scale_above"]);
+ windlight.refractScaleBelow = Convert.ToSingle(row["refract_scale_below"]);
+ windlight.blurMultiplier = Convert.ToSingle(row["blur_multiplier"]);
+ windlight.bigWaveDirection.X = Convert.ToSingle(row["big_wave_direction_x"]);
+ windlight.bigWaveDirection.Y = Convert.ToSingle(row["big_wave_direction_y"]);
+ windlight.littleWaveDirection.X = Convert.ToSingle(row["little_wave_direction_x"]);
+ windlight.littleWaveDirection.Y = Convert.ToSingle(row["little_wave_direction_y"]);
+ windlight.normalMapTexture = new UUID((string)row["normal_map_texture"]);
+ windlight.horizon.X = Convert.ToSingle(row["horizon_r"]);
+ windlight.horizon.Y = Convert.ToSingle(row["horizon_g"]);
+ windlight.horizon.Z = Convert.ToSingle(row["horizon_b"]);
+ windlight.horizon.W = Convert.ToSingle(row["horizon_i"]);
+ windlight.hazeHorizon = Convert.ToSingle(row["haze_horizon"]);
+ windlight.blueDensity.X = Convert.ToSingle(row["blue_density_r"]);
+ windlight.blueDensity.Y = Convert.ToSingle(row["blue_density_g"]);
+ windlight.blueDensity.Z = Convert.ToSingle(row["blue_density_b"]);
+ windlight.blueDensity.W = Convert.ToSingle(row["blue_density_i"]);
+ windlight.hazeDensity = Convert.ToSingle(row["haze_density"]);
+ windlight.densityMultiplier = Convert.ToSingle(row["density_multiplier"]);
+ windlight.distanceMultiplier = Convert.ToSingle(row["distance_multiplier"]);
+ windlight.maxAltitude = Convert.ToUInt16(row["max_altitude"]);
+ windlight.sunMoonColor.X = Convert.ToSingle(row["sun_moon_color_r"]);
+ windlight.sunMoonColor.Y = Convert.ToSingle(row["sun_moon_color_g"]);
+ windlight.sunMoonColor.Z = Convert.ToSingle(row["sun_moon_color_b"]);
+ windlight.sunMoonColor.W = Convert.ToSingle(row["sun_moon_color_i"]);
+ windlight.sunMoonPosition = Convert.ToSingle(row["sun_moon_position"]);
+ windlight.ambient.X = Convert.ToSingle(row["ambient_r"]);
+ windlight.ambient.Y = Convert.ToSingle(row["ambient_g"]);
+ windlight.ambient.Z = Convert.ToSingle(row["ambient_b"]);
+ windlight.ambient.W = Convert.ToSingle(row["ambient_i"]);
+ windlight.eastAngle = Convert.ToSingle(row["east_angle"]);
+ windlight.sunGlowFocus = Convert.ToSingle(row["sun_glow_focus"]);
+ windlight.sunGlowSize = Convert.ToSingle(row["sun_glow_size"]);
+ windlight.sceneGamma = Convert.ToSingle(row["scene_gamma"]);
+ windlight.starBrightness = Convert.ToSingle(row["star_brightness"]);
+ windlight.cloudColor.X = Convert.ToSingle(row["cloud_color_r"]);
+ windlight.cloudColor.Y = Convert.ToSingle(row["cloud_color_g"]);
+ windlight.cloudColor.Z = Convert.ToSingle(row["cloud_color_b"]);
+ windlight.cloudColor.W = Convert.ToSingle(row["cloud_color_i"]);
+ windlight.cloudXYDensity.X = Convert.ToSingle(row["cloud_x"]);
+ windlight.cloudXYDensity.Y = Convert.ToSingle(row["cloud_y"]);
+ windlight.cloudXYDensity.Z = Convert.ToSingle(row["cloud_density"]);
+ windlight.cloudCoverage = Convert.ToSingle(row["cloud_coverage"]);
+ windlight.cloudScale = Convert.ToSingle(row["cloud_scale"]);
+ windlight.cloudDetailXYDensity.X = Convert.ToSingle(row["cloud_detail_x"]);
+ windlight.cloudDetailXYDensity.Y = Convert.ToSingle(row["cloud_detail_y"]);
+ windlight.cloudDetailXYDensity.Z = Convert.ToSingle(row["cloud_detail_density"]);
+ windlight.cloudScrollX = Convert.ToSingle(row["cloud_scroll_x"]);
+ windlight.cloudScrollXLock = Convert.ToBoolean(row["cloud_scroll_x_lock"]);
+ windlight.cloudScrollY = Convert.ToSingle(row["cloud_scroll_y"]);
+ windlight.cloudScrollYLock = Convert.ToBoolean(row["cloud_scroll_y_lock"]);
+ windlight.drawClassicClouds = Convert.ToBoolean(row["draw_classic_clouds"]);
+
+ return windlight;
+ }
+
///
/// Build a land access entry from the persisted data.
///
@@ -1524,8 +1755,8 @@ namespace OpenSim.Data.SQLite
private static LandAccessEntry buildLandAccessData(DataRow row)
{
LandAccessEntry entry = new LandAccessEntry();
- entry.AgentID = new UUID((string) row["AccessUUID"]);
- entry.Flags = (AccessList) row["Flags"];
+ entry.AgentID = new UUID((string)row["AccessUUID"]);
+ entry.Flags = (AccessList)row["Flags"];
entry.Expires = 0;
return entry;
}
@@ -1537,7 +1768,7 @@ namespace OpenSim.Data.SQLite
///
private static Array serializeTerrain(double[,] val)
{
- MemoryStream str = new MemoryStream(((int)Constants.RegionSize * (int)Constants.RegionSize) *sizeof (double));
+ MemoryStream str = new MemoryStream(((int)Constants.RegionSize * (int)Constants.RegionSize) * sizeof(double));
BinaryWriter bw = new BinaryWriter(str);
// TODO: COMPATIBILITY - Add byte-order conversions
@@ -1548,21 +1779,21 @@ namespace OpenSim.Data.SQLite
return str.ToArray();
}
-// private void fillTerrainRow(DataRow row, UUID regionUUID, int rev, double[,] val)
-// {
-// row["RegionUUID"] = regionUUID;
-// row["Revision"] = rev;
+ // private void fillTerrainRow(DataRow row, UUID regionUUID, int rev, double[,] val)
+ // {
+ // row["RegionUUID"] = regionUUID;
+ // row["Revision"] = rev;
// MemoryStream str = new MemoryStream(((int)Constants.RegionSize * (int)Constants.RegionSize)*sizeof (double));
-// BinaryWriter bw = new BinaryWriter(str);
+ // BinaryWriter bw = new BinaryWriter(str);
-// // TODO: COMPATIBILITY - Add byte-order conversions
+ // // TODO: COMPATIBILITY - Add byte-order conversions
// for (int x = 0; x < (int)Constants.RegionSize; x++)
// for (int y = 0; y < (int)Constants.RegionSize; y++)
-// bw.Write(val[x, y]);
+ // bw.Write(val[x, y]);
-// row["Heightfield"] = str.ToArray();
-// }
+ // row["Heightfield"] = str.ToArray();
+ // }
///
///
@@ -1839,6 +2070,79 @@ namespace OpenSim.Data.SQLite
row["map_tile_ID"] = settings.TerrainImageID.ToString();
}
+ ///
+ ///
+ ///
+ ///
+ ///
+ private static void fillRegionWindlightRow(DataRow row, RegionLightShareData windlight)
+ {
+ row["region_id"] = windlight.regionID.ToString();
+ row["water_color_r"] = windlight.waterColor.X;
+ row["water_color_g"] = windlight.waterColor.Y;
+ row["water_color_b"] = windlight.waterColor.Z;
+ row["water_color_i"] = 1; //windlight.waterColor.W; //not implemented
+ row["water_fog_density_exponent"] = windlight.waterFogDensityExponent;
+ row["underwater_fog_modifier"] = windlight.underwaterFogModifier;
+ row["reflection_wavelet_scale_1"] = windlight.reflectionWaveletScale.X;
+ row["reflection_wavelet_scale_2"] = windlight.reflectionWaveletScale.Y;
+ row["reflection_wavelet_scale_3"] = windlight.reflectionWaveletScale.Z;
+ row["fresnel_scale"] = windlight.fresnelScale;
+ row["fresnel_offset"] = windlight.fresnelOffset;
+ row["refract_scale_above"] = windlight.refractScaleAbove;
+ row["refract_scale_below"] = windlight.refractScaleBelow;
+ row["blur_multiplier"] = windlight.blurMultiplier;
+ row["big_wave_direction_x"] = windlight.bigWaveDirection.X;
+ row["big_wave_direction_y"] = windlight.bigWaveDirection.Y;
+ row["little_wave_direction_x"] = windlight.littleWaveDirection.X;
+ row["little_wave_direction_y"] = windlight.littleWaveDirection.Y;
+ row["normal_map_texture"] = windlight.normalMapTexture.ToString();
+ row["horizon_r"] = windlight.horizon.X;
+ row["horizon_g"] = windlight.horizon.Y;
+ row["horizon_b"] = windlight.horizon.Z;
+ row["horizon_i"] = windlight.horizon.W;
+ row["haze_horizon"] = windlight.hazeHorizon;
+ row["blue_density_r"] = windlight.blueDensity.X;
+ row["blue_density_g"] = windlight.blueDensity.Y;
+ row["blue_density_b"] = windlight.blueDensity.Z;
+ row["blue_density_i"] = windlight.blueDensity.W;
+ row["haze_density"] = windlight.hazeDensity;
+ row["density_multiplier"] = windlight.densityMultiplier;
+ row["distance_multiplier"] = windlight.distanceMultiplier;
+ row["max_altitude"] = windlight.maxAltitude;
+ row["sun_moon_color_r"] = windlight.sunMoonColor.X;
+ row["sun_moon_color_g"] = windlight.sunMoonColor.Y;
+ row["sun_moon_color_b"] = windlight.sunMoonColor.Z;
+ row["sun_moon_color_i"] = windlight.sunMoonColor.W;
+ row["sun_moon_position"] = windlight.sunMoonPosition;
+ row["ambient_r"] = windlight.ambient.X;
+ row["ambient_g"] = windlight.ambient.Y;
+ row["ambient_b"] = windlight.ambient.Z;
+ row["ambient_i"] = windlight.ambient.W;
+ row["east_angle"] = windlight.eastAngle;
+ row["sun_glow_focus"] = windlight.sunGlowFocus;
+ row["sun_glow_size"] = windlight.sunGlowSize;
+ row["scene_gamma"] = windlight.sceneGamma;
+ row["star_brightness"] = windlight.starBrightness;
+ row["cloud_color_r"] = windlight.cloudColor.X;
+ row["cloud_color_g"] = windlight.cloudColor.Y;
+ row["cloud_color_b"] = windlight.cloudColor.Z;
+ row["cloud_color_i"] = windlight.cloudColor.W;
+ row["cloud_x"] = windlight.cloudXYDensity.X;
+ row["cloud_y"] = windlight.cloudXYDensity.Y;
+ row["cloud_density"] = windlight.cloudXYDensity.Z;
+ row["cloud_coverage"] = windlight.cloudCoverage;
+ row["cloud_scale"] = windlight.cloudScale;
+ row["cloud_detail_x"] = windlight.cloudDetailXYDensity.X;
+ row["cloud_detail_y"] = windlight.cloudDetailXYDensity.Y;
+ row["cloud_detail_density"] = windlight.cloudDetailXYDensity.Z;
+ row["cloud_scroll_x"] = windlight.cloudScrollX;
+ row["cloud_scroll_x_lock"] = windlight.cloudScrollXLock;
+ row["cloud_scroll_y"] = windlight.cloudScrollY;
+ row["cloud_scroll_y_lock"] = windlight.cloudScrollYLock;
+ row["draw_classic_clouds"] = windlight.drawClassicClouds;
+ }
+
///
///
///
@@ -1878,7 +2182,7 @@ namespace OpenSim.Data.SQLite
byte[] textureEntry = (byte[])row["Texture"];
s.TextureEntry = textureEntry;
- s.ExtraParams = (byte[]) row["ExtraParams"];
+ s.ExtraParams = (byte[])row["ExtraParams"];
if (!(row["Media"] is System.DBNull))
s.Media = PrimitiveBaseShape.MediaList.FromXml((string)row["Media"]);
@@ -1986,10 +2290,10 @@ namespace OpenSim.Data.SQLite
// repalce with current inventory details
foreach (TaskInventoryItem newItem in items)
{
-// m_log.InfoFormat(
-// "[DATASTORE]: ",
-// "Adding item {0}, {1} to prim ID {2}",
-// newItem.Name, newItem.ItemID, newItem.ParentPartID);
+ // m_log.InfoFormat(
+ // "[DATASTORE]: ",
+ // "Adding item {0}, {1} to prim ID {2}",
+ // newItem.Name, newItem.ItemID, newItem.ParentPartID);
DataRow newItemRow = dbItems.NewRow();
fillItemRow(newItemRow, newItem);
@@ -2040,7 +2344,7 @@ namespace OpenSim.Data.SQLite
sql += ") values (:";
sql += String.Join(", :", cols);
sql += ")";
- //m_log.DebugFormat("[SQLITE]: Created insert command {0}", sql);
+// m_log.DebugFormat("[SQLITE]: Created insert command {0}", sql);
SqliteCommand cmd = new SqliteCommand(sql);
// this provides the binding for all our parameters, so
@@ -2192,7 +2496,7 @@ namespace OpenSim.Data.SQLite
da.UpdateCommand.Connection = conn;
SqliteCommand delete = new SqliteCommand("delete from prims where UUID = :UUID");
- delete.Parameters.Add(createSqliteParameter("UUID", typeof (String)));
+ delete.Parameters.Add(createSqliteParameter("UUID", typeof(String)));
delete.Connection = conn;
da.DeleteCommand = delete;
}
@@ -2211,7 +2515,7 @@ namespace OpenSim.Data.SQLite
da.UpdateCommand.Connection = conn;
SqliteCommand delete = new SqliteCommand("delete from primitems where itemID = :itemID");
- delete.Parameters.Add(createSqliteParameter("itemID", typeof (String)));
+ delete.Parameters.Add(createSqliteParameter("itemID", typeof(String)));
delete.Connection = conn;
da.DeleteCommand = delete;
}
@@ -2274,6 +2578,19 @@ namespace OpenSim.Data.SQLite
da.UpdateCommand.Connection = conn;
}
+ ///
+ ///
+ ///
+ ///
+ ///
+ private void setupRegionWindlightCommands(SqliteDataAdapter da, SqliteConnection conn)
+ {
+ da.InsertCommand = createInsertCommand("regionwindlight", ds.Tables["regionwindlight"]);
+ da.InsertCommand.Connection = conn;
+ da.UpdateCommand = createUpdateCommand("regionwindlight", "region_id=:region_id", ds.Tables["regionwindlight"]);
+ da.UpdateCommand.Connection = conn;
+ }
+
///
///
///
@@ -2288,7 +2605,7 @@ namespace OpenSim.Data.SQLite
da.UpdateCommand.Connection = conn;
SqliteCommand delete = new SqliteCommand("delete from primshapes where UUID = :UUID");
- delete.Parameters.Add(createSqliteParameter("UUID", typeof (String)));
+ delete.Parameters.Add(createSqliteParameter("UUID", typeof(String)));
delete.Connection = conn;
da.DeleteCommand = delete;
}
@@ -2306,27 +2623,27 @@ namespace OpenSim.Data.SQLite
///
private static DbType dbtypeFromType(Type type)
{
- if (type == typeof (String))
+ if (type == typeof(String))
{
return DbType.String;
}
- else if (type == typeof (Int32))
+ else if (type == typeof(Int32))
{
return DbType.Int32;
}
- else if (type == typeof (Double))
+ else if (type == typeof(Double))
{
return DbType.Double;
}
- else if (type == typeof (Byte))
+ else if (type == typeof(Byte))
{
return DbType.Byte;
}
- else if (type == typeof (Double))
+ else if (type == typeof(Double))
{
return DbType.Double;
}
- else if (type == typeof (Byte[]))
+ else if (type == typeof(Byte[]))
{
return DbType.Binary;
}
@@ -2338,32 +2655,32 @@ namespace OpenSim.Data.SQLite
static void PrintDataSet(DataSet ds)
{
- // Print out any name and extended properties.
- Console.WriteLine("DataSet is named: {0}", ds.DataSetName);
- foreach (System.Collections.DictionaryEntry de in ds.ExtendedProperties)
- {
- Console.WriteLine("Key = {0}, Value = {1}", de.Key, de.Value);
- }
- Console.WriteLine();
- foreach (DataTable dt in ds.Tables)
- {
- Console.WriteLine("=> {0} Table:", dt.TableName);
- // Print out the column names.
- for (int curCol = 0; curCol < dt.Columns.Count; curCol++)
+ // Print out any name and extended properties.
+ Console.WriteLine("DataSet is named: {0}", ds.DataSetName);
+ foreach (System.Collections.DictionaryEntry de in ds.ExtendedProperties)
{
- Console.Write(dt.Columns[curCol].ColumnName + "\t");
+ Console.WriteLine("Key = {0}, Value = {1}", de.Key, de.Value);
}
- Console.WriteLine("\n----------------------------------");
- // Print the DataTable.
- for (int curRow = 0; curRow < dt.Rows.Count; curRow++)
+ Console.WriteLine();
+ foreach (DataTable dt in ds.Tables)
{
- for (int curCol = 0; curCol < dt.Columns.Count; curCol++)
- {
- Console.Write(dt.Rows[curRow][curCol].ToString() + "\t");
- }
- Console.WriteLine();
+ Console.WriteLine("=> {0} Table:", dt.TableName);
+ // Print out the column names.
+ for (int curCol = 0; curCol < dt.Columns.Count; curCol++)
+ {
+ Console.Write(dt.Columns[curCol].ColumnName + "\t");
+ }
+ Console.WriteLine("\n----------------------------------");
+ // Print the DataTable.
+ for (int curRow = 0; curRow < dt.Rows.Count; curRow++)
+ {
+ for (int curCol = 0; curCol < dt.Columns.Count; curCol++)
+ {
+ Console.Write(dt.Rows[curRow][curCol].ToString() + "\t");
+ }
+ Console.WriteLine();
+ }
}
- }
}
}
diff --git a/OpenSim/Framework/Serialization/External/ExternalRepresentationUtils.cs b/OpenSim/Framework/Serialization/External/ExternalRepresentationUtils.cs
index a392af66aa..c56f21367f 100644
--- a/OpenSim/Framework/Serialization/External/ExternalRepresentationUtils.cs
+++ b/OpenSim/Framework/Serialization/External/ExternalRepresentationUtils.cs
@@ -49,15 +49,16 @@ namespace OpenSim.Framework.Serialization.External
///
/// /param>
///
- public static void ExecuteReadProcessors(
+ /// true on successful, false if there were any processing failures
+ public static bool ExecuteReadProcessors(
NodeType nodeToFill, Dictionary> processors, XmlTextReader xtr)
{
- ExecuteReadProcessors(
+ return ExecuteReadProcessors(
nodeToFill,
processors,
xtr,
(o, name, e)
- => m_log.ErrorFormat(
+ => m_log.DebugFormat(
"[ExternalRepresentationUtils]: Exception while parsing element {0}, continuing. Exception {1}{2}",
name, e.Message, e.StackTrace));
}
@@ -71,12 +72,15 @@ namespace OpenSim.Framework.Serialization.External
///
/// Action to take if there is a parsing problem. This will usually just be to log the exception
///
- public static void ExecuteReadProcessors(
+ /// true on successful, false if there were any processing failures
+ public static bool ExecuteReadProcessors(
NodeType nodeToFill,
Dictionary> processors,
XmlTextReader xtr,
Action parseExceptionAction)
{
+ bool errors = false;
+
string nodeName = string.Empty;
while (xtr.NodeType != XmlNodeType.EndElement)
{
@@ -95,6 +99,7 @@ namespace OpenSim.Framework.Serialization.External
}
catch (Exception e)
{
+ errors = true;
parseExceptionAction(nodeToFill, nodeName, e);
if (xtr.NodeType == XmlNodeType.EndElement)
@@ -107,6 +112,8 @@ namespace OpenSim.Framework.Serialization.External
xtr.ReadOuterXml(); // ignore
}
}
+
+ return errors;
}
///
@@ -140,6 +147,7 @@ namespace OpenSim.Framework.Serialization.External
UUID.TryParse(node.InnerText, out uuid);
creator = userService.GetUserAccount(scopeID, uuid);
}
+
if (node.Name == "CreatorData" && node.InnerText != null && node.InnerText != string.Empty)
hasCreatorData = true;
@@ -163,7 +171,6 @@ namespace OpenSim.Framework.Serialization.External
doc.Save(wr);
return wr.ToString();
}
-
}
}
-}
+}
\ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
index 8d503bd7e6..c7f4c20d67 100644
--- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
@@ -111,6 +111,15 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
#region IAvatarFactoryModule
+ ///
+ ///
+ ///
+ ///
+ public void SetAppearance(IScenePresence sp, AvatarAppearance appearance)
+ {
+ SetAppearance(sp, appearance.Texture, appearance.VisualParams);
+ }
+
///
/// Set appearance data (texture asset IDs and slider settings)
///
@@ -156,14 +165,23 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
changed = sp.Appearance.SetTextureEntries(textureEntry) || changed;
// WriteBakedTexturesReport(sp, m_log.DebugFormat);
- if (!ValidateBakedTextureCache(sp))
+
+ // If bake textures are missing and this is not an NPC, request a rebake from client
+ if (!ValidateBakedTextureCache(sp) && (((ScenePresence)sp).PresenceType != PresenceType.Npc))
RequestRebake(sp, true);
// This appears to be set only in the final stage of the appearance
// update transaction. In theory, we should be able to do an immediate
// appearance send and save here.
}
-
+
+ // NPC should send to clients immediately and skip saving appearance
+ if (((ScenePresence)sp).PresenceType == PresenceType.Npc)
+ {
+ SendAppearance((ScenePresence)sp);
+ return;
+ }
+
// save only if there were changes, send no matter what (doesn't hurt to send twice)
if (changed)
QueueAppearanceSave(sp.ControllingClient.AgentId);
@@ -174,6 +192,15 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
// m_log.WarnFormat("[AVFACTORY]: complete SetAppearance for {0}:\n{1}",client.AgentId,sp.Appearance.ToString());
}
+ private void SendAppearance(ScenePresence sp)
+ {
+ // Send the appearance to everyone in the scene
+ sp.SendAppearanceToAllOtherAgents();
+
+ // Send animations back to the avatar as well
+ sp.Animator.SendAnimPack();
+ }
+
public bool SendAppearance(UUID agentId)
{
// m_log.DebugFormat("[AVFACTORY]: Sending appearance for {0}", agentId);
@@ -185,12 +212,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
return false;
}
- // Send the appearance to everyone in the scene
- sp.SendAppearanceToAllOtherAgents();
-
- // Send animations back to the avatar as well
- sp.Animator.SendAnimPack();
-
+ SendAppearance(sp);
return true;
}
@@ -626,4 +648,4 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
outputAction("{0} baked appearance texture is {1}", sp.Name, bakedTextureValid ? "OK" : "corrupt");
}
}
-}
\ No newline at end of file
+}
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
index 5e7d37af37..ba38488c43 100644
--- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
+++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
@@ -707,7 +707,12 @@ namespace OpenSim.Region.CoreModules.World.Permissions
// Object owners should be able to edit their own content
if (currentUser == objectOwner)
{
- permission = true;
+ // there is no way that later code can change this back to false
+ // so just return true immediately and short circuit the more
+ // expensive group checks
+ return true;
+
+ //permission = true;
}
else if (group.IsAttachment)
{
diff --git a/OpenSim/Region/Framework/Interfaces/IAvatarFactoryModule.cs b/OpenSim/Region/Framework/Interfaces/IAvatarFactoryModule.cs
index 39a760cbf4..34aca33349 100644
--- a/OpenSim/Region/Framework/Interfaces/IAvatarFactoryModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IAvatarFactoryModule.cs
@@ -35,6 +35,7 @@ namespace OpenSim.Region.Framework.Interfaces
public interface IAvatarFactoryModule
{
+ void SetAppearance(IScenePresence sp, AvatarAppearance appearance);
void SetAppearance(IScenePresence sp, Primitive.TextureEntry textureEntry, byte[] visualParams);
///
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index ec5cf324f0..bbdf35d8c8 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -3408,9 +3408,9 @@ namespace OpenSim.Region.Framework.Scenes
// Don't disable this log message - it's too helpful
m_log.DebugFormat(
- "[SCENE]: Region {0} told of incoming {1} agent {2} {3} {4} (circuit code {5}, teleportflags {6}, position {7})",
- RegionInfo.RegionName, (agent.child ? "child" : "root"), agent.firstname, agent.lastname,
- agent.AgentID, agent.circuitcode, teleportFlags, agent.startpos);
+ "[SCENE]: Region {0} told of incoming {1} agent {2} {3} {4} (circuit code {5}, IP {6}, viewer {7}, teleportflags {8}, position {9})",
+ RegionInfo.RegionName, (agent.child ? "child" : "root"),agent.firstname, agent.lastname,
+ agent.AgentID, agent.circuitcode, agent.IPAddress, agent.Viewer, teleportFlags, agent.startpos);
if (LoginsDisabled)
{
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index c7c90dac3e..13854c7924 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -295,13 +295,10 @@ namespace OpenSim.Region.Framework.Scenes
///
public PhysicsActor PhysicsActor { get; private set; }
- private byte m_movementflag;
-
- public byte MovementFlag
- {
- set { m_movementflag = value; }
- get { return m_movementflag; }
- }
+ ///
+ /// Record user movement inputs.
+ ///
+ public byte MovementFlag { get; private set; }
private bool m_updateflag;
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
index ba33122df6..4b80e372ad 100644
--- a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
+++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
@@ -1486,7 +1486,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
m_SOPXmlProcessors,
reader,
(o, nodeName, e)
- => m_log.ErrorFormat(
+ => m_log.DebugFormat(
"[SceneObjectSerializer]: Exception while parsing {0} in object {1} {2}: {3}{4}",
((SceneObjectPart)o).Name, ((SceneObjectPart)o).UUID, nodeName, e.Message, e.StackTrace));
@@ -1539,14 +1539,18 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
reader.ReadStartElement(name, String.Empty); // Shape
- ExternalRepresentationUtils.ExecuteReadProcessors(
+ errors = ExternalRepresentationUtils.ExecuteReadProcessors(
shape,
m_ShapeXmlProcessors,
reader,
(o, nodeName, e)
- => m_log.ErrorFormat(
- "[SceneObjectSerializer]: Exception while parsing Shape property {0}: {1}{2}",
- nodeName, e.Message, e.StackTrace));
+ =>
+ {
+ m_log.DebugFormat(
+ "[SceneObjectSerializer]: Exception while parsing Shape property {0}: {1}{2}",
+ nodeName, e.Message, e.StackTrace);
+ }
+ );
reader.ReadEndElement(); // Shape
diff --git a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs b/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
index 1b675a6118..8af3652b20 100644
--- a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
@@ -63,9 +63,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
// Capability string prefixes
- private static readonly string m_parcelVoiceInfoRequestPath = "0007/";
- private static readonly string m_provisionVoiceAccountRequestPath = "0008/";
- private static readonly string m_chatSessionRequestPath = "0009/";
+ private static readonly string m_parcelVoiceInfoRequestPath = "0207/";
+ private static readonly string m_provisionVoiceAccountRequestPath = "0208/";
+ private static readonly string m_chatSessionRequestPath = "0209/";
// Control info
private static bool m_Enabled = false;
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/SimianGroupsServicesConnectorModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/SimianGroupsServicesConnectorModule.cs
index 42008dae43..130513d4c0 100644
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/SimianGroupsServicesConnectorModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/SimianGroupsServicesConnectorModule.cs
@@ -30,6 +30,7 @@ using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Reflection;
+using System.Threading;
using Nwc.XmlRpc;
@@ -167,6 +168,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
private bool m_debugEnabled = false;
+ private Dictionary m_pendingRequests = new Dictionary();
+
private ExpiringCache m_memoryCache;
private int m_cacheTimeout = 30;
@@ -1348,6 +1351,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
// Immediately forward the request if the cache is disabled.
if (m_cacheTimeout == 0)
{
+ m_log.WarnFormat("[SIMIAN GROUPS CONNECTOR]: cache is disabled");
return WebUtil.PostToService(m_groupsServerURI, requestArgs);
}
@@ -1355,6 +1359,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
if (requestArgs["RequestMethod"] == "RemoveGeneric"
|| requestArgs["RequestMethod"] == "AddGeneric")
{
+ m_log.WarnFormat("[SIMIAN GROUPS CONNECTOR]: clearing generics cache");
+
// Any and all updates cause the cache to clear
m_memoryCache.Clear();
@@ -1366,18 +1372,67 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
// Create the cache key for the request and see if we have it cached
string CacheKey = WebUtil.BuildQueryString(requestArgs);
- OSDMap response = null;
- if (!m_memoryCache.TryGetValue(CacheKey, out response))
- {
- // if it wasn't in the cache, pass the request to the Simian Grid Services
- response = WebUtil.PostToService(m_groupsServerURI, requestArgs);
- // and cache the response
- m_memoryCache.AddOrUpdate(CacheKey, response, TimeSpan.FromSeconds(m_cacheTimeout));
+ // This code uses a leader/follower pattern. On a cache miss, the request is added
+ // to a queue; the first thread to add it to the queue completes the request while
+ // follow on threads busy wait for the results, this situation seems to happen
+ // often when checking permissions
+ while (true)
+ {
+ OSDMap response = null;
+ bool firstRequest = false;
+
+ lock (m_memoryCache)
+ {
+ if (m_memoryCache.TryGetValue(CacheKey, out response))
+ return response;
+
+ if (! m_pendingRequests.ContainsKey(CacheKey))
+ {
+ m_pendingRequests.Add(CacheKey,true);
+ firstRequest = true;
+ }
+ }
+
+ if (firstRequest)
+ {
+ // if it wasn't in the cache, pass the request to the Simian Grid Services
+ try
+ {
+ response = WebUtil.PostToService(m_groupsServerURI, requestArgs);
+ }
+ catch (Exception e)
+ {
+ m_log.InfoFormat("[SIMIAN GROUPS CONNECTOR] request failed {0}",CacheKey);
+ }
+
+ // and cache the response
+ lock (m_memoryCache)
+ {
+ m_memoryCache.AddOrUpdate(CacheKey, response, TimeSpan.FromSeconds(m_cacheTimeout));
+ m_pendingRequests.Remove(CacheKey);
+ }
+
+ return response;
+ }
+
+ Thread.Sleep(50); // waiting for a web request to complete, 50msecs is reasonable
}
- // return cached response
- return response;
+ // if (!m_memoryCache.TryGetValue(CacheKey, out response))
+ // {
+ // m_log.WarnFormat("[SIMIAN GROUPS CONNECTOR]: query not in the cache");
+ // Util.PrintCallStack();
+
+ // // if it wasn't in the cache, pass the request to the Simian Grid Services
+ // response = WebUtil.PostToService(m_groupsServerURI, requestArgs);
+
+ // // and cache the response
+ // m_memoryCache.AddOrUpdate(CacheKey, response, TimeSpan.FromSeconds(m_cacheTimeout));
+ // }
+
+ // // return cached response
+ // return response;
}
#endregion
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
index 680364479b..d395206b4c 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
@@ -96,15 +96,15 @@ namespace OpenSim.Region.OptionalModules.World.NPC
if (!m_avatars.ContainsKey(agentId))
return false;
+ // Delete existing sp attachments
scene.AttachmentsModule.DeleteAttachmentsFromScene(sp, false);
- AvatarAppearance npcAppearance = new AvatarAppearance(appearance, true);
- sp.Appearance = npcAppearance;
+ // Set new sp appearance. Also sends to clients.
+ scene.RequestModuleInterface().SetAppearance(sp, new AvatarAppearance(appearance, true));
+
+ // Rez needed sp attachments
scene.AttachmentsModule.RezAttachments(sp);
-
- IAvatarFactoryModule module = scene.RequestModuleInterface();
- module.SendAppearance(sp.UUID);
-
+
return true;
}
diff --git a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
index 7c1c046522..6d1f41da05 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
@@ -156,6 +156,22 @@ namespace OpenSim.Region.Physics.OdePlugin
internal UUID m_uuid { get; private set; }
internal bool bad = false;
+ ///
+ /// ODE Avatar.
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// Only used right now to return information to LSL. Not actually used to set mass in ODE!
+ ///
+ ///
+ ///
public OdeCharacter(
String avName, OdeScene parent_scene, Vector3 pos, Vector3 size, float pid_d, float pid_p,
float capsule_radius, float tensor, float density,
@@ -786,6 +802,10 @@ namespace OpenSim.Region.Physics.OdePlugin
Vector3 vec = Vector3.Zero;
d.Vector3 vel = d.BodyGetLinearVel(Body);
+// m_log.DebugFormat(
+// "[ODE CHARACTER]: Current velocity in Move() is <{0},{1},{2}>, target {3} for {4}",
+// vel.X, vel.Y, vel.Z, _target_velocity, Name);
+
float movementdivisor = 1f;
if (!m_alwaysRun)
@@ -884,18 +904,20 @@ namespace OpenSim.Region.Physics.OdePlugin
if (flying)
{
+ // This also acts as anti-gravity so that we hover when flying rather than fall.
vec.Z = (_target_velocity.Z - vel.Z) * (PID_D);
}
}
if (flying)
{
+ // Anti-gravity so that we hover when flying rather than fall.
vec.Z += ((-1 * _parent_scene.gravityz) * m_mass);
//Added for auto fly height. Kitto Flora
//d.Vector3 pos = d.BodyGetPosition(Body);
float target_altitude = _parent_scene.GetTerrainHeightAtXY(_position.X, _position.Y) + MinimumGroundFlightOffset;
-
+
if (_position.Z < target_altitude)
{
vec.Z += (target_altitude - _position.Z) * PID_P * 5.0f;
@@ -921,6 +943,25 @@ namespace OpenSim.Region.Physics.OdePlugin
return;
}
+
+ d.Vector3 newVel = d.BodyGetLinearVel(Body);
+ if (newVel.X >= 256 || newVel.X <= 256 || newVel.Y >= 256 || newVel.Y <= 256 || newVel.Z >= 256 || newVel.Z <= 256)
+ {
+// m_log.DebugFormat(
+// "[ODE CHARACTER]: Limiting falling velocity from {0} to {1} for {2}", newVel.Z, -9.8, Name);
+
+ newVel.X = Util.Clamp(newVel.X, -255f, 255f);
+ newVel.Y = Util.Clamp(newVel.Y, -255f, 255f);
+
+ if (!flying)
+ newVel.Z
+ = Util.Clamp(
+ newVel.Z, -_parent_scene.AvatarTerminalVelocity, _parent_scene.AvatarTerminalVelocity);
+ else
+ newVel.Z = Util.Clamp(newVel.Z, -255f, 255f);
+
+ d.BodySetLinearVel(Body, newVel.X, newVel.Y, newVel.Z);
+ }
}
///
diff --git a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs
index 4530c09464..598530c50f 100644
--- a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs
+++ b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs
@@ -144,6 +144,8 @@ namespace OpenSim.Region.Physics.OdePlugin
public float gravityy = 0f;
public float gravityz = -9.8f;
+ public float AvatarTerminalVelocity { get; set; }
+
private float contactsurfacelayer = 0.001f;
private int worldHashspaceLow = -4;
@@ -459,6 +461,15 @@ namespace OpenSim.Region.Physics.OdePlugin
gravityy = physicsconfig.GetFloat("world_gravityy", 0f);
gravityz = physicsconfig.GetFloat("world_gravityz", -9.8f);
+ float avatarTerminalVelocity = physicsconfig.GetFloat("avatar_terminal_velocity", 54f);
+ AvatarTerminalVelocity = Util.Clamp(avatarTerminalVelocity, 0, 255f);
+ if (AvatarTerminalVelocity != avatarTerminalVelocity)
+ {
+ m_log.WarnFormat(
+ "[ODE SCENE]: avatar_terminal_velocity of {0} is invalid. Clamping to {1}",
+ avatarTerminalVelocity, AvatarTerminalVelocity);
+ }
+
worldHashspaceLow = physicsconfig.GetInt("world_hashspace_size_low", -4);
worldHashspaceHigh = physicsconfig.GetInt("world_hashspace_size_high", 128);
diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example
index d45f72bce4..a820ddf93f 100755
--- a/bin/OpenSim.ini.example
+++ b/bin/OpenSim.ini.example
@@ -484,7 +484,6 @@
;; 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 = false
@@ -573,10 +572,15 @@
; DeleteScriptsOnStartup = true
;; 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
+ ;; AppDomain.
+ ;;
+ ;; Setting this to false will load all script assemblies into the
+ ;; current AppDomain, which will significantly improve script loading times.
+ ;; It will also reduce initial per-script memory overhead.
+ ;;
+ ;; However, setting this to false will also prevent script DLLs from being unloaded from memory if the script is deleted.
+ ;; This may cause an OutOfMemory problem over time when avatars with scripted attachments move in and out of the region.
+ ;; Some Windows users have also reported script loading problems when AppDomainLoading = false
; AppDomainLoading = true
;# {DefaultCompileLanguage} {Enabled:true} {Default script language?} {lsl vb cs} lsl
diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini
index 07e7533b1f..8671e31a3d 100644
--- a/bin/OpenSimDefaults.ini
+++ b/bin/OpenSimDefaults.ini
@@ -655,6 +655,11 @@
world_gravityy = 0
world_gravityz = -9.8
+ ; Terminal velocity of a falling avatar
+ ; This is the same http://en.wikipedia.org/wiki/Terminal_velocity#Examples
+ ; Max value is 255, min value is 0
+ avatar_terminal_velocity = 54
+
; World Step size. (warning these are dangerous. Changing these will probably cause your scene to explode dramatically)
; reference: fps = (0.089/ODE_STEPSIZE) * 1000;
world_stepsize = 0.0178
@@ -1065,7 +1070,6 @@
[LightShare]
; 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 = false