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.cs28
1 files changed, 17 insertions, 11 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
index 280fdc7..7086e6c 100644
--- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
@@ -148,7 +148,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
148 } 148 }
149 } 149 }
150 150
151 public void SaveChangedAttachments(IScenePresence sp) 151 public void SaveChangedAttachments(IScenePresence sp, bool saveAllScripted)
152 { 152 {
153// m_log.DebugFormat("[ATTACHMENTS MODULE]: Saving changed attachments for {0}", sp.Name); 153// m_log.DebugFormat("[ATTACHMENTS MODULE]: Saving changed attachments for {0}", sp.Name);
154 154
@@ -157,13 +157,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
157 157
158 foreach (SceneObjectGroup grp in sp.GetAttachments()) 158 foreach (SceneObjectGroup grp in sp.GetAttachments())
159 { 159 {
160// if (grp.HasGroupChanged) // Resizer scripts? 160 grp.IsAttachment = false;
161// { 161 grp.AbsolutePosition = grp.RootPart.AttachedPos;
162 grp.IsAttachment = false; 162 UpdateKnownItem(sp, grp, saveAllScripted);
163 grp.AbsolutePosition = grp.RootPart.AttachedPos; 163 grp.IsAttachment = true;
164 UpdateKnownItem(sp, grp);
165 grp.IsAttachment = true;
166// }
167 } 164 }
168 } 165 }
169 166
@@ -460,9 +457,17 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
460 /// </remarks> 457 /// </remarks>
461 /// <param name="sp"></param> 458 /// <param name="sp"></param>
462 /// <param name="grp"></param> 459 /// <param name="grp"></param>
463 private void UpdateKnownItem(IScenePresence sp, SceneObjectGroup grp) 460 private void UpdateKnownItem(IScenePresence sp, SceneObjectGroup grp, bool saveAllScripted)
464 { 461 {
465 if (grp.HasGroupChanged || grp.ContainsScripts()) 462 // Saving attachments for NPCs messes them up for the real owner!
463 INPCModule module = m_scene.RequestModuleInterface<INPCModule>();
464 if (module != null)
465 {
466 if (module.IsNPC(sp.UUID, m_scene))
467 return;
468 }
469
470 if (grp.HasGroupChanged || (saveAllScripted && grp.ContainsScripts()))
466 { 471 {
467 m_log.DebugFormat( 472 m_log.DebugFormat(
468 "[ATTACHMENTS MODULE]: Updating asset for attachment {0}, attachpoint {1}", 473 "[ATTACHMENTS MODULE]: Updating asset for attachment {0}, attachpoint {1}",
@@ -495,6 +500,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
495 if (sp.ControllingClient != null) 500 if (sp.ControllingClient != null)
496 sp.ControllingClient.SendInventoryItemCreateUpdate(item, 0); 501 sp.ControllingClient.SendInventoryItemCreateUpdate(item, 0);
497 } 502 }
503 grp.HasGroupChanged = false; // Prevent it being saved over and over
498 } 504 }
499 else 505 else
500 { 506 {
@@ -688,7 +694,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
688 group.IsAttachment = false; 694 group.IsAttachment = false;
689 group.AbsolutePosition = group.RootPart.AttachedPos; 695 group.AbsolutePosition = group.RootPart.AttachedPos;
690 696
691 UpdateKnownItem(sp, group); 697 UpdateKnownItem(sp, group, true);
692 m_scene.DeleteSceneObject(group, false); 698 m_scene.DeleteSceneObject(group, false);
693 699
694 return; 700 return;