Exemplo n.º 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 - коэффициент, полученный эксперементальным расчетным путем
            }
        }
Exemplo n.º 2
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);
                }
            }
        }
Exemplo n.º 3
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);
                    }
                }
            }
        }