From 27af449225970bc892eaa039d6fe811e3e42e2ba Mon Sep 17 00:00:00 2001 From: Michael Cortez Date: Thu, 11 Jan 2007 20:44:16 +0000 Subject: [PATCH] Added support to Inventory System for attaching/detaching items git-svn-id: http://libopenmetaverse.googlecode.com/svn/trunk@838 52acb1d6-8a22-11de-b505-999d5b087335 --- .../InventorySystem/InventoryItem.cs | 33 +++++++++++++++++ .../InventorySystem/InventoryManager.cs | 21 +++++++++++ .../InventorySystem/InventoryPacketHelper.cs | 35 +++++++++++++++++++ libsecondlife-cs/ObjectManager.cs | 4 ++- 4 files changed, 92 insertions(+), 1 deletion(-) diff --git a/libsecondlife-cs/InventorySystem/InventoryItem.cs b/libsecondlife-cs/InventorySystem/InventoryItem.cs index 4e74fff2..146aa7bd 100644 --- a/libsecondlife-cs/InventorySystem/InventoryItem.cs +++ b/libsecondlife-cs/InventorySystem/InventoryItem.cs @@ -426,16 +426,49 @@ namespace libsecondlife.InventorySystem } + /// + /// Attempt to rez this inventory item at the given point + /// + /// Region/Sim coordinates public void RezObject(LLVector3 TargetPos) { RezObject(TargetPos, null); } + /// + /// Attempt to rez this inventory item at the given point, in the given simulator + /// + /// Region/Sim coords + /// public void RezObject(LLVector3 TargetPos, Simulator TargetSim) { iManager.ItemRezObject(this, TargetSim, TargetPos); } + /// + /// Attempt to attach this item + /// + public void Attach() + { + Attach(0); //Use default attach point. + } + + /// + /// Attempt to attach this item. + /// + /// Where to attach to + public void Attach(ObjectManager.AttachmentPoint AttachmentPt) + { + iManager.ItemRezAttach(this, 0); + } + + /// + /// Attempt to detach this item + /// + public void Detach() + { + iManager.ItemDetach(this); + } /// /// diff --git a/libsecondlife-cs/InventorySystem/InventoryManager.cs b/libsecondlife-cs/InventorySystem/InventoryManager.cs index bdfea4fe..b5c0fd3d 100644 --- a/libsecondlife-cs/InventorySystem/InventoryManager.cs +++ b/libsecondlife-cs/InventorySystem/InventoryManager.cs @@ -588,6 +588,27 @@ namespace libsecondlife.InventorySystem } } + /// + /// Attempt to rez and attach an inventory item + /// + /// + /// + internal void ItemRezAttach(InventoryItem Item, ObjectManager.AttachmentPoint AttachmentPt) + { + Packet p = InvPacketHelper.RezSingleAttachmentFromInv(Item, AttachmentPt); + slClient.Network.SendPacket(p); + } + + /// + /// Attempt to detach and return an item to your inventory + /// + /// + internal void ItemDetach(InventoryItem Item) + { + Packet p = InvPacketHelper.DetachAttachmentIntoInv(Item.ItemID); + slClient.Network.SendPacket(p); + } + /// /// Request the download of a folder's contents /// diff --git a/libsecondlife-cs/InventorySystem/InventoryPacketHelper.cs b/libsecondlife-cs/InventorySystem/InventoryPacketHelper.cs index 0c152ea7..c2d76c3b 100644 --- a/libsecondlife-cs/InventorySystem/InventoryPacketHelper.cs +++ b/libsecondlife-cs/InventorySystem/InventoryPacketHelper.cs @@ -386,6 +386,41 @@ namespace libsecondlife.InventorySystem return p; } + public Packet RezSingleAttachmentFromInv(InventoryItem item) + { + return RezSingleAttachmentFromInv(item, 0); // Use default point + } + + public Packet RezSingleAttachmentFromInv(InventoryItem item, ObjectManager.AttachmentPoint AttachmentPt) + { + RezSingleAttachmentFromInvPacket p = new RezSingleAttachmentFromInvPacket(); + p.AgentData.AgentID = AgentID; + p.AgentData.SessionID = SessionID; + + p.ObjectData.Description = Helpers.StringToField(item.Description); + p.ObjectData.EveryoneMask = item.EveryoneMask; + p.ObjectData.GroupMask = item.GroupMask; + p.ObjectData.ItemFlags = item.Flags; + p.ObjectData.ItemID = item.ItemID; + p.ObjectData.Name = Helpers.StringToField(item.Name); + p.ObjectData.NextOwnerMask = item.NextOwnerMask; + p.ObjectData.OwnerID = item.OwnerID; + + p.ObjectData.AttachmentPt = (byte)AttachmentPt; // Default; + + + return p; + } + + public Packet DetachAttachmentIntoInv( LLUUID ItemID ) + { + DetachAttachmentIntoInvPacket p = new DetachAttachmentIntoInvPacket(); + p.ObjectData.AgentID = AgentID; + p.ObjectData.ItemID = ItemID; + + return p; + } + /* // Confirm InventoryUpdate CRC uint test = libsecondlife.Packets.InventoryPackets.InventoryUpdateCRC diff --git a/libsecondlife-cs/ObjectManager.cs b/libsecondlife-cs/ObjectManager.cs index 5a61b94e..3f2cebf1 100644 --- a/libsecondlife-cs/ObjectManager.cs +++ b/libsecondlife-cs/ObjectManager.cs @@ -186,6 +186,8 @@ namespace libsecondlife /// public enum AttachmentPoint { + /// + Default = 0, /// Chest = 1, /// @@ -223,7 +225,7 @@ namespace libsecondlife /// RightUpperArm, /// - RightForarm, + RightForearm, /// LeftUpperArm, ///