Dropping the rest of Avination's modified appearance code for core.
Module to follow.0.8.0.3
							parent
							
								
									8eec717f5f
								
							
						
					
					
						commit
						49c2213a01
					
				|  | @ -27,6 +27,7 @@ | ||||||
| 
 | 
 | ||||||
| using System; | using System; | ||||||
| using System.Collections; | using System.Collections; | ||||||
|  | using System.Collections.Generic; | ||||||
| using System.Collections.Specialized; | using System.Collections.Specialized; | ||||||
| using System.Drawing; | using System.Drawing; | ||||||
| using System.Drawing.Imaging; | using System.Drawing.Imaging; | ||||||
|  | @ -53,8 +54,8 @@ namespace OpenSim.Region.ClientStack.Linden | ||||||
|     [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "UploadBakedTextureModule")] |     [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "UploadBakedTextureModule")] | ||||||
|     public class UploadBakedTextureModule : INonSharedRegionModule |     public class UploadBakedTextureModule : INonSharedRegionModule | ||||||
|     { |     { | ||||||
| //        private static readonly ILog m_log = |        private static readonly ILog m_log = | ||||||
| //            LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |             LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||||||
| 
 | 
 | ||||||
|         /// <summary> |         /// <summary> | ||||||
|         /// For historical reasons this is fixed, but there |         /// For historical reasons this is fixed, but there | ||||||
|  | @ -63,39 +64,211 @@ namespace OpenSim.Region.ClientStack.Linden | ||||||
| 
 | 
 | ||||||
|         private Scene m_scene; |         private Scene m_scene; | ||||||
|         private bool m_persistBakedTextures; |         private bool m_persistBakedTextures; | ||||||
|         private string m_URL; | 
 | ||||||
|  |         private IBakedTextureModule m_BakedTextureModule; | ||||||
| 
 | 
 | ||||||
|         public void Initialise(IConfigSource source) |         public void Initialise(IConfigSource source) | ||||||
|         { |         { | ||||||
|             IConfig config = source.Configs["ClientStack.LindenCaps"]; |  | ||||||
|             if (config == null) |  | ||||||
|                 return; |  | ||||||
| 
 |  | ||||||
|             m_URL = config.GetString("Cap_UploadBakedTexture", string.Empty); |  | ||||||
| 
 |  | ||||||
|             IConfig appearanceConfig = source.Configs["Appearance"]; |             IConfig appearanceConfig = source.Configs["Appearance"]; | ||||||
|             if (appearanceConfig != null) |             if (appearanceConfig != null) | ||||||
|                 m_persistBakedTextures = appearanceConfig.GetBoolean("PersistBakedTextures", m_persistBakedTextures); |                 m_persistBakedTextures = appearanceConfig.GetBoolean("PersistBakedTextures", m_persistBakedTextures); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         public void AddRegion(Scene s) |         public void AddRegion(Scene s) | ||||||
|         { |         { | ||||||
|             m_scene = s; |             m_scene = s; | ||||||
|  |             | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         public void RemoveRegion(Scene s) |         public void RemoveRegion(Scene s) | ||||||
|         { |         { | ||||||
|  |             s.EventManager.OnRegisterCaps -= RegisterCaps; | ||||||
|  |             s.EventManager.OnNewPresence -= RegisterNewPresence; | ||||||
|  |             s.EventManager.OnRemovePresence -= DeRegisterPresence; | ||||||
|  |             m_BakedTextureModule = null; | ||||||
|  |             m_scene = null; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         | ||||||
|  | 
 | ||||||
|         public void RegionLoaded(Scene s) |         public void RegionLoaded(Scene s) | ||||||
|         { |         { | ||||||
|             m_scene.EventManager.OnRegisterCaps += RegisterCaps; |             m_scene.EventManager.OnRegisterCaps += RegisterCaps; | ||||||
|  |             m_scene.EventManager.OnNewPresence += RegisterNewPresence; | ||||||
|  |             m_scene.EventManager.OnRemovePresence += DeRegisterPresence; | ||||||
|  |              | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void DeRegisterPresence(UUID agentId) | ||||||
|  |         { | ||||||
|  |             ScenePresence presence = null; | ||||||
|  |             if (m_scene.TryGetScenePresence(agentId, out presence)) | ||||||
|  |             { | ||||||
|  |                 presence.ControllingClient.OnSetAppearance -= CaptureAppearanceSettings; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void RegisterNewPresence(ScenePresence presence) | ||||||
|  |         { | ||||||
|  |            presence.ControllingClient.OnSetAppearance += CaptureAppearanceSettings; | ||||||
|  | 
 | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void CaptureAppearanceSettings(IClientAPI remoteClient, Primitive.TextureEntry textureEntry, byte[] visualParams, Vector3 avSize, WearableCacheItem[] cacheItems) | ||||||
|  |         { | ||||||
|  |             int maxCacheitemsLoop = cacheItems.Length; | ||||||
|  |             if (maxCacheitemsLoop > AvatarWearable.MAX_WEARABLES) | ||||||
|  |             { | ||||||
|  |                 maxCacheitemsLoop = AvatarWearable.MAX_WEARABLES; | ||||||
|  |                 m_log.WarnFormat("[CACHEDBAKES]: Too Many Cache items Provided {0}, the max is {1}.  Truncating!", cacheItems.Length, AvatarWearable.MAX_WEARABLES); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             m_BakedTextureModule = m_scene.RequestModuleInterface<IBakedTextureModule>(); | ||||||
|  |             if (cacheItems.Length > 0) | ||||||
|  |             { | ||||||
|  |                 m_log.Debug("[Cacheitems]: " + cacheItems.Length); | ||||||
|  |                 for (int iter = 0; iter < maxCacheitemsLoop; iter++) | ||||||
|  |                 { | ||||||
|  |                     m_log.Debug("[Cacheitems] {" + iter + "/" + cacheItems[iter].TextureIndex + "}: c-" + cacheItems[iter].CacheId + ", t-" + | ||||||
|  |                                       cacheItems[iter].TextureID); | ||||||
|  |                 } | ||||||
|  |                 | ||||||
|  |                 ScenePresence p = null; | ||||||
|  |                 if (m_scene.TryGetScenePresence(remoteClient.AgentId, out p)) | ||||||
|  |                 { | ||||||
|  | 
 | ||||||
|  |                     WearableCacheItem[] existingitems = p.Appearance.WearableCacheItems; | ||||||
|  |                     if (existingitems == null) | ||||||
|  |                     { | ||||||
|  |                         if (m_BakedTextureModule != null) | ||||||
|  |                         { | ||||||
|  |                             WearableCacheItem[] savedcache = null; | ||||||
|  |                             try | ||||||
|  |                             { | ||||||
|  |                                 if (p.Appearance.WearableCacheItemsDirty) | ||||||
|  |                                 { | ||||||
|  |                                     savedcache = m_BakedTextureModule.Get(p.UUID); | ||||||
|  |                                     p.Appearance.WearableCacheItems = savedcache; | ||||||
|  |                                     p.Appearance.WearableCacheItemsDirty = false; | ||||||
|  |                                 } | ||||||
|  | 
 | ||||||
|  |                             } | ||||||
|  |                             /* | ||||||
|  |                              * The following Catch types DO NOT WORK with m_BakedTextureModule.Get | ||||||
|  |                              * it jumps to the General Packet Exception Handler if you don't catch Exception! | ||||||
|  |                              *  | ||||||
|  |                             catch (System.Net.Sockets.SocketException) | ||||||
|  |                             { | ||||||
|  |                                 cacheItems = null; | ||||||
|  |                             } | ||||||
|  |                             catch (WebException) | ||||||
|  |                             { | ||||||
|  |                                 cacheItems = null; | ||||||
|  |                             } | ||||||
|  |                             catch (InvalidOperationException) | ||||||
|  |                             { | ||||||
|  |                                 cacheItems = null; | ||||||
|  |                             } */ | ||||||
|  |                             catch (Exception) | ||||||
|  |                             { | ||||||
|  |                                // The service logs a sufficient error message. | ||||||
|  |                             } | ||||||
|  |                              | ||||||
|  | 
 | ||||||
|  |                             if (savedcache != null) | ||||||
|  |                                 existingitems = savedcache; | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                     // Existing items null means it's a fully new appearance | ||||||
|  |                     if (existingitems == null) | ||||||
|  |                     { | ||||||
|  | 
 | ||||||
|  |                         for (int i = 0; i < maxCacheitemsLoop; i++) | ||||||
|  |                         { | ||||||
|  |                             if (textureEntry.FaceTextures.Length > cacheItems[i].TextureIndex) | ||||||
|  |                             { | ||||||
|  |                                 Primitive.TextureEntryFace face = textureEntry.FaceTextures[cacheItems[i].TextureIndex]; | ||||||
|  |                                 if (face == null) | ||||||
|  |                                 { | ||||||
|  |                                     textureEntry.CreateFace(cacheItems[i].TextureIndex); | ||||||
|  |                                     textureEntry.FaceTextures[cacheItems[i].TextureIndex].TextureID = | ||||||
|  |                                         AppearanceManager.DEFAULT_AVATAR_TEXTURE; | ||||||
|  |                                     continue; | ||||||
|  |                                 } | ||||||
|  |                                 cacheItems[i].TextureID =face.TextureID; | ||||||
|  |                                 if (m_scene.AssetService != null) | ||||||
|  |                                     cacheItems[i].TextureAsset = | ||||||
|  |                                         m_scene.AssetService.GetCached(cacheItems[i].TextureID.ToString()); | ||||||
|  |                             } | ||||||
|  |                             else | ||||||
|  |                             { | ||||||
|  |                                 m_log.WarnFormat("[CACHEDBAKES]: Invalid Texture Index Provided, Texture doesn't exist or hasn't been uploaded yet {0}, the max is {1}.  Skipping!", cacheItems[i].TextureIndex, textureEntry.FaceTextures.Length); | ||||||
|  |                             } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                     else | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |                     { | ||||||
|  |                         // for each uploaded baked texture | ||||||
|  |                         for (int i = 0; i < maxCacheitemsLoop; i++) | ||||||
|  |                         { | ||||||
|  |                             if (textureEntry.FaceTextures.Length > cacheItems[i].TextureIndex) | ||||||
|  |                             { | ||||||
|  |                                 Primitive.TextureEntryFace face = textureEntry.FaceTextures[cacheItems[i].TextureIndex]; | ||||||
|  |                                 if (face == null) | ||||||
|  |                                 { | ||||||
|  |                                     textureEntry.CreateFace(cacheItems[i].TextureIndex); | ||||||
|  |                                     textureEntry.FaceTextures[cacheItems[i].TextureIndex].TextureID = | ||||||
|  |                                         AppearanceManager.DEFAULT_AVATAR_TEXTURE; | ||||||
|  |                                     continue; | ||||||
|  |                                 } | ||||||
|  |                                 cacheItems[i].TextureID = | ||||||
|  |                                     face.TextureID; | ||||||
|  |                             } | ||||||
|  |                             else | ||||||
|  |                             { | ||||||
|  |                                 m_log.WarnFormat("[CACHEDBAKES]: Invalid Texture Index Provided, Texture doesn't exist or hasn't been uploaded yet {0}, the max is {1}.  Skipping!", cacheItems[i].TextureIndex, textureEntry.FaceTextures.Length); | ||||||
|  |                             } | ||||||
|  |                         } | ||||||
|  | 
 | ||||||
|  |                         for (int i = 0; i < maxCacheitemsLoop; i++) | ||||||
|  |                         { | ||||||
|  |                             if (cacheItems[i].TextureAsset == null) | ||||||
|  |                             { | ||||||
|  |                                 cacheItems[i].TextureAsset = | ||||||
|  |                                     m_scene.AssetService.GetCached(cacheItems[i].TextureID.ToString()); | ||||||
|  |                             } | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |                     p.Appearance.WearableCacheItems = cacheItems; | ||||||
|  |                      | ||||||
|  |                     | ||||||
|  | 
 | ||||||
|  |                     if (m_BakedTextureModule != null) | ||||||
|  |                     { | ||||||
|  |                         m_BakedTextureModule.Store(remoteClient.AgentId, cacheItems); | ||||||
|  |                         p.Appearance.WearableCacheItemsDirty = true; | ||||||
|  |                          | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         public void PostInitialise() |         public void PostInitialise() | ||||||
|         { |         { | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|         public void Close() { } |         public void Close() { } | ||||||
| 
 | 
 | ||||||
|         public string Name { get { return "UploadBakedTextureModule"; } } |         public string Name { get { return "UploadBakedTextureModule"; } } | ||||||
|  | @ -107,26 +280,23 @@ namespace OpenSim.Region.ClientStack.Linden | ||||||
| 
 | 
 | ||||||
|         public void RegisterCaps(UUID agentID, Caps caps) |         public void RegisterCaps(UUID agentID, Caps caps) | ||||||
|         { |         { | ||||||
| //            UUID capID = UUID.Random(); |             UploadBakedTextureHandler avatarhandler = new UploadBakedTextureHandler( | ||||||
|  |                 caps, m_scene.AssetService, m_persistBakedTextures); | ||||||
| 
 | 
 | ||||||
|             //caps.RegisterHandler("GetTexture", new StreamHandler("GET", "/CAPS/" + capID, ProcessGetTexture)); |             | ||||||
|             if (m_URL == "localhost") |              | ||||||
|             { |             caps.RegisterHandler( | ||||||
|                 caps.RegisterHandler( |                 "UploadBakedTexture", | ||||||
|  |                 new RestStreamHandler( | ||||||
|  |                     "POST", | ||||||
|  |                     "/CAPS/" + caps.CapsObjectPath + m_uploadBakedTexturePath, | ||||||
|  |                     avatarhandler.UploadBakedTexture, | ||||||
|                     "UploadBakedTexture", |                     "UploadBakedTexture", | ||||||
|                     new RestStreamHandler( |                     agentID.ToString())); | ||||||
|                         "POST", | 
 | ||||||
|                         "/CAPS/" + caps.CapsObjectPath + m_uploadBakedTexturePath, |             | ||||||
|                         new UploadBakedTextureHandler( |              | ||||||
|                             caps, m_scene.AssetService, m_persistBakedTextures).UploadBakedTexture, | 
 | ||||||
|                         "UploadBakedTexture", |  | ||||||
|                         agentID.ToString())); |  | ||||||
|                  |  | ||||||
|             } |  | ||||||
|             else |  | ||||||
|             { |  | ||||||
|                 caps.RegisterHandler("UploadBakedTexture", m_URL); |  | ||||||
|             } |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -325,6 +325,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | ||||||
|         private readonly byte[] m_channelVersion = Utils.EmptyBytes; |         private readonly byte[] m_channelVersion = Utils.EmptyBytes; | ||||||
|         private readonly IGroupsModule m_GroupsModule; |         private readonly IGroupsModule m_GroupsModule; | ||||||
| 
 | 
 | ||||||
|  |         private int m_cachedTextureSerial; | ||||||
|         private PriorityQueue m_entityUpdates; |         private PriorityQueue m_entityUpdates; | ||||||
|         private PriorityQueue m_entityProps; |         private PriorityQueue m_entityProps; | ||||||
|         private Prioritizer m_prioritizer; |         private Prioritizer m_prioritizer; | ||||||
|  | @ -11742,36 +11743,158 @@ namespace OpenSim.Region.ClientStack.LindenUDP | ||||||
|         /// <returns></returns> |         /// <returns></returns> | ||||||
|         protected bool HandleAgentTextureCached(IClientAPI simclient, Packet packet) |         protected bool HandleAgentTextureCached(IClientAPI simclient, Packet packet) | ||||||
|         { |         { | ||||||
|  |             //m_log.Debug("texture cached: " + packet.ToString()); | ||||||
|             AgentCachedTexturePacket cachedtex = (AgentCachedTexturePacket)packet; |             AgentCachedTexturePacket cachedtex = (AgentCachedTexturePacket)packet; | ||||||
|  |             AgentCachedTextureResponsePacket cachedresp = (AgentCachedTextureResponsePacket)PacketPool.Instance.GetPacket(PacketType.AgentCachedTextureResponse); | ||||||
| 
 | 
 | ||||||
|             if (cachedtex.AgentData.SessionID != SessionId) |             if (cachedtex.AgentData.SessionID != SessionId) | ||||||
|                 return false; |                 return false; | ||||||
| 
 | 
 | ||||||
|             List<CachedTextureRequestArg> requestArgs = new List<CachedTextureRequestArg>(); |  | ||||||
| 
 | 
 | ||||||
|             for (int i = 0; i < cachedtex.WearableData.Length; i++) |             // TODO: don't create new blocks if recycling an old packet | ||||||
|             { |             cachedresp.AgentData.AgentID = AgentId; | ||||||
|                 CachedTextureRequestArg arg = new CachedTextureRequestArg(); |             cachedresp.AgentData.SessionID = m_sessionId; | ||||||
|                 arg.BakedTextureIndex = cachedtex.WearableData[i].TextureIndex; |             cachedresp.AgentData.SerialNum = m_cachedTextureSerial; | ||||||
|                 arg.WearableHashID = cachedtex.WearableData[i].ID; |             m_cachedTextureSerial++; | ||||||
|                  |             cachedresp.WearableData = | ||||||
|                 requestArgs.Add(arg); |                 new AgentCachedTextureResponsePacket.WearableDataBlock[cachedtex.WearableData.Length]; | ||||||
|             } |  | ||||||
| 
 | 
 | ||||||
|             try |             //IAvatarFactoryModule fac = m_scene.RequestModuleInterface<IAvatarFactoryModule>(); | ||||||
|  |            // var item = fac.GetBakedTextureFaces(AgentId); | ||||||
|  |             //WearableCacheItem[] items = fac.GetCachedItems(AgentId); | ||||||
|  | 
 | ||||||
|  |             IAssetService cache = m_scene.AssetService; | ||||||
|  |             IBakedTextureModule bakedTextureModule = m_scene.RequestModuleInterface<IBakedTextureModule>(); | ||||||
|  |             //bakedTextureModule = null; | ||||||
|  |             int maxWearablesLoop = cachedtex.WearableData.Length; | ||||||
|  |             if (maxWearablesLoop > AvatarWearable.MAX_WEARABLES) | ||||||
|  |                 maxWearablesLoop = AvatarWearable.MAX_WEARABLES; | ||||||
|  | 
 | ||||||
|  |             if (bakedTextureModule != null && cache != null) | ||||||
|             { |             { | ||||||
|                 CachedTextureRequest handlerCachedTextureRequest = OnCachedTextureRequest; |                 // We need to make sure the asset stored in the bake is available on this server also by it's assetid before we map it to a Cacheid | ||||||
|                 if (handlerCachedTextureRequest != null) | 
 | ||||||
|  |                 WearableCacheItem[] cacheItems = null; | ||||||
|  |                 ScenePresence p = m_scene.GetScenePresence(AgentId); | ||||||
|  |                 if (p.Appearance != null) | ||||||
|  |                     if (p.Appearance.WearableCacheItems == null || p.Appearance.WearableCacheItemsDirty) | ||||||
|  |                     { | ||||||
|  |                         try | ||||||
|  |                         { | ||||||
|  |                             cacheItems = bakedTextureModule.Get(AgentId); | ||||||
|  |                             p.Appearance.WearableCacheItems = cacheItems; | ||||||
|  |                             p.Appearance.WearableCacheItemsDirty = false; | ||||||
|  |                         } | ||||||
|  | 
 | ||||||
|  |                         /* | ||||||
|  |                          * The following Catch types DO NOT WORK, it jumps to the General Packet Exception Handler if you don't catch Exception! | ||||||
|  |                          *  | ||||||
|  |                         catch (System.Net.Sockets.SocketException) | ||||||
|  |                         { | ||||||
|  |                             cacheItems = null; | ||||||
|  |                         } | ||||||
|  |                         catch (WebException) | ||||||
|  |                         { | ||||||
|  |                             cacheItems = null; | ||||||
|  |                         } | ||||||
|  |                         catch (InvalidOperationException) | ||||||
|  |                         { | ||||||
|  |                             cacheItems = null; | ||||||
|  |                         } */ | ||||||
|  |                         catch (Exception) | ||||||
|  |                         { | ||||||
|  |                             cacheItems = null; | ||||||
|  |                         } | ||||||
|  | 
 | ||||||
|  |                     } | ||||||
|  |                     else if (p.Appearance.WearableCacheItems != null) | ||||||
|  |                     { | ||||||
|  |                         cacheItems = p.Appearance.WearableCacheItems; | ||||||
|  |                     } | ||||||
|  | 
 | ||||||
|  |                 if (cache != null && cacheItems != null) | ||||||
|                 { |                 { | ||||||
|                     handlerCachedTextureRequest(simclient,cachedtex.AgentData.SerialNum,requestArgs); |                     foreach (WearableCacheItem item in cacheItems) | ||||||
|  |                     { | ||||||
|  | 
 | ||||||
|  |                         if (cache.GetCached(item.TextureID.ToString()) == null) | ||||||
|  |                         { | ||||||
|  |                             item.TextureAsset.Temporary = true; | ||||||
|  |                             cache.Store(item.TextureAsset); | ||||||
|  |                         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 if (cacheItems != null) | ||||||
|  |                 { | ||||||
|  | 
 | ||||||
|  |                     for (int i = 0; i < maxWearablesLoop; i++) | ||||||
|  |                     { | ||||||
|  |                         WearableCacheItem item = | ||||||
|  |                             WearableCacheItem.SearchTextureIndex(cachedtex.WearableData[i].TextureIndex,cacheItems); | ||||||
|  | 
 | ||||||
|  |                         cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock(); | ||||||
|  |                         cachedresp.WearableData[i].TextureIndex= cachedtex.WearableData[i].TextureIndex; | ||||||
|  |                         cachedresp.WearableData[i].HostName = new byte[0]; | ||||||
|  |                         if (item != null && cachedtex.WearableData[i].ID == item.CacheId) | ||||||
|  |                         { | ||||||
|  | 
 | ||||||
|  |                             cachedresp.WearableData[i].TextureID = item.TextureID; | ||||||
|  |                         } | ||||||
|  |                         else | ||||||
|  |                         { | ||||||
|  |                             cachedresp.WearableData[i].TextureID = UUID.Zero; | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 else | ||||||
|  |                 { | ||||||
|  |                     for (int i = 0; i < maxWearablesLoop; i++) | ||||||
|  |                     { | ||||||
|  |                         cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock(); | ||||||
|  |                         cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex; | ||||||
|  |                         cachedresp.WearableData[i].TextureID = UUID.Zero; | ||||||
|  |                         //UUID.Parse("8334fb6e-c2f5-46ee-807d-a435f61a8d46"); | ||||||
|  |                         cachedresp.WearableData[i].HostName = new byte[0]; | ||||||
|  |                     } | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             catch (Exception e) |             else | ||||||
|             { |             { | ||||||
|                 m_log.ErrorFormat("[CLIENT VIEW]: AgentTextureCached packet handler threw an exception, {0}", e); |                 if (cache == null) | ||||||
|                 return false; |                 { | ||||||
|  |                     for (int i = 0; i < maxWearablesLoop; i++) | ||||||
|  |                     { | ||||||
|  |                         cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock(); | ||||||
|  |                         cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex; | ||||||
|  |                         cachedresp.WearableData[i].TextureID = UUID.Zero; | ||||||
|  |                             //UUID.Parse("8334fb6e-c2f5-46ee-807d-a435f61a8d46"); | ||||||
|  |                         cachedresp.WearableData[i].HostName = new byte[0]; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 else | ||||||
|  |                 { | ||||||
|  |                     for (int i = 0; i < maxWearablesLoop; i++) | ||||||
|  |                     { | ||||||
|  |                         cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock(); | ||||||
|  |                         cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |                         if (cache.GetCached(cachedresp.WearableData[i].TextureID.ToString()) == null) | ||||||
|  |                             cachedresp.WearableData[i].TextureID = UUID.Zero; | ||||||
|  |                             //UUID.Parse("8334fb6e-c2f5-46ee-807d-a435f61a8d46"); | ||||||
|  |                         else | ||||||
|  |                             cachedresp.WearableData[i].TextureID = UUID.Zero; | ||||||
|  |                                 // UUID.Parse("8334fb6e-c2f5-46ee-807d-a435f61a8d46"); | ||||||
|  |                         cachedresp.WearableData[i].HostName = new byte[0]; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|              |             cachedresp.Header.Zerocoded = true; | ||||||
|  |             OutPacket(cachedresp, ThrottleOutPacketType.Task); | ||||||
|  | 
 | ||||||
|             return true; |             return true; | ||||||
|         } |         } | ||||||
|          |          | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Melanie
						Melanie