diff options
author | UbitUmarov | 2014-10-28 13:52:00 +0000 |
---|---|---|
committer | UbitUmarov | 2014-10-28 13:52:00 +0000 |
commit | e4d84d8ff6595d124485921e36d62508660c996f (patch) | |
tree | 7bdbe694b17672e6b93731b088a0ef2a04e67c15 | |
parent | fix parcel proprieties update sending (diff) | |
download | opensim-SC_OLD-e4d84d8ff6595d124485921e36d62508660c996f.zip opensim-SC_OLD-e4d84d8ff6595d124485921e36d62508660c996f.tar.gz opensim-SC_OLD-e4d84d8ff6595d124485921e36d62508660c996f.tar.bz2 opensim-SC_OLD-e4d84d8ff6595d124485921e36d62508660c996f.tar.xz |
try to make a avatar usesable if its siting part didn't cross, or crossed
back. This situation points to that sitted avatars should be sent in same
http connection that crosses the object
-rw-r--r-- | OpenSim/Region/Framework/Scenes/ScenePresence.cs | 98 |
1 files changed, 12 insertions, 86 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 56c3b52..c58847b 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -1126,7 +1126,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1126 | ParentID = 0; | 1126 | ParentID = 0; |
1127 | ParentPart = null; | 1127 | ParentPart = null; |
1128 | PrevSitOffset = Vector3.Zero; | 1128 | PrevSitOffset = Vector3.Zero; |
1129 | ClearControls(); | 1129 | HandleForceReleaseControls(ControllingClient, UUID); // needs testing |
1130 | IsLoggingIn = false; | 1130 | IsLoggingIn = false; |
1131 | } | 1131 | } |
1132 | else | 1132 | else |
@@ -1211,6 +1211,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1211 | } | 1211 | } |
1212 | AbsolutePosition = pos; | 1212 | AbsolutePosition = pos; |
1213 | 1213 | ||
1214 | |||
1214 | if (m_teleportFlags == TeleportFlags.Default) | 1215 | if (m_teleportFlags == TeleportFlags.Default) |
1215 | { | 1216 | { |
1216 | Vector3 vel = Velocity; | 1217 | Vector3 vel = Velocity; |
@@ -1221,6 +1222,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1221 | else | 1222 | else |
1222 | AddToPhysicalScene(isFlying); | 1223 | AddToPhysicalScene(isFlying); |
1223 | 1224 | ||
1225 | |||
1224 | if (ForceFly) | 1226 | if (ForceFly) |
1225 | { | 1227 | { |
1226 | Flying = true; | 1228 | Flying = true; |
@@ -3862,91 +3864,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
3862 | pos2.Y += vel.Y * timeStep; | 3864 | pos2.Y += vel.Y * timeStep; |
3863 | pos2.Z += vel.Z * timeStep; | 3865 | pos2.Z += vel.Z * timeStep; |
3864 | 3866 | ||
3865 | // m_log.DebugFormat( | 3867 | // m_log.DebugFormat( |
3866 | // "[SCENE PRESENCE]: Testing border check for projected position {0} of {1} in {2}", | 3868 | // "[SCENE PRESENCE]: Testing border check for projected position {0} of {1} in {2}", |
3867 | // pos2, Name, Scene.Name); | 3869 | // pos2, Name, Scene.Name); |
3868 | /* | 3870 | |
3869 | // Checks if where it's headed exists a region | 3871 | if( Scene.TestBorderCross(pos2, Cardinals.E) || |
3870 | int neighbor = 0; | 3872 | Scene.TestBorderCross(pos2, Cardinals.W) || |
3871 | int[] fix = new int[2]; | 3873 | Scene.TestBorderCross(pos2, Cardinals.N) || |
3872 | 3874 | Scene.TestBorderCross(pos2, Cardinals.S) | |
3873 | bool needsTransit = false; | 3875 | ) |
3874 | if (m_scene.TestBorderCross(pos2, Cardinals.W)) | ||
3875 | { | ||
3876 | if (m_scene.TestBorderCross(pos2, Cardinals.S)) | ||
3877 | { | ||
3878 | needsTransit = true; | ||
3879 | neighbor = m_scene.HaveNeighbor(Cardinals.SW, ref fix); | ||
3880 | } | ||
3881 | else if (m_scene.TestBorderCross(pos2, Cardinals.N)) | ||
3882 | { | ||
3883 | needsTransit = true; | ||
3884 | neighbor = m_scene.HaveNeighbor(Cardinals.NW, ref fix); | ||
3885 | } | ||
3886 | else | ||
3887 | { | ||
3888 | needsTransit = true; | ||
3889 | neighbor = m_scene.HaveNeighbor(Cardinals.W, ref fix); | ||
3890 | } | ||
3891 | } | ||
3892 | else if (m_scene.TestBorderCross(pos2, Cardinals.E)) | ||
3893 | { | ||
3894 | if (m_scene.TestBorderCross(pos2, Cardinals.S)) | ||
3895 | { | ||
3896 | needsTransit = true; | ||
3897 | neighbor = m_scene.HaveNeighbor(Cardinals.SE, ref fix); | ||
3898 | } | ||
3899 | else if (m_scene.TestBorderCross(pos2, Cardinals.N)) | ||
3900 | { | ||
3901 | needsTransit = true; | ||
3902 | neighbor = m_scene.HaveNeighbor(Cardinals.NE, ref fix); | ||
3903 | } | ||
3904 | else | ||
3905 | { | ||
3906 | needsTransit = true; | ||
3907 | neighbor = m_scene.HaveNeighbor(Cardinals.E, ref fix); | ||
3908 | } | ||
3909 | } | ||
3910 | else if (m_scene.TestBorderCross(pos2, Cardinals.S)) | ||
3911 | { | ||
3912 | needsTransit = true; | ||
3913 | neighbor = m_scene.HaveNeighbor(Cardinals.S, ref fix); | ||
3914 | } | ||
3915 | else if (m_scene.TestBorderCross(pos2, Cardinals.N)) | ||
3916 | { | ||
3917 | needsTransit = true; | ||
3918 | neighbor = m_scene.HaveNeighbor(Cardinals.N, ref fix); | ||
3919 | } | ||
3920 | |||
3921 | // Makes sure avatar does not end up outside region | ||
3922 | |||
3923 | if (neighbor <= 0) | ||
3924 | { | ||
3925 | if (needsTransit) | ||
3926 | { | ||
3927 | CrossToNewRegionFail(); | ||
3928 | } | ||
3929 | } | ||
3930 | else if (neighbor > 0) | ||
3931 | { | ||
3932 | if (!CrossToNewRegion()) | ||
3933 | { | ||
3934 | CrossToNewRegionFail(); | ||
3935 | } | ||
3936 | } | ||
3937 | */ | ||
3938 | bool needsTransit = false; | ||
3939 | |||
3940 | if (pos2.X < 0) | ||
3941 | needsTransit = true; | ||
3942 | else if (pos2.X > m_scene.RegionInfo.RegionSizeX) | ||
3943 | needsTransit = true; | ||
3944 | else if (pos2.Y < 0) | ||
3945 | needsTransit = true; | ||
3946 | else if (pos2.Y > m_scene.RegionInfo.RegionSizeY) | ||
3947 | needsTransit = true; | ||
3948 | |||
3949 | if (needsTransit) | ||
3950 | { | 3876 | { |
3951 | if (!CrossToNewRegion() && m_requestedSitTargetUUID == UUID.Zero) | 3877 | if (!CrossToNewRegion() && m_requestedSitTargetUUID == UUID.Zero) |
3952 | { | 3878 | { |