diff options
author | Justin Clark-Casey (justincc) | 2011-08-30 22:06:24 +0100 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2011-08-30 22:06:24 +0100 |
commit | e7a515bab0e46c228f8f543397f97b7ba2f0df3c (patch) | |
tree | 9c5bd0f2aea3f59b5a8b82da74b336f78f74c17e /OpenSim/Region | |
parent | Merge branch 'master' into bulletsim (diff) | |
download | opensim-SC_OLD-e7a515bab0e46c228f8f543397f97b7ba2f0df3c.zip opensim-SC_OLD-e7a515bab0e46c228f8f543397f97b7ba2f0df3c.tar.gz opensim-SC_OLD-e7a515bab0e46c228f8f543397f97b7ba2f0df3c.tar.bz2 opensim-SC_OLD-e7a515bab0e46c228f8f543397f97b7ba2f0df3c.tar.xz |
Fix bug where attachments were remaining on the avatar after being dropped.
If the inventory service is configured not to allow deletion then these will not disappear from inventory
Diffstat (limited to 'OpenSim/Region')
-rw-r--r-- | OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | 12 | ||||
-rw-r--r-- | OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs | 14 |
2 files changed, 20 insertions, 6 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs index 2d5eb18..b7a7f77 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | |||
@@ -451,6 +451,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
451 | 451 | ||
452 | public void DetachSingleAttachmentToGround(UUID sceneObjectID, IClientAPI remoteClient) | 452 | public void DetachSingleAttachmentToGround(UUID sceneObjectID, IClientAPI remoteClient) |
453 | { | 453 | { |
454 | // m_log.DebugFormat( | ||
455 | // "[ATTACHMENTS MODULE]: DetachSingleAttachmentToGround() for {0}, object {1}", | ||
456 | // remoteClient.Name, sceneObjectID); | ||
457 | |||
454 | SceneObjectGroup so = m_scene.GetSceneObjectGroup(sceneObjectID); | 458 | SceneObjectGroup so = m_scene.GetSceneObjectGroup(sceneObjectID); |
455 | 459 | ||
456 | if (so == null) | 460 | if (so == null) |
@@ -461,6 +465,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
461 | 465 | ||
462 | UUID inventoryID = so.GetFromItemID(); | 466 | UUID inventoryID = so.GetFromItemID(); |
463 | 467 | ||
468 | // m_log.DebugFormat( | ||
469 | // "[ATTACHMENTS MODULE]: In DetachSingleAttachmentToGround(), object is {0} {1}, associated item is {2}", | ||
470 | // so.Name, so.LocalId, inventoryID); | ||
471 | |||
464 | ScenePresence presence; | 472 | ScenePresence presence; |
465 | if (m_scene.TryGetScenePresence(remoteClient.AgentId, out presence)) | 473 | if (m_scene.TryGetScenePresence(remoteClient.AgentId, out presence)) |
466 | { | 474 | { |
@@ -468,7 +476,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
468 | so.PrimCount, remoteClient.AgentId, presence.AbsolutePosition)) | 476 | so.PrimCount, remoteClient.AgentId, presence.AbsolutePosition)) |
469 | return; | 477 | return; |
470 | 478 | ||
471 | bool changed = presence.Appearance.DetachAttachment(sceneObjectID); | 479 | bool changed = presence.Appearance.DetachAttachment(inventoryID); |
472 | if (changed && m_scene.AvatarFactory != null) | 480 | if (changed && m_scene.AvatarFactory != null) |
473 | m_scene.AvatarFactory.QueueAppearanceSave(remoteClient.AgentId); | 481 | m_scene.AvatarFactory.QueueAppearanceSave(remoteClient.AgentId); |
474 | 482 | ||
@@ -485,7 +493,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
485 | } | 493 | } |
486 | 494 | ||
487 | /// <summary> | 495 | /// <summary> |
488 | /// Detach the given scene objet to the ground. | 496 | /// Detach the given scene object to the ground. |
489 | /// </summary> | 497 | /// </summary> |
490 | /// <remarks> | 498 | /// <remarks> |
491 | /// The caller has to take care of all the other work in updating avatar appearance, inventory, etc. | 499 | /// The caller has to take care of all the other work in updating avatar appearance, inventory, etc. |
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs index bb53601..b1f9197 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs | |||
@@ -138,7 +138,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests | |||
138 | m_attMod.RezSingleAttachmentFromInventory( | 138 | m_attMod.RezSingleAttachmentFromInventory( |
139 | m_presence.ControllingClient, attItemId, (uint)AttachmentPoint.Chest); | 139 | m_presence.ControllingClient, attItemId, (uint)AttachmentPoint.Chest); |
140 | 140 | ||
141 | // Check status on scene presence | 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.Attachments; |
144 | Assert.That(attachments.Count, Is.EqualTo(1)); | 144 | Assert.That(attachments.Count, Is.EqualTo(1)); |
@@ -149,12 +149,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests | |||
149 | Assert.That(attSo.UsesPhysics, Is.False); | 149 | Assert.That(attSo.UsesPhysics, Is.False); |
150 | Assert.That(attSo.IsTemporary, Is.False); | 150 | Assert.That(attSo.IsTemporary, Is.False); |
151 | 151 | ||
152 | // Check item status | 152 | // Check appearance status |
153 | Assert.That(m_presence.Appearance.GetAttachpoint(attItemId), Is.EqualTo((int)AttachmentPoint.Chest)); | 153 | Assert.That(m_presence.Appearance.GetAttachpoint(attItemId), Is.EqualTo((int)AttachmentPoint.Chest)); |
154 | } | 154 | } |
155 | 155 | ||
156 | [Test] | 156 | [Test] |
157 | public void TestDetachAttachmentToScene() | 157 | public void TestDetachAttachmentToGround() |
158 | { | 158 | { |
159 | TestHelpers.InMethod(); | 159 | TestHelpers.InMethod(); |
160 | // log4net.Config.XmlConfigurator.Configure(); | 160 | // log4net.Config.XmlConfigurator.Configure(); |
@@ -168,15 +168,21 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests | |||
168 | UserInventoryHelpers.CreateInventoryItem( | 168 | UserInventoryHelpers.CreateInventoryItem( |
169 | scene, attName, attItemId, attAssetId, m_presence.UUID, InventoryType.Object); | 169 | scene, attName, attItemId, attAssetId, m_presence.UUID, InventoryType.Object); |
170 | 170 | ||
171 | // Check item status | ||
172 | Assert.That(scene.InventoryService.GetItem(new InventoryItemBase(attItemId)), Is.Not.Null); | ||
173 | |||
171 | UUID attSoId = m_attMod.RezSingleAttachmentFromInventory( | 174 | UUID attSoId = m_attMod.RezSingleAttachmentFromInventory( |
172 | m_presence.ControllingClient, attItemId, (uint)AttachmentPoint.Chest); | 175 | m_presence.ControllingClient, attItemId, (uint)AttachmentPoint.Chest); |
173 | m_attMod.DetachSingleAttachmentToGround(attSoId, m_presence.ControllingClient); | 176 | m_attMod.DetachSingleAttachmentToGround(attSoId, m_presence.ControllingClient); |
174 | 177 | ||
175 | // Check status on scene presence | 178 | // Check scene presence status |
176 | Assert.That(m_presence.HasAttachments(), Is.False); | 179 | Assert.That(m_presence.HasAttachments(), Is.False); |
177 | List<SceneObjectGroup> attachments = m_presence.Attachments; | 180 | List<SceneObjectGroup> attachments = m_presence.Attachments; |
178 | Assert.That(attachments.Count, Is.EqualTo(0)); | 181 | Assert.That(attachments.Count, Is.EqualTo(0)); |
179 | 182 | ||
183 | // Check appearance status | ||
184 | Assert.That(m_presence.Appearance.GetAttachments().Count, Is.EqualTo(0)); | ||
185 | |||
180 | // Check item status | 186 | // Check item status |
181 | Assert.That(scene.InventoryService.GetItem(new InventoryItemBase(attItemId)), Is.Null); | 187 | Assert.That(scene.InventoryService.GetItem(new InventoryItemBase(attItemId)), Is.Null); |
182 | 188 | ||