Author Topic: Подпрограмма помогите не доходит  (Read 9389 times)

0 Members and 1 Guest are viewing this topic.

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #30 on: August 28, 2017, 11:29:41 PM »
Да скопировал просто не стал в лог лезть.
Дык может там другие цифры? При отладке скрипта из лога вылазить нельзя, а он лезть не стал... Может картинку не видит.

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #31 on: August 28, 2017, 11:42:34 PM »
Картинку находит 100% ни разу не было сбоя!
AGClient тоже находит.
Проблема в том что скрипт сразу останавливается, а это значит что прога работает потому как HALT стоит только тут
Code: (clickermann) [Select]
    IF($cap4a < 100)
        LOGWRITE ("Всё пропало, шеф! Ничего не получилось.")
        HALT
    END_IF

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #32 on: August 28, 2017, 11:53:43 PM »
Это условие будет верным только если это- IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70) неверным.
Ща проверим. Вставляй в инклюд, запускай, смотри лог.
Code: (clickermann) [Select]
WAIT(1)

// Область снимка капчи
$x1 = 285
$y1 = 160
$x2 = 675
$y2 = 280


SUB(cap4a)
   FOR($cap4a=0, $cap4a < 3) // цикл распознавания капчи
      GETSCREEN(450,430, 490,470)
      COLORMODE(6, 450,430, 490,470)
      IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70) // Капча нашлась
         LOGWRITE ("Капча нашлась!!!")
         TFCLEAR("out.txt")
         WAITMS(50)
         TFWRITE("out.txt", "0")
         waitms(200)
         
         // последовательное задание координат
         PostMessage($hwnd, 0x555, 1, $x1)
         PostMessage($hwnd, 0x555, 2, $y1)
         PostMessage($hwnd, 0x555, 3, $x2)
         PostMessage($hwnd, 0x555, 4, $y2)
         PostMessage($hwnd, 0x555, 5, 0) // распознать
         waitms(200)
         $response = 0
         
         $time_cap4a = $_time_t + 60  // ограничение 60 сек на ответ
         WHILE(($response = 0) & ($time_cap4a < $_time_t))
            $response = TFREAD("out.txt", 1)
            WAITMS(500)
         END_CYC
         
         IF($response = 1)
            $str = TFREAD("out.txt", 2)
            LOGWRITE("Распознано. Ответ: ", $str)
            FOR($step=1, $step < 4)
               $click = STRCUT($str, $step, 1)
               WAITMS(100)
               SWITCH($click)
               CASE(1)
                  LCLICK(350,330)
               CASE(2)
                  LCLICK(475,330)
               CASE(3)
                  LCLICK(600,330)
               CASE(4)
                  LCLICK(350,390)
               CASE(5)
                  LCLICK(475,390)
               CASE(6)
                  LCLICK(600,390)
               CASE(7)
                  LCLICK(350,455)
               CASE(8)
                  LCLICK(475,455)
               CASE(9)
                  LCLICK(600,455)
               END_SWITCH
            END_CYC
            WAITMS(100)
            LCLICK(480,520) // отправить
            WAITMS(300)
            $cap4a = 100 // после ввода выходим из цикла
         END_IF
         IF(($response = 2) | ($response = 0))
            LOGWRITE ("НЕ распознано. Ошибка!")
            WAITMS(300)
         END_IF
      ELSE
         LOGWRITE ("Капча нифига не нашлась!!!")
         WAITMS(100)
      END_IF
   END_CYC
   IF($cap4a < 100)
      LOGWRITE ("Всё пропало, шеф! Ничего не получилось.")
      HALT
   END_IF
END_SUB
Так запускай
Code: (clickermann) [Select]
#name "WOF"
#include "cap4a.cms"
wndpos(wndfind("NoxPlayer"), 0, 0)

IF(wndfind("AGClient v1.5")=0)
   execute("AGClient.exe")
   WHILE($hwnd=0)
      $hwnd=wndfind("AGClient v1.5")
      WAITMS(50)
   END_CYC
ELSE
   $hwnd=wndfind("AGClient v1.5")
END_IF
wndpos($hwnd,1000,219)
WAITMS(100)
LCLICK(1122,314)

