From cc1227364c90e50e714f84a880976f20dd42b851 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sun, 23 Jun 2024 21:54:46 +0100 Subject: [PATCH] add llDerezObject(..) --- .../Shared/Api/Implementation/LSL_Api.cs | 31 +++++++++++++++++++ .../Shared/Api/Interface/ILSL_Api.cs | 1 + .../Shared/Api/Runtime/LSL_Stub.cs | 8 ++++- 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 943279a9f5..c70588e2e6 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -18762,6 +18762,37 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return 0; } + + public LSL_Integer llDerezObject(LSL_Key objectUUID, LSL_Integer flag) + { + if (!UUID.TryParse(objectUUID, out UUID objUUID)) + return new LSL_Integer(0); + + if (objUUID.IsZero()) + return new LSL_Integer(0); + + SceneObjectGroup sceneOG = World.GetSceneObjectGroup(objUUID); + + if (sceneOG is null || sceneOG.IsDeleted || sceneOG.IsAttachment) + return new LSL_Integer(0); + + if (sceneOG.OwnerID.NotEqual(m_host.OwnerID)) + return new LSL_Integer(0); + + // restrict to objects rezzed by host + if (sceneOG.RezzerID.NotEqual(m_host.ParentGroup.UUID)) + return new LSL_Integer(0); + + if (sceneOG.UUID.Equals(m_host.ParentGroup.UUID)) + return new LSL_Integer(0); + + if (flag.value == 0) + World.DeleteSceneObject(sceneOG, false); + else + sceneOG.RootPart.AddFlag(PrimFlags.TemporaryOnRez); + + return new LSL_Integer(1); + } } public class NotecardCache diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs index 325f342e0e..3290620c59 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs @@ -521,5 +521,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces LSL_Integer llLinksetDataWriteProtected(LSL_String name, LSL_String value, LSL_String pass); LSL_Integer llIsFriend(LSL_Key agent_id); + LSL_Integer llDerezObject(LSL_Key objectUUID, LSL_Integer flag); } } diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs index 41effdfec5..b34cce4f70 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs @@ -2796,11 +2796,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase { return m_LSL_Functions.llLinksetDataFindKeys(pattern, start, count); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public LSL_Integer llIsFriend(LSL_Key agent_id) { return m_LSL_Functions.llIsFriend(agent_id); } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public LSL_Integer llDerezObject(LSL_Key objectUUID, LSL_Integer flag) + { + return m_LSL_Functions.llDerezObject(objectUUID, flag); + } } }