search a prim inventory matching both name and asset type, on some LSL and OSSL functions

This commit is contained in:
UbitUmarov
2022-10-24 02:15:56 +01:00
parent d89a3bb17c
commit be5fc7344c
3 changed files with 25 additions and 9 deletions

View File

@@ -217,7 +217,7 @@ namespace OpenSim.Region.Framework.Interfaces
/// The inventory item. Null if no such item was found.
/// </returns>
TaskInventoryItem GetInventoryItem(string name);
TaskInventoryItem GetInventoryItem(string name, int assetType);
/// <summary>
/// Get inventory items by name.
/// </summary>

View File

@@ -1095,6 +1095,22 @@ namespace OpenSim.Region.Framework.Scenes
return null;
}
public TaskInventoryItem GetInventoryItem(string name, int type)
{
m_items.LockItemsForRead(true);
foreach (TaskInventoryItem item in m_items.Values)
{
if (item.Type == type && item.Name == name)
{
m_items.LockItemsForRead(false);
return item;
}
}
m_items.LockItemsForRead(false);
return null;
}
public List<TaskInventoryItem> GetInventoryItems(string name)
{
List<TaskInventoryItem> items = new List<TaskInventoryItem>();

View File

@@ -46,9 +46,9 @@ namespace OpenSim.Region.Framework.Scenes.Scripting
/// <param name='type'></param>
public static UUID GetAssetIdFromItemName(SceneObjectPart part, string name, int type)
{
TaskInventoryItem item = part.Inventory.GetInventoryItem(name);
TaskInventoryItem item = part.Inventory.GetInventoryItem(name, type);
if (item != null && item.Type == type)
if (item != null)
return item.AssetID;
else
return UUID.Zero;
@@ -98,8 +98,8 @@ namespace OpenSim.Region.Framework.Scenes.Scripting
if (part.Inventory != null)
{
TaskInventoryItem item = part.Inventory.GetInventoryItem(identifier);
if (item != null && item.Type == (int)type)
TaskInventoryItem item = part.Inventory.GetInventoryItem(identifier, (int)type);
if (item != null)
return item.AssetID;
}
@@ -114,15 +114,15 @@ namespace OpenSim.Region.Framework.Scenes.Scripting
TaskInventoryItem item;
if (part.Inventory != null)
{
item = part.Inventory.GetInventoryItem(identifier);
if (item != null && item.Type == (int)type)
item = part.Inventory.GetInventoryItem(identifier, (int)type);
if (item != null)
return item.AssetID;
}
if (part.LocalId != host.LocalId && host.Inventory != null)
{
item = host.Inventory.GetInventoryItem(identifier);
if (item != null && item.Type == (int)type)
item = host.Inventory.GetInventoryItem(identifier, (int)type);
if (item != null)
return item.AssetID;
}
return UUID.Zero;