aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework/AvatarAppearance.cs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Framework/AvatarAppearance.cs58
1 files changed, 32 insertions, 26 deletions
diff --git a/OpenSim/Framework/AvatarAppearance.cs b/OpenSim/Framework/AvatarAppearance.cs
index 77a7621..f1713a6 100644
--- a/OpenSim/Framework/AvatarAppearance.cs
+++ b/OpenSim/Framework/AvatarAppearance.cs
@@ -796,25 +796,33 @@ namespace OpenSim.Framework
796 /// </summary> 796 /// </summary>
797 public void Unpack(OSDMap data) 797 public void Unpack(OSDMap data)
798 { 798 {
799 if ((data != null) && (data["serial"] != null)) 799 SetDefaultWearables();
800 m_serial = data["serial"].AsInteger(); 800 SetDefaultTexture();
801 if ((data != null) && (data["height"] != null)) 801 SetDefaultParams();
802 m_attachments = new Dictionary<int, List<AvatarAttachment>>();
803
804 if(data == null)
805 {
806 m_log.Warn("[AVATAR APPEARANCE]: data to unpack is null");
807 return;
808 }
809
810 OSD tmpOSD;
811 if (data.TryGetValue("serial", out tmpOSD))
812 m_serial = tmpOSD.AsInteger();
813 if (data.TryGetValue("height", out tmpOSD))
802// m_avatarHeight = (float)data["height"].AsReal(); 814// m_avatarHeight = (float)data["height"].AsReal();
803 SetSize(new Vector3(0.45f,0.6f, (float)data["height"].AsReal())); 815 SetSize(new Vector3(0.45f,0.6f, (float)tmpOSD.AsReal()));
804 816
805 try 817 try
806 { 818 {
807 // Wearables 819 // Wearables
808 SetDefaultWearables(); 820 if (data.TryGetValue("wearables", out tmpOSD) && (tmpOSD is OSDArray))
809 if ((data != null) && (data["wearables"] != null) && (data["wearables"]).Type == OSDType.Array)
810 { 821 {
811 OSDArray wears = (OSDArray)(data["wearables"]); 822 OSDArray wears = (OSDArray)tmpOSD;
812 823 m_wearables = new AvatarWearable[wears.Count];
813 int count = wears.Count;
814
815 m_wearables = new AvatarWearable[count];
816 824
817 for (int i = 0; i < count; i++) 825 for (int i = 0; i < wears.Count; i++)
818 m_wearables[i] = new AvatarWearable((OSDArray)wears[i]); 826 m_wearables[i] = new AvatarWearable((OSDArray)wears[i]);
819 } 827 }
820 else 828 else
@@ -823,15 +831,15 @@ namespace OpenSim.Framework
823 } 831 }
824 832
825 // Avatar Textures 833 // Avatar Textures
826 SetDefaultTexture(); 834 if (data.TryGetValue("textures", out tmpOSD) && (tmpOSD is OSDArray))
827 if ((data != null) && (data["textures"] != null) && (data["textures"]).Type == OSDType.Array)
828 { 835 {
829 OSDArray textures = (OSDArray)(data["textures"]); 836 OSDArray textures = (OSDArray)tmpOSD;
830 for (int i = 0; i < AvatarAppearance.TEXTURE_COUNT && i < textures.Count; i++) 837 for (int i = 0; i < AvatarAppearance.TEXTURE_COUNT && i < textures.Count; i++)
831 { 838 {
832 UUID textureID = AppearanceManager.DEFAULT_AVATAR_TEXTURE; 839 UUID textureID = AppearanceManager.DEFAULT_AVATAR_TEXTURE;
833 if (textures[i] != null) 840 tmpOSD = textures[i];
834 textureID = textures[i].AsUUID(); 841 if (tmpOSD != null)
842 textureID = tmpOSD.AsUUID();
835 m_texture.CreateFace((uint)i).TextureID = new UUID(textureID); 843 m_texture.CreateFace((uint)i).TextureID = new UUID(textureID);
836 } 844 }
837 } 845 }
@@ -840,18 +848,17 @@ namespace OpenSim.Framework
840 m_log.Warn("[AVATAR APPEARANCE]: failed to unpack textures"); 848 m_log.Warn("[AVATAR APPEARANCE]: failed to unpack textures");
841 } 849 }
842 850
843 if ((data != null) && (data["bakedcache"] != null) && (data["bakedcache"]).Type == OSDType.Array) 851 if (data.TryGetValue("bakedcache", out tmpOSD) && (tmpOSD is OSDArray))
844 { 852 {
845 OSDArray bakedOSDArray = (OSDArray)(data["bakedcache"]); 853 OSDArray bakedOSDArray = (OSDArray)tmpOSD;
846 m_cacheitems = WearableCacheItem.BakedFromOSD(bakedOSDArray); 854 m_cacheitems = WearableCacheItem.BakedFromOSD(bakedOSDArray);
847 } 855 }
848 856
849 // Visual Parameters 857 // Visual Parameters
850 SetDefaultParams(); 858 if (data.TryGetValue("visualparams", out tmpOSD))
851 if ((data != null) && (data["visualparams"] != null))
852 { 859 {
853 if ((data["visualparams"].Type == OSDType.Binary) || (data["visualparams"].Type == OSDType.Array)) 860 if (tmpOSD is OSDBinary || tmpOSD is OSDArray)
854 m_visualparams = data["visualparams"].AsBinary(); 861 m_visualparams = tmpOSD.AsBinary();
855 } 862 }
856 else 863 else
857 { 864 {
@@ -859,10 +866,9 @@ namespace OpenSim.Framework
859 } 866 }
860 867
861 // Attachments 868 // Attachments
862 m_attachments = new Dictionary<int, List<AvatarAttachment>>(); 869 if (data.TryGetValue("attachments", out tmpOSD) && tmpOSD is OSDArray)
863 if ((data != null) && (data["attachments"] != null) && (data["attachments"]).Type == OSDType.Array)
864 { 870 {
865 OSDArray attachs = (OSDArray)(data["attachments"]); 871 OSDArray attachs = (OSDArray)tmpOSD;
866 for (int i = 0; i < attachs.Count; i++) 872 for (int i = 0; i < attachs.Count; i++)
867 { 873 {
868 AvatarAttachment att = new AvatarAttachment((OSDMap)attachs[i]); 874 AvatarAttachment att = new AvatarAttachment((OSDMap)attachs[i]);