mirror of
https://github.com/opensim/opensim.git
synced 2026-07-31 13:55:35 +08:00
Mantis 6063 osNpcTouch.
Allow NPCS to touch obects.
This commit is contained in:
committed by
Justin Clark-Casey (justincc)
parent
43a2da9edb
commit
1b1f841c6a
@@ -2677,6 +2677,41 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
}
|
||||
}
|
||||
|
||||
public void osNpcTouch(LSL_Key npcLSL_Key, LSL_Key object_key, LSL_Integer link_num)
|
||||
{
|
||||
CheckThreatLevel(ThreatLevel.High, "osNpcTouch");
|
||||
m_host.AddScriptLPS(1);
|
||||
INPCModule module = World.RequestModuleInterface<INPCModule>();
|
||||
int linkNum = link_num.value;
|
||||
if (module != null || (linkNum < 0 && linkNum != ScriptBaseClass.LINK_THIS))
|
||||
{
|
||||
UUID npcId;
|
||||
if (!UUID.TryParse(npcLSL_Key, out npcId) || !module.CheckPermissions(npcId, m_host.OwnerID))
|
||||
return;
|
||||
SceneObjectPart part = null;
|
||||
UUID objectId;
|
||||
if (UUID.TryParse(LSL_String.ToString(object_key), out objectId))
|
||||
part = World.GetSceneObjectPart(objectId);
|
||||
if (part == null)
|
||||
return;
|
||||
if (linkNum != ScriptBaseClass.LINK_THIS)
|
||||
{
|
||||
if (linkNum == 0 || linkNum == ScriptBaseClass.LINK_ROOT)
|
||||
{ // 0 and 1 are treated as root, find the root if the current part isnt it
|
||||
if (!part.IsRoot)
|
||||
part = part.ParentGroup.RootPart;
|
||||
}
|
||||
else
|
||||
{ // Find the prim with the given link number if not found then fail silently
|
||||
part = part.ParentGroup.GetLinkNumPart(linkNum);
|
||||
if (part == null)
|
||||
return;
|
||||
}
|
||||
}
|
||||
module.Touch(npcId, part.UUID);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Save the current appearance of the script owner permanently to the named notecard.
|
||||
/// </summary>
|
||||
|
||||
@@ -231,6 +231,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
|
||||
void osNpcRemove(key npc);
|
||||
void osNpcPlayAnimation(LSL_Key npc, string animation);
|
||||
void osNpcStopAnimation(LSL_Key npc, string animation);
|
||||
void osNpcTouch(LSL_Key npcLSL_Key, LSL_Key object_key, LSL_Integer link_num);
|
||||
void osNpcWhisper(key npc, int channel, string message);
|
||||
|
||||
LSL_Key osOwnerSaveAppearance(string notecard);
|
||||
|
||||
@@ -626,6 +626,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||
m_OSSL_Functions.osNpcWhisper(npc, channel, message);
|
||||
}
|
||||
|
||||
public void osNpcTouch(LSL_Key npcLSL_Key, LSL_Key object_key, LSL_Integer link_num)
|
||||
{
|
||||
m_OSSL_Functions.osNpcTouch(npcLSL_Key, object_key, link_num);
|
||||
}
|
||||
|
||||
public LSL_Key osOwnerSaveAppearance(string notecard)
|
||||
{
|
||||
return m_OSSL_Functions.osOwnerSaveAppearance(notecard);
|
||||
|
||||
Reference in New Issue
Block a user