diff --git a/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs b/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
index 6289f7aecb..59ce090a31 100644
--- a/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
+++ b/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
@@ -57,6 +57,15 @@ namespace OpenSim.Region.Framework.Interfaces
/// Link number for the part
void ResetInventoryIDs();
+ ///
+ /// Reset parent object UUID for all the items in the prim's inventory.
+ ///
+ ///
+ /// If this method is called and there are inventory items, then we regard the inventory as having changed.
+ ///
+ /// Link number for the part
+ void ResetObjectID();
+
///
/// Change every item in this inventory to a new owner.
///
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 142f5d8ee5..ab9cbd7643 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -696,6 +696,7 @@ namespace OpenSim.Region.Framework.Scenes
if (node.Attributes["UUID"] != null)
{
UUID itemid = new UUID(node.Attributes["UUID"].Value);
+ m_log.DebugFormat("[SCRIPT STATE]: Adding state for oldID {0}", itemid);
m_savedScriptState.Add(itemid, node.InnerXml);
}
}
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 5c4a2a3b47..40112c9ff4 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -514,7 +514,7 @@ namespace OpenSim.Region.Framework.Scenes
// This is necessary so that TaskInventoryItem parent ids correctly reference the new uuid of this part
if (Inventory != null)
- Inventory.ResetInventoryIDs();
+ Inventory.ResetObjectID();
}
}
@@ -2800,6 +2800,7 @@ namespace OpenSim.Region.Framework.Scenes
UUID = UUID.Random();
LinkNum = linkNum;
LocalId = 0;
+ Inventory.ResetInventoryIDs();
}
///
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
index a9a5c8a64e..b20550388a 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
@@ -148,6 +148,34 @@ namespace OpenSim.Region.Framework.Scenes
m_items.LockItemsForWrite(false);
}
+ public void ResetObjectID()
+ {
+ m_items.LockItemsForWrite(true);
+
+ if (Items.Count == 0)
+ {
+ m_items.LockItemsForWrite(false);
+ return;
+ }
+
+ HasInventoryChanged = true;
+ if (m_part.ParentGroup != null)
+ {
+ m_part.ParentGroup.HasGroupChanged = true;
+ }
+
+ IList items = new List(Items.Values);
+ Items.Clear();
+
+ foreach (TaskInventoryItem item in items)
+ {
+ item.ParentPartID = m_part.UUID;
+ item.ParentID = m_part.UUID;
+ Items.Add(item.ItemID, item);
+ }
+ m_items.LockItemsForWrite(false);
+ }
+
///
/// Change every item in this inventory to a new owner.
///