diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 0621e2a..9e7a986 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -2671,11 +2671,20 @@ namespace OpenSim.Region.Framework.Scenes | |||
2671 | 2671 | ||
2672 | public void AdjustChildPrimPermissions() | 2672 | public void AdjustChildPrimPermissions() |
2673 | { | 2673 | { |
2674 | uint newOwnerMask = (uint)(PermissionMask.All | PermissionMask.Export) & 0xfffffff8; // Mask folded bits | ||
2675 | uint foldedPerms = RootPart.OwnerMask & 3; | ||
2676 | |||
2674 | ForEachPart(part => | 2677 | ForEachPart(part => |
2675 | { | 2678 | { |
2679 | newOwnerMask &= part.BaseMask; | ||
2676 | if (part != RootPart) | 2680 | if (part != RootPart) |
2677 | part.ClonePermissions(RootPart); | 2681 | part.ClonePermissions(RootPart); |
2678 | }); | 2682 | }); |
2683 | |||
2684 | uint lockMask = ~(uint)PermissionMask.Move; | ||
2685 | uint lockBit = RootPart.OwnerMask & (uint)PermissionMask.Move; | ||
2686 | RootPart.OwnerMask = (RootPart.OwnerMask & lockBit) | ((newOwnerMask | foldedPerms) & lockMask); | ||
2687 | RootPart.ScheduleFullUpdate(); | ||
2679 | } | 2688 | } |
2680 | 2689 | ||
2681 | public void UpdatePermissions(UUID AgentID, byte field, uint localID, | 2690 | public void UpdatePermissions(UUID AgentID, byte field, uint localID, |