LOGWRITE ("AGClient hwnd: ",$hwnd)
cap4a()
« Last Edit: August 29, 2017, 12:16:18 AM by open_78 »

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #33 on: August 29, 2017, 08:44:12 AM »
Неправда. А как же это?
Code: (clickermann) [Select]
$cap4a = 100 // после ввода выходим из цикла

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #34 on: August 29, 2017, 09:47:02 AM »
А так?
Code: (clickermann) [Select]
#name "WOF"
#include "cap4a.cms"

// Область снимка капчи
$x1 = 285
$y1 = 160
$x2 = 675
$y2 = 280


SUB(cap4a)
    GETSCREEN(450,430, 490,470)
    COLORMODE(6, 450,430, 490,470)
    IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70) // Капча нашлась
        FOR($cap4a=0, $cap4a < 3) // цикл распознавания капчи
            TFCLEAR("out.txt")
            WAITMS(50)
            TFWRITE("out.txt", "0")
            waitms(200)
           
            // последовательное задание координат
            PostMessage($hwnd, 0x555, 1, $x1)
            PostMessage($hwnd, 0x555, 2, $y1)
            PostMessage($hwnd, 0x555, 3, $x2)
            PostMessage($hwnd, 0x555, 4, $y2)
            PostMessage($hwnd, 0x555, 5, 0) // распознать
            waitms(200)
            $response = 0
           
            $time_cap4a = $_time_t + 60  // ограничение 60 сек на ответ
            WHILE(($response = 0) & ($time_cap4a < $_time_t))
                $response = TFREAD("out.txt", 1)
                WAITMS(500)
            END_CYC
           
            IF($response = 1)
                $str = TFREAD("out.txt", 2)
                LOGWRITE("Распознано. Ответ: ", $str)
                FOR($step=1, $step < 4)
                    $click = STRCUT($str, $step, 1)
                    WAITMS(100)
                    SWITCH($click)
                    CASE(1)
                        LCLICK(350,330)
                    CASE(2)
                        LCLICK(475,330)
                    CASE(3)
                        LCLICK(600,330)
                    CASE(4)
                        LCLICK(350,390)
                    CASE(5)
                        LCLICK(475,390)
                    CASE(6)
                        LCLICK(600,390)
                    CASE(7)
                        LCLICK(350,455)
                    CASE(8)
                        LCLICK(475,455)
                    CASE(9)
                        LCLICK(600,455)
                    END_SWITCH
                END_CYC
                WAITMS(100)
                LCLICK(480,520) // отправить
                WAITMS(300)
                $cap4a = 100 // после ввода выходим из цикла
            END_IF
            IF(($response = 2) | ($response = 0))
                LOGWRITE ("НЕ распознано. Ошибка!")
                WAITMS(500)
                GETSCREEN(450,430, 490,470)
                COLORMODE(6, 450,430, 490,470)
                IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70)
                ELSE
                    $cap4a = 100
                END_IF
            END_IF
        END_CYC
        IF($cap4a < 100)
            LOGWRITE ("Всё пропало, шеф! Ничего не получилось.")
            HALT
        END_IF
    END_IF
END_SUB



wndpos( wndfind("NoxPlayer"), 0, 0)

IF( wndfind("AGClient v1.5"))
    WAITMS(100)
ELSE
    execute("AGClient.exe")
    WAITMS(300)
    wndpos( wndfind("AGClient v1.5"), 1000, 219)
    WAITMS(100)
    LCLICK(1122,314)
END_IF

$hwnd = wndFind("AGClient v1.5") // находим окно
LOGWRITE ("AGClient hwnd: ", $hwnd)
cap4a()

Хотя твоя проблема с
Code: [Select]
22:49:16 AGClient hwnd: 0к этому отношения не имеет. У тебя до подпрограммы проблема, не видит AGClient.

