Что нового

[Автоматизация] Выполнение операции после выполнения одновременно 2-х условий

be4hoctb

Новичок
Сообщения
38
Репутация
0
Ситуация такая. Нужно автоматизировать торговлю товарами. Скрипт проверяет наличие пикселя в области количества товара и проверяет наличие доступной цены и только при соблюдении этих 2 условий выполняет действие. Если условия не выполняются то переходит к следующему товару и так до 7 раз.

Код:
Func _Eda()
   
    $coord = PixelSearch(250, 313, 263, 325, 0x000000) And  $coord = PixelSearch(550, 313, 550, 325, 0x000000)
    If Not @error Then
		MouseClick('Left', 610, 318, 1)
		
	Else
		MouseClick('Left', 100, 360, 1)
     $coord = PixelSearch(250, 313, 263, 325, 0x000000) And  $coord = PixelSearch(550, 313, 550, 325, 0x000000)
	 If Not @error Then
		MouseClick('Left', 610, 358, 1)
EndIf
EndIf
EndFunc
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
be4hoctb
Если я правильно понял, то как-то так
Код:
ConsoleWrite(_Eda() & @CRLF)

Func _Eda()
  Local $coord1, $coord2
  For $i = 1 To 7
    $coord1 = PixelSearch(250, 313, 263, 325, 0x000000)
    $coord2 = PixelSearch(550, 313, 550, 325, 0x000000)
    If IsArray($coord1) And IsArray($coord2) Then
      MouseClick('Left', 610, 318, 1)
      Return $i
    EndIf
    MouseClick('Left', 100, 360, 1)
  Next
  Return 0
EndFunc
 
Автор
B

be4hoctb

Новичок
Сообщения
38
Репутация
0
Направление верное, я не знал как сделать так чтобы выполнялось действие при выполнении двух PixelSearch одновременно.
После выполнения действия функция завершается.
Что бы было понятнее я выложил полный скрипт.
В функции Eda я хочу добавить дополнительную проверку пикселя и при совпадении обоих чтобы выполнялось действие, а если не совпало то переходить к выполнению поиска следующего.

Код:
HotKeySet("{ESC}","Stop")

Func Stop ()
	WinMove($SHK_Title, "", 5, 10)
    Exit 0
EndFunc


_SetWindow()

Func _SetWindow()
    Local $aPos, $aClientSize, $Win_Border[3]
    $aClientSize = WinGetClientSize($SHK_Title)
    $aPos = WinGetPos($SHK_Title)
    $Win_Border[1] = ($aPos[2] - $aClientSize[0]) / 2
    $Win_Border[2] = $aPos[3] - $aClientSize[1] - $Win_Border[1]
    WinMove($SHK_Title, "", "-" & $Win_Border[1], "-" & $Win_Border[2], 1000, 720)
    Return 'ok'
EndFunc   ;==>SetWindow


While 1
	_Eda()
	Sleep (500)
    _Monahi()
	Sleep (500)
    _Razvedka()
	Sleep (500)
    _Ataka()
	Sleep (500)
	_Error()
	Sleep (15500)
WEnd

Func _Monahi()
    MouseClick('Left', 858, 70, 1) ; Переход по основной вкладке
    MouseClick('Left', 896, 116, 1) ; Переход по второстепенно вкладке
    Sleep (1000)
    $coord = PixelSearch(853, 430, 923, 442, 0x000000) ; Если поле найдено
    If Not @error Then
		SoundPlay(@WindowsDir & "\media\tada.wav", 1)
    EndIf
EndFunc


Func _Razvedka()
    $coord = PixelSearch(870, 58, 881, 72, 0xFFFFEE) ; Если появились два меча
    If Not @error Then
        MouseClick('Left', 858, 70, 1) ; Переход по основной вкладке
        MouseClick('Left', 705, 115, 1) ; Переход по второстепенно вкладке
        $coord = PixelSearch(853, 430, 923, 442, 0x000000) ; Если есть поле отправка
        If Not @error Then
		SoundPlay(@WindowsDir & "\media\tada.wav", 1)
        EndIf
    EndIf
EndFunc


