diff options
author | Charles Krinke | 2008-10-26 18:26:56 +0000 |
---|---|---|
committer | Charles Krinke | 2008-10-26 18:26:56 +0000 |
commit | ba79c26d2d4a2ef4a450d74d79668a603989a4af (patch) | |
tree | 9131490fc1aa54dc056fb373a907896a4b242ba2 /OpenSim/Region/ScriptEngine/Shared/Api | |
parent | Thank you kindly, Idb for a patch that solves: (diff) | |
download | opensim-SC_OLD-ba79c26d2d4a2ef4a450d74d79668a603989a4af.zip opensim-SC_OLD-ba79c26d2d4a2ef4a450d74d79668a603989a4af.tar.gz opensim-SC_OLD-ba79c26d2d4a2ef4a450d74d79668a603989a4af.tar.bz2 opensim-SC_OLD-ba79c26d2d4a2ef4a450d74d79668a603989a4af.tar.xz |
Thank you kindly, Idb for a patch that solves:
The following should silently fail when attached,
llBreakAllLinks, llBreakLink, llCreateLink.
The following should be restricted to avatars in the same sim,
llGetAgentInfo, llSameGroup, llGetAgentSize, llGetAnimationList.
Comment added to the following unimplemented functions,
llGetAgentLanguage, llGetAnimation.
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Api')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index b0a99f3..55e370f 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -2976,6 +2976,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2976 | } | 2976 | } |
2977 | IClientAPI client = World.GetScenePresence(m_host.TaskInventory[invItemID].PermsGranter).ControllingClient; | 2977 | IClientAPI client = World.GetScenePresence(m_host.TaskInventory[invItemID].PermsGranter).ControllingClient; |
2978 | SceneObjectPart targetPart = World.GetSceneObjectPart((UUID)target); | 2978 | SceneObjectPart targetPart = World.GetSceneObjectPart((UUID)target); |
2979 | if (targetPart.ParentGroup.RootPart.AttachmentPoint != 0) | ||
2980 | return; // Fail silently if attached | ||
2979 | SceneObjectGroup parentPrim = null, childPrim = null; | 2981 | SceneObjectGroup parentPrim = null, childPrim = null; |
2980 | if (targetPart != null) | 2982 | if (targetPart != null) |
2981 | { | 2983 | { |
@@ -3015,6 +3017,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3015 | if (linknum < ScriptBaseClass.LINK_THIS) | 3017 | if (linknum < ScriptBaseClass.LINK_THIS) |
3016 | return; | 3018 | return; |
3017 | SceneObjectGroup parentPrim = m_host.ParentGroup; | 3019 | SceneObjectGroup parentPrim = m_host.ParentGroup; |
3020 | if (parentPrim.RootPart.AttachmentPoint != 0) | ||
3021 | return; // Fail silently if attached | ||
3018 | SceneObjectPart childPrim = null; | 3022 | SceneObjectPart childPrim = null; |
3019 | switch (linknum) | 3023 | switch (linknum) |
3020 | { | 3024 | { |
@@ -3072,6 +3076,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3072 | { | 3076 | { |
3073 | m_host.AddScriptLPS(1); | 3077 | m_host.AddScriptLPS(1); |
3074 | SceneObjectGroup parentPrim = m_host.ParentGroup; | 3078 | SceneObjectGroup parentPrim = m_host.ParentGroup; |
3079 | if (parentPrim.RootPart.AttachmentPoint != 0) | ||
3080 | return; // Fail silently if attached | ||
3075 | List<SceneObjectPart> parts = new List<SceneObjectPart>(parentPrim.Children.Values); | 3081 | List<SceneObjectPart> parts = new List<SceneObjectPart>(parentPrim.Children.Values); |
3076 | parts.Remove(parentPrim.RootPart); | 3082 | parts.Remove(parentPrim.RootPart); |
3077 | foreach (SceneObjectPart part in parts) | 3083 | foreach (SceneObjectPart part in parts) |
@@ -3435,6 +3441,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3435 | 3441 | ||
3436 | public LSL_String llGetAnimation(string id) | 3442 | public LSL_String llGetAnimation(string id) |
3437 | { | 3443 | { |
3444 | // This should only return a value if the avatar is in the same region | ||
3438 | m_host.AddScriptLPS(1); | 3445 | m_host.AddScriptLPS(1); |
3439 | NotImplemented("llGetAnimation"); | 3446 | NotImplemented("llGetAnimation"); |
3440 | return String.Empty; | 3447 | return String.Empty; |
@@ -4649,6 +4656,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4649 | return 0; | 4656 | return 0; |
4650 | } | 4657 | } |
4651 | 4658 | ||
4659 | if (agent.IsChildAgent) | ||
4660 | return 0; // Fail if they are not in the same region | ||
4661 | |||
4652 | // note: in OpenSim, sitting seems to cancel AGENT_ALWAYS_RUN, unlike SL | 4662 | // note: in OpenSim, sitting seems to cancel AGENT_ALWAYS_RUN, unlike SL |
4653 | if (agent.SetAlwaysRun) | 4663 | if (agent.SetAlwaysRun) |
4654 | { | 4664 | { |
@@ -4728,6 +4738,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4728 | 4738 | ||
4729 | public LSL_String llGetAgentLanguage(string id) | 4739 | public LSL_String llGetAgentLanguage(string id) |
4730 | { | 4740 | { |
4741 | // This should only return a value if the avatar is in the same region | ||
4731 | m_host.AddScriptLPS(1); | 4742 | m_host.AddScriptLPS(1); |
4732 | NotImplemented("llGetAgentLanguage"); | 4743 | NotImplemented("llGetAgentLanguage"); |
4733 | return ""; | 4744 | return ""; |
@@ -4933,7 +4944,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4933 | m_host.AddScriptLPS(1); | 4944 | m_host.AddScriptLPS(1); |
4934 | ScenePresence avatar = World.GetScenePresence((UUID)id); | 4945 | ScenePresence avatar = World.GetScenePresence((UUID)id); |
4935 | LSL_Vector agentSize; | 4946 | LSL_Vector agentSize; |
4936 | if (avatar == null) | 4947 | if (avatar == null || avatar.IsChildAgent) // Fail if not in the same region |
4937 | { | 4948 | { |
4938 | agentSize = ScriptBaseClass.ZERO_VECTOR; | 4949 | agentSize = ScriptBaseClass.ZERO_VECTOR; |
4939 | } | 4950 | } |
@@ -4967,7 +4978,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4967 | if (!UUID.TryParse(agent, out agentId)) | 4978 | if (!UUID.TryParse(agent, out agentId)) |
4968 | return new LSL_Integer(0); | 4979 | return new LSL_Integer(0); |
4969 | ScenePresence presence = World.GetScenePresence(agentId); | 4980 | ScenePresence presence = World.GetScenePresence(agentId); |
4970 | if (presence == null) | 4981 | if (presence == null || presence.IsChildAgent) // Return flase for child agents |
4971 | return new LSL_Integer(0); | 4982 | return new LSL_Integer(0); |
4972 | IClientAPI client = presence.ControllingClient; | 4983 | IClientAPI client = presence.ControllingClient; |
4973 | if (m_host.GroupID == client.ActiveGroupId) | 4984 | if (m_host.GroupID == client.ActiveGroupId) |
@@ -6374,7 +6385,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
6374 | 6385 | ||
6375 | LSL_List l = new LSL_List(); | 6386 | LSL_List l = new LSL_List(); |
6376 | ScenePresence av = World.GetScenePresence((UUID)id); | 6387 | ScenePresence av = World.GetScenePresence((UUID)id); |
6377 | if (av == null) | 6388 | if (av == null || av.IsChildAgent) // only if in the region |
6378 | return l; | 6389 | return l; |
6379 | UUID[] anims; | 6390 | UUID[] anims; |
6380 | anims = av.GetAnimationArray(); | 6391 | anims = av.GetAnimationArray(); |