add harder restrictions to llGiveInventoryList. permissions per item as giveinventory, target avatar must see the prim region. Add 3seconds delay
parent
7ef657c415
commit
22e201bb49
|
@ -7762,32 +7762,74 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
if (!UUID.TryParse(destination, out destID))
|
||||
return;
|
||||
|
||||
SceneObjectPart destsop = null;
|
||||
ScenePresence sp = null;
|
||||
bool isNotOwner = true;
|
||||
if (!World.TryGetSceneObjectPart(destID, out destsop))
|
||||
{
|
||||
if (!World.TryGetScenePresence(destID, out sp))
|
||||
{
|
||||
// we could check if it is a grid user and allow the transfer as in older code
|
||||
// but that increases security risk
|
||||
Error("llGiveInventoryList", "Unable to give list, destination not found");
|
||||
ScriptSleep(100);
|
||||
return;
|
||||
}
|
||||
isNotOwner = sp.UUID != m_host.OwnerID;
|
||||
}
|
||||
|
||||
List<UUID> itemList = new List<UUID>();
|
||||
|
||||
foreach (Object item in inventory.Data)
|
||||
{
|
||||
string rawItemString = item.ToString();
|
||||
TaskInventoryItem taskItem = null;
|
||||
|
||||
UUID itemID;
|
||||
if (UUID.TryParse(rawItemString, out itemID))
|
||||
if (UUID.TryParse(rawItemString, out UUID itemID))
|
||||
taskItem = m_host.Inventory.GetInventoryItem(itemID);
|
||||
else
|
||||
taskItem = m_host.Inventory.GetInventoryItem(rawItemString);
|
||||
|
||||
if(taskItem == null)
|
||||
continue;
|
||||
|
||||
if ((taskItem.CurrentPermissions & (uint)PermissionMask.Copy) == 0)
|
||||
continue;
|
||||
|
||||
if (destsop != null)
|
||||
{
|
||||
itemList.Add(itemID);
|
||||
if(!World.Permissions.CanDoObjectInvToObjectInv(taskItem, m_host, destsop))
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
TaskInventoryItem taskItem = m_host.Inventory.GetInventoryItem(rawItemString);
|
||||
|
||||
if (taskItem != null)
|
||||
itemList.Add(taskItem.ItemID);
|
||||
if(isNotOwner)
|
||||
{
|
||||
if ((taskItem.CurrentPermissions & (uint)PermissionMask.Transfer) == 0)
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
itemList.Add(taskItem.ItemID);
|
||||
}
|
||||
|
||||
if (itemList.Count == 0)
|
||||
{
|
||||
Error("llGiveInventoryList", "Unable to give list, no items found");
|
||||
ScriptSleep(100);
|
||||
return;
|
||||
}
|
||||
|
||||
UUID folderID = m_ScriptEngine.World.MoveTaskInventoryItems(destID, category, m_host, itemList);
|
||||
|
||||
if (folderID == UUID.Zero)
|
||||
{
|
||||
Error("llGiveInventoryList", "Unable to give list");
|
||||
ScriptSleep(100);
|
||||
return;
|
||||
}
|
||||
|
||||
if (destsop != null)
|
||||
return;
|
||||
|
||||
if (m_TransferModule != null)
|
||||
|
@ -7807,6 +7849,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
|
||||
m_TransferModule.SendInstantMessage(msg, delegate(bool success) {});
|
||||
}
|
||||
|
||||
ScriptSleep(destsop == null ? 3000 : 100);
|
||||
}
|
||||
|
||||
public void llSetVehicleType(int type)
|
||||
|
|
Loading…
Reference in New Issue