Implemented Return Objects when it's invoked from the Top Colliders or Top Scripts dialogs

user_profiles
Oren Hurvitz 2012-12-12 17:10:08 +02:00 committed by Justin Clark-Casey (justincc)
parent addab1244e
commit 70695a6ed9
1 changed files with 55 additions and 5 deletions

View File

@ -1394,6 +1394,8 @@ namespace OpenSim.Region.CoreModules.World.Land
} }
public void ReturnObjectsInParcel(int localID, uint returnType, UUID[] agentIDs, UUID[] taskIDs, IClientAPI remoteClient) public void ReturnObjectsInParcel(int localID, uint returnType, UUID[] agentIDs, UUID[] taskIDs, IClientAPI remoteClient)
{
if (localID != -1)
{ {
ILandObject selectedParcel = null; ILandObject selectedParcel = null;
lock (m_landList) lock (m_landList)
@ -1405,6 +1407,54 @@ namespace OpenSim.Region.CoreModules.World.Land
selectedParcel.ReturnLandObjects(returnType, agentIDs, taskIDs, remoteClient); selectedParcel.ReturnLandObjects(returnType, agentIDs, taskIDs, remoteClient);
} }
else
{
if (returnType != 1)
{
m_log.WarnFormat("[LAND MANAGEMENT MODULE] ReturnObjectsInParcel: unknown return type {0}", returnType);
return;
}
// We get here when the user returns objects from the list of Top Colliders or Top Scripts.
// In that case we receive specific object UUID's, but no parcel ID.
Dictionary<UUID, HashSet<SceneObjectGroup>> returns = new Dictionary<UUID, HashSet<SceneObjectGroup>>();
foreach (UUID groupID in taskIDs)
{
SceneObjectGroup obj = m_scene.GetSceneObjectGroup(groupID);
if (obj != null)
{
if (!returns.ContainsKey(obj.OwnerID))
returns[obj.OwnerID] = new HashSet<SceneObjectGroup>();
returns[obj.OwnerID].Add(obj);
}
else
{
m_log.WarnFormat("[LAND MANAGEMENT MODULE] ReturnObjectsInParcel: unknown object {0}", groupID);
}
}
int num = 0;
foreach (HashSet<SceneObjectGroup> objs in returns.Values)
num += objs.Count;
m_log.DebugFormat("[LAND MANAGEMENT MODULE] Returning {0} specific object(s)", num);
foreach (HashSet<SceneObjectGroup> objs in returns.Values)
{
List<SceneObjectGroup> objs2 = new List<SceneObjectGroup>(objs);
if (m_scene.Permissions.CanReturnObjects(null, remoteClient.AgentId, objs2))
{
m_scene.returnObjects(objs2.ToArray(), remoteClient.AgentId);
}
else
{
m_log.WarnFormat("[LAND MANAGEMENT MODULE] ReturnObjectsInParcel: not permitted to return {0} object(s) belonging to user {1}",
objs2.Count, objs2[0].OwnerID);
}
}
}
}
public void EventManagerOnNoLandDataFromStorage() public void EventManagerOnNoLandDataFromStorage()
{ {