Что нового

[Автоматизация] Бот для игры вконтакте Территория Фермеров.

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Ну попробуй шейд 50 :smile:
Шейд - это погрешность тонов которые будут считаться "подходящими" относительно изначального цвета в хексе.
 
Автор
W

warshadow

Новичок
Сообщения
62
Репутация
0
Belfigor сказал(а):
Ну попробуй шейд 50 :smile:
Шейд - это погрешность тонов которые будут считаться "подходящими" относительно изначального цвета в хексе.
Получается с шейдом 50 -- такая картина как я понимаю:
Код:
$aRed_Coords = PixelSearch(0,0,@DesktopWidth, @DesktopHeight,0xCC3399,50,1)
?


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

warshadow сказал(а):
Belfigor сказал(а):
Ну попробуй шейд 50 :smile:
Шейд - это погрешность тонов которые будут считаться "подходящими" относительно изначального цвета в хексе.
Получается с шейдом 50 -- такая картина как я понимаю:
Код:
$aRed_Coords = PixelSearch(0,0,@DesktopWidth, @DesktopHeight,0xCC3399,50,1)
?
Неа, все равно ни в какую не хочет


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

Еще такой вопрос,как сделать так чтобы был поиска пикселя до 1 успешного и далее находил и опять кликал
Код:
Dim $aRed_Coords
					Sleep($gh)
					if GUICtrlRead($klava1)= $GUI_CHECKED then
					$aRed_Coords = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0x573510,0,1);клевер в корову
					if @error = 1 then 
					msgbox(48,"Внимание!","Заданный пиксель не найден")
					Return
					endif
					GUICtrlRead($aRed_Coords)
					MouseClick("left", $aRed_Coords[0], $aRed_Coords[1],3,10)
					ReDim $aRed_Coords
					
				Else
					$aRed_Coords = PixelSearch(0,0,@DesktopWidth, @DesktopHeight,0xA6A5A5,0,1);МОЛОКО
					Return
					if @error = 1 then 
					msgbox(48,"Внимание!","Заданный пиксель не найден")
					Return 
					endif
					GUICtrlRead($aRed_Coords)
					MouseClick("left", $aRed_Coords[0], $aRed_Coords[1])
					ReDim $aRed_Coords
				EndIf
				EndIf

Разобрался!
Код:
While 1
PixelSearch(...)
If Not @error Then ExitLoop
ToolTip("Поиск Объекта!")
Sleep(100)
WEnd
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Используй For Next цикл. Нашли - переопределили область и пошли искать уже отталкиваясь от нее.
 
Автор
W

warshadow

