aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-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.cs45
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs37
-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.cs79
-rw-r--r--OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs24
-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/Tests/Common/Mock/TestClient.cs2
18 files changed, 179 insertions, 59 deletions
diff --git a/OpenSim/Client/MXP/ClientStack/MXPClientView.cs b/OpenSim/Client/MXP/ClientStack/MXPClientView.cs
index 1d93382..93c6c98 100644
--- a/OpenSim/Client/MXP/ClientStack/MXPClientView.cs
+++ b/OpenSim/Client/MXP/ClientStack/MXPClientView.cs
@@ -1252,7 +1252,7 @@ namespace OpenSim.Client.MXP.ClientStack
1252 // Need to translate to MXP somehow 1252 // Need to translate to MXP somehow
1253 } 1253 }
1254 1254
1255 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags) 1255 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, ILandObject lo, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags)
1256 { 1256 {
1257 // Need to translate to MXP somehow 1257 // Need to translate to MXP somehow
1258 } 1258 }
diff --git a/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs b/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs
index f2b58d3..fc27f01 100644
--- a/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs
+++ b/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs
@@ -799,7 +799,7 @@ namespace OpenSim.Client.VWoHTTP.ClientStack
799 throw new System.NotImplementedException(); 799 throw new System.NotImplementedException();
800 } 800 }
801 801
802 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags) 802 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, ILandObject lo, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags)
803 { 803 {
804 throw new System.NotImplementedException(); 804 throw new System.NotImplementedException();
805 } 805 }
diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs
index a6be157..5bf0b7b 100644
--- a/OpenSim/Framework/IClientAPI.cs
+++ b/OpenSim/Framework/IClientAPI.cs
@@ -1143,7 +1143,17 @@ namespace OpenSim.Framework
1143 void SendDetailedEstateData(UUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, 1143 void SendDetailedEstateData(UUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags,
1144 uint sunPosition, UUID covenant, string abuseEmail, UUID estateOwner); 1144 uint sunPosition, UUID covenant, string abuseEmail, UUID estateOwner);
1145 1145
1146 void SendLandProperties(int sequence_id, bool snap_selection, int request_result, LandData landData, 1146 /// <summary>
1147 /// Send land properties to the client.
1148 /// </summary>
1149 /// <param name="sequence_id"></param>
1150 /// <param name="snap_selection"></param>
1151 /// <param name="request_result"></param>
1152 /// <param name="lo"></param></param>
1153 /// <param name="parcelObjectCapacity">/param>
1154 /// <param name="simObjectCapacity"></param>
1155 /// <param name="regionFlags"></param>
1156 void SendLandProperties(int sequence_id, bool snap_selection, int request_result, ILandObject lo,
1147 float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, 1157 float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity,
1148 uint regionFlags); 1158 uint regionFlags);
1149 1159
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..7d362c5
--- /dev/null
+++ b/OpenSim/Framework/IPrimCounts.cs
@@ -0,0 +1,45 @@
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 int Owner { get; }
35 int Group { get; }
36 int Others { get; }
37 int Simulator { get; }
38 IUserPrimCounts Users { get; }
39 }
40
41 public interface IUserPrimCounts
42 {
43 int this[UUID agentID] { get; }
44 }
45} \ No newline at end of file
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index 2c6795f..0b6b04d 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -4272,8 +4272,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4272 OutPacket(packet, ThrottleOutPacketType.Task); 4272 OutPacket(packet, ThrottleOutPacketType.Task);
4273 } 4273 }
4274 4274
4275 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags) 4275 public void SendLandProperties(
4276 int sequence_id, bool snap_selection, int request_result, ILandObject lo,
4277 float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags)
4276 { 4278 {
4279 m_log.DebugFormat("[LLCLIENTVIEW]: Sending land properties for {0} to {1}", lo.LandData.GlobalID, Name);
4280
4281 LandData landData = lo.LandData;
4282
4277 ParcelPropertiesMessage updateMessage = new ParcelPropertiesMessage(); 4283 ParcelPropertiesMessage updateMessage = new ParcelPropertiesMessage();
4278 4284
4279 updateMessage.AABBMax = landData.AABBMax; 4285 updateMessage.AABBMax = landData.AABBMax;
@@ -4281,15 +4287,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4281 updateMessage.Area = landData.Area; 4287 updateMessage.Area = landData.Area;
4282 updateMessage.AuctionID = landData.AuctionID; 4288 updateMessage.AuctionID = landData.AuctionID;
4283 updateMessage.AuthBuyerID = landData.AuthBuyerID; 4289 updateMessage.AuthBuyerID = landData.AuthBuyerID;
4284
4285 updateMessage.Bitmap = landData.Bitmap; 4290 updateMessage.Bitmap = landData.Bitmap;
4286
4287 updateMessage.Desc = landData.Description; 4291 updateMessage.Desc = landData.Description;
4288 updateMessage.Category = landData.Category; 4292 updateMessage.Category = landData.Category;
4289 updateMessage.ClaimDate = Util.ToDateTime(landData.ClaimDate); 4293 updateMessage.ClaimDate = Util.ToDateTime(landData.ClaimDate);
4290 updateMessage.ClaimPrice = landData.ClaimPrice; 4294 updateMessage.ClaimPrice = landData.ClaimPrice;
4291 updateMessage.GroupID = landData.GroupID; 4295 updateMessage.GroupID = landData.GroupID;
4292 updateMessage.GroupPrims = landData.GroupPrims;
4293 updateMessage.IsGroupOwned = landData.IsGroupOwned; 4296 updateMessage.IsGroupOwned = landData.IsGroupOwned;
4294 updateMessage.LandingType = (LandingType) landData.LandingType; 4297 updateMessage.LandingType = (LandingType) landData.LandingType;
4295 updateMessage.LocalID = landData.LocalID; 4298 updateMessage.LocalID = landData.LocalID;
@@ -4310,9 +4313,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4310 updateMessage.Name = landData.Name; 4313 updateMessage.Name = landData.Name;
4311 updateMessage.OtherCleanTime = landData.OtherCleanTime; 4314 updateMessage.OtherCleanTime = landData.OtherCleanTime;
4312 updateMessage.OtherCount = 0; //TODO: Unimplemented 4315 updateMessage.OtherCount = 0; //TODO: Unimplemented
4313 updateMessage.OtherPrims = landData.OtherPrims; 4316 updateMessage.OwnerID = landData.OwnerID;
4314 updateMessage.OwnerID = landData.OwnerID;
4315 updateMessage.OwnerPrims = landData.OwnerPrims;
4316 updateMessage.ParcelFlags = (ParcelFlags) landData.Flags; 4317 updateMessage.ParcelFlags = (ParcelFlags) landData.Flags;
4317 updateMessage.ParcelPrimBonus = simObjectBonusFactor; 4318 updateMessage.ParcelPrimBonus = simObjectBonusFactor;
4318 updateMessage.PassHours = landData.PassHours; 4319 updateMessage.PassHours = landData.PassHours;
@@ -4327,10 +4328,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4327 4328
4328 updateMessage.RentPrice = 0; 4329 updateMessage.RentPrice = 0;
4329 updateMessage.RequestResult = (ParcelResult) request_result; 4330 updateMessage.RequestResult = (ParcelResult) request_result;
4330 updateMessage.SalePrice = landData.SalePrice; 4331 updateMessage.SalePrice = landData.SalePrice;
4331 updateMessage.SelectedPrims = landData.SelectedPrims;
4332 updateMessage.SelfCount = 0; //TODO: Unimplemented 4332 updateMessage.SelfCount = 0; //TODO: Unimplemented
4333 updateMessage.SequenceID = sequence_id; 4333 updateMessage.SequenceID = sequence_id;
4334
4334 if (landData.SimwideArea > 0) 4335 if (landData.SimwideArea > 0)
4335 { 4336 {
4336 int simulatorCapacity = (int)(((float)landData.SimwideArea / 65536.0f) * (float)m_scene.RegionInfo.ObjectCapacity * (float)m_scene.RegionInfo.RegionSettings.ObjectBonus); 4337 int simulatorCapacity = (int)(((float)landData.SimwideArea / 65536.0f) * (float)m_scene.RegionInfo.ObjectCapacity * (float)m_scene.RegionInfo.RegionSettings.ObjectBonus);
@@ -4340,12 +4341,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4340 { 4341 {
4341 updateMessage.SimWideMaxPrims = 0; 4342 updateMessage.SimWideMaxPrims = 0;
4342 } 4343 }
4343 updateMessage.SimWideTotalPrims = landData.SimwidePrims; 4344
4344 updateMessage.SnapSelection = snap_selection; 4345 updateMessage.SnapSelection = snap_selection;
4345 updateMessage.SnapshotID = landData.SnapshotID; 4346 updateMessage.SnapshotID = landData.SnapshotID;
4346 updateMessage.Status = (ParcelStatus) landData.Status; 4347 updateMessage.Status = (ParcelStatus) landData.Status;
4347 updateMessage.TotalPrims = landData.OwnerPrims + landData.GroupPrims + landData.OtherPrims +
4348 landData.SelectedPrims;
4349 updateMessage.UserLocation = landData.UserLocation; 4348 updateMessage.UserLocation = landData.UserLocation;
4350 updateMessage.UserLookAt = landData.UserLookAt; 4349 updateMessage.UserLookAt = landData.UserLookAt;
4351 4350
@@ -4356,6 +4355,18 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4356 updateMessage.MediaLoop = landData.MediaLoop; 4355 updateMessage.MediaLoop = landData.MediaLoop;
4357 updateMessage.ObscureMusic = landData.ObscureMusic; 4356 updateMessage.ObscureMusic = landData.ObscureMusic;
4358 updateMessage.ObscureMedia = landData.ObscureMedia; 4357 updateMessage.ObscureMedia = landData.ObscureMedia;
4358
4359 IPrimCounts pc = lo.PrimCounts;
4360 updateMessage.OwnerPrims = pc.Owner;
4361 updateMessage.GroupPrims = pc.Group;
4362 updateMessage.OtherPrims = pc.Others;
4363 updateMessage.SimWideTotalPrims = pc.Simulator;
4364
4365 // FIXME: Need to do selected prims once this is reimplemented.
4366 updateMessage.TotalPrims = pc.Owner + pc.Group + pc.Others;
4367
4368 // TODO: Need to transfer selected prims to new prim count structure.
4369 updateMessage.SelectedPrims = landData.SelectedPrims;
4359 4370
4360 try 4371 try
4361 { 4372 {
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 d0727d9..52e3718 100644
--- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
+++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
@@ -805,7 +805,7 @@ namespace OpenSim.Region.CoreModules.World.Land
805 ILandObject landUnderPrim = GetLandObject(position.X, position.Y); 805 ILandObject landUnderPrim = GetLandObject(position.X, position.Y);
806 if (landUnderPrim != null) 806 if (landUnderPrim != null)
807 { 807 {
808 landUnderPrim.AddPrimToCount(obj); 808 ((LandObject)landUnderPrim).AddPrimToCount(obj);
809 } 809 }
810 } 810 }
811 811
diff --git a/OpenSim/Region/CoreModules/World/Land/LandObject.cs b/OpenSim/Region/CoreModules/World/Land/LandObject.cs
index 749bb3d..e7bdb19 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 9fd347e..72115a8 100644
--- a/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs
+++ b/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs
@@ -51,8 +51,7 @@ namespace OpenSim.Region.CoreModules.World.Land
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 =
@@ -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;
@@ -214,10 +225,14 @@ namespace OpenSim.Region.CoreModules.World.Land
214 // NOTE: Call under Taint Lock 225 // NOTE: Call under Taint Lock
215 private void RemoveObject(SceneObjectGroup obj) 226 private void RemoveObject(SceneObjectGroup obj)
216 { 227 {
228 m_log.DebugFormat("[PRIM COUNT MODULE]: Removing object {0} {1} from prim count", obj.Name, obj.UUID);
217 } 229 }
218 230
219 public IPrimCounts GetPrimCounts(UUID parcelID) 231 public IPrimCounts GetPrimCounts(UUID parcelID)
220 { 232 {
233 m_log.DebugFormat(
234 "[PRIM COUNT MODULE]: GetPrimCounts for parcel {0} in {1}", parcelID, m_Scene.RegionInfo.RegionName);
235
221 PrimCounts primCounts; 236 PrimCounts primCounts;
222 237
223 lock (m_PrimCounts) 238 lock (m_PrimCounts)
@@ -239,7 +254,7 @@ namespace OpenSim.Region.CoreModules.World.Land
239 /// <returns></returns> 254 /// <returns></returns>
240 public int GetOwnerCount(UUID parcelID) 255 public int GetOwnerCount(UUID parcelID)
241 { 256 {
242// m_log.DebugFormat("[PRIM COUNT MODULE]: GetOwnerCount for {0}", parcelID); 257 int count = 0;
243 258
244 lock (m_TaintLock) 259 lock (m_TaintLock)
245 { 260 {
@@ -248,9 +263,14 @@ namespace OpenSim.Region.CoreModules.World.Land
248 263
249 ParcelCounts counts; 264 ParcelCounts counts;
250 if (m_ParcelCounts.TryGetValue(parcelID, out counts)) 265 if (m_ParcelCounts.TryGetValue(parcelID, out counts))
251 return counts.Owner; 266 count = counts.Owner;
252 } 267 }
253 return 0; 268
269 m_log.DebugFormat(
270 "[PRIM COUNT MODULE]: GetOwnerCount for parcel {0} in {1} returning {2}",
271 parcelID, m_Scene.RegionInfo.RegionName, count);
272
273 return count;
254 } 274 }
255 275
256 /// <summary> 276 /// <summary>
@@ -260,6 +280,8 @@ namespace OpenSim.Region.CoreModules.World.Land
260 /// <returns></returns> 280 /// <returns></returns>
261 public int GetGroupCount(UUID parcelID) 281 public int GetGroupCount(UUID parcelID)
262 { 282 {
283 int count = 0;
284
263 lock (m_TaintLock) 285 lock (m_TaintLock)
264 { 286 {
265 if (m_Tainted) 287 if (m_Tainted)
@@ -267,9 +289,14 @@ namespace OpenSim.Region.CoreModules.World.Land
267 289
268 ParcelCounts counts; 290 ParcelCounts counts;
269 if (m_ParcelCounts.TryGetValue(parcelID, out counts)) 291 if (m_ParcelCounts.TryGetValue(parcelID, out counts))
270 return counts.Group; 292 count = counts.Group;
271 } 293 }
272 return 0; 294
295 m_log.DebugFormat(
296 "[PRIM COUNT MODULE]: GetGroupCount for parcel {0} in {1} returning {2}",
297 parcelID, m_Scene.RegionInfo.RegionName, count);
298
299 return count;
273 } 300 }
274 301
275 /// <summary> 302 /// <summary>
@@ -279,6 +306,8 @@ namespace OpenSim.Region.CoreModules.World.Land
279 /// <returns></returns> 306 /// <returns></returns>
280 public int GetOthersCount(UUID parcelID) 307 public int GetOthersCount(UUID parcelID)
281 { 308 {
309 int count = 0;
310
282 lock (m_TaintLock) 311 lock (m_TaintLock)
283 { 312 {
284 if (m_Tainted) 313 if (m_Tainted)
@@ -286,9 +315,14 @@ namespace OpenSim.Region.CoreModules.World.Land
286 315
287 ParcelCounts counts; 316 ParcelCounts counts;
288 if (m_ParcelCounts.TryGetValue(parcelID, out counts)) 317 if (m_ParcelCounts.TryGetValue(parcelID, out counts))
289 return counts.Others; 318 count = counts.Others;
290 } 319 }
291 return 0; 320
321 m_log.DebugFormat(
322 "[PRIM COUNT MODULE]: GetOthersCount for parcel {0} in {1} returning {2}",
323 parcelID, m_Scene.RegionInfo.RegionName, count);
324
325 return count;
292 } 326 }
293 327
294 /// <summary> 328 /// <summary>
@@ -298,6 +332,8 @@ namespace OpenSim.Region.CoreModules.World.Land
298 /// <returns></returns> 332 /// <returns></returns>
299 public int GetSimulatorCount(UUID parcelID) 333 public int GetSimulatorCount(UUID parcelID)
300 { 334 {
335 int count = 0;
336
301 lock (m_TaintLock) 337 lock (m_TaintLock)
302 { 338 {
303 if (m_Tainted) 339 if (m_Tainted)
@@ -308,10 +344,15 @@ namespace OpenSim.Region.CoreModules.World.Land
308 { 344 {
309 int val; 345 int val;
310 if (m_SimwideCounts.TryGetValue(owner, out val)) 346 if (m_SimwideCounts.TryGetValue(owner, out val))
311 return val; 347 count = val;
312 } 348 }
313 } 349 }
314 return 0; 350
351 m_log.DebugFormat(
352 "[PRIM COUNT MODULE]: GetOthersCount for parcel {0} in {1} returning {2}",
353 parcelID, m_Scene.RegionInfo.RegionName, count);
354
355 return count;
315 } 356 }
316 357
317 /// <summary> 358 /// <summary>
@@ -322,6 +363,8 @@ namespace OpenSim.Region.CoreModules.World.Land
322 /// <returns></returns> 363 /// <returns></returns>
323 public int GetUserCount(UUID parcelID, UUID userID) 364 public int GetUserCount(UUID parcelID, UUID userID)
324 { 365 {
366 int count = 0;
367
325 lock (m_TaintLock) 368 lock (m_TaintLock)
326 { 369 {
327 if (m_Tainted) 370 if (m_Tainted)
@@ -332,16 +375,21 @@ namespace OpenSim.Region.CoreModules.World.Land
332 { 375 {
333 int val; 376 int val;
334 if (counts.Users.TryGetValue(userID, out val)) 377 if (counts.Users.TryGetValue(userID, out val))
335 return val; 378 count = val;
336 } 379 }
337 } 380 }
338 return 0; 381
382 m_log.DebugFormat(
383 "[PRIM COUNT MODULE]: GetUserCount for user {0} in parcel {1} in region {2} returning {3}",
384 userID, parcelID, m_Scene.RegionInfo.RegionName, count);
385
386 return count;
339 } 387 }
340 388
341 // NOTE: This method MUST be called while holding the taint lock! 389 // NOTE: This method MUST be called while holding the taint lock!
342 private void Recount() 390 private void Recount()
343 { 391 {
344// m_log.DebugFormat("[PRIM COUNT MODULE]: Recounting prims on {0}", m_Scene.RegionInfo.RegionName); 392 m_log.DebugFormat("[PRIM COUNT MODULE]: Recounting prims on {0}", m_Scene.RegionInfo.RegionName);
345 393
346 m_OwnerMap.Clear(); 394 m_OwnerMap.Clear();
347 m_SimwideCounts.Clear(); 395 m_SimwideCounts.Clear();
@@ -367,6 +415,7 @@ namespace OpenSim.Region.CoreModules.World.Land
367 if (!m_OwnerMap.ContainsKey(k)) 415 if (!m_OwnerMap.ContainsKey(k))
368 m_PrimCounts.Remove(k); 416 m_PrimCounts.Remove(k);
369 } 417 }
418
370 m_Tainted = false; 419 m_Tainted = false;
371 } 420 }
372 } 421 }
diff --git a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs
index c9d393f..80b2859 100644
--- a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs
+++ b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs
@@ -126,6 +126,28 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
126 Assert.That(pc.Users[m_userId], Is.EqualTo(1)); 126 Assert.That(pc.Users[m_userId], Is.EqualTo(1));
127 Assert.That(pc.Users[m_dummyUserId], Is.EqualTo(0)); 127 Assert.That(pc.Users[m_dummyUserId], Is.EqualTo(0));
128 Assert.That(pc.Simulator, Is.EqualTo(1)); 128 Assert.That(pc.Simulator, Is.EqualTo(1));
129 } 129 }
130
131 /// <summary>
132 /// Test the count is correct after is has been tainted.
133 /// </summary>
134 [Test]
135 public void TestTaint()
136 {
137 TestHelper.InMethod();
138 IPrimCounts pc = m_lo.PrimCounts;
139
140 SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_userId, 0x01);
141 m_scene.AddNewSceneObject(sog, false);
142
143 m_pcm.TaintPrimCount();
144
145 Assert.That(pc.Owner, Is.EqualTo(3));
146 Assert.That(pc.Group, Is.EqualTo(0));
147 Assert.That(pc.Others, Is.EqualTo(0));
148 Assert.That(pc.Users[m_userId], Is.EqualTo(3));
149 Assert.That(pc.Users[m_dummyUserId], Is.EqualTo(0));
150 Assert.That(pc.Simulator, Is.EqualTo(3));
151 }
130 } 152 }
131} \ No newline at end of file 153} \ No newline at end of file
diff --git a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs
index 41d6628..d939329 100644
--- a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs
+++ b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs
@@ -909,7 +909,7 @@ namespace OpenSim.Region.Examples.SimpleModule
909 { 909 {
910 } 910 }
911 911
912 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags) 912 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, ILandObject lo, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags)
913 { 913 {
914 } 914 }
915 915
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 49382f0..821cd4b 100644
--- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
+++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
@@ -1247,7 +1247,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
1247 1247
1248 } 1248 }
1249 1249
1250 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags) 1250 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, ILandObject lo, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags)
1251 { 1251 {
1252 1252
1253 } 1253 }
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 5d44aa1..96760a2 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
@@ -925,7 +925,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
925 { 925 {
926 } 926 }
927 927
928 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor,int parcelObjectCapacity, int simObjectCapacity, uint regionFlags) 928 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, ILandObject lo, float simObjectBonusFactor,int parcelObjectCapacity, int simObjectCapacity, uint regionFlags)
929 { 929 {
930 } 930 }
931 public void SendLandAccessListData(List<UUID> avatars, uint accessFlag, int localLandID) 931 public void SendLandAccessListData(List<UUID> avatars, uint accessFlag, int localLandID)
diff --git a/OpenSim/Tests/Common/Mock/TestClient.cs b/OpenSim/Tests/Common/Mock/TestClient.cs
index ebe0a72..d1dc17f 100644
--- a/OpenSim/Tests/Common/Mock/TestClient.cs
+++ b/OpenSim/Tests/Common/Mock/TestClient.cs
@@ -957,7 +957,7 @@ namespace OpenSim.Tests.Common.Mock
957 { 957 {
958 } 958 }
959 959
960 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags) 960 public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, ILandObject lo, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags)
961 { 961 {
962 } 962 }
963 963