예제 #1
0
        public void turnCornerVer3(EsoWindow esoWindow, String addrText, IntPtr processHandle, String targetCorner)
        {
            Point cursorPosition = new Point();

            esoWindow.GetCursorPos(out cursorPosition);

            var    buffer = new byte[8];
            var    addr   = long.Parse(addrText, NumberStyles.HexNumber);
            IntPtr bytesRead;
            var    result = esoWindow.ReadProcessMemory(processHandle, new IntPtr(addr), buffer, (uint)buffer.Length, out bytesRead);

            NumberFormatInfo nfi = new NumberFormatInfo();

            nfi.NumberDecimalSeparator = ",";                           //Задаем запятую, как разделитель между числом и дробной частью

            double trgCorner     = Convert.ToDouble(targetCorner, nfi); //Целевой угол
            double acturalCorner = BitConverter.ToDouble(buffer, 0);    //текущий угол
            int    screenX       = Screen.PrimaryScreen.Bounds.Width;
            int    numberОfTurns = 0;

            if (trgCorner > acturalCorner) //Целевой угол больше текущего
            {
                int X = AutoItX.MouseGetPos().X;
                int Y = AutoItX.MouseGetPos().Y;
                if (((trgCorner - acturalCorner) * 8.7184d) > (Screen.PrimaryScreen.Bounds.Width / 2))
                {
                    numberОfTurns = Convert.ToInt32(Math.Truncate(((trgCorner - acturalCorner) * 8.7184d) / (Screen.PrimaryScreen.Bounds.Width / 2)));
                    for (int i = 0; i < numberОfTurns; i++)
                    {
                        AutoItX.MouseMove(X - screenX / 2 + 1, Y, 1);
                        Thread.Sleep(50);;
                    }
                    result        = esoWindow.ReadProcessMemory(processHandle, new IntPtr(addr), buffer, (uint)buffer.Length, out bytesRead);
                    acturalCorner = BitConverter.ToDouble(buffer, 0);
                }
                Thread.Sleep(500);
                AutoItX.MouseMove(X - Convert.ToInt32((trgCorner - acturalCorner) * 8.7184d), Y, 1); //8.7184 - коэффициент, полученный эксперементальным расчетным путем
            }
            else //Целевой угол меньше текущего
            {
                int X = AutoItX.MouseGetPos().X;
                int Y = AutoItX.MouseGetPos().Y;
                if (((acturalCorner - trgCorner) * 8.7184d) > (Screen.PrimaryScreen.Bounds.Width / 2))
                {
                    numberОfTurns = Convert.ToInt32(Math.Truncate(((acturalCorner - trgCorner) * 8.7184d) / (Screen.PrimaryScreen.Bounds.Width / 2)));
                    for (int i = 0; i < numberОfTurns; i++)
                    {
                        AutoItX.MouseMove(X + screenX / 2 - 1, Y, 1);
                        Thread.Sleep(50);
                    }
                    result        = esoWindow.ReadProcessMemory(processHandle, new IntPtr(addr), buffer, (uint)buffer.Length, out bytesRead);
                    acturalCorner = BitConverter.ToDouble(buffer, 0);
                }
                Thread.Sleep(500);
                AutoItX.MouseMove(X + Convert.ToInt32((acturalCorner - trgCorner) * 8.7184d), Y, 1); //8.7184 - коэффициент, полученный эксперементальным расчетным путем
            }
        }
예제 #2
0
        //Рыбачим
        public void Fishing(EsoWindow esoWindow, IntPtr hWnd)
        {
            bool stopFish = false;

            while (!stopFish)
            {
                if (Form1.stopAction)
                {
                    return;
                }
                graphics.CopyFromScreen(0, 0, 0, 0, bitmap.Size); // Задаем первыми двумя цифрами координаты начала (верхний левый угол) считываемого прямоугольника

                //Рассчитываем хэш код картинки
                rawImageData = converter.ConvertTo(bitmap, typeof(byte[])) as byte[];
                hash         = md5.ComputeHash(rawImageData);
                //конвертируем в строку
                actualHash = BitConverter.ToString(hash);
                switch (actualHash)
                {
                case fishHole:
                    esoWindow.SendMessage(hWnd, (uint)WindowMessages.WM_KEYDOWN, new IntPtr((ushort)System.Windows.Forms.Keys.E), new IntPtr(0));
                    Thread.Sleep(random.Next(70, 100));
                    esoWindow.SendMessage(hWnd, (uint)WindowMessages.WM_KEYUP, new IntPtr((ushort)System.Windows.Forms.Keys.E), new IntPtr(0));
                    break;

                case waitFish:
                    break;

                case catchFish:
                    Thread.Sleep(random.Next(500, 1000));
                    esoWindow.SendMessage(hWnd, (uint)WindowMessages.WM_KEYDOWN, new IntPtr((ushort)System.Windows.Forms.Keys.E), new IntPtr(0));
                    Thread.Sleep(random.Next(70, 100));
                    esoWindow.SendMessage(hWnd, (uint)WindowMessages.WM_KEYUP, new IntPtr((ushort)System.Windows.Forms.Keys.E), new IntPtr(0));
                    Thread.Sleep(random.Next(3000, 4000));
                    break;

                case fightStatus:
                    Fight(esoWindow, hWnd);
                    esoWindow.SendMessage(hWnd, (uint)WindowMessages.WM_KEYDOWN, new IntPtr((ushort)System.Windows.Forms.Keys.S), new IntPtr(0));
                    Thread.Sleep(random.Next(2000));
                    esoWindow.SendMessage(hWnd, (uint)WindowMessages.WM_KEYUP, new IntPtr((ushort)System.Windows.Forms.Keys.S), new IntPtr(0));
                    Thread.Sleep(random.Next(70, 100));
                    esoWindow.SendMessage(hWnd, (uint)WindowMessages.WM_KEYDOWN, new IntPtr((ushort)System.Windows.Forms.Keys.W), new IntPtr(0));
                    Thread.Sleep(random.Next(1500));
                    esoWindow.SendMessage(hWnd, (uint)WindowMessages.WM_KEYUP, new IntPtr((ushort)System.Windows.Forms.Keys.W), new IntPtr(0));
                    break;

                default:
                    stopFish = true;
                    break;
                }

                Thread.Sleep(random.Next(500, 1000));
            }
        }
예제 #3
0
 //Воюем
 public void Fight(EsoWindow esoWindow, IntPtr hWnd)
 {
     esoWindow.SendMessage(hWnd, (uint)WindowMessages.WM_KEYDOWN, new IntPtr((ushort)Keys.D1), new IntPtr(0));
     Thread.Sleep(random.Next(70, 100));
     esoWindow.SendMessage(hWnd, (uint)WindowMessages.WM_KEYUP, new IntPtr((ushort)Keys.D1), new IntPtr(0));
     Thread.Sleep(2000);
     //Пока в бое, жмем клавишу 1 раз в 2 секунды
     while (isFight())
     {
         esoWindow.SendMessage(hWnd, (uint)WindowMessages.WM_KEYDOWN, new IntPtr((ushort)Keys.D1), new IntPtr(0));
         Thread.Sleep(random.Next(70, 100));
         esoWindow.SendMessage(hWnd, (uint)WindowMessages.WM_KEYUP, new IntPtr((ushort)Keys.D1), new IntPtr(0));
         Thread.Sleep(2000);
     }
 }
예제 #4
0
 //Собираем ресурс
 public void GatheringResources(EsoWindow esoWindow, IntPtr hWnd)
 {
     esoWindow.SendMessage(hWnd, (uint)WindowMessages.WM_KEYDOWN, new IntPtr((ushort)Keys.E), new IntPtr(0));
     Thread.Sleep(random.Next(70, 100));
     esoWindow.SendMessage(hWnd, (uint)WindowMessages.WM_KEYUP, new IntPtr((ushort)Keys.E), new IntPtr(0));
 }
예제 #5
0
        //Поворот камеры

        public void turnCorner(EsoWindow esoWindow, String addrText, IntPtr processHandle, String targetCorner)
        {
            Point cursorPosition = new Point();

            esoWindow.GetCursorPos(out cursorPosition);

            var    buffer = new byte[8];
            var    addr   = long.Parse(addrText, NumberStyles.HexNumber);
            IntPtr bytesRead;
            var    result = esoWindow.ReadProcessMemory(processHandle, new IntPtr(addr), buffer, (uint)buffer.Length, out bytesRead);

            NumberFormatInfo nfi = new NumberFormatInfo();

            nfi.NumberDecimalSeparator = ",";                           //Задаем запятую, как разделитель между числом и дробной частью

            double trgCorner     = Convert.ToDouble(targetCorner, nfi); //Целевой угол
            double acturalCorner = BitConverter.ToDouble(buffer, 0);    //текущий угол
            double counterCorner = 0;                                   //Счетчик, на сколько повернулся угол
            double lenghtCorner;                                        //Длина, на которую надо повернуть угол
            double previousCorner;                                      //Предыдущее значение угла
            bool   rotationCorner;                                      //Определяем, куда поворачивать. True - вперед, False - назад

            if (trgCorner > acturalCorner)
            {
                lenghtCorner   = trgCorner - acturalCorner;
                rotationCorner = true;
            }
            else
            {
                lenghtCorner   = acturalCorner - trgCorner;
                rotationCorner = false;
            }

            if (rotationCorner)
            {
                result         = esoWindow.ReadProcessMemory(processHandle, new IntPtr(addr), buffer, (uint)buffer.Length, out bytesRead);
                previousCorner = BitConverter.ToDouble(buffer, 0);

                while (lenghtCorner > counterCorner)
                {
                    if (Form1.stopAction)
                    {
                        break;
                    }
                    esoWindow.SetCursorPos(cursorPosition.X - 3, cursorPosition.Y);
                    result         = esoWindow.ReadProcessMemory(processHandle, new IntPtr(addr), buffer, (uint)buffer.Length, out bytesRead);
                    counterCorner  = BitConverter.ToDouble(buffer, 0) - previousCorner + counterCorner;
                    previousCorner = BitConverter.ToDouble(buffer, 0);
                    Thread.Sleep(10);
                }
            }
            else
            {
                result         = esoWindow.ReadProcessMemory(processHandle, new IntPtr(addr), buffer, (uint)buffer.Length, out bytesRead);
                previousCorner = BitConverter.ToDouble(buffer, 0);

                while (lenghtCorner > counterCorner)
                {
                    if (Form1.stopAction)
                    {
                        break;
                    }
                    esoWindow.SetCursorPos(cursorPosition.X + 3, cursorPosition.Y);
                    result         = esoWindow.ReadProcessMemory(processHandle, new IntPtr(addr), buffer, (uint)buffer.Length, out bytesRead);
                    counterCorner  = previousCorner - BitConverter.ToDouble(buffer, 0) + counterCorner;
                    previousCorner = BitConverter.ToDouble(buffer, 0);
                    Thread.Sleep(10);
                }
            }
        }
예제 #6
0
        //Заготовка под бег
        public void Run(EsoWindow esoWindow, IntPtr processHandle, IntPtr hWnd, String xAddress, String yAdress, String cAdress, String xTarget, String yTarget, String cTarget)
        {
            if (Form1.stopAction)
            {
                return;                   //Прекращаем функцию, если нажато F12
            }
            int              timeCount = 0;
            IntPtr           bytesRead;
            NumberFormatInfo nfi = new NumberFormatInfo();

            nfi.NumberDecimalSeparator = ","; //Задаем запятую, как разделитель между числом и дробной частью

            //Создаем массивы, куда будут считываться данные из памяти
            var bufferX = new byte[8];
            var bufferY = new byte[8];
            var bufferC = new byte[8];
            //Переводим адреса памяти из String в Hex
            var addrX = long.Parse(xAddress, System.Globalization.NumberStyles.HexNumber);
            var addrY = long.Parse(yAdress, System.Globalization.NumberStyles.HexNumber);
            var addrC = long.Parse(cAdress, System.Globalization.NumberStyles.HexNumber);
            //Читаем текущие значения X, Y, Corner
            var resultX = esoWindow.ReadProcessMemory(processHandle, new IntPtr(addrX), bufferX, (uint)bufferX.Length, out bytesRead);
            var resultY = esoWindow.ReadProcessMemory(processHandle, new IntPtr(addrY), bufferY, (uint)bufferY.Length, out bytesRead);
            var resultC = esoWindow.ReadProcessMemory(processHandle, new IntPtr(addrC), bufferC, (uint)bufferC.Length, out bytesRead);
            //Переводим текущие значения X, Y, Corner в Double
            double actualX = BitConverter.ToDouble(bufferX, 0);
            double actualY = BitConverter.ToDouble(bufferY, 0);
            double actualC = BitConverter.ToDouble(bufferC, 0);

            Console.WriteLine("Целевые координаты: " + "X: " + xTarget + " Y: " + yTarget + " C: " + cTarget);
            Console.WriteLine("Текущие координаты: " + "X: " + Convert.ToString(actualX) + " Y: " + Convert.ToString(actualY) + " C: " + Convert.ToString(actualC));

            //Переводим целевые значения из String в Double с использованием заданного
            double targetX = Convert.ToDouble(xTarget, nfi);
            double targetY = Convert.ToDouble(yTarget, nfi);
            //Расчет катетов прямоугольного треугольника
            double katetX = Math.Abs(targetX - actualX);
            double katetY = Math.Abs(targetY - actualY);
            //Находим тангенс угла и угол а
            double cornerA = Math.Atan(katetY / katetX) * 180 / Math.PI;

            //Поворачиваем к цели
            if ((targetX > actualX) && (targetY > actualY)) //Если оба целевых значения больше текущих
            {
                turnCornerVer3(esoWindow, cAdress, processHandle, Convert.ToString(270 - cornerA));
                tStatus = TargetStatus.X_bigger_Y_bigger;
            }

            if ((targetX < actualX) && (targetY < actualY)) //Если оба целевых значения меньше текущих
            {
                turnCornerVer3(esoWindow, cAdress, processHandle, Convert.ToString(90 - cornerA));
                tStatus = TargetStatus.X_less_Y_less;
            }

            if ((targetX > actualX) && (targetY < actualY)) //Если целевой X больше, а Y - меньше
            {
                turnCornerVer3(esoWindow, cAdress, processHandle, Convert.ToString(270 + cornerA));
                tStatus = TargetStatus.X_bigger_Y_less;
            }

            if ((targetX < actualX) && (targetY > actualY)) //Если целевой X меньше, а Y - больше
            {
                turnCornerVer3(esoWindow, cAdress, processHandle, Convert.ToString(90 + cornerA));
                tStatus = TargetStatus.X_less_Y_bigger;
            }

            //Бежим к цели
            while (ReachTarget(targetX, actualX, targetY, actualY))
            {
                if (Form1.stopAction)
                {
                    break;
                }
                if (timeCount > 30000)
                {
                    Form1.stopAction = true;
                    break;
                }
                if (isFight())
                {
                    esoWindow.SendMessage(hWnd, (uint)WindowMessages.WM_KEYUP, new IntPtr((ushort)Keys.W), new IntPtr(0));
                    Fight(esoWindow, hWnd); //Если в бою, то воюем.
                }
                esoWindow.SendMessage(hWnd, (uint)WindowMessages.WM_KEYDOWN, new IntPtr((ushort)System.Windows.Forms.Keys.W), new IntPtr(0));
                Thread.Sleep(150);
                timeCount = timeCount + 150;
                resultX   = esoWindow.ReadProcessMemory(processHandle, new IntPtr(addrX), bufferX, (uint)bufferX.Length, out bytesRead);
                resultY   = esoWindow.ReadProcessMemory(processHandle, new IntPtr(addrY), bufferY, (uint)bufferY.Length, out bytesRead);
                actualX   = BitConverter.ToDouble(bufferX, 0);
                actualY   = BitConverter.ToDouble(bufferY, 0);
            }

            esoWindow.SendMessage(hWnd, (uint)WindowMessages.WM_KEYUP, new IntPtr((ushort)Keys.W), new IntPtr(0));
            if (!Form1.stopAction && cTarget != null)
            {
                if (!cTarget.Equals(""))
                {
                    turnCornerVer3(esoWindow, cAdress, processHandle, cTarget);
                }
            }
        }
