Доброго времени суток всем.
Есть такой вот скриптик:
#MAG
thread(rage,0)
waitms(800)
getscreen
colormode(5,120,61,179,79)
if_pixel_in(120,61,179,79,4161343)
SETTHREAD (bot, 1)
waitms(200)
SETTHREAD (rage, 0)
else
getscreen
if_pixel_in(1023,88,1024,88,1124919)
wait(1)
keypress(#7)
waitms(200)
keydown(#alt)
keypress(#8)
keyup(#alt)
waitms(2000)
keypress(#9)
waitms(300)
keypress(#F)
wait(10)
else
keypress(#0)
waitms(50)
keypress(#3)
end_if
end_if
END_THREAD
THREAD(low, 0)
waitms(500)
getscreen
colormode(5,5,128,38,226)
if_pixel_in(5,128,38,226,2039679)
SETTHREAD (bot, 0)
waitms(200)
SETTHREAD (rage, 1)
waitms(200)
SETTHREAD (low, 0)
end_if
waitms(500)
getscreen
colormode(5,130,61,179,79)
if_pixel_in(130,61,179,79,4161343)
SETTHREAD (low, 0)
end_if
END_THREAD
THREAD(bot, 1)
wait(1)
$time=0
$time2=0
$time3=0
start:
GETSCREEN //áàô
IF_PICTURE_IN (10,91,310,126,"buf.bmp",1,80)
else
IF (($_time_t-$time)>45)
KEYPRESS(#9)
$time=$_time_t
wait(2)
end_if
end_if
GETSCREEN //áàô
IF_PICTURE_IN (10,91,310,126,"buf2.bmp",1,85)
else
KEYPRESS(#6)
wait(2)
end_if
GETSCREEN //áàô
IF_PICTURE_IN (10,91,310,126,"buf3.bmp",1,80)
else
keydown(#alt)
KEYPRESS(#N)
keyup(#alt)
wait(1)
end_if
GETSCREEN // ìàíà ðåãåí
IF_PIXEL_IN (60,89,67,89,1124919)
wait(1)
goto(check)
end_if
GETSCREEN // hp ðåãåí
IF_PIXEL_IN (260,66,266,66,1124919)
IF (($_time_t-$time3)>10)
KEYPRESS(#7)
$time3=$_time_t
waitms(500)
end_if
waitms(500)
keydown(#alt)
keypress(#8)
keyup(#alt)
waitms(2000)
goto(check)
end_if
GETSCREEN // hp ðåãåí
IF_PIXEL_IN (260,66,266,66,1124919)
wait(1)
goto(check)
end_if
turn:
waitms(200)
GETSCREEN
IF_PIXEL_IN (877,66,887,67,1908102)
keyup(#a)
waitms(2000)
else
KEYDOWN(#a)
waitms(200)
KEYPRESS(#4)
goto(turn)
end_if
agr:
KEYPRESS(#2)
waitms(rnd(200,300))
KEYPRESS(#3)
waitms(rnd(1200,1400))
KEYPRESS(#3)
waitms(rnd(200,400))
KEYPRESS(#3)
waitms(rnd(200,400))
fight:
waitms(100)
GETSCREEN
IF_PIXEL_IN (127,67,128,67,1124919)
SETTHREAD (low, 1)
end_if
waitms(100)
GETSCREEN
IF_PIXEL_IN (845,87,849,87,12274992)
waitms(100)
GETSCREEN
IF_PIXEL_IN (845,66,847,67,1908102)
KEYPRESS(#3)
waitms(rnd(100,200))
GETSCREEN
IF_PIXEL_IN (190,67,192,67,1124919)
IF (($_time_t-$time2)>36)
waitms(rnd(400,500))
KEYPRESS(#5)
waitms(900)
KEYPRESS(#B)
$time2=$_time_t
end_if
END_IF
else
KEYPRESS(#1)
waitms(500)
KEYPRESS(70)
END_IF
goto(fight)
END_IF
waitms(rnd(400,600))
KEYPRESS(70)
goto(start)
check:
GETSCREEN
IF_PIXEL_IN (845,87,849,87,12274992)
KEYPRESS(#0)
waitms(rnd(100,200))
KEYPRESS(#2)
waitms(rnd(100,200))
goto(fight)
END_IF
goto(start)
END_THREAD
Все работает вроде. Но проблема в том, что изначально он состоял из 10 строчек, а по мере роста так скажем моих навыков и желаний подрос до такого вот состояния. Теперь при воспроизведении скрипта идут подлагивания, учитывая, что он работает на виртуалке VMware. Можно ли его как-то оптимизировать?
Еще один момент. Выше изложенный скрипт представляет собой бота, стоящего на месте. Крутится вокруг себя и убивает всех в радиусе действия скилов. Изначально было желание накатать бота, который сможет двигаться, но моих способностей для этого не хватало. Пошерстив форум, решил реализовать это через выбор цели, и как только цель выбрана, искать так сказать ее след через:
if ($count=0)
getscreen
colormode(6,10,130,1800,920)
if_picture_in(10,130,1800,920,"6.bmp",1,100)
waitms(200)
waitms(50)
dblclick($_return1+10,$_return2+180)
waitms(50)
dblclick($_return1+10,$_return2+180)
$count=1
$time4=$_time_t
goto(agr)
else
move(950,450)
rdown(950,300)
waitms(200)
rup(950,300)
goto(agr)
end_if
Вроде находит и даже бежит к цели. Но периодически возникает проблема в том, что цель взятая в таргет, находится за пределами экрана или просто ее не находит. В таком случае приходся, почти как во всех играх, зажимать правую кнопку мыши и осматриваться вокруг( верх,низ,лево,право), пока цель не найдется. Может кто посоветовать, как реализовать в скрипте это осматривание?
И еще один вопросик насчет if_picture_in, можно ли осуществлять поиск двух файлов?
Пока использую такой способ:
GETSCREEN
IF_picture_IN (840,43,854,57,"mob1.bmp",1,10)
keypress(#4)
wait(2)
else
IF_picture_IN (840,43,854,57,"mob2.bmp",1,10)
keypress(#4)
wait(2)
else
KEYDOWN(#Left)
waitms(rnd(400,600))
KEYUP(#Left)
goto(start)
end_if
end_if
Извиняюсь за множество букв