//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(); }