Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Зануда on July 12, 2017, 10:29:43 PM
-
не могу понять с этими циклами массивами :'( а через условия много писать и редактировать не удобно :-\
STRSEPARATE("св1,ОГ,СВ,ОГВ",",",$pzlo)
STRSEPARATE("19лвл,18лвл,17лвл,16лвл",",",$lvl)
//....
SUB(лвл)
go:
FOR($zlo=0,$zlo<ARRSIZE($pzlo))
GETSCREEN ($xx-34,$yy+372,$xx+132,$yy+546)
COLORMODE(7, $xx-34,$yy+372,$xx+132,$yy+546)
IF_PICTURE_IN($xx-34,$yy+372,$xx+132,$yy+546,STRCONCAT($pzlo[$zlo],".bmp"),-1,90) //проверяем не нашлась ли любая картинка из всего списка (pzlo) если нашлась любая из списка нападаем выходим из цикла
///
LOGWRITE ("моб подошел")
m_move($_return1+RND(-10,10), $_return2+RND(-10,10))
LCLICK($_xmouse,$_ymouse)
$tim1234 = $_time_t + 10
WHILE($tim1234 > $_time_t)
GETSCREEN ($xx+331,$yy+260, $xx+464,$yy+391) //(750,360, 883,491)
IF_PICTURE_IN ($xx+331,$yy+260, $xx+464,$yy+391, "напасть.bmp", -1, 70)
$tim1234 = 0
INC($_zlo,1)
m_move($_return1+RND(-10,10), $_return2+RND(-2,2))
LCLICK($_xmouse,$_ymouse)
WAITMS(rnd(3000,5000))
$hod_1=1
goto(hod)
ELSE
WAITMS(500)
END_IF
END_CYC
///
$zlo=99
ELSE
WAITMS(50)
END_IF
END_CYC
IF($zlo<99) // если не нашлась ни одна из списка (pzlo) проверяем другой список (lvl)
//
//SCREENSHOTEX($xx-34,$yy+372,$xx+132,$yy+546, "Image_", 0)
FOR($l_vl=0,$l_vl<ARRSIZE($lvl))
GETSCREEN ($xx-13,$yy+50, $xx+6,$yy+74)
IF_PICTURE_IN($xx-13,$yy+50, $xx+6,$yy+74,STRCONCAT($lvl[$l_vl],".bmp"),-1,90) //проверяем другой список если есть любая из этого списка выполняем и выходим из цыкла
//
LOGWRITE ("есть нужная")
GETSCREEN ($xx-18,$yy+531, $xx+106,$yy+563)
IF_PICTURE_IN ($xx-18,$yy+531, $xx+106,$yy+563, "таймер.bmp", -1, 80)
LOGWRITE ("таймер")
m_move($xx+632+RND(-10,10), $yy+245+RND(-10,10))
LCLICK($_xmouse,$_ymouse)
WAITMS(rnd(1700,1900))
WAITMS(10)
ELSE
прогон()
END_IF
//
$l_vl=999
ELSE
WAITMS(50)
END_IF
END_CYC
IF($l_vl<999) //если не нашлось и из этого списка (lvl) картинки делаем клик и возвращаемся в начало к проверке картинок из списка(pzlo)
LOGWRITE ("лвл не подошел")
m_move($xx+632+RND(-10,10), $yy+245+RND(-10,10))
LCLICK($_xmouse,$_ymouse)
WAITMS(rnd(1700,1900))
goto(go)
END_IF
END_IF
END_SUB
//....
-
А вопрос какой? Провести работу над ошибками?
Самый страшный и непростительный косяк в строке 26. Прыжок из цикла находящегося в цикле находящегося в подпрограмме. Расстрел 8)
-
А вопрос какой? Провести работу над ошибками?
Самый страшный и непростительный косяк в строке 26. Прыжок из цикла находящегося в цикле находящегося в подпрограмме. Расстрел 8)
а как по другому если мне именно так нужно да и не доходит дело до этого он тупо пишет что не найдено картинки ни из первого списка не из второго хотя если отдельно взять эти же картинки и через обычный поиск картинки проверить оно их находит
а вопрос в том как правильно сделать что было типа ищем картинки из первого списка (пзло) если не нашли ни одной из этого списка тогда ищем из списка (лвл) если и тут не нашлось ни одной из списка тогда делаем клик
-
вот через простый поиск картинки все работает как нужно только беда в том что это не очень то и красиво много строк и редактировать не удобно чтоб добавить или убрать картинку нужно добавлять еще одни поиск :-\ а что вот точно вот так работало но через масив не могу понять как сделать :'(
SUB(лвл)
go:
GETSCREEN ($xx-34,$yy+372,$xx+132,$yy+546) //первая область поиска картинки
COLORMODE(7, $xx-34,$yy+372,$xx+132,$yy+546)
IF_PICTURE_IN ($xx-34,$yy+372,$xx+132,$yy+546, "св1.bmp", -1, 90)
LOGWRITE ("моб подошел")
m_move($_return1+RND(-10,10), $_return2+RND(-10,10))
LCLICK($_xmouse,$_ymouse)
$tim1234 = $_time_t + 10
WHILE($tim1234 > $_time_t)
GETSCREEN ($xx+331,$yy+260, $xx+464,$yy+391) //(750,360, 883,491)
IF_PICTURE_IN ($xx+331,$yy+260, $xx+464,$yy+391, "напасть.bmp", -1, 70)
$tim1234 = 0
INC($_zlo,1)
m_move($_return1+RND(-10,10), $_return2+RND(-2,2))
LCLICK($_xmouse,$_ymouse)
WAITMS(rnd(3000,5000))
$hod_1=1
goto(hod)
ELSE
WAITMS(500)
END_IF
END_CYC
ELSE //если не нашло св1
IF_PICTURE_IN ($xx-34,$yy+372,$xx+132,$yy+546, "ог.bmp", -1, 90)
LOGWRITE ("моб подошел")
m_move($_return1+RND(-10,10), $_return2+RND(-10,10))
LCLICK($_xmouse,$_ymouse)
$tim1234 = $_time_t + 10
WHILE($tim1234 > $_time_t)
GETSCREEN ($xx+331,$yy+260, $xx+464,$yy+391) //(750,360, 883,491)
IF_PICTURE_IN ($xx+331,$yy+260, $xx+464,$yy+391, "напасть.bmp", -1, 70)
$tim1234 = 0
INC($_zlo,1)
m_move($_return1+RND(-10,10), $_return2+RND(-2,2))
LCLICK($_xmouse,$_ymouse)
WAITMS(rnd(3000,5000))
$hod_1=1
goto(hod)
ELSE
WAITMS(500)
END_IF
END_CYC
ELSE //если не нашло ни св1 ни ог
IF_PICTURE_IN ($xx-34,$yy+372,$xx+132,$yy+546, "св.bmp", -1, 90)
LOGWRITE ("моб подошел")
m_move($_return1+RND(-10,10), $_return2+RND(-10,10))
LCLICK($_xmouse,$_ymouse)
$tim1234 = $_time_t + 10
WHILE($tim1234 > $_time_t)
GETSCREEN ($xx+331,$yy+260, $xx+464,$yy+391) //(750,360, 883,491)
IF_PICTURE_IN ($xx+331,$yy+260, $xx+464,$yy+391, "напасть.bmp", -1, 70)
$tim1234 = 0
INC($_zlo,1)
m_move($_return1+RND(-10,10), $_return2+RND(-2,2))
LCLICK($_xmouse,$_ymouse)
WAITMS(rnd(3000,5000))
$hod_1=1
goto(hod)
ELSE
WAITMS(500)
END_IF
END_CYC
ELSE //если не нашло ни св ни ог ни св
IF_PICTURE_IN ($xx-34,$yy+372,$xx+132,$yy+546, "огв.bmp", -1, 90)
LOGWRITE ("моб подошел")
m_move($_return1+RND(-10,10), $_return2+RND(-10,10))
LCLICK($_xmouse,$_ymouse)
$tim1234 = $_time_t + 10
WHILE($tim1234 > $_time_t)
GETSCREEN ($xx+331,$yy+260, $xx+464,$yy+391) //(750,360, 883,491)
IF_PICTURE_IN ($xx+331,$yy+260, $xx+464,$yy+391, "напасть.bmp", -1, 70)
$tim1234 = 0
INC($_zlo,1)
m_move($_return1+RND(-10,10), $_return2+RND(-2,2))
LCLICK($_xmouse,$_ymouse)
WAITMS(rnd(3000,5000))
$hod_1=1
goto(hod)
ELSE
WAITMS(500)
END_IF
END_CYC
ELSE //если не нашло св ни ог ни св ни огв тогда ищем во второй области поиска другое
GETSCREEN ($xx-13,$yy+50, $xx+6,$yy+74)//другая область поиска
IF_PICTURE_IN ($xx-13,$yy+50, $xx+6,$yy+74, "19лвл.bmp", -1, 90)
LOGWRITE ("есть нужный")
GETSCREEN ($xx-18,$yy+531, $xx+106,$yy+563)
IF_PICTURE_IN ($xx-18,$yy+531, $xx+106,$yy+563, "таймер.bmp", -1, 80)
LOGWRITE ("таймер")
m_move($xx+632+RND(-10,10), $yy+245+RND(-10,10))
LCLICK($_xmouse,$_ymouse)
WAITMS(rnd(1700,1900))
WAITMS(10)
ELSE
прогон()
END_IF
ELSE //если нет 19лвл
IF_PICTURE_IN ($xx-13,$yy+50, $xx+6,$yy+74, "18лвл.bmp", -1, 90)
LOGWRITE ("есть нужный")
GETSCREEN ($xx-18,$yy+531, $xx+106,$yy+563)
IF_PICTURE_IN ($xx-18,$yy+531, $xx+106,$yy+563, "таймер.bmp", -1, 80)
LOGWRITE ("таймер")
m_move($xx+632+RND(-10,10), $yy+245+RND(-10,10))
LCLICK($_xmouse,$_ymouse)
WAITMS(rnd(1700,1900))
WAITMS(10)
ELSE
прогон()
END_IF
ELSE //если нет ни 19лвл ни 18лвл
IF_PICTURE_IN ($xx-13,$yy+50, $xx+6,$yy+74, "17лвл.bmp", -1, 90)
LOGWRITE ("есть нужный")
GETSCREEN ($xx-18,$yy+531, $xx+106,$yy+563)
IF_PICTURE_IN ($xx-18,$yy+531, $xx+106,$yy+563, "таймер.bmp", -1, 80)
LOGWRITE ("таймер")
m_move($xx+632+RND(-10,10), $yy+245+RND(-10,10))
LCLICK($_xmouse,$_ymouse)
WAITMS(rnd(1700,1900))
WAITMS(10)
ELSE
прогон()
END_IF
ELSE //если нет ни 19лвл ни 18лвл ни 17лвл
IF_PICTURE_IN ($xx-13,$yy+50, $xx+6,$yy+74, "16лвл.bmp", -1, 90)
LOGWRITE ("есть нужный")
GETSCREEN ($xx-18,$yy+531, $xx+106,$yy+563)
IF_PICTURE_IN ($xx-18,$yy+531, $xx+106,$yy+563, "таймер.bmp", -1, 80)
LOGWRITE ("таймер")
m_move($xx+632+RND(-10,10), $yy+245+RND(-10,10))
LCLICK($_xmouse,$_ymouse)
WAITMS(rnd(1700,1900))
WAITMS(10)
ELSE
прогон()
END_IF
ELSE //если нет ни 19лвл ни 18лвл ни 17лвл ни 16 лвл значит лвл нам не подходит и монстра нужного нет значит нада передвинуться дальше
LOGWRITE ("лвл не подошел")
m_move($xx+632+RND(-10,10), $yy+245+RND(-10,10))
LCLICK($_xmouse,$_ymouse) //передвигаемся
WAITMS(rnd(1700,1900))
goto(go) //возвращаемся искать по новому
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_SUB
-
А может быть просто вводить переменные-флаги, чтоб не приходилось лепить всё в кучу?
Т.е. продумываете, как делать поэтапно:
подпрограмма
0. $sub_found=0, $sub_lvl=0 (названия переменных сами придумаете, адекватные и точно не использовавшиеся нигде)
1. Цикл для поиска первых картинок. Если нашел, то $sub_found=1 и цикл завершаем
2. Если $sub_found=0, запуск цикла для поиска вторых картинок, нашли $sub_lvl=1 и цикл завершаем
3. Если $sub_found=1 - кусок с нападением (в ретёрнах лежат координаты для нападения)
4. Если $sub_lvl=1 (в ретёрнах лежат координаты для прогнать) - прогнать, а если нет - прокликать, чтоб сдвинулся.
5. конец подпрограммы.
А вот в основном коде программы уже сделать цикл, чтоб подпрограмма повторялась.
К слову, если есть возможность отказаться где-то от goto - откажитесь. В случае если код будет разрастаться, неизвестно какие проблемы в итоге появится. А "волевым решением выдавать подтяжки" - не очень правильно)
Не знаю, как насчет эстетики при появлении лишних переменных (на профессионалов мы с вами все равно не тянем)), но хотя бы легко будет отлаживать и находить баги: ставите в программе строчки в духе Print("этап _1_: $sub_found", $sub_found, ", $sub_lvl" ,$sub_lvl) - и всегда видите, что у скрипта получилось, а где надо править. И в итоге исправлять косяки и дописывать код легче будет. А т.к. подпрограмма будет зациклена в коде самой программы - менять настройки (сколько раз и через какое время пытаться нападать) будет легче.
-
Повторяющийся код нужно засунуть в подпрограммы. Но выпрыгивать из цикла и подпрограммы нельзя.
goto(hod) нужно написать после вызова лвл(). Если, конечно, вызов не написан тоже к каком то цикле...
SUB(моб_подошел)
LOGWRITE ("моб подошел")
m_move($_return1+RND(-10,10), $_return2+RND(-10,10))
LCLICK($_xmouse,$_ymouse)
$tim1234 = $_time_t + 10
WHILE($tim1234 > $_time_t)
GETSCREEN ($xx+331,$yy+260, $xx+464,$yy+391) //(750,360, 883,491)
IF_PICTURE_IN ($xx+331,$yy+260, $xx+464,$yy+391, "напасть.bmp", -1, 70)
$tim1234 = 0
INC($_zlo,1)
m_move($_return1+RND(-10,10), $_return2+RND(-2,2))
LCLICK($_xmouse,$_ymouse)
WAITMS(rnd(3000,5000))
$hod_1=1
ELSE
WAITMS(500)
END_IF
END_CYC
END_SUB
SUB(есть_нужный)
LOGWRITE ("есть нужный")
GETSCREEN ($xx-18,$yy+531, $xx+106,$yy+563)
IF_PICTURE_IN ($xx-18,$yy+531, $xx+106,$yy+563, "таймер.bmp", -1, 80)
LOGWRITE ("таймер")
m_move($xx+632+RND(-10,10), $yy+245+RND(-10,10))
LCLICK($_xmouse,$_ymouse)
WAITMS(rnd(1700,1900))
WAITMS(10)
ELSE
прогон()
END_IF
END_SUB
SUB(лвл)
go:
GETSCREEN($xx-34,$yy+372,$xx+132,$yy+546) //первая область поиска картинки
COLORMODE(7, $xx-34,$yy+372,$xx+132,$yy+546)
IF_PICTURE_IN ($xx-34,$yy+372,$xx+132,$yy+546, "св1.bmp", -1, 90)
моб_подошел()
ELSE //если не нашло св1
IF_PICTURE_IN ($xx-34,$yy+372,$xx+132,$yy+546, "ог.bmp", -1, 90)
моб_подошел()
ELSE //если не нашло ни св1 ни ог
IF_PICTURE_IN ($xx-34,$yy+372,$xx+132,$yy+546, "св.bmp", -1, 90)
моб_подошел()
ELSE //если не нашло ни св ни ог ни св
IF_PICTURE_IN ($xx-34,$yy+372,$xx+132,$yy+546, "огв.bmp", -1, 90)
моб_подошел()
ELSE //если не нашло св ни ог ни св ни огв тогда ищем во второй области поиска другое
GETSCREEN ($xx-13,$yy+50, $xx+6,$yy+74)//другая область поиска
IF_PICTURE_IN ($xx-13,$yy+50, $xx+6,$yy+74, "19лвл.bmp", -1, 90)
есть_нужный()
ELSE //если нет 19лвл
IF_PICTURE_IN ($xx-13,$yy+50, $xx+6,$yy+74, "18лвл.bmp", -1, 90)
есть_нужный()
ELSE //если нет ни 19лвл ни 18лвл
IF_PICTURE_IN ($xx-13,$yy+50, $xx+6,$yy+74, "17лвл.bmp", -1, 90)
есть_нужный()
ELSE //если нет ни 19лвл ни 18лвл ни 17лвл
IF_PICTURE_IN ($xx-13,$yy+50, $xx+6,$yy+74, "16лвл.bmp", -1, 90)
есть_нужный()
ELSE //если нет ни 19лвл ни 18лвл ни 17лвл ни 16 лвл значит лвл нам не подходит и монстра нужного нет значит нада передвинуться дальше
LOGWRITE ("лвл не подошел")
m_move($xx+632+RND(-10,10), $yy+245+RND(-10,10))
LCLICK($_xmouse,$_ymouse) //передвигаемся
WAITMS(rnd(1700,1900))
goto(go) //возвращаемся искать по новому
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_SUB
лвл()
IF($hod_1 = 1)
goto(hod)
END_IF