Автокликер Clickermann :: Форум
Основной раздел => Использование => Topic started by: Крис Тинка on December 04, 2013, 09:01:04 PM
-
Сделала примитивный скрипт для поиска "зеленых" зомбиков. Скрипт перелистывает ленту зомбиков, когда находит зомбика у которого можно копать, посещает его.
-
А зачем вот этот кусок повторяется 7 раз?
/////////
getscreen
IF_PICTURE_IN (10,10, $_xmax, $_ymax, "textures\kp3.bmp")
MOVE($_return1-106, $_return2+114)
WAITMS(300)
lclick($_return1-106, $_return2+114)
wait(1)
getscreen
IF_PICTURE_IN (10,10, $_xmax, $_ymax, "textures\kp4.bmp")
MOVE($_return1-106, $_return2+114)
WAITMS(300)
lclick($_return1-106, $_return2+114)
wait(1)
else
waitms(500)
end_if
halt
else
waitms(500)
end_if
/////////
-
А зачем вот этот кусок повторяется 7 раз?
Потому что я не знаю как по другому дождаться таблички "На моей территории зарыты сокровища" ))))
-
goto(label) моя любимая функция ))
nachalo: // ярлык для вовзрата в начало
getscreen
IF_PICTURE_IN (10,10, $_xmax, $_ymax, "textures\kp3.bmp")
MOVE($_return1-106, $_return2+114)
WAITMS(300)
lclick($_return1-106, $_return2+114)
wait(1)
goto(prodolzhenie) //картинка обнаружена идем к следующему действию
else
wait(1) // ждем секунду
goto(nachalo) // и проверяем снова
end_if
//следующее действие проверяется если выполненно предыдущее
prodolzhenie:
IF_PICTURE_IN (10,10, $_xmax, $_ymax, "textures\kp4.bmp")
MOVE($_return1-106, $_return2+114)
WAITMS(300)
lclick($_return1-106, $_return2+114)
wait(1)
else
waitms(500) // можно вставить возврат goto(nachalo) или goto(prodolzhenie)
end_if
/////////////////////
-
goto(label) моя любимая функция ))
Спасибо! Функция конечно знакомая, только я не додумалась так ее применить))) Я вообще не программист, пишу "по бумажке". Тогда новая версия скрипта будет такая:
getscreen
IF_PICTURE_IN (10,10, $_xmax, $_ymax, "textures\kp2.bmp")
$x1=$_return1+7
$y1=$_return2-50
else
halt
end_if
ss:
getscreen
IF_PIXEL_IN ($x1,$y1, $x1+503,$y1+133,1755195 )
MOVE($x1-5,$y1+88)
WAITMS(300)
LCLICK($x1-5,$y1+88)
MOVE($_return1, $_return2)
WAITMS(1000)
lclick($_return1, $_return2)
WAITMS(500)
MOVE($_return1+50, $_return2-50)
WAITMS(1000)
lclick($_return1+50, $_return2-50)
wait(1)
nachalo:
getscreen
IF_PICTURE_IN (10,10, $_xmax, $_ymax, "textures\kp3.bmp")
MOVE($_return1-106, $_return2+114)
WAITMS(300)
lclick($_return1-106, $_return2+114)
wait(1)
goto(prodolzhenie)
else
wait(1)
goto(nachalo)
end_if
prodolzhenie:
getsreen
IF_PICTURE_IN (10,10, $_xmax, $_ymax, "textures\kp4.bmp")
MOVE($_return1-106, $_return2+114)
WAITMS(300)
lclick($_return1-106, $_return2+114)
halt
else
halt
end_if
else
MOVE($x1+491,$y1+88)
WAITMS(50)
LCLICK($x1+491,$y1+88)
end_if
GOTO(ss)
P.S. А разве можно использовать goto ведущее за пределы цикла IF? Но в данном случае ошибок не возникло.
-
редактор простенький и визуально вложенность отображается не очень явно, поэтому использую goto() для изменения направления выполнения скрипта, и сходу видно куда заворачивается действие, советую попробывать уменьшить вложеность, распологая все последовательно и перепрыгивая ненужные участки скрипта.
зы. я даже заморачиваюсь зарисовкой алгоритма на бумажке, а потом отдельные участки отлаживаю и вписываю.
старенький скрипт в черновом варианте, но наглядно отображает мой стиль
//========================================START
#adaptive_scirpt
#logfile
//set work window
hset(hget(500,500),1)
logwrite(hget(500,500),-window id)
//variables for checks status
//define($mob,0)
//define($battle,0)
//define($hp,0)
//define($deadmob,0)
//define($button,0)
//kors for searching mobs
define($xkor,560)
define($ykor,310)
define($ykor_second,320)
define($xkor_min,560) //==xkor
define($xkor_max,650)
//vars for check battle
//define($battle_x,179)
//define($battle_y,395)
//define($battle_color,9229311)
//vars for button
///define($button_x,752)
//define($button_y,462)
//define($button_color,2176074)
//define($atk_x,681)
//define($atk_y,460)
//vars for deadmob
//define($deadmob_x,1051)
//define($deadmob_y,76)
//define($deadmob_color,5946095)
//vars for HP
//define($hp_x,279)
//define($hp_y,88)
//define($hp_color,255)
//vars for search exit_battle
//define($pic_x1,680)
//define($pic_x2,796)
//define($pic_y1,322)
//define($pic_y2,592)
//counter dead mobs
define($counter,0)
//
//============================INFO_ABOUT_LABELS
//
// battle -check starting battle
// button -check attack button
// deadmob -check dead mob
// mobsearch -start/resume mob searching
// mobsearch1 -resume searching mobs after
// restore xkor
// start_fight -start battle after
// all checking
// exit_battle -search exit button
//
//===================================ALL_CHECKS
//
//check hp
hp:
getscreen
IF(pxl(286,92)=255)
logwrite("loop#",$counter," ","full_hp")
goto(loop)
else
wait(1)
goto(battle)
end_if
//looping
loop:
if($new_loop=1)
goto(mobsearch)
else
goto(mobsearch_loop)
end_if
//check battle
battle:
getscreen
if(pxl(66,294)=1067288)
goto(check_heal)
end_if
//screenshot("check_battle") for debug
goto(hp)
//check_heal
check_heal:
WAIT(2)
if($eliks=2 | $eliks>2)
goto(button)
end_if
if(pxl(122,303)>600000)
logwrite("loop#",$counter," ","need heal")
LCLICK(300, 510)
inc($eliks)
goto(button)
end_if
//elik
//heal:
//getscreen
//if_picture_in (211, 378, 425, 736, "elik.bmp", -1, 70)
// lcklick(291, 490)
// logwrite("heeeeal")
// goto(button)
//else
// logwrite("elik not found")
// colormode(7,211,378,425,736)
// screenshot
//end_if
//check attack_button
button:
WAIT(1)
getscreen
colormode(7,458,442,822,479)
if_picture_in (458,442,822,479,"fight_button.bmp")
lclick($_return1-160, $_return2+5)
goto(start_fight)
end_if
//screenshot("check_attack") for debug
goto(deadmob)
//check mob die or not
deadmob:
wait(1)
getscreen
if(pxl($deadmob_x,$deadmob_y)=$deadmob_color)
goto(exit_battle)
else
goto(battle)
end_if
//======================================ACTIONS
//start search mobs
mobsearch:
logwrite("loop#",$counter," ","searching mobs...")
Inc($counter,1)
logwrite(""loop#"",$counter)
//for looping return
mobsearch_loop:
$new_loop=0
waitms(100)
$xkor=450
for ($xkor, $xkor<670)
inc($xkor,5)
waitms(50)
dblclick($xkor, 350)
dblclick($xkor, 360)
end_cyc
goto(battle)
//starting battle
start_fight:
waitms(500)
logwrite("loop#",$counter," ","attack")
goto(battle)
//search exit_button
exit_battle:
getscreen
colormode(7,400,300,800,900)
if_picture_in (500,200,800,900,"exit_button.bmp")
lclick($_return1+5, $_return2+5)
logwrite("loop#",$counter," ","exit battle")
wait(2)
$eliks=0
$new_loop=1
end_if
goto(battle)
halt
-
goto(prodolzhenie) и prodolzhenie: тут лишнее.
-
старенький скрипт в черновом варианте, но наглядно отображает мой стиль
Даа в таком стиле только автор и разберется, GOTO в таком количестве явное зло :D
-
goto(prodolzhenie) и prodolzhenie: тут лишнее.
Почему лишние? Ведь в prodolzhenie идет поиск другой текстуры.
-
P.S. А разве можно использовать goto ведущее за пределы цикла IF? Но в данном случае ошибок не возникло.
Можно конечно. Как указано в справке, нельзя выпрыгивать по GOTO из циклов и субпрограмм. Хотя возможно ошибки и не возникнет но Джонни то виднее наверно...
-
может быть для меня гораздо хуже огромную вложеность читать, мой код можно разбавить вставками include и тогда он станет очень легко читаем, и не таким громоздким.
по поводу лишних goto(prodolzhenie) prodolzhenie: это что бы скрипт не поломать если вдруг чегото допишешь, так сказать подстраховка.
-
goto(prodolzhenie) и prodolzhenie: тут лишнее.
Почему лишние? Ведь в prodolzhenie идет поиск другой текстуры.
Выполнение и так туда пойдет. Прежде всего нужно видеть логику а с гото это становится сложнее.
-
может быть для меня гораздо хуже огромную вложеность читать, мой код можно разбавить вставками include и тогда он станет очень легко читаем, и не таким громоздким.
по поводу лишних goto(prodolzhenie) prodolzhenie: это что бы скрипт не поломать если вдруг чегото допишешь, так сказать подстраховка.
Ты не представляешь как твои GOTO а тем более include запутывают скрипт. Мало того что выполнение скачет во всех немыслимых направлениях, так еще и скрипт раздроблен на куски.
-
Выполнение и так туда пойдет. Прежде всего нужно видеть логику а с гото это становится сложнее.
ДА, все верно. Лишнее)))
-
Цикл конечно правильнее организовывать через WHILE.
$check = 0
WHILE($check = 0)
getscreen
IF_PICTURE_IN (10,10, $_xmax, $_ymax, "textures\kp3.bmp")
$check = 1
MOVE($_return1-106, $_return2+114)
WAITMS(300)
lclick($_return1-106, $_return2+114)
wait(1)
else
wait(1)
end_if
END_CYC
Но что если искомый фрагмент мы так и не дождемся? Нужно прикрутить таймер который завершит цикл.
ss:
///
///
$check = 0
$time = $_time_t + 30 // таймер на 30 сек
WHILE(($check = 0) & ($time > $_time_t))
getscreen
IF_PICTURE_IN (10,10, $_xmax, $_ymax, "textures\kp3.bmp")
$check = 1
MOVE($_return1-106, $_return2+114)
WAITMS(300)
lclick($_return1-106, $_return2+114)
wait(1)
else
wait(1)
end_if
END_CYC
IF($check = 0) // возврат в начало при неудачном поиске
GOTO(ss)
END_IF
///
///
-
И еще совет, если выкладываешь скрипт то создавай новую тему, и всю инфу пиши в первом посте. Правь его если потребуется.