Author Topic: Остановка и перезапуск скрипта.  (Read 7255 times)

0 Members and 1 Guest are viewing this topic.

Gamsa

  • Зашел в гости
  • *
  • Posts: 18
    • View Profile
Остановка и перезапуск скрипта.
« 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 запускаются они все просто вызовом в конце, можно как-то сделать чтобы к примеру раз в пол часа все останавливалось и запускалось независимо от основного скрипта?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Остановка и перезапуск скрипта.
« Reply #1 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


Gamsa

  • Зашел в гости
  • *
  • Posts: 18
    • View Profile
Re: Остановка и перезапуск скрипта.
« Reply #2 on: February 02, 2017, 03:37:19 PM »
Большое спасибо.

Gamsa

  • Зашел в гости
  • *
  • Posts: 18
    • View Profile
Re: Остановка и перезапуск скрипта.
« Reply #3 on: February 07, 2017, 11:07:46 AM »
Скрипт работает в потоке, в какой-то момент повисает и на перезапуск потока не реагирует.

Gamsa

  • Зашел в гости
  • *
  • Posts: 18
    • View Profile
Re: Остановка и перезапуск скрипта.
« Reply #4 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)


Gamsa

  • Зашел в гости
  • *
  • Posts: 18
    • View Profile
Re: Остановка и перезапуск скрипта.
« Reply #5 on: February 07, 2017, 12:12:23 PM »
Спс щас поставлю, а из-за чего скрипт так виснуть может?

Gamsa

  • Зашел в гости
  • *
  • Posts: 18
    • View Profile
Re: Остановка и перезапуск скрипта.
« Reply #6 on: February 07, 2017, 12:27:00 PM »
Хм ... неа, сразу подвис на первом же запуске, протупил 13 минут и не ушел на перезапуск потока.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Остановка и перезапуск скрипта.
« Reply #7 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

Ну и во всех аналогичных местах тоже.


Gamsa

  • Зашел в гости
  • *
  • Posts: 18
    • View Profile
Re: Остановка и перезапуск скрипта.
« Reply #8 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

Gamsa

  • Зашел в гости
  • *
  • Posts: 18
    • View Profile
Re: Остановка и перезапуск скрипта.
« Reply #9 on: February 07, 2017, 02:34:28 PM »
Спасибо, щас посмотрю. Я сам не могу понять как возникает, просто по тому что отследил могу судить в каком месте они возникают.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Остановка и перезапуск скрипта.
« Reply #10 on: February 07, 2017, 02:41:07 PM »
Там, вроде, только в одном месте может застрять
Code: (clickermann) [Select]
               print("Поменяем")
               goto(skip)


Gamsa

  • Зашел в гости
  • *
  • Posts: 18
    • View Profile
Re: Остановка и перезапуск скрипта.
« Reply #11 on: February 07, 2017, 03:41:36 PM »
Подпрограммы выполняющиеся один раз, это не подпрограммы вовсе, а даже не знаю как назвать.
Вот для примера пишу ваш код с нормальными подпрограммами, полностью не изменяю, чтоб могли внести изменения самостоятельно.

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

Vint

А в $ms не может возникать ошибки?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Остановка и перезапуск скрипта.
« Reply #12 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)


Gamsa

  • Зашел в гости
  • *
  • Posts: 18
    • View Profile
Re: Остановка и перезапуск скрипта.
« Reply #13 on: February 07, 2017, 05:04:38 PM »
Спс пойду изучать новую вариацию скрипта))) как раз разберусь почему алгоритм отличается от моего скрипта.

quant13

  • Активный участник
  • ***
  • Posts: 174
    • View Profile
Re: Остановка и перезапуск скрипта.
« Reply #14 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

//ваш код