Ты скрипт не переместил? Времени на запуск 300+100 мс хватает?


Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #35 on: August 29, 2017, 11:48:35 AM »
А обязательно добавлять в скрипт область ввода капчи? Если прописать в ини файле аг клиента она что сбрасывается? И еще вопросик как в место switch прописать что бы цифры как с клавы писались?

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #36 on: August 29, 2017, 01:10:58 PM »
А обязательно добавлять в скрипт область ввода капчи? Если прописать в ини файле аг клиента она что сбрасывается? И еще вопросик как в место switch прописать что бы цифры как с клавы писались?
Этим постом ты хочешь сказать что всё заработало, и у тебя появились новые вопросы?
Ну ладно.
Не обязательно. Но может случиться такое что у тебя появится вторая игрушка с капчей. Ты-ж не хочешь каждый раз лазить в ини файл с целью изменения области? А на последний вопрос отвечать не буду. Читай справку, учи коды клавиш, команды нажатия клавиш. Привык уже что всё здесь сделают вот и не напрягаешься. Всю твою рыбалку полностью написали на этом форуме. Имей совесть.

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #37 on: August 29, 2017, 03:12:54 PM »
Этим постом ты хочешь сказать что всё заработало, и у тебя появились новые вопросы?
Нет, пока не было возможности проверить, на работе. Да и ты заблуждаешся немного. По началу я пришол чисто из за рыбалки, но посидев тут немного меня затянуло.  :) Сейчас у меня больше интерес к скрипту чем к рыбалке, а на рыбалке я практику скрипт. Справка это хорошо, НО там все прямолинейно и понятно написано для тех кто знает хоть какой то язык програмирования. А я вот не знаю ни одного и поэтому мне трудно там с некоторыми вещами разобратся. Да не спорю с многими строками помогли на форуме но есть и такие которые я уже сам сделал)

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #38 on: August 29, 2017, 03:44:02 PM »
Согласен, в справке не всё прозрачно. Если трудно в справке, пользуйся поиском по сайту. Тут многие вопросы уже обсуждались по несколько раз. Только в старину сильно не копай. Если интересен сам скрипт, то попробуй сам решить проблему с вводом цифр с клавиатуры. Там всё просто. Весь SWITCH можно заменить одной строкой и цифры как с клавы писаться будут.

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #39 on: August 29, 2017, 04:30:52 PM »
Согласен, в справке не всё прозрачно. Если трудно в справке, пользуйся поиском по сайту. Тут многие вопросы уже обсуждались по несколько раз. Только в старину сильно не копай. Если интересен сам скрипт, то попробуй сам решить проблему с вводом цифр с клавиатуры. Там всё просто. Весь SWITCH можно заменить одной строкой и цифры как с клавы писаться будут.
Уверяю тебя, я прежде чем написать сюда, смотрю сперва справку если не понял иду в поиск и только после этого пишу в теме. А про то что я спрашивал вот сам пытался но опять какието не понятки...
В логе пишет правильно Лог: "Распознано. Ответ: 239" а вот нажимает на фоне текстового файла только "39" в файле "out.txt" в первой строке "1" а во второй "239"
Code: (clickermann) [Select]
$response = 1

IF($response = 1)
   $str = TFREAD("out.txt", 2)
   LOGWRITE("Распознано. Ответ: ", $str)
KEYSTRING($str, 50)
END_IF

halt

Добавил задержку вроде пишет что нужно но иногда первую цифру сьедает
Code: (clickermann) [Select]
$response = 1

IF($response = 1)
   $str = TFREAD("out.txt", 2)
   LOGWRITE("Распознано. Ответ: ", $str)
   WAITMS(200)
   KEYSTRING($str, 50)
END_IF

halt
« Last Edit: August 29, 2017, 04:44:11 PM by Ramzesia »

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #40 on: August 29, 2017, 04:46:12 PM »
Иногда нужно перевести фокус на окно в которое вводим данные. Добавь клик по окну (по текстовому файлу).
Code: (clickermann) [Select]
$response = 1
 
IF($response = 1)
   $str = TFREAD("out.txt", 2)
   LOGWRITE("Распознано. Ответ: ", $str)
   LCLICK(10,10)
   KEYSTRING($str, 50)
END_IF
 
halt
В игре должно и так работать, без клика.
« Last Edit: August 29, 2017, 04:50:27 PM by open_78 »

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #41 on: August 29, 2017, 05:13:26 PM »
Иногда нужно перевести фокус на окно в которое вводим данные. Добавь клик по окну (по текстовому файлу).
Вот видиш, работает, а вить в справке про такие тонкости, не написано.  :)

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #42 on: August 29, 2017, 05:21:35 PM »
Вот видишь, только это и подсказал. Остальное ты сам решил.

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #43 on: August 29, 2017, 05:25:58 PM »
Code: (clickermann) [Select]
    IF($cap4a < 100)
        LOGWRITE ("Всё пропало, шеф! Ничего не получилось.")
        HALT
    END_IF
