yaodnako
Продвинутый
- Сообщения
- 120
- Репутация
- 78
Re: Нубский Майнер Бот(замкнутая вермишель)
Версия 2.20
Решил потихоньку переделывать в умного бота.
1.изменил полностью цикл майна(функция mine()).теперь майн производится по принципу - считал все нужные данные,выполнил действие на основании этих данных.
2.изменил представление лога на более удобное.Добавил расчет длительности цикла,счетчик количества сброса лута,лог зависания дронов.
Думаю ,скоро сделаю бот полностью таким - сбор всех данных ->их анализ->действие(это все в цикле).может сделаю два независимых модуля обменивающихся информацией.
Версия 2.20
Решил потихоньку переделывать в умного бота.
1.изменил полностью цикл майна(функция mine()).теперь майн производится по принципу - считал все нужные данные,выполнил действие на основании этих данных.
2.изменил представление лога на более удобное.Добавил расчет длительности цикла,счетчик количества сброса лута,лог зависания дронов.
Думаю ,скоро сделаю бот полностью таким - сбор всех данных ->их анализ->действие(это все в цикле).может сделаю два независимых модуля обменивающихся информацией.
Код:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=..\icons\иконки устройств\1013.ico
#AutoIt3Wrapper_UseX64=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Date.au3>
Opt("TrayIconDebug", 1)
Opt("PixelCoordMode", 2) ;Отсчет координат пикселей от левого верхнего угла клиентской части окна
Opt("MouseCoordMode", 2) ;Отсчет координат мыши от левого верхнего угла клиентской части окна
Opt ("MouseClickDelay", 20);Задаем интенсивность нажатия мыши.
Opt ("SendKeyDownDelay", 100)
HotKeySet ("{`}","_exit");задаем горячую клавишу остановки скрипта
HotKeySet ("{\}","_pause")
WinMove("EVE", "", -3, -27)
;+++ Шапка +++
Global $Belt;состояние возможности майнить на белте.
Global $CargoChk;переменная заполненности трюма
Global $10kmChk;переменная проверки 10км
Global $AsterChk;переменная наличия астероидов на буке
Global $LockChk;переменная лока
Global $StripChk;переменная активности стрипов
Local $StrpTimer;переменная таймера работы стрипа
Global $LootCount=0;счетчик количества сбросов лута за время работы бота.
Global $DrChk;счетчик для вычисления кликов мышью.если только прилетели на белт полный набор кликов для запуска дронов и активации майна ими.
Global $pause
Global $timer = TimerInit();таймер
Dim $hour,$min,$sec
Global $y=133;координата Y в меню бук.
Global $x;Номер буки
checkbeltnum()
IniWrite("D:\eve.ini","Script", _NowCalc(),"Start,Belt №" & $x)
IniWrite("D:\eve.ini","Mined",_NowCalc(),"начало работы")
IniWrite("D:\eve.ini","Status",_NowCalc(),"начало работы")
IniWrite("D:\eve.ini","Error",_NowCalc(), "начало работы")
#cs
справка по белтам цифра - значение $y`
1-133 2-149 3-165
4-181 5-197 6-213
7-229 8-245 9-261
10-277 11-293 12-309
#ce
;===================================
;;++++++++++ Ниже основа ;++++++++++
while $y<454
WinActivate("EVE")
WinWaitActive("EVE");активируем окно с евой,чтобы покорить еву ботством...:)
Global $CicleTime = TimerInit()
Undock();андокаемся - пока не пройдет проверка повторяем...
Sleep (1000)
checkbeltnum();
ConvoCheck();проверка конво
WarpToBelt();плывем к белту - ломимся,пока не пройдут проверки.
Sleep (500)
ConvoCheck();проверка конво
Sleep (1000)
Mine();здесь процесс добычи с проверками на заполненность трюма,лока,конво.
sleep (300)
Dock();летим домой
OreToHome();сбрасываем руду;проверка осталось ли че? :) Если осталось - повторить.
ConvoCheck();проверка конво
Wend
_exitgame()
_exit()
;============================Конец основы================================
;++++++++++ завершение работы скрипта + время работы скрипта
Func _exit()
ToolTip("Завершение скрипта",0,0)
Sleep(200)
_TicksToTime(Int(TimerDiff($timer)),$hour,$min,$sec)
$ScriptWorked=StringFormat("%02d:%02d:%02d", $hour,$min,$sec)
IniWrite("D:\eve.ini","Script",_NowCalc(), "Stop,Belt №" & $x &" -- "& "Время работы: "& $ScriptWorked & ", лут сбросил: " & $LootCount&" раз." )
IniWrite("D:\eve.ini","Mined",_NowCalc(), "конец работы")
IniWrite("D:\eve.ini","Status",_NowCalc(), "конец работы")
IniWrite("D:\eve.ini","Error",_NowCalc(), "конец работы" )
Exit
EndFunc
;=================================
;++++++++++ пауза
Func _pause()
$pause=$pause+1
while $pause=1
ToolTip("Пауза...",0,0)
Sleep(200)
WEnd
ToolTip("продолжаем...",0,0)
Sleep(200)
$pause=0
EndFunc
;=================================
;++++++++++ функция полета на белт
Func WarpToBelt()
Do
ToolTip ("Пытаемся варпнутся к белту",0,0)
MouseClick ("left",62, 47,1,20);клик на треугольник
MouseMove(120, 52,20);плавно ведем мышь по меню
MouseMove(120, 133,20)
MouseMove(240, 133,20)
;доводим до списка бук белтов - эти первые 3 операции с мышью
;для всех белтов одинаковы
MouseMove(240, $y,20);доводим до 1го белта в списке(разница в 16 пикселей)
MouseClick("left",340, $y,1,20);
PixelSearch(839, 7,847, 15,0x868686,10)
If Not @error Then
Send("{F11}")
EndIf
Sleep (8000) ;летим ждем надпись "Гипердрайв активен"
Until CheckWarp()=0;повторяем попытки улететь на белт,пока не пройдет проверка на варп к белту
WinActivate("EVE")
WinWaitActive("EVE")
Do
Sleep(100)
ToolTip ("летим к белту",0,0)
Until CheckWarp()=1;повторяем надпись,пока не пройдет проверка на окончание варпа.
Sleep(4000);необходим,чтобы успели отсортироваться астеры,иначе улетит с белта.
$DrChk=0
EndFunc
;=============================
;++++++++++ функция проверки окончания варпа
Func CheckWarp()
PixelSearch (425, 527,425, 527,0xBCBCBC,10);проверяется левый верхний пиксель буквы Г в слове Гиперпрыжок :)пока он есть мы в гиперпрыжке.
If @error Then
Return 1
Else
Return 0
EndIf
EndFunc
;=============================
;++++++++++ выход из игры - до этого док и сброс лута.
Func _exitgame();если белты с дистанцией менее 10км к астероиду кончились - выйти из игры.
WinActivate("EVE")
WinWaitActive("EVE")
Dock()
OreToHome()
Send ("{esc}")
sleep (4000)
MouseClick ("left",851, 606,1,20)
IniWrite("D:\eve.ini","Game Exit - кончились буки",_NowCalc(),"Stop,Belt №" & $x)
Return
EndFunc
;======================================
;++++++++++ Полет домой если заполнен трюм
Func Dock()
WinActivate("EVE")
WinWaitActive("EVE")
Dronecontrol()
;если трюм заполнился - летим домой
Do
MouseClick ("left",62, 47,1,20);клик на треугольник`
MouseMove (123, 56,20);аккуратно ведем мышь
MouseMove (123, 157,20);дом
MouseMove (223, 157,20);додвигаем до начала меню дом
MouseClick ("left",223, 207,1,20);4й пункт 1й буки
sleep (6000);примерное время до появления надписи "Гипердрайв активен"
ToolTip ("Начинаю варпаться домой",0,0)
Sleep(200)
Until CheckWarp()=0;повторяем процедуру,пока не пройдем проверку на процесс варпа
Do
ToolTip ("Варп домой",0,0)
Until CheckWarp()=1
Do
ToolTip ("Лечу в док...",0,0)
Until CheckSpace()=0
ToolTip ("Мы дома",0,0)
Sleep(200)
EndFunc
;======================================
;++++++++++ вылет со станции.
Func Undock()
WinActivate("EVE")
WinWaitActive("EVE")
Do
ToolTip("Вылетаем ботить :)",0,0)
MouseClick("left",17, 735);щелчок на андок
Sleep(200)
ToolTip ("я на станции!",0,0)
Until CheckSpace()=1;спамить андок и показывать надпись каждую секунду,пока не появимся в космосе.
EndFunc
;======================================
;++++++++++ проверка на космос
Func CheckSpace()
WinActivate("EVE")
WinWaitActive("EVE")
PixelSearch(737, 122,737, 122,0xCFCFCF,10);ищем треугольник овервью
if not @error Then ;- мы находимся в космосе.
ToolTip ("я в космосе",0,0)
Sleep(200)
return 1
Else
return 0
EndIf
EndFunc
;======================================
#cs
#ce
;++++++++++ умная версия бурения...
Func Mine()
While 1
AllChecks()
Select
Case $CargoChk=1
ExitLoop
Case $AsterChk=0;если белт не ботабельный,то летим дальше...
$y=$y+16
Dronecontrol()
If $y>454 Then
_exitgame()
_exit()
EndIf
WarpToBelt()
Case $AsterChk=1;если белт ботабельный,то...
If $LockChk=0 Then;если нет лока,то...
StripChk("Off")
Chk10km()
If $10kmChk=1 Then;если астероид ближе 10км
LockTarget();лочим
StartDrone();дроны атаке
EndIf
If $10kmChk=0 Then;если астеры ближе 10 км кончились.
$y=$y+16
Dronecontrol();забираем дронов
If $y>454 Then;проверяем кончились ли все 21 буки.если да,то...
_exitgame();выходим из игры
_exit();завершаем скрипт
EndIf
WarpToBelt();если не кончились буки - летим на следующую.
EndIf
EndIf
If $LockChk=1 Then;если лок есть,то...
If $StripChk=1 Then;если стрипы пашут,проверяем прошло ли от 25-30 сек.если прошло - остановить стрипы.
$RndStrp=Random(30000,35000)
StripChk("On")
If TimerDiff($StrpTimer)>$RndStrp Then
StripChk("On");проверка для всех стрипов,так как активность $StripChk проверяется по первому стрипу- иногда нужно выровнять.
Send ("{f1}")
Send ("{f2}")
Send ("{f3}")
Sleep(1000)
EndIf
EndIf
If $StripChk=0 Then;сделано 2 проверки.
$StrpTimer = TimerInit();активируем таймер,для проверки сколько работают стрипы.
Sleep(500)
Send ("{f1}")
Send ("{f2}")
Send ("{f3}")
MouseMove(774, 183);возвращаем мышку ближе к след.клику,чтобы потом не тратить на это время.
;Sleep(2300)
EndIf
EndIf
EndSelect
WEnd
EndFunc
;=================================================
;++++++++++ стадия майна 1 - лок,ссылка на проверку расстояния+активация дронов
Func LockTarget()
MouseClick ("left",879, 76);жмем кнопку лока цели
ToolTip("Лочу цель",0,0)
;ждем окончания лока
EndFunc
Func StartDrone()
If $DrChk=0 Then
MouseClick ("right",779, 628);меню дронов
sleep(500)
MouseClick ("left",806, 654);запустить дронов
Sleep (3000)
MouseClick ("right",779, 648);меню дронов
sleep(500)
MouseClick ("left",808, 695);непрерывно разрабатывать
sleep(100)
; MouseMove(774, 183);возвращаем мышку ближе к след.клику,чтобы потом не тратить на это время.
$DrChk=$DrChk+1
Else
MouseClick ("right",779, 648);меню дронов
sleep(2500)
MouseClick ("left",808, 695);непрерывно разрабатывать
sleep(100)
; MouseMove(774, 183);возвращаем мышку ближе к след.клику,чтобы потом не тратить на это время.
EndIf
EndFunc
;===========================
;++++++++++ кусок сброса лута
Func OreToHome();функция сбрасывания руды на станцию
sleep (3000)
Do
ToolTip("Cбрасываю добычу",0,0)
Sleep(200)
MouseClick("left",150, 597,1,20);иногда происходит лаг и вся руда не вытаскивается,поэтому решил воткнуть костылик
Send ("^a")
MouseClickDrag ("left",63, 665,83, 366,20)
Sleep (2000)
Until FullEmptyCheck()=1
_TicksToTime(Int(TimerDiff($CicleTime)),$hour,$min,$sec);вычисление времени цикла
Local $CicleWorked=StringFormat("%02d:%02d:%02d", $hour,$min,$sec);вычисление времени цикла
IniWrite("D:\eve.ini","Mined",_NowTime(5), "сброшен лут" & " Бука №" & $x & " Время цикла: "& $CicleWorked)
$LootCount=$LootCount+1;счетчик сброшенного лута
EndFunc
;================================
;++++++++++ проверка - сброшен лут или нет.
Func FullEmptyCheck()
PixelSearch (186, 618,186, 618,0x041115,10)
If @error Then
ToolTip ("лут еще есть!",0,0)
Sleep(200)
Else
ToolTip ("лут сброшен...",0,0)
Sleep(200)
return 1
EndIf
EndFunc
;=================================
;++++++++++ узнаем номер белта по текущей координате y
Func checkbeltnum()
Select
Case $y=133
$x=1
Case $y=149
$x=2
Case $y=165
$x=3
Case $y=181
$x=4
Case $y=197
$x=5
Case $y=213
$x=6
Case $y=229
$x=7
Case $y=245
$x=8
Case $y=261
$x=9
Case $y=277
$x=10
Case $y=293
$x=11
Case $y=309
$x=12
Case $y=325
$x=13
Case $y=341
$x=14
Case $y=357
$x=15
Case $y=373
$x=16
Case $y=389
$x=17
Case $y=405
$x=18
Case $y=421
$x=19
Case $y=437
$x=20
Case $y=453
$x=21
EndSelect
EndFunc
;======================
;++++++++++ контроль возврата дронов
Func Dronecontrol()
Send ("!{2}")
;PixelSearch(1009, 644,1009, 644,0x010203,5);проверка открыто ли меню.когда не раскрыто - в этом пикселе точка черного цвета.
;If Not @error Then
MouseClick ("left",779, 648);раскрыть меню для анализа состояния
; sleep(100)
;EndIf
While 1
Sleep (1000)
PixelSearch(938, 666,959, 669,0x404040)
If @error Then
ExitLoop
EndIf
ToolTip("Ждем дрончегов!",0,0)
PixelSearch(844, 664,920, 671,0x00DC00,10)
;иногда после нажатия назначенной комбинации клавиш для возврата дронов,они просто прилетают к кораблю со статусом - не используется.проверяем.
If Not @error Then
ToolTip("сцуко зависли!",0,0)
Sleep(2000)
Send ("!{2}");если дроны висят,вместо того,чтобы возвратиться - послать команду еще раз.
IniWrite("D:\eve.ini","Error",_Nowtime(5), "Дроны зависли" & " Бука №" & $x)
EndIf
WEnd
ToolTip("Дроны вернулись!",0,0)
MouseClick ("left",779, 648);закрыть меню.можно раскомментить вначале функции проверку на раскрытость.проще просто закрыть.
Sleep (600)
EndFunc
;================
;++++++++++ контроль стрипов
Func StripChk($StrStatus)
Select
Case $StrStatus = "On"
PixelSearch(612, 650,612, 650,0x000000);проверка активности 1го стрипа
If Not @error Then
;If $do=1 Then
ToolTip ("стрип 1 не включился - активирую...",0,0)
IniWrite("D:\eve.ini","Error",_Nowtime(5), "противофаза - стрип 1 не включился" & " Бука №" & $x)
Send ("{f1}")
Sleep (500)
;EndIf
EndIf
PixelSearch(664, 650,664, 650,0x000000)
If Not @error Then
;If $do=1 Then
ToolTip ("стрип 2 не включился - активирую...",0,0);проверка активности 2го стрипа
IniWrite("D:\eve.ini","Error",_Nowtime(5), "противофаза - стрип 2 не включился" & " Бука №" & $x)
Send ("{f2}")
Sleep (500)
;EndIf
EndIf
PixelSearch(714, 650,714, 650,0x000000);проверка активности 3го стрипа
If Not @error Then
;If $do=1 Then
ToolTip ("стрип 3 не включился - активирую...",0,0)
IniWrite("D:\eve.ini","Error",_Nowtime(5), "противофаза - стрип 3 не включился" & " Бука №" & $x)
Send ("{f3}")
Sleep (500)
;EndIf
EndIf
Case $StrStatus = "Off"
PixelSearch(612, 650,612, 650,0x000000);проверка на выключение 1го стрипа
If @error Then
;If $do=1 Then
ToolTip ("стрип 1 не выключился - выключаю...",0,0)
IniWrite("D:\eve.ini","Error",_Nowtime(5), "противофаза - стрип 1 не выключился" & " Бука №" & $x)
Send ("{f1}")
Sleep (500)
;EndIf
EndIf
PixelSearch(664, 650,664, 650,0x000000)
If @error Then
;If $do=1 Then
ToolTip ("стрип 2 не выключился - выключаю...",0,0);проверка на выключение 2го стрипа
IniWrite("D:\eve.ini","Error",_Nowtime(5), "противофаза - стрип 2 не выключился" & " Бука №" & $x)
Send ("{f2}")
Sleep (500)
;EndIf
EndIf
PixelSearch(714, 650,714, 650,0x000000);проверка на выключение 3го стрипа
If @error Then
;If $do=1 Then
ToolTip ("стрип 3 не выключился - выключаю...",0,0)
IniWrite("D:\eve.ini","Error",_Nowtime(5), "противофаза - стрип 3 не выключился" & " Бука №" & $x)
Send ("{f3}")
Sleep (500)
;EndIf
EndIf
EndSelect
EndFunc
;=======================
Func Chk10km()
WinActivate("EVE")
WinWaitActive("EVE")
MouseClick("left",774, 183,1,20)
Sleep (1200)
PixelSearch (828, 40,830, 44,0x8F8F8F,10);проверка диапазона пикселей между 2х значным XX числом километров и слова км.на наличие серого оттенка цвета(цвет чисел).
If not @error Then;PixelSearch (836, 40,840, 44,0x8F8F8F,10) если появился нужный цвет в диапазоне,значит мы уже ближе 10км и представление цифр изменилось на XXXX м.
ToolTip("Ближе 10км",0,0)
Sleep (600)
$10kmChk=1
Return 1
Else
PixelSearch (943, 74,951, 87,0x8E8E8E,10)
If @error Then
ToolTip("Белт пустой!Летим дальше.",0,0)
Sleep (500)
$10kmChk=0
Return 0
Else
PixelSearch (836, 40,840, 44,0x8F8F8F,10)
If @error Then
ToolTip("Ближе 10км",0,0)
Sleep (600)
$10kmChk=1
Return 1
EndIf
EndIf
ToolTip("нет астероидов ближе 10км - меняю белт № " & $x & " на белт №" & ($x+1),0,0)
Sleep(600)
$10kmChk=0
Return 0
EndIf
EndFunc
Func AllChecks()
WinActivate("EVE")
CargoCheck()
LockCheck()
StrpChk()
AsterChk()
ConvoCheck()
ToolTip("Карго="&$CargoChk&"\Астероиды="&$AsterChk&"\Лок="&$LockChk&"\Стрипы="&$StripChk&"\Белт №"&$x,0,0)
EndFunc
Func StrpChk()
PixelSearch(612, 650,612, 650,0x000000)
If Not @error Then
$StripChk=0
Return
Else
$StripChk=1
Return
EndIf
EndFunc
Func AsterChk()
PixelSearch(784, 174,883, 183,0xB1B1B1,10)
If Not @error Then
$AsterChk=1
Return
Else
$AsterChk=0
Return
EndIf
EndFunc
;++++++++++ проверка цели на лок
Func LockCheck()
PixelSearch(621, 80,636, 80,0x404040,10)
If not @error Then
$LockChk=1
Return 1
Else
Sleep (600)
$LockChk=0
return 0
EndIf
EndFunc
;===============================
;++++++++++ проверка на заполненность трюма
Func CargoCheck()
;WinActivate("EVE")
Sleep (200)
PixelSearch (279, 617,279, 617,0x005067,10);проверка на наличие синего цвета.если есть,то заполнен.
If Not @error Then
ToolTip("Трюм наполнился",0,0)
Sleep(200)
$CargoChk=1
Return 1
Else
$CargoChk=0
Return 0
EndIf
EndFunc
;==================================
;++++++++++ функции проверки конво
Func ConvoCheck()
If Check1()=1 Or Check2()=1 Or Check3()=1 Then ;3 проверки на конво,если вдруг срабатывает любая- принтскрин и загрузка громкой мелодии :)
ShellExecute ("D:\Autoit\proekts\1.mp3")
;_exitgame()
;_exit()
EndIf
EndFunc
Func Check1()
PixelSearch (303, 172,819, 581,0xFFA600,10)
If Not @error Then
IniWrite("D:\eve.ini","Convo",_NowCalc(), "АААА конво был бляяяя!!!сработала проверка 1")
Send ("{PRINTSCREEN}")
Return 1
Else
Return 0
EndIf
EndFunc
Func Check2()
PixelSearch (303, 172,819, 581,0x6284AF,10)
If Not @error Then
IniWrite("D:\eve.ini","Convo",_NowCalc(), "АААА конво был бляяяя!!!сработала проверка 2")
Send ("{PRINTSCREEN}")
Return 1
Else
Return 0
EndIf
EndFunc
Func Check3()
PixelSearch (303, 172,819, 581,0x0064C0,10)
If Not @error Then
IniWrite("D:\eve.ini","Convo",_NowCalc(), "АААА конво был бляяяя!!!сработала проверка 3")
Send ("{PRINTSCREEN}")
Return 1
Else
Return 0
EndIf
EndFunc
;========================