Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: Pronin on February 21, 2016, 08:31:46 AM

Title: Логика работы с программой
Post by: Pronin on February 21, 2016, 08:31:46 AM
Доброго времени суток.
Опыт в программировании у меня закончился ещё на Бейсике (то есть линейное исполнение программ, нет переменных Итак далее), но желание научится есть давно],а вот сейчас по прошествии лет так 30 понадобилось написать бота для игрушки (браузерка).
Начал думать как это сделать но возник вопрос по принципу работы логики.
Так вот после прочтения кучи тем понял что принцип построения программы такой :
1) Есть ядро которое постоянно висит и мониторит состояние игры
2) В зависимости от происходящего начинают выполнятся какие либо действия.
3) После выполнения подпрограмм состояние возвращается в п.1

Состояния которые надо постоянно мониторить (например потеря соединения) надо включать в пункт 1, но тут же вопрос, а что если это состояние наступит при выполнении любой подпрограммы пункта 2? Значит надо добавлять проверку и в п.2? Или п.1 постоянно мониторит не зависимо от того что выполняется в данный момент и может отменить выполнение п.2?

P.S. Как то сумбурно получилось, но тяжело сформулировать свои мысли когда не занимался ООП даже Паскаль в руках не держал:)

P.S.S А что происходит с проектом в данный момент ?
Title: Re: Логика работы с программой
Post by: Johnny on February 21, 2016, 09:08:33 AM
да уж, сумбурно.

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

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

ты спросить то что хотел? ))
Title: Re: Логика работы с программой
Post by: Johnny on February 21, 2016, 09:12:16 AM
Quote
P.S.S А что происходит с проектом в данный момент ?

вялотекущее развитие, направленное скорее на подчищение хвостов, чем какие то революционные решения.
я повторюсь, сейчас функционал позволяет решить наверное 90% задач пользователя, поэтому особого смысла что то радикально курочить нет.

из следующих обозримых целей - выпуск 64 битной версии. изза ограничений ОС, взаимодействие 32 и 64 битных приложений друг с другом весьма ограничено.
Title: Re: Логика работы с программой
Post by: Pronin on February 21, 2016, 10:30:21 AM
да уж, сумбурно.

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

Нет, мне не надо тупо лупить по кнопкам:) Это можно сделать и на матросах к мышке и клаве.

Мне нужна логика в действиях:)

Ну значит будем изучать с нуля.

P.S Вопрос был в том что правильно ли я понимаю принцип построения программы
Title: Re: Логика работы с программой
Post by: Кликермен on February 21, 2016, 11:11:00 AM
есть основное тело скрипта, есть дочерние(потоки)
Можешь дочерними потоками проверять сбои,  менять флаги, которые будут выключать выполнение скрипта, переходя на исправление сбоев
Title: Re: Логика работы с программой
Post by: Pronin on February 21, 2016, 02:20:47 PM
Так как мою тему посетил САМ Джонни то это судьба, и надо начинать осваивать данную программу:)

Итак, так как Hello World в бейсике я написал ещё лет 30 назад то решено было начать с другого, а именно с GETSCREEN и дальнейшем сохранением скриншота в папочку:)
Вот он мой эпохальный первый код:
Code: [Select]
1 GETSCREEN(1,155,1602,1035)
2 SCREENSHOT
3 print ("ОМГ получилось")
4 HALT
Далее я наслаждался свежесделанной картинкой минут 5.
Ну думаю с почином:)

Теперь задача сложнее:

Есть 8 мест (жестко привязанных по координатам) где может появится 1 из цветов пикселя и в зависимости от цвета мне нужно выполнить разные действия.

Логику я же правильно понимаю:
В основном теле программы делаем GETSCREEN , далее смотрим по координатам цвет пикселя и если он (допустим) 100 то выполняется действие LCLICK по этим координатам, а если (допустим) 200 то надо загрузить подпрограмму со скриптом.

При этом надо проводить проверку на потерю соединения путём сравнения картинки или подсчёт пикселей в определённой зоне на экране (ну это я думаю можно вывести в ядро программы и при совпадении прерывать скрипт)

