Merge branch 'dev-appearance'
						commit
						05d2302c62
					
				| 
						 | 
				
			
			@ -1472,12 +1472,9 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
        {
 | 
			
		||||
            m_log.DebugFormat("[RADMIN] Initializing inventory for {0} from {1}", destination, source);
 | 
			
		||||
            Scene scene = m_application.SceneManager.CurrentOrFirstScene;
 | 
			
		||||
            AvatarAppearance avatarAppearance = null;
 | 
			
		||||
            AvatarData avatar = scene.AvatarService.GetAvatar(source);
 | 
			
		||||
            if (avatar != null)
 | 
			
		||||
                avatarAppearance = avatar.ToAvatarAppearance(source);
 | 
			
		||||
 | 
			
		||||
            // If the model has no associated appearance we're done.
 | 
			
		||||
            AvatarAppearance avatarAppearance = scene.AvatarService.GetAppearance(source);
 | 
			
		||||
            if (avatarAppearance == null)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1491,8 +1488,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
                {
 | 
			
		||||
                    CopyWearablesAndAttachments(destination, source, avatarAppearance);
 | 
			
		||||
 | 
			
		||||
                    AvatarData avatarData = new AvatarData(avatarAppearance);
 | 
			
		||||
                    scene.AvatarService.SetAvatar(destination, avatarData);
 | 
			
		||||
                    scene.AvatarService.SetAppearance(destination, avatarAppearance);
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception e)
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			@ -1523,8 +1519,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                AvatarData avatarData = new AvatarData(avatarAppearance);
 | 
			
		||||
                scene.AvatarService.SetAvatar(destination, avatarData);
 | 
			
		||||
                scene.AvatarService.SetAppearance(destination, avatarAppearance);
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception e)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -1619,12 +1614,12 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
            // Attachments
 | 
			
		||||
            Dictionary<int, UUID[]> attachments = avatarAppearance.GetAttachmentDictionary();
 | 
			
		||||
            Dictionary<int, AvatarAttachment> attachments = avatarAppearance.Attachments;
 | 
			
		||||
 | 
			
		||||
            foreach (KeyValuePair<int, UUID[]> attachment in attachments)
 | 
			
		||||
            foreach (KeyValuePair<int, AvatarAttachment> attachment in attachments)
 | 
			
		||||
            {
 | 
			
		||||
                int attachpoint = attachment.Key;
 | 
			
		||||
                UUID itemID = attachment.Value[0];
 | 
			
		||||
                int attachpoint = attachment.Value.AttachPoint;
 | 
			
		||||
                UUID itemID = attachment.Value.ItemID;
 | 
			
		||||
 | 
			
		||||
                if (itemID != UUID.Zero)
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			@ -1908,10 +1903,8 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
                        if (include)
 | 
			
		||||
                        {
 | 
			
		||||
                            // Setup for appearance processing
 | 
			
		||||
                            AvatarData avatarData = scene.AvatarService.GetAvatar(ID);
 | 
			
		||||
                            if (avatarData != null)
 | 
			
		||||
                                avatarAppearance = avatarData.ToAvatarAppearance(ID);
 | 
			
		||||
                            else
 | 
			
		||||
                            avatarAppearance = scene.AvatarService.GetAppearance(ID);
 | 
			
		||||
                            if (avatarAppearance == null)
 | 
			
		||||
                                avatarAppearance = new AvatarAppearance();
 | 
			
		||||
 | 
			
		||||
                            AvatarWearable[] wearables = avatarAppearance.Wearables;
 | 
			
		||||
| 
						 | 
				
			
			@ -2076,8 +2069,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
                                    m_log.DebugFormat("[RADMIN] Outfit {0} load completed", outfitName);
 | 
			
		||||
                                } // foreach outfit
 | 
			
		||||
                                m_log.DebugFormat("[RADMIN] Inventory update complete for {0}", name);
 | 
			
		||||
                                AvatarData avatarData2 = new AvatarData(avatarAppearance);
 | 
			
		||||
                                scene.AvatarService.SetAvatar(ID, avatarData2);
 | 
			
		||||
                                scene.AvatarService.SetAppearance(ID, avatarAppearance);
 | 
			
		||||
                            }
 | 
			
		||||
                            catch (Exception e)
 | 
			
		||||
                            {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -596,7 +596,7 @@ namespace OpenSim.Client.MXP.ClientStack
 | 
			
		|||
        public event TeleportLandmarkRequest OnTeleportLandmarkRequest;
 | 
			
		||||
        public event DeRezObject OnDeRezObject;
 | 
			
		||||
        public event Action<IClientAPI> OnRegionHandShakeReply;
 | 
			
		||||
        public event GenericCall2 OnRequestWearables;
 | 
			
		||||
        public event GenericCall1 OnRequestWearables;
 | 
			
		||||
        public event GenericCall1 OnCompleteMovementToRegion;
 | 
			
		||||
        public event UpdateAgent OnPreAgentUpdate;
 | 
			
		||||
        public event UpdateAgent OnAgentUpdate;
 | 
			
		||||
| 
						 | 
				
			
			@ -861,7 +861,7 @@ namespace OpenSim.Client.MXP.ClientStack
 | 
			
		|||
            OpenSim.Region.Framework.Scenes.Scene scene=(OpenSim.Region.Framework.Scenes.Scene)Scene;
 | 
			
		||||
            AvatarAppearance appearance;
 | 
			
		||||
            scene.GetAvatarAppearance(this,out appearance);
 | 
			
		||||
            OnSetAppearance(appearance.Texture, (byte[])appearance.VisualParams.Clone());
 | 
			
		||||
            OnSetAppearance(this, appearance.Texture, (byte[])appearance.VisualParams.Clone());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Stop()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -533,9 +533,7 @@ namespace OpenSim.Client.MXP.PacketHandler
 | 
			
		|||
            agent.InventoryFolder = UUID.Zero;
 | 
			
		||||
            agent.startpos = new Vector3(0, 0, 0); // TODO Fill in region start position
 | 
			
		||||
            agent.CapsPath = "http://localhost/";
 | 
			
		||||
            AvatarData avatar = scene.AvatarService.GetAvatar(account.PrincipalID);
 | 
			
		||||
            if (avatar != null)
 | 
			
		||||
                agent.Appearance = avatar.ToAvatarAppearance(account.PrincipalID);  //userService.GetUserAppearance(userProfile.ID);
 | 
			
		||||
            agent.Appearance = scene.AvatarService.GetAppearance(account.PrincipalID);
 | 
			
		||||
 | 
			
		||||
            if (agent.Appearance == null)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -245,7 +245,7 @@ namespace OpenSim.Client.VWoHTTP.ClientStack
 | 
			
		|||
        public event TeleportLandmarkRequest OnTeleportLandmarkRequest = delegate { };
 | 
			
		||||
        public event DeRezObject OnDeRezObject = delegate { };
 | 
			
		||||
        public event Action<IClientAPI> OnRegionHandShakeReply = delegate { };
 | 
			
		||||
        public event GenericCall2 OnRequestWearables = delegate { };
 | 
			
		||||
        public event GenericCall1 OnRequestWearables = delegate { };
 | 
			
		||||
        public event GenericCall1 OnCompleteMovementToRegion = delegate { };
 | 
			
		||||
        public event UpdateAgent OnPreAgentUpdate;
 | 
			
		||||
        public event UpdateAgent OnAgentUpdate = delegate { };
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,7 +26,9 @@
 | 
			
		|||
 */
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using log4net;
 | 
			
		||||
using OpenMetaverse;
 | 
			
		||||
using OpenMetaverse.StructuredData;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -38,6 +40,12 @@ namespace OpenSim.Framework
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class AgentCircuitData
 | 
			
		||||
    {
 | 
			
		||||
// DEBUG ON
 | 
			
		||||
        private static readonly ILog m_log =
 | 
			
		||||
                LogManager.GetLogger(
 | 
			
		||||
                MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
// DEBUG OFF
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Avatar Unique Agent Identifier
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -205,6 +213,7 @@ namespace OpenSim.Framework
 | 
			
		|||
            args["mac"] = OSD.FromString(Mac);
 | 
			
		||||
            args["id0"] = OSD.FromString(Id0);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
            if (Appearance != null)
 | 
			
		||||
            {
 | 
			
		||||
                //System.Console.WriteLine("XXX Before packing Wearables");
 | 
			
		||||
| 
						 | 
				
			
			@ -221,20 +230,26 @@ namespace OpenSim.Framework
 | 
			
		|||
                }
 | 
			
		||||
 | 
			
		||||
                //System.Console.WriteLine("XXX Before packing Attachments");
 | 
			
		||||
                Dictionary<int, UUID[]> attachments = Appearance.GetAttachmentDictionary();
 | 
			
		||||
                Dictionary<int, AvatarAttachment> attachments = Appearance.Attachments;
 | 
			
		||||
                if ((attachments != null) && (attachments.Count > 0))
 | 
			
		||||
                {
 | 
			
		||||
                    OSDArray attachs = new OSDArray(attachments.Count);
 | 
			
		||||
                    foreach (KeyValuePair<int, UUID[]> kvp in attachments)
 | 
			
		||||
                    foreach (KeyValuePair<int, AvatarAttachment> kvp in attachments)
 | 
			
		||||
                    {
 | 
			
		||||
                        AttachmentData adata = new AttachmentData(kvp.Key, kvp.Value[0], kvp.Value[1]);
 | 
			
		||||
                        attachs.Add(adata.PackUpdateMessage());
 | 
			
		||||
                        AvatarAttachment adata = new AvatarAttachment(kvp.Value);
 | 
			
		||||
                        attachs.Add(adata.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;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            if (ServiceURLs != null && ServiceURLs.Count > 0)
 | 
			
		||||
            {
 | 
			
		||||
                OSDArray urls = new OSDArray(ServiceURLs.Count * 2);
 | 
			
		||||
| 
						 | 
				
			
			@ -317,9 +332,37 @@ namespace OpenSim.Framework
 | 
			
		|||
            if (args["start_pos"] != null)
 | 
			
		||||
                Vector3.TryParse(args["start_pos"].AsString(), out startpos);
 | 
			
		||||
 | 
			
		||||
// DEBUG ON
 | 
			
		||||
            m_log.WarnFormat("[AGENTCIRCUITDATA] agentid={0}, child={1}, startpos={2}",AgentID,child,startpos.ToString());
 | 
			
		||||
// DEBUG OFF
 | 
			
		||||
            
 | 
			
		||||
            try {
 | 
			
		||||
            // Unpack various appearance elements                                                                           
 | 
			
		||||
            Appearance = new AvatarAppearance(AgentID);
 | 
			
		||||
            if (args["packed_appearance"] != null)
 | 
			
		||||
            {
 | 
			
		||||
                if (args["packed_appearance"].Type == OSDType.Map)
 | 
			
		||||
                {
 | 
			
		||||
                    Appearance.Unpack((OSDMap)args["packed_appearance"]);
 | 
			
		||||
                    m_log.WarnFormat("[AGENTCIRCUITDATA] unpacked appearance");
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                    m_log.WarnFormat("[AGENTCIRCUITDATA] packed_appearance is not a map:\n{0}",args["packed_appearance"].ToString());
 | 
			
		||||
            }
 | 
			
		||||
// DEBUG ON
 | 
			
		||||
            else
 | 
			
		||||
                m_log.Warn("[AGENTCIRCUITDATA] failed to find a valid packed_appearance");
 | 
			
		||||
// DEBUG OFF
 | 
			
		||||
            } catch (Exception e)
 | 
			
		||||
            {
 | 
			
		||||
                m_log.ErrorFormat("[AGENTCIRCUITDATA] failed to unpack appearance; {0}",e.Message);
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            
 | 
			
		||||
/*
 | 
			
		||||
            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"]);
 | 
			
		||||
| 
						 | 
				
			
			@ -328,23 +371,23 @@ namespace OpenSim.Framework
 | 
			
		|||
                    Appearance.Wearables[i].ItemID = wears[i*2].AsUUID();
 | 
			
		||||
                    Appearance.Wearables[i].AssetID = wears[(i*2)+1].AsUUID();
 | 
			
		||||
                }
 | 
			
		||||
           }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ((args["attachments"] != null) && (args["attachments"]).Type == OSDType.Array)
 | 
			
		||||
            {
 | 
			
		||||
                OSDArray attachs = (OSDArray)(args["attachments"]);
 | 
			
		||||
                AttachmentData[] attachments = new AttachmentData[attachs.Count];
 | 
			
		||||
                AvatarAttachment[] attachments = new AvatarAttachment[attachs.Count];
 | 
			
		||||
                int i = 0;
 | 
			
		||||
                foreach (OSD o in attachs)
 | 
			
		||||
                {
 | 
			
		||||
                    if (o.Type == OSDType.Map)
 | 
			
		||||
                    {
 | 
			
		||||
                        attachments[i++] = new AttachmentData((OSDMap)o);
 | 
			
		||||
                        attachments[i++] = new AvatarAttachment((OSDMap)o);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                Appearance.SetAttachments(attachments);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
            ServiceURLs = new Dictionary<string, object>();
 | 
			
		||||
            if (args.ContainsKey("service_urls") && args["service_urls"] != null && (args["service_urls"]).Type == OSDType.Array)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
						 | 
				
			
			@ -25,14 +25,54 @@
 | 
			
		|||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
using OpenMetaverse;
 | 
			
		||||
using OpenSim.Framework;
 | 
			
		||||
using OpenMetaverse.StructuredData;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.Framework.Interfaces
 | 
			
		||||
namespace OpenSim.Framework
 | 
			
		||||
{
 | 
			
		||||
    public interface IAvatarFactory
 | 
			
		||||
    public class AvatarAttachment
 | 
			
		||||
    {
 | 
			
		||||
        bool TryGetAvatarAppearance(UUID avatarId, out AvatarAppearance appearance);
 | 
			
		||||
        void UpdateDatabase(UUID userID, AvatarAppearance avatAppearance);
 | 
			
		||||
        public int AttachPoint;
 | 
			
		||||
        public UUID ItemID;
 | 
			
		||||
        public UUID AssetID;
 | 
			
		||||
 | 
			
		||||
        public AvatarAttachment(AvatarAttachment attach)
 | 
			
		||||
        {
 | 
			
		||||
            AttachPoint = attach.AttachPoint;
 | 
			
		||||
            ItemID = attach.ItemID;
 | 
			
		||||
            AssetID = attach.AssetID;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public AvatarAttachment(int point, UUID item, UUID asset)
 | 
			
		||||
        {
 | 
			
		||||
            AttachPoint = point;
 | 
			
		||||
            ItemID = item;
 | 
			
		||||
            AssetID = asset;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public AvatarAttachment(OSDMap args)
 | 
			
		||||
        {
 | 
			
		||||
            Unpack(args);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public OSDMap Pack()
 | 
			
		||||
        {
 | 
			
		||||
            OSDMap attachdata = new OSDMap();
 | 
			
		||||
            attachdata["point"] = OSD.FromInteger(AttachPoint);
 | 
			
		||||
            attachdata["item"] = OSD.FromUUID(ItemID);
 | 
			
		||||
            attachdata["asset"] = OSD.FromUUID(AssetID);
 | 
			
		||||
 | 
			
		||||
            return attachdata;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public void Unpack(OSDMap args)
 | 
			
		||||
        {
 | 
			
		||||
            if (args["point"] != null)
 | 
			
		||||
                AttachPoint = args["point"].AsInteger();
 | 
			
		||||
            ItemID = (args["item"] != null) ? args["item"].AsUUID() : UUID.Zero;
 | 
			
		||||
            AssetID = (args["asset"] != null) ? args["asset"].AsUUID() : UUID.Zero;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -26,14 +26,32 @@
 | 
			
		|||
 */
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
using System.Runtime.Serialization;
 | 
			
		||||
using System.Security.Permissions;
 | 
			
		||||
using OpenMetaverse;
 | 
			
		||||
using OpenMetaverse.StructuredData;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Framework
 | 
			
		||||
{
 | 
			
		||||
    public class AvatarWearable
 | 
			
		||||
    {
 | 
			
		||||
        // these are guessed at by the list here -
 | 
			
		||||
        // http://wiki.secondlife.com/wiki/Avatar_Appearance.  We'll
 | 
			
		||||
        // correct them over time for when were are wrong.
 | 
			
		||||
        public static readonly int BODY = 0;
 | 
			
		||||
        public static readonly int SKIN = 1;
 | 
			
		||||
        public static readonly int HAIR = 2;
 | 
			
		||||
        public static readonly int EYES = 3;
 | 
			
		||||
        public static readonly int SHIRT = 4;
 | 
			
		||||
        public static readonly int PANTS = 5;
 | 
			
		||||
        public static readonly int SHOES = 6;
 | 
			
		||||
        public static readonly int SOCKS = 7;
 | 
			
		||||
        public static readonly int JACKET = 8;
 | 
			
		||||
        public static readonly int GLOVES = 9;
 | 
			
		||||
        public static readonly int UNDERSHIRT = 10;
 | 
			
		||||
        public static readonly int UNDERPANTS = 11;
 | 
			
		||||
        public static readonly int SKIRT = 12;
 | 
			
		||||
 | 
			
		||||
        public static readonly int MAX_WEARABLES = 13;
 | 
			
		||||
 | 
			
		||||
        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");
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -62,12 +80,32 @@ namespace OpenSim.Framework
 | 
			
		|||
            ItemID = itemId;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public AvatarWearable(OSDMap args)
 | 
			
		||||
        {
 | 
			
		||||
            Unpack(args);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public OSDMap Pack()
 | 
			
		||||
        {
 | 
			
		||||
            OSDMap weardata = new OSDMap();
 | 
			
		||||
            weardata["item"] = OSD.FromUUID(ItemID);
 | 
			
		||||
            weardata["asset"] = OSD.FromUUID(AssetID);
 | 
			
		||||
 | 
			
		||||
            return weardata;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Unpack(OSDMap args)
 | 
			
		||||
        {
 | 
			
		||||
            ItemID = (args["item"] != null) ? args["item"].AsUUID() : UUID.Zero;
 | 
			
		||||
            AssetID = (args["asset"] != null) ? args["asset"].AsUUID() : UUID.Zero;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static AvatarWearable[] DefaultWearables
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                AvatarWearable[] defaultWearables = new AvatarWearable[13]; //should be 13 of these
 | 
			
		||||
                for (int i = 0; i < 13; i++)
 | 
			
		||||
                AvatarWearable[] defaultWearables = new AvatarWearable[MAX_WEARABLES]; //should be 13 of these
 | 
			
		||||
                for (int i = 0; i < MAX_WEARABLES; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    defaultWearables[i] = new AvatarWearable();
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -976,7 +976,9 @@ namespace OpenSim.Framework.Capabilities
 | 
			
		|||
 | 
			
		||||
        public void BakedTextureUploaded(UUID assetID, byte[] data)
 | 
			
		||||
        {
 | 
			
		||||
            m_log.DebugFormat("[CAPS]: Received baked texture {0}", assetID.ToString());
 | 
			
		||||
// DEBUG ON
 | 
			
		||||
            m_log.WarnFormat("[CAPS]: Received baked texture {0}", assetID.ToString());
 | 
			
		||||
// DEBUG OFF
 | 
			
		||||
            AssetBase asset;
 | 
			
		||||
            asset = new AssetBase(assetID, "Baked Texture", (sbyte)AssetType.Texture, m_agentID.ToString());
 | 
			
		||||
            asset.Data = data;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -225,46 +225,6 @@ namespace OpenSim.Framework
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class AttachmentData
 | 
			
		||||
    {
 | 
			
		||||
        public int AttachPoint;
 | 
			
		||||
        public UUID ItemID;
 | 
			
		||||
        public UUID AssetID;
 | 
			
		||||
 | 
			
		||||
        public AttachmentData(int point, UUID item, UUID asset)
 | 
			
		||||
        {
 | 
			
		||||
            AttachPoint = point;
 | 
			
		||||
            ItemID = item;
 | 
			
		||||
            AssetID = asset;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public AttachmentData(OSDMap args)
 | 
			
		||||
        {
 | 
			
		||||
            UnpackUpdateMessage(args);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public OSDMap PackUpdateMessage()
 | 
			
		||||
        {
 | 
			
		||||
            OSDMap attachdata = new OSDMap();
 | 
			
		||||
            attachdata["point"] = OSD.FromInteger(AttachPoint);
 | 
			
		||||
            attachdata["item"] = OSD.FromUUID(ItemID);
 | 
			
		||||
            attachdata["asset"] = OSD.FromUUID(AssetID);
 | 
			
		||||
 | 
			
		||||
            return attachdata;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public void UnpackUpdateMessage(OSDMap args)
 | 
			
		||||
        {
 | 
			
		||||
            if (args["point"] != null)
 | 
			
		||||
                AttachPoint = args["point"].AsInteger();
 | 
			
		||||
            if (args["item"] != null)
 | 
			
		||||
                ItemID = args["item"].AsUUID();
 | 
			
		||||
            if (args["asset"] != null)
 | 
			
		||||
                AssetID = args["asset"].AsUUID();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class ControllerData
 | 
			
		||||
    {
 | 
			
		||||
        public UUID ItemID;
 | 
			
		||||
| 
						 | 
				
			
			@ -348,11 +308,14 @@ namespace OpenSim.Framework
 | 
			
		|||
        public UUID GranterID;
 | 
			
		||||
 | 
			
		||||
        // Appearance
 | 
			
		||||
        public AvatarAppearance Appearance;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
        public byte[] AgentTextures;
 | 
			
		||||
        public byte[] VisualParams;
 | 
			
		||||
        public UUID[] Wearables;
 | 
			
		||||
        public AttachmentData[] Attachments;
 | 
			
		||||
 | 
			
		||||
        public AvatarAttachment[] Attachments;
 | 
			
		||||
*/
 | 
			
		||||
        // Scripted
 | 
			
		||||
        public ControllerData[] Controllers;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -413,6 +376,9 @@ namespace OpenSim.Framework
 | 
			
		|||
                args["animations"] = anims;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (Appearance != null)
 | 
			
		||||
                args["packed_appearance"] = Appearance.Pack();
 | 
			
		||||
 | 
			
		||||
            //if ((AgentTextures != null) && (AgentTextures.Length > 0))
 | 
			
		||||
            //{
 | 
			
		||||
            //    OSDArray textures = new OSDArray(AgentTextures.Length);
 | 
			
		||||
| 
						 | 
				
			
			@ -421,7 +387,7 @@ namespace OpenSim.Framework
 | 
			
		|||
            //    args["agent_textures"] = textures;
 | 
			
		||||
            //}
 | 
			
		||||
 | 
			
		||||
           
 | 
			
		||||
/*
 | 
			
		||||
            if ((AgentTextures != null) && (AgentTextures.Length > 0))
 | 
			
		||||
                args["texture_entry"] = OSD.FromBinary(AgentTextures);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -441,11 +407,11 @@ namespace OpenSim.Framework
 | 
			
		|||
            if ((Attachments != null) && (Attachments.Length > 0))
 | 
			
		||||
            {
 | 
			
		||||
                OSDArray attachs = new OSDArray(Attachments.Length);
 | 
			
		||||
                foreach (AttachmentData att in Attachments)
 | 
			
		||||
                    attachs.Add(att.PackUpdateMessage());
 | 
			
		||||
                foreach (AvatarAttachment att in Attachments)
 | 
			
		||||
                    attachs.Add(att.Pack());
 | 
			
		||||
                args["attachments"] = attachs;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
            if ((Controllers != null) && (Controllers.Length > 0))
 | 
			
		||||
            {
 | 
			
		||||
                OSDArray controls = new OSDArray(Controllers.Length);
 | 
			
		||||
| 
						 | 
				
			
			@ -581,6 +547,12 @@ namespace OpenSim.Framework
 | 
			
		|||
            //        AgentTextures[i++] = o.AsUUID();
 | 
			
		||||
            //}
 | 
			
		||||
 | 
			
		||||
            if (args["packed_appearance"] != null)
 | 
			
		||||
                Appearance = new AvatarAppearance(AgentID,(OSDMap)args["packed_appearance"]);
 | 
			
		||||
            else
 | 
			
		||||
                Appearance = new AvatarAppearance(AgentID);
 | 
			
		||||
            
 | 
			
		||||
/*
 | 
			
		||||
            if (args["texture_entry"] != null)
 | 
			
		||||
                AgentTextures = args["texture_entry"].AsBinary();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -599,17 +571,17 @@ namespace OpenSim.Framework
 | 
			
		|||
            if ((args["attachments"] != null) && (args["attachments"]).Type == OSDType.Array)
 | 
			
		||||
            {
 | 
			
		||||
                OSDArray attachs = (OSDArray)(args["attachments"]);
 | 
			
		||||
                Attachments = new AttachmentData[attachs.Count];
 | 
			
		||||
                Attachments = new AvatarAttachment[attachs.Count];
 | 
			
		||||
                int i = 0;
 | 
			
		||||
                foreach (OSD o in attachs)
 | 
			
		||||
                {
 | 
			
		||||
                    if (o.Type == OSDType.Map)
 | 
			
		||||
                    {
 | 
			
		||||
                        Attachments[i++] = new AttachmentData((OSDMap)o);
 | 
			
		||||
                        Attachments[i++] = new AvatarAttachment((OSDMap)o);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
            if ((args["controllers"] != null) && (args["controllers"]).Type == OSDType.Array)
 | 
			
		||||
            {
 | 
			
		||||
                OSDArray controls = (OSDArray)(args["controllers"]);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,7 +43,7 @@ namespace OpenSim.Framework
 | 
			
		|||
 | 
			
		||||
    public delegate void TextureRequest(Object sender, TextureRequestArgs e);
 | 
			
		||||
 | 
			
		||||
    public delegate void AvatarNowWearing(Object sender, AvatarWearingArgs e);
 | 
			
		||||
    public delegate void AvatarNowWearing(IClientAPI sender, AvatarWearingArgs e);
 | 
			
		||||
 | 
			
		||||
    public delegate void ImprovedInstantMessage(IClientAPI remoteclient, GridInstantMessage im);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -65,7 +65,7 @@ namespace OpenSim.Framework
 | 
			
		|||
 | 
			
		||||
    public delegate void NetworkStats(int inPackets, int outPackets, int unAckedBytes);
 | 
			
		||||
 | 
			
		||||
    public delegate void SetAppearance(Primitive.TextureEntry textureEntry, byte[] visualParams);
 | 
			
		||||
    public delegate void SetAppearance(IClientAPI remoteClient, Primitive.TextureEntry textureEntry, byte[] visualParams);
 | 
			
		||||
 | 
			
		||||
    public delegate void StartAnim(IClientAPI remoteClient, UUID animID);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -711,7 +711,7 @@ namespace OpenSim.Framework
 | 
			
		|||
        event TeleportLandmarkRequest OnTeleportLandmarkRequest;
 | 
			
		||||
        event DeRezObject OnDeRezObject;
 | 
			
		||||
        event Action<IClientAPI> OnRegionHandShakeReply;
 | 
			
		||||
        event GenericCall2 OnRequestWearables;
 | 
			
		||||
        event GenericCall1 OnRequestWearables;
 | 
			
		||||
        event GenericCall1 OnCompleteMovementToRegion;
 | 
			
		||||
        event UpdateAgent OnPreAgentUpdate;
 | 
			
		||||
        event UpdateAgent OnAgentUpdate;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -65,9 +65,7 @@ namespace OpenSim.Framework.Tests
 | 
			
		|||
            SessionId = UUID.Random();
 | 
			
		||||
 | 
			
		||||
            AvAppearance = new AvatarAppearance(AgentId);
 | 
			
		||||
            AvAppearance.SetDefaultWearables();
 | 
			
		||||
            VisualParams = new byte[218];
 | 
			
		||||
            AvAppearance.SetDefaultParams(VisualParams);
 | 
			
		||||
 | 
			
		||||
            //body
 | 
			
		||||
            VisualParams[(int)AvatarAppearance.VPElement.SHAPE_HEIGHT] = 155;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -79,7 +79,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
 | 
			
		|||
        public event DeRezObject OnDeRezObject;
 | 
			
		||||
        public event ModifyTerrain OnModifyTerrain;
 | 
			
		||||
        public event Action<IClientAPI> OnRegionHandShakeReply;
 | 
			
		||||
        public event GenericCall2 OnRequestWearables;
 | 
			
		||||
        public event GenericCall1 OnRequestWearables;
 | 
			
		||||
        public event SetAppearance OnSetAppearance;
 | 
			
		||||
        public event AvatarNowWearing OnAvatarNowWearing;
 | 
			
		||||
        public event RezSingleAttachmentFromInv OnRezSingleAttachmentFromInv;
 | 
			
		||||
| 
						 | 
				
			
			@ -5647,11 +5647,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
 | 
			
		|||
 | 
			
		||||
        private bool HandlerAgentWearablesRequest(IClientAPI sender, Packet Pack)
 | 
			
		||||
        {
 | 
			
		||||
            GenericCall2 handlerRequestWearables = OnRequestWearables;
 | 
			
		||||
            GenericCall1 handlerRequestWearables = OnRequestWearables;
 | 
			
		||||
 | 
			
		||||
            if (handlerRequestWearables != null)
 | 
			
		||||
            {
 | 
			
		||||
                handlerRequestWearables();
 | 
			
		||||
                handlerRequestWearables(sender);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Action<IClientAPI> handlerRequestAvatarsData = OnRequestAvatarsData;
 | 
			
		||||
| 
						 | 
				
			
			@ -5694,7 +5694,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
 | 
			
		|||
                    if (appear.ObjectData.TextureEntry.Length > 1)
 | 
			
		||||
                        te = new Primitive.TextureEntry(appear.ObjectData.TextureEntry, 0, appear.ObjectData.TextureEntry.Length);
 | 
			
		||||
 | 
			
		||||
                    handlerSetAppearance(te, visualparams);
 | 
			
		||||
                    handlerSetAppearance(sender, te, visualparams);
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception e)
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -124,13 +124,13 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
 | 
			
		|||
 | 
			
		||||
                    // Save avatar attachment information
 | 
			
		||||
                    ScenePresence presence;
 | 
			
		||||
                    if (m_scene.AvatarFactory != null && m_scene.TryGetScenePresence(remoteClient.AgentId, out presence))
 | 
			
		||||
                    if (m_scene.AvatarService != null && m_scene.TryGetScenePresence(remoteClient.AgentId, out presence))
 | 
			
		||||
                    {
 | 
			
		||||
                        m_log.Info(
 | 
			
		||||
                            "[ATTACHMENTS MODULE]: Saving avatar attachment. AgentID: " + remoteClient.AgentId
 | 
			
		||||
                                + ", AttachmentPoint: " + AttachmentPt);
 | 
			
		||||
 | 
			
		||||
                        m_scene.AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance);
 | 
			
		||||
                        m_scene.AvatarService.SetAppearance(remoteClient.AgentId, presence.Appearance);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -382,8 +382,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
 | 
			
		|||
                item = m_scene.InventoryService.GetItem(item);
 | 
			
		||||
                presence.Appearance.SetAttachment((int)AttachmentPt, itemID, item.AssetID /* att.UUID */);
 | 
			
		||||
 | 
			
		||||
                if (m_scene.AvatarFactory != null)
 | 
			
		||||
                    m_scene.AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance);
 | 
			
		||||
                if (m_scene.AvatarService != null)
 | 
			
		||||
                    m_scene.AvatarService.SetAppearance(remoteClient.AgentId, presence.Appearance);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -405,10 +405,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
 | 
			
		|||
                presence.Appearance.DetachAttachment(itemID);
 | 
			
		||||
 | 
			
		||||
                // Save avatar attachment information
 | 
			
		||||
                if (m_scene.AvatarFactory != null)
 | 
			
		||||
                if (m_scene.AvatarService != null)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.Debug("[ATTACHMENTS MODULE]: Detaching from UserID: " + remoteClient.AgentId + ", ItemID: " + itemID);
 | 
			
		||||
                    m_scene.AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance);
 | 
			
		||||
                    m_scene.AvatarService.SetAppearance(remoteClient.AgentId, presence.Appearance);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -435,9 +435,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
 | 
			
		|||
 | 
			
		||||
                presence.Appearance.DetachAttachment(itemID);
 | 
			
		||||
 | 
			
		||||
                if (m_scene.AvatarFactory != null)
 | 
			
		||||
                if (m_scene.AvatarService != null)
 | 
			
		||||
                {
 | 
			
		||||
                    m_scene.AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance);
 | 
			
		||||
                    m_scene.AvatarService.SetAppearance(remoteClient.AgentId, presence.Appearance);
 | 
			
		||||
                }
 | 
			
		||||
                part.ParentGroup.DetachToGround();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,48 +38,20 @@ using OpenSim.Services.Interfaces;
 | 
			
		|||
 | 
			
		||||
namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
 | 
			
		||||
{
 | 
			
		||||
    public class AvatarFactoryModule : IAvatarFactory, IRegionModule
 | 
			
		||||
    public class AvatarFactoryModule : IRegionModule
 | 
			
		||||
    {
 | 
			
		||||
        private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
        private static readonly byte[] BAKE_INDICES = new byte[] { 8, 9, 10, 11, 19, 20 };
 | 
			
		||||
        private Scene m_scene = null;
 | 
			
		||||
        private static readonly AvatarAppearance def = new AvatarAppearance();
 | 
			
		||||
 | 
			
		||||
        public bool TryGetAvatarAppearance(UUID avatarId, out AvatarAppearance appearance)
 | 
			
		||||
        {
 | 
			
		||||
            AvatarData avatar = m_scene.AvatarService.GetAvatar(avatarId);
 | 
			
		||||
            //if ((profile != null) && (profile.RootFolder != null))
 | 
			
		||||
            if (avatar != null)
 | 
			
		||||
            {
 | 
			
		||||
                appearance = avatar.ToAvatarAppearance(avatarId);
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            m_log.ErrorFormat("[APPEARANCE]: Appearance not found for {0}, creating default", avatarId);
 | 
			
		||||
            appearance = CreateDefault(avatarId);
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private AvatarAppearance CreateDefault(UUID avatarId)
 | 
			
		||||
        {
 | 
			
		||||
            AvatarAppearance appearance = null;
 | 
			
		||||
            AvatarWearable[] wearables;
 | 
			
		||||
            byte[] visualParams;
 | 
			
		||||
            GetDefaultAvatarAppearance(out wearables, out visualParams);
 | 
			
		||||
            appearance = new AvatarAppearance(avatarId, wearables, visualParams);
 | 
			
		||||
 | 
			
		||||
            return appearance;
 | 
			
		||||
        }
 | 
			
		||||
        private bool m_startAnimationSet = false;
 | 
			
		||||
 | 
			
		||||
        public void Initialise(Scene scene, IConfigSource source)
 | 
			
		||||
        {
 | 
			
		||||
            scene.RegisterModuleInterface<IAvatarFactory>(this);
 | 
			
		||||
            scene.EventManager.OnNewClient += NewClient;
 | 
			
		||||
 | 
			
		||||
            if (m_scene == null)
 | 
			
		||||
            {
 | 
			
		||||
                m_scene = scene;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void PostInitialise()
 | 
			
		||||
| 
						 | 
				
			
			@ -102,6 +74,8 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
 | 
			
		|||
 | 
			
		||||
        public void NewClient(IClientAPI client)
 | 
			
		||||
        {
 | 
			
		||||
            client.OnRequestWearables += SendWearables;
 | 
			
		||||
            client.OnSetAppearance += SetAppearance;
 | 
			
		||||
            client.OnAvatarNowWearing += AvatarIsWearing;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -110,13 +84,167 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
 | 
			
		|||
            // client.OnAvatarNowWearing -= AvatarIsWearing;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void SetAppearanceAssets(UUID userID, ref AvatarAppearance appearance)
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Set appearance data (textureentry and slider settings) received from the client
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="texture"></param>
 | 
			
		||||
        /// <param name="visualParam"></param>
 | 
			
		||||
        public void SetAppearance(IClientAPI client, Primitive.TextureEntry textureEntry, byte[] visualParams)
 | 
			
		||||
        {
 | 
			
		||||
            ScenePresence sp = m_scene.GetScenePresence(client.AgentId);
 | 
			
		||||
            if (sp == null)
 | 
			
		||||
            {
 | 
			
		||||
                m_log.WarnFormat("[AVFACTORY] SetAppearance unable to find presence for {0}",client.AgentId);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
// DEBUG ON
 | 
			
		||||
            m_log.WarnFormat("[AVFACTORY] SetAppearance for {0}",client.AgentId);
 | 
			
		||||
// DEBUG OFF
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
            if (m_physicsActor != null)
 | 
			
		||||
            {
 | 
			
		||||
                if (!IsChildAgent)
 | 
			
		||||
                {
 | 
			
		||||
                    // This may seem like it's redundant, remove the avatar from the physics scene
 | 
			
		||||
                    // just to add it back again, but it saves us from having to update
 | 
			
		||||
                    // 3 variables 10 times a second.
 | 
			
		||||
                    bool flyingTemp = m_physicsActor.Flying;
 | 
			
		||||
                    RemoveFromPhysicalScene();
 | 
			
		||||
                    //m_scene.PhysicsScene.RemoveAvatar(m_physicsActor);
 | 
			
		||||
 | 
			
		||||
                    //PhysicsActor = null;
 | 
			
		||||
 | 
			
		||||
                    AddToPhysicalScene(flyingTemp);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
*/
 | 
			
		||||
            #region Bake Cache Check
 | 
			
		||||
 | 
			
		||||
            bool changed = false;
 | 
			
		||||
            
 | 
			
		||||
            // Process the texture entry
 | 
			
		||||
            if (textureEntry != null)
 | 
			
		||||
            {
 | 
			
		||||
                for (int i = 0; i < BAKE_INDICES.Length; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    int j = BAKE_INDICES[i];
 | 
			
		||||
                    Primitive.TextureEntryFace face = textureEntry.FaceTextures[j];
 | 
			
		||||
 | 
			
		||||
                    if (face != null && face.TextureID != AppearanceManager.DEFAULT_AVATAR_TEXTURE)
 | 
			
		||||
                    {
 | 
			
		||||
                        if (m_scene.AssetService.Get(face.TextureID.ToString()) == null)
 | 
			
		||||
                        {
 | 
			
		||||
                            m_log.WarnFormat("[AVFACTORY]: Missing baked texture {0} ({1}) for avatar {2}",face.TextureID,j,this.Name);
 | 
			
		||||
                            client.SendRebakeAvatarTextures(face.TextureID);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                changed = sp.Appearance.SetTextureEntries(textureEntry);
 | 
			
		||||
             
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            #endregion Bake Cache Check
 | 
			
		||||
                
 | 
			
		||||
            changed = sp.Appearance.SetVisualParams(visualParams) || changed;
 | 
			
		||||
 | 
			
		||||
            // If nothing changed (this happens frequently) just return
 | 
			
		||||
            if (changed)
 | 
			
		||||
            {
 | 
			
		||||
// DEBUG ON
 | 
			
		||||
                m_log.Warn("[AVFACTORY] Appearance changed");
 | 
			
		||||
// DEBUG OFF                
 | 
			
		||||
                sp.Appearance.SetAppearance(textureEntry, visualParams);
 | 
			
		||||
                if (sp.Appearance.AvatarHeight > 0)
 | 
			
		||||
                    sp.SetHeight(sp.Appearance.AvatarHeight);
 | 
			
		||||
 | 
			
		||||
                m_scene.AvatarService.SetAppearance(client.AgentId, sp.Appearance);
 | 
			
		||||
            }
 | 
			
		||||
// DEBUG ON
 | 
			
		||||
            else
 | 
			
		||||
                m_log.Warn("[AVFACTORY] Appearance did not change");
 | 
			
		||||
// DEBUG OFF
 | 
			
		||||
 | 
			
		||||
            sp.SendAppearanceToAllOtherAgents();
 | 
			
		||||
            if (!m_startAnimationSet)
 | 
			
		||||
            {
 | 
			
		||||
                sp.Animator.UpdateMovementAnimations();
 | 
			
		||||
                m_startAnimationSet = true;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            client.SendAvatarDataImmediate(sp);
 | 
			
		||||
            client.SendAppearance(sp.Appearance.Owner,sp.Appearance.VisualParams,sp.Appearance.Texture.GetBytes());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Tell the client for this scene presence what items it should be wearing now
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public void SendWearables(IClientAPI client)
 | 
			
		||||
        {
 | 
			
		||||
            ScenePresence sp = m_scene.GetScenePresence(client.AgentId);
 | 
			
		||||
            if (sp == null)
 | 
			
		||||
            {
 | 
			
		||||
                m_log.WarnFormat("[AVFACTORY] SendWearables unable to find presence for {0}",client.AgentId);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
// DEBUG ON
 | 
			
		||||
            m_log.WarnFormat("[AVFACTORY]: Received request for wearables of {0}", client.AgentId);
 | 
			
		||||
// DEBUG OFF            
 | 
			
		||||
            client.SendWearables(sp.Appearance.Wearables,sp.Appearance.Serial++);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Update what the avatar is wearing using an item from their inventory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="sender"></param>
 | 
			
		||||
        /// <param name="e"></param>
 | 
			
		||||
        public void AvatarIsWearing(IClientAPI client, AvatarWearingArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            ScenePresence sp = m_scene.GetScenePresence(client.AgentId);
 | 
			
		||||
            if (sp == null)
 | 
			
		||||
            {
 | 
			
		||||
                m_log.WarnFormat("[AVFACTORY] AvatarIsWearing unable to find presence for {0}",client.AgentId);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
// DEBUG ON
 | 
			
		||||
            m_log.WarnFormat("[AVFACTORY]: AvatarIsWearing called for {0}",client.AgentId);
 | 
			
		||||
// DEBUG OFF
 | 
			
		||||
 | 
			
		||||
            AvatarAppearance avatAppearance = new AvatarAppearance(sp.Appearance);
 | 
			
		||||
 | 
			
		||||
            //if (!TryGetAvatarAppearance(client.AgentId, out avatAppearance)) 
 | 
			
		||||
            //{
 | 
			
		||||
            //    m_log.Warn("[AVFACTORY]: We didn't seem to find the appearance, falling back to ScenePresence");
 | 
			
		||||
            //    avatAppearance = sp.Appearance;
 | 
			
		||||
            //}
 | 
			
		||||
            
 | 
			
		||||
            //m_log.DebugFormat("[AVFACTORY]: Received wearables for {0}", client.Name);
 | 
			
		||||
            
 | 
			
		||||
            foreach (AvatarWearingArgs.Wearable wear in e.NowWearing)
 | 
			
		||||
            {
 | 
			
		||||
                if (wear.Type < AvatarWearable.MAX_WEARABLES)
 | 
			
		||||
                {
 | 
			
		||||
                    AvatarWearable newWearable = new AvatarWearable(wear.ItemID,UUID.Zero);
 | 
			
		||||
                    avatAppearance.SetWearable(wear.Type, newWearable);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            SetAppearanceAssets(sp.UUID, ref avatAppearance);
 | 
			
		||||
 | 
			
		||||
            m_scene.AvatarService.SetAppearance(client.AgentId, avatAppearance);
 | 
			
		||||
            sp.Appearance = avatAppearance;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void SetAppearanceAssets(UUID userID, ref AvatarAppearance appearance)
 | 
			
		||||
        {
 | 
			
		||||
            IInventoryService invService = m_scene.InventoryService;
 | 
			
		||||
 | 
			
		||||
            if (invService.GetRootFolder(userID) != null)
 | 
			
		||||
            {
 | 
			
		||||
                for (int i = 0; i < 13; i++)
 | 
			
		||||
                for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    if (appearance.Wearables[i].ItemID == UUID.Zero)
 | 
			
		||||
                    {
 | 
			
		||||
| 
						 | 
				
			
			@ -134,84 +262,19 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
 | 
			
		|||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            m_log.ErrorFormat(
 | 
			
		||||
                                "[APPEARANCE]: Can't find inventory item {0} for {1}, setting to default", 
 | 
			
		||||
                                "[AVFACTORY]: Can't find inventory item {0} for {1}, setting to default", 
 | 
			
		||||
                                appearance.Wearables[i].ItemID, (WearableType)i);
 | 
			
		||||
                            
 | 
			
		||||
                            appearance.Wearables[i].AssetID = def.Wearables[i].AssetID;
 | 
			
		||||
                            appearance.Wearables[i].ItemID = UUID.Zero;
 | 
			
		||||
                            appearance.Wearables[i].AssetID = UUID.Zero;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                m_log.WarnFormat("[APPEARANCE]: user {0} has no inventory, appearance isn't going to work", userID);
 | 
			
		||||
                m_log.WarnFormat("[AVFACTORY]: user {0} has no inventory, appearance isn't going to work", userID);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Update what the avatar is wearing using an item from their inventory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="sender"></param>
 | 
			
		||||
        /// <param name="e"></param>
 | 
			
		||||
        public void AvatarIsWearing(Object sender, AvatarWearingArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            m_log.DebugFormat("[APPEARANCE]: AvatarIsWearing");
 | 
			
		||||
 | 
			
		||||
            IClientAPI clientView = (IClientAPI)sender;
 | 
			
		||||
            ScenePresence sp = m_scene.GetScenePresence(clientView.AgentId);
 | 
			
		||||
            
 | 
			
		||||
            if (sp == null) 
 | 
			
		||||
            {
 | 
			
		||||
                m_log.Error("[APPEARANCE]: Avatar is child agent, ignoring AvatarIsWearing event");
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            AvatarAppearance avatAppearance = sp.Appearance;
 | 
			
		||||
            //if (!TryGetAvatarAppearance(clientView.AgentId, out avatAppearance)) 
 | 
			
		||||
            //{
 | 
			
		||||
            //    m_log.Warn("[APPEARANCE]: We didn't seem to find the appearance, falling back to ScenePresence");
 | 
			
		||||
            //    avatAppearance = sp.Appearance;
 | 
			
		||||
            //}
 | 
			
		||||
            
 | 
			
		||||
            //m_log.DebugFormat("[APPEARANCE]: Received wearables for {0}", clientView.Name);
 | 
			
		||||
            
 | 
			
		||||
            foreach (AvatarWearingArgs.Wearable wear in e.NowWearing)
 | 
			
		||||
            {
 | 
			
		||||
                if (wear.Type < 13)
 | 
			
		||||
                {
 | 
			
		||||
                    avatAppearance.Wearables[wear.Type].ItemID = wear.ItemID;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            SetAppearanceAssets(sp.UUID, ref avatAppearance);
 | 
			
		||||
            AvatarData adata = new AvatarData(avatAppearance);
 | 
			
		||||
            m_scene.AvatarService.SetAvatar(clientView.AgentId, adata);
 | 
			
		||||
 | 
			
		||||
            sp.Appearance = avatAppearance;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void GetDefaultAvatarAppearance(out AvatarWearable[] wearables, out byte[] visualParams)
 | 
			
		||||
        {
 | 
			
		||||
            visualParams = GetDefaultVisualParams();
 | 
			
		||||
            wearables = AvatarWearable.DefaultWearables;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void UpdateDatabase(UUID user, AvatarAppearance appearance)
 | 
			
		||||
        {
 | 
			
		||||
            //m_log.DebugFormat("[APPEARANCE]: UpdateDatabase");
 | 
			
		||||
            AvatarData adata = new AvatarData(appearance);
 | 
			
		||||
            m_scene.AvatarService.SetAvatar(user, adata);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private static byte[] GetDefaultVisualParams()
 | 
			
		||||
        {
 | 
			
		||||
            byte[] visualParams;
 | 
			
		||||
            visualParams = new byte[218];
 | 
			
		||||
            for (int i = 0; i < 218; i++)
 | 
			
		||||
            {
 | 
			
		||||
                visualParams[i] = 100;
 | 
			
		||||
            }
 | 
			
		||||
            return visualParams;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,6 +30,7 @@ using System.Collections.Generic;
 | 
			
		|||
using System.Reflection;
 | 
			
		||||
using log4net;
 | 
			
		||||
using Nini.Config;
 | 
			
		||||
using OpenSim.Framework;
 | 
			
		||||
using OpenSim.Region.Framework.Interfaces;
 | 
			
		||||
using OpenSim.Region.Framework.Scenes;
 | 
			
		||||
using OpenSim.Server.Base;
 | 
			
		||||
| 
						 | 
				
			
			@ -137,6 +138,16 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Avatar
 | 
			
		|||
 | 
			
		||||
        #region IAvatarService
 | 
			
		||||
 | 
			
		||||
        public AvatarAppearance GetAppearance(UUID userID)
 | 
			
		||||
        {
 | 
			
		||||
            return m_AvatarService.GetAppearance(userID);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        public bool SetAppearance(UUID userID, AvatarAppearance appearance)
 | 
			
		||||
        {
 | 
			
		||||
            return m_AvatarService.SetAppearance(userID,appearance);
 | 
			
		||||
        }
 | 
			
		||||
            
 | 
			
		||||
        public AvatarData GetAvatar(UUID userID)
 | 
			
		||||
        {
 | 
			
		||||
            return m_AvatarService.GetAvatar(userID);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -82,7 +82,7 @@ namespace OpenSim.Region.Examples.SimpleModule
 | 
			
		|||
 | 
			
		||||
        public event DeRezObject OnDeRezObject;
 | 
			
		||||
        public event Action<IClientAPI> OnRegionHandShakeReply;
 | 
			
		||||
        public event GenericCall2 OnRequestWearables;
 | 
			
		||||
        public event GenericCall1 OnRequestWearables;
 | 
			
		||||
        public event GenericCall1 OnCompleteMovementToRegion;
 | 
			
		||||
        public event UpdateAgent OnPreAgentUpdate;
 | 
			
		||||
        public event UpdateAgent OnAgentUpdate;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -119,7 +119,6 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
 | 
			
		||||
        protected IXMLRPC m_xmlrpcModule;
 | 
			
		||||
        protected IWorldComm m_worldCommModule;
 | 
			
		||||
        protected IAvatarFactory m_AvatarFactory;
 | 
			
		||||
        protected IConfigSource m_config;
 | 
			
		||||
        protected IRegionSerialiserModule m_serialiser;
 | 
			
		||||
        protected IDialogModule m_dialogModule;
 | 
			
		||||
| 
						 | 
				
			
			@ -399,11 +398,6 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
 | 
			
		||||
        public IAttachmentsModule AttachmentsModule { get; set; }
 | 
			
		||||
 | 
			
		||||
        public IAvatarFactory AvatarFactory
 | 
			
		||||
        {
 | 
			
		||||
            get { return m_AvatarFactory; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public ICapabilitiesModule CapsModule
 | 
			
		||||
        {
 | 
			
		||||
            get { return m_capsModule; }
 | 
			
		||||
| 
						 | 
				
			
			@ -1159,7 +1153,6 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
            m_xmlrpcModule = RequestModuleInterface<IXMLRPC>();
 | 
			
		||||
            m_worldCommModule = RequestModuleInterface<IWorldComm>();
 | 
			
		||||
            XferManager = RequestModuleInterface<IXfer>();
 | 
			
		||||
            m_AvatarFactory = RequestModuleInterface<IAvatarFactory>();
 | 
			
		||||
            AttachmentsModule = RequestModuleInterface<IAttachmentsModule>();
 | 
			
		||||
            m_serialiser = RequestModuleInterface<IRegionSerialiserModule>();
 | 
			
		||||
            m_dialogModule = RequestModuleInterface<IDialogModule>();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -75,7 +75,6 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
 | 
			
		||||
        private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
 | 
			
		||||
        private static readonly byte[] BAKE_INDICES = new byte[] { 8, 9, 10, 11, 19, 20 };
 | 
			
		||||
//        private static readonly byte[] DEFAULT_TEXTURE = AvatarAppearance.GetDefaultTexture().GetBytes();
 | 
			
		||||
        private static readonly Array DIR_CONTROL_FLAGS = Enum.GetValues(typeof(Dir_ControlFlags));
 | 
			
		||||
        private static readonly Vector3 HEAD_ADJUSTMENT = new Vector3(0f, 0f, 0.3f);
 | 
			
		||||
| 
						 | 
				
			
			@ -137,8 +136,6 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
 | 
			
		||||
        private SendCourseLocationsMethod m_sendCourseLocationsMethod;
 | 
			
		||||
 | 
			
		||||
        private bool m_startAnimationSet;
 | 
			
		||||
 | 
			
		||||
        //private Vector3 m_requestedSitOffset = new Vector3();
 | 
			
		||||
 | 
			
		||||
        private Vector3 m_LastFinitePos;
 | 
			
		||||
| 
						 | 
				
			
			@ -713,13 +710,14 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
            SetDirectionVectors();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
        public ScenePresence(IClientAPI client, Scene world, RegionInfo reginfo, byte[] visualParams,
 | 
			
		||||
                             AvatarWearable[] wearables)
 | 
			
		||||
            : this(client, world, reginfo)
 | 
			
		||||
        {
 | 
			
		||||
            m_appearance = new AvatarAppearance(m_uuid, wearables, visualParams);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
        public ScenePresence(IClientAPI client, Scene world, RegionInfo reginfo, AvatarAppearance appearance)
 | 
			
		||||
            : this(client, world, reginfo)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -733,8 +731,6 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
 | 
			
		||||
        public void RegisterToEvents()
 | 
			
		||||
        {
 | 
			
		||||
            m_controllingClient.OnRequestWearables += SendWearables;
 | 
			
		||||
            m_controllingClient.OnSetAppearance += SetAppearance;
 | 
			
		||||
            m_controllingClient.OnCompleteMovementToRegion += CompleteMovement;
 | 
			
		||||
            //m_controllingClient.OnCompleteMovementToRegion += SendInitialData;
 | 
			
		||||
            m_controllingClient.OnAgentUpdate += HandleAgentUpdate;
 | 
			
		||||
| 
						 | 
				
			
			@ -1068,7 +1064,7 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
        /// <summary>
 | 
			
		||||
        /// Sets avatar height in the phyiscs plugin
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        internal void SetHeight(float height)
 | 
			
		||||
        public void SetHeight(float height)
 | 
			
		||||
        {
 | 
			
		||||
            m_avHeight = height;
 | 
			
		||||
            if (PhysicsActor != null && !IsChildAgent)
 | 
			
		||||
| 
						 | 
				
			
			@ -1133,7 +1129,6 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
                if (friendsModule != null)
 | 
			
		||||
                    friendsModule.SendFriendsOnlineIfNeeded(ControllingClient);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -2392,9 +2387,12 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
            if (m_appearance.Texture == null)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            Vector3 pos = m_pos;
 | 
			
		||||
            pos.Z += m_appearance.HipOffset;
 | 
			
		||||
 | 
			
		||||
            if (IsChildAgent)
 | 
			
		||||
            {
 | 
			
		||||
                m_log.WarnFormat("[SCENEPRESENCE] A child agent is attempting to send out avatar data");
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            remoteAvatar.m_controllingClient.SendAvatarDataImmediate(this);
 | 
			
		||||
            m_scene.StatsReporter.AddAgentUpdates(1);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -2437,6 +2435,12 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
            m_perfMonMS = Util.EnvironmentTickCount();
 | 
			
		||||
 | 
			
		||||
            // only send update from root agents to other clients; children are only "listening posts"
 | 
			
		||||
            if (IsChildAgent)
 | 
			
		||||
            {
 | 
			
		||||
                m_log.Warn("[SCENEPRESENCE] attempt to send update from a childagent");
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            int count = 0;
 | 
			
		||||
            m_scene.ForEachScenePresence(delegate(ScenePresence sp)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -2460,29 +2464,20 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
            // the inventory arrives
 | 
			
		||||
            // m_scene.GetAvatarAppearance(m_controllingClient, out m_appearance);
 | 
			
		||||
 | 
			
		||||
            Vector3 pos = m_pos;
 | 
			
		||||
            pos.Z += m_appearance.HipOffset;
 | 
			
		||||
 | 
			
		||||
            m_controllingClient.SendAvatarDataImmediate(this);
 | 
			
		||||
            m_controllingClient.SendAppearance(m_appearance.Owner,m_appearance.VisualParams,m_appearance.Texture.GetBytes());
 | 
			
		||||
 | 
			
		||||
            SendInitialFullUpdateToAllClients();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Tell the client for this scene presence what items it should be wearing now
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public void SendWearables()
 | 
			
		||||
        {
 | 
			
		||||
            m_log.DebugFormat("[SCENE]: Received request for wearables of {0}", Name);
 | 
			
		||||
            
 | 
			
		||||
            ControllingClient.SendWearables(m_appearance.Wearables, m_appearance.Serial++);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public void SendAppearanceToAllOtherAgents()
 | 
			
		||||
        {
 | 
			
		||||
// DEBUG ON
 | 
			
		||||
            m_log.WarnFormat("[SP] Send appearance from {0} to all other agents",m_uuid);
 | 
			
		||||
// DEBUG OFF
 | 
			
		||||
            m_perfMonMS = Util.EnvironmentTickCount();
 | 
			
		||||
 | 
			
		||||
            m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
 | 
			
		||||
| 
						 | 
				
			
			@ -2502,87 +2497,13 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
        /// <param name="avatar"></param>
 | 
			
		||||
        public void SendAppearanceToOtherAgent(ScenePresence avatar)
 | 
			
		||||
        {
 | 
			
		||||
// DEBUG ON
 | 
			
		||||
            m_log.WarnFormat("[SP] Send appearance from {0} to {1}",m_uuid,avatar.ControllingClient.AgentId);
 | 
			
		||||
// DEBUG OFF
 | 
			
		||||
            avatar.ControllingClient.SendAppearance(
 | 
			
		||||
                m_appearance.Owner, m_appearance.VisualParams, m_appearance.Texture.GetBytes());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Set appearance data (textureentry and slider settings) received from the client
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="texture"></param>
 | 
			
		||||
        /// <param name="visualParam"></param>
 | 
			
		||||
        public void SetAppearance(Primitive.TextureEntry textureEntry, byte[] visualParams)
 | 
			
		||||
        {
 | 
			
		||||
            if (m_physicsActor != null)
 | 
			
		||||
            {
 | 
			
		||||
                if (!IsChildAgent)
 | 
			
		||||
                {
 | 
			
		||||
                    // This may seem like it's redundant, remove the avatar from the physics scene
 | 
			
		||||
                    // just to add it back again, but it saves us from having to update
 | 
			
		||||
                    // 3 variables 10 times a second.
 | 
			
		||||
                    bool flyingTemp = m_physicsActor.Flying;
 | 
			
		||||
                    RemoveFromPhysicalScene();
 | 
			
		||||
                    //m_scene.PhysicsScene.RemoveAvatar(m_physicsActor);
 | 
			
		||||
 | 
			
		||||
                    //PhysicsActor = null;
 | 
			
		||||
 | 
			
		||||
                    AddToPhysicalScene(flyingTemp);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            #region Bake Cache Check
 | 
			
		||||
 | 
			
		||||
            if (textureEntry != null)
 | 
			
		||||
            {
 | 
			
		||||
                for (int i = 0; i < BAKE_INDICES.Length; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    int j = BAKE_INDICES[i];
 | 
			
		||||
                    Primitive.TextureEntryFace face = textureEntry.FaceTextures[j];
 | 
			
		||||
 | 
			
		||||
                    if (face != null && face.TextureID != AppearanceManager.DEFAULT_AVATAR_TEXTURE)
 | 
			
		||||
                    {
 | 
			
		||||
                        if (m_scene.AssetService.Get(face.TextureID.ToString()) == null)
 | 
			
		||||
                        {
 | 
			
		||||
                            m_log.Warn("[APPEARANCE]: Missing baked texture " + face.TextureID + " (" + j + ") for avatar " + this.Name);
 | 
			
		||||
                            this.ControllingClient.SendRebakeAvatarTextures(face.TextureID);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            #endregion Bake Cache Check
 | 
			
		||||
 | 
			
		||||
            m_appearance.SetAppearance(textureEntry, visualParams);
 | 
			
		||||
            if (m_appearance.AvatarHeight > 0)
 | 
			
		||||
                SetHeight(m_appearance.AvatarHeight);
 | 
			
		||||
 | 
			
		||||
            // This is not needed, because only the transient data changed
 | 
			
		||||
            //AvatarData adata = new AvatarData(m_appearance);
 | 
			
		||||
            //m_scene.AvatarService.SetAvatar(m_controllingClient.AgentId, adata);
 | 
			
		||||
 | 
			
		||||
            SendAppearanceToAllOtherAgents();
 | 
			
		||||
            if (!m_startAnimationSet)
 | 
			
		||||
            {
 | 
			
		||||
                Animator.UpdateMovementAnimations();
 | 
			
		||||
                m_startAnimationSet = true;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Vector3 pos = m_pos;
 | 
			
		||||
            pos.Z += m_appearance.HipOffset;
 | 
			
		||||
 | 
			
		||||
            m_controllingClient.SendAvatarDataImmediate(this);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void SetWearable(int wearableId, AvatarWearable wearable)
 | 
			
		||||
        {
 | 
			
		||||
            m_appearance.SetWearable(wearableId, wearable);
 | 
			
		||||
            AvatarData adata = new AvatarData(m_appearance);
 | 
			
		||||
            m_scene.AvatarService.SetAvatar(m_controllingClient.AgentId, adata);
 | 
			
		||||
            m_controllingClient.SendWearables(m_appearance.Wearables, m_appearance.Serial++);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Because appearance setting is in a module, we actually need
 | 
			
		||||
        // to give it access to our appearance directly, otherwise we
 | 
			
		||||
        // get a synchronization issue.
 | 
			
		||||
| 
						 | 
				
			
			@ -2976,6 +2897,8 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
 | 
			
		||||
        public void CopyTo(AgentData cAgent)
 | 
			
		||||
        {
 | 
			
		||||
            cAgent.CallbackURI = m_callbackURI;
 | 
			
		||||
 | 
			
		||||
            cAgent.AgentID = UUID;
 | 
			
		||||
            cAgent.RegionID = Scene.RegionInfo.RegionID;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -3015,6 +2938,9 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
 | 
			
		||||
            cAgent.AlwaysRun = m_setAlwaysRun;
 | 
			
		||||
 | 
			
		||||
            cAgent.Appearance = new AvatarAppearance(m_appearance);
 | 
			
		||||
            
 | 
			
		||||
/*
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                // We might not pass the Wearables in all cases...
 | 
			
		||||
| 
						 | 
				
			
			@ -3054,14 +2980,14 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
            {
 | 
			
		||||
                //m_log.DebugFormat("[SCENE PRESENCE]: attachments {0}", attPoints.Count);
 | 
			
		||||
                int i = 0;
 | 
			
		||||
                AttachmentData[] attachs = new AttachmentData[attPoints.Count];
 | 
			
		||||
                AvatarAttachment[] attachs = new AvatarAttachment[attPoints.Count];
 | 
			
		||||
                foreach (int point in attPoints)
 | 
			
		||||
                {
 | 
			
		||||
                    attachs[i++] = new AttachmentData(point, m_appearance.GetAttachedItem(point), m_appearance.GetAttachedAsset(point));
 | 
			
		||||
                    attachs[i++] = new AvatarAttachment(point, m_appearance.GetAttachedItem(point), m_appearance.GetAttachedAsset(point));
 | 
			
		||||
                }
 | 
			
		||||
                cAgent.Attachments = attachs;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
            lock (scriptedcontrols)
 | 
			
		||||
            {
 | 
			
		||||
                ControllerData[] controls = new ControllerData[scriptedcontrols.Count];
 | 
			
		||||
| 
						 | 
				
			
			@ -3088,6 +3014,9 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
 | 
			
		||||
        public void CopyFrom(AgentData cAgent)
 | 
			
		||||
        {
 | 
			
		||||
// DEBUG ON
 | 
			
		||||
            m_log.ErrorFormat("[SCENEPRESENCE] CALLING COPYFROM");
 | 
			
		||||
// DEBUG OFF
 | 
			
		||||
            m_originRegionID = cAgent.RegionID;
 | 
			
		||||
 | 
			
		||||
            m_callbackURI = cAgent.CallbackURI;
 | 
			
		||||
| 
						 | 
				
			
			@ -3113,6 +3042,9 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
                m_godLevel = cAgent.GodLevel;
 | 
			
		||||
            m_setAlwaysRun = cAgent.AlwaysRun;
 | 
			
		||||
 | 
			
		||||
            m_appearance = new AvatarAppearance(cAgent.Appearance);
 | 
			
		||||
            
 | 
			
		||||
/*
 | 
			
		||||
            uint i = 0;
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -3125,15 +3057,17 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
                    UUID assetId = cAgent.Wearables[n + 1];
 | 
			
		||||
                    wears[i++] = new AvatarWearable(itemId, assetId);
 | 
			
		||||
                }
 | 
			
		||||
                m_appearance.Wearables = wears;
 | 
			
		||||
                Primitive.TextureEntry te;
 | 
			
		||||
                // m_appearance.Wearables = wears;
 | 
			
		||||
                Primitive.TextureEntry textures = null;
 | 
			
		||||
                if (cAgent.AgentTextures != null && cAgent.AgentTextures.Length > 1)
 | 
			
		||||
                    te = new Primitive.TextureEntry(cAgent.AgentTextures, 0, cAgent.AgentTextures.Length);
 | 
			
		||||
                else
 | 
			
		||||
                    te = AvatarAppearance.GetDefaultTexture();
 | 
			
		||||
                if ((cAgent.VisualParams == null) || (cAgent.VisualParams.Length < AvatarAppearance.VISUALPARAM_COUNT))
 | 
			
		||||
                    cAgent.VisualParams = AvatarAppearance.GetDefaultVisualParams();
 | 
			
		||||
                m_appearance.SetAppearance(te, (byte[])cAgent.VisualParams.Clone());
 | 
			
		||||
                    textures = new Primitive.TextureEntry(cAgent.AgentTextures, 0, cAgent.AgentTextures.Length);
 | 
			
		||||
 | 
			
		||||
                byte[] visuals = null;
 | 
			
		||||
 | 
			
		||||
                if ((cAgent.VisualParams != null) && (cAgent.VisualParams.Length < AvatarAppearance.VISUALPARAM_COUNT))
 | 
			
		||||
                    visuals = (byte[])cAgent.VisualParams.Clone();
 | 
			
		||||
 | 
			
		||||
                m_appearance = new AvatarAppearance(cAgent.AgentID,wears,textures,visuals);
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception e)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -3146,14 +3080,14 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
                if (cAgent.Attachments != null)
 | 
			
		||||
                {
 | 
			
		||||
                    m_appearance.ClearAttachments();
 | 
			
		||||
                    foreach (AttachmentData att in cAgent.Attachments)
 | 
			
		||||
                    foreach (AvatarAttachment att in cAgent.Attachments)
 | 
			
		||||
                    {
 | 
			
		||||
                        m_appearance.SetAttachment(att.AttachPoint, att.ItemID, att.AssetID);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            catch { } 
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                lock (scriptedcontrols)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -676,7 +676,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
 | 
			
		|||
        public event TeleportLandmarkRequest OnTeleportLandmarkRequest;
 | 
			
		||||
        public event DeRezObject OnDeRezObject;
 | 
			
		||||
        public event Action<IClientAPI> OnRegionHandShakeReply;
 | 
			
		||||
        public event GenericCall2 OnRequestWearables;
 | 
			
		||||
        public event GenericCall1 OnRequestWearables;
 | 
			
		||||
        public event GenericCall1 OnCompleteMovementToRegion;
 | 
			
		||||
        public event UpdateAgent OnPreAgentUpdate;
 | 
			
		||||
        public event UpdateAgent OnAgentUpdate;
 | 
			
		||||
| 
						 | 
				
			
			@ -899,7 +899,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
 | 
			
		|||
            Scene scene = (Scene)Scene;
 | 
			
		||||
            AvatarAppearance appearance;
 | 
			
		||||
            scene.GetAvatarAppearance(this, out appearance);
 | 
			
		||||
            OnSetAppearance(appearance.Texture, (byte[])appearance.VisualParams.Clone());
 | 
			
		||||
            OnSetAppearance(this, appearance.Texture, (byte[])appearance.VisualParams.Clone());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void SendRegionHandshake(RegionInfo regionInfo, RegionHandshakeArgs args)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -188,7 +188,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
 | 
			
		|||
 | 
			
		||||
        public event DeRezObject OnDeRezObject;
 | 
			
		||||
        public event Action<IClientAPI> OnRegionHandShakeReply;
 | 
			
		||||
        public event GenericCall2 OnRequestWearables;
 | 
			
		||||
        public event GenericCall1 OnRequestWearables;
 | 
			
		||||
        public event GenericCall1 OnCompleteMovementToRegion;
 | 
			
		||||
        public event UpdateAgent OnPreAgentUpdate;
 | 
			
		||||
        public event UpdateAgent OnAgentUpdate;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -64,15 +64,13 @@ namespace OpenSim.Region.OptionalModules.World.NPC
 | 
			
		|||
            if (m_appearanceCache.ContainsKey(target))
 | 
			
		||||
                return m_appearanceCache[target];
 | 
			
		||||
 | 
			
		||||
            AvatarData adata = scene.AvatarService.GetAvatar(target);
 | 
			
		||||
            if (adata != null)
 | 
			
		||||
            AvatarAppearance appearance = scene.AvatarService.GetAppearance(target);
 | 
			
		||||
            if (appearance != null)
 | 
			
		||||
            {
 | 
			
		||||
                AvatarAppearance x = adata.ToAvatarAppearance(target);
 | 
			
		||||
 | 
			
		||||
                m_appearanceCache.Add(target, x);
 | 
			
		||||
 | 
			
		||||
                return x;
 | 
			
		||||
                m_appearanceCache.Add(target, appearance);
 | 
			
		||||
                return appearance;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return new AvatarAppearance();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -169,7 +167,9 @@ namespace OpenSim.Region.OptionalModules.World.NPC
 | 
			
		|||
                    {
 | 
			
		||||
                        AvatarAppearance x = GetAppearance(p_cloneAppearanceFrom, p_scene);
 | 
			
		||||
 | 
			
		||||
                        sp.SetAppearance(x.Texture, (byte[])x.VisualParams.Clone());
 | 
			
		||||
                        sp.Appearance.SetTextureEntries(x.Texture);
 | 
			
		||||
                        sp.Appearance.SetVisualParams((byte[])x.VisualParams.Clone());
 | 
			
		||||
                        sp.SendAppearanceToAllOtherAgents();
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    m_avatars.Add(npcAvatar.AgentId, npcAvatar);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -51,6 +51,20 @@ namespace OpenSim.Services.AvatarService
 | 
			
		|||
            m_log.Debug("[AVATAR SERVICE]: Starting avatar service");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Get|SetAppearance should preserve existing semantics
 | 
			
		||||
        // until AvatarData can be removed completely
 | 
			
		||||
        public AvatarAppearance GetAppearance(UUID principalID)
 | 
			
		||||
        {
 | 
			
		||||
            AvatarData avatar = GetAvatar(principalID);
 | 
			
		||||
            return avatar.ToAvatarAppearance(principalID);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        public bool SetAppearance(UUID principalID, AvatarAppearance appearance)
 | 
			
		||||
        {
 | 
			
		||||
            AvatarData avatar = new AvatarData(appearance);
 | 
			
		||||
            return SetAvatar(principalID,avatar);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public AvatarData GetAvatar(UUID principalID)
 | 
			
		||||
        {
 | 
			
		||||
            AvatarBaseData[] av = m_Database.Get("PrincipalID", principalID.ToString());
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -87,6 +87,18 @@ namespace OpenSim.Services.Connectors
 | 
			
		|||
 | 
			
		||||
        #region IAvatarService
 | 
			
		||||
 | 
			
		||||
        public AvatarAppearance GetAppearance(UUID userID)
 | 
			
		||||
        {
 | 
			
		||||
            AvatarData avatar = GetAvatar(userID);
 | 
			
		||||
            return avatar.ToAvatarAppearance(userID);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        public bool SetAppearance(UUID userID, AvatarAppearance appearance)
 | 
			
		||||
        {
 | 
			
		||||
            AvatarData avatar = new AvatarData(appearance);
 | 
			
		||||
            return SetAvatar(userID,avatar);
 | 
			
		||||
        }
 | 
			
		||||
            
 | 
			
		||||
        public AvatarData GetAvatar(UUID userID)
 | 
			
		||||
        {
 | 
			
		||||
            Dictionary<string, object> sendData = new Dictionary<string, object>();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,6 +28,9 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Collections.Specialized;
 | 
			
		||||
// DEBUG ON
 | 
			
		||||
using System.Diagnostics;
 | 
			
		||||
// DEBUG OFF
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
using log4net;
 | 
			
		||||
using Mono.Addins;
 | 
			
		||||
| 
						 | 
				
			
			@ -106,6 +109,80 @@ namespace OpenSim.Services.Connectors.SimianGrid
 | 
			
		|||
 | 
			
		||||
        #region IAvatarService
 | 
			
		||||
 | 
			
		||||
        // <summary>
 | 
			
		||||
        // Retrieves the LLPackedAppearance field from user data and unpacks
 | 
			
		||||
        // it into an AvatarAppearance structure
 | 
			
		||||
        // </summary>
 | 
			
		||||
        // <param name="userID"></param>
 | 
			
		||||
        public AvatarAppearance GetAppearance(UUID userID)
 | 
			
		||||
        {
 | 
			
		||||
            NameValueCollection requestArgs = new NameValueCollection
 | 
			
		||||
            {
 | 
			
		||||
                { "RequestMethod", "GetUser" },
 | 
			
		||||
                { "UserID", userID.ToString() }
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
 | 
			
		||||
            if (response["Success"].AsBoolean())
 | 
			
		||||
            {
 | 
			
		||||
                OSDMap map = null;                
 | 
			
		||||
                try { map = OSDParser.DeserializeJson(response["LLPackedAppearance"].AsString()) as OSDMap; }
 | 
			
		||||
                catch { }
 | 
			
		||||
 | 
			
		||||
                if (map != null)
 | 
			
		||||
                {
 | 
			
		||||
                    AvatarAppearance appearance = new AvatarAppearance(map);
 | 
			
		||||
// DEBUG ON
 | 
			
		||||
                    m_log.WarnFormat("[SIMIAN AVATAR CONNECTOR] retrieved appearance for {0}:\n{1}",userID,appearance.ToString());
 | 
			
		||||
// DEBUG OFF                    
 | 
			
		||||
                    return appearance;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                m_log.WarnFormat("[SIMIAN AVATAR CONNECTOR]: Failed to decode appearance for {0}",userID);
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            m_log.WarnFormat("[SIMIAN AVATAR CONNECTOR]: Failed to get appearance for {0}: {1}",
 | 
			
		||||
                             userID,response["Message"].AsString());
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        // <summary>
 | 
			
		||||
        // </summary>
 | 
			
		||||
        // <param name=""></param>
 | 
			
		||||
        public bool SetAppearance(UUID userID, AvatarAppearance appearance)
 | 
			
		||||
        {
 | 
			
		||||
            OSDMap map = appearance.Pack();
 | 
			
		||||
            if (map == null)
 | 
			
		||||
            {
 | 
			
		||||
                m_log.WarnFormat("[SIMIAN AVATAR CONNECTOR]: Failed to encode appearance for {0}",userID);
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
// DEBUG ON
 | 
			
		||||
            m_log.WarnFormat("[SIMIAN AVATAR CONNECTOR] save appearance for {0}",userID);
 | 
			
		||||
// DEBUG OFF                    
 | 
			
		||||
 | 
			
		||||
            NameValueCollection requestArgs = new NameValueCollection
 | 
			
		||||
                {
 | 
			
		||||
                        { "RequestMethod", "AddUserData" },
 | 
			
		||||
                        { "UserID", userID.ToString() },
 | 
			
		||||
                        { "LLPackedAppearance", OSDParser.SerializeJsonString(map) }
 | 
			
		||||
                };
 | 
			
		||||
 | 
			
		||||
            OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
 | 
			
		||||
            bool success = response["Success"].AsBoolean();
 | 
			
		||||
 | 
			
		||||
            if (! success)
 | 
			
		||||
                m_log.WarnFormat("[SIMIAN AVATAR CONNECTOR]: Failed to save appearance for {0}: {1}",
 | 
			
		||||
                                 userID,response["Message"].AsString());
 | 
			
		||||
 | 
			
		||||
            return success;
 | 
			
		||||
        }
 | 
			
		||||
            
 | 
			
		||||
        // <summary>
 | 
			
		||||
        // </summary>
 | 
			
		||||
        // <param name=""></param>
 | 
			
		||||
        public AvatarData GetAvatar(UUID userID)
 | 
			
		||||
        {
 | 
			
		||||
            NameValueCollection requestArgs = new NameValueCollection
 | 
			
		||||
| 
						 | 
				
			
			@ -154,7 +231,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
 | 
			
		|||
                        foreach (KeyValuePair<string, OSD> kvp in map)
 | 
			
		||||
                            avatar.Data[kvp.Key] = kvp.Value.AsString();
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                
 | 
			
		||||
                    return avatar;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
| 
						 | 
				
			
			@ -173,6 +250,9 @@ namespace OpenSim.Services.Connectors.SimianGrid
 | 
			
		|||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // <summary>
 | 
			
		||||
        // </summary>
 | 
			
		||||
        // <param name=""></param>
 | 
			
		||||
        public bool SetAvatar(UUID userID, AvatarData avatar)
 | 
			
		||||
        {
 | 
			
		||||
            m_log.Debug("[SIMIAN AVATAR CONNECTOR]: SetAvatar called for " + userID);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,6 +37,21 @@ namespace OpenSim.Services.Interfaces
 | 
			
		|||
{
 | 
			
		||||
    public interface IAvatarService
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Called by the login service
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="userID"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        AvatarAppearance GetAppearance(UUID userID);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Called by everyone who can change the avatar data (so, regions)
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="userID"></param>
 | 
			
		||||
        /// <param name="appearance"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        bool SetAppearance(UUID userID, AvatarAppearance appearance);
 | 
			
		||||
        
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Called by the login service
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -217,23 +232,26 @@ namespace OpenSim.Services.Interfaces
 | 
			
		|||
                foreach (KeyValuePair<string, string> _kvp in Data)
 | 
			
		||||
                    if (_kvp.Key.StartsWith("_ap_"))
 | 
			
		||||
                        attchs[_kvp.Key] = _kvp.Value;
 | 
			
		||||
                Hashtable aaAttachs = new Hashtable();
 | 
			
		||||
 | 
			
		||||
                foreach (KeyValuePair<string, string> _kvp in attchs)
 | 
			
		||||
                {
 | 
			
		||||
                    string pointStr = _kvp.Key.Substring(4);
 | 
			
		||||
                    int point = 0;
 | 
			
		||||
                    if (!Int32.TryParse(pointStr, out point))
 | 
			
		||||
                        continue;
 | 
			
		||||
                    Hashtable tmp = new Hashtable();
 | 
			
		||||
 | 
			
		||||
                    UUID uuid = UUID.Zero;
 | 
			
		||||
                    UUID.TryParse(_kvp.Value, out uuid);
 | 
			
		||||
                    tmp["item"] = uuid;
 | 
			
		||||
                    tmp["asset"] = UUID.Zero.ToString();
 | 
			
		||||
                    aaAttachs[point] = tmp;
 | 
			
		||||
 | 
			
		||||
                    appearance.SetAttachment(point,uuid,UUID.Zero);
 | 
			
		||||
                }
 | 
			
		||||
                appearance.SetAttachments(aaAttachs);
 | 
			
		||||
            }
 | 
			
		||||
            catch { }
 | 
			
		||||
            catch
 | 
			
		||||
            {
 | 
			
		||||
                // We really should report something here, returning null
 | 
			
		||||
                // will at least break the wrapper
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return appearance;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -330,10 +330,10 @@ namespace OpenSim.Services.LLLoginService
 | 
			
		|||
                //
 | 
			
		||||
                // Get the avatar
 | 
			
		||||
                //
 | 
			
		||||
                AvatarData avatar = null;
 | 
			
		||||
                AvatarAppearance avatar = null;
 | 
			
		||||
                if (m_AvatarService != null)
 | 
			
		||||
                {
 | 
			
		||||
                    avatar = m_AvatarService.GetAvatar(account.PrincipalID);
 | 
			
		||||
                    avatar = m_AvatarService.GetAppearance(account.PrincipalID);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                //
 | 
			
		||||
| 
						 | 
				
			
			@ -601,7 +601,7 @@ namespace OpenSim.Services.LLLoginService
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected AgentCircuitData LaunchAgentAtGrid(GridRegion gatekeeper, GridRegion destination, UserAccount account, AvatarData avatar,
 | 
			
		||||
        protected AgentCircuitData LaunchAgentAtGrid(GridRegion gatekeeper, GridRegion destination, UserAccount account, AvatarAppearance avatar,
 | 
			
		||||
            UUID session, UUID secureSession, Vector3 position, string currentWhere, string viewer, string channel, string mac, string id0,
 | 
			
		||||
            IPEndPoint clientIP, out string where, out string reason, out GridRegion dest)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -697,14 +697,14 @@ namespace OpenSim.Services.LLLoginService
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        private AgentCircuitData MakeAgent(GridRegion region, UserAccount account, 
 | 
			
		||||
            AvatarData avatar, UUID session, UUID secureSession, uint circuit, Vector3 position, 
 | 
			
		||||
            AvatarAppearance avatar, UUID session, UUID secureSession, uint circuit, Vector3 position, 
 | 
			
		||||
            string ipaddress, string viewer, string channel, string mac, string id0)
 | 
			
		||||
        {
 | 
			
		||||
            AgentCircuitData aCircuit = new AgentCircuitData();
 | 
			
		||||
 | 
			
		||||
            aCircuit.AgentID = account.PrincipalID;
 | 
			
		||||
            if (avatar != null)
 | 
			
		||||
                aCircuit.Appearance = avatar.ToAvatarAppearance(account.PrincipalID);
 | 
			
		||||
                aCircuit.Appearance = new AvatarAppearance(avatar);
 | 
			
		||||
            else
 | 
			
		||||
                aCircuit.Appearance = new AvatarAppearance(account.PrincipalID);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -94,7 +94,7 @@ namespace OpenSim.Tests.Common.Mock
 | 
			
		|||
 | 
			
		||||
        public event DeRezObject OnDeRezObject;
 | 
			
		||||
        public event Action<IClientAPI> OnRegionHandShakeReply;
 | 
			
		||||
        public event GenericCall2 OnRequestWearables;
 | 
			
		||||
        public event GenericCall1 OnRequestWearables;
 | 
			
		||||
        public event GenericCall1 OnCompleteMovementToRegion;
 | 
			
		||||
        public event UpdateAgent OnPreAgentUpdate;
 | 
			
		||||
        public event UpdateAgent OnAgentUpdate;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue