Merge branch 'master' into careminster-presence-refactor

This commit is contained in:
Melanie
2011-04-06 09:22:55 +01:00
25 changed files with 514 additions and 279 deletions

View File

@@ -202,12 +202,13 @@ namespace OpenSim.Region.CoreModules.World.Estate
}
Scene.RegionInfo.RegionSettings.Save();
TriggerRegionInfoChange();
sendRegionHandshakeToAll();
sendRegionInfoPacketToAll();
}
private void handleCommitEstateTerrainTextureRequest(IClientAPI remoteClient)
{
sendRegionHandshakeToAll();
// sendRegionHandshakeToAll();
}
public void setRegionTerrainSettings(float WaterHeight,
@@ -276,8 +277,25 @@ namespace OpenSim.Region.CoreModules.World.Estate
{
if (Scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || Scene.Permissions.BypassPermissions())
{
if ((estateAccessType & 1) != 0) // All estates
{
List<int> estateIDs = Scene.EstateDataService.GetEstatesByOwner(Scene.RegionInfo.EstateSettings.EstateOwner);
EstateSettings estateSettings;
foreach (int estateID in estateIDs)
{
if (estateID != Scene.RegionInfo.EstateSettings.EstateID)
{
estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
estateSettings.AddEstateUser(user);
estateSettings.Save();
}
}
}
Scene.RegionInfo.EstateSettings.AddEstateUser(user);
Scene.RegionInfo.EstateSettings.Save();
TriggerEstateInfoChange();
remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AccessOptions, Scene.RegionInfo.EstateSettings.EstateAccess, Scene.RegionInfo.EstateSettings.EstateID);
}
@@ -291,10 +309,26 @@ namespace OpenSim.Region.CoreModules.World.Estate
{
if (Scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || Scene.Permissions.BypassPermissions())
{
if ((estateAccessType & 1) != 0) // All estates
{
List<int> estateIDs = Scene.EstateDataService.GetEstatesByOwner(Scene.RegionInfo.EstateSettings.EstateOwner);
EstateSettings estateSettings;
foreach (int estateID in estateIDs)
{
if (estateID != Scene.RegionInfo.EstateSettings.EstateID)
{
estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
estateSettings.RemoveEstateUser(user);
estateSettings.Save();
}
}
}
Scene.RegionInfo.EstateSettings.RemoveEstateUser(user);
Scene.RegionInfo.EstateSettings.Save();
TriggerEstateInfoChange();
TriggerEstateInfoChange();
remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AccessOptions, Scene.RegionInfo.EstateSettings.EstateAccess, Scene.RegionInfo.EstateSettings.EstateID);
}
else
@@ -306,8 +340,25 @@ namespace OpenSim.Region.CoreModules.World.Estate
{
if (Scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || Scene.Permissions.BypassPermissions())
{
if ((estateAccessType & 1) != 0) // All estates
{
List<int> estateIDs = Scene.EstateDataService.GetEstatesByOwner(Scene.RegionInfo.EstateSettings.EstateOwner);
EstateSettings estateSettings;
foreach (int estateID in estateIDs)
{
if (estateID != Scene.RegionInfo.EstateSettings.EstateID)
{
estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
estateSettings.AddEstateGroup(user);
estateSettings.Save();
}
}
}
Scene.RegionInfo.EstateSettings.AddEstateGroup(user);
Scene.RegionInfo.EstateSettings.Save();
TriggerEstateInfoChange();
remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AllowedGroups, Scene.RegionInfo.EstateSettings.EstateGroups, Scene.RegionInfo.EstateSettings.EstateID);
}
@@ -320,10 +371,26 @@ namespace OpenSim.Region.CoreModules.World.Estate
{
if (Scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || Scene.Permissions.BypassPermissions())
{
if ((estateAccessType & 1) != 0) // All estates
{
List<int> estateIDs = Scene.EstateDataService.GetEstatesByOwner(Scene.RegionInfo.EstateSettings.EstateOwner);
EstateSettings estateSettings;
foreach (int estateID in estateIDs)
{
if (estateID != Scene.RegionInfo.EstateSettings.EstateID)
{
estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
estateSettings.RemoveEstateGroup(user);
estateSettings.Save();
}
}
}
Scene.RegionInfo.EstateSettings.RemoveEstateGroup(user);
Scene.RegionInfo.EstateSettings.Save();
TriggerEstateInfoChange();
TriggerEstateInfoChange();
remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AllowedGroups, Scene.RegionInfo.EstateSettings.EstateGroups, Scene.RegionInfo.EstateSettings.EstateID);
}
else
@@ -351,6 +418,29 @@ namespace OpenSim.Region.CoreModules.World.Estate
if (!alreadyInList)
{
if ((estateAccessType & 1) != 0) // All estates
{
List<int> estateIDs = Scene.EstateDataService.GetEstatesByOwner(Scene.RegionInfo.EstateSettings.EstateOwner);
EstateSettings estateSettings;
foreach (int estateID in estateIDs)
{
if (estateID != Scene.RegionInfo.EstateSettings.EstateID)
{
EstateBan bitem = new EstateBan();
bitem.BannedUserID = user;
bitem.EstateID = (uint)estateID;
bitem.BannedHostAddress = "0.0.0.0";
bitem.BannedHostIPMask = "0.0.0.0";
estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
estateSettings.AddBan(bitem);
estateSettings.Save();
}
}
}
EstateBan item = new EstateBan();
item.BannedUserID = user;
@@ -360,6 +450,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
Scene.RegionInfo.EstateSettings.AddBan(item);
Scene.RegionInfo.EstateSettings.Save();
TriggerEstateInfoChange();
ScenePresence s = Scene.GetScenePresence(user);
@@ -409,8 +500,25 @@ namespace OpenSim.Region.CoreModules.World.Estate
if (alreadyInList && listitem != null)
{
if ((estateAccessType & 1) != 0) // All estates
{
List<int> estateIDs = Scene.EstateDataService.GetEstatesByOwner(Scene.RegionInfo.EstateSettings.EstateOwner);
EstateSettings estateSettings;
foreach (int estateID in estateIDs)
{
if (estateID != Scene.RegionInfo.EstateSettings.EstateID)
{
estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
estateSettings.RemoveBan(user);
estateSettings.Save();
}
}
}
Scene.RegionInfo.EstateSettings.RemoveBan(listitem.BannedUserID);
Scene.RegionInfo.EstateSettings.Save();
TriggerEstateInfoChange();
}
else
@@ -430,8 +538,25 @@ namespace OpenSim.Region.CoreModules.World.Estate
{
if (Scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || Scene.Permissions.BypassPermissions())
{
if ((estateAccessType & 1) != 0) // All estates
{
List<int> estateIDs = Scene.EstateDataService.GetEstatesByOwner(Scene.RegionInfo.EstateSettings.EstateOwner);
EstateSettings estateSettings;
foreach (int estateID in estateIDs)
{
if (estateID != Scene.RegionInfo.EstateSettings.EstateID)
{
estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
estateSettings.AddEstateManager(user);
estateSettings.Save();
}
}
}
Scene.RegionInfo.EstateSettings.AddEstateManager(user);
Scene.RegionInfo.EstateSettings.Save();
TriggerEstateInfoChange();
remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.EstateManagers, Scene.RegionInfo.EstateSettings.EstateManagers, Scene.RegionInfo.EstateSettings.EstateID);
}
@@ -444,10 +569,26 @@ namespace OpenSim.Region.CoreModules.World.Estate
{
if (Scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || Scene.Permissions.BypassPermissions())
{
if ((estateAccessType & 1) != 0) // All estates
{
List<int> estateIDs = Scene.EstateDataService.GetEstatesByOwner(Scene.RegionInfo.EstateSettings.EstateOwner);
EstateSettings estateSettings;
foreach (int estateID in estateIDs)
{
if (estateID != Scene.RegionInfo.EstateSettings.EstateID)
{
estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
estateSettings.RemoveEstateManager(user);
estateSettings.Save();
}
}
}
Scene.RegionInfo.EstateSettings.RemoveEstateManager(user);
Scene.RegionInfo.EstateSettings.Save();
TriggerEstateInfoChange();
TriggerEstateInfoChange();
remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.EstateManagers, Scene.RegionInfo.EstateSettings.EstateManagers, Scene.RegionInfo.EstateSettings.EstateID);
}
else

View File

@@ -133,16 +133,6 @@ namespace OpenSim.Region.CoreModules.World.Land
return new List<ILandObject>();
}
public bool IsLandPrimCountTainted()
{
if (m_landManagementModule != null)
{
return m_landManagementModule.IsLandPrimCountTainted();
}
return false;
}
public bool IsForcefulBansAllowed()
{
if (m_landManagementModule != null)

View File

@@ -62,8 +62,7 @@ namespace OpenSim.Region.CoreModules.World.Land
public class LandManagementModule : INonSharedRegionModule
{
private static readonly ILog m_log =
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private static readonly string remoteParcelRequestPath = "0009/";
@@ -89,7 +88,6 @@ namespace OpenSim.Region.CoreModules.World.Land
/// </value>
private readonly Dictionary<int, ILandObject> m_landList = new Dictionary<int, ILandObject>();
private bool m_landPrimCountTainted;
private int m_lastLandLocalID = LandChannel.START_LAND_LOCAL_ID - 1;
private bool m_allowedForcefulBans = true;
@@ -128,18 +126,18 @@ namespace OpenSim.Region.CoreModules.World.Land
m_scene.EventManager.OnParcelPrimCountAdd += EventManagerOnParcelPrimCountAdd;
m_scene.EventManager.OnParcelPrimCountUpdate += EventManagerOnParcelPrimCountUpdate;
m_scene.EventManager.OnObjectBeingRemovedFromScene += EventManagerOnObjectBeingRemovedFromScene;
m_scene.EventManager.OnRequestParcelPrimCountUpdate += EventManagerOnRequestParcelPrimCountUpdate;
m_scene.EventManager.OnAvatarEnteringNewParcel += EventManagerOnAvatarEnteringNewParcel;
m_scene.EventManager.OnClientMovement += EventManagerOnClientMovement;
m_scene.EventManager.OnValidateLandBuy += EventManagerOnValidateLandBuy;
m_scene.EventManager.OnLandBuy += EventManagerOnLandBuy;
m_scene.EventManager.OnNewClient += EventManagerOnNewClient;
m_scene.EventManager.OnSignificantClientMovement += EventManagerOnSignificantClientMovement;
m_scene.EventManager.OnObjectBeingRemovedFromScene += EventManagerOnObjectBeingRemovedFromScene;
m_scene.EventManager.OnNoticeNoLandDataFromStorage += EventManagerOnNoLandDataFromStorage;
m_scene.EventManager.OnIncomingLandDataFromStorage += EventManagerOnIncomingLandDataFromStorage;
m_scene.EventManager.OnSetAllowForcefulBan += EventManagerOnSetAllowedForcefulBan;
m_scene.EventManager.OnRequestParcelPrimCountUpdate += EventManagerOnRequestParcelPrimCountUpdate;
m_scene.EventManager.OnParcelPrimCountTainted += EventManagerOnParcelPrimCountTainted;
m_scene.EventManager.OnSetAllowForcefulBan += EventManagerOnSetAllowedForcefulBan;
m_scene.EventManager.OnRegisterCaps += EventManagerOnRegisterCaps;
m_scene.EventManager.OnPluginConsole += EventManagerOnPluginConsole;
@@ -277,8 +275,8 @@ namespace OpenSim.Region.CoreModules.World.Land
/// <returns>The parcel created.</returns>
protected ILandObject CreateDefaultParcel()
{
// m_log.DebugFormat(
// "[LAND MANAGEMENT MODULE]: Creating default parcel for region {0}", m_scene.RegionInfo.RegionName);
m_log.DebugFormat(
"[LAND MANAGEMENT MODULE]: Creating default parcel for region {0}", m_scene.RegionInfo.RegionName);
ILandObject fullSimParcel = new LandObject(UUID.Zero, false, m_scene);
fullSimParcel.SetLandBitmap(fullSimParcel.GetSquareLandBitmap(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize));
@@ -695,34 +693,24 @@ namespace OpenSim.Region.CoreModules.World.Land
#region Parcel Modification
public void ResetAllLandPrimCounts()
public void ResetOverMeRecords()
{
lock (m_landList)
{
foreach (LandObject p in m_landList.Values)
{
p.ResetLandPrimCounts();
p.ResetOverMeRecord();
}
}
}
public void EventManagerOnParcelPrimCountTainted()
{
m_landPrimCountTainted = true;
}
public bool IsLandPrimCountTainted()
{
return m_landPrimCountTainted;
}
public void EventManagerOnParcelPrimCountAdd(SceneObjectGroup obj)
{
Vector3 position = obj.AbsolutePosition;
ILandObject landUnderPrim = GetLandObject(position.X, position.Y);
if (landUnderPrim != null)
{
((LandObject)landUnderPrim).AddPrimToCount(obj);
((LandObject)landUnderPrim).AddPrimOverMe(obj);
}
}
@@ -732,7 +720,7 @@ namespace OpenSim.Region.CoreModules.World.Land
{
foreach (LandObject p in m_landList.Values)
{
p.RemovePrimFromCount(obj);
p.RemovePrimFromOverMe(obj);
}
}
}
@@ -765,8 +753,7 @@ namespace OpenSim.Region.CoreModules.World.Land
foreach (LandObject p in landOwnersAndParcels[owner])
{
simArea += p.LandData.Area;
simPrims += p.LandData.OwnerPrims + p.LandData.OtherPrims + p.LandData.GroupPrims +
p.LandData.SelectedPrims;
simPrims += p.PrimCounts.Total;
}
foreach (LandObject p in landOwnersAndParcels[owner])
@@ -783,7 +770,7 @@ namespace OpenSim.Region.CoreModules.World.Land
// "[LAND MANAGEMENT MODULE]: Triggered EventManagerOnParcelPrimCountUpdate() for {0}",
// m_scene.RegionInfo.RegionName);
ResetAllLandPrimCounts();
ResetOverMeRecords();
EntityBase[] entities = m_scene.Entities.GetEntities();
foreach (EntityBase obj in entities)
{
@@ -796,15 +783,13 @@ namespace OpenSim.Region.CoreModules.World.Land
}
}
FinalizeLandPrimCountUpdate();
m_landPrimCountTainted = false;
}
public void EventManagerOnRequestParcelPrimCountUpdate()
{
ResetAllLandPrimCounts();
ResetOverMeRecords();
m_scene.EventManager.TriggerParcelPrimCountUpdate();
FinalizeLandPrimCountUpdate();
m_landPrimCountTainted = false;
}
/// <summary>
@@ -868,8 +853,6 @@ namespace OpenSim.Region.CoreModules.World.Land
m_landList[startLandObjectIndex].ForceUpdateLandInfo();
}
EventManagerOnParcelPrimCountTainted();
//Now add the new land object
ILandObject result = AddLandObject(newLand);
UpdateLandObject(startLandObject.LandData.LocalID, startLandObject.LandData);
@@ -936,7 +919,6 @@ namespace OpenSim.Region.CoreModules.World.Land
performFinalLandJoin(masterLandObject, slaveLandObject);
}
}
EventManagerOnParcelPrimCountTainted();
masterLandObject.SendLandUpdateToAvatarsOverMe();
}
@@ -1130,6 +1112,7 @@ namespace OpenSim.Region.CoreModules.World.Land
if (land != null)
{
m_scene.EventManager.TriggerParcelPrimCountUpdate();
m_landList[local_id].SendLandObjectOwners(remote_client);
}
else
@@ -1375,7 +1358,8 @@ namespace OpenSim.Region.CoreModules.World.Land
private string ProcessPropertiesUpdate(string request, string path, string param, UUID agentID, Caps caps)
{
IClientAPI client;
if (! m_scene.TryGetClient(agentID, out client)) {
if (!m_scene.TryGetClient(agentID, out client))
{
m_log.WarnFormat("[LAND MANAGEMENT MODULE]: Unable to retrieve IClientAPI for {0}", agentID);
return LLSDHelpers.SerialiseLLSDReply(new LLSDEmpty());
}

View File

@@ -64,8 +64,6 @@ namespace OpenSim.Region.CoreModules.World.Land
#endregion
#region ILandObject Members
public int GetPrimsFree()
{
m_scene.EventManager.TriggerParcelPrimCountUpdate();
@@ -213,6 +211,7 @@ namespace OpenSim.Region.CoreModules.World.Land
return simMax;
}
}
#endregion
#region Packet Request Handling
@@ -944,9 +943,12 @@ namespace OpenSim.Region.CoreModules.World.Land
lock (primsOverMe)
{
// m_log.DebugFormat(
// "[LAND OBJECT]: Request for SendLandObjectOwners() from {0} with {1} known prims on region",
// remote_client.Name, primsOverMe.Count);
try
{
foreach (SceneObjectGroup obj in primsOverMe)
{
try
@@ -958,7 +960,7 @@ namespace OpenSim.Region.CoreModules.World.Land
}
catch (NullReferenceException)
{
m_log.Info("[LAND]: " + "Got Null Reference when searching land owners from the parcel panel");
m_log.Error("[LAND]: " + "Got Null Reference when searching land owners from the parcel panel");
}
try
{
@@ -985,6 +987,7 @@ namespace OpenSim.Region.CoreModules.World.Land
public Dictionary<UUID, int> GetLandObjectOwners()
{
Dictionary<UUID, int> ownersAndCount = new Dictionary<UUID, int>();
lock (primsOverMe)
{
try
@@ -1021,8 +1024,10 @@ namespace OpenSim.Region.CoreModules.World.Land
public void ReturnLandObjects(uint type, UUID[] owners, UUID[] tasks, IClientAPI remote_client)
{
Dictionary<UUID,List<SceneObjectGroup>> returns =
new Dictionary<UUID,List<SceneObjectGroup>>();
// m_log.DebugFormat(
// "[LAND OBJECT]: Request to return objects in {0} from {1}", LandData.Name, remote_client.Name);
Dictionary<UUID,List<SceneObjectGroup>> returns = new Dictionary<UUID,List<SceneObjectGroup>>();
lock (primsOverMe)
{
@@ -1095,82 +1100,28 @@ namespace OpenSim.Region.CoreModules.World.Land
#region Object Adding/Removing from Parcel
public void ResetLandPrimCounts()
public void ResetOverMeRecord()
{
LandData.GroupPrims = 0;
LandData.OwnerPrims = 0;
LandData.OtherPrims = 0;
LandData.SelectedPrims = 0;
lock (primsOverMe)
primsOverMe.Clear();
}
public void AddPrimToCount(SceneObjectGroup obj)
public void AddPrimOverMe(SceneObjectGroup obj)
{
UUID prim_owner = obj.OwnerID;
int prim_count = obj.PrimCount;
if (obj.IsSelected)
{
LandData.SelectedPrims += prim_count;
}
else
{
if (prim_owner == LandData.OwnerID)
{
LandData.OwnerPrims += prim_count;
}
else if ((obj.GroupID == LandData.GroupID ||
prim_owner == LandData.GroupID) &&
LandData.GroupID != UUID.Zero)
{
LandData.GroupPrims += prim_count;
}
else
{
LandData.OtherPrims += prim_count;
}
}
// m_log.DebugFormat("[LAND OBJECT]: Adding scene object {0} {1} over {2}", obj.Name, obj.LocalId, LandData.Name);
lock (primsOverMe)
primsOverMe.Add(obj);
}
public void RemovePrimFromCount(SceneObjectGroup obj)
public void RemovePrimFromOverMe(SceneObjectGroup obj)
{
// m_log.DebugFormat("[LAND OBJECT]: Removing scene object {0} {1} from over {2}", obj.Name, obj.LocalId, LandData.Name);
lock (primsOverMe)
{
if (primsOverMe.Contains(obj))
{
UUID prim_owner = obj.OwnerID;
int prim_count = obj.PrimCount;
if (prim_owner == LandData.OwnerID)
{
LandData.OwnerPrims -= prim_count;
}
else if (obj.GroupID == LandData.GroupID ||
prim_owner == LandData.GroupID)
{
LandData.GroupPrims -= prim_count;
}
else
{
LandData.OtherPrims -= prim_count;
}
primsOverMe.Remove(obj);
}
}
primsOverMe.Remove(obj);
}
#endregion
#endregion
#endregion
/// <summary>
@@ -1192,5 +1143,7 @@ namespace OpenSim.Region.CoreModules.World.Land
LandData.MusicURL = url;
SendLandUpdateToAvatarsOverMe();
}
#endregion
}
}

View File

@@ -201,25 +201,29 @@ namespace OpenSim.Region.CoreModules.World.Land
else
parcelCounts.Users[obj.OwnerID] = partCount;
if (landData.IsGroupOwned)
if (obj.IsSelected)
{
if (obj.OwnerID == landData.GroupID)
parcelCounts.Owner += partCount;
else if (landData.GroupID != UUID.Zero && obj.GroupID == landData.GroupID)
parcelCounts.Group += partCount;
else
parcelCounts.Others += partCount;
parcelCounts.Selected += partCount;
}
else
{
if (obj.OwnerID == landData.OwnerID)
parcelCounts.Owner += partCount;
if (landData.IsGroupOwned)
{
if (obj.OwnerID == landData.GroupID)
parcelCounts.Owner += partCount;
else if (landData.GroupID != UUID.Zero && obj.GroupID == landData.GroupID)
parcelCounts.Group += partCount;
else
parcelCounts.Others += partCount;
}
else
parcelCounts.Others += partCount;
{
if (obj.OwnerID == landData.OwnerID)
parcelCounts.Owner += partCount;
else
parcelCounts.Others += partCount;
}
}
if (obj.IsSelected)
parcelCounts.Selected += partCount;
}
}
@@ -375,6 +379,7 @@ namespace OpenSim.Region.CoreModules.World.Land
count = counts.Owner;
count += counts.Group;
count += counts.Others;
count += counts.Selected;
}
}

View File

@@ -469,8 +469,8 @@ namespace OpenSim.Region.CoreModules
m_SunFixedHour = FixedSunHour;
m_SunFixed = FixedSun;
m_log.DebugFormat("[SUN]: Sun Settings Update: Fixed Sun? : {0}", m_SunFixed.ToString());
m_log.DebugFormat("[SUN]: Sun Settings Update: Sun Hour : {0}", m_SunFixedHour.ToString());
// m_log.DebugFormat("[SUN]: Sun Settings Update: Fixed Sun? : {0}", m_SunFixed.ToString());
// m_log.DebugFormat("[SUN]: Sun Settings Update: Sun Hour : {0}", m_SunFixedHour.ToString());
receivedEstateToolsSunUpdate = true;
@@ -480,7 +480,7 @@ namespace OpenSim.Region.CoreModules
// When sun settings are updated, we should update all clients with new settings.
SunUpdateToAllClients();
m_log.DebugFormat("[SUN]: PosTime : {0}", PosTime.ToString());
// m_log.DebugFormat("[SUN]: PosTime : {0}", PosTime.ToString());
}
}