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

Основной раздел => Ошибки => Topic started by: Shen_De_Lar on May 11, 2014, 04:43:20 PM

Title: Некорректная совместная работа if_picture_in и goto
Post by: Shen_De_Lar on May 11, 2014, 04:43:20 PM
смысле примерно следующий: 
sub(...)
      while(...)
      ...
            if_picture_in(...)
                  goto(skip)
            end_if
     end_cyc         
     skip:
end_sub

Когда доходило до end_sub, то прыгало назад в цикл. Удивился, когда получил цикл, хотя картинку исправно находило=)
Title: Re: Некорректная совместная работа if_picture_in и goto
Post by: Oraven on May 11, 2014, 04:46:36 PM
Весь скрипт предъяви. возможна ошибка. if_picture_in тут вообще не причем.
Title: Re: Некорректная совместная работа if_picture_in и goto
Post by: Shen_De_Lar on May 11, 2014, 05:24:07 PM
Code: (clickermann) [Select]
#name "Browser"

sub(Config, $conf_hwnd, $conf_x, $conf_y, $conf_wide, $conf_height)
   wndpos($conf_hwnd, $conf_x, $conf_y)
   wndsize($conf_hwnd, $conf_wide, $conf_height)
end_sub

sub(WaitOpen)
   while(wndfind("Increase") = 0)
      waitms(200)
   end_cyc
   $page_increase=wndfind("Increase")
   Config($page_increase, 0, 0, 1000+$yourshiftx, 650+$yourshifty)
   logwrite("открылось")
   $wait_download = 60000
   $time = $_ms + $wait_download
   while($time > $_ms)
      hset($page_increase, 1)
      getscreen
      colormode(7,500, 500, 1500,1000)
      if_picture_in(700,700, 1500,1500, "Крестик.bmp", 255, 80)
         logwrite("lol")
         $download_success=1
         goto(skip)
      end_if
      hset($page_increase, 0)
      wait(1)
   end_cyc
   $download_success=0
   skip:         
   logwrite("успех", $download_success)
end_sub

sub(WaitClose)
   while(wndfind("Increase") ! 0)
      waitms(200)
   end_cyc
   logwrite("закрылось")
end_sub

sub(Open, $Open_browser, $Open_site)
   execute($Open_browser, $Open_site)
   WaitOpen()
end_sub

sub(Close, $Close_browser)
   execute("TASKKILL",strconcat("/IM ", $browser))
   WaitClose()
end_sub

$browser="Chrome.exe"
$site="http://vk.com/increase.online?mid=21650629"
$yourshiftx=300
$yourshifty=300
Open($browser, $site)
halt // for single run

Игра крашится часто, пишу нечто универсальное, дабы можно было переоткрыть, и чтоб работать на компе не мешало. Чтобы не было привязки к координатам, браузерам, да и ссылка ауткеем может быть.

А причина похоже в том, что из if сваливать не хорошо, рано или поздно вернется на end_if
Title: Re: Некорректная совместная работа if_picture_in и goto
Post by: Oraven on May 11, 2014, 05:42:02 PM
А причина похоже в том, что из if сваливать не хорошо, рано или поздно вернется на end_if

Ды нет, сваливать нехорошо из цикла while. В предыдущих версиях об этом в справке упоминалось.

Напиши так:

Code: (clickermann) [Select]
#name "Browser"

sub(Config, $conf_hwnd, $conf_x, $conf_y, $conf_wide, $conf_height)
   wndpos($conf_hwnd, $conf_x, $conf_y)
   wndsize($conf_hwnd, $conf_wide, $conf_height)
end_sub

sub(WaitOpen)
   while(wndfind("Increase") = 0)
      waitms(200)
   end_cyc
   $page_increase=wndfind("Increase")
   Config($page_increase, 0, 0, 1000+$yourshiftx, 650+$yourshifty)
   logwrite("открылось")
   $wait_download = 60000
   $time = $_ms + $wait_download
   while($time > $_ms)
      hset($page_increase, 1)
      getscreen
      colormode(7,500, 500, 1500,1000)
      if_picture_in(700,700, 1500,1500, "Крестик.bmp", 255, 80)
         logwrite("lol")
         $download_success=1
      ELSE
         $download_success=0
         hset($page_increase, 0)
         wait(1)
      end_if
   end_cyc
   
   SWITCH($download_success) // результат
   CASE(0)
      logwrite("Провал")
   CASE(1)
      logwrite("успех")
   DEFAULT
      // случай по умолчанию
   END_SWITCH
end_sub

sub(WaitClose)
   while(wndfind("Increase") ! 0)
      waitms(200)
   end_cyc
   logwrite("закрылось")
end_sub

sub(Open, $Open_browser, $Open_site)
   execute($Open_browser, $Open_site)
   WaitOpen()
end_sub

sub(Close, $Close_browser)
   execute("TASKKILL",strconcat("/IM ", $browser))
   WaitClose()
end_sub

$browser="Chrome.exe"
$site="http://vk.com/increase.online?mid=21650629"
$yourshiftx=300
$yourshifty=300
Open($browser, $site)
halt // Стопе

