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)
|
||||
{
|
||||
m_ScriptEngine.SetState(m_itemID, newState);
|
||||
throw new EventAbortException();
|
||||
}
|
||||
|
||||
public void llSay(int channelID, string text)
|
||||
|
@ -2791,6 +2792,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
m_ScriptEngine.ApiResetScript(m_itemID);
|
||||
throw new EventAbortException();
|
||||
}
|
||||
|
||||
public void llMessageLinked(int linknum, int num, string msg, string id)
|
||||
|
|
|
@ -30,6 +30,7 @@ using System.IO;
|
|||
using System.Threading;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.Serialization;
|
||||
using libsecondlife;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Region.Environment;
|
||||
|
@ -37,6 +38,20 @@ using OpenSim.Region.Environment.Scenes;
|
|||
|
||||
namespace OpenSim.Region.ScriptEngine.Shared
|
||||
{
|
||||
[Serializable]
|
||||
public class EventAbortException : Exception
|
||||
{
|
||||
public EventAbortException()
|
||||
{
|
||||
}
|
||||
|
||||
protected EventAbortException(
|
||||
SerializationInfo info,
|
||||
StreamingContext context)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class DetectParams
|
||||
{
|
||||
public DetectParams()
|
||||
|
|
|
@ -1296,44 +1296,49 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
|||
catch (Exception e)
|
||||
{
|
||||
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);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_CurrentResult = null;
|
||||
if ((m_EventQueue.Count > 0) && m_RunEvents)
|
||||
{
|
||||
m_CurrentResult=m_Engine.QueueEventHandler(this);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_CurrentResult = null;
|
||||
}
|
||||
}
|
||||
|
||||
m_DetectParams = null;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
m_DetectParams = null;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// DISPLAY ERROR INWORLD
|
||||
string text = "Runtime error:\n" + e.ToString();
|
||||
if (text.Length > 1400)
|
||||
text = text.Substring(0, 1400);
|
||||
m_Engine.World.SimChat(Helpers.StringToField(text),
|
||||
ChatTypeEnum.DebugChannel, 2147483647,
|
||||
part.AbsolutePosition,
|
||||
part.Name, part.UUID, false);
|
||||
}
|
||||
catch (Exception e2) // LEGIT: User Scripting
|
||||
{
|
||||
m_Engine.Log.Error("[XEngine]: "+
|
||||
"Error displaying error in-world: " +
|
||||
e2.ToString());
|
||||
m_Engine.Log.Error("[XEngine]: " +
|
||||
"Errormessage: Error compiling script:\r\n" +
|
||||
e.ToString());
|
||||
try
|
||||
{
|
||||
// DISPLAY ERROR INWORLD
|
||||
string text = "Runtime error:\n" + e.ToString();
|
||||
if (text.Length > 1400)
|
||||
text = text.Substring(0, 1400);
|
||||
m_Engine.World.SimChat(Helpers.StringToField(text),
|
||||
ChatTypeEnum.DebugChannel, 2147483647,
|
||||
part.AbsolutePosition,
|
||||
part.Name, part.UUID, false);
|
||||
}
|
||||
catch (Exception e2) // LEGIT: User Scripting
|
||||
{
|
||||
m_Engine.Log.Error("[XEngine]: "+
|
||||
"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