/// <summary>
        /// Process incoming avatar appearance
        /// </summary>
        /// <param name="packet"></param>
        /// <param name="sim"></param>
        private void AvatarAppearanceHandler(Packet packet, Simulator sim)
        {
            if (OnAvatarAppearance != null)
            {
                AvatarAppearancePacket appearance = (AvatarAppearancePacket)packet;
                sim.ObjectsAvatars.ForEach(delegate(Avatar av)
                {
                    if (av.ID == appearance.Sender.ID)
                    {
                        List <byte> visualParams = new List <byte>();
                        foreach (AvatarAppearancePacket.VisualParamBlock block in appearance.VisualParam)
                        {
                            visualParams.Add(block.ParamValue);
                        }

                        LLObject.TextureEntry textureEntry = new Primitive.TextureEntry(appearance.ObjectData.TextureEntry, 0,
                                                                                        appearance.ObjectData.TextureEntry.Length);

                        LLObject.TextureEntryFace defaultTexture = textureEntry.DefaultTexture;
                        LLObject.TextureEntryFace[] faceTextures = textureEntry.FaceTextures;

                        try { OnAvatarAppearance(appearance.Sender.ID, appearance.Sender.IsTrial, defaultTexture, faceTextures, visualParams); }
                        catch (Exception e) { Logger.Log(e.Message, Helpers.LogLevel.Error, Client, e); }
                    }
                });
            }
        }
Exemple #2
0
        public void AvatarAppearance(object sender, Agent agent, Primitive.TextureEntry textures, byte[] visualParams)
        {
            if (OnAvatarAppearance != null)
            {
                OnAvatarAppearance(sender, agent, textures, visualParams);
            }

            // Update the avatar
            agent.Avatar.Textures = textures;
            if (visualParams != null)
            {
                agent.VisualParams = visualParams;
            }

            // Broadcast the object update
            ObjectUpdatePacket update = SimulationObject.BuildFullUpdate(agent.Avatar,
                                                                         server.RegionHandle, agent.State, agent.Flags);

            server.UDP.BroadcastPacket(update, PacketCategory.State);

            // Send the appearance packet to all other clients
            AvatarAppearancePacket appearance = BuildAppearancePacket(agent);

            lock (server.Agents)
            {
                foreach (Agent recipient in server.Agents.Values)
                {
                    if (recipient != agent)
                    {
                        server.UDP.SendPacket(recipient.AgentID, appearance, PacketCategory.State);
                    }
                }
            }
        }
Exemple #3
0
        // HACK: The reduction provider will deprecate this at some point
        void SynchronizeStateTo(Agent agent)
        {
            // Send the parcel overlay
            server.Parcels.SendParcelOverlay(agent);

            // Send object updates for objects and avatars
            sceneObjects.ForEach(delegate(SimulationObject obj)
            {
                ObjectUpdatePacket update = SimulationObject.BuildFullUpdate(obj.Prim,
                                                                             obj.Prim.RegionHandle, 0, obj.Prim.Flags);
                server.UDP.SendPacket(agent.AgentID, update, PacketCategory.State);
            });

            // Send appearances for all avatars
            lock (server.Agents)
            {
                foreach (Agent otherAgent in server.Agents.Values)
                {
                    if (otherAgent != agent)
                    {
                        // Send appearances for this avatar
                        AvatarAppearancePacket appearance = BuildAppearancePacket(otherAgent);
                        server.UDP.SendPacket(agent.AgentID, appearance, PacketCategory.State);
                    }
                }
            }

            // Send terrain data
            SendLayerData(agent);
        }
Exemple #4
0
        private void AvatarAppearanceHandler(object sender, PacketReceivedEventArgs e)
        {
            Packet packet = e.Packet;

            AvatarAppearancePacket appearance = (AvatarAppearancePacket)packet;

            lock (Appearances) Appearances[appearance.Sender.ID] = appearance;
        }
Exemple #5
0
        private void AvatarAppearanceHandler(object sender, PacketReceivedEventArgs e)
        {
            Simulator sim    = e.Simulator;
            var       packet = e.Packet;
            //if (sim != client.Network.CurrentSim) { Debug("AvatarAppearance: from a differnt sim than current " + sim); }
            AvatarAppearancePacket appearance = (AvatarAppearancePacket)packet;
            Avatar found = sim.ObjectsAvatars.Find(delegate(Avatar av)
            {
                if (av.ID == appearance.Sender.ID)
                {
                    List <byte> visualParams = new List <byte>();
                    foreach (
                        AvatarAppearancePacket.VisualParamBlock block in
                        appearance.VisualParam)
                    {
                        visualParams.Add(block.ParamValue);
                    }

                    Primitive.TextureEntry textureEntry =
                        new Primitive.TextureEntry(
                            appearance.ObjectData.TextureEntry, 0,
                            appearance.ObjectData.TextureEntry.Length);

                    Primitive.TextureEntryFace defaultTexture =
                        textureEntry.DefaultTexture;
                    Primitive.TextureEntryFace[] faceTextures =
                        textureEntry.FaceTextures;

                    av.Textures = textureEntry;

                    //if (OnAvatarAppearance != null)
                    //{
                    //    try { OnAvatarAppearance(appearance.Sender.ID, appearance.Sender.IsTrial, defaultTexture, faceTextures, visualParams); }
                    //    catch (Exception e) { Logger.Log(e.Message, Helpers.LogLevel.Error, Client, e); }
                    //}
                    return(true);
                }
                return(false);
            });

            if (found != null)
            {
                return;
            }
            UUID id = appearance.Sender.ID;

            //if (GetSimObjectFromUUID(id) == null)
            CreateSimAvatar(id, this, sim);
        }
Exemple #6
0
        private void AvatarAppearanceHandler(Packet packet, Simulator simulator)
        {
            AvatarAppearancePacket appearance = (AvatarAppearancePacket)packet;

            LLObject.TextureEntry te = new LLObject.TextureEntry(appearance.ObjectData.TextureEntry, 0,
                                                                 appearance.ObjectData.TextureEntry.Length);

            if (IsNullOrZero(te.FaceTextures[(int)AppearanceManager.TextureIndex.EyesBaked]) &&
                IsNullOrZero(te.FaceTextures[(int)AppearanceManager.TextureIndex.HeadBaked]) &&
                IsNullOrZero(te.FaceTextures[(int)AppearanceManager.TextureIndex.LowerBaked]) &&
                IsNullOrZero(te.FaceTextures[(int)AppearanceManager.TextureIndex.SkirtBaked]) &&
                IsNullOrZero(te.FaceTextures[(int)AppearanceManager.TextureIndex.UpperBaked]))
            {
                Console.WriteLine("Avatar " + appearance.Sender.ID.ToString() + " may be a bot");
            }
        }
