add osLocalTeleportAgent(key agent, vector position, vector velocity, vector lookat, LSL_Integer flags). Velocity only works with ubOde but still not good. flags = bit field: 1 use velocity, 2 use lookat, 4 rotate avatar look in current velocity direction (ignored if 2 ie flag = 7 is same as 3). This bypasses most the unnecessary logic of osTeleportAgent, having usage same permissions. It may do region crossings(?). Experimental stage, feedbakc expected ;)

This commit is contained in:
UbitUmarov
2019-05-01 01:35:45 +01:00
parent 9225b78309
commit 11c945a565
6 changed files with 62 additions and 28 deletions

View File

@@ -924,6 +924,23 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
}
// Teleport functions
public void osLocalTeleportAgent(LSL_Key agent, LSL_Types.Vector3 position, LSL_Types.Vector3 velocity, LSL_Types.Vector3 lookat, LSL_Integer flags)
{
UUID agentId;
if (!UUID.TryParse(agent, out agentId))
return;
ScenePresence presence = World.GetScenePresence(agentId);
if (presence == null || presence.IsDeleted || presence.IsInTransit)
return;
Vector3 pos = presence.AbsolutePosition;
if (!checkAllowAgentTPbyLandOwner(agentId, pos))
return;
World.RequestLocalTeleport(presence, position, velocity, lookat, flags);
}
public void osTeleportAgent(string agent, string regionName, LSL_Types.Vector3 position, LSL_Types.Vector3 lookat)
{
// High because there is no security check. High griefer potential