diff options
author | CasperW | 2009-12-26 18:14:12 +0100 |
---|---|---|
committer | CasperW | 2009-12-26 18:14:12 +0100 |
commit | 7371c7662a05d2c1dae1c110905817bb873cf934 (patch) | |
tree | 86e5ff0320631f8d400ff5a6ea902dd740fc4040 /OpenSim/Region/Framework/Scenes/ScenePresence.cs | |
parent | Add a debugger tag to stop Visual Studio from breaking (diff) | |
download | opensim-SC_OLD-7371c7662a05d2c1dae1c110905817bb873cf934.zip opensim-SC_OLD-7371c7662a05d2c1dae1c110905817bb873cf934.tar.gz opensim-SC_OLD-7371c7662a05d2c1dae1c110905817bb873cf934.tar.bz2 opensim-SC_OLD-7371c7662a05d2c1dae1c110905817bb873cf934.tar.xz |
Fix for landing points. Only one scenario is not fully covered by this change, and that is people who teleport from neighbouring regions, who won't get affected by the landing point.
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/ScenePresence.cs | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index a3ad7ca..c3bc96a 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -836,9 +836,24 @@ namespace OpenSim.Region.Framework.Scenes | |||
836 | { | 836 | { |
837 | Border crossedBorder = m_scene.GetCrossedBorder(pos, Cardinals.N); | 837 | Border crossedBorder = m_scene.GetCrossedBorder(pos, Cardinals.N); |
838 | pos.Y = crossedBorder.BorderLine.Z - 1; | 838 | pos.Y = crossedBorder.BorderLine.Z - 1; |
839 | } | ||
840 | |||
841 | //If they're TP'ing in or logging in, we haven't had time to add any known child regions yet. | ||
842 | //This has the unfortunate consequence that if somebody is TP'ing who is already a child agent, | ||
843 | //they'll bypass the landing point. But I can't think of any decent way of fixing this. | ||
844 | if (KnownChildRegionHandles.Count == 0) | ||
845 | { | ||
846 | ILandObject land = m_scene.LandChannel.GetLandObject(pos.X, pos.Y); | ||
847 | if (land != null) | ||
848 | { | ||
849 | //Don't restrict gods, estate managers, or land owners to the TP point. This behaviour mimics agni. | ||
850 | if (land.LandData.LandingType == (byte)1 && land.LandData.UserLocation != Vector3.Zero && m_godlevel < 200 && !m_scene.RegionInfo.EstateSettings.IsEstateManager(m_uuid) && land.LandData.OwnerID != m_uuid) | ||
851 | { | ||
852 | pos = land.LandData.UserLocation; | ||
853 | } | ||
854 | } | ||
839 | } | 855 | } |
840 | 856 | ||
841 | |||
842 | if (pos.X < 0 || pos.Y < 0 || pos.Z < 0) | 857 | if (pos.X < 0 || pos.Y < 0 || pos.Z < 0) |
843 | { | 858 | { |
844 | Vector3 emergencyPos = new Vector3(((int)Constants.RegionSize * 0.5f), ((int)Constants.RegionSize * 0.5f), 128); | 859 | Vector3 emergencyPos = new Vector3(((int)Constants.RegionSize * 0.5f), ((int)Constants.RegionSize * 0.5f), 128); |
@@ -973,9 +988,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
973 | public void Teleport(Vector3 pos) | 988 | public void Teleport(Vector3 pos) |
974 | { | 989 | { |
975 | bool isFlying = false; | 990 | bool isFlying = false; |
976 | if (m_physicsActor != null) | ||
977 | isFlying = m_physicsActor.Flying; | ||
978 | 991 | ||
992 | if (m_physicsActor != null) | ||
993 | isFlying = m_physicsActor.Flying; | ||
994 | |||
979 | RemoveFromPhysicalScene(); | 995 | RemoveFromPhysicalScene(); |
980 | Velocity = Vector3.Zero; | 996 | Velocity = Vector3.Zero; |
981 | AbsolutePosition = pos; | 997 | AbsolutePosition = pos; |
@@ -986,7 +1002,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
986 | SetHeight(m_appearance.AvatarHeight); | 1002 | SetHeight(m_appearance.AvatarHeight); |
987 | } | 1003 | } |
988 | 1004 | ||
989 | SendTerseUpdateToAllClients(); | 1005 | SendTerseUpdateToAllClients(); |
1006 | |||
990 | } | 1007 | } |
991 | 1008 | ||
992 | public void TeleportWithMomentum(Vector3 pos) | 1009 | public void TeleportWithMomentum(Vector3 pos) |