Новичок
Сообщения
62
Репутация
0
Belfigor сказал(а):
Используй For Next цикл. Нашли - переопределили область и пошли искать уже отталкиваясь от нее.
А вот так правильно построил:
Код:
For $i=0 to $count
							
					;###############################
					;Засадка грядок
					
				
					Dim $aRed_Coords
					Dim $aRed_Coords1
					Dim $aReD_Zasadka
					Dim $aReD_PosadkaKlever
					
					
					
					Sleep($gh)
					if GUICtrlRead($mish1)= $GUI_CHECKED then
						While 1
    				 $aRed_Coords = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0x573510,0,1);клевер в корову
						  If Not @error Then ExitLoop
					   ToolTip("Поиск Объекта коровы!")
						Sleep(50)
					WEnd
					GUICtrlRead($aRed_Coords)
					MouseClick("left", $aRed_Coords[0], $aRed_Coords[1],3,10)
					ReDim $aRed_Coords			
					While 1
						 $aRed_Coords1 = PixelSearch(0,0,@DesktopWidth, @DesktopHeight,0xA6A5A5,0,1);МОЛОКО
						  If Not @error Then ExitLoop
						  ToolTip("Поиск Объекта молока!")
						Sleep(50)
					WEnd	
					GUICtrlRead($aRed_Coords1)
					MouseClick("left", $aRed_Coords1[0], $aRed_Coords1[1])
					ReDim $aRed_Coords1					
					EndIf
					
					
				Sleep($gh1)
				if GUICtrlRead($mish2)= $GUI_CHECKED then
				While 1
				$aReD_Zasadka = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0x44240F,0,1);засадка
				 If Not @error Then ExitLoop
					 ToolTip("Поиск Объекта поля!")
						Sleep(50)
						WEnd
				if @error = 1 then 
				 	msgbox(48,"Внимание!","Заданный пиксель не найден")
					Return ;или return если это будет в функции
					endif
					GUICtrlRead($aReD_Zasadka)
					MouseClick("left", $aReD_Zasadka[0], $aReD_Zasadka[1])
					ReDim $aReD_Zasadka
				EndIf
				
				
				Sleep($gh2)
				if GUICtrlRead($mish3)= $GUI_CHECKED then
				While 1
				$aRed_Coords = PixelSearch(0,0,@DesktopWidth, @DesktopHeight,0xFFC7F0,0,1);клевер
				;$aReD_PosadkaKlever = PixelSearch(0,0,@DesktopWidth, @DesktopHeight,0xCC3399,50,1);клевер(Belfigor)
								
				 If Not @error Then ExitLoop
					 ToolTip("Поиск Объекта клевера!")
						Sleep(50)
						WEnd
				if @error = 1 then 
				 	msgbox(48,"Внимание!","Заданный пиксель не найден")
					Return ;или return если это будет в функции
					endif
					GUICtrlRead($aReD_PosadkaKlever)
					MouseClick("left", $aReD_PosadkaKlever[0], $aReD_PosadkaKlever[1])
					ReDim $aReD_PosadkaKlever
				EndIf[
Next
 
Автор
W

warshadow

Новичок
Сообщения
62
Репутация
0
Belfigor сказал(а):
Используй For Next цикл. Нашли - переопределили область и пошли искать уже отталкиваясь от нее.
Код:
if GUICtrlRead($mish1)= $GUI_CHECKED then
					For $i=0 to $aRed_Coords
    				$aRed_Coords = PixelSearch(0,0,@DesktopWidth, @DesktopHeight,0xEFEFEF,0,1);клевер в корову
					MouseClick("left", $aRed_Coords[0], $aRed_Coords[1])
					Next 
					
					For $i=0 to $aRed_Coords1
					$aRed_Coords1 = PixelSearch(0,0,@DesktopWidth, @DesktopHeight,0xA6A5A5,0,1);МОЛОКО
					MouseClick("left", $aRed_Coords1[0], $aRed_Coords1[1])
					Next
					
					
				
					
					GUICtrlRead($aRed_Coords)
					GUICtrlRead($aRed_Coords1)	
					
					ReDim $aRed_Coords			
					ReDim $aRed_Coords1		
							
				EndIf

И как из этого примера сделать правильно чтобы работала?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Посмотри тут на форуме в разделе удф есть PixelSearchEx. Механизм возьми из нее, она была написана для поиска заранее заданных пресетов пикселей и в ней реализовано продолжение поиска по заданному условию.
 
Автор
W

warshadow

Новичок
Сообщения
62
Репутация
0
Belfigor сказал(а):
Посмотри тут на форуме в разделе удф есть PixelSearchEx. Механизм возьми из нее, она была написана для поиска заранее заданных пресетов пикселей и в ней реализовано продолжение поиска по заданному условию.
Да статья хорошая, но мне не удалось осуществить ее использую этот код:
Код:
GUICtrlRead($aRed_Coords)
					GUICtrlRead($aRed_Coords1)
					if GUICtrlRead($mish1)= $GUI_CHECKED then
					
					While 1
    				$aRed_Coords = PixelSearch(0,0,@DesktopWidth, @DesktopHeight,0x6A421E,0,1);клевер в корову
										
					 If Not @error Then ExitLoop
					 $aRed_Coords1 = PixelSearch(0,0,@DesktopWidth, @DesktopHeight,0xA6A5A5,0,1);МОЛОКО
						
				 WEnd
					MouseClick("left", $aRed_Coords1[0], $aRed_Coords1[1],3,2)
					MouseClick("left", $aRed_Coords[0], $aRed_Coords[1],3,2)
					ReDim $aRed_Coords
					ReDim $aRed_Coords1
				EndIf
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Увы, в ближайшее время у меня не будет времени дабы вдаваться в подробности твоего кода :(
 
Автор
W

warshadow

Новичок
Сообщения
62
Репутация
0
Все-таки программа работает след. образом:
созревает например клевер ( у меня уже заданный цвет поиска пикселя,0xFFC7F0),далее либо не видит такого пикселя или же почему-то через 1 кликает мышью, т.е. 50% собирает.
После того как я нахожу новый пиксель -- программа может опять через один кликать, если все кликабельно, то при след. созревании происходит все аналогично.
Подскажите как задать чтобы не перебивать по 1000раз пикселя.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Сложно дать тебе отличный от шейдов в PixelSearch ответ не играя в эту игру, ибо в обычных условиях это решает проблему. Тебе надо найти того ботовода, который сам в эту игру играл\играет и может подсказать решение основанное на личном опыте работы с этой игрой.
 

HORRIBLE

Знающий
Сообщения
22
Репутация
10
Я Вам предлагаю по другому поступить:
Раз Вы автоматом сажаете => вы знаете координаты посева => используйте эти координаты для клика (через определенный интервал времени) => смотрите за состоянием склада => изменилось, урожай прошел, можно сеять вновь.
Вам же не нужно собрать определенное растение, а все сразу:smile:?

Вот код части (смотрите за состоянием склада), нечего сложного, если выкинуть все не нужные функции(окно показывающая где смотрим....перемещение окна....то будет очень мало строк):
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <Misc.au3>

Global $color = 0, $line_x = 1035, $line_y = 462
HotKeySet("{SPACE}", "smotrim_izmenenie")
HotKeySet("{Esc}", "term")

MsgBox(0,'','После закрытия этого MSGBOX:'&@CR & _
'1. Появится синее прозрачное окно, его нужно установить на иконку склад (см. рис.).'&@CR & _
'2.Установив окно жмем пробел, будет отображаться: ToolTip(Пока в склад ничего не поступило!!!!!!!).'&@CR & _
'3.Начинаем сбор растения, будет отображаться надпись: ToolTip(+&$i& в склад) и вылезет MsgBox(0,,Новые поступления в склад)')

_create_area($line_x,  $line_y, 150)


$dll = DllOpen("user32.dll")

While 1
	If  _IsPressed("10", $dll) Then
		If _IsPressed("26", $dll) Then win_move($line_x, $line_y - 1)
		If _IsPressed("28", $dll) Then win_move($line_x, $line_y + 1)
		If _IsPressed("25", $dll) Then win_move($line_x - 1, $line_y)
		If _IsPressed("27", $dll) Then win_move($line_x + 1, $line_y)
	EndIf

	sleep(100)
WEnd

Func smotrim_izmenenie()
local $i=0
$color = PixelChecksum($line_x,$line_y, $line_x+30 ,$line_y+28)
	While 1
		if PixelChecksum($line_x,$line_y, $line_x+30 ,$line_y+28) <> $color then
                   $i +=1
                   ToolTip('+'&$i&' в склад',100,100)
                   MsgBox(0,'','Новые поступления в склад')
                else
                   ToolTip('Пока в склад ничего не поступило!!!!!!!',100,100)
                endif
		sleep(100)
	WEnd
EndFunc

Func win_move($x, $y)
	$line_x = $x
	$line_y = $y
	WinMove($hWin,'',$line_x,$line_y)
EndFunc

Func _create_area($iLeft, $iTop, $iTrans=255)
    Global $hWin = GUICreate('', 30, 28, $iLeft, $iTop, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW, $WS_EX_TRANSPARENT))
    WinSetTrans($hWin, '',      $iTrans)
    GUISetBkColor(0xbbb,     $hWin)
    GUISetState(@SW_SHOW,       $hWin)
EndFunc

Func term()
	DllClose($dll)
	exit
EndFunc


Тут в ручную нужно (или не нужно, если будет стоять как на картинке) выставить прямоугольник на иконку склада (перемещение: Shift+стрелочки), должно будет получиться вот так вот: картинка прикреплена. Выставили прямоугольник, жмем пробел, тем самым включаем мониторинг состояния, запускаем smotrim_izmenenie().
И все, для проверки сами нажмите сбор чего угодно и убедитесь, что появится надпись под курсором: +1 в склад.

Это как вариант решения.
 
Автор
W

warshadow

Новичок
Сообщения
62
Репутация
0
Спасибо, пошел испытывать )))


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