Func _Ataka()
    $coord = PixelSearch(870, 58, 881, 72, 0xFFFFEE) ; Если появились два меча
    If Not @error Then
        MouseClick('Left', 858, 70, 1) ; Переход по основной вкладке
        MouseClick('Left', 640, 113, 1) ; Переход по второстепенно вкладке
        $coord = PixelSearch(32, 440, 34, 442, 0x000000) ; Если есть поле отправка
        If Not @error Then
			SoundPlay(@WindowsDir & "\media\tada.wav", 1)
        EndIf
    EndIf
EndFunc



Func _Eda()
    MouseClick('Left', 601, 72, 1) ; Переход по основной вкладке
    MouseClick('Left', 754, 104, 1) ; Переход по второстепенно вкладке
	MouseClick('Left', 551, 39, 1) ;меняем деревню
	MouseClick('Left', 136, 213, 1) ; Вкладка Еда
	MouseClick('Left', 100, 320, 1) ;яблоки
    Sleep (1000)
    $coord = PixelSearch(250, 313, 263, 325, 0x000000) ; Если поле найдено
    If Not @error Then
		MouseClick('Left', 610, 318, 1);низкая стоимость
		MouseClick('Left', 575, 318, 1);высокая стоимость
		MouseClick('Left', 878, 504, 1);продажа
	Else
		MouseClick('Left', 100, 360, 1) ;сыр
     $coord = PixelSearch(250, 353, 263, 366, 0x000000) ; Если поле найдено
	 If Not @error Then
		MouseClick('Left', 610, 358, 1);низкая стоимость
		MouseClick('Left', 575, 358, 1);высокая стоимость
		MouseClick('Left', 878, 504, 1);продажа
	 Else
		MouseClick('Left', 100, 400, 1) ;мясо
     $coord = PixelSearch(250, 392, 263, 405, 0x000000) ; Если поле найдено
	 If Not @error Then
		MouseClick('Left', 610, 397, 1);низкая стоимость
		MouseClick('Left', 575, 397, 1);высокая стоимость
		MouseClick('Left', 878, 504, 1);продажа
	 Else
		MouseClick('Left', 100, 435, 1) ;хлеб
     $coord = PixelSearch(250, 432, 263, 445, 0x000000) ; Если поле найдено
	 If Not @error Then
		MouseClick('Left', 610, 436, 1);низкая стоимость
		MouseClick('Left', 575, 436, 1);высокая стоимость
		MouseClick('Left', 878, 504, 1);продажа
	 Else
		MouseClick('Left', 100, 480, 1) ;овощи
     $coord = PixelSearch(250, 472, 263, 485, 0x000000) ; Если поле найдено
	 If Not @error Then
		MouseClick('Left', 610, 478, 1);низкая стоимость
		MouseClick('Left', 575, 478, 1);высокая стоимость
		MouseClick('Left', 878, 504, 1);продажа
	 Else
		MouseClick('Left', 100, 520, 1) ;рыба
     $coord = PixelSearch(250, 512, 263, 525, 0x000000) ; Если поле найдено
	 If Not @error Then
		MouseClick('Left', 610, 517, 1);низкая стоимость
		MouseClick('Left', 575, 517, 1);высокая стоимость
		MouseClick('Left', 878, 504, 1);продажа
	 Else
		MouseClick('Left', 100, 560, 1) ;эль
     $coord = PixelSearch(250, 551, 263, 565, 0x000000) ; Если поле найдено
	 If Not @error Then
		MouseClick('Left', 610, 557, 1);низкая стоимость
		MouseClick('Left', 575, 557, 1);высокая стоимость
		MouseClick('Left', 878, 504, 1);продажа
	 Else
		MouseClick('Left', 60, 213, 1) ; Вкладка Ресурсы
		MouseClick('Left', 100, 320, 1) ;Дерево
    $coord = PixelSearch(250, 313, 263, 325, 0x000000) ; Если поле найдено
    If Not @error Then
		MouseClick('Left', 610, 318, 1);низкая стоимость
		MouseClick('Left', 575, 318, 1);высокая стоимость
		MouseClick('Left', 878, 504, 1);продажа
	Else
		MouseClick('Left', 100, 360, 1) ;Камень
     $coord = PixelSearch(250, 353, 263, 366, 0x000000) ; Если поле найдено
	 If Not @error Then
		MouseClick('Left', 610, 358, 1);низкая стоимость
		MouseClick('Left', 575, 358, 1);высокая стоимость
		MouseClick('Left', 878, 504, 1);продажа
	 Else
		MouseClick('Left', 100, 400, 1) ;Железо
     $coord = PixelSearch(250, 392, 263, 405, 0x000000) ; Если поле найдено
	 If Not @error Then
		MouseClick('Left', 610, 397, 1);низкая стоимость
		MouseClick('Left', 575, 397, 1);высокая стоимость
		MouseClick('Left', 878, 504, 1);продажа
	 EndIf
	 EndIf
	 EndIf
	 EndIf
	 EndIf
	 EndIf
	 EndIf
	 EndIf
	 EndIf
	 EndIf

