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

Основной раздел => Общие вопросы => Topic started by: Gamsa on February 02, 2017, 02:41:15 PM

Title: Остановка и перезапуск скрипта.
Post by: Gamsa on February 02, 2017, 02:41:15 PM
Добрый день. Есть скрипт который иногда глючит. Т.к. я совсем начинающий в данных вопросах человек прощу помощи у более опытных.
Скрипт спокойно себе работает и его не трогают, в какой-то момент (отловить не могу пока, но вижу что проблема где-то вот тут)
Code: (clickermann) [Select]
sub(диалог)
   //поиск цвета диалогового окна
   $_xd=1052
   $_yd=100
   $_xd2=1834
   $_yd2=500
   $_colord=14146270
   Getscreen($_xd,$_yd,$_xd2,$_yd2)
   If_pixel_in($_xd,$_yd,$_xd2,$_yd2,$_colord)
      Lclick($_return1,$_return2)
      print("нашел кому продать")
      Wait(1)
      //окно торговли
      $ms=$_ms+30000
      While($ms>$_ms)
         Getscreen
         If_pixel_in(1601,550,1693,585,3355596)//отмена
            $check=1
            $otx=$_return1
            $oty=$_return2
            $ms=-1
         Else
            Waitms(100)
         End_if
      End_cyc
      If($ms=-1)
         Skip:
         Getscreen
         If_pixel_in(1581,325,1720,410,16531877)//наценка
            Lclick($_return1,$_return2)
            print("Больше денег")
            Wait(1)
            Getscreen
            If_pixel_in(1577,640,1753,730,9357352)//продать
               Lclick($_return1,$_return2)
               print("Продать")
               Wait(1)
            End_if
         Else
            //Кусок проверки замены
            //поиск цвета предложить/поменять товар
            $_xd=1404
            $_yd=375
            $_xd2=1414
            $_yd2=403
            $_colord=6931710
            Getscreen($_xd,$_yd,$_xd2,$_yd2)
            If_pixel_in($_xd,$_yd,$_xd2,$_yd2,$_colord)
               Lclick($_return1,$_return2)
               print("Поменяем")
               Wait(2)
               goto(skip)
            Else
               Waitms(100)
               Lclick($otx,$oty)
               print("Не купили")
               Wait(2)
            End_if
         End_if
      End_if
   Else
      Waitms(100)
   End_if
   //диалоговые окна желтый цвет
   Getscreen
   If_pixel_in(1052,100,1834,500,7722472)
      Lclick($_return1,$_return2)
      Wait(2)
      $check2=0
      While($check2=0)
         Getscreen
         If_pixel_in(1577,640,1753,730,9357352)//продать
            $k_x=$_return1
            $k_y=$_return2
            $check2=1
            $check3=0
            While($check3=0)
               Getscreen
               If_pixel_in(1580,287,1713,349,16531877)//наценка
                  Lclick($_return1,$_return2)
                  Wait(1)
               Else
                  $check3=1
               End_if
            End_cyc
            Lclick($k_x,$k_y)
            Wait(1)
         Else
            Waitms(300)
         End_if
      End_cyc
   End_if
end_sub

Собственно вопрос такого плана в скрипте несколько sub запускаются они все просто вызовом в конце, можно как-то сделать чтобы к примеру раз в пол часа все останавливалось и запускалось независимо от основного скрипта?
Title: Re: Остановка и перезапуск скрипта.
Post by: Vint on February 02, 2017, 03:19:44 PM
Code: (clickermann) [Select]
THREAD(main, 1)
    // здесь весь основной скрипт
END_THREAD


WAIT(1800) // 30 мин
SETTHREAD(main, 2)
WAIT(5)
SETTHREAD(main, 1)

Версия Clickermann от 4.12
Title: Re: Остановка и перезапуск скрипта.
Post by: Gamsa on February 02, 2017, 03:37:19 PM
Большое спасибо.
Title: Re: Остановка и перезапуск скрипта.
Post by: Gamsa on February 07, 2017, 11:07:46 AM
Скрипт работает в потоке, в какой-то момент повисает и на перезапуск потока не реагирует.
Title: Re: Остановка и перезапуск скрипта.
Post by: Gamsa on February 07, 2017, 11:45:49 AM
Последняя версия программы

