add and use CanDropInObjectInv
parent
f722f1cf6c
commit
02fbe5a740
|
@ -49,6 +49,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
protected Scene m_scene;
|
protected Scene m_scene;
|
||||||
|
protected ScenePermissions scenePermissions;
|
||||||
protected bool m_Enabled;
|
protected bool m_Enabled;
|
||||||
|
|
||||||
private InventoryFolderImpl m_libraryRootFolder;
|
private InventoryFolderImpl m_libraryRootFolder;
|
||||||
|
@ -253,74 +254,74 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
||||||
m_scene = scene;
|
m_scene = scene;
|
||||||
|
|
||||||
scene.RegisterModuleInterface<IPermissionsModule>(this);
|
scene.RegisterModuleInterface<IPermissionsModule>(this);
|
||||||
|
scenePermissions = m_scene.Permissions;
|
||||||
|
|
||||||
//Register functions with Scene External Checks!
|
//Register functions with Scene External Checks!
|
||||||
m_scene.Permissions.OnBypassPermissions += BypassPermissions;
|
scenePermissions.OnBypassPermissions += BypassPermissions;
|
||||||
m_scene.Permissions.OnSetBypassPermissions += SetBypassPermissions;
|
scenePermissions.OnSetBypassPermissions += SetBypassPermissions;
|
||||||
m_scene.Permissions.OnPropagatePermissions += PropagatePermissions;
|
scenePermissions.OnPropagatePermissions += PropagatePermissions;
|
||||||
|
|
||||||
m_scene.Permissions.OnIsGridGod += IsGridAdministrator;
|
scenePermissions.OnIsGridGod += IsGridAdministrator;
|
||||||
m_scene.Permissions.OnIsAdministrator += IsAdministrator;
|
scenePermissions.OnIsAdministrator += IsAdministrator;
|
||||||
m_scene.Permissions.OnIsEstateManager += IsEstateManager;
|
scenePermissions.OnIsEstateManager += IsEstateManager;
|
||||||
|
|
||||||
m_scene.Permissions.OnGenerateClientFlags += GenerateClientFlags;
|
scenePermissions.OnGenerateClientFlags += GenerateClientFlags;
|
||||||
|
|
||||||
m_scene.Permissions.OnIssueEstateCommand += CanIssueEstateCommand;
|
scenePermissions.OnIssueEstateCommand += CanIssueEstateCommand;
|
||||||
m_scene.Permissions.OnRunConsoleCommand += CanRunConsoleCommand;
|
scenePermissions.OnRunConsoleCommand += CanRunConsoleCommand;
|
||||||
|
|
||||||
m_scene.Permissions.OnTeleport += CanTeleport;
|
scenePermissions.OnTeleport += CanTeleport;
|
||||||
|
|
||||||
m_scene.Permissions.OnInstantMessage += CanInstantMessage;
|
scenePermissions.OnInstantMessage += CanInstantMessage;
|
||||||
|
|
||||||
m_scene.Permissions.OnAbandonParcel += CanAbandonParcel;
|
scenePermissions.OnAbandonParcel += CanAbandonParcel;
|
||||||
m_scene.Permissions.OnReclaimParcel += CanReclaimParcel;
|
scenePermissions.OnReclaimParcel += CanReclaimParcel;
|
||||||
m_scene.Permissions.OnDeedParcel += CanDeedParcel;
|
scenePermissions.OnDeedParcel += CanDeedParcel;
|
||||||
m_scene.Permissions.OnSellParcel += CanSellParcel;
|
scenePermissions.OnSellParcel += CanSellParcel;
|
||||||
m_scene.Permissions.OnEditParcelProperties += CanEditParcelProperties;
|
scenePermissions.OnEditParcelProperties += CanEditParcelProperties;
|
||||||
m_scene.Permissions.OnTerraformLand += CanTerraformLand;
|
scenePermissions.OnTerraformLand += CanTerraformLand;
|
||||||
m_scene.Permissions.OnBuyLand += CanBuyLand;
|
scenePermissions.OnBuyLand += CanBuyLand;
|
||||||
|
|
||||||
m_scene.Permissions.OnRezObject += CanRezObject;
|
scenePermissions.OnRezObject += CanRezObject;
|
||||||
m_scene.Permissions.OnObjectEntry += CanObjectEntry;
|
scenePermissions.OnObjectEntry += CanObjectEntry;
|
||||||
m_scene.Permissions.OnReturnObjects += CanReturnObjects;
|
scenePermissions.OnReturnObjects += CanReturnObjects;
|
||||||
|
|
||||||
m_scene.Permissions.OnDuplicateObject += CanDuplicateObject;
|
scenePermissions.OnDuplicateObject += CanDuplicateObject;
|
||||||
m_scene.Permissions.OnDeleteObjectByIDs += CanDeleteObjectByIDs;
|
scenePermissions.OnDeleteObjectByIDs += CanDeleteObjectByIDs;
|
||||||
m_scene.Permissions.OnDeleteObject += CanDeleteObject;
|
scenePermissions.OnDeleteObject += CanDeleteObject;
|
||||||
m_scene.Permissions.OnEditObjectByIDs += CanEditObjectByIDs;
|
scenePermissions.OnEditObjectByIDs += CanEditObjectByIDs;
|
||||||
m_scene.Permissions.OnEditObject += CanEditObject;
|
scenePermissions.OnEditObject += CanEditObject;
|
||||||
m_scene.Permissions.OnInventoryTransfer += CanInventoryTransfer;
|
scenePermissions.OnInventoryTransfer += CanInventoryTransfer;
|
||||||
m_scene.Permissions.OnMoveObject += CanMoveObject;
|
scenePermissions.OnMoveObject += CanMoveObject;
|
||||||
m_scene.Permissions.OnTakeObject += CanTakeObject;
|
scenePermissions.OnTakeObject += CanTakeObject;
|
||||||
m_scene.Permissions.OnTakeCopyObject += CanTakeCopyObject;
|
scenePermissions.OnTakeCopyObject += CanTakeCopyObject;
|
||||||
m_scene.Permissions.OnLinkObject += CanLinkObject;
|
scenePermissions.OnLinkObject += CanLinkObject;
|
||||||
m_scene.Permissions.OnDelinkObject += CanDelinkObject;
|
scenePermissions.OnDelinkObject += CanDelinkObject;
|
||||||
m_scene.Permissions.OnDeedObject += CanDeedObject;
|
scenePermissions.OnDeedObject += CanDeedObject;
|
||||||
m_scene.Permissions.OnSellGroupObject += CanSellGroupObject;
|
scenePermissions.OnSellGroupObject += CanSellGroupObject;
|
||||||
|
|
||||||
|
scenePermissions.OnCreateObjectInventory += CanCreateObjectInventory;
|
||||||
|
scenePermissions.OnEditObjectInventory += CanEditObjectInventory;
|
||||||
|
scenePermissions.OnCopyObjectInventory += CanCopyObjectInventory;
|
||||||
|
scenePermissions.OnDeleteObjectInventory += CanDeleteObjectInventory;
|
||||||
|
scenePermissions.OnDoObjectInvToObjectInv += CanDoObjectInvToObjectInv;
|
||||||
|
scenePermissions.OnDropInObjectInv += CanDropInObjectInv;
|
||||||
|
|
||||||
m_scene.Permissions.OnCreateObjectInventory += CanCreateObjectInventory;
|
scenePermissions.OnViewNotecard += CanViewNotecard;
|
||||||
m_scene.Permissions.OnEditObjectInventory += CanEditObjectInventory;
|
scenePermissions.OnViewScript += CanViewScript;
|
||||||
m_scene.Permissions.OnCopyObjectInventory += CanCopyObjectInventory;
|
scenePermissions.OnEditNotecard += CanEditNotecard;
|
||||||
m_scene.Permissions.OnDeleteObjectInventory += CanDeleteObjectInventory;
|
scenePermissions.OnEditScript += CanEditScript;
|
||||||
m_scene.Permissions.OnDoObjectInvToObjectInv += CanDoObjectInvToObjectInv;
|
scenePermissions.OnResetScript += CanResetScript;
|
||||||
|
scenePermissions.OnRunScript += CanRunScript;
|
||||||
|
scenePermissions.OnCompileScript += CanCompileScript;
|
||||||
|
|
||||||
m_scene.Permissions.OnViewNotecard += CanViewNotecard;
|
scenePermissions.OnCreateUserInventory += CanCreateUserInventory;
|
||||||
m_scene.Permissions.OnViewScript += CanViewScript;
|
scenePermissions.OnCopyUserInventory += CanCopyUserInventory;
|
||||||
m_scene.Permissions.OnEditNotecard += CanEditNotecard;
|
scenePermissions.OnEditUserInventory += CanEditUserInventory;
|
||||||
m_scene.Permissions.OnEditScript += CanEditScript;
|
scenePermissions.OnDeleteUserInventory += CanDeleteUserInventory;
|
||||||
m_scene.Permissions.OnResetScript += CanResetScript;
|
|
||||||
m_scene.Permissions.OnRunScript += CanRunScript;
|
|
||||||
m_scene.Permissions.OnCompileScript += CanCompileScript;
|
|
||||||
|
|
||||||
m_scene.Permissions.OnCreateUserInventory += CanCreateUserInventory;
|
scenePermissions.OnControlPrimMedia += CanControlPrimMedia;
|
||||||
m_scene.Permissions.OnCopyUserInventory += CanCopyUserInventory;
|
scenePermissions.OnInteractWithPrimMedia += CanInteractWithPrimMedia;
|
||||||
m_scene.Permissions.OnEditUserInventory += CanEditUserInventory;
|
|
||||||
m_scene.Permissions.OnDeleteUserInventory += CanDeleteUserInventory;
|
|
||||||
|
|
||||||
|
|
||||||
m_scene.Permissions.OnControlPrimMedia += CanControlPrimMedia;
|
|
||||||
m_scene.Permissions.OnInteractWithPrimMedia += CanInteractWithPrimMedia;
|
|
||||||
|
|
||||||
m_scene.AddCommand("Users", this, "bypass permissions",
|
m_scene.AddCommand("Users", this, "bypass permissions",
|
||||||
"bypass permissions <true / false>",
|
"bypass permissions <true / false>",
|
||||||
|
@ -2094,11 +2095,13 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
||||||
private bool CanDoObjectInvToObjectInv(TaskInventoryItem item, SceneObjectPart sourcePart, SceneObjectPart destPart)
|
private bool CanDoObjectInvToObjectInv(TaskInventoryItem item, SceneObjectPart sourcePart, SceneObjectPart destPart)
|
||||||
{
|
{
|
||||||
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
if (m_bypassPermissions) return m_bypassPermissionsValue;
|
|
||||||
|
|
||||||
if (sourcePart == null || destPart == null || item == null)
|
if (sourcePart == null || destPart == null || item == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (m_bypassPermissions)
|
||||||
|
return m_bypassPermissionsValue;
|
||||||
|
|
||||||
SceneObjectGroup srcsog = sourcePart.ParentGroup;
|
SceneObjectGroup srcsog = sourcePart.ParentGroup;
|
||||||
SceneObjectGroup destsog = destPart.ParentGroup;
|
SceneObjectGroup destsog = destPart.ParentGroup;
|
||||||
if (srcsog == null || destsog == null)
|
if (srcsog == null || destsog == null)
|
||||||
|
@ -2127,12 +2130,12 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
||||||
if(item.InvType == (int)InventoryType.LSL)
|
if(item.InvType == (int)InventoryType.LSL)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if((destPart.GetEffectiveObjectFlags() & (uint)PrimFlags.AllowInventoryDrop) == 0)
|
if((destsog.RootPart.GetEffectiveObjectFlags() & (uint)PrimFlags.AllowInventoryDrop) == 0)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if((destPart.GetEffectiveObjectFlags() & (uint)PrimFlags.AllowInventoryDrop) == 0 &&
|
if((destsog.RootPart.GetEffectiveObjectFlags() & (uint)PrimFlags.AllowInventoryDrop) == 0 &&
|
||||||
(destsog.EffectiveOwnerPerms & (uint)PermissionMask.Modify) == 0)
|
(destsog.EffectiveOwnerPerms & (uint)PermissionMask.Modify) == 0)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -2140,6 +2143,54 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool CanDropInObjectInv(InventoryItemBase item, ScenePresence sp, SceneObjectPart destPart)
|
||||||
|
{
|
||||||
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
|
|
||||||
|
if (sp == null || sp.IsDeleted || destPart == null || item == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
SceneObjectGroup destsog = destPart.ParentGroup;
|
||||||
|
if (destsog == null || destsog.IsDeleted)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (m_bypassPermissions)
|
||||||
|
return m_bypassPermissionsValue;
|
||||||
|
|
||||||
|
if(sp.IsGod)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// dest is locked
|
||||||
|
if((destsog.EffectiveOwnerPerms & (uint)PermissionMask.Move) == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
UUID destOwner = destsog.OwnerID;
|
||||||
|
UUID spID = sp.UUID;
|
||||||
|
bool spNotOwner = spID != destOwner;
|
||||||
|
|
||||||
|
// scripts can't be droped
|
||||||
|
if(spNotOwner && item.InvType == (int)InventoryType.LSL)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(spNotOwner || item.Owner != destOwner)
|
||||||
|
{
|
||||||
|
// no copy item will be moved if it has transfer
|
||||||
|
uint itperms = item.CurrentPermissions;
|
||||||
|
if((itperms & (uint)PermissionMask.Transfer) == 0)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// allowdrop is a root part thing and does bypass modify rights
|
||||||
|
if((destsog.RootPart.GetEffectiveObjectFlags() & (uint)PrimFlags.AllowInventoryDrop) != 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
uint perms = GetObjectPermissions(spID, destsog, true);
|
||||||
|
if((perms & (uint)PermissionMask.Modify) == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
private bool CanDeleteObjectInventory(UUID itemID, UUID objectID, UUID userID)
|
private bool CanDeleteObjectInventory(UUID itemID, UUID objectID, UUID userID)
|
||||||
{
|
{
|
||||||
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
|
@ -2153,7 +2204,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
||||||
if (sog == null)
|
if (sog == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
uint perms = GetObjectPermissions(objectID, sog, true);
|
uint perms = GetObjectPermissions(userID, sog, true);
|
||||||
if((perms & (uint)PermissionMask.Modify) == 0)
|
if((perms & (uint)PermissionMask.Modify) == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
|
@ -1645,40 +1645,47 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
uint primLocalID)
|
uint primLocalID)
|
||||||
{
|
{
|
||||||
UUID itemID = itemInfo.ItemID;
|
UUID itemID = itemInfo.ItemID;
|
||||||
|
if (itemID == UUID.Zero)
|
||||||
|
{
|
||||||
|
m_log.ErrorFormat(
|
||||||
|
"[PRIM INVENTORY]: UpdateTaskInventory called with item ID Zero to update for {1}!",
|
||||||
|
remoteClient.Name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Find the prim we're dealing with
|
// Find the prim we're dealing with
|
||||||
SceneObjectPart part = GetSceneObjectPart(primLocalID);
|
SceneObjectPart part = GetSceneObjectPart(primLocalID);
|
||||||
|
if(part == null)
|
||||||
if (part != null)
|
|
||||||
{
|
{
|
||||||
TaskInventoryItem currentItem = part.Inventory.GetInventoryItem(itemID);
|
m_log.WarnFormat(
|
||||||
bool allowInventoryDrop = (part.GetEffectiveObjectFlags()
|
"[PRIM INVENTORY]: " +
|
||||||
& (uint)PrimFlags.AllowInventoryDrop) != 0;
|
"Update with item {0} requested of prim {1} for {2} but this prim does not exist",
|
||||||
|
itemID, primLocalID, remoteClient.Name);
|
||||||
// Explicity allow anyone to add to the inventory if the
|
|
||||||
// AllowInventoryDrop flag has been set. Don't however let
|
|
||||||
// them update an item unless they pass the external checks
|
|
||||||
//
|
|
||||||
if (!Permissions.CanEditObjectInventory(part.UUID, remoteClient.AgentId)
|
|
||||||
&& (currentItem != null || !allowInventoryDrop))
|
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
TaskInventoryItem currentItem = part.Inventory.GetInventoryItem(itemID);
|
||||||
|
|
||||||
if (currentItem == null)
|
if (currentItem == null)
|
||||||
{
|
|
||||||
UUID copyID = UUID.Random();
|
|
||||||
if (itemID != UUID.Zero)
|
|
||||||
{
|
{
|
||||||
InventoryItemBase item = InventoryService.GetItem(remoteClient.AgentId, itemID);
|
InventoryItemBase item = InventoryService.GetItem(remoteClient.AgentId, itemID);
|
||||||
|
|
||||||
// Try library
|
// if not found Try library
|
||||||
if (null == item && LibraryService != null && LibraryService.LibraryRootFolder != null)
|
if (item == null && LibraryService != null && LibraryService.LibraryRootFolder != null)
|
||||||
{
|
|
||||||
item = LibraryService.LibraryRootFolder.FindItem(itemID);
|
item = LibraryService.LibraryRootFolder.FindItem(itemID);
|
||||||
|
|
||||||
|
if(item == null)
|
||||||
|
{
|
||||||
|
m_log.ErrorFormat(
|
||||||
|
"[PRIM INVENTORY]: Could not find inventory item {0} to update for {1}!",
|
||||||
|
itemID, remoteClient.Name);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we've found the item in the user's inventory or in the library
|
if (!Permissions.CanDropInObjectInv(item, remoteClient, part))
|
||||||
if (item != null)
|
return;
|
||||||
{
|
|
||||||
|
UUID copyID = UUID.Random();
|
||||||
part.ParentGroup.AddInventoryItem(remoteClient.AgentId, primLocalID, item, copyID);
|
part.ParentGroup.AddInventoryItem(remoteClient.AgentId, primLocalID, item, copyID);
|
||||||
m_log.InfoFormat(
|
m_log.InfoFormat(
|
||||||
"[PRIM INVENTORY]: Update with item {0} requested of prim {1} for {2}",
|
"[PRIM INVENTORY]: Update with item {0} requested of prim {1} for {2}",
|
||||||
|
@ -1694,20 +1701,15 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
m_log.ErrorFormat(
|
|
||||||
"[PRIM INVENTORY]: Could not find inventory item {0} to update for {1}!",
|
|
||||||
itemID, remoteClient.Name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else // Updating existing item with new perms etc
|
else // Updating existing item with new perms etc
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[PRIM INVENTORY]: Updating item {0} in {1} for UpdateTaskInventory()",
|
// "[PRIM INVENTORY]: Updating item {0} in {1} for UpdateTaskInventory()",
|
||||||
// currentItem.Name, part.Name);
|
// currentItem.Name, part.Name);
|
||||||
|
|
||||||
|
if (!Permissions.CanEditObjectInventory(part.UUID, remoteClient.AgentId))
|
||||||
|
return;
|
||||||
|
|
||||||
// Only look for an uploaded updated asset if we are passed a transaction ID. This is only the
|
// Only look for an uploaded updated asset if we are passed a transaction ID. This is only the
|
||||||
// case for updates uploded through UDP. Updates uploaded via a capability (e.g. a script update)
|
// case for updates uploded through UDP. Updates uploaded via a capability (e.g. a script update)
|
||||||
// will not pass in a transaction ID in the update message.
|
// will not pass in a transaction ID in the update message.
|
||||||
|
@ -1784,14 +1786,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
m_log.WarnFormat(
|
|
||||||
"[PRIM INVENTORY]: " +
|
|
||||||
"Update with item {0} requested of prim {1} for {2} but this prim does not exist",
|
|
||||||
itemID, primLocalID, remoteClient.Name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Rez a script into a prim's inventory, either ex nihilo or from an existing avatar inventory
|
/// Rez a script into a prim's inventory, either ex nihilo or from an existing avatar inventory
|
||||||
|
|
|
@ -87,6 +87,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
public delegate bool CreateObjectInventoryHandler(int invType, UUID objectID, UUID userID);
|
public delegate bool CreateObjectInventoryHandler(int invType, UUID objectID, UUID userID);
|
||||||
public delegate bool CopyObjectInventoryHandler(UUID itemID, UUID objectID, UUID userID);
|
public delegate bool CopyObjectInventoryHandler(UUID itemID, UUID objectID, UUID userID);
|
||||||
public delegate bool DoObjectInvToObjectInv(TaskInventoryItem item, SceneObjectPart sourcePart, SceneObjectPart destPart);
|
public delegate bool DoObjectInvToObjectInv(TaskInventoryItem item, SceneObjectPart sourcePart, SceneObjectPart destPart);
|
||||||
|
public delegate bool DoDropInObjectInv(InventoryItemBase item, ScenePresence sp, SceneObjectPart destPart);
|
||||||
public delegate bool DeleteObjectInventoryHandler(UUID itemID, UUID objectID, UUID userID);
|
public delegate bool DeleteObjectInventoryHandler(UUID itemID, UUID objectID, UUID userID);
|
||||||
public delegate bool TransferObjectInventoryHandler(UUID itemID, UUID objectID, UUID userID);
|
public delegate bool TransferObjectInventoryHandler(UUID itemID, UUID objectID, UUID userID);
|
||||||
public delegate bool CreateUserInventoryHandler(int invType, UUID userID);
|
public delegate bool CreateUserInventoryHandler(int invType, UUID userID);
|
||||||
|
@ -160,6 +161,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
public event CreateObjectInventoryHandler OnCreateObjectInventory;
|
public event CreateObjectInventoryHandler OnCreateObjectInventory;
|
||||||
public event CopyObjectInventoryHandler OnCopyObjectInventory;
|
public event CopyObjectInventoryHandler OnCopyObjectInventory;
|
||||||
public event DoObjectInvToObjectInv OnDoObjectInvToObjectInv;
|
public event DoObjectInvToObjectInv OnDoObjectInvToObjectInv;
|
||||||
|
public event DoDropInObjectInv OnDropInObjectInv;
|
||||||
public event DeleteObjectInventoryHandler OnDeleteObjectInventory;
|
public event DeleteObjectInventoryHandler OnDeleteObjectInventory;
|
||||||
public event TransferObjectInventoryHandler OnTransferObjectInventory;
|
public event TransferObjectInventoryHandler OnTransferObjectInventory;
|
||||||
public event CreateUserInventoryHandler OnCreateUserInventory;
|
public event CreateUserInventoryHandler OnCreateUserInventory;
|
||||||
|
@ -1109,6 +1111,28 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool CanDropInObjectInv(InventoryItemBase item, IClientAPI client, SceneObjectPart destPart)
|
||||||
|
{
|
||||||
|
DoDropInObjectInv handler = OnDropInObjectInv;
|
||||||
|
if (handler != null)
|
||||||
|
{
|
||||||
|
if (client == null || client.SceneAgent == null|| destPart == null || item == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
ScenePresence sp = client.SceneAgent as ScenePresence;
|
||||||
|
if(sp == null || sp.IsDeleted)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
Delegate[] list = handler.GetInvocationList();
|
||||||
|
foreach (DoDropInObjectInv h in list)
|
||||||
|
{
|
||||||
|
if (h(item, sp, destPart) == false)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public bool CanDeleteObjectInventory(UUID itemID, UUID objectID, UUID userID)
|
public bool CanDeleteObjectInventory(UUID itemID, UUID objectID, UUID userID)
|
||||||
{
|
{
|
||||||
DeleteObjectInventoryHandler handler = OnDeleteObjectInventory;
|
DeleteObjectInventoryHandler handler = OnDeleteObjectInventory;
|
||||||
|
|
Loading…
Reference in New Issue