diff options
-rw-r--r-- | OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | 50 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | 1 |
2 files changed, 30 insertions, 21 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs index d1792d7..6d16c52 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | |||
@@ -25,6 +25,7 @@ | |||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System; | ||
28 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
29 | using System.Reflection; | 30 | using System.Reflection; |
30 | using log4net; | 31 | using log4net; |
@@ -71,31 +72,38 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
71 | public void AttachObject(IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, Quaternion rot, bool silent) | 72 | public void AttachObject(IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, Quaternion rot, bool silent) |
72 | { | 73 | { |
73 | m_log.Debug("[ATTACHMENTS MODULE]: Invoking AttachObject"); | 74 | m_log.Debug("[ATTACHMENTS MODULE]: Invoking AttachObject"); |
74 | |||
75 | // If we can't take it, we can't attach it! | ||
76 | SceneObjectPart part = m_scene.GetSceneObjectPart(objectLocalID); | ||
77 | if (part == null) | ||
78 | return; | ||
79 | 75 | ||
80 | if (!m_scene.Permissions.CanTakeObject(part.UUID, remoteClient.AgentId)) | 76 | try |
81 | return; | ||
82 | |||
83 | // Calls attach with a Zero position | ||
84 | if (AttachObject(remoteClient, objectLocalID, AttachmentPt, rot, Vector3.Zero, false)) | ||
85 | { | 77 | { |
86 | m_scene.EventManager.TriggerOnAttach(objectLocalID, part.ParentGroup.GetFromItemID(), remoteClient.AgentId); | 78 | // If we can't take it, we can't attach it! |
87 | 79 | SceneObjectPart part = m_scene.GetSceneObjectPart(objectLocalID); | |
88 | // Save avatar attachment information | 80 | if (part == null) |
89 | ScenePresence presence; | 81 | return; |
90 | if (m_scene.AvatarFactory != null && m_scene.TryGetScenePresence(remoteClient.AgentId, out presence)) | 82 | |
83 | if (!m_scene.Permissions.CanTakeObject(part.UUID, remoteClient.AgentId)) | ||
84 | return; | ||
85 | |||
86 | // Calls attach with a Zero position | ||
87 | if (AttachObject(remoteClient, objectLocalID, AttachmentPt, rot, Vector3.Zero, false)) | ||
91 | { | 88 | { |
92 | m_log.Info( | 89 | m_scene.EventManager.TriggerOnAttach(objectLocalID, part.ParentGroup.GetFromItemID(), remoteClient.AgentId); |
93 | "[ATTACHMENTS MODULE]: Saving avatar attachment. AgentID: " + remoteClient.AgentId | 90 | |
94 | + ", AttachmentPoint: " + AttachmentPt); | 91 | // Save avatar attachment information |
95 | 92 | ScenePresence presence; | |
96 | m_scene.AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance); | 93 | if (m_scene.AvatarFactory != null && m_scene.TryGetScenePresence(remoteClient.AgentId, out presence)) |
94 | { | ||
95 | m_log.Info( | ||
96 | "[ATTACHMENTS MODULE]: Saving avatar attachment. AgentID: " + remoteClient.AgentId | ||
97 | + ", AttachmentPoint: " + AttachmentPt); | ||
98 | |||
99 | m_scene.AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance); | ||
100 | } | ||
97 | } | 101 | } |
98 | } | 102 | } |
103 | catch (Exception e) | ||
104 | { | ||
105 | m_log.DebugFormat("[ATTACHMENTS MODULE]: exception upon Attach Object {0}", e); | ||
106 | } | ||
99 | } | 107 | } |
100 | 108 | ||
101 | public bool AttachObject( | 109 | public bool AttachObject( |
@@ -379,7 +387,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
379 | uuids.Add(inventoryID); | 387 | uuids.Add(inventoryID); |
380 | m_scene.InventoryService.DeleteItems(remoteClient.AgentId, uuids); | 388 | m_scene.InventoryService.DeleteItems(remoteClient.AgentId, uuids); |
381 | remoteClient.SendRemoveInventoryItem(inventoryID); | 389 | remoteClient.SendRemoveInventoryItem(inventoryID); |
382 | } | 390 | } |
383 | 391 | ||
384 | m_scene.EventManager.TriggerOnAttach(part.ParentGroup.LocalId, itemID, UUID.Zero); | 392 | m_scene.EventManager.TriggerOnAttach(part.ParentGroup.LocalId, itemID, UUID.Zero); |
385 | } | 393 | } |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 78c2566..e23f39f 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -1052,6 +1052,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1052 | return; | 1052 | return; |
1053 | 1053 | ||
1054 | detachedpos = avatar.AbsolutePosition; | 1054 | detachedpos = avatar.AbsolutePosition; |
1055 | RootPart.FromItemID = UUID.Zero; | ||
1055 | 1056 | ||
1056 | AbsolutePosition = detachedpos; | 1057 | AbsolutePosition = detachedpos; |
1057 | m_rootPart.AttachedAvatar = UUID.Zero; | 1058 | m_rootPart.AttachedAvatar = UUID.Zero; |