diff options
3 files changed, 27 insertions, 7 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index fc6bec1..0cc8829 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -4641,7 +4641,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4641 | if (UUID.TryParse(agent, out agentId)) | 4641 | if (UUID.TryParse(agent, out agentId)) |
4642 | { | 4642 | { |
4643 | ScenePresence presence = World.GetScenePresence(agentId); | 4643 | ScenePresence presence = World.GetScenePresence(agentId); |
4644 | if (presence != null) | 4644 | if (presence != null && presence.PresenceType != PresenceType.Npc) |
4645 | { | 4645 | { |
4646 | // agent must not be a god | 4646 | // agent must not be a god |
4647 | if (presence.UserLevel >= 200) return; | 4647 | if (presence.UserLevel >= 200) return; |
@@ -4650,7 +4650,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4650 | if (m_host.OwnerID == World.LandChannel.GetLandObject( | 4650 | if (m_host.OwnerID == World.LandChannel.GetLandObject( |
4651 | presence.AbsolutePosition.X, presence.AbsolutePosition.Y).LandData.OwnerID) | 4651 | presence.AbsolutePosition.X, presence.AbsolutePosition.Y).LandData.OwnerID) |
4652 | { | 4652 | { |
4653 | World.TeleportClientHome(agentId, presence.ControllingClient); | 4653 | if (!World.TeleportClientHome(agentId, presence.ControllingClient)) |
4654 | { | ||
4655 | // They can't be teleported home for some reason | ||
4656 | GridRegion regionInfo = World.GridService.GetRegionByUUID(UUID.Zero, new UUID("2b02daac-e298-42fa-9a75-f488d37896e6")); | ||
4657 | if (regionInfo != null) | ||
4658 | { | ||
4659 | World.RequestTeleportLocation( | ||
4660 | presence.ControllingClient, regionInfo.RegionHandle, new Vector3(128, 128, 23), Vector3.Zero, | ||
4661 | (uint)(Constants.TeleportFlags.SetLastToTarget | Constants.TeleportFlags.ViaHome)); | ||
4662 | } | ||
4663 | } | ||
4654 | } | 4664 | } |
4655 | } | 4665 | } |
4656 | } | 4666 | } |
@@ -4664,7 +4674,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4664 | if (UUID.TryParse(agent, out agentId)) | 4674 | if (UUID.TryParse(agent, out agentId)) |
4665 | { | 4675 | { |
4666 | ScenePresence presence = World.GetScenePresence(agentId); | 4676 | ScenePresence presence = World.GetScenePresence(agentId); |
4667 | if (presence != null) | 4677 | if (presence != null && presence.PresenceType != PresenceType.Npc) |
4668 | { | 4678 | { |
4669 | // agent must not be a god | 4679 | // agent must not be a god |
4670 | if (presence.UserLevel >= 200) return; | 4680 | if (presence.UserLevel >= 200) return; |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 2424130..a9b8e04 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | |||
@@ -2265,6 +2265,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2265 | 2265 | ||
2266 | string groupTitle = String.Empty; | 2266 | string groupTitle = String.Empty; |
2267 | 2267 | ||
2268 | if (!World.Permissions.CanRezObject(1, m_host.OwnerID, new Vector3((float)position.x, (float)position.y, (float)position.z))) | ||
2269 | return new LSL_Key(UUID.Zero.ToString()); | ||
2270 | |||
2268 | if (firstname != String.Empty || lastname != String.Empty) | 2271 | if (firstname != String.Empty || lastname != String.Empty) |
2269 | { | 2272 | { |
2270 | if (firstname != "Shown outfit:") | 2273 | if (firstname != "Shown outfit:") |
@@ -2594,8 +2597,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2594 | { | 2597 | { |
2595 | UUID npcId = new UUID(npc.m_string); | 2598 | UUID npcId = new UUID(npc.m_string); |
2596 | 2599 | ||
2597 | if (!module.CheckPermissions(npcId, m_host.OwnerID)) | 2600 | ILandObject l = World.LandChannel.GetLandObject(m_host.GroupPosition.X, m_host.GroupPosition.Y); |
2598 | return; | 2601 | if (l == null || m_host.OwnerID != l.LandData.OwnerID) |
2602 | { | ||
2603 | if (!module.CheckPermissions(npcId, m_host.OwnerID)) | ||
2604 | return; | ||
2605 | } | ||
2599 | 2606 | ||
2600 | module.DeleteNPC(npcId, World); | 2607 | module.DeleteNPC(npcId, World); |
2601 | } | 2608 | } |
diff --git a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs index 9e6752c..8adf4c5 100644 --- a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs +++ b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs | |||
@@ -858,7 +858,7 @@ namespace OpenSim.Region.ScriptEngine.Shared | |||
858 | ret = Math.Sign(Quaternion.Mag(l) - Quaternion.Mag(r)); | 858 | ret = Math.Sign(Quaternion.Mag(l) - Quaternion.Mag(r)); |
859 | } | 859 | } |
860 | 860 | ||
861 | if (ascending == 0) | 861 | if (ascending != 1) |
862 | { | 862 | { |
863 | ret = 0 - ret; | 863 | ret = 0 - ret; |
864 | } | 864 | } |
@@ -891,6 +891,9 @@ namespace OpenSim.Region.ScriptEngine.Shared | |||
891 | stride = 1; | 891 | stride = 1; |
892 | } | 892 | } |
893 | 893 | ||
894 | if ((Data.Length % stride) != 0) | ||
895 | return new list(ret); | ||
896 | |||
894 | // we can optimize here in the case where stride == 1 and the list | 897 | // we can optimize here in the case where stride == 1 and the list |
895 | // consists of homogeneous types | 898 | // consists of homogeneous types |
896 | 899 | ||
@@ -910,7 +913,7 @@ namespace OpenSim.Region.ScriptEngine.Shared | |||
910 | if (homogeneous) | 913 | if (homogeneous) |
911 | { | 914 | { |
912 | Array.Sort(ret, new HomogeneousComparer()); | 915 | Array.Sort(ret, new HomogeneousComparer()); |
913 | if (ascending == 0) | 916 | if (ascending != 1) |
914 | { | 917 | { |
915 | Array.Reverse(ret); | 918 | Array.Reverse(ret); |
916 | } | 919 | } |