44 lines
1.6 KiB
C#
44 lines
1.6 KiB
C#
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<Primitive> attachments = Client.Network.CurrentSim.ObjectsPrimitives.FindAll(
|
|
prim => 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;
|
|
}
|
|
}
|
|
}
|