diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs index 5ce898587c..1b2ee7d88b 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs @@ -248,21 +248,25 @@ namespace OpenSim.Region.Environment.Scenes PermissionMask.Move | PermissionMask.Transfer) | 7; + uint ownerMask = 0x7ffffff; foreach (SceneObjectPart part in m_parts.Values) + { + ownerMask &= part.OwnerMask; perms &= part.MaskEffectivePermissions(); + } - if ((RootPart.OwnerMask & (uint)PermissionMask.Modify) == 0) + if (ownerMask & (uint)PermissionMask.Modify) == 0) perms &= ~(uint)PermissionMask.Modify; - if ((RootPart.OwnerMask & (uint)PermissionMask.Copy) == 0) + if (ownerMask & (uint)PermissionMask.Copy) == 0) perms &= ~(uint)PermissionMask.Copy; - if ((RootPart.OwnerMask & (uint)PermissionMask.Transfer) == 0) + if (ownerMask & (uint)PermissionMask.Transfer) == 0) perms &= ~(uint)PermissionMask.Transfer; - if ((RootPart.OwnerMask & RootPart.NextOwnerMask & (uint)PermissionMask.Modify) == 0) + if (ownerMask & RootPart.NextOwnerMask & (uint)PermissionMask.Modify) == 0) perms &= ~((uint)PermissionMask.Modify >> 13); - if ((RootPart.OwnerMask & RootPart.NextOwnerMask & (uint)PermissionMask.Copy) == 0) + if (ownerMask & RootPart.NextOwnerMask & (uint)PermissionMask.Copy) == 0) perms &= ~((uint)PermissionMask.Copy >> 13); - if ((RootPart.OwnerMask & RootPart.NextOwnerMask & (uint)PermissionMask.Transfer) == 0) + if (ownerMask & RootPart.NextOwnerMask & (uint)PermissionMask.Transfer) == 0) perms &= ~((uint)PermissionMask.Transfer >> 13); return perms;