Что нового

майнер v0,(0)1

rekusha

Новичок
Сообщения
8
Репутация
4
было желание несколько автоматизировать процесс копания
прочитал у вас по автоиту
отдельное спасибо автору статьи про бота за 90 часов. выкладываю свое "творение" для направления моих страданий в нужное русло.

также вопрос о том насколько практично процедуры на каждое действие разносить по отельным файлам чтоб потом инклудить их в нужных местах с нужными параметрами?

Код:
#cs ----------------------------------------------------------------------------
miner
 AutoIt Version: 3.3.6.1
 Author:         rekusha

 Script Function:
	Template AutoIt script.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here

;#include <Misc.au3>
;Global $dll = DllOpen("user32.dll")
Opt("PixelCoordMode", 0) ;Отсчет координат пикселей от левого верхнего угла клиентской части окна
Opt("MouseCoordMode", 0) ;Отсчет координат мыши от левого верхнего угла клиентской части окна

Global $Paused
Global $UdocKpositionX = 22
Global $UdocKpositionY = 742
Global $MenUpositionX = 66
Global $MenUpositionY = 69

HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{ESC}", "Terminate")
HotKeySet("+!d", "ShowMessage")

WinActivate("EVE")
While 1
undock()
StopShip()
Belt_Warp()
mine()
Doc()
uncargo()
WEnd

Func uncargo()
	MouseClick("left",435,463,1,10)
	Sleep(500)
	Send("^a")
	Sleep(500)
	MouseClickDrag("left",435,463,446,670,10)
	Sleep(10000)
EndFunc

Func mine()
	WinActivate("EVE")
	sleep(500)
	droneLaunch()
	sleep(500)
		while cargo()<2
			WinActivate("EVE")
				If dist_chek()=0 Then
					asteroid_aproch()
					sleep(500)
				Else
					lock_asteroid()
				EndIf
			sleep(500)
			hiSlot_1()
			sleep(500)
			hiSlot_2()
		WEnd
		Sleep(500)
	DroneScoop()
	Sleep(5000)
EndFunc

Func cargo()
	WinActivate("EVE")
	PixelSearch(629, 405, 630, 405, 0x005067, 10)
	If @error Then
		ToolTip("трюм не заполнен",100,0)
		return 0
	Else
		ToolTip("трюм полон",100,30)
		return 2
	EndIf
EndFunc

Func hiSlot_2()
	PixelSearch(660, 670, 670, 674, 0x8E958B, 50)
	If @error Then
		Send("{F2}")
		ToolTip("хайслот 2 не активен - включаю",0,0)
		return 0
	Else
		ToolTip("хайслот 2 активен",0,30)
		return 1
	EndIf
EndFunc

Func hiSlot_1()
	PixelSearch(610, 670, 620, 674, 0x989C95, 50)
	If @error Then
		Send("{F1}")
		ToolTip("хайслот 1 не активен - включаю",0,0)
		return 0
	Else
		ToolTip("хайслот 1 активен",0,15)
		return 1
	EndIf
EndFunc

Func lock_asteroid()
	If target_1()=0 Then
		Do
			MouseClick("left", 821, 181, 1, 2)
			sleep(500)
			MouseClick("left", 889, 95, 1, 2)
			sleep(5000)
		Until target_1()=1
		Else
	EndIf
EndFunc

Func target_1()
	PixelSearch(670, 42, 680, 47, 0xC0C0C0, 50)
	If @error Then
		ToolTip("нет цели",0,0)
		Sleep(500)
		return 0
	Else
		ToolTip("цель захвачена",0,0)
		Sleep(500)
		return 1
	EndIf
EndFunc

Func asteroid_aproch()
	Sleep(200)
	if checkasteroid()=0 then 
		Sleep(200)
		Do
			Sleep(200)
			if dist_chek()=0 then 
				Sleep(500)
				MouseClick("left", 821, 181, 2, 2) 
				Sleep (500)
			EndIf
			Sleep(200)
		until dist_chek()<>0
		StopShip()
		Sleep(10000)
	else 
		ToolTip("нечего копать",0,0)
	EndIf
EndFunc

Func dist_chek()
	PixelSearch(816, 176, 831, 185, 0xB8B8B8, 5)
	If @error Then
		PixelSearch(853, 178, 856, 186, 0xB8B8B8, 5)
		If @error Then
			Return 0 ; дальше  10km
		EndIf
		Return 1 ; ближе 99м
	Else
		Return 2 ;ближе 10 км но дальше 99м
	EndIf	
EndFunc

Func checkasteroid()
	Overwiev_asteroid()
	Sleep(200)
	MouseClick("left", 821, 181, 1, 2)
	Sleep(200)
	PixelSearch(820, 180, 822, 182, 0x000000, 5)
	If @error Then
		Return 0
		ToolTip("астероид найден",200,0)
		Sleep(10000)
	Else
		Return 1
		ToolTip("астероидов нет",200,0)
		Sleep(10000)
	EndIf
EndFunc

Func Overwiev_belt()
MouseClick("left", 935, 142, 1, 2)
Sleep(500)
EndFunc

Func Overwiev_npc()
MouseClick("left", 900, 142, 1, 2)
Sleep(500)
EndFunc

Func Overwiev_asteroid()
MouseClick("left", 855, 142, 1, 2)
Sleep(500)
EndFunc

Func Overwiev_default()
MouseClick("left", 803, 142, 1, 2)
Sleep(500)
EndFunc

Func DroneScoop()
	MouseClick("right", 530, 167, 1, 10)
	Sleep(500)
	MouseClick("left", 570, 235, 1, 10)
EndFunc

Func DroneLaunch()
MouseClick("right", 530, 147, 1, 10)
Sleep(500)
MouseClick("left", 576, 163, 1, 10)
EndFunc

Func WarpCheck()
	PixelSearch(519, 560, 519, 560, 0xBEBEBE, 5)
	If @error Then
		Return 0
		ToolTip("Варп окончен",0,0)
		;Sleep(100)
	Else
		Return 1
		ToolTip("В варпе",0,0)
		;Sleep(100)
	EndIf
EndFunc

Func Belt_Warp()
Send("{F10}")
Sleep(5000)
MouseClick("left", 429, 157, 1, 10)
	Menu_Asteroid_Belts()
	MouseClick("left", 355, 73, 1, 10)
	Sleep(5000)
	Do
		ToolTip("В варпе",0,0)
		Sleep(5000)
	Until WarpCheck()=0
	Sleep(5000)
EndFunc

Func StopShip()
	Send("^{SPACE}")
	Sleep(2000)
EndFunc

Func Undock()
	WinActivate("EVE")
	Do
	If cargo()=2 Then
		uncargo()
		Sleep(500)
	EndIf
	MouseClick("left", $UdocKpositionX, $UdocKpositionY, 1, 0)
	Until StateCheck()=1	
Sleep(10000)	
EndFunc
	
Func Doc()
	WinActivate("EVE") ;Активировать окно евы
	Menu_Station()
	Sleep(500)
	MouseMove(463, 122,10)
	Sleep(500)
	MouseClick("left", 463, 168, 1, 10)
		Do
			ToolTip("Направляюсь на станцию",0,0)
			Sleep (10000)
		;		If WarpCheck()<>1 Then
		;		Doc()
		;		EndIf
		Until StateCheck()=2
		Sleep(500)
		Send("{F10}")
	Sleep(5000)
EndFunc

Func Menu()
	WinActivate("EVE") ;Активировать окно евы
		MouseClick("left", $MenUpositionX, $MenUpositionY, 1, 5)
EndFunc
	
Func Menu_Asteroid_Belts()
	WinActivate("EVE") ;Активировать окно евы
	Menu()
		MouseClick("left", $MenUpositionX+98, 73, 1, 2)
EndFunc
	
Func Menu_planets()
	WinActivate("EVE") ;Активировать окно евы
	Menu()
		MouseClick("left", $MenUpositionX+98, 88, 1, 2)
EndFunc
	
Func Menu_Stargates()
	WinActivate("EVE") ;Активировать окно евы
	Menu()
		MouseClick("left", $MenUpositionX+98, 103, 1, 2)
EndFunc
	
Func Menu_Station()
	WinActivate("EVE") ;Активировать окно евы
	Menu()
		MouseClick("left", $MenUpositionX+98, 118, 1, 10)
EndFunc	
		
Func StateCheck()
	PixelSearch(22, 742, 22, 742, 0xFFD842, 2)
If @error Then
	PixelSearch(5, 760, 35, 785, 0x8A8A8A, 2)
	If @error Then
		ToolTip("в переходе",0,0)
		Sleep(1000)
		Return 0
		Else
    Return 1
	ToolTip("В космосе",0,0)
	Sleep(1000)
	EndIf
Else
	Return 2
	ToolTip("В доке",0,0)
	Sleep(1000)
EndIf
EndFunc
	
Func TogglePause()
    $Paused = NOT $Paused
    While $Paused
        sleep(100)
        ToolTip('Script is "Paused"',0,0)
    WEnd
    ToolTip("")
EndFunc

Func Terminate()
    Exit 0
EndFunc

Func ShowMessage()
    MsgBox(4096,"","This is a message.")
EndFunc
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Да, тема должна была появиться тут
34.gif
 
Автор
rekusha

rekusha

Новичок
Сообщения
8
Репутация
4
оригинальный вариант ответа. а по сути заданных вопросов? :smile:
 

Lexx98

Продвинутый
Сообщения
272
Репутация
73
Разносить функции по файлам - имхо очень удобно. Потом, если будет много тысяч строк общего кода, найти нужную функцию в общем файле будет гораздо сложнее, чем в отдельном.
Кстати, инклудить их нужно не "в нужных местах", а один раз, в файле настроек к примеру. А в нужных местах просто вызывать функции с нужными параметрами.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Разносить по файлам удобно, да, но я разношу только большие функции, то есть если функция меньше чем на 500 - 1000 строк - ее выносить не целесообразно, а то будет у тебя стопицот инклудов :smile:
 

Lexx98

Продвинутый
Сообщения
272
Репутация
73
Ну, допустим, я выношу в отдельный файл не одну функцию в 10 строк, а сразу несколько, связанных общим смыслом, или действующих с одним объектом.
К примеру функции открытия пипл-и-плейсов, закрытия, создания и удаления букмарок, все эти функции в одном файле.

Но и отдельные тоже выношу, ибо нефиг. В главной файле должен быть исключительно скелет. ИМХО.
 
Автор
rekusha

rekusha

Новичок
Сообщения
8
Репутация
4
начитался про имажсерчь и немного опробовал. два вопроса )
1) чего он такой бестолковый )
2) если попробовать все пиксели в искомой области представить массивом и то что хотим найти вторым массивом -> после делаем сравнение и алгоритмом Кнута-Морриса находим одинаковые куски массива...? как то так )))
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
1) Он просто тупо корявый, никто не задавался вопросом почему :smile:
2) Этот вопрос относится к разряду высоких технологий и после общего обсуждения постоянными участниками этого раздела было принято решение что ответы на все высокотехнологичные вопросы - страждущие ищут сами :smile:
 
Автор
rekusha

rekusha

Новичок
Сообщения
8
Репутация
4
по непонятной мне причине данная конструкция обрабатывается только лишь Send("{F10}") начальным и конечным. все остальное игнорируется. без сэнта работает. кто нибуть сталкивался?

Func belt_warp($belt)
Send("{F10}")
.
.
.
Send("{F10}")
EndFunc


по поводу обнаружения совпадений на экране посредством алгоритма Кнута-Морриса - работает прекрасно и при разных условиях. только долго (

подточил немного имажсерч... 2.8к безошибочных отработок при создании "тепличных" словий радуют. будем дальше статистику вести.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Вопрос про F10 не понял. Про имиджсерч - было бы шикарно если бы ты эту подточенную версию выложил и как-нибудь описал что ты там изменил и зачем. Мб пригодится кому, да и в целом мне тоже любопытно, хотя я им и не пользуюсь :smile:
 
Автор
rekusha

rekusha

Новичок
Сообщения
8
Репутация
4
имаж серч выложить пока не готов ибо не собран до конца, да и памятуя
Belfigor сказал(а):
2) Этот вопрос относится к разряду высоких технологий и после общего обсуждения постоянными участниками этого раздела было принято решение что ответы на все высокотехнологичные вопросы - страждущие ищут сами :smile:

думаю ни кто не обидеться если не выложу )

по ф10 проблема следующая.
говорю в начале функции послать нажатие ф10 и в конце функции тоже самое, но вместо отработки всей функции у меня просто идет двойное нажатие ф10.
если эти ф10 закомментировать то функция работает своим чередом.

