diff options
Diffstat (limited to 'OpenSim/Region/CoreModules/Framework')
-rw-r--r-- | OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs | 58 |
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++) |