예제 #7
0
        public void turnCornerVer2(EsoWindow esoWindow, String addrText, IntPtr processHandle, String targetCorner)
        {
            Point cursorPosition = new Point();

            esoWindow.GetCursorPos(out cursorPosition);

            var    buffer = new byte[8];
            var    addr   = long.Parse(addrText, NumberStyles.HexNumber);
            IntPtr bytesRead;
            var    result = esoWindow.ReadProcessMemory(processHandle, new IntPtr(addr), buffer, (uint)buffer.Length, out bytesRead);

            NumberFormatInfo nfi = new NumberFormatInfo();

            nfi.NumberDecimalSeparator = ",";                           //Задаем запятую, как разделитель между числом и дробной частью

            double trgCorner     = Convert.ToDouble(targetCorner, nfi); //Целевой угол
            double acturalCorner = BitConverter.ToDouble(buffer, 0);    //текущий угол
            double previousCorner;                                      //Предыдущее значение угла
            double targetDistance;                                      //Количество градусов, на которое нужно повернуть взгляд
            double coveredDistance;                                     //пройденное количесто градусов угла

            if (trgCorner > acturalCorner)                              //Целевой угол больше текущего
            {
                if ((trgCorner - acturalCorner) < 180)                  //Если разница меньше 180, то поворачиваем по часовой стрелке
                {
                    result          = esoWindow.ReadProcessMemory(processHandle, new IntPtr(addr), buffer, (uint)buffer.Length, out bytesRead);
                    previousCorner  = BitConverter.ToDouble(buffer, 0);
                    targetDistance  = trgCorner - acturalCorner;
                    coveredDistance = 0;
                    while (targetDistance > coveredDistance)
                    {
                        if (Form1.stopAction)
                        {
                            return;
                        }
                        esoWindow.SetCursorPos(cursorPosition.X - 3, cursorPosition.Y);
                        result          = esoWindow.ReadProcessMemory(processHandle, new IntPtr(addr), buffer, (uint)buffer.Length, out bytesRead);
                        coveredDistance = BitConverter.ToDouble(buffer, 0) - previousCorner + coveredDistance;
                        previousCorner  = BitConverter.ToDouble(buffer, 0);
                        Thread.Sleep(10);
                    }
                }
                else //Если разница больше 180, то поворачиваем против часовой стрелки
                {
                    result          = esoWindow.ReadProcessMemory(processHandle, new IntPtr(addr), buffer, (uint)buffer.Length, out bytesRead);
                    previousCorner  = BitConverter.ToDouble(buffer, 0);
                    targetDistance  = CornerDistance(trgCorner, acturalCorner);
                    coveredDistance = 0;
                    while (targetDistance > coveredDistance)
                    {
                        if (Form1.stopAction)
                        {
                            return;
                        }
                        esoWindow.SetCursorPos(cursorPosition.X + 3, cursorPosition.Y);
                        result          = esoWindow.ReadProcessMemory(processHandle, new IntPtr(addr), buffer, (uint)buffer.Length, out bytesRead);
                        coveredDistance = CornerDistance(BitConverter.ToDouble(buffer, 0), previousCorner) + coveredDistance;
                        previousCorner  = BitConverter.ToDouble(buffer, 0);
                        Thread.Sleep(10);
                    }
                }
            }
            else //Целевой угол меньше текущего
            {
                if ((acturalCorner - trgCorner) < 180) //Если разница меньше 180, то поворачиваем против часовой стрелки
                {
                    result          = esoWindow.ReadProcessMemory(processHandle, new IntPtr(addr), buffer, (uint)buffer.Length, out bytesRead);
                    previousCorner  = BitConverter.ToDouble(buffer, 0);
                    targetDistance  = acturalCorner - trgCorner;
                    coveredDistance = 0;
                    while (targetDistance > coveredDistance)
                    {
                        if (Form1.stopAction)
                        {
                            return;
                        }
                        esoWindow.SetCursorPos(cursorPosition.X + 3, cursorPosition.Y);
                        result          = esoWindow.ReadProcessMemory(processHandle, new IntPtr(addr), buffer, (uint)buffer.Length, out bytesRead);
                        coveredDistance = previousCorner - BitConverter.ToDouble(buffer, 0) + coveredDistance;
                        previousCorner  = BitConverter.ToDouble(buffer, 0);
                        Thread.Sleep(10);
                    }
                }
                else //Если разница больше 180, то поворачиваем по часовой стрелке
                {
                    result          = esoWindow.ReadProcessMemory(processHandle, new IntPtr(addr), buffer, (uint)buffer.Length, out bytesRead);
                    previousCorner  = BitConverter.ToDouble(buffer, 0);
                    targetDistance  = CornerDistance(acturalCorner, trgCorner);
                    coveredDistance = 0;
                    while (targetDistance > coveredDistance)
                    {
                        if (Form1.stopAction)
                        {
                            return;
                        }
                        esoWindow.SetCursorPos(cursorPosition.X - 3, cursorPosition.Y);
                        result          = esoWindow.ReadProcessMemory(processHandle, new IntPtr(addr), buffer, (uint)buffer.Length, out bytesRead);
                        coveredDistance = CornerDistance(BitConverter.ToDouble(buffer, 0), previousCorner) + coveredDistance;
                        previousCorner  = BitConverter.ToDouble(buffer, 0);
                        Thread.Sleep(10);
                    }
                }
            }
        }