aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs94
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs2
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs10
3 files changed, 106 insertions, 0 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index fb0fdc9..89f2068 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -4169,6 +4169,100 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4169 ScriptSleep(5000); 4169 ScriptSleep(5000);
4170 } 4170 }
4171 4171
4172 public void llTeleportAgent(string agent, string destination, LSL_Vector pos, LSL_Vector lookAt)
4173 {
4174 m_host.AddScriptLPS(1);
4175 UUID agentId = new UUID();
4176
4177 Vector3 targetPos = new Vector3((float)pos.x, (float)pos.y, (float)pos.z);
4178 Vector3 targetLookAt = new Vector3((float)lookAt.x, (float)lookAt.y, (float)lookAt.z);
4179
4180 if (UUID.TryParse(agent, out agentId))
4181 {
4182 ScenePresence presence = World.GetScenePresence(agentId);
4183 if (presence != null && presence.PresenceType != PresenceType.Npc)
4184 {
4185 // agent must not be a god
4186 if (presence.GodLevel >= 200) return;
4187
4188 if (destination == String.Empty)
4189 destination = World.RegionInfo.RegionName;
4190
4191 // agent must be over the owners land
4192 if (m_host.OwnerID == World.LandChannel.GetLandObject(
4193 presence.AbsolutePosition.X, presence.AbsolutePosition.Y).LandData.OwnerID)
4194 {
4195 DoLLTeleport(presence, destination, targetPos, targetLookAt);
4196 }
4197 else // or must be wearing the prim
4198 {
4199 if (m_host.ParentGroup.AttachmentPoint != 0 && m_host.OwnerID == presence.UUID)
4200 {
4201 DoLLTeleport(presence, destination, targetPos, targetLookAt);
4202 }
4203 }
4204 }
4205 }
4206 }
4207
4208 public void llTeleportAgentGlobalCoords(string agent, LSL_Vector global_coords, LSL_Vector pos, LSL_Vector lookAt)
4209 {
4210 m_host.AddScriptLPS(1);
4211 UUID agentId = new UUID();
4212
4213 ulong regionHandle = Utils.UIntsToLong((uint)global_coords.x, (uint)global_coords.y);
4214
4215 Vector3 targetPos = new Vector3((float)pos.x, (float)pos.y, (float)pos.z);
4216 Vector3 targetLookAt = new Vector3((float)lookAt.x, (float)lookAt.y, (float)lookAt.z);
4217 if (UUID.TryParse(agent, out agentId))
4218 {
4219 ScenePresence presence = World.GetScenePresence(agentId);
4220 if (presence != null && presence.PresenceType != PresenceType.Npc)
4221 {
4222 // agent must not be a god
4223 if (presence.GodLevel >= 200) return;
4224
4225 // agent must be over the owners land
4226 if (m_host.OwnerID == World.LandChannel.GetLandObject(
4227 presence.AbsolutePosition.X, presence.AbsolutePosition.Y).LandData.OwnerID)
4228 {
4229 World.RequestTeleportLocation(presence.ControllingClient, regionHandle, targetPos, targetLookAt, (uint)TeleportFlags.ViaLocation);
4230 }
4231 else // or must be wearing the prim
4232 {
4233 if (m_host.ParentGroup.AttachmentPoint != 0 && m_host.OwnerID == presence.UUID)
4234 {
4235 World.RequestTeleportLocation(presence.ControllingClient, regionHandle, targetPos, targetLookAt, (uint)TeleportFlags.ViaLocation);
4236 }
4237 }
4238 }
4239 }
4240 }
4241
4242 private void DoLLTeleport(ScenePresence sp, string destination, Vector3 targetPos, Vector3 targetLookAt)
4243 {
4244 UUID assetID = KeyOrName(destination);
4245
4246 // The destinaion is not an asset ID and also doesn't name a landmark.
4247 // Use it as a sim name
4248 if (assetID == UUID.Zero)
4249 {
4250 World.RequestTeleportLocation(sp.ControllingClient, destination, targetPos, targetLookAt, (uint)TeleportFlags.ViaLocation);
4251 return;
4252 }
4253
4254 AssetBase lma = World.AssetService.Get(assetID.ToString());
4255 if (lma == null)
4256 return;
4257
4258 if (lma.Type != (sbyte)AssetType.Landmark)
4259 return;
4260
4261 AssetLandmark lm = new AssetLandmark(lma);
4262
4263 World.RequestTeleportLocation(sp.ControllingClient, lm.RegionHandle, targetPos, targetLookAt, (uint)TeleportFlags.ViaLocation);
4264 }
4265
4172 public void llTextBox(string agent, string message, int chatChannel) 4266 public void llTextBox(string agent, string message, int chatChannel)
4173 { 4267 {
4174 IDialogModule dm = World.RequestModuleInterface<IDialogModule>(); 4268 IDialogModule dm = World.RequestModuleInterface<IDialogModule>();
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs
index 7f5d1fe..d39b204 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs
@@ -403,6 +403,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
403 void llTargetOmega(LSL_Vector axis, double spinrate, double gain); 403 void llTargetOmega(LSL_Vector axis, double spinrate, double gain);
404 void llTargetRemove(int number); 404 void llTargetRemove(int number);
405 void llTeleportAgentHome(string agent); 405 void llTeleportAgentHome(string agent);
406 void llTeleportAgent(string agent, string simname, LSL_Vector pos, LSL_Vector lookAt);
407 void llTeleportAgentGlobalCoords(string agent, LSL_Vector global, LSL_Vector pos, LSL_Vector lookAt);
406 void llTextBox(string avatar, string message, int chat_channel); 408 void llTextBox(string avatar, string message, int chat_channel);
407 LSL_String llToLower(string source); 409 LSL_String llToLower(string source);
408 LSL_String llToUpper(string source); 410 LSL_String llToUpper(string source);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs
index c0bf29c..06f5617 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs
@@ -1833,6 +1833,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
1833 m_LSL_Functions.llTargetRemove(number); 1833 m_LSL_Functions.llTargetRemove(number);
1834 } 1834 }
1835 1835
1836 public void llTeleportAgent(string agent, string simname, LSL_Vector pos, LSL_Vector lookAt)
1837 {
1838 m_LSL_Functions.llTeleportAgent(agent, simname, pos, lookAt);
1839 }
1840
1841 public void llTeleportAgentGlobalCoords(string agent, LSL_Vector global, LSL_Vector pos, LSL_Vector lookAt)
1842 {
1843 m_LSL_Functions.llTeleportAgentGlobalCoords(agent, global, pos, lookAt);
1844 }
1845
1836 public void llTeleportAgentHome(string agent) 1846 public void llTeleportAgentHome(string agent)
1837 { 1847 {
1838 m_LSL_Functions.llTeleportAgentHome(agent); 1848 m_LSL_Functions.llTeleportAgentHome(agent);