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,
///