Выставил прямоугольник на иконку склада, нажал на пробел - Tooltip("+1 Склад") стал, потом собрал что то и все стояло на месте.
Или я не понял работу программы?
 

HORRIBLE

Знающий
Сообщения
22
Репутация
10
warshadow сказал(а):
Спасибо, пошел испытывать )))


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

Выставил прямоугольник на иконку склада, нажал на пробел -Tooltip("+1 Склад") стал, потом собрал что то и все стояло на месте.
Или я не понял работу программы?





Переделал тот пример который ранее выложил, посмотрите его. Сделал, по больше информативности=).
 
Автор
W

warshadow

Новичок
Сообщения
62
Репутация
0
HORRIBLE сказал(а):
warshadow сказал(а):
Спасибо, пошел испытывать )))


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

Выставил прямоугольник на иконку склада, нажал на пробел -Tooltip("+1 Склад") стал, потом собрал что то и все стояло на месте.
Или я не понял работу программы?





Переделал тот пример который ранее выложил, посмотрите его. Сделал, по больше информативности=).



Да так работает!))Но у меня такой вопрос
[quote author=HORRIBLE]
И все, для проверки сами нажмите сбор чего угодно и убедитесь, что появится надпись под курсором: +1 в склад
[/quote]
Нажал -- он собрал и появилась надпись +1 в склад, потом он сам должен собирать все остальное?
 

