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
sedebug
Justin Clark-Casey (justincc) 2015-01-22 23:12:10 +00:00
parent 42644e3b84
commit 08d3452092
4 changed files with 37 additions and 17 deletions

View File

@ -297,6 +297,10 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
{
if (item != null && item.Owner == ownerID && asset != null)
{
// m_log.DebugFormat(
// "[INVENTORY ACCESS MODULE]: Updating item {0} {1} with new asset {2}",
// item.Name, item.ID, asset.ID);
item.AssetID = asset.FullID;
item.Description = asset.Description;
item.Name = asset.Name;
@ -314,7 +318,6 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
(item == null || asset == null? "null item or asset" : "wrong owner"));
return false;
}
}
public virtual List<InventoryItemBase> CopyToInventory(

View File

@ -911,9 +911,11 @@ 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)
{
if (reader.Name == "SavedScriptState" && reader.NodeType == XmlNodeType.Element)
{
// m_log.DebugFormat("[SCENE OBJECT GROUP]: Loading script state for {0}", Name);
@ -935,6 +937,12 @@ namespace OpenSim.Region.Framework.Scenes
m_log.WarnFormat("[SCENE OBJECT GROUP]: SavedScriptState element had no UUID in object {0}", Name);
}
}
else
{
if (!reader.Read())
break;
}
}
}
/// <summary>

View File

@ -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<IScriptModule>();
if (engines.Length == 0) // No engine at all
return oldID;
@ -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;
}

View File

@ -1040,6 +1040,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
public void SetVars(Dictionary<string, object> vars)
{
// foreach (KeyValuePair<string, object> kvp in vars)
// m_log.DebugFormat("[SCRIPT INSTANCE]: Setting var {0}={1}", kvp.Key, kvp.Value);
m_Script.SetVars(vars);
}