diff options
3 files changed, 35 insertions, 0 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 9e76ee2..3e7ffab 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | |||
@@ -513,6 +513,35 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
513 | } | 513 | } |
514 | } | 514 | } |
515 | 515 | ||
516 | // Teleport functions | ||
517 | public void osTeleportAgent(string agent, uint regionX, uint regionY, LSL_Types.Vector3 position, LSL_Types.Vector3 lookat) | ||
518 | { | ||
519 | // High because there is no security check. High griefer potential | ||
520 | // | ||
521 | CheckThreatLevel(ThreatLevel.High, "osTeleportAgent"); | ||
522 | |||
523 | ulong regionHandle = Util.UIntsToLong((regionX * (uint)Constants.RegionSize), (regionY * (uint)Constants.RegionSize)); | ||
524 | |||
525 | m_host.AddScriptLPS(1); | ||
526 | UUID agentId = new UUID(); | ||
527 | if (UUID.TryParse(agent, out agentId)) | ||
528 | { | ||
529 | ScenePresence presence = World.GetScenePresence(agentId); | ||
530 | if (presence != null) | ||
531 | { | ||
532 | // agent must be over owners land to avoid abuse | ||
533 | if (m_host.OwnerID == World.GetLandOwner(presence.AbsolutePosition.X, presence.AbsolutePosition.Y)) | ||
534 | { | ||
535 | presence.ControllingClient.SendTeleportLocationStart(); | ||
536 | World.RequestTeleportLocation(presence.ControllingClient, regionHandle, | ||
537 | new Vector3((float)position.x, (float)position.y, (float)position.z), | ||
538 | new Vector3((float)lookat.x, (float)lookat.y, (float)lookat.z), (uint)TPFlags.ViaLocation); | ||
539 | ScriptSleep(5000); | ||
540 | } | ||
541 | } | ||
542 | } | ||
543 | } | ||
544 | |||
516 | public void osTeleportAgent(string agent, LSL_Types.Vector3 position, LSL_Types.Vector3 lookat) | 545 | public void osTeleportAgent(string agent, LSL_Types.Vector3 position, LSL_Types.Vector3 lookat) |
517 | { | 546 | { |
518 | osTeleportAgent(agent, World.RegionInfo.RegionName, position, lookat); | 547 | osTeleportAgent(agent, World.RegionInfo.RegionName, position, lookat); |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs index a8d98dc..79b30c7 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs | |||
@@ -66,6 +66,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces | |||
66 | 66 | ||
67 | // Teleport commands | 67 | // Teleport commands |
68 | void osTeleportAgent(string agent, string regionName, LSL_Types.Vector3 position, LSL_Types.Vector3 lookat); | 68 | void osTeleportAgent(string agent, string regionName, LSL_Types.Vector3 position, LSL_Types.Vector3 lookat); |
69 | void osTeleportAgent(string agent, uint regionX, uint regionY, LSL_Types.Vector3 position, LSL_Types.Vector3 lookat); | ||
69 | void osTeleportAgent(string agent, LSL_Types.Vector3 position, LSL_Types.Vector3 lookat); | 70 | void osTeleportAgent(string agent, LSL_Types.Vector3 position, LSL_Types.Vector3 lookat); |
70 | 71 | ||
71 | // Animation commands | 72 | // Animation commands |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs index 01b2d86..3817a07 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs | |||
@@ -131,6 +131,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase | |||
131 | m_OSSL_Functions.osTeleportAgent(agent, regionName, position, lookat); | 131 | m_OSSL_Functions.osTeleportAgent(agent, regionName, position, lookat); |
132 | } | 132 | } |
133 | 133 | ||
134 | public void osTeleportAgent(string agent, long regionX, long regionY, vector position, vector lookat) | ||
135 | { | ||
136 | m_OSSL_Functions.osTeleportAgent(agent, (uint) regionX, (uint) regionY, position, lookat); | ||
137 | } | ||
138 | |||
134 | public void osTeleportAgent(string agent, vector position, vector lookat) | 139 | public void osTeleportAgent(string agent, vector position, vector lookat) |
135 | { | 140 | { |
136 | m_OSSL_Functions.osTeleportAgent(agent, position, lookat); | 141 | m_OSSL_Functions.osTeleportAgent(agent, position, lookat); |