From 7c1d075a5a72dd9411e40676054b648b26f116a6 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 27 Jan 2012 23:17:13 +0000
Subject: Implement osIsNpc(key npc):integer.  This return TRUE if the given
 key belongs to an NPC in the region.  FALSE if not or if the NPC module isn't
 present.

---
 .../ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs  | 17 +++++++++++++++++
 .../ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs      |  7 +++++++
 .../Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs |  5 +++++
 3 files changed, 29 insertions(+)

diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
index ba96ad8..034d545 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -2202,6 +2202,23 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
             return retVal;
         }
 
+        public LSL_Integer osIsNpc(LSL_Key npc)
+        {
+            CheckThreatLevel(ThreatLevel.None, "osIsNpc");
+            m_host.AddScriptLPS(1);
+
+            INPCModule module = World.RequestModuleInterface<INPCModule>();
+            if (module != null)
+            {
+                UUID npcId;
+                if (UUID.TryParse(npc.m_string, out npcId))
+                    if (module.IsNPC(npcId, World))
+                        return ScriptBaseClass.TRUE;
+            }
+
+            return ScriptBaseClass.FALSE;
+        }
+
         public LSL_Key osNpcCreate(string firstname, string lastname, LSL_Vector position, string notecard)
         {
             CheckThreatLevel(ThreatLevel.High, "osNpcCreate");
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
index ee48ec4..dbc1dfc 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
@@ -173,6 +173,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
 
         LSL_List osGetLinkPrimitiveParams(int linknumber, LSL_List rules);
 
+        /// <summary>
+        /// Check if the given key is an npc
+        /// </summary>
+        /// <param name="npc"></param>
+        /// <returns>TRUE if the key belongs to an npc in the scene.  FALSE otherwise.</returns>
+        LSL_Integer osIsNpc(LSL_Key npc);
+
         key         osNpcCreate(string user, string name, vector position, string notecard);
         key         osNpcCreate(string user, string name, vector position, string notecard, int options);
         LSL_Key     osNpcSaveAppearance(key npc, string notecard);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
index 38a814d..cc8d417 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
@@ -493,6 +493,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
             return m_OSSL_Functions.osGetLinkPrimitiveParams(linknumber, rules);
         }
 
+        public LSL_Integer osIsNpc(LSL_Key npc)
+        {
+            return m_OSSL_Functions.osIsNpc(npc);
+        }
+
         public key osNpcCreate(string user, string name, vector position, key cloneFrom)
         {
             return m_OSSL_Functions.osNpcCreate(user, name, position, cloneFrom);
-- 
cgit v1.1