From af86e2939c54837d47303668266ca314d405fb37 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Wed, 25 Apr 2012 03:47:26 +0100
Subject: zero out SP velocity before calling SP.Teleport(), as the client
expects (though this is also effectively done by physics at the moment)
---
.../Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs | 1 +
1 file changed, 1 insertion(+)
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 221e0bd..f094346 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -215,6 +215,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
sp.ControllingClient.SendTeleportStart(teleportFlags);
sp.ControllingClient.SendLocalTeleport(position, lookAt, teleportFlags);
+ sp.Velocity = Vector3.Zero;
sp.Teleport(position);
foreach (SceneObjectGroup grp in sp.GetAttachments())
--
cgit v1.1
From 3be3189ee067b26fa6486535a65a0c0e99a9ef5b Mon Sep 17 00:00:00 2001
From: Melanie
Date: Wed, 25 Apr 2012 04:00:01 +0100
Subject: Commit the avination Teleport() methods (adaptedto justincc's
changes)
---
OpenSim/Region/Framework/Scenes/ScenePresence.cs | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 8cb4921..e8178ce 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -990,13 +990,24 @@ namespace OpenSim.Region.Framework.Scenes
///
public void Teleport(Vector3 pos)
{
-// m_log.DebugFormat("[SCENE PRESENCE]: Moving {0} to {1} in {2}", Name, pos, Scene.RegionInfo.RegionName);
+ TeleportWithMomentum(pos, null);
+ }
+ public void TeleportWithMomentum(Vector3 pos, Vector3? v)
+ {
bool isFlying = Flying;
+ Vector3 vel = Velocity;
RemoveFromPhysicalScene();
CheckLandingPoint(ref pos);
AbsolutePosition = pos;
AddToPhysicalScene(isFlying);
+ if (PhysicsActor != null)
+ {
+ if (v.HasValue)
+ PhysicsActor.SetMomentum((Vector3)v);
+ else
+ PhysicsActor.SetMomentum(vel);
+ }
SendTerseUpdateToAllClients();
}
--
cgit v1.1
From cf1c34605bf58ee783c2a7d0c63f51ecf6d3288a Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Tue, 24 Apr 2012 22:17:10 -0700
Subject: HG: Moved User-level code down to the HGEntityTransferModule where it
belongs.
---
.../Framework/EntityTransfer/EntityTransferModule.cs | 15 +--------------
.../Framework/EntityTransfer/HGEntityTransferModule.cs | 13 +++++++++++++
2 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 221e0bd..8d810fc 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -61,8 +61,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
set { m_MaxTransferDistance = value; }
}
- private int m_levelHGTeleport = 0;
-
protected bool m_Enabled = false;
protected Scene m_aScene;
protected List m_Scenes = new List();
@@ -106,7 +104,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
if (transferConfig != null)
{
MaxTransferDistance = transferConfig.GetInt("max_distance", 4095);
- m_levelHGTeleport = transferConfig.GetInt("LevelHGTeleport", 0);
}
m_agentsInTransit = new List();
@@ -240,16 +237,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
destinationRegionName = finalDestination.RegionName;
- // check if HyperGrid teleport is allowed, based on user level
- int flags = m_aScene.GridService.GetRegionFlags(sp.Scene.RegionInfo.ScopeID, reg.RegionID);
-
- if (((flags & (int)OpenSim.Data.RegionFlags.Hyperlink) != 0) && (sp.UserLevel < m_levelHGTeleport))
- {
- m_log.WarnFormat("[ENTITY TRANSFER MODULE]: Final destination link is non permitted hypergrid region. Unable to teleport agent.");
- sp.ControllingClient.SendTeleportFailed("HyperGrid teleport not permitted");
- return;
- }
-
uint curX = 0, curY = 0;
Utils.LongToUInts(sp.Scene.RegionInfo.RegionHandle, out curX, out curY);
int curCellX = (int)(curX / Constants.RegionSize);
@@ -413,7 +400,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
bool logout = false;
if (!CreateAgent(sp, reg, finalDestination, agentCircuit, teleportFlags, out reason, out logout))
{
- sp.ControllingClient.SendTeleportFailed(String.Format("Destination refused: {0}",
+ sp.ControllingClient.SendTeleportFailed(String.Format("Teleport refused: {0}",
reason));
return;
}
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
index 7f9175d..6a92e61 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
@@ -50,6 +50,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private bool m_Initialized = false;
+ private int m_levelHGTeleport = 0;
private GatekeeperServiceConnector m_GatekeeperConnector;
@@ -68,6 +69,10 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
string name = moduleConfig.GetString("EntityTransferModule", "");
if (name == Name)
{
+ IConfig transferConfig = source.Configs["EntityTransfer"];
+ if (transferConfig != null)
+ m_levelHGTeleport = transferConfig.GetInt("LevelHGTeleport", 0);
+
InitialiseCommon(source);
m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: {0} enabled.", Name);
}
@@ -164,6 +169,14 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
if (flags == -1 /* no region in DB */ || (flags & (int)OpenSim.Data.RegionFlags.Hyperlink) != 0)
{
// this user is going to another grid
+ // check if HyperGrid teleport is allowed, based on user level
+ if (sp.UserLevel < m_levelHGTeleport)
+ {
+ m_log.WarnFormat("[ENTITY TRANSFER MODULE]: Final destination link is non permitted hypergrid region. Unable to teleport agent.");
+ reason = "HyperGrid teleport not permitted";
+ return false;
+ }
+
if (agentCircuit.ServiceURLs.ContainsKey("HomeURI"))
{
string userAgentDriver = agentCircuit.ServiceURLs["HomeURI"].ToString();
--
cgit v1.1
From 7aa25c6762e40ee9254e2982a9fca89913fa0279 Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Tue, 24 Apr 2012 22:40:07 -0700
Subject: Slight rewording of output messages.
---
.../CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
index 6a92e61..634fb43 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
@@ -172,7 +172,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
// check if HyperGrid teleport is allowed, based on user level
if (sp.UserLevel < m_levelHGTeleport)
{
- m_log.WarnFormat("[ENTITY TRANSFER MODULE]: Final destination link is non permitted hypergrid region. Unable to teleport agent.");
+ m_log.WarnFormat("[HG ENTITY TRANSFER MODULE]: Unable to HG teleport agent due to insufficient UserLevel.");
reason = "HyperGrid teleport not permitted";
return false;
}
--
cgit v1.1