aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Environment')
-rw-r--r--OpenSim/Region/Environment/Interfaces/ILandChannel.cs1
-rw-r--r--OpenSim/Region/Environment/Interfaces/ILandObject.cs2
-rw-r--r--OpenSim/Region/Environment/Modules/World/Land/LandChannel.cs7
-rw-r--r--OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs30
-rw-r--r--OpenSim/Region/Environment/Modules/World/Land/LandObject.cs86
-rw-r--r--OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs1
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.Inventory.cs51
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.cs1
8 files changed, 132 insertions, 47 deletions
diff --git a/OpenSim/Region/Environment/Interfaces/ILandChannel.cs b/OpenSim/Region/Environment/Interfaces/ILandChannel.cs
index f370ee5..6c53177 100644
--- a/OpenSim/Region/Environment/Interfaces/ILandChannel.cs
+++ b/OpenSim/Region/Environment/Interfaces/ILandChannel.cs
@@ -41,5 +41,6 @@ namespace OpenSim.Region.Environment.Interfaces
41 bool IsLandPrimCountTainted(); 41 bool IsLandPrimCountTainted();
42 bool IsForcefulBansAllowed(); 42 bool IsForcefulBansAllowed();
43 void UpdateLandObject(int localID, LandData data); 43 void UpdateLandObject(int localID, LandData data);
44 void ReturnObjectsInParcel(int localID, uint returnType, LLUUID[] agentIDs, LLUUID[] taskIDs, IClientAPI remoteClient);
44 } 45 }
45} 46}
diff --git a/OpenSim/Region/Environment/Interfaces/ILandObject.cs b/OpenSim/Region/Environment/Interfaces/ILandObject.cs
index 25c51de..4368493 100644
--- a/OpenSim/Region/Environment/Interfaces/ILandObject.cs
+++ b/OpenSim/Region/Environment/Interfaces/ILandObject.cs
@@ -64,7 +64,7 @@ namespace OpenSim.Region.Environment.Interfaces
64 void sendForceObjectSelect(int local_id, int request_type, IClientAPI remote_client); 64 void sendForceObjectSelect(int local_id, int request_type, IClientAPI remote_client);
65 void sendLandObjectOwners(IClientAPI remote_client); 65 void sendLandObjectOwners(IClientAPI remote_client);
66 void returnObject(SceneObjectGroup obj); 66 void returnObject(SceneObjectGroup obj);
67 void returnLandObjects(int type, LLUUID owner); 67 void returnLandObjects(uint type, LLUUID[] owners, IClientAPI remote_client);
68 void resetLandPrimCounts(); 68 void resetLandPrimCounts();
69 void addPrimToCount(SceneObjectGroup obj); 69 void addPrimToCount(SceneObjectGroup obj);
70 void removePrimFromCount(SceneObjectGroup obj); 70 void removePrimFromCount(SceneObjectGroup obj);
diff --git a/OpenSim/Region/Environment/Modules/World/Land/LandChannel.cs b/OpenSim/Region/Environment/Modules/World/Land/LandChannel.cs
index 77c70a8..0b77b23 100644
--- a/OpenSim/Region/Environment/Modules/World/Land/LandChannel.cs
+++ b/OpenSim/Region/Environment/Modules/World/Land/LandChannel.cs
@@ -142,6 +142,13 @@ namespace OpenSim.Region.Environment.Modules.World.Land
142 m_landManagementModule.UpdateLandObject(localID, data); 142 m_landManagementModule.UpdateLandObject(localID, data);
143 } 143 }
144 } 144 }
145 public void ReturnObjectsInParcel(int localID, uint returnType, LLUUID[] agentIDs, LLUUID[] taskIDs, IClientAPI remoteClient)
146 {
147 if (m_landManagementModule != null)
148 {
149 m_landManagementModule.ReturnObjectsInParcel(localID, returnType, agentIDs, taskIDs, remoteClient);
150 }
151 }
145 #endregion 152 #endregion
146 153
147 } 154 }
diff --git a/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs b/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs
index 7163769..5bc28f7 100644
--- a/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs
+++ b/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs
@@ -902,7 +902,17 @@ namespace OpenSim.Region.Environment.Modules.World.Land
902 902
903 public void handleParcelObjectOwnersRequest(int local_id, IClientAPI remote_client) 903 public void handleParcelObjectOwnersRequest(int local_id, IClientAPI remote_client)
904 { 904 {
905 landList[local_id].sendLandObjectOwners(remote_client); 905 lock (landList)
906 {
907 if (landList.ContainsKey(local_id))
908 {
909 landList[local_id].sendLandObjectOwners(remote_client);
910 }
911 else
912 {
913 System.Console.WriteLine("[PARCEL]: Invalid land object passed for parcel object owner request");
914 }
915 }
906 } 916 }
907 917
908 public void handleParcelAbandonRequest(int local_id, IClientAPI remote_client) 918 public void handleParcelAbandonRequest(int local_id, IClientAPI remote_client)
@@ -1004,6 +1014,24 @@ namespace OpenSim.Region.Environment.Modules.World.Land
1004 AddLandObject(new_land); 1014 AddLandObject(new_land);
1005 } 1015 }
1006 1016
1017 public void ReturnObjectsInParcel(int localID, uint returnType, LLUUID[] agentIDs, LLUUID[] taskIDs, IClientAPI remoteClient)
1018 {
1019 ILandObject selectedParcel = null;
1020 lock (landList)
1021 {
1022 if (landList.ContainsKey(localID))
1023 selectedParcel = landList[localID];
1024 }
1025 if (selectedParcel == null)
1026 return;
1027
1028 if (returnType == 16) // parcel return
1029 {
1030 selectedParcel.returnLandObjects(returnType, agentIDs, remoteClient);
1031 }
1032
1033 }
1034
1007 public void NoLandDataFromStorage() 1035 public void NoLandDataFromStorage()
1008 { 1036 {
1009 ResetSimLandObjects(); 1037 ResetSimLandObjects();
diff --git a/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs b/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs
index 98f3a3a..1a83f60 100644
--- a/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs
+++ b/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs
@@ -683,13 +683,25 @@ namespace OpenSim.Region.Environment.Modules.World.Land
683 public Dictionary<LLUUID, int> getLandObjectOwners() 683 public Dictionary<LLUUID, int> getLandObjectOwners()
684 { 684 {
685 Dictionary<LLUUID, int> ownersAndCount = new Dictionary<LLUUID, int>(); 685 Dictionary<LLUUID, int> ownersAndCount = new Dictionary<LLUUID, int>();
686 foreach (SceneObjectGroup obj in primsOverMe) 686 lock (primsOverMe)
687 { 687 {
688 if (!ownersAndCount.ContainsKey(obj.OwnerID)) 688 try
689 {
690
691 foreach (SceneObjectGroup obj in primsOverMe)
692 {
693 if (!ownersAndCount.ContainsKey(obj.OwnerID))
694 {
695 ownersAndCount.Add(obj.OwnerID, 0);
696 }
697 ownersAndCount[obj.OwnerID] += obj.PrimCount;
698 }
699 }
700 catch (InvalidOperationException)
689 { 701 {
690 ownersAndCount.Add(obj.OwnerID, 0); 702 m_log.Error("[LAND]: Unable to enumerate land owners. arr.");
691 } 703 }
692 ownersAndCount[obj.OwnerID] += obj.PrimCount; 704
693 } 705 }
694 return ownersAndCount; 706 return ownersAndCount;
695 } 707 }
@@ -700,10 +712,33 @@ namespace OpenSim.Region.Environment.Modules.World.Land
700 712
701 public void returnObject(SceneObjectGroup obj) 713 public void returnObject(SceneObjectGroup obj)
702 { 714 {
715 SceneObjectGroup[] objs = new SceneObjectGroup[1];
716 objs[0] = obj;
717 m_scene.returnObjects(objs, obj.OwnerID);
703 } 718 }
704 719
705 public void returnLandObjects(int type, LLUUID owner) 720 public void returnLandObjects(uint type, LLUUID[] owners, IClientAPI remote_client)
706 { 721 {
722 List<SceneObjectGroup> objlist = new List<SceneObjectGroup>();
723 for (int i = 0; i < owners.Length; i++)
724 {
725 lock (primsOverMe)
726 {
727 try
728 {
729 foreach (SceneObjectGroup obj in primsOverMe)
730 {
731 if (obj.OwnerID == owners[i])
732 objlist.Add(obj);
733 }
734 }
735 catch (InvalidOperationException)
736 {
737 m_log.Info("[PARCEL]: Unable to figure out all the objects owned by " + owners[i].ToString() + " arr.");
738 }
739 }
740 }
741 m_scene.returnObjects(objlist.ToArray(), remote_client.AgentId);
707 } 742 }
708 743
709 #endregion 744 #endregion
@@ -716,7 +751,8 @@ namespace OpenSim.Region.Environment.Modules.World.Land
716 landData.ownerPrims = 0; 751 landData.ownerPrims = 0;
717 landData.otherPrims = 0; 752 landData.otherPrims = 0;
718 landData.selectedPrims = 0; 753 landData.selectedPrims = 0;
719 primsOverMe.Clear(); 754 lock (primsOverMe)
755 primsOverMe.Clear();
720 } 756 }
721 757
722 public void addPrimToCount(SceneObjectGroup obj) 758 public void addPrimToCount(SceneObjectGroup obj)
@@ -740,30 +776,34 @@ namespace OpenSim.Region.Environment.Modules.World.Land
740 } 776 }
741 } 777 }
742 778
743 primsOverMe.Add(obj); 779 lock (primsOverMe)
780 primsOverMe.Add(obj);
744 } 781 }
745 782
746 public void removePrimFromCount(SceneObjectGroup obj) 783 public void removePrimFromCount(SceneObjectGroup obj)
747 { 784 {
748 if (primsOverMe.Contains(obj)) 785 lock (primsOverMe)
749 { 786 {
750 LLUUID prim_owner = obj.OwnerID; 787 if (primsOverMe.Contains(obj))
751 int prim_count = obj.PrimCount;
752
753 if (prim_owner == landData.ownerID)
754 {
755 landData.ownerPrims -= prim_count;
756 }
757 else if (prim_owner == landData.groupID)
758 {
759 landData.groupPrims -= prim_count;
760 }
761 else
762 { 788 {
763 landData.otherPrims -= prim_count; 789 LLUUID prim_owner = obj.OwnerID;
764 } 790 int prim_count = obj.PrimCount;
765 791
766 primsOverMe.Remove(obj); 792 if (prim_owner == landData.ownerID)
793 {
794 landData.ownerPrims -= prim_count;
795 }
796 else if (prim_owner == landData.groupID)
797 {
798 landData.groupPrims -= prim_count;
799 }
800 else
801 {
802 landData.otherPrims -= prim_count;
803 }
804
805 primsOverMe.Remove(obj);
806 }
767 } 807 }
768 } 808 }
769 809
diff --git a/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs b/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs
index 71ea0e4..cd5ca61 100644
--- a/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs
+++ b/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs
@@ -243,6 +243,7 @@ namespace OpenSim.Region.Environment.Modules.World.NPC
243 public event ParcelJoinRequest OnParcelJoinRequest; 243 public event ParcelJoinRequest OnParcelJoinRequest;
244 public event ParcelPropertiesUpdateRequest OnParcelPropertiesUpdateRequest; 244 public event ParcelPropertiesUpdateRequest OnParcelPropertiesUpdateRequest;
245 public event ParcelAbandonRequest OnParcelAbandonRequest; 245 public event ParcelAbandonRequest OnParcelAbandonRequest;
246 public event ParcelReturnObjectsRequest OnParcelReturnObjectsRequest;
246 public event ParcelAccessListRequest OnParcelAccessListRequest; 247 public event ParcelAccessListRequest OnParcelAccessListRequest;
247 public event ParcelAccessListUpdateRequest OnParcelAccessListUpdateRequest; 248 public event ParcelAccessListUpdateRequest OnParcelAccessListUpdateRequest;
248 public event ParcelSelectObjects OnParcelSelectObjects; 249 public event ParcelSelectObjects OnParcelSelectObjects;
diff --git a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
index a284ba5..850962d 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
@@ -1690,31 +1690,32 @@ namespace OpenSim.Region.Environment.Scenes
1690 //returnstring += "</scene>\n"; 1690 //returnstring += "</scene>\n";
1691 1691
1692 1692
1693 CachedUserInfo userInfo = 1693
1694 CommsManager.UserProfileCacheService.GetUserDetails(AgentId);
1695 if (userInfo != null)
1696 {
1697 LLUUID folderID = LLUUID.Zero;
1698
1699 List<InventoryFolderBase> subrootfolders = userInfo.RootFolder.RequestListOfFolders();
1700 foreach (InventoryFolderBase flder in subrootfolders)
1701 {
1702 if (flder.Name == "Lost And Found")
1703 {
1704 folderID = flder.ID;
1705 break;
1706 }
1707 }
1708
1709 if (folderID == LLUUID.Zero)
1710 {
1711 folderID = userInfo.RootFolder.ID;
1712 }
1713 1694
1714 bool permissionToDelete = false; 1695 bool permissionToDelete = false;
1715 1696
1716 for (int i = 0; i < returnobjects.Length; i++) 1697 for (int i = 0; i < returnobjects.Length; i++)
1717 { 1698 {
1699 CachedUserInfo userInfo =
1700 CommsManager.UserProfileCacheService.GetUserDetails(returnobjects[i].OwnerID);
1701 if (userInfo != null)
1702 {
1703 LLUUID folderID = LLUUID.Zero;
1704
1705 List<InventoryFolderBase> subrootfolders = userInfo.RootFolder.RequestListOfFolders();
1706 foreach (InventoryFolderBase flder in subrootfolders)
1707 {
1708 if (flder.Name == "Lost And Found")
1709 {
1710 folderID = flder.ID;
1711 break;
1712 }
1713 }
1714
1715 if (folderID == LLUUID.Zero)
1716 {
1717 folderID = userInfo.RootFolder.ID;
1718 }
1718 permissionToDelete = ExternalChecks.ExternalChecksCanDeleteObject(returnobjects[i].UUID, AgentId); 1719 permissionToDelete = ExternalChecks.ExternalChecksCanDeleteObject(returnobjects[i].UUID, AgentId);
1719 1720
1720 // If the user doesn't have permission, go on to the next one. 1721 // If the user doesn't have permission, go on to the next one.
@@ -1732,7 +1733,7 @@ namespace OpenSim.Region.Environment.Scenes
1732 1733
1733 InventoryItemBase item = new InventoryItemBase(); 1734 InventoryItemBase item = new InventoryItemBase();
1734 item.Creator = returnobjects[i].RootPart.CreatorID; 1735 item.Creator = returnobjects[i].RootPart.CreatorID;
1735 item.Owner = AgentId; 1736 item.Owner = returnobjects[i].OwnerID;
1736 item.ID = LLUUID.Random(); 1737 item.ID = LLUUID.Random();
1737 item.AssetID = asset.FullID; 1738 item.AssetID = asset.FullID;
1738 item.Description = asset.Description; 1739 item.Description = asset.Description;
@@ -1768,7 +1769,13 @@ namespace OpenSim.Region.Environment.Scenes
1768 // TODO: add the new fields (Flags, Sale info, etc) 1769 // TODO: add the new fields (Flags, Sale info, etc)
1769 1770
1770 userInfo.AddItem(item); 1771 userInfo.AddItem(item);
1771 1772
1773 ScenePresence notifyUser = GetScenePresence(item.Owner);
1774 if (notifyUser != null)
1775 {
1776 notifyUser.ControllingClient.SendInventoryItemCreateUpdate(item);
1777 }
1778
1772 SceneObjectGroup ObjectDeleting = returnobjects[i]; 1779 SceneObjectGroup ObjectDeleting = returnobjects[i];
1773 1780
1774 returnobjects[i] = null; 1781 returnobjects[i] = null;
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index 71c5b18..a42bad5 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -1660,6 +1660,7 @@ namespace OpenSim.Region.Environment.Scenes
1660 client.OnSetStartLocationRequest += SetHomeRezPoint; 1660 client.OnSetStartLocationRequest += SetHomeRezPoint;
1661 client.OnUndo += m_innerScene.HandleUndo; 1661 client.OnUndo += m_innerScene.HandleUndo;
1662 client.OnObjectGroupRequest += m_innerScene.HandleObjectGroupUpdate; 1662 client.OnObjectGroupRequest += m_innerScene.HandleObjectGroupUpdate;
1663 client.OnParcelReturnObjectsRequest += LandChannel.ReturnObjectsInParcel;
1663 1664
1664 // EventManager.TriggerOnNewClient(client); 1665 // EventManager.TriggerOnNewClient(client);
1665 } 1666 }