aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/World
diff options
context:
space:
mode:
authorMelanie2011-04-01 07:44:43 +0100
committerMelanie2011-04-01 07:44:43 +0100
commit329fa73695b496a30e9192888371855802769a16 (patch)
treef581712c3317119b70005beecbe7e4a8d86fb6bc /OpenSim/Region/CoreModules/World
parentMake the login service's call to the sim time out quicker so we have a (diff)
parentWhen a new parcel is created, make sure the prim counts are updated. (diff)
downloadopensim-SC_OLD-329fa73695b496a30e9192888371855802769a16.zip
opensim-SC_OLD-329fa73695b496a30e9192888371855802769a16.tar.gz
opensim-SC_OLD-329fa73695b496a30e9192888371855802769a16.tar.bz2
opensim-SC_OLD-329fa73695b496a30e9192888371855802769a16.tar.xz
Merge branch 'master' into careminster-presence-refactor
Diffstat (limited to 'OpenSim/Region/CoreModules/World')
-rw-r--r--OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs2
-rw-r--r--OpenSim/Region/CoreModules/World/Land/LandObject.cs2
-rw-r--r--OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs161
-rw-r--r--OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs61
-rw-r--r--OpenSim/Region/CoreModules/World/Terrain/FileLoaders/GenericSystemDrawing.cs15
-rw-r--r--OpenSim/Region/CoreModules/World/WorldMap/MapSearchModule.cs6
6 files changed, 223 insertions, 24 deletions
diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
index 50040ff..b5517a1 100644
--- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
+++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
@@ -722,7 +722,7 @@ namespace OpenSim.Region.CoreModules.World.Land
722 ILandObject landUnderPrim = GetLandObject(position.X, position.Y); 722 ILandObject landUnderPrim = GetLandObject(position.X, position.Y);
723 if (landUnderPrim != null) 723 if (landUnderPrim != null)
724 { 724 {
725 landUnderPrim.AddPrimToCount(obj); 725 ((LandObject)landUnderPrim).AddPrimToCount(obj);
726 } 726 }
727 } 727 }
728 728
diff --git a/OpenSim/Region/CoreModules/World/Land/LandObject.cs b/OpenSim/Region/CoreModules/World/Land/LandObject.cs
index 1e824bd..e87153b 100644
--- a/OpenSim/Region/CoreModules/World/Land/LandObject.cs
+++ b/OpenSim/Region/CoreModules/World/Land/LandObject.cs
@@ -243,7 +243,7 @@ namespace OpenSim.Region.CoreModules.World.Land
243 } 243 }
244 244
245 remote_client.SendLandProperties(seq_id, 245 remote_client.SendLandProperties(seq_id,
246 snap_selection, request_result, LandData, 246 snap_selection, request_result, this,
247 (float)m_scene.RegionInfo.RegionSettings.ObjectBonus, 247 (float)m_scene.RegionInfo.RegionSettings.ObjectBonus,
248 GetParcelMaxPrimCount(this), 248 GetParcelMaxPrimCount(this),
249 GetSimulatorMaxPrimCount(this), regionFlags); 249 GetSimulatorMaxPrimCount(this), regionFlags);
diff --git a/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs b/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs
index 62fd2b0..854d1ca 100644
--- a/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs
+++ b/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs
@@ -45,14 +45,13 @@ namespace OpenSim.Region.CoreModules.World.Land
45 public int Owner = 0; 45 public int Owner = 0;
46 public int Group = 0; 46 public int Group = 0;
47 public int Others = 0; 47 public int Others = 0;
48 public Dictionary <UUID, int> Users = 48 public int Selected = 0;
49 new Dictionary <UUID, int>(); 49 public Dictionary <UUID, int> Users = new Dictionary <UUID, int>();
50 } 50 }
51 51
52 public class PrimCountModule : IPrimCountModule, INonSharedRegionModule 52 public class PrimCountModule : IPrimCountModule, INonSharedRegionModule
53 { 53 {
54// private static readonly ILog m_log = 54 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
55// LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
56 55
57 private Scene m_Scene; 56 private Scene m_Scene;
58 private Dictionary<UUID, PrimCounts> m_PrimCounts = 57 private Dictionary<UUID, PrimCounts> m_PrimCounts =
@@ -64,7 +63,6 @@ namespace OpenSim.Region.CoreModules.World.Land
64 private Dictionary<UUID, ParcelCounts> m_ParcelCounts = 63 private Dictionary<UUID, ParcelCounts> m_ParcelCounts =
65 new Dictionary<UUID, ParcelCounts>(); 64 new Dictionary<UUID, ParcelCounts>();
66 65
67
68 /// <value> 66 /// <value>
69 /// For now, a simple simwide taint to get this up. Later parcel based 67 /// For now, a simple simwide taint to get this up. Later parcel based
70 /// taint to allow recounting a parcel if only ownership has changed 68 /// taint to allow recounting a parcel if only ownership has changed
@@ -96,6 +94,7 @@ namespace OpenSim.Region.CoreModules.World.Land
96 OnObjectBeingRemovedFromScene; 94 OnObjectBeingRemovedFromScene;
97 m_Scene.EventManager.OnParcelPrimCountTainted += 95 m_Scene.EventManager.OnParcelPrimCountTainted +=
98 OnParcelPrimCountTainted; 96 OnParcelPrimCountTainted;
97 m_Scene.EventManager.OnLandObjectAdded += delegate(ILandObject lo) { OnParcelPrimCountTainted(); };
99 } 98 }
100 99
101 public void RegionLoaded(Scene scene) 100 public void RegionLoaded(Scene scene)
@@ -123,6 +122,11 @@ namespace OpenSim.Region.CoreModules.World.Land
123 { 122 {
124 if (!m_Tainted) 123 if (!m_Tainted)
125 AddObject(obj); 124 AddObject(obj);
125// else
126// m_log.DebugFormat(
127// "[PRIM COUNT MODULE]: Ignoring OnParcelPrimCountAdd() for {0} on {1} since count is tainted",
128// obj.Name, m_Scene.RegionInfo.RegionName);
129
126 } 130 }
127 } 131 }
128 132
@@ -133,11 +137,18 @@ namespace OpenSim.Region.CoreModules.World.Land
133 { 137 {
134 if (!m_Tainted) 138 if (!m_Tainted)
135 RemoveObject(obj); 139 RemoveObject(obj);
140// else
141// m_log.DebugFormat(
142// "[PRIM COUNT MODULE]: Ignoring OnObjectBeingRemovedFromScene() for {0} on {1} since count is tainted",
143// obj.Name, m_Scene.RegionInfo.RegionName);
136 } 144 }
137 } 145 }
138 146
139 private void OnParcelPrimCountTainted() 147 private void OnParcelPrimCountTainted()
140 { 148 {
149// m_log.DebugFormat(
150// "[PRIM COUNT MODULE]: OnParcelPrimCountTainted() called on {0}", m_Scene.RegionInfo.RegionName);
151
141 lock (m_TaintLock) 152 lock (m_TaintLock)
142 m_Tainted = true; 153 m_Tainted = true;
143 } 154 }
@@ -163,7 +174,7 @@ namespace OpenSim.Region.CoreModules.World.Land
163 // NOTE: Call under Taint Lock 174 // NOTE: Call under Taint Lock
164 private void AddObject(SceneObjectGroup obj) 175 private void AddObject(SceneObjectGroup obj)
165 { 176 {
166// m_log.DebugFormat("[PRIM COUNT MODULE]: Adding object {0} to prim count", obj.Name); 177// m_log.DebugFormat("[PRIM COUNT MODULE]: Adding object {0} {1} to prim count", obj.Name, obj.UUID);
167 178
168 if (obj.IsAttachment) 179 if (obj.IsAttachment)
169 return; 180 return;
@@ -208,16 +219,25 @@ namespace OpenSim.Region.CoreModules.World.Land
208 else 219 else
209 parcelCounts.Others += partCount; 220 parcelCounts.Others += partCount;
210 } 221 }
222
223 if (obj.IsSelected)
224 parcelCounts.Selected += partCount;
211 } 225 }
212 } 226 }
213 227
214 // NOTE: Call under Taint Lock 228 // NOTE: Call under Taint Lock
215 private void RemoveObject(SceneObjectGroup obj) 229 private void RemoveObject(SceneObjectGroup obj)
216 { 230 {
231// m_log.DebugFormat("[PRIM COUNT MODULE]: Removing object {0} {1} from prim count", obj.Name, obj.UUID);
232
233 // Currently this is being done by tainting the count instead.
217 } 234 }
218 235
219 public IPrimCounts GetPrimCounts(UUID parcelID) 236 public IPrimCounts GetPrimCounts(UUID parcelID)
220 { 237 {
238// m_log.DebugFormat(
239// "[PRIM COUNT MODULE]: GetPrimCounts for parcel {0} in {1}", parcelID, m_Scene.RegionInfo.RegionName);
240
221 PrimCounts primCounts; 241 PrimCounts primCounts;
222 242
223 lock (m_PrimCounts) 243 lock (m_PrimCounts)
@@ -239,7 +259,7 @@ namespace OpenSim.Region.CoreModules.World.Land
239 /// <returns></returns> 259 /// <returns></returns>
240 public int GetOwnerCount(UUID parcelID) 260 public int GetOwnerCount(UUID parcelID)
241 { 261 {
242// m_log.DebugFormat("[PRIM COUNT MODULE]: GetOwnerCount for {0}", parcelID); 262 int count = 0;
243 263
244 lock (m_TaintLock) 264 lock (m_TaintLock)
245 { 265 {
@@ -248,9 +268,14 @@ namespace OpenSim.Region.CoreModules.World.Land
248 268
249 ParcelCounts counts; 269 ParcelCounts counts;
250 if (m_ParcelCounts.TryGetValue(parcelID, out counts)) 270 if (m_ParcelCounts.TryGetValue(parcelID, out counts))
251 return counts.Owner; 271 count = counts.Owner;
252 } 272 }
253 return 0; 273
274// m_log.DebugFormat(
275// "[PRIM COUNT MODULE]: GetOwnerCount for parcel {0} in {1} returning {2}",
276// parcelID, m_Scene.RegionInfo.RegionName, count);
277
278 return count;
254 } 279 }
255 280
256 /// <summary> 281 /// <summary>
@@ -260,6 +285,8 @@ namespace OpenSim.Region.CoreModules.World.Land
260 /// <returns></returns> 285 /// <returns></returns>
261 public int GetGroupCount(UUID parcelID) 286 public int GetGroupCount(UUID parcelID)
262 { 287 {
288 int count = 0;
289
263 lock (m_TaintLock) 290 lock (m_TaintLock)
264 { 291 {
265 if (m_Tainted) 292 if (m_Tainted)
@@ -267,9 +294,14 @@ namespace OpenSim.Region.CoreModules.World.Land
267 294
268 ParcelCounts counts; 295 ParcelCounts counts;
269 if (m_ParcelCounts.TryGetValue(parcelID, out counts)) 296 if (m_ParcelCounts.TryGetValue(parcelID, out counts))
270 return counts.Group; 297 count = counts.Group;
271 } 298 }
272 return 0; 299
300// m_log.DebugFormat(
301// "[PRIM COUNT MODULE]: GetGroupCount for parcel {0} in {1} returning {2}",
302// parcelID, m_Scene.RegionInfo.RegionName, count);
303
304 return count;
273 } 305 }
274 306
275 /// <summary> 307 /// <summary>
@@ -279,6 +311,61 @@ namespace OpenSim.Region.CoreModules.World.Land
279 /// <returns></returns> 311 /// <returns></returns>
280 public int GetOthersCount(UUID parcelID) 312 public int GetOthersCount(UUID parcelID)
281 { 313 {
314 int count = 0;
315
316 lock (m_TaintLock)
317 {
318 if (m_Tainted)
319 Recount();
320
321 ParcelCounts counts;
322 if (m_ParcelCounts.TryGetValue(parcelID, out counts))
323 count = counts.Others;
324 }
325
326// m_log.DebugFormat(
327// "[PRIM COUNT MODULE]: GetOthersCount for parcel {0} in {1} returning {2}",
328// parcelID, m_Scene.RegionInfo.RegionName, count);
329
330 return count;
331 }
332
333 /// <summary>
334 /// Get the number of selected prims.
335 /// </summary>
336 /// <param name="parcelID"></param>
337 /// <returns></returns>
338 public int GetSelectedCount(UUID parcelID)
339 {
340 int count = 0;
341
342 lock (m_TaintLock)
343 {
344 if (m_Tainted)
345 Recount();
346
347 ParcelCounts counts;
348 if (m_ParcelCounts.TryGetValue(parcelID, out counts))
349 count = counts.Selected;
350 }
351
352// m_log.DebugFormat(
353// "[PRIM COUNT MODULE]: GetSelectedCount for parcel {0} in {1} returning {2}",
354// parcelID, m_Scene.RegionInfo.RegionName, count);
355
356 return count;
357 }
358
359 /// <summary>
360 /// Get the total count of owner, group and others prims on the parcel.
361 /// FIXME: Need to do selected prims once this is reimplemented.
362 /// </summary>
363 /// <param name="parcelID"></param>
364 /// <returns></returns>
365 public int GetTotalCount(UUID parcelID)
366 {
367 int count = 0;
368
282 lock (m_TaintLock) 369 lock (m_TaintLock)
283 { 370 {
284 if (m_Tainted) 371 if (m_Tainted)
@@ -286,9 +373,18 @@ namespace OpenSim.Region.CoreModules.World.Land
286 373
287 ParcelCounts counts; 374 ParcelCounts counts;
288 if (m_ParcelCounts.TryGetValue(parcelID, out counts)) 375 if (m_ParcelCounts.TryGetValue(parcelID, out counts))
289 return counts.Others; 376 {
377 count = counts.Owner;
378 count += counts.Group;
379 count += counts.Others;
380 }
290 } 381 }
291 return 0; 382
383// m_log.DebugFormat(
384// "[PRIM COUNT MODULE]: GetTotalCount for parcel {0} in {1} returning {2}",
385// parcelID, m_Scene.RegionInfo.RegionName, count);
386
387 return count;
292 } 388 }
293 389
294 /// <summary> 390 /// <summary>
@@ -298,6 +394,8 @@ namespace OpenSim.Region.CoreModules.World.Land
298 /// <returns></returns> 394 /// <returns></returns>
299 public int GetSimulatorCount(UUID parcelID) 395 public int GetSimulatorCount(UUID parcelID)
300 { 396 {
397 int count = 0;
398
301 lock (m_TaintLock) 399 lock (m_TaintLock)
302 { 400 {
303 if (m_Tainted) 401 if (m_Tainted)
@@ -308,10 +406,15 @@ namespace OpenSim.Region.CoreModules.World.Land
308 { 406 {
309 int val; 407 int val;
310 if (m_SimwideCounts.TryGetValue(owner, out val)) 408 if (m_SimwideCounts.TryGetValue(owner, out val))
311 return val; 409 count = val;
312 } 410 }
313 } 411 }
314 return 0; 412
413// m_log.DebugFormat(
414// "[PRIM COUNT MODULE]: GetOthersCount for parcel {0} in {1} returning {2}",
415// parcelID, m_Scene.RegionInfo.RegionName, count);
416
417 return count;
315 } 418 }
316 419
317 /// <summary> 420 /// <summary>
@@ -322,6 +425,8 @@ namespace OpenSim.Region.CoreModules.World.Land
322 /// <returns></returns> 425 /// <returns></returns>
323 public int GetUserCount(UUID parcelID, UUID userID) 426 public int GetUserCount(UUID parcelID, UUID userID)
324 { 427 {
428 int count = 0;
429
325 lock (m_TaintLock) 430 lock (m_TaintLock)
326 { 431 {
327 if (m_Tainted) 432 if (m_Tainted)
@@ -332,10 +437,15 @@ namespace OpenSim.Region.CoreModules.World.Land
332 { 437 {
333 int val; 438 int val;
334 if (counts.Users.TryGetValue(userID, out val)) 439 if (counts.Users.TryGetValue(userID, out val))
335 return val; 440 count = val;
336 } 441 }
337 } 442 }
338 return 0; 443
444// m_log.DebugFormat(
445// "[PRIM COUNT MODULE]: GetUserCount for user {0} in parcel {1} in region {2} returning {3}",
446// userID, parcelID, m_Scene.RegionInfo.RegionName, count);
447
448 return count;
339 } 449 }
340 450
341 // NOTE: This method MUST be called while holding the taint lock! 451 // NOTE: This method MUST be called while holding the taint lock!
@@ -367,6 +477,7 @@ namespace OpenSim.Region.CoreModules.World.Land
367 if (!m_OwnerMap.ContainsKey(k)) 477 if (!m_OwnerMap.ContainsKey(k))
368 m_PrimCounts.Remove(k); 478 m_PrimCounts.Remove(k);
369 } 479 }
480
370 m_Tainted = false; 481 m_Tainted = false;
371 } 482 }
372 } 483 }
@@ -408,6 +519,22 @@ namespace OpenSim.Region.CoreModules.World.Land
408 return m_Parent.GetOthersCount(m_ParcelID); 519 return m_Parent.GetOthersCount(m_ParcelID);
409 } 520 }
410 } 521 }
522
523 public int Selected
524 {
525 get
526 {
527 return m_Parent.GetSelectedCount(m_ParcelID);
528 }
529 }
530
531 public int Total
532 {
533 get
534 {
535 return m_Parent.GetTotalCount(m_ParcelID);
536 }
537 }
411 538
412 public int Simulator 539 public int Simulator
413 { 540 {
diff --git a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs
index c9d393f..5a60f22 100644
--- a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs
+++ b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs
@@ -78,9 +78,11 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
78 Assert.That(pc.Owner, Is.EqualTo(0)); 78 Assert.That(pc.Owner, Is.EqualTo(0));
79 Assert.That(pc.Group, Is.EqualTo(0)); 79 Assert.That(pc.Group, Is.EqualTo(0));
80 Assert.That(pc.Others, Is.EqualTo(0)); 80 Assert.That(pc.Others, Is.EqualTo(0));
81 Assert.That(pc.Total, Is.EqualTo(0));
82 Assert.That(pc.Selected, Is.EqualTo(0));
81 Assert.That(pc.Users[m_userId], Is.EqualTo(0)); 83 Assert.That(pc.Users[m_userId], Is.EqualTo(0));
82 Assert.That(pc.Users[m_dummyUserId], Is.EqualTo(0)); 84 Assert.That(pc.Users[m_dummyUserId], Is.EqualTo(0));
83 Assert.That(pc.Simulator, Is.EqualTo(0)); 85 Assert.That(pc.Simulator, Is.EqualTo(0));
84 86
85 SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_userId, 0x01); 87 SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_userId, 0x01);
86 m_scene.AddNewSceneObject(sog, false); 88 m_scene.AddNewSceneObject(sog, false);
@@ -88,6 +90,8 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
88 Assert.That(pc.Owner, Is.EqualTo(3)); 90 Assert.That(pc.Owner, Is.EqualTo(3));
89 Assert.That(pc.Group, Is.EqualTo(0)); 91 Assert.That(pc.Group, Is.EqualTo(0));
90 Assert.That(pc.Others, Is.EqualTo(0)); 92 Assert.That(pc.Others, Is.EqualTo(0));
93 Assert.That(pc.Total, Is.EqualTo(3));
94 Assert.That(pc.Selected, Is.EqualTo(0));
91 Assert.That(pc.Users[m_userId], Is.EqualTo(3)); 95 Assert.That(pc.Users[m_userId], Is.EqualTo(3));
92 Assert.That(pc.Users[m_dummyUserId], Is.EqualTo(0)); 96 Assert.That(pc.Users[m_dummyUserId], Is.EqualTo(0));
93 Assert.That(pc.Simulator, Is.EqualTo(3)); 97 Assert.That(pc.Simulator, Is.EqualTo(3));
@@ -99,12 +103,39 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
99 Assert.That(pc.Owner, Is.EqualTo(5)); 103 Assert.That(pc.Owner, Is.EqualTo(5));
100 Assert.That(pc.Group, Is.EqualTo(0)); 104 Assert.That(pc.Group, Is.EqualTo(0));
101 Assert.That(pc.Others, Is.EqualTo(0)); 105 Assert.That(pc.Others, Is.EqualTo(0));
106 Assert.That(pc.Total, Is.EqualTo(5));
107 Assert.That(pc.Selected, Is.EqualTo(0));
102 Assert.That(pc.Users[m_userId], Is.EqualTo(5)); 108 Assert.That(pc.Users[m_userId], Is.EqualTo(5));
103 Assert.That(pc.Users[m_dummyUserId], Is.EqualTo(0)); 109 Assert.That(pc.Users[m_dummyUserId], Is.EqualTo(0));
104 Assert.That(pc.Simulator, Is.EqualTo(5)); 110 Assert.That(pc.Simulator, Is.EqualTo(5));
105 } 111 }
106 112
107 /// <summary> 113 /// <summary>
114 /// Test count after a parcel owner owned copied object is added.
115 /// </summary>
116 [Test]
117 public void TestCopiedOwnerObject()
118 {
119 TestHelper.InMethod();
120// log4net.Config.XmlConfigurator.Configure();
121
122 IPrimCounts pc = m_lo.PrimCounts;
123
124 SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_userId, 0x01);
125 m_scene.AddNewSceneObject(sog, false);
126 m_scene.SceneGraph.DuplicateObject(sog.LocalId, Vector3.Zero, 0, m_userId, UUID.Zero, Quaternion.Identity);
127
128 Assert.That(pc.Owner, Is.EqualTo(6));
129 Assert.That(pc.Group, Is.EqualTo(0));
130 Assert.That(pc.Others, Is.EqualTo(0));
131 Assert.That(pc.Total, Is.EqualTo(6));
132 Assert.That(pc.Selected, Is.EqualTo(0));
133 Assert.That(pc.Users[m_userId], Is.EqualTo(6));
134 Assert.That(pc.Users[m_dummyUserId], Is.EqualTo(0));
135 Assert.That(pc.Simulator, Is.EqualTo(6));
136 }
137
138 /// <summary>
108 /// Test count after a parcel owner owned object is removed. 139 /// Test count after a parcel owner owned object is removed.
109 /// </summary> 140 /// </summary>
110 [Test] 141 [Test]
@@ -123,9 +154,35 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
123 Assert.That(pc.Owner, Is.EqualTo(1)); 154 Assert.That(pc.Owner, Is.EqualTo(1));
124 Assert.That(pc.Group, Is.EqualTo(0)); 155 Assert.That(pc.Group, Is.EqualTo(0));
125 Assert.That(pc.Others, Is.EqualTo(0)); 156 Assert.That(pc.Others, Is.EqualTo(0));
157 Assert.That(pc.Total, Is.EqualTo(1));
158 Assert.That(pc.Selected, Is.EqualTo(0));
126 Assert.That(pc.Users[m_userId], Is.EqualTo(1)); 159 Assert.That(pc.Users[m_userId], Is.EqualTo(1));
127 Assert.That(pc.Users[m_dummyUserId], Is.EqualTo(0)); 160 Assert.That(pc.Users[m_dummyUserId], Is.EqualTo(0));
128 Assert.That(pc.Simulator, Is.EqualTo(1)); 161 Assert.That(pc.Simulator, Is.EqualTo(1));
129 } 162 }
163
164 /// <summary>
165 /// Test the count is correct after is has been tainted.
166 /// </summary>
167 [Test]
168 public void TestTaint()
169 {
170 TestHelper.InMethod();
171 IPrimCounts pc = m_lo.PrimCounts;
172
173 SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_userId, 0x01);
174 m_scene.AddNewSceneObject(sog, false);
175
176 m_pcm.TaintPrimCount();
177
178 Assert.That(pc.Owner, Is.EqualTo(3));
179 Assert.That(pc.Group, Is.EqualTo(0));
180 Assert.That(pc.Others, Is.EqualTo(0));
181 Assert.That(pc.Total, Is.EqualTo(3));
182 Assert.That(pc.Selected, Is.EqualTo(0));
183 Assert.That(pc.Users[m_userId], Is.EqualTo(3));
184 Assert.That(pc.Users[m_dummyUserId], Is.EqualTo(0));
185 Assert.That(pc.Simulator, Is.EqualTo(3));
186 }
130 } 187 }
131} \ No newline at end of file 188} \ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/World/Terrain/FileLoaders/GenericSystemDrawing.cs b/OpenSim/Region/CoreModules/World/Terrain/FileLoaders/GenericSystemDrawing.cs
index 6676ec8..d6fa093 100644
--- a/OpenSim/Region/CoreModules/World/Terrain/FileLoaders/GenericSystemDrawing.cs
+++ b/OpenSim/Region/CoreModules/World/Terrain/FileLoaders/GenericSystemDrawing.cs
@@ -62,9 +62,20 @@ namespace OpenSim.Region.CoreModules.World.Terrain.FileLoaders
62 return LoadBitmap(new Bitmap(filename)); 62 return LoadBitmap(new Bitmap(filename));
63 } 63 }
64 64
65 public ITerrainChannel LoadFile(string filename, int x, int y, int fileWidth, int fileHeight, int w, int h) 65 public virtual ITerrainChannel LoadFile(string filename, int offsetX, int offsetY, int fileWidth, int fileHeight, int w, int h)
66 { 66 {
67 throw new NotImplementedException(); 67 Bitmap bitmap = new Bitmap(filename);
68 ITerrainChannel retval = new TerrainChannel(true);
69
70 for (int x = 0; x < retval.Width; x++)
71 {
72 for (int y = 0; y < retval.Height; y++)
73 {
74 retval[x, y] = bitmap.GetPixel(offsetX * retval.Width + x, (bitmap.Height - (retval.Height * (offsetY + 1))) + retval.Height - y - 1).GetBrightness() * 128;
75 }
76 }
77
78 return retval;
68 } 79 }
69 80
70 public virtual ITerrainChannel LoadStream(Stream stream) 81 public virtual ITerrainChannel LoadStream(Stream stream)
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/MapSearchModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/MapSearchModule.cs
index 282e4f1..d0aa53e 100644
--- a/OpenSim/Region/CoreModules/World/WorldMap/MapSearchModule.cs
+++ b/OpenSim/Region/CoreModules/World/WorldMap/MapSearchModule.cs
@@ -100,9 +100,13 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
100 // service wasn't available; maybe still an old GridServer. Try the old API, though it will return only one region 100 // service wasn't available; maybe still an old GridServer. Try the old API, though it will return only one region
101 regionInfos = new List<GridRegion>(); 101 regionInfos = new List<GridRegion>();
102 GridRegion info = m_scene.GridService.GetRegionByName(m_scene.RegionInfo.ScopeID, mapName); 102 GridRegion info = m_scene.GridService.GetRegionByName(m_scene.RegionInfo.ScopeID, mapName);
103 if (info != null) regionInfos.Add(info); 103 if (info != null)
104 regionInfos.Add(info);
104 } 105 }
106 else if (regionInfos.Count == 0 && mapName.StartsWith("http://"))
107 remoteClient.SendAlertMessage("Hyperlink could not be established.");
105 108
109 //m_log.DebugFormat("[MAPSEARCHMODULE]: search {0} returned {1} regions", mapName, regionInfos.Count);
106 List<MapBlockData> blocks = new List<MapBlockData>(); 110 List<MapBlockData> blocks = new List<MapBlockData>();
107 111
108 MapBlockData data; 112 MapBlockData data;