diff options
Diffstat (limited to '')
4 files changed, 52 insertions, 50 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs index f4bc495..9e5ce8f 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | |||
@@ -136,10 +136,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
136 | 136 | ||
137 | public void SaveChangedAttachments(IScenePresence sp) | 137 | public void SaveChangedAttachments(IScenePresence sp) |
138 | { | 138 | { |
139 | // Need to copy this list because DetachToInventoryPrep mods it | 139 | foreach (SceneObjectGroup grp in sp.GetAttachments()) |
140 | List<SceneObjectGroup> attachments = new List<SceneObjectGroup>(sp.Attachments); | ||
141 | |||
142 | foreach (SceneObjectGroup grp in attachments) | ||
143 | { | 140 | { |
144 | if (grp.HasGroupChanged) // Resizer scripts? | 141 | if (grp.HasGroupChanged) // Resizer scripts? |
145 | { | 142 | { |
@@ -273,14 +270,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
273 | 270 | ||
274 | // Remove any previous attachments | 271 | // Remove any previous attachments |
275 | UUID itemID = UUID.Zero; | 272 | UUID itemID = UUID.Zero; |
276 | foreach (SceneObjectGroup grp in sp.Attachments) | 273 | |
277 | { | 274 | List<SceneObjectGroup> attachments = sp.GetAttachments(attachmentPt); |
278 | if (grp.AttachmentPoint == attachmentPt) | 275 | |
279 | { | 276 | // At the moment we can only deal with a single attachment |
280 | itemID = grp.GetFromItemID(); | 277 | if (attachments.Count != 0) |
281 | break; | 278 | itemID = attachments[0].GetFromItemID(); |
282 | } | ||
283 | } | ||
284 | 279 | ||
285 | if (itemID != UUID.Zero) | 280 | if (itemID != UUID.Zero) |
286 | DetachSingleAttachmentToInv(itemID, sp); | 281 | DetachSingleAttachmentToInv(itemID, sp); |
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs index b0146a1..363e258 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs | |||
@@ -106,7 +106,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests | |||
106 | 106 | ||
107 | // Check status on scene presence | 107 | // Check status on scene presence |
108 | Assert.That(m_presence.HasAttachments(), Is.True); | 108 | Assert.That(m_presence.HasAttachments(), Is.True); |
109 | List<SceneObjectGroup> attachments = m_presence.Attachments; | 109 | List<SceneObjectGroup> attachments = m_presence.GetAttachments(); |
110 | Assert.That(attachments.Count, Is.EqualTo(1)); | 110 | Assert.That(attachments.Count, Is.EqualTo(1)); |
111 | SceneObjectGroup attSo = attachments[0]; | 111 | SceneObjectGroup attSo = attachments[0]; |
112 | Assert.That(attSo.Name, Is.EqualTo(attName)); | 112 | Assert.That(attSo.Name, Is.EqualTo(attName)); |
@@ -140,7 +140,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests | |||
140 | 140 | ||
141 | // Check scene presence status | 141 | // Check scene presence status |
142 | Assert.That(m_presence.HasAttachments(), Is.True); | 142 | Assert.That(m_presence.HasAttachments(), Is.True); |
143 | List<SceneObjectGroup> attachments = m_presence.Attachments; | 143 | List<SceneObjectGroup> attachments = m_presence.GetAttachments(); |
144 | Assert.That(attachments.Count, Is.EqualTo(1)); | 144 | Assert.That(attachments.Count, Is.EqualTo(1)); |
145 | SceneObjectGroup attSo = attachments[0]; | 145 | SceneObjectGroup attSo = attachments[0]; |
146 | Assert.That(attSo.Name, Is.EqualTo(attName)); | 146 | Assert.That(attSo.Name, Is.EqualTo(attName)); |
@@ -174,7 +174,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests | |||
174 | 174 | ||
175 | // Check scene presence status | 175 | // Check scene presence status |
176 | Assert.That(m_presence.HasAttachments(), Is.False); | 176 | Assert.That(m_presence.HasAttachments(), Is.False); |
177 | List<SceneObjectGroup> attachments = m_presence.Attachments; | 177 | List<SceneObjectGroup> attachments = m_presence.GetAttachments(); |
178 | Assert.That(attachments.Count, Is.EqualTo(0)); | 178 | Assert.That(attachments.Count, Is.EqualTo(0)); |
179 | 179 | ||
180 | // Check appearance status | 180 | // Check appearance status |
@@ -208,7 +208,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests | |||
208 | 208 | ||
209 | // Check status on scene presence | 209 | // Check status on scene presence |
210 | Assert.That(m_presence.HasAttachments(), Is.False); | 210 | Assert.That(m_presence.HasAttachments(), Is.False); |
211 | List<SceneObjectGroup> attachments = m_presence.Attachments; | 211 | List<SceneObjectGroup> attachments = m_presence.GetAttachments(); |
212 | Assert.That(attachments.Count, Is.EqualTo(0)); | 212 | Assert.That(attachments.Count, Is.EqualTo(0)); |
213 | 213 | ||
214 | // Check item status | 214 | // Check item status |
@@ -237,7 +237,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests | |||
237 | ScenePresence presence = SceneHelpers.AddScenePresence(scene, acd); | 237 | ScenePresence presence = SceneHelpers.AddScenePresence(scene, acd); |
238 | 238 | ||
239 | Assert.That(presence.HasAttachments(), Is.True); | 239 | Assert.That(presence.HasAttachments(), Is.True); |
240 | List<SceneObjectGroup> attachments = presence.Attachments; | 240 | List<SceneObjectGroup> attachments = presence.GetAttachments(); |
241 | 241 | ||
242 | Assert.That(attachments.Count, Is.EqualTo(1)); | 242 | Assert.That(attachments.Count, Is.EqualTo(1)); |
243 | SceneObjectGroup attSo = attachments[0]; | 243 | SceneObjectGroup attSo = attachments[0]; |
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs index 7963e53..c24cc17 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs | |||
@@ -208,7 +208,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
208 | sp.ControllingClient.SendLocalTeleport(position, lookAt, teleportFlags); | 208 | sp.ControllingClient.SendLocalTeleport(position, lookAt, teleportFlags); |
209 | sp.Teleport(position); | 209 | sp.Teleport(position); |
210 | 210 | ||
211 | foreach (SceneObjectGroup grp in sp.Attachments) | 211 | foreach (SceneObjectGroup grp in sp.GetAttachments()) |
212 | sp.Scene.EventManager.TriggerOnScriptChangedEvent(grp.LocalId, (uint)Changed.TELEPORT); | 212 | sp.Scene.EventManager.TriggerOnScriptChangedEvent(grp.LocalId, (uint)Changed.TELEPORT); |
213 | } | 213 | } |
214 | else // Another region possibly in another simulator | 214 | else // Another region possibly in another simulator |
@@ -559,11 +559,11 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
559 | 559 | ||
560 | protected virtual void AgentHasMovedAway(ScenePresence sp, bool logout) | 560 | protected virtual void AgentHasMovedAway(ScenePresence sp, bool logout) |
561 | { | 561 | { |
562 | foreach (SceneObjectGroup sop in sp.Attachments) | 562 | foreach (SceneObjectGroup sop in sp.GetAttachments()) |
563 | { | 563 | { |
564 | sop.Scene.DeleteSceneObject(sop, true); | 564 | sop.Scene.DeleteSceneObject(sop, true); |
565 | } | 565 | } |
566 | sp.Attachments.Clear(); | 566 | sp.ClearAttachments(); |
567 | } | 567 | } |
568 | 568 | ||
569 | protected void KillEntity(Scene scene, uint localID) | 569 | protected void KillEntity(Scene scene, uint localID) |
@@ -1764,34 +1764,33 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
1764 | 1764 | ||
1765 | protected bool CrossAttachmentsIntoNewRegion(GridRegion destination, ScenePresence sp, bool silent) | 1765 | protected bool CrossAttachmentsIntoNewRegion(GridRegion destination, ScenePresence sp, bool silent) |
1766 | { | 1766 | { |
1767 | List<SceneObjectGroup> m_attachments = sp.Attachments; | 1767 | List<SceneObjectGroup> m_attachments = sp.GetAttachments(); |
1768 | lock (m_attachments) | 1768 | |
1769 | // Validate | ||
1770 | foreach (SceneObjectGroup gobj in m_attachments) | ||
1769 | { | 1771 | { |
1770 | // Validate | 1772 | if (gobj == null || gobj.IsDeleted) |
1771 | foreach (SceneObjectGroup gobj in m_attachments) | 1773 | return false; |
1772 | { | 1774 | } |
1773 | if (gobj == null || gobj.IsDeleted) | ||
1774 | return false; | ||
1775 | } | ||
1776 | 1775 | ||
1777 | foreach (SceneObjectGroup gobj in m_attachments) | 1776 | foreach (SceneObjectGroup gobj in m_attachments) |
1777 | { | ||
1778 | // If the prim group is null then something must have happened to it! | ||
1779 | if (gobj != null && gobj.RootPart != null) | ||
1778 | { | 1780 | { |
1779 | // If the prim group is null then something must have happened to it! | 1781 | // Set the parent localID to 0 so it transfers over properly. |
1780 | if (gobj != null && gobj.RootPart != null) | 1782 | gobj.RootPart.SetParentLocalId(0); |
1781 | { | 1783 | gobj.AbsolutePosition = gobj.RootPart.AttachedPos; |
1782 | // Set the parent localID to 0 so it transfers over properly. | 1784 | gobj.IsAttachment = false; |
1783 | gobj.RootPart.SetParentLocalId(0); | 1785 | //gobj.RootPart.LastOwnerID = gobj.GetFromAssetID(); |
1784 | gobj.AbsolutePosition = gobj.RootPart.AttachedPos; | 1786 | m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Sending attachment {0} to region {1}", gobj.UUID, destination.RegionName); |
1785 | gobj.IsAttachment = false; | 1787 | CrossPrimGroupIntoNewRegion(destination, gobj, silent); |
1786 | //gobj.RootPart.LastOwnerID = gobj.GetFromAssetID(); | ||
1787 | m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Sending attachment {0} to region {1}", gobj.UUID, destination.RegionName); | ||
1788 | CrossPrimGroupIntoNewRegion(destination, gobj, silent); | ||
1789 | } | ||
1790 | } | 1788 | } |
1791 | m_attachments.Clear(); | ||
1792 | |||
1793 | return true; | ||
1794 | } | 1789 | } |
1790 | |||
1791 | sp.ClearAttachments(); | ||
1792 | |||
1793 | return true; | ||
1795 | } | 1794 | } |
1796 | 1795 | ||
1797 | #endregion | 1796 | #endregion |
@@ -1840,7 +1839,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
1840 | int i = 0; | 1839 | int i = 0; |
1841 | if (sp.InTransitScriptStates.Count > 0) | 1840 | if (sp.InTransitScriptStates.Count > 0) |
1842 | { | 1841 | { |
1843 | sp.Attachments.ForEach(delegate(SceneObjectGroup sog) | 1842 | List<SceneObjectGroup> attachments = sp.GetAttachments(); |
1843 | |||
1844 | foreach (SceneObjectGroup sog in attachments) | ||
1844 | { | 1845 | { |
1845 | if (i < sp.InTransitScriptStates.Count) | 1846 | if (i < sp.InTransitScriptStates.Count) |
1846 | { | 1847 | { |
@@ -1849,8 +1850,10 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
1849 | sog.ResumeScripts(); | 1850 | sog.ResumeScripts(); |
1850 | } | 1851 | } |
1851 | else | 1852 | else |
1852 | m_log.ErrorFormat("[ENTITY TRANSFER MODULE]: InTransitScriptStates.Count={0} smaller than Attachments.Count={1}", sp.InTransitScriptStates.Count, sp.Attachments.Count); | 1853 | m_log.ErrorFormat( |
1853 | }); | 1854 | "[ENTITY TRANSFER MODULE]: InTransitScriptStates.Count={0} smaller than Attachments.Count={1}", |
1855 | sp.InTransitScriptStates.Count, attachments.Count); | ||
1856 | } | ||
1854 | 1857 | ||
1855 | sp.InTransitScriptStates.Clear(); | 1858 | sp.InTransitScriptStates.Clear(); |
1856 | } | 1859 | } |
diff --git a/OpenSim/Region/CoreModules/Scripting/WorldComm/WorldCommModule.cs b/OpenSim/Region/CoreModules/Scripting/WorldComm/WorldCommModule.cs index 22352f5..057500c 100644 --- a/OpenSim/Region/CoreModules/Scripting/WorldComm/WorldCommModule.cs +++ b/OpenSim/Region/CoreModules/Scripting/WorldComm/WorldCommModule.cs | |||
@@ -283,7 +283,7 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm | |||
283 | } | 283 | } |
284 | 284 | ||
285 | /// <summary> | 285 | /// <summary> |
286 | /// Delivers the message to. | 286 | /// Delivers the message to a scene entity. |
287 | /// </summary> | 287 | /// </summary> |
288 | /// <param name='target'> | 288 | /// <param name='target'> |
289 | /// Target. | 289 | /// Target. |
@@ -314,17 +314,19 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm | |||
314 | m_scene.SimChatBroadcast(Utils.StringToBytes(msg), ChatTypeEnum.Owner, 0, pos, name, id, false); | 314 | m_scene.SimChatBroadcast(Utils.StringToBytes(msg), ChatTypeEnum.Owner, 0, pos, name, id, false); |
315 | } | 315 | } |
316 | 316 | ||
317 | List<SceneObjectGroup> attachments = sp.Attachments; | 317 | List<SceneObjectGroup> attachments = sp.GetAttachments(); |
318 | |||
318 | // Nothing left to do | 319 | // Nothing left to do |
319 | if (attachments == null) | 320 | if (attachments == null) |
320 | return true; | 321 | return true; |
321 | 322 | ||
322 | // Get uuid of attachments | 323 | // Get uuid of attachments |
323 | List<UUID> targets = new List<UUID>(); | 324 | List<UUID> targets = new List<UUID>(); |
324 | foreach ( SceneObjectGroup sog in attachments ) | 325 | foreach (SceneObjectGroup sog in attachments) |
325 | { | 326 | { |
326 | targets.Add(sog.UUID); | 327 | targets.Add(sog.UUID); |
327 | } | 328 | } |
329 | |||
328 | // Need to check each attachment | 330 | // Need to check each attachment |
329 | foreach (ListenerInfo li in m_listenerManager.GetListeners(UUID.Zero, channel, name, id, msg)) | 331 | foreach (ListenerInfo li in m_listenerManager.GetListeners(UUID.Zero, channel, name, id, msg)) |
330 | { | 332 | { |
@@ -334,9 +336,10 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm | |||
334 | if (m_scene.GetSceneObjectPart(li.GetHostID()) == null) | 336 | if (m_scene.GetSceneObjectPart(li.GetHostID()) == null) |
335 | continue; | 337 | continue; |
336 | 338 | ||
337 | if ( targets.Contains(li.GetHostID())) | 339 | if (targets.Contains(li.GetHostID())) |
338 | QueueMessage(new ListenerInfo(li, name, id, msg)); | 340 | QueueMessage(new ListenerInfo(li, name, id, msg)); |
339 | } | 341 | } |
342 | |||
340 | return true; | 343 | return true; |
341 | } | 344 | } |
342 | 345 | ||
@@ -363,6 +366,7 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm | |||
363 | break; | 366 | break; |
364 | } | 367 | } |
365 | } | 368 | } |
369 | |||
366 | return true; | 370 | return true; |
367 | } | 371 | } |
368 | 372 | ||