diff --git a/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs b/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
index 2b90960936..fd43923cb3 100644
--- a/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
+++ b/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
@@ -161,6 +161,7 @@ namespace OpenSim.Region.Framework.Interfaces
/// in this prim's inventory.
/// false if the item did not exist, true if the update occurred successfully
bool UpdateInventoryItem(TaskInventoryItem item);
+ bool UpdateInventoryItem(TaskInventoryItem item, bool fireScriptEvents);
///
/// Remove an item from this entity's inventory
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
index 3b1b567557..44c49c58e4 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
@@ -609,30 +609,37 @@ namespace OpenSim.Region.Framework.Scenes
/// false if the item did not exist, true if the update occurred successfully
public bool UpdateInventoryItem(TaskInventoryItem item)
{
- lock (m_items)
+ return UpdateInventoryItem(item, true);
+ }
+
+ public bool UpdateInventoryItem(TaskInventoryItem item, bool fireScriptEvents)
+ {
+ lock(m_items)
{
if (m_items.ContainsKey(item.ItemID))
{
- item.ParentID = m_part.UUID;
- item.ParentPartID = m_part.UUID;
- item.Flags = m_items[item.ItemID].Flags;
-
- // If group permissions have been set on, check that the groupID is up to date in case it has
- // changed since permissions were last set.
- if (item.GroupPermissions != (uint)PermissionMask.None)
- item.GroupID = m_part.GroupID;
-
- if (item.AssetID == UUID.Zero)
+ if (m_items.ContainsKey(item.ItemID))
{
- item.AssetID = m_items[item.ItemID].AssetID;
- }
+ item.ParentID = m_part.UUID;
+ item.ParentPartID = m_part.UUID;
+ item.Flags = m_items[item.ItemID].Flags;
+ // If group permissions have been set on, check that the groupID is up to date in case it has
+ // changed since permissions were last set.
+ if (item.GroupPermissions != (uint)PermissionMask.None)
+ item.GroupID = m_part.GroupID;
+
+ if (item.AssetID == UUID.Zero)
+ {
+ item.AssetID = m_items[item.ItemID].AssetID;
+ }
m_items[item.ItemID] = item;
m_inventorySerial++;
- m_part.TriggerScriptChangedEvent(Changed.INVENTORY);
+ if (fireScriptEvents)
+ m_part.TriggerScriptChangedEvent(Changed.INVENTORY);
HasInventoryChanged = true;
m_part.ParentGroup.HasGroupChanged = true;
-
+ m_items.LockItemsForWrite(false);
return true;
}
else
@@ -643,9 +650,9 @@ namespace OpenSim.Region.Framework.Scenes
item.ItemID, m_part.Name, m_part.UUID,
m_part.AbsolutePosition, m_part.ParentGroup.Scene.RegionInfo.RegionName);
}
- }
- return false;
+ return false;
+ }
}
///