aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs')
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs25
1 files changed, 18 insertions, 7 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
index 2c49ba8..732e3e3 100644
--- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
@@ -502,17 +502,28 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
502 if (group.GetFromItemID() == itemID) 502 if (group.GetFromItemID() == itemID)
503 { 503 {
504 m_scene.EventManager.TriggerOnAttach(group.LocalId, itemID, UUID.Zero); 504 m_scene.EventManager.TriggerOnAttach(group.LocalId, itemID, UUID.Zero);
505 group.DetachToInventoryPrep(); 505 sp.RemoveAttachment(group);
506// m_log.Debug("[ATTACHMENTS MODULE]: Saving attachpoint: " + ((uint)group.GetAttachmentPoint()).ToString());
507 506
508 // If an item contains scripts, it's always changed. 507 // Prepare sog for storage
509 // This ensures script state is saved on detach 508 group.ForEachPart(
510 foreach (SceneObjectPart p in group.Parts) 509 delegate(SceneObjectPart part)
511 if (p.Inventory.ContainsScripts()) 510 {
512 group.HasGroupChanged = true; 511 part.AttachedAvatar = UUID.Zero;
512
513 // If there are any scripts,
514 // then always trigger a new object and state persistence in UpdateKnownItem()
515 if (part.Inventory.ContainsScripts())
516 group.HasGroupChanged = true;
517 }
518 );
519
520 group.RootPart.SetParentLocalId(0);
521 group.RootPart.IsAttachment = false;
522 group.AbsolutePosition = group.RootPart.AttachedPos;
513 523
514 UpdateKnownItem(sp.ControllingClient, group, group.GetFromItemID(), group.OwnerID); 524 UpdateKnownItem(sp.ControllingClient, group, group.GetFromItemID(), group.OwnerID);
515 m_scene.DeleteSceneObject(group, false); 525 m_scene.DeleteSceneObject(group, false);
526
516 return; 527 return;
517 } 528 }
518 } 529 }