aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
authorMelanie2011-04-01 07:44:43 +0100
committerMelanie2011-04-01 07:44:43 +0100
commit329fa73695b496a30e9192888371855802769a16 (patch)
treef581712c3317119b70005beecbe7e4a8d86fb6bc /OpenSim
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')
-rw-r--r--OpenSim/Client/MXP/ClientStack/MXPClientView.cs2
-rw-r--r--OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs2
-rw-r--r--OpenSim/Framework/IClientAPI.cs12
-rw-r--r--OpenSim/Framework/ILandChannel.cs (renamed from OpenSim/Region/Framework/Interfaces/ILandChannel.cs)0
-rw-r--r--OpenSim/Framework/ILandObject.cs (renamed from OpenSim/Region/Framework/Interfaces/ILandObject.cs)7
-rw-r--r--OpenSim/Framework/IPrimCounts.cs74
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs65
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs1
-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
-rw-r--r--OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs2
-rw-r--r--OpenSim/Region/Framework/Interfaces/IPrimCountModule.cs16
-rw-r--r--OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs2
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/LOParcel.cs1
-rw-r--r--OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs2
-rw-r--r--OpenSim/Services/GridService/HypergridLinker.cs37
-rw-r--r--OpenSim/Tests/Common/Mock/TestClient.cs2
21 files changed, 391 insertions, 81 deletions
diff --git a/OpenSim/Client/MXP/ClientStack/MXPClientView.cs b/OpenSim/Client/MXP/ClientStack/MXPClientView.cs
index 302f7ae..ca7566e 100644
--- a/OpenSim/Client/MXP/ClientStack/MXPClientView.cs
+++ b/OpenSim/Client/MXP/ClientStack/MXPClientView.cs
@@ -1267,7 +1267,7 @@ namespace OpenSim.Client.MXP.ClientStack
1267 // Need to translate to MXP somehow 1267 // Need to translate to MXP somehow
1268 } 1268 }
1269 1269
1270 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags) 1270 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, ILandObject lo, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags)
1271 { 1271 {
1272 // Need to translate to MXP somehow 1272 // Need to translate to MXP somehow
1273 } 1273 }
diff --git a/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs b/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs
index ba6456b..120e2ea 100644
--- a/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs
+++ b/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs
@@ -805,7 +805,7 @@ namespace OpenSim.Client.VWoHTTP.ClientStack
805 throw new System.NotImplementedException(); 805 throw new System.NotImplementedException();
806 } 806 }
807 807
808 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags) 808 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, ILandObject lo, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags)
809 { 809 {
810 throw new System.NotImplementedException(); 810 throw new System.NotImplementedException();
811 } 811 }
diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs
index 3f77092..6ec69d3 100644
--- a/OpenSim/Framework/IClientAPI.cs
+++ b/OpenSim/Framework/IClientAPI.cs
@@ -1148,7 +1148,17 @@ namespace OpenSim.Framework
1148 void SendDetailedEstateData(UUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, 1148 void SendDetailedEstateData(UUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags,
1149 uint sunPosition, UUID covenant, string abuseEmail, UUID estateOwner); 1149 uint sunPosition, UUID covenant, string abuseEmail, UUID estateOwner);
1150 1150
1151 void SendLandProperties(int sequence_id, bool snap_selection, int request_result, LandData landData, 1151 /// <summary>
1152 /// Send land properties to the client.
1153 /// </summary>
1154 /// <param name="sequence_id"></param>
1155 /// <param name="snap_selection"></param>
1156 /// <param name="request_result"></param>
1157 /// <param name="lo"></param></param>
1158 /// <param name="parcelObjectCapacity">/param>
1159 /// <param name="simObjectCapacity"></param>
1160 /// <param name="regionFlags"></param>
1161 void SendLandProperties(int sequence_id, bool snap_selection, int request_result, ILandObject lo,
1152 float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, 1162 float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity,
1153 uint regionFlags); 1163 uint regionFlags);
1154 1164
diff --git a/OpenSim/Region/Framework/Interfaces/ILandChannel.cs b/OpenSim/Framework/ILandChannel.cs
index 30bae16..30bae16 100644
--- a/OpenSim/Region/Framework/Interfaces/ILandChannel.cs
+++ b/OpenSim/Framework/ILandChannel.cs
diff --git a/OpenSim/Region/Framework/Interfaces/ILandObject.cs b/OpenSim/Framework/ILandObject.cs
index 9c0abde..931e24a 100644
--- a/OpenSim/Region/Framework/Interfaces/ILandObject.cs
+++ b/OpenSim/Framework/ILandObject.cs
@@ -27,10 +27,8 @@
27 27
28using System.Collections.Generic; 28using System.Collections.Generic;
29using OpenMetaverse; 29using OpenMetaverse;
30using OpenSim.Framework;
31using OpenSim.Region.Framework.Scenes;
32 30
33namespace OpenSim.Region.Framework.Interfaces 31namespace OpenSim.Framework
34{ 32{
35 public delegate int overrideParcelMaxPrimCountDelegate(ILandObject obj); 33 public delegate int overrideParcelMaxPrimCountDelegate(ILandObject obj);
36 public delegate int overrideSimulatorMaxPrimCountDelegate(ILandObject obj); 34 public delegate int overrideSimulatorMaxPrimCountDelegate(ILandObject obj);
@@ -90,11 +88,8 @@ namespace OpenSim.Region.Framework.Interfaces
90 bool[,] MergeLandBitmaps(bool[,] bitmap_base, bool[,] bitmap_add); 88 bool[,] MergeLandBitmaps(bool[,] bitmap_base, bool[,] bitmap_add);
91 void SendForceObjectSelect(int local_id, int request_type, List<UUID> returnIDs, IClientAPI remote_client); 89 void SendForceObjectSelect(int local_id, int request_type, List<UUID> returnIDs, IClientAPI remote_client);
92 void SendLandObjectOwners(IClientAPI remote_client); 90 void SendLandObjectOwners(IClientAPI remote_client);
93 void ReturnObject(SceneObjectGroup obj);
94 void ReturnLandObjects(uint type, UUID[] owners, UUID[] tasks, IClientAPI remote_client); 91 void ReturnLandObjects(uint type, UUID[] owners, UUID[] tasks, IClientAPI remote_client);
95 void ResetLandPrimCounts(); 92 void ResetLandPrimCounts();
96 void AddPrimToCount(SceneObjectGroup obj);
97 void RemovePrimFromCount(SceneObjectGroup obj);
98 void UpdateLandSold(UUID avatarID, UUID groupID, bool groupOwned, uint AuctionID, int claimprice, int area); 93 void UpdateLandSold(UUID avatarID, UUID groupID, bool groupOwned, uint AuctionID, int claimprice, int area);
99 94
100 void DeedToGroup(UUID groupID); 95 void DeedToGroup(UUID groupID);
diff --git a/OpenSim/Framework/IPrimCounts.cs b/OpenSim/Framework/IPrimCounts.cs
new file mode 100644
index 0000000..3e12348
--- /dev/null
+++ b/OpenSim/Framework/IPrimCounts.cs
@@ -0,0 +1,74 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using OpenMetaverse;
29
30namespace OpenSim.Framework
31{
32 public interface IPrimCounts
33 {
34 /// <summary>
35 /// Parcel owner owned prims
36 /// </summary>
37 int Owner { get; }
38
39 /// <summary>
40 /// Parcel group owned prims
41 /// </summary>
42 int Group { get; }
43
44 /// <summary>
45 /// Prims owned by others (not parcel owner or parcel group).
46 /// </summary>
47 int Others { get; }
48
49 /// <summary>
50 /// Selected prims
51 /// </summary>
52 int Selected { get; }
53
54 /// <summary>
55 /// Total prims on the parcel.
56 /// </summary>
57 int Total { get; }
58
59 /// <summary>
60 /// Prims on the simulator that are owned by the parcel owner, even if they are in other parcels.
61 /// </summary>
62 int Simulator { get; }
63
64 /// <summary>
65 /// Prims per individual users.
66 /// </summary>
67 IUserPrimCounts Users { get; }
68 }
69
70 public interface IUserPrimCounts
71 {
72 int this[UUID agentID] { get; }
73 }
74} \ No newline at end of file
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index e91d37f..311b1e4 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -4337,8 +4337,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4337 OutPacket(packet, ThrottleOutPacketType.Task); 4337 OutPacket(packet, ThrottleOutPacketType.Task);
4338 } 4338 }
4339 4339
4340 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags) 4340 public void SendLandProperties(
4341 int sequence_id, bool snap_selection, int request_result, ILandObject lo,
4342 float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags)
4341 { 4343 {
4344// m_log.DebugFormat("[LLCLIENTVIEW]: Sending land properties for {0} to {1}", lo.LandData.GlobalID, Name);
4345
4346 LandData landData = lo.LandData;
4347
4342 ParcelPropertiesMessage updateMessage = new ParcelPropertiesMessage(); 4348 ParcelPropertiesMessage updateMessage = new ParcelPropertiesMessage();
4343 4349
4344 updateMessage.AABBMax = landData.AABBMax; 4350 updateMessage.AABBMax = landData.AABBMax;
@@ -4346,15 +4352,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4346 updateMessage.Area = landData.Area; 4352 updateMessage.Area = landData.Area;
4347 updateMessage.AuctionID = landData.AuctionID; 4353 updateMessage.AuctionID = landData.AuctionID;
4348 updateMessage.AuthBuyerID = landData.AuthBuyerID; 4354 updateMessage.AuthBuyerID = landData.AuthBuyerID;
4349
4350 updateMessage.Bitmap = landData.Bitmap; 4355 updateMessage.Bitmap = landData.Bitmap;
4351
4352 updateMessage.Desc = landData.Description; 4356 updateMessage.Desc = landData.Description;
4353 updateMessage.Category = landData.Category; 4357 updateMessage.Category = landData.Category;
4354 updateMessage.ClaimDate = Util.ToDateTime(landData.ClaimDate); 4358 updateMessage.ClaimDate = Util.ToDateTime(landData.ClaimDate);
4355 updateMessage.ClaimPrice = landData.ClaimPrice; 4359 updateMessage.ClaimPrice = landData.ClaimPrice;
4356 updateMessage.GroupID = landData.GroupID; 4360 updateMessage.GroupID = landData.GroupID;
4357 updateMessage.GroupPrims = landData.GroupPrims;
4358 updateMessage.IsGroupOwned = landData.IsGroupOwned; 4361 updateMessage.IsGroupOwned = landData.IsGroupOwned;
4359 updateMessage.LandingType = (LandingType) landData.LandingType; 4362 updateMessage.LandingType = (LandingType) landData.LandingType;
4360 updateMessage.LocalID = landData.LocalID; 4363 updateMessage.LocalID = landData.LocalID;
@@ -4375,9 +4378,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4375 updateMessage.Name = landData.Name; 4378 updateMessage.Name = landData.Name;
4376 updateMessage.OtherCleanTime = landData.OtherCleanTime; 4379 updateMessage.OtherCleanTime = landData.OtherCleanTime;
4377 updateMessage.OtherCount = 0; //TODO: Unimplemented 4380 updateMessage.OtherCount = 0; //TODO: Unimplemented
4378 updateMessage.OtherPrims = landData.OtherPrims; 4381 updateMessage.OwnerID = landData.OwnerID;
4379 updateMessage.OwnerID = landData.OwnerID;
4380 updateMessage.OwnerPrims = landData.OwnerPrims;
4381 updateMessage.ParcelFlags = (ParcelFlags) landData.Flags; 4382 updateMessage.ParcelFlags = (ParcelFlags) landData.Flags;
4382 updateMessage.ParcelPrimBonus = simObjectBonusFactor; 4383 updateMessage.ParcelPrimBonus = simObjectBonusFactor;
4383 updateMessage.PassHours = landData.PassHours; 4384 updateMessage.PassHours = landData.PassHours;
@@ -4392,10 +4393,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4392 4393
4393 updateMessage.RentPrice = 0; 4394 updateMessage.RentPrice = 0;
4394 updateMessage.RequestResult = (ParcelResult) request_result; 4395 updateMessage.RequestResult = (ParcelResult) request_result;
4395 updateMessage.SalePrice = landData.SalePrice; 4396 updateMessage.SalePrice = landData.SalePrice;
4396 updateMessage.SelectedPrims = landData.SelectedPrims;
4397 updateMessage.SelfCount = 0; //TODO: Unimplemented 4397 updateMessage.SelfCount = 0; //TODO: Unimplemented
4398 updateMessage.SequenceID = sequence_id; 4398 updateMessage.SequenceID = sequence_id;
4399
4399 if (landData.SimwideArea > 0) 4400 if (landData.SimwideArea > 0)
4400 { 4401 {
4401 int simulatorCapacity = (int)(((float)landData.SimwideArea / 65536.0f) * (float)m_scene.RegionInfo.ObjectCapacity * (float)m_scene.RegionInfo.RegionSettings.ObjectBonus); 4402 int simulatorCapacity = (int)(((float)landData.SimwideArea / 65536.0f) * (float)m_scene.RegionInfo.ObjectCapacity * (float)m_scene.RegionInfo.RegionSettings.ObjectBonus);
@@ -4405,22 +4406,28 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4405 { 4406 {
4406 updateMessage.SimWideMaxPrims = 0; 4407 updateMessage.SimWideMaxPrims = 0;
4407 } 4408 }
4408 updateMessage.SimWideTotalPrims = landData.SimwidePrims; 4409
4409 updateMessage.SnapSelection = snap_selection; 4410 updateMessage.SnapSelection = snap_selection;
4410 updateMessage.SnapshotID = landData.SnapshotID; 4411 updateMessage.SnapshotID = landData.SnapshotID;
4411 updateMessage.Status = (ParcelStatus) landData.Status; 4412 updateMessage.Status = (ParcelStatus) landData.Status;
4412 updateMessage.TotalPrims = landData.OwnerPrims + landData.GroupPrims + landData.OtherPrims + 4413 updateMessage.UserLocation = landData.UserLocation;
4413 landData.SelectedPrims; 4414 updateMessage.UserLookAt = landData.UserLookAt;
4414 updateMessage.UserLocation = landData.UserLocation; 4415
4415 updateMessage.UserLookAt = landData.UserLookAt; 4416 updateMessage.MediaType = landData.MediaType;
4416 4417 updateMessage.MediaDesc = landData.MediaDescription;
4417 updateMessage.MediaType = landData.MediaType; 4418 updateMessage.MediaWidth = landData.MediaWidth;
4418 updateMessage.MediaDesc = landData.MediaDescription; 4419 updateMessage.MediaHeight = landData.MediaHeight;
4419 updateMessage.MediaWidth = landData.MediaWidth; 4420 updateMessage.MediaLoop = landData.MediaLoop;
4420 updateMessage.MediaHeight = landData.MediaHeight; 4421 updateMessage.ObscureMusic = landData.ObscureMusic;
4421 updateMessage.MediaLoop = landData.MediaLoop; 4422 updateMessage.ObscureMedia = landData.ObscureMedia;
4422 updateMessage.ObscureMusic = landData.ObscureMusic; 4423
4423 updateMessage.ObscureMedia = landData.ObscureMedia; 4424 IPrimCounts pc = lo.PrimCounts;
4425 updateMessage.OwnerPrims = pc.Owner;
4426 updateMessage.GroupPrims = pc.Group;
4427 updateMessage.OtherPrims = pc.Others;
4428 updateMessage.SelectedPrims = pc.Selected;
4429 updateMessage.TotalPrims = pc.Total;
4430 updateMessage.SimWideTotalPrims = pc.Simulator;
4424 4431
4425 try 4432 try
4426 { 4433 {
@@ -4428,13 +4435,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4428 if (eq != null) 4435 if (eq != null)
4429 { 4436 {
4430 eq.ParcelProperties(updateMessage, this.AgentId); 4437 eq.ParcelProperties(updateMessage, this.AgentId);
4431 } else { 4438 }
4432 m_log.Warn("No EQ Interface when sending parcel data."); 4439 else
4440 {
4441 m_log.Warn("[LLCLIENTVIEW]: No EQ Interface when sending parcel data.");
4433 } 4442 }
4434 } 4443 }
4435 catch (Exception ex) 4444 catch (Exception ex)
4436 { 4445 {
4437 m_log.Error("Unable to send parcel data via eventqueue - exception: " + ex.ToString()); 4446 m_log.Error("[LLCLIENTVIEW]: Unable to send parcel data via eventqueue - exception: " + ex.ToString());
4438 } 4447 }
4439 } 4448 }
4440 4449
diff --git a/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs b/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs
index a5fcb49..0babeb5 100644
--- a/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs
@@ -28,6 +28,7 @@
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using Nini.Config; 30using Nini.Config;
31using OpenSim.Framework;
31using OpenSim.Region.Framework.Interfaces; 32using OpenSim.Region.Framework.Interfaces;
32using OpenSim.Region.Framework.Scenes; 33using OpenSim.Region.Framework.Scenes;
33using OpenMetaverse; 34using OpenMetaverse;
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;
diff --git a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs
index 5151bf0..df12d69 100644
--- a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs
+++ b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs
@@ -914,7 +914,7 @@ namespace OpenSim.Region.Examples.SimpleModule
914 { 914 {
915 } 915 }
916 916
917 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags) 917 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, ILandObject lo, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags)
918 { 918 {
919 } 919 }
920 920
diff --git a/OpenSim/Region/Framework/Interfaces/IPrimCountModule.cs b/OpenSim/Region/Framework/Interfaces/IPrimCountModule.cs
index 65158e1..d63da2e 100644
--- a/OpenSim/Region/Framework/Interfaces/IPrimCountModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IPrimCountModule.cs
@@ -38,18 +38,4 @@ namespace OpenSim.Region.Framework.Interfaces
38 38
39 IPrimCounts GetPrimCounts(UUID parcelID); 39 IPrimCounts GetPrimCounts(UUID parcelID);
40 } 40 }
41 41} \ No newline at end of file
42 public interface IPrimCounts
43 {
44 int Owner { get; }
45 int Group { get; }
46 int Others { get; }
47 int Simulator { get; }
48 IUserPrimCounts Users { get; }
49 }
50
51 public interface IUserPrimCounts
52 {
53 int this[UUID agentID] { get; }
54 }
55}
diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
index e2574e7..627b58f 100644
--- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
+++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
@@ -1253,7 +1253,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
1253 1253
1254 } 1254 }
1255 1255
1256 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags) 1256 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, ILandObject lo, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags)
1257 { 1257 {
1258 1258
1259 } 1259 }
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/LOParcel.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/LOParcel.cs
index 8df020f..c898da6 100644
--- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/LOParcel.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/LOParcel.cs
@@ -25,6 +25,7 @@
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */ 26 */
27 27
28using OpenSim.Framework;
28using OpenSim.Region.Framework.Interfaces; 29using OpenSim.Region.Framework.Interfaces;
29using OpenSim.Region.Framework.Scenes; 30using OpenSim.Region.Framework.Scenes;
30 31
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
index 1ce3791..227450d 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
@@ -930,7 +930,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
930 { 930 {
931 } 931 }
932 932
933 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor,int parcelObjectCapacity, int simObjectCapacity, uint regionFlags) 933 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, ILandObject lo, float simObjectBonusFactor,int parcelObjectCapacity, int simObjectCapacity, uint regionFlags)
934 { 934 {
935 } 935 }
936 public void SendLandAccessListData(List<UUID> avatars, uint accessFlag, int localLandID) 936 public void SendLandAccessListData(List<UUID> avatars, uint accessFlag, int localLandID)
diff --git a/OpenSim/Services/GridService/HypergridLinker.cs b/OpenSim/Services/GridService/HypergridLinker.cs
index a4aa44d..b226971 100644
--- a/OpenSim/Services/GridService/HypergridLinker.cs
+++ b/OpenSim/Services/GridService/HypergridLinker.cs
@@ -65,6 +65,8 @@ namespace OpenSim.Services.GridService
65 protected UUID m_ScopeID = UUID.Zero; 65 protected UUID m_ScopeID = UUID.Zero;
66 protected bool m_Check4096 = true; 66 protected bool m_Check4096 = true;
67 protected string m_MapTileDirectory = string.Empty; 67 protected string m_MapTileDirectory = string.Empty;
68 protected string m_ThisGatekeeper = string.Empty;
69 protected Uri m_ThisGatekeeperURI = null;
68 70
69 // Hyperlink regions are hyperlinks on the map 71 // Hyperlink regions are hyperlinks on the map
70 public readonly Dictionary<UUID, GridRegion> m_HyperlinkRegions = new Dictionary<UUID, GridRegion>(); 72 public readonly Dictionary<UUID, GridRegion> m_HyperlinkRegions = new Dictionary<UUID, GridRegion>();
@@ -123,6 +125,16 @@ namespace OpenSim.Services.GridService
123 125
124 m_MapTileDirectory = gridConfig.GetString("MapTileDirectory", "maptiles"); 126 m_MapTileDirectory = gridConfig.GetString("MapTileDirectory", "maptiles");
125 127
128 m_ThisGatekeeper = gridConfig.GetString("Gatekeeper", string.Empty);
129 try
130 {
131 m_ThisGatekeeperURI = new Uri(m_ThisGatekeeper);
132 }
133 catch
134 {
135 m_log.WarnFormat("[HYPERGRID LINKER]: Malformed URL in [GridService], variable Gatekeeper = {0}", m_ThisGatekeeper);
136 }
137
126 m_GatekeeperConnector = new GatekeeperServiceConnector(m_AssetService); 138 m_GatekeeperConnector = new GatekeeperServiceConnector(m_AssetService);
127 139
128 m_log.Debug("[HYPERGRID LINKER]: Loaded all services..."); 140 m_log.Debug("[HYPERGRID LINKER]: Loaded all services...");
@@ -210,6 +222,8 @@ namespace OpenSim.Services.GridService
210 remoteRegionName, xloc / Constants.RegionSize, yloc / Constants.RegionSize); 222 remoteRegionName, xloc / Constants.RegionSize, yloc / Constants.RegionSize);
211 223
212 reason = string.Empty; 224 reason = string.Empty;
225 Uri uri = null;
226
213 regInfo = new GridRegion(); 227 regInfo = new GridRegion();
214 if ( externalPort > 0) 228 if ( externalPort > 0)
215 regInfo.HttpPort = externalPort; 229 regInfo.HttpPort = externalPort;
@@ -220,8 +234,17 @@ namespace OpenSim.Services.GridService
220 else 234 else
221 regInfo.ExternalHostName = "0.0.0.0"; 235 regInfo.ExternalHostName = "0.0.0.0";
222 if ( serverURI != null) 236 if ( serverURI != null)
237 {
223 regInfo.ServerURI = serverURI; 238 regInfo.ServerURI = serverURI;
224 239 try
240 {
241 uri = new Uri(serverURI);
242 regInfo.ExternalHostName = uri.Host;
243 regInfo.HttpPort = (uint)uri.Port;
244 }
245 catch {}
246 }
247
225 if ( remoteRegionName != string.Empty ) 248 if ( remoteRegionName != string.Empty )
226 regInfo.RegionName = remoteRegionName; 249 regInfo.RegionName = remoteRegionName;
227 250
@@ -230,6 +253,18 @@ namespace OpenSim.Services.GridService
230 regInfo.ScopeID = scopeID; 253 regInfo.ScopeID = scopeID;
231 regInfo.EstateOwner = ownerID; 254 regInfo.EstateOwner = ownerID;
232 255
256 // Make sure we're not hyperlinking to regions on this grid!
257 if (m_ThisGatekeeperURI != null)
258 {
259 if (regInfo.ExternalHostName == m_ThisGatekeeperURI.Host && regInfo.HttpPort == m_ThisGatekeeperURI.Port)
260 {
261 reason = "Cannot hyperlink to regions on the same grid";
262 return false;
263 }
264 }
265 else
266 m_log.WarnFormat("[HYPERGRID LINKER]: Please set this grid's Gatekeeper's address in [GridService]!");
267
233 // Check for free coordinates 268 // Check for free coordinates
234 GridRegion region = m_GridService.GetRegionByPosition(regInfo.ScopeID, regInfo.RegionLocX, regInfo.RegionLocY); 269 GridRegion region = m_GridService.GetRegionByPosition(regInfo.ScopeID, regInfo.RegionLocX, regInfo.RegionLocY);
235 if (region != null) 270 if (region != null)
diff --git a/OpenSim/Tests/Common/Mock/TestClient.cs b/OpenSim/Tests/Common/Mock/TestClient.cs
index 7b7d66e..d1b4feb 100644
--- a/OpenSim/Tests/Common/Mock/TestClient.cs
+++ b/OpenSim/Tests/Common/Mock/TestClient.cs
@@ -961,7 +961,7 @@ namespace OpenSim.Tests.Common.Mock
961 { 961 {
962 } 962 }
963 963
964 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags) 964 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, ILandObject lo, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags)
965 { 965 {
966 } 966 }
967 967