public void RequestWearables(NetworkInfo userInfo) { AgentProfile Agent = this.AgentList[userInfo.User.AgentID]; AgentWearablesUpdatePacket aw = new AgentWearablesUpdatePacket(); aw.AgentData.AgentID = userInfo.User.AgentID; aw.AgentData.SerialNum = 0; aw.AgentData.SessionID = userInfo.User.SessionID; aw.WearableData = new AgentWearablesUpdatePacket.WearableDataBlock[13]; AgentWearablesUpdatePacket.WearableDataBlock awb = null; awb = new AgentWearablesUpdatePacket.WearableDataBlock(); awb.WearableType = (byte)0; awb.AssetID = Agent.Avatar.Wearables[0].AssetID; awb.ItemID = Agent.Avatar.Wearables[0].ItemID; aw.WearableData[0] = awb; awb = new AgentWearablesUpdatePacket.WearableDataBlock(); awb.WearableType = (byte)1; awb.AssetID = Agent.Avatar.Wearables[1].AssetID; awb.ItemID = Agent.Avatar.Wearables[1].ItemID; aw.WearableData[1] = awb; for (int i = 2; i < 13; i++) { awb = new AgentWearablesUpdatePacket.WearableDataBlock(); awb.WearableType = (byte)i; awb.AssetID = new LLUUID("00000000-0000-0000-0000-000000000000"); awb.ItemID = new LLUUID("00000000-0000-0000-0000-000000000000"); aw.WearableData[i] = awb; } _server.SendPacket(aw, true, userInfo); }
void SendWearables(Agent agent) { AgentWearablesUpdatePacket update = new AgentWearablesUpdatePacket(); update.AgentData.AgentID = agent.AgentID; Dictionary <WearableType, InventoryItem> wearables = GetCurrentWearables(agent); update.WearableData = new AgentWearablesUpdatePacket.WearableDataBlock[wearables.Count]; int i = 0; foreach (KeyValuePair <WearableType, InventoryItem> kvp in wearables) { update.WearableData[i] = new AgentWearablesUpdatePacket.WearableDataBlock(); update.WearableData[i].AssetID = kvp.Value.AssetID; update.WearableData[i].ItemID = kvp.Value.ID; update.WearableData[i].WearableType = (byte)kvp.Key; ++i; } // Technically this should be per-agent, but if the only requirement is that it // increments this is easier update.AgentData.SerialNum = (uint)Interlocked.Increment(ref currentWearablesSerialNum); Logger.DebugLog(String.Format("Sending info about {0} wearables", wearables.Count)); server.UDP.SendPacket(agent.AgentID, update, PacketCategory.Asset); }
private void AgentWearablesUpdateCallbackHandler(Packet packet, Simulator simulator) { AgentWearablesUpdatePacket wearablesPacket = (AgentWearablesUpdatePacket)packet; AgentWearablesData = wearablesPacket.WearableData; AgentWearablesSignal.Set(); }
void AgentWearablesRequestHandler(Packet packet, Agent agent) { AgentWearablesUpdatePacket update = new AgentWearablesUpdatePacket(); update.AgentData.AgentID = agent.AgentID; update.AgentData.SessionID = agent.SessionID; // Technically this should be per-agent, but if the only requirement is that it // increments this is easier update.AgentData.SerialNum = (uint)Interlocked.Increment(ref currentWearablesSerialNum); update.WearableData = new AgentWearablesUpdatePacket.WearableDataBlock[4]; for (int i = 0; i < 4; i++) { update.WearableData[i] = new AgentWearablesUpdatePacket.WearableDataBlock(); update.WearableData[i].AssetID = UUID.Zero; update.WearableData[i].ItemID = UUID.Zero; update.WearableData[i].WearableType = 42; // HACK } agent.SendPacket(update); }
public void SendInitialAppearance() { AgentWearablesUpdatePacket aw = new AgentWearablesUpdatePacket(); aw.AgentData.AgentID = this.ControllingClient.AgentID; aw.AgentData.SerialNum = 0; aw.AgentData.SessionID = ControllingClient.SessionID; aw.WearableData = new AgentWearablesUpdatePacket.WearableDataBlock[13]; AgentWearablesUpdatePacket.WearableDataBlock awb; for (int i = 0; i < 13; i++) { awb = new AgentWearablesUpdatePacket.WearableDataBlock(); awb.WearableType = (byte)i; awb.AssetID = this.Wearables[i].AssetID; awb.ItemID = this.Wearables[i].ItemID; aw.WearableData[i] = awb; } ControllingClient.OutPacket(aw); }
public void RequestWearables(NetworkInfo userInfo) { AgentProfile Agent = this.AgentList[userInfo.User.AgentID]; AgentWearablesUpdatePacket aw = new AgentWearablesUpdatePacket(); aw.AgentData.AgentID = userInfo.User.AgentID; aw.AgentData.SerialNum = 0; aw.AgentData.SessionID = userInfo.User.SessionID; aw.WearableData = new AgentWearablesUpdatePacket.WearableDataBlock[13]; AgentWearablesUpdatePacket.WearableDataBlock awb = null; awb = new AgentWearablesUpdatePacket.WearableDataBlock(); awb.WearableType = (byte)0; awb.AssetID = Agent.Avatar.Wearables[0].AssetID; awb.ItemID = Agent.Avatar.Wearables[0].ItemID; aw.WearableData[0] = awb; awb = new AgentWearablesUpdatePacket.WearableDataBlock(); awb.WearableType =(byte)1; awb.AssetID = Agent.Avatar.Wearables[1].AssetID; awb.ItemID = Agent.Avatar.Wearables[1].ItemID; aw.WearableData[1] = awb; for(int i=2; i<13; i++) { awb = new AgentWearablesUpdatePacket.WearableDataBlock(); awb.WearableType = (byte)i; awb.AssetID = new LLUUID("00000000-0000-0000-0000-000000000000"); awb.ItemID = new LLUUID("00000000-0000-0000-0000-000000000000"); aw.WearableData[i] = awb; } _server.SendPacket(aw, true, userInfo); }
private void AgentWearablesRequestHandler(Packet packet, LLAgent agent) { AgentWearablesUpdatePacket update = new AgentWearablesUpdatePacket(); update.AgentData.AgentID = agent.ID; User user; if (m_userClient != null && m_userClient.TryGetUser(agent.ID, out user)) { OSDMap appearanceMap = user.GetField("LLAppearance") as OSDMap; if (appearanceMap != null) { Dictionary<WearableType, UUID> items = new Dictionary<WearableType, UUID>(); Dictionary<WearableType, UUID> assets = new Dictionary<WearableType, UUID>(); foreach (KeyValuePair<string, OSD> kvp in appearanceMap) { UUID id = kvp.Value.AsUUID(); if (id != UUID.Zero) { #region LLAppearance Parsing switch (kvp.Key) { case "ShapeItem": items[WearableType.Shape] = id; break; case "SkinItem": items[WearableType.Skin] = id; break; case "HairItem": items[WearableType.Hair] = id; break; case "EyesItem": items[WearableType.Eyes] = id; break; case "ShirtItem": items[WearableType.Shirt] = id; break; case "PantsItem": items[WearableType.Pants] = id; break; case "ShoesItem": items[WearableType.Shoes] = id; break; case "SocksItem": items[WearableType.Socks] = id; break; case "JacketItem": items[WearableType.Jacket] = id; break; case "GlovesItem": items[WearableType.Gloves] = id; break; case "UndershirtItem": items[WearableType.Undershirt] = id; break; case "UnderpantsItem": items[WearableType.Underpants] = id; break; case "SkirtItem": items[WearableType.Skirt] = id; break; case "AlphaItem": items[WearableType.Alpha] = id; break; case "TattooItem": items[WearableType.Tattoo] = id; break; case "ShapeAsset": assets[WearableType.Shape] = id; break; case "SkinAsset": assets[WearableType.Skin] = id; break; case "HairAsset": assets[WearableType.Hair] = id; break; case "EyesAsset": assets[WearableType.Eyes] = id; break; case "ShirtAsset": assets[WearableType.Shirt] = id; break; case "PantsAsset": assets[WearableType.Pants] = id; break; case "ShoesAsset": assets[WearableType.Shoes] = id; break; case "SocksAsset": assets[WearableType.Socks] = id; break; case "JacketAsset": assets[WearableType.Jacket] = id; break; case "GlovesAsset": assets[WearableType.Gloves] = id; break; case "UndershirtAsset": assets[WearableType.Undershirt] = id; break; case "UnderpantsAsset": assets[WearableType.Underpants] = id; break; case "SkirtAsset": assets[WearableType.Skirt] = id; break; case "AlphaAsset": assets[WearableType.Alpha] = id; break; case "TattooAsset": assets[WearableType.Tattoo] = id; break; } #endregion LLAppearance Parsing } } int i = 0; foreach (KeyValuePair<WearableType, UUID> kvp in items) { update.WearableData[i] = new AgentWearablesUpdatePacket.WearableDataBlock(); update.WearableData[i].WearableType = (byte)kvp.Key; update.WearableData[i].ItemID = kvp.Value; assets.TryGetValue(kvp.Key, out update.WearableData[i].AssetID); ++i; } } else { m_log.Warn("User record does not contain an LLAppearance entry, appearance will not be set"); } } if (update.WearableData == null) update.WearableData = new AgentWearablesUpdatePacket.WearableDataBlock[0]; m_log.DebugFormat("Sending info about {0} wearables to {1}", update.WearableData.Length, agent.Name); update.AgentData.SerialNum = (uint)System.Threading.Interlocked.Increment(ref agent.CurrentWearablesSerialNum); m_udp.SendPacket(agent, update, ThrottleCategory.Asset, false); }
private void AgentWearablesUpdateCallbackHandler(Packet packet, Simulator simulator) { AgentWearablesUpdatePacket wearablesPacket = (AgentWearablesUpdatePacket)packet; AgentWearablesData = wearablesPacket.WearableData; AgentWearablesSignal.Set(); // Grab access mutex... WearableCacheQueueMutex.WaitOne(); // Queue download of wearables foreach (AgentWearablesUpdatePacket.WearableDataBlock wdb in AgentWearablesData) { // Don't try to download if AssetID is zero if (wdb.AssetID == LLUUID.Zero) { continue; } // Don't try to download, if it's already cached. if (WearableCache.ContainsKey(wdb.AssetID)) { AssetWearable aw = WearableCache[wdb.AssetID]; if (aw._AssetData != null) { continue; } } // Don't try to download, if it's already in the download queue lock (WearableAssetQueue) { if (WearableAssetQueue.Contains(wdb.AssetID)) { continue; } } AssetWearable wearableAsset; switch (wdb.WearableType) { case 0: case 1: case 2: case 3: wearableAsset = new AssetWearable_Body(wdb.AssetID, null); break; default: wearableAsset = new AssetWearable_Clothing(wdb.AssetID, null); break; } WearableCache[wdb.AssetID] = wearableAsset; lock (WearableAssetQueue) { if (!WearableAssetQueue.Contains(wdb.AssetID)) { WearableAssetQueue.Add(wdb.AssetID); LogWearableAssetQueueActivity("Added wearable asset to download queue: " + wearableAsset.GetType().Name + " : " + wdb.AssetID); } } } RequestNextQueuedWearableAsset(); WearableCacheQueueMutex.ReleaseMutex(); }
public void SendInitialAppearance() { AgentWearablesUpdatePacket aw = new AgentWearablesUpdatePacket(); aw.AgentData.AgentID = this.ControllingClient.AgentID; aw.AgentData.SerialNum = 0; aw.AgentData.SessionID = ControllingClient.SessionID; aw.WearableData = new AgentWearablesUpdatePacket.WearableDataBlock[13]; AgentWearablesUpdatePacket.WearableDataBlock awb; for (int i = 0; i < 13; i++) { awb = new AgentWearablesUpdatePacket.WearableDataBlock(); awb.WearableType = (byte)i; awb.AssetID = this.Wearables[i].AssetID; awb.ItemID = this.Wearables[i].ItemID; aw.WearableData[i] = awb; } ControllingClient.OutPacket(aw); }
private void AgentWearablesRequestHandler(Packet packet, LLAgent agent) { AgentWearablesUpdatePacket update = new AgentWearablesUpdatePacket(); update.AgentData.AgentID = agent.ID; User user; if (m_userClient != null && m_userClient.TryGetUser(agent.ID, out user)) { OSDMap appearanceMap = user.GetField("LLAppearance") as OSDMap; if (appearanceMap != null) { Dictionary <WearableType, UUID> items = new Dictionary <WearableType, UUID>(); Dictionary <WearableType, UUID> assets = new Dictionary <WearableType, UUID>(); foreach (KeyValuePair <string, OSD> kvp in appearanceMap) { UUID id = kvp.Value.AsUUID(); if (id != UUID.Zero) { #region LLAppearance Parsing switch (kvp.Key) { case "ShapeItem": items[WearableType.Shape] = id; break; case "SkinItem": items[WearableType.Skin] = id; break; case "HairItem": items[WearableType.Hair] = id; break; case "EyesItem": items[WearableType.Eyes] = id; break; case "ShirtItem": items[WearableType.Shirt] = id; break; case "PantsItem": items[WearableType.Pants] = id; break; case "ShoesItem": items[WearableType.Shoes] = id; break; case "SocksItem": items[WearableType.Socks] = id; break; case "JacketItem": items[WearableType.Jacket] = id; break; case "GlovesItem": items[WearableType.Gloves] = id; break; case "UndershirtItem": items[WearableType.Undershirt] = id; break; case "UnderpantsItem": items[WearableType.Underpants] = id; break; case "SkirtItem": items[WearableType.Skirt] = id; break; case "AlphaItem": items[WearableType.Alpha] = id; break; case "TattooItem": items[WearableType.Tattoo] = id; break; case "ShapeAsset": assets[WearableType.Shape] = id; break; case "SkinAsset": assets[WearableType.Skin] = id; break; case "HairAsset": assets[WearableType.Hair] = id; break; case "EyesAsset": assets[WearableType.Eyes] = id; break; case "ShirtAsset": assets[WearableType.Shirt] = id; break; case "PantsAsset": assets[WearableType.Pants] = id; break; case "ShoesAsset": assets[WearableType.Shoes] = id; break; case "SocksAsset": assets[WearableType.Socks] = id; break; case "JacketAsset": assets[WearableType.Jacket] = id; break; case "GlovesAsset": assets[WearableType.Gloves] = id; break; case "UndershirtAsset": assets[WearableType.Undershirt] = id; break; case "UnderpantsAsset": assets[WearableType.Underpants] = id; break; case "SkirtAsset": assets[WearableType.Skirt] = id; break; case "AlphaAsset": assets[WearableType.Alpha] = id; break; case "TattooAsset": assets[WearableType.Tattoo] = id; break; } #endregion LLAppearance Parsing } } update.WearableData = new AgentWearablesUpdatePacket.WearableDataBlock[items.Count]; int i = 0; foreach (KeyValuePair <WearableType, UUID> kvp in items) { update.WearableData[i] = new AgentWearablesUpdatePacket.WearableDataBlock(); update.WearableData[i].WearableType = (byte)kvp.Key; update.WearableData[i].ItemID = kvp.Value; assets.TryGetValue(kvp.Key, out update.WearableData[i].AssetID); ++i; } } else { // FIXME: Don't allow clouds! In this case we should assign a default appearance m_log.Warn("User record does not contain an LLAppearance entry, appearance will not be set"); } } if (update.WearableData == null) { update.WearableData = new AgentWearablesUpdatePacket.WearableDataBlock[0]; } m_log.DebugFormat("Sending info about {0} wearables to {1}", update.WearableData.Length, agent.Name); update.AgentData.SerialNum = (uint)System.Threading.Interlocked.Increment(ref agent.CurrentWearablesSerialNum); m_udp.SendPacket(agent, update, ThrottleCategory.Asset, false); }