Exemple #7
0
        bool clone(LLUUID target)
        {
            if (appearances.ContainsKey(target))
            {
                #region AvatarAppearance to AgentSetAppearance

                AvatarAppearancePacket appearance = appearances[target];

                AgentSetAppearancePacket set = new AgentSetAppearancePacket();
                set.AgentData.AgentID   = Self.AgentID;
                set.AgentData.SessionID = Self.SessionID;
                set.AgentData.SerialNum = SerialNum++;
                set.AgentData.Size      = new LLVector3(2f, 2f, 2f); // HACK

                set.WearableData = new AgentSetAppearancePacket.WearableDataBlock[0];
                set.VisualParam  = new AgentSetAppearancePacket.VisualParamBlock[appearance.VisualParam.Length];

                for (int i = 0; i < appearance.VisualParam.Length; i++)
                {
                    set.VisualParam[i]            = new AgentSetAppearancePacket.VisualParamBlock();
                    set.VisualParam[i].ParamValue = appearance.VisualParam[i].ParamValue;
                }

                set.ObjectData.TextureEntry = appearance.ObjectData.TextureEntry;

                #endregion AvatarAppearance to AgentSetAppearance

                // Detach everything we are currently wearing
                Appearance.AddAttachments(new List <InventoryBase>(), true);

                // Send the new appearance packet
                Network.SendPacket(set);

                #if DEBUG
                Console.Out.WriteLine("Cloned {0}", target.ToString());
                #endif

                return(true);
            }
            else
            {
                #if DEBUG
                Console.Out.WriteLine("Don't know the appearance of avatar {0}", target.ToString());
                #endif
                return(false);
            }
        }
        public override string Execute(string[] args, LLUUID fromAgentID)
        {
            if (args.Length != 1)
            {
                return("Usage: importoutfit inputfile.xml");
            }

            try
            {
                XmlReader              reader     = XmlReader.Create(args[0]);
                XmlSerializer          serializer = new XmlSerializer(typeof(Packet));
                AvatarAppearancePacket appearance = (AvatarAppearancePacket)serializer.Deserialize(reader);
                reader.Close();

                AgentSetAppearancePacket set = new AgentSetAppearancePacket();

                set.AgentData.AgentID   = Client.Network.AgentID;
                set.AgentData.SessionID = Client.Network.SessionID;
                set.AgentData.SerialNum = SerialNum++;

                float AV_Height_Range = 2.025506f - 1.50856f;
                float AV_Height       = 1.50856f + (((float)appearance.VisualParam[25].ParamValue / 255.0f) * AV_Height_Range);
                set.AgentData.Size = new LLVector3(0.45f, 0.6f, AV_Height);

                set.ObjectData.TextureEntry = appearance.ObjectData.TextureEntry;
                set.VisualParam             = new AgentSetAppearancePacket.VisualParamBlock[appearance.VisualParam.Length];

                int i = 0;
                foreach (AvatarAppearancePacket.VisualParamBlock block in appearance.VisualParam)
                {
                    set.VisualParam[i]            = new AgentSetAppearancePacket.VisualParamBlock();
                    set.VisualParam[i].ParamValue = block.ParamValue;
                    i++;
                }

                set.WearableData = new AgentSetAppearancePacket.WearableDataBlock[0];

                Client.Network.SendPacket(set);
            }
            catch (Exception)
            {
                return("Failed to import the appearance XML file, maybe it doesn't exist or is in the wrong format?");
            }

            return("Imported " + args[0] + " and sent an AgentSetAppearance packet");
        }
Exemple #9
0
        static AvatarAppearancePacket BuildAppearancePacket(Agent agent)
        {
            AvatarAppearancePacket appearance = new AvatarAppearancePacket();

            appearance.ObjectData.TextureEntry = agent.Avatar.Textures.ToBytes();
            appearance.Sender.ID      = agent.AgentID;
            appearance.Sender.IsTrial = false;

            appearance.VisualParam = new AvatarAppearancePacket.VisualParamBlock[218];
            for (int i = 0; i < 218; i++)
            {
                appearance.VisualParam[i]            = new AvatarAppearancePacket.VisualParamBlock();
                appearance.VisualParam[i].ParamValue = agent.VisualParams[i];
            }

            return(appearance);
        }
Exemple #10
0
        public void SendAppearanceToOtherAgent(SimClient userInfo)
        {
            AvatarAppearancePacket avp = new AvatarAppearancePacket();

            avp.VisualParam             = new AvatarAppearancePacket.VisualParamBlock[218];
            avp.ObjectData.TextureEntry = this.avatarAppearanceTexture.ToBytes();

            //a wearable update packets should only be sent about the viewers/agents own avatar not for other avatars
            //but it seems that the following code only created the packets and never actually sent them anyway

            /*AgentWearablesUpdatePacket aw = new AgentWearablesUpdatePacket();
             * aw.AgentData.AgentID = this.ControllingClient.AgentID;
             * aw.AgentData.SessionID = userInfo.SessionID;
             * aw.AgentData.SerialNum = 0; //removed the use of a random number as a random number could be less than the last number, should have a counter variable for this
             *
             * 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;
             * }*/

            AvatarAppearancePacket.VisualParamBlock avblock = null;
            for (int i = 0; i < 218; i++)
            {
                avblock            = new AvatarAppearancePacket.VisualParamBlock();
                avblock.ParamValue = visualParams[i];
                avp.VisualParam[i] = avblock;
            }

            avp.Sender.IsTrial = false;
            avp.Sender.ID      = ControllingClient.AgentID;
            userInfo.OutPacket(avp);
        }
