diff options
-rw-r--r-- | OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | 19 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs | 4 |
2 files changed, 12 insertions, 11 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs index 732e3e3..42a18c5 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | |||
@@ -449,29 +449,30 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
449 | } | 449 | } |
450 | } | 450 | } |
451 | 451 | ||
452 | public void DetachSingleAttachmentToGround(UUID itemID, IClientAPI remoteClient) | 452 | public void DetachSingleAttachmentToGround(UUID sceneObjectID, IClientAPI remoteClient) |
453 | { | 453 | { |
454 | SceneObjectPart part = m_scene.GetSceneObjectPart(itemID); | 454 | SceneObjectGroup so = m_scene.GetSceneObjectGroup(sceneObjectID); |
455 | if (part == null || part.ParentGroup == null) | 455 | |
456 | if (so == null) | ||
456 | return; | 457 | return; |
457 | 458 | ||
458 | if (part.ParentGroup.RootPart.AttachedAvatar != remoteClient.AgentId) | 459 | if (so.RootPart.AttachedAvatar != remoteClient.AgentId) |
459 | return; | 460 | return; |
460 | 461 | ||
461 | UUID inventoryID = part.ParentGroup.GetFromItemID(); | 462 | UUID inventoryID = so.GetFromItemID(); |
462 | 463 | ||
463 | ScenePresence presence; | 464 | ScenePresence presence; |
464 | if (m_scene.TryGetScenePresence(remoteClient.AgentId, out presence)) | 465 | if (m_scene.TryGetScenePresence(remoteClient.AgentId, out presence)) |
465 | { | 466 | { |
466 | if (!m_scene.Permissions.CanRezObject( | 467 | if (!m_scene.Permissions.CanRezObject( |
467 | part.ParentGroup.PrimCount, remoteClient.AgentId, presence.AbsolutePosition)) | 468 | so.PrimCount, remoteClient.AgentId, presence.AbsolutePosition)) |
468 | return; | 469 | return; |
469 | 470 | ||
470 | bool changed = presence.Appearance.DetachAttachment(itemID); | 471 | bool changed = presence.Appearance.DetachAttachment(sceneObjectID); |
471 | if (changed && m_scene.AvatarFactory != null) | 472 | if (changed && m_scene.AvatarFactory != null) |
472 | m_scene.AvatarFactory.QueueAppearanceSave(remoteClient.AgentId); | 473 | m_scene.AvatarFactory.QueueAppearanceSave(remoteClient.AgentId); |
473 | 474 | ||
474 | part.ParentGroup.DetachToGround(); | 475 | so.DetachToGround(); |
475 | 476 | ||
476 | List<UUID> uuids = new List<UUID>(); | 477 | List<UUID> uuids = new List<UUID>(); |
477 | uuids.Add(inventoryID); | 478 | uuids.Add(inventoryID); |
@@ -479,7 +480,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
479 | remoteClient.SendRemoveInventoryItem(inventoryID); | 480 | remoteClient.SendRemoveInventoryItem(inventoryID); |
480 | } | 481 | } |
481 | 482 | ||
482 | m_scene.EventManager.TriggerOnAttach(part.ParentGroup.LocalId, itemID, UUID.Zero); | 483 | m_scene.EventManager.TriggerOnAttach(so.LocalId, sceneObjectID, UUID.Zero); |
483 | } | 484 | } |
484 | 485 | ||
485 | // What makes this method odd and unique is it tries to detach using an UUID.... Yay for standards. | 486 | // What makes this method odd and unique is it tries to detach using an UUID.... Yay for standards. |
diff --git a/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs b/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs index 0c82411..86f5a0f 100644 --- a/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs | |||
@@ -105,9 +105,9 @@ namespace OpenSim.Region.Framework.Interfaces | |||
105 | /// <summary> | 105 | /// <summary> |
106 | /// Detach the given item to the ground. | 106 | /// Detach the given item to the ground. |
107 | /// </summary> | 107 | /// </summary> |
108 | /// <param name="itemID"></param> | 108 | /// <param name="sceneObjectID"></param> |
109 | /// <param name="remoteClient"></param> | 109 | /// <param name="remoteClient"></param> |
110 | void DetachSingleAttachmentToGround(UUID itemID, IClientAPI remoteClient); | 110 | void DetachSingleAttachmentToGround(UUID sceneObjectID, IClientAPI remoteClient); |
111 | 111 | ||
112 | /// <summary> | 112 | /// <summary> |
113 | /// Detach the given item so that it remains in the user's inventory. | 113 | /// Detach the given item so that it remains in the user's inventory. |