parent
f6f3737fe8
commit
2864c45678
|
@ -168,6 +168,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
||||||
|
|
||||||
private ScriptEngine lastScriptEngine;
|
private ScriptEngine lastScriptEngine;
|
||||||
private uint lastLocalID;
|
private uint lastLocalID;
|
||||||
|
private UUID lastItemID;
|
||||||
|
|
||||||
// Queue processing thread loop
|
// Queue processing thread loop
|
||||||
private void EventQueueThreadLoop()
|
private void EventQueueThreadLoop()
|
||||||
|
@ -201,6 +202,14 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
||||||
lastScriptEngine.World.DeleteSceneObject(
|
lastScriptEngine.World.DeleteSceneObject(
|
||||||
part.ParentGroup, false);
|
part.ParentGroup, false);
|
||||||
}
|
}
|
||||||
|
catch (ScriptDeleteException) // Must delete item
|
||||||
|
{
|
||||||
|
SceneObjectPart part =
|
||||||
|
lastScriptEngine.World.GetSceneObjectPart(
|
||||||
|
lastLocalID);
|
||||||
|
if (part != null && part.ParentGroup != null)
|
||||||
|
part.Inventory.RemoveInventoryItem(lastItemID);
|
||||||
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[{0}]: Exception {1} thrown", ScriptEngineName, e.GetType().ToString());
|
m_log.ErrorFormat("[{0}]: Exception {1} thrown", ScriptEngineName, e.GetType().ToString());
|
||||||
|
@ -284,6 +293,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
||||||
QIS.localID))
|
QIS.localID))
|
||||||
{
|
{
|
||||||
lastLocalID = QIS.localID;
|
lastLocalID = QIS.localID;
|
||||||
|
lastItemID = QIS.itemID;
|
||||||
LastExecutionStarted = DateTime.Now.Ticks;
|
LastExecutionStarted = DateTime.Now.Ticks;
|
||||||
KillCurrentScript = false;
|
KillCurrentScript = false;
|
||||||
InExecution = true;
|
InExecution = true;
|
||||||
|
|
|
@ -3577,7 +3577,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
if (item.Name == name)
|
if (item.Name == name)
|
||||||
{
|
{
|
||||||
m_host.Inventory.RemoveInventoryItem(item.ItemID);
|
if (item.ItemID == m_itemID)
|
||||||
|
throw new ScriptDeleteException();
|
||||||
|
else
|
||||||
|
m_host.Inventory.RemoveInventoryItem(item.ItemID);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,6 +66,20 @@ namespace OpenSim.Region.ScriptEngine.Shared
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Serializable]
|
||||||
|
public class ScriptDeleteException : Exception
|
||||||
|
{
|
||||||
|
public ScriptDeleteException()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ScriptDeleteException(
|
||||||
|
SerializationInfo info,
|
||||||
|
StreamingContext context)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public class DetectParams
|
public class DetectParams
|
||||||
{
|
{
|
||||||
public DetectParams()
|
public DetectParams()
|
||||||
|
|
|
@ -707,11 +707,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[Script] Exception: {0}", e.Message);
|
// m_log.DebugFormat("[SCRIPT] Exception: {0}", e.Message);
|
||||||
m_InEvent = false;
|
m_InEvent = false;
|
||||||
m_CurrentEvent = String.Empty;
|
m_CurrentEvent = String.Empty;
|
||||||
|
|
||||||
if ((!(e is TargetInvocationException) || !(e.InnerException is SelfDeleteException)) && (!(e is ThreadAbortException)))
|
if ((!(e is TargetInvocationException) || (!(e.InnerException is SelfDeleteException) && !(e.InnerException is ScriptDeleteException))) && !(e is ThreadAbortException))
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -727,10 +727,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
||||||
}
|
}
|
||||||
catch (Exception e2) // LEGIT: User Scripting
|
catch (Exception e2) // LEGIT: User Scripting
|
||||||
{
|
{
|
||||||
m_log.Error("[Script]: "+
|
m_log.Error("[SCRIPT]: "+
|
||||||
"Error displaying error in-world: " +
|
"Error displaying error in-world: " +
|
||||||
e2.ToString());
|
e2.ToString());
|
||||||
m_log.Error("[Script]: " +
|
m_log.Error("[SCRIPT]: " +
|
||||||
"Errormessage: Error compiling script:\r\n" +
|
"Errormessage: Error compiling script:\r\n" +
|
||||||
e.ToString());
|
e.ToString());
|
||||||
}
|
}
|
||||||
|
@ -741,6 +741,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
||||||
if (part != null && part.ParentGroup != null)
|
if (part != null && part.ParentGroup != null)
|
||||||
m_Engine.World.DeleteSceneObject(part.ParentGroup, false);
|
m_Engine.World.DeleteSceneObject(part.ParentGroup, false);
|
||||||
}
|
}
|
||||||
|
else if ((e is TargetInvocationException) && (e.InnerException is ScriptDeleteException))
|
||||||
|
{
|
||||||
|
m_InSelfDelete = true;
|
||||||
|
if (part != null && part.ParentGroup != null)
|
||||||
|
part.Inventory.RemoveInventoryItem(m_ItemID);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue