aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Framework')
-rw-r--r--OpenSim/Region/Framework/Interfaces/IEmailModule.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.Inventory.cs23
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneGraph.cs24
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs24
4 files changed, 41 insertions, 32 deletions
diff --git a/OpenSim/Region/Framework/Interfaces/IEmailModule.cs b/OpenSim/Region/Framework/Interfaces/IEmailModule.cs
index 3a2c423..4f1b91a 100644
--- a/OpenSim/Region/Framework/Interfaces/IEmailModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IEmailModule.cs
@@ -38,7 +38,7 @@ namespace OpenSim.Region.Framework.Interfaces
38 public int numLeft; 38 public int numLeft;
39 } 39 }
40 40
41 public interface IEmailModule : IRegionModule 41 public interface IEmailModule
42 { 42 {
43 void SendEmail(UUID objectID, string address, string subject, string body); 43 void SendEmail(UUID objectID, string address, string subject, string body);
44 Email GetNextEmail(UUID objectID, string sender, string subject); 44 Email GetNextEmail(UUID objectID, string sender, string subject);
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index 0380199..6532537 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -400,9 +400,9 @@ namespace OpenSim.Region.Framework.Scenes
400 if (Permissions.PropagatePermissions() && recipient != senderId) 400 if (Permissions.PropagatePermissions() && recipient != senderId)
401 { 401 {
402 // First, make sore base is limited to the next perms 402 // First, make sore base is limited to the next perms
403 itemCopy.BasePermissions = item.BasePermissions & item.NextPermissions; 403 itemCopy.BasePermissions = item.BasePermissions & (item.NextPermissions | (uint)PermissionMask.Move);
404 // By default, current equals base 404 // By default, current equals base
405 itemCopy.CurrentPermissions = itemCopy.BasePermissions; 405 itemCopy.CurrentPermissions = itemCopy.BasePermissions & item.CurrentPermissions;
406 406
407 // If this is an object, replace current perms 407 // If this is an object, replace current perms
408 // with folded perms 408 // with folded perms
@@ -413,7 +413,7 @@ namespace OpenSim.Region.Framework.Scenes
413 } 413 }
414 414
415 // Ensure there is no escalation 415 // Ensure there is no escalation
416 itemCopy.CurrentPermissions &= item.NextPermissions; 416 itemCopy.CurrentPermissions &= (item.NextPermissions | (uint)PermissionMask.Move);
417 417
418 // Need slam bit on xfer 418 // Need slam bit on xfer
419 itemCopy.CurrentPermissions |= 8; 419 itemCopy.CurrentPermissions |= 8;
@@ -916,14 +916,15 @@ namespace OpenSim.Region.Framework.Scenes
916 916
917 if ((part.OwnerID != destAgent) && Permissions.PropagatePermissions()) 917 if ((part.OwnerID != destAgent) && Permissions.PropagatePermissions())
918 { 918 {
919 agentItem.BasePermissions = taskItem.BasePermissions & taskItem.NextPermissions; 919 agentItem.BasePermissions = taskItem.BasePermissions & (taskItem.NextPermissions | (uint)PermissionMask.Move);
920 if (taskItem.InvType == (int)InventoryType.Object) 920 if (taskItem.InvType == (int)InventoryType.Object)
921 agentItem.CurrentPermissions = agentItem.BasePermissions & ((taskItem.CurrentPermissions & 7) << 13); 921 agentItem.CurrentPermissions = agentItem.BasePermissions & (((taskItem.CurrentPermissions & 7) << 13) | (taskItem.CurrentPermissions & (uint)PermissionMask.Move));
922 agentItem.CurrentPermissions = agentItem.BasePermissions ; 922 else
923 agentItem.CurrentPermissions = agentItem.BasePermissions & taskItem.CurrentPermissions;
923 924
924 agentItem.CurrentPermissions |= 8; 925 agentItem.CurrentPermissions |= 8;
925 agentItem.NextPermissions = taskItem.NextPermissions; 926 agentItem.NextPermissions = taskItem.NextPermissions;
926 agentItem.EveryOnePermissions = taskItem.EveryonePermissions & taskItem.NextPermissions; 927 agentItem.EveryOnePermissions = taskItem.EveryonePermissions & (taskItem.NextPermissions | (uint)PermissionMask.Move);
927 agentItem.GroupPermissions = taskItem.GroupPermissions & taskItem.NextPermissions; 928 agentItem.GroupPermissions = taskItem.GroupPermissions & taskItem.NextPermissions;
928 } 929 }
929 else 930 else
@@ -1105,13 +1106,13 @@ namespace OpenSim.Region.Framework.Scenes
1105 if (Permissions.PropagatePermissions()) 1106 if (Permissions.PropagatePermissions())
1106 { 1107 {
1107 destTaskItem.CurrentPermissions = srcTaskItem.CurrentPermissions & 1108 destTaskItem.CurrentPermissions = srcTaskItem.CurrentPermissions &
1108 srcTaskItem.NextPermissions; 1109 (srcTaskItem.NextPermissions | (uint)PermissionMask.Move);
1109 destTaskItem.GroupPermissions = srcTaskItem.GroupPermissions & 1110 destTaskItem.GroupPermissions = srcTaskItem.GroupPermissions &
1110 srcTaskItem.NextPermissions; 1111 (srcTaskItem.NextPermissions | (uint)PermissionMask.Move);
1111 destTaskItem.EveryonePermissions = srcTaskItem.EveryonePermissions & 1112 destTaskItem.EveryonePermissions = srcTaskItem.EveryonePermissions &
1112 srcTaskItem.NextPermissions; 1113 (srcTaskItem.NextPermissions | (uint)PermissionMask.Move);
1113 destTaskItem.BasePermissions = srcTaskItem.BasePermissions & 1114 destTaskItem.BasePermissions = srcTaskItem.BasePermissions &
1114 srcTaskItem.NextPermissions; 1115 (srcTaskItem.NextPermissions | (uint)PermissionMask.Move);
1115 destTaskItem.CurrentPermissions |= 8; // Slam! 1116 destTaskItem.CurrentPermissions |= 8; // Slam!
1116 } 1117 }
1117 } 1118 }
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index 81ef54f..a36800b 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -1848,9 +1848,31 @@ namespace OpenSim.Region.Framework.Scenes
1848 { 1848 {
1849 if (m_parentScene.Permissions.CanDuplicateObject(original.Children.Count, original.UUID, AgentID, original.AbsolutePosition)) 1849 if (m_parentScene.Permissions.CanDuplicateObject(original.Children.Count, original.UUID, AgentID, original.AbsolutePosition))
1850 { 1850 {
1851 SceneObjectGroup copy = original.Copy(AgentID, GroupID, true); 1851 SceneObjectGroup copy = original.Copy(true);
1852 copy.AbsolutePosition = copy.AbsolutePosition + offset; 1852 copy.AbsolutePosition = copy.AbsolutePosition + offset;
1853 1853
1854 if (original.OwnerID != AgentID)
1855 {
1856 copy.SetOwnerId(AgentID);
1857 copy.SetRootPartOwner(copy.RootPart, AgentID, GroupID);
1858
1859 List<SceneObjectPart> partList =
1860 new List<SceneObjectPart>(copy.Children.Values);
1861
1862 if (m_parentScene.Permissions.PropagatePermissions())
1863 {
1864 foreach (SceneObjectPart child in partList)
1865 {
1866 child.Inventory.ChangeInventoryOwner(AgentID);
1867 child.TriggerScriptChangedEvent(Changed.OWNER);
1868 child.ApplyNextOwnerPermissions();
1869 }
1870 }
1871
1872 copy.RootPart.ObjectSaleType = 0;
1873 copy.RootPart.SalePrice = 10;
1874 }
1875
1854 Entities.Add(copy); 1876 Entities.Add(copy);
1855 1877
1856 // Since we copy from a source group that is in selected 1878 // Since we copy from a source group that is in selected
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 7081ced..c48ce3b 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -1700,7 +1700,7 @@ namespace OpenSim.Region.Framework.Scenes
1700 "[SCENE]: Storing {0}, {1} in {2}", 1700 "[SCENE]: Storing {0}, {1} in {2}",
1701 Name, UUID, m_scene.RegionInfo.RegionName); 1701 Name, UUID, m_scene.RegionInfo.RegionName);
1702 1702
1703 SceneObjectGroup backup_group = Copy(OwnerID, GroupID, false); 1703 SceneObjectGroup backup_group = Copy(false);
1704 backup_group.RootPart.Velocity = RootPart.Velocity; 1704 backup_group.RootPart.Velocity = RootPart.Velocity;
1705 backup_group.RootPart.Acceleration = RootPart.Acceleration; 1705 backup_group.RootPart.Acceleration = RootPart.Acceleration;
1706 backup_group.RootPart.AngularVelocity = RootPart.AngularVelocity; 1706 backup_group.RootPart.AngularVelocity = RootPart.AngularVelocity;
@@ -1758,7 +1758,7 @@ namespace OpenSim.Region.Framework.Scenes
1758 /// Duplicates this object, including operations such as physics set up and attaching to the backup event. 1758 /// Duplicates this object, including operations such as physics set up and attaching to the backup event.
1759 /// </summary> 1759 /// </summary>
1760 /// <returns></returns> 1760 /// <returns></returns>
1761 public SceneObjectGroup Copy(UUID cAgentID, UUID cGroupID, bool userExposed) 1761 public SceneObjectGroup Copy(bool userExposed)
1762 { 1762 {
1763 SceneObjectGroup dupe = (SceneObjectGroup)MemberwiseClone(); 1763 SceneObjectGroup dupe = (SceneObjectGroup)MemberwiseClone();
1764 dupe.m_isBackedUp = false; 1764 dupe.m_isBackedUp = false;
@@ -1781,7 +1781,9 @@ namespace OpenSim.Region.Framework.Scenes
1781 dupe.AbsolutePosition = new Vector3(AbsolutePosition.X, AbsolutePosition.Y, AbsolutePosition.Z); 1781 dupe.AbsolutePosition = new Vector3(AbsolutePosition.X, AbsolutePosition.Y, AbsolutePosition.Z);
1782 1782
1783 if (!userExposed) 1783 if (!userExposed)
1784 {
1784 dupe.RootPart.IsAttachment = previousAttachmentStatus; 1785 dupe.RootPart.IsAttachment = previousAttachmentStatus;
1786 }
1785 1787
1786 dupe.CopyRootPart(m_rootPart, OwnerID, GroupID, userExposed); 1788 dupe.CopyRootPart(m_rootPart, OwnerID, GroupID, userExposed);
1787 dupe.m_rootPart.LinkNum = m_rootPart.LinkNum; 1789 dupe.m_rootPart.LinkNum = m_rootPart.LinkNum;
@@ -1806,16 +1808,6 @@ namespace OpenSim.Region.Framework.Scenes
1806 dupe.RootPart.DoPhysicsPropertyUpdate(dupe.RootPart.PhysActor.IsPhysical, true); 1808 dupe.RootPart.DoPhysicsPropertyUpdate(dupe.RootPart.PhysActor.IsPhysical, true);
1807 } 1809 }
1808 1810
1809 // Now we've made a copy that replaces this one, we need to
1810 // switch the owner to the person who did the copying
1811 // Second Life copies an object and duplicates the first one in it's place
1812 // So, we have to make a copy of this one, set it in it's place then set the owner on this one
1813 if (userExposed)
1814 {
1815 SetRootPartOwner(m_rootPart, cAgentID, cGroupID);
1816 m_rootPart.ScheduleFullUpdate();
1817 }
1818
1819 List<SceneObjectPart> partList; 1811 List<SceneObjectPart> partList;
1820 1812
1821 lockPartsForRead(true); 1813 lockPartsForRead(true);
@@ -1837,12 +1829,6 @@ namespace OpenSim.Region.Framework.Scenes
1837 SceneObjectPart newPart = dupe.CopyPart(part, OwnerID, GroupID, userExposed); 1829 SceneObjectPart newPart = dupe.CopyPart(part, OwnerID, GroupID, userExposed);
1838 1830
1839 newPart.LinkNum = part.LinkNum; 1831 newPart.LinkNum = part.LinkNum;
1840
1841 if (userExposed)
1842 {
1843 SetPartOwner(newPart, cAgentID, cGroupID);
1844 newPart.ScheduleFullUpdate();
1845 }
1846 } 1832 }
1847 } 1833 }
1848 1834
@@ -3911,7 +3897,7 @@ namespace OpenSim.Region.Framework.Scenes
3911 3897
3912 public virtual ISceneObject CloneForNewScene() 3898 public virtual ISceneObject CloneForNewScene()
3913 { 3899 {
3914 SceneObjectGroup sog = Copy(this.OwnerID, this.GroupID, false); 3900 SceneObjectGroup sog = Copy(false);
3915 sog.m_isDeleted = false; 3901 sog.m_isDeleted = false;
3916 return sog; 3902 return sog;
3917 } 3903 }