Mantis#1659. Thank you, Melanie for a patch that:
In LSL, the state command should have an immediate effect. The OpenSim script engine seems to wait until the function ends to process the state transition.0.6.0-stable
parent
cf87a9c5fe
commit
ce5122ebf3
|
@ -99,6 +99,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
public void state(string newState)
|
public void state(string newState)
|
||||||
{
|
{
|
||||||
m_ScriptEngine.SetState(m_itemID, newState);
|
m_ScriptEngine.SetState(m_itemID, newState);
|
||||||
|
throw new EventAbortException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void llSay(int channelID, string text)
|
public void llSay(int channelID, string text)
|
||||||
|
@ -2791,6 +2792,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
m_ScriptEngine.ApiResetScript(m_itemID);
|
m_ScriptEngine.ApiResetScript(m_itemID);
|
||||||
|
throw new EventAbortException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void llMessageLinked(int linknum, int num, string msg, string id)
|
public void llMessageLinked(int linknum, int num, string msg, string id)
|
||||||
|
|
|
@ -30,6 +30,7 @@ using System.IO;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Runtime.Serialization;
|
||||||
using libsecondlife;
|
using libsecondlife;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
using OpenSim.Region.Environment;
|
using OpenSim.Region.Environment;
|
||||||
|
@ -37,6 +38,20 @@ using OpenSim.Region.Environment.Scenes;
|
||||||
|
|
||||||
namespace OpenSim.Region.ScriptEngine.Shared
|
namespace OpenSim.Region.ScriptEngine.Shared
|
||||||
{
|
{
|
||||||
|
[Serializable]
|
||||||
|
public class EventAbortException : Exception
|
||||||
|
{
|
||||||
|
public EventAbortException()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected EventAbortException(
|
||||||
|
SerializationInfo info,
|
||||||
|
StreamingContext context)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public class DetectParams
|
public class DetectParams
|
||||||
{
|
{
|
||||||
public DetectParams()
|
public DetectParams()
|
||||||
|
|
|
@ -1296,44 +1296,49 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_InEvent = false;
|
m_InEvent = false;
|
||||||
if (e is System.Threading.ThreadAbortException)
|
m_CurrentEvent = String.Empty;
|
||||||
|
|
||||||
|
if (!(e is TargetInvocationException) || !(e.InnerException is EventAbortException))
|
||||||
{
|
{
|
||||||
lock (m_EventQueue)
|
if (e is System.Threading.ThreadAbortException)
|
||||||
{
|
{
|
||||||
if ((m_EventQueue.Count > 0) && m_RunEvents)
|
lock (m_EventQueue)
|
||||||
{
|
{
|
||||||
m_CurrentResult=m_Engine.QueueEventHandler(this);
|
if ((m_EventQueue.Count > 0) && m_RunEvents)
|
||||||
}
|
{
|
||||||
else
|
m_CurrentResult=m_Engine.QueueEventHandler(this);
|
||||||
{
|
}
|
||||||
m_CurrentResult = null;
|
else
|
||||||
|
{
|
||||||
|
m_CurrentResult = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_DetectParams = null;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_DetectParams = null;
|
try
|
||||||
|
{
|
||||||
return 0;
|
// DISPLAY ERROR INWORLD
|
||||||
}
|
string text = "Runtime error:\n" + e.ToString();
|
||||||
|
if (text.Length > 1400)
|
||||||
try
|
text = text.Substring(0, 1400);
|
||||||
{
|
m_Engine.World.SimChat(Helpers.StringToField(text),
|
||||||
// DISPLAY ERROR INWORLD
|
ChatTypeEnum.DebugChannel, 2147483647,
|
||||||
string text = "Runtime error:\n" + e.ToString();
|
part.AbsolutePosition,
|
||||||
if (text.Length > 1400)
|
part.Name, part.UUID, false);
|
||||||
text = text.Substring(0, 1400);
|
}
|
||||||
m_Engine.World.SimChat(Helpers.StringToField(text),
|
catch (Exception e2) // LEGIT: User Scripting
|
||||||
ChatTypeEnum.DebugChannel, 2147483647,
|
{
|
||||||
part.AbsolutePosition,
|
m_Engine.Log.Error("[XEngine]: "+
|
||||||
part.Name, part.UUID, false);
|
"Error displaying error in-world: " +
|
||||||
}
|
e2.ToString());
|
||||||
catch (Exception e2) // LEGIT: User Scripting
|
m_Engine.Log.Error("[XEngine]: " +
|
||||||
{
|
"Errormessage: Error compiling script:\r\n" +
|
||||||
m_Engine.Log.Error("[XEngine]: "+
|
e.ToString());
|
||||||
"Error displaying error in-world: " +
|
}
|
||||||
e2.ToString());
|
|
||||||
m_Engine.Log.Error("[XEngine]: " +
|
|
||||||
"Errormessage: Error compiling script:\r\n" +
|
|
||||||
e.ToString());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue