aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Framework/Constants.cs7
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs7
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs57
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs6
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs2
-rw-r--r--OpenSim/Services/LLLoginService/LLLoginService.cs28
6 files changed, 69 insertions, 38 deletions
diff --git a/OpenSim/Framework/Constants.cs b/OpenSim/Framework/Constants.cs
index ea89db3..e399e27 100644
--- a/OpenSim/Framework/Constants.cs
+++ b/OpenSim/Framework/Constants.cs
@@ -63,6 +63,7 @@ namespace OpenSim.Framework
63 EstateManagers = 10 63 EstateManagers = 10
64 } 64 }
65 65
66 // Identical to the one in OpenMetaverse, except I'm extending it now, and OpenSim decided to copy it here, making life hard.
66 [Flags]public enum TeleportFlags : uint 67 [Flags]public enum TeleportFlags : uint
67 { 68 {
68 /// <summary>No flags set, or teleport failed</summary> 69 /// <summary>No flags set, or teleport failed</summary>
@@ -75,7 +76,7 @@ namespace OpenSim.Framework
75 ViaLure = 1 << 2, 76 ViaLure = 1 << 2,
76 /// <summary>Via Landmark</summary> 77 /// <summary>Via Landmark</summary>
77 ViaLandmark = 1 << 3, 78 ViaLandmark = 1 << 3,
78 /// <summary>Via Location</summary> 79 /// <summary>Via Location, seems to be a catch all, includes scripted TPs.</summary>
79 ViaLocation = 1 << 4, 80 ViaLocation = 1 << 4,
80 /// <summary>Via Home</summary> 81 /// <summary>Via Home</summary>
81 ViaHome = 1 << 5, 82 ViaHome = 1 << 5,
@@ -99,6 +100,10 @@ namespace OpenSim.Framework
99 ResetHome = 1 << 14, 100 ResetHome = 1 << 14,
100 /// <summary>forced to new location for example when avatar is banned or ejected</summary> 101 /// <summary>forced to new location for example when avatar is banned or ejected</summary>
101 ForceRedirect = 1 << 15, 102 ForceRedirect = 1 << 15,
103 /// <summary>Via script.</summary>
104 ViaScript = 1 << 16,
105 /// <summary>Via map, though this is a guess.</summary>
106 ViaMap = 1 << 17,
102 /// <summary>Teleport Finished via a Lure</summary> 107 /// <summary>Teleport Finished via a Lure</summary>
103 FinishedViaLure = 1 << 26, 108 FinishedViaLure = 1 << 26,
104 /// <summary>Finished, Sim Changed</summary> 109 /// <summary>Finished, Sim Changed</summary>
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index fa49546..9970132 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -673,9 +673,10 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
673 673
674 string homeURI = Scene.GetAgentHomeURI(sp.ControllingClient.AgentId); 674 string homeURI = Scene.GetAgentHomeURI(sp.ControllingClient.AgentId);
675 675
676 m_log.DebugFormat( 676//// m_log.DebugFormat(
677 "[ENTITY TRANSFER MODULE]: Teleporting {0} {1} from {2} to {3} ({4}) {5}/{6}", 677 m_log.InfoFormat(
678 sp.Name, sp.UUID, sp.Scene.RegionInfo.RegionName, 678 "[ENTITY TRANSFER MODULE]: Teleporting {0} {1} from {2}/{3} to {4} ({5}) {6}/{7}",
679 sp.Name, sp.UUID, sp.Scene.RegionInfo.RegionName, sp.AbsolutePosition,
679 reg.ServerURI, finalDestination.ServerURI, finalDestination.RegionName, position); 680 reg.ServerURI, finalDestination.ServerURI, finalDestination.RegionName, position);
680 681
681 RegionInfo sourceRegion = sp.Scene.RegionInfo; 682 RegionInfo sourceRegion = sp.Scene.RegionInfo;
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 0d8f286..e84018e 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -1406,15 +1406,18 @@ namespace OpenSim.Region.Framework.Scenes
1406 if (groundHeight > pos.Z) 1406 if (groundHeight > pos.Z)
1407 pos.Z = groundHeight; 1407 pos.Z = groundHeight;
1408 1408
1409 if (((m_teleportFlags & TeleportFlags.ViaMap) == 0) && (Math.Truncate(pos.Z) == pos.Z))
1410 m_teleportFlags |= TeleportFlags.ViaMap;
1409 bool checkPhysics = !positionChanged && 1411 bool checkPhysics = !positionChanged &&
1410 m_scene.SupportsRayCastFiltered() && 1412 m_scene.SupportsRayCastFiltered() &&
1411 pos.Z < physTestHeight && 1413 pos.Z < physTestHeight &&
1412 ((m_teleportFlags & (TeleportFlags.ViaLogin | TeleportFlags.ViaRegionID)) == 1414 ((m_teleportFlags & (TeleportFlags.ViaLogin | TeleportFlags.ViaRegionID)) ==
1413 (TeleportFlags.ViaLogin | TeleportFlags.ViaRegionID) 1415 (TeleportFlags.ViaLogin | TeleportFlags.ViaRegionID)
1414 || (m_teleportFlags & TeleportFlags.ViaLocation) != 0 1416//// || (m_teleportFlags & TeleportFlags.ViaLocation) != 0
1417 || (m_teleportFlags & TeleportFlags.ViaMap) != 0
1415 || (m_teleportFlags & TeleportFlags.ViaHGLogin) != 0); 1418 || (m_teleportFlags & TeleportFlags.ViaHGLogin) != 0);
1416 1419
1417 if(checkPhysics) 1420 if(checkPhysics && ((m_teleportFlags & TeleportFlags.ViaScript) == 0) && ((m_teleportFlags & TeleportFlags.ViaHome) == 0))
1418 { 1421 {
1419 // land check was done above 1422 // land check was done above
1420 RayFilterFlags rayfilter = RayFilterFlags.BackFaceCull; 1423 RayFilterFlags rayfilter = RayFilterFlags.BackFaceCull;
@@ -1443,29 +1446,49 @@ namespace OpenSim.Region.Framework.Scenes
1443 return a.Depth.CompareTo(b.Depth); 1446 return a.Depth.CompareTo(b.Depth);
1444 }); 1447 });
1445 1448
1446 int sel = 0; 1449 int sel = -1;
1447 int count = physresults.Count; 1450 int count = physresults.Count;
1448 float curd = physresults[0].Depth; 1451 float curd = physresults[0].Depth;
1449 float nextd = curd + PhysMinSkipGap; 1452 float nextd = curd + PhysMinSkipGap;
1450 float maxDepth = dist - pos.Z; 1453 float maxDepth = dist - pos.Z;
1451 for(int i = 1; i < count; i++) 1454 // Try to find a designated floor.
1455 for(int i = 0; i < count; i++)
1452 { 1456 {
1453 curd = physresults[i].Depth; 1457 SceneObjectPart part = m_scene.GetSceneObjectPart(physresults[i].ConsumerID);
1454 if(curd >= nextd) 1458 if ((null != part) && (string.Empty != part.Description) && ('^' == part.Description[0]))
1455 { 1459 {
1456 sel = i; 1460 sel = i;
1457 if(curd >= maxDepth || curd >= nextd + PhysSkipGapDelta) 1461 dest = physresults[sel].Pos.Z;
1458 break; 1462 break;
1459 } 1463 }
1460 nextd = curd + PhysMinSkipGap; 1464 }
1465
1466 if (-1 == sel)
1467 {
1468 sel = 0;
1469 for (int i = 1; i < count; i++)
1470 {
1471 curd = physresults[i].Depth;
1472 if(curd >= nextd)
1473 {
1474 sel = i;
1475 if(curd >= maxDepth || curd >= nextd + PhysSkipGapDelta)
1476 break;
1477 }
1478 nextd = curd + PhysMinSkipGap;
1479 }
1480 dest = physresults[sel].Pos.Z;
1461 } 1481 }
1462 dest = physresults[sel].Pos.Z;
1463 } 1482 }
1464 1483
1465 dest += localAVHalfHeight; 1484 dest += localAVHalfHeight;
1466 if(dest > pos.Z) 1485if ((m_teleportFlags & TeleportFlags.ViaMap) != 0)
1467 pos.Z = dest; 1486 m_log.InfoFormat("[SCENE PRESENCE]: Teleport from above, for {0} @ {1}, landing height {2}", Name, pos, dest);
1468 break; 1487else
1488 m_log.ErrorFormat("[SCENE PRESENCE]: Teleport from above NOMAP, for {0} @ {1}, landing height {2}", Name, pos, dest);
1489 if(dest > pos.Z)
1490 pos.Z = dest;
1491 break;
1469 } 1492 }
1470 } 1493 }
1471 1494
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index c9ee28e..10afe99 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -5245,7 +5245,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
5245 5245
5246 if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TELEPORT) != 0) 5246 if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TELEPORT) != 0)
5247 { 5247 {
5248 World.RequestTeleportLocation(presence.ControllingClient, regionHandle, targetPos, targetLookAt, (uint)TeleportFlags.ViaLocation); 5248 World.RequestTeleportLocation(presence.ControllingClient, regionHandle, targetPos, targetLookAt, (uint)(Constants.TeleportFlags.ViaLocation | Constants.TeleportFlags.ViaScript));
5249 } 5249 }
5250 } 5250 }
5251 } 5251 }
@@ -5259,7 +5259,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
5259 // Use it as a sim name 5259 // Use it as a sim name
5260 if (assetID == UUID.Zero) 5260 if (assetID == UUID.Zero)
5261 { 5261 {
5262 World.RequestTeleportLocation(sp.ControllingClient, destination, targetPos, targetLookAt, (uint)TeleportFlags.ViaLocation); 5262 World.RequestTeleportLocation(sp.ControllingClient, destination, targetPos, targetLookAt, (uint)(Constants.TeleportFlags.ViaLocation | Constants.TeleportFlags.ViaScript));
5263 return; 5263 return;
5264 } 5264 }
5265 5265
@@ -5272,7 +5272,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
5272 5272
5273 AssetLandmark lm = new AssetLandmark(lma); 5273 AssetLandmark lm = new AssetLandmark(lma);
5274 5274
5275 World.RequestTeleportLocation(sp.ControllingClient, lm.RegionHandle, targetPos, targetLookAt, (uint)TeleportFlags.ViaLocation); 5275 World.RequestTeleportLocation(sp.ControllingClient, lm.RegionHandle, targetPos, targetLookAt, (uint)(Constants.TeleportFlags.ViaLocation | Constants.TeleportFlags.ViaScript));
5276 } 5276 }
5277 5277
5278 public void llTextBox(string agent, string message, int chatChannel) 5278 public void llTextBox(string agent, string message, int chatChannel)
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
index d268609..48f9d0b 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -1071,7 +1071,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
1071 Util.FireAndForget( 1071 Util.FireAndForget(
1072 o => World.RequestTeleportLocation( 1072 o => World.RequestTeleportLocation(
1073 presence.ControllingClient, regionName, position, 1073 presence.ControllingClient, regionName, position,
1074 lookat, (uint)TPFlags.ViaLocation), 1074 lookat, (uint)(TPFlags.ViaLocation | TPFlags.ViaScript)),
1075 null, "OSSL_Api.TeleportAgentByRegionCoords"); 1075 null, "OSSL_Api.TeleportAgentByRegionCoords");
1076 ScriptSleep(5000); 1076 ScriptSleep(5000);
1077 } 1077 }
diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs
index 7aa18b1..06e3d8d 100644
--- a/OpenSim/Services/LLLoginService/LLLoginService.cs
+++ b/OpenSim/Services/LLLoginService/LLLoginService.cs
@@ -534,7 +534,7 @@ namespace OpenSim.Services.LLLoginService
534 Vector3 position = Vector3.Zero; 534 Vector3 position = Vector3.Zero;
535 Vector3 lookAt = Vector3.Zero; 535 Vector3 lookAt = Vector3.Zero;
536 GridRegion gatekeeper = null; 536 GridRegion gatekeeper = null;
537 TeleportFlags flags; 537 Constants.TeleportFlags flags;
538 GridRegion destination = FindDestination(account, scopeID, guinfo, session, startLocation, home, out gatekeeper, out where, out position, out lookAt, out flags); 538 GridRegion destination = FindDestination(account, scopeID, guinfo, session, startLocation, home, out gatekeeper, out where, out position, out lookAt, out flags);
539 if (destination == null) 539 if (destination == null)
540 { 540 {
@@ -553,7 +553,7 @@ namespace OpenSim.Services.LLLoginService
553 } 553 }
554 554
555 if (account.UserLevel >= 200) 555 if (account.UserLevel >= 200)
556 flags |= TeleportFlags.Godlike; 556 flags |= Constants.TeleportFlags.Godlike;
557 // 557 //
558 // Get the avatar 558 // Get the avatar
559 // 559 //
@@ -627,9 +627,9 @@ namespace OpenSim.Services.LLLoginService
627 protected GridRegion FindDestination( 627 protected GridRegion FindDestination(
628 UserAccount account, UUID scopeID, GridUserInfo pinfo, UUID sessionID, string startLocation, 628 UserAccount account, UUID scopeID, GridUserInfo pinfo, UUID sessionID, string startLocation,
629 GridRegion home, out GridRegion gatekeeper, 629 GridRegion home, out GridRegion gatekeeper,
630 out string where, out Vector3 position, out Vector3 lookAt, out TeleportFlags flags) 630 out string where, out Vector3 position, out Vector3 lookAt, out Constants.TeleportFlags flags)
631 { 631 {
632 flags = TeleportFlags.ViaLogin; 632 flags = Constants.TeleportFlags.ViaLogin;
633 633
634 m_log.DebugFormat( 634 m_log.DebugFormat(
635 "[LLOGIN SERVICE]: Finding destination matching start location {0} for {1}", 635 "[LLOGIN SERVICE]: Finding destination matching start location {0} for {1}",
@@ -663,7 +663,7 @@ namespace OpenSim.Services.LLLoginService
663 663
664 position = pinfo.HomePosition; 664 position = pinfo.HomePosition;
665 lookAt = pinfo.HomeLookAt; 665 lookAt = pinfo.HomeLookAt;
666 flags |= TeleportFlags.ViaHome; 666 flags |= Constants.TeleportFlags.ViaHome;
667 } 667 }
668 668
669 if (tryDefaults) 669 if (tryDefaults)
@@ -671,7 +671,7 @@ namespace OpenSim.Services.LLLoginService
671 List<GridRegion> defaults = m_GridService.GetDefaultRegions(scopeID); 671 List<GridRegion> defaults = m_GridService.GetDefaultRegions(scopeID);
672 if (defaults != null && defaults.Count > 0) 672 if (defaults != null && defaults.Count > 0)
673 { 673 {
674 flags |= TeleportFlags.ViaRegionID; 674 flags |= Constants.TeleportFlags.ViaRegionID;
675 region = defaults[0]; 675 region = defaults[0];
676 where = "safe"; 676 where = "safe";
677 } 677 }
@@ -682,7 +682,7 @@ namespace OpenSim.Services.LLLoginService
682 region = FindAlternativeRegion(scopeID); 682 region = FindAlternativeRegion(scopeID);
683 if (region != null) 683 if (region != null)
684 { 684 {
685 flags |= TeleportFlags.ViaRegionID; 685 flags |= Constants.TeleportFlags.ViaRegionID;
686 where = "safe"; 686 where = "safe";
687 } 687 }
688 } 688 }
@@ -705,7 +705,7 @@ namespace OpenSim.Services.LLLoginService
705 List<GridRegion> defaults = m_GridService.GetDefaultRegions(scopeID); 705 List<GridRegion> defaults = m_GridService.GetDefaultRegions(scopeID);
706 if (defaults != null && defaults.Count > 0) 706 if (defaults != null && defaults.Count > 0)
707 { 707 {
708 flags |= TeleportFlags.ViaRegionID; 708 flags |= Constants.TeleportFlags.ViaRegionID;
709 region = defaults[0]; 709 region = defaults[0];
710 where = "safe"; 710 where = "safe";
711 } 711 }
@@ -715,7 +715,7 @@ namespace OpenSim.Services.LLLoginService
715 region = FindAlternativeRegion(scopeID); 715 region = FindAlternativeRegion(scopeID);
716 if (region != null) 716 if (region != null)
717 { 717 {
718 flags |= TeleportFlags.ViaRegionID; 718 flags |= Constants.TeleportFlags.ViaRegionID;
719 where = "safe"; 719 where = "safe";
720 } 720 }
721 } 721 }
@@ -730,7 +730,7 @@ namespace OpenSim.Services.LLLoginService
730 } 730 }
731 else 731 else
732 { 732 {
733 flags |= TeleportFlags.ViaRegionID; 733 flags |= Constants.TeleportFlags.ViaRegionID;
734 734
735 // free uri form 735 // free uri form
736 // e.g. New Moon&135&46 New Moon@osgrid.org:8002&153&34 736 // e.g. New Moon&135&46 New Moon@osgrid.org:8002&153&34
@@ -748,6 +748,8 @@ namespace OpenSim.Services.LLLoginService
748 position = new Vector3(float.Parse(uriMatch.Groups["x"].Value, Culture.NumberFormatInfo), 748 position = new Vector3(float.Parse(uriMatch.Groups["x"].Value, Culture.NumberFormatInfo),
749 float.Parse(uriMatch.Groups["y"].Value, Culture.NumberFormatInfo), 749 float.Parse(uriMatch.Groups["y"].Value, Culture.NumberFormatInfo),
750 float.Parse(uriMatch.Groups["z"].Value, Culture.NumberFormatInfo)); 750 float.Parse(uriMatch.Groups["z"].Value, Culture.NumberFormatInfo));
751 if (0 == position.Z)
752 flags |= Constants.TeleportFlags.ViaMap;
751 753
752 string regionName = uriMatch.Groups["region"].ToString(); 754 string regionName = uriMatch.Groups["region"].ToString();
753 if (regionName != null) 755 if (regionName != null)
@@ -900,7 +902,7 @@ namespace OpenSim.Services.LLLoginService
900 902
901 protected AgentCircuitData LaunchAgentAtGrid(GridRegion gatekeeper, GridRegion destination, UserAccount account, AvatarAppearance avatar, 903 protected AgentCircuitData LaunchAgentAtGrid(GridRegion gatekeeper, GridRegion destination, UserAccount account, AvatarAppearance avatar,
902 UUID session, UUID secureSession, Vector3 position, string currentWhere, string viewer, string channel, string mac, string id0, 904 UUID session, UUID secureSession, Vector3 position, string currentWhere, string viewer, string channel, string mac, string id0,
903 IPEndPoint clientIP, TeleportFlags flags, out string where, out string reason, out GridRegion dest) 905 IPEndPoint clientIP, Constants.TeleportFlags flags, out string where, out string reason, out GridRegion dest)
904 { 906 {
905 where = currentWhere; 907 where = currentWhere;
906 ISimulationService simConnector = null; 908 ISimulationService simConnector = null;
@@ -937,7 +939,7 @@ namespace OpenSim.Services.LLLoginService
937 { 939 {
938 foreach (GridRegion r in fallbacks) 940 foreach (GridRegion r in fallbacks)
939 { 941 {
940 success = LaunchAgentDirectly(simConnector, r, aCircuit, flags | TeleportFlags.ViaRegionID, out reason); 942 success = LaunchAgentDirectly(simConnector, r, aCircuit, flags | Constants.TeleportFlags.ViaRegionID | Constants.TeleportFlags.ViaMap, out reason);
941 if (success) 943 if (success)
942 { 944 {
943 where = "safe"; 945 where = "safe";
@@ -1083,7 +1085,7 @@ namespace OpenSim.Services.LLLoginService
1083 1085
1084 } 1086 }
1085 1087
1086 private bool LaunchAgentDirectly(ISimulationService simConnector, GridRegion region, AgentCircuitData aCircuit, TeleportFlags flags, out string reason) 1088 private bool LaunchAgentDirectly(ISimulationService simConnector, GridRegion region, AgentCircuitData aCircuit, Constants.TeleportFlags flags, out string reason)
1087 { 1089 {
1088 EntityTransferContext ctx = new EntityTransferContext(); 1090 EntityTransferContext ctx = new EntityTransferContext();
1089 1091