Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Jet

Pages: [1]
1
Quote
Непонятна роль куска в районе строк 46-58. Он лишний. Дальше идёт этот же поиск опять.
Да, (я тогда не знал про GOTO) но только тогда, когда условие ложно - сперва он ищет предыдущий пиксель/картинку,который был еще в предыдущем include'e - действует с ним - снова ищет текущий пиксель в текущем скрипте(include'e)

Quote
появиться одна из 3 разных картинок в разных координатах одновременно
Чтобы правильно написать этот кусок, нужно понимать что нужно. Код совсем не соответствует описанию, в нём нет поиска 3 картинок нив каком порядке.
Все вот эти "Кликаю на картинку/пиксель"  "действия к разным картинкам" и прочие общие слова ясности не добавляют. Нужно писать конкретно с привязкой к показанному коду.
Например: ищем картинку P1.bmp, должна обязательно/необязательно появится одна из/одна или несколько сразу  - P10.bmp, P20.bmp, P30.bmp
Нужно ждать пока появятся - все сразу/все по очереди/хотя бы одна и т.д. Что делаем после того как появилась. Что делать если не появилась.
Ищем картинку с таймером P1.bmp, должна обязательно появится одна из P1.bmp, P2.bmp, P3.bmp, P4.bmp сразу.
Нужно ждать пока появятся - хотя бы одна. После того как появилась делаем клик по картинке (Р1 - клик 10 раз, к Р2-Р4 это не применяется) и ожидаем исчезновение. Если не появилась - возвращение к предыдущему такому же условию которое вызвало картинку Р1.

Грубо говоря если нашел Р1 выполнил действия, то все ок - иди дальше к следующим include'ам искать картинки по списку. Если нашел Р2-Р4 - то ищи картинки еще в этом условии с таймерами на появление и исчезновение.
Насколько я понял это можно реализовать через подпрограммы вызывая их.

Почему мне не подходят обычные процедуры для каждой отдельной картинки? - потому что мне нужно ожидать картинку и ожидать исчезновения. После Else'a уже находясь в цикле я не могу его вызвать снова пока он не закончится и я не выйду с условия.

Для общей картины обьясню, что вообще происходит. Я нажимаю на кнопку которая повышает мой лвл(Р1) - когда я делаю это, может произойти 1 из 3 событий, из-за которых выскакивает новое окно: (Р2)недостаточно энергии, (Р3)недостаточно талонов, (Р4)новый уровень.
Соответственно когда мне выскакивает 1 из 3 окон я должен нажать на него и еще понажимать несколько картинок после него чтобы вернуться к Р1 и продолжить сценарий.

Вроде так, если нашел Р2-Р4 - кликаю на него и делаю другие действия (sub), ищу следующие картинки еще в этом условии и потом выхожу из него и иду дальше по сценарию по include'ам.
Как в одной подпрограмме искать несколько картинок поочереди например 5 раз путем повышения числа переменной $action_pic.
И если не нашел например вторую (pvp2) картинку - возвращалось на предыдущую (pvp1) - в конце повышения числа должно искать pvp5.bmp
Если не нашел первую (pvp1) - возвращайся к условию которое вызвало подпрограмму 63 строка(тоесть это уже выход из программы,если такое возможно)

Пример для понимания:
Code: (clickermann) [Select]
                               

SUB(action1, $sp_x1, $sp_y1, $sp_x2, $sp_y2, $action1_pic,$action_mode)

//====================// Координаты PVP
$sp_x1 = 902
$sp_y1 = 98
$sp_x2 = 923
$sp_y2 = 147
//====================