Code: (clickermann) [Select]
THREAD(main, 1)

//=============================================
//=============================================
//=============================================
//сбор ресурсов
sub(ресурсы)
   LCLICK(1886,205)
   WAIT(1)
   LCLICK(1886,245)
   WAIT(1)
   LCLICK(1886,295)
   WAIT(1)
   LCLICK(1886,340)
   WAIT(1)
   LCLICK(1886,385)
   WAIT(1)
   LCLICK(1886,430)
   WAIT(1)
   LCLICK(1886,475)
   WAIT(1)
   LCLICK(1886,535)
   WAIT(1)
   LCLICK(1886,590)
   WAIT(1)
   LCLICK(1886,620)
   WAIT(1)
end_sub
//=============================================
//=============================================
//=============================================
//крафт
//третий крафт
sub(крафт3)
   Lclick(779,400) //координаты "1"  (779,400) - левый квадрат (973,327) - второй квадрат
   print("начинаем крафт 3")
   Wait(1)
else
   Getscreen //стандартное окно крафта
   If_pixel_in(1749,650,1770,670,10004917) //серый - иди жать на крестик
      lclick(1774,190)
      print ("хочу крафт 2")
      WAIT(1)
   else
      If_pixel_in(1749,646,1778,690,9357352) //зеленый - можно крафтить
         lclick($_return1, $_return2)
         print("крафт с 1го окна зеленый")
         WAIT(1)
      else
         Getscreen // ресурсы другого качества
         If_pixel_in(1484,560,1510,605,9357352) //зеленый - можно крафтить
            lclick($_return1, $_return2)
            WAIT(2)
            //проверим может нужно закрыть окно вообще т.к. часто глюки возникают
         else
            Getscreen
            If_pixel_in(766,707,775,725,12378352)
               lclick($_return1, $_return2)
               WAIT(2)
            else
               Getscreen
               If_pixel_in(1859,59,1876,73,7370883)
                  lclick($_return1, $_return2)
                  WAIT(1)
               End_if
            End_if
         End_if
      End_if
   End_if
end_sub
//=============================================
//второй крафт
sub(крафт2)
   Lclick(973,400) //координаты "2"
   print("начинаем крафт 2")
   Wait(1)
else
   Getscreen //стандартное окно крафта
   If_pixel_in(1749,650,1770,670,10004917) //серый - иди жать на крестик
      lclick(1774,190)
      print ("хочу крафт 2")
      WAIT(1)
 крафт3()
   else
      If_pixel_in(1749,646,1778,690,9357352) //зеленый - можно крафтить
         lclick($_return1, $_return2)
         print("крафт с 1го окна зеленый")
         WAIT(1)
      else
         Getscreen // ресурсы другого качества
         If_pixel_in(1484,560,1510,605,9357352) //зеленый - можно крафтить
            lclick($_return1, $_return2)
            WAIT(1)
            //проверим может нужно закрыть окно вообще т.к. часто глюки возникают
         else
            Getscreen
            If_pixel_in(766,707,775,725,12378352)
               lclick($_return1, $_return2)
               WAIT(2)
            else
               Getscreen
               If_pixel_in(1859,59,1876,73,7370883)
                  lclick($_return1, $_return2)
                  WAIT(1)
               End_if
            End_if
         End_if
      End_if
   End_if
end_sub
//=============================================
//первый крафт
sub(крафт)
   Lclick(1196,400) //координаты "1"  (779,400) - левый квадрат (973,400) - второй квадрат (1196,400) - 3ий Квадрат   (1420,400) - 4ый квадрат
   print("начинаем крафт 1")
   Wait(1)
