Что нового

Добавление цвета в срипт

SHERILL

Новичок
Сообщения
6
Репутация
0
Привет :bye: у меня такая проблема, написал я бот для игры, автокликер по цвету, задал такие данные: PixelSearch(x, x, x, x, 0xFF0000, 50) работает вроде нормально, но на дальние расстояния не кликает (красный цвет(прицел) стает слегка прозрачным и розоватым, скажите пожалуйста как мне добавить ещё один цвет ?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Re: Search pixel color

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"Search pixel color" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Глобальный модератор.









Предупреждение За нарушение общих правил (пункт В.8):
Так как эта конференция называется "Русское сообщество AutoIt", язык общения на ней - Русский. Названия фирм или программных продуктов, аббревиатуры и т.д. должны быть написаны так, как они пишутся в оригинале, например не следует писать УСБ вместо USB. На форуме крайне не рекомендуется намеренно искажать русский язык и использовать "сетевой жаргон" на подобии "Аффтар выпей йадау!".


С уважением, ваш Глобальный модератор.
 

bugaj

Знающий
Сообщения
140
Репутация
11
if PixelSearch(x, x, x, x, 0xFF0000, 50) or PixelSearch(x, x, x, x, "Код другого цвета" ,50) then

не?
 

Dima1337

Осваивающий
Сообщения
186
Репутация
24
Ну как вариант можно сделать две функции и вызывать их поочередно или добавить в "AdlibRegister"
Код:
AdlibRegister(_heal_min,2000)
AdlibRegister(_heal_low,2000)

Func _heal_min()
   $coord1 = PixelSearch( 113, 42, 124, 56, 0xF72400)
   If Not @error Then
	  ControlSend($hWnd1, "","", "{5}")
	  Sleep(1000)
   Else
	  Return
   EndIf
EndFunc

Func _heal_low()
   $coord = PixelSearch( 113, 42, 124, 56, 0xDE9600)
   If Not @error Then
	  ControlSend($hWnd1, "","", "{5}")
	  Sleep(1000)
   Else
	  Return
   EndIf
EndFunc

Func _Exit()
	AdlibUnRegister('_heal_min')
	AdlibUnRegister('_heal_low')
	Exit
EndFunc

По другому заставить работать "PixelSearch" у меня не получалось, "ControlSend" категорически отказывался отправляться.
Также советую обратить внимание на "shade-variation". Если по простому то вот на это значение:
Код:
PixelSearch(x,x,x,x,x,ВОТ ЭТО)
 

ORLANGUR-M3

Новичок
Сообщения
15
Репутация
0
При наличии альфаканала придется отказаться от пикселсерча. Тебе нужноцвет пикселей при помощи _колоргетРГБ и анализировать его. Т.е. искать цвет в красных тонах:
R>200, G<50, B<50.
Вот часть моего бота автотушения в врлдофтанкс (не помню, завершен ли, я сейчас на работе, а это одна из копий.):
Код:
;Функция сканирования точек в отслеживаемой области
Func Scaning_Fire()
	$i+=1
;_FileWriteLog("Logs\log.txt", 'Функция: Scaning_Fire, Итерация: '&$i)
;_ScreenCapture_Capture ('Logs\Img'&$i&'.jpg', $Position_Square[0], $Position_Square[1], $Position_Square[2], $Position_Square[3])
;_ScreenCapture_Capture ('Logs\Img'&$i&'_2.jpg', $Position_Square[0], $Position_Square[1]-100, $Position_Square[2]+100, $Position_Square[3]+100)
;_FileWriteLog("Logs\log.txt", 'Скриншот Img'&$i&'.jpg сохранен')
	For $y=$Position_Square[1] To $Position_Square[3] Step 1
		For $x=$Position_Square[0] To $Position_Square[2] Step 1
			Get_Color($x,$y)
			if Color_Matching() Then
				Return 1
				ExitLoop(2)
			EndIf
		Next
		Sleep(10)
	Next
EndFunc ;=>Main

Код:
;Функция определения цвета в пикселе с текущими координатами
Func Get_Color($x,$y)
	$Color=_ColorGetRGB(PixelGetColor($x,$y));Fire! [Red,Green,Blue]
;_FileWriteLog("Logs\log.txt",'Функция: Get_Color('&$x&','&$y&'), Цвет RGB: ['&$Color[0]&','&$Color[1]&','&$Color[2]&']')
EndFunc;=>Scaning_Fire

Код:
;Функция проверки условия сравнения цвета с заданным
Func Color_Matching()
	$res=Execute('('&$Color[0]&$Logic[1]&$Color_RGB[0]&')And('&$Color[1]&$Logic[2]&$Color_RGB[1]&')And('&$Color[2]&$Logic[3]&$Color_RGB[2]&')')
;_FileWriteLog("Logs\log.txt", 'Проверка цвета: '&$Color[0]&$Logic[1]&$Color_RGB[0]&', '&$Color[1]&$Logic[2]&$Color_RGB[1]&', '&$Color[2]&$Logic[3]&$Color_RGB[2]&', Результат:'&$res)
	Return $res
EndFunc;=>Scaning_Fire


Где единожды загружается:
Код:
Func Load_Options_Panel()
	$Position_Square[0]=IniRead('Options_Panel.ini',$Panel_Options, 'Position_Square_1_H','76') ;Размер области поиска пиксела по координатам ниж. лев. точки и прав. верх.
	$Position_Square[1]=IniRead('Options_Panel.ini',$Panel_Options, 'Position_Square_1_V','39') ;Размер области поиска пиксела по координатам ниж. лев. точки и прав. верх.
	$Position_Square[2]=IniRead('Options_Panel.ini',$Panel_Options, 'Position_Square_2_H','105') ;Размер области поиска пиксела по координатам ниж. лев. точки и прав. верх.
	$Position_Square[3]=IniRead('Options_Panel.ini',$Panel_Options, 'Position_Square_2_V','36') ;Размер области поиска пиксела по координатам ниж. лев. точки и прав. верх.
	$Color_RGB[0]=IniRead('Options_Panel.ini',$Panel_Options, 'Red','200') ;Предельные значения по каждой составляющей искомого цвета >R;<G;<B
	$Color_RGB[1]=IniRead('Options_Panel.ini',$Panel_Options, 'Green','50') ;Предельные значения по каждой составляющей искомого цвета >R;<G;<B
	$Color_RGB[2]=IniRead('Options_Panel.ini',$Panel_Options, 'Blue','50') ;Предельные значения по каждой составляющей искомого цвета >R;<G;<B
	$Logic=IniRead('Options_Panel.ini',$Panel_Options, 'Logic','>= <= <=') ;Логика, по которой идет определение появления нужного цвета
EndFunc

из
Код:
[DEFAULT_PANEL]
Position_Square_1_H=150
Position_Square_1_V=47
Position_Square_2_H=159
Position_Square_2_V=45
Red=220
Green=130
Blue=40
Logic=>= >= <=
[DAMAGE_PANEL_01]
Position_Square_1_H=76
Position_Square_1_V=38
Position_Square_2_H=105
Position_Square_2_V=36
Red=200
Green=50
Blue=50
Logic=>= <= <=

Т.е. берем цвет из области с шагом таким то (2йной цик, 1ая функция) при помощи второй функции:
Берется цвет пикселя в позиции ХУ и это значение разбивается на каждый канал РГБ.
В третьйей функции анализируется массив их нескольких условий.
В канале ред найденое значение должно быть не менее заданного (первое значение переменной логик, записаны операторы сравнения). Тоже самое для грин и блю. Если все так, функция вернет единицу, и вызовет действие. если же 0, то поиск продолжится сначала
 
Верх