Beispiel #1
0
        public void EmulateClient()
        {
            try
            {
                Console.WriteLine($"Client {Name} connecting...");

                var client = new MiNetClient(EndPoint, Name, _threadPool);
                client.MessageDispatcher = new McpeClientMessageDispatcher(new DefaultMessageHandler(client));
                client.ChunkRadius       = ChunkRadius;
                client.IsEmulator        = true;
                client.ClientId          = ClientId;

                client.StartClient();
                Console.WriteLine("Client started.");

                client.HaveServer = true;
                client.SendOpenConnectionRequest1();

                //client.FirstPacketWaitHandle.WaitOne();
                //client.FirstEncryptedPacketWaitHandle.WaitOne();
                client.PlayerStatusChangedWaitHandle.WaitOne();
                Emulator.ConcurrentSpawnWaitHandle.Set();
                Console.CursorLeft = Console.CursorLeft = Console.BufferWidth - $"Client {Name} connected, emulating...".Length;
                if (client.UdpClient != null)
                {
                    Console.WriteLine($"Client {Name} connected, emulating...");
                }

                var runningTime = Stopwatch.StartNew();

                //Thread.Sleep(3000);

                //client.SendChat(".tp test");
                //client.SendChat("/join bb");
                //client.SendChat("/join skywars");

                //Thread.Sleep(TimeToRun);

                //if (client.CurrentLocation != null)
                //{
                //	client.CurrentLocation = new PlayerLocation(client.CurrentLocation.X, -10, client.CurrentLocation.Z);
                //	client.SendMcpeMovePlayer();
                //	Thread.Sleep(3000);
                //}

                //client.SendChat("/hub");

                //Thread.Sleep(3000);

                for (int i = 0; /*i < 10 && */ Emulator.Running && runningTime.Elapsed < TimeToRun; i++)
                {
                    if (client.UdpClient == null)
                    {
                        break;
                    }

                    float y      = client.LevelInfo.SpawnX + Random.Next(7, 10);
                    float length = Random.Next(5, 20);

                    double       angle          = 0.0;
                    const double angleStepsize  = 0.05;
                    float        heightStepSize = (float)(Random.NextDouble() / 5);

                    while (angle < 2 * Math.PI && Emulator.Running)
                    {
                        if (client.UdpClient == null)
                        {
                            break;
                        }

                        float x = (float)(length * Math.Cos(angle));
                        float z = (float)(length * Math.Sin(angle));
                        y += heightStepSize;

                        x += client.LevelInfo.SpawnX;
                        z += client.LevelInfo.SpawnZ;

                        client.CurrentLocation = new PlayerLocation(x, y, z, (float)angle.ToDegrees(), (float)angle.ToDegrees());
                        //client.SendMcpeMovePlayer();
                        client.SendCurrentPlayerPositionAsync().Wait();

                        int timeout = RanMin == RanMax ? RanMin : Random.Next(RanMin, RanMax);
                        if (timeout > 0)
                        {
                            Thread.Sleep(timeout);
                        }

                        angle += angleStepsize;
                    }
                }

                if (client.UdpClient != null)
                {
                    client.SendChat("Shadow gov agent BREXITING!");
                    client.SendDisconnectionNotification();
                }

                client.StopClient();
                Console.WriteLine($"{runningTime.ElapsedMilliseconds} Client stopped. {client.UdpClient == null}, {Emulator.Running}");
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }