diff options
Diffstat (limited to 'OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs')
-rw-r--r-- | OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs index 951afd7..acd156e 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | |||
@@ -286,6 +286,20 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
286 | 286 | ||
287 | public bool AttachObject(IScenePresence sp, SceneObjectGroup group, uint attachmentPt, bool silent, bool useAttachData, bool temp) | 287 | public bool AttachObject(IScenePresence sp, SceneObjectGroup group, uint attachmentPt, bool silent, bool useAttachData, bool temp) |
288 | { | 288 | { |
289 | if (!Enabled) | ||
290 | return false; | ||
291 | |||
292 | if (AttachObjectInternal(sp, group, attachmentPt, silent, useAttachData, temp)) | ||
293 | { | ||
294 | m_scene.EventManager.TriggerOnAttach(group.LocalId, group.FromItemID, sp.UUID); | ||
295 | return true; | ||
296 | } | ||
297 | |||
298 | return false; | ||
299 | } | ||
300 | |||
301 | private bool AttachObjectInternal(IScenePresence sp, SceneObjectGroup group, uint attachmentPt, bool silent, bool useAttachData, bool temp) | ||
302 | { | ||
289 | lock (sp.AttachmentsSyncLock) | 303 | lock (sp.AttachmentsSyncLock) |
290 | { | 304 | { |
291 | // m_log.DebugFormat( | 305 | // m_log.DebugFormat( |
@@ -461,6 +475,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
461 | 475 | ||
462 | public void DetachSingleAttachmentToGround(IScenePresence sp, uint soLocalId) | 476 | public void DetachSingleAttachmentToGround(IScenePresence sp, uint soLocalId) |
463 | { | 477 | { |
478 | DetachSingleAttachmentToGround(sp, soLocalId, sp.AbsolutePosition, Quaternion.Identity); | ||
479 | } | ||
480 | |||
481 | public void DetachSingleAttachmentToGround(IScenePresence sp, uint soLocalId, Vector3 absolutePos, Quaternion absoluteRot) | ||
482 | { | ||
464 | if (!Enabled) | 483 | if (!Enabled) |
465 | return; | 484 | return; |
466 | 485 | ||
@@ -502,7 +521,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
502 | so.FromItemID = UUID.Zero; | 521 | so.FromItemID = UUID.Zero; |
503 | 522 | ||
504 | SceneObjectPart rootPart = so.RootPart; | 523 | SceneObjectPart rootPart = so.RootPart; |
505 | so.AbsolutePosition = sp.AbsolutePosition; | 524 | so.AbsolutePosition = absolutePos; |
525 | if (absoluteRot != Quaternion.Identity) | ||
526 | { | ||
527 | so.UpdateGroupRotationR(absoluteRot); | ||
528 | } | ||
506 | so.AttachedAvatar = UUID.Zero; | 529 | so.AttachedAvatar = UUID.Zero; |
507 | rootPart.SetParentLocalId(0); | 530 | rootPart.SetParentLocalId(0); |
508 | so.ClearPartAttachmentData(); | 531 | so.ClearPartAttachmentData(); |
@@ -616,9 +639,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
616 | 639 | ||
617 | if (grp.HasGroupChanged) | 640 | if (grp.HasGroupChanged) |
618 | { | 641 | { |
619 | // m_log.DebugFormat( | 642 | m_log.DebugFormat( |
620 | // "[ATTACHMENTS MODULE]: Updating asset for attachment {0}, attachpoint {1}", | 643 | "[ATTACHMENTS MODULE]: Updating asset for attachment {0}, attachpoint {1}", |
621 | // grp.UUID, grp.AttachmentPoint); | 644 | grp.UUID, grp.AttachmentPoint); |
622 | 645 | ||
623 | string sceneObjectXml = SceneObjectSerializer.ToOriginalXmlFormat(grp, scriptedState); | 646 | string sceneObjectXml = SceneObjectSerializer.ToOriginalXmlFormat(grp, scriptedState); |
624 | 647 | ||
@@ -862,7 +885,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
862 | // This will throw if the attachment fails | 885 | // This will throw if the attachment fails |
863 | try | 886 | try |
864 | { | 887 | { |
865 | AttachObject(sp, objatt, attachmentPt, false, false, false); | 888 | AttachObjectInternal(sp, objatt, attachmentPt, false, false, false); |
866 | } | 889 | } |
867 | catch (Exception e) | 890 | catch (Exception e) |
868 | { | 891 | { |
@@ -933,6 +956,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
933 | 956 | ||
934 | InventoryItemBase item = new InventoryItemBase(itemID, sp.UUID); | 957 | InventoryItemBase item = new InventoryItemBase(itemID, sp.UUID); |
935 | item = m_scene.InventoryService.GetItem(item); | 958 | item = m_scene.InventoryService.GetItem(item); |
959 | if (item == null) | ||
960 | return; | ||
961 | |||
936 | bool changed = sp.Appearance.SetAttachment((int)AttachmentPt, itemID, item.AssetID); | 962 | bool changed = sp.Appearance.SetAttachment((int)AttachmentPt, itemID, item.AssetID); |
937 | if (changed && m_scene.AvatarFactory != null) | 963 | if (changed && m_scene.AvatarFactory != null) |
938 | { | 964 | { |