всякие кей делэи и паузы выставлял по разному. не помогают )
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Функцию выложи, я даже не могу представить себе что там не так не видя ее :smile:
 
Автор
rekusha

rekusha

Новичок
Сообщения
8
Репутация
4
Код:
#include "declarate.au3"
#include "ImageSearch_temp.au3"
#include "hotkeyset.au3"
#include "belt_warp.au3"
#include "menu.au3"
#include "dock.au3"
#include "mine.au3"
#include "undock.au3"

WinActivate("EVE")
Opt("PixelCoordMode", 0) ;Отсчет координат пикселей от левого верхнего угла клиентской части окна
Opt("MouseCoordMode", 0) ;Отсчет координат мыши от левого верхнего угла клиентской части окна
Opt("MouseClickDelay", 100)
Opt("MouseClickDownDelay", 100)
Opt("MouseClickDragDelay", 150)
Opt("PixelCoordMode", 0) ;Отсчет координат пикселей от левого верхнего угла клиентской части окна
Opt("MouseCoordMode", 0) ;Отсчет координат мыши от левого верхнего угла клиентской части окна
Opt("SendKeyDownDelay", 150)

undock()
;;sleep(1000)
;;Send("{F10}")
;;sleep(1000)
StateCheck()
Do
ToolTip("ждите",100,0)
sleep(1000)
Until StateCheck()=1
sleep(1000)
;;Send("{F10}")
;;sleep(1000)
;;MouseClick(427, 158, 1, 10)
;;Sleep(1000)
;$belt = 6
belt_warp($belt)
Do
ToolTip("ждите",100,0)
sleep(1000)
Until mine_serch()=1
;sleep(15000)
;;drone_launch()
mine()
;;dron_scroop()
$dock = 1
dock($dock)
;;sleep(1000)
;;Send("{F10}")
;;sleep(1000)
Do
ToolTip("ждите",100,0)
Until StateCheck()=2
uncargo()


если раскомментировать ф10 то поле него либо вобще ничего не отработается либо сразу main()
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
О таком в принципе слышу впервые о_О. В автоите код без причины через строчки не перескакивает. MsgBox'ы пробовал ставить чтобы узнать куда исчезает промежуточный код?
 
Автор
rekusha

rekusha

Новичок
Сообщения
8
Репутация
4
пробовал,
они тоже проподают ))))
 

DJ_Tommy

Продвинутый
Сообщения
236
Репутация
57
Вот и минусы инклудов - не видно что и где может прерываться.
Проверь инклуд с хоткеями - вполне вероятно что там на ф10 стоит завершение скрипта.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Инклуды рулят, только их писать надо грамотно :smile:
 

DJ_Tommy

Продвинутый
Сообщения
236
Репутация
57
Белф, я говорю лишь о том что в приводимом куске кода я не нашел причины завершения скрипта, поэтому предположил что причина может быть в инклудах. Если бы их не было - ошибку найти было бы проще.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Ну в принципе да, глупо выкладывать пару строк кода и просить найти там ошибку когда функция ссылается на не приведенные части кода :smile:
 
Автор
rekusha

rekusha

Новичок
Сообщения
8
Репутация
4
на заметку стрдающим по imagesearch.au3
в имажсерче есть документированная функция TransN позволяющая считать определенный цвет прозрачным.
соответственно подготовив искомую картинку в соответствии с тем что ищем, сделав все что может помешать (фон, "артефакты" изображения) совпадению одним цветом и указав этот цвет "прозрачным" через TransN, получаем достаточно хороший бонус в точности обнаружения.


Добавлено:
Сообщение автоматически объединено:

Продвинутый карибас сказал(а):
Белф, я говорю лишь о том что в приводимом куске кода я не нашел причины завершения скрипта, поэтому предположил что причина может быть в инклудах. Если бы их не было - ошибку найти было бы проще.

Карибас, если прочесть внимательно проблему то можно увидеть что скрипт или не страбатывает между ф10 или срабатывает в самом конце.

кстати интересно, что выставив после ф10 слип на 17-20 секуд скрипт отрабатывается нормально )
пока причин не выявил, но буду копать в этом направлении или же пытаться совсем отказаться от ф10

з.ы. в инклудах нигде не указываются действия на ф10 (это чтоб уж совсем не осталось вопросов к инклудам и ф10)
 
Верх