else
   Getscreen //стандартное окно крафта
   If_pixel_in(1749,650,1770,670,10004917) //серый - иди жать на крестик
      lclick(1774,190)
      print ("хочу крафт 2")
      WAIT(1)
     крафт2()
   else
      If_pixel_in(1749,646,1778,690,9357352) //зеленый - можно крафтить
         lclick($_return1, $_return2)
         print("крафт с 1го окна зеленый")
         WAIT(1)
      else
         Getscreen // ресурсы другого качества
         If_pixel_in(1484,560,1510,605,9357352) //зеленый - можно крафтить
            lclick($_return1, $_return2)
            WAIT(1)
            //проверим может нужно закрыть окно вообще т.к. часто глюки возникают
         else
            Getscreen
            If_pixel_in(766,707,775,725,12378352)
               lclick($_return1, $_return2)
               WAIT(2)
            else
               Getscreen
               If_pixel_in(1859,59,1876,73,7370883)
                  lclick($_return1, $_return2)
                  WAIT(1)
               End_if
            End_if
         End_if
      End_if
   End_if
end_sub
//=============================================
//=============================================
//=============================================
// торговля
// торговля
// торговля
sub(диалог)
   //поиск цвета диалогового окна
   $_xd=1052
   $_yd=100
   $_xd2=1834
   $_yd2=500
   $_colord=14146270
   Getscreen($_xd,$_yd,$_xd2,$_yd2)
   If_pixel_in($_xd,$_yd,$_xd2,$_yd2,$_colord)
      Lclick($_return1,$_return2)
      print("нашел кому продать")
      Wait(1)
      //окно торговли
      $ms=$_ms+30000
      While($ms>$_ms)
         Getscreen
         If_pixel_in(1601,550,1693,585,3355596)//отмена
            $check=1
            $otx=$_return1
            $oty=$_return2
            $ms=-1
         Else
            Waitms(100)
         End_if
      End_cyc
      If($ms=-1)
         Skip:
         Getscreen
         If_pixel_in(1581,325,1720,410,16531877)//наценка
            Lclick($_return1,$_return2)
            print("Больше денег")
            Wait(1)
            Getscreen
            If_pixel_in(1577,640,1753,730,9357352)//продать
               Lclick($_return1,$_return2)
               print("Продать")
               Wait(1)
            End_if
         Else
            //Кусок проверки замены
            //поиск цвета предложить/поменять товар
            $_xd=1404
            $_yd=375
            $_xd2=1414
            $_yd2=403
            $_colord=6931710
            Getscreen($_xd,$_yd,$_xd2,$_yd2)
            If_pixel_in($_xd,$_yd,$_xd2,$_yd2,$_colord)
               Lclick($_return1,$_return2)
               print("Поменяем")
               Wait(2)
               goto(skip)
            Else
               Waitms(100)
               Lclick($otx,$oty)
               print("Не купили")
               Wait(2)
            End_if
         End_if
      End_if
   Else
      Waitms(100)
   End_if
   //диалоговые окна желтый цвет
   Getscreen
   If_pixel_in(1052,100,1834,500,7195610)
      Lclick($_return1,$_return2)
      Wait(2)
      $check2=0
      While($check2=0)
         Getscreen
         If_pixel_in(1577,640,1753,730,9357352)//продать
            $k_x=$_return1
            $k_y=$_return2
            $check2=1
            $check3=0
            While($check3=0)
               Getscreen
               If_pixel_in(1580,287,1713,349,16531877)//наценка
                  Lclick($_return1,$_return2)
                  Wait(1)
               Else
                  $check3=1
               End_if
            End_cyc
            Lclick($k_x,$k_y)
            Wait(1)
         Else
            Waitms(300)
         End_if
      End_cyc
   End_if
end_sub
//=============================================
//=============================================
//=============================================
//сбор крафта
sub(сборкрафт)
   //поиск законченного крафта
   GETSCREEN
   if_pixel_in(790,700,1764,820,7401471)
      lclick($_return1, $_return2)
      print("Снял крафт")
      wait(1)
else
      //проверка на необходимость кликнуть по крафту
   GETSCREEN
  if_pixel_in(1068,728,1086,751,9357352)
        lclick(1188,728)
        WAIT(1)
      else
         GETSCREEN
         //поиск возможности покрафтить
         if_pixel_in(790,715,1764,730,16777215)
            lclick($_return1, $_return2)
            print ("нашел пустую ячейку")
            WAIT(1)
            крафт()
         end_if
      end_if
   end_if
end_sub


