diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneGraph.cs | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index b2e5dc3..af95c28 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs | |||
@@ -1661,11 +1661,16 @@ namespace OpenSim.Region.Framework.Scenes | |||
1661 | /// <param name="childPrims"></param> | 1661 | /// <param name="childPrims"></param> |
1662 | protected internal void LinkObjects(SceneObjectPart root, List<SceneObjectPart> children) | 1662 | protected internal void LinkObjects(SceneObjectPart root, List<SceneObjectPart> children) |
1663 | { | 1663 | { |
1664 | SceneObjectGroup parentGroup = root.ParentGroup; | ||
1665 | if (parentGroup == null) return; | ||
1666 | |||
1667 | // Cowardly refuse to link to a group owned root | ||
1668 | if (parentGroup.OwnerID == parentGroup.GroupID) | ||
1669 | return; | ||
1670 | |||
1664 | Monitor.Enter(m_updateLock); | 1671 | Monitor.Enter(m_updateLock); |
1665 | try | 1672 | try |
1666 | { | 1673 | { |
1667 | SceneObjectGroup parentGroup = root.ParentGroup; | ||
1668 | |||
1669 | List<SceneObjectGroup> childGroups = new List<SceneObjectGroup>(); | 1674 | List<SceneObjectGroup> childGroups = new List<SceneObjectGroup>(); |
1670 | 1675 | ||
1671 | // We do this in reverse to get the link order of the prims correct | 1676 | // We do this in reverse to get the link order of the prims correct |
@@ -1683,11 +1688,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
1683 | 1688 | ||
1684 | foreach (SceneObjectGroup child in childGroups) | 1689 | foreach (SceneObjectGroup child in childGroups) |
1685 | { | 1690 | { |
1686 | parentGroup.LinkToGroup(child); | 1691 | if (parentGroup.OwnerID == child.OwnerID) |
1692 | { | ||
1693 | parentGroup.LinkToGroup(child); | ||
1687 | 1694 | ||
1688 | // this is here so physics gets updated! | 1695 | // this is here so physics gets updated! |
1689 | // Don't remove! Bad juju! Stay away! or fix physics! | 1696 | // Don't remove! Bad juju! Stay away! or fix physics! |
1690 | child.AbsolutePosition = child.AbsolutePosition; | 1697 | child.AbsolutePosition = child.AbsolutePosition; |
1698 | } | ||
1691 | } | 1699 | } |
1692 | 1700 | ||
1693 | // We need to explicitly resend the newly link prim's object properties since no other actions | 1701 | // We need to explicitly resend the newly link prim's object properties since no other actions |
@@ -1725,9 +1733,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
1725 | if (part.ParentGroup.PrimCount != 1) // Skip single | 1733 | if (part.ParentGroup.PrimCount != 1) // Skip single |
1726 | { | 1734 | { |
1727 | if (part.LinkNum < 2) // Root | 1735 | if (part.LinkNum < 2) // Root |
1736 | { | ||
1728 | rootParts.Add(part); | 1737 | rootParts.Add(part); |
1738 | } | ||
1729 | else | 1739 | else |
1740 | { | ||
1741 | part.LastOwnerID = part.ParentGroup.RootPart.LastOwnerID; | ||
1730 | childParts.Add(part); | 1742 | childParts.Add(part); |
1743 | } | ||
1731 | 1744 | ||
1732 | SceneObjectGroup group = part.ParentGroup; | 1745 | SceneObjectGroup group = part.ParentGroup; |
1733 | if (!affectedGroups.Contains(group)) | 1746 | if (!affectedGroups.Contains(group)) |