diff options
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Api')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 21 | ||||
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | 11 |
2 files changed, 27 insertions, 5 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 4366626..6d4072c 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; |
@@ -11658,6 +11668,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
11658 | Vector3 rayEnd = new Vector3((float)end.x, (float)end.y, (float)end.z); | 11668 | Vector3 rayEnd = new Vector3((float)end.x, (float)end.y, (float)end.z); |
11659 | Vector3 dir = rayEnd - rayStart; | 11669 | Vector3 dir = rayEnd - rayStart; |
11660 | 11670 | ||
11671 | float dist = Vector3.Mag(dir); | ||
11672 | |||
11661 | int count = 1; | 11673 | int count = 1; |
11662 | bool detectPhantom = false; | 11674 | bool detectPhantom = false; |
11663 | int dataFlags = 0; | 11675 | int dataFlags = 0; |
@@ -11714,6 +11726,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
11714 | int values = 0; | 11726 | int values = 0; |
11715 | foreach (ContactResult result in results) | 11727 | foreach (ContactResult result in results) |
11716 | { | 11728 | { |
11729 | if (result.Depth > dist) | ||
11730 | continue; | ||
11731 | |||
11717 | UUID itemID = UUID.Zero; | 11732 | UUID itemID = UUID.Zero; |
11718 | int linkNum = 0; | 11733 | int linkNum = 0; |
11719 | 11734 | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 44fd980..ecc5fb5 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | |||
@@ -2290,6 +2290,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2290 | 2290 | ||
2291 | string groupTitle = String.Empty; | 2291 | string groupTitle = String.Empty; |
2292 | 2292 | ||
2293 | if (!World.Permissions.CanRezObject(1, m_host.OwnerID, new Vector3((float)position.x, (float)position.y, (float)position.z))) | ||
2294 | return new LSL_Key(UUID.Zero.ToString()); | ||
2295 | |||
2293 | if (firstname != String.Empty || lastname != String.Empty) | 2296 | if (firstname != String.Empty || lastname != String.Empty) |
2294 | { | 2297 | { |
2295 | if (firstname != "Shown outfit:") | 2298 | if (firstname != "Shown outfit:") |
@@ -2619,8 +2622,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2619 | { | 2622 | { |
2620 | UUID npcId = new UUID(npc.m_string); | 2623 | UUID npcId = new UUID(npc.m_string); |
2621 | 2624 | ||
2622 | if (!module.CheckPermissions(npcId, m_host.OwnerID)) | 2625 | ILandObject l = World.LandChannel.GetLandObject(m_host.GroupPosition.X, m_host.GroupPosition.Y); |
2623 | return; | 2626 | if (l == null || m_host.OwnerID != l.LandData.OwnerID) |
2627 | { | ||
2628 | if (!module.CheckPermissions(npcId, m_host.OwnerID)) | ||
2629 | return; | ||
2630 | } | ||
2624 | 2631 | ||
2625 | module.DeleteNPC(npcId, World); | 2632 | module.DeleteNPC(npcId, World); |
2626 | } | 2633 | } |