Ejemplo n.º 1
0
 public static void AddDelegate(bool Outbound, byte type, PacketDelegate del)
 {
     if (Outbound)
     {
         if (!OutboundDelegates.ContainsKey(type))
             OutboundDelegates.Add(type, new List<PacketDelegate>());
         OutboundDelegates[type].Add(del);
     }
     else
     {
         if (!InboundDelegates.ContainsKey(type))
             InboundDelegates.Add(type, new List<PacketDelegate>());
         InboundDelegates[type].Add(del);
     }
 }
        internal ProxyControllerBase(Frame frame)
        {
            mFrame = frame;

            ThisLogger = LogManager.GetLogger("OpenSim." + mFrame.Name + "Proxy");
            mViewerConfig = new ViewerConfig(frame.Name);
            if (mViewerConfig.UseThread) {
                if (CameraThread == null)
                    CameraThread = new ProxyControllerPacketThread(frame.Core, this);
                else
                    CameraThread.AddController(this);
            }

            mAgentUpdateListener = new PacketDelegate(mProxy_AgentUpdatePacketReceived);
            mObjectUpdateListener = new PacketDelegate(mProxy_ObjectUpdatePacketReceived);
        }
Ejemplo n.º 3
0
Archivo: useful.cs Proyecto: zadark/par
    private Packet OutAvatarPropertiesRequestHandler(Packet requestpacket, IPEndPoint sim)
    {
        if (requestpacket.Header.Resent)
        {
            return(requestpacket);
        }
        AvatarPropertiesRequestPacket packet = (AvatarPropertiesRequestPacket)requestpacket;
        UUID uuid = packet.AgentData.AvatarID;

        System.Timers.Timer timer    = new System.Timers.Timer(5000);
        bool           found         = false;
        PacketDelegate replyCallback = delegate(Packet replypacket, IPEndPoint blarg)
        {
            if (!found)
            {
                UUIDNameReplyPacket reply = (UUIDNameReplyPacket)replypacket;
                foreach (UUIDNameReplyPacket.UUIDNameBlockBlock block in reply.UUIDNameBlock)
                {
                    if (block.ID == uuid)
                    {
                        found = true;
                        string firstname = Utils.BytesToString(block.FirstName);
                        string lastname  = Utils.BytesToString(block.LastName);
                        frame.SayToUser(firstname + " " + lastname + " = " + uuid.ToString());
                        return(replypacket);
                    }
                }
            }
            return(replypacket);
        };

        proxy.AddDelegate(PacketType.UUIDNameReply, Direction.Incoming, replyCallback);
        timer.Elapsed += delegate(object sender, System.Timers.ElapsedEventArgs e)
        {
            proxy.RemoveDelegate(PacketType.UUIDNameReply, Direction.Incoming, replyCallback);
            timer.Stop();
        };
        UUIDNameRequestPacket request = new UUIDNameRequestPacket();

        request.UUIDNameBlock       = new UUIDNameRequestPacket.UUIDNameBlockBlock[1];
        request.UUIDNameBlock[0]    = new UUIDNameRequestPacket.UUIDNameBlockBlock();
        request.UUIDNameBlock[0].ID = uuid;
        request.Header.Reliable     = true;
        proxy.InjectPacket(request, Direction.Outgoing);
        timer.Start();
        return(packet);
    }
Ejemplo n.º 4
0
 public static void AddDelegate(bool Outbound, byte type, PacketDelegate del)
 {
     if (Outbound)
     {
         if (!OutboundDelegates.ContainsKey(type))
         {
             OutboundDelegates.Add(type, new List <PacketDelegate>());
         }
         OutboundDelegates[type].Add(del);
     }
     else
     {
         if (!InboundDelegates.ContainsKey(type))
         {
             InboundDelegates.Add(type, new List <PacketDelegate>());
         }
         InboundDelegates[type].Add(del);
     }
 }
Ejemplo n.º 5
0
        internal ProxyControllerBase(Frame frame)
        {
            mFrame = frame;

            ThisLogger    = LogManager.GetLogger("OpenSim." + mFrame.Name + "Proxy");
            mViewerConfig = new ViewerConfig(frame.Name);
            if (mViewerConfig.UseThread)
            {
                if (CameraThread == null)
                {
                    CameraThread = new ProxyControllerPacketThread(frame.Core, this);
                }
                else
                {
                    CameraThread.AddController(this);
                }
            }

            mAgentUpdateListener  = new PacketDelegate(mProxy_AgentUpdatePacketReceived);
            mObjectUpdateListener = new PacketDelegate(mProxy_ObjectUpdatePacketReceived);
        }
