Что нового

Как привязать к PixelSearch координаты курсора?

scanfail

Знающий
Сообщения
244
Репутация
17
Собственно, хотелось бы узнать, как привязать координат курсора(который постоянно перемещается) к pixelsearch-у? Дабы при изменение на нужный цвет, происходило действие(клик и т.д.).
 
Автор
S

scanfail

Знающий
Сообщения
244
Репутация
17
Кажется то ли я тебя неправильно понял, то ли ты меня. Я хочу, чтобы PixelSearch постоянно проверял курсор на изменение цвета, в случае, например наведения курсора на моба, его цвет меняется на красный, и следующим действием идет клик.
 
Автор
S

scanfail

Знающий
Сообщения
244
Репутация
17
running-frag [?]
Это всё реализованно в том скрипте.
Постараюсь освободиться через минут 10-15 и потестить твой скрипт, заранее спасибо!


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

Попробовал так, видимо где-то допустил ошибку. Результата при нажатие на Insert ноль.

Вот код:
Код:
HotKeySet("{Insert}", "_getpixel")
HotKeySet("{Esc}", "_exit")

While 1
   Sleep(15)
   WEnd

Func _getpixel()
   $_color = 0xCCCCCC
   $_coord = MouseGetPos ()
   If PixelSearch($_coord[0], $_coord[1], $_coord[0], $_coord[1], $_color) Then
	  MsgBox(0,"Inf.","Good Work!")
   EndIf
EndFunc

   Func _exit()
	  Exit
	  EndFunc
 

running-frag

why me?
Сообщения
441
Репутация
60
Код:
HotKeySet("{Insert}", "_getpixel")
HotKeySet("{Esc}", "_exit")

While True
   Sleep(15)
WEnd

Func _getpixel()
	Local $_color = 0xCCCCCC
	Local $_coordMouse = MouseGetPos ()
	Local $_coord = PixelSearch ($_coordMouse[0], $_coordMouse[1], $_coordMouse[0] +1, $_coordMouse[1] +1, $_color, 70)
	If @error Then MsgBox (0, "Inf.", "Fail! Got error.")
	
	MsgBox (0, "Inf.", "Founded at "& $_coord[0] &"x"& $_coord[1])
EndFunc

Func _exit()
	Exit
EndFunc


Срабатывает на белом из за выставленного shade в 70. Что б найти точно заданный цвет просто не вводи его.
 
Автор
S

scanfail

Знающий
Сообщения
244
Репутация
17
Ошибочку исправил. Чуть-чуть переделал скрипт, получилось вот так:
Код:
HotKeySet("{Insert}", "_getpixel")
HotKeySet("{Esc}", "_exit")

While True
   Sleep(15)
WEnd

Func _getpixel()
    Local $_color = 0x6699FF
    Local $_coordMouse = MouseGetPos ()
    Local $_coord = PixelSearch ($_coordMouse[0], $_coordMouse[1], $_coordMouse[0] +1, $_coordMouse[1] +1, $_color, 70)
    If Not @error Then 
	   MouseClick("left")
	Else
	   MsgBox(0,"Inf.", "Error")
	EndIf
EndFunc

Func _exit()
    Exit
EndFunc

Правда пока работает не очень корректно, находит не всегда... Думаю теперь, как оптимизировать её.
 

running-frag

why me?
Сообщения
441
Репутация
60
Код:
HotKeySet("{Insert}", "_getpixel")
HotKeySet("{Esc}", "_exit")

While True
   Sleep(15)
WEnd

Func _getpixel()
    Local $_color = 0xCCCCCC
    Local $_coordMouse = MouseGetPos ()
    Local $_coord = PixelSearch ($_coordMouse[0], $_coordMouse[1], $_coordMouse[0] +1, $_coordMouse[1] +1, $_color, 70)
	
    If Not @error Then
		MsgBox (0, "Inf.", "Founded at "& $_coord[0] &"x"& $_coord[1])
	Else
		MsgBox (0, "Inf.", "Fail! Got error.")
	EndIf
	
EndFunc

Func _exit()
    Exit
EndFunc



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

На будущее ...
Механика @error такова что если в описании функции есть упоменания о ней, то не обязательно проверять данные из того что получилось.
Т.е. этот момент можно было обыграть двояка. Первый пример выше. Второй через проверку...

Код:
If IsArray ($_coord) Then
	...

Как правило именно функция которую вызываем и обуславливает как мы будем проверять данные после неё.
 
Автор
S

scanfail

Знающий
Сообщения
244
Репутация
17
Спасибо тебе огромное! :beer: Осталось только оптимизировать его немножко, чтобы работал хотя бы на 90% и все будет шикарно!
 

running-frag

why me?
Сообщения
441
Репутация
60
Учти только что не вовсех играх можно захватить цвет курсора. Но оптимальный вариант (не скажу на 100%) это получения скрина через winAPI с мышкой. И уже из него получить нужный результат.
 
Автор
S

scanfail

