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

Основной раздел => Общие вопросы => Topic started by: zanogu on February 10, 2017, 11:40:58 AM

Title: Помогите изменить подпрограмму analiz
Post by: zanogu on February 10, 2017, 11:40:58 AM
Привет!
Возможна не в ту тему :)
Помогите пожалуйста упростить код
Подпрограмма analiz разрослось до некоторых объемов, делает анализ там где не нужно, хочется упростить.
Возможна описать подпрограмму так чтоб анализ экрана происходил точечно, не прогоняя весь массив данных?

//Блок констант
DEFINE ($a, 1)//
DEFINE ($b, 2)//
DEFINE ($c, 3)//
.....
DEFINE ($N, n)//

//Блок анализа экрана
sub (analiz)
$atrue = PXLCRC (x,y,x1,y1)//
$btrue = PXLCRC (x,y,x1,y1)//
$ctrue = PXLCRC (x,y,x1,y1)//
..........
$Ntrue = PXLCRC (x,y,x1,y1)//
end_sub

analiz ()
if ($a  = $atrue)
lclick (x,y)//
end_if

analiz ()
if ($b  = $btrue)
lclick (x,y)//
end_if

analiz ()
if ($c  = $ctrue)
lclick (x,y)//
end_if
............
analiz ()
if ($N  = $Ntrue)
lclick (x,y)//
end_if
Title: Re: Помогите изменить подпрограмму analiz
Post by: Oraven on February 10, 2017, 12:06:09 PM
Зачем анализировать кучу точек если ниже идет конкретное условие?
Почему просто не написать
Code: (clickermann) [Select]
if ($a  = PXLCRC (x,y,x1,y1))
lclick (x,y)//
end_if
Title: Re: Помогите изменить подпрограмму analiz
Post by: Vint on February 10, 2017, 05:01:40 PM
Возможна не в ту тему :)

Не в ту.
Title: Re: Помогите изменить подпрограмму analiz
Post by: zanogu on February 10, 2017, 08:44:10 PM
Зачем анализировать кучу точек если ниже идет конкретное условие?
Почему просто не написать
Code: (clickermann) [Select]
if ($a  = PXLCRC (x,y,x1,y1))
lclick (x,y)//
end_if

Мда, все оригинально и просто. Спасибо

Еще вопрос
(x,y,x1,y1) загнать в константу можно?
Например:
Define ($a, 1, x,y,x1,y1)// знаю что не правильно но принцып думаю понятен
If ($a = pxlcrc)
Lclick (x,y)
End_if

Просто по скрипту потом искать координаты при больших массивах неудобно будет
Title: Re: Помогите изменить подпрограмму analiz
Post by: dramster on February 10, 2017, 09:07:43 PM
если я правильно понял, то возможно вот так
Code: (clickermann) [Select]
//Блок констант
//выгоднее было бы писать твои константы в массив, с ним проще вызывать далее подпрограммы через тотже цикл.
DEFINE ($a, 1)//
DEFINE ($b, 2)//
DEFINE ($c, 3)//


sub (analiz,$N)
   //если после клика картинка меняется, не забываем про getscreen
   if ($N = PXLCRC (x,y,x1,y1)) //тут координаты я так понял из прочитанного выше - постоянны
      lclick (x,y)// если координаты клика могут разниться, то и их можно дописать в пораметры подпрограммы
      //в этом случае их также придется добавлять при вызове.
   end_if
end_sub

analiz ($a)
analiz ($b)
analiz ($c)


а вот про это
Quote
Еще вопрос
(x,y,x1,y1) загнать в константу можно?
Например:
Define ($a, 1, x,y,x1,y1)// знаю что не правильно но принцып думаю понятен
If ($a = pxlcrc)
Lclick (x,y)
End_if
даже  и забыл, так как сразу "нет", какаято глупая затея :D .  впринципе если бы была возможность писать функции, то можно было бы.... :D
Title: Re: Помогите изменить подпрограмму analiz
Post by: dramster on February 10, 2017, 09:46:31 PM
всеже немного почитал более внимательно. и пришел к выводу, что ты сканируешь какието отдельные участки экрана, и если их хэш совпадет с записанным ранее, то клик в какоето место. но в этом случае все координаты и значения хэш походу будут разнится. и написанное мной выше тебе не подойдет. вот тебе вариант, где все ппараметры вынесены в подпрограмме, таким образом легче будет ничего не попутать в вызовах, и никаких констант.
Code: (clickermann) [Select]
sub (analiz,$crc,$x,$y,$x1,$y1,$x_click,$y_click)
   //если после клика картинка меняется, не забываем про getscreen
   if ($crc = PXLCRC ($x,$y,$x1,$y1))
      lclick ($x_click,$y_click)
   end_if