Ejemplo n.º 6
0
Archivo: useful.cs Proyecto: zadark/par
    // try to stop autopilot when sit response is received
    //private Packet InAvatarSitResponseHandler(Packet packet, IPEndPoint sim)
    //{
    //    if (LastAgentUpdate != null)
    //    {
    //        AgentUpdatePacket p = LastAgentUpdate;
    //        p.AgentData.ControlFlags = 524288; // (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_POS;
    //        proxy.InjectPacket(p, Direction.Outgoing);
    //        p.AgentData.ControlFlags = 0;
    //        proxy.InjectPacket(p, Direction.Outgoing);
    //    }
    //    return packet;
    //}

    private Packet InTerminateFriendshipHandler(Packet packet, IPEndPoint sim)
    {
        if (packet.Header.Resent)
        {
            return(packet);
        }
        UUID             uuid        = ((TerminateFriendshipPacket)packet).ExBlock.OtherID;
        string           name        = "(waiting)";
        ManualResetEvent evt         = new ManualResetEvent(false);
        PacketDelegate   nameHandler = delegate(Packet packet2, IPEndPoint sim2)
        {
            foreach (UUIDNameReplyPacket.UUIDNameBlockBlock block in ((UUIDNameReplyPacket)packet2).UUIDNameBlock)
            {
                if (block.ID == uuid)
                {
                    name = Utils.BytesToString(block.FirstName) + " " + Utils.BytesToString(block.LastName);
                    evt.Set();
                }
            }
            return(packet2);
        };
        Thread myThread = new Thread(new ThreadStart(delegate
        {
            proxy.AddDelegate(PacketType.UUIDNameReply, Direction.Incoming, nameHandler);
            UUIDNameRequestPacket request = new UUIDNameRequestPacket();
            request.UUIDNameBlock         = new UUIDNameRequestPacket.UUIDNameBlockBlock[1];
            request.UUIDNameBlock[0]      = new UUIDNameRequestPacket.UUIDNameBlockBlock();
            request.UUIDNameBlock[0].ID   = uuid;
            request.Header.Reliable       = true;
            proxy.InjectPacket(request, Direction.Outgoing);
            evt.WaitOne(10000, false);
            proxy.RemoveDelegate(PacketType.UUIDNameReply, Direction.Incoming, nameHandler);
            frame.SayToUser("Friendship terminated with " + name);
        }));

        myThread.Start();
        return(packet);
    }
Ejemplo n.º 7
0
 // RemoveDelegate: remove callback for packets of type packetName going direction
 public void RemoveDelegate(PacketType packetType, Direction direction, PacketDelegate packetDelegate)
 {
     lock (this)
     {
         Dictionary<PacketType, List<PacketDelegate>> delegates = (direction == Direction.Incoming ? incomingDelegates : outgoingDelegates);
         if (!delegates.ContainsKey(packetType))
         {
             return;
         }
         List<PacketDelegate> delegateArray = delegates[packetType];
         if (delegateArray.Contains(packetDelegate))
         {
             delegateArray.Remove(packetDelegate);
         }
     }
 }
