From 7e2b35bbb3be3a82be7bbb2b50099752f0196973 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Mon, 9 May 2011 11:35:41 -0700 Subject: Fixes gray tiles around +/-4 when user clicks on an empty tile. Affects regions above 4096 primarily. --- OpenSim/Region/CoreModules/Hypergrid/HGWorldMapModule.cs | 2 +- OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/CoreModules/Hypergrid/HGWorldMapModule.cs b/OpenSim/Region/CoreModules/Hypergrid/HGWorldMapModule.cs index a0ccdc7..8201031 100644 --- a/OpenSim/Region/CoreModules/Hypergrid/HGWorldMapModule.cs +++ b/OpenSim/Region/CoreModules/Hypergrid/HGWorldMapModule.cs @@ -76,7 +76,7 @@ namespace OpenSim.Region.CoreModules.Hypergrid FillInMap(mapBlocks, minX, minY, maxX, maxY); // - remoteClient.SendMapBlock(mapBlocks, flag); + remoteClient.SendMapBlock(mapBlocks, 0); } diff --git a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs index 8073f2d..0e1dd19 100644 --- a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs +++ b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs @@ -846,7 +846,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap MapBlockFromGridRegion(block, r); mapBlocks.Add(block); } - remoteClient.SendMapBlock(mapBlocks, flag); + remoteClient.SendMapBlock(mapBlocks, 0); } protected void MapBlockFromGridRegion(MapBlockData block, GridRegion r) -- cgit v1.1 From e1a4a8d8575926bbd3a201c4002e04880251c8b8 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Mon, 9 May 2011 18:28:16 -0700 Subject: Changed the Access flag on HGMap to 255 (does not exist) and clarified the other value 254 too. Meanings taken from libomv. --- OpenSim/Region/CoreModules/Hypergrid/HGWorldMapModule.cs | 2 +- OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/CoreModules/Hypergrid/HGWorldMapModule.cs b/OpenSim/Region/CoreModules/Hypergrid/HGWorldMapModule.cs index 8201031..d8681b5 100644 --- a/OpenSim/Region/CoreModules/Hypergrid/HGWorldMapModule.cs +++ b/OpenSim/Region/CoreModules/Hypergrid/HGWorldMapModule.cs @@ -93,7 +93,7 @@ namespace OpenSim.Region.CoreModules.Hypergrid mblock.X = (ushort)x; mblock.Y = (ushort)y; mblock.Name = ""; - mblock.Access = 254; // not here??? + mblock.Access = 255; // means 'simulator does not exist' mblock.MapImageId = UUID.Zero; mapBlocks.Add(mblock); } diff --git a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs index 0e1dd19..0cacf2d 100644 --- a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs +++ b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs @@ -820,7 +820,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap MapBlockData block = new MapBlockData(); block.X = (ushort)minX; block.Y = (ushort)minY; - block.Access = 254; // == not there + block.Access = 254; // means 'simulator is offline' response.Add(block); } remoteClient.SendMapBlock(response, 0); -- cgit v1.1 From 47735468d2e236a919e4f12d3cdbb8fd903149cb Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Tue, 10 May 2011 09:02:25 -0700 Subject: Somewhat reverting the last commit. The viewer ignores 255's on tiles that were previously on, so we need to send 254 (offline) explicitly. Also removing the +/-4 for HGMap, because it makes the map flicker. --- OpenSim/Region/CoreModules/Hypergrid/HGWorldMapModule.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/CoreModules/Hypergrid/HGWorldMapModule.cs b/OpenSim/Region/CoreModules/Hypergrid/HGWorldMapModule.cs index d8681b5..5ab334f 100644 --- a/OpenSim/Region/CoreModules/Hypergrid/HGWorldMapModule.cs +++ b/OpenSim/Region/CoreModules/Hypergrid/HGWorldMapModule.cs @@ -62,8 +62,8 @@ namespace OpenSim.Region.CoreModules.Hypergrid { List mapBlocks = new List(); List regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID, - (minX - 4) * (int)Constants.RegionSize, (maxX + 4) * (int)Constants.RegionSize, - (minY - 4) * (int)Constants.RegionSize, (maxY + 4) * (int)Constants.RegionSize); + minX * (int)Constants.RegionSize, maxX * (int)Constants.RegionSize, + minY * (int)Constants.RegionSize, maxY * (int)Constants.RegionSize); foreach (GridRegion r in regions) { @@ -93,7 +93,7 @@ namespace OpenSim.Region.CoreModules.Hypergrid mblock.X = (ushort)x; mblock.Y = (ushort)y; mblock.Name = ""; - mblock.Access = 255; // means 'simulator does not exist' + mblock.Access = 254; // means 'simulator is offline'. We need this because the viewer ignores 255's mblock.MapImageId = UUID.Zero; mapBlocks.Add(mblock); } -- cgit v1.1 From ac12ace6f1f837cfe934ddc69438796ad174c84f Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Thu, 12 May 2011 02:46:13 +0100 Subject: Prevent viewer 2 from creating a duplicate outfit inventory links. I believe this is safe since there is a 1-1 correspondence between link item and worn item (i.e. you can't be wearing the same item at two spots simultaneously in one outfit). This should stop lots of duplicate links being created when viewer 2 is used. However, this doesn't prevent broken inventory links, which I believe is timing related since the effect is not consistent (e.g. keep relogging and the viewer should end up seeing them correctly) . I think we actually see this problem on viewer 1 as well. It might be easier just to implement the Fetch*2 inventory caps which are documented at http://wiki.secondlife.com/wiki/Inventory_API. WebFetch* has been deprecated by Linden Lab since viewer 2.5.1 and according to the sl wiki, "has numerous bugs". --- OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 31 ++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index cd01a05..523b7f5 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -904,11 +904,25 @@ namespace OpenSim.Region.Framework.Scenes } } + /// + /// Link an inventory item to an existing item. + /// + /// + /// + /// + /// + /// + /// + /// + /// /param> + /// private void HandleLinkInventoryItem(IClientAPI remoteClient, UUID transActionID, UUID folderID, uint callbackID, string description, string name, sbyte invType, sbyte type, UUID olditemID) { - m_log.DebugFormat("[AGENT INVENTORY]: Received request to create inventory item link {0} in folder {1} pointing to {2}", name, folderID, olditemID); + m_log.DebugFormat( + "[AGENT INVENTORY]: Received request from {0} to create inventory item link {1} in folder {2} pointing to {3}", + remoteClient.Name, name, folderID, olditemID); if (!Permissions.CanCreateUserInventory(invType, remoteClient.AgentId)) return; @@ -916,7 +930,20 @@ namespace OpenSim.Region.Framework.Scenes ScenePresence presence; if (TryGetScenePresence(remoteClient.AgentId, out presence)) { -// byte[] data = null; + bool linkAlreadyExists = false; + List existingItems = InventoryService.GetFolderItems(remoteClient.AgentId, folderID); + foreach (InventoryItemBase item in existingItems) + if (item.AssetID == olditemID) + linkAlreadyExists = true; + + if (linkAlreadyExists) + { + m_log.WarnFormat( + "[AGENT INVENTORY]: Ignoring request from {0} to create item link {1} in folder {2} pointing to {3} since a link already exists", + remoteClient.Name, name, folderID, olditemID); + + return; + } AssetBase asset = new AssetBase(); asset.FullID = olditemID; -- cgit v1.1 From 9988bff9e3074f470ac57cd052674bcf816d7d8f Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Thu, 12 May 2011 03:18:53 +0100 Subject: Add a smidgen of method doc about the fact that item links reuse the asset id item slot --- OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 523b7f5..a65ceeb 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -907,6 +907,10 @@ namespace OpenSim.Region.Framework.Scenes /// /// Link an inventory item to an existing item. /// + /// + /// The linkee item id is placed in the asset id slot. This appears to be what the viewer expects when + /// it receives inventory information. + /// /// /// /// -- cgit v1.1 From 5f9edd195c702fac57ab76bca1c0357bce224868 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Fri, 13 May 2011 03:24:19 +0100 Subject: Fix broken inventory links on viewer 2. It appears that if the viewer requests a folder containing links, we must also send the folders that contain the link targets first. This was tested with Kokua 0.1.0 WIP though I predict it will also work with other viewer 2s --- .../Region/ClientStack/Linden/UDP/LLClientView.cs | 7 ++++++- OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 21 +++++++++++++++++++-- .../Region/Framework/Scenes/Scene.PacketHandlers.cs | 4 ++++ 3 files changed, 29 insertions(+), 3 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 1da9d5e..5a2c45c 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs @@ -1612,14 +1612,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP currentPacket.ItemData[itemsSent % MAX_ITEMS_PER_PACKET] = CreateItemDataBlock(items[itemsSent++]); else { +// m_log.DebugFormat( +// "[LLCLIENTVIEW]: Sending inventory folder details packet to {0} for folder {1}", Name, folderID); OutPacket(currentPacket, ThrottleOutPacketType.Asset, false); currentPacket = null; } - } if (currentPacket != null) + { +// m_log.DebugFormat( +// "[LLCLIENTVIEW]: Sending inventory folder details packet to {0} for folder {1}", Name, folderID); OutPacket(currentPacket, ThrottleOutPacketType.Asset, false); + } } private InventoryDescendentsPacket.FolderDataBlock CreateFolderDataBlock(InventoryFolderBase folder) diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index a65ceeb..3bf2c2b 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -1382,11 +1382,28 @@ namespace OpenSim.Region.Framework.Scenes InventoryFolderBase containingFolder = new InventoryFolderBase(folder.ID, client.AgentId); containingFolder = InventoryService.GetFolder(containingFolder); - //m_log.DebugFormat("[AGENT INVENTORY]: Sending inventory folder contents ({0} nodes) for \"{1}\" to {2} {3}", - // contents.Folders.Count + contents.Items.Count, containingFolder.Name, client.FirstName, client.LastName); +// m_log.DebugFormat("[AGENT INVENTORY]: Sending inventory folder contents ({0} nodes) for \"{1}\" to {2} {3}", +// contents.Folders.Count + contents.Items.Count, containingFolder.Name, client.FirstName, client.LastName); if (containingFolder != null && containingFolder != null) + { + // If the folder requested contains links, then we need to send those folders first, otherwise the links + // will be broken in the viewer. + HashSet linkedItemFolderIdsToSend = new HashSet(); + foreach (InventoryItemBase item in contents.Items) + { + if (item.AssetType == (int)AssetType.Link) + { + InventoryItemBase linkedItem = InventoryService.GetItem(new InventoryItemBase(item.AssetID)); + linkedItemFolderIdsToSend.Add(linkedItem.Folder); + } + } + + foreach (UUID linkedItemFolderId in linkedItemFolderIdsToSend) + SendInventoryUpdate(client, new InventoryFolderBase(linkedItemFolderId), false, true); + client.SendInventoryFolderDetails(client.AgentId, folder.ID, contents.Items, contents.Folders, containingFolder.Version, fetchFolders, fetchItems); + } } /// diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs index ab567fb..e2d7208 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs @@ -499,6 +499,10 @@ namespace OpenSim.Region.Framework.Scenes public void HandleFetchInventoryDescendents(IClientAPI remoteClient, UUID folderID, UUID ownerID, bool fetchFolders, bool fetchItems, int sortOrder) { +// m_log.DebugFormat( +// "[USER INVENTORY]: HandleFetchInventoryDescendents() for {0}, folder={1}, fetchFolders={2}, fetchItems={3}, sortOrder={4}", +// remoteClient.Name, folderID, fetchFolders, fetchItems, sortOrder); + if (folderID == UUID.Zero) return; -- cgit v1.1 From 301321c8535d702651eb8287bc2312df13562683 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Thu, 12 May 2011 19:56:59 -0700 Subject: Instrument the heck out of offline messages. THIS IS VERY VERBOSE. --- .../Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs | 3 +++ 1 file changed, 3 insertions(+) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs index 919ea33..321b38b 100644 --- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs @@ -178,6 +178,9 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage List msglist = SynchronousRestObjectPoster.BeginPostObject>( "POST", m_RestURL + "/RetrieveMessages/", client.AgentId); + if (msglist == null) + m_log.WarnFormat("[OFFLINE MESSAGING]: WARNING null message list."); + foreach (GridInstantMessage im in msglist) { // client.SendInstantMessage(im); -- cgit v1.1