From 7cdce3e276c66de26cd12b9d6bd51976e1e41462 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sat, 31 Aug 2019 15:01:15 +0100 Subject: XbakesModule: allow more textures, older versions will not see --- .../Avatar/BakedTextures/XBakesModule.cs | 59 +++++++++++++++++----- 1 file changed, 47 insertions(+), 12 deletions(-) (limited to 'OpenSim') diff --git a/OpenSim/Region/CoreModules/Avatar/BakedTextures/XBakesModule.cs b/OpenSim/Region/CoreModules/Avatar/BakedTextures/XBakesModule.cs index cfa9581..b9f9298 100644 --- a/OpenSim/Region/CoreModules/Avatar/BakedTextures/XBakesModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/BakedTextures/XBakesModule.cs @@ -125,32 +125,49 @@ namespace OpenSim.Region.CoreModules.Avatar.BakedTextures using(XmlTextReader sr = new XmlTextReader(s)) { sr.ReadStartElement("BakedAppearance"); - while(sr.LocalName == "BakedTexture") + while (sr.LocalName == "BakedTexture") { string sTextureIndex = sr.GetAttribute("TextureIndex"); int lTextureIndex = Convert.ToInt32(sTextureIndex); string sCacheId = sr.GetAttribute("CacheId"); - UUID lCacheId = UUID.Zero; - if(!(UUID.TryParse(sCacheId,out lCacheId))) + UUID.TryParse(sCacheId, out UUID lCacheId); + + sr.ReadStartElement("BakedTexture"); + if (sr.Name == "AssetBase") { - // ?? Nothing here + AssetBase a = (AssetBase)m_serializer.Deserialize(sr); + ret.Add(new WearableCacheItem() + { + CacheId = lCacheId, + TextureIndex = (uint)lTextureIndex, + TextureAsset = a, + TextureID = a.FullID + }); + sr.ReadEndElement(); } + } + while (sr.LocalName == "BESetA") + { + string sTextureIndex = sr.GetAttribute("TextureIndex"); + int lTextureIndex = Convert.ToInt32(sTextureIndex); + string sCacheId = sr.GetAttribute("CacheId"); + UUID.TryParse(sCacheId, out UUID lCacheId); - sr.ReadStartElement("BakedTexture"); - if(sr.Name=="AssetBase") + sr.ReadStartElement("BESetA"); + if (sr.Name == "AssetBase") { AssetBase a = (AssetBase)m_serializer.Deserialize(sr); ret.Add(new WearableCacheItem() - { + { CacheId = lCacheId, TextureIndex = (uint)lTextureIndex, TextureAsset = a, TextureID = a.FullID - }); + }); sr.ReadEndElement(); } } - m_log.DebugFormat("[XBakes]: read {0} textures for user {1}",ret.Count,id); + m_log.DebugFormat("[XBakes]: read {0} textures for user {1}",ret.Count,id); } return ret.ToArray(); } @@ -182,22 +199,40 @@ namespace OpenSim.Region.CoreModules.Avatar.BakedTextures using (XmlTextWriter bakeWriter = new XmlTextWriter(bakeStream, null)) { bakeWriter.WriteStartElement(String.Empty, "BakedAppearance", String.Empty); - + List extended = new List(); for (int i = 0; i < data.Length; i++) { if (data[i] != null && data[i].TextureAsset != null) { + if(data[i].TextureIndex > 26) + { + extended.Add(i); + continue; + } bakeWriter.WriteStartElement(String.Empty, "BakedTexture", String.Empty); bakeWriter.WriteAttributeString(String.Empty, "TextureIndex", String.Empty, data[i].TextureIndex.ToString()); bakeWriter.WriteAttributeString(String.Empty, "CacheId", String.Empty, data[i].CacheId.ToString()); -// if (data[i].TextureAsset != null) - m_serializer.Serialize(bakeWriter, data[i].TextureAsset); + // if (data[i].TextureAsset != null) + m_serializer.Serialize(bakeWriter, data[i].TextureAsset); bakeWriter.WriteEndElement(); numberWears++; } } + if(extended.Count > 0) + { + foreach(int i in extended) + { + bakeWriter.WriteStartElement(String.Empty, "BESetA", String.Empty); + bakeWriter.WriteAttributeString(String.Empty, "TextureIndex", String.Empty, data[i].TextureIndex.ToString()); + bakeWriter.WriteAttributeString(String.Empty, "CacheId", String.Empty, data[i].CacheId.ToString()); + m_serializer.Serialize(bakeWriter, data[i].TextureAsset); + bakeWriter.WriteEndElement(); + numberWears++; + } + } + bakeWriter.WriteEndElement(); bakeWriter.Flush(); -- cgit v1.1