diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs index f7e46af..9a01a28 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs | |||
@@ -172,13 +172,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
172 | taskItem.GroupPermissions = item.GroupPermissions & | 172 | taskItem.GroupPermissions = item.GroupPermissions & |
173 | item.NextPermissions; | 173 | item.NextPermissions; |
174 | taskItem.NextPermissions = item.NextPermissions; | 174 | taskItem.NextPermissions = item.NextPermissions; |
175 | taskItem.CurrentPermissions |= 8; | 175 | // We're adding this to a prim we don't own. Force |
176 | // owner change | ||
177 | taskItem.CurrentPermissions |= 16; // Slam | ||
176 | } | 178 | } |
177 | else | 179 | else |
178 | { | 180 | { |
179 | taskItem.BasePermissions = item.BasePermissions; | 181 | taskItem.BasePermissions = item.BasePermissions; |
180 | taskItem.CurrentPermissions = item.CurrentPermissions; | 182 | taskItem.CurrentPermissions = item.CurrentPermissions; |
181 | taskItem.CurrentPermissions |= 8; | ||
182 | taskItem.EveryonePermissions = item.EveryOnePermissions; | 183 | taskItem.EveryonePermissions = item.EveryOnePermissions; |
183 | taskItem.GroupPermissions = item.GroupPermissions; | 184 | taskItem.GroupPermissions = item.GroupPermissions; |
184 | taskItem.NextPermissions = item.NextPermissions; | 185 | taskItem.NextPermissions = item.NextPermissions; |
@@ -281,7 +282,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
281 | PermissionMask.Move | | 282 | PermissionMask.Move | |
282 | PermissionMask.Transfer) | 7; | 283 | PermissionMask.Transfer) | 7; |
283 | 284 | ||
284 | uint ownerMask = 0x7ffffff; | 285 | uint ownerMask = 0x7fffffff; |
285 | foreach (SceneObjectPart part in m_parts.Values) | 286 | foreach (SceneObjectPart part in m_parts.Values) |
286 | { | 287 | { |
287 | ownerMask &= part.OwnerMask; | 288 | ownerMask &= part.OwnerMask; |
@@ -295,12 +296,16 @@ namespace OpenSim.Region.Framework.Scenes | |||
295 | if ((ownerMask & (uint)PermissionMask.Transfer) == 0) | 296 | if ((ownerMask & (uint)PermissionMask.Transfer) == 0) |
296 | perms &= ~(uint)PermissionMask.Transfer; | 297 | perms &= ~(uint)PermissionMask.Transfer; |
297 | 298 | ||
298 | if ((ownerMask & RootPart.NextOwnerMask & (uint)PermissionMask.Modify) == 0) | 299 | // If root prim permissions are applied here, this would screw |
299 | perms &= ~((uint)PermissionMask.Modify >> 13); | 300 | // with in-inventory manipulation of the next owner perms |
300 | if ((ownerMask & RootPart.NextOwnerMask & (uint)PermissionMask.Copy) == 0) | 301 | // in a major way. So, let's move this to the give itself. |
301 | perms &= ~((uint)PermissionMask.Copy >> 13); | 302 | // Yes. I know. Evil. |
302 | if ((ownerMask & RootPart.NextOwnerMask & (uint)PermissionMask.Transfer) == 0) | 303 | // if ((ownerMask & RootPart.NextOwnerMask & (uint)PermissionMask.Modify) == 0) |
303 | perms &= ~((uint)PermissionMask.Transfer >> 13); | 304 | // perms &= ~((uint)PermissionMask.Modify >> 13); |
305 | // if ((ownerMask & RootPart.NextOwnerMask & (uint)PermissionMask.Copy) == 0) | ||
306 | // perms &= ~((uint)PermissionMask.Copy >> 13); | ||
307 | // if ((ownerMask & RootPart.NextOwnerMask & (uint)PermissionMask.Transfer) == 0) | ||
308 | // perms &= ~((uint)PermissionMask.Transfer >> 13); | ||
304 | 309 | ||
305 | return perms; | 310 | return perms; |
306 | } | 311 | } |