From d0a2ea0857c1342a42db31bce282c62c88c57e55 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Thu, 22 Jan 2015 23:12:10 +0000 Subject: Fix regression where the stored state of every second script in an object rezzed from inventory (e.g. attachments) was no longer loaded. Likely a regression since f132f642 (2014-08-28) Relates to http://opensimulator.org/mantis/view.php?id=7278 --- .../Region/Framework/Scenes/SceneObjectGroup.cs | 34 +++++++++++++--------- .../Framework/Scenes/SceneObjectPartInventory.cs | 8 ++++- 2 files changed, 28 insertions(+), 14 deletions(-) (limited to 'OpenSim/Region/Framework') diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index ec37836..19e557f 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs @@ -911,28 +911,36 @@ namespace OpenSim.Region.Framework.Scenes public void LoadScriptState(XmlReader reader) { -// m_log.DebugFormat("[SCENE OBJECT GROUP]: Looking for script state for {0} in {1}", Name); +// m_log.DebugFormat("[SCENE OBJECT GROUP]: Looking for script state for {0}", Name); - while (reader.ReadToFollowing("SavedScriptState")) + while (true) { -// m_log.DebugFormat("[SCENE OBJECT GROUP]: Loading script state for {0}", Name); + if (reader.Name == "SavedScriptState" && reader.NodeType == XmlNodeType.Element) + { +// m_log.DebugFormat("[SCENE OBJECT GROUP]: Loading script state for {0}", Name); - if (m_savedScriptState == null) - m_savedScriptState = new Dictionary(); + if (m_savedScriptState == null) + m_savedScriptState = new Dictionary(); - string uuid = reader.GetAttribute("UUID"); + string uuid = reader.GetAttribute("UUID"); - if (uuid != null) - { -// m_log.DebugFormat("[SCENE OBJECT GROUP]: Found state for item ID {0} in object {1}", uuid, Name); + if (uuid != null) + { +// m_log.DebugFormat("[SCENE OBJECT GROUP]: Found state for item ID {0} in object {1}", uuid, Name); - UUID itemid = new UUID(uuid); - if (itemid != UUID.Zero) - m_savedScriptState[itemid] = reader.ReadInnerXml(); + UUID itemid = new UUID(uuid); + if (itemid != UUID.Zero) + m_savedScriptState[itemid] = reader.ReadInnerXml(); + } + else + { + m_log.WarnFormat("[SCENE OBJECT GROUP]: SavedScriptState element had no UUID in object {0}", Name); + } } else { - m_log.WarnFormat("[SCENE OBJECT GROUP]: SavedScriptState element had no UUID in object {0}", Name); + if (!reader.Read()) + break; } } } diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs index 578909c..ec39726 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs @@ -400,6 +400,10 @@ namespace OpenSim.Region.Framework.Scenes private UUID RestoreSavedScriptState(UUID loadedID, UUID oldID, UUID newID) { +// m_log.DebugFormat( +// "[PRIM INVENTORY]: Restoring scripted state for item {0}, oldID {1}, loadedID {2}", +// newID, oldID, loadedID); + IScriptModule[] engines = m_part.ParentGroup.Scene.RequestModuleInterfaces(); if (engines.Length == 0) // No engine at all return oldID; @@ -412,7 +416,7 @@ namespace OpenSim.Region.Framework.Scenes XmlDocument doc = new XmlDocument(); doc.LoadXml(m_part.ParentGroup.m_savedScriptState[stateID]); - + ////////// CRUFT WARNING /////////////////////////////////// // // Old objects will have ... @@ -442,6 +446,8 @@ namespace OpenSim.Region.Framework.Scenes // This created document has only the minimun data // necessary for XEngine to parse it successfully +// m_log.DebugFormat("[PRIM INVENTORY]: Adding legacy state {0} in {1}", stateID, newID); + m_part.ParentGroup.m_savedScriptState[stateID] = newDoc.OuterXml; } -- cgit v1.1