aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs')
-rw-r--r--OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs58
1 files changed, 32 insertions, 26 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
index 5aad7f0..bbe7446 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
@@ -358,7 +358,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
358 bool asAttachment) 358 bool asAttachment)
359 { 359 {
360 CoalescedSceneObjects coa = new CoalescedSceneObjects(UUID.Zero); 360 CoalescedSceneObjects coa = new CoalescedSceneObjects(UUID.Zero);
361 Dictionary<UUID, Vector3> originalPositions = new Dictionary<UUID, Vector3>(); 361// Dictionary<UUID, Vector3> originalPositions = new Dictionary<UUID, Vector3>();
362 362
363 foreach (SceneObjectGroup objectGroup in objlist) 363 foreach (SceneObjectGroup objectGroup in objlist)
364 { 364 {
@@ -379,7 +379,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
379 objectGroup.AbsolutePosition.Z); 379 objectGroup.AbsolutePosition.Z);
380 380
381 Quaternion inventoryStoredRotation = objectGroup.GroupRotation; 381 Quaternion inventoryStoredRotation = objectGroup.GroupRotation;
382 originalPositions[objectGroup.UUID] = objectGroup.AbsolutePosition; 382 //originalPositions[objectGroup.UUID] = objectGroup.AbsolutePosition;
383 383
384 // Restore attachment data after trip through the sim 384 // Restore attachment data after trip through the sim
385 if (objectGroup.RootPart.AttachPoint > 0) 385 if (objectGroup.RootPart.AttachPoint > 0)
@@ -418,9 +418,9 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
418 else 418 else
419 itemXml = SceneObjectSerializer.ToOriginalXmlFormat(objlist[0], !asAttachment); 419 itemXml = SceneObjectSerializer.ToOriginalXmlFormat(objlist[0], !asAttachment);
420 420
421 // Restore the position of each group now that it has been stored to inventory. 421// // Restore the position of each group now that it has been stored to inventory.
422 foreach (SceneObjectGroup objectGroup in objlist) 422// foreach (SceneObjectGroup objectGroup in objlist)
423 objectGroup.AbsolutePosition = originalPositions[objectGroup.UUID]; 423// objectGroup.AbsolutePosition = originalPositions[objectGroup.UUID];
424 424
425 InventoryItemBase item = CreateItemForObject(action, remoteClient, objlist[0], folderID); 425 InventoryItemBase item = CreateItemForObject(action, remoteClient, objlist[0], folderID);
426 426
@@ -866,7 +866,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
866 return null; 866 return null;
867 } 867 }
868 868
869 if (item != null && !DoPreRezWhenFromItem(remoteClient, item, objlist, pos, attachment)) 869 if (item != null && !DoPreRezWhenFromItem(remoteClient, item, objlist, pos, veclist, attachment))
870 return null; 870 return null;
871 871
872 for (int i = 0; i < objlist.Count; i++) 872 for (int i = 0; i < objlist.Count; i++)
@@ -965,10 +965,15 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
965 /// <param name="item"></param> 965 /// <param name="item"></param>
966 /// <param name="objlist"></param> 966 /// <param name="objlist"></param>
967 /// <param name="pos"></param> 967 /// <param name="pos"></param>
968 /// <param name="veclist">
969 /// List of vector position adjustments for a coalesced objects. For ordinary objects
970 /// this list will contain just Vector3.Zero. The order of adjustments must match the order of objlist
971 /// </param>
968 /// <param name="isAttachment"></param> 972 /// <param name="isAttachment"></param>
969 /// <returns>true if we can processed with rezzing, false if we need to abort</returns> 973 /// <returns>true if we can processed with rezzing, false if we need to abort</returns>
970 private bool DoPreRezWhenFromItem( 974 private bool DoPreRezWhenFromItem(
971 IClientAPI remoteClient, InventoryItemBase item, List<SceneObjectGroup> objlist, Vector3 pos, bool isAttachment) 975 IClientAPI remoteClient, InventoryItemBase item, List<SceneObjectGroup> objlist,
976 Vector3 pos, List<Vector3> veclist, bool isAttachment)
972 { 977 {
973 UUID fromUserInventoryItemId = UUID.Zero; 978 UUID fromUserInventoryItemId = UUID.Zero;
974 979
@@ -991,28 +996,29 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
991 } 996 }
992 } 997 }
993 998
994 int primcount = 0; 999 for (int i = 0; i < objlist.Count; i++)
995 foreach (SceneObjectGroup g in objlist)
996 primcount += g.PrimCount;
997
998 if (!m_Scene.Permissions.CanRezObject(
999 primcount, remoteClient.AgentId, pos)
1000 && !isAttachment)
1001 { 1000 {
1002 // The client operates in no fail mode. It will 1001 SceneObjectGroup g = objlist[i];
1003 // have already removed the item from the folder 1002
1004 // if it's no copy. 1003 if (!m_Scene.Permissions.CanRezObject(
1005 // Put it back if it's not an attachment 1004 g.PrimCount, remoteClient.AgentId, pos + veclist[i])
1006 // 1005 && !isAttachment)
1007 if (((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0) && (!isAttachment)) 1006 {
1008 remoteClient.SendBulkUpdateInventory(item); 1007 // The client operates in no fail mode. It will
1008 // have already removed the item from the folder
1009 // if it's no copy.
1010 // Put it back if it's not an attachment
1011 //
1012 if (((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0) && (!isAttachment))
1013 remoteClient.SendBulkUpdateInventory(item);
1009 1014
1010 ILandObject land = m_Scene.LandChannel.GetLandObject(pos.X, pos.Y); 1015 ILandObject land = m_Scene.LandChannel.GetLandObject(pos.X, pos.Y);
1011 remoteClient.SendAlertMessage(string.Format( 1016 remoteClient.SendAlertMessage(string.Format(
1012 "Can't rez object '{0}' at <{1:F3}, {2:F3}, {3:F3}> on parcel '{4}' in region {5}.", 1017 "Can't rez object '{0}' at <{1:F3}, {2:F3}, {3:F3}> on parcel '{4}' in region {5}.",
1013 item.Name, pos.X, pos.Y, pos.Z, land != null ? land.LandData.Name : "Unknown", m_Scene.RegionInfo.RegionName)); 1018 item.Name, pos.X, pos.Y, pos.Z, land != null ? land.LandData.Name : "Unknown", m_Scene.Name));
1014 1019
1015 return false; 1020 return false;
1021 }
1016 } 1022 }
1017 1023
1018 for (int i = 0; i < objlist.Count; i++) 1024 for (int i = 0; i < objlist.Count; i++)