aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorUbitUmarov2014-10-28 13:52:00 +0000
committerUbitUmarov2014-10-28 13:52:00 +0000
commite4d84d8ff6595d124485921e36d62508660c996f (patch)
tree7bdbe694b17672e6b93731b088a0ef2a04e67c15
parent fix parcel proprieties update sending (diff)
downloadopensim-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 '')
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs98
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 {