If dragging a script that is no copy from prim inventory into agent
inventory, stop it first in scene. If deleting from prims, move to trash rather then making it poof.iar_mods
parent
fbb2a7e90d
commit
f8c15d38a6
|
@ -979,25 +979,40 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
public void RemoveTaskInventory(IClientAPI remoteClient, UUID itemID, uint localID)
|
public void RemoveTaskInventory(IClientAPI remoteClient, UUID itemID, uint localID)
|
||||||
{
|
{
|
||||||
SceneObjectPart part = GetSceneObjectPart(localID);
|
SceneObjectPart part = GetSceneObjectPart(localID);
|
||||||
if (part == null)
|
SceneObjectGroup group = null;
|
||||||
return;
|
if (part != null)
|
||||||
|
|
||||||
SceneObjectGroup group = part.ParentGroup;
|
|
||||||
if (!Permissions.CanEditObjectInventory(part.UUID, remoteClient.AgentId))
|
|
||||||
return;
|
|
||||||
|
|
||||||
TaskInventoryItem item = group.GetInventoryItem(localID, itemID);
|
|
||||||
if (item == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (item.Type == 10)
|
|
||||||
{
|
{
|
||||||
part.RemoveScriptEvents(itemID);
|
group = part.ParentGroup;
|
||||||
EventManager.TriggerRemoveScript(localID, itemID);
|
}
|
||||||
|
if (part != null && group != null)
|
||||||
|
{
|
||||||
|
if (!Permissions.CanEditObjectInventory(part.UUID, remoteClient.AgentId))
|
||||||
|
return;
|
||||||
|
|
||||||
|
TaskInventoryItem item = group.GetInventoryItem(localID, itemID);
|
||||||
|
if (item == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
InventoryFolderBase destFolder = InventoryService.GetFolderForType(remoteClient.AgentId, AssetType.TrashFolder);
|
||||||
|
|
||||||
|
// Move the item to trash. If this is a copiable item, only
|
||||||
|
// a copy will be moved and we will still need to delete
|
||||||
|
// the item from the prim. If it was no copy, is will be
|
||||||
|
// deleted by this method.
|
||||||
|
MoveTaskInventoryItem(remoteClient, destFolder.ID, part, itemID);
|
||||||
|
|
||||||
|
if (group.GetInventoryItem(localID, itemID) != null)
|
||||||
|
{
|
||||||
|
if (item.Type == 10)
|
||||||
|
{
|
||||||
|
part.RemoveScriptEvents(itemID);
|
||||||
|
EventManager.TriggerRemoveScript(localID, itemID);
|
||||||
|
}
|
||||||
|
|
||||||
|
group.RemoveInventoryItem(localID, itemID);
|
||||||
|
}
|
||||||
|
part.SendPropertiesToClient(remoteClient);
|
||||||
}
|
}
|
||||||
|
|
||||||
group.RemoveInventoryItem(localID, itemID);
|
|
||||||
part.SendPropertiesToClient(remoteClient);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private InventoryItemBase CreateAgentInventoryItemFromTask(UUID destAgent, SceneObjectPart part, UUID itemId)
|
private InventoryItemBase CreateAgentInventoryItemFromTask(UUID destAgent, SceneObjectPart part, UUID itemId)
|
||||||
|
@ -1058,7 +1073,15 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (!Permissions.BypassPermissions())
|
if (!Permissions.BypassPermissions())
|
||||||
{
|
{
|
||||||
if ((taskItem.CurrentPermissions & (uint)PermissionMask.Copy) == 0)
|
if ((taskItem.CurrentPermissions & (uint)PermissionMask.Copy) == 0)
|
||||||
|
{
|
||||||
|
if (taskItem.Type == 10)
|
||||||
|
{
|
||||||
|
part.RemoveScriptEvents(itemId);
|
||||||
|
EventManager.TriggerRemoveScript(part.LocalId, itemId);
|
||||||
|
}
|
||||||
|
|
||||||
part.Inventory.RemoveInventoryItem(itemId);
|
part.Inventory.RemoveInventoryItem(itemId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return agentItem;
|
return agentItem;
|
||||||
|
|
Loading…
Reference in New Issue