Title: Re: Логика работы с программой
Post by: Pronin on February 22, 2016, 03:46:29 PM
Итак появилось время на продолжение попыток работ по созданию мегасупербота.

Прочитал про массивы и примерно понял как они работают и решил попробовать использовать их в программе:

Code: [Select]
GETSCREEN (0,153,1602,1035)
COLORMODE(8)
SCANPICTURE($var, 164,853,1447,1023, "take.bmp",5026082,95)
 while (arrsize($var) > 0)
  $y = arrpop($var)
  $x = arrpop($var)
  PRINT(""$x,":"$y)
  end_cyc
  WAIT(5)

На выходе я получил 4 координаты из 4 возможных:) Это был кусок из нужного мне ядра..

Теперь вопрос знатокам:
GETSCREEN глобальная команда и доступна в из любого места программы,потока,подпрограммы?
Title: Re: Логика работы с программой
Post by: Pronin on February 23, 2016, 01:00:02 AM
А как мне модифицировать мой код что бы по одному скану можно было просканировать 3 области и с разными картинками?


Title: Re: Логика работы с программой
Post by: Pronin on February 23, 2016, 03:24:17 AM
Пока смотрел телевизор придумал как можно такое осуществить.

Code: [Select]
GETSCREEN (0,153,1602,1035)
COLORMODE(8)
SCANPICTURE($var1, 100,100,100,100, "take1.bmp",5026082,95)
SCANPICTURE($var2, 200,200,200,200, "take2.bmp",5026082,95)
SCANPICTURE($var3, 300,300,300,300, "take3.bmp",5026082,95)
 while (arrsize($var1) > 0)
  $y = arrpop($var1)
  $x = arrpop($var1)
  PRINT("Найдено совпадений:", arrsize($var1))
 end_cyc
waitms(50)
 while (arrsize($var2) > 0)
  $y = arrpop($var2)
  $x = arrpop($var2)
  PRINT("Найдено совпадений:", arrsize($var2))
 end_cyc
 while (arrsize($var3) > 0)
  $y = arrpop($var3)
  $x = arrpop($var3)
  PRINT("Найдено совпадений:", arrsize($var3))
 end_cyc
  WAIT(5)

Будет работать?

И есть ли какие то более продуктивные способы сделать эти действия?

Title: Re: Логика работы с программой
Post by: Pronin on February 23, 2016, 02:23:05 PM
Code: (clickermann) [Select]
SUB(способ, ($par0, $par1, $par2, $par3, $par4, $par5, $par6, $par7) // подпрограмма с параметрами
GETSCREEN ($par1, $par2, $par3, $par4) // сканируется только сектор поиска, это быстрее чем сканировать большой общий сектор
COLORMODE(8)
SCANPICTURE($par0, $par1, $par2, $par3, $par4, $par5, $par6, $par7)
 while (arrsize($par0) > 0)
  $y = arrpop($par0)
  $x = arrpop($par0)
  PRINT("Найдено совпадений:", arrsize($par0))
 end_cyc
waitms(50)   
END_SUB

способ($var1, 100,100,100,100, "take1.bmp",5026082,95) // вызов подпрограммы (обязательно ниже подпрограммы)
способ($var2, 200,200,200,200, "take2.bmp",5026082,96) // число вызовов с различными параметрами, число используемых параметров должно соответствовать описанным в подпрограмме.
способ($var2, 300,300,300,300, "take2.bmp",5026082,97)


Уважаемый Кирилл, объясните мне как Ваш код работает по пунктам... просто у меня опыта совсем нет и смотрю на него как баран на новые ворота:) Понять не могу....

