Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        private void AgentWearablesUpdateCallbackHandler(Packet packet, Simulator simulator)
        {
            AgentWearablesUpdatePacket wearablesPacket = (AgentWearablesUpdatePacket)packet;

            AgentWearablesData = wearablesPacket.WearableData;
            AgentWearablesSignal.Set();
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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();
        }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 10
0
        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);
        }