Example #1
0
        //Oculta todos los elementos para poder tener un overlayForm
        public void start(String server, int port)
        {
            sniffer = RustInterceptor.getInstance(server, port);
            this.hideControls();
            pintor = DrawingUtils.getInstance();
            //Hilo que se encargara de ir limpiando las entidades que esten muy lejos o no merezca la pena espiar.
            cleaner = new Thread(
                () =>
            {
                do
                {
                    if (localPlayer != null)
                    {
                        List <KeyValuePair <String, Entity> > filas = this.listaUsuarios.ToList <KeyValuePair <String, Entity> >();
                        foreach (KeyValuePair <String, Entity> fila in filas)
                        {
                            if (fila.Value == null)
                            {
                                return;
                            }
                            Entity entidad = fila.Value;

                            float distance = UnityEngine.Vector2.Distance(
                                new UnityEngine.Vector2(entidad.Data.baseEntity.pos.x, entidad.Data.baseEntity.pos.z)
                                ,
                                new UnityEngine.Vector2(this.localPlayer.Data.baseEntity.pos.x, this.localPlayer.Data.baseEntity.pos.z));
                            if (distance > pintor.getController().getZoomValue() || entidad.Data.basePlayer.modelState.onground && !entidad.Data.basePlayer.modelState.sleeping)
                            {
                                this.listaUsuarios.TryRemove(fila.Key, out entidad);
                            }
                        }
                    }
                    Thread.Sleep(5 * 1000);
                } while (working);
            });

            cleaner.SetApartmentState(ApartmentState.MTA);
            cleaner.IsBackground   = true;
            cleaner.CurrentCulture = System.Globalization.CultureInfo.CurrentCulture;
            cleaner.Priority       = ThreadPriority.BelowNormal;
            cleaner.Name           = "OverlayCleanerThread";

            //Creo un Hilo que se encargara de hacer todo el curro
            worker = new Thread(
                () =>
            {
                targetProcess.EnableRaisingEvents = true;
                targetProcess.Exited += new EventHandler(     //En cuanto se cierre Rust, cerramos OVerlay
                    (object sender, EventArgs e) =>
                {
                    this.Stop();
                });

                //¿Porque ha dejado de funcionar de pronto?
                //Puede ser por el cambio de propiedades de int a float que hice en RECTANGULO
                //new WindowHook(targetProcess.MainWindowHandle, this); //De momento esta clase se ocupa directamente de redimensionar la ventana
                this.resizeForm(new RECTANGULO());


                sniffer.Start();
                while (this.localPlayer == null)     //Esperamos hasta que tengamos el localplayer
                {
                    Thread.Sleep(1000);
                    Console.WriteLine("No me he encontrado...Sigo buscandome");
                }
                Console.WriteLine("Me he encontrado");

                working = true;
                cleaner.Start();
                //cleaner.Join();
                do
                {
                    this.worldToScreen();
                    Thread.Sleep(100);
                } while (working);
            });

            worker.SetApartmentState(ApartmentState.MTA);
            worker.IsBackground   = true;
            worker.CurrentCulture = System.Globalization.CultureInfo.CurrentCulture;
            worker.Priority       = ThreadPriority.Highest;
            worker.Name           = "OverlayWorkerThread";

            worker.Start();
            //worker.Join();

            this.Show();
        }