Да кстати а как вставлять код как у вас с подсветкой лексики?
Title: Re: Логика работы с программой
Post by: Pronin on February 23, 2016, 04:20:10 PM
SUB(способ, ($par0, $par1, $par2, $par3, $par4, $par5, $par6, $par7) <---- Эта строчка означает что мы создаём подпрограмму с именем "способ" и параметрами в виде переменных?
А значения значения переменных где объявляются?
Вернее даже как мне присвоить им значения?

$par0=100  <-- так?



P.S. Вы меня извините что приходится разжёвывать такие простые для Вас вещи...
Title: Re: Логика работы с программой
Post by: Кликермен on February 23, 2016, 04:27:37 PM
SUB(способ, ($par0, $par1, $par2, $par3, $par4, $par5, $par6, $par7) <---- Эта строчка означает что мы создаём подпрограмму с именем "способ" и параметрами в виде переменных?
А значения значения переменных где объявляются?
Вернее даже как мне присвоить им значения?

$par0=100  <-- так?


Code: (clickermann) [Select]
способ($var1, 100,100,100,100, "take1.bmp",5026082,95) // вызов подпрограммы (обязательно ниже подпрограммы) вот здесь мы передаем координаты
Title: Re: Логика работы с программой
Post by: Pronin on February 23, 2016, 05:21:08 PM
SUB(способ, ($par0, $par1, $par2, $par3, $par4, $par5, $par6, $par7) <---- Эта строчка означает что мы создаём подпрограмму с именем "способ" и параметрами в виде переменных?
А значения значения переменных где объявляются?
Вернее даже как мне присвоить им значения?

$par0=100  <-- так?


Code: (clickermann) [Select]
способ($var1, 100,100,100,100, "take1.bmp",5026082,95) // вызов подпрограммы (обязательно ниже подпрограммы) вот здесь мы передаем координаты



То есть после вызова подпрограммы переменным в ней будут присвоены такие данные: $par0 = $var1 , $par1 = 100, $par2 = 100, $par3 = 100, $par4 = 100, $par5 = "take1.bmp" , $par6 = 5026082, $par7 = 95

Вот это поворот:)
Title: Re: Логика работы с программой
Post by: Pronin on February 23, 2016, 07:24:19 PM
Хмммм выдаёт ошибку ( не найден 0)


Сделал логирование после каждого пункта и получилось что ошибка в передачи имени файла.. то есть он передаёт в подпрограмму вместо take1.bmp   --> 0
Title: Re: Логика работы с программой
Post by: Pronin on February 23, 2016, 07:56:17 PM
ну значит картинки с таким названием, в папке в которой сохранён скрипт ненайдено.

Не не не .. Сделал вывод лога значений переменных ... он вернул 0 на все
Code: (clickermann) [Select]
SUB(get_items,($get0, $get1, $get2, $get3, $get4, $get5, $get6, $get7))
   LOGWRITE ("Ïåðåìåííûå ïîëó÷èíû:", $get0, $get1, $get2, $get3, $get4, $get5, $get6, $get7)
   GETSCREEN( $get1, $get2, $get3, $get4)
      LOGWRITE ("Êàðòèíêà ïîëó÷åíà")
      COLORMODE(8)
      LOGWRITE ("Êàðòèíêà îáðàáîòàíà")
      WAITMS(50)
     
   SCANPICTURE($get0, $get1, $get2, $get3, $get4, $get5, $get6, $get7)
   LOGWRITE ("Ñêàíèðîâàíèå îáëàñòè âûïîëíåíî")
      WHILE (arrsize($get0) > 0)
         PRINT ("Íàéäåíî ñâîáîäíûõ ñëîòîâ :", arrsize($get0)/2)
      END_CYC
END_SUB
     
     
 
 LOGWRITE ("Ïîäïðîãðàììà Çàïóñêàåòñÿ")
get_items( $var, 168, 867, 1437, 1015, "take.bmp", 5026082, 99)
 LOGWRITE ("Ïîäïðîãðàììà Çàâåðøåíà")

 WAIT(10)
   

Что то тут не так....





Title: Re: Логика работы с программой
Post by: Oraven on February 23, 2016, 08:32:08 PM
На кой ляд ты в параметрах лишние скобки приписал? Массив не может участвовать в параметрах подпрограммы

Code: (clickermann) [Select]
SUB(get_items,$get, $get1, $get2, $get3, $get4, $get5, $get6, $get7)
   LOGWRITE ("Переменные получины:", $get0, $get1, $get2, $get3, $get4, $get5, $get6, $get7)
   GETSCREEN($get1, $get2, $get3, $get4)
   LOGWRITE ("Картинка получена")
   COLORMODE(8)
   LOGWRITE ("Картинка обработана")
 
   SCANPICTURE($get0, $get1, $get2, $get3, $get4, $get5, $get6, $get7)
   LOGWRITE ("Сканирование области выполнено")
   WHILE (arrsize($get0) > 0)
      PRINT ("Найдено свободных слотов :", arrsize($get0)/2)
   END_CYC
END_SUB



LOGWRITE ("Подпрограмма Запускается")
get_items($var, 168, 867, 1437, 1015, "take.bmp", 5026082, 99)
LOGWRITE ("Подпрограмма Завершена")

WAIT(10)
Title: Re: Логика работы с программой
Post by: Pronin on February 25, 2016, 01:25:31 AM
Ура, я сделал наполовину то что хотел:

Code: (clickermann) [Select]
SUB(get_items,$get, $get1, $get2, $get3, $get4, $get5, $get6, $get7)
   GETSCREEN( $get1, $get2, $get3, $get4)
      LOGWRITE ("Êàðòèíêà ïîëó÷åíà")
      COLORMODE(8)
      LOGWRITE ("Êàðòèíêà îáðàáîòàíà")
      WAITMS(50)
     
   SCANPICTURE($get0, $get1, $get2, $get3, $get4, $get5, $get6, $get7)
   LOGWRITE ("Ñêàíèðîâàíèå îáëàñòè âûïîëíåíî")
      WHILE (arrsize($get0) > 0)
      $y = arrpop($get0)
      $x = arrpop($get0)
  LCLICK( $x, $y)
    WAIT(3)
  LCLICK(598,1030)
    WAIT(3)                           
        PRINT ("Íàéäåíî çàâåðø¸ííûõ ïðåäìåòîâ :" , $x , ":" , $y)
      END_CYC
END_SUB


SUB(craft_items,$cre, $cre1, $cre2, $cre3, $cre4, $cre5, $cre6, $cre7)
   GETSCREEN( $cre1, $cre2, $cre3, $cre4)
      LOGWRITE ("Êàðòèíêà êðàôòà ïîëó÷åíà")
      COLORMODE(8)
      LOGWRITE ("Êàðòèíêà êðàôòà îáðàáîòàíà")
      WAITMS(50)
     
   SCANPICTURE($cre0, $cre1, $cre2, $cre3, $cre4, $cre5, $cre6, $cre7)
   LOGWRITE ("Ñêàíèðîâàíèå îáëàñòè êðàôòà")
      WHILE (arrsize($cre0) > 0)
      $y = arrpop($cre0)
      $x = arrpop($cre0)
  LCLICK( $x, $y)
    WAIT(3)
  LCLICK(1513,907)
    WAIT(3)
        LCLICK(129,599)
  SETTHREAD (take_res, 1)
          WAIT(30)
SETTHREAD (take_res, 0)                           
        PRINT ("Íàéäåíî ñâîáîäíûõ ñëîòîâ äëÿ êðàôòà :" , $x , ":" , $y)
      END_CYC
END_SUB
         
 
 LOGWRITE ("Ïîäïðîãðàììà Çàïóñêàåòñÿ")
 SETTHREAD (take_res, 0)
get_items( $var, 168, 867, 1243, 1015, "take.bmp", 5026082, 95)
 WAITMS(50)
craft_items( $var1, 168, 867, 1243, 1015, "create.bmp", 5026082, 94)
 LOGWRITE ("Ïîäïðîãðàììà Çàâåðøåíà")
 SETTHREAD (take_res, 1)

 WAIT(10)




Но тут появилась проблема :
Иногда не хватает ресурсов на крафт какой либо вещи и бот встаёт так как нет проверки на достаточность материалов. Есть ли алгоритм как мне определять кол-во ресурсов (цифры в виде картинок) или искать другие пути?
Title: Re: Логика работы с программой
Post by: dramster on February 25, 2016, 02:38:15 AM
вот - http://crapware.aidf.org/forum/index.php?topic=33.msg8320#msg8320 .

если цифры на непрозрачном статичном фоне и без сглаживания, то можно использовать вот это http://crapware.aidf.org/forum/index.php?topic=33.msg8335#msg8335
Title: Re: Логика работы с программой
Post by: Vint on February 25, 2016, 06:18:34 AM
Только не 'вот', а вот:
http://crapware.aidf.org/forum/index.php?topic=88.msg1571#msg1571
Там версия 1.5 с блэкджеком колормодом и процентами
Title: Re: Логика работы с программой
Post by: dramster on February 25, 2016, 11:11:11 AM
 :D беспорядок, добавь ссылку в шапку "типовые алгоритмы, вводные статьи".
Title: Re: Логика работы с программой
Post by: Pronin on March 08, 2016, 12:12:30 AM
Только не 'вот', а вот:
http://crapware.aidf.org/forum/index.php?topic=88.msg1571#msg1571
Там версия 1.5 с блэкджеком колормодом и процентами

Во общем решил не считывать циферки а проверить появление окна о том что не хватает ресурсов.

Получилось вот что:

Code: (clickermann) [Select]
THREAD(take_res, 0)

lDown(1573,309)
waitms(200)
move(1573,311)
waitms(6)
move(1572,313)
waitms(6)
move(1572,315)
waitms(6)
move(1571,320)
waitms(6)
move(1571,325)
waitms(8)
move(1570,328)
waitms(8)
move(1570,332)
waitms(8)
move(1569,336)
waitms(8)
move(1569,339)
waitms(8)
move(1568,342)
waitms(8)
move(1568,345)
waitms(6)
move(1567,348)
waitms(8)
move(1567,350)
waitms(8)
move(1567,353)
waitms(8)
move(1566,357)
waitms(8)
move(1566,359)
waitms(8)
move(1565,362)
waitms(8)
move(1565,364)
waitms(6)
move(1565,366)
waitms(8)
move(1564,368)
waitms(8)
move(1564,370)
waitms(8)
move(1564,372)
waitms(8)
move(1564,374)
waitms(8)
move(1563,378)
waitms(8)
move(1563,380)
waitms(8)
move(1563,383)
waitms(6)
move(1562,386)
waitms(8)
move(1562,389)
waitms(10)
move(1562,392)
waitms(6)
move(1562,394)
waitms(8)
move(1562,397)
waitms(8)
move(1562,400)
waitms(8)
move(1561,402)
waitms(8)
move(1561,406)
waitms(6)
move(1561,409)
waitms(8)
move(1561,412)
waitms(8)
move(1561,415)
waitms(8)
move(1561,417)
waitms(8)
move(1561,420)
waitms(8)
move(1561,423)
waitms(8)
move(1561,426)
waitms(8)
move(1560,429)
waitms(6)
move(1560,432)
waitms(8)
move(1560,435)
waitms(8)
move(1560,438)
waitms(8)
move(1560,440)
waitms(8)
move(1560,443)
waitms(8)
move(1560,447)
waitms(6)
move(1560,450)
waitms(8)
move(1560,452)
waitms(8)
move(1560,455)
waitms(8)
move(1559,458)
waitms(8)
move(1559,462)
waitms(8)
move(1559,465)
waitms(12)
move(1559,468)
waitms(10)
move(1559,474)
waitms(8)
move(1559,477)
waitms(8)
move(1559,481)
waitms(8)
move(1559,484)
waitms(8)
move(1559,488)
waitms(8)
move(1559,491)
waitms(8)
move(1559,496)
waitms(6)
move(1559,500)
waitms(8)
move(1558,503)
waitms(8)
move(1558,506)
waitms(8)
move(1558,509)
waitms(8)
move(1558,512)
waitms(8)
move(1558,515)
waitms(8)
move(1558,518)
waitms(6)
move(1558,521)
waitms(8)
move(1557,525)
waitms(10)
move(1557,527)
waitms(6)
move(1557,530)
waitms(8)
move(1557,533)
waitms(8)
move(1557,535)
waitms(8)
move(1556,537)
waitms(8)
move(1556,540)
waitms(6)
move(1556,543)
waitms(8)
move(1556,545)
waitms(8)
move(1556,548)
waitms(8)
move(1556,552)
waitms(8)
move(1556,555)
waitms(8)
move(1556,557)
waitms(8)
move(1555,560)
waitms(6)
move(1555,562)
waitms(8)
move(1555,565)
waitms(8)
move(1555,567)
waitms(8)
move(1555,570)
waitms(8)
move(1555,573)
waitms(8)
move(1555,577)
waitms(8)
move(1555,580)
waitms(6)
move(1554,582)
waitms(8)
move(1554,585)
waitms(10)
move(1554,587)
waitms(6)
move(1554,590)
waitms(8)
move(1554,593)
waitms(8)
move(1554,595)
waitms(8)
move(1554,598)
waitms(6)
move(1554,600)
waitms(8)
move(1554,604)
waitms(8)
move(1554,606)
waitms(8)
move(1554,609)
waitms(8)
move(1554,611)
waitms(8)
move(1554,614)
waitms(8)
move(1554,616)
waitms(8)
move(1554,618)
waitms(10)
move(1554,621)
waitms(12)
move(1554,625)
waitms(8)
move(1554,628)
waitms(8)
move(1554,630)
waitms(8)
move(1554,632)
waitms(8)
move(1554,634)
waitms(6)
move(1554,636)
waitms(8)
move(1554,639)
waitms(8)
move(1554,641)
waitms(8)
move(1554,644)
waitms(8)
move(1554,646)
waitms(8)
move(1554,649)
waitms(8)
move(1554,651)
waitms(8)
move(1554,653)
waitms(6)
move(1554,655)
waitms(8)
move(1554,656)
waitms(8)
move(1554,658)
waitms(10)
move(1554,659)
waitms(6)
move(1554,660)
waitms(8)
move(1554,662)
waitms(8)
move(1554,663)
waitms(8)
move(1554,664)
waitms(6)
move(1554,666)
waitms(8)
move(1554,667)
waitms(8)
move(1554,668)
waitms(8)
move(1554,669)
waitms(8)
move(1554,671)
waitms(8)
move(1555,673)
waitms(8)
move(1555,674)
waitms(6)
move(1555,676)
waitms(8)
move(1555,678)
waitms(10)
move(1555,680)
waitms(6)
move(1555,682)
waitms(8)
move(1556,684)
waitms(8)
move(1556,686)
waitms(8)
move(1556,688)
waitms(6)
move(1556,690)
waitms(8)
move(1557,692)
waitms(8)
move(1557,695)
waitms(10)
move(1557,697)
waitms(6)
move(1558,701)
waitms(8)
move(1558,703)
waitms(8)
move(1558,705)
waitms(7)
move(1559,708)
waitms(7)
move(1559,710)
waitms(8)
move(1559,712)
waitms(8)
move(1560,715)
waitms(8)
move(1560,717)
waitms(8)
move(1560,719)
waitms(8)
move(1561,721)
waitms(6)
move(1561,722)
waitms(8)
move(1561,724)
waitms(12)
move(1561,725)
waitms(4)
move(1561,726)
waitms(8)
move(1562,727)
waitms(8)
move(1562,729)
waitms(8)
move(1562,730)
waitms(8)
move(1562,732)
waitms(6)
move(1562,734)
waitms(10)
move(1562,737)
waitms(6)
move(1562,738)
waitms(8)
move(1562,740)
waitms(8)
move(1562,742)
waitms(8)
move(1562,744)
waitms(8)
move(1562,746)
waitms(6)
move(1562,748)
waitms(8)
move(1563,750)
waitms(8)
move(1563,752)
waitms(8)
move(1563,755)
waitms(8)
move(1563,759)
waitms(8)
move(1563,761)
waitms(8)
move(1563,763)
waitms(6)
move(1563,765)
waitms(8)
move(1563,766)
waitms(10)
move(1563,768)
waitms(6)
move(1563,769)
waitms(8)
move(1563,770)
waitms(10)
move(1564,771)
waitms(6)
move(1564,773)
waitms(8)
move(1564,775)
waitms(6)
move(1564,776)
waitms(16)
move(1564,777)
waitms(8)
move(1564,778)
waitms(8)
move(1564,779)
waitms(8)
move(1564,780)
waitms(8)
move(1565,780)
waitms(6)
move(1565,781)
waitms(8)
move(1565,782)
waitms(8)
move(1565,783)
waitms(8)
move(1565,785)
waitms(8)
move(1565,786)
waitms(10)
move(1565,787)
waitms(6)
move(1565,788)
waitms(8)
move(1565,789)
waitms(6)
move(1565,790)
waitms(8)
move(1565,791)
waitms(8)
move(1565,792)
waitms(8)
move(1566,793)
waitms(8)
move(1566,794)
waitms(16)
move(1566,795)
waitms(200)
move(1566,796)
waitms(8)
move(1567,797)
waitms(8)
move(1567,798)
waitms(8)
move(1567,799)
waitms(8)
move(1567,800)
waitms(6)
move(1567,801)
waitms(8)
move(1568,802)
waitms(8)
move(1568,803)
waitms(8)
move(1568,804)
waitms(8)
  lUp(1568,804)
    WAIT(15)
LOGWRITE ("Задание выполнено")
END_THREAD

             

SUB(get_items,$get, $get1, $get2, $get3, $get4, $get5, $get6, $get7)
   GETSCREEN( $get1, $get2, $get3, $get4)
      LOGWRITE ("Картинка получена")
      COLORMODE(8)
      LOGWRITE ("Картинка обработана")
      WAITMS(50)
     
   SCANPICTURE($get0, $get1, $get2, $get3, $get4, $get5, $get6, $get7)
   LOGWRITE ("Сканирование области выполнено")
      WHILE (arrsize($get0) > 0)
      $y = arrpop($get0)
      $x = arrpop($get0)
       If ($get5 = take.bmp)
  LCLICK( $x, $y)
    WAIT(3)
  LCLICK(598,1030)
    WAIT(3)                           
        PRINT ("Найдено завершённых предметов :" , $x , ":" , $y)
        ELSE
LCLICK(56,710)
WAIT(2)
          LCLICK(1513,988)
WAIT(2)
LCLICK(572,705)
WAIT(2)
LCLICK(617,773)
WAIT(2)
LCLICK(1152,399)
WAIT(2)
LCLICK(784,703)
WAIT(2)
LCLICK(624,762)
WAIT(2)
LCLICK(624,762)
WAIT(2)
LCLICK(1153,400)
WAIT(2)
LCLICK(1549,255)
WAIT(2)
LCLICK(624,762)
WAIT(5)
stop:            
LCLICK( $x, $y)
    WAIT(2)
  LCLICK(1513,907)
    WAIT(2)
        LCLICK(129,599)
          WAIT(2)
GETSCREEN( 833, 262, 894, 321)
              COLORMODE(8)
                 IF_PICTURE_IN( 833, 262, 894, 321, "error.bmp", 5026082, 99)   // проверка на ресурсы
     LOGWRITE ("Ресурсов недостаточно..")      
                      WAIT(2)
   LCLICK(1424,295)
    WAIT(2)
                     LCLICK(1539,163)
  WAIT(2)      
             SETTHREAD (take_res, 1)
                      WAIT(30)
           SETTHREAD (take_res, 0)
GOTO(stop)
         ELSE
             END_IF                          
        PRINT ("Найдено свободных слотов для крафта :" , $x , ":" , $y)
        END_IF
      END_CYC
END_SUB
 
 
 LOGWRITE ("Подпрограмма Запускается")
 SETTHREAD (take_res, 0)
get_items( $var, 168, 867, 1243, 1015, "take.bmp", 5026082, 95)
 WAITMS(50)
get_items( $var1, 168, 867, 1243, 1022, "create.bmp", 5026082, 94)
 LOGWRITE ("Подпрограмма Завершена")
 SETTHREAD (take_res, 1)

 WAIT(10)
   


 Помогите оптимизировать
Title: Re: Логика работы с программой
Post by: Oraven on March 08, 2016, 08:25:01 AM
Стоки надо вставлять в кавычки
Code: (clickermann) [Select]
If ($get5 = "take.bmp")