add llGetRenderMaterial

This commit is contained in:
UbitUmarov
2025-08-16 01:42:39 +01:00
parent 988501e141
commit 0197ffc3ee
3 changed files with 60 additions and 1 deletions

View File

@@ -2350,7 +2350,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
{
if (face == ScriptBaseClass.ALL_SIDES)
face = 0;
if (face < 0)
else if (face < 0)
return ScriptBaseClass.NULL_KEY;
Primitive.TextureEntry tex = part.Shape.Textures;
@@ -19508,6 +19508,59 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return new LSL_String();
}
public LSL_String llGetRenderMaterial(LSL_Integer lface )
{
return GetMaterial(m_host, lface.value);
}
protected static LSL_String GetMaterial(SceneObjectPart part, int face)
{
if (part.Shape.RenderMaterials is null ||
part.Shape.RenderMaterials.entries is null ||
part.Shape.RenderMaterials.entries.Length == 0)
return ScriptBaseClass.NULL_KEY;
if (face == ScriptBaseClass.ALL_SIDES)
face = 0;
else if (face < 0)
return ScriptBaseClass.NULL_KEY;
else if (face >= GetNumberOfSides(part))
return ScriptBaseClass.NULL_KEY;
UUID asset = UUID.Zero;
bool found = false;
foreach(Primitive.RenderMaterials.RenderMaterialEntry re in part.Shape.RenderMaterials.entries)
{
if(re.te_index == face)
{
asset = re.id;
found = true;
break;
}
}
if(!found)
return ScriptBaseClass.NULL_KEY;
lock (part.TaskInventory)
{
part.TaskInventory.LockItemsForRead(true);
try
{
foreach (KeyValuePair<UUID, TaskInventoryItem> inv in part.TaskInventory)
{
if (inv.Value.Type == (int)AssetType.Material && inv.Value.AssetID.Equals(asset))
return inv.Value.Name.ToString();
}
}
finally { part.TaskInventory.LockItemsForRead(false); }
}
if((part.ParentGroup.EffectiveOwnerPerms & (uint)PermissionMask.All) != (uint)PermissionMask.All)
return ScriptBaseClass.NULL_KEY;
return asset.ToString();
}
static string HMAC_SHA224(string key, string message)
{
const int blockSize = 64;

View File

@@ -534,5 +534,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
void llSetLinkSitFlags(LSL_Integer linknum, LSL_Integer flags);
LSL_String llHMAC(LSL_String private_key, LSL_String message, LSL_String algo);
LSL_String llComputeHash(LSL_String message, LSL_String algo);
LSL_String llGetRenderMaterial(LSL_Integer face);
}
}

View File

@@ -2882,5 +2882,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
return m_LSL_Functions.llComputeHash(message, algo);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public LSL_String llGetRenderMaterial(LSL_Integer face)
{
return m_LSL_Functions.llGetRenderMaterial(face);
}
}
}