mirror of
https://github.com/opensim/opensim.git
synced 2026-05-15 03:15:41 +08:00
change llResetLand*List exec rights so works with group owned, plus other cosmetics
This commit is contained in:
@@ -149,6 +149,8 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||
m_allowedForcefulBans = !disablebans;
|
||||
m_showBansLines = landManagementConfig.GetBoolean("ShowParcelBansLines", m_showBansLines);
|
||||
m_BanLineSafeHeight = landManagementConfig.GetFloat("BanLineSafeHeight", m_BanLineSafeHeight);
|
||||
if(!m_allowedForcefulBans)
|
||||
m_showBansLines = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -525,10 +527,10 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||
|
||||
public void EventManagerOnSignificantClientMovement(ScenePresence avatar)
|
||||
{
|
||||
if (avatar.IsChildAgent)
|
||||
if (avatar.IsChildAgent || avatar.IsNPC)
|
||||
return;
|
||||
|
||||
if ( m_allowedForcefulBans && m_showBansLines && !m_scene.RegionInfo.EstateSettings.TaxFree)
|
||||
if (m_showBansLines && !m_scene.RegionInfo.EstateSettings.TaxFree)
|
||||
SendOutNearestBanLine(avatar.ControllingClient);
|
||||
}
|
||||
|
||||
|
||||
@@ -796,8 +796,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||
|
||||
public bool IsBannedFromLand(UUID avatar)
|
||||
{
|
||||
ExpireAccessList();
|
||||
|
||||
if (m_estateSettings.TaxFree) // region access control only
|
||||
return false;
|
||||
|
||||
@@ -812,10 +810,11 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||
|
||||
if ((LandData.Flags & (uint) ParcelFlags.UseBanList) > 0)
|
||||
{
|
||||
foreach(LandAccessEntry e in LandData.ParcelAccessList)
|
||||
int now = Util.UnixTimeSinceEpoch();
|
||||
foreach (LandAccessEntry e in LandData.ParcelAccessList)
|
||||
{
|
||||
if (e.Flags == AccessList.Ban && e.AgentID.Equals(avatar))
|
||||
return true;
|
||||
return e.Expires == 0 || e.Expires > now;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
@@ -891,12 +890,11 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||
|
||||
public bool IsInLandAccessList(UUID avatar)
|
||||
{
|
||||
ExpireAccessList();
|
||||
|
||||
foreach(LandAccessEntry e in LandData.ParcelAccessList)
|
||||
{
|
||||
int now = Util.UnixTimeSinceEpoch();
|
||||
if (e.Flags == AccessList.Access && e.AgentID.Equals(avatar))
|
||||
return true;
|
||||
return e.Expires == 0 || e.Expires > now;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -972,27 +970,18 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||
|
||||
#region AccessList Functions
|
||||
|
||||
//legacy
|
||||
public List<LandAccessEntry> CreateAccessListArrayByFlag(AccessList flag)
|
||||
{
|
||||
ExpireAccessList();
|
||||
|
||||
int now = Util.UnixTimeSinceEpoch();
|
||||
List<LandAccessEntry> list = new();
|
||||
foreach (LandAccessEntry entry in LandData.ParcelAccessList)
|
||||
{
|
||||
if (entry.Flags == flag)
|
||||
if (entry.Flags == flag && (entry.Expires > now || entry.Expires == 0))
|
||||
list.Add(entry);
|
||||
}
|
||||
if (list.Count == 0)
|
||||
{
|
||||
LandAccessEntry e = new()
|
||||
{
|
||||
AgentID = UUID.Zero,
|
||||
Flags = 0,
|
||||
Expires = 0
|
||||
};
|
||||
|
||||
list.Add(e);
|
||||
}
|
||||
list.Add(new LandAccessEntry());
|
||||
|
||||
return list;
|
||||
}
|
||||
@@ -1000,18 +989,35 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||
public void SendAccessList(UUID agentID, UUID sessionID, uint flags, int sequenceID,
|
||||
IClientAPI remote_client)
|
||||
{
|
||||
|
||||
if ((flags & (uint) AccessList.Access) != 0)
|
||||
int now = Util.UnixTimeSinceEpoch();
|
||||
List<LandAccessEntry> accesslist = new();
|
||||
List<LandAccessEntry> banlist = new();
|
||||
foreach (LandAccessEntry entry in LandData.ParcelAccessList)
|
||||
{
|
||||
List<LandAccessEntry> accessEntries = CreateAccessListArrayByFlag(AccessList.Access);
|
||||
remote_client.SendLandAccessListData(accessEntries,(uint) AccessList.Access,LandData.LocalID);
|
||||
if(entry.Expires > now || entry.Expires == 0)
|
||||
{
|
||||
if (entry.Flags == AccessList.Access)
|
||||
accesslist.Add(entry);
|
||||
else if (entry.Flags == AccessList.Ban)
|
||||
banlist.Add(entry);
|
||||
}
|
||||
}
|
||||
|
||||
if ((flags & (uint) AccessList.Ban) != 0)
|
||||
if (accesslist.Count == 0)
|
||||
{
|
||||
List<LandAccessEntry> accessEntries = CreateAccessListArrayByFlag(AccessList.Ban);
|
||||
remote_client.SendLandAccessListData(accessEntries, (uint)AccessList.Ban, LandData.LocalID);
|
||||
remote_client.SendLandAccessListData(new List<LandAccessEntry>() { new LandAccessEntry() },
|
||||
(uint)AccessList.Access, LandData.LocalID);
|
||||
}
|
||||
else
|
||||
remote_client.SendLandAccessListData(accesslist, (uint)AccessList.Access, LandData.LocalID);
|
||||
|
||||
if (banlist.Count == 0)
|
||||
{
|
||||
remote_client.SendLandAccessListData(new List<LandAccessEntry>() { new LandAccessEntry() },
|
||||
(uint)AccessList.Ban, LandData.LocalID);
|
||||
}
|
||||
else
|
||||
remote_client.SendLandAccessListData(banlist, (uint)AccessList.Ban, LandData.LocalID);
|
||||
}
|
||||
|
||||
public void UpdateAccessList(uint flags, UUID transactionID, List<LandAccessEntry> entries)
|
||||
|
||||
@@ -7749,18 +7749,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
if(!UUID.TryParse(avatar, out UUID key) || key.IsZero())
|
||||
return;
|
||||
|
||||
ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition);
|
||||
if (World.Permissions.CanEditParcelProperties(m_host.OwnerID, land, GroupPowers.LandManagePasses, false))
|
||||
ILandObject parcel = World.LandChannel.GetLandObject(m_host.AbsolutePosition);
|
||||
if (World.Permissions.CanEditParcelProperties(m_host.OwnerID, parcel, GroupPowers.LandManagePasses, false))
|
||||
{
|
||||
int expires = (hours != 0) ? Util.UnixTimeSinceEpoch() + (int)(3600.0 * hours) : 0;
|
||||
foreach(LandAccessEntry e in land.LandData.ParcelAccessList)
|
||||
LandData land = parcel.LandData;
|
||||
foreach(LandAccessEntry e in land.ParcelAccessList)
|
||||
{
|
||||
if (e.Flags == AccessList.Access && e.AgentID.Equals(key))
|
||||
{
|
||||
if (e.Expires != 0 && expires > e.Expires)
|
||||
{
|
||||
e.Expires = expires;
|
||||
World.EventManager.TriggerLandObjectUpdated((uint)land.LandData.LocalID, land);
|
||||
World.EventManager.TriggerLandObjectUpdated((uint)land.LocalID, parcel);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -7772,10 +7773,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
Flags = AccessList.Access,
|
||||
Expires = expires
|
||||
};
|
||||
|
||||
land.LandData.ParcelAccessList.Add(entry);
|
||||
land.LandData.Flags |= (uint)ParcelFlags.UsePassList;
|
||||
World.EventManager.TriggerLandObjectUpdated((uint)land.LandData.LocalID, land);
|
||||
land.ParcelAccessList.Add(entry);
|
||||
land.Flags |= (uint)ParcelFlags.UsePassList;
|
||||
World.EventManager.TriggerLandObjectUpdated((uint)land.LocalID, parcel);
|
||||
}
|
||||
ScriptSleep(m_sleepMsOnAddToLandPassList);
|
||||
}
|
||||
@@ -13308,19 +13308,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
if (!UUID.TryParse(avatar, out UUID key) || key.IsZero())
|
||||
return;
|
||||
|
||||
ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition);
|
||||
if (World.Permissions.CanEditParcelProperties(m_host.OwnerID, land, GroupPowers.LandManageBanned, false))
|
||||
ILandObject parcel = World.LandChannel.GetLandObject(m_host.AbsolutePosition);
|
||||
if (World.Permissions.CanEditParcelProperties(m_host.OwnerID, parcel, GroupPowers.LandManageBanned, false))
|
||||
{
|
||||
int expires = (hours != 0) ? Util.UnixTimeSinceEpoch() + (int)(3600.0 * hours) : 0;
|
||||
|
||||
foreach(LandAccessEntry e in land.LandData.ParcelAccessList)
|
||||
LandData land = parcel.LandData;
|
||||
foreach (LandAccessEntry e in land.ParcelAccessList)
|
||||
{
|
||||
if (e.Flags == AccessList.Ban && e.AgentID.Equals(key))
|
||||
{
|
||||
if (e.Expires != 0 && e.Expires < expires)
|
||||
{
|
||||
e.Expires = expires;
|
||||
World.EventManager.TriggerLandObjectUpdated((uint)land.LandData.LocalID, land);
|
||||
World.EventManager.TriggerLandObjectUpdated((uint)land.LocalID, parcel);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -13333,10 +13333,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
Expires = expires
|
||||
};
|
||||
|
||||
land.LandData.ParcelAccessList.Add(entry);
|
||||
land.LandData.Flags |= (uint)ParcelFlags.UseBanList;
|
||||
land.ParcelAccessList.Add(entry);
|
||||
land.Flags |= (uint)ParcelFlags.UseBanList;
|
||||
|
||||
World.EventManager.TriggerLandObjectUpdated((uint)land.LandData.LocalID, land);
|
||||
World.EventManager.TriggerLandObjectUpdated((uint)land.LocalID, parcel);
|
||||
}
|
||||
ScriptSleep(m_sleepMsOnAddToLandBanList);
|
||||
}
|
||||
@@ -13346,21 +13346,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
if (!UUID.TryParse(avatar, out UUID key) || key.IsZero())
|
||||
return;
|
||||
|
||||
ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition);
|
||||
if (World.Permissions.CanEditParcelProperties(m_host.OwnerID, land, GroupPowers.LandManagePasses, false))
|
||||
ILandObject parcel = World.LandChannel.GetLandObject(m_host.AbsolutePosition);
|
||||
if (World.Permissions.CanEditParcelProperties(m_host.OwnerID, parcel, GroupPowers.LandManagePasses, false))
|
||||
{
|
||||
int idx = land.LandData.ParcelAccessList.FindIndex(
|
||||
delegate(LandAccessEntry e)
|
||||
{
|
||||
if (e.Flags == AccessList.Access && e.AgentID.Equals(key))
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
|
||||
if (idx != -1)
|
||||
LandData land = parcel.LandData;
|
||||
for(int i = 0; i < land.ParcelAccessList.Count; ++i)
|
||||
{
|
||||
land.LandData.ParcelAccessList.RemoveAt(idx);
|
||||
World.EventManager.TriggerLandObjectUpdated((uint)land.LandData.LocalID, land);
|
||||
LandAccessEntry e = land.ParcelAccessList[i];
|
||||
if (e.Flags == AccessList.Access && e.AgentID.Equals(key))
|
||||
{
|
||||
land.ParcelAccessList.RemoveAt(i);
|
||||
World.EventManager.TriggerLandObjectUpdated((uint)land.LocalID, parcel);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
ScriptSleep(m_sleepMsOnRemoveFromLandPassList);
|
||||
@@ -13371,21 +13369,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
if (!UUID.TryParse(avatar, out UUID key) || key.IsZero())
|
||||
return;
|
||||
|
||||
ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition);
|
||||
if (World.Permissions.CanEditParcelProperties(m_host.OwnerID, land, GroupPowers.LandManageBanned, false))
|
||||
ILandObject parcel = World.LandChannel.GetLandObject(m_host.AbsolutePosition);
|
||||
if (World.Permissions.CanEditParcelProperties(m_host.OwnerID, parcel, GroupPowers.LandManageBanned, false))
|
||||
{
|
||||
int idx = land.LandData.ParcelAccessList.FindIndex(
|
||||
delegate(LandAccessEntry e)
|
||||
{
|
||||
if (e.Flags == AccessList.Ban && e.AgentID.Equals(key))
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
|
||||
if (idx != -1)
|
||||
LandData land = parcel.LandData;
|
||||
for (int i = 0; i < land.ParcelAccessList.Count; ++i)
|
||||
{
|
||||
land.LandData.ParcelAccessList.RemoveAt(idx);
|
||||
World.EventManager.TriggerLandObjectUpdated((uint)land.LandData.LocalID, land);
|
||||
LandAccessEntry e = land.ParcelAccessList[i];
|
||||
if (e.Flags == AccessList.Ban && e.AgentID.Equals(key))
|
||||
{
|
||||
land.ParcelAccessList.RemoveAt(i);
|
||||
World.EventManager.TriggerLandObjectUpdated((uint)land.LocalID, parcel);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
ScriptSleep(m_sleepMsOnRemoveFromLandBanList);
|
||||
@@ -14010,9 +14006,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
|
||||
public void llResetLandBanList()
|
||||
{
|
||||
LandData land = World.LandChannel.GetLandObject(m_host.AbsolutePosition).LandData;
|
||||
if (land.ParcelAccessList.Count > 0 && land.OwnerID.Equals(m_host.OwnerID))
|
||||
ILandObject parcel = World.LandChannel.GetLandObject(m_host.AbsolutePosition);
|
||||
if (World.Permissions.CanEditParcelProperties(m_host.OwnerID, parcel, GroupPowers.LandManageBanned, false))
|
||||
{
|
||||
LandData land = parcel.LandData;
|
||||
var todelete = new List<LandAccessEntry>();
|
||||
foreach (LandAccessEntry entry in land.ParcelAccessList)
|
||||
{
|
||||
@@ -14021,15 +14018,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
}
|
||||
foreach (LandAccessEntry entry in todelete)
|
||||
land.ParcelAccessList.Remove(entry);
|
||||
land.Flags &= ~(uint)ParcelFlags.UseBanList;
|
||||
}
|
||||
ScriptSleep(m_sleepMsOnResetLandBanList);
|
||||
}
|
||||
|
||||
public void llResetLandPassList()
|
||||
{
|
||||
LandData land = World.LandChannel.GetLandObject(m_host.AbsolutePosition).LandData;
|
||||
if (land.ParcelAccessList.Count > 0 && land.OwnerID.Equals(m_host.OwnerID))
|
||||
ILandObject parcel = World.LandChannel.GetLandObject(m_host.AbsolutePosition);
|
||||
if (World.Permissions.CanEditParcelProperties(m_host.OwnerID, parcel, GroupPowers.LandManagePasses, false))
|
||||
{
|
||||
LandData land = parcel.LandData;
|
||||
var todelete = new List<LandAccessEntry>();
|
||||
foreach (LandAccessEntry entry in land.ParcelAccessList)
|
||||
{
|
||||
@@ -14038,6 +14037,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
}
|
||||
foreach (LandAccessEntry entry in todelete)
|
||||
land.ParcelAccessList.Remove(entry);
|
||||
land.Flags &= ~(uint)ParcelFlags.UsePassList;
|
||||
}
|
||||
ScriptSleep(m_sleepMsOnResetLandPassList);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user