Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
						commit
						f9227977f8
					
				| 
						 | 
				
			
			@ -1510,11 +1510,11 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
 | 
			
		||||
                for (int i=0; i<wearables.Length; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    if (inventoryMap.ContainsKey(wearables[i].ItemID))
 | 
			
		||||
                    if (inventoryMap.ContainsKey(wearables[i][0].ItemID))
 | 
			
		||||
                    {
 | 
			
		||||
                        AvatarWearable wearable = new AvatarWearable();
 | 
			
		||||
                        wearable.AssetID = wearables[i].AssetID;
 | 
			
		||||
                        wearable.ItemID  = inventoryMap[wearables[i].ItemID];
 | 
			
		||||
                        wearable.Wear(inventoryMap[wearables[i][0].ItemID],
 | 
			
		||||
                                wearables[i][0].AssetID);
 | 
			
		||||
                        avatarAppearance.SetWearable(i, wearable);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			@ -1568,10 +1568,10 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
            for (int i=0; i<wearables.Length; i++)
 | 
			
		||||
            {
 | 
			
		||||
                wearable = wearables[i];
 | 
			
		||||
                if (wearable.ItemID != UUID.Zero)
 | 
			
		||||
                if (wearable[0].ItemID != UUID.Zero)
 | 
			
		||||
                {
 | 
			
		||||
                    // Get inventory item and copy it
 | 
			
		||||
                    InventoryItemBase item = new InventoryItemBase(wearable.ItemID, source);
 | 
			
		||||
                    InventoryItemBase item = new InventoryItemBase(wearable[0].ItemID, source);
 | 
			
		||||
                    item = inventoryService.GetItem(item);
 | 
			
		||||
 | 
			
		||||
                    if (item != null)
 | 
			
		||||
| 
						 | 
				
			
			@ -1602,13 +1602,12 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
 | 
			
		||||
                        // Wear item
 | 
			
		||||
                        AvatarWearable newWearable = new AvatarWearable();
 | 
			
		||||
                        newWearable.AssetID = wearable.AssetID;
 | 
			
		||||
                        newWearable.ItemID  = destinationItem.ID;
 | 
			
		||||
                        newWearable.Wear(destinationItem.ID, wearable[0].AssetID);
 | 
			
		||||
                        avatarAppearance.SetWearable(i, newWearable);
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        m_log.WarnFormat("[RADMIN]: Error transferring {0} to folder {1}", wearable.ItemID, destinationFolder.ID);
 | 
			
		||||
                        m_log.WarnFormat("[RADMIN]: Error transferring {0} to folder {1}", wearable[0].ItemID, destinationFolder.ID);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -2057,8 +2056,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
                                        {
 | 
			
		||||
                                        if (select && (GetStringAttribute(item, "wear", "false") == "true"))
 | 
			
		||||
                                            {
 | 
			
		||||
                                                avatarAppearance.Wearables[inventoryItem.Flags].ItemID = inventoryItem.ID;
 | 
			
		||||
                                                avatarAppearance.Wearables[inventoryItem.Flags].AssetID = inventoryItem.AssetID;
 | 
			
		||||
                                                avatarAppearance.Wearables[inventoryItem.Flags].Wear(inventoryItem.ID, inventoryItem.AssetID);
 | 
			
		||||
                                            }
 | 
			
		||||
                                        }
 | 
			
		||||
                                        catch (Exception e)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -499,6 +499,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
 | 
			
		|||
                                    indata = true;
 | 
			
		||||
                                }
 | 
			
		||||
                            break;
 | 
			
		||||
/*
 | 
			
		||||
                            case "Body" :
 | 
			
		||||
                                if (xml.MoveToAttribute("Item"))
 | 
			
		||||
                                {
 | 
			
		||||
| 
						 | 
				
			
			@ -655,6 +656,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
 | 
			
		|||
                                    indata = true;
 | 
			
		||||
                                }
 | 
			
		||||
                            break;
 | 
			
		||||
*/
 | 
			
		||||
                            case "Attachment" :
 | 
			
		||||
                                {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -749,6 +751,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
 | 
			
		|||
                    rdata.writer.WriteAttributeString("Owner", rdata.userAppearance.Owner.ToString());
 | 
			
		||||
                rdata.writer.WriteAttributeString("Serial", rdata.userAppearance.Serial.ToString());
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
                FormatPart(rdata, "Body", rdata.userAppearance.BodyItem, rdata.userAppearance.BodyAsset);
 | 
			
		||||
                FormatPart(rdata, "Skin", rdata.userAppearance.SkinItem, rdata.userAppearance.SkinAsset);
 | 
			
		||||
                FormatPart(rdata, "Hair", rdata.userAppearance.HairItem, rdata.userAppearance.HairAsset);
 | 
			
		||||
| 
						 | 
				
			
			@ -765,7 +768,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
 | 
			
		|||
 | 
			
		||||
                FormatPart(rdata, "UnderShirt", rdata.userAppearance.UnderShirtItem, rdata.userAppearance.UnderShirtAsset);
 | 
			
		||||
                FormatPart(rdata, "UnderPants", rdata.userAppearance.UnderPantsItem, rdata.userAppearance.UnderPantsAsset);
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
                Rest.Log.DebugFormat("{0} FormatUserAppearance: Formatting attachments", MsgId);
 | 
			
		||||
 | 
			
		||||
                rdata.writer.WriteStartElement("Attachments");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -218,35 +218,6 @@ namespace OpenSim.Framework
 | 
			
		|||
            {
 | 
			
		||||
                args["appearance_serial"] = OSD.FromInteger(Appearance.Serial);
 | 
			
		||||
 | 
			
		||||
                //System.Console.WriteLine("XXX Before packing Wearables");
 | 
			
		||||
                if ((Appearance.Wearables != null) && (Appearance.Wearables.Length > 0))
 | 
			
		||||
                {
 | 
			
		||||
                    OSDArray wears = new OSDArray(Appearance.Wearables.Length * 2);
 | 
			
		||||
                    foreach (AvatarWearable awear in Appearance.Wearables)
 | 
			
		||||
                    {
 | 
			
		||||
                        wears.Add(OSD.FromUUID(awear.ItemID));
 | 
			
		||||
                        wears.Add(OSD.FromUUID(awear.AssetID));
 | 
			
		||||
                        //System.Console.WriteLine("XXX ItemID=" + awear.ItemID + " assetID=" + awear.AssetID);
 | 
			
		||||
                    }
 | 
			
		||||
                    args["wearables"] = wears;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                //System.Console.WriteLine("XXX Before packing Attachments");
 | 
			
		||||
                List<AvatarAttachment> attachments = Appearance.GetAttachments();
 | 
			
		||||
                if ((attachments != null) && (attachments.Count > 0))
 | 
			
		||||
                {
 | 
			
		||||
                    OSDArray attachs = new OSDArray(attachments.Count);
 | 
			
		||||
                    foreach (AvatarAttachment attach in attachments)
 | 
			
		||||
                    {
 | 
			
		||||
                        attachs.Add(attach.Pack());
 | 
			
		||||
                        //System.Console.WriteLine("XXX att.pt=" + kvp.Key + "; itemID=" + kvp.Value[0] + "; assetID=" + kvp.Value[1]);
 | 
			
		||||
                    }
 | 
			
		||||
                    args["attachments"] = attachs;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (Appearance != null)
 | 
			
		||||
            {
 | 
			
		||||
                OSDMap appmap = Appearance.Pack();
 | 
			
		||||
                args["packed_appearance"] = appmap;
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -346,28 +317,6 @@ namespace OpenSim.Framework
 | 
			
		|||
            if (args["appearance_serial"] != null)
 | 
			
		||||
                Appearance.Serial = args["appearance_serial"].AsInteger();
 | 
			
		||||
 | 
			
		||||
            if ((args["wearables"] != null) && (args["wearables"]).Type == OSDType.Array)
 | 
			
		||||
            {
 | 
			
		||||
                OSDArray wears = (OSDArray)(args["wearables"]);
 | 
			
		||||
                for (int i = 0; i < wears.Count / 2; i++) 
 | 
			
		||||
                {
 | 
			
		||||
                    AvatarWearable awear = new AvatarWearable(wears[i*2].AsUUID(),wears[(i*2)+1].AsUUID());
 | 
			
		||||
                    Appearance.SetWearable(i,awear);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ((args["attachments"] != null) && (args["attachments"]).Type == OSDType.Array)
 | 
			
		||||
            {
 | 
			
		||||
                OSDArray attachs = (OSDArray)(args["attachments"]);
 | 
			
		||||
                foreach (OSD o in attachs)
 | 
			
		||||
                {
 | 
			
		||||
                    if (o.Type == OSDType.Map)
 | 
			
		||||
                    {
 | 
			
		||||
                        Appearance.AppendAttachment(new AvatarAttachment((OSDMap)o));
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (args.ContainsKey("packed_appearance") && (args["packed_appearance"].Type == OSDType.Map))
 | 
			
		||||
            {
 | 
			
		||||
                Appearance.Unpack((OSDMap)args["packed_appearance"]);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,104 +35,6 @@ using log4net;
 | 
			
		|||
 | 
			
		||||
namespace OpenSim.Framework
 | 
			
		||||
{
 | 
			
		||||
    // A special dictionary for avatar appearance
 | 
			
		||||
    public struct LayerItem
 | 
			
		||||
    {
 | 
			
		||||
        public UUID ItemID;
 | 
			
		||||
        public UUID AssetID;
 | 
			
		||||
 | 
			
		||||
        public LayerItem(UUID itemID, UUID assetID)
 | 
			
		||||
        {
 | 
			
		||||
            ItemID = itemID;
 | 
			
		||||
            AssetID = assetID;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class Layer
 | 
			
		||||
    {
 | 
			
		||||
        protected int m_layerType;
 | 
			
		||||
        protected Dictionary<UUID, UUID> m_items = new Dictionary<UUID, UUID>();
 | 
			
		||||
        protected List<UUID> m_ids = new List<UUID>();
 | 
			
		||||
 | 
			
		||||
        public Layer(int type)
 | 
			
		||||
        {
 | 
			
		||||
            m_layerType = type;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public int LayerType
 | 
			
		||||
        {
 | 
			
		||||
            get { return m_layerType; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public int Count
 | 
			
		||||
        {
 | 
			
		||||
            get { return m_ids.Count; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Add(UUID itemID, UUID assetID)
 | 
			
		||||
        {
 | 
			
		||||
            if (m_items.ContainsKey(itemID))
 | 
			
		||||
                return;
 | 
			
		||||
            if (m_ids.Count >= 5)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            m_ids.Add(itemID);
 | 
			
		||||
            m_items[itemID] = assetID;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Wear(UUID itemID, UUID assetID)
 | 
			
		||||
        {
 | 
			
		||||
            Clear();
 | 
			
		||||
            Add(itemID, assetID);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Clear()
 | 
			
		||||
        {
 | 
			
		||||
            m_ids.Clear();
 | 
			
		||||
            m_items.Clear();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void RemoveItem(UUID itemID)
 | 
			
		||||
        {
 | 
			
		||||
            if (m_items.ContainsKey(itemID))
 | 
			
		||||
            {
 | 
			
		||||
                m_ids.Remove(itemID);
 | 
			
		||||
                m_items.Remove(itemID);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void RemoveAsset(UUID assetID)
 | 
			
		||||
        {
 | 
			
		||||
            UUID itemID = UUID.Zero;
 | 
			
		||||
 | 
			
		||||
            foreach (KeyValuePair<UUID, UUID> kvp in m_items)
 | 
			
		||||
            {
 | 
			
		||||
                if (kvp.Value == assetID)
 | 
			
		||||
                {
 | 
			
		||||
                    itemID = kvp.Key;
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (itemID != UUID.Zero)
 | 
			
		||||
            {
 | 
			
		||||
                m_ids.Remove(itemID);
 | 
			
		||||
                m_items.Remove(itemID);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public LayerItem this [int idx]
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                if (idx >= m_ids.Count || idx < 0)
 | 
			
		||||
                    return new LayerItem(UUID.Zero, UUID.Zero);
 | 
			
		||||
 | 
			
		||||
                return new LayerItem(m_ids[idx], m_items[m_ids[idx]]);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Contains the Avatar's Appearance and methods to manipulate the appearance.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -184,136 +86,6 @@ namespace OpenSim.Framework
 | 
			
		|||
            set { m_wearables = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual UUID BodyItem {
 | 
			
		||||
            get { return m_wearables[AvatarWearable.BODY].ItemID; }
 | 
			
		||||
            set { m_wearables[AvatarWearable.BODY].ItemID = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual UUID BodyAsset {
 | 
			
		||||
            get { return m_wearables[AvatarWearable.BODY].AssetID; }
 | 
			
		||||
            set { m_wearables[AvatarWearable.BODY].AssetID = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual UUID SkinItem {
 | 
			
		||||
            get { return m_wearables[AvatarWearable.SKIN].ItemID; }
 | 
			
		||||
            set { m_wearables[AvatarWearable.SKIN].ItemID = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual UUID SkinAsset {
 | 
			
		||||
            get { return m_wearables[AvatarWearable.SKIN].AssetID; }
 | 
			
		||||
            set { m_wearables[AvatarWearable.SKIN].AssetID = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual UUID HairItem {
 | 
			
		||||
            get { return m_wearables[AvatarWearable.HAIR].ItemID; }
 | 
			
		||||
            set { m_wearables[AvatarWearable.HAIR].ItemID = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual UUID HairAsset {
 | 
			
		||||
            get { return m_wearables[AvatarWearable.HAIR].AssetID; }
 | 
			
		||||
            set { m_wearables[AvatarWearable.HAIR].AssetID = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual UUID EyesItem {
 | 
			
		||||
            get { return m_wearables[AvatarWearable.EYES].ItemID; }
 | 
			
		||||
            set { m_wearables[AvatarWearable.EYES].ItemID = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual UUID EyesAsset {
 | 
			
		||||
            get { return m_wearables[AvatarWearable.EYES].AssetID; }
 | 
			
		||||
            set { m_wearables[AvatarWearable.EYES].AssetID = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual UUID ShirtItem {
 | 
			
		||||
            get { return m_wearables[AvatarWearable.SHIRT].ItemID; }
 | 
			
		||||
            set { m_wearables[AvatarWearable.SHIRT].ItemID = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual UUID ShirtAsset {
 | 
			
		||||
            get { return m_wearables[AvatarWearable.SHIRT].AssetID; }
 | 
			
		||||
            set { m_wearables[AvatarWearable.SHIRT].AssetID = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual UUID PantsItem {
 | 
			
		||||
            get { return m_wearables[AvatarWearable.PANTS].ItemID; }
 | 
			
		||||
            set { m_wearables[AvatarWearable.PANTS].ItemID = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual UUID PantsAsset {
 | 
			
		||||
            get { return m_wearables[AvatarWearable.PANTS].AssetID; }
 | 
			
		||||
            set { m_wearables[AvatarWearable.PANTS].AssetID = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual UUID ShoesItem {
 | 
			
		||||
            get { return m_wearables[AvatarWearable.SHOES].ItemID; }
 | 
			
		||||
            set { m_wearables[AvatarWearable.SHOES].ItemID = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual UUID ShoesAsset {
 | 
			
		||||
            get { return m_wearables[AvatarWearable.SHOES].AssetID; }
 | 
			
		||||
            set { m_wearables[AvatarWearable.SHOES].AssetID = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual UUID SocksItem {
 | 
			
		||||
            get { return m_wearables[AvatarWearable.SOCKS].ItemID; }
 | 
			
		||||
            set { m_wearables[AvatarWearable.SOCKS].ItemID = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual UUID SocksAsset {
 | 
			
		||||
            get { return m_wearables[AvatarWearable.SOCKS].AssetID; }
 | 
			
		||||
            set { m_wearables[AvatarWearable.SOCKS].AssetID = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual UUID JacketItem {
 | 
			
		||||
            get { return m_wearables[AvatarWearable.JACKET].ItemID; }
 | 
			
		||||
            set { m_wearables[AvatarWearable.JACKET].ItemID = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual UUID JacketAsset {
 | 
			
		||||
            get { return m_wearables[AvatarWearable.JACKET].AssetID; }
 | 
			
		||||
            set { m_wearables[AvatarWearable.JACKET].AssetID = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual UUID GlovesItem {
 | 
			
		||||
            get { return m_wearables[AvatarWearable.GLOVES].ItemID; }
 | 
			
		||||
            set { m_wearables[AvatarWearable.GLOVES].ItemID = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual UUID GlovesAsset {
 | 
			
		||||
            get { return m_wearables[AvatarWearable.GLOVES].AssetID; }
 | 
			
		||||
            set { m_wearables[AvatarWearable.GLOVES].AssetID = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual UUID UnderShirtItem {
 | 
			
		||||
            get { return m_wearables[AvatarWearable.UNDERSHIRT].ItemID; }
 | 
			
		||||
            set { m_wearables[AvatarWearable.UNDERSHIRT].ItemID = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual UUID UnderShirtAsset {
 | 
			
		||||
            get { return m_wearables[AvatarWearable.UNDERSHIRT].AssetID; }
 | 
			
		||||
            set { m_wearables[AvatarWearable.UNDERSHIRT].AssetID = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual UUID UnderPantsItem {
 | 
			
		||||
            get { return m_wearables[AvatarWearable.UNDERPANTS].ItemID; }
 | 
			
		||||
            set { m_wearables[AvatarWearable.UNDERPANTS].ItemID = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual UUID UnderPantsAsset {
 | 
			
		||||
            get { return m_wearables[AvatarWearable.UNDERPANTS].AssetID; }
 | 
			
		||||
            set { m_wearables[AvatarWearable.UNDERPANTS].AssetID = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual UUID SkirtItem {
 | 
			
		||||
            get { return m_wearables[AvatarWearable.SKIRT].ItemID; }
 | 
			
		||||
            set { m_wearables[AvatarWearable.SKIRT].ItemID = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual UUID SkirtAsset {
 | 
			
		||||
            get { return m_wearables[AvatarWearable.SKIRT].AssetID; }
 | 
			
		||||
            set { m_wearables[AvatarWearable.SKIRT].AssetID = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual float AvatarHeight
 | 
			
		||||
        {
 | 
			
		||||
            get { return m_avatarHeight; }
 | 
			
		||||
| 
						 | 
				
			
			@ -403,7 +175,7 @@ namespace OpenSim.Framework
 | 
			
		|||
            m_wearables = null;
 | 
			
		||||
            if (appearance.Wearables != null)
 | 
			
		||||
            {
 | 
			
		||||
                m_wearables = new AvatarWearable[AvatarWearable.MAX_WEARABLES]; //should be 13 of these
 | 
			
		||||
                m_wearables = new AvatarWearable[AvatarWearable.MAX_WEARABLES]; //should be 15 of these
 | 
			
		||||
                for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
 | 
			
		||||
                    SetWearable(i,appearance.Wearables[i]);
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -547,7 +319,9 @@ namespace OpenSim.Framework
 | 
			
		|||
// DEBUG ON
 | 
			
		||||
//          m_log.WarnFormat("[AVATARAPPEARANCE] set wearable {0} --> {1}:{2}",wearableId,wearable.ItemID,wearable.AssetID);
 | 
			
		||||
// DEBUG OFF
 | 
			
		||||
            m_wearables[wearableId] = new AvatarWearable(wearable.ItemID,wearable.AssetID);
 | 
			
		||||
            m_wearables[wearableId].Clear();
 | 
			
		||||
            for (int i = 0 ; i < wearable.Count ; i++)
 | 
			
		||||
                m_wearables[wearableId].Add(wearable[i].ItemID, wearable[i].AssetID);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -563,7 +337,10 @@ namespace OpenSim.Framework
 | 
			
		|||
                    s += String.Format("Texture: {0} --> {1}\n",i,m_texture.FaceTextures[i].TextureID);
 | 
			
		||||
 | 
			
		||||
            foreach (AvatarWearable awear in m_wearables)
 | 
			
		||||
                s += String.Format("Wearable: item={0}, asset={1}\n",awear.ItemID,awear.AssetID);
 | 
			
		||||
            {
 | 
			
		||||
                for ( int i = 0 ; i < awear.Count ; i++ )
 | 
			
		||||
                    s += String.Format("Wearable: item={0}, asset={1}\n",awear[i].ItemID,awear[i].AssetID);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            s += "Visual Params: ";
 | 
			
		||||
            for (uint j = 0; j < AvatarAppearance.VISUALPARAM_COUNT; j++)
 | 
			
		||||
| 
						 | 
				
			
			@ -733,7 +510,7 @@ namespace OpenSim.Framework
 | 
			
		|||
                {
 | 
			
		||||
                    OSDArray wears = (OSDArray)(data["wearables"]);
 | 
			
		||||
                    for (int i = 0; i < wears.Count; i++) 
 | 
			
		||||
                        m_wearables[i] = new AvatarWearable((OSDMap)wears[i]);
 | 
			
		||||
                        m_wearables[i] = new AvatarWearable((OSDArray)wears[i]);
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,11 +26,24 @@
 | 
			
		|||
 */
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using OpenMetaverse;
 | 
			
		||||
using OpenMetaverse.StructuredData;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Framework
 | 
			
		||||
{
 | 
			
		||||
    public struct WearableItem
 | 
			
		||||
    {
 | 
			
		||||
        public UUID ItemID;
 | 
			
		||||
        public UUID AssetID;
 | 
			
		||||
 | 
			
		||||
        public WearableItem(UUID itemID, UUID assetID)
 | 
			
		||||
        {
 | 
			
		||||
            ItemID = itemID;
 | 
			
		||||
            AssetID = assetID;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class AvatarWearable
 | 
			
		||||
    {
 | 
			
		||||
        // these are guessed at by the list here -
 | 
			
		||||
| 
						 | 
				
			
			@ -49,8 +62,10 @@ namespace OpenSim.Framework
 | 
			
		|||
        public static readonly int UNDERSHIRT = 10;
 | 
			
		||||
        public static readonly int UNDERPANTS = 11;
 | 
			
		||||
        public static readonly int SKIRT = 12;
 | 
			
		||||
        public static readonly int ALPHA = 13;
 | 
			
		||||
        public static readonly int TATTOO = 15;
 | 
			
		||||
 | 
			
		||||
        public static readonly int MAX_WEARABLES = 13;
 | 
			
		||||
        public static readonly int MAX_WEARABLES = 15;
 | 
			
		||||
 | 
			
		||||
        public static readonly UUID DEFAULT_BODY_ITEM = new UUID("66c41e39-38f9-f75a-024e-585989bfaba9");
 | 
			
		||||
        public static readonly UUID DEFAULT_BODY_ASSET = new UUID("66c41e39-38f9-f75a-024e-585989bfab73");
 | 
			
		||||
| 
						 | 
				
			
			@ -67,68 +82,158 @@ namespace OpenSim.Framework
 | 
			
		|||
        public static readonly UUID DEFAULT_PANTS_ITEM = new UUID("77c41e39-38f9-f75a-0000-5859892f1111");
 | 
			
		||||
        public static readonly UUID DEFAULT_PANTS_ASSET = new UUID("00000000-38f9-1111-024e-222222111120");
 | 
			
		||||
 | 
			
		||||
        public UUID AssetID;
 | 
			
		||||
        public UUID ItemID;
 | 
			
		||||
        public static readonly UUID DEFAULT_ALPHA_ITEM = new UUID("bfb9923c-4838-4d2d-bf07-608c5b1165c8");
 | 
			
		||||
        public static readonly UUID DEFAULT_ALPHA_ASSET = new UUID("1578a2b1-5179-4b53-b618-fe00ca5a5594");
 | 
			
		||||
 | 
			
		||||
        public static readonly UUID DEFAULT_TATTOO_ITEM = new UUID("c47e22bd-3021-4ba4-82aa-2b5cb34d35e1");
 | 
			
		||||
        public static readonly UUID DEFAULT_TATTOO_ASSET = new UUID("00000000-0000-2222-3333-100000001007");
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
        protected Dictionary<UUID, UUID> m_items = new Dictionary<UUID, UUID>();
 | 
			
		||||
        protected List<UUID> m_ids = new List<UUID>();
 | 
			
		||||
 | 
			
		||||
        public AvatarWearable()
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public AvatarWearable(UUID itemId, UUID assetId)
 | 
			
		||||
        public AvatarWearable(UUID itemID, UUID assetID)
 | 
			
		||||
        {
 | 
			
		||||
            AssetID = assetId;
 | 
			
		||||
            ItemID = itemId;
 | 
			
		||||
            Wear(itemID, assetID);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public AvatarWearable(OSDMap args)
 | 
			
		||||
        public AvatarWearable(OSDArray args)
 | 
			
		||||
        {
 | 
			
		||||
            Unpack(args);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public OSDMap Pack()
 | 
			
		||||
        public OSD Pack()
 | 
			
		||||
        {
 | 
			
		||||
            OSDMap weardata = new OSDMap();
 | 
			
		||||
            weardata["item"] = OSD.FromUUID(ItemID);
 | 
			
		||||
            weardata["asset"] = OSD.FromUUID(AssetID);
 | 
			
		||||
            OSDArray wearlist = new OSDArray();
 | 
			
		||||
 | 
			
		||||
            return weardata;
 | 
			
		||||
            foreach (UUID id in m_ids)
 | 
			
		||||
            {
 | 
			
		||||
                OSDMap weardata = new OSDMap();
 | 
			
		||||
                weardata["item"] = OSD.FromUUID(id);
 | 
			
		||||
                weardata["asset"] = OSD.FromUUID(m_items[id]);
 | 
			
		||||
                wearlist.Add(weardata);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return wearlist;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Unpack(OSDMap args)
 | 
			
		||||
        public void Unpack(OSDArray args)
 | 
			
		||||
        {
 | 
			
		||||
            ItemID = (args["item"] != null) ? args["item"].AsUUID() : UUID.Zero;
 | 
			
		||||
            AssetID = (args["asset"] != null) ? args["asset"].AsUUID() : UUID.Zero;
 | 
			
		||||
            Clear();
 | 
			
		||||
 | 
			
		||||
            foreach (OSDMap weardata in args)
 | 
			
		||||
            {
 | 
			
		||||
                Add(weardata["item"].AsUUID(), weardata["asset"].AsUUID());
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public int Count
 | 
			
		||||
        {
 | 
			
		||||
            get { return m_ids.Count; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Add(UUID itemID, UUID assetID)
 | 
			
		||||
        {
 | 
			
		||||
            if (itemID == UUID.Zero)
 | 
			
		||||
                return;
 | 
			
		||||
            if (m_items.ContainsKey(itemID))
 | 
			
		||||
            {
 | 
			
		||||
                m_items[itemID] = assetID;
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            if (m_ids.Count >= 5)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            m_ids.Add(itemID);
 | 
			
		||||
            m_items[itemID] = assetID;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Wear(UUID itemID, UUID assetID)
 | 
			
		||||
        {
 | 
			
		||||
            Clear();
 | 
			
		||||
            Add(itemID, assetID);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Clear()
 | 
			
		||||
        {
 | 
			
		||||
            m_ids.Clear();
 | 
			
		||||
            m_items.Clear();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void RemoveItem(UUID itemID)
 | 
			
		||||
        {
 | 
			
		||||
            if (m_items.ContainsKey(itemID))
 | 
			
		||||
            {
 | 
			
		||||
                m_ids.Remove(itemID);
 | 
			
		||||
                m_items.Remove(itemID);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void RemoveAsset(UUID assetID)
 | 
			
		||||
        {
 | 
			
		||||
            UUID itemID = UUID.Zero;
 | 
			
		||||
 | 
			
		||||
            foreach (KeyValuePair<UUID, UUID> kvp in m_items)
 | 
			
		||||
            {
 | 
			
		||||
                if (kvp.Value == assetID)
 | 
			
		||||
                {
 | 
			
		||||
                    itemID = kvp.Key;
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (itemID != UUID.Zero)
 | 
			
		||||
            {
 | 
			
		||||
                m_ids.Remove(itemID);
 | 
			
		||||
                m_items.Remove(itemID);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public WearableItem this [int idx]
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                if (idx >= m_ids.Count || idx < 0)
 | 
			
		||||
                    return new WearableItem(UUID.Zero, UUID.Zero);
 | 
			
		||||
 | 
			
		||||
                return new WearableItem(m_ids[idx], m_items[m_ids[idx]]);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static AvatarWearable[] DefaultWearables
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                AvatarWearable[] defaultWearables = new AvatarWearable[MAX_WEARABLES]; //should be 13 of these
 | 
			
		||||
                AvatarWearable[] defaultWearables = new AvatarWearable[MAX_WEARABLES]; //should be 15 of these
 | 
			
		||||
                for (int i = 0; i < MAX_WEARABLES; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    defaultWearables[i] = new AvatarWearable();
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
                // Body
 | 
			
		||||
                defaultWearables[0].ItemID  = DEFAULT_BODY_ITEM;
 | 
			
		||||
                defaultWearables[0].AssetID = DEFAULT_BODY_ASSET;
 | 
			
		||||
                defaultWearables[BODY].Add(DEFAULT_BODY_ITEM, DEFAULT_BODY_ASSET);
 | 
			
		||||
                
 | 
			
		||||
                // Hair
 | 
			
		||||
                defaultWearables[2].ItemID  = DEFAULT_HAIR_ITEM;
 | 
			
		||||
                defaultWearables[2].AssetID = DEFAULT_HAIR_ASSET;
 | 
			
		||||
                defaultWearables[HAIR].Add(DEFAULT_HAIR_ITEM, DEFAULT_HAIR_ASSET);
 | 
			
		||||
 | 
			
		||||
                // Skin
 | 
			
		||||
                defaultWearables[1].ItemID  = DEFAULT_SKIN_ITEM;
 | 
			
		||||
                defaultWearables[1].AssetID = DEFAULT_SKIN_ASSET;
 | 
			
		||||
                defaultWearables[SKIN].Add(DEFAULT_SKIN_ITEM, DEFAULT_SKIN_ASSET);
 | 
			
		||||
 | 
			
		||||
                // Shirt
 | 
			
		||||
                defaultWearables[4].ItemID  = DEFAULT_SHIRT_ITEM;
 | 
			
		||||
                defaultWearables[4].AssetID = DEFAULT_SHIRT_ASSET;
 | 
			
		||||
                defaultWearables[SHIRT].Add(DEFAULT_SHIRT_ITEM, DEFAULT_SHIRT_ASSET);
 | 
			
		||||
 | 
			
		||||
                // Pants
 | 
			
		||||
                defaultWearables[5].ItemID  = DEFAULT_PANTS_ITEM;
 | 
			
		||||
                defaultWearables[5].AssetID = DEFAULT_PANTS_ASSET;
 | 
			
		||||
                defaultWearables[PANTS].Add(DEFAULT_PANTS_ITEM, DEFAULT_PANTS_ASSET);
 | 
			
		||||
                
 | 
			
		||||
                // Alpha
 | 
			
		||||
                defaultWearables[ALPHA].Add(DEFAULT_ALPHA_ITEM, DEFAULT_ALPHA_ASSET);
 | 
			
		||||
                
 | 
			
		||||
                // Tattoo
 | 
			
		||||
                defaultWearables[TATTOO].Add(DEFAULT_TATTOO_ITEM, DEFAULT_TATTOO_ASSET);
 | 
			
		||||
                
 | 
			
		||||
                return defaultWearables;
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -414,12 +414,10 @@ namespace OpenSim.Framework
 | 
			
		|||
            // We might not pass this in all cases...
 | 
			
		||||
            if ((Appearance.Wearables != null) && (Appearance.Wearables.Length > 0))
 | 
			
		||||
            {
 | 
			
		||||
                OSDArray wears = new OSDArray(Appearance.Wearables.Length * 2);
 | 
			
		||||
                OSDArray wears = new OSDArray(Appearance.Wearables.Length);
 | 
			
		||||
                foreach (AvatarWearable awear in Appearance.Wearables)
 | 
			
		||||
                {
 | 
			
		||||
                    wears.Add(OSD.FromUUID(awear.ItemID));
 | 
			
		||||
                    wears.Add(OSD.FromUUID(awear.AssetID));
 | 
			
		||||
                }
 | 
			
		||||
                    wears.Add(awear.Pack());
 | 
			
		||||
 | 
			
		||||
                args["wearables"] = wears;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -592,7 +590,7 @@ namespace OpenSim.Framework
 | 
			
		|||
                OSDArray wears = (OSDArray)(args["wearables"]);
 | 
			
		||||
                for (int i = 0; i < wears.Count / 2; i++) 
 | 
			
		||||
                {
 | 
			
		||||
                    AvatarWearable awear = new AvatarWearable(wears[i*2].AsUUID(),wears[(i*2)+1].AsUUID());
 | 
			
		||||
                    AvatarWearable awear = new AvatarWearable((OSDArray)wears[i]);
 | 
			
		||||
                    Appearance.SetWearable(i,awear);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -69,6 +69,6 @@ namespace OpenSim
 | 
			
		|||
        /// of the code that is too old. 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </value>
 | 
			
		||||
        public readonly static int MajorInterfaceVersion = 6;
 | 
			
		||||
        public readonly static int MajorInterfaceVersion = 7;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3387,20 +3387,29 @@ namespace OpenSim.Region.ClientStack.LindenUDP
 | 
			
		|||
            aw.AgentData.SerialNum = (uint)serial;
 | 
			
		||||
            aw.AgentData.SessionID = m_sessionId;
 | 
			
		||||
 | 
			
		||||
            int count = 0;
 | 
			
		||||
            for (int i = 0; i < wearables.Length; i++)
 | 
			
		||||
                count += wearables[i].Count;
 | 
			
		||||
 | 
			
		||||
            // TODO: don't create new blocks if recycling an old packet
 | 
			
		||||
            aw.WearableData = new AgentWearablesUpdatePacket.WearableDataBlock[13];
 | 
			
		||||
            aw.WearableData = new AgentWearablesUpdatePacket.WearableDataBlock[count];
 | 
			
		||||
            AgentWearablesUpdatePacket.WearableDataBlock awb;
 | 
			
		||||
            int idx = 0;
 | 
			
		||||
            for (int i = 0; i < wearables.Length; i++)
 | 
			
		||||
            {
 | 
			
		||||
                awb = new AgentWearablesUpdatePacket.WearableDataBlock();
 | 
			
		||||
                awb.WearableType = (byte)i;
 | 
			
		||||
                awb.AssetID = wearables[i].AssetID;
 | 
			
		||||
                awb.ItemID = wearables[i].ItemID;
 | 
			
		||||
                aw.WearableData[i] = awb;
 | 
			
		||||
                for (int j = 0; j < wearables[i].Count; j++)
 | 
			
		||||
                {
 | 
			
		||||
                    awb = new AgentWearablesUpdatePacket.WearableDataBlock();
 | 
			
		||||
                    awb.WearableType = (byte)i;
 | 
			
		||||
                    awb.AssetID = wearables[i][j].AssetID;
 | 
			
		||||
                    awb.ItemID = wearables[i][j].ItemID;
 | 
			
		||||
                    aw.WearableData[idx] = awb;
 | 
			
		||||
                    idx++;
 | 
			
		||||
 | 
			
		||||
//                                m_log.DebugFormat(
 | 
			
		||||
//                                    "[APPEARANCE]: Sending wearable item/asset {0} {1} (index {2}) for {3}",
 | 
			
		||||
//                                    awb.ItemID, awb.AssetID, i, Name);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            OutPacket(aw, ThrottleOutPacketType.Task);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -382,27 +382,22 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
 | 
			
		|||
            {
 | 
			
		||||
                for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    if (appearance.Wearables[i].ItemID == UUID.Zero)
 | 
			
		||||
                    for (int j = 0 ; j < appearance.Wearables[j].Count ; j ++ )
 | 
			
		||||
                    {
 | 
			
		||||
                        appearance.Wearables[i].AssetID = UUID.Zero;
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        InventoryItemBase baseItem = new InventoryItemBase(appearance.Wearables[i].ItemID, userID);
 | 
			
		||||
                        InventoryItemBase baseItem = new InventoryItemBase(appearance.Wearables[i][j].ItemID, userID);
 | 
			
		||||
                        baseItem = invService.GetItem(baseItem);
 | 
			
		||||
 | 
			
		||||
                        if (baseItem != null)
 | 
			
		||||
                        {
 | 
			
		||||
                            appearance.Wearables[i].AssetID = baseItem.AssetID;
 | 
			
		||||
                            appearance.Wearables[i].Add(appearance.Wearables[i][j].ItemID, baseItem.AssetID);
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            m_log.ErrorFormat(
 | 
			
		||||
                                "[AVATAR FACTORY MODULE]: Can't find inventory item {0} for {1}, setting to default", 
 | 
			
		||||
                                appearance.Wearables[i].ItemID, (WearableType)i);
 | 
			
		||||
                                appearance.Wearables[i][j].ItemID, (WearableType)i);
 | 
			
		||||
                            
 | 
			
		||||
                            appearance.Wearables[i].ItemID = UUID.Zero;
 | 
			
		||||
                            appearance.Wearables[i].AssetID = UUID.Zero;
 | 
			
		||||
                            appearance.Wearables[i].RemoveItem(appearance.Wearables[i][j].ItemID);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -265,32 +265,33 @@ namespace OpenSim.Services.Connectors.SimianGrid
 | 
			
		|||
 | 
			
		||||
                map["Height"] = OSD.FromReal(appearance.AvatarHeight);
 | 
			
		||||
 | 
			
		||||
                map["ShapeItem"] = OSD.FromUUID(appearance.BodyItem);
 | 
			
		||||
                map["ShapeAsset"] = OSD.FromUUID(appearance.BodyAsset);
 | 
			
		||||
                map["SkinItem"] = OSD.FromUUID(appearance.SkinItem);
 | 
			
		||||
                map["SkinAsset"] = OSD.FromUUID(appearance.SkinAsset);
 | 
			
		||||
                map["HairItem"] = OSD.FromUUID(appearance.HairItem);
 | 
			
		||||
                map["HairAsset"] = OSD.FromUUID(appearance.HairAsset);
 | 
			
		||||
                map["EyesItem"] = OSD.FromUUID(appearance.EyesItem);
 | 
			
		||||
                map["EyesAsset"] = OSD.FromUUID(appearance.EyesAsset);
 | 
			
		||||
                map["ShirtItem"] = OSD.FromUUID(appearance.ShirtItem);
 | 
			
		||||
                map["ShirtAsset"] = OSD.FromUUID(appearance.ShirtAsset);
 | 
			
		||||
                map["PantsItem"] = OSD.FromUUID(appearance.PantsItem);
 | 
			
		||||
                map["PantsAsset"] = OSD.FromUUID(appearance.PantsAsset);
 | 
			
		||||
                map["ShoesItem"] = OSD.FromUUID(appearance.ShoesItem);
 | 
			
		||||
                map["ShoesAsset"] = OSD.FromUUID(appearance.ShoesAsset);
 | 
			
		||||
                map["SocksItem"] = OSD.FromUUID(appearance.SocksItem);
 | 
			
		||||
                map["SocksAsset"] = OSD.FromUUID(appearance.SocksAsset);
 | 
			
		||||
                map["JacketItem"] = OSD.FromUUID(appearance.JacketItem);
 | 
			
		||||
                map["JacketAsset"] = OSD.FromUUID(appearance.JacketAsset);
 | 
			
		||||
                map["GlovesItem"] = OSD.FromUUID(appearance.GlovesItem);
 | 
			
		||||
                map["GlovesAsset"] = OSD.FromUUID(appearance.GlovesAsset);
 | 
			
		||||
                map["UndershirtItem"] = OSD.FromUUID(appearance.UnderShirtItem);
 | 
			
		||||
                map["UndershirtAsset"] = OSD.FromUUID(appearance.UnderShirtAsset);
 | 
			
		||||
                map["UnderpantsItem"] = OSD.FromUUID(appearance.UnderPantsItem);
 | 
			
		||||
                map["UnderpantsAsset"] = OSD.FromUUID(appearance.UnderPantsAsset);
 | 
			
		||||
                map["SkirtItem"] = OSD.FromUUID(appearance.SkirtItem);
 | 
			
		||||
                map["SkirtAsset"] = OSD.FromUUID(appearance.SkirtAsset);
 | 
			
		||||
                map["BodyItem"] = appearance.Wearables[AvatarWearable.BODY][0].ItemID.ToString();
 | 
			
		||||
                map["EyesItem"] = appearance.Wearables[AvatarWearable.EYES][0].ItemID.ToString();
 | 
			
		||||
                map["GlovesItem"] = appearance.Wearables[AvatarWearable.GLOVES][0].ItemID.ToString();
 | 
			
		||||
                map["HairItem"] = appearance.Wearables[AvatarWearable.HAIR][0].ItemID.ToString();
 | 
			
		||||
                map["JacketItem"] = appearance.Wearables[AvatarWearable.JACKET][0].ItemID.ToString();
 | 
			
		||||
                map["PantsItem"] = appearance.Wearables[AvatarWearable.PANTS][0].ItemID.ToString();
 | 
			
		||||
                map["ShirtItem"] = appearance.Wearables[AvatarWearable.SHIRT][0].ItemID.ToString();
 | 
			
		||||
                map["ShoesItem"] = appearance.Wearables[AvatarWearable.SHOES][0].ItemID.ToString();
 | 
			
		||||
                map["SkinItem"] = appearance.Wearables[AvatarWearable.SKIN][0].ItemID.ToString();
 | 
			
		||||
                map["SkirtItem"] = appearance.Wearables[AvatarWearable.SKIRT][0].ItemID.ToString();
 | 
			
		||||
                map["SocksItem"] = appearance.Wearables[AvatarWearable.SOCKS][0].ItemID.ToString();
 | 
			
		||||
                map["UnderPantsItem"] = appearance.Wearables[AvatarWearable.UNDERPANTS][0].ItemID.ToString();
 | 
			
		||||
                map["UnderShirtItem"] = appearance.Wearables[AvatarWearable.UNDERSHIRT][0].ItemID.ToString();
 | 
			
		||||
                map["BodyAsset"] = appearance.Wearables[AvatarWearable.BODY][0].AssetID.ToString();
 | 
			
		||||
                map["EyesAsset"] = appearance.Wearables[AvatarWearable.EYES][0].AssetID.ToString();
 | 
			
		||||
                map["GlovesAsset"] = appearance.Wearables[AvatarWearable.GLOVES][0].AssetID.ToString();
 | 
			
		||||
                map["HairAsset"] = appearance.Wearables[AvatarWearable.HAIR][0].AssetID.ToString();
 | 
			
		||||
                map["JacketAsset"] = appearance.Wearables[AvatarWearable.JACKET][0].AssetID.ToString();
 | 
			
		||||
                map["PantsAsset"] = appearance.Wearables[AvatarWearable.PANTS][0].AssetID.ToString();
 | 
			
		||||
                map["ShirtAsset"] = appearance.Wearables[AvatarWearable.SHIRT][0].AssetID.ToString();
 | 
			
		||||
                map["ShoesAsset"] = appearance.Wearables[AvatarWearable.SHOES][0].AssetID.ToString();
 | 
			
		||||
                map["SkinAsset"] = appearance.Wearables[AvatarWearable.SKIN][0].AssetID.ToString();
 | 
			
		||||
                map["SkirtAsset"] = appearance.Wearables[AvatarWearable.SKIRT][0].AssetID.ToString();
 | 
			
		||||
                map["SocksAsset"] = appearance.Wearables[AvatarWearable.SOCKS][0].AssetID.ToString();
 | 
			
		||||
                map["UnderPantsAsset"] = appearance.Wearables[AvatarWearable.UNDERPANTS][0].AssetID.ToString();
 | 
			
		||||
                map["UnderShirtAsset"] = appearance.Wearables[AvatarWearable.UNDERSHIRT][0].AssetID.ToString();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                OSDMap items = new OSDMap();
 | 
			
		||||
                foreach (KeyValuePair<string, string> kvp in avatar.Data)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -149,33 +149,33 @@ namespace OpenSim.Services.Interfaces
 | 
			
		|||
            Data["Serial"] = appearance.Serial.ToString();
 | 
			
		||||
            // Wearables
 | 
			
		||||
            Data["AvatarHeight"] = appearance.AvatarHeight.ToString();
 | 
			
		||||
            Data["BodyItem"] = appearance.BodyItem.ToString();
 | 
			
		||||
            Data["EyesItem"] = appearance.EyesItem.ToString();
 | 
			
		||||
            Data["GlovesItem"] = appearance.GlovesItem.ToString();
 | 
			
		||||
            Data["HairItem"] = appearance.HairItem.ToString();
 | 
			
		||||
            Data["JacketItem"] = appearance.JacketItem.ToString();
 | 
			
		||||
            Data["PantsItem"] = appearance.PantsItem.ToString();
 | 
			
		||||
            Data["ShirtItem"] = appearance.ShirtItem.ToString();
 | 
			
		||||
            Data["ShoesItem"] = appearance.ShoesItem.ToString();
 | 
			
		||||
            Data["SkinItem"] = appearance.SkinItem.ToString();
 | 
			
		||||
            Data["SkirtItem"] = appearance.SkirtItem.ToString();
 | 
			
		||||
            Data["SocksItem"] = appearance.SocksItem.ToString();
 | 
			
		||||
            Data["UnderPantsItem"] = appearance.UnderPantsItem.ToString();
 | 
			
		||||
            Data["UnderShirtItem"] = appearance.UnderShirtItem.ToString();
 | 
			
		||||
            Data["BodyItem"] = appearance.Wearables[AvatarWearable.BODY][0].ItemID.ToString();
 | 
			
		||||
            Data["EyesItem"] = appearance.Wearables[AvatarWearable.EYES][0].ItemID.ToString();
 | 
			
		||||
            Data["GlovesItem"] = appearance.Wearables[AvatarWearable.GLOVES][0].ItemID.ToString();
 | 
			
		||||
            Data["HairItem"] = appearance.Wearables[AvatarWearable.HAIR][0].ItemID.ToString();
 | 
			
		||||
            Data["JacketItem"] = appearance.Wearables[AvatarWearable.JACKET][0].ItemID.ToString();
 | 
			
		||||
            Data["PantsItem"] = appearance.Wearables[AvatarWearable.PANTS][0].ItemID.ToString();
 | 
			
		||||
            Data["ShirtItem"] = appearance.Wearables[AvatarWearable.SHIRT][0].ItemID.ToString();
 | 
			
		||||
            Data["ShoesItem"] = appearance.Wearables[AvatarWearable.SHOES][0].ItemID.ToString();
 | 
			
		||||
            Data["SkinItem"] = appearance.Wearables[AvatarWearable.SKIN][0].ItemID.ToString();
 | 
			
		||||
            Data["SkirtItem"] = appearance.Wearables[AvatarWearable.SKIRT][0].ItemID.ToString();
 | 
			
		||||
            Data["SocksItem"] = appearance.Wearables[AvatarWearable.SOCKS][0].ItemID.ToString();
 | 
			
		||||
            Data["UnderPantsItem"] = appearance.Wearables[AvatarWearable.UNDERPANTS][0].ItemID.ToString();
 | 
			
		||||
            Data["UnderShirtItem"] = appearance.Wearables[AvatarWearable.UNDERSHIRT][0].ItemID.ToString();
 | 
			
		||||
 | 
			
		||||
            Data["BodyAsset"] = appearance.BodyAsset.ToString();
 | 
			
		||||
            Data["EyesAsset"] = appearance.EyesAsset.ToString();
 | 
			
		||||
            Data["GlovesAsset"] = appearance.GlovesAsset.ToString();
 | 
			
		||||
            Data["HairAsset"] = appearance.HairAsset.ToString();
 | 
			
		||||
            Data["JacketAsset"] = appearance.JacketAsset.ToString();
 | 
			
		||||
            Data["PantsAsset"] = appearance.PantsAsset.ToString();
 | 
			
		||||
            Data["ShirtAsset"] = appearance.ShirtAsset.ToString();
 | 
			
		||||
            Data["ShoesAsset"] = appearance.ShoesAsset.ToString();
 | 
			
		||||
            Data["SkinAsset"] = appearance.SkinAsset.ToString();
 | 
			
		||||
            Data["SkirtAsset"] = appearance.SkirtAsset.ToString();
 | 
			
		||||
            Data["SocksAsset"] = appearance.SocksAsset.ToString();
 | 
			
		||||
            Data["UnderPantsAsset"] = appearance.UnderPantsAsset.ToString();
 | 
			
		||||
            Data["UnderShirtAsset"] = appearance.UnderShirtAsset.ToString();
 | 
			
		||||
            Data["BodyAsset"] = appearance.Wearables[AvatarWearable.BODY][0].AssetID.ToString();
 | 
			
		||||
            Data["EyesAsset"] = appearance.Wearables[AvatarWearable.EYES][0].AssetID.ToString();
 | 
			
		||||
            Data["GlovesAsset"] = appearance.Wearables[AvatarWearable.GLOVES][0].AssetID.ToString();
 | 
			
		||||
            Data["HairAsset"] = appearance.Wearables[AvatarWearable.HAIR][0].AssetID.ToString();
 | 
			
		||||
            Data["JacketAsset"] = appearance.Wearables[AvatarWearable.JACKET][0].AssetID.ToString();
 | 
			
		||||
            Data["PantsAsset"] = appearance.Wearables[AvatarWearable.PANTS][0].AssetID.ToString();
 | 
			
		||||
            Data["ShirtAsset"] = appearance.Wearables[AvatarWearable.SHIRT][0].AssetID.ToString();
 | 
			
		||||
            Data["ShoesAsset"] = appearance.Wearables[AvatarWearable.SHOES][0].AssetID.ToString();
 | 
			
		||||
            Data["SkinAsset"] = appearance.Wearables[AvatarWearable.SKIN][0].AssetID.ToString();
 | 
			
		||||
            Data["SkirtAsset"] = appearance.Wearables[AvatarWearable.SKIRT][0].AssetID.ToString();
 | 
			
		||||
            Data["SocksAsset"] = appearance.Wearables[AvatarWearable.SOCKS][0].AssetID.ToString();
 | 
			
		||||
            Data["UnderPantsAsset"] = appearance.Wearables[AvatarWearable.UNDERPANTS][0].AssetID.ToString();
 | 
			
		||||
            Data["UnderShirtAsset"] = appearance.Wearables[AvatarWearable.UNDERSHIRT][0].AssetID.ToString();
 | 
			
		||||
 | 
			
		||||
            // Attachments
 | 
			
		||||
            List<AvatarAttachment> attachments = appearance.GetAttachments();
 | 
			
		||||
| 
						 | 
				
			
			@ -193,33 +193,57 @@ namespace OpenSim.Services.Interfaces
 | 
			
		|||
                appearance.Serial = Int32.Parse(Data["Serial"]);
 | 
			
		||||
 | 
			
		||||
                // Wearables
 | 
			
		||||
                appearance.BodyItem = UUID.Parse(Data["BodyItem"]);
 | 
			
		||||
                appearance.EyesItem = UUID.Parse(Data["EyesItem"]);
 | 
			
		||||
                appearance.GlovesItem = UUID.Parse(Data["GlovesItem"]);
 | 
			
		||||
                appearance.HairItem = UUID.Parse(Data["HairItem"]);
 | 
			
		||||
                appearance.JacketItem = UUID.Parse(Data["JacketItem"]);
 | 
			
		||||
                appearance.PantsItem = UUID.Parse(Data["PantsItem"]);
 | 
			
		||||
                appearance.ShirtItem = UUID.Parse(Data["ShirtItem"]);
 | 
			
		||||
                appearance.ShoesItem = UUID.Parse(Data["ShoesItem"]);
 | 
			
		||||
                appearance.SkinItem = UUID.Parse(Data["SkinItem"]);
 | 
			
		||||
                appearance.SkirtItem = UUID.Parse(Data["SkirtItem"]);
 | 
			
		||||
                appearance.SocksItem = UUID.Parse(Data["SocksItem"]);
 | 
			
		||||
                appearance.UnderPantsItem = UUID.Parse(Data["UnderPantsItem"]);
 | 
			
		||||
                appearance.UnderShirtItem = UUID.Parse(Data["UnderShirtItem"]);
 | 
			
		||||
                appearance.Wearables[AvatarWearable.BODY].Wear(
 | 
			
		||||
                        UUID.Parse(Data["BodyItem"]),
 | 
			
		||||
                        UUID.Parse(Data["BodyAsset"]));
 | 
			
		||||
 | 
			
		||||
                appearance.BodyAsset = UUID.Parse(Data["BodyAsset"]);
 | 
			
		||||
                appearance.EyesAsset = UUID.Parse(Data["EyesAsset"]);
 | 
			
		||||
                appearance.GlovesAsset = UUID.Parse(Data["GlovesAsset"]);
 | 
			
		||||
                appearance.HairAsset = UUID.Parse(Data["HairAsset"]);
 | 
			
		||||
                appearance.JacketAsset = UUID.Parse(Data["JacketAsset"]);
 | 
			
		||||
                appearance.PantsAsset = UUID.Parse(Data["PantsAsset"]);
 | 
			
		||||
                appearance.ShirtAsset = UUID.Parse(Data["ShirtAsset"]);
 | 
			
		||||
                appearance.ShoesAsset = UUID.Parse(Data["ShoesAsset"]);
 | 
			
		||||
                appearance.SkinAsset = UUID.Parse(Data["SkinAsset"]);
 | 
			
		||||
                appearance.SkirtAsset = UUID.Parse(Data["SkirtAsset"]);
 | 
			
		||||
                appearance.SocksAsset = UUID.Parse(Data["SocksAsset"]);
 | 
			
		||||
                appearance.UnderPantsAsset = UUID.Parse(Data["UnderPantsAsset"]);
 | 
			
		||||
                appearance.UnderShirtAsset = UUID.Parse(Data["UnderShirtAsset"]);
 | 
			
		||||
                appearance.Wearables[AvatarWearable.SKIN].Wear(
 | 
			
		||||
                        UUID.Parse(Data["SkinItem"]),
 | 
			
		||||
                        UUID.Parse(Data["SkinAsset"]));
 | 
			
		||||
 | 
			
		||||
                appearance.Wearables[AvatarWearable.HAIR].Wear(
 | 
			
		||||
                        UUID.Parse(Data["HairItem"]),
 | 
			
		||||
                        UUID.Parse(Data["HairAsset"]));
 | 
			
		||||
 | 
			
		||||
                appearance.Wearables[AvatarWearable.EYES].Wear(
 | 
			
		||||
                        UUID.Parse(Data["EyesItem"]),
 | 
			
		||||
                        UUID.Parse(Data["EyesAsset"]));
 | 
			
		||||
 | 
			
		||||
                appearance.Wearables[AvatarWearable.SHIRT].Wear(
 | 
			
		||||
                        UUID.Parse(Data["ShirtItem"]),
 | 
			
		||||
                        UUID.Parse(Data["ShirtAsset"]));
 | 
			
		||||
 | 
			
		||||
                appearance.Wearables[AvatarWearable.PANTS].Wear(
 | 
			
		||||
                        UUID.Parse(Data["PantsItem"]),
 | 
			
		||||
                        UUID.Parse(Data["PantsAsset"]));
 | 
			
		||||
 | 
			
		||||
                appearance.Wearables[AvatarWearable.SHOES].Wear(
 | 
			
		||||
                        UUID.Parse(Data["ShoesItem"]),
 | 
			
		||||
                        UUID.Parse(Data["ShoesAsset"]));
 | 
			
		||||
 | 
			
		||||
                appearance.Wearables[AvatarWearable.SOCKS].Wear(
 | 
			
		||||
                        UUID.Parse(Data["SocksItem"]),
 | 
			
		||||
                        UUID.Parse(Data["SocksAsset"]));
 | 
			
		||||
 | 
			
		||||
                appearance.Wearables[AvatarWearable.JACKET].Wear(
 | 
			
		||||
                        UUID.Parse(Data["JacketItem"]),
 | 
			
		||||
                        UUID.Parse(Data["JacketAsset"]));
 | 
			
		||||
 | 
			
		||||
                appearance.Wearables[AvatarWearable.GLOVES].Wear(
 | 
			
		||||
                        UUID.Parse(Data["GlovesItem"]),
 | 
			
		||||
                        UUID.Parse(Data["GlovesAsset"]));
 | 
			
		||||
 | 
			
		||||
                appearance.Wearables[AvatarWearable.UNDERSHIRT].Wear(
 | 
			
		||||
                        UUID.Parse(Data["UnderShirtItem"]),
 | 
			
		||||
                        UUID.Parse(Data["UnderShirtAsset"]));
 | 
			
		||||
 | 
			
		||||
                appearance.Wearables[AvatarWearable.UNDERPANTS].Wear(
 | 
			
		||||
                        UUID.Parse(Data["UnderPantsItem"]),
 | 
			
		||||
                        UUID.Parse(Data["UnderPantsAsset"]));
 | 
			
		||||
 | 
			
		||||
                appearance.Wearables[AvatarWearable.SKIRT].Wear(
 | 
			
		||||
                        UUID.Parse(Data["SkirtItem"]),
 | 
			
		||||
                        UUID.Parse(Data["SkirtAsset"]));
 | 
			
		||||
 | 
			
		||||
                // Attachments
 | 
			
		||||
                Dictionary<string, string> attchs = new Dictionary<string, string>();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue