Author Topic: Пытаюсь написать скрипт  (Read 4459 times)

0 Members and 2 Guests are viewing this topic.

sidsoft

  • Зашел в гости
  • *
  • Posts: 3
    • View Profile
Пытаюсь написать скрипт
« on: April 29, 2015, 07:42:05 AM »
Здравствуйте.
Выражаю ОГРОМНУЮ БЛАГОДАРНОСТЬ создателю программы CLICKERMANN! Спасибо!

Помогите пожалуйста, который день пытаюсь написать скрипт для известного Н_Е_О_Б_У_К_С.
С программированием столкнулся только когда узнал об этой замечательной программе CLICKERMANN.
До этого с никакими скриптовыми языками, да и вообще с языками программирования не сталкивался.
Пытался написать, но скрипт останавливается и не работает, хотя по задумке:
1. Он должен анализировать экран на предмет нахождения розовых квадратиков в определенной области экрана.
2. Если находит нажимает на неё, после нажатия появляется красная точка.
3. Снова анализ на предмет нахождения красной точки, если она присутствует, должен нажать на неё.
4. Появляется новая вкладка, в новой вкладке он анализирует экран на предмет нахождения жёлтой кнопочки, если
находит то нажимает на неё.

Далее снова анализ розовых квадратиков с красными точками, нажатие на красную точку, новая вкладка, поиск жёлтой кнопки,
нажатие на жёлтую кнопочку.
После того как все розовые квадратики "пронажимались" необходимо экран опустить вниз, трёх-разовым нажатием
кнопки #DOWN. Снова поиск на предмет розовых квадратиков, и если таковых нет, начинается поиск зелёных квадратиков, нажатие на них, посик красной точки, нажатие на неё в новой вкладке поиск желтой кнопки, нажатие, снова поиск зеленых квадратиков и т.п.
Аналогично поиск жёлтых квадратиков.
Ниже скрипт, но он не работает.
Помогите пожалуйста его доработать.
Code: (clickermann) [Select]
//////////////////////////////////////////////////
// В этом блоке производится поиск квадратиков
// pink - розовые квадратики
// green - зелёные квадратики
// yellow - жёлтые квадратики
start:
if_pixel_in(480,312, 1139,999, 15142102)
   goto(pink)
else
   goto(keydown)
   if_pixel_in(480,312, 1139,999, 44544)
      goto(green)
   else
      goto(keydown)
      if_pixel_in(480,312, 1139,999, 1611495)
         goto(yellow)
      else
         goto(keydown)
      end_if
   end_if
