Can't detach an object from within the script thread because it will throw. Use FireAndForget for that.

viewer-2-initial-appearance
Melanie 2010-11-16 01:37:44 +01:00
parent 98ba079e95
commit 5329e3b9b7
1 changed files with 14 additions and 6 deletions

View File

@ -2983,17 +2983,25 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if ((item.PermsMask & ScriptBaseClass.PERMISSION_ATTACH) != 0) if ((item.PermsMask & ScriptBaseClass.PERMISSION_ATTACH) != 0)
{ {
SceneObjectGroup grp = m_host.ParentGroup;
UUID itemID = grp.GetFromItemID();
ScenePresence presence = World.GetScenePresence(m_host.OwnerID);
IAttachmentsModule attachmentsModule = m_ScriptEngine.World.AttachmentsModule; IAttachmentsModule attachmentsModule = m_ScriptEngine.World.AttachmentsModule;
if (attachmentsModule != null) if (attachmentsModule != null)
attachmentsModule.ShowDetachInUserInventory(itemID, presence.ControllingClient); Util.FireAndForget(DetachWrapper, m_host);
} }
} }
private void DetachWrapper(object o)
{
SceneObjectPart host = (SceneObjectPart)o;
SceneObjectGroup grp = host.ParentGroup;
UUID itemID = grp.GetFromItemID();
ScenePresence presence = World.GetScenePresence(host.OwnerID);
IAttachmentsModule attachmentsModule = m_ScriptEngine.World.AttachmentsModule;
if (attachmentsModule != null)
attachmentsModule.ShowDetachInUserInventory(itemID, presence.ControllingClient);
}
public void llTakeCamera(string avatar) public void llTakeCamera(string avatar)
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);