diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs index 7bc59fc81d..cf0c28b8a8 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs @@ -94,6 +94,7 @@ namespace OpenSim.Region.ClientStack.Linden private static readonly string m_notecardUpdatePath = "0004/"; private static readonly string m_notecardTaskUpdatePath = "0005/"; // private static readonly string m_fetchInventoryPath = "0006/"; + private static readonly string m_copyFromNotecardPath = "0007/"; // private static readonly string m_remoteParcelRequestPath = "0009/";// This is in the LandManagementModule. @@ -180,6 +181,7 @@ namespace OpenSim.Region.ClientStack.Linden m_HostCapsObj.RegisterHandler("UpdateNotecardAgentInventory", req); m_HostCapsObj.RegisterHandler("UpdateScriptAgentInventory", req); m_HostCapsObj.RegisterHandler("UpdateScriptAgent", req); + m_HostCapsObj.RegisterHandler("CopyInventoryFromNotecard", new RestStreamHandler("POST", capsBase + m_copyFromNotecardPath, CopyInventoryFromNotecard)); // As of RC 1.22.9 of the Linden client this is // supported @@ -723,6 +725,75 @@ namespace OpenSim.Region.ClientStack.Linden return LLSDHelpers.SerialiseLLSDReply(uploadResponse); } + + /// + /// Called by the CopyInventoryFromNotecard caps handler. + /// + /// + /// + /// + public string CopyInventoryFromNotecard(string request, string path, string param, + IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) + { + Hashtable response = new Hashtable(); + response["int_response_code"] = 404; + response["content_type"] = "text/plain"; + response["keepalive"] = false; + response["str_response_string"] = ""; + + try + { + OSDMap content = (OSDMap)OSDParser.DeserializeLLSDXml(request); + UUID objectID = content["object-id"].AsUUID(); + UUID notecardID = content["notecard-id"].AsUUID(); + UUID folderID = content["folder-id"].AsUUID(); + UUID itemID = content["item-id"].AsUUID(); + + // m_log.InfoFormat("[CAPS]: CopyInventoryFromNotecard, FolderID:{0}, ItemID:{1}, NotecardID:{2}, ObjectID:{3}", folderID, itemID, notecardID, objectID); + + if (objectID != UUID.Zero) + { + SceneObjectPart part = m_Scene.GetSceneObjectPart(objectID); + if (part != null) + { + TaskInventoryItem taskItem = part.Inventory.GetInventoryItem(notecardID); + if (!m_Scene.Permissions.CanCopyObjectInventory(notecardID, objectID, m_HostCapsObj.AgentID)) + { + return LLSDHelpers.SerialiseLLSDReply(response); + } + } + } + + InventoryItemBase item = null; + InventoryItemBase copyItem = null; + IClientAPI client = null; + + m_Scene.TryGetClient(m_HostCapsObj.AgentID, out client); + item = m_Scene.InventoryService.GetItem(new InventoryItemBase(itemID)); + if (item != null) + { + copyItem = m_Scene.GiveInventoryItem(m_HostCapsObj.AgentID, item.Owner, itemID, folderID); + if (copyItem != null && client != null) + { + m_log.InfoFormat("[CAPS]: CopyInventoryFromNotecard, ItemID:{0}, FolderID:{1}", copyItem.ID, copyItem.Folder); + client.SendBulkUpdateInventory(copyItem); + } + } + else + { + m_log.ErrorFormat("[CAPS]: CopyInventoryFromNotecard - Failed to retrieve item {0} from notecard {1}", itemID, notecardID); + if (client != null) + client.SendAlertMessage("Failed to retrieve item"); + } + } + catch (Exception e) + { + m_log.ErrorFormat("[CAPS]: CopyInventoryFromNotecard : {0}", e.ToString()); + } + + response["int_response_code"] = 200; + return LLSDHelpers.SerialiseLLSDReply(response); + } } public class AssetUploader diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs index 80cb623292..f1399afe01 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs @@ -209,8 +209,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer foreach (SceneObjectGroup grp in sp.GetAttachments()) { - if (grp.IsDeleted) - sp.Scene.EventManager.TriggerOnScriptChangedEvent(grp.LocalId, (uint)Changed.TELEPORT); + sp.Scene.EventManager.TriggerOnScriptChangedEvent(grp.LocalId, (uint)Changed.TELEPORT); } } else // Another region possibly in another simulator diff --git a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs index 3c1b3e09ba..9a763eed89 100644 --- a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs +++ b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs @@ -464,7 +464,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap mapitem.x = (uint)(xstart + x); mapitem.y = (uint)(ystart + y); // mapitem.z = (uint)m_scene.GetGroundHeight(x,y); - mapitem.id = UUID.Zero; + mapitem.id = parcel.GlobalID; mapitem.name = parcel.Name; mapitem.Extra = parcel.Area; mapitem.Extra2 = parcel.SalePrice; @@ -1291,7 +1291,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap responsemapdata["X"] = OSD.FromInteger((int)(xstart + x)); responsemapdata["Y"] = OSD.FromInteger((int)(ystart + y)); // responsemapdata["Z"] = OSD.FromInteger((int)m_scene.GetGroundHeight(x,y)); - responsemapdata["ID"] = OSD.FromUUID(UUID.Zero); + responsemapdata["ID"] = OSD.FromUUID(parcel.GlobalID); responsemapdata["Name"] = OSD.FromString(parcel.Name); responsemapdata["Extra"] = OSD.FromInteger(parcel.Area); responsemapdata["Extra2"] = OSD.FromInteger(parcel.SalePrice); diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 9c4bfb6480..01e5dbe0df 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -5882,7 +5882,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api foreach (GridRegion sri in neighbors) { - if (sri.RegionLocX == neighborX && sri.RegionLocY == neighborY) + if (sri.RegionCoordX == neighborX && sri.RegionCoordY == neighborY) return 0; } diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini index 9d9cc3ab3e..3b39f7fbe5 100644 --- a/bin/OpenSimDefaults.ini +++ b/bin/OpenSimDefaults.ini @@ -524,7 +524,7 @@ Cap_AttachmentResources = "" Cap_AvatarPickerSearch = "" Cap_ChatSessionRequest = "" - Cap_CopyInventoryFromNotecard = "" + Cap_CopyInventoryFromNotecard = "localhost" Cap_DispatchRegionInfo = "" Cap_EstateChangeInfo = "" Cap_EventQueueGet = "localhost"