if($_ms>$ms1)
   ресурсы()
   Print("Собираем ресурсы")
   $ms1=$_ms+100000
end_if

сборкрафт()

диалог()

END_THREAD
WAIT(600) //
SETTHREAD(main, 2)
WAIT(5)
SETTHREAD(main, 1)

Title: Re: Остановка и перезапуск скрипта.
Post by: Gamsa on February 07, 2017, 12:12:23 PM
Спс щас поставлю, а из-за чего скрипт так виснуть может?
Title: Re: Остановка и перезапуск скрипта.
Post by: Gamsa on February 07, 2017, 12:27:00 PM
Хм ... неа, сразу подвис на первом же запуске, протупил 13 минут и не ушел на перезапуск потока.
Title: Re: Остановка и перезапуск скрипта.
Post by: Vint on February 07, 2017, 12:39:37 PM
Последняя версия программы

Что за "else" в строках 38, 77, 117?

В GETSCREEN желательно указывать область.


Зачем лишние GETSCREEN? Пример:
Code: (clickermann) [Select]
    sub(сборкрафт)
        //поиск законченного крафта
        GETSCREEN
        if_pixel_in(790,700,1764,820,7401471)
            lclick($_return1, $_return2)
            print("Снял крафт")
            wait(1)
        else
            //проверка на необходимость кликнуть по крафту
            GETSCREEN    //----после прошлого GETSCREEN ничего не произошло, IF не сработал перешли на ELSE
            if_pixel_in(1068,728,1086,751,9357352)
                lclick(1188,728)
                WAIT(1)
            else
                GETSCREEN   //----после прошлого GETSCREEN ничего не произошло, IF не сработал перешли на ELSE
                //поиск возможности покрафтить
                if_pixel_in(790,715,1764,730,16777215)
                    lclick($_return1, $_return2)
                    print ("нашел пустую ячейку")
                    WAIT(1)
                    крафт()
                end_if
            end_if
        end_if
    end_sub

сделать наверно так:
Code: (clickermann) [Select]
    sub(сборкрафт)
        //поиск законченного крафта
        GETSCREEN(790,700,1764,820)
        if_pixel_in(790,700,1764,820,7401471)
            lclick($_return1, $_return2)
            print("Снял крафт")
            wait(1)
        else
            //проверка на необходимость кликнуть по крафту
            if_pixel_in(1068,728,1086,751,9357352)
                lclick(1188,728)
                WAIT(1)
            else
                //поиск возможности покрафтить
                if_pixel_in(790,715,1764,730,16777215)
                    lclick($_return1, $_return2)
                    print ("нашел пустую ячейку")
                    WAIT(1)
                    крафт()
                ELSE
                    WAITMS(50)
                end_if
            end_if
        end_if
    end_sub

Ну и во всех аналогичных местах тоже.
Title: Re: Остановка и перезапуск скрипта.
Post by: Gamsa on February 07, 2017, 01:08:11 PM
Последняя версия программы

Что за "else" в строках 38, 77, 117?

В GETSCREEN желательно указывать область.


Зачем лишние GETSCREEN?
Спс else лишние убрал. Области тоже указал (для чего кстати указывать их так явно?). Все GETSCREEN сделаны только на смене картинки.

