Added immediate TP failure message for TPs to regions that aren't there,
instead of the 130s timeout somewhere. Additionally, mark the map-tile as offline. This partly fixes the TP problems of Mantis 2332; the rest is a viewer problem (just relogin).0.6.0-stable
parent
979a354ba0
commit
63d7a92fb4
|
@ -248,9 +248,43 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap
|
|||
public virtual void RequestMapBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY, uint flag)
|
||||
{
|
||||
List<MapBlockData> mapBlocks;
|
||||
mapBlocks = m_scene.SceneGridService.RequestNeighbourMapBlocks(minX - 4, minY - 4, minX + 4, minY + 4);
|
||||
if ((flag & 0x10000) != 0) // user clicked on the map a tile that isn't visible
|
||||
{
|
||||
List<MapBlockData> response = new List<MapBlockData>();
|
||||
|
||||
// this should return one mapblock at most. But make sure: Look whether the one we requested is in there
|
||||
mapBlocks = m_scene.SceneGridService.RequestNeighbourMapBlocks(minX, minY, maxX, maxY);
|
||||
if (mapBlocks != null)
|
||||
{
|
||||
foreach (MapBlockData block in mapBlocks)
|
||||
{
|
||||
if (block.X == minX && block.Y == minY)
|
||||
{
|
||||
// found it => add it to response
|
||||
response.Add(block);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (response.Count == 0)
|
||||
{
|
||||
// response still empty => couldn't find the map-tile the user clicked on => tell the client
|
||||
MapBlockData block = new MapBlockData();
|
||||
block.X = (ushort)minX;
|
||||
block.Y = (ushort)minY;
|
||||
block.Access = 254; // == not there
|
||||
response.Add(block);
|
||||
}
|
||||
remoteClient.SendMapBlock(response, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
// normal mapblock request. Use the provided values
|
||||
mapBlocks = m_scene.SceneGridService.RequestNeighbourMapBlocks(minX - 4, minY - 4, maxX + 4, maxY + 4);
|
||||
remoteClient.SendMapBlock(mapBlocks, flag);
|
||||
}
|
||||
}
|
||||
|
||||
public Hashtable OnHTTPGetMapImage(Hashtable keysvals)
|
||||
{
|
||||
|
|
|
@ -736,6 +736,25 @@ namespace OpenSim.Region.Environment.Scenes
|
|||
avatar.ControllingClient.SendTeleportFailed("Remote Region appears to be down");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// TP to a place that doesn't exist (anymore)
|
||||
// Inform the viewer about that
|
||||
avatar.ControllingClient.SendTeleportFailed("The region you tried to teleport to doesn't exist anymore");
|
||||
|
||||
// and set the map-tile to '(Offline)'
|
||||
uint regX, regY;
|
||||
Helpers.LongToUInts(regionHandle, out regX, out regY);
|
||||
|
||||
MapBlockData block = new MapBlockData();
|
||||
block.X = (ushort)(regX / Constants.RegionSize);
|
||||
block.Y = (ushort)(regY / Constants.RegionSize);
|
||||
block.Access = 254; // == not there
|
||||
|
||||
List<MapBlockData> blocks = new List<MapBlockData>();
|
||||
blocks.Add(block);
|
||||
avatar.ControllingClient.SendMapBlock(blocks, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue