Fix script "Running" behavior

Unchecking "Running" box in script editor now persists. This fixes http://opensimulator.org/mantis/view.php?id=6057
0.7.4.1
BlueWall 2012-06-23 04:11:31 -04:00
parent 78143769bf
commit 6d3ee8bb39
6 changed files with 53 additions and 0 deletions

View File

@ -75,6 +75,8 @@ namespace OpenSim.Region.Framework.Interfaces
/// <param name="itemID">The item ID of the script.</param> /// <param name="itemID">The item ID of the script.</param>
bool GetScriptState(UUID itemID); bool GetScriptState(UUID itemID);
void SetRunEnable(UUID instanceID, bool enable);
void SaveAllState(); void SaveAllState();
/// <summary> /// <summary>

View File

@ -2143,11 +2143,25 @@ namespace OpenSim.Region.Framework.Scenes
if (part == null) if (part == null)
return; return;
IScriptModule[] engines = RequestModuleInterfaces<IScriptModule>();
if (running) if (running)
{
foreach (IScriptModule engine in engines)
{
engine.SetRunEnable(itemID, true);
}
EventManager.TriggerStartScript(part.LocalId, itemID); EventManager.TriggerStartScript(part.LocalId, itemID);
}
else else
{
foreach (IScriptModule engine in engines)
{
engine.SetRunEnable(itemID, false);
}
EventManager.TriggerStopScript(part.LocalId, itemID); EventManager.TriggerStopScript(part.LocalId, itemID);
} }
}
public void GetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID) public void GetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID)
{ {

View File

@ -63,6 +63,16 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
/// </summary> /// </summary>
bool Running { get; set; } bool Running { get; set; }
/// <summary>
/// Gets or sets a value indicating whether this
/// <see cref="OpenSim.Region.ScriptEngine.Interfaces.IScriptInstance"/> is run.
/// For viewer script editor control
/// </summary>
/// <value>
/// <c>true</c> if run; otherwise, <c>false</c>.
/// </value>
bool Run { get; set; }
/// <summary> /// <summary>
/// Is the script suspended? /// Is the script suspended?
/// </summary> /// </summary>

View File

@ -120,6 +120,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
public bool Running { get; set; } public bool Running { get; set; }
public bool Run { get; set; }
public bool Suspended public bool Suspended
{ {
get { return m_Suspended; } get { return m_Suspended; }
@ -215,6 +217,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
m_postOnRez = postOnRez; m_postOnRez = postOnRez;
m_AttachedAvatar = part.ParentGroup.AttachedAvatar; m_AttachedAvatar = part.ParentGroup.AttachedAvatar;
m_RegionID = part.ParentGroup.Scene.RegionInfo.RegionID; m_RegionID = part.ParentGroup.Scene.RegionInfo.RegionID;
Run = true;
if (part != null) if (part != null)
{ {
@ -359,6 +362,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
if (m_startedFromSavedState) if (m_startedFromSavedState)
{ {
if (!Run)
return;
Start(); Start();
if (m_postOnRez) if (m_postOnRez)
{ {
@ -391,6 +397,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
} }
else else
{ {
if (!Run)
return;
Start(); Start();
PostEvent(new EventParams("state_entry", PostEvent(new EventParams("state_entry",
new Object[0], new DetectParams[0])); new Object[0], new DetectParams[0]));

View File

@ -55,6 +55,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
public static string Serialize(ScriptInstance instance) public static string Serialize(ScriptInstance instance)
{ {
bool running = instance.Running; bool running = instance.Running;
bool enabled = instance.Run;
XmlDocument xmldoc = new XmlDocument(); XmlDocument xmldoc = new XmlDocument();
@ -77,6 +78,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
rootElement.AppendChild(run); rootElement.AppendChild(run);
XmlElement run_enable = xmldoc.CreateElement("", "Run", "");
run_enable.AppendChild(xmldoc.CreateTextNode(
enabled.ToString()));
rootElement.AppendChild(run_enable);
Dictionary<string, Object> vars = instance.GetVars(); Dictionary<string, Object> vars = instance.GetVars();
XmlElement variables = xmldoc.CreateElement("", "Variables", ""); XmlElement variables = xmldoc.CreateElement("", "Variables", "");
@ -225,6 +232,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
{ {
object varValue; object varValue;
XmlNodeList partL = rootNode.ChildNodes; XmlNodeList partL = rootNode.ChildNodes;
instance.Run = true;
foreach (XmlNode part in partL) foreach (XmlNode part in partL)
{ {
@ -236,6 +244,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
case "Running": case "Running":
instance.Running=bool.Parse(part.InnerText); instance.Running=bool.Parse(part.InnerText);
break; break;
case "Run":
instance.Run = bool.Parse(part.InnerText);
break;
case "Variables": case "Variables":
XmlNodeList varL = part.ChildNodes; XmlNodeList varL = part.ChildNodes;
foreach (XmlNode var in varL) foreach (XmlNode var in varL)

View File

@ -1503,6 +1503,13 @@ namespace OpenSim.Region.ScriptEngine.XEngine
} }
} }
public void SetRunEnable(UUID instanceID, bool enable)
{
IScriptInstance instance = GetInstance(instanceID);
if (instance != null)
instance.Run = enable;
}
public bool GetScriptState(UUID itemID) public bool GetScriptState(UUID itemID)
{ {
IScriptInstance instance = GetInstance(itemID); IScriptInstance instance = GetInstance(itemID);