diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
index 9742119d66..8ecbaba6d1 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -1874,6 +1874,43 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
"dataserver", resobj, new DetectParams[0]));
}
+
+ ///
+ /// Similar to llDie but given an object UUID
+ ///
+ ///
+
+ public void osDie(LSL_Key objectUUID)
+ {
+ CheckThreatLevel(ThreatLevel.VeryHigh, "osDie");
+ m_host.AddScriptLPS(1);
+
+ UUID objUUID;
+ if (!UUID.TryParse(objectUUID, out objUUID)) // prior to patching, a thrown exception regarding invalid GUID format would be shouted instead.
+ {
+ OSSLShoutError("osDie() cannot delete objects with invalid UUIDs");
+ return;
+ }
+
+ DeleteObject(objUUID);
+ }
+
+ private void DeleteObject(UUID objUUID)
+ {
+ SceneObjectGroup sceneOG = World.GetSceneObjectGroup(objUUID);
+
+ if (sceneOG == null) // prior to patching, PostObjectEvent() would cause a throw exception to be shouted instead.
+ {
+ OSSLShoutError("osDie() cannot delete " + objUUID.ToString() + ", object was not found in scene.");
+ return;
+ }
+
+ if (sceneOG.OwnerID != m_host.OwnerID)
+ return;
+
+ World.DeleteSceneObject(sceneOG, false);
+ }
+
///
/// Write a notecard directly to the prim's inventory.
///
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
index cf3e6df31d..7415fea6d8 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
@@ -316,6 +316,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
///
void osForceBreakAllLinks();
+ ///
+ /// Similar to llDie but given an object UUID
+ ///
+ ///
+
+ void osDie(LSL_Key objectUUID);
+
///
/// Check if the given key is an npc
///
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
index 2e8a76c34e..c34ccd0a21 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
@@ -577,6 +577,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
m_OSSL_Functions.osForceBreakAllLinks();
}
+ public void osDie(LSL_Key objectUUID)
+ {
+ m_OSSL_Functions.osDie(objectUUID);
+ }
+
public LSL_Integer osIsNpc(LSL_Key npc)
{
return m_OSSL_Functions.osIsNpc(npc);