Это условие будет верным только если это- IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70) неверным.
Ща проверим. Вставляй в инклюд, запускай, смотри лог.
Ну по твоим словам, выходит что, как раз в этом и проблема. Изначально вить,окна с капчей нет, соотвтственно:
Code: (clickermann) [Select]
IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70)
// Равно "0"
// Срабатывает условие
    IF($cap4a < 100)
        LOGWRITE ("Всё пропало, шеф! Ничего не получилось.")
        HALT
    END_IF
// Кликер останавливается, как раз то, что и происходит

Вот лог:
Code: [Select]
18:34:41 AGClient hwnd: 656174
18:34:41 Капча нифига не нашлась!!!
18:34:41 Капча нифига не нашлась!!!
18:34:41 Капча нифига не нашлась!!!
18:34:41 Всё пропало, шеф! Ничего не получилось.
« Last Edit: August 29, 2017, 05:37:08 PM by Ramzesia »

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Подпрограмма помогите не доходит
« Reply #44 on: August 29, 2017, 05:48:41 PM »
А так?
Code: (clickermann) [Select]
#name "WOF"
#include "cap4a.cms"

// Область снимка капчи
$x1 = 285
$y1 = 160
$x2 = 675
$y2 = 280


SUB(cap4a)
    GETSCREEN(450,430, 490,470)
    COLORMODE(6, 450,430, 490,470)
    IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70) // Капча нашлась
        FOR($cap4a=0, $cap4a < 3) // цикл распознавания капчи
            TFCLEAR("out.txt")
            WAITMS(50)
            TFWRITE("out.txt", "0")
            waitms(200)
           
            // последовательное задание координат
            PostMessage($hwnd, 0x555, 1, $x1)
            PostMessage($hwnd, 0x555, 2, $y1)
            PostMessage($hwnd, 0x555, 3, $x2)
            PostMessage($hwnd, 0x555, 4, $y2)
            PostMessage($hwnd, 0x555, 5, 0) // распознать
            waitms(200)
            $response = 0
           
            $time_cap4a = $_time_t + 60  // ограничение 60 сек на ответ
            WHILE(($response = 0) & ($time_cap4a < $_time_t))
                $response = TFREAD("out.txt", 1)
                WAITMS(500)
            END_CYC
           
            IF($response = 1)
                $str = TFREAD("out.txt", 2)
                LOGWRITE("Распознано. Ответ: ", $str)
                FOR($step=1, $step < 4)
                    $click = STRCUT($str, $step, 1)
                    WAITMS(100)
                    SWITCH($click)
                    CASE(1)
                        LCLICK(350,330)
                    CASE(2)
                        LCLICK(475,330)
                    CASE(3)
                        LCLICK(600,330)
                    CASE(4)
                        LCLICK(350,390)
                    CASE(5)
                        LCLICK(475,390)
                    CASE(6)
                        LCLICK(600,390)
                    CASE(7)
                        LCLICK(350,455)
                    CASE(8)
                        LCLICK(475,455)
                    CASE(9)
                        LCLICK(600,455)
                    END_SWITCH
                END_CYC
                WAITMS(100)
                LCLICK(480,520) // отправить
                WAITMS(300)
                $cap4a = 100 // после ввода выходим из цикла
            END_IF
            IF(($response = 2) | ($response = 0))
                LOGWRITE ("НЕ распознано. Ошибка!")
                WAITMS(500)
                GETSCREEN(450,430, 490,470)
                COLORMODE(6, 450,430, 490,470)
                IF_PICTURE_IN (450,430, 490,470, "texture\K.bmp", -1, 70)
                ELSE
                    $cap4a = 100
                END_IF
            END_IF
        END_CYC
        IF($cap4a < 100)
            LOGWRITE ("Всё пропало, шеф! Ничего не получилось.")
            HALT
        END_IF
    END_IF
END_SUB



wndpos( wndfind("NoxPlayer"), 0, 0)

IF( wndfind("AGClient v1.5"))
    WAITMS(100)
ELSE
    execute("AGClient.exe")
    WAITMS(300)
    wndpos( wndfind("AGClient v1.5"), 1000, 219)
    WAITMS(100)
    LCLICK(1122,314)
END_IF

$hwnd = wndFind("AGClient v1.5") // находим окно
LOGWRITE ("AGClient hwnd: ", $hwnd)
cap4a()
А вот так заработало, во всяком случае, кликер не останавливается сразу. Надо щас имитировать, зависание капчи и посмотреть, что сделает кликер. Спасиб за помощь пойду переваривать.
« Last Edit: August 29, 2017, 05:54:01 PM by Ramzesia »