From f01d1426cfe56518ae37b4e28ea7af4c7068a89e Mon Sep 17 00:00:00 2001 From: Jim Radford Date: Wed, 14 May 2008 11:17:45 +0000 Subject: [PATCH] LIBOMV-138 Implements RequestDeRezToInventory methods for taking or deleting items in simulator back to agents inventory, or to a tasks inventory. Thanks root66 for the work on this git-svn-id: http://libopenmetaverse.googlecode.com/svn/trunk@1864 52acb1d6-8a22-11de-b505-999d5b087335 --- libsecondlife/InventoryManager.cs | 54 +++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/libsecondlife/InventoryManager.cs b/libsecondlife/InventoryManager.cs index 4acdc3e4..b74501a4 100644 --- a/libsecondlife/InventoryManager.cs +++ b/libsecondlife/InventoryManager.cs @@ -118,6 +118,19 @@ namespace libsecondlife SystemFoldersToTop = 4 } + /// + /// Possible destinations for DeRezObject request + /// + public enum DeRezDestination : byte + { + /// Derez to TaskInventory + TaskInventory = 2, + /// Take Object + ObjectsFolder = 4, + /// Delete Object + TrashFolder = 6 + } + #endregion Enums #region Inventory Object Classes @@ -1999,6 +2012,47 @@ namespace libsecondlife return queryID; } + /// + /// DeRez an object from the simulator to the agents Objects folder in the agents Inventory + /// + /// The simulator Local ID of the object + public void RequestDeRezToInventory(uint objectLocalID) + { + RequestDeRezToInventory(objectLocalID, DeRezDestination.ObjectsFolder, + _Client.Inventory.FindFolderForType(AssetType.Object), LLUUID.Random()); + } + + /// + /// DeRez an object from the simulator and return to inventory + /// + /// The simulator Local ID of the object + /// The type of destination from the enum + /// The destination inventory folders -or- + /// if DeRezzing object to a tasks Inventory, the Tasks + /// The transaction ID for this request which + /// can be used to correlate this request with other packets + public void RequestDeRezToInventory(uint objectLocalID, DeRezDestination destType, LLUUID destFolder, LLUUID transactionID) + { + DeRezObjectPacket take = new DeRezObjectPacket(); + + take.AgentData.AgentID = _Client.Self.AgentID; + take.AgentData.SessionID = _Client.Self.SessionID; + take.AgentBlock = new DeRezObjectPacket.AgentBlockBlock(); + take.AgentBlock.GroupID = LLUUID.Zero; + take.AgentBlock.Destination = (byte)destType; + take.AgentBlock.DestinationID = destFolder; + take.AgentBlock.PacketCount = 1; + take.AgentBlock.PacketNumber = 1; + take.AgentBlock.TransactionID = transactionID; + + take.ObjectData = new DeRezObjectPacket.ObjectDataBlock[1]; + take.ObjectData[0] = new DeRezObjectPacket.ObjectDataBlock(); + take.ObjectData[0].ObjectLocalID = objectLocalID; + + _Client.Network.SendPacket(take); + } + + /// /// Give an inventory item to another avatar ///