diff options
Diffstat (limited to 'OpenSim/Region/ClientStack/Linden')
3 files changed, 314 insertions, 20 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs index f6146a9..b06788b 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs | |||
@@ -103,6 +103,7 @@ namespace OpenSim.Region.ClientStack.Linden | |||
103 | private static readonly string m_getObjectPhysicsDataPath = "0101/"; | 103 | private static readonly string m_getObjectPhysicsDataPath = "0101/"; |
104 | private static readonly string m_getObjectCostPath = "0102/"; | 104 | private static readonly string m_getObjectCostPath = "0102/"; |
105 | private static readonly string m_ResourceCostSelectedPath = "0103/"; | 105 | private static readonly string m_ResourceCostSelectedPath = "0103/"; |
106 | private static readonly string m_UpdateAgentInformationPath = "0500/"; | ||
106 | 107 | ||
107 | 108 | ||
108 | // These are callbacks which will be setup by the scene so that we can update scene data when we | 109 | // These are callbacks which will be setup by the scene so that we can update scene data when we |
@@ -287,6 +288,8 @@ namespace OpenSim.Region.ClientStack.Linden | |||
287 | m_HostCapsObj.RegisterHandler("GetObjectCost", getObjectCostHandler); | 288 | m_HostCapsObj.RegisterHandler("GetObjectCost", getObjectCostHandler); |
288 | IRequestHandler ResourceCostSelectedHandler = new RestStreamHandler("POST", capsBase + m_ResourceCostSelectedPath, ResourceCostSelected); | 289 | IRequestHandler ResourceCostSelectedHandler = new RestStreamHandler("POST", capsBase + m_ResourceCostSelectedPath, ResourceCostSelected); |
289 | m_HostCapsObj.RegisterHandler("ResourceCostSelected", ResourceCostSelectedHandler); | 290 | m_HostCapsObj.RegisterHandler("ResourceCostSelected", ResourceCostSelectedHandler); |
291 | IRequestHandler UpdateAgentInformationHandler = new RestStreamHandler("POST", capsBase + m_UpdateAgentInformationPath, UpdateAgentInformation); | ||
292 | m_HostCapsObj.RegisterHandler("UpdateAgentInformation", UpdateAgentInformationHandler); | ||
290 | 293 | ||
291 | m_HostCapsObj.RegisterHandler( | 294 | m_HostCapsObj.RegisterHandler( |
292 | "CopyInventoryFromNotecard", | 295 | "CopyInventoryFromNotecard", |
@@ -1438,6 +1441,22 @@ namespace OpenSim.Region.ClientStack.Linden | |||
1438 | string response = OSDParser.SerializeLLSDXmlString(resp); | 1441 | string response = OSDParser.SerializeLLSDXmlString(resp); |
1439 | return response; | 1442 | return response; |
1440 | } | 1443 | } |
1444 | |||
1445 | public string UpdateAgentInformation(string request, string path, | ||
1446 | string param, IOSHttpRequest httpRequest, | ||
1447 | IOSHttpResponse httpResponse) | ||
1448 | { | ||
1449 | OSDMap req = (OSDMap)OSDParser.DeserializeLLSDXml(request); | ||
1450 | OSDMap resp = new OSDMap(); | ||
1451 | |||
1452 | OSDMap accessPrefs = new OSDMap(); | ||
1453 | accessPrefs["max"] = "A"; | ||
1454 | |||
1455 | resp["access_prefs"] = accessPrefs; | ||
1456 | |||
1457 | string response = OSDParser.SerializeLLSDXmlString(resp); | ||
1458 | return response; | ||
1459 | } | ||
1441 | } | 1460 | } |
1442 | 1461 | ||
1443 | public class AssetUploader | 1462 | public class AssetUploader |
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs index 3b0ccd7..6bed95f 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs | |||
@@ -27,6 +27,7 @@ | |||
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using System.Collections; | 29 | using System.Collections; |
30 | using System.Collections.Generic; | ||
30 | using System.Collections.Specialized; | 31 | using System.Collections.Specialized; |
31 | using System.Drawing; | 32 | using System.Drawing; |
32 | using System.Drawing.Imaging; | 33 | using System.Drawing.Imaging; |
@@ -53,8 +54,8 @@ namespace OpenSim.Region.ClientStack.Linden | |||
53 | [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "UploadBakedTextureModule")] | 54 | [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "UploadBakedTextureModule")] |
54 | public class UploadBakedTextureModule : INonSharedRegionModule | 55 | public class UploadBakedTextureModule : INonSharedRegionModule |
55 | { | 56 | { |
56 | // private static readonly ILog m_log = | 57 | private static readonly ILog m_log = |
57 | // LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 58 | LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
58 | 59 | ||
59 | /// <summary> | 60 | /// <summary> |
60 | /// For historical reasons this is fixed, but there | 61 | /// For historical reasons this is fixed, but there |
@@ -64,31 +65,195 @@ namespace OpenSim.Region.ClientStack.Linden | |||
64 | private Scene m_scene; | 65 | private Scene m_scene; |
65 | private bool m_persistBakedTextures; | 66 | private bool m_persistBakedTextures; |
66 | 67 | ||
68 | private IBakedTextureModule m_BakedTextureModule; | ||
69 | |||
67 | public void Initialise(IConfigSource source) | 70 | public void Initialise(IConfigSource source) |
68 | { | 71 | { |
69 | IConfig appearanceConfig = source.Configs["Appearance"]; | 72 | IConfig appearanceConfig = source.Configs["Appearance"]; |
70 | if (appearanceConfig != null) | 73 | if (appearanceConfig != null) |
71 | m_persistBakedTextures = appearanceConfig.GetBoolean("PersistBakedTextures", m_persistBakedTextures); | 74 | m_persistBakedTextures = appearanceConfig.GetBoolean("PersistBakedTextures", m_persistBakedTextures); |
75 | |||
76 | |||
72 | } | 77 | } |
73 | 78 | ||
74 | public void AddRegion(Scene s) | 79 | public void AddRegion(Scene s) |
75 | { | 80 | { |
76 | m_scene = s; | 81 | m_scene = s; |
82 | |||
77 | } | 83 | } |
78 | 84 | ||
79 | public void RemoveRegion(Scene s) | 85 | public void RemoveRegion(Scene s) |
80 | { | 86 | { |
87 | s.EventManager.OnRegisterCaps -= RegisterCaps; | ||
88 | s.EventManager.OnNewPresence -= RegisterNewPresence; | ||
89 | s.EventManager.OnRemovePresence -= DeRegisterPresence; | ||
90 | m_BakedTextureModule = null; | ||
91 | m_scene = null; | ||
81 | } | 92 | } |
82 | 93 | ||
94 | |||
95 | |||
83 | public void RegionLoaded(Scene s) | 96 | public void RegionLoaded(Scene s) |
84 | { | 97 | { |
85 | m_scene.EventManager.OnRegisterCaps += RegisterCaps; | 98 | m_scene.EventManager.OnRegisterCaps += RegisterCaps; |
99 | m_scene.EventManager.OnNewPresence += RegisterNewPresence; | ||
100 | m_scene.EventManager.OnRemovePresence += DeRegisterPresence; | ||
101 | |||
102 | } | ||
103 | |||
104 | private void DeRegisterPresence(UUID agentId) | ||
105 | { | ||
106 | ScenePresence presence = null; | ||
107 | if (m_scene.TryGetScenePresence(agentId, out presence)) | ||
108 | { | ||
109 | presence.ControllingClient.OnSetAppearance -= CaptureAppearanceSettings; | ||
110 | } | ||
111 | |||
112 | } | ||
113 | |||
114 | private void RegisterNewPresence(ScenePresence presence) | ||
115 | { | ||
116 | presence.ControllingClient.OnSetAppearance += CaptureAppearanceSettings; | ||
117 | |||
118 | } | ||
119 | |||
120 | private void CaptureAppearanceSettings(IClientAPI remoteClient, Primitive.TextureEntry textureEntry, byte[] visualParams, Vector3 avSize, WearableCacheItem[] cacheItems) | ||
121 | { | ||
122 | int maxCacheitemsLoop = cacheItems.Length; | ||
123 | if (maxCacheitemsLoop > AvatarWearable.MAX_WEARABLES) | ||
124 | { | ||
125 | maxCacheitemsLoop = AvatarWearable.MAX_WEARABLES; | ||
126 | m_log.WarnFormat("[CACHEDBAKES]: Too Many Cache items Provided {0}, the max is {1}. Truncating!", cacheItems.Length, AvatarWearable.MAX_WEARABLES); | ||
127 | } | ||
128 | |||
129 | m_BakedTextureModule = m_scene.RequestModuleInterface<IBakedTextureModule>(); | ||
130 | if (cacheItems.Length > 0) | ||
131 | { | ||
132 | m_log.Debug("[Cacheitems]: " + cacheItems.Length); | ||
133 | for (int iter = 0; iter < maxCacheitemsLoop; iter++) | ||
134 | { | ||
135 | m_log.Debug("[Cacheitems] {" + iter + "/" + cacheItems[iter].TextureIndex + "}: c-" + cacheItems[iter].CacheId + ", t-" + | ||
136 | cacheItems[iter].TextureID); | ||
137 | } | ||
138 | |||
139 | ScenePresence p = null; | ||
140 | if (m_scene.TryGetScenePresence(remoteClient.AgentId, out p)) | ||
141 | { | ||
142 | |||
143 | WearableCacheItem[] existingitems = p.Appearance.WearableCacheItems; | ||
144 | if (existingitems == null) | ||
145 | { | ||
146 | if (m_BakedTextureModule != null) | ||
147 | { | ||
148 | WearableCacheItem[] savedcache = null; | ||
149 | try | ||
150 | { | ||
151 | if (p.Appearance.WearableCacheItemsDirty) | ||
152 | { | ||
153 | savedcache = m_BakedTextureModule.Get(p.UUID); | ||
154 | p.Appearance.WearableCacheItems = savedcache; | ||
155 | p.Appearance.WearableCacheItemsDirty = false; | ||
156 | } | ||
157 | |||
158 | } | ||
159 | /* | ||
160 | * The following Catch types DO NOT WORK with m_BakedTextureModule.Get | ||
161 | * it jumps to the General Packet Exception Handler if you don't catch Exception! | ||
162 | * | ||
163 | catch (System.Net.Sockets.SocketException) | ||
164 | { | ||
165 | cacheItems = null; | ||
166 | } | ||
167 | catch (WebException) | ||
168 | { | ||
169 | cacheItems = null; | ||
170 | } | ||
171 | catch (InvalidOperationException) | ||
172 | { | ||
173 | cacheItems = null; | ||
174 | } */ | ||
175 | catch (Exception) | ||
176 | { | ||
177 | // The service logs a sufficient error message. | ||
178 | } | ||
179 | |||
180 | |||
181 | if (savedcache != null) | ||
182 | existingitems = savedcache; | ||
183 | } | ||
184 | } | ||
185 | // Existing items null means it's a fully new appearance | ||
186 | if (existingitems == null) | ||
187 | { | ||
188 | |||
189 | for (int i = 0; i < maxCacheitemsLoop; i++) | ||
190 | { | ||
191 | if (textureEntry.FaceTextures.Length > cacheItems[i].TextureIndex) | ||
192 | { | ||
193 | cacheItems[i].TextureID = | ||
194 | textureEntry.FaceTextures[cacheItems[i].TextureIndex].TextureID; | ||
195 | if (m_scene.AssetService != null) | ||
196 | cacheItems[i].TextureAsset = | ||
197 | m_scene.AssetService.GetCached(cacheItems[i].TextureID.ToString()); | ||
198 | } | ||
199 | else | ||
200 | { | ||
201 | 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); | ||
202 | } | ||
203 | |||
204 | |||
205 | } | ||
206 | } | ||
207 | else | ||
208 | |||
209 | |||
210 | { | ||
211 | // for each uploaded baked texture | ||
212 | for (int i = 0; i < maxCacheitemsLoop; i++) | ||
213 | { | ||
214 | if (textureEntry.FaceTextures.Length > cacheItems[i].TextureIndex) | ||
215 | { | ||
216 | cacheItems[i].TextureID = | ||
217 | textureEntry.FaceTextures[cacheItems[i].TextureIndex].TextureID; | ||
218 | } | ||
219 | else | ||
220 | { | ||
221 | 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); | ||
222 | } | ||
223 | } | ||
224 | |||
225 | for (int i = 0; i < maxCacheitemsLoop; i++) | ||
226 | { | ||
227 | if (cacheItems[i].TextureAsset == null) | ||
228 | { | ||
229 | cacheItems[i].TextureAsset = | ||
230 | m_scene.AssetService.GetCached(cacheItems[i].TextureID.ToString()); | ||
231 | } | ||
232 | } | ||
233 | } | ||
234 | |||
235 | |||
236 | |||
237 | p.Appearance.WearableCacheItems = cacheItems; | ||
238 | |||
239 | |||
240 | |||
241 | if (m_BakedTextureModule != null) | ||
242 | { | ||
243 | m_BakedTextureModule.Store(remoteClient.AgentId, cacheItems); | ||
244 | p.Appearance.WearableCacheItemsDirty = true; | ||
245 | |||
246 | } | ||
247 | } | ||
248 | } | ||
86 | } | 249 | } |
87 | 250 | ||
88 | public void PostInitialise() | 251 | public void PostInitialise() |
89 | { | 252 | { |
90 | } | 253 | } |
91 | 254 | ||
255 | |||
256 | |||
92 | public void Close() { } | 257 | public void Close() { } |
93 | 258 | ||
94 | public string Name { get { return "UploadBakedTextureModule"; } } | 259 | public string Name { get { return "UploadBakedTextureModule"; } } |
@@ -100,15 +265,23 @@ namespace OpenSim.Region.ClientStack.Linden | |||
100 | 265 | ||
101 | public void RegisterCaps(UUID agentID, Caps caps) | 266 | public void RegisterCaps(UUID agentID, Caps caps) |
102 | { | 267 | { |
268 | UploadBakedTextureHandler avatarhandler = new UploadBakedTextureHandler( | ||
269 | caps, m_scene.AssetService, m_persistBakedTextures); | ||
270 | |||
271 | |||
272 | |||
103 | caps.RegisterHandler( | 273 | caps.RegisterHandler( |
104 | "UploadBakedTexture", | 274 | "UploadBakedTexture", |
105 | new RestStreamHandler( | 275 | new RestStreamHandler( |
106 | "POST", | 276 | "POST", |
107 | "/CAPS/" + caps.CapsObjectPath + m_uploadBakedTexturePath, | 277 | "/CAPS/" + caps.CapsObjectPath + m_uploadBakedTexturePath, |
108 | new UploadBakedTextureHandler( | 278 | avatarhandler.UploadBakedTexture, |
109 | caps, m_scene.AssetService, m_persistBakedTextures).UploadBakedTexture, | ||
110 | "UploadBakedTexture", | 279 | "UploadBakedTexture", |
111 | agentID.ToString())); | 280 | agentID.ToString())); |
281 | |||
282 | |||
283 | |||
284 | |||
112 | } | 285 | } |
113 | } | 286 | } |
114 | } \ No newline at end of file | 287 | } \ No newline at end of file |
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 7364f45..465d76d 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | |||
@@ -3629,7 +3629,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
3629 | 3629 | ||
3630 | avp.Sender.IsTrial = false; | 3630 | avp.Sender.IsTrial = false; |
3631 | avp.Sender.ID = agentID; | 3631 | avp.Sender.ID = agentID; |
3632 | //m_log.DebugFormat("[CLIENT]: Sending appearance for {0} to {1}", agentID.ToString(), AgentId.ToString()); | 3632 | m_log.DebugFormat("[CLIENT]: Sending appearance for {0} to {1}", agentID.ToString(), AgentId.ToString()); |
3633 | OutPacket(avp, ThrottleOutPacketType.State); | 3633 | OutPacket(avp, ThrottleOutPacketType.State); |
3634 | } | 3634 | } |
3635 | 3635 | ||
@@ -11725,32 +11725,134 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
11725 | // var item = fac.GetBakedTextureFaces(AgentId); | 11725 | // var item = fac.GetBakedTextureFaces(AgentId); |
11726 | //WearableCacheItem[] items = fac.GetCachedItems(AgentId); | 11726 | //WearableCacheItem[] items = fac.GetCachedItems(AgentId); |
11727 | 11727 | ||
11728 | IImprovedAssetCache cache = m_scene.RequestModuleInterface<IImprovedAssetCache>(); | 11728 | IAssetService cache = m_scene.AssetService; |
11729 | if (cache == null) | 11729 | IBakedTextureModule bakedTextureModule = m_scene.RequestModuleInterface<IBakedTextureModule>(); |
11730 | //bakedTextureModule = null; | ||
11731 | int maxWearablesLoop = cachedtex.WearableData.Length; | ||
11732 | if (maxWearablesLoop > AvatarWearable.MAX_WEARABLES) | ||
11733 | maxWearablesLoop = AvatarWearable.MAX_WEARABLES; | ||
11734 | |||
11735 | if (bakedTextureModule != null && cache != null) | ||
11730 | { | 11736 | { |
11731 | for (int i = 0; i < cachedtex.WearableData.Length; i++) | 11737 | // 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 |
11738 | |||
11739 | WearableCacheItem[] cacheItems = null; | ||
11740 | ScenePresence p = m_scene.GetScenePresence(AgentId); | ||
11741 | if (p.Appearance != null) | ||
11742 | if (p.Appearance.WearableCacheItems == null || p.Appearance.WearableCacheItemsDirty) | ||
11743 | { | ||
11744 | try | ||
11745 | { | ||
11746 | cacheItems = bakedTextureModule.Get(AgentId); | ||
11747 | p.Appearance.WearableCacheItems = cacheItems; | ||
11748 | p.Appearance.WearableCacheItemsDirty = false; | ||
11749 | } | ||
11750 | |||
11751 | /* | ||
11752 | * The following Catch types DO NOT WORK, it jumps to the General Packet Exception Handler if you don't catch Exception! | ||
11753 | * | ||
11754 | catch (System.Net.Sockets.SocketException) | ||
11755 | { | ||
11756 | cacheItems = null; | ||
11757 | } | ||
11758 | catch (WebException) | ||
11759 | { | ||
11760 | cacheItems = null; | ||
11761 | } | ||
11762 | catch (InvalidOperationException) | ||
11763 | { | ||
11764 | cacheItems = null; | ||
11765 | } */ | ||
11766 | catch (Exception) | ||
11767 | { | ||
11768 | cacheItems = null; | ||
11769 | } | ||
11770 | |||
11771 | } | ||
11772 | else if (p.Appearance.WearableCacheItems != null) | ||
11773 | { | ||
11774 | cacheItems = p.Appearance.WearableCacheItems; | ||
11775 | } | ||
11776 | |||
11777 | if (cache != null && cacheItems != null) | ||
11732 | { | 11778 | { |
11733 | cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock(); | 11779 | foreach (WearableCacheItem item in cacheItems) |
11734 | cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex; | 11780 | { |
11735 | cachedresp.WearableData[i].TextureID = UUID.Zero; //UUID.Parse("8334fb6e-c2f5-46ee-807d-a435f61a8d46"); | 11781 | |
11736 | cachedresp.WearableData[i].HostName = new byte[0]; | 11782 | if (cache.GetCached(item.TextureID.ToString()) == null) |
11783 | { | ||
11784 | item.TextureAsset.Temporary = true; | ||
11785 | cache.Store(item.TextureAsset); | ||
11786 | } | ||
11787 | |||
11788 | |||
11789 | } | ||
11790 | } | ||
11791 | |||
11792 | if (cacheItems != null) | ||
11793 | { | ||
11794 | |||
11795 | for (int i = 0; i < maxWearablesLoop; i++) | ||
11796 | { | ||
11797 | WearableCacheItem item = | ||
11798 | WearableCacheItem.SearchTextureIndex(cachedtex.WearableData[i].TextureIndex,cacheItems); | ||
11799 | |||
11800 | cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock(); | ||
11801 | cachedresp.WearableData[i].TextureIndex= cachedtex.WearableData[i].TextureIndex; | ||
11802 | cachedresp.WearableData[i].HostName = new byte[0]; | ||
11803 | if (item != null && cachedtex.WearableData[i].ID == item.CacheId) | ||
11804 | { | ||
11805 | |||
11806 | cachedresp.WearableData[i].TextureID = item.TextureID; | ||
11807 | } | ||
11808 | else | ||
11809 | { | ||
11810 | cachedresp.WearableData[i].TextureID = UUID.Zero; | ||
11811 | } | ||
11812 | } | ||
11813 | } | ||
11814 | else | ||
11815 | { | ||
11816 | for (int i = 0; i < maxWearablesLoop; i++) | ||
11817 | { | ||
11818 | cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock(); | ||
11819 | cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex; | ||
11820 | cachedresp.WearableData[i].TextureID = UUID.Zero; | ||
11821 | //UUID.Parse("8334fb6e-c2f5-46ee-807d-a435f61a8d46"); | ||
11822 | cachedresp.WearableData[i].HostName = new byte[0]; | ||
11823 | } | ||
11737 | } | 11824 | } |
11738 | } | 11825 | } |
11739 | else | 11826 | else |
11740 | { | 11827 | { |
11741 | for (int i = 0; i < cachedtex.WearableData.Length; i++) | 11828 | if (cache == null) |
11742 | { | 11829 | { |
11743 | cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock(); | 11830 | for (int i = 0; i < maxWearablesLoop; i++) |
11744 | cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex; | 11831 | { |
11832 | cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock(); | ||
11833 | cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex; | ||
11834 | cachedresp.WearableData[i].TextureID = UUID.Zero; | ||
11835 | //UUID.Parse("8334fb6e-c2f5-46ee-807d-a435f61a8d46"); | ||
11836 | cachedresp.WearableData[i].HostName = new byte[0]; | ||
11837 | } | ||
11838 | } | ||
11839 | else | ||
11840 | { | ||
11841 | for (int i = 0; i < maxWearablesLoop; i++) | ||
11842 | { | ||
11843 | cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock(); | ||
11844 | cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex; | ||
11745 | 11845 | ||
11746 | 11846 | ||
11747 | 11847 | ||
11748 | if (cache.Check(cachedtex.WearableData[i].ID.ToString())) | 11848 | if (cache.GetCached(cachedresp.WearableData[i].TextureID.ToString()) == null) |
11749 | cachedresp.WearableData[i].TextureID = UUID.Zero; | 11849 | cachedresp.WearableData[i].TextureID = UUID.Zero; |
11750 | //UUID.Parse("8334fb6e-c2f5-46ee-807d-a435f61a8d46"); | 11850 | //UUID.Parse("8334fb6e-c2f5-46ee-807d-a435f61a8d46"); |
11751 | else | 11851 | else |
11752 | cachedresp.WearableData[i].TextureID = UUID.Zero; // UUID.Parse("8334fb6e-c2f5-46ee-807d-a435f61a8d46"); | 11852 | cachedresp.WearableData[i].TextureID = UUID.Zero; |
11753 | cachedresp.WearableData[i].HostName = new byte[0]; | 11853 | // UUID.Parse("8334fb6e-c2f5-46ee-807d-a435f61a8d46"); |
11854 | cachedresp.WearableData[i].HostName = new byte[0]; | ||
11855 | } | ||
11754 | } | 11856 | } |
11755 | } | 11857 | } |
11756 | cachedresp.Header.Zerocoded = true; | 11858 | cachedresp.Header.Zerocoded = true; |