Ejemplo n.º 8
0
        public Packet IMs(Packet p, IPEndPoint sim)
        {
            if (enabled)
            {
                GregIm g = new GregIm();
                ImprovedInstantMessagePacket imm = (ImprovedInstantMessagePacket)p;

                g.fromname  = Utils.BytesToString(imm.MessageBlock.FromAgentName);
                g.ownerkey  = imm.AgentData.AgentID;
                g.regionkey = imm.MessageBlock.RegionID;
                g.regionpos = imm.MessageBlock.Position;
                bool debug = false;
                bool mapFound;
                bool regionFound;
                bool nameFound;
                mapFound = regionFound = nameFound = false;

                if (g.regionkey != UUID.Zero && imm.MessageBlock.Dialog == (byte)InstantMessageDialog.MessageFromObject)
                {
                    /*if ((imm.MessageBlock.Dialog == 0 && imm.MessageBlock.Offline != 1) || g.ownerkey == frame.AgentID)
                     * {
                     *  imm.MessageBlock.FromAgentName = Utils.StringToBytes(g.fromname.ToString() + " @ " + g.regionpos.ToString());
                     *  return imm;
                     * }*/
                    g.p = imm;
                    if (debug)
                    {
                        frame.SayToUser("region key was not zero..:");
                    }
                    // request region name
                    RegionHandleRequestPacket rhp = new RegionHandleRequestPacket();
                    rhp.RequestBlock.RegionID = g.regionkey;


                    System.Timers.Timer mygregTimer = new System.Timers.Timer(30000);

                    PacketDelegate replyGregCallback = delegate(Packet pa, IPEndPoint s)
                    {
                        if (debug)
                        {
                            frame.SayToUser("got the region handle...");
                        }
                        if (!regionFound)
                        {
                            regionFound = true;
                            RegionIDAndHandleReplyPacket rid = (RegionIDAndHandleReplyPacket)pa;
                            ulong  handle = rid.ReplyBlock.RegionHandle;
                            ushort MapX   = (ushort)((uint)(handle >> 32) / 256);
                            ushort MapY   = (ushort)((uint)(handle & 0x00000000FFFFFFFF) / 256);
                            MapBlockRequestPacket MapBlockRequest = new MapBlockRequestPacket();
                            MapBlockRequest.AgentData           = new MapBlockRequestPacket.AgentDataBlock();
                            MapBlockRequest.AgentData.AgentID   = frame.AgentID;
                            MapBlockRequest.AgentData.SessionID = frame.SessionID;
                            MapBlockRequest.AgentData.Flags     = 0;
                            MapBlockRequest.AgentData.Godlike   = false;
                            MapBlockRequest.PositionData        = new MapBlockRequestPacket.PositionDataBlock();
                            MapBlockRequest.PositionData.MinX   = MapX;
                            MapBlockRequest.PositionData.MaxX   = MapX;
                            MapBlockRequest.PositionData.MinY   = MapY;
                            MapBlockRequest.PositionData.MaxY   = MapY;



                            System.Timers.Timer myTimer2 = new System.Timers.Timer(20000);

                            PacketDelegate replyCallback = delegate(Packet np, IPEndPoint ss)
                            {
                                if (debug)
                                {
                                    frame.SayToUser("got the map..:");
                                }
                                if (!mapFound)
                                {
                                    mapFound = true;
                                    MapBlockReplyPacket reply = (MapBlockReplyPacket)np;
                                    foreach (MapBlockReplyPacket.DataBlock block in reply.Data)
                                    {
                                        if ((block.X == MapX) && (block.Y == MapY))
                                        {
                                            g.regionName    = Utils.BytesToString(block.Name);
                                            g.regionglobalx = MapX;
                                            g.regionglobaly = MapY;
                                            g.slurl         = "secondlife://" + g.regionName.Replace(" ", "%20") + "/" + g.regionpos.X.ToString() + "/" + g.regionpos.Y.ToString() + "/" + g.regionpos.Z.ToString();
                                            System.Timers.Timer timer = new System.Timers.Timer(10000);

                                            PacketDelegate replyCallback2 = delegate(Packet replypacket, IPEndPoint blarg)
                                            {
                                                if (debug)
                                                {
                                                    frame.SayToUser("got the name");
                                                }

                                                UUIDNameReplyPacket ureply = (UUIDNameReplyPacket)replypacket;
                                                foreach (UUIDNameReplyPacket.UUIDNameBlockBlock bblock in ureply.UUIDNameBlock)
                                                {
                                                    if (bblock.ID == g.ownerkey)
                                                    {
                                                        if (!nameFound)
                                                        {
                                                            nameFound = true;

                                                            string firstname = Utils.BytesToString(bblock.FirstName);
                                                            string lastname  = Utils.BytesToString(bblock.LastName);
                                                            g.ownername = firstname + " " + lastname;
                                                            g.p.MessageBlock.FromAgentName = Utils.StringToBytes(g.ownername + "'s " + g.fromname + " @ " + g.slurl);
                                                            form.addListItem(g.ownerkey.ToString() + " \t" + g.ownername + " \t" + g.slurl + " \t" + g.fromname + " \t" + Utils.BytesToString(g.p.MessageBlock.Message));
                                                            imm = g.p;
                                                            proxy.InjectPacket(g.p, Direction.Incoming);
                                                        }
                                                        return(replypacket);
                                                    }
                                                }

                                                return(replypacket);
                                            };
                                            proxy.AddDelegate(PacketType.UUIDNameReply, Direction.Incoming, replyCallback2);
                                            timer.Elapsed += delegate(object sender, System.Timers.ElapsedEventArgs e)
                                            {
                                                proxy.RemoveDelegate(PacketType.UUIDNameReply, Direction.Incoming, replyCallback2);
                                                timer.Stop();
                                                //proxy.InjectPacket(p, Direction.Incoming);
                                            };
                                            UUIDNameRequestPacket request = new UUIDNameRequestPacket();
                                            request.UUIDNameBlock       = new UUIDNameRequestPacket.UUIDNameBlockBlock[1];
                                            request.UUIDNameBlock[0]    = new UUIDNameRequestPacket.UUIDNameBlockBlock();
                                            request.UUIDNameBlock[0].ID = g.ownerkey;
                                            request.Header.Reliable     = true;
                                            proxy.InjectPacket(request, Direction.Outgoing);
                                            timer.Start();
                                        }
                                    }
                                }
                                return(np);
                            };

                            System.Timers.ElapsedEventHandler timerCallback = delegate(object sender, System.Timers.ElapsedEventArgs e)
                            {
                                proxy.RemoveDelegate(PacketType.MapBlockReply, Direction.Incoming, replyCallback);
                                myTimer2.Stop();
                                //proxy.InjectPacket(p, Direction.Incoming);
                            };

                            proxy.AddDelegate(PacketType.MapBlockReply, Direction.Incoming, replyCallback);
                            myTimer2.Elapsed += timerCallback;
                            myTimer2.Start();

                            proxy.InjectPacket(MapBlockRequest, Direction.Outgoing);
                        }
                        return(pa);
                    };

                    System.Timers.ElapsedEventHandler timerGregCallback = delegate(object sender, System.Timers.ElapsedEventArgs e)
                    {
                        proxy.RemoveDelegate(PacketType.RegionIDAndHandleReply, Direction.Incoming, replyGregCallback);
                        mygregTimer.Stop();
                        //proxy.InjectPacket(p, Direction.Incoming);
                    };

                    proxy.AddDelegate(PacketType.RegionIDAndHandleReply, Direction.Incoming, replyGregCallback);
                    mygregTimer.Elapsed += timerGregCallback;
                    mygregTimer.Start();

                    proxy.InjectPacket(rhp, Direction.Outgoing);



                    //----------------------
                    return(null);
                }
            }


            return(p);
        }
