parent
f6f3737fe8
commit
2864c45678
|
@ -168,6 +168,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
|||
|
||||
private ScriptEngine lastScriptEngine;
|
||||
private uint lastLocalID;
|
||||
private UUID lastItemID;
|
||||
|
||||
// Queue processing thread loop
|
||||
private void EventQueueThreadLoop()
|
||||
|
@ -201,6 +202,14 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
|||
lastScriptEngine.World.DeleteSceneObject(
|
||||
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)
|
||||
{
|
||||
m_log.ErrorFormat("[{0}]: Exception {1} thrown", ScriptEngineName, e.GetType().ToString());
|
||||
|
@ -284,6 +293,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
|||
QIS.localID))
|
||||
{
|
||||
lastLocalID = QIS.localID;
|
||||
lastItemID = QIS.itemID;
|
||||
LastExecutionStarted = DateTime.Now.Ticks;
|
||||
KillCurrentScript = false;
|
||||
InExecution = true;
|
||||
|
|
|
@ -3577,6 +3577,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
{
|
||||
if (item.Name == name)
|
||||
{
|
||||
if (item.ItemID == m_itemID)
|
||||
throw new ScriptDeleteException();
|
||||
else
|
||||
m_host.Inventory.RemoveInventoryItem(item.ItemID);
|
||||
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 DetectParams()
|
||||
|
|
|
@ -707,11 +707,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
|||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
m_log.DebugFormat("[Script] Exception: {0}", e.Message);
|
||||
// m_log.DebugFormat("[SCRIPT] Exception: {0}", e.Message);
|
||||
m_InEvent = false;
|
||||
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
|
||||
{
|
||||
|
@ -727,10 +727,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
|||
}
|
||||
catch (Exception e2) // LEGIT: User Scripting
|
||||
{
|
||||
m_log.Error("[Script]: "+
|
||||
m_log.Error("[SCRIPT]: "+
|
||||
"Error displaying error in-world: " +
|
||||
e2.ToString());
|
||||
m_log.Error("[Script]: " +
|
||||
m_log.Error("[SCRIPT]: " +
|
||||
"Errormessage: Error compiling script:\r\n" +
|
||||
e.ToString());
|
||||
}
|
||||
|
@ -741,6 +741,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
|||
if (part != null && part.ParentGroup != null)
|
||||
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