Знающий
Сообщения
244
Репутация
17
Ты думаешь через WinApi будет быстрее и стоит обратить внимание на него?
 

running-frag

why me?
Сообщения
441
Репутация
60
scanfail [?]
Ты думаешь через WinApi будет быстрее и стоит обратить внимание на него?
Быстрее не будет. Но бывают ситуации когда только через него можно добиться желаемого результата. Я как то наткнулся когда меня PixelSearch "подвёл". Пусть дольше но в итоге вопрос решился.
 
Автор
S

scanfail

Знающий
Сообщения
244
Репутация
17
Можно пример в виде кода? Вот мучаюсь с этим PixelSearch-ом, в 1-2х из 10 только правильно выдает... :(
 

running-frag

why me?
Сообщения
441
Репутация
60
сделай скрин при нужной "мышке" (речь идёт о пикселях) и положи сюда, я не "вижу" о чём идёт речь
 
Автор
S

scanfail

Знающий
Сообщения
244
Репутация
17
Вот курсор в обычном состояние:
129c5dd20cb0.png


А вот она при наведение на монстра\персонажа:
c0b618f9a074.png
 

running-frag

why me?
Сообщения
441
Репутация
60
Код:
HotKeySet("{Insert}", "_getpixel")
HotKeySet("{Esc}", "_exit")

While True
   Sleep(15)
WEnd

Func _getpixel()
    Local $_color = 0xFFFF00 ; жёлтый
	;Local $_color = 0x99FFFF ; голубой
    Local $_coordM = MouseGetPos ()
    Local $_coord = PixelSearch ($_coordM[0], $_coordM[1], $_coordM[0] +20, $_coordM[1] +20, $_color, 20)
	
    If Not @error Then
		MsgBox (0, "Inf.", "Founded at "& $_coord[0] &"x"& $_coord[1])
	Else
		MsgBox (0, "Inf.", "Fail! Got error.")
	EndIf
	
EndFunc

Func _exit()
    Exit
EndFunc

Поиск идёт направо +20, вниз +20 относительно координат мыши. Поиграйся с вариациями (в данном скрипте выставленно 20).
 
Автор
S

scanfail

Знающий
Сообщения
244
Репутация
17
Заметил, что когда курсор находиться на светлой локацие, все без проблем находит, а вот стоит перенести курсор в темную локацию...
 

running-frag

why me?
Сообщения
441
Репутация
60
Код:
HotKeySet("{Insert}", "_getpixel")
HotKeySet("{Esc}", "_exit")

While True
   Sleep(15)
WEnd

Func _getpixel()
	Dim $_color[3][3]
	
	$_color[0][0] = 2			; счётчик
	$_color[1][1] = 0xFFFF00	; цвет
	$_color[1][2] = "yellow"	; описание
	$_color[2][1] = 0x99FFFF
	$_color[2][2] = "blue"
	
	Local $_coordM = MouseGetPos ()
	Local $_coord
	
	For $i = 1 To $_color[0][0]
		$_coord = PixelSearch ($_coordM[0], $_coordM[1], $_coordM[0] +20, $_coordM[1] +20, $_color, 20)
			
		If Not @error Then
			MsgBox (0, "Inf.", "Founded '"& $_color[$i][2] &"' ("& $_coord[0] &";"& $_coord[1]&").")
			ExitLoop
		EndIf
	Next
	
	MsgBox (0, "Inf.", "Nothing found.")
EndFunc

Func _exit()
    Exit
EndFunc

Ещё один вариант если у нас больше чем х2 цветов. Нужно только дописать в массив необходимые цвета и описания к ним.


upd:
А мышь мигает? Или цвета статические? И поищи центр мыши. Бывает так что её "цент" смещён, что может сролять в поиске пикселя.

Так же увелич до 50 shade.
 
Автор
S

scanfail

Знающий
Сообщения
244
Репутация
17
Не мигает мышка, а вот насчет поиска центра, как это делается? Я даже не в курсе :'(

Помню тут была похожая тема, кто-то писал бота для игры такого типа(тоже не было автонаведения), он как то решил эту проблему. Нужно бы поискать.
 

running-frag

why me?
Сообщения
441
Репутация
60
Для начало ссылку я тебе давал. Там показывает координаты относительно рабочей зоны. Т.е. без "ободков" в окне. Самый первый пиксель этой зоны будет x=0, y=0. И вот запускаешь скрипт и тянешь на координаты 0х0. Смотришь как сильно мышь куда либо "заплывает". Т.е. в 0х0 будет центр мыши (и она будет слева вверху окна). А там ты и увидешь где у неё центр.

Так же сразу можешь проверить не занимаемся ли мы тут ананасами, там есть "проверка удалённого пикселя". Сохрани координаты и повозюкай там мышкой, если цвета будут меняться - мы идём в правильном направлении. Если ничерта не меняется - тогда вопрос нужно решать по другому.

PS: я сам не догадывался как только начинал писать своего бота, со временем практика показала что в игре мышь постоянно меняет своё положение, при том что координаты не меняются, а меняется "картинка" мыши.
 
Верх