From e93869c7a785a4f375685ffa33c913033ed1c85a Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Thu, 21 Jun 2007 17:08:21 +0000 Subject: * Importing Ming's mass test client --- .../Commands/Inventory/DumpOutfitCommand.cs | 98 ++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 tools/mass test client/Commands/Inventory/DumpOutfitCommand.cs (limited to 'tools/mass test client/Commands/Inventory/DumpOutfitCommand.cs') diff --git a/tools/mass test client/Commands/Inventory/DumpOutfitCommand.cs b/tools/mass test client/Commands/Inventory/DumpOutfitCommand.cs new file mode 100644 index 0000000..8347acc --- /dev/null +++ b/tools/mass test client/Commands/Inventory/DumpOutfitCommand.cs @@ -0,0 +1,98 @@ +using System; +using System.Text; +using System.IO; +using System.Collections.Generic; +using libsecondlife; +using libsecondlife.Utilities.Assets; +using libsecondlife.Utilities.Appearance; + +namespace libsecondlife.TestClient +{ + public class DumpOutfitCommand : Command + { + libsecondlife.Utilities.Assets.AssetManager Assets; + List OutfitAssets = new List(); + + public DumpOutfitCommand(TestClient testClient) + { + Name = "dumpoutfit"; + Description = "Dumps all of the textures from an avatars outfit to the hard drive. Usage: dumpoutfit [avatar-uuid]"; + + Assets = new AssetManager(testClient); + Assets.OnImageReceived += new AssetManager.ImageReceivedCallback(Assets_OnImageReceived); + } + + public override string Execute(string[] args, LLUUID fromAgentID) + { + if (args.Length != 1) + return "Usage: dumpoutfit [avatar-uuid]"; + + LLUUID target; + + if (!LLUUID.TryParse(args[0], out target)) + return "Usage: dumpoutfit [avatar-uuid]"; + + lock (Client.AvatarList) + { + foreach (Avatar avatar in Client.AvatarList.Values) + { + if (avatar.ID == target) + { + StringBuilder output = new StringBuilder("Downloading "); + + lock (OutfitAssets) OutfitAssets.Clear(); + + foreach (KeyValuePair face in avatar.Textures.FaceTextures) + { + ImageType type = ImageType.Normal; + + switch ((AppearanceManager.TextureIndex)face.Key) + { + case AppearanceManager.TextureIndex.HeadBaked: + case AppearanceManager.TextureIndex.EyesBaked: + case AppearanceManager.TextureIndex.UpperBaked: + case AppearanceManager.TextureIndex.LowerBaked: + case AppearanceManager.TextureIndex.SkirtBaked: + type = ImageType.Baked; + break; + } + + Assets.RequestImage(face.Value.TextureID, type, 100000.0f, 0); + + output.Append(((AppearanceManager.TextureIndex)face.Key).ToString()); + output.Append(" "); + } + + return output.ToString(); + } + } + } + + return "Couldn't find avatar " + target.ToStringHyphenated(); + } + + private void Assets_OnImageReceived(ImageDownload image) + { + if (image.Success) + { + try + { + File.WriteAllBytes(image.ID.ToStringHyphenated() + ".jp2", image.AssetData); + Console.WriteLine("Wrote JPEG2000 image " + image.ID.ToStringHyphenated() + ".jp2"); + + byte[] tgaFile = OpenJPEGNet.OpenJPEG.DecodeToTGA(image.AssetData); + File.WriteAllBytes(image.ID.ToStringHyphenated() + ".tga", tgaFile); + Console.WriteLine("Wrote TGA image " + image.ID.ToStringHyphenated() + ".tga"); + } + catch (Exception e) + { + Console.WriteLine(e.ToString()); + } + } + else + { + Console.WriteLine("Failed to download image " + image.ID.ToStringHyphenated()); + } + } + } +} -- cgit v1.1