diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Framework/AvatarAppearance.cs | 58 |
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]); |