diff --git a/OpenSim/Region/Framework/Interfaces/INPCModule.cs b/OpenSim/Region/Framework/Interfaces/INPCModule.cs
index c50e734c18..b428c40a61 100644
--- a/OpenSim/Region/Framework/Interfaces/INPCModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/INPCModule.cs
@@ -134,4 +134,4 @@ namespace OpenSim.Region.Framework.Interfaces
/// UUID of owner if the NPC exists, UUID.Zero if there was no such agent, the agent is unowned or the agent was not an NPC
UUID GetOwner(UUID agentID);
}
-}
+}
\ No newline at end of file
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
index 7792ab587e..ba96ad8a97 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -2313,6 +2313,27 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
}
}
+ public LSL_Key osNpcGetOwner(LSL_Key npc)
+ {
+ CheckThreatLevel(ThreatLevel.None, "osNpcGetOwner");
+
+ INPCModule npcModule = World.RequestModuleInterface();
+ if (npcModule != null)
+ {
+ UUID npcId;
+ if (UUID.TryParse(npc.m_string, out npcId))
+ {
+ UUID owner = npcModule.GetOwner(npcId);
+ if (owner != UUID.Zero)
+ return new LSL_Key(owner.ToString());
+ else
+ return npc;
+ }
+ }
+
+ return new LSL_Key(UUID.Zero.ToString());
+ }
+
public LSL_Vector osNpcGetPos(LSL_Key npc)
{
CheckThreatLevel(ThreatLevel.High, "osNpcGetPos");
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
index 0f8cbdc7b2..ee48ec4be7 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
@@ -173,25 +173,35 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
LSL_List osGetLinkPrimitiveParams(int linknumber, LSL_List rules);
- 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);
- void osNpcLoadAppearance(key npc, string notecard);
- vector osNpcGetPos(key npc);
- void osNpcMoveTo(key npc, vector position);
- void osNpcMoveToTarget(key npc, vector target, int options);
- rotation osNpcGetRot(key npc);
- void osNpcSetRot(LSL_Key npc, rotation rot);
- void osNpcStopMoveToTarget(LSL_Key npc);
- void osNpcSay(key npc, string message);
- void osNpcSit(key npc, key target, int options);
- void osNpcStand(LSL_Key npc);
- void osNpcRemove(key npc);
- void osNpcPlayAnimation(LSL_Key npc, string animation);
- void osNpcStopAnimation(LSL_Key npc, string animation);
+ 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);
+ void osNpcLoadAppearance(key npc, string notecard);
+ vector osNpcGetPos(key npc);
+ void osNpcMoveTo(key npc, vector position);
+ void osNpcMoveToTarget(key npc, vector target, int options);
- LSL_Key osOwnerSaveAppearance(string notecard);
- LSL_Key osAgentSaveAppearance(key agentId, string notecard);
+ ///
+ /// Get the owner of the NPC
+ ///
+ ///
+ ///
+ /// The owner of the NPC for an owned NPC. The NPC's agent id for an unowned NPC. UUID.Zero if the key is not an npc.
+ ///
+ LSL_Key osNpcGetOwner(key npc);
+
+ rotation osNpcGetRot(key npc);
+ void osNpcSetRot(LSL_Key npc, rotation rot);
+ void osNpcStopMoveToTarget(LSL_Key npc);
+ void osNpcSay(key npc, string message);
+ void osNpcSit(key npc, key target, int options);
+ void osNpcStand(LSL_Key npc);
+ void osNpcRemove(key npc);
+ void osNpcPlayAnimation(LSL_Key npc, string animation);
+ void osNpcStopAnimation(LSL_Key npc, string animation);
+
+ LSL_Key osOwnerSaveAppearance(string notecard);
+ LSL_Key osAgentSaveAppearance(key agentId, string notecard);
key osGetMapTexture();
key osGetRegionMapTexture(string regionName);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
index 02efecf13e..38a814d30c 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
@@ -513,6 +513,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
m_OSSL_Functions.osNpcLoadAppearance(npc, notecard);
}
+ public LSL_Key osNpcGetOwner(LSL_Key npc)
+ {
+ return m_OSSL_Functions.osNpcGetOwner(npc);
+ }
+
public vector osNpcGetPos(LSL_Key npc)
{
return m_OSSL_Functions.osNpcGetPos(npc);