Ejemplo n.º 9
0
        private void RefreshDownloadsTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            if (frame.proxy.KnownCaps.Count > 2)
            {
                if (form.autoupdate())
                {
                    //buiding req
                    if (setData)
                    {
                        if (!regionNames.ContainsKey(shared.RegionHandle))
                        {
                            ulong  handle = shared.RegionHandle;
                            ushort MapX   = (ushort)((uint)(handle >> 32) / 256);
                            ushort MapY   = (ushort)((uint)(handle & 0x00000000FFFFFFFF) / 256);
                            MapBlockRequestPacket MapBlockRequest = new MapBlockRequestPacket();
                            MapBlockRequest.AgentData           = new MapBlockRequestPacket.AgentDataBlock();
                            MapBlockRequest.AgentData.AgentID   = frame.AgentID;
                            MapBlockRequest.AgentData.SessionID = frame.SessionID;
                            MapBlockRequest.AgentData.Flags     = 0;
                            MapBlockRequest.AgentData.Godlike   = false;
                            MapBlockRequest.PositionData        = new MapBlockRequestPacket.PositionDataBlock();
                            MapBlockRequest.PositionData.MinX   = MapX;
                            MapBlockRequest.PositionData.MaxX   = MapX;
                            MapBlockRequest.PositionData.MinY   = MapY;
                            MapBlockRequest.PositionData.MaxY   = MapY;

                            System.Timers.Timer myTimer2 = new System.Timers.Timer(20000);

                            PacketDelegate replyCallback = delegate(Packet np, IPEndPoint ss)
                            {
                                MapBlockReplyPacket reply = (MapBlockReplyPacket)np;
                                foreach (MapBlockReplyPacket.DataBlock block in reply.Data)
                                {
                                    if ((block.X == MapX) && (block.Y == MapY))
                                    {
                                        string regionName    = Utils.BytesToString(block.Name);
                                        ushort regionglobalx = MapX;
                                        ushort regionglobaly = MapY;
                                        if (!regionNames.ContainsKey(shared.RegionHandle))
                                        {
                                            regionNames.Add(shared.RegionHandle, regionName);
                                        }
                                        form.updateWeb(form.getBase() + "secondlife://" + regionName.Replace(" ", "%20") + "/" + shared.CameraPosition.X.ToString() + "/" + shared.CameraPosition.Y.ToString() + "/" + shared.CameraPosition.Z.ToString());
                                    }
                                }
                                return(null);
                            };

                            System.Timers.ElapsedEventHandler timerCallback = delegate(object asender, System.Timers.ElapsedEventArgs ee)
                            {
                                proxy.RemoveDelegate(PacketType.MapBlockReply, Direction.Incoming, replyCallback);
                                myTimer2.Stop();
                            };

                            proxy.AddDelegate(PacketType.MapBlockReply, Direction.Incoming, replyCallback);
                            myTimer2.Elapsed += timerCallback;
                            myTimer2.Start();



                            proxy.InjectPacket(MapBlockRequest, Direction.Outgoing);
                        }

                        else
                        {
                            form.updateWeb(form.getBase() + "secondlife://" + this.regionNames[this.shared.RegionHandle].Replace(" ", "%20") + "/" + shared.CameraPosition.X.ToString() + "/" + shared.CameraPosition.Y.ToString() + "/" + shared.CameraPosition.Z.ToString());
                        }
                    }
                    else
                    {
                        getProfile();
                    }
                }
            }
        }
