diff options
author | Justin Clark-Casey (justincc) | 2015-01-22 23:12:10 +0000 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2015-01-23 00:27:57 +0000 |
commit | d0a2ea0857c1342a42db31bce282c62c88c57e55 (patch) | |
tree | b727ce53574216d12cc6549e74982ce5de850654 /OpenSim/Region/Framework/Scenes | |
parent | Merge branch 'master' of ssh://opensimulator.org/var/git/opensim (diff) | |
download | opensim-SC-d0a2ea0857c1342a42db31bce282c62c88c57e55.zip opensim-SC-d0a2ea0857c1342a42db31bce282c62c88c57e55.tar.gz opensim-SC-d0a2ea0857c1342a42db31bce282c62c88c57e55.tar.bz2 opensim-SC-d0a2ea0857c1342a42db31bce282c62c88c57e55.tar.xz |
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
Diffstat (limited to 'OpenSim/Region/Framework/Scenes')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | 34 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs | 8 |
2 files changed, 28 insertions, 14 deletions
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 | |||
911 | 911 | ||
912 | public void LoadScriptState(XmlReader reader) | 912 | public void LoadScriptState(XmlReader reader) |
913 | { | 913 | { |
914 | // m_log.DebugFormat("[SCENE OBJECT GROUP]: Looking for script state for {0} in {1}", Name); | 914 | // m_log.DebugFormat("[SCENE OBJECT GROUP]: Looking for script state for {0}", Name); |
915 | 915 | ||
916 | while (reader.ReadToFollowing("SavedScriptState")) | 916 | while (true) |
917 | { | 917 | { |
918 | // m_log.DebugFormat("[SCENE OBJECT GROUP]: Loading script state for {0}", Name); | 918 | if (reader.Name == "SavedScriptState" && reader.NodeType == XmlNodeType.Element) |
919 | { | ||
920 | // m_log.DebugFormat("[SCENE OBJECT GROUP]: Loading script state for {0}", Name); | ||
919 | 921 | ||
920 | if (m_savedScriptState == null) | 922 | if (m_savedScriptState == null) |
921 | m_savedScriptState = new Dictionary<UUID, string>(); | 923 | m_savedScriptState = new Dictionary<UUID, string>(); |
922 | 924 | ||
923 | string uuid = reader.GetAttribute("UUID"); | 925 | string uuid = reader.GetAttribute("UUID"); |
924 | 926 | ||
925 | if (uuid != null) | 927 | if (uuid != null) |
926 | { | 928 | { |
927 | // m_log.DebugFormat("[SCENE OBJECT GROUP]: Found state for item ID {0} in object {1}", uuid, Name); | 929 | // m_log.DebugFormat("[SCENE OBJECT GROUP]: Found state for item ID {0} in object {1}", uuid, Name); |
928 | 930 | ||
929 | UUID itemid = new UUID(uuid); | 931 | UUID itemid = new UUID(uuid); |
930 | if (itemid != UUID.Zero) | 932 | if (itemid != UUID.Zero) |
931 | m_savedScriptState[itemid] = reader.ReadInnerXml(); | 933 | m_savedScriptState[itemid] = reader.ReadInnerXml(); |
934 | } | ||
935 | else | ||
936 | { | ||
937 | m_log.WarnFormat("[SCENE OBJECT GROUP]: SavedScriptState element had no UUID in object {0}", Name); | ||
938 | } | ||
932 | } | 939 | } |
933 | else | 940 | else |
934 | { | 941 | { |
935 | m_log.WarnFormat("[SCENE OBJECT GROUP]: SavedScriptState element had no UUID in object {0}", Name); | 942 | if (!reader.Read()) |
943 | break; | ||
936 | } | 944 | } |
937 | } | 945 | } |
938 | } | 946 | } |
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 | |||
400 | 400 | ||
401 | private UUID RestoreSavedScriptState(UUID loadedID, UUID oldID, UUID newID) | 401 | private UUID RestoreSavedScriptState(UUID loadedID, UUID oldID, UUID newID) |
402 | { | 402 | { |
403 | // m_log.DebugFormat( | ||
404 | // "[PRIM INVENTORY]: Restoring scripted state for item {0}, oldID {1}, loadedID {2}", | ||
405 | // newID, oldID, loadedID); | ||
406 | |||
403 | IScriptModule[] engines = m_part.ParentGroup.Scene.RequestModuleInterfaces<IScriptModule>(); | 407 | IScriptModule[] engines = m_part.ParentGroup.Scene.RequestModuleInterfaces<IScriptModule>(); |
404 | if (engines.Length == 0) // No engine at all | 408 | if (engines.Length == 0) // No engine at all |
405 | return oldID; | 409 | return oldID; |
@@ -412,7 +416,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
412 | XmlDocument doc = new XmlDocument(); | 416 | XmlDocument doc = new XmlDocument(); |
413 | 417 | ||
414 | doc.LoadXml(m_part.ParentGroup.m_savedScriptState[stateID]); | 418 | doc.LoadXml(m_part.ParentGroup.m_savedScriptState[stateID]); |
415 | 419 | ||
416 | ////////// CRUFT WARNING /////////////////////////////////// | 420 | ////////// CRUFT WARNING /////////////////////////////////// |
417 | // | 421 | // |
418 | // Old objects will have <ScriptState><State> ... | 422 | // Old objects will have <ScriptState><State> ... |
@@ -442,6 +446,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
442 | // This created document has only the minimun data | 446 | // This created document has only the minimun data |
443 | // necessary for XEngine to parse it successfully | 447 | // necessary for XEngine to parse it successfully |
444 | 448 | ||
449 | // m_log.DebugFormat("[PRIM INVENTORY]: Adding legacy state {0} in {1}", stateID, newID); | ||
450 | |||
445 | m_part.ParentGroup.m_savedScriptState[stateID] = newDoc.OuterXml; | 451 | m_part.ParentGroup.m_savedScriptState[stateID] = newDoc.OuterXml; |
446 | } | 452 | } |
447 | 453 | ||