diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Prioritizer.cs | 3 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 23 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneGraph.cs | 24 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | 24 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs | 22 |
5 files changed, 55 insertions, 41 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Prioritizer.cs b/OpenSim/Region/Framework/Scenes/Prioritizer.cs index 7b7677b..de3c360 100644 --- a/OpenSim/Region/Framework/Scenes/Prioritizer.cs +++ b/OpenSim/Region/Framework/Scenes/Prioritizer.cs | |||
@@ -52,6 +52,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
52 | public double GetUpdatePriority(IClientAPI client, ISceneEntity entity) | 52 | public double GetUpdatePriority(IClientAPI client, ISceneEntity entity) |
53 | { | 53 | { |
54 | double priority = 0; | 54 | double priority = 0; |
55 | |||
56 | if (entity == null) | ||
57 | return 100000; | ||
55 | 58 | ||
56 | switch (m_scene.UpdatePrioritizationScheme) | 59 | switch (m_scene.UpdatePrioritizationScheme) |
57 | { | 60 | { |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 64bdc99..9278164 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | |||
@@ -385,9 +385,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
385 | if (Permissions.PropagatePermissions() && recipient != senderId) | 385 | if (Permissions.PropagatePermissions() && recipient != senderId) |
386 | { | 386 | { |
387 | // First, make sore base is limited to the next perms | 387 | // First, make sore base is limited to the next perms |
388 | itemCopy.BasePermissions = item.BasePermissions & item.NextPermissions; | 388 | itemCopy.BasePermissions = item.BasePermissions & (item.NextPermissions | (uint)PermissionMask.Move); |
389 | // By default, current equals base | 389 | // By default, current equals base |
390 | itemCopy.CurrentPermissions = itemCopy.BasePermissions; | 390 | itemCopy.CurrentPermissions = itemCopy.BasePermissions & item.CurrentPermissions; |
391 | 391 | ||
392 | // If this is an object, replace current perms | 392 | // If this is an object, replace current perms |
393 | // with folded perms | 393 | // with folded perms |
@@ -398,7 +398,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
398 | } | 398 | } |
399 | 399 | ||
400 | // Ensure there is no escalation | 400 | // Ensure there is no escalation |
401 | itemCopy.CurrentPermissions &= item.NextPermissions; | 401 | itemCopy.CurrentPermissions &= (item.NextPermissions | (uint)PermissionMask.Move); |
402 | 402 | ||
403 | // Need slam bit on xfer | 403 | // Need slam bit on xfer |
404 | itemCopy.CurrentPermissions |= 8; | 404 | itemCopy.CurrentPermissions |= 8; |
@@ -897,14 +897,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
897 | 897 | ||
898 | if ((part.OwnerID != destAgent) && Permissions.PropagatePermissions()) | 898 | if ((part.OwnerID != destAgent) && Permissions.PropagatePermissions()) |
899 | { | 899 | { |
900 | agentItem.BasePermissions = taskItem.BasePermissions & taskItem.NextPermissions; | 900 | agentItem.BasePermissions = taskItem.BasePermissions & (taskItem.NextPermissions | (uint)PermissionMask.Move); |
901 | if (taskItem.InvType == (int)InventoryType.Object) | 901 | if (taskItem.InvType == (int)InventoryType.Object) |
902 | agentItem.CurrentPermissions = agentItem.BasePermissions & ((taskItem.CurrentPermissions & 7) << 13); | 902 | agentItem.CurrentPermissions = agentItem.BasePermissions & (((taskItem.CurrentPermissions & 7) << 13) | (taskItem.CurrentPermissions & (uint)PermissionMask.Move)); |
903 | agentItem.CurrentPermissions = agentItem.BasePermissions ; | 903 | else |
904 | agentItem.CurrentPermissions = agentItem.BasePermissions & taskItem.CurrentPermissions; | ||
904 | 905 | ||
905 | agentItem.CurrentPermissions |= 8; | 906 | agentItem.CurrentPermissions |= 8; |
906 | agentItem.NextPermissions = taskItem.NextPermissions; | 907 | agentItem.NextPermissions = taskItem.NextPermissions; |
907 | agentItem.EveryOnePermissions = taskItem.EveryonePermissions & taskItem.NextPermissions; | 908 | agentItem.EveryOnePermissions = taskItem.EveryonePermissions & (taskItem.NextPermissions | (uint)PermissionMask.Move); |
908 | agentItem.GroupPermissions = taskItem.GroupPermissions & taskItem.NextPermissions; | 909 | agentItem.GroupPermissions = taskItem.GroupPermissions & taskItem.NextPermissions; |
909 | } | 910 | } |
910 | else | 911 | else |
@@ -1086,13 +1087,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
1086 | if (Permissions.PropagatePermissions()) | 1087 | if (Permissions.PropagatePermissions()) |
1087 | { | 1088 | { |
1088 | destTaskItem.CurrentPermissions = srcTaskItem.CurrentPermissions & | 1089 | destTaskItem.CurrentPermissions = srcTaskItem.CurrentPermissions & |
1089 | srcTaskItem.NextPermissions; | 1090 | (srcTaskItem.NextPermissions | (uint)PermissionMask.Move); |
1090 | destTaskItem.GroupPermissions = srcTaskItem.GroupPermissions & | 1091 | destTaskItem.GroupPermissions = srcTaskItem.GroupPermissions & |
1091 | srcTaskItem.NextPermissions; | 1092 | (srcTaskItem.NextPermissions | (uint)PermissionMask.Move); |
1092 | destTaskItem.EveryonePermissions = srcTaskItem.EveryonePermissions & | 1093 | destTaskItem.EveryonePermissions = srcTaskItem.EveryonePermissions & |
1093 | srcTaskItem.NextPermissions; | 1094 | (srcTaskItem.NextPermissions | (uint)PermissionMask.Move); |
1094 | destTaskItem.BasePermissions = srcTaskItem.BasePermissions & | 1095 | destTaskItem.BasePermissions = srcTaskItem.BasePermissions & |
1095 | srcTaskItem.NextPermissions; | 1096 | (srcTaskItem.NextPermissions | (uint)PermissionMask.Move); |
1096 | destTaskItem.CurrentPermissions |= 8; // Slam! | 1097 | destTaskItem.CurrentPermissions |= 8; // Slam! |
1097 | } | 1098 | } |
1098 | } | 1099 | } |
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index 240c688..40332a6 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs | |||
@@ -1747,9 +1747,31 @@ namespace OpenSim.Region.Framework.Scenes | |||
1747 | { | 1747 | { |
1748 | if (m_parentScene.Permissions.CanDuplicateObject(original.Children.Count, original.UUID, AgentID, original.AbsolutePosition)) | 1748 | if (m_parentScene.Permissions.CanDuplicateObject(original.Children.Count, original.UUID, AgentID, original.AbsolutePosition)) |
1749 | { | 1749 | { |
1750 | SceneObjectGroup copy = original.Copy(AgentID, GroupID, true); | 1750 | SceneObjectGroup copy = original.Copy(true); |
1751 | copy.AbsolutePosition = copy.AbsolutePosition + offset; | 1751 | copy.AbsolutePosition = copy.AbsolutePosition + offset; |
1752 | 1752 | ||
1753 | if (original.OwnerID != AgentID) | ||
1754 | { | ||
1755 | copy.SetOwnerId(AgentID); | ||
1756 | copy.SetRootPartOwner(copy.RootPart, AgentID, GroupID); | ||
1757 | |||
1758 | List<SceneObjectPart> partList = | ||
1759 | new List<SceneObjectPart>(copy.Children.Values); | ||
1760 | |||
1761 | if (m_parentScene.Permissions.PropagatePermissions()) | ||
1762 | { | ||
1763 | foreach (SceneObjectPart child in partList) | ||
1764 | { | ||
1765 | child.Inventory.ChangeInventoryOwner(AgentID); | ||
1766 | child.TriggerScriptChangedEvent(Changed.OWNER); | ||
1767 | child.ApplyNextOwnerPermissions(); | ||
1768 | } | ||
1769 | } | ||
1770 | |||
1771 | copy.RootPart.ObjectSaleType = 0; | ||
1772 | copy.RootPart.SalePrice = 10; | ||
1773 | } | ||
1774 | |||
1753 | Entities.Add(copy); | 1775 | Entities.Add(copy); |
1754 | 1776 | ||
1755 | // Since we copy from a source group that is in selected | 1777 | // 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 e23f39f..1ca390a 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -1472,7 +1472,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1472 | "[SCENE]: Storing {0}, {1} in {2}", | 1472 | "[SCENE]: Storing {0}, {1} in {2}", |
1473 | Name, UUID, m_scene.RegionInfo.RegionName); | 1473 | Name, UUID, m_scene.RegionInfo.RegionName); |
1474 | 1474 | ||
1475 | SceneObjectGroup backup_group = Copy(OwnerID, GroupID, false); | 1475 | SceneObjectGroup backup_group = Copy(false); |
1476 | backup_group.RootPart.Velocity = RootPart.Velocity; | 1476 | backup_group.RootPart.Velocity = RootPart.Velocity; |
1477 | backup_group.RootPart.Acceleration = RootPart.Acceleration; | 1477 | backup_group.RootPart.Acceleration = RootPart.Acceleration; |
1478 | backup_group.RootPart.AngularVelocity = RootPart.AngularVelocity; | 1478 | backup_group.RootPart.AngularVelocity = RootPart.AngularVelocity; |
@@ -1528,7 +1528,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1528 | /// Duplicates this object, including operations such as physics set up and attaching to the backup event. | 1528 | /// Duplicates this object, including operations such as physics set up and attaching to the backup event. |
1529 | /// </summary> | 1529 | /// </summary> |
1530 | /// <returns></returns> | 1530 | /// <returns></returns> |
1531 | public SceneObjectGroup Copy(UUID cAgentID, UUID cGroupID, bool userExposed) | 1531 | public SceneObjectGroup Copy(bool userExposed) |
1532 | { | 1532 | { |
1533 | SceneObjectGroup dupe = (SceneObjectGroup)MemberwiseClone(); | 1533 | SceneObjectGroup dupe = (SceneObjectGroup)MemberwiseClone(); |
1534 | dupe.m_isBackedUp = false; | 1534 | dupe.m_isBackedUp = false; |
@@ -1551,7 +1551,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
1551 | dupe.AbsolutePosition = new Vector3(AbsolutePosition.X, AbsolutePosition.Y, AbsolutePosition.Z); | 1551 | dupe.AbsolutePosition = new Vector3(AbsolutePosition.X, AbsolutePosition.Y, AbsolutePosition.Z); |
1552 | 1552 | ||
1553 | if (!userExposed) | 1553 | if (!userExposed) |
1554 | { | ||
1554 | dupe.RootPart.IsAttachment = previousAttachmentStatus; | 1555 | dupe.RootPart.IsAttachment = previousAttachmentStatus; |
1556 | } | ||
1555 | 1557 | ||
1556 | dupe.CopyRootPart(m_rootPart, OwnerID, GroupID, userExposed); | 1558 | dupe.CopyRootPart(m_rootPart, OwnerID, GroupID, userExposed); |
1557 | dupe.m_rootPart.LinkNum = m_rootPart.LinkNum; | 1559 | dupe.m_rootPart.LinkNum = m_rootPart.LinkNum; |
@@ -1576,16 +1578,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1576 | dupe.RootPart.DoPhysicsPropertyUpdate(dupe.RootPart.PhysActor.IsPhysical, true); | 1578 | dupe.RootPart.DoPhysicsPropertyUpdate(dupe.RootPart.PhysActor.IsPhysical, true); |
1577 | } | 1579 | } |
1578 | 1580 | ||
1579 | // Now we've made a copy that replaces this one, we need to | ||
1580 | // switch the owner to the person who did the copying | ||
1581 | // Second Life copies an object and duplicates the first one in it's place | ||
1582 | // So, we have to make a copy of this one, set it in it's place then set the owner on this one | ||
1583 | if (userExposed) | ||
1584 | { | ||
1585 | SetRootPartOwner(m_rootPart, cAgentID, cGroupID); | ||
1586 | m_rootPart.ScheduleFullUpdate(); | ||
1587 | } | ||
1588 | |||
1589 | List<SceneObjectPart> partList; | 1581 | List<SceneObjectPart> partList; |
1590 | 1582 | ||
1591 | lock (m_parts) | 1583 | lock (m_parts) |
@@ -1606,12 +1598,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1606 | SceneObjectPart newPart = dupe.CopyPart(part, OwnerID, GroupID, userExposed); | 1598 | SceneObjectPart newPart = dupe.CopyPart(part, OwnerID, GroupID, userExposed); |
1607 | 1599 | ||
1608 | newPart.LinkNum = part.LinkNum; | 1600 | newPart.LinkNum = part.LinkNum; |
1609 | |||
1610 | if (userExposed) | ||
1611 | { | ||
1612 | SetPartOwner(newPart, cAgentID, cGroupID); | ||
1613 | newPart.ScheduleFullUpdate(); | ||
1614 | } | ||
1615 | } | 1601 | } |
1616 | } | 1602 | } |
1617 | 1603 | ||
@@ -3595,7 +3581,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3595 | 3581 | ||
3596 | public virtual ISceneObject CloneForNewScene() | 3582 | public virtual ISceneObject CloneForNewScene() |
3597 | { | 3583 | { |
3598 | SceneObjectGroup sog = Copy(this.OwnerID, this.GroupID, false); | 3584 | SceneObjectGroup sog = Copy(false); |
3599 | sog.m_isDeleted = false; | 3585 | sog.m_isDeleted = false; |
3600 | return sog; | 3586 | return sog; |
3601 | } | 3587 | } |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs index 866bb6e..3a8f168 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs | |||
@@ -31,6 +31,7 @@ using System.IO; | |||
31 | using System.Collections.Generic; | 31 | using System.Collections.Generic; |
32 | using System.Collections; | 32 | using System.Collections; |
33 | using System.Reflection; | 33 | using System.Reflection; |
34 | using System.Threading; | ||
34 | using OpenMetaverse; | 35 | using OpenMetaverse; |
35 | using log4net; | 36 | using log4net; |
36 | using OpenSim.Framework; | 37 | using OpenSim.Framework; |
@@ -200,6 +201,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
200 | if ((int)InventoryType.LSL == item.InvType) | 201 | if ((int)InventoryType.LSL == item.InvType) |
201 | { | 202 | { |
202 | CreateScriptInstance(item, startParam, postOnRez, engine, stateSource); | 203 | CreateScriptInstance(item, startParam, postOnRez, engine, stateSource); |
204 | Thread.Sleep(10); // workaround for Mono cpu utilization > 100% bug | ||
203 | } | 205 | } |
204 | } | 206 | } |
205 | } | 207 | } |
@@ -257,7 +259,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
257 | // m_log.InfoFormat( | 259 | // m_log.InfoFormat( |
258 | // "[PRIM INVENTORY]: " + | 260 | // "[PRIM INVENTORY]: " + |
259 | // "Starting script {0}, {1} in prim {2}, {3}", | 261 | // "Starting script {0}, {1} in prim {2}, {3}", |
260 | // item.Name, item.ItemID, Name, UUID); | 262 | // item.Name, item.ItemID, m_part.Name, m_part.UUID); |
261 | 263 | ||
262 | if (!m_part.ParentGroup.Scene.Permissions.CanRunScript(item.ItemID, m_part.UUID, item.OwnerID)) | 264 | if (!m_part.ParentGroup.Scene.Permissions.CanRunScript(item.ItemID, m_part.UUID, item.OwnerID)) |
263 | return; | 265 | return; |
@@ -293,20 +295,20 @@ namespace OpenSim.Region.Framework.Scenes | |||
293 | } | 295 | } |
294 | else | 296 | else |
295 | { | 297 | { |
296 | if (m_part.ParentGroup.m_savedScriptState != null) | ||
297 | RestoreSavedScriptState(item.OldItemID, item.ItemID); | ||
298 | |||
299 | lock (m_items) | 298 | lock (m_items) |
300 | { | 299 | { |
300 | if (m_part.ParentGroup.m_savedScriptState != null) | ||
301 | RestoreSavedScriptState(item.OldItemID, item.ItemID); | ||
302 | |||
301 | m_items[item.ItemID].PermsMask = 0; | 303 | m_items[item.ItemID].PermsMask = 0; |
302 | m_items[item.ItemID].PermsGranter = UUID.Zero; | 304 | m_items[item.ItemID].PermsGranter = UUID.Zero; |
305 | |||
306 | string script = Utils.BytesToString(asset.Data); | ||
307 | m_part.ParentGroup.Scene.EventManager.TriggerRezScript( | ||
308 | m_part.LocalId, item.ItemID, script, startParam, postOnRez, engine, stateSource); | ||
309 | m_part.ParentGroup.AddActiveScriptCount(1); | ||
310 | m_part.ScheduleFullUpdate(); | ||
303 | } | 311 | } |
304 | |||
305 | string script = Utils.BytesToString(asset.Data); | ||
306 | m_part.ParentGroup.Scene.EventManager.TriggerRezScript( | ||
307 | m_part.LocalId, item.ItemID, script, startParam, postOnRez, engine, stateSource); | ||
308 | m_part.ParentGroup.AddActiveScriptCount(1); | ||
309 | m_part.ScheduleFullUpdate(); | ||
310 | } | 312 | } |
311 | } | 313 | } |
312 | } | 314 | } |