diff --git a/OpenSim/Region/CoreModules/World/Land/LandObject.cs b/OpenSim/Region/CoreModules/World/Land/LandObject.cs index f856e4b573..bbf7d3064b 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandObject.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandObject.cs @@ -726,30 +726,44 @@ namespace OpenSim.Region.CoreModules.World.Land if (m_estateSettings.TaxFree) // region access control only return false; - if (IsBannedFromLand(avatar)) - { + if (m_scenePermissions.IsAdministrator(avatar)) + return false; + + if (m_estateSettings.IsEstateManagerOrOwner(avatar)) + return false; + + if (avatar.Equals(LandData.OwnerID)) + return false; + + if (IsBannedFromLand_inner(avatar)) return true; - } - else if (IsRestrictedFromLand(avatar)) - { + + if (IsRestrictedFromLand_inner(avatar)) return true; - } + return false; } public bool CanBeOnThisLand(UUID avatar, float posHeight) { - if (m_estateSettings.TaxFree) // region access control only - return true; + if (m_estateSettings.TaxFree) // estate access only + return false; - if (posHeight < m_scene.LandChannel.BanLineSafeHeight && IsBannedFromLand(avatar)) - { + if (m_scenePermissions.IsAdministrator(avatar)) return false; - } - else if (IsRestrictedFromLand(avatar)) - { + + if (m_estateSettings.IsEstateManagerOrOwner(avatar)) return false; - } + + if (avatar.Equals(LandData.OwnerID)) + return false; + + if (posHeight < m_scene.LandChannel.BanLineSafeHeight && IsBannedFromLand_inner(avatar)) + return false; + + else if (IsRestrictedFromLand_inner(avatar)) + return false; + return true; } @@ -808,6 +822,11 @@ namespace OpenSim.Region.CoreModules.World.Land if (avatar.Equals(LandData.OwnerID)) return false; + return IsBannedFromLand_inner(avatar); + } + + private bool IsBannedFromLand_inner(UUID avatar) + { if ((LandData.Flags & (uint) ParcelFlags.UseBanList) > 0) { int now = Util.UnixTimeSinceEpoch(); @@ -825,6 +844,20 @@ namespace OpenSim.Region.CoreModules.World.Land if (m_estateSettings.TaxFree) // estate access only return false; + if (m_scenePermissions.IsAdministrator(avatar)) + return false; + + if (m_estateSettings.IsEstateManagerOrOwner(avatar)) + return false; + + if (avatar.Equals(LandData.OwnerID)) + return false; + + return IsRestrictedFromLand_inner(avatar); + } + + private bool IsRestrictedFromLand_inner(UUID avatar) + { if ((LandData.Flags & (uint) ParcelFlags.UseAccessList) == 0) { bool adults = m_estateSettings.DoDenyMinors && @@ -851,15 +884,6 @@ namespace OpenSim.Region.CoreModules.World.Land return false; } - if (m_scenePermissions.IsAdministrator(avatar)) - return false; - - if (m_estateSettings.IsEstateManagerOrOwner(avatar)) - return false; - - if (avatar.Equals(LandData.OwnerID)) - return false; - if (HasGroupAccess(avatar)) return false;