diff --git a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs index b5e2c40ad3..d41ede163b 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs @@ -1276,7 +1276,7 @@ namespace OpenSim.Region.Environment.Scenes { if (group.RootPart.Shape.PCode == (byte)PCode.Prim) { - group.RootPart.Shape.State = (byte)0; + group.ClearPartAttachmentData(); } group.ApplyPhysics(m_physicalPrim); } diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs index 471170151b..c5fdcaf148 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs @@ -673,7 +673,13 @@ namespace OpenSim.Region.Environment.Scenes m_rootPart.m_IsAttachment = true; m_rootPart.SetParentLocalId(avatar.LocalId); - m_rootPart.SetAttachmentPoint(attachmentpoint); + lock (m_parts) + { + foreach (SceneObjectPart part in m_parts.Values) + { + part.SetAttachmentPoint(attachmentpoint); + } + } avatar.AddAttachment(this); m_rootPart.ScheduleFullUpdate(); @@ -688,6 +694,14 @@ namespace OpenSim.Region.Environment.Scenes return (byte)0; } + public void ClearPartAttachmentData() + { + foreach (SceneObjectPart part in m_parts.Values) + { + part.SetAttachmentPoint((Byte)0); + } + } + public void DetachToGround() { ScenePresence avatar = m_scene.GetScenePresence(m_rootPart.m_attachedAvatar);