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 /OpenSim/Region | |
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
Diffstat (limited to 'OpenSim/Region')
-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 | { |