mirror of
https://github.com/opensim/opensim.git
synced 2026-08-08 10:15:33 +08:00
*Adding and Removing Avatars from the Access/Ban List for a parcel now works, but the actual ban lines, etc are not done.
This commit is contained in:
@@ -47,7 +47,7 @@ namespace OpenSim.Region.Environment.LandManagement
|
||||
|
||||
public LandData landData = new LandData();
|
||||
public List<SceneObjectGroup> primsOverMe = new List<SceneObjectGroup>();
|
||||
|
||||
public List<libsecondlife.ParcelManager.ParcelAccessEntry> parcelAccessList = new List<ParcelManager.ParcelAccessEntry>();
|
||||
public Scene m_scene;
|
||||
|
||||
private bool[,] landBitmap = new bool[64,64];
|
||||
@@ -242,6 +242,105 @@ namespace OpenSim.Region.Environment.LandManagement
|
||||
|
||||
#endregion
|
||||
|
||||
#region AccessList Functions
|
||||
|
||||
public ParcelAccessListReplyPacket.ListBlock[] createAccessListArrayByFlag(ParcelManager.AccessList flag)
|
||||
{
|
||||
List<ParcelAccessListReplyPacket.ListBlock> list = new List<ParcelAccessListReplyPacket.ListBlock>();
|
||||
foreach (ParcelManager.ParcelAccessEntry entry in parcelAccessList)
|
||||
{
|
||||
if (entry.Flags == flag)
|
||||
{
|
||||
ParcelAccessListReplyPacket.ListBlock listBlock = new ParcelAccessListReplyPacket.ListBlock();
|
||||
|
||||
listBlock.Flags = (uint)0;
|
||||
listBlock.ID = entry.AgentID;
|
||||
listBlock.Time = 0;
|
||||
|
||||
list.Add(listBlock);
|
||||
}
|
||||
}
|
||||
|
||||
if (list.Count == 0)
|
||||
{
|
||||
ParcelAccessListReplyPacket.ListBlock listBlock = new ParcelAccessListReplyPacket.ListBlock();
|
||||
|
||||
listBlock.Flags = (uint)0;
|
||||
listBlock.ID = LLUUID.Zero;
|
||||
listBlock.Time = 0;
|
||||
|
||||
list.Add(listBlock);
|
||||
}
|
||||
return list.ToArray();
|
||||
}
|
||||
|
||||
public void sendAccessList(LLUUID agentID, LLUUID sessionID, uint flags, int sequenceID, IClientAPI remote_client)
|
||||
{
|
||||
|
||||
ParcelAccessListReplyPacket replyPacket;
|
||||
|
||||
if (flags == (uint)ParcelManager.AccessList.Access || flags == (uint)ParcelManager.AccessList.Both)
|
||||
{
|
||||
replyPacket = new ParcelAccessListReplyPacket();
|
||||
replyPacket.Data.AgentID = agentID;
|
||||
replyPacket.Data.Flags = (uint)ParcelManager.AccessList.Access;
|
||||
replyPacket.Data.LocalID = this.landData.localID;
|
||||
replyPacket.Data.SequenceID = 0;
|
||||
|
||||
replyPacket.List = createAccessListArrayByFlag(ParcelManager.AccessList.Access);
|
||||
remote_client.OutPacket((Packet)replyPacket, ThrottleOutPacketType.Task);
|
||||
}
|
||||
|
||||
if (flags == (uint)ParcelManager.AccessList.Ban || flags == (uint)ParcelManager.AccessList.Both)
|
||||
{
|
||||
replyPacket = new ParcelAccessListReplyPacket();
|
||||
replyPacket.Data.AgentID = agentID;
|
||||
replyPacket.Data.Flags = (uint)ParcelManager.AccessList.Ban;
|
||||
replyPacket.Data.LocalID = this.landData.localID;
|
||||
replyPacket.Data.SequenceID = 0;
|
||||
|
||||
replyPacket.List = createAccessListArrayByFlag(ParcelManager.AccessList.Ban);
|
||||
remote_client.OutPacket((Packet)replyPacket, ThrottleOutPacketType.Task);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void updateAccessList(uint flags, List<ParcelManager.ParcelAccessEntry> entries, IClientAPI remote_client)
|
||||
{
|
||||
if (entries.Count == 1 && entries[0].AgentID == LLUUID.Zero)
|
||||
{
|
||||
entries.Clear();
|
||||
}
|
||||
|
||||
List<ParcelManager.ParcelAccessEntry> toRemove = new List<ParcelManager.ParcelAccessEntry>();
|
||||
foreach (ParcelManager.ParcelAccessEntry entry in parcelAccessList)
|
||||
{
|
||||
if (entry.Flags == (ParcelManager.AccessList)flags)
|
||||
{
|
||||
toRemove.Add(entry);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (ParcelManager.ParcelAccessEntry entry in toRemove)
|
||||
{
|
||||
parcelAccessList.Remove(entry);
|
||||
}
|
||||
foreach (ParcelManager.ParcelAccessEntry entry in entries)
|
||||
{
|
||||
ParcelManager.ParcelAccessEntry temp = new ParcelManager.ParcelAccessEntry();
|
||||
temp.AgentID = entry.AgentID;
|
||||
temp.Time = new DateTime() ; //Pointless? Yes.
|
||||
temp.Flags = (ParcelManager.AccessList)flags;
|
||||
|
||||
if (!this.parcelAccessList.Contains(temp))
|
||||
{
|
||||
this.parcelAccessList.Add(temp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Update Functions
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -554,6 +554,30 @@ namespace OpenSim.Region.Environment.LandManagement
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void handleParcelAccessRequest(LLUUID agentID, LLUUID sessionID, uint flags, int sequenceID, int landLocalID, IClientAPI remote_client)
|
||||
{
|
||||
if (landList.ContainsKey(landLocalID))
|
||||
{
|
||||
landList[landLocalID].sendAccessList(agentID, sessionID, flags, sequenceID,remote_client);
|
||||
}
|
||||
}
|
||||
|
||||
public void handleParcelAccessUpdateRequest(LLUUID agentID, LLUUID sessionID,uint flags, int landLocalID, List<libsecondlife.ParcelManager.ParcelAccessEntry> entries, IClientAPI remote_client)
|
||||
{
|
||||
if (landList.ContainsKey(landLocalID))
|
||||
{
|
||||
if (agentID == landList[landLocalID].landData.ownerID)
|
||||
{
|
||||
landList[landLocalID].updateAccessList(flags, entries, remote_client);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("INVALID LOCAL LAND ID");
|
||||
}
|
||||
}
|
||||
|
||||
public void resetAllLandPrimCounts()
|
||||
{
|
||||
foreach (Land p in landList.Values)
|
||||
|
||||
@@ -1093,6 +1093,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
client.OnParcelSelectObjects += new ParcelSelectObjects(m_LandManager.handleParcelSelectObjectsRequest);
|
||||
client.OnParcelObjectOwnerRequest +=
|
||||
new ParcelObjectOwnerRequest(m_LandManager.handleParcelObjectOwnersRequest);
|
||||
client.OnParcelAccessListRequest += new ParcelAccessListRequest(m_LandManager.handleParcelAccessRequest);
|
||||
client.OnParcelAccessListUpdateRequest += new ParcelAccessListUpdateRequest(m_LandManager.handleParcelAccessUpdateRequest);
|
||||
|
||||
client.OnEstateOwnerMessage += new EstateOwnerMessageRequest(m_estateManager.handleEstateOwnerMessage);
|
||||
client.OnRequestGodlikePowers += handleRequestGodlikePowers;
|
||||
|
||||
Reference in New Issue
Block a user