aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/CoreModules')
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs40
-rw-r--r--OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs21
2 files changed, 25 insertions, 36 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
index 929db21..fc92fc3 100644
--- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
@@ -276,6 +276,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
276 276
277 if (objatt != null) 277 if (objatt != null)
278 { 278 {
279 // Loading the inventory from XML will have set this, but
280 // there is no way the object could have changed yet,
281 // since scripts aren't running yet. So, clear it here.
282 objatt.HasGroupChanged = false;
279 bool tainted = false; 283 bool tainted = false;
280 if (AttachmentPt != 0 && AttachmentPt != objatt.GetAttachmentPoint()) 284 if (AttachmentPt != 0 && AttachmentPt != objatt.GetAttachmentPoint())
281 tainted = true; 285 tainted = true;
@@ -486,9 +490,16 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
486 { 490 {
487 m_scene.EventManager.TriggerOnAttach(group.LocalId, itemID, UUID.Zero); 491 m_scene.EventManager.TriggerOnAttach(group.LocalId, itemID, UUID.Zero);
488 // CM / XMREngine!!!! Needed to conclude attach event 492 // CM / XMREngine!!!! Needed to conclude attach event
489 SceneObjectSerializer.ToOriginalXmlFormat(group); 493 //SceneObjectSerializer.ToOriginalXmlFormat(group);
490 group.DetachToInventoryPrep(); 494 group.DetachToInventoryPrep();
491 m_log.Debug("[ATTACHMENTS MODULE]: Saving attachpoint: " + ((uint)group.GetAttachmentPoint()).ToString()); 495 m_log.Debug("[ATTACHMENTS MODULE]: Saving attachpoint: " + ((uint)group.GetAttachmentPoint()).ToString());
496
497 // If an item contains scripts, it's always changed.
498 // This ensures script state is saved on detach
499 foreach (SceneObjectPart p in group.Parts)
500 if (p.Inventory.ContainsScripts())
501 group.HasGroupChanged = true;
502
492 UpdateKnownItem(remoteClient, group, group.GetFromItemID(), group.OwnerID); 503 UpdateKnownItem(remoteClient, group, group.GetFromItemID(), group.OwnerID);
493 m_scene.DeleteSceneObject(group, false); 504 m_scene.DeleteSceneObject(group, false);
494 return; 505 return;
@@ -497,25 +508,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
497 } 508 }
498 } 509 }
499 510
500 public void UpdateAttachmentPosition(IClientAPI client, SceneObjectGroup sog, Vector3 pos)
501 {
502 // If this is an attachment, then we need to save the modified
503 // object back into the avatar's inventory. First we save the
504 // attachment point information, then we update the relative
505 // positioning (which caused this method to get driven in the
506 // first place. Then we have to mark the object as NOT an
507 // attachment. This is necessary in order to correctly save
508 // and retrieve GroupPosition information for the attachment.
509 // Then we save the asset back into the appropriate inventory
510 // entry. Finally, we restore the object's attachment status.
511 byte attachmentPoint = sog.GetAttachmentPoint();
512 sog.UpdateGroupPosition(pos);
513 sog.RootPart.IsAttachment = false;
514 sog.AbsolutePosition = sog.RootPart.AttachedPos;
515 UpdateKnownItem(client, sog, sog.GetFromItemID(), sog.OwnerID);
516 sog.SetAttachmentPoint(attachmentPoint);
517 }
518
519 /// <summary> 511 /// <summary>
520 /// Update the attachment asset for the new sog details if they have changed. 512 /// Update the attachment asset for the new sog details if they have changed.
521 /// </summary> 513 /// </summary>
@@ -531,12 +523,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
531 { 523 {
532 if (grp != null) 524 if (grp != null)
533 { 525 {
534 // If an item contains scripts, it's always changed.
535 // This ensures script state is saved on detach
536 foreach (SceneObjectPart p in grp.Parts)
537 if (p.Inventory.ContainsScripts())
538 grp.HasGroupChanged = true;
539
540 if (!grp.HasGroupChanged) 526 if (!grp.HasGroupChanged)
541 { 527 {
542 m_log.WarnFormat("[ATTACHMENTS MODULE]: Save request for {0} which is unchanged", grp.UUID); 528 m_log.WarnFormat("[ATTACHMENTS MODULE]: Save request for {0} which is unchanged", grp.UUID);
@@ -548,7 +534,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
548 grp.UUID, grp.GetAttachmentPoint()); 534 grp.UUID, grp.GetAttachmentPoint());
549 535
550 string sceneObjectXml = SceneObjectSerializer.ToOriginalXmlFormat(grp); 536 string sceneObjectXml = SceneObjectSerializer.ToOriginalXmlFormat(grp);
551
552 InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId); 537 InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId);
553 item = m_scene.InventoryService.GetItem(item); 538 item = m_scene.InventoryService.GetItem(item);
554 539
@@ -642,7 +627,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
642 // In case it is later dropped again, don't let 627 // In case it is later dropped again, don't let
643 // it get cleaned up 628 // it get cleaned up
644 so.RootPart.RemFlag(PrimFlags.TemporaryOnRez); 629 so.RootPart.RemFlag(PrimFlags.TemporaryOnRez);
645 so.HasGroupChanged = false;
646 } 630 }
647 } 631 }
648} 632}
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
index 0700aa5..2e3db48 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
@@ -719,15 +719,20 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
719 { 719 {
720 group.RootPart.Flags |= PrimFlags.Phantom; 720 group.RootPart.Flags |= PrimFlags.Phantom;
721 group.RootPart.IsAttachment = true; 721 group.RootPart.IsAttachment = true;
722 }
723 722
724 // If we're rezzing an attachment then don't ask 723 // If we're rezzing an attachment then don't ask
725 // AddNewSceneObject() to update the client since 724 // AddNewSceneObject() to update the client since
726 // we'll be doing that later on. Scheduling more than 725 // we'll be doing that later on. Scheduling more
727 // one full update during the attachment 726 // than one full update during the attachment
728 // process causes some clients to fail to display the 727 // process causes some clients to fail to display
729 // attachment properly. 728 // the attachment properly.
730 m_Scene.AddNewSceneObject(group, true, false); 729 // Also, don't persist attachments.
730 m_Scene.AddNewSceneObject(group, false, false);
731 }
732 else
733 {
734 m_Scene.AddNewSceneObject(group, true, false);
735 }
731 736
732 // if attachment we set it's asset id so object updates 737 // if attachment we set it's asset id so object updates
733 // can reflect that, if not, we set it's position in world. 738 // can reflect that, if not, we set it's position in world.