From 7ab08f2ac471f22327e4cac969f9f8d1b937d071 Mon Sep 17 00:00:00 2001 From: MW Date: Fri, 14 Mar 2008 15:23:33 +0000 Subject: Attempt to fix mantis #741, could not replicate it myself. But the error was suggesting that the SceneObjectPart was null, so added a null check, to make sure the sceneobject to be attached is found before attempting the attachment. --- OpenSim/Region/Environment/Scenes/InnerScene.cs | 267 ++++++++++++------------ 1 file changed, 137 insertions(+), 130 deletions(-) diff --git a/OpenSim/Region/Environment/Scenes/InnerScene.cs b/OpenSim/Region/Environment/Scenes/InnerScene.cs index 0272a7e..053fc85 100644 --- a/OpenSim/Region/Environment/Scenes/InnerScene.cs +++ b/OpenSim/Region/Environment/Scenes/InnerScene.cs @@ -290,140 +290,147 @@ namespace OpenSim.Region.Environment.Scenes { System.Console.WriteLine("Attaching object " + objectLocalID + " to " + AttachmentPt); SceneObjectPart p = GetSceneObjectPart(objectLocalID); - ScenePresence av = null; - if (TryGetAvatar(remoteClient.AgentId, out av)) + if (p != null) { - ObjectUpdatePacket objupdate = new ObjectUpdatePacket(); - objupdate.RegionData.RegionHandle = m_regInfo.RegionHandle; - objupdate.RegionData.TimeDilation = ushort.MaxValue; - objupdate.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[2]; - // avatar stuff - horrible group copypaste - - objupdate.ObjectData[0] = new ObjectUpdatePacket.ObjectDataBlock(); - objupdate.ObjectData[0].PSBlock = new byte[0]; - objupdate.ObjectData[0].ExtraParams = new byte[1]; - objupdate.ObjectData[0].MediaURL = new byte[0]; - objupdate.ObjectData[0].NameValue = new byte[0]; - objupdate.ObjectData[0].Text = new byte[0]; - objupdate.ObjectData[0].TextColor = new byte[4]; - objupdate.ObjectData[0].JointAxisOrAnchor = new LLVector3(0, 0, 0); - objupdate.ObjectData[0].JointPivot = new LLVector3(0, 0, 0); - objupdate.ObjectData[0].Material = 4; - objupdate.ObjectData[0].TextureAnim = new byte[0]; - objupdate.ObjectData[0].Sound = LLUUID.Zero; - - objupdate.ObjectData[0].State = 0; - objupdate.ObjectData[0].Data = new byte[0]; - - objupdate.ObjectData[0].ObjectData = new byte[76]; - objupdate.ObjectData[0].ObjectData[15] = 128; - objupdate.ObjectData[0].ObjectData[16] = 63; - objupdate.ObjectData[0].ObjectData[56] = 128; - objupdate.ObjectData[0].ObjectData[61] = 102; - objupdate.ObjectData[0].ObjectData[62] = 40; - objupdate.ObjectData[0].ObjectData[63] = 61; - objupdate.ObjectData[0].ObjectData[64] = 189; - - - objupdate.ObjectData[0].UpdateFlags = 61 + (9 << 8) + (130 << 16) + (16 << 24); - objupdate.ObjectData[0].PathCurve = 16; - objupdate.ObjectData[0].ProfileCurve = 1; - objupdate.ObjectData[0].PathScaleX = 100; - objupdate.ObjectData[0].PathScaleY = 100; - objupdate.ObjectData[0].ParentID = 0; - objupdate.ObjectData[0].OwnerID = LLUUID.Zero; - objupdate.ObjectData[0].Scale = new LLVector3(1, 1, 1); - objupdate.ObjectData[0].PCode = 47; - objupdate.ObjectData[0].TextureEntry = ScenePresence.DefaultTexture; - - objupdate.ObjectData[0].ID = av.LocalId; - objupdate.ObjectData[0].FullID = remoteClient.AgentId; - objupdate.ObjectData[0].ParentID = 0; - objupdate.ObjectData[0].NameValue = - Helpers.StringToField("FirstName STRING RW SV " + av.Firstname + "\nLastName STRING RW SV " + av.Lastname); - LLVector3 pos2 = av.AbsolutePosition; - // new LLVector3((float) Pos.X, (float) Pos.Y, (float) Pos.Z); - byte[] pb = pos2.GetBytes(); - Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 16, pb.Length); - - - // primitive part - objupdate.ObjectData[1] = new ObjectUpdatePacket.ObjectDataBlock(); - // SetDefaultPrimPacketValues - objupdate.ObjectData[1].PSBlock = new byte[0]; - objupdate.ObjectData[1].ExtraParams = new byte[1]; - objupdate.ObjectData[1].MediaURL = new byte[0]; - objupdate.ObjectData[1].NameValue = new byte[0]; - objupdate.ObjectData[1].Text = new byte[0]; - objupdate.ObjectData[1].TextColor = new byte[4]; - objupdate.ObjectData[1].JointAxisOrAnchor = new LLVector3(0, 0, 0); - objupdate.ObjectData[1].JointPivot = new LLVector3(0, 0, 0); - objupdate.ObjectData[1].Material = 3; - objupdate.ObjectData[1].TextureAnim = new byte[0]; - objupdate.ObjectData[1].Sound = LLUUID.Zero; - objupdate.ObjectData[1].State = 0; - objupdate.ObjectData[1].Data = new byte[0]; - - objupdate.ObjectData[1].ObjectData = new byte[60]; - objupdate.ObjectData[1].ObjectData[46] = 128; - objupdate.ObjectData[1].ObjectData[47] = 63; - - // SetPrimPacketShapeData - PrimitiveBaseShape primData = p.Shape; - - objupdate.ObjectData[1].TextureEntry = primData.TextureEntry; - objupdate.ObjectData[1].PCode = primData.PCode; - objupdate.ObjectData[1].State = (byte)(((byte)AttachmentPt) << 4); - objupdate.ObjectData[1].PathBegin = primData.PathBegin; - objupdate.ObjectData[1].PathEnd = primData.PathEnd; - objupdate.ObjectData[1].PathScaleX = primData.PathScaleX; - objupdate.ObjectData[1].PathScaleY = primData.PathScaleY; - objupdate.ObjectData[1].PathShearX = primData.PathShearX; - objupdate.ObjectData[1].PathShearY = primData.PathShearY; - objupdate.ObjectData[1].PathSkew = primData.PathSkew; - objupdate.ObjectData[1].ProfileBegin = primData.ProfileBegin; - objupdate.ObjectData[1].ProfileEnd = primData.ProfileEnd; - objupdate.ObjectData[1].Scale = primData.Scale; - objupdate.ObjectData[1].PathCurve = primData.PathCurve; - objupdate.ObjectData[1].ProfileCurve = primData.ProfileCurve; - objupdate.ObjectData[1].ProfileHollow = primData.ProfileHollow; - objupdate.ObjectData[1].PathRadiusOffset = primData.PathRadiusOffset; - objupdate.ObjectData[1].PathRevolutions = primData.PathRevolutions; - objupdate.ObjectData[1].PathTaperX = primData.PathTaperX; - objupdate.ObjectData[1].PathTaperY = primData.PathTaperY; - objupdate.ObjectData[1].PathTwist = primData.PathTwist; - objupdate.ObjectData[1].PathTwistBegin = primData.PathTwistBegin; - objupdate.ObjectData[1].ExtraParams = primData.ExtraParams; - - - objupdate.ObjectData[1].UpdateFlags = 276957500; // flags; // ?? - objupdate.ObjectData[1].ID = p.LocalId; - objupdate.ObjectData[1].FullID = p.UUID; - objupdate.ObjectData[1].OwnerID = p.OwnerID; - objupdate.ObjectData[1].Text = Helpers.StringToField(p.Text); - objupdate.ObjectData[1].TextColor[0] = 255; - objupdate.ObjectData[1].TextColor[1] = 255; - objupdate.ObjectData[1].TextColor[2] = 255; - objupdate.ObjectData[1].TextColor[3] = 128; - objupdate.ObjectData[1].ParentID = objupdate.ObjectData[0].ID; - //objupdate.ObjectData[1].PSBlock = particleSystem; - //objupdate.ObjectData[1].ClickAction = clickAction; - objupdate.ObjectData[1].Radius = 20; - objupdate.ObjectData[1].NameValue = - Helpers.StringToField("AttachItemID STRING RW SV " + p.UUID); - LLVector3 pos = new LLVector3((float)0.0, (float)0.0, (float)0.0); - - pb = pos.GetBytes(); - Array.Copy(pb, 0, objupdate.ObjectData[1].ObjectData, 0, pb.Length); - - byte[] brot = rot.GetBytes(); - Array.Copy(brot, 0, objupdate.ObjectData[1].ObjectData, 36, brot.Length); - - remoteClient.OutPacket(objupdate, ThrottleOutPacketType.Task); + ScenePresence av = null; + if (TryGetAvatar(remoteClient.AgentId, out av)) + { + ObjectUpdatePacket objupdate = new ObjectUpdatePacket(); + objupdate.RegionData.RegionHandle = m_regInfo.RegionHandle; + objupdate.RegionData.TimeDilation = ushort.MaxValue; + objupdate.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[2]; + // avatar stuff - horrible group copypaste + + objupdate.ObjectData[0] = new ObjectUpdatePacket.ObjectDataBlock(); + objupdate.ObjectData[0].PSBlock = new byte[0]; + objupdate.ObjectData[0].ExtraParams = new byte[1]; + objupdate.ObjectData[0].MediaURL = new byte[0]; + objupdate.ObjectData[0].NameValue = new byte[0]; + objupdate.ObjectData[0].Text = new byte[0]; + objupdate.ObjectData[0].TextColor = new byte[4]; + objupdate.ObjectData[0].JointAxisOrAnchor = new LLVector3(0, 0, 0); + objupdate.ObjectData[0].JointPivot = new LLVector3(0, 0, 0); + objupdate.ObjectData[0].Material = 4; + objupdate.ObjectData[0].TextureAnim = new byte[0]; + objupdate.ObjectData[0].Sound = LLUUID.Zero; + + objupdate.ObjectData[0].State = 0; + objupdate.ObjectData[0].Data = new byte[0]; + + objupdate.ObjectData[0].ObjectData = new byte[76]; + objupdate.ObjectData[0].ObjectData[15] = 128; + objupdate.ObjectData[0].ObjectData[16] = 63; + objupdate.ObjectData[0].ObjectData[56] = 128; + objupdate.ObjectData[0].ObjectData[61] = 102; + objupdate.ObjectData[0].ObjectData[62] = 40; + objupdate.ObjectData[0].ObjectData[63] = 61; + objupdate.ObjectData[0].ObjectData[64] = 189; + + + objupdate.ObjectData[0].UpdateFlags = 61 + (9 << 8) + (130 << 16) + (16 << 24); + objupdate.ObjectData[0].PathCurve = 16; + objupdate.ObjectData[0].ProfileCurve = 1; + objupdate.ObjectData[0].PathScaleX = 100; + objupdate.ObjectData[0].PathScaleY = 100; + objupdate.ObjectData[0].ParentID = 0; + objupdate.ObjectData[0].OwnerID = LLUUID.Zero; + objupdate.ObjectData[0].Scale = new LLVector3(1, 1, 1); + objupdate.ObjectData[0].PCode = 47; + objupdate.ObjectData[0].TextureEntry = ScenePresence.DefaultTexture; + + objupdate.ObjectData[0].ID = av.LocalId; + objupdate.ObjectData[0].FullID = remoteClient.AgentId; + objupdate.ObjectData[0].ParentID = 0; + objupdate.ObjectData[0].NameValue = + Helpers.StringToField("FirstName STRING RW SV " + av.Firstname + "\nLastName STRING RW SV " + av.Lastname); + LLVector3 pos2 = av.AbsolutePosition; + // new LLVector3((float) Pos.X, (float) Pos.Y, (float) Pos.Z); + byte[] pb = pos2.GetBytes(); + Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 16, pb.Length); + + + // primitive part + objupdate.ObjectData[1] = new ObjectUpdatePacket.ObjectDataBlock(); + // SetDefaultPrimPacketValues + objupdate.ObjectData[1].PSBlock = new byte[0]; + objupdate.ObjectData[1].ExtraParams = new byte[1]; + objupdate.ObjectData[1].MediaURL = new byte[0]; + objupdate.ObjectData[1].NameValue = new byte[0]; + objupdate.ObjectData[1].Text = new byte[0]; + objupdate.ObjectData[1].TextColor = new byte[4]; + objupdate.ObjectData[1].JointAxisOrAnchor = new LLVector3(0, 0, 0); + objupdate.ObjectData[1].JointPivot = new LLVector3(0, 0, 0); + objupdate.ObjectData[1].Material = 3; + objupdate.ObjectData[1].TextureAnim = new byte[0]; + objupdate.ObjectData[1].Sound = LLUUID.Zero; + objupdate.ObjectData[1].State = 0; + objupdate.ObjectData[1].Data = new byte[0]; + + objupdate.ObjectData[1].ObjectData = new byte[60]; + objupdate.ObjectData[1].ObjectData[46] = 128; + objupdate.ObjectData[1].ObjectData[47] = 63; + + // SetPrimPacketShapeData + PrimitiveBaseShape primData = p.Shape; + + objupdate.ObjectData[1].TextureEntry = primData.TextureEntry; + objupdate.ObjectData[1].PCode = primData.PCode; + objupdate.ObjectData[1].State = (byte)(((byte)AttachmentPt) << 4); + objupdate.ObjectData[1].PathBegin = primData.PathBegin; + objupdate.ObjectData[1].PathEnd = primData.PathEnd; + objupdate.ObjectData[1].PathScaleX = primData.PathScaleX; + objupdate.ObjectData[1].PathScaleY = primData.PathScaleY; + objupdate.ObjectData[1].PathShearX = primData.PathShearX; + objupdate.ObjectData[1].PathShearY = primData.PathShearY; + objupdate.ObjectData[1].PathSkew = primData.PathSkew; + objupdate.ObjectData[1].ProfileBegin = primData.ProfileBegin; + objupdate.ObjectData[1].ProfileEnd = primData.ProfileEnd; + objupdate.ObjectData[1].Scale = primData.Scale; + objupdate.ObjectData[1].PathCurve = primData.PathCurve; + objupdate.ObjectData[1].ProfileCurve = primData.ProfileCurve; + objupdate.ObjectData[1].ProfileHollow = primData.ProfileHollow; + objupdate.ObjectData[1].PathRadiusOffset = primData.PathRadiusOffset; + objupdate.ObjectData[1].PathRevolutions = primData.PathRevolutions; + objupdate.ObjectData[1].PathTaperX = primData.PathTaperX; + objupdate.ObjectData[1].PathTaperY = primData.PathTaperY; + objupdate.ObjectData[1].PathTwist = primData.PathTwist; + objupdate.ObjectData[1].PathTwistBegin = primData.PathTwistBegin; + objupdate.ObjectData[1].ExtraParams = primData.ExtraParams; + + + objupdate.ObjectData[1].UpdateFlags = 276957500; // flags; // ?? + objupdate.ObjectData[1].ID = p.LocalId; + objupdate.ObjectData[1].FullID = p.UUID; + objupdate.ObjectData[1].OwnerID = p.OwnerID; + objupdate.ObjectData[1].Text = Helpers.StringToField(p.Text); + objupdate.ObjectData[1].TextColor[0] = 255; + objupdate.ObjectData[1].TextColor[1] = 255; + objupdate.ObjectData[1].TextColor[2] = 255; + objupdate.ObjectData[1].TextColor[3] = 128; + objupdate.ObjectData[1].ParentID = objupdate.ObjectData[0].ID; + //objupdate.ObjectData[1].PSBlock = particleSystem; + //objupdate.ObjectData[1].ClickAction = clickAction; + objupdate.ObjectData[1].Radius = 20; + objupdate.ObjectData[1].NameValue = + Helpers.StringToField("AttachItemID STRING RW SV " + p.UUID); + LLVector3 pos = new LLVector3((float)0.0, (float)0.0, (float)0.0); + + pb = pos.GetBytes(); + Array.Copy(pb, 0, objupdate.ObjectData[1].ObjectData, 0, pb.Length); + + byte[] brot = rot.GetBytes(); + Array.Copy(brot, 0, objupdate.ObjectData[1].ObjectData, 36, brot.Length); + + remoteClient.OutPacket(objupdate, ThrottleOutPacketType.Task); + } + else + { + m_log.Info("[SCENE]: Avatar " + remoteClient.AgentId + " not found"); + } } else { - m_log.Info("[SCENE]: Avatar " + remoteClient.AgentId + " not found"); + m_log.Info("[SCENE]: Attempting to attach object; Object " + objectLocalID + "(localID) not found"); } } -- cgit v1.1