diff options
Diffstat (limited to 'OpenSim/Framework')
-rw-r--r-- | OpenSim/Framework/AvatarAppearance.cs | 230 | ||||
-rw-r--r-- | OpenSim/Framework/AvatarWearable.cs | 10 | ||||
-rwxr-xr-x | OpenSim/Framework/IClientAPI.cs | 2 | ||||
-rw-r--r-- | OpenSim/Framework/Tests/AgentCircuitDataTest.cs | 6 | ||||
-rw-r--r-- | OpenSim/Framework/VersionInfo.cs | 4 | ||||
-rw-r--r-- | OpenSim/Framework/WearableCacheItem.cs | 39 |
6 files changed, 182 insertions, 109 deletions
diff --git a/OpenSim/Framework/AvatarAppearance.cs b/OpenSim/Framework/AvatarAppearance.cs index f1713a6..a7bd398 100644 --- a/OpenSim/Framework/AvatarAppearance.cs +++ b/OpenSim/Framework/AvatarAppearance.cs | |||
@@ -51,27 +51,28 @@ namespace OpenSim.Framework | |||
51 | 51 | ||
52 | // this is viewer capabilities and weared things dependent | 52 | // this is viewer capabilities and weared things dependent |
53 | // should be only used as initial default value ( V1 viewers ) | 53 | // should be only used as initial default value ( V1 viewers ) |
54 | public readonly static int VISUALPARAM_COUNT = 218; | 54 | public const int VISUALPARAM_COUNT = 218; |
55 | 55 | ||
56 | // public readonly static int TEXTURE_COUNT = 21 | 56 | // regions and viewer compatibility |
57 | // 21 bad, make it be updated as libovm gets update | 57 | public readonly static int TEXTURE_COUNT = 45; |
58 | // also keeping in sync with it | 58 | public const int TEXTURE_COUNT_PV7 = 26; |
59 | public readonly static int TEXTURE_COUNT = Primitive.TextureEntry.MAX_FACES; | 59 | public const int BAKES_COUNT_PV7 = 6; |
60 | public const int MAXWEARABLE_PV7 = 16; | ||
61 | public const int MAXWEARABLE_LEGACY = 14; | ||
60 | 62 | ||
61 | public readonly static byte[] BAKE_INDICES = new byte[] { 8, 9, 10, 11, 19, 20 }; | 63 | public readonly static byte[] BAKE_INDICES = new byte[] { 8, 9, 10, 11, 19, 20, 40, 41, 42, 43, 44 }; |
62 | 64 | ||
63 | protected int m_serial = 0; | 65 | protected int m_serial = 0; |
64 | protected byte[] m_visualparams; | 66 | protected byte[] m_visualparams; |
65 | protected Primitive.TextureEntry m_texture; | 67 | protected Primitive.TextureEntry m_texture; |
66 | protected AvatarWearable[] m_wearables; | 68 | protected AvatarWearable[] m_wearables; |
67 | protected Dictionary<int, List<AvatarAttachment>> m_attachments; | 69 | protected Dictionary<int, List<AvatarAttachment>> m_attachments; |
68 | protected float m_avatarHeight = 0; | 70 | protected WearableCacheItem[] m_cacheitems; |
69 | protected Vector3 m_avatarSize = new Vector3(0.45f, 0.6f, 1.9f); // sl Z cloud value | 71 | protected Vector3 m_avatarSize = new Vector3(0.45f, 0.6f, 1.9f); // sl Z cloud value |
70 | protected Vector3 m_avatarBoxSize = new Vector3(0.45f, 0.6f, 1.9f); | 72 | protected Vector3 m_avatarBoxSize = new Vector3(0.45f, 0.6f, 1.9f); |
73 | protected float m_avatarHeight = 0; | ||
71 | protected float m_avatarFeetOffset = 0; | 74 | protected float m_avatarFeetOffset = 0; |
72 | protected float m_avatarAnimOffset = 0; | 75 | protected float m_avatarAnimOffset = 0; |
73 | protected WearableCacheItem[] m_cacheitems; | ||
74 | protected bool m_cacheItemsDirty = true; | ||
75 | 76 | ||
76 | public virtual int Serial | 77 | public virtual int Serial |
77 | { | 78 | { |
@@ -128,11 +129,7 @@ namespace OpenSim.Framework | |||
128 | set { m_cacheitems = value; } | 129 | set { m_cacheitems = value; } |
129 | } | 130 | } |
130 | 131 | ||
131 | public virtual bool WearableCacheItemsDirty | 132 | public virtual float AvatarPreferencesHoverZ { get; set; } |
132 | { | ||
133 | get { return m_cacheItemsDirty; } | ||
134 | set { m_cacheItemsDirty = value; } | ||
135 | } | ||
136 | 133 | ||
137 | public AvatarAppearance() | 134 | public AvatarAppearance() |
138 | { | 135 | { |
@@ -204,12 +201,14 @@ namespace OpenSim.Framework | |||
204 | SetDefaultParams(); | 201 | SetDefaultParams(); |
205 | // SetHeight(); | 202 | // SetHeight(); |
206 | SetSize(new Vector3(0.45f, 0.6f, 1.9f)); | 203 | SetSize(new Vector3(0.45f, 0.6f, 1.9f)); |
204 | AvatarPreferencesHoverZ = 0; | ||
207 | m_attachments = new Dictionary<int, List<AvatarAttachment>>(); | 205 | m_attachments = new Dictionary<int, List<AvatarAttachment>>(); |
208 | 206 | ||
209 | return; | 207 | return; |
210 | } | 208 | } |
211 | 209 | ||
212 | m_serial = appearance.Serial; | 210 | m_serial = appearance.Serial; |
211 | AvatarPreferencesHoverZ = appearance.AvatarPreferencesHoverZ; | ||
213 | 212 | ||
214 | if (copyWearables && (appearance.Wearables != null)) | 213 | if (copyWearables && (appearance.Wearables != null)) |
215 | { | 214 | { |
@@ -228,7 +227,7 @@ namespace OpenSim.Framework | |||
228 | m_texture = null; | 227 | m_texture = null; |
229 | if (appearance.Texture != null) | 228 | if (appearance.Texture != null) |
230 | { | 229 | { |
231 | byte[] tbytes = appearance.Texture.GetBytes(); | 230 | byte[] tbytes = appearance.Texture.GetBakesBytes(); |
232 | m_texture = new Primitive.TextureEntry(tbytes,0,tbytes.Length); | 231 | m_texture = new Primitive.TextureEntry(tbytes,0,tbytes.Length); |
233 | if (copyBaked && appearance.m_cacheitems != null) | 232 | if (copyBaked && appearance.m_cacheitems != null) |
234 | m_cacheitems = (WearableCacheItem[])appearance.m_cacheitems.Clone(); | 233 | m_cacheitems = (WearableCacheItem[])appearance.m_cacheitems.Clone(); |
@@ -295,6 +294,7 @@ namespace OpenSim.Framework | |||
295 | m_serial = 0; | 294 | m_serial = 0; |
296 | 295 | ||
297 | SetDefaultTexture(); | 296 | SetDefaultTexture(); |
297 | AvatarPreferencesHoverZ = 0; | ||
298 | 298 | ||
299 | //for (int i = 0; i < BAKE_INDICES.Length; i++) | 299 | //for (int i = 0; i < BAKE_INDICES.Length; i++) |
300 | // { | 300 | // { |
@@ -330,9 +330,6 @@ namespace OpenSim.Framework | |||
330 | protected virtual void SetDefaultTexture() | 330 | protected virtual void SetDefaultTexture() |
331 | { | 331 | { |
332 | m_texture = new Primitive.TextureEntry(new UUID(AppearanceManager.DEFAULT_AVATAR_TEXTURE)); | 332 | m_texture = new Primitive.TextureEntry(new UUID(AppearanceManager.DEFAULT_AVATAR_TEXTURE)); |
333 | |||
334 | // for (uint i = 0; i < TEXTURE_COUNT; i++) | ||
335 | // m_texture.CreateFace(i).TextureID = new UUID(AppearanceManager.DEFAULT_AVATAR_TEXTURE); | ||
336 | } | 333 | } |
337 | 334 | ||
338 | /// <summary> | 335 | /// <summary> |
@@ -347,31 +344,31 @@ namespace OpenSim.Framework | |||
347 | if (textureEntry == null) | 344 | if (textureEntry == null) |
348 | return false; | 345 | return false; |
349 | 346 | ||
350 | // There are much simpler versions of this copy that could be | ||
351 | // made. We determine if any of the textures actually | ||
352 | // changed to know if the appearance should be saved later | ||
353 | bool changed = false; | 347 | bool changed = false; |
354 | for (uint i = 0; i < AvatarAppearance.TEXTURE_COUNT; i++) | 348 | Primitive.TextureEntryFace newface; |
355 | { | 349 | Primitive.TextureEntryFace tmpFace; |
356 | Primitive.TextureEntryFace newface = textureEntry.FaceTextures[i]; | ||
357 | Primitive.TextureEntryFace oldface = m_texture.FaceTextures[i]; | ||
358 | 350 | ||
359 | if (newface == null) | 351 | //make sure textureEntry.DefaultTexture is the unused one(DEFAULT_AVATAR_TEXTURE). |
352 | Primitive.TextureEntry converted = new Primitive.TextureEntry(AppearanceManager.DEFAULT_AVATAR_TEXTURE); | ||
353 | for (uint i = 0; i < TEXTURE_COUNT; ++i) | ||
354 | { | ||
355 | newface = textureEntry.GetFace(i); | ||
356 | if (newface.TextureID != AppearanceManager.DEFAULT_AVATAR_TEXTURE) | ||
360 | { | 357 | { |
361 | if (oldface == null) | 358 | tmpFace = converted.GetFace(i); |
362 | continue; | 359 | tmpFace.TextureID = newface.TextureID; // we need a full high level copy, assuming all other parameters are the same. |
360 | if (m_texture.FaceTextures[i] == null || newface.TextureID != m_texture.FaceTextures[i].TextureID) | ||
361 | changed = true; | ||
363 | } | 362 | } |
364 | else | 363 | else |
365 | { | 364 | { if (m_texture.FaceTextures[i] == null) |
366 | if (oldface != null && oldface.TextureID == newface.TextureID) | ||
367 | continue; | 365 | continue; |
366 | if(m_texture.FaceTextures[i].TextureID != AppearanceManager.DEFAULT_AVATAR_TEXTURE) | ||
367 | changed = true; | ||
368 | } | 368 | } |
369 | |||
370 | changed = true; | ||
371 | } | 369 | } |
372 | 370 | if(changed) | |
373 | m_texture = textureEntry; | 371 | m_texture = converted; |
374 | |||
375 | return changed; | 372 | return changed; |
376 | } | 373 | } |
377 | 374 | ||
@@ -736,42 +733,69 @@ namespace OpenSim.Framework | |||
736 | 733 | ||
737 | data["serial"] = OSD.FromInteger(m_serial); | 734 | data["serial"] = OSD.FromInteger(m_serial); |
738 | data["height"] = OSD.FromReal(m_avatarHeight); | 735 | data["height"] = OSD.FromReal(m_avatarHeight); |
736 | data["aphz"] = OSD.FromReal(AvatarPreferencesHoverZ); | ||
737 | |||
738 | if (m_texture == null) | ||
739 | return data; | ||
740 | |||
741 | bool sendPV8 = false; | ||
742 | if(ctx != null) | ||
743 | sendPV8 = ctx.OutboundVersion >= 0.8; | ||
739 | 744 | ||
740 | // Wearables | 745 | // Wearables |
741 | // | 746 | OSDArray wears; |
742 | // This will send as many or as few wearables as we have, unless a count | 747 | int count; |
743 | // is given. Used for legacy (pre 0.4) versions. | 748 | if (ctx == null) |
744 | int count = ctx.WearablesCount; | 749 | count = MAXWEARABLE_LEGACY; |
745 | if (ctx.WearablesCount == -1) | 750 | else |
746 | count = m_wearables.Length; | ||
747 | OSDArray wears = new OSDArray(count); | ||
748 | for (int i = 0; i < count; i++) | ||
749 | { | 751 | { |
750 | AvatarWearable dummyWearable = new AvatarWearable(); | 752 | int wbcount = ctx.WearablesCount; |
753 | if (wbcount == -1) | ||
754 | wbcount = m_wearables.Length; | ||
751 | 755 | ||
752 | if (i < m_wearables.Length) | 756 | count = wbcount; |
753 | wears.Add(m_wearables[i].Pack()); | 757 | if(count > MAXWEARABLE_PV7) |
754 | else | 758 | { |
755 | wears.Add(dummyWearable.Pack()); | 759 | count = MAXWEARABLE_PV7; |
760 | if(sendPV8) | ||
761 | { | ||
762 | wears = new OSDArray(wbcount - MAXWEARABLE_PV7); | ||
763 | for (int i = MAXWEARABLE_PV7; i < wbcount; ++i) | ||
764 | wears.Add(m_wearables[i].Pack()); | ||
765 | |||
766 | data["wrbls8"] = wears; | ||
767 | } | ||
768 | } | ||
756 | } | 769 | } |
770 | |||
771 | wears = new OSDArray(count); | ||
772 | for (int i = 0; i < count; i++) | ||
773 | wears.Add(m_wearables[i].Pack()); | ||
757 | data["wearables"] = wears; | 774 | data["wearables"] = wears; |
758 | 775 | ||
759 | // Avatar Textures | 776 | // Avatar Textures and preferences hover |
760 | OSDArray textures = new OSDArray(AvatarAppearance.TEXTURE_COUNT); | 777 | OSDArray textures; |
761 | for (uint i = 0; i < AvatarAppearance.TEXTURE_COUNT; i++) | 778 | if (sendPV8) |
762 | { | 779 | { |
763 | if (m_texture.FaceTextures[i] != null) | 780 | byte[] te = m_texture.GetBakesBytes(); |
764 | textures.Add(OSD.FromUUID(m_texture.FaceTextures[i].TextureID)); | 781 | data["te8"] = OSD.FromBinary(te); |
765 | else | 782 | } |
766 | textures.Add(OSD.FromUUID(AppearanceManager.DEFAULT_AVATAR_TEXTURE)); | 783 | else |
784 | { | ||
785 | textures = new OSDArray(TEXTURE_COUNT_PV7); | ||
786 | for (uint i = 0; i < TEXTURE_COUNT_PV7; i++) | ||
787 | textures.Add(OSD.FromUUID(m_texture.GetFace(i).TextureID)); | ||
788 | data["textures"] = textures; | ||
767 | } | 789 | } |
768 | data["textures"] = textures; | ||
769 | 790 | ||
770 | if (m_cacheitems != null) | 791 | if (m_cacheitems != null) |
771 | { | 792 | { |
772 | OSDArray baked = WearableCacheItem.BakedToOSD(m_cacheitems); | 793 | OSDArray baked = WearableCacheItem.BakedToOSD(m_cacheitems, 0, BAKES_COUNT_PV7); |
773 | if (baked != null) | 794 | if (baked != null && baked.Count > 0) |
774 | data["bakedcache"] = baked; | 795 | data["bakedcache"] = baked; |
796 | baked = WearableCacheItem.BakedToOSD(m_cacheitems, BAKES_COUNT_PV7, -1); | ||
797 | if (baked != null && baked.Count > 0) | ||
798 | data["bc8"] = baked; | ||
775 | } | 799 | } |
776 | 800 | ||
777 | // Visual Parameters | 801 | // Visual Parameters |
@@ -810,48 +834,88 @@ namespace OpenSim.Framework | |||
810 | OSD tmpOSD; | 834 | OSD tmpOSD; |
811 | if (data.TryGetValue("serial", out tmpOSD)) | 835 | if (data.TryGetValue("serial", out tmpOSD)) |
812 | m_serial = tmpOSD.AsInteger(); | 836 | m_serial = tmpOSD.AsInteger(); |
837 | if(data.TryGetValue("aphz", out tmpOSD)) | ||
838 | AvatarPreferencesHoverZ = (float)tmpOSD.AsReal(); | ||
813 | if (data.TryGetValue("height", out tmpOSD)) | 839 | if (data.TryGetValue("height", out tmpOSD)) |
814 | // m_avatarHeight = (float)data["height"].AsReal(); | 840 | SetSize(new Vector3(0.45f, 0.6f, (float)tmpOSD.AsReal())); |
815 | SetSize(new Vector3(0.45f,0.6f, (float)tmpOSD.AsReal())); | ||
816 | 841 | ||
817 | try | 842 | try |
818 | { | 843 | { |
819 | // Wearables | 844 | // Wearables |
845 | OSD tmpOSD8; | ||
846 | OSDArray wears8 = null; | ||
847 | int wears8Count = 0; | ||
848 | |||
849 | if (data.TryGetValue("wrbls8", out tmpOSD8) && (tmpOSD8 is OSDArray)) | ||
850 | { | ||
851 | wears8 = (OSDArray)tmpOSD; | ||
852 | wears8Count = wears8.Count; | ||
853 | } | ||
854 | |||
820 | if (data.TryGetValue("wearables", out tmpOSD) && (tmpOSD is OSDArray)) | 855 | if (data.TryGetValue("wearables", out tmpOSD) && (tmpOSD is OSDArray)) |
821 | { | 856 | { |
822 | OSDArray wears = (OSDArray)tmpOSD; | 857 | OSDArray wears = (OSDArray)tmpOSD; |
823 | m_wearables = new AvatarWearable[wears.Count]; | 858 | m_wearables = new AvatarWearable[wears.Count + wears8Count]; |
824 | 859 | ||
825 | for (int i = 0; i < wears.Count; i++) | 860 | for (int i = 0; i < wears.Count; ++i) |
826 | m_wearables[i] = new AvatarWearable((OSDArray)wears[i]); | 861 | m_wearables[i] = new AvatarWearable((OSDArray)wears[i]); |
862 | if (wears8Count > 0) | ||
863 | { | ||
864 | for (int i = wears.Count; i < wears8Count + wears.Count; ++i) | ||
865 | m_wearables[i] = new AvatarWearable((OSDArray)wears[i]); | ||
866 | } | ||
827 | } | 867 | } |
828 | else | 868 | else |
829 | { | 869 | { |
830 | m_log.Warn("[AVATAR APPEARANCE]: failed to unpack wearables"); | 870 | m_log.Warn("[AVATAR APPEARANCE]: failed to unpack wearables"); |
831 | } | 871 | } |
832 | 872 | ||
833 | // Avatar Textures | ||
834 | if (data.TryGetValue("textures", out tmpOSD) && (tmpOSD is OSDArray)) | 873 | if (data.TryGetValue("textures", out tmpOSD) && (tmpOSD is OSDArray)) |
835 | { | 874 | { |
836 | OSDArray textures = (OSDArray)tmpOSD; | 875 | OSDArray textures = (OSDArray)tmpOSD; |
837 | for (int i = 0; i < AvatarAppearance.TEXTURE_COUNT && i < textures.Count; i++) | 876 | for (int i = 0; i < textures.Count && i < TEXTURE_COUNT_PV7; ++i) |
838 | { | 877 | { |
839 | UUID textureID = AppearanceManager.DEFAULT_AVATAR_TEXTURE; | ||
840 | tmpOSD = textures[i]; | 878 | tmpOSD = textures[i]; |
841 | if (tmpOSD != null) | 879 | if (tmpOSD != null) |
842 | textureID = tmpOSD.AsUUID(); | 880 | m_texture.CreateFace((uint)i).TextureID = tmpOSD.AsUUID(); |
843 | m_texture.CreateFace((uint)i).TextureID = new UUID(textureID); | ||
844 | } | 881 | } |
845 | } | 882 | } |
846 | else | 883 | if (data.TryGetValue("te8", out tmpOSD)) |
847 | { | 884 | { |
848 | m_log.Warn("[AVATAR APPEARANCE]: failed to unpack textures"); | 885 | byte[] teb = tmpOSD.AsBinary(); |
886 | Primitive.TextureEntry te = new Primitive.TextureEntry(teb, 0, teb.Length); | ||
887 | m_texture = te; | ||
849 | } | 888 | } |
850 | 889 | ||
851 | if (data.TryGetValue("bakedcache", out tmpOSD) && (tmpOSD is OSDArray)) | 890 | if (data.TryGetValue("bakedcache", out tmpOSD) && (tmpOSD is OSDArray)) |
852 | { | 891 | { |
853 | OSDArray bakedOSDArray = (OSDArray)tmpOSD; | 892 | OSDArray bakedOSDArray = (OSDArray)tmpOSD; |
854 | m_cacheitems = WearableCacheItem.BakedFromOSD(bakedOSDArray); | 893 | m_cacheitems = WearableCacheItem.GetDefaultCacheItem(); |
894 | |||
895 | bakedOSDArray = (OSDArray)tmpOSD; | ||
896 | foreach (OSDMap item in bakedOSDArray) | ||
897 | { | ||
898 | int idx = item["textureindex"].AsInteger(); | ||
899 | if (idx < 0 || idx >= m_cacheitems.Length) | ||
900 | continue; | ||
901 | m_cacheitems[idx].CacheId = item["cacheid"].AsUUID(); | ||
902 | m_cacheitems[idx].TextureID = item["textureid"].AsUUID(); | ||
903 | m_cacheitems[idx].TextureAsset = null; | ||
904 | } | ||
905 | |||
906 | if (data.TryGetValue("bc8", out tmpOSD) && (tmpOSD is OSDArray)) | ||
907 | { | ||
908 | bakedOSDArray = (OSDArray)tmpOSD; | ||
909 | foreach (OSDMap item in bakedOSDArray) | ||
910 | { | ||
911 | int idx = item["textureindex"].AsInteger(); | ||
912 | if (idx < 0 || idx >= m_cacheitems.Length) | ||
913 | continue; | ||
914 | m_cacheitems[idx].CacheId = item["cacheid"].AsUUID(); | ||
915 | m_cacheitems[idx].TextureID = item["textureid"].AsUUID(); | ||
916 | m_cacheitems[idx].TextureAsset = null; | ||
917 | } | ||
918 | } | ||
855 | } | 919 | } |
856 | 920 | ||
857 | // Visual Parameters | 921 | // Visual Parameters |
@@ -888,6 +952,32 @@ namespace OpenSim.Framework | |||
888 | 952 | ||
889 | #endregion | 953 | #endregion |
890 | 954 | ||
955 | public bool CanTeleport(float version) | ||
956 | { | ||
957 | if (version >= 0.8) | ||
958 | return true; | ||
959 | if (m_wearables.Length <= MAXWEARABLE_PV7) | ||
960 | return true; | ||
961 | for(int i = MAXWEARABLE_PV7; i < m_wearables.Length; ++i) | ||
962 | { | ||
963 | if(m_wearables[i].Count > 0) | ||
964 | return false; | ||
965 | } | ||
966 | |||
967 | // also check baked | ||
968 | for(int i = BAKES_COUNT_PV7; i < BAKE_INDICES.Length; i++) | ||
969 | { | ||
970 | int idx = BAKE_INDICES[i]; | ||
971 | if (m_texture.FaceTextures[idx] == null) | ||
972 | continue; | ||
973 | UUID tid = m_texture.FaceTextures[idx].TextureID; | ||
974 | if(tid == AppearanceManager.DEFAULT_AVATAR_TEXTURE || tid == UUID.Zero) | ||
975 | continue; | ||
976 | return false; | ||
977 | } | ||
978 | return true; | ||
979 | } | ||
980 | |||
891 | #region VPElement | 981 | #region VPElement |
892 | 982 | ||
893 | /// <summary> | 983 | /// <summary> |
diff --git a/OpenSim/Framework/AvatarWearable.cs b/OpenSim/Framework/AvatarWearable.cs index abf5759..1733559 100644 --- a/OpenSim/Framework/AvatarWearable.cs +++ b/OpenSim/Framework/AvatarWearable.cs | |||
@@ -67,10 +67,14 @@ namespace OpenSim.Framework | |||
67 | 67 | ||
68 | public static readonly int ALPHA = 13; | 68 | public static readonly int ALPHA = 13; |
69 | public static readonly int TATTOO = 14; | 69 | public static readonly int TATTOO = 14; |
70 | |||
71 | public static readonly int LEGACY_VERSION_MAX_WEARABLES = 15; | 70 | public static readonly int LEGACY_VERSION_MAX_WEARABLES = 15; |
72 | // public static readonly int PHYSICS = 15; | 71 | |
73 | // public static int MAX_WEARABLES = 16; | 72 | public static readonly int PHYSICS = 15; |
73 | |||
74 | public static int MAX_WEARABLES_PV7 = 16; | ||
75 | |||
76 | public static readonly int UNIVERSAL = 16; | ||
77 | public static int MAX_WEARABLES = 17; | ||
74 | 78 | ||
75 | 79 | ||
76 | public static readonly UUID DEFAULT_BODY_ITEM = new UUID("66c41e39-38f9-f75a-024e-585989bfaba9"); | 80 | public static readonly UUID DEFAULT_BODY_ITEM = new UUID("66c41e39-38f9-f75a-024e-585989bfaba9"); |
diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs index da964e7..8fcd9a4 100755 --- a/OpenSim/Framework/IClientAPI.cs +++ b/OpenSim/Framework/IClientAPI.cs | |||
@@ -1107,7 +1107,7 @@ namespace OpenSim.Framework | |||
1107 | /// <param name="agentID">The id of the agent associated with the appearance</param> | 1107 | /// <param name="agentID">The id of the agent associated with the appearance</param> |
1108 | /// <param name="visualParams"></param> | 1108 | /// <param name="visualParams"></param> |
1109 | /// <param name="textureEntry"></param> | 1109 | /// <param name="textureEntry"></param> |
1110 | void SendAppearance(UUID agentID, byte[] visualParams, byte[] textureEntry); | 1110 | void SendAppearance(UUID agentID, byte[] visualParams, byte[] textureEntry, float hoverheight); |
1111 | 1111 | ||
1112 | void SendCachedTextureResponse(ISceneEntity avatar, int serial, List<CachedTextureResponseArg> cachedTextures); | 1112 | void SendCachedTextureResponse(ISceneEntity avatar, int serial, List<CachedTextureResponseArg> cachedTextures); |
1113 | 1113 | ||
diff --git a/OpenSim/Framework/Tests/AgentCircuitDataTest.cs b/OpenSim/Framework/Tests/AgentCircuitDataTest.cs index 5ad0030..c8eb57d 100644 --- a/OpenSim/Framework/Tests/AgentCircuitDataTest.cs +++ b/OpenSim/Framework/Tests/AgentCircuitDataTest.cs | |||
@@ -220,12 +220,6 @@ namespace OpenSim.Framework.Tests | |||
220 | 220 | ||
221 | AvAppearance.VisualParams = VisualParams; | 221 | AvAppearance.VisualParams = VisualParams; |
222 | 222 | ||
223 | List<byte> wearbyte = new List<byte>(); | ||
224 | for (int i = 0; i < VisualParams.Length; i++) | ||
225 | { | ||
226 | wearbyte.Add(VisualParams[i]); | ||
227 | } | ||
228 | |||
229 | AvAppearance.SetAppearance(AvAppearance.Texture, (byte[])VisualParams.Clone()); | 223 | AvAppearance.SetAppearance(AvAppearance.Texture, (byte[])VisualParams.Clone()); |
230 | } | 224 | } |
231 | 225 | ||
diff --git a/OpenSim/Framework/VersionInfo.cs b/OpenSim/Framework/VersionInfo.cs index ac1f3a0..a1ba2aa 100644 --- a/OpenSim/Framework/VersionInfo.cs +++ b/OpenSim/Framework/VersionInfo.cs | |||
@@ -85,8 +85,8 @@ namespace OpenSim | |||
85 | /// - this is an older teleport protocol used in OpenSimulator 0.7.5 and before. | 85 | /// - this is an older teleport protocol used in OpenSimulator 0.7.5 and before. |
86 | /// </remarks> | 86 | /// </remarks> |
87 | public readonly static float SimulationServiceVersionAcceptedMin = 0.3f; | 87 | public readonly static float SimulationServiceVersionAcceptedMin = 0.3f; |
88 | public readonly static float SimulationServiceVersionAcceptedMax = 0.7f; | 88 | public readonly static float SimulationServiceVersionAcceptedMax = 0.8f; |
89 | public readonly static float SimulationServiceVersionSupportedMin = 0.3f; | 89 | public readonly static float SimulationServiceVersionSupportedMin = 0.3f; |
90 | public readonly static float SimulationServiceVersionSupportedMax = 0.7f; | 90 | public readonly static float SimulationServiceVersionSupportedMax = 0.8f; |
91 | } | 91 | } |
92 | } | 92 | } |
diff --git a/OpenSim/Framework/WearableCacheItem.cs b/OpenSim/Framework/WearableCacheItem.cs index e060f22..f832ff9 100644 --- a/OpenSim/Framework/WearableCacheItem.cs +++ b/OpenSim/Framework/WearableCacheItem.cs | |||
@@ -128,31 +128,27 @@ namespace OpenSim.Framework | |||
128 | return arr; | 128 | return arr; |
129 | } | 129 | } |
130 | 130 | ||
131 | public static OSDArray BakedToOSD(WearableCacheItem[] pcacheItems) | 131 | public static OSDArray BakedToOSD(WearableCacheItem[] pcacheItems, int start, int end) |
132 | { | 132 | { |
133 | if (pcacheItems.Length < AvatarAppearance.BAKE_INDICES[AvatarAppearance.BAKE_INDICES.Length - 1]) | ||
134 | return null; | ||
135 | |||
136 | OSDArray arr = new OSDArray(); | 133 | OSDArray arr = new OSDArray(); |
134 | if(start < 0) | ||
135 | start = 0; | ||
136 | if (end < 0 || end > AvatarAppearance.BAKE_INDICES.Length) | ||
137 | end = AvatarAppearance.BAKE_INDICES.Length; | ||
138 | if (start > end) | ||
139 | return null; | ||
137 | 140 | ||
138 | for (int i = 0; i < AvatarAppearance.BAKE_INDICES.Length; i++) | 141 | for (int i = start; i < end; i++) |
139 | { | 142 | { |
140 | int idx = AvatarAppearance.BAKE_INDICES[i]; | 143 | int idx = AvatarAppearance.BAKE_INDICES[i]; |
141 | 144 | if(idx >= pcacheItems.Length) | |
145 | continue; | ||
142 | WearableCacheItem item = pcacheItems[idx]; | 146 | WearableCacheItem item = pcacheItems[idx]; |
143 | 147 | ||
144 | OSDMap itemmap = new OSDMap(); | 148 | OSDMap itemmap = new OSDMap(); |
145 | itemmap.Add("textureindex", OSD.FromUInteger(item.TextureIndex)); | 149 | itemmap.Add("textureindex", OSD.FromUInteger(item.TextureIndex)); |
146 | itemmap.Add("cacheid", OSD.FromUUID(item.CacheId)); | 150 | itemmap.Add("cacheid", OSD.FromUUID(item.CacheId)); |
147 | itemmap.Add("textureid", OSD.FromUUID(item.TextureID)); | 151 | itemmap.Add("textureid", OSD.FromUUID(item.TextureID)); |
148 | /* | ||
149 | if (item.TextureAsset != null) | ||
150 | { | ||
151 | itemmap.Add("assetdata", OSD.FromBinary(item.TextureAsset.Data)); | ||
152 | itemmap.Add("assetcreator", OSD.FromString(item.TextureAsset.CreatorID)); | ||
153 | itemmap.Add("assetname", OSD.FromString(item.TextureAsset.Name)); | ||
154 | } | ||
155 | */ | ||
156 | arr.Add(itemmap); | 152 | arr.Add(itemmap); |
157 | } | 153 | } |
158 | return arr; | 154 | return arr; |
@@ -167,22 +163,11 @@ namespace OpenSim.Framework | |||
167 | foreach (OSDMap item in itemarray) | 163 | foreach (OSDMap item in itemarray) |
168 | { | 164 | { |
169 | int idx = item["textureindex"].AsInteger(); | 165 | int idx = item["textureindex"].AsInteger(); |
170 | if (idx < 0 || idx > pcache.Length) | 166 | if (idx < 0 || idx >= pcache.Length) |
171 | continue; | 167 | continue; |
172 | pcache[idx].CacheId = item["cacheid"].AsUUID(); | 168 | pcache[idx].CacheId = item["cacheid"].AsUUID(); |
173 | pcache[idx].TextureID = item["textureid"].AsUUID(); | 169 | pcache[idx].TextureID = item["textureid"].AsUUID(); |
174 | /* | 170 | pcache[idx].TextureAsset = null; |
175 | if (item.ContainsKey("assetdata")) | ||
176 | { | ||
177 | AssetBase asset = new AssetBase(item["textureid"].AsUUID(), "BakedTexture", (sbyte)AssetType.Texture, UUID.Zero.ToString()); | ||
178 | asset.Temporary = true; | ||
179 | asset.Local = true; | ||
180 | asset.Data = item["assetdata"].AsBinary(); | ||
181 | pcache[idx].TextureAsset = asset; | ||
182 | } | ||
183 | else | ||
184 | */ | ||
185 | pcache[idx].TextureAsset = null; | ||
186 | } | 171 | } |
187 | } | 172 | } |
188 | return pcache; | 173 | return pcache; |