diff --git a/OpenSim/Data/NHibernate/LLQuaternionUserType.cs b/OpenSim/Data/NHibernate/LLQuaternionUserType.cs
new file mode 100644
index 0000000000..c4f31366af
--- /dev/null
+++ b/OpenSim/Data/NHibernate/LLQuaternionUserType.cs
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSim Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Data;
+using libsecondlife;
+using NHibernate;
+using NHibernate.SqlTypes;
+using NHibernate.UserTypes;
+
+namespace OpenSim.Data.NHibernate
+{
+ [Serializable]
+ public class LLQuaternionUserType: IUserType
+ {
+ public object Assemble(object cached, object owner)
+ {
+ return cached;
+ }
+
+ bool IUserType.Equals(object quat1, object quat2)
+ {
+ return quat1.Equals(quat2);
+ }
+
+ public object DeepCopy(object quat)
+ {
+ // silly libsecondlife having no copy constructor
+ LLQuaternion q = (LLQuaternion) quat;
+ return new LLQuaternion(q.X, q.Y, q.Z, q.W);
+ }
+
+ public object Disassemble(object quat)
+ {
+ return quat;
+ }
+
+ public int GetHashCode(object quat)
+ {
+ return (quat == null) ? 0 : quat.GetHashCode();
+ }
+
+ public bool IsMutable
+ {
+ get { return false; }
+ }
+
+ public object NullSafeGet(IDataReader rs, string[] names, object owner)
+ {
+ object quat = null;
+
+ int x = rs.GetOrdinal(names[0]);
+ int y = rs.GetOrdinal(names[1]);
+ int z = rs.GetOrdinal(names[2]);
+ int w = rs.GetOrdinal(names[3]);
+ if (!rs.IsDBNull(x))
+ {
+ quat = new LLQuaternion((Single)rs[x], (Single)rs[y], (Single)rs[z], (Single)rs[w]);
+ }
+ return quat;
+ }
+
+ public void NullSafeSet(IDbCommand cmd, object obj, int index)
+ {
+ LLQuaternion quat = (LLQuaternion)obj;
+ ((IDataParameter)cmd.Parameters[index]).Value = quat.X;
+ ((IDataParameter)cmd.Parameters[index + 1]).Value = quat.Y;
+ ((IDataParameter)cmd.Parameters[index + 2]).Value = quat.Z;
+ ((IDataParameter)cmd.Parameters[index + 3]).Value = quat.W;
+ }
+
+ public object Replace(object original, object target, object owner)
+ {
+ return original;
+ }
+
+ public Type ReturnedType
+ {
+ get { return typeof(LLQuaternion); }
+ }
+
+ public SqlType[] SqlTypes
+ {
+ get { return new SqlType [] {
+ NHibernateUtil.Single.SqlType,
+ NHibernateUtil.Single.SqlType,
+ NHibernateUtil.Single.SqlType,
+ NHibernateUtil.Single.SqlType
+ }; }
+ }
+ }
+}
diff --git a/OpenSim/Data/NHibernate/Resources/AssetBase.hbm.xml b/OpenSim/Data/NHibernate/Resources/AssetBase.hbm.xml
index 60fc146028..f6b648a60e 100644
--- a/OpenSim/Data/NHibernate/Resources/AssetBase.hbm.xml
+++ b/OpenSim/Data/NHibernate/Resources/AssetBase.hbm.xml
@@ -5,7 +5,6 @@
-
diff --git a/OpenSim/Data/NHibernate/Resources/RegionStore.hbm.xml b/OpenSim/Data/NHibernate/Resources/RegionStore.hbm.xml
index 17f7a4968f..a443a8f1ab 100644
--- a/OpenSim/Data/NHibernate/Resources/RegionStore.hbm.xml
+++ b/OpenSim/Data/NHibernate/Resources/RegionStore.hbm.xml
@@ -29,34 +29,49 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
index 3f5e618378..5b92a8d805 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
@@ -776,13 +776,41 @@ namespace OpenSim.Region.Environment.Scenes
public Quaternion SitTargetOrientation
{
get { return m_sitTargetOrientation; }
+ set { m_sitTargetOrientation = value; }
}
+
public Vector3 SitTargetPosition
{
get { return m_sitTargetPosition; }
+ set { m_sitTargetPosition = value; }
}
+ // This sort of sucks, but I'm adding these in to make some of
+ // the mappings more consistant.
+ public LLVector3 SitTargetPositionLL
+ {
+ get { return new LLVector3(m_sitTargetPosition.x, m_sitTargetPosition.y,m_sitTargetPosition.z); }
+ set { m_sitTargetPosition = new Vector3(value.X, value.Y, value.Z); }
+ }
+
+ public LLQuaternion SitTargetOrientationLL
+ {
+ get
+ {
+ return new LLQuaternion(
+ m_sitTargetOrientation.x,
+ m_sitTargetOrientation.y,
+ m_sitTargetOrientation.z,
+ m_sitTargetOrientation.w
+ );
+ }
+
+ set { m_sitTargetOrientation = new Quaternion(value.X, value.Y, value.Z, value.W); }
+ }
+
+
+
public bool Stopped
{
get {