aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2011-08-30 22:06:24 +0100
committerJustin Clark-Casey (justincc)2011-08-30 22:06:24 +0100
commite7a515bab0e46c228f8f543397f97b7ba2f0df3c (patch)
tree9c5bd0f2aea3f59b5a8b82da74b336f78f74c17e
parentMerge branch 'master' into bulletsim (diff)
downloadopensim-SC-e7a515bab0e46c228f8f543397f97b7ba2f0df3c.zip
opensim-SC-e7a515bab0e46c228f8f543397f97b7ba2f0df3c.tar.gz
opensim-SC-e7a515bab0e46c228f8f543397f97b7ba2f0df3c.tar.bz2
opensim-SC-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 '')
-rw-r--r--OpenSim/Framework/AvatarAppearance.cs7
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs12
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs14
3 files changed, 25 insertions, 8 deletions
diff --git a/OpenSim/Framework/AvatarAppearance.cs b/OpenSim/Framework/AvatarAppearance.cs
index ab4ed66..7c6295d 100644
--- a/OpenSim/Framework/AvatarAppearance.cs
+++ b/OpenSim/Framework/AvatarAppearance.cs
@@ -383,9 +383,11 @@ namespace OpenSim.Framework
383// DEBUG OFF 383// DEBUG OFF
384 384
385 /// <summary> 385 /// <summary>
386 /// Get a list of the attachments, note that there may be 386 /// Get a list of the attachments.
387 /// duplicate attachpoints
388 /// </summary> 387 /// </summary>
388 /// <remarks>
389 /// There may be duplicate attachpoints
390 /// </remarks>
389 public List<AvatarAttachment> GetAttachments() 391 public List<AvatarAttachment> GetAttachments()
390 { 392 {
391 List<AvatarAttachment> alist = new List<AvatarAttachment>(); 393 List<AvatarAttachment> alist = new List<AvatarAttachment>();
@@ -487,6 +489,7 @@ namespace OpenSim.Framework
487 // And remove the list if there are no more attachments here 489 // And remove the list if there are no more attachments here
488 if (m_attachments[kvp.Key].Count == 0) 490 if (m_attachments[kvp.Key].Count == 0)
489 m_attachments.Remove(kvp.Key); 491 m_attachments.Remove(kvp.Key);
492
490 return true; 493 return true;
491 } 494 }
492 } 495 }
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