diff options
-rw-r--r-- | OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs | 88 |
1 files changed, 48 insertions, 40 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs index 41f0e8c..9bc7a09 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs | |||
@@ -822,7 +822,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
822 | return null; | 822 | return null; |
823 | } | 823 | } |
824 | 824 | ||
825 | for (int i = 0 ; i < objlist.Count; i++) | 825 | for (int i = 0; i < objlist.Count; i++) |
826 | { | 826 | { |
827 | group = objlist[i]; | 827 | group = objlist[i]; |
828 | 828 | ||
@@ -832,8 +832,6 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
832 | m_log.Debug("[InventoryAccessModule]: Inventory object has UUID.Zero! Position 3"); | 832 | m_log.Debug("[InventoryAccessModule]: Inventory object has UUID.Zero! Position 3"); |
833 | } | 833 | } |
834 | 834 | ||
835 | group.RootPart.FromFolderID = item.Folder; | ||
836 | |||
837 | // If it's rezzed in world, select it. Much easier to | 835 | // If it's rezzed in world, select it. Much easier to |
838 | // find small items. | 836 | // find small items. |
839 | // | 837 | // |
@@ -890,44 +888,8 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
890 | } | 888 | } |
891 | 889 | ||
892 | group.SetGroup(remoteClient.ActiveGroupId, remoteClient); | 890 | group.SetGroup(remoteClient.ActiveGroupId, remoteClient); |
893 | if ((rootPart.OwnerID != item.Owner) || | ||
894 | (item.CurrentPermissions & 16) != 0) | ||
895 | { | ||
896 | //Need to kill the for sale here | ||
897 | rootPart.ObjectSaleType = 0; | ||
898 | rootPart.SalePrice = 10; | ||
899 | |||
900 | if (m_Scene.Permissions.PropagatePermissions()) | ||
901 | { | ||
902 | foreach (SceneObjectPart part in group.Parts) | ||
903 | { | ||
904 | if ((item.Flags & (uint)InventoryItemFlags.ObjectHasMultipleItems) == 0) | ||
905 | { | ||
906 | part.EveryoneMask = item.EveryOnePermissions; | ||
907 | part.NextOwnerMask = item.NextPermissions; | ||
908 | } | ||
909 | part.GroupMask = 0; // DO NOT propagate here | ||
910 | } | ||
911 | |||
912 | group.ApplyNextOwnerPermissions(); | ||
913 | } | ||
914 | } | ||
915 | 891 | ||
916 | foreach (SceneObjectPart part in group.Parts) | 892 | DoPreRezWhenFromItem(item, group); |
917 | { | ||
918 | if ((part.OwnerID != item.Owner) || | ||
919 | (item.CurrentPermissions & 16) != 0) | ||
920 | { | ||
921 | part.LastOwnerID = part.OwnerID; | ||
922 | part.OwnerID = item.Owner; | ||
923 | part.Inventory.ChangeInventoryOwner(item.Owner); | ||
924 | part.GroupMask = 0; // DO NOT propagate here | ||
925 | } | ||
926 | part.EveryoneMask = item.EveryOnePermissions; | ||
927 | part.NextOwnerMask = item.NextPermissions; | ||
928 | } | ||
929 | |||
930 | rootPart.TrimPermissions(); | ||
931 | 893 | ||
932 | if (!attachment) | 894 | if (!attachment) |
933 | { | 895 | { |
@@ -951,6 +913,52 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
951 | return group; | 913 | return group; |
952 | } | 914 | } |
953 | 915 | ||
916 | private void DoPreRezWhenFromItem(InventoryItemBase item, SceneObjectGroup so) | ||
917 | { | ||
918 | so.RootPart.FromFolderID = item.Folder; | ||
919 | |||
920 | SceneObjectPart rootPart = so.RootPart; | ||
921 | |||
922 | if ((rootPart.OwnerID != item.Owner) || | ||
923 | (item.CurrentPermissions & 16) != 0) | ||
924 | { | ||
925 | //Need to kill the for sale here | ||
926 | rootPart.ObjectSaleType = 0; | ||
927 | rootPart.SalePrice = 10; | ||
928 | |||
929 | if (m_Scene.Permissions.PropagatePermissions()) | ||
930 | { | ||
931 | foreach (SceneObjectPart part in so.Parts) | ||
932 | { | ||
933 | if ((item.Flags & (uint)InventoryItemFlags.ObjectHasMultipleItems) == 0) | ||
934 | { | ||
935 | part.EveryoneMask = item.EveryOnePermissions; | ||
936 | part.NextOwnerMask = item.NextPermissions; | ||
937 | } | ||
938 | part.GroupMask = 0; // DO NOT propagate here | ||
939 | } | ||
940 | |||
941 | so.ApplyNextOwnerPermissions(); | ||
942 | } | ||
943 | } | ||
944 | |||
945 | foreach (SceneObjectPart part in so.Parts) | ||
946 | { | ||
947 | if ((part.OwnerID != item.Owner) || | ||
948 | (item.CurrentPermissions & 16) != 0) | ||
949 | { | ||
950 | part.LastOwnerID = part.OwnerID; | ||
951 | part.OwnerID = item.Owner; | ||
952 | part.Inventory.ChangeInventoryOwner(item.Owner); | ||
953 | part.GroupMask = 0; // DO NOT propagate here | ||
954 | } | ||
955 | part.EveryoneMask = item.EveryOnePermissions; | ||
956 | part.NextOwnerMask = item.NextPermissions; | ||
957 | } | ||
958 | |||
959 | rootPart.TrimPermissions(); | ||
960 | } | ||
961 | |||
954 | private void DoPostRezWhenFromItem(InventoryItemBase item, bool isAttachment) | 962 | private void DoPostRezWhenFromItem(InventoryItemBase item, bool isAttachment) |
955 | { | 963 | { |
956 | if (!m_Scene.Permissions.BypassPermissions()) | 964 | if (!m_Scene.Permissions.BypassPermissions()) |