end_if
//////////////////////////////////////////////////
// Нажатие клавиши "СТРЕЛКА ВНИЗ", три раза
keydown:
for($a,$a<3)
   keypress(#DOWN)
end_cyc
//////////////////////////////////////////////////
pink:
// Определяем и нажимаем на розовые квадратики
getscreen
if_pixel_in(480,312, 1139,999, 15142102)
   lclick($_return1, $_return2)
end_if
wait(1)
// Определяем и нажимаем на красные кружочки
getscreen
if_pixel_in(480,312, 1139,999, 255)
   lclick($_return1, $_return2)
end_if
wait(1)
// После перехода в новую вкладку, определяем жёлтую кнопку CLOSE и нажимаем на неё
getscreen
if_pixel_in(493,92, 540,113, 2206463)
   lclick($_return1, $_return2)
end_if
wait(1)
goto(start)
//////////////////////////////////////////////////
green:
// Определяем и нажимаем на зелёные квадратики
getscreen
if_pixel_in(480,312, 1139,999, 44544)
   lclick($_return1, $_return2)
end_if
wait(1)
// Определяем и нажимаем на красные кружочки
getscreen
if_pixel_in(480,312, 1139,999, 255)
   lclick($_return1, $_return2)
end_if
wait(1)
// После перехода в новую вкладку, определяем жёлтую кнопку CLOSE и нажимаем на неё
getscreen
if_pixel_in(493,92, 540,113, 2206463)
   lclick($_return1, $_return2)
end_if
wait(1)
goto(start)
//////////////////////////////////////////////////
yellow:
// Определяем и нажимаем на жёлтые квадратики
getscreen
if_pixel_in(480,312, 1139,999, 1611495)
   lclick($_return1, $_return2)
end_if
wait(1)
// Определяем и нажимаем на красные кружочки
getscreen
if_pixel_in(480,312, 1139,999, 255)
   lclick($_return1, $_return2)
end_if
wait(1)
// После перехода в новую вкладку, определяем жёлтую кнопку CLOSE и нажимаем на неё
getscreen
if_pixel_in(493,92, 540,113, 2206463)
   lclick($_return1, $_return2)
end_if
wait(1)
goto(start)
Помогите пожалуйста.
Спасибо Всем откликнувшимся!
« Last Edit: April 29, 2015, 09:31:51 AM by Vint »

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Пытаюсь написать скрипт
« Reply #1 on: April 29, 2015, 09:41:26 AM »
1. отсутствует getscreen в блоке поиска квадратиков start:
2. в цикле for нужно каждый раз обнулять переменную "а"
Code: (clickermann) [Select]
for($a=0,$a<3)
   keypress(#DOWN)
end_cyc
3. у тебя дальше поиска розового работа не пойдет
Code: (clickermann) [Select]
start:
if_pixel_in(480,312, 1139,999, 15142102)
goto(pink)
else
goto(keydown)
после отработки нажатий кнопок "вниз", скрипт опять начнет поиск розового. к поиску зеленого и желтого его не пускает переход к строке keydown: .

вот твой исправленый вариант скрипта с кучей goto
Code: (clickermann) [Select]
//////////////////////////////////////////////////
// В этом блоке производится поиск квадратиков
// pink - розовые квадратики
// green - зелёные квадратики
// yellow - жёлтые квадратики
start:
getscreen
if_pixel_in(480,312, 1139,999, 15142102)
   goto(pink)
else
   if_pixel_in(480,312, 1139,999, 44544)
      goto(green)
   else
      if_pixel_in(480,312, 1139,999, 1611495)
         goto(yellow)
      end_if
   end_if
end_if
//////////////////////////////////////////////////
// Нажатие клавиши "СТРЕЛКА ВНИЗ", три раза
for($a=0,$a<3)
   keypress(#DOWN)
end_cyc
goto(start)
//////////////////////////////////////////////////
pink:
// Определяем и нажимаем на розовые квадратики
getscreen
if_pixel_in(480,312, 1139,999, 15142102)
   lclick($_return1, $_return2)
end_if
wait(1)
// Определяем и нажимаем на красные кружочки
getscreen
if_pixel_in(480,312, 1139,999, 255)
   lclick($_return1, $_return2)
end_if
wait(1)
// После перехода в новую вкладку, определяем жёлтую кнопку CLOSE и нажимаем на неё
getscreen
if_pixel_in(493,92, 540,113, 2206463)
   lclick($_return1, $_return2)
end_if
wait(1)
goto(start)
//////////////////////////////////////////////////
green:
// Определяем и нажимаем на зелёные квадратики
getscreen
if_pixel_in(480,312, 1139,999, 44544)
   lclick($_return1, $_return2)
end_if
wait(1)
// Определяем и нажимаем на красные кружочки
getscreen
if_pixel_in(480,312, 1139,999, 255)
   lclick($_return1, $_return2)
end_if
wait(1)
// После перехода в новую вкладку, определяем жёлтую кнопку CLOSE и нажимаем на неё
getscreen
if_pixel_in(493,92, 540,113, 2206463)
   lclick($_return1, $_return2)
end_if
wait(1)
goto(start)
//////////////////////////////////////////////////
yellow:
// Определяем и нажимаем на жёлтые квадратики
getscreen
if_pixel_in(480,312, 1139,999, 1611495)
   lclick($_return1, $_return2)
end_if
wait(1)
// Определяем и нажимаем на красные кружочки
getscreen
if_pixel_in(480,312, 1139,999, 255)
   lclick($_return1, $_return2)
end_if
wait(1)
// После перехода в новую вкладку, определяем жёлтую кнопку CLOSE и нажимаем на неё
getscreen
if_pixel_in(493,92, 540,113, 2206463)
   lclick($_return1, $_return2)
end_if
wait(1)
goto(start)

а вот упрощенный вариант:
Code: (clickermann) [Select]
SUB(colors, $color)
   $check=1
   WHILE($check=1)
      getscreen
      if_pixel_in(480,312, 1139,999, $color)
         lclick($_return1, $_return2)
         $check=1
         wait(1)
         getscreen
         if_pixel_in(480,312, 1139,999, 255)
            lclick($_return1, $_return2)
         end_if
         wait(1)
         getscreen
         if_pixel_in(493,92, 540,113, 2206463)
            lclick($_return1, $_return2)
         end_if
         wait(1)
      else
         $check=0
      end_if
   END_CYC
END_SUB

//--------------------------

colors(15142102)
for($a=0,$a<3)
   keypress(#DOWN)
end_cyc
colors(44544)
for($a=0,$a<3)
   keypress(#DOWN)
end_cyc
colors(1611495)
for($a=0,$a<3)
   keypress(#DOWN)
end_cyc

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Пытаюсь написать скрипт
« Reply #2 on: April 29, 2015, 09:46:45 AM »
В начале, перед первым поиском нет getscreen.

Строки  17, 18 лишние, код и так туда идёт
Code: (clickermann) [Select]
      else
         goto(keydown)

Цикл в строках 25-27 сработает только один раз. После, переменная $a останется равной 3 и этот цикл никогда не сработает. Нужно обнуление
Code: (clickermann) [Select]
for($a=0,$a<3)
Скорее всего нельзя использовать в качестве метки имена функций
Code: (clickermann) [Select]
goto(keydown)
В кликере есть своя команда с таким написанием "KEYDOWN".

Мало где ждём появление цвета, если цвет там должен появиться обязательно. Скрипт успевает "крутануться" лишний раз.
Нет задержек как минимум при/и после нажатия DOWN

В описании я апутался  ;D


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Пытаюсь написать скрипт
« Reply #3 on: April 29, 2015, 10:17:11 AM »
Дополнительные вопросы:
2. Если находит нажимает на неё, после нажатия появляется красная точка.
3. Снова анализ на предмет нахождения красной точки, если она присутствует, должен нажать на неё.

Красная точка должна появиться обязательно или её может не быть?
Нам ждать её до посинения или если нет идти дальше?

Аналогично с п.4

Снова поиск на предмет розовых квадратиков, и если таковых нет, начинается поиск зелёных квадратиков...
А если зелёных нет? Тоже нажимать 3 раза #DOWN? И потом начинать с зелёных или опять с розовых?

Аналогично для жёлтых.


Мы не можем до нажатий #DOWN искать по порядку:
все розовые, все зелёные, все жёлтые?
Вниз и опять
все розовые, все зелёные, все жёлтые
Нет?


sidsoft

  • Зашел в гости
  • *
  • Posts: 3
    • View Profile
Re: Пытаюсь написать скрипт
« Reply #4 on: April 29, 2015, 11:05:39 AM »
Дополнительные вопросы:
2. Если находит нажимает на неё, после нажатия появляется красная точка.
3. Снова анализ на предмет нахождения красной точки, если она присутствует, должен нажать на неё.

Quote
Красная точка должна появиться обязательно или её может не быть?
Нам ждать её до посинения или если нет идти дальше?
Аналогично с п.4

Обязательно появится красная точка
Снова поиск на предмет розовых квадратиков, и если таковых нет, начинается поиск зелёных квадратиков...
Quote
А если зелёных нет? Тоже нажимать 3 раза #DOWN? И потом начинать с зелёных или опять с розовых?
Аналогично для жёлтых.

Да необходимо обязательно нажать вниз три раза, что бы появились Жёлтые квадратики.
Порой Розовых и Зелёных бывает очень много, а Жёлтые в самом низу почти.


Quote
Мы не можем до нажатий #DOWN искать по порядку:
все розовые, все зелёные, все жёлтые?
Вниз и опять
все розовые, все зелёные, все жёлтые
Нет?

Можно искать по порядку но с условием, если вдруг встретится Розовый нажимаем, появится ОБЯЗАТЕЛЬНО красный кружочек, или если попадётся Зелёный тоже нажимаем, потом ОБЯЗАТЕЛЬНО появится красный, жмём на красный кружочек, или Жёлтый с таким же поведением.

sidsoft

  • Зашел в гости
  • *
  • Posts: 3
    • View Profile
Re: Пытаюсь написать скрипт
« Reply #5 on: April 29, 2015, 11:07:39 AM »
1. отсутствует getscreen в блоке поиска квадратиков start:
2. в цикле for нужно каждый раз обнулять переменную "а"
Code: (clickermann) [Select]
for($a=0,$a<3)
   keypress(#DOWN)
end_cyc
3. у тебя дальше поиска розового работа не пойдет
Code: (clickermann) [Select]
start:
if_pixel_in(480,312, 1139,999, 15142102)
goto(pink)
else
goto(keydown)
после отработки нажатий кнопок "вниз", скрипт опять начнет поиск розового. к поиску зеленого и желтого его не пускает переход к строке keydown: .

вот твой исправленый вариант скрипта с кучей goto
Code: (clickermann) [Select]
//////////////////////////////////////////////////
// В этом блоке производится поиск квадратиков
// pink - розовые квадратики
// green - зелёные квадратики
// yellow - жёлтые квадратики
start:
getscreen
if_pixel_in(480,312, 1139,999, 15142102)
   goto(pink)
else
   if_pixel_in(480,312, 1139,999, 44544)
      goto(green)
   else
      if_pixel_in(480,312, 1139,999, 1611495)
         goto(yellow)
      end_if
   end_if
end_if
//////////////////////////////////////////////////
// Нажатие клавиши "СТРЕЛКА ВНИЗ", три раза
for($a=0,$a<3)
   keypress(#DOWN)
end_cyc
goto(start)
//////////////////////////////////////////////////
pink:
// Определяем и нажимаем на розовые квадратики
getscreen
if_pixel_in(480,312, 1139,999, 15142102)
   lclick($_return1, $_return2)
end_if
wait(1)
// Определяем и нажимаем на красные кружочки
getscreen
if_pixel_in(480,312, 1139,999, 255)
   lclick($_return1, $_return2)
end_if
wait(1)
// После перехода в новую вкладку, определяем жёлтую кнопку CLOSE и нажимаем на неё
getscreen
if_pixel_in(493,92, 540,113, 2206463)
   lclick($_return1, $_return2)
end_if
wait(1)
goto(start)
//////////////////////////////////////////////////
green:
// Определяем и нажимаем на зелёные квадратики
getscreen
if_pixel_in(480,312, 1139,999, 44544)
   lclick($_return1, $_return2)
end_if
wait(1)
// Определяем и нажимаем на красные кружочки
getscreen
if_pixel_in(480,312, 1139,999, 255)
   lclick($_return1, $_return2)
end_if
wait(1)
// После перехода в новую вкладку, определяем жёлтую кнопку CLOSE и нажимаем на неё
getscreen
if_pixel_in(493,92, 540,113, 2206463)
   lclick($_return1, $_return2)
end_if
wait(1)
goto(start)
//////////////////////////////////////////////////
yellow:
// Определяем и нажимаем на жёлтые квадратики
getscreen
if_pixel_in(480,312, 1139,999, 1611495)
   lclick($_return1, $_return2)
end_if
wait(1)
// Определяем и нажимаем на красные кружочки
getscreen
if_pixel_in(480,312, 1139,999, 255)
   lclick($_return1, $_return2)
end_if
wait(1)
// После перехода в новую вкладку, определяем жёлтую кнопку CLOSE и нажимаем на неё
getscreen
if_pixel_in(493,92, 540,113, 2206463)
   lclick($_return1, $_return2)
end_if
wait(1)
goto(start)

а вот упрощенный вариант:
Code: (clickermann) [Select]
SUB(colors, $color)
   $check=1
   WHILE($check=1)
      getscreen
      if_pixel_in(480,312, 1139,999, $color)
         lclick($_return1, $_return2)
         $check=1
         wait(1)
         getscreen
         if_pixel_in(480,312, 1139,999, 255)
            lclick($_return1, $_return2)
         end_if
         wait(1)
         getscreen
         if_pixel_in(493,92, 540,113, 2206463)
            lclick($_return1, $_return2)
         end_if
         wait(1)
      else
         $check=0
      end_if
   END_CYC
END_SUB

//--------------------------

colors(15142102)
for($a=0,$a<3)
   keypress(#DOWN)
end_cyc
colors(44544)
for($a=0,$a<3)
   keypress(#DOWN)
end_cyc
colors(1611495)
for($a=0,$a<3)
   keypress(#DOWN)
end_cyc

Спасибо ОГРОМНОЕ за потраченное на меня время!
Я опробую скрипт и отпишусь!!!