aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/SceneGraph.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SceneGraph.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneGraph.cs25
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))