Exemple #11
0
        private void AvatarAppearanceHandler(Packet packet, Simulator simulator)
        {
            AvatarAppearancePacket appearance = (AvatarAppearancePacket)packet;

            lock (Appearances) Appearances[appearance.Sender.ID] = appearance;
        }
        public void SendAppearanceToOtherAgent(SimClient userInfo)
        {
            AvatarAppearancePacket avp = new AvatarAppearancePacket();
            avp.VisualParam = new AvatarAppearancePacket.VisualParamBlock[218];
            avp.ObjectData.TextureEntry = this.avatarAppearanceTexture.ToBytes();

            //a wearable update packets should only be sent about the viewers/agents own avatar not for other avatars
            //but it seems that the following code only created the packets and never actually sent them anyway
            /*AgentWearablesUpdatePacket aw = new AgentWearablesUpdatePacket();
            aw.AgentData.AgentID = this.ControllingClient.AgentID;
            aw.AgentData.SessionID = userInfo.SessionID;
            aw.AgentData.SerialNum = 0; //removed the use of a random number as a random number could be less than the last number, should have a counter variable for this

            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;
            }*/

            AvatarAppearancePacket.VisualParamBlock avblock = null;
            for (int i = 0; i < 218; i++)
            {
                avblock = new AvatarAppearancePacket.VisualParamBlock();
                avblock.ParamValue = visualParams[i];
                avp.VisualParam[i] = avblock;
            }

            avp.Sender.IsTrial = false;
            avp.Sender.ID = ControllingClient.AgentID;
            userInfo.OutPacket(avp);
        }
        public override string Execute(string[] args, LLUUID fromAgentID)
        {
            string targetName = String.Empty;
            List <DirectoryManager.AgentSearchData> matches;

            for (int ct = 0; ct < args.Length; ct++)
            {
                targetName = targetName + args[ct] + " ";
            }
            targetName = targetName.TrimEnd();

            if (targetName.Length == 0)
            {
                return("Usage: clone [name]");
            }

            if (Client.Directory.PeopleSearch(DirectoryManager.DirFindFlags.People, targetName, 0, 1000 * 10,
                                              out matches) && matches.Count > 0)
            {
                LLUUID target = matches[0].AgentID;
                targetName += String.Format(" ({0})", target);

                if (Client.Appearances.ContainsKey(target))
                {
                    #region AvatarAppearance to AgentSetAppearance

                    AvatarAppearancePacket appearance = Client.Appearances[target];

                    AgentSetAppearancePacket set = new AgentSetAppearancePacket();
                    set.AgentData.AgentID   = Client.Self.AgentID;
                    set.AgentData.SessionID = Client.Self.SessionID;
                    set.AgentData.SerialNum = SerialNum++;
                    set.AgentData.Size      = new LLVector3(2f, 2f, 2f); // HACK

                    set.WearableData = new AgentSetAppearancePacket.WearableDataBlock[0];
                    set.VisualParam  = new AgentSetAppearancePacket.VisualParamBlock[appearance.VisualParam.Length];

                    for (int i = 0; i < appearance.VisualParam.Length; i++)
                    {
                        set.VisualParam[i]            = new AgentSetAppearancePacket.VisualParamBlock();
                        set.VisualParam[i].ParamValue = appearance.VisualParam[i].ParamValue;
                    }

                    set.ObjectData.TextureEntry = appearance.ObjectData.TextureEntry;

                    #endregion AvatarAppearance to AgentSetAppearance

                    // Detach everything we are currently wearing
                    Client.Appearance.AddAttachments(new List <InventoryBase>(), true);

                    // Send the new appearance packet
                    Client.Network.SendPacket(set);

                    return("Cloned " + targetName);
                }
                else
                {
                    return("Don't know the appearance of avatar " + targetName);
                }
            }
            else
            {
                return("Couldn't find avatar " + targetName);
            }
        }
        public override CmdResult ExecuteRequest(CmdRequest args)
        {
            bool detatchAll = args.IsTrue("--detatchall");

            SimAvatar simAv;

            if (args.TryGetValue("target", out simAv))
            {
                UUID   target     = simAv.ID;
                string targetName = simAv.GetName();
                targetName += String.Format(" ({0})", target);
                if (Client.Appearances.ContainsKey(target))
                {
                    #region AvatarAppearance to AgentSetAppearance

                    AvatarAppearancePacket   appearance = TheBotClient.Appearances[target];
                    AgentSetAppearancePacket set        = Client.Appearance.MakeAppearancePacket();
                    set.AgentData.AgentID   = Client.Self.AgentID;
                    set.AgentData.SessionID = Client.Self.SessionID;
                    set.AgentData.SerialNum = SerialNum++;
                    set.AgentData.Size      = new Vector3(2f, 2f, 2f); // HACK

                    set.WearableData = new AgentSetAppearancePacket.WearableDataBlock[0];
                    set.VisualParam  = new AgentSetAppearancePacket.VisualParamBlock[appearance.VisualParam.Length];

                    for (int i = 0; i < appearance.VisualParam.Length; i++)
                    {
                        set.VisualParam[i]            = new AgentSetAppearancePacket.VisualParamBlock();
                        set.VisualParam[i].ParamValue = appearance.VisualParam[i].ParamValue;
                    }

                    set.ObjectData.TextureEntry = appearance.ObjectData.TextureEntry;

                    #endregion AvatarAppearance to AgentSetAppearance

                    // Detach everything we are currently wearing
                    if (detatchAll)
                    {
                        Client.Appearance.AddAttachments(new List <InventoryItem>(), true);
                    }

                    // Send the new appearance packet
                    Client.Network.SendPacket(set);

                    return(Success("Cloned " + targetName));
                }
                else
                {
                    /// allow clone thyself
                    if (Client.Self.AgentID == target)
                    {
                        AgentSetAppearancePacket set = Client.Appearance.MakeAppearancePacket();

                        Client.Network.SendPacket(set);
                        Logger.DebugLog("Send AgentSetAppearance packet");

                        return(Success("Cloned " + targetName));
                    }
                    return(Failure("Don't know the appearance of avatar " + targetName));
                }
            }
            else
            {
                return(Failure("Couldn't find avatar " + args.str));
            }
        }
