From 2849e57920c9ebb3ca39876aba2100c5b243c779 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Wed, 14 Jun 2023 22:45:37 +0100 Subject: [PATCH] add osGetPrimCount([key primKey]) and osGetSittingAvatarsCount([key primkey]) that just do want name says unlike ll mess, absent primKey argument means current linkset --- .../Shared/Api/Implementation/OSSL_Api.cs | 34 +++++++++++++++++++ .../Shared/Api/Interface/IOSSL_Api.cs | 4 +++ .../Shared/Api/Runtime/OSSL_Stub.cs | 25 ++++++++++++++ 3 files changed, 63 insertions(+) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 146daa0dd9..96e71afa0e 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs @@ -6153,5 +6153,39 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return result; } + + public LSL_Integer osGetPrimCount() + { + return m_host.ParentGroup.PrimCount; + } + + public LSL_Integer osGetPrimCount(LSL_Key object_id) + { + if (!UUID.TryParse(object_id, out UUID id) || id.IsZero()) + return 0; + + SceneObjectPart part = World.GetSceneObjectPart(id); + if (part is null) + return 0; + + return part.ParentGroup.PrimCount; + } + + public LSL_Integer osGetSittingAvatarsCount() + { + return m_host.ParentGroup.GetSittingAvatarsCount(); + } + + public LSL_Integer osGetSittingAvatarsCount(LSL_Key object_id) + { + if (!UUID.TryParse(object_id, out UUID id) || id.IsZero()) + return 0; + + SceneObjectPart part = World.GetSceneObjectPart(id); + if (part is null) + return 0; + + return part.ParentGroup.GetSittingAvatarsCount(); + } } } \ No newline at end of file diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs index 2c7caf1e84..c9674b0d59 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs @@ -605,5 +605,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces LSL_List osGetParcelIDs(); LSL_Key osGetParcelID(); LSL_List osOldList2ListStrided(LSL_List src, int start, int end, int stride); + LSL_Integer osGetPrimCount(); + LSL_Integer osGetPrimCount(LSL_Key object_id); + LSL_Integer osGetSittingAvatarsCount(); + LSL_Integer osGetSittingAvatarsCount(LSL_Key object_id); } } diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs index c19b01803a..b34ee74c4e 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs @@ -1676,5 +1676,30 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase { return m_OSSL_Functions.osOldList2ListStrided(src, start, end, stride); } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public LSL_Integer osGetPrimCount() + { + return m_OSSL_Functions.osGetPrimCount(); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public LSL_Integer osGetPrimCount(LSL_Key object_id) + { + return m_OSSL_Functions.osGetPrimCount(object_id); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + LSL_Integer osGetSittingAvatarsCount() + { + return m_OSSL_Functions.osGetSittingAvatarsCount(); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + LSL_Integer osGetSittingAvatarsCount(LSL_Key object_id) + { + return m_OSSL_Functions.osGetSittingAvatarsCount(object_id); + } + } }