#pragma compile(Out, EVE - Venture.exe)
#pragma compile(Icon, ..\Pic\EVE.ico)
#pragma compile(FileVersion, 19.06.24.0)
#include <GuiConstants.au3>
#include <ComboConstants.au3>
#include <TabConstants.au3>
#include <StaticConstants.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ScreenCapture.au3>
#include <Misc.au3>
#include <Array.au3>
#include <File.au3>
;~ #include <BlockInputEx.au3>
;Все горячие клавиши клиента EVE убраны с кнопок букв потому что возникают проблемы при переключении рус./англ.
HotKeySet('{insert}','zabort') ;Устанавливает сброс руды за борт
HotKeySet('^{home}','_Obu4Glubok');CTRL+HOME Глубокое обучение с картинками
HotKeySet('{home}','_Obu4Bistroe');Быстрое обучение без картинок (сразу же присваивает действие к ситуации)
HotKeySet('^+{home}','_Obu4Param')
HotKeySet('{space}','pausa')
HotKeySet('{End}','eksit') ;Закрытие бота
HotKeySet('{tab}','podskaz') ;Выводит окошко с подсказками по омновным хоткеям
HotKeySet('^{tab}','_LogPokaz') ;Сбрасывает логи в .txt файл
Opt('PixelCoordMode', 2) ;1=absolute, 0=relative, 2=client
Opt('MouseCoordMode', 2) ;1=absolute, 0=relative, 2=client
Opt('MouseClickDelay', 200) ;Интервал между кнопками мыши
Opt('SendKeyDelay', 150) ;Интервал между кнопками клавиатуры
Opt('MouseClickDownDelay', 150);Время зажима нопок мыши
Opt('SendKeyDownDelay',200) ;Время зажима кнопок клавиатуры
Global $ps,$pd,$ob,$zab,$i,$j,$a,$n=0,$IzV, $M1,$M2 ;Переключатели счетчики
Global $GUIobu4,$GUIobVektori,$GUIobu4Scrn,$massivi,$VektoriObu4[1],$knp_pos=18 ;GUI
Global $dstvstr,$vector,$num,$4t_str,$nn,$var_string,$var_star,$Arr_Del[1] ;Векторы
Global $nOb,$Y
Global $tM1,$tM2,$timer,$tMining ;Таймеры
;------------ Массивы с датчиками ------------- Для работы датчиков переключить EVE в ОКНО ФИКСИРОВАННОГО РАЗМЕРА
Global $Main[5]= ['',1080,1131,957,0x888985] ;МАЙНЕРЫ (x1,x2,y,col)самое начало зеленой полоски вокруг майнера
Global $Cel[5]= ['',1780,78,0xFF1212,0xDBDBDB] ;ЦЕЛЬ (x,y,col,col) Красное перекрестие прицела- захвачена Белое перекрестие прицела - есть цель на расстоянии
Global $HP[7]= ['',1000,926,0xF6F6F6, 913, 929,0xE1E5DD] ;ХП (x,y,col x,y,col) Верхняя полукруглая белая полоска её правая и левая третья часть
Global $Dok[7]= ['',1769, 235,0xBABA03, 1869,132,0xE5E500] ;ДОК (x,y,col ОбычСтанции)(x,y,col Цитадель)
Global $Gruz[5]= ['',1760,795,0x004F66,0x00A7A7] ;ГРУЗ (x1,y1,x2,y2,col,colВесьГруз) Синяя полоска трюма /светлосиняя когда выбираю весь груз квадратик 4x4
Global $Orbit[4]=['',1730,78,0xFFFFFF] ;Орбита (x,y,col) белая Планета со стрелочкой вокруг
Global $Varp[4]= ['',899,792,0xBFBFBF] ;Варп (x,y,col) Верхний лев угол надписи ВАРП появляется надпись
Global $Ulica[4]=['',884,891,0x10CE10] ;Улица (x,y,col)Зеленый светофор
Global $Dist[4]= ['',1811,50,0xB5B5B5] ;Дистанция (x,y,col)Уголок буквы М в расстоянии цели в прицеле
Global $Aster[4]=['',1679,209,0x9F9F9E] ;Астеройд(x1,y1,x2,y2,col) Квадрат 8х8
;--------------------------------------------------------------------------------------------------------
Global $ArrLog[1] ;Массив с данными логирования
Global $AsterPos[7]=['',308,288,268,248,228,210] ;Позиция астеройдов в списке по Y
Global $Dn[15]=['','Майн1','Майн2','НаСтанц','ВыделГруз','ГрузНаСклад','ЗаБорт','ИзДока','Кастерам','ВыклМ','КлацАстерМышью','ПоОрбите','ПодкачЩит','НИЧЕГО','Пищать']
Global $knop[15]=['','1','2','3','4','5','6','7','8','9','0','.','+','*','/']
Global $spdMos=7 ;Скорость движения мыши
;============================================================== Вычисление пути к папке
Global $path=StringSplit(@ScriptDir,'\');Записывает в массив путь к папке скрипта (каждую папку в отдельный элемент)
Global $srptpic=_ArrayToString($path, "\",1, UBound($path)-2)&'\Pic\';Путь к папке с картинками
;==============================================================
$GuiOkno=GUICreate('БТ', 200, 200, @DesktopWidth-200, 539, $WS_POPUP ,$WS_EX_TOPMOST);Окно основного GUI
$_Deistv=GUICtrlCreateInput('',0,0,200,18)
$Fon = GUICtrlCreatePic($srptpic&'Фон.jpg', 0, 15, 200, 200)
$PicZabort=GUICtrlCreatePic('', 1, 41, 29, 20)
$PicAster=GUICtrlCreatePic('', 1, 62, 29, 20)
$PicGruzOkno=GUICtrlCreatePic('', 1, 83, 36, 35)
$PicPausa=GUICtrlCreatePic('', 1, 119, 31, 35)
$PicTarg=GUICtrlCreatePic($srptpic&'Цели нет.jpg', 96, 17, 82, 19)
$PicMiner1=GUICtrlCreatePic($srptpic&'Майнер выкл.jpg', 82, 36, 53, 55)
$PicMiner2=GUICtrlCreatePic($srptpic&'Майнер выкл.jpg', 140, 36, 53, 55)
$PicHP=GUICtrlCreatePic($srptpic&'ХП есть.jpg', 58, 91, 142, 46)
$PicGruz=GUICtrlCreatePic($srptpic&'Груз есть.jpg', 58, 137, 142, 16)
$PicDOK=GUICtrlCreatePic('', 67, 153, 64, 37)
$PicVarp=GUICtrlCreatePic('', 82, 153, 97, 40)
$PicTimer=GUICtrlCreatePic('', 60, 46, 22, 26)
$picDist=GUICtrlCreatePic('', 180, 17, 16, 13)
$picVopros=GUICtrlCreatePic('', 1, 153, 16, 13)
$PicTudaOTtuda=GUICtrlCreatePic('', 1, 15, 44, 44)
GUISetState(@SW_SHOW,'БТ')
$File=FileOpen('МайнингМассивы.txt') ;Переписывает в массив векторы из TXT
Global $DT[1][2]
For $i = 1 To _FileCountLines($File)
_ArrayAdd($DT,FileReadLine($File,$i),0,',') ;Векторы в нулевую ячейку Действия в 1 ячейку (Начиная с нолевой колонки разделитель-запятая)
Next
FileClose($File)
;-------------------- Сравнение массива векторов и картинок в папке СКРИН
Global $ArrScrn[1];Объявляем массив картинок
$ArrScrn=_FileListToArray(@ScriptDir&"\Scrn") ;Перепись имен картинок из папки Scrn в массив
If @error=4 Then MsgBox(0,"","Файлы в Scrn не найдены.")
Global $n=0
For $i = 1 To UBound($ArrScrn)-1 ;Добавление векторов которых нет в массиве но есть в картинка (с др. компьютера)
_ArraySearch($DT,StringTrimRight($ArrScrn[$i],4),1)
If @error Then ;если в массиве векторов нет картинки то добавляем её к массиву векторов
$n+=1
_ArrayAdd($DT,StringTrimRight($ArrScrn[$i],4))
EndIf
Next
If $n>0 Then MsgBox(0,'','Добавлено новых векторов из картинок='&$n)
;=========================================================================================
WinActivate('EVE - ') ;Выводит окно ЕВЫ на передний план чтобы не переключать руками окна
While 1 ;Основной цикл в котором прокручиваются все датчики действия и состояния
Dat4() ;Берет информацию о состоянии датчиков
If $ps=1 Then ;Бот в работе
If TimerDiff($timer)>20*60000 Then Beep(500,500) ;Если больше 20 мин. не летал на базу начинает пищать (для ночного режима)
deistv() ;Выполняет действия которые сопоставимы с вектором датчиков в данный момент
If WinExists('Спонсируемый сеанс') Then ControlClick('Спонсируемый сеанс','OK',342) ;Убирает окно спонсорского показа от TeamWievera когда оно появляется ;342 ID кнопки ОК
EndIf
WEnd
Func _Logirovanie($lg)
Switch $lg
Case 1 ;Обычное смена действий
_ArrayAdd($ArrLog,@HOUR&':'&@MIN&' '&$DT[$num][1]&' '&$var_string)
Case 2 ;Выгрузка на склад
_ArrayAdd($ArrLog,' =============== Время цикла '&TimerDiff($timer)/1000/60&' Минут')
EndSwitch
If UBound($ArrLog)>500 Then _LogSbros() ;Если превышает 500 лог записей в массиве то сбрасывает в .txt файл
EndFunc
Func _LogSbros()
$File=FileOpen('Log.txt',1);Переписывает в текстовый файл все танные из массива лога и очищает этот массив
FileWrite($File,@CRLF&_ArrayToString($ArrLog,@CRLF,1))
FileClose($File)
ReDim $ArrLog[1] ;Стирает все значетия из массива логирования оставляя только нулевую ячейку
EndFunc
Func _LogPokaz()
_LogSbros()
ShellExecute('Log.txt') ;Выводит на экран txt файл логируемых действий по времени
EndFunc
Func _GuiCreateObu4($n)
Switch $n
;============ Открытие окон обучения ===================
Case 1 ;Создает Обуч над датчиками
$GUIobu4=GUICreate('Обучение', 200, 300, @DesktopWidth-200, 239, $WS_POPUP ,$WS_EX_TOPMOST);Окно обучения сверху над датчиками
$massivi=GUICtrlCreateEdit('',1,20,200,400)
Global $ComboDeistv = GUICtrlCreateCombo("", 1, 1, 200, 25);Выпадающее меню со списком действий
GUICtrlSetData(-1, _ArrayToString($Dn,'|',1))
GUISetState() ; показывает созданное окно
Case 2 ;Создает Обуч со скринами
$GUIobu4Scrn=GUICreate('Скрины', 1587, 893, 0, 0, $WS_POPUP ,$WS_EX_TOPMOST)
Global $FonScrn = GUICtrlCreatePic('', 0, 0, 1587, 893)
GUISetState() ; показывает созданное окно
Case 3 ;Подсказки по хоткеям обучения
Local $toolOb[17]
For $i = 1 To UBound($Dn)-1
$toolOb[$i]=$knop[$i]&' '&$Dn[$i]
Next
ToolTip(_ArrayToString($toolOb,@CRLF,1),@DesktopWidth-332,540)
Case 'параметры'
Global $GUIobu4Param=GUICreate('Обучение параметры',200,300,@DesktopWidth-200,239,$WS_POPUP,$WS_EX_TOPMOST) ;Окно обучения по набору отдельных параметров
Global $ComboDeistv = GUICtrlCreateCombo("", 1, 1, 200, 25);Выпадающее меню со списком действий
GUICtrlSetData(-1, _ArrayToString($Dn,'|',1))
Global $Ch0[14],$Ch1[14],$Ch2[14],$Ch3[14],$labl[14], $ChPos=50
Global $labl[14]=[0,'1-Док','2-Цель','3-ХП','4-Груз','5-ГрузВесь','6-Майнер1','7-Майнер2','8-Астеройд','9-Улица','10-ЗаБорт','11-Дистанция','12-Таймер','13-НаСтанц/СоСтанц']
$n=4
For $i = 0 To 3
GUICtrlCreateLabel($i,$n,35)
$n+=14
Next
For $i = 1 To 13
$Ch0[$i]=GUICtrlCreateCheckbox('',1,$ChPos,12,12);Создаем галочки чекбоксы с параметрами 0
$Ch1[$i]=GUICtrlCreateCheckbox('',15,$ChPos,12,12);Создаем галочки чекбоксы с параметрами 1
GUICtrlCreateLabel($labl[$i],65,$ChPos);Лейблы-подписи к чекбоксам
$ChPos+=17
Next
$Ch2[2]=GUICtrlCreateCheckbox('',30,67,12,12)
$Ch3[2]=GUICtrlCreateCheckbox('',45,67,12,12)
$Ch2[3]=GUICtrlCreateCheckbox('',30,84,12,12)
GUISetState() ; показывает созданное окно
;============= Закрытие окон обучения =======================
Case 4 ;Закрывает Список векторов над датчиками
GUIDelete($GUIobu4)
Case 5 ;Закрывает Окно скринов обучения
GUIDelete($GUIobu4Scrn)
Case 6 ;Закрывает Подсказки хоткеев к обучению
ToolTip('')
Case 7 ;Закрывает окно обучения по параметрам
GUIDelete($GUIobu4Param)
EndSwitch
EndFunc
;=================================================================================================================
Func Dat4()
Local $var[14]=[0,0,0,0,0,0,0,0,0,0,0,0,0,0]
PixelSearch($Varp[1],$Varp[2],$Varp[1],$Varp[2],$Varp[3],30);Варп
if @error Then ;Если нет ВАРПА
GUICtrlSetImage($PicVarp, '')
PixelSearch($Dok[4]-2,$Dok[5]-2,$Dok[4]+2,$Dok[5]+2,$Dok[6],20) ;Значек ДОК цитадель
If Not @error Then $var[1]=1
PixelSearch($Dok[1]-2,$Dok[2]-2,$Dok[1]+2,$Dok[2]+2,$Dok[3],20) ;Значек ДОК ОбычнСтанция
If Not @error Then $var[1]=1
PixelSearch($Gruz[1]-2,$Gruz[2]-2,$Gruz[1]+2,$Gruz[2]+2,$Gruz[3],20) ;Груз
If Not @error Then $var[4]=1
PixelSearch($Gruz[1]-2,$Gruz[2]-2,$Gruz[1]+2,$Gruz[2]+2,$Gruz[4],20) ;Выбран весь груз
If Not @error Then $var[5]=1
PixelSearch($Aster[1]-8, $Aster[2]-8, $Aster[1]+8, $Aster[2]+8, $Aster[3],50);Значек астеройда
If not @error Then $var[8]=1
PixelSearch($Ulica[1],$Ulica[2],$Ulica[1],$Ulica[2],$Ulica[3],40) ;Индикатор улицы
If not @error Then $var[9]=1
PixelSearch($Dist[1]-2,$Dist[2]-2,$Dist[1]+2,$Dist[2]+2,$Dist[3],40) ;Дистанция
If not @error Then $var[11]=1
If TimerDiff($tMining)<60000 Then $var[12]=1 ;Таймер работы майнеров
If $zab=1 Then $var[10]=1 ;За борт
If $IzV=1 Then $var[13]=1
PixelSearch($Cel[1]-2,$Cel[2]-2,$Cel[1]+2,$Cel[2]+2,$Cel[3],40);Цель захвачена
If Not @error Then
$var[2]=3
Else
PixelSearch($Cel[1]-2,$Cel[2]-2,$Cel[1]+2,$Cel[2]+2,$Cel[4],40);Цель есть\нет
If Not @error Then
$var[2]=2
Else
PixelSearch($Orbit[1],$Orbit[2],$Orbit[1],$Orbit[2],$Orbit[3],40);Значек орбиты
if not @error Then
$var[2]=1
EndIf
EndIf
EndIf
PixelSearch($HP[1],$HP[2],$HP[1],$HP[2],$HP[3],50);Мало ХП
If Not @error Then
$var[3]=2
Else
PixelSearch($HP[4], $HP[5], $HP[4], $HP[5], $HP[6],50);Очень мало ХП
If Not @error Then
$var[3]=1
EndIf
EndIf
PixelSearch($Main[1],$Main[3],$Main[1],$Main[3],$Main[4],40);МАЙНЕР 1
If not @error Then
$tM1=TimerInit()
$var[6]=1
ElseIf @error And TimerDiff($tM1)<1500 Then
$var[6]=1
EndIf
PixelSearch($Main[2],$Main[3],$Main[2],$Main[3],$Main[4],40);МАЙНЕР 2
If not @error Then
$tM2=TimerInit()
$var[7]=1
ElseIf @error And TimerDiff($tM2)<1500 Then
$var[7]=1
EndIf
Else ;Если есть ВАРП
GUICtrlSetImage($PicVarp, $srptpic&'Варп.jpg')
Local $var[14]=[0,1,1,1,1,1,1,1,1,1,1,1,1,1]
EndIf
;==========================================================================================
$var_string=_ArrayToString($var,'',1) ;Переводит массив состояния датчиков в строку начиная с 1 элем а не с 0
$num=_ArraySearch($DT, $var_string, 0, 0, 0, 1);Ищет в майнинг массиве номер ячейки вектора датчиков для состояния датчиков
If @error Then;Если нет такого вектора добавляем его к массиву
_ArrayAdd($DT,$var_string)
$num=0
ElseIf $var_star<>$var_string Then ;Если вектор поменялся
_4tenie($var);Отображает реакцию датчиков если изменилсь
_Logirovanie(1);Если состояние вектора изменилось заносим в ЛОГ 1-для обычного 2-для погрузки
$var_star=$var_string
If Not FileExists(@ScriptDir&'\Scrn\'&$var_string&".jpg") Then _ScreenCapture_Capture(@ScriptDir&'\Scrn\'&$var_string&".jpg") ;Если нет картинки для этого вектора Делает скрин нового вектора
EndIf
EndFunc
Func Dat4Obu4()
Local $var[14]=[0,0,0,0,0,0,0,0,0,0,0,0,0,0]
If GUICtrlRead($Ch1[1])=1 Then $var[1]=1 ;Значек ДОК цитадель
If GUICtrlRead($Ch3[2])=1 Then $var[2]=3 ;Цель захвачена
If GUICtrlRead($Ch2[2])=1 Then $var[2]=2 ;Цель есть\нет
If GUICtrlRead($Ch1[2])=1 Then $var[2]=1 ;Значек орбиты
If GUICtrlRead($Ch2[3])=1 Then $var[3]=2 ;Мало ХП
If GUICtrlRead($Ch1[3])=1 Then $var[3]=1 ;Очень мало ХП
If GUICtrlRead($Ch1[4])=1 Then $var[4]=1 ;Груз
If GUICtrlRead($Ch1[5])=1 Then $var[5]=1 ;Выбран весь груз
If GUICtrlRead($Ch1[6])=1 Then $var[6]=1 ;МАЙНЕР 1
If GUICtrlRead($Ch1[7])=1 Then $var[7]=1 ;МАЙНЕР 2
If GUICtrlRead($Ch1[8])=1 Then $var[8]=1 ;Значек астеройда
If GUICtrlRead($Ch1[9])=1 Then $var[9]=1 ;Индикатор улицы
If GUICtrlRead($Ch1[11])=1 Then $var[11]=1 ;Дистанция
If GUICtrlRead($Ch1[12])=1 Then $var[12]=1 ;Таймер работы майнеров
If GUICtrlRead($Ch1[10])=1 Then $var[10]=1 ;За борт
If GUICtrlRead($Ch1[13])=1 Then $var[13]=1 ;НаСтанц/СоСтанц
;==========================================================================================
$var_string=_ArrayToString($var,'',1) ;Переводит массив состояния датчиков в строку начиная с 1 элем а не с 0
If $var_star<>$var_string Then ;Если вектор поменялся
_4tenie($var);Отображает реакцию датчиков если изменилсь
$var_star=$var_string
EndIf
EndFunc
Func _4tenie($str) ;Читает состояние датчиков и выводит визуальную информацию в окошке бота
GUICtrlSetData($_Deistv,$DT[$num][1]&' '&$DT[$num][0])
If $str[1]=1 Then;Значек ДОК
GUICtrlSetImage($PicDOK, $srptpic&'ДОК.jpg')
Else
GUICtrlSetImage($PicDOK, '')
EndIf
If $str[2]=3 Then;Цель
GUICtrlSetImage($PicTarg, $srptpic&'Цель захвачена.jpg')
ElseIf $str[2]=2 Then
GUICtrlSetImage($PicTarg, $srptpic&'Цель есть.jpg')
ElseIf $str[2]=1 Then
GUICtrlSetImage($PicTarg, $srptpic&'Орбита есть.jpg')
Else
GUICtrlSetImage($PicTarg, $srptpic&'Цели нет.jpg')
EndIf
If $str[3]=2 Then;Мало ХП
GUICtrlSetImage($PicHP, $srptpic&'ХП есть.jpg')
ElseIf $str[3]=1 Then;Очень мало ХП
GUICtrlSetImage($PicHP, $srptpic&'ХП нет.jpg')
Else ;ХП нет совсем
GUICtrlSetImage($PicHP, $srptpic&'ХП нет совсем.jpg')
EndIf
If $str[4]=1 Then;Груз
GUICtrlSetImage($PicGruz, $srptpic&'Груз есть.jpg')
Else
GUICtrlSetImage($PicGruz, $srptpic&'Груз нет.jpg')
EndIf
If $str[5]=1 Then;Выбран весь груз
GUICtrlSetImage($PicGruz, $srptpic&'Груз весь.jpg')
EndIf
if $str[6]=1 Then ;МАЙНЕР 1
GUICtrlSetImage($PicMiner1, $srptpic&'Майнер вкл.jpg')
Else
GUICtrlSetImage($PicMiner1, $srptpic&'Майнер выкл.jpg')
EndIf
if $str[7]=1 Then;МАЙНЕР 2
GUICtrlSetImage($PicMiner2, $srptpic&'Майнер вкл.jpg')
Else
GUICtrlSetImage($PicMiner2, $srptpic&'Майнер выкл.jpg')
EndIf
if $str[8]=1 Then;Значек астеройда
GUICtrlSetImage($PicAster, $srptpic&'Астеройд есть.jpg')
Else
GUICtrlSetImage($PicAster, '')
EndIf
if $str[9]=1 Then;Индикатор улицы
GUICtrlSetImage($PicGruzOkno, $srptpic&'Улица.jpg')
Else
GUICtrlSetImage($PicGruzOkno, '')
EndIf
if $str[10]=1 Then;За борт
GUICtrlSetImage($PicZabort, $srptpic&'За борт.jpg')
Else
GUICtrlSetImage($PicZabort, '')
EndIf
if $str[11]=1 Then;Дистанция
GUICtrlSetImage($picDist, $srptpic&'Дистанц.jpg')
Else
GUICtrlSetImage($picDist, '')
EndIf
if $str[12]=1 Then;Туда/Оттуда
GUICtrlSetImage($PicTimer, $srptpic&'Таймер.jpg')
Else
GUICtrlSetImage($PicTimer, '')
EndIf
if $str[13]=1 Then;Туда/Оттуда
GUICtrlSetImage($PicTudaOTtuda, $srptpic&'ИндикГрузОкна.jpg')
Else
GUICtrlSetImage($PicTudaOTtuda, '')
EndIf
EndFunc
Func deistv()
Switch $DT[$num][1]
Case ''
;~ Beep(500,500) ;Неизвестная ситуация Пищит
;~ MouseClick('right',110,857);Неизвестная ситуация На станцию
;~ MouseClick('',155,917)
Case 'ПодкачЩит'
Send('{f3}') ;Подкачивает Щит (выставить на одиночное нажатие 3 верхний модуль в настройках EVE)
Sleep(500)
Case 'ВыклМ'
Send('^{space}');Остановка корабля
$tMining=TimerInit()
$tM1=TimerInit()
$tM2=TimerInit()
Send('{f8}');Выпустить дронов
Send('{f9}');Восстановить связь с дронами
_Videlenie(2,4);Захватывает 5-3 ближайшихх астеройдов
Case 'Майн1'
Send('{right}');Переходит к след.захваченной цели
Send('{f1}') ;Включает майнер1
$tM1=TimerInit()
$tMining=TimerInit()
Case 'Майн2'
Send('{right}');Переходит к след.захваченной цели
Send('{f2}') ;Включает майнер2
$tM2=TimerInit()
$tMining=TimerInit()
Case 'Кастерам'
MouseClick('right',120,877,1,$spdMos)
MouseClick('',157,887,1,$spdMos)
Sleep(5000)
Case 'КлацАстерМышью'
Send('{f8}');Выпустить дронов
_Videlenie(5,6) ;Захватывает 2-1 ближайшихх астеройдов
Sleep(1000)
Case 'ПоОрбите'
MouseClick('',1729, 79,1,$spdMos) ;Нажим полет по орбите если дистанция более 10км
Case 'НаСтанц'
Send('{f7}');Дроны в отсек
Send('^{backspace}');Создает новую буку с местом последнего копа
Sleep(500)
Send('{enter}');Подтверждает создание буки
Sleep(500)
MouseClick('right',142, 859,1,$spdMos);Нажимает прав кнопку с букой станции
MouseClick('',189, 900,1,$spdMos) ;Нажимает войти в док в выпавшем списке
$IzV=1 ;Переменная переключатель полета на станцию и к астеройдам
Send('{f1}') ;Выключает майнер1
Send('{f2}') ;Выключает майнер2
Sleep(5000)
Case 'ВыделГруз'
MouseClickDrag('',1493, 1033,1894, 832);Выделяет весь груз
MouseMove(1654, 1026);Отодвигает мышь что бы не заслонять датчик
Case 'ГрузНаСклад'
_Logirovanie(2);2-логирование при выгрузке на склад
$var_star=$var_string
$timer = TimerInit() ;Таймер пищалка для (ночного режима)если долго не отвозил груз
MouseClickDrag('',1529,833,@DesktopWidth/2,@DesktopHeight/2) ;Перетаскивает груз из трюма в окно склада (окно склада по центру экрана) Alt+G
Sleep(2000)
Case 'ИзДока'
MouseClick('',1417, 838,1,$spdMos);Выделяет отсек для руды если сбито
Send("!q");Нажимает выход из дока(ALT+Q)
Send("!й")
$IzV=0 ;Переменная переключатель полета на станцию и к астеройдам
Case 'ЗаБорт'
$timer = TimerInit() ;Таймер пищалка если долго не сбрасывал груз (дляя ночного режима)
MouseClick('right',1470, 832,1,$spdMos);Правый клк по верхнему
PixelSearch(1457,842,1477,862,0xB9B9B9,40) ;Если во флоте со сборщиком
If Not @error Then
MouseClick('',1504, 873,1,$spdMos) ;Лев клк по "сбросить за борт"
Else
MouseClick('',1504, 924,1,$spdMos) ;Лев клк по "сбросить за борт"
EndIf
Sleep(1500)
$IzV=0 ;Переменная переключатель полета на станцию и к астеройдам
Case 'Пищать'
Beep(500,500)
EndSwitch
EndFunc
Func _Videlenie($i,$j) ;Захватывает ближайшие 5 целей
Send('{CTRLDOWN}')
For $ii = $i To $j
MouseClick('',1679, $AsterPos[$ii],1,$spdMos);Нажим цели 1-2-3-4-5 Разница по вертикали в 20пкс
Next
Send('{CTRLUP}')
Sleep(100)
MouseClick('',1679, $AsterPos[6],1,$spdMos);Нажим самой ближней цели
EndFunc
Func _Obu4Glubok() ;Глубокое обучение с картинками
_HotkeyObu4(1) ;Устанавливает хоткеи для обучения
_GuiCreateObu4(1);1-Окно над датчиками (список векторов)
_GuiCreateObu4(3);3-Окно подсказок по хоткеям обучения
GUICtrlSetData($_Deistv,'') ;Устанавливает пустую строку в текстовом состоянии датчиков
;Выбрать действие в выпадающем меню со стрелочкой
Do
Until _IsPressed('0D') ;Ждет пока не нажмется Enter
_GuiCreateObu4(2);2-Окно скринов обучения
For $i=1 To UBound($DT)-1 ;Записывает выбранные вектора в ОБУЧЕНИЕ
If $DT[$i][1]=GUICtrlRead($ComboDeistv) Then _ArrayAdd($VektoriObu4,$DT[$i][0]);Проходит циклом по названиям выбранного вектора "ВДОК","Майн1" и т.д.Добавляет в список для обучения выбранные вектора по названию
Next
_ArrObu4Pokaz()
Do
Until _IsPressed('23') Or _IsPressed('24') Or UBound($VektoriObu4)=1 ;Кнопка END или HOME или не закончатся ВЕКТОРЫ
_GuiCreateObu4(4);4-Закрывает над датчиками (список векторов) для выбранного действия обучения
_GuiCreateObu4(5);5-Закрывает скринов обучения
_GuiCreateObu4(6);6-Закрывает Окно подсказок по хоткеям обучения
_HotkeyObu4(3) ;убирает окошко с хоткеями обучения
_LogSbros()
ArryZap()
EndFunc
Func _Obu4Bistroe() ;Быстрое обучение с моментальной задачей действия
If $a=0 Then
_GuiCreateObu4(3);3-Окно подсказок по хоткеям обучения
_HotkeyObu4(2) ;Задает хоткеи для обучения
$a=1
ElseIf $a=1 Then
_GuiCreateObu4(6) ;Закрывает подсказки хоткеев обучения
_HotkeyObu4(3) ;Убирает хоткеи обучения
_LogSbros() ;Сбрасывает ЛОГ в .txt
ArryZap() ;Записывает массив векторов в .txt
$a=0
EndIf
EndFunc
Func _Obu4Param() ;Обучение по заданным параметрам
Local $CHarr2D[1][2],$arrDoblKzamene[1],$Zamen=0
_GuiCreateObu4('параметры') ;Создает окно обучения по параметрам и заносит их в массив
Do
Dat4Obu4()
Until _IsPressed('0D') ;Ждет пока не нажмется Enter
Global $CHarr[14]
For $i = 1 To UBound($Ch1)-1;проход по чекбоксам считывание состояний
If GUICtrlRead($Ch0[$i])=1 Then $CHarr[$i]='0'
If GUICtrlRead($Ch1[$i])=1 Then $CHarr[$i]=1
If GUICtrlRead($Ch2[$i])=1 Then $CHarr[$i]=2
If GUICtrlRead($Ch3[$i])=1 Then $CHarr[$i]=3
Next
For $i = 1 To UBound($CHarr)-1 ;Создает список непустых чекбоксов в $CHarr масссив
If $CHarr[$i]<>'' Then _ArrayAdd($CHarr2D,$i&'|'&$CHarr[$i],0);Если элемент не равен пустому тогда записывет его позицию и значение в $CHarr2D массив 0-Позиция 1-Значение
Next
For $i = 1 To UBound($DT)-1 ;Проход по элементам $DT и запись в спирос если галочки совпадают
$ArrSravn=StringSplit($DT[$i][0],'');Раскладывает элемент массива $DT на массив
For $ii=1 To UBound($CHarr2D)-1
If $ArrSravn[$CHarr2D[$ii][0]] = $CHarr2D[$ii][1] And $ii= UBound($CHarr2D)-1 Then ;Если все элементы равны всем галочкам то делает замену
$DT[$i][1]=GUICtrlRead($ComboDeistv)
$Zamen+=1
ElseIf $ArrSravn[$CHarr2D[$ii][0]] <> $CHarr2D[$ii][1] Then ;Если есть несовпадение то пропускает этот элемент $DT
ExitLoop
EndIf
Next
Next
MsgBox(0, 'Количество замен', 'Замены='&$Zamen)
_GuiCreateObu4(7);Закрывает окно обучения по параметрам
ArryZap() ;Записывает массив векторов в .txt
EndFunc
Func _ArrObu4Pokaz() ;Обновляет информацию в списке обучаемых веторов после выбора действия
If UBound($VektoriObu4)>1 Then ;Если векторы обучения еще не закончились то продолжает обучение
_4tenie(StringSplit($VektoriObu4[1],'')) ;Показывает состояние датчиков визуально индикаторами бота
GUICtrlSetData($massivi,_ArrayToString($VektoriObu4,@CRLF,1));Переписывает окно со списком векторов обучения
GUICtrlSetData($_Deistv,$VektoriObu4[1]) ;Устанавливает в строку состояния датчиков текущий вектор из обучения
$num=_ArraySearch($DT,$VektoriObu4[1],1) ;Поиск в векторах текущего вектора из обучения
If FileExists(@ScriptDir&'\Scrn\'&$DT[$num][0]&".jpg") Then ;Если есть картинка для этого вектора
GUICtrlSetImage($FonScrn, @ScriptDir&'\Scrn\'&$DT[$num][0]&'.jpg') ;Ставит на скрин-окно обучения скрин соответстующего вектора
Else ;Если нет картинки то ставит пустую
GUICtrlSetImage($FonScrn, 'Пусто.jpg') ;Ставит на скрин-окно обучения пустую картинку
EndIf
Else
_GuiCreateObu4(4);4-Закрывает над индикаторами окно со списком векторов
EndIf
EndFunc
;===========================================================================================
Func _HotkeyObu4($n)
Switch $n
Case 1 ;Задает ноткеи для обучения с картинками (скринами)
HotKeySet('{numpad1}','_KnopGlubok')
HotKeySet('{numpad2}','_KnopGlubok')
HotKeySet('{numpad3}','_KnopGlubok')
HotKeySet('{numpad4}','_KnopGlubok')
HotKeySet('{numpad5}','_KnopGlubok')
HotKeySet('{numpad6}','_KnopGlubok')
HotKeySet('{numpad7}','_KnopGlubok')
HotKeySet('{numpad8}','_KnopGlubok')
HotKeySet('{numpad9}','_KnopGlubok')
HotKeySet('{numpad0}','_KnopGlubok')
HotKeySet('{numpaddot}','_KnopGlubok')
HotKeySet('{numpadmult}','_KnopGlubok')
HotKeySet('{numpaddiv}','_KnopGlubok')
HotKeySet('{NUMPADADD}','_KnopGlubok')
HotKeySet('{up}','_KnopGlubok')
HotKeySet('{end}')
HotKeySet('{del}','_del')
GUICtrlSetImage($PicVopros, $srptpic&'Вопрос.jpg')
Case 2 ;Хоткеи дляя быстрого обучения чтобы задать действие сразу же
HotKeySet('{numpad1}','_KnopBistroe')
HotKeySet('{numpad2}','_KnopBistroe')
HotKeySet('{numpad3}','_KnopBistroe')
HotKeySet('{numpad4}','_KnopBistroe')
HotKeySet('{numpad5}','_KnopBistroe')
HotKeySet('{numpad6}','_KnopBistroe')
HotKeySet('{numpad7}','_KnopBistroe')
HotKeySet('{numpad8}','_KnopBistroe')
HotKeySet('{numpad9}','_KnopBistroe')
HotKeySet('{numpad0}','_KnopBistroe')
HotKeySet('{numpaddot}','_KnopBistroe')
HotKeySet('{numpadmult}','_KnopBistroe')
HotKeySet('{NUMPADADD}','_KnopBistroe')
HotKeySet('{numpaddiv}','_KnopBistroe')
HotKeySet('{end}')
GUICtrlSetImage($PicVopros, $srptpic&'Вопрос.jpg')
Case 3 ;Убирает хоткеи
HotKeySet('{numpad1}')
HotKeySet('{numpad2}')
HotKeySet('{numpad3}')
HotKeySet('{numpad4}')
HotKeySet('{numpad5}')
HotKeySet('{numpad6}')
HotKeySet('{numpad7}')
HotKeySet('{numpad8}')
HotKeySet('{numpad9}')
HotKeySet('{numpad0}')
HotKeySet('{numpaddot}')
HotKeySet('{numpadmult}')
HotKeySet('{numpaddiv}')
HotKeySet('{NUMPADADD}')
HotKeySet('{up}')
HotKeySet('{del}')
HotKeySet('{end}','eksit')
GUICtrlSetImage($PicVopros, '')
EndSwitch
EndFunc
Func _del() ;Удаляет выбранный вектор обучения и картинку к нему если она есть в папке Scrn
If FileExists(@ScriptDir&'\Scrn\'&$DT[$num][0]&".jpg") Then FileDelete(@ScriptDir&'\Scrn\'&$DT[$num][0]&'.jpg') ;Если есть картинка для этого вектора то удаляет эту картинку
_ArrayDelete($DT,$num)
_ArrayDelete($VektoriObu4,1) ;Удаляет первую(верхнюю ячейку)из векторов обучения
_ArrObu4Pokaz()
EndFunc
Func _KnopGlubok() ;Присваивает значение действия вектору обучения по выбранной кнопке
If _IsPressed('61') Then $DT[$num][1]=$Dn[1];Нум 1
If _IsPressed('62') Then $DT[$num][1]=$Dn[2] ;Нум 2
If _IsPressed('63') Then $DT[$num][1]=$Dn[3] ;Нум 3
If _IsPressed('64') Then $DT[$num][1]=$Dn[4] ;Нум 4
If _IsPressed('65') Then $DT[$num][1]=$Dn[5] ;Нум 5
If _IsPressed('66') Then $DT[$num][1]=$Dn[6] ;Нум 6
If _IsPressed('67') Then $DT[$num][1]=$Dn[7] ;Нум 7
If _IsPressed('68') Then $DT[$num][1]=$Dn[8] ;Нум 8
If _IsPressed('69') Then $DT[$num][1]=$Dn[9] ;Нум 9
If _IsPressed('60') Then $DT[$num][1]=$Dn[10] ;Нум 0
If _IsPressed('6E') Then $DT[$num][1]=$Dn[11] ;Нум точка
If _IsPressed('6B') Then $DT[$num][1]=$Dn[12] ;Нум сложение
If _IsPressed('6A') Then $DT[$num][1]=$Dn[13] ;Нум умножение
If _IsPressed('6C') Then $DT[$num][1]=$Dn[14] ;Нум деление
_ArrayDelete($VektoriObu4,1) ;Удаляет первую(верхнюю ячейку)из векторов обучения
_ArrObu4Pokaz()
EndFunc
Func _KnopBistroe() ;Присваивает значение действия вектору обучения по выбранной кнопке
If _IsPressed('61') Then $DT[$num][1]=$Dn[1];Нум 1
If _IsPressed('62') Then $DT[$num][1]=$Dn[2] ;Нум 2
If _IsPressed('63') Then $DT[$num][1]=$Dn[3] ;Нум 3
If _IsPressed('64') Then $DT[$num][1]=$Dn[4] ;Нум 4
If _IsPressed('65') Then $DT[$num][1]=$Dn[5] ;Нум 5
If _IsPressed('66') Then $DT[$num][1]=$Dn[6] ;Нум 6
If _IsPressed('67') Then $DT[$num][1]=$Dn[7] ;Нум 7
If _IsPressed('68') Then $DT[$num][1]=$Dn[8] ;Нум 8
If _IsPressed('69') Then $DT[$num][1]=$Dn[9] ;Нум 9
If _IsPressed('60') Then $DT[$num][1]=$Dn[10] ;Нум 0
If _IsPressed('6E') Then $DT[$num][1]=$Dn[11] ;Нум точка
If _IsPressed('6B') Then $DT[$num][1]=$Dn[12] ;Нум сложение
If _IsPressed('6A') Then $DT[$num][1]=$Dn[13] ;Нум умножение
If _IsPressed('6C') Then $DT[$num][1]=$Dn[14] ;Нум деление
EndFunc
Func zabort();Скидывание руды за борт когда рядом летает грузовой корабль и собирает руду
$zab+=1
If $zab=1 Then
GUICtrlSetImage($PicZabort, $srptpic&'За борт.jpg')
$Gruz[1]-=20
ElseIf $zab<>1 Then
GUICtrlSetImage($PicZabort, '')
$Gruz[1]+=20
$zab=0
EndIf
EndFunc
;==========================================================================================================
Func pausa() ;Вкл/Выкл работы бота
$ps+=1
If $ps=1 Then
$timer = TimerInit()
;~ _BlockInputEx(1,'{space}'); Включает блокировку всех кнопок кроме Pause/Break (На случай кота на столе)
GUICtrlSetImage($PicPausa, $srptpic&'Работа.jpg')
ElseIf $ps<>1 Then
;~ _BlockInputEx(0); Разблокирует всё
GUICtrlSetImage($PicPausa, '')
$ps=0
EndIf
EndFunc
Func podskaz() ;Выводит на экран ToolTip cо списком основных горячих клавишь
$pd+=1
If $pd=1 Then
ToolTip('-TAB- Запуск бота'&@CRLF&'-TAB- Справка'&@CRLF&'-ctrl+home- Обучение бота'&@CRLF&'-home- Быстрое обучение бота'&@CRLF&'-insert- Груз за борт'&@CRLF&'-Ctrl+TAB- ЛогФайл'&@CRLF&'-End- Выход' ,800 ,200 )
ElseIf $pd<>1 Then
ToolTip('')
$pd=0
EndIf
EndFunc
Func ArryZap() ;Сохраняет в .txt массивы векторов
$File=FileOpen('МайнингМассивы.txt',2)
_ArraySort($DT, 0, 1, 0, 1);Сортировка в первой колонке двумерного массива (по именам действий) Сортировка с 1-го элемента (в нолевом пусто)
FileWrite($File,_ArrayToString($DT,',',1) )
FileClose($File)
EndFunc
Func eksit()
_LogSbros() ;Сбрасывает логи в .txt
ArryZap() ;Сохраняет в txt файл векторов с которыми работал
Exit
EndFunc