Exemple #15
0
        private void SendAvatarAppearancePackets(QueuedInterestListEvent[] eventDatas, IScenePresence presence)
        {
            if (!(presence is LLAgent) || presence.InterestList == null)
                return;
            LLAgent agent = (LLAgent)presence;

            for (int i = 0; i < eventDatas.Length; i++)
            {
                IScenePresence curPresence = (IScenePresence)eventDatas[i].Event.State;
                if (curPresence == presence)
                {
                    m_log.Warn("Attempted to send an AvatarAppearance packet to the controlling agent");
                    continue;
                }

                AvatarAppearancePacket appearance = new AvatarAppearancePacket();
                appearance.Sender.ID = curPresence.ID;
                appearance.Sender.IsTrial = false;

                Primitive.TextureEntry textureEntry = null;
                byte[] visualParams = null;

                if (curPresence is LLAgent)
                {
                    LLAgent curAgent = (LLAgent)curPresence;

                    // If this agent has not set VisualParams yet, skip it
                    if (curAgent.VisualParams == null)
                        continue;

                    textureEntry = curAgent.TextureEntry;
                    visualParams = curAgent.VisualParams;
                }

                if (textureEntry == null)
                {
                    // Use a default texture entry for this avatar
                    textureEntry = DEFAULT_TEXTURE_ENTRY;
                }

                if (visualParams == null)
                {
                    // Use default visual params for this avatar
                    visualParams = DEFAULT_VISUAL_PARAMS;
                }

                appearance.ObjectData.TextureEntry = textureEntry.GetBytes();
                appearance.VisualParam = new AvatarAppearancePacket.VisualParamBlock[visualParams.Length];
                for (int j = 0; j < visualParams.Length; j++)
                {
                    appearance.VisualParam[j] = new AvatarAppearancePacket.VisualParamBlock();
                    appearance.VisualParam[j].ParamValue = visualParams[j];
                }

                m_udp.SendPacket(agent, appearance, ThrottleCategory.Task, false);
            }
        }