PS: подпрограммы нужны чтобы сокращать повторяющиеся части а у тебя наоборот скрипт из за этого удлиняется и запутывается.
Ну вот зачем писать подпрограмму Config(.....) когда можно тупо написать тут же wndpos и wndsize?!
Title: Re: Некорректная совместная работа if_picture_in и goto
Post by: Shen_De_Lar on May 11, 2014, 07:08:33 PM
В последней версии этого в  справке нету. Забавная мелочь, не критичная.
Спасибо, за советы.
Хочу за одно спросить, а можно ли с браузером работать через команды? Интересует работа с вкладками - там  закрыть, обновить, сменить, без анализа графики.
p.s. а еще лучше по моему так:

   $download_success = 0
   $time = $_ms + $wait_download
   while($time > $_ms)
        hset($page_increase, 1)
        getscreen
        colormode(7,500, 500, 1500,1000)
        if_picture_in(700,700, 1500,1500, "Êðåñòèê.bmp", 255, 80)
        $time = $_ms
        $download_success=1
      end_if
      hset($page_increase, 0)
      wait(3)
  end_cyc
...
Title: Re: Некорректная совместная работа if_picture_in и goto
Post by: Oraven on May 11, 2014, 07:47:15 PM
Ну да конечно там еще $time = 0 нужно приписать чтоб из цикла выйти
Title: Re: Некорректная совместная работа if_picture_in и goto
Post by: Shen_De_Lar on May 12, 2014, 03:07:16 AM
Обана на что я наткнулся - это же работа с браузером - закрыть, обновить вкладку - ну и с кнопками громкости, медиа плеером и т.д.   http://msdn.microsoft.com/en-us/library/windows/desktop/ms646275(v=vs.85).aspx
Title: Re: Некорректная совместная работа if_picture_in и goto
Post by: Johnny on May 12, 2014, 11:34:28 AM
примерно начиная с версии 4.9 я бы вообще не рекомендовал использовать goto :)
Title: Re: Некорректная совместная работа if_picture_in и goto
Post by: Shen_De_Lar on May 12, 2014, 04:08:14 PM
Добавь что-то вроде return для подпрограмм. Дабы через это дело можно было выскочить из нее, и не проверять потом полкилометра ненужных условий. Да и возврат значений лишним не будет - чего плодить зря переменные.
Title: Re: Некорректная совместная работа if_picture_in и goto
Post by: mjkl on June 01, 2014, 03:14:43 AM
Ды нет, сваливать нехорошо из цикла while. В предыдущих версиях об этом в справке упоминалось.
Успешно сваливаю из while предвратительно указав значение при котором while не "крутит":
Code: (clickermann) [Select]
$b=1
$a=1
WHILE($a=1)
   IF($b=1)
      $a=0
      GOTO(123)
   END_IF
END_CYC
...
123:

З.Ы.
Офтоп
Если выполнять
Code: (clickermann) [Select]
FOR($a=0, $a < 12)
   #include "123.cms"
END_CYC

где 123.cms

Code: (clickermann) [Select]
SUB(MYSUB)
   $a=13
END_SUB
MYSUB()

Код FOR после первого пробега останавливается, потому что $a=13. Если задать число меньше 12 - зацыклит. Хотя в справке написано: После выполнения подпрограммы, сценарий продолжится с момента вызова подпрограммы. Локальные переменные подпрограммы (параметры) при этом будут уничтожены.
А с другой стороны значение $a затягивает в SUB.
Title: Re: Некорректная совместная работа if_picture_in и goto
Post by: Vint on June 01, 2014, 11:07:20 AM
Успешно сваливаю из while предвратительно указав значение при котором while не "крутит":
Code: (clickermann) [Select]
$b=1
$a=1
WHILE($a=1)
   IF($b=1)
      $a=0
      GOTO(123)
   END_IF
END_CYC
...
123:

З.Ы.
Офтоп
Если выполнять
Code: (clickermann) [Select]
FOR($a=0, $a < 12)
   #include "123.cms"
END_CYC

где 123.cms

Code: (clickermann) [Select]
SUB(MYSUB)
   $a=13
END_SUB
MYSUB()

Код FOR после первого пробега останавливается, потому что $a=13. Если задать число меньше 12 - зацыклит. Хотя в справке написано: После выполнения подпрограммы, сценарий продолжится с момента вызова подпрограммы. Локальные переменные подпрограммы (параметры) при этом будут уничтожены.
А с другой стороны значение $a затягивает в SUB.
Не все локальные переменные, а только параметры. Которых у тебя нет.
Еще написано, что подпрограмма должна быть на верхнем уровне.
Её нельзя ложить в условия, циклы и другие подпрограммы. Это относится только к телу саба.
У тебя саб внутри фора посредством инклюда. Саб и не работает.
Саб пихаешь в инклюд, ставишь его в начале. А вызов в цикле.
Title: Re: Некорректная совместная работа if_picture_in и goto
Post by: mjkl on June 01, 2014, 01:23:28 PM
Нуууу, вообщем, если не дублировать переменных, то в изложеном виде работает как надо.
Title: Re: Некорректная совместная работа if_picture_in и goto
Post by: Vint on June 02, 2014, 09:11:57 AM
Ты не понял. Полностью локальная область видимости переменных для подпрограммы не реализована.
Они так же глобальны.
Написано о уничтожении локальных переменных принимающих параметры.
Я не проверял, может и их нельзя дублировать. Скорее всего они просто очистятся чтобы не занимать память.