diff options
5 files changed, 38 insertions, 26 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs index f6aea89..201ce7f 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | |||
@@ -133,6 +133,24 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
133 | } | 133 | } |
134 | } | 134 | } |
135 | } | 135 | } |
136 | |||
137 | public void SaveChangedAttachments(IScenePresence sp) | ||
138 | { | ||
139 | // Need to copy this list because DetachToInventoryPrep mods it | ||
140 | List<SceneObjectGroup> attachments = new List<SceneObjectGroup>(sp.Attachments.ToArray()); | ||
141 | |||
142 | foreach (SceneObjectGroup grp in attachments) | ||
143 | { | ||
144 | if (grp.HasGroupChanged) // Resizer scripts? | ||
145 | { | ||
146 | grp.IsAttachment = false; | ||
147 | grp.AbsolutePosition = grp.RootPart.AttachedPos; | ||
148 | // grp.DetachToInventoryPrep(); | ||
149 | UpdateKnownItem(sp.ControllingClient, grp, grp.GetFromItemID(), grp.OwnerID); | ||
150 | grp.IsAttachment = true; | ||
151 | } | ||
152 | } | ||
153 | } | ||
136 | 154 | ||
137 | /// <summary> | 155 | /// <summary> |
138 | /// Called by client | 156 | /// Called by client |
diff --git a/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs b/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs index 1833dce..ce795f1 100644 --- a/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs | |||
@@ -42,6 +42,12 @@ namespace OpenSim.Region.Framework.Interfaces | |||
42 | void RezAttachments(IScenePresence sp); | 42 | void RezAttachments(IScenePresence sp); |
43 | 43 | ||
44 | /// <summary> | 44 | /// <summary> |
45 | /// Save the attachments that have change on this presence. | ||
46 | /// </summary> | ||
47 | /// <param name="sp"></param> | ||
48 | void SaveChangedAttachments(IScenePresence sp); | ||
49 | |||
50 | /// <summary> | ||
45 | /// Attach an object to an avatar from the world. | 51 | /// Attach an object to an avatar from the world. |
46 | /// </summary> | 52 | /// </summary> |
47 | /// <param name="controllingClient"></param> | 53 | /// <param name="controllingClient"></param> |
diff --git a/OpenSim/Region/Framework/Interfaces/IScenePresence.cs b/OpenSim/Region/Framework/Interfaces/IScenePresence.cs index d700d79..b07c821 100644 --- a/OpenSim/Region/Framework/Interfaces/IScenePresence.cs +++ b/OpenSim/Region/Framework/Interfaces/IScenePresence.cs | |||
@@ -26,7 +26,9 @@ | |||
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using System.Collections.Generic; | ||
29 | using OpenSim.Framework; | 30 | using OpenSim.Framework; |
31 | using OpenSim.Region.Framework.Scenes; | ||
30 | 32 | ||
31 | namespace OpenSim.Region.Framework.Interfaces | 33 | namespace OpenSim.Region.Framework.Interfaces |
32 | { | 34 | { |
@@ -52,5 +54,14 @@ namespace OpenSim.Region.Framework.Interfaces | |||
52 | // get a synchronization issue. | 54 | // get a synchronization issue. |
53 | /// </remarks> | 55 | /// </remarks> |
54 | AvatarAppearance Appearance { get; set; } | 56 | AvatarAppearance Appearance { get; set; } |
57 | |||
58 | /// <summary> | ||
59 | /// The scene objects attached to this avatar. | ||
60 | /// </summary> | ||
61 | /// <remarks> | ||
62 | /// Do not change this list directly - use methods such as | ||
63 | /// AddAttachment() and RemoveAttachment(). Lock this list when performing any read operations upon it. | ||
64 | /// </remarks> | ||
65 | List<SceneObjectGroup> Attachments { get; } | ||
55 | } | 66 | } |
56 | } \ No newline at end of file | 67 | } \ No newline at end of file |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index e7fe8df..e0e3884 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -3162,8 +3162,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
3162 | 3162 | ||
3163 | m_eventManager.TriggerOnRemovePresence(agentID); | 3163 | m_eventManager.TriggerOnRemovePresence(agentID); |
3164 | 3164 | ||
3165 | if (avatar != null && (!avatar.IsChildAgent) && avatar.PresenceType != PresenceType.Npc) | 3165 | if (AttachmentsModule != null && avatar != null && (!avatar.IsChildAgent) && avatar.PresenceType != PresenceType.Npc) |
3166 | avatar.SaveChangedAttachments(); | 3166 | AttachmentsModule.SaveChangedAttachments(avatar); |
3167 | 3167 | ||
3168 | ForEachClient( | 3168 | ForEachClient( |
3169 | delegate(IClientAPI client) | 3169 | delegate(IClientAPI client) |
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 040e801..91e11eb 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -3831,28 +3831,5 @@ namespace OpenSim.Region.Framework.Scenes | |||
3831 | m_reprioritization_called = false; | 3831 | m_reprioritization_called = false; |
3832 | } | 3832 | } |
3833 | } | 3833 | } |
3834 | |||
3835 | public void SaveChangedAttachments() | ||
3836 | { | ||
3837 | // Need to copy this list because DetachToInventoryPrep mods it | ||
3838 | List<SceneObjectGroup> attachments = new List<SceneObjectGroup>(Attachments.ToArray()); | ||
3839 | |||
3840 | IAttachmentsModule attachmentsModule = m_scene.AttachmentsModule; | ||
3841 | if (attachmentsModule != null) | ||
3842 | { | ||
3843 | foreach (SceneObjectGroup grp in attachments) | ||
3844 | { | ||
3845 | if (grp.HasGroupChanged) // Resizer scripts? | ||
3846 | { | ||
3847 | grp.IsAttachment = false; | ||
3848 | grp.AbsolutePosition = grp.RootPart.AttachedPos; | ||
3849 | // grp.DetachToInventoryPrep(); | ||
3850 | attachmentsModule.UpdateKnownItem(ControllingClient, | ||
3851 | grp, grp.GetFromItemID(), grp.OwnerID); | ||
3852 | grp.IsAttachment = true; | ||
3853 | } | ||
3854 | } | ||
3855 | } | ||
3856 | } | ||
3857 | } | 3834 | } |
3858 | } | 3835 | } \ No newline at end of file |