From 0091c37ed3fd3f9ed4edf079a61f986daadca16b Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Fri, 27 Jan 2017 20:21:24 +0000
Subject: several changes relative to objects return and parcel prim counts:
avoid null refs, report correct count of returned objects, make obkects
counts by ownership coerent with return rules, etc
---
OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 21 +++++++++++++--------
1 file changed, 13 insertions(+), 8 deletions(-)
(limited to 'OpenSim/Region/Framework/Scenes/Scene.Inventory.cs')
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index dbc7def..2f016fa 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -2085,7 +2085,7 @@ namespace OpenSim.Region.Framework.Scenes
/// DeRezAction
/// User folder ID to place derezzed object
public virtual void DeRezObjects(
- IClientAPI remoteClient, List localIDs, UUID groupID, DeRezAction action, UUID destinationID)
+ IClientAPI remoteClient, List localIDs, UUID groupID, DeRezAction action, UUID destinationID, bool AddToReturns = true)
{
// First, see of we can perform the requested action and
// build a list of eligible objects
@@ -2094,7 +2094,11 @@ namespace OpenSim.Region.Framework.Scenes
List takeGroups = new List();
List takeDeleteGroups = new List();
- ScenePresence sp = remoteClient.SceneAgent as ScenePresence;
+ ScenePresence sp = null;
+ if(remoteClient != null)
+ sp = remoteClient.SceneAgent as ScenePresence;
+ else if(action != DeRezAction.Return)
+ return; // only Return can be called without a client
// Start with true for both, then remove the flags if objects
// that we can't derez are part of the selection
@@ -2201,13 +2205,14 @@ namespace OpenSim.Region.Framework.Scenes
{
if (Permissions.CanReturnObjects(
null,
- remoteClient.AgentId,
+ remoteClient,
new List() {grp}))
{
permissionToTake = true;
permissionToDelete = true;
-
- AddReturn(grp.OwnerID == grp.GroupID ? grp.LastOwnerID : grp.OwnerID, grp.Name, grp.AbsolutePosition, "parcel owner return");
+ if(AddToReturns)
+ AddReturn(grp.OwnerID == grp.GroupID ? grp.LastOwnerID : grp.OwnerID, grp.Name, grp.AbsolutePosition,
+ "parcel owner return");
}
}
else // Auto return passes through here with null agent
@@ -2641,7 +2646,7 @@ namespace OpenSim.Region.Framework.Scenes
}
public virtual bool returnObjects(SceneObjectGroup[] returnobjects,
- UUID AgentId)
+ IClientAPI client)
{
List localIDs = new List();
@@ -2651,8 +2656,8 @@ namespace OpenSim.Region.Framework.Scenes
"parcel owner return");
localIDs.Add(grp.RootPart.LocalId);
}
- DeRezObjects(null, localIDs, UUID.Zero, DeRezAction.Return,
- UUID.Zero);
+ DeRezObjects(client, localIDs, UUID.Zero, DeRezAction.Return,
+ UUID.Zero, false);
return true;
}
--
cgit v1.1