Exemple #16
0
        /// <summary>
        /// //settexture 5 8dcd4a48-2d37-4909-9f78-f7a9eb4ef903
        /// </summary>
        /// <param name="args"></param>
        /// <param name="fromAgentID"></param>
        /// <param name="WriteLine"></param>
        /// <returns></returns>
        public override CmdResult ExecuteRequest(CmdRequest args)
        {
            UUID asset = UUID.Zero;
            AvatarTextureIndex index = AvatarTextureIndex.Unknown;

            if (args.Length > 1)
            {
                Object val;
                int    argsUsed;
                if (TryEnumParse(typeof(AvatarTextureIndex), args, 0, out argsUsed, out val))
                {
                    index = (AvatarTextureIndex)val;
                }
                string targetName = args[argsUsed];
                if (!UUID.TryParse(targetName, out asset))
                {
                    asset = WorldSystem.SimAssetSystem.GetAssetUUID(targetName, AssetType.Texture);
                }
            }

            // Get our current appearance
            UUID target = Client.Self.AgentID;

#if COGBOT_LIBOMV
            AgentSetAppearancePacket set = Client.Appearance.MakeAppearancePacket();
            Primitive.TextureEntry   te;
            if (!Client.Appearances.ContainsKey(target))
            {
                te = new Primitive.TextureEntry(set.ObjectData.TextureEntry, 0,
                                                set.ObjectData.TextureEntry.Length);
            }
            else
            {
                #region AvatarAppearance to AgentSetAppearance

                AvatarAppearancePacket appearance = TheBotClient.Appearances[target];

                set.AgentData.AgentID   = Client.Self.AgentID;
                set.AgentData.SessionID = Client.Self.SessionID;
                set.AgentData.SerialNum = SerialNum++;
                set.AgentData.Size      = new Vector3(2f, 2f, 2f); // HACK

                set.WearableData = new AgentSetAppearancePacket.WearableDataBlock[0];
                set.VisualParam  = new AgentSetAppearancePacket.VisualParamBlock[appearance.VisualParam.Length];

                for (int i = 0; i < appearance.VisualParam.Length; i++)
                {
                    set.VisualParam[i]            = new AgentSetAppearancePacket.VisualParamBlock();
                    set.VisualParam[i].ParamValue = appearance.VisualParam[i].ParamValue;
                }
                set.ObjectData.TextureEntry = appearance.ObjectData.TextureEntry;

                te = new Primitive.TextureEntry(appearance.ObjectData.TextureEntry, 0,
                                                appearance.ObjectData.TextureEntry.Length);

                #endregion AvatarAppearance to AgentSetAppearance
            }

            #region TextureEntry

            if (index != AvatarTextureIndex.Unknown)
            {
                Primitive.TextureEntryFace face = te.CreateFace((uint)index);
                face.TextureID = asset;
            }

            set.ObjectData.TextureEntry = te.GetBytes();

            #endregion TextureEntry

            // Send the new appearance packet
            Client.Network.SendPacket(set);
#endif
            return(Success("Setting texture entry for " + (AvatarTextureIndex)index + " to " + asset));
        }
