Что нового

Цикл нажатия клавиш до появления определённого цвета

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
в PixelSearch какой цвет ты ставишь?
 
Автор
L

Lazy

Новичок
Сообщения
40
Репутация
0
0x31F731 свой.
Вывод в колор тхт в каком формате идет?
650
109
140/162/247
Это как расшифровать?
650 и 109 это наверняка координаты.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
это в точке x=650, y=109
обнаружена точка цвета 0x8CA2F7 (не в хексе, а в десятичном представлении это 140/162/247)
 
Автор
L

Lazy

Новичок
Сообщения
40
Репутация
0
Так...полезли не в те сосёнки.=)
Зачем мне данный цвет?
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
В точке 650,109
где ты ищешь точку цвета 0x31F731
на самом деле находится точка цвета 0x8CA2F7
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Ты область поиска побольше задай
Код:
#include <Color.au3>
#Include <Misc.au3>

HotKeySet("{F3}", "fixcolor")

Func fixcolor()

 For $i=1 to 200

  $coord = PixelSearch( 600, 80, 700, 150, 0x31F731, 200-$i) 
  If Not @error Then
    $color = PixelGetColor($coord[0],$coord[1])
    FileWriteLine($file, "координаты " & $coord[0] & "," & $coord[1])
    FileWriteLine($file, "цвет " & _ColorGetRed($color) & "/" & _ColorGetGreen($color) & "/" & _ColorGetBlue($color))
  EndIf
 Next
EndFunc

$file = FileOpen("color.txt", 1)

While 1
 Sleep(60000)
Wend

FileClose($file)


И полученный файл надо смотреть снизу вверх.
 
Автор
L

Lazy

Новичок
Сообщения
40
Репутация
0
Да я понял...
Только задался вопросом 0x31F731 это тот самый цвет который нужен или нет.
У меня есть скрипт с пилота:
While_not 630 107 3276593 and 637 106 3276593 and 643 106 3276593 and 648 107 3276593
Send {F1}
Wait 700
End_while
630 107 кооринаты пикселя, а 3276593 цвет.
Этот скрипт работал.
Цвет перевел в хекс получаем 0x31FF31, а AutoIt Window Info выдал 0x31F731.
Вот и думаю какой же правильный...


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

По твоему скрипту определил все таки, что цвет 0x31FF31/
Теперь ушёл в поиски координат.


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

Твой скрипт по этому цвету выдал:
680 132 49/255/49(0x31FF31)
680 132 49/255/49(0x31FF31)
680 132 49/255/49(0x31FF31)
680 132 49/255/49(0x31FF31)
Почему только 4 одинаковых координаты выдает?
Ведь данный цвет присутствует во множестве точках прямоугольника 592, 123, 701, 161.
В нём так же присутствуют точки 650, 109 и 643, 109 и 636, 109 и 629, 109.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
У PixelSearch в отличии от PixelGetColor есть ещё один важный параметр - допустимое отклонение. Я делаю цикл по этому параметру. Поэтому вначале скрипт находит совершенно левые точки, которые допустимы с больши отклонением, а в конце файла, точки которые ближе всего по цвету.
Давай так. ты удали полученный файл color.txt
Я скрипт сделал немного понятнее. Запусти его ещё раз.
Код:
#include <Color.au3>
#Include <Misc.au3>

HotKeySet("{F3}", "fixcolor")

Func fixcolor()

 For $i=100 To 0 Step -1

  $coord = PixelSearch( 592, 123, 701, 161, 0x31F731, $i)
  If Not @error Then
    $color = PixelGetColor($coord[0],$coord[1])
    FileWriteLine($file, "отклонение цвета - " & $i & "; координаты " & $coord[0] & "," & $coord[1] & "; цвет " & _ColorGetRed($color) & "/" & _ColorGetGreen($color) & "/" & _ColorGetBlue($color))
  EndIf
 Next
EndFunc

$file = FileOpen("color.txt", 1)

While 1
 Sleep(60000)
Wend

FileClose($file)
 
Автор
L

Lazy

Новичок
Сообщения
40
Репутация
0
отклонение цвета - 7; координаты 652,132; цвет 49/255/49
отклонение цвета - 6; координаты 652,132; цвет 49/255/49
отклонение цвета - 5; координаты 652,132; цвет 49/255/49
отклонение цвета - 4; координаты 652,132; цвет 49/255/49
отклонение цвета - 3; координаты 652,132; цвет 49/255/49
отклонение цвета - 2; координаты 652,132; цвет 49/255/49
отклонение цвета - 1; координаты 652,132; цвет 49/255/49
отклонение цвета - 0; координаты 652,132; цвет 49/255/49
Это цвет,который требуется найти, только есть одно но.
Координаты одинаковые...
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Да, одинаковые, потому что точка та же самая.
В цикле уменьшается смещение по цвету, а не изменяется координата.
Вот ты нашел точку и цвет. То есть в твоём боте будет стоять
Код:
Func proverka()                
    Pixelsearch(652,132, 652,132, 0x31FF31)
    if not @error then $trigger = 0
EndFunc


Если ты хочешь найти вторую точку для проверки, то тебе надо изменить область поиска
x1,y1 - x2,y2
 
Автор
L

Lazy

Новичок
Сообщения
40
Репутация
0
Но фишка в том, что область поиска достаточно большая и там не только 1 точка данного цвета.

Вот скрин с примером выполненном на пилоте.
Требуется цикл нажатия F1 до момента пока не вылезут вот такие вопросы.
Остальные же пропускать.
Они высвечиваются тем же цветом, но в других пикселах.
Я брал на проверку область вокруг данных вопросов.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Не. Ты покажи скрин при котором нужно продолжать работу бота, и скрин при котором нужно остановить бота.
 
Автор
L

Lazy

Новичок
Сообщения
40
Репутация
0
Требуется, чтобы были вот такие вопросы.

Остальные же умения должны прощелкиваться кнопой.
Пример умения:

Есть умения, которые не высвечиваются наверху.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Знаков вопросов всегда 4 ?
Остальные умения всегда больше 4 символов?


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

Если так, то ты бы лучше проверял есть ли такие пиксели вот в этих (красных) зонах.
a5daa0af1ff4.jpg


Потому что если там пусто, так ясно что стоит 4 знака вопроса.
 
Автор
L

Lazy

Новичок
Сообщения
40
Репутация
0
Вопросов всегда 4.
Там есть умения и с меньшим количеством знаков.
Хотелось бы производить проверку не по области,а по писелу...
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Ну тогда ищи пиксели, которые в ? ? ? ? есть, а в остальных сообщениях отсутствуют.

Для прикола. А такое ты видел?
Код:
; Wait until something changes in the region 0,0 to 50,50

; Get initial checksum
$checksum = PixelChecksum(0,0, 50,50)

; Wait for the region to change, the region is checked every 100ms to reduce CPU load
While $checksum = PixelChecksum(0,0, 50, 50)
  Sleep(100)
WEnd

MsgBox(0, "", "Something in the region has changed!")
 
Автор
L

Lazy

Новичок
Сообщения
40
Репутация
0
Искал-пропускает.
Читал тоже, только ничего полезного не усвоил.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Как ничего полезного?
Сканируешь и считаешь PixelChecksum картинки с ? ? ? ?,
а потом регулярно сканишь ту же область и если PixelChecksum изменилась, то большой привет!
 
Автор
L

Lazy

Новичок
Сообщения
40
Репутация
0
Я не пойму реализацию пиксельчексумм...
 
Верх