From dd9e365e002b50b63073084e1eb8cf06f1ddbea7 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sun, 21 May 2023 20:49:21 +0100 Subject: [PATCH] a few changes on ban checks, thx Tampa --- .../CoreModules/World/Land/LandObject.cs | 70 +++++++++++++------ 1 file changed, 47 insertions(+), 23 deletions(-) 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;