//====================// Название картинки - "pvp1"   
$action1_pic = pvp1                                   
//====================
 
   $time = $_time_t + 10
    WHILE($time > $_time_t)
        GETSCREEN($sp_x1, $sp_y1, $sp_x2, $sp_y2)
        COLORMODE(7, $sp_x1, $sp_y1, $sp_x2, $sp_y2)
        IF_PICTURE_IN($sp_x1, $sp_y1, $sp_x2, $sp_y2, STRCONCAT("screens\", $action1_pic, ".bmp"))
                IF($action_mode = 1)
               $time = 0
                print("Распознал_", $action1_pic)
            ELSE
                print("Действую_", $action1_pic)
                LCLICK($_return1, $_return2)
                waitms(500)
            END_IF
        ELSE
            IF($action_mode = 1)       
            ELSE
                $time = 0
                print("Дальше")
            END_IF
        END_IF
        waitms(100)
    END_CYC
IF($time ! 0)
print("Не_распознал")
//И если не нашел например вторую (pvp2) картинку - возвращалось на предыдущую (pvp1)
END_IF

END_SUB


FOR ($i, $i<10)// кликнуть 10 раз на Р1
   $time = $_time_t + 10 // таймер на 10 секунд
   WHILE($time > $_time_t)
   GETSCREEN
   COLORMODE (7)
   
   IF_PICTURE_IN (0,0,100,200, $_xmax,$_ymax, "screens\P1.bmp", -1, 100)
      $time = 0
      LCLICK($_return1, $_return2)
      WAITMS(100)
END_CYC     
      ELSE
         IF_PICTURE_IN (902,98,923,147, "screens\P2.bmp", -1, 100)
         $time = 0
         LCLICK($_return1, $_return2)
         //вызываю подпрограмму чтобы выполнить действия
         action1($sp_x1, $sp_y1, $sp_x2, $sp_y2, $action1_pic, 1)
         action1($sp_x1, $sp_y1, $sp_x2, $sp_y2, $action1_pic, 2)
         // и так далее вызывать
   
         ELSE
            IF_PICTURE_IN (750,230,910,300, $_xmax,$_ymax, "screens\P3.bmp", -1, 100)
            $time = 0
            LCLICK($_return1, $_return2)
            //вызываю подпрограмму чтобы выполнить действия
         action2()
         // и так далее вызывать
           
            ELSE
               IF_PICTURE_IN (470,560,610,650, "screens\P4.bmp", -1, 100)
               $time = 0
               LCLICK($_return1, $_return2)
               //вызываю подпрограмму чтобы выполнить действия
         action3()
         // и так далее вызывать
               END_IF
            END_IF
        END_IF   
   END_IF         
END_CYC


IF($time ! 0)
// время истекло, ни одна из картинок не найдена
END_IF



2
Есть скрипт, он выполняет пошагово задания в игре, которые идут строго по порядку и элементы на экране появляються строго в определенной области. Ищу картинку/пиксел-кликаю по нему-жду пока пропадет-иду дальше и так по кругу.

Суть скрипта заключается:
1. Ожидает изображение с таймером
2. Если не нашел изображение с таймером - шаг назад к пункту 3 предыдущего такого-же сценария.
2.1 Снова ищу изображение/пиксель с таймером (если не нашел)
3. Если нашел - клик по нему ПОКА не исчезнет в установленное время

Как вижу это я:

Первое действие:
Code: (clickermann) [Select]
//
///Mission2
//
//
//
//
///Ожидаю пиксель
WHILE($time > $_time_t)     
   GETSCREEN (817,586,950,623)
   COLORMODE (8)
   IF_PICTURE_IN (817,586,950,623, "screens\Mission1.bmp", -1, 100)
      $time = 0
      print(Распознал_Mission1)
      WAITMS(100)
     
   END_IF
   waitms(100)
END_CYC
//
//
//
//
///Если не распознал
IF($time ! 0)

//Ожидаю предыдущее исчезновение пикселя
print(Не_распознал_Mission1)
$time = $_time_t + 10
WHILE($time > $_time_t)   
   GETSCREEN (990,217,1006,272)
   IF_PIXEL_IN (990,217,1006,272, 16053655)
   print(Действую_Mission0)
      waitms(300)
LCLICK($_return1, $_return2+10)
      waitms(500)
   ELSE
   $time = 0 
   waitms(100)
   print(Дальше)
   END_IF
END_CYC
//
//
//
//
///Снова ищу картинку
$time = $_time_t + 90
WHILE($time > $_time_t)     
   GETSCREEN (817,586,950,623)
   COLORMODE (8)
   IF_PICTURE_IN (817,586,950,623, "screens\Mission1.bmp", -1, 100)
      $time = 0
      print(Распознал_Mission1)
      WAITMS(100)
   END_IF
   waitms(100)
END_CYC

END_IF
//
//
//
//
///Ожидаю исчезновения картинки после нажатия на нее
$time = $_time_t + 10
WHILE($time > $_time_t)
 
   GETSCREEN (817,586,950,623)
   COLORMODE (8)
   IF_PICTURE_IN (817,586,950,623, "screens\Mission1.bmp", -1, 100)
   print(Действую_Mission1)
      waitms(300)
LCLICK($_return1, $_return2)
      waitms(500)
   ELSE
   $time = 0 
   waitms(100)
   print(Дальше)
   END_IF
END_CYC
 
IF($time > 0)
   print(Время_ожидания_исчерпано_Mission1)
   
END_IF

Второе дейстиве:
Code: (clickermann) [Select]
//
///Mission2
//
//
//

///Ожидаю пиксель
$time = $_time_t + 240
WHILE($time > $_time_t)     
   GETSCREEN (400,585,581,623)
   IF_PIXEL_IN (400,585,581,623, 10538475)
      $time = 0
      print(Распознал_Mission2)
      WAITMS(100)
     
   END_IF
   waitms(100)
END_CYC
//
//
//
///Если не распознал
IF($time ! 0)


///Ожидаю предыдущее исчезновение картинки
print(Не распознал_Mission2)

$time = $_time_t + 10
WHILE($time > $_time_t)
print(Возвращаюсь_на_шаг_назад) 
   GETSCREEN (817,586,950,623)
   IF_PIXEL_IN (817,586,950,623, 11197951)
   print(Действую_Mission1)
      waitms(300)
LCLICK($_return1, $_return2+10)
      waitms(500)
   ELSE
   $time = 0 
   waitms(100)
   print(Дальше)
   END_IF
END_CYC
//
//
//
//
///Снова ищу пиксель
$time = $_time_t + 190
WHILE($time > $_time_t)     
   GETSCREEN (400,585,581,623)
   IF_PIXEL_IN (400,585,581,623, 10538475)
      $time = 0
      print(Распознал_Mission2)
      WAITMS(100)
   END_IF
   waitms(100)
END_CYC

END_IF
//
//
//
//
//
///Ожидаю исчезновения картинки после нажатия на нее
$time = $_time_t + 10
WHILE($time > $_time_t)   
   GETSCREEN (400,585,581,623)
   IF_PIXEL_IN (400,585,581,623, 10538475)
   print(Действую_Mission2)
      waitms(300)
LCLICK($_return1, $_return2+10)
      waitms(500)
   ELSE
   $time = 0 
   waitms(100)
   print(Дальше)
   END_IF
END_CYC
 
IF($time > 0)
   print(Время_ожидания_исчерпано_Mission2)
   
END_IF

Каждое вот такое действие я пишу в отдельном файле и вызываю через #include в основном файле - суть которого заключается тупо распаковать чтобы не захламлять.
Например:

Code: (clickermann) [Select]
#include "steps\Mission1.cms"
waitms(3500)
#include "steps\Mission2.cms"
waitms(3500)

и так далее.Таких действий инклюдов в основном файле сотни лежат поочереди


Вобщем,правильно ли это дело написано,есть ли способ улучшить это,упростить как-то итд
Можно ли пользоваться Include в таких количествах (у меня их примерно 300-350шт)
не замедляет ли он весь скрипт?

После этих пошаговых действий идут рандомные события на которые я должен реагировать:

1. Кликаю на картинку/пиксель и после него может появиться одна из 3 разных картинок в разных координатах одновременно
2. нужно чтобы скрипт их искал с таймером, и предпринимал разные действия к разным картинкам исходя из того какую нашел
3. действия должны быть такие как в первом скрипте (жду элемент с таймером-кликаю на него пока не пропадет-если не нашел делай шаг назад - иду дальше)

Я знаю, что это делается примерно так,через Else:
Code: (clickermann) [Select]
//
//
//
///BLITZ2_Stamina
//
//
$time = $_time_t + 15
print(Ожидаю_BLITZ2_Stamina)
WHILE($time > $_time_t)     
   GETSCREEN (400,72,939,451)
   COLORMODE(7)//BLITZ 2
      IF_PICTURE_IN (574,110,791,138, "screens\blitz2.bmp", -1, 100)
      $time = 0
     
   print(Захожу_Blitz2)
      waitms(100)
   END_IF

     
      ELSE //Stamina
     
      IF_PIXEL_IN (408,314,939,451, 2281723 )
      $time = 0
      WAITMS(100)
            print(Действую_Stamina)
            waitms(300)
            LCLICK(687,525)  // 3422304
            waitms(1500)   
            LCLICK(1141,97)  // 4950978 
            waitms(100)
      END_IF

ELSE //PVP
     
      IF_PIXEL_IN (108,314,339,651, 1282723 )
      $time = 0
      WAITMS(100)
            print(Действую_PVP)
            waitms(300)
    LCLICK(687,525)  // 3422304
            waitms(1500)   
            LCLICK(1141,97)  // 4950978 
            waitms(100)
      END_IF
END_CYC

Но когда я после ифов елсов пишу еще свои ифы елсы циклы итд - оно все не работает:(
Короче,я хочу вставить код(примерно такую логику действий) в Елсы как в первом скрипте.Мне не достаточно простых процедур т.к. нужно еще чтобы проверяло исчезновение картинки с таймером и так далее.

Буду безумно благодарен любой помощи,любому совету.

Pages: [1]