Exemple #17
0
        public AvatarAppearancePacket BuildAppearancePacket()
        {
            AvatarAppearancePacket appearance = new AvatarAppearancePacket();
            appearance.ObjectData.TextureEntry = this.Avatar.Prim.Textures.GetBytes();
            appearance.Sender.ID = this.ID;
            appearance.Sender.IsTrial = false;

            int count = this.Info.VisualParams != null ? this.Info.VisualParams.Length : 0;

            appearance.VisualParam = new AvatarAppearancePacket.VisualParamBlock[count];
            for (int i = 0; i < count; i++)
            {
                appearance.VisualParam[i] = new AvatarAppearancePacket.VisualParamBlock();
                appearance.VisualParam[i].ParamValue = this.Info.VisualParams[i];
            }

            if (count != 218)
                Logger.Log("Built an odd appearance packet with VisualParams.Length=" + count, Helpers.LogLevel.Warning);

            return appearance;
        }
        private void SendAvatarAppearancePackets(QueuedInterestListEvent[] eventDatas, IScenePresence presence)
        {
            if (!(presence is LLAgent) || presence.InterestList == null)
            {
                return;
            }
            LLAgent agent = (LLAgent)presence;

            for (int i = 0; i < eventDatas.Length; i++)
            {
                IScenePresence curPresence = (IScenePresence)eventDatas[i].Event.State;
                if (curPresence == presence)
                {
                    m_log.Warn("Attempted to send an AvatarAppearance packet to the controlling agent");
                    continue;
                }

                AvatarAppearancePacket appearance = new AvatarAppearancePacket();
                appearance.Sender.ID      = curPresence.ID;
                appearance.Sender.IsTrial = false;

                Primitive.TextureEntry textureEntry = null;
                byte[] visualParams = null;

                if (curPresence is LLAgent)
                {
                    LLAgent curAgent = (LLAgent)curPresence;

                    // If this agent has not set VisualParams yet, skip it
                    if (curAgent.VisualParams == null)
                    {
                        continue;
                    }

                    textureEntry = curAgent.TextureEntry;
                    visualParams = curAgent.VisualParams;
                }

                if (textureEntry == null)
                {
                    // Use a default texture entry for this avatar
                    textureEntry = DEFAULT_TEXTURE_ENTRY;
                }

                if (visualParams == null)
                {
                    // Use default visual params for this avatar
                    visualParams = DEFAULT_VISUAL_PARAMS;
                }

                appearance.ObjectData.TextureEntry = textureEntry.GetBytes();
                appearance.VisualParam             = new AvatarAppearancePacket.VisualParamBlock[visualParams.Length];
                for (int j = 0; j < visualParams.Length; j++)
                {
                    appearance.VisualParam[j]            = new AvatarAppearancePacket.VisualParamBlock();
                    appearance.VisualParam[j].ParamValue = visualParams[j];
                }

                m_udp.SendPacket(agent, appearance, ThrottleCategory.Task, false);
            }
        }
Exemple #19
0
        public Packet inClo(Packet packet, IPEndPoint sim)
        {
            AvatarAppearancePacket appearance = (AvatarAppearancePacket)packet;

            //Console.WriteLine("1");
            if (avclients.ContainsKey(appearance.Sender.ID))
            {
                if (avclients[appearance.Sender.ID] != "")
                {
                    return(packet);
                }
            }
            //Console.WriteLine("2");
            Primitive.TextureEntry te = new Primitive.TextureEntry(appearance.ObjectData.TextureEntry, 0, appearance.ObjectData.TextureEntry.Length);
            string client             = "";

            if (((te != null) && (te.FaceTextures != null)) && (te.FaceTextures.Length > 0))
            {
                //Console.WriteLine("3");
                for (int i = 0; i < te.FaceTextures.Length; i++)
                {
                    string t = UUID.Zero.ToString();
                    try
                    {
                        t = te.FaceTextures[i].TextureID.ToString();
                    }
                    catch (Exception)
                    {
                    }
                    if (client == "")
                    {
                        if (uid2name.ContainsKey(new UUID(t)))
                        {
                            client = uid2name[new UUID(t)];
                        }
                    }
                    //Console.WriteLine("4");
                } //Console.WriteLine("11");
                if (avclients.ContainsKey(appearance.Sender.ID))
                {
                    //Console.WriteLine("41");
                    avclients[appearance.Sender.ID] = client;
                    //writethis(".We found " + appearance.Sender.ID.ToString() + "'s client to be " + client, ConsoleColor.Red, ConsoleColor.White);
                }
                else
                {
                    //Console.WriteLine("42");
                    avclients.Add(appearance.Sender.ID, client);
                    //Console.WriteLine("5");
                    //writethis("We found " + appearance.Sender.ID.ToString() + "'s client to be " + client, ConsoleColor.Red, ConsoleColor.White);
                }
                if (blocks.ContainsKey(appearance.Sender.ID))
                {
                    ObjectUpdatePacket.ObjectDataBlock block;
                    lock (blocks)
                    {
                        block = blocks[appearance.Sender.ID];
                        blocks.Remove(appearance.Sender.ID);
                    }
                    ObjectUpdatePacket oup = new ObjectUpdatePacket();
                    oup.ObjectData      = new ObjectUpdatePacket.ObjectDataBlock[1];
                    oup.ObjectData[0]   = modBlock(block);
                    oup.RegionData      = rb;
                    oup.Header.Reliable = true;
                    proxy.InjectPacket(oup, Direction.Incoming);
                }
            }
            updateList();
            //Console.WriteLine("6");
            return(appearance);
        }