using System; using System.Collections.Generic; using OpenMetaverse; namespace OpenMetaverse.TestClient { public class AttachmentsCommand : Command { public AttachmentsCommand(TestClient testClient) { Client = testClient; Name = "attachments"; Description = "Prints a list of the currently known agent attachments"; Category = CommandCategory.Appearance; } public override string Execute(string[] args, UUID fromAgentID) { List attachments = Client.Network.CurrentSim.ObjectsPrimitives.FindAll( delegate(Primitive prim) { return prim.ParentID == Client.Self.LocalID; } ); for (int i = 0; i < attachments.Count; i++) { Primitive prim = attachments[i]; AttachmentPoint point = StateToAttachmentPoint(prim.PrimData.State); // TODO: Fetch properties for the objects with missing property sets so we can show names Logger.Log(String.Format("[Attachment @ {0}] LocalID: {1} UUID: {2} Offset: {3}", point, prim.LocalID, prim.ID, prim.Position), Helpers.LogLevel.Info, Client); } return "Found " + attachments.Count + " attachments"; } public static AttachmentPoint StateToAttachmentPoint(uint state) { const uint ATTACHMENT_MASK = 0xF0; uint fixedState = (((byte)state & ATTACHMENT_MASK) >> 4) | (((byte)state & ~ATTACHMENT_MASK) << 4); return (AttachmentPoint)fixedState; } } }