aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs')
-rw-r--r--OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs258
1 files changed, 158 insertions, 100 deletions
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
index 03e044b..a3b0f39 100644
--- a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
+++ b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
@@ -59,8 +59,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
59 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "WorldMapModule")] 59 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "WorldMapModule")]
60 public class WorldMapModule : INonSharedRegionModule, IWorldMapModule 60 public class WorldMapModule : INonSharedRegionModule, IWorldMapModule
61 { 61 {
62 private static readonly ILog m_log = 62 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
63 LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 63 private static string LogHeader = "[WORLD MAP]";
64 64
65 private static readonly string DEFAULT_WORLD_MAP_EXPORT_PATH = "exportmap.jpg"; 65 private static readonly string DEFAULT_WORLD_MAP_EXPORT_PATH = "exportmap.jpg";
66 private static readonly UUID STOP_UUID = UUID.Random(); 66 private static readonly UUID STOP_UUID = UUID.Random();
@@ -282,15 +282,15 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
282 { 282 {
283 List<MapBlockData> mapBlocks = new List<MapBlockData>(); ; 283 List<MapBlockData> mapBlocks = new List<MapBlockData>(); ;
284 284
285 // Get regions that are within 8 regions of here
285 List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID, 286 List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID,
286 (int)(m_scene.RegionInfo.RegionLocX - 8) * (int)Constants.RegionSize, 287 (int)Util.RegionToWorldLoc(m_scene.RegionInfo.RegionLocX - 8),
287 (int)(m_scene.RegionInfo.RegionLocX + 8) * (int)Constants.RegionSize, 288 (int)Util.RegionToWorldLoc(m_scene.RegionInfo.RegionLocX + 8),
288 (int)(m_scene.RegionInfo.RegionLocY - 8) * (int)Constants.RegionSize, 289 (int)Util.RegionToWorldLoc(m_scene.RegionInfo.RegionLocY - 8),
289 (int)(m_scene.RegionInfo.RegionLocY + 8) * (int)Constants.RegionSize); 290 (int)Util.RegionToWorldLoc(m_scene.RegionInfo.RegionLocY + 8) );
290 foreach (GridRegion r in regions) 291 foreach (GridRegion r in regions)
291 { 292 {
292 MapBlockData block = new MapBlockData(); 293 MapBlockData block = MapBlockFromGridRegion(r, 0);
293 MapBlockFromGridRegion(block, r, 0);
294 mapBlocks.Add(block); 294 mapBlocks.Add(block);
295 } 295 }
296 avatarPresence.ControllingClient.SendMapBlock(mapBlocks, 0); 296 avatarPresence.ControllingClient.SendMapBlock(mapBlocks, 0);
@@ -410,24 +410,23 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
410 } 410 }
411 uint xstart = 0; 411 uint xstart = 0;
412 uint ystart = 0; 412 uint ystart = 0;
413 Utils.LongToUInts(m_scene.RegionInfo.RegionHandle, out xstart, out ystart); 413 Util.RegionHandleToWorldLoc(m_scene.RegionInfo.RegionHandle, out xstart, out ystart);
414 if (itemtype == 6) // Service 6 right now (MAP_ITEM_AGENTS_LOCATION; green dots) 414 if (itemtype == (int)GridItemType.AgentLocations)
415 { 415 {
416 if (regionhandle == 0 || regionhandle == m_scene.RegionInfo.RegionHandle) 416 if (regionhandle == 0 || regionhandle == m_scene.RegionInfo.RegionHandle)
417 { 417 {
418 // Local Map Item Request 418 // Just requesting map info about the current, local region
419 int tc = Environment.TickCount; 419 int tc = Environment.TickCount;
420 List<mapItemReply> mapitems = new List<mapItemReply>(); 420 List<mapItemReply> mapitems = new List<mapItemReply>();
421 mapItemReply mapitem = new mapItemReply(); 421 mapItemReply mapitem = new mapItemReply();
422 if (m_scene.GetRootAgentCount() <= 1) 422 if (m_scene.GetRootAgentCount() <= 1)
423 { 423 {
424 mapitem = new mapItemReply(); 424 mapitem = new mapItemReply(
425 mapitem.x = (uint)(xstart + 1); 425 xstart + 1,
426 mapitem.y = (uint)(ystart + 1); 426 ystart + 1,
427 mapitem.id = UUID.Zero; 427 UUID.Zero,
428 mapitem.name = Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString()); 428 Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString()),
429 mapitem.Extra = 0; 429 0, 0);
430 mapitem.Extra2 = 0;
431 mapitems.Add(mapitem); 430 mapitems.Add(mapitem);
432 } 431 }
433 else 432 else
@@ -437,13 +436,12 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
437 // Don't send a green dot for yourself 436 // Don't send a green dot for yourself
438 if (sp.UUID != remoteClient.AgentId) 437 if (sp.UUID != remoteClient.AgentId)
439 { 438 {
440 mapitem = new mapItemReply(); 439 mapitem = new mapItemReply(
441 mapitem.x = (uint)(xstart + sp.AbsolutePosition.X); 440 xstart + (uint)sp.AbsolutePosition.X,
442 mapitem.y = (uint)(ystart + sp.AbsolutePosition.Y); 441 ystart + (uint)sp.AbsolutePosition.Y,
443 mapitem.id = UUID.Zero; 442 UUID.Zero,
444 mapitem.name = Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString()); 443 Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString()),
445 mapitem.Extra = 1; 444 1, 0);
446 mapitem.Extra2 = 0;
447 mapitems.Add(mapitem); 445 mapitems.Add(mapitem);
448 } 446 }
449 }); 447 });
@@ -458,7 +456,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
458 RequestMapItems("",remoteClient.AgentId,flags,EstateID,godlike,itemtype,regionhandle); 456 RequestMapItems("",remoteClient.AgentId,flags,EstateID,godlike,itemtype,regionhandle);
459 } 457 }
460 } 458 }
461 else if (itemtype == 7) // Service 7 (MAP_ITEM_LAND_FOR_SALE) 459 else if (itemtype == (int)GridItemType.LandForSale) // Service 7 (MAP_ITEM_LAND_FOR_SALE)
462 { 460 {
463 if (regionhandle == 0 || regionhandle == m_scene.RegionInfo.RegionHandle) 461 if (regionhandle == 0 || regionhandle == m_scene.RegionInfo.RegionHandle)
464 { 462 {
@@ -488,14 +486,14 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
488 float x = (min.X+max.X)/2; 486 float x = (min.X+max.X)/2;
489 float y = (min.Y+max.Y)/2; 487 float y = (min.Y+max.Y)/2;
490 488
491 mapitem = new mapItemReply(); 489 mapitem = new mapItemReply(
492 mapitem.x = (uint)(xstart + x); 490 xstart + (uint)x,
493 mapitem.y = (uint)(ystart + y); 491 ystart + (uint)y,
494 // mapitem.z = (uint)m_scene.GetGroundHeight(x,y); 492 parcel.GlobalID,
495 mapitem.id = parcel.GlobalID; 493 parcel.Name,
496 mapitem.name = parcel.Name; 494 parcel.Area,
497 mapitem.Extra = parcel.Area; 495 parcel.SalePrice
498 mapitem.Extra2 = parcel.SalePrice; 496 );
499 mapitems.Add(mapitem); 497 mapitems.Add(mapitem);
500 } 498 }
501 } 499 }
@@ -510,7 +508,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
510 RequestMapItems("",remoteClient.AgentId,flags,EstateID,godlike,itemtype,regionhandle); 508 RequestMapItems("",remoteClient.AgentId,flags,EstateID,godlike,itemtype,regionhandle);
511 } 509 }
512 } 510 }
513 else if (itemtype == 1) // Service 1 (MAP_ITEM_TELEHUB) 511 else if (itemtype == (int)GridItemType.Telehub) // Service 1 (MAP_ITEM_TELEHUB)
514 { 512 {
515 if (regionhandle == 0 || regionhandle == m_scene.RegionInfo.RegionHandle) 513 if (regionhandle == 0 || regionhandle == m_scene.RegionInfo.RegionHandle)
516 { 514 {
@@ -520,13 +518,14 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
520 SceneObjectGroup sog = m_scene.GetSceneObjectGroup(m_scene.RegionInfo.RegionSettings.TelehubObject); 518 SceneObjectGroup sog = m_scene.GetSceneObjectGroup(m_scene.RegionInfo.RegionSettings.TelehubObject);
521 if (sog != null) 519 if (sog != null)
522 { 520 {
523 mapitem = new mapItemReply(); 521 mapitem = new mapItemReply(
524 mapitem.x = (uint)(xstart + sog.AbsolutePosition.X); 522 xstart + (uint)sog.AbsolutePosition.X,
525 mapitem.y = (uint)(ystart + sog.AbsolutePosition.Y); 523 ystart + (uint)sog.AbsolutePosition.Y,
526 mapitem.id = UUID.Zero; 524 UUID.Zero,
527 mapitem.name = sog.Name; 525 sog.Name,
528 mapitem.Extra = 0; // color (not used) 526 0, // color (not used)
529 mapitem.Extra2 = 0; // 0 = telehub / 1 = infohub 527 0 // 0 = telehub / 1 = infohub
528 );
530 mapitems.Add(mapitem); 529 mapitems.Add(mapitem);
531 530
532 remoteClient.SendMapItemReply(mapitems.ToArray(), itemtype, flags); 531 remoteClient.SendMapItemReply(mapitems.ToArray(), itemtype, flags);
@@ -676,19 +675,14 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
676 { 675 {
677 OSDMap mapitem = (OSDMap)itemarray[i]; 676 OSDMap mapitem = (OSDMap)itemarray[i];
678 mapItemReply mi = new mapItemReply(); 677 mapItemReply mi = new mapItemReply();
679 mi.x = (uint)mapitem["X"].AsInteger(); 678 mi.FromOSD(mapitem);
680 mi.y = (uint)mapitem["Y"].AsInteger();
681 mi.id = mapitem["ID"].AsUUID();
682 mi.Extra = mapitem["Extra"].AsInteger();
683 mi.Extra2 = mapitem["Extra2"].AsInteger();
684 mi.name = mapitem["Name"].AsString();
685 returnitems.Add(mi); 679 returnitems.Add(mi);
686 } 680 }
687 av.ControllingClient.SendMapItemReply(returnitems.ToArray(), mrs.itemtype, mrs.flags); 681 av.ControllingClient.SendMapItemReply(returnitems.ToArray(), mrs.itemtype, mrs.flags);
688 } 682 }
689 683
690 // Service 7 (MAP_ITEM_LAND_FOR_SALE) 684 // Service 7 (MAP_ITEM_LAND_FOR_SALE)
691 uint itemtype = 7; 685 uint itemtype = (uint)GridItemType.LandForSale;
692 686
693 if (response.ContainsKey(itemtype.ToString())) 687 if (response.ContainsKey(itemtype.ToString()))
694 { 688 {
@@ -698,19 +692,14 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
698 { 692 {
699 OSDMap mapitem = (OSDMap)itemarray[i]; 693 OSDMap mapitem = (OSDMap)itemarray[i];
700 mapItemReply mi = new mapItemReply(); 694 mapItemReply mi = new mapItemReply();
701 mi.x = (uint)mapitem["X"].AsInteger(); 695 mi.FromOSD(mapitem);
702 mi.y = (uint)mapitem["Y"].AsInteger();
703 mi.id = mapitem["ID"].AsUUID();
704 mi.Extra = mapitem["Extra"].AsInteger();
705 mi.Extra2 = mapitem["Extra2"].AsInteger();
706 mi.name = mapitem["Name"].AsString();
707 returnitems.Add(mi); 696 returnitems.Add(mi);
708 } 697 }
709 av.ControllingClient.SendMapItemReply(returnitems.ToArray(), itemtype, mrs.flags); 698 av.ControllingClient.SendMapItemReply(returnitems.ToArray(), itemtype, mrs.flags);
710 } 699 }
711 700
712 // Service 1 (MAP_ITEM_TELEHUB) 701 // Service 1 (MAP_ITEM_TELEHUB)
713 itemtype = 1; 702 itemtype = (uint)GridItemType.Telehub;
714 703
715 if (response.ContainsKey(itemtype.ToString())) 704 if (response.ContainsKey(itemtype.ToString()))
716 { 705 {
@@ -720,12 +709,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
720 { 709 {
721 OSDMap mapitem = (OSDMap)itemarray[i]; 710 OSDMap mapitem = (OSDMap)itemarray[i];
722 mapItemReply mi = new mapItemReply(); 711 mapItemReply mi = new mapItemReply();
723 mi.x = (uint)mapitem["X"].AsInteger(); 712 mi.FromOSD(mapitem);
724 mi.y = (uint)mapitem["Y"].AsInteger();
725 mi.id = mapitem["ID"].AsUUID();
726 mi.Extra = mapitem["Extra"].AsInteger();
727 mi.Extra2 = mapitem["Extra2"].AsInteger();
728 mi.name = mapitem["Name"].AsString();
729 returnitems.Add(mi); 713 returnitems.Add(mi);
730 } 714 }
731 av.ControllingClient.SendMapItemReply(returnitems.ToArray(), itemtype, mrs.flags); 715 av.ControllingClient.SendMapItemReply(returnitems.ToArray(), itemtype, mrs.flags);
@@ -808,7 +792,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
808 if (httpserver.Length == 0) 792 if (httpserver.Length == 0)
809 { 793 {
810 uint x = 0, y = 0; 794 uint x = 0, y = 0;
811 Utils.LongToUInts(regionhandle, out x, out y); 795 Util.RegionHandleToWorldLoc(regionhandle, out x, out y);
812 GridRegion mreg = m_scene.GridService.GetRegionByPosition(m_scene.RegionInfo.ScopeID, (int)x, (int)y); 796 GridRegion mreg = m_scene.GridService.GetRegionByPosition(m_scene.RegionInfo.ScopeID, (int)x, (int)y);
813 797
814 if (mreg != null) 798 if (mreg != null)
@@ -1007,7 +991,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
1007 /// <param name="maxY"></param> 991 /// <param name="maxY"></param>
1008 public virtual void RequestMapBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY, uint flag) 992 public virtual void RequestMapBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY, uint flag)
1009 { 993 {
1010 //m_log.ErrorFormat("[YYY] RequestMapBlocks {0}={1}={2}={3} {4}", minX, minY, maxX, maxY, flag);
1011 if ((flag & 0x10000) != 0) // user clicked on qthe map a tile that isn't visible 994 if ((flag & 0x10000) != 0) // user clicked on qthe map a tile that isn't visible
1012 { 995 {
1013 List<MapBlockData> response = new List<MapBlockData>(); 996 List<MapBlockData> response = new List<MapBlockData>();
@@ -1016,22 +999,24 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
1016 // on an unloaded square. 999 // on an unloaded square.
1017 // But make sure: Look whether the one we requested is in there 1000 // But make sure: Look whether the one we requested is in there
1018 List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID, 1001 List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID,
1019 minX * (int)Constants.RegionSize, 1002 (int)Util.RegionToWorldLoc((uint)minX), (int)Util.RegionToWorldLoc((uint)maxX),
1020 maxX * (int)Constants.RegionSize, 1003 (int)Util.RegionToWorldLoc((uint)minY), (int)Util.RegionToWorldLoc((uint)maxY) );
1021 minY * (int)Constants.RegionSize,
1022 maxY * (int)Constants.RegionSize);
1023 1004
1005 m_log.DebugFormat("[WORLD MAP MODULE] RequestMapBlocks min=<{0},{1}>, max=<{2},{3}>, flag={4}, cntFound={5}",
1006 minX, minY, maxX, maxY, flag.ToString("X"), regions.Count);
1024 if (regions != null) 1007 if (regions != null)
1025 { 1008 {
1026 foreach (GridRegion r in regions) 1009 foreach (GridRegion r in regions)
1027 { 1010 {
1028 if ((r.RegionLocX == minX * (int)Constants.RegionSize) && 1011 if (r.RegionLocX == Util.RegionToWorldLoc((uint)minX)
1029 (r.RegionLocY == minY * (int)Constants.RegionSize)) 1012 && r.RegionLocY == Util.RegionToWorldLoc((uint)minY) )
1030 { 1013 {
1031 // found it => add it to response 1014 // found it => add it to response
1032 MapBlockData block = new MapBlockData(); 1015 // Version 2 viewers can handle the larger regions
1033 MapBlockFromGridRegion(block, r, flag); 1016 if ((flag & 2) == 2)
1034 response.Add(block); 1017 response.AddRange(Map2BlockFromGridRegion(r, flag));
1018 else
1019 response.Add(MapBlockFromGridRegion(r, flag));
1035 break; 1020 break;
1036 } 1021 }
1037 } 1022 }
@@ -1043,7 +1028,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
1043 MapBlockData block = new MapBlockData(); 1028 MapBlockData block = new MapBlockData();
1044 block.X = (ushort)minX; 1029 block.X = (ushort)minX;
1045 block.Y = (ushort)minY; 1030 block.Y = (ushort)minY;
1046 block.Access = 254; // means 'simulator is offline' 1031 block.Access = (byte)SimAccess.Down; // means 'simulator is offline'
1032 // block.Access = (byte)SimAccess.NonExistant;
1047 response.Add(block); 1033 response.Add(block);
1048 } 1034 }
1049 // The lower 16 bits are an unsigned int16 1035 // The lower 16 bits are an unsigned int16
@@ -1060,41 +1046,112 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
1060 { 1046 {
1061 List<MapBlockData> mapBlocks = new List<MapBlockData>(); 1047 List<MapBlockData> mapBlocks = new List<MapBlockData>();
1062 List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID, 1048 List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID,
1063 (minX - 4) * (int)Constants.RegionSize, 1049 (int)Util.RegionToWorldLoc((uint)(minX - 4)), (int)Util.RegionToWorldLoc((uint)(maxX + 4)),
1064 (maxX + 4) * (int)Constants.RegionSize, 1050 (int)Util.RegionToWorldLoc((uint)(minY - 4)), (int)Util.RegionToWorldLoc((uint)(maxY + 4)) );
1065 (minY - 4) * (int)Constants.RegionSize, 1051 m_log.DebugFormat("{0} GetAndSendBlocks. min=<{1},{2}>, max=<{3},{4}>, cntFound={5}",
1066 (maxY + 4) * (int)Constants.RegionSize); 1052 LogHeader, minX, minY, maxX, maxY, regions.Count);
1067 foreach (GridRegion r in regions) 1053 foreach (GridRegion r in regions)
1068 { 1054 {
1069 MapBlockData block = new MapBlockData(); 1055 // Version 2 viewers can handle the larger regions
1070 MapBlockFromGridRegion(block, r, flag); 1056 if ((flag & 2) == 2)
1071 mapBlocks.Add(block); 1057 mapBlocks.AddRange(Map2BlockFromGridRegion(r, flag));
1058 else
1059 mapBlocks.Add(MapBlockFromGridRegion(r, flag));
1072 } 1060 }
1073 remoteClient.SendMapBlock(mapBlocks, flag & 0xffff); 1061 remoteClient.SendMapBlock(mapBlocks, flag & 0xffff);
1074 1062
1075 return mapBlocks; 1063 return mapBlocks;
1076 } 1064 }
1077 1065
1078 protected void MapBlockFromGridRegion(MapBlockData block, GridRegion r, uint flag) 1066 // Fill a passed MapBlockData from a GridRegion
1067 protected MapBlockData MapBlockFromGridRegion(GridRegion r, uint flag)
1079 { 1068 {
1069 MapBlockData block = new MapBlockData();
1070
1080 block.Access = r.Access; 1071 block.Access = r.Access;
1081 switch (flag & 0xffff) 1072 switch (flag & 0xffff)
1082 { 1073 {
1083 case 0: 1074 case 0:
1084 block.MapImageId = r.TerrainImage; 1075 block.MapImageId = r.TerrainImage;
1085 break; 1076 break;
1086 case 2: 1077 case 2:
1087 block.MapImageId = r.ParcelImage; 1078 block.MapImageId = r.ParcelImage;
1088 break; 1079 break;
1089 default: 1080 default:
1090 block.MapImageId = UUID.Zero; 1081 block.MapImageId = UUID.Zero;
1091 break; 1082 break;
1092 } 1083 }
1093 block.Name = r.RegionName; 1084 block.Name = r.RegionName;
1094 block.X = (ushort)(r.RegionLocX / Constants.RegionSize); 1085 block.X = (ushort)Util.WorldToRegionLoc((uint)r.RegionLocX);
1095 block.Y = (ushort)(r.RegionLocY / Constants.RegionSize); 1086 block.Y = (ushort)Util.WorldToRegionLoc((uint)r.RegionLocY);
1087 block.SizeX = (ushort) r.RegionSizeX;
1088 block.SizeY = (ushort) r.RegionSizeY;
1089
1090 return block;
1096 } 1091 }
1097 1092
1093 protected List<MapBlockData> Map2BlockFromGridRegion(GridRegion r, uint flag)
1094 {
1095 List<MapBlockData> blocks = new List<MapBlockData>();
1096 MapBlockData block = new MapBlockData();
1097 if (r == null)
1098 {
1099 block.Access = (byte)SimAccess.Down;
1100 block.MapImageId = UUID.Zero;
1101 blocks.Add(block);
1102 }
1103 else
1104 {
1105 block.Access = r.Access;
1106 switch (flag & 0xffff)
1107 {
1108 case 0:
1109 block.MapImageId = r.TerrainImage;
1110 break;
1111 case 2:
1112 block.MapImageId = r.ParcelImage;
1113 break;
1114 default:
1115 block.MapImageId = UUID.Zero;
1116 break;
1117 }
1118 block.Name = r.RegionName;
1119 block.X = (ushort)(r.RegionLocX / Constants.RegionSize);
1120 block.Y = (ushort)(r.RegionLocY / Constants.RegionSize);
1121 block.SizeX = (ushort)r.RegionSizeX;
1122 block.SizeY = (ushort)r.RegionSizeY;
1123 blocks.Add(block);
1124 // If these are larger than legacy regions, create fake map entries for the covered
1125 // regions. The map system only does legacy sized regions so we have to fake map
1126 // entries for all the covered regions.
1127 if (r.RegionSizeX > Constants.RegionSize || r.RegionSizeY > Constants.RegionSize)
1128 {
1129 for (int x = 0; x < r.RegionSizeX / Constants.RegionSize; x++)
1130 {
1131 for (int y = 0; y < r.RegionSizeY / Constants.RegionSize; y++)
1132 {
1133 if (x == 0 && y == 0)
1134 continue;
1135 block = new MapBlockData
1136 {
1137 Access = r.Access,
1138 MapImageId = r.TerrainImage,
1139 Name = r.RegionName,
1140 X = (ushort)((r.RegionLocX / Constants.RegionSize) + x),
1141 Y = (ushort)((r.RegionLocY / Constants.RegionSize) + y),
1142 SizeX = (ushort)r.RegionSizeX,
1143 SizeY = (ushort)r.RegionSizeY
1144 };
1145 //Child piece, so ignore it
1146 blocks.Add(block);
1147 }
1148 }
1149 }
1150 }
1151 return blocks;
1152 }
1153
1154
1098 public Hashtable OnHTTPThrottled(Hashtable keysvals) 1155 public Hashtable OnHTTPThrottled(Hashtable keysvals)
1099 { 1156 {
1100 Hashtable reply = new Hashtable(); 1157 Hashtable reply = new Hashtable();
@@ -1223,17 +1280,16 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
1223 1280
1224 List<MapBlockData> mapBlocks = new List<MapBlockData>(); 1281 List<MapBlockData> mapBlocks = new List<MapBlockData>();
1225 List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID, 1282 List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID,
1226 (int)(m_scene.RegionInfo.RegionLocX - 9) * (int)Constants.RegionSize, 1283 (int)Util.RegionToWorldLoc(m_scene.RegionInfo.RegionLocX - 9),
1227 (int)(m_scene.RegionInfo.RegionLocX + 9) * (int)Constants.RegionSize, 1284 (int)Util.RegionToWorldLoc(m_scene.RegionInfo.RegionLocX + 9),
1228 (int)(m_scene.RegionInfo.RegionLocY - 9) * (int)Constants.RegionSize, 1285 (int)Util.RegionToWorldLoc(m_scene.RegionInfo.RegionLocY - 9),
1229 (int)(m_scene.RegionInfo.RegionLocY + 9) * (int)Constants.RegionSize); 1286 (int)Util.RegionToWorldLoc(m_scene.RegionInfo.RegionLocY + 9));
1230 List<AssetBase> textures = new List<AssetBase>(); 1287 List<AssetBase> textures = new List<AssetBase>();
1231 List<Image> bitImages = new List<Image>(); 1288 List<Image> bitImages = new List<Image>();
1232 1289
1233 foreach (GridRegion r in regions) 1290 foreach (GridRegion r in regions)
1234 { 1291 {
1235 MapBlockData mapBlock = new MapBlockData(); 1292 MapBlockData mapBlock = MapBlockFromGridRegion(r, 0);
1236 MapBlockFromGridRegion(mapBlock, r, 0);
1237 AssetBase texAsset = m_scene.AssetService.Get(mapBlock.MapImageId.ToString()); 1293 AssetBase texAsset = m_scene.AssetService.Get(mapBlock.MapImageId.ToString());
1238 1294
1239 if (texAsset != null) 1295 if (texAsset != null)
@@ -1294,7 +1350,9 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
1294 uint xstart = 0; 1350 uint xstart = 0;
1295 uint ystart = 0; 1351 uint ystart = 0;
1296 1352
1297 Utils.LongToUInts(m_scene.RegionInfo.RegionHandle,out xstart,out ystart); 1353 Util.RegionHandleToWorldLoc(m_scene.RegionInfo.RegionHandle,out xstart,out ystart);
1354 // m_log.DebugFormat("{0} HandleRemoteMapItemRequest. loc=<{1},{2}>",
1355 // LogHeader, Util.WorldToRegionLoc(xstart), Util.WorldToRegionLoc(ystart));
1298 1356
1299 // Service 6 (MAP_ITEM_AGENTS_LOCATION; green dots) 1357 // Service 6 (MAP_ITEM_AGENTS_LOCATION; green dots)
1300 1358