Но в данной части скрипта зависаний замечено не было.
Всегда виснет когда связанно с:
Code: (clickermann) [Select]
sub(диалог)
   //поиск цвета диалогового окна
   $_xd=1052
   $_yd=100
   $_xd2=1834
   $_yd2=500
   $_colord=14146270
   Getscreen($_xd,$_yd,$_xd2,$_yd2)
   If_pixel_in($_xd,$_yd,$_xd2,$_yd2,$_colord)
      Lclick($_return1,$_return2)
      print("нашел кому продать")
      Wait(1)
      //окно торговли
      $ms=$_ms+30000
      While($ms>$_ms)
         Getscreen(1601,550,1693,585)
         If_pixel_in(1601,550,1693,585,3355596)//отмена
            $check=1
            $otx=$_return1
            $oty=$_return2
            $ms=-1
         Else
            Waitms(100)
         End_if
      End_cyc
      If($ms=-1)
         Skip:
         Getscreen(1581,325,1720,410)
         If_pixel_in(1581,325,1720,410,16531877)//наценка
            Lclick($_return1,$_return2)
            print("Больше денег")
            Wait(1)
            Getscreen(1577,640,1753,730)
            If_pixel_in(1577,640,1753,730,9357352)//продать
               Lclick($_return1,$_return2)
               print("Продать")
               Wait(1)
            End_if
         Else
            //Кусок проверки замены
            //поиск цвета предложить/поменять товар
            $_xd=1404
            $_yd=375
            $_xd2=1414
            $_yd2=403
            $_colord=6931710
            Getscreen($_xd,$_yd,$_xd2,$_yd2)
            If_pixel_in($_xd,$_yd,$_xd2,$_yd2,$_colord)
               Lclick($_return1,$_return2)
               print("Поменяем")
               Wait(2)
               goto(skip)
            Else
               Waitms(100)
               Lclick($otx,$oty)
               print("Не купили")
               Wait(2)
            End_if
         End_if
      End_if
   Else
      Waitms(100)
   End_if
   //диалоговые окна желтый цвет
   Getscreen(1052,100,1834,500)
   If_pixel_in(1052,100,1834,500,7195610)
      Lclick($_return1,$_return2)
      Wait(2)
      $check2=0
      While($check2=0)
         Getscreen(1577,640,1753,730)
         If_pixel_in(1577,640,1753,730,9357352)//продать
            $k_x=$_return1
            $k_y=$_return2
            $check2=1
            $check3=0
            While($check3=0)
               Getscreen(1580,287,1713,349)
               If_pixel_in(1580,287,1713,349,16531877)//наценка
                  Lclick($_return1,$_return2)
                  Wait(1)
               Else
                  $check3=1
               End_if
            End_cyc
            Lclick($k_x,$k_y)
            Wait(1)
         Else
            Waitms(300)
         End_if
      End_cyc
   End_if
end_sub
Title: Re: Остановка и перезапуск скрипта.
Post by: Gamsa on February 07, 2017, 02:34:28 PM
Спасибо, щас посмотрю. Я сам не могу понять как возникает, просто по тому что отследил могу судить в каком месте они возникают.
Title: Re: Остановка и перезапуск скрипта.
Post by: Vint on February 07, 2017, 02:41:07 PM
Там, вроде, только в одном месте может застрять
Code: (clickermann) [Select]
               print("Поменяем")
               goto(skip)
Title: Re: Остановка и перезапуск скрипта.
Post by: Gamsa on February 07, 2017, 03:41:36 PM
Подпрограммы выполняющиеся один раз, это не подпрограммы вовсе, а даже не знаю как назвать.
Вот для примера пишу ваш код с нормальными подпрограммами, полностью не изменяю, чтоб могли внести изменения самостоятельно.

Вылезает ошибка POP()
Можно ее как-то понять сразу где она? Я просто только начинаю осваивать Clickermann, поэтому такие корявые коды.

Vint

А в $ms не может возникать ошибки?
Title: Re: Остановка и перезапуск скрипта.
Post by: Vint on February 07, 2017, 04:18:45 PM
А в $ms не может возникать ошибки?
нет

Вылезает ошибка POP()
Можно ее как-то понять сразу где она? Я просто только начинаю осваивать Clickermann, поэтому такие корявые коды.
ошибка POP() почти всегда означает ошибку при вызове подпрограммы. Или ПП нет или расположена ниже вызова.
Конкретно здесь просто опечатка по запаре, строка 7 вызов самой себя
Code: (clickermann) [Select]
   SUB(клик, $par10,$par11,$par12) // подпрограмма делает клик и задержку после него
      клик($par10,$par11)

должно быть
Code: (clickermann) [Select]
SUB(клик, $par10,$par11,$par12) // подпрограмма делает клик и задержку после него
LCLICK($par10,$par11)
Title: Re: Остановка и перезапуск скрипта.
Post by: Gamsa on February 07, 2017, 05:04:38 PM
Спс пойду изучать новую вариацию скрипта))) как раз разберусь почему алгоритм отличается от моего скрипта.
Title: Re: Остановка и перезапуск скрипта.
Post by: quant13 on February 08, 2017, 02:41:45 AM
Собственно вопрос такого плана в скрипте несколько sub запускаются они все просто вызовом в конце, можно как-то сделать чтобы к примеру раз в пол часа все останавливалось и запускалось независимо от основного скрипта?

