Есть скрипт, он выполняет пошагово задания в игре, которые идут строго по порядку и элементы на экране появляються строго в определенной области. Ищу картинку/пиксел-кликаю по нему-жду пока пропадет-иду дальше и так по кругу.
Суть скрипта заключается:
1. Ожидает изображение с таймером
2. Если не нашел изображение с таймером - шаг назад к пункту 3 предыдущего такого-же сценария.
2.1 Снова ищу изображение/пиксель с таймером (если не нашел)
3. Если нашел - клик по нему ПОКА не исчезнет в установленное время
Как вижу это я:
Первое действие:
//
///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
Второе дейстиве:
//
///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 в основном файле - суть которого заключается тупо распаковать чтобы не захламлять.
Например:
#include "steps\Mission1.cms"
waitms(3500)
#include "steps\Mission2.cms"
waitms(3500)
и так далее.Таких действий инклюдов в основном файле сотни лежат поочереди
Вобщем,правильно ли это дело написано,есть ли способ улучшить это,упростить как-то итд
Можно ли пользоваться Include в таких количествах (у меня их примерно 300-350шт)
не замедляет ли он весь скрипт?
После этих пошаговых действий идут рандомные события на которые я должен реагировать:
1. Кликаю на картинку/пиксель и после него может появиться одна из 3 разных картинок в разных координатах одновременно
2. нужно чтобы скрипт их искал с таймером, и предпринимал разные действия к разным картинкам исходя из того какую нашел
3. действия должны быть такие как в первом скрипте (жду элемент с таймером-кликаю на него пока не пропадет-если не нашел делай шаг назад - иду дальше)
Я знаю, что это делается примерно так,через Else:
//
//
//
///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
Но когда я после ифов елсов пишу еще свои ифы елсы циклы итд - оно все не работает:(
Короче,я хочу вставить код(примерно такую логику действий) в Елсы как в первом скрипте.Мне не достаточно простых процедур т.к. нужно еще чтобы проверяло исчезновение картинки с таймером и так далее.
Буду безумно благодарен любой помощи,любому совету.