/// <summary> /// Builds the prim from a datarecord. /// </summary> /// <param name="primRow">datarecord</param> /// <returns></returns> private static SceneObjectPart BuildPrim(IDataRecord primRow) { SceneObjectPart prim = new SceneObjectPart(); prim.UUID = new UUID((Guid)primRow["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(primRow["CreationDate"]); prim.Name = (string)primRow["Name"]; // various text fields prim.Text = (string)primRow["Text"]; prim.Color = Color.FromArgb(Convert.ToInt32(primRow["ColorA"]), Convert.ToInt32(primRow["ColorR"]), Convert.ToInt32(primRow["ColorG"]), Convert.ToInt32(primRow["ColorB"])); prim.Description = (string)primRow["Description"]; prim.SitName = (string)primRow["SitName"]; prim.TouchName = (string)primRow["TouchName"]; // permissions prim.Flags = (PrimFlags)Convert.ToUInt32(primRow["ObjectFlags"]); prim.CreatorID = new UUID((Guid)primRow["CreatorID"]); prim.OwnerID = new UUID((Guid)primRow["OwnerID"]); prim.GroupID = new UUID((Guid)primRow["GroupID"]); prim.LastOwnerID = new UUID((Guid)primRow["LastOwnerID"]); prim.OwnerMask = Convert.ToUInt32(primRow["OwnerMask"]); prim.NextOwnerMask = Convert.ToUInt32(primRow["NextOwnerMask"]); prim.GroupMask = Convert.ToUInt32(primRow["GroupMask"]); prim.EveryoneMask = Convert.ToUInt32(primRow["EveryoneMask"]); prim.BaseMask = Convert.ToUInt32(primRow["BaseMask"]); // vectors prim.OffsetPosition = new Vector3( Convert.ToSingle(primRow["PositionX"]), Convert.ToSingle(primRow["PositionY"]), Convert.ToSingle(primRow["PositionZ"])); prim.GroupPosition = new Vector3( Convert.ToSingle(primRow["GroupPositionX"]), Convert.ToSingle(primRow["GroupPositionY"]), Convert.ToSingle(primRow["GroupPositionZ"])); prim.Velocity = new Vector3( Convert.ToSingle(primRow["VelocityX"]), Convert.ToSingle(primRow["VelocityY"]), Convert.ToSingle(primRow["VelocityZ"])); prim.AngularVelocity = new Vector3( Convert.ToSingle(primRow["AngularVelocityX"]), Convert.ToSingle(primRow["AngularVelocityY"]), Convert.ToSingle(primRow["AngularVelocityZ"])); prim.Acceleration = new Vector3( Convert.ToSingle(primRow["AccelerationX"]), Convert.ToSingle(primRow["AccelerationY"]), Convert.ToSingle(primRow["AccelerationZ"])); // quaternions prim.RotationOffset = new Quaternion( Convert.ToSingle(primRow["RotationX"]), Convert.ToSingle(primRow["RotationY"]), Convert.ToSingle(primRow["RotationZ"]), Convert.ToSingle(primRow["RotationW"])); prim.SitTargetPositionLL = new Vector3( Convert.ToSingle(primRow["SitTargetOffsetX"]), Convert.ToSingle(primRow["SitTargetOffsetY"]), Convert.ToSingle(primRow["SitTargetOffsetZ"])); prim.SitTargetOrientationLL = new Quaternion( Convert.ToSingle(primRow["SitTargetOrientX"]), Convert.ToSingle(primRow["SitTargetOrientY"]), Convert.ToSingle(primRow["SitTargetOrientZ"]), Convert.ToSingle(primRow["SitTargetOrientW"])); prim.PayPrice[0] = Convert.ToInt32(primRow["PayPrice"]); prim.PayPrice[1] = Convert.ToInt32(primRow["PayButton1"]); prim.PayPrice[2] = Convert.ToInt32(primRow["PayButton2"]); prim.PayPrice[3] = Convert.ToInt32(primRow["PayButton3"]); prim.PayPrice[4] = Convert.ToInt32(primRow["PayButton4"]); prim.Sound = new UUID((Guid)primRow["LoopedSound"]); prim.SoundGain = Convert.ToSingle(primRow["LoopedSoundGain"]); prim.SoundFlags = 1; // If it's persisted at all, it's looped if (!(primRow["TextureAnimation"] is DBNull)) prim.TextureAnimation = (Byte[])primRow["TextureAnimation"]; if (!(primRow["ParticleSystem"] is DBNull)) prim.ParticleSystem = (Byte[])primRow["ParticleSystem"]; prim.AngularVelocity = new Vector3( Convert.ToSingle(primRow["OmegaX"]), Convert.ToSingle(primRow["OmegaY"]), Convert.ToSingle(primRow["OmegaZ"])); prim.SetCameraEyeOffset(new Vector3( Convert.ToSingle(primRow["CameraEyeOffsetX"]), Convert.ToSingle(primRow["CameraEyeOffsetY"]), Convert.ToSingle(primRow["CameraEyeOffsetZ"]) )); prim.SetCameraAtOffset(new Vector3( Convert.ToSingle(primRow["CameraAtOffsetX"]), Convert.ToSingle(primRow["CameraAtOffsetY"]), Convert.ToSingle(primRow["CameraAtOffsetZ"]) )); if (Convert.ToInt16(primRow["ForceMouselook"]) != 0) prim.SetForceMouselook(true); prim.ScriptAccessPin = Convert.ToInt32(primRow["ScriptAccessPin"]); if (Convert.ToInt16(primRow["AllowedDrop"]) != 0) prim.AllowedDrop = true; if (Convert.ToInt16(primRow["DieAtEdge"]) != 0) prim.DIE_AT_EDGE = true; prim.SalePrice = Convert.ToInt32(primRow["SalePrice"]); prim.ObjectSaleType = Convert.ToByte(primRow["SaleType"]); prim.Material = Convert.ToByte(primRow["Material"]); if (!(primRow["ClickAction"] is DBNull)) prim.ClickAction = Convert.ToByte(primRow["ClickAction"]); prim.CollisionSound = new UUID((Guid)primRow["CollisionSound"]); prim.CollisionSoundVolume = Convert.ToSingle(primRow["CollisionSoundVolume"]); if (Convert.ToInt16(primRow["PassTouches"]) != 0) prim.PassTouches = true; prim.LinkNum = Convert.ToInt32(primRow["LinkNumber"]); if (!(primRow["MediaURL"] is System.DBNull)) prim.MediaUrl = (string)primRow["MediaURL"]; return prim; }
/// <summary> /// Builds the prim from a datarecord. /// </summary> /// <param name="primRow">datarecord</param> /// <returns></returns> private static SceneObjectPart BuildPrim(IDataRecord primRow) { SceneObjectPart prim = new SceneObjectPart(); prim.UUID = new UUID((Guid)primRow["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(primRow["CreationDate"]); prim.Name = (string)primRow["Name"]; // various text fields prim.Text = (string)primRow["Text"]; prim.Color = Color.FromArgb(Convert.ToInt32(primRow["ColorA"]), Convert.ToInt32(primRow["ColorR"]), Convert.ToInt32(primRow["ColorG"]), Convert.ToInt32(primRow["ColorB"])); prim.Description = (string)primRow["Description"]; prim.SitName = (string)primRow["SitName"]; prim.TouchName = (string)primRow["TouchName"]; // permissions prim.Flags = (PrimFlags)Convert.ToUInt32(primRow["ObjectFlags"]); //prim.creatorID = new UUID((Guid)primRow["creatorID"]); prim.CreatorIdentification = (string)primRow["CreatorID"].ToString(); prim.OwnerID = new UUID((Guid)primRow["OwnerID"]); prim.GroupID = new UUID((Guid)primRow["GroupID"]); prim.LastOwnerID = new UUID((Guid)primRow["LastOwnerID"]); prim.OwnerMask = Convert.ToUInt32(primRow["OwnerMask"]); prim.NextOwnerMask = Convert.ToUInt32(primRow["NextOwnerMask"]); prim.GroupMask = Convert.ToUInt32(primRow["GroupMask"]); prim.EveryoneMask = Convert.ToUInt32(primRow["EveryoneMask"]); prim.BaseMask = Convert.ToUInt32(primRow["BaseMask"]); // vectors prim.OffsetPosition = new Vector3( Convert.ToSingle(primRow["PositionX"]), Convert.ToSingle(primRow["PositionY"]), Convert.ToSingle(primRow["PositionZ"])); prim.GroupPosition = new Vector3( Convert.ToSingle(primRow["GroupPositionX"]), Convert.ToSingle(primRow["GroupPositionY"]), Convert.ToSingle(primRow["GroupPositionZ"])); prim.Velocity = new Vector3( Convert.ToSingle(primRow["VelocityX"]), Convert.ToSingle(primRow["VelocityY"]), Convert.ToSingle(primRow["VelocityZ"])); prim.AngularVelocity = new Vector3( Convert.ToSingle(primRow["AngularVelocityX"]), Convert.ToSingle(primRow["AngularVelocityY"]), Convert.ToSingle(primRow["AngularVelocityZ"])); prim.Acceleration = new Vector3( Convert.ToSingle(primRow["AccelerationX"]), Convert.ToSingle(primRow["AccelerationY"]), Convert.ToSingle(primRow["AccelerationZ"])); // quaternions prim.RotationOffset = new Quaternion( Convert.ToSingle(primRow["RotationX"]), Convert.ToSingle(primRow["RotationY"]), Convert.ToSingle(primRow["RotationZ"]), Convert.ToSingle(primRow["RotationW"])); prim.SitTargetPositionLL = new Vector3( Convert.ToSingle(primRow["SitTargetOffsetX"]), Convert.ToSingle(primRow["SitTargetOffsetY"]), Convert.ToSingle(primRow["SitTargetOffsetZ"])); prim.SitTargetOrientationLL = new Quaternion( Convert.ToSingle(primRow["SitTargetOrientX"]), Convert.ToSingle(primRow["SitTargetOrientY"]), Convert.ToSingle(primRow["SitTargetOrientZ"]), Convert.ToSingle(primRow["SitTargetOrientW"])); prim.PayPrice[0] = Convert.ToInt32(primRow["PayPrice"]); prim.PayPrice[1] = Convert.ToInt32(primRow["PayButton1"]); prim.PayPrice[2] = Convert.ToInt32(primRow["PayButton2"]); prim.PayPrice[3] = Convert.ToInt32(primRow["PayButton3"]); prim.PayPrice[4] = Convert.ToInt32(primRow["PayButton4"]); prim.Sound = new UUID((Guid)primRow["LoopedSound"]); prim.SoundGain = Convert.ToSingle(primRow["LoopedSoundGain"]); prim.SoundFlags = 1; // If it's persisted at all, it's looped if (!(primRow["TextureAnimation"] is DBNull)) prim.TextureAnimation = (Byte[])primRow["TextureAnimation"]; if (!(primRow["ParticleSystem"] is DBNull)) prim.ParticleSystem = (Byte[])primRow["ParticleSystem"]; prim.AngularVelocity = new Vector3( Convert.ToSingle(primRow["OmegaX"]), Convert.ToSingle(primRow["OmegaY"]), Convert.ToSingle(primRow["OmegaZ"])); prim.SetCameraEyeOffset(new Vector3( Convert.ToSingle(primRow["CameraEyeOffsetX"]), Convert.ToSingle(primRow["CameraEyeOffsetY"]), Convert.ToSingle(primRow["CameraEyeOffsetZ"]) )); prim.SetCameraAtOffset(new Vector3( Convert.ToSingle(primRow["CameraAtOffsetX"]), Convert.ToSingle(primRow["CameraAtOffsetY"]), Convert.ToSingle(primRow["CameraAtOffsetZ"]) )); if (Convert.ToInt16(primRow["ForceMouselook"]) != 0) prim.SetForceMouselook(true); prim.ScriptAccessPin = Convert.ToInt32(primRow["ScriptAccessPin"]); if (Convert.ToInt16(primRow["AllowedDrop"]) != 0) prim.AllowedDrop = true; if (Convert.ToInt16(primRow["DieAtEdge"]) != 0) prim.DIE_AT_EDGE = true; prim.SalePrice = Convert.ToInt32(primRow["SalePrice"]); prim.ObjectSaleType = Convert.ToByte(primRow["SaleType"]); prim.Material = Convert.ToByte(primRow["Material"]); if (!(primRow["ClickAction"] is DBNull)) prim.ClickAction = Convert.ToByte(primRow["ClickAction"]); prim.CollisionSound = new UUID((Guid)primRow["CollisionSound"]); prim.CollisionSoundVolume = Convert.ToSingle(primRow["CollisionSoundVolume"]); prim.PassTouches = (bool)primRow["PassTouches"]; prim.PassCollisions = Convert.ToBoolean(primRow["PassCollisions"]); if (!(primRow["MediaURL"] is System.DBNull)) prim.MediaUrl = (string)primRow["MediaURL"]; if (!(primRow["AttachedPosX"] is System.DBNull)) { prim.AttachedPos = new Vector3( Convert.ToSingle(primRow["AttachedPosX"]), Convert.ToSingle(primRow["AttachedPosY"]), Convert.ToSingle(primRow["AttachedPosZ"]) ); } if (!(primRow["DynAttrs"] is System.DBNull) && (string)primRow["DynAttrs"] != "") prim.DynAttrs = DAMap.FromXml((string)primRow["DynAttrs"]); else prim.DynAttrs = new DAMap(); if (!(primRow["KeyframeMotion"] is DBNull)) { Byte[] data = (byte[])primRow["KeyframeMotion"]; if (data.Length > 0) prim.KeyframeMotion = KeyframeMotion.FromData(null, data); else prim.KeyframeMotion = null; } else { prim.KeyframeMotion = null; } prim.PhysicsShapeType = Convert.ToByte(primRow["PhysicsShapeType"]); prim.Density = Convert.ToSingle(primRow["Density"]); prim.GravityModifier = Convert.ToSingle(primRow["GravityModifier"]); prim.Friction = Convert.ToSingle(primRow["Friction"]); prim.Restitution = Convert.ToSingle(primRow["Restitution"]); prim.RotationAxisLocks = Convert.ToByte(primRow["RotationAxisLocks"]); SOPVehicle vehicle = null; if (primRow["Vehicle"].ToString() != String.Empty) { vehicle = SOPVehicle.FromXml2(primRow["Vehicle"].ToString()); if (vehicle != null) prim.VehicleParams = vehicle; } return prim; }
/*********************************************************************** * * Convert between ADO.NET <=> OpenSim Objects * * These should be database independant * **********************************************************************/ /// <summary> /// /// </summary> /// <param name="row"></param> /// <returns></returns> private SceneObjectPart buildPrim(DataRow row) { // Code commented. Uncomment to test the unit test inline. // The unit test mentions this commented code for the purposes // of debugging a unit test failure // SceneObjectGroup sog = new SceneObjectGroup(); // SceneObjectPart sop = new SceneObjectPart(); // sop.LocalId = 1; // sop.Name = "object1"; // sop.Description = "object1"; // sop.Text = ""; // sop.SitName = ""; // sop.TouchName = ""; // sop.UUID = UUID.Random(); // sop.Shape = PrimitiveBaseShape.Default; // sog.SetRootPart(sop); // Add breakpoint in above line. Check sop fields. // TODO: this doesn't work yet because something more // interesting has to be done to actually get these values // back out. Not enough time to figure it out yet. SceneObjectPart prim = new SceneObjectPart(); 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.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"]; // 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.OwnerMask = Convert.ToUInt32(row["OwnerMask"]); prim.NextOwnerMask = Convert.ToUInt32(row["NextOwnerMask"]); prim.GroupMask = Convert.ToUInt32(row["GroupMask"]); prim.EveryoneMask = Convert.ToUInt32(row["EveryoneMask"]); prim.BaseMask = Convert.ToUInt32(row["BaseMask"]); // vectors prim.OffsetPosition = new Vector3( Convert.ToSingle(row["PositionX"]), Convert.ToSingle(row["PositionY"]), Convert.ToSingle(row["PositionZ"]) ); prim.GroupPosition = new Vector3( Convert.ToSingle(row["GroupPositionX"]), Convert.ToSingle(row["GroupPositionY"]), Convert.ToSingle(row["GroupPositionZ"]) ); prim.Velocity = new Vector3( Convert.ToSingle(row["VelocityX"]), Convert.ToSingle(row["VelocityY"]), Convert.ToSingle(row["VelocityZ"]) ); prim.AngularVelocity = new Vector3( Convert.ToSingle(row["AngularVelocityX"]), Convert.ToSingle(row["AngularVelocityY"]), Convert.ToSingle(row["AngularVelocityZ"]) ); prim.Acceleration = new Vector3( Convert.ToSingle(row["AccelerationX"]), Convert.ToSingle(row["AccelerationY"]), Convert.ToSingle(row["AccelerationZ"]) ); // quaternions prim.RotationOffset = new Quaternion( Convert.ToSingle(row["RotationX"]), Convert.ToSingle(row["RotationY"]), Convert.ToSingle(row["RotationZ"]), Convert.ToSingle(row["RotationW"]) ); prim.SitTargetPositionLL = new Vector3( Convert.ToSingle(row["SitTargetOffsetX"]), Convert.ToSingle(row["SitTargetOffsetY"]), Convert.ToSingle(row["SitTargetOffsetZ"])); prim.SitTargetOrientationLL = new Quaternion( Convert.ToSingle( row["SitTargetOrientX"]), Convert.ToSingle( row["SitTargetOrientY"]), Convert.ToSingle( row["SitTargetOrientZ"]), Convert.ToSingle( row["SitTargetOrientW"])); prim.ClickAction = Convert.ToByte(row["ClickAction"]); prim.PayPrice[0] = Convert.ToInt32(row["PayPrice"]); prim.PayPrice[1] = Convert.ToInt32(row["PayButton1"]); prim.PayPrice[2] = Convert.ToInt32(row["PayButton2"]); prim.PayPrice[3] = Convert.ToInt32(row["PayButton3"]); prim.PayPrice[4] = Convert.ToInt32(row["PayButton4"]); prim.Sound = new UUID(row["LoopedSound"].ToString()); prim.SoundGain = Convert.ToSingle(row["LoopedSoundGain"]); prim.SoundFlags = 1; // If it's persisted at all, it's looped if (!row.IsNull("TextureAnimation")) prim.TextureAnimation = Convert.FromBase64String(row["TextureAnimation"].ToString()); if (!row.IsNull("ParticleSystem")) prim.ParticleSystem = Convert.FromBase64String(row["ParticleSystem"].ToString()); prim.AngularVelocity = new Vector3( Convert.ToSingle(row["OmegaX"]), Convert.ToSingle(row["OmegaY"]), Convert.ToSingle(row["OmegaZ"]) ); prim.SetCameraEyeOffset(new Vector3( Convert.ToSingle(row["CameraEyeOffsetX"]), Convert.ToSingle(row["CameraEyeOffsetY"]), Convert.ToSingle(row["CameraEyeOffsetZ"]) )); prim.SetCameraAtOffset(new Vector3( Convert.ToSingle(row["CameraAtOffsetX"]), Convert.ToSingle(row["CameraAtOffsetY"]), Convert.ToSingle(row["CameraAtOffsetZ"]) )); if (Convert.ToInt16(row["ForceMouselook"]) != 0) prim.SetForceMouselook(true); prim.ScriptAccessPin = Convert.ToInt32(row["ScriptAccessPin"]); if (Convert.ToInt16(row["AllowedDrop"]) != 0) prim.AllowedDrop = true; if (Convert.ToInt16(row["DieAtEdge"]) != 0) prim.DIE_AT_EDGE = true; prim.SalePrice = Convert.ToInt32(row["SalePrice"]); prim.ObjectSaleType = Convert.ToByte(row["SaleType"]); prim.Material = Convert.ToByte(row["Material"]); prim.CollisionSound = new UUID(row["CollisionSound"].ToString()); prim.CollisionSoundVolume = Convert.ToSingle(row["CollisionSoundVolume"]); if (Convert.ToInt16(row["VolumeDetect"]) != 0) prim.VolumeDetectActive = true; if (!(row["MediaURL"] is System.DBNull)) { // m_log.DebugFormat("[SQLITE]: MediaUrl type [{0}]", row["MediaURL"].GetType()); prim.MediaUrl = (string)row["MediaURL"]; } return prim; }
private SceneObjectPart BuildPrim(IDataReader row) { SceneObjectPart prim = new SceneObjectPart(); // depending on the MySQL connector version, CHAR(36) may be already converted to Guid! prim.UUID = DBGuid.FromDB(row["UUID"]); prim.CreatorID = DBGuid.FromDB(row["CreatorID"]); prim.OwnerID = DBGuid.FromDB(row["OwnerID"]); prim.GroupID = DBGuid.FromDB(row["GroupID"]); prim.LastOwnerID = DBGuid.FromDB(row["LastOwnerID"]); // explicit conversion of integers is required, which sort // of sucks. No idea if there is a shortcut here or not. prim.CreationDate = (int)row["CreationDate"]; if (row["Name"] != DBNull.Value) prim.Name = (string)row["Name"]; else prim.Name = String.Empty; // Various text fields prim.Text = (string)row["Text"]; prim.Color = Color.FromArgb((int)row["ColorA"], (int)row["ColorR"], (int)row["ColorG"], (int)row["ColorB"]); prim.Description = (string)row["Description"]; prim.SitName = (string)row["SitName"]; prim.TouchName = (string)row["TouchName"]; // Permissions prim.ObjectFlags = (uint)(int)row["ObjectFlags"]; prim.OwnerMask = (uint)(int)row["OwnerMask"]; prim.NextOwnerMask = (uint)(int)row["NextOwnerMask"]; prim.GroupMask = (uint)(int)row["GroupMask"]; prim.EveryoneMask = (uint)(int)row["EveryoneMask"]; prim.BaseMask = (uint)(int)row["BaseMask"]; // Vectors prim.OffsetPosition = new Vector3( (float)(double)row["PositionX"], (float)(double)row["PositionY"], (float)(double)row["PositionZ"] ); prim.GroupPosition = new Vector3( (float)(double)row["GroupPositionX"], (float)(double)row["GroupPositionY"], (float)(double)row["GroupPositionZ"] ); prim.Velocity = new Vector3( (float)(double)row["VelocityX"], (float)(double)row["VelocityY"], (float)(double)row["VelocityZ"] ); prim.AngularVelocity = new Vector3( (float)(double)row["AngularVelocityX"], (float)(double)row["AngularVelocityY"], (float)(double)row["AngularVelocityZ"] ); prim.Acceleration = new Vector3( (float)(double)row["AccelerationX"], (float)(double)row["AccelerationY"], (float)(double)row["AccelerationZ"] ); // quaternions prim.RotationOffset = new Quaternion( (float)(double)row["RotationX"], (float)(double)row["RotationY"], (float)(double)row["RotationZ"], (float)(double)row["RotationW"] ); prim.SitTargetPositionLL = new Vector3( (float)(double)row["SitTargetOffsetX"], (float)(double)row["SitTargetOffsetY"], (float)(double)row["SitTargetOffsetZ"] ); prim.SitTargetOrientationLL = new Quaternion( (float)(double)row["SitTargetOrientX"], (float)(double)row["SitTargetOrientY"], (float)(double)row["SitTargetOrientZ"], (float)(double)row["SitTargetOrientW"] ); prim.PayPrice[0] = (int)row["PayPrice"]; prim.PayPrice[1] = (int)row["PayButton1"]; prim.PayPrice[2] = (int)row["PayButton2"]; prim.PayPrice[3] = (int)row["PayButton3"]; prim.PayPrice[4] = (int)row["PayButton4"]; prim.Sound = DBGuid.FromDB(row["LoopedSound"].ToString()); prim.SoundGain = (float)(double)row["LoopedSoundGain"]; prim.SoundFlags = 1; // If it's persisted at all, it's looped if (!(row["TextureAnimation"] is DBNull)) prim.TextureAnimation = (byte[])row["TextureAnimation"]; if (!(row["ParticleSystem"] is DBNull)) prim.ParticleSystem = (byte[])row["ParticleSystem"]; prim.AngularVelocity = new Vector3( (float)(double)row["OmegaX"], (float)(double)row["OmegaY"], (float)(double)row["OmegaZ"] ); prim.SetCameraEyeOffset(new Vector3( (float)(double)row["CameraEyeOffsetX"], (float)(double)row["CameraEyeOffsetY"], (float)(double)row["CameraEyeOffsetZ"] )); prim.SetCameraAtOffset(new Vector3( (float)(double)row["CameraAtOffsetX"], (float)(double)row["CameraAtOffsetY"], (float)(double)row["CameraAtOffsetZ"] )); prim.SetForceMouselook((sbyte)row["ForceMouselook"] != 0); prim.ScriptAccessPin = (int)row["ScriptAccessPin"]; prim.AllowedDrop = ((sbyte)row["AllowedDrop"] != 0); prim.DIE_AT_EDGE = ((sbyte)row["DieAtEdge"] != 0); prim.SalePrice = (int)row["SalePrice"]; prim.ObjectSaleType = unchecked((byte)(sbyte)row["SaleType"]); prim.Material = unchecked((byte)(sbyte)row["Material"]); if (!(row["ClickAction"] is DBNull)) prim.ClickAction = unchecked((byte)(sbyte)row["ClickAction"]); prim.CollisionSound = DBGuid.FromDB(row["CollisionSound"]); prim.CollisionSoundVolume = (float)(double)row["CollisionSoundVolume"]; prim.PassTouches = ((sbyte)row["PassTouches"] != 0); prim.LinkNum = (int)row["LinkNumber"]; return prim; }