public void SaveStateTo(ScriptData script, bool forced, bool saveBackup) { if (!forced) { if (script.Script == null) return; //If it didn't compile correctly, this happens if (!script.Script.NeedsStateSaved) return; //If it doesn't need a state save, don't save one } if (script.Script != null) script.Script.NeedsStateSaved = false; StateSave stateSave = new StateSave { State = script.State, ItemID = script.ItemID, Running = script.Running, MinEventDelay = script.EventDelayTicks, Disabled = script.Disabled, UserInventoryID = script.UserInventoryItemID, AssemblyName = script.AssemblyName, Compiled = script.Compiled, Source = script.Source == null ? "" : script.Source }; //Allow for the full path to be put down, not just the assembly name itself if (script.InventoryItem != null) { stateSave.PermsGranter = script.InventoryItem.PermsGranter; stateSave.PermsMask = script.InventoryItem.PermsMask; } else { stateSave.PermsGranter = UUID.Zero; stateSave.PermsMask = 0; } stateSave.TargetOmegaWasSet = script.TargetOmegaWasSet; //Vars Dictionary<string, object> vars = new Dictionary<string, object>(); if (script.Script != null) vars = script.Script.GetStoreVars(); stateSave.Variables = XMLUtils.BuildXmlResponse(vars); //Plugins stateSave.Plugins = OSDParser.SerializeJsonString(m_module.GetSerializationData(script.ItemID, script.Part.UUID)); lock (StateSaveLock) script.Part.StateSaves[script.ItemID] = stateSave; if (saveBackup) script.Part.ParentEntity.HasGroupChanged = true; }
public void Deserialize(ScriptData instance, StateSave save) { instance.State = save.State; instance.Running = save.Running; instance.EventDelayTicks = (long) save.MinEventDelay; instance.AssemblyName = save.AssemblyName; instance.Disabled = save.Disabled; instance.UserInventoryItemID = save.UserInventoryID; if (save.Plugins != "") instance.PluginData = (OSDMap) OSDParser.DeserializeJson(save.Plugins); m_module.CreateFromData(instance.Part.UUID, instance.ItemID, instance.Part.UUID, instance.PluginData); instance.Source = save.Source; instance.InventoryItem.PermsGranter = save.PermsGranter; instance.InventoryItem.PermsMask = save.PermsMask; instance.TargetOmegaWasSet = save.TargetOmegaWasSet; if (save.Variables != null && instance.Script != null) instance.Script.SetStoreVars(XMLUtils.ParseXmlResponse(save.Variables)); }