Автокликер Clickermann :: Форум
Основной раздел => Использование => Topic started by: Vladinbox on August 28, 2015, 05:13:52 PM
-
Написал бота для сбора коробочек(корабль и пет +ремонт,управление петом,возврат на нужную карту)
Есть бот на сбор палика( аналогичный первому только еще сейчас планирую заставить продавать палик)
Ну а суть в том, что я хочу написать полноценного бота который мог бы "крутить" мобов и собирать коробки и многое другое, сам я его могу написать, но если будет еще кто будет быстрее)
Пишу скрипты используя модули(потоки). Выкладываю часть кода, может кто нибудь откликнеться на мой зов и мы напишем умного бота)
Если что гетскрин один на весь скрипт, позволяет не нагружать комп)
//=============================================
// êîíòðîëü ïåòà
THREAD(thr_pet)
wait(10)
IF_PICTURE_IN (1144,104, $_xmax,$_ymax, "remontpeta.bmp", -1, 100)
LCLICK($_return1, $_return2)
LOGWRITE ("Ðåìîíò ïåòà")
WAITMS(100)
END_IF
WAITMS(100)
IF_PICTURE_IN (1144,104, $_xmax,$_ymax, "petgo.bmp", -1, 100)
LCLICK($_return1, $_return2)
LOGWRITE ("Çàïóñê ïåòà")
WAITMS(100)
END_IF
IF_PICTURE_IN (1144,104, $_xmax,$_ymax, "ple1.bmp", -1, 100)
LCLICK($_return1, $_return2)
WAITMS(100)
END_IF
IF_PICTURE_IN (1144,104, $_xmax,$_ymax, "petsbor.bmp", -1, 100)
LCLICK($_return1, $_return2)
WAITMS(100)
END_IF
END_THREAD
//=============================================
// Ñîåäèíåíèå
THREAD(thr_connect)
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "connect.bmp", -1, 100)
LCLICK($_return1+10, $_return2+10)
LOGWRITE ("Äèñêîíåêò")
WAITMS(100)
setThread(thr1,0)
WAITMS(50)
setThread(thr2,0)
setThread(thr_pet,0)
setThread(thr_proveka,0)
setThread(tp42,0)
WAIT(5)
setThread(thr1,1)
WAITMS(50)
setThread(thr2,1)
setThread(thr_pet,1)
setThread(thr_connect,1)
setThread(thr_proveka1,1)
setThread(tp42,1)
END_IF
wait(12)
END_THREAD
-
Так как никто не откликнулся на мой зов, начал писать сам. И решил начать с установки правильного интерфейса(чтоб в дальнейшем уменьшить зоны поиска необходимых данных). Сначала пробовал использовать switch. Пока было одно действие в свитче, код работал именно так как нужно, но когда появилось второе действие, то начинало заедать и вставать намертво. Я решил прибегнуть к своим любимым потокам. Но тут появилась проблема. Тело потока выполняется не последовательно, либо вообще начинает беспрерывно прогоняться. Это код уже измученный и перерезанный в попытках понять в чем дело, я так же пытался делать через управление потоками, пример: если картинка не найдена -> запуск потока, который в конце сам себя выключает. даже при таком раскладе ничего не работает.
И сразу тут спрошу, можно ли сделать область поиска с пустым центром?
if_picture_in(1200, 133, 1247, 166, "корабль.bmp")
else
KEYDOWN(#H)
WAITMS(60)
KEYUP(#H)
//=============================================
//Размещение корабля
GETSCREEN
if_picture_in(0, 90, 90, 150, "корабль.bmp")
LCLICK($_return1, $_return2)
WAITMS(800)
GETSCREEN
IF_PICTURE_IN (400,100, $_xmax,$_ymax, "корабль.bmp", -1, 100)
LDOWN($_return1+40, $_return2)
WAITMS(50)
MOVE(1244,151)
WAITMS(50)
LUP(1244,151)
WAITMS(50)
WAIT(1)
END_IF
END_IF
//=============================================
//Размещение миникарты
GETSCREEN
if_picture_in(0, 90, 510, 150, "миникарта.bmp")
LCLICK($_return1, $_return2)
WAITMS(800)
GETSCREEN
IF_PICTURE_IN (400,100, $_xmax,$_ymax, "миникарта.bmp", -1, 100)
LDOWN($_return1+40, $_return2)
WAITMS(50)
MOVE(1262,695)
WAITMS(50)
LUP(1262,695)
WAITMS(50)
END_IF
END_IF
//=============================================
//Размещение пета
WAIT(2)
GETSCREEN
if_picture_in(0, 90, 510, 150, "ПЕТ.bmp")
LCLICK($_return1, $_return2)
WAITMS(800)
GETSCREEN
IF_PICTURE_IN (400,100, $_xmax,$_ymax, "ПЕТ.bmp", -1, 100)
LDOWN($_return1+40, $_return2)
WAITMS(50)
MOVE(1260,261)
WAITMS(50)
LUP(1260,261)
WAITMS(50)
END_IF
END_IF
//=============================================
//Поправка состояния коробля
WAIT(1)
GETSCREEN
IF_PIXEL_IN(1229,183, 1230,186, 9363348)
else
LCLICK(1229,183)
WAITMS(100)
END_IF
GETSCREEN
IF_PIXEL_IN(1229,200, 1230,202, 14868122)
else
LCLICK(1229,200)
WAITMS(100)
END_IF
-
Когда копируешь текст раскладки в кликере и в браузере сделай Ru, тогда не будет проблем с кодировкой.
У тебя ошибка в условии, нет GETSCREEN, нет завершения END_IF
if_picture_in(1200, 133, 1247, 166, "корабль.bmp")
else
GETSCREEN
if_picture_in(1200, 133, 1247, 166, "корабль.bmp")
WAITMS(50)
else
KEYDOWN(#H)
WAITMS(60)
KEYUP(#H)
//=============================================
//Размещение корабля
GETSCREEN
if_picture_in(0, 90, 90, 150, "корабль.bmp")
LCLICK($_return1, $_return2)
WAITMS(800)
GETSCREEN
IF_PICTURE_IN (400,100, $_xmax,$_ymax, "корабль.bmp", -1, 100)
LDOWN($_return1+40, $_return2)
WAITMS(50)
MOVE(1244,151)
WAITMS(50)
LUP(1244,151)
WAITMS(50)
WAIT(1)
END_IF
END_IF
//=============================================
//Размещение миникарты
GETSCREEN
if_picture_in(0, 90, 510, 150, "миникарта.bmp")
LCLICK($_return1, $_return2)
WAITMS(800)
GETSCREEN
IF_PICTURE_IN (400,100, $_xmax,$_ymax, "миникарта.bmp", -1, 100)
LDOWN($_return1+40, $_return2)
WAITMS(50)
MOVE(1262,695)
WAITMS(50)
LUP(1262,695)
WAITMS(50)
END_IF
END_IF
//=============================================
//Размещение пета
WAIT(2)
GETSCREEN
if_picture_in(0, 90, 510, 150, "ПЕТ.bmp")
LCLICK($_return1, $_return2)
WAITMS(800)
GETSCREEN
IF_PICTURE_IN (400,100, $_xmax,$_ymax, "ПЕТ.bmp", -1, 100)
LDOWN($_return1+40, $_return2)
WAITMS(50)
MOVE(1260,261)
WAITMS(50)
LUP(1260,261)
WAITMS(50)
END_IF
END_IF
//=============================================
//Поправка состояния коробля
WAIT(1)
GETSCREEN
IF_PIXEL_IN(1229,183, 1230,186, 9363348)
else
LCLICK(1229,183)
WAITMS(100)
END_IF
GETSCREEN
IF_PIXEL_IN(1229,200, 1230,202, 14868122)
else
LCLICK(1229,200)
WAITMS(100)
END_IF
END_IF
И сразу тут спрошу, можно ли сделать область поиска с пустым центром?
Нужно написать еще одно условие которое проверит диапазон координат.
//649,457 || зона игнорирования
//814,579
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)
IF((($_return1 > -1)&($_return1 < 649))|(($_return1 > 814)&($_return1 < $_xmax))|(($_return2 > -1)&($_return2 < 457))|(($_return2 > 579)&($_return2 < $_ymax)))
LCLICK($_return1, $_return2)
WAITMS(100)
END_IF
END_IF
Или еще проще, сделаем цветокоррекцию в этой области которая испортит цвета
GETSCREEN
COLORMODE(8, 649,457, 814,579)
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)
LCLICK($_return1, $_return2)
WAITMS(100)
END_IF
-
Ночью облазил форум и решил попробовать сабами реализовывать. Суть кода в том что есть постоянная проверка которая должна проверять достаточно большое количество информации. Для ускорения кода я хочу сделать первоочередные проверки и второстепенные
примерно такого типа: Есть счетчик допустим 0 + 1 до 10, который в конце обнуляется и для снятия нагрузки с процессора можно сделать проверку в определенные тики. Как написать я знаю, тут больше вопрос как лучше осуществить контроль сразу за большим количеством информации, для обеспечения быстродействия. Мне самому не так уж это важно, у меня 12 гигов оперативы и проц не слабый. но хочеться чтоб и на других работало нормально.
Вот часть кода который был написан за ночь, протестирован и признан годным(сабы естсественно не прилагаю,т.к. они рабочие, а тут водиться большое количество мелких воришек, которые не хотят думать своей головой).
$tik = 0
WHILE($var < 5)// просто чтоб зациклить
GETSCREEN
if_picture_in(1200, 133, 1247, 166, "корабль.bmp") // второстепенная задача следящая чтоб интерфейс был на месте
else
HINTPOPUP("Поправляю интер", "Косяк")
KEYDOWN(#H)
WAITMS(60)
KEYUP(#H)
WAIT(5)
inter() // саб который поправляет
end_if
GETSCREEN
IF_PICTURE_IN (1161,350, 1219, 390, "петработает.bmp", -1, 100) // второстепенная задача
else
HINTPOPUP("Что то с петом", "Ахтунг")
pet()
WAIT(5)
END_IF
WAIT(1)
GETSCREEN
IF_PICTURE_IN (1220,570, 1265,600, "421.bmp", -1, 100) // второстепенная задача ( код большой, в саб не подходит(длительный процесс который может наступить, а может и не наступить))
HINTPOPUP (" Пора собирать коробки")
SETTHREAD (thr1, 1)
SETTHREAD (thr2, 1)
WAIT(60)
else
SETTHREAD (thr1, 0)
SETTHREAD (thr2, 0)
WAITMS(100)
END_IF
$tik = $tik + 1
HINTPOPUP ( $tik) // это сделал пока что для себя, чтоб смотреть что происходит)
END_CYC
Оравен, спасибо за зону игнорирования, правда еще не успел опробовать. Раз есть такой код то изложу более конкретно, на экране есть занятая центральная часть (там находиться корабль) нужно чтоб поиск "коробочек" происходил от центра, я хотел решить эту проблему путем сканирования центральной области экрана, и если 0 только переход к сканированию всего экрана, но уже без центральной части. Форум перерыл, но ничего подходящего не нашел.
П.С. Может все таки у кого нибудь есть желание присоединиться?)
-
Я писал уже скрипт для сбора коробок. И там встроен анализ из центральной части.
(http://s7.hostingkartinok.com/uploads/thumbs/2015/09/6a53452acebe15c0b7c96e2f77cfb738.png) (http://hostingkartinok.com/show-image.php?id=6a53452acebe15c0b7c96e2f77cfb738)
#name "DarkOrbit v1.1"
//=== НАстройки ===============================
// область поиска
$x_1 = 2
$y_1 = 144
$x_2 = 1597
$y_2 = 1074
// область мини карты
$x_mini_1 = 1379
$y_mini_1 = 944
$x_mini_2 = 1527
$y_mini_2 = 1081
//=============================================
$cent_x=int(($x_2-$x_1)/2)
$cent_y=int(($y_2-$y_1)/2)
start:
$rx = RND($x_mini_1,$x_mini_2)
$ry = RND($y_mini_1,$y_mini_2)
LCLICK($rx,$ry) // рандомный клик по миникарте
$check = 0
$check_out = 0
WHILE($check_out = 0)
GETSCREEN($x_1,$y_1, $x_2+1,$y_2+1)
COLORMODE(6,$x_1,$y_1, $x_2,$y_2)
IF_PIXEL_IN($x_1,$y_1, $x_2,$y_2, 4177919)
$x=0
$y=0
SCANPXL($arr,$x_1,$y_1, $x_2,$y_2,4177919)
FOR($a=0,$a<ARRSIZE($arr),2)
IF(DIST($arr[$a],$arr[$a+1],$cent_x,$cent_y)<DIST($x,$y,$cent_x,$cent_y))
$x=$arr[$a]
$y=$arr[$a+1]
END_IF
END_CYC
UNDEFINE($arr)
LCLICK($x,$y)
WAITMS(RND(800,900))
$check = 1
ELSE
IF($check = 1)
$check_out = 1
END_IF
IF((PXL($rx-10,$ry) = 8355711)&(PXL($rx,$ry-10) = 8355711))
$check_out = 1
END_IF
WAITMS(25)
END_IF
END_CYC
WAITMS(200)
GOTO(start)
Вот вычлененный код
// область поиска
$x_1 = 2
$y_1 = 144
$x_2 = 1597
$y_2 = 1074
$cent_x=int(($x_2-$x_1)/2) // центральная точка области поиска
$cent_y=int(($y_2-$y_1)/2)
//=============================================
$x=0
$y=0
GETSCREEN($x_1,$y_1, $x_2,$y_2)
COLORMODE(6,$x_1,$y_1, $x_2,$y_2)
SCANPXL($arr,$x_1,$y_1, $x_2,$y_2,4177919)
FOR($a=0,$a<ARRSIZE($arr),2)
IF(DIST($arr[$a],$arr[$a+1],$cent_x,$cent_y)<DIST($x,$y,$cent_x,$cent_y)) // расчет ближайшей к центру координаты
$x=$arr[$a]
$y=$arr[$a+1]
END_IF
END_CYC
IF(ARRSIZE($arr) > 0)
LCLICK($x,$y)
WAITMS(800)
END_IF
UNDEFINE($arr)
-
Извиняюсь, значит недостаточно хорошо облазил, спасибо. А насчет быстродействия какой нибудь совет? Или я иду в правильном направлении?)
-
Извиняюсь, значит недостаточно хорошо облазил, спасибо. А насчет быстродействия какой нибудь совет? Или я иду в правильном направлении?)
В основном процессор напрягает слишком частые вызовы GETSCREEN и отсутствие задержек. Всего 50 мс между снимками очень сильно разгрузят процессор. Также зону снимка можно ограничить.
GETSCREEN (1200, 133, 1247, 166)
if_picture_in(1200, 133, 1247, 166, "корабль.bmp")
-
За этот день довольно неплохо продвинулся. Настроил систему "тиков" которая позволяет определить первостепенные и второстепенные задачи, а так же избавляет от одновременного выполнения нескольких действий. Эти "тики" на данный момент вмещают в себя до 10 проверок. Но так как это лишь проверки, а нужно делать еще много подпрограмм и совсем не хочется увеличивать время полной проверки, то скорей всего придется вводить поток в котором будут свои "Тики" для других задач.
//=============================================
//Мониторинг
$tik = 0
WHILE($var < 5)
$tik = $tik + 1
HINTPOPUP( $tik )
//=============================================
//Проверка корабля
IF($tik = 1)
GETSCREEN
if_picture_in(1200, 133, 1247, 166, "корабль.bmp")
else
HINTPOPUP("Не видно прочку")
SETTHREAD (thr1, 0)
SETTHREAD (thr2, 0)
KEYDOWN(#H)
WAITMS(60)
KEYUP(#H)
WAIT(5)
inter()
end_if
end_if
WAITMS(50)
//=============================================
//Проверка карты
IF($tik = 2)
GETSCREEN
if_picture_in(1200, 535, 1247, 570, "миникарта.bmp")
else
HINTPOPUP("Не видно карту")
SETTHREAD (thr1, 0)
SETTHREAD (thr2, 0)
KEYDOWN(#H)
WAITMS(60)
KEYUP(#H)
WAIT(5)
inter()
end_if
end_if
WAITMS(50)
//=============================================
//Проверка пета
GETSCREEN
IF($tik = 3)
IF_PICTURE_IN (1161,350, 1219, 390, "петработает.bmp", -1, 100)
else
HINTPOPUP("Активирую пета")
pet()
WAIT(5)
END_IF
end_if
WAITMS(50)
END_IF
END_IF
//=============================================
//Проверка сбора 4-2
IF($tik = 4)
GETSCREEN
IF_PICTURE_IN (1220,570, 1265,600, "421.bmp", -1, 100)
HINTPOPUP (" Карта 4-2. Сбор коробок")
SETTHREAD (thr1, 1)
SETTHREAD (thr2, 1)
WAIT(1)
else
SETTHREAD (thr1, 0)
SETTHREAD (thr2, 0)
WAITMS(100)
END_IF
END_IF
WAITMS(50)
//=============================================
IF($tik = 5)
GETSCREEN
IF_PIXEL_IN (300,200, 1000,700, 9755391,6199541,16449533,15727869,16252415 )
HINTPOPUP (" Опа, коробочка")
SETTHREAD (thr1, 1)
WAIT(1)
WAITMS(100)
END_IF
END_IF
WAITMS(50)
//=============================================
//прием группы
IF($tik = 7)
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "принятьгруппу.bmp", -1, 100)
LCLICK($_return1, $_return2)
WAITMS(100)
END_IF
END_IF
END_IF
WAITMS(50)
IF($tik = 10)
$tik = 0
END_IF
END_CYC
Теперь надо придумать то, как научить бота убивать врагов. Сложностей там достаточно много, так как все враги имеют различное время убийства и самое что важное, в конце они просто убегают. Если враг один то особых проблем нету, но когда появляются несколько то атака просто перейдет на новую жертву не добив предыдущего.
-
Ошибка, лишние END_IF
//=============================================
//Мониторинг
$tik = 0
WHILE($var < 5)
INC($tik,1)
HINTPOPUP( $tik )
//=============================================
//Проверка корабля
IF($tik = 1)
GETSCREEN
if_picture_in(1200, 133, 1247, 166, "корабль.bmp")
else
HINTPOPUP("Не видно прочку")
SETTHREAD (thr1, 0)
SETTHREAD (thr2, 0)
KEYDOWN(#H)
WAITMS(60)
KEYUP(#H)
WAIT(5)
inter()
end_if
end_if
WAITMS(50)
//=============================================
//Проверка карты
IF($tik = 2)
GETSCREEN
if_picture_in(1200, 535, 1247, 570, "миникарта.bmp")
else
HINTPOPUP("Не видно карту")
SETTHREAD (thr1, 0)
SETTHREAD (thr2, 0)
KEYDOWN(#H)
WAITMS(60)
KEYUP(#H)
WAIT(5)
inter()
end_if
end_if
WAITMS(50)
//=============================================
//Проверка пета
IF($tik = 3)
GETSCREEN
IF_PICTURE_IN (1161,350, 1219, 390, "петработает.bmp", -1, 100)
else
HINTPOPUP("Активирую пета")
pet()
WAIT(5)
END_IF
end_if
WAITMS(50)
//=============================================
//Проверка сбора 4-2
IF($tik = 4)
GETSCREEN
IF_PICTURE_IN (1220,570, 1265,600, "421.bmp", -1, 100)
HINTPOPUP (" Карта 4-2. Сбор коробок")
SETTHREAD (thr1, 1)
SETTHREAD (thr2, 1)
WAIT(1)
else
SETTHREAD (thr1, 0)
SETTHREAD (thr2, 0)
WAITMS(100)
END_IF
END_IF
WAITMS(50)
//=============================================
IF($tik = 5)
GETSCREEN
IF_PIXEL_IN (300,200, 1000,700, 9755391,6199541,16449533,15727869,16252415)
HINTPOPUP ("Опа, коробочка")
SETTHREAD (thr1, 1)
WAIT(1)
WAITMS(100)
END_IF
END_IF
WAITMS(50)
//=============================================
//прием группы
IF($tik = 7)
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "принятьгруппу.bmp", -1, 100)
LCLICK($_return1, $_return2)
WAITMS(100)
END_IF
END_IF
WAITMS(50)
IF($tik = 10)
$tik = 0
END_IF
END_CYC
-
Долго мучался, пробовал разные подходы и в итоге понял что лучший вариант это сабы.
Скрипт выкладываю не для поиска ошибок, а просто чтоб люди посмотрели, может сами возьмут как пример и напишут чего дельного.
#include "sub.cms"
//=============================================
//Мониторинг
$tik = 0 //первостепенные задачи
$takt = 0 //думал расширить в дальнейшем
HINTPOPUP( "Начинаем")
WHILE($var < 5)
IF(ISKEYDOWN(#PageDown)=1)
HINTPOPUP("Стоп") //пришлось так сделать, потому что в один прекрасный момент скрипт перестал останавливаться пока не закроешь через диспетчер
HALT
END_IF
$takt = $takt + 1
$tik = $tik + 1
HINTPOPUP( $tik )
//=============================================
//Проверка соединения
IF($tik = 1)
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "connect.bmp", -1, 100)
connect()
end_if
end_if
//=============================================
//Проверка корабля
IF($tik = 3)
GETSCREEN
if_picture_in(1200, 133, 1247, 166, "корабль.bmp")
else
HINTPOPUP("Поправляю интер", "Косяк")
SETTHREAD (thr1, 0)
SETTHREAD (thr2, 0)
KEYDOWN(#H)
WAITMS(60)
KEYUP(#H)
WAIT(5)
inter()
end_if
end_if
WAITMS(50)
//=============================================
//Проверка карты
IF($tik = 4)
GETSCREEN
if_picture_in(1200, 535, 1247, 570, "миникарта.bmp")
else
HINTPOPUP("Поправляю интер", "Косяк")
SETTHREAD (thr1, 0)
SETTHREAD (thr2, 0)
KEYDOWN(#H)
WAITMS(60)
KEYUP(#H)
WAIT(5)
inter()
end_if
end_if
WAITMS(50)
//=============================================
//Проверка пета
GETSCREEN
IF($tik = 5)
IF_PICTURE_IN (1161,350, 1219, 390, "петработает.bmp", -1, 100)
else
HINTPOPUP("Что то с петом", "Ахтунг")
SETTHREAD (thr1, 0)
SETTHREAD (thr2, 0)
pet()
WAIT(5)
END_IF
end_if
WAITMS(50)
END_IF
END_IF
//===================================
IF($tik = 7)
$hp = PXLCOUNT(1281,177, 1291,184, 9363348)
IF($hp < 8)
HINTPOPUP("Мало хп")
SETTHREAD (thr1, 0)
SETTHREAD (thr2, 0)
portbeg()
else
IF_PICTURE_IN (1200,150, 1300,250, "конфа2.bmp", -1, 100)
LCLICK($_return1, $_return2)
WAITMS(100)
END_IF
SETTHREAD (thr1, 1)
SETTHREAD (thr2, 1)
END_IF
$shit = PXLCOUNT(1281,197, 1291,204, 14670478)
IF($shit < 7)
KEYDOWN(#c)
WAITMS(60)
KEYUP(#c)
END_IF
end_if
//=============================================
//прием группы
IF($tik = 8)
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "принятьгруппу.bmp", -1, 100)
LCLICK($_return1, $_return2)
WAITMS(100)
END_IF
END_IF
WAITMS(50)
//=============================================
//Смерть
if($takt = 1)
if_pixel_in(0,0,$_xmax,$_ymax,2654020)
WAITMS(50)
SCREENSHOT
smert()
end_if
end_if
IF($tik = 10)
$tik = 0
END_IF
IF($takt = 10)
$takt = 0
END_IF
END_CYC
Thread(thr1, 0)
SUB (m-move, $MOVE_END_X, $MOVE_END_Y)
$MOVE_SPEED = 2
$MOVE_Start_X = $_xmouse
$MOVE_Start_Y = $_ymouse
$MOVE_X = $MOVE_Start_X
$MOVE_Y = $MOVE_Start_Y
$dist= DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)
$MOVE_SPEEDVAR= INT((SQRT($dist))/$MOVE_SPEED)
//LOGWRITE ("dist ",$dist)
//LOGWRITE ("MOVE_SPEEDVAR ",$MOVE_SPEEDVAR)
IF($MOVE_SPEEDVAR < 1)
$MOVE_SPEEDVAR=1
END_IF
$MOVE_step=($dist-1)/$MOVE_SPEEDVAR
$MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
$MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step
$MOVE_i=0
FOR($MOVE_i=0, $MOVE_i<INT($MOVE_step))
$MOVE_X = $MOVE_X+$MOVE_X_step
$MOVE_Y = $MOVE_Y+$MOVE_Y_step
MOVE(ROUND($MOVE_X,0), ROUND($MOVE_Y,0))
WAITMS(1)
END_CYC
MOVE($MOVE_END_X, $MOVE_END_Y)
END_SUB
//m-move(150, 150)
//HALT
SUB (m-lclick, $MOVE_END_X, $MOVE_END_Y)
// Пример вызова:
// m-lclick(150, 150)
$LC1 = $MOVE_END_X
$LC2 = $MOVE_END_Y
m-move($MOVE_END_X, $MOVE_END_Y)
WAITMS(20)
LDOWN($LC1, $LC2)
WAITMS(30)
LUP($LC1, $LC2)
WAITMS(30)
END_SUB
SUB (m-mclick, $MOVE_END_X, $MOVE_END_Y)
$LC1 = $MOVE_END_X
$LC2 = $MOVE_END_Y
m-move($MOVE_END_X, $MOVE_END_Y)
WAITMS(RND(200,300))
MDOWN($LC1, $LC2)
WAITMS(30)
MUP($LC1, $LC2)
WAITMS(30)
END_SUB
// область поиска
$x_1 = 10
$y_1 = 171
$x_2 = 1100
$y_2 = 812
$cent_x=int(731) // центральная точка области поиска
$cent_y=int(489)
//=============================================
$x=0
$y=0
GETSCREEN($x_1,$y_1, $x_2,$y_2)
SCANPXL($arr,$x_1,$y_1, $x_2,$y_2, 9755391,6199541, 15174997, 15053399)
FOR($a=0,$a<ARRSIZE($arr),2)
IF(DIST($arr[$a],$arr[$a+1],$cent_x,$cent_y)<DIST($x,$y,$cent_x,$cent_y))
$x=$arr[$a]
$y=$arr[$a+1]
END_IF
END_CYC
IF(ARRSIZE($arr) > 0)
m-lclick($x,$y-15)
WAITMS(400)
END_IF
UNDEFINE($arr)
End_thread
//=============================================
//Движение
Thread(thr2, 0)
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "мини.bmp", -1, 100)
$x1=($_return1)
$x2=($_return1+150)
$y1=($_return2+55)
$y2=($_return2+135)
WAITMS(100)
END_IF
lclick(RND($x1,$x2),RND($y1,$y2)
WAIT(4)
End_thread
-
Долго мучался, пробовал разные подходы и в итоге понял что лучший вариант это сабы.
Скрипт выкладываю не для поиска ошибок, а просто чтоб люди посмотрели, может сами возьмут как пример и напишут чего дельного.
Однако ошибки присутствуют. Лишние END_IF не хватает скобки.
Исправленный код. Но еще не ясно что там в "sub.cms"
#include "sub.cms"
//=============================================
//Мониторинг
$tik = 0 //первостепенные задачи
$takt = 0 //думал расширить в дальнейшем
HINTPOPUP( "Начинаем")
WHILE($var < 5)
IF(ISKEYDOWN(#PageDown)=1)
HINTPOPUP("Стоп") //пришлось так сделать, потому что в один прекрасный момент скрипт перестал останавливаться пока не закроешь через диспетчер
HALT
END_IF
$takt = $takt + 1
$tik = $tik + 1
HINTPOPUP( $tik )
//=============================================
//Проверка соединения
IF($tik = 1)
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "connect.bmp", -1, 100)
connect()
end_if
end_if
//=============================================
//Проверка корабля
IF($tik = 3)
GETSCREEN
if_picture_in(1200, 133, 1247, 166, "корабль.bmp")
else
HINTPOPUP("Поправляю интер", "Косяк")
SETTHREAD (thr1, 0)
SETTHREAD (thr2, 0)
KEYDOWN(#H)
WAITMS(60)
KEYUP(#H)
WAIT(5)
inter()
end_if
end_if
WAITMS(50)
//=============================================
//Проверка карты
IF($tik = 4)
GETSCREEN
if_picture_in(1200, 535, 1247, 570, "миникарта.bmp")
else
HINTPOPUP("Поправляю интер", "Косяк")
SETTHREAD (thr1, 0)
SETTHREAD (thr2, 0)
KEYDOWN(#H)
WAITMS(60)
KEYUP(#H)
WAIT(5)
inter()
end_if
end_if
WAITMS(50)
//=============================================
//Проверка пета
GETSCREEN
IF($tik = 5)
IF_PICTURE_IN (1161,350, 1219, 390, "петработает.bmp", -1, 100)
else
HINTPOPUP("Что то с петом", "Ахтунг")
SETTHREAD (thr1, 0)
SETTHREAD (thr2, 0)
pet()
WAIT(5)
END_IF
end_if
WAITMS(50)
//===================================
IF($tik = 7)
GETSCREEN
$hp = PXLCOUNT(1281,177, 1291,184, 9363348)
IF($hp < 8)
HINTPOPUP("Мало хп")
SETTHREAD (thr1, 0)
SETTHREAD (thr2, 0)
portbeg()
else
IF_PICTURE_IN (1200,150, 1300,250, "конфа2.bmp", -1, 100)
LCLICK($_return1, $_return2)
WAITMS(100)
END_IF
SETTHREAD (thr1, 1)
SETTHREAD (thr2, 1)
END_IF
GETSCREEN
$shit = PXLCOUNT(1281,197, 1291,204, 14670478)
IF($shit < 7)
KEYDOWN(#c)
WAITMS(60)
KEYUP(#c)
END_IF
end_if
//=============================================
//прием группы
IF($tik = 8)
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "принятьгруппу.bmp", -1, 100)
LCLICK($_return1, $_return2)
WAITMS(100)
END_IF
END_IF
WAITMS(50)
//=============================================
//Смерть
if($takt = 1)
GETSCREEN
if_pixel_in(0,0,$_xmax,$_ymax,2654020)
WAITMS(50)
SCREENSHOT
smert()
end_if
end_if
IF($tik = 10)
$tik = 0
END_IF
IF($takt = 10)
$takt = 0
END_IF
END_CYC
Thread(thr1, 0)
SUB (m-move, $MOVE_END_X, $MOVE_END_Y)
$MOVE_SPEED = 2
$MOVE_Start_X = $_xmouse
$MOVE_Start_Y = $_ymouse
$MOVE_X = $MOVE_Start_X
$MOVE_Y = $MOVE_Start_Y
$dist= DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)
$MOVE_SPEEDVAR= INT((SQRT($dist))/$MOVE_SPEED)
//LOGWRITE ("dist ",$dist)
//LOGWRITE ("MOVE_SPEEDVAR ",$MOVE_SPEEDVAR)
IF($MOVE_SPEEDVAR < 1)
$MOVE_SPEEDVAR=1
END_IF
$MOVE_step=($dist-1)/$MOVE_SPEEDVAR
$MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
$MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step
$MOVE_i=0
FOR($MOVE_i=0, $MOVE_i<INT($MOVE_step))
$MOVE_X = $MOVE_X+$MOVE_X_step
$MOVE_Y = $MOVE_Y+$MOVE_Y_step
MOVE(ROUND($MOVE_X,0), ROUND($MOVE_Y,0))
WAITMS(1)
END_CYC
MOVE($MOVE_END_X, $MOVE_END_Y)
END_SUB
//m-move(150, 150)
//HALT
SUB (m-lclick, $MOVE_END_X, $MOVE_END_Y)
// Пример вызова:
// m-lclick(150, 150)
$LC1 = $MOVE_END_X
$LC2 = $MOVE_END_Y
m-move($MOVE_END_X, $MOVE_END_Y)
WAITMS(20)
LDOWN($LC1, $LC2)
WAITMS(30)
LUP($LC1, $LC2)
WAITMS(30)
END_SUB
SUB (m-mclick, $MOVE_END_X, $MOVE_END_Y)
$LC1 = $MOVE_END_X
$LC2 = $MOVE_END_Y
m-move($MOVE_END_X, $MOVE_END_Y)
WAITMS(RND(200,300))
MDOWN($LC1, $LC2)
WAITMS(30)
MUP($LC1, $LC2)
WAITMS(30)
END_SUB
// область поиска
$x_1 = 10
$y_1 = 171
$x_2 = 1100
$y_2 = 812
$cent_x=int(731) // центральная точка области поиска
$cent_y=int(489)
//=============================================
$x=0
$y=0
GETSCREEN($x_1,$y_1, $x_2,$y_2)
SCANPXL($arr,$x_1,$y_1, $x_2,$y_2, 9755391,6199541, 15174997, 15053399)
FOR($a=0,$a<ARRSIZE($arr),2)
IF(DIST($arr[$a],$arr[$a+1],$cent_x,$cent_y)<DIST($x,$y,$cent_x,$cent_y))
$x=$arr[$a]
$y=$arr[$a+1]
END_IF
END_CYC
IF(ARRSIZE($arr) > 0)
m-lclick($x,$y-15)
WAITMS(400)
END_IF
UNDEFINE($arr)
End_thread
//=============================================
//Движение
Thread(thr2, 0)
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "мини.bmp", -1, 100)
$x1=($_return1)
$x2=($_return1+150)
$y1=($_return2+55)
$y2=($_return2+135)
WAITMS(100)
END_IF
lclick(RND($x1,$x2),RND($y1,$y2))
WAIT(4)
End_thread
-
Да яж говорю что исправлять не нужно ХД) Ошибки может и присутсвуют, но явно не критичные, раз код работает именно так как планируется) Ибо у меня вся проблема состоит в том что я не знаю как реализовать кучу остальных функций такого плана как более менее интеллектуальный бой, свободное перемещение и т.д.
П.С. У меня два компа, на одном кликер расходует примерно 1-5% мощности, то на старом компе этот же код полностью перегружает проц =D Так что для слабых компьютеров Ваш вариант намного оптимальней)