diff options
25 files changed, 405 insertions, 84 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 | ||
28 | using System.Collections.Generic; | 28 | using System.Collections.Generic; |
29 | using OpenMetaverse; | 29 | using OpenMetaverse; |
30 | using OpenSim.Framework; | ||
31 | using OpenSim.Region.Framework.Scenes; | ||
32 | 30 | ||
33 | namespace OpenSim.Region.Framework.Interfaces | 31 | namespace 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 | |||
28 | using OpenMetaverse; | ||
29 | |||
30 | namespace 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 @@ | |||
28 | using System; | 28 | using System; |
29 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
30 | using Nini.Config; | 30 | using Nini.Config; |
31 | using OpenSim.Framework; | ||
31 | using OpenSim.Region.Framework.Interfaces; | 32 | using OpenSim.Region.Framework.Interfaces; |
32 | using OpenSim.Region.Framework.Scenes; | 33 | using OpenSim.Region.Framework.Scenes; |
33 | using OpenMetaverse; | 34 | using 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 | ||
28 | using OpenSim.Framework; | ||
28 | using OpenSim.Region.Framework.Interfaces; | 29 | using OpenSim.Region.Framework.Interfaces; |
29 | using OpenSim.Region.Framework.Scenes; | 30 | using 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 | ||
@@ -44,7 +44,7 @@ for more information. | |||
44 | To run OpenSim, from the unpacked distribution type: | 44 | To run OpenSim, from the unpacked distribution type: |
45 | 45 | ||
46 | * cd bin | 46 | * cd bin |
47 | * LD_LIBRARY_PATH=. mono OpenSim.exe | 47 | * mono OpenSim.exe |
48 | 48 | ||
49 | Now see the "Configuring OpenSim" section | 49 | Now see the "Configuring OpenSim" section |
50 | 50 | ||
diff --git a/bin/Mono.Data.Sqlite.dll.config b/bin/Mono.Data.Sqlite.dll.config index 0c5e941..6a95476 100644 --- a/bin/Mono.Data.Sqlite.dll.config +++ b/bin/Mono.Data.Sqlite.dll.config | |||
@@ -1,4 +1,4 @@ | |||
1 | <configuration> | 1 | <configuration> |
2 | <dllmap os="!windows,osx" cpu="x86-64,ia64" wordsize="64" dll="sqlite3" target="libsqlite3_64.so" /> | 2 | <dllmap os="!windows,osx" cpu="x86-64,ia64" wordsize="64" dll="sqlite3" target="./libsqlite3_64.so" /> |
3 | <dllmap os="!windows,osx" cpu="x86" wordsize="32" dll="sqlite3" target="libsqlite3_32.so" /> | 3 | <dllmap os="!windows,osx" cpu="x86" wordsize="32" dll="sqlite3" target="./libsqlite3_32.so" /> |
4 | </configuration> | 4 | </configuration> |
diff --git a/bin/config-include/GridCommon.ini.example b/bin/config-include/GridCommon.ini.example index 4dc0e53..a6fe4b1 100644 --- a/bin/config-include/GridCommon.ini.example +++ b/bin/config-include/GridCommon.ini.example | |||
@@ -45,6 +45,12 @@ | |||
45 | ;; Directory for map tile images of linked regions | 45 | ;; Directory for map tile images of linked regions |
46 | ; MapTileDirectory = "./maptiles" | 46 | ; MapTileDirectory = "./maptiles" |
47 | 47 | ||
48 | ; === HG ONLY === | ||
49 | ;; change this to the address of your Gatekeeper service | ||
50 | ;; (usually bundled with the rest of the services in one | ||
51 | ;; Robust server in port 8002, but not always) | ||
52 | Gatekeeper="http://mygridserver.com:8002" | ||
53 | |||
48 | [AvatarService] | 54 | [AvatarService] |
49 | ; | 55 | ; |
50 | ; change this to your grid-wide grid server | 56 | ; change this to your grid-wide grid server |
diff --git a/bin/config-include/StandaloneCommon.ini.example b/bin/config-include/StandaloneCommon.ini.example index 816e9a6..995a33e 100644 --- a/bin/config-include/StandaloneCommon.ini.example +++ b/bin/config-include/StandaloneCommon.ini.example | |||
@@ -78,6 +78,11 @@ | |||
78 | ;; For example: | 78 | ;; For example: |
79 | Region_Welcome_Area = "DefaultRegion, FallbackRegion" | 79 | Region_Welcome_Area = "DefaultRegion, FallbackRegion" |
80 | 80 | ||
81 | ; === HG ONLY === | ||
82 | ;; change this to the address of your simulator | ||
83 | Gatekeeper="http://127.0.0.1:9000" | ||
84 | |||
85 | |||
81 | [LibraryModule] | 86 | [LibraryModule] |
82 | ; Set this if you want to change the name of the OpenSim Library | 87 | ; Set this if you want to change the name of the OpenSim Library |
83 | ;LibraryName = "My World's Library" | 88 | ;LibraryName = "My World's Library" |