//Воюем 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); } }
//Рыбачим 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)); } }
//Собираем ресурс 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)); }
//Заготовка под бег 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); } } }