diff options
Diffstat (limited to 'OpenSim/Region')
-rw-r--r-- | OpenSim/Region/Environment/Modules/World/WorldMap/WorldMapModule.cs | 38 | ||||
-rw-r--r-- | OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs | 19 |
2 files changed, 55 insertions, 2 deletions
diff --git a/OpenSim/Region/Environment/Modules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/Environment/Modules/World/WorldMap/WorldMapModule.cs index 9dbe225..bc62e07 100644 --- a/OpenSim/Region/Environment/Modules/World/WorldMap/WorldMapModule.cs +++ b/OpenSim/Region/Environment/Modules/World/WorldMap/WorldMapModule.cs | |||
@@ -248,8 +248,42 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap | |||
248 | public virtual void RequestMapBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY, uint flag) | 248 | public virtual void RequestMapBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY, uint flag) |
249 | { | 249 | { |
250 | List<MapBlockData> mapBlocks; | 250 | List<MapBlockData> mapBlocks; |
251 | mapBlocks = m_scene.SceneGridService.RequestNeighbourMapBlocks(minX - 4, minY - 4, minX + 4, minY + 4); | 251 | if ((flag & 0x10000) != 0) // user clicked on the map a tile that isn't visible |
252 | remoteClient.SendMapBlock(mapBlocks, flag); | 252 | { |
253 | List<MapBlockData> response = new List<MapBlockData>(); | ||
254 | |||
255 | // this should return one mapblock at most. But make sure: Look whether the one we requested is in there | ||
256 | mapBlocks = m_scene.SceneGridService.RequestNeighbourMapBlocks(minX, minY, maxX, maxY); | ||
257 | if (mapBlocks != null) | ||
258 | { | ||
259 | foreach (MapBlockData block in mapBlocks) | ||
260 | { | ||
261 | if (block.X == minX && block.Y == minY) | ||
262 | { | ||
263 | // found it => add it to response | ||
264 | response.Add(block); | ||
265 | break; | ||
266 | } | ||
267 | } | ||
268 | } | ||
269 | |||
270 | if (response.Count == 0) | ||
271 | { | ||
272 | // response still empty => couldn't find the map-tile the user clicked on => tell the client | ||
273 | MapBlockData block = new MapBlockData(); | ||
274 | block.X = (ushort)minX; | ||
275 | block.Y = (ushort)minY; | ||
276 | block.Access = 254; // == not there | ||
277 | response.Add(block); | ||
278 | } | ||
279 | remoteClient.SendMapBlock(response, 0); | ||
280 | } | ||
281 | else | ||
282 | { | ||
283 | // normal mapblock request. Use the provided values | ||
284 | mapBlocks = m_scene.SceneGridService.RequestNeighbourMapBlocks(minX - 4, minY - 4, maxX + 4, maxY + 4); | ||
285 | remoteClient.SendMapBlock(mapBlocks, flag); | ||
286 | } | ||
253 | } | 287 | } |
254 | 288 | ||
255 | public Hashtable OnHTTPGetMapImage(Hashtable keysvals) | 289 | public Hashtable OnHTTPGetMapImage(Hashtable keysvals) |
diff --git a/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs index 08793d9..b342cb6 100644 --- a/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs +++ b/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs | |||
@@ -736,6 +736,25 @@ namespace OpenSim.Region.Environment.Scenes | |||
736 | avatar.ControllingClient.SendTeleportFailed("Remote Region appears to be down"); | 736 | avatar.ControllingClient.SendTeleportFailed("Remote Region appears to be down"); |
737 | } | 737 | } |
738 | } | 738 | } |
739 | else | ||
740 | { | ||
741 | // TP to a place that doesn't exist (anymore) | ||
742 | // Inform the viewer about that | ||
743 | avatar.ControllingClient.SendTeleportFailed("The region you tried to teleport to doesn't exist anymore"); | ||
744 | |||
745 | // and set the map-tile to '(Offline)' | ||
746 | uint regX, regY; | ||
747 | Helpers.LongToUInts(regionHandle, out regX, out regY); | ||
748 | |||
749 | MapBlockData block = new MapBlockData(); | ||
750 | block.X = (ushort)(regX / Constants.RegionSize); | ||
751 | block.Y = (ushort)(regY / Constants.RegionSize); | ||
752 | block.Access = 254; // == not there | ||
753 | |||
754 | List<MapBlockData> blocks = new List<MapBlockData>(); | ||
755 | blocks.Add(block); | ||
756 | avatar.ControllingClient.SendMapBlock(blocks, 0); | ||
757 | } | ||
739 | } | 758 | } |
740 | } | 759 | } |
741 | 760 | ||