diff options
author | Teravus Ovares | 2008-05-24 21:13:44 +0000 |
---|---|---|
committer | Teravus Ovares | 2008-05-24 21:13:44 +0000 |
commit | cd79be569cf74c7bead86305caed1f9050d0db8c (patch) | |
tree | 2ab1d7b8222959615c8b845ba89d7ba0b09aa37c | |
parent | * Get the xml2 entities serialization representation in the archiver module (diff) | |
download | opensim-SC_OLD-cd79be569cf74c7bead86305caed1f9050d0db8c.zip opensim-SC_OLD-cd79be569cf74c7bead86305caed1f9050d0db8c.tar.gz opensim-SC_OLD-cd79be569cf74c7bead86305caed1f9050d0db8c.tar.bz2 opensim-SC_OLD-cd79be569cf74c7bead86305caed1f9050d0db8c.tar.xz |
* Fixes endless loop in the Land Module when selecting any object.
* Fixes returning objects when the object owner hasn't been in the simulator since the simulator started up last.
4 files changed, 110 insertions, 75 deletions
diff --git a/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs b/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs index 5bc28f7..29e3143 100644 --- a/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs | |||
@@ -582,6 +582,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land | |||
582 | 582 | ||
583 | public void UpdateLandPrimCounts() | 583 | public void UpdateLandPrimCounts() |
584 | { | 584 | { |
585 | ResetAllLandPrimCounts(); | ||
585 | foreach (EntityBase obj in m_scene.Entities.Values) | 586 | foreach (EntityBase obj in m_scene.Entities.Values) |
586 | { | 587 | { |
587 | if (obj is SceneObjectGroup) | 588 | if (obj is SceneObjectGroup) |
@@ -589,6 +590,8 @@ namespace OpenSim.Region.Environment.Modules.World.Land | |||
589 | m_scene.EventManager.TriggerParcelPrimCountAdd((SceneObjectGroup)obj); | 590 | m_scene.EventManager.TriggerParcelPrimCountAdd((SceneObjectGroup)obj); |
590 | } | 591 | } |
591 | } | 592 | } |
593 | FinalizeLandPrimCountUpdate(); | ||
594 | landPrimCountTainted = false; | ||
592 | } | 595 | } |
593 | 596 | ||
594 | public void PerformParcelPrimCountUpdate() | 597 | public void PerformParcelPrimCountUpdate() |
diff --git a/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs b/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs index 1a83f60..2f4f971 100644 --- a/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs +++ b/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs | |||
@@ -751,12 +751,15 @@ namespace OpenSim.Region.Environment.Modules.World.Land | |||
751 | landData.ownerPrims = 0; | 751 | landData.ownerPrims = 0; |
752 | landData.otherPrims = 0; | 752 | landData.otherPrims = 0; |
753 | landData.selectedPrims = 0; | 753 | landData.selectedPrims = 0; |
754 | |||
755 | |||
754 | lock (primsOverMe) | 756 | lock (primsOverMe) |
755 | primsOverMe.Clear(); | 757 | primsOverMe.Clear(); |
756 | } | 758 | } |
757 | 759 | ||
758 | public void addPrimToCount(SceneObjectGroup obj) | 760 | public void addPrimToCount(SceneObjectGroup obj) |
759 | { | 761 | { |
762 | |||
760 | LLUUID prim_owner = obj.OwnerID; | 763 | LLUUID prim_owner = obj.OwnerID; |
761 | int prim_count = obj.PrimCount; | 764 | int prim_count = obj.PrimCount; |
762 | 765 | ||
diff --git a/OpenSim/Region/Environment/Scenes/EventManager.cs b/OpenSim/Region/Environment/Scenes/EventManager.cs index 6c714f8..a3f5d2f 100644 --- a/OpenSim/Region/Environment/Scenes/EventManager.cs +++ b/OpenSim/Region/Environment/Scenes/EventManager.cs | |||
@@ -438,6 +438,16 @@ namespace OpenSim.Region.Environment.Scenes | |||
438 | } | 438 | } |
439 | } | 439 | } |
440 | 440 | ||
441 | public void TriggerObjectBeingRemovedFromScene(SceneObjectGroup obj) | ||
442 | { | ||
443 | handlerObjectBeingRemovedFromScene = OnObjectBeingRemovedFromScene; | ||
444 | if (handlerObjectBeingRemovedFromScene != null) | ||
445 | { | ||
446 | handlerObjectBeingRemovedFromScene(obj); | ||
447 | |||
448 | } | ||
449 | } | ||
450 | |||
441 | public void TriggerShutdown() | 451 | public void TriggerShutdown() |
442 | { | 452 | { |
443 | handlerShutdown = OnShutdown; | 453 | handlerShutdown = OnShutdown; |
@@ -725,16 +735,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
725 | } | 735 | } |
726 | } | 736 | } |
727 | 737 | ||
728 | public void TriggerObjectBeingRemovedFromScene(SceneObjectGroup obj) | 738 | |
729 | { | ||
730 | handlerObjectBeingRemovedFromScene = OnObjectBeingRemovedFromScene; | ||
731 | if (handlerObjectBeingRemovedFromScene != null) | ||
732 | { | ||
733 | handlerObjectBeingRemovedFromScene(obj); | ||
734 | |||
735 | } | ||
736 | } | ||
737 | |||
738 | 739 | ||
739 | public void TriggerRequestParcelPrimCountUpdate() | 740 | public void TriggerRequestParcelPrimCountUpdate() |
740 | { | 741 | { |
diff --git a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs index 850962d..409ee1e 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs | |||
@@ -1675,6 +1675,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
1675 | } | 1675 | } |
1676 | public virtual bool returnObjects(SceneObjectGroup[] returnobjects, LLUUID AgentId) | 1676 | public virtual bool returnObjects(SceneObjectGroup[] returnobjects, LLUUID AgentId) |
1677 | { | 1677 | { |
1678 | string message = ""; | ||
1678 | if (returnobjects.Length <= 0) | 1679 | if (returnobjects.Length <= 0) |
1679 | return false; | 1680 | return false; |
1680 | 1681 | ||
@@ -1692,13 +1693,20 @@ namespace OpenSim.Region.Environment.Scenes | |||
1692 | 1693 | ||
1693 | 1694 | ||
1694 | 1695 | ||
1695 | bool permissionToDelete = false; | 1696 | bool permissionToDelete = false; |
1696 | 1697 | ||
1697 | for (int i = 0; i < returnobjects.Length; i++) | 1698 | for (int i = 0; i < returnobjects.Length; i++) |
1699 | { | ||
1700 | CachedUserInfo userInfo = | ||
1701 | CommsManager.UserProfileCacheService.GetUserDetails(returnobjects[i].OwnerID); | ||
1702 | if (userInfo == null) | ||
1703 | { | ||
1704 | CommsManager.UserProfileCacheService.AddNewUser(returnobjects[i].OwnerID); | ||
1705 | |||
1706 | } | ||
1707 | if (userInfo != null) | ||
1698 | { | 1708 | { |
1699 | CachedUserInfo userInfo = | 1709 | if (userInfo.HasInventory) |
1700 | CommsManager.UserProfileCacheService.GetUserDetails(returnobjects[i].OwnerID); | ||
1701 | if (userInfo != null) | ||
1702 | { | 1710 | { |
1703 | LLUUID folderID = LLUUID.Zero; | 1711 | LLUUID folderID = LLUUID.Zero; |
1704 | 1712 | ||
@@ -1716,76 +1724,96 @@ namespace OpenSim.Region.Environment.Scenes | |||
1716 | { | 1724 | { |
1717 | folderID = userInfo.RootFolder.ID; | 1725 | folderID = userInfo.RootFolder.ID; |
1718 | } | 1726 | } |
1719 | permissionToDelete = ExternalChecks.ExternalChecksCanDeleteObject(returnobjects[i].UUID, AgentId); | 1727 | permissionToDelete = ExternalChecks.ExternalChecksCanDeleteObject(returnobjects[i].UUID, AgentId); |
1728 | |||
1729 | // If the user doesn't have permission, go on to the next one. | ||
1730 | if (!permissionToDelete) | ||
1731 | continue; | ||
1732 | |||
1733 | string sceneObjectXml = returnobjects[i].ToXmlString2(); | ||
1734 | AssetBase asset = CreateAsset( | ||
1735 | returnobjects[i].GetPartName(returnobjects[i].LocalId), | ||
1736 | returnobjects[i].GetPartDescription(returnobjects[i].LocalId), | ||
1737 | (sbyte)InventoryType.Object, | ||
1738 | (sbyte)AssetType.Object, | ||
1739 | Helpers.StringToField(sceneObjectXml)); | ||
1740 | AssetCache.AddAsset(asset); | ||
1720 | 1741 | ||
1721 | // If the user doesn't have permission, go on to the next one. | 1742 | InventoryItemBase item = new InventoryItemBase(); |
1722 | if (!permissionToDelete) | 1743 | item.Creator = returnobjects[i].RootPart.CreatorID; |
1723 | continue; | 1744 | item.Owner = returnobjects[i].OwnerID; |
1745 | item.ID = LLUUID.Random(); | ||
1746 | item.AssetID = asset.FullID; | ||
1747 | item.Description = asset.Description; | ||
1748 | item.Name = asset.Name; | ||
1749 | item.AssetType = asset.Type; | ||
1750 | item.InvType = asset.InvType; | ||
1751 | item.Folder = folderID; | ||
1752 | if ((AgentId != returnobjects[i].RootPart.OwnerID) && ExternalChecks.ExternalChecksPropagatePermissions()) | ||
1753 | { | ||
1754 | uint perms = returnobjects[i].GetEffectivePermissions(); | ||
1755 | uint nextPerms = (perms & 7) << 13; | ||
1756 | if ((nextPerms & (uint)PermissionMask.Copy) == 0) | ||
1757 | perms &= ~(uint)PermissionMask.Copy; | ||
1758 | if ((nextPerms & (uint)PermissionMask.Transfer) == 0) | ||
1759 | perms &= ~(uint)PermissionMask.Transfer; | ||
1760 | if ((nextPerms & (uint)PermissionMask.Modify) == 0) | ||
1761 | perms &= ~(uint)PermissionMask.Modify; | ||
1762 | |||
1763 | item.BasePermissions = perms & returnobjects[i].RootPart.NextOwnerMask; | ||
1764 | item.CurrentPermissions = item.BasePermissions; | ||
1765 | item.NextPermissions = returnobjects[i].RootPart.NextOwnerMask; | ||
1766 | item.EveryOnePermissions = returnobjects[i].RootPart.EveryoneMask & returnobjects[i].RootPart.NextOwnerMask; | ||
1767 | item.CurrentPermissions |= 8; // Slam! | ||
1768 | } | ||
1769 | else | ||
1770 | { | ||
1771 | item.BasePermissions = returnobjects[i].GetEffectivePermissions(); | ||
1772 | item.CurrentPermissions = returnobjects[i].GetEffectivePermissions(); | ||
1773 | item.NextPermissions = returnobjects[i].RootPart.NextOwnerMask; | ||
1774 | item.EveryOnePermissions = returnobjects[i].RootPart.EveryoneMask; | ||
1775 | } | ||
1724 | 1776 | ||
1725 | string sceneObjectXml = returnobjects[i].ToXmlString2(); | 1777 | // TODO: add the new fields (Flags, Sale info, etc) |
1726 | AssetBase asset = CreateAsset( | ||
1727 | returnobjects[i].GetPartName(returnobjects[i].LocalId), | ||
1728 | returnobjects[i].GetPartDescription(returnobjects[i].LocalId), | ||
1729 | (sbyte)InventoryType.Object, | ||
1730 | (sbyte)AssetType.Object, | ||
1731 | Helpers.StringToField(sceneObjectXml)); | ||
1732 | AssetCache.AddAsset(asset); | ||
1733 | 1778 | ||
1734 | InventoryItemBase item = new InventoryItemBase(); | 1779 | userInfo.AddItem(item); |
1735 | item.Creator = returnobjects[i].RootPart.CreatorID; | ||
1736 | item.Owner = returnobjects[i].OwnerID; | ||
1737 | item.ID = LLUUID.Random(); | ||
1738 | item.AssetID = asset.FullID; | ||
1739 | item.Description = asset.Description; | ||
1740 | item.Name = asset.Name; | ||
1741 | item.AssetType = asset.Type; | ||
1742 | item.InvType = asset.InvType; | ||
1743 | item.Folder = folderID; | ||
1744 | if ((AgentId != returnobjects[i].RootPart.OwnerID) && ExternalChecks.ExternalChecksPropagatePermissions()) | ||
1745 | { | ||
1746 | uint perms = returnobjects[i].GetEffectivePermissions(); | ||
1747 | uint nextPerms = (perms & 7) << 13; | ||
1748 | if ((nextPerms & (uint)PermissionMask.Copy) == 0) | ||
1749 | perms &= ~(uint)PermissionMask.Copy; | ||
1750 | if ((nextPerms & (uint)PermissionMask.Transfer) == 0) | ||
1751 | perms &= ~(uint)PermissionMask.Transfer; | ||
1752 | if ((nextPerms & (uint)PermissionMask.Modify) == 0) | ||
1753 | perms &= ~(uint)PermissionMask.Modify; | ||
1754 | |||
1755 | item.BasePermissions = perms & returnobjects[i].RootPart.NextOwnerMask; | ||
1756 | item.CurrentPermissions = item.BasePermissions; | ||
1757 | item.NextPermissions = returnobjects[i].RootPart.NextOwnerMask; | ||
1758 | item.EveryOnePermissions = returnobjects[i].RootPart.EveryoneMask & returnobjects[i].RootPart.NextOwnerMask; | ||
1759 | item.CurrentPermissions |= 8; // Slam! | ||
1760 | } | ||
1761 | else | ||
1762 | { | ||
1763 | item.BasePermissions = returnobjects[i].GetEffectivePermissions(); | ||
1764 | item.CurrentPermissions = returnobjects[i].GetEffectivePermissions(); | ||
1765 | item.NextPermissions = returnobjects[i].RootPart.NextOwnerMask; | ||
1766 | item.EveryOnePermissions = returnobjects[i].RootPart.EveryoneMask; | ||
1767 | } | ||
1768 | 1780 | ||
1769 | // TODO: add the new fields (Flags, Sale info, etc) | 1781 | ScenePresence notifyUser = GetScenePresence(item.Owner); |
1782 | if (notifyUser != null) | ||
1783 | { | ||
1784 | notifyUser.ControllingClient.SendInventoryItemCreateUpdate(item); | ||
1785 | } | ||
1770 | 1786 | ||
1771 | userInfo.AddItem(item); | 1787 | SceneObjectGroup ObjectDeleting = returnobjects[i]; |
1772 | 1788 | ||
1773 | ScenePresence notifyUser = GetScenePresence(item.Owner); | 1789 | returnobjects[i] = null; |
1774 | if (notifyUser != null) | 1790 | |
1791 | DeleteSceneObjectGroup(ObjectDeleting); | ||
1792 | ObjectDeleting = null; | ||
1793 | } | ||
1794 | else | ||
1775 | { | 1795 | { |
1776 | notifyUser.ControllingClient.SendInventoryItemCreateUpdate(item); | 1796 | CommsManager.UserProfileCacheService.RequestInventoryForUser(returnobjects[i].OwnerID); |
1797 | message = "Still waiting on the inventory service, some of the items won't be returned until the inventory services completes it's task. Try again shortly."; | ||
1777 | } | 1798 | } |
1778 | |||
1779 | SceneObjectGroup ObjectDeleting = returnobjects[i]; | ||
1780 | |||
1781 | returnobjects[i] = null; | ||
1782 | |||
1783 | DeleteSceneObjectGroup(ObjectDeleting); | ||
1784 | ObjectDeleting = null; | ||
1785 | } | 1799 | } |
1786 | return true; | 1800 | else |
1801 | { | ||
1802 | message = "Still waiting on the inventory service, some of the items won't be returned until the inventory services completes it's task. Try again shortly."; | ||
1803 | } | ||
1804 | //return true; | ||
1787 | } | 1805 | } |
1788 | return false; | 1806 | |
1807 | if (message.Length != 0) | ||
1808 | { | ||
1809 | ScenePresence returningavatar = GetScenePresence(AgentId); | ||
1810 | if (returningavatar != null) | ||
1811 | { | ||
1812 | returningavatar.ControllingClient.SendAlertMessage(message); | ||
1813 | } | ||
1814 | return false; | ||
1815 | } | ||
1816 | return true; | ||
1789 | 1817 | ||
1790 | } | 1818 | } |
1791 | 1819 | ||