Mantis#1597. Thank you, Melanie for a patch that:

Adds handlers for the reclaim land functionality, 
plus all needed permissions checks.
This commit is contained in:
Charles Krinke
2008-06-26 13:45:36 +00:00
parent cf00df106d
commit a58a47a759
7 changed files with 66 additions and 1 deletions

View File

@@ -94,6 +94,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
client.OnParcelAccessListRequest += new ParcelAccessListRequest(handleParcelAccessRequest);
client.OnParcelAccessListUpdateRequest += new ParcelAccessListUpdateRequest(handleParcelAccessUpdateRequest);
client.OnParcelAbandonRequest += new ParcelAbandonRequest(handleParcelAbandonRequest);
client.OnParcelReclaim += new ParcelReclaim(handleParcelReclaim);
if (m_scene.Entities.ContainsKey(client.AgentId))
{
@@ -932,6 +933,21 @@ namespace OpenSim.Region.Environment.Modules.World.Land
{
landList[local_id].landData.ownerID = m_scene.RegionInfo.MasterAvatarAssignedUUID;
m_scene.Broadcast(SendParcelOverlay);
landList[local_id].sendLandUpdateToClient(remote_client);
}
}
}
public void handleParcelReclaim(int local_id, IClientAPI remote_client)
{
if (landList.ContainsKey(local_id))
{
if (m_scene.ExternalChecks.ExternalChecksCanReclaimParcel(remote_client.AgentId, landList[local_id]))
{
landList[local_id].landData.ownerID = m_scene.RegionInfo.MasterAvatarAssignedUUID;
m_scene.Broadcast(SendParcelOverlay);
landList[local_id].sendLandUpdateToClient(remote_client);
}
}
@@ -1060,4 +1076,4 @@ namespace OpenSim.Region.Environment.Modules.World.Land
}
}
}
}

View File

@@ -243,6 +243,7 @@ namespace OpenSim.Region.Environment.Modules.World.NPC
public event ParcelJoinRequest OnParcelJoinRequest;
public event ParcelPropertiesUpdateRequest OnParcelPropertiesUpdateRequest;
public event ParcelAbandonRequest OnParcelAbandonRequest;
public event ParcelReclaim OnParcelReclaim;
public event ParcelReturnObjectsRequest OnParcelReturnObjectsRequest;
public event ParcelAccessListRequest OnParcelAccessListRequest;
public event ParcelAccessListUpdateRequest OnParcelAccessListUpdateRequest;

View File

@@ -143,6 +143,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
m_scene.ExternalChecks.addSetBypassPermissions(SetBypassPermissions); //FULLY IMPLEMENTED
m_scene.ExternalChecks.addPropagatePermissions(PropagatePermissions); //FULLY IMPLEMENTED
m_scene.ExternalChecks.addCheckAbandonParcel(CanAbandonParcel); //FULLY IMPLEMENTED
m_scene.ExternalChecks.addCheckReclaimParcel(CanReclaimParcel); //FULLY IMPLEMENTED
m_scene.ExternalChecks.addGenerateClientFlags(GenerateClientFlags); //NOT YET FULLY IMPLEMENTED
m_scene.ExternalChecks.addCheckBeGodLike(CanBeGodLike); //FULLY IMPLEMENTED
m_scene.ExternalChecks.addCheckDuplicateObject(CanDuplicateObject); //FULLY IMPLEMENTED
@@ -531,6 +532,14 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
return GenericParcelPermission(user, parcel);
}
private bool CanReclaimParcel(LLUUID user, ILandObject parcel, Scene scene)
{
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
if (m_bypassPermissions) return m_bypassPermissionsValue;
return GenericParcelPermission(user, parcel);
}
private bool CanBeGodLike(LLUUID user, Scene scene)
{
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);

View File

@@ -899,6 +899,31 @@ namespace OpenSim.Region.Environment.Scenes
}
#endregion
public delegate bool CanReclaimParcel(LLUUID user, ILandObject parcel, Scene scene);
private List<CanReclaimParcel> CanReclaimParcelCheckFunctions = new List<CanReclaimParcel>();
public void addCheckReclaimParcel(CanReclaimParcel delegateFunc)
{
if (!CanReclaimParcelCheckFunctions.Contains(delegateFunc))
CanReclaimParcelCheckFunctions.Add(delegateFunc);
}
public void removeCheckReclaimParcel(CanReclaimParcel delegateFunc)
{
if (CanReclaimParcelCheckFunctions.Contains(delegateFunc))
CanReclaimParcelCheckFunctions.Remove(delegateFunc);
}
public bool ExternalChecksCanReclaimParcel(LLUUID user, ILandObject parcel)
{
foreach (CanReclaimParcel check in CanReclaimParcelCheckFunctions)
{
if (check(user, parcel, m_scene) == false)
{
return false;
}
}
return true;
}
public delegate bool CanBuyLand(LLUUID user, ILandObject parcel, Scene scene);
private List<CanBuyLand> CanBuyLandCheckFunctions = new List<CanBuyLand>();