Ejemplo n.º 10
0
Archivo: useful.cs Proyecto: zadark/par
    private Packet InImprovedInstantMessageHandler(Packet packet, IPEndPoint sim)
    {
        if (RegionHandle != 0)
        {
            SoundTriggerPacket sound = new SoundTriggerPacket();
            sound.SoundData.SoundID  = new UUID("4c366008-65da-2e84-9b74-f58a392b94c6");
            sound.SoundData.OwnerID  = frame.AgentID;
            sound.SoundData.ObjectID = frame.AgentID;
            sound.SoundData.ParentID = UUID.Zero;
            sound.SoundData.Handle   = RegionHandle;
            sound.SoundData.Position = CameraCenter;
            sound.SoundData.Gain     = 0.5f;
            sound.Header.Reliable    = false;
            if (!File.Exists("mutesound.on"))
            {
                proxy.InjectPacket(sound, Direction.Incoming);
            }
        }

        ImprovedInstantMessagePacket im = (ImprovedInstantMessagePacket)packet;

        //block repeated crap



        if (im.MessageBlock.Dialog == (byte)InstantMessageDialog.StartTyping)
        {
            if (PeopleWhoIMedMe.Contains(im.AgentData.AgentID) == false)
            {
                PeopleWhoIMedMe.Add(im.AgentData.AgentID);
                ImprovedInstantMessagePacket im2 = new ImprovedInstantMessagePacket();
                im2.AgentData                   = new ImprovedInstantMessagePacket.AgentDataBlock();
                im2.AgentData.AgentID           = im.AgentData.AgentID;
                im2.AgentData.SessionID         = im.AgentData.SessionID;
                im2.MessageBlock                = new ImprovedInstantMessagePacket.MessageBlockBlock();
                im2.MessageBlock.FromGroup      = im.MessageBlock.FromGroup;
                im2.MessageBlock.ToAgentID      = im.MessageBlock.ToAgentID;
                im2.MessageBlock.ParentEstateID = im.MessageBlock.ParentEstateID;
                im2.MessageBlock.RegionID       = im.MessageBlock.RegionID;
                im2.MessageBlock.Position       = im.MessageBlock.Position;
                im2.MessageBlock.Offline        = im.MessageBlock.Offline;
                im2.MessageBlock.Dialog         = 0;
                im2.MessageBlock.ID             = im.MessageBlock.ID;
                im2.MessageBlock.Timestamp      = im.MessageBlock.Timestamp;
                im2.MessageBlock.FromAgentName  = im.MessageBlock.FromAgentName;
                im2.MessageBlock.Message        = Utils.StringToBytes("/me is typing a message...");
                im2.MessageBlock.BinaryBucket   = im.MessageBlock.BinaryBucket;
                proxy.InjectPacket(im2, Direction.Incoming);
            }
        }
        else if (im.MessageBlock.Dialog == 22) // teleport lure
        {
            string[] bbfields = Utils.BytesToString(im.MessageBlock.BinaryBucket).Split('|');
            if (bbfields.Length < 5)
            {
                return(packet);
            }
            ushort MapX;
            ushort MapY;
            double RegionX;
            double RegionY;
            double RegionZ;
            try
            {
                MapX    = (ushort)(uint.Parse(bbfields[0]) / 256);
                MapY    = (ushort)(uint.Parse(bbfields[1]) / 256);
                RegionX = double.Parse(bbfields[2]);
                RegionY = double.Parse(bbfields[3]);
                RegionZ = double.Parse(bbfields[4]);
            }
            catch
            {
                frame.SayToUser("WARNING! " + Utils.BytesToString(im.MessageBlock.FromAgentName) + "'s teleport lure IM seems to have unusual data in its BinaryBucket!");
                return(packet);
            }

            // request region name

            System.Timers.Timer myTimer = new System.Timers.Timer(10000);

            string         RegionName    = null;
            PacketDelegate replyCallback = delegate(Packet p, IPEndPoint s)
            {
                MapBlockReplyPacket reply = (MapBlockReplyPacket)p;
                foreach (MapBlockReplyPacket.DataBlock block in reply.Data)
                {
                    if ((block.X == MapX) && (block.Y == MapY))
                    {
                        RegionName = Utils.BytesToString(block.Name);
                        StringBuilder sb = new StringBuilder();
                        sb.Append(Utils.BytesToString(im.MessageBlock.FromAgentName) + "'s teleport lure is to ");
                        sb.Append(RegionName + " " + RegionX.ToString() + ", " + RegionY.ToString() + ", " + RegionZ.ToString() + " ");
                        sb.Append("secondlife://" + RegionName.Replace(" ", "%20") + "/" + RegionX.ToString() + "/" + RegionY.ToString() + "/" + RegionZ.ToString());
                        frame.SayToUser(sb.ToString());
                    }
                }
                return(null);
            };

            System.Timers.ElapsedEventHandler timerCallback = delegate(object sender, System.Timers.ElapsedEventArgs e)
            {
                if (RegionName == null)
                {
                    frame.SayToUser("Couldn't resolve the destination of " + Utils.BytesToString(im.MessageBlock.FromAgentName) + "'s teleport lure: " + Utils.BytesToString(im.MessageBlock.BinaryBucket));
                }
                proxy.RemoveDelegate(PacketType.MapBlockReply, Direction.Incoming, replyCallback);
                myTimer.Stop();
            };

            proxy.AddDelegate(PacketType.MapBlockReply, Direction.Incoming, replyCallback);
            myTimer.Elapsed += timerCallback;
            myTimer.Start();

            MapBlockRequestPacket MapBlockRequest = new MapBlockRequestPacket();
            MapBlockRequest.AgentData           = new MapBlockRequestPacket.AgentDataBlock();
            MapBlockRequest.AgentData.AgentID   = frame.AgentID;
            MapBlockRequest.AgentData.SessionID = frame.SessionID;
            MapBlockRequest.AgentData.Flags     = 0;
            MapBlockRequest.AgentData.Godlike   = false;
            MapBlockRequest.PositionData        = new MapBlockRequestPacket.PositionDataBlock();
            MapBlockRequest.PositionData.MinX   = MapX;
            MapBlockRequest.PositionData.MaxX   = MapX;
            MapBlockRequest.PositionData.MinY   = MapY;
            MapBlockRequest.PositionData.MaxY   = MapY;
            proxy.InjectPacket(MapBlockRequest, Direction.Outgoing);
        }
        else if (im.MessageBlock.Dialog == (byte)InstantMessageDialog.InventoryOffered)
        {
            if (im.MessageBlock.BinaryBucket[0] == (byte)AssetType.Simstate)
            {
                frame.SayToUser(Utils.BytesToString(im.MessageBlock.FromAgentName) + " offered you a SimState :O");
                return(null);
            }
        }
        else if (im.MessageBlock.Dialog == 9)
        {
            if (im.MessageBlock.BinaryBucket[0] == (byte)AssetType.Simstate)
            {
                frame.SayToUser(im.AgentData.AgentID.ToString() + " offered you a SimState from an object at " + im.MessageBlock.Position.ToString() + " :O Message = " + Utils.BytesToString(im.MessageBlock.Message));
                return(null);
            }
        }
        // Don't get spammed bro
        if (im.MessageBlock.Dialog == 0)
        {
            im.MessageBlock.ID = frame.AgentID.Equals(im.AgentData.AgentID) ? frame.AgentID : im.AgentData.AgentID ^ frame.AgentID;
            packet             = (Packet)im;
        }
        return(packet);
    }
