diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index ecef4ac1b2..77bf8a3230 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs @@ -5541,6 +5541,26 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return (item == null) ? LSL_String.Empty : item.Description; } + public LSL_Key osGetLinkInventoryAssetKey(LSL_Integer linkNumber, LSL_String name, LSL_Integer type) + { + SceneObjectPart part = GetSingleLinkPart(linkNumber); + if(part == null) + return LSL_String.NullKey; + + TaskInventoryItem item = part.Inventory.GetInventoryItem(name, type); + if (item is null) + return LSL_String.NullKey; + + if ((item.CurrentPermissions + & (uint)(PermissionMask.Copy | PermissionMask.Transfer | PermissionMask.Modify)) + == (uint)(PermissionMask.Copy | PermissionMask.Transfer | PermissionMask.Modify)) + { + return new LSL_Key(item.AssetID.ToString()); + } + + return LSL_String.NullKey; + } + public LSL_Key osGetLinkInventoryItemKey(LSL_Integer linkNumber, LSL_String name) { SceneObjectPart part = GetSingleLinkPart(linkNumber); diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs index fb7ad789dc..622bededf1 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs @@ -561,6 +561,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces LSL_Integer osApproxEquals(rotation ra, rotation rb, LSL_Float margin); LSL_Key osGetInventoryLastOwner(LSL_String itemNameOrId); LSL_Key osGetInventoryItemKey(LSL_String name); + LSL_Key osGetLinkInventoryAssetKey(LSL_Integer linkNumber, LSL_String name, LSL_Integer type); LSL_Key osGetLinkInventoryItemKey(LSL_Integer linkNumber, LSL_String name); LSL_String osGetInventoryName(LSL_Key itemId); LSL_String osGetLinkInventoryName(LSL_Integer linkNumber, LSL_Key itemId); diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs index 2fb00ce47a..d25722c43c 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs @@ -1460,6 +1460,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase return m_OSSL_Functions.osGetInventoryItemKey(name); } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public LSL_Key osGetLinkInventoryAssetKey(LSL_Integer linkNumber, LSL_String name, LSL_Integer type) + { + return m_OSSL_Functions.osGetLinkInventoryAssetKey(linkNumber, name, type); + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public LSL_Key osGetLinkInventoryItemKey(LSL_Integer linkNumber, LSL_String name) { diff --git a/bin/ScriptSyntax.xml b/bin/ScriptSyntax.xml index 0adf4a5888..7fd233bd84 100644 --- a/bin/ScriptSyntax.xml +++ b/bin/ScriptSyntax.xml @@ -1,4 +1,4 @@ -3c8d15ee-d2ba-11ee-ae64-406c8fbbb495 +9a2d5a5e-484a-40b0-82bc-092443b08ff7 llsd-lsl-syntax-version2 controls @@ -7318,6 +7318,15 @@ nametypestring +osGetLinkInventoryAssetKey + + returnkey + arguments + linkNumbertypeinteger + nametypestring + typetypeinteger + + osGetLinkInventoryItemKey returnkey