diff options
Diffstat (limited to 'OpenSim/Region')
4 files changed, 48 insertions, 24 deletions
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) | 1485 | if ((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; | 1487 | else |
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 | } |