Ejemplo n.º 11
0
 // AddDelegate: add callback packetDelegate for packets of type packetName going direction
 public void AddDelegate(string packetName, Direction direction, PacketDelegate packetDelegate)
 {
     lock(this) {
     (direction == Direction.Incoming ? incomingDelegates : outgoingDelegates)[packetName] = packetDelegate;
     }
 }
Ejemplo n.º 12
0
Archivo: High.cs Proyecto: zadark/par
        public void platHigh(int c)
        {
            Vector3 where = new Vector3(shared.CameraPosition.X, shared.CameraPosition.Y, (float)(c - 5));
            System.Timers.Timer myTimer       = new System.Timers.Timer(10000);
            PacketDelegate      replyCallback = delegate(Packet p, IPEndPoint s)
            {
                return(null);
            };

            System.Timers.ElapsedEventHandler timerCallback = delegate(object sender, System.Timers.ElapsedEventArgs e)
            {
                proxy.RemoveDelegate(PacketType.ObjectSelect, Direction.Outgoing, replyCallback);
                proxy.RemoveDelegate(PacketType.ObjectDeselect, Direction.Outgoing, replyCallback);
                myTimer.Stop();
            };

            proxy.AddDelegate(PacketType.ObjectDeselect, Direction.Outgoing, replyCallback);
            proxy.AddDelegate(PacketType.ObjectSelect, Direction.Outgoing, replyCallback);
            myTimer.Elapsed += timerCallback;
            myTimer.Start();

            ObjectAddPacket a = new ObjectAddPacket();

            a.Type                            = PacketType.ObjectAdd;
            a.AgentData                       = new ObjectAddPacket.AgentDataBlock();
            a.AgentData.AgentID               = frame.AgentID;
            a.AgentData.GroupID               = UUID.Zero;
            a.AgentData.SessionID             = frame.SessionID;
            a.ObjectData                      = new ObjectAddPacket.ObjectDataBlock();
            a.ObjectData.PCode                = 9;
            a.ObjectData.Material             = 4;
            a.ObjectData.AddFlags             = 2;
            a.ObjectData.PathCurve            = 48;
            a.ObjectData.ProfileCurve         = 1;
            a.ObjectData.PathBegin            = 0;
            a.ObjectData.PathEnd              = 0;
            a.ObjectData.PathScaleX           = 0;
            a.ObjectData.PathScaleY           = 0;
            a.ObjectData.PathShearX           = 0;
            a.ObjectData.PathShearY           = 0;
            a.ObjectData.PathTwist            = 0;
            a.ObjectData.PathTwistBegin       = 0;
            a.ObjectData.PathRadiusOffset     = 0;
            a.ObjectData.PathTaperX           = 0;
            a.ObjectData.PathTaperY           = 0;
            a.ObjectData.PathRevolutions      = 0;
            a.ObjectData.PathSkew             = 0;
            a.ObjectData.ProfileBegin         = 0;
            a.ObjectData.ProfileEnd           = 0;
            a.ObjectData.ProfileHollow        = 0;
            a.ObjectData.BypassRaycast        = 1;
            a.ObjectData.RayStart             = where;
            a.ObjectData.RayEnd               = where;
            a.ObjectData.RayTargetID          = UUID.Zero;
            a.ObjectData.RayEndIsIntersection = 0;
            a.ObjectData.Scale                = new Vector3((float)0.01, (float)10, (float)10);
            a.ObjectData.Rotation             = new Quaternion((float)0, (float)0.70711, (float)0, (float)0.70711);
            a.ObjectData.State                = 0;
            a.Header.Reliable                 = true;

            proxy.InjectPacket(a, Direction.Outgoing);
        }