end_sub

analiz (4343434352,100,100,110,110,105,104) //тут пишешь через запятую - значение PXLCRC, координаты анализа, и координаты клика (7 значений через запятую)



Title: Re: Помогите изменить подпрограмму analiz
Post by: zanogu on February 10, 2017, 11:56:12 PM
всеже немного почитал более внимательно. и пришел к выводу, что ты сканируешь какието отдельные участки экрана, и если их хэш совпадет с записанным ранее, то клик в какоето место. но в этом случае все координаты и значения хэш походу будут разнится. и написанное мной выше тебе не подойдет. вот тебе вариант, где все ппараметры вынесены в подпрограмме, таким образом легче будет ничего не попутать в вызовах, и никаких констант.
Code: (clickermann) [Select]
sub (analiz,$crc,$x,$y,$x1,$y1,$x_click,$y_click)
   //если после клика картинка меняется, не забываем про getscreen
   if ($crc = PXLCRC ($x,$y,$x1,$y1))
      lclick ($x_click,$y_click)
   end_if
end_sub

analiz (4343434352,100,100,110,110,105,104) //тут пишешь через запятую - значение PXLCRC, координаты анализа, и координаты клика (7 значений через запятую)




Спасибо очень помогли. Пофантазировал
Сделал так

// New Script
// Author: Anonymous
// Version: 1.0 (10.02.2017)

#autorun

wndpos( wndfind("BlueStacks App Player"), 0, 0)
$h = WNDFIND ("BlueStacks App Player")
HSET ($h, 1)// привязка мыши к окну

//Тут будет блок констант для удобства замены или правки. Возможно уберу в текстовый файл с вызовом.
#define $a:3216221726,484,311,486,312,365,304