Code: (Clickermann) [Select]
//в начале скрипта прописываем
#autorun

define($tb1,$_time_t+1800) //+Время в сек
THREAD(restrt,1)
if (($tb1-$_time_t) < 0) // Если вышло время-перезапуск
   EXECUTE("d:\cmann\Clickermann.exe", "d:\cmann\some_script.cms") 
   halt(1)
end_if
wait(1)
END_THREAD

//ваш код
Title: Re: Остановка и перезапуск скрипта.
Post by: Gamsa on February 08, 2017, 09:54:00 AM
kiril, большое спасибо, но в вашем скрипте нормально разобраться мне не позволяет опыт, он сбивается причем я не могу понять почему.
quant13, мне кажется в данной вариации работать не будет т.к. вызов скрипта просто из файла не дает его запуска.
Title: Re: Остановка и перезапуск скрипта.
Post by: Vint on February 08, 2017, 10:10:44 AM
quant13, мне кажется в данной вариации работать не будет т.к. вызов скрипта просто из файла не дает его запуска.
А строка
Code: (clickermann) [Select]
#autorunзачем?
У всех даёт, почему у тебя не должно давать.

Если включена ассоцияция файлов, то запуск можно делать указывая только скрипт
Code: (clickermann) [Select]
EXECUTE("d:\cmann\some_script.cms")

У меня там, кстати, всплывает ошибка первой строки потока. Поэтому чтоб условие работало пришлось добавить лишнюю команду
Code: (clickermann) [Select]
#autorun

$tb1 = $_time_t + 5
THREAD(restrt, 1)
    WAITMS(5)
    IF($tb1 < $_time_t)
        EXECUTE("d:\Яндекс Диск\Clickermann v4.11 build 003\projects\Тесты\Самоперезапуск.cms")
        HALT(1)
    END_IF
    WAITMS(500)
END_THREAD

HINTPOPUP("Перезапуск")
wait(3)
HINTPOPUP("")
wait(10)
HALT
Title: Re: Остановка и перезапуск скрипта.
Post by: Gamsa on February 08, 2017, 10:56:24 AM
quant13, мне кажется в данной вариации работать не будет т.к. вызов скрипта просто из файла не дает его запуска.
У всех даёт, почему у тебя не должно давать.

В том виде в котором дал quant13 файл открывался вообще пустым.
С вашим решением, но без Halt все работает как часы, Halt вырубает все после 1го цикла.
Title: Re: Остановка и перезапуск скрипта.
Post by: Gamsa on February 08, 2017, 11:38:26 AM
Хм, скрипт подвис, по таймеру перегрузился, но продолжал висеть ... как такое может быть?
Во, еще вешает что-то таймер на перезапуск скрипта о-О.
Title: Re: Остановка и перезапуск скрипта.
Post by: quant13 on February 08, 2017, 04:26:39 PM
с $tb1 = $_time_t + 5  работать не будет (т.к постоянно обновляется переменная и условие не будет достигнуто. только define($tb1,$_time_t+8) (ну и 5сек маловато. хоть то детали)

 EXECUTE ("путь к ЕХЕ кликера","путь к скрипту") , как писали если стоит ассоциация то можно писать сразу путь к скрипту.

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

ну и разумеется мой скрипт подразумевает что он дописывается в начале рабочего скрипта, и там есть задержки хоть какие (как в примере винта), ато выйдет что загружается новый и начнут работать оба без задержек до выгрузки старой версии, может делов наделать.
Title: Re: Остановка и перезапуск скрипта.
Post by: Vint on February 08, 2017, 04:43:39 PM
но без Halt все работает как часы, Halt вырубает все после 1го цикла.
с $tb1 = $_time_t + 5  работать не будет (т.к постоянно обновляется переменная и условие не будет достигнуто. только define($tb1,$_time_t+8) (ну и 5сек маловато. хоть то детали)
Само собой. Это же тестовый пример.