EndFunc


Func _Error()
     $coord = PixelSearch(361, 325, 552, 358, 0x82939E) ; Поле ошибки
	 If Not @error Then
	 MouseClick('Left', 491, 377, 1);OK
	 EndIf
EndFunc


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

По твоему примеру вот что собрал.
Все ли правильно и можно ли использовать Local как у меня в примере? и ничего что я переменные одинаково называю в одной функции? (Local $p1, $p2)

Код:
Func _Eda()
    MouseClick('Left', 601, 72, 1) ; Переход по основной вкладке
    MouseClick('Left', 754, 104, 1) ; Переход по второстепенно вкладке
	;MouseClick('Left', 551, 39, 1) ;меняем деревню
	MouseClick('Left', 61, 211, 1) ; Вкладка Ресурсы
	MouseClick('Left', 100, 320, 1) ;дерево
	
	Local $p1, $p2
    $p1 = PixelSearch(250, 313, 263, 323, 0x000000) ;количество товара
	$p2 = PixelSearch(500, 313, 505, 323, 0x000000);цена товара

if IsArray ($p1) and IsArray ($p2) Then ; Если поле найдено

    	MouseClick('Left', 610, 318, 1);низкая стоимость
		MouseClick('Left', 575, 318, 1);высокая стоимость
		MouseClick('Left', 878, 504, 1);продажа
	Else
		MouseClick('Left', 100, 360, 1) ;сыр

    Local $p1, $p2
    $p1 = PixelSearch(250, 353, 263, 364, 0x000000) ;количество товара
	$p2 = PixelSearch(500, 354, 505, 364, 0x000000);цена товара

if IsArray ($p1) and IsArray ($p2) Then ; Если поле найдено

		MouseClick('Left', 610, 358, 1);низкая стоимость
		MouseClick('Left', 575, 358, 1);высокая стоимость
		MouseClick('Left', 878, 504, 1);продажа

	 EndIf
	 EndIf

EndFunc
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
be4hoctb [?]
Все ли правильно
Теоритически правильно, практически - проверяйте.

переменные одинаково называю в одной функции
Так как вы их используете только для проверки выполнения функции, то ничего страшного. И объявить их достаточно один раз (но и повторные объявления не запрещены).

А это вариант для вашего полного кода
Код:
...
  Sleep(1000)
  PixelSearch(250, 313, 263, 325, 0x000000) ; Если поле найдено
  If Not @error Then
    PixelSearch(550, 313, 550, 325, 0x000000) ; <= дополнительное условие
    If Not @error Then
      MouseClick('Left', 610, 318, 1);низкая стоимость
      MouseClick('Left', 575, 318, 1);высокая стоимость
      MouseClick('Left', 878, 504, 1);продажа
    EndIf
  Else
    MouseClick('Left', 100, 360, 1) ;сыр
    PixelSearch(250, 353, 263, 366, 0x000000) ; Если поле найдено
    If Not @error Then
      PixelSearch(550, 313, 550, 325, 0x000000) ; <= дополнительное условие
      If Not @error Then
        MouseClick('Left', 610, 358, 1);низкая стоимость
        MouseClick('Left', 575, 358, 1);высокая стоимость
        MouseClick('Left', 878, 504, 1);продажа
      EndIf
    Else
; и т.д.
...
Здесь для проверки функции используется @error, поэтому присвоение $coord излишне (вы её всё равно не используете), хоть и не запрещено.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
be4hoctb [?]
Это возможно сделать?
Возможно
OffTopic:
при помощи передачи в функцию параметров
Но здесь жёсткие правила: одна тема - одна проблема.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
be4hoctb [?]
Помогите еще с одной задумкой.
Предупреждение За нарушение общих правил (пункт В.4):
Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.


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