diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 969347afcb..7c43b6a168 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs @@ -3164,7 +3164,33 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api module.Say(npcId, World, message, channel); } } + + public void osNpcSayTo(LSL_Key npc, string target, int channel, string msg) + { + CheckThreatLevel(ThreatLevel.High, "osNpcSayTo"); + INPCModule module = World.RequestModuleInterface(); + if (module != null) + { + UUID npcId = new UUID(npc.m_string); + + if (!module.CheckPermissions(npcId, m_host.OwnerID)) + return; + + ScenePresence NPCpresence = World.GetScenePresence(npcId); + if (NPCpresence == null || NPCpresence.IsDeleted) + return; + + Vector3 npcPOS = NPCpresence.AbsolutePosition; + string npcNAME = NPCpresence.Name; + UUID TargetID; + UUID.TryParse(target, out TargetID); + + IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); + if (wComm != null) + wComm.DeliverMessageTo(TargetID, channel, npcPOS, npcNAME, npcId, msg); + } + } public void osNpcShout(LSL_Key npc, int channel, string message) { CheckThreatLevel(ThreatLevel.High, "osNpcShout"); diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs index cfdc7d5a3f..2f800bc420 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs @@ -358,6 +358,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces void osNpcSetProfileImage(LSL_Key npc, string image); void osNpcSay(key npc, string message); void osNpcSay(key npc, int channel, string message); + void osNpcSayTo(LSL_Key npc, string target, int channel, string msg); void osNpcShout(key npc, int channel, string message); void osNpcSit(key npc, key target, int options); void osNpcStand(LSL_Key npc); diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs index a55dc771ca..ba899b0c97 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs @@ -682,8 +682,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase { m_OSSL_Functions.osNpcSay(npc, channel, message); } - - + public void osNpcSayTo(LSL_Key npc, string target, int channel, string msg) + { + m_OSSL_Functions.osNpcSayTo(npc, target, channel, msg); + } public void osNpcShout(key npc, int channel, string message) { m_OSSL_Functions.osNpcShout(npc, channel, message); diff --git a/bin/config-include/osslEnable.ini b/bin/config-include/osslEnable.ini index 05eb16f06a..0d2461a7a7 100644 --- a/bin/config-include/osslEnable.ini +++ b/bin/config-include/osslEnable.ini @@ -171,6 +171,7 @@ Allow_osNpcRemove = ${OSSL|osslNPC} Allow_osNpcSaveAppearance = ${OSSL|osslNPC} Allow_osNpcSay = ${OSSL|osslNPC} + Allow_osNpcSayTo = ${OSSL|osslNPC} Allow_osNpcSetRot = ${OSSL|osslNPC} Allow_osNpcShout = ${OSSL|osslNPC} Allow_osNpcSit = ${OSSL|osslNPC}