sub (analiz, $1,$x,$y,$x1,$y1,$x_click,$y_click)
   getscreen
   if ($1= pxlcrc ($x,$y,$x1,$y1)
      lclick ($x_click,$y_click)
   end_if
end_sub

analiz ($a)


halt // for single run

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

Еще раз спасибо
Title: Re: Помогите изменить подпрограмму analiz
Post by: dramster on February 11, 2017, 12:23:23 AM
#define $a:3216221726,484,311,486,312,365,304   - во ты выдал канешна  ;D

я конечно читал там чето в справке когдато про МАКРОСЫ ПРЕПРОЦЕССОРА, но както ну вообще ниразу не пришло мне в голову чтото этоковое применить  ;D.

а это штука еще и работает  :o, да еще и так как положено  :o
Code: (clickermann) [Select]
#define $a:3216221726,484,311,486,312,365,304


sub (analiz,$crc,$x,$y,$x1,$y1,$x_click,$y_click)
   
   print($crc)
   print($x)
   MOVE($x_click,$y_click)
     
end_sub


wait(1)
analiz ($a)


halt
в логе то что требовалось, курсор перемещен


честно, ниразу даже на форуме не видел  ;D
Title: Re: Помогите изменить подпрограмму analiz
Post by: i0 on February 11, 2017, 12:25:44 AM
zanogu
только $1 - недопустимое имя переменной. имя не должно начинаться с цифры (по крайней мере так в справке Джонни написал)
Title: Re: Помогите изменить подпрограмму analiz
Post by: zanogu on February 11, 2017, 12:37:44 PM
zanogu
только $1 - недопустимое имя переменной. имя не должно начинаться с цифры (по крайней мере так в справке Джонни написал)

Спасибо, учту
Title: Re: Помогите изменить подпрограмму analiz
Post by: zanogu on March 05, 2017, 11:40:37 AM

#define $Arena:3216221726,484,311,486,312,365,304,2,end,Центральная прлощадка игры
.....
#define $EnterArena:3216221726,484,311,486,312,365,304,2,Arena,Вход в арену

sub (analiz, $crc,$x,$y,$x1,$y1,$x_click,$y_click,$pausa,$perekluchatel,$log)
start:
   if ($restart<15)
      // Проверка на подгруз игры
      getscreen
      colormode (6)
      if_picture_in (455,285,502,339, "load.bmp", 0,80)
         logwrite ("Пауза подгрузка")
         inc ($restart)
         wait (3)
         goto (start)
      end_if
      //Проверка на рекламу
      getscreen
      if ($AddTrue = PXLCRC (48,39,48,39))
         logwrite ("Закрываю окно рекламы")
         lclick (665, 531)
         wait (3)
         goto (start)
      end_if
   else
      logwrite ("Рестрат", $restart)
      if ($restart>15)
         $restart=0
         restart()
         goto (start)
      end_if
   end_if
   getscreen
   if (($crc = pxlcrc ($x,$y,$x1,$y1)) & ($restart<15))
      logwrite ($crc)
      $restart = 0
      lclick ($x_click,$y_click)
      logwrite ($log)
      wait ($pausa)
   else
      restart ()
      $restart=0
      goto ($perekluchatel)
   end_if
end_sub

arena:
analiz ($EnterArena)//Розвернуть нижнюю панель игры
analiz ($ArenaPanel)//Переход в тип арены
analiz ($ArenaChous)//Выбор типа арены
for ($i, $i>5)
   analiz ($ArenaTake)
   lclick (838,503)
   wait (3)
   analiz ($ArenaAttake)
   analiz ($ArenaDrop)
   analiz ($ArenaWinLost)
end_cyc
$i=0

end:
hult


Если использвать цыкл for или while, то при входе в него крашится/ошибка pop () по всех переменных из подпрограммы analiz начиная с
$y=pop()
$x1=pop()
$y1=pop()
...
$log

Если не использовать цыклы тогда все норм. Вопрос где я налошил?
Title: Re: Помогите изменить подпрограмму analiz
Post by: open_78 on March 05, 2017, 12:53:39 PM
Code: (clickermann) [Select]
#define $Arena:3216221726,484,311,486,312,365,304,2,end,Центральная прлощадка игры
.....
#define $EnterArena:3216221726,484,311,486,312,365,304,2,Arena,Вход в арену

sub (analiz, $crc,$x,$y,$x1,$y1,$x_click,$y_click,$pausa,$perekluchatel,$log)
start:
   if ($restart<15)
      //
      getscreen
      colormode (6)
      if_picture_in (455,285,502,339, "load.bmp", 0,80)
         logwrite ("Пауза подгрузка")
         inc ($restart)
         wait (3)
         goto (start)
      end_if
      //
      getscreen
      if ($AddTrue = PXLCRC (48,39,48,39))
         logwrite ("Закрываю окно рекламы")
         lclick (665, 531)
         wait (3)
         goto (start)
      end_if
   else
      logwrite ("Рестрат", $restart)
      if ($restart>15)
         $restart=0
         restart()
         goto (start)
      end_if
   end_if
   getscreen
   if (($crc = pxlcrc ($x,$y,$x1,$y1)) & ($restart<15))
      logwrite ($crc)
      $restart = 0
      lclick ($x_click,$y_click)
      logwrite ($log)
      wait ($pausa)
   else
      restart ()
      $restart=0
      goto ($perekluchatel)
   end_if
end_sub

arena:
analiz ($EnterArena)//
analiz ($ArenaPanel)//
analiz ($ArenaChous)//
for ($i=0, $i<5) //правильно. У тебя for - ($i, $i>5)
   analiz ($ArenaTake)
   lclick (838,503)
   wait (3)
   analiz ($ArenaAttake)
   analiz ($ArenaDrop)
   analiz ($ArenaWinLost)
end_cyc
$i=0  // Это не нужно

end:
HALT //правильно. У тебя - hult
Title: Re: Помогите изменить подпрограмму analiz
Post by: Oraven on March 05, 2017, 01:15:52 PM
Не используй в #define знак доллара как в переменной, потом по скрипту непонятно где замена а где переменные.
Строки должны быть заключены в кавычки.
Выпрыгивать через GOTO из подпрограмм и циклов нельзя. Это приводит к ошибкам.

Code: (clickermann) [Select]
#define $Arena:3216221726,484,311,486,312,365,304,2,"end","Центральная площадка игры"
#define $EnterArena:3216221726,484,311,486,312,365,304,2,"Arena","Вход в арену"