HORRIBLE

Знающий
Сообщения
22
Репутация
10
Нажал -- он собрал и появилась надпись +1 в склад, потом он сам должен собирать все остальное?
[/quote]
:smile: ну дальше как вы его научите так он и будет работать. Я Вам, это как вариант предложил, уйти от поиска вечно пропадающий пикселей.
Я бы сделал так:
1. Сеем растения (вы сказали у вас получилось сделать). На этом шаге мы будем иметь необходимые координаты.
2. Через n-ое время кликаем, используя координаты(п.1), САМОГО первого посаженного растения.
3. Смотрим на изменение склада, изменилось, значит урожай готов, собираем остальные. Нет, ждем еще, выполняем п.2.
 
Автор
W

warshadow

Новичок
Сообщения
62
Репутация
0
HORRIBLE сказал(а):
Нажал -- он собрал и появилась надпись +1 в склад, потом он сам должен собирать все остальное?
:smile: ну дальше как вы его научите так он и будет работать. Я Вам, это как вариант предложил, уйти от поиска вечно пропадающий пикселей.
Я бы сделал так:
1. Сеем растения (вы сказали у вас получилось сделать). На этом шаге мы будем иметь необходимые координаты.
2. Через n-ое время кликаем, используя координаты(п.1), САМОГО первого посаженного растения.
3. Смотрим на изменение склада, изменилось, значит урожай готов, собираем остальные. Нет, ждем еще, выполняем п.2.
[/quote]
Спасибо.
Еще такой вопрос возник и меня странно как-то стала программа искать пикселя, а именно когда я приближаю картинку он находит,А при отдаление не видит напрочь -- как быть ?
 
Автор
W

warshadow

Новичок
Сообщения
62
Репутация
0
Вопрос всем:
1)Еще такой вопрос возник у меня странно как-то стала программа искать пикселя, а именно когда я приближаю картинку он находит,а при отдаление картинки не видит напрочь -- как быть ?

2)Вообще AutoIT имеет такую способность искать по фрагментам картинок?))
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
ImageSearch.au3, читай про эту библиотеку.
 
Автор
W

warshadow

Новичок
Сообщения
62
Репутация
0
Belfigor сказал(а):
ImageSearch.au3, читай про эту библиотеку.
Спасибо, про нее прочитаю.
Еще такой вопрос возник у меня странно как-то стала программа искать пикселя, а именно когда я приближаю картинку он находит,а при отдаление картинки не видит напрочь -- как быть ?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Значит пикселя меняют свой цвет. Делай под одно приближение или определяй цвета для каждого.
 
Верх