Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Vladinbox

Pages: [1]
1
Про эту игрушку слышу впервые,  но готов присоединиться. Ибо сейчас сам пишу  для другой игрухи.
+ у меня уже есть какие то наработки, может и пригодиться тебе в чем то

2
Если играете в дарк орбит, то попробуйте использовать скрипт постепенно увеличивая  задержку между  снимками. И вы поймете, что чем чаще обновляется экран тем меньше кликов ему потребуется чтоб собрать коробку

3
У меня очень мощный комп, и он не встает даже если снимки  с 1 мс частотой. Именно в этом коде я соглашусь, что нету смысла , но в коде из которого  я его выдернул  такой ход оправдал себя,  ибо обеспечивается хорошая точность клика.

4
Да яж говорю что исправлять не нужно ХД)  Ошибки может и присутсвуют, но явно не критичные, раз код работает именно так как планируется)  Ибо у меня вся проблема состоит в том что я не знаю как реализовать кучу остальных функций такого плана как более менее интеллектуальный бой,  свободное перемещение и т.д.

П.С. У меня два компа, на одном кликер расходует примерно 1-5% мощности, то на старом компе этот же код полностью перегружает  проц =D  Так что для слабых компьютеров Ваш вариант намного оптимальней)

5
Долго мучался, пробовал разные подходы и в итоге понял что лучший вариант это сабы.
Скрипт выкладываю не для поиска ошибок, а просто чтоб люди посмотрели, может сами возьмут как пример и напишут чего дельного.


Code: [Select]
#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

6
Вот тебе работоспособный, правда лучше переделай его чтоб поиск из центра был, ибо в этом он будет всегда пытаться левый верхний палик собрать . Для работы нужно все настройки графики убрать в ноль и использовать 2D.  А что бы он моба бил я сам пытаюсь. Бить то бьет(Не этот скрипт), но если их несколько то начинает метаться  от одного к другому. Короче пока еще не понял как нормально сделать.
Code: [Select]
GETSCREEN
WAITMS(20)

Thread(thr1)



$time = $_time_t + RND(20,30)
$check = 0
$check_out = 0
WHILE(($check_out = 0) & ($time > $_time_t))
   IF_PIXEL_IN(350,238, 980,685, 9557759, 10386009, 2964963 ) //350,238, 980,685,  область поиска, 9557759, 10386009, 2964963 цвета палика
      LDOWN ($_return1, $_return2)
      WAITMS(RND(80,100))
      LUP($_return1, $_return2)
      WAITMS(RND(100,120)) 
WAIT(rnd(1,2))
setThread(thr2,0)
 
     
   ELSE
      IF($check = 1)
         $check_out = 1
         setThread(thr2,1) 
      END_IF
     

     
      WAITMS(50)
   END_IF
 
END_CYC

WAITMS(RND(50,120))
//много задержек чтоб не пропускал

setThread(thr2,1) 
End_thread

Thread(thr2)


 LCLICK(RND(1315,1371),RND(800,813)) // область миникарты (у меня 1440х900 разрешение)
WAIT(5)
 
End_thread

7
За этот день довольно неплохо продвинулся. Настроил систему "тиков" которая позволяет определить первостепенные и второстепенные задачи, а так же избавляет от одновременного выполнения нескольких действий. Эти "тики" на данный момент вмещают в себя до 10 проверок. Но так как это лишь проверки, а нужно делать еще много подпрограмм и совсем не хочется увеличивать время полной проверки, то скорей всего придется вводить поток в котором будут свои "Тики"  для других задач.

Code: [Select]
//=============================================
//Мониторинг

$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


Теперь надо придумать то, как научить бота убивать врагов. Сложностей там достаточно много, так как все враги имеют различное время убийства и самое что важное, в конце они просто убегают. Если враг один то особых проблем нету, но когда появляются несколько то атака просто перейдет на новую жертву не добив предыдущего.

8
Извиняюсь, значит недостаточно хорошо облазил, спасибо.  А насчет быстродействия какой нибудь совет? Или я иду в правильном направлении?)

9
Ночью облазил форум и решил попробовать сабами реализовывать. Суть кода в том что есть постоянная проверка которая должна проверять  достаточно большое количество информации. Для ускорения кода я хочу сделать первоочередные проверки и второстепенные
примерно такого типа: Есть счетчик допустим 0 + 1 до 10, который в конце обнуляется  и для снятия нагрузки с процессора можно сделать проверку в определенные тики. Как написать я знаю, тут больше вопрос как лучше осуществить контроль сразу за большим количеством информации, для обеспечения быстродействия. Мне самому не так уж это важно, у меня 12 гигов оперативы и проц не слабый. но хочеться чтоб и на других работало нормально.

Вот  часть кода  который был написан за ночь, протестирован и признан годным(сабы естсественно не прилагаю,т.к. они рабочие, а тут водиться большое количество мелких воришек, которые не хотят думать своей головой).
Code: [Select]
$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 только переход к сканированию всего экрана, но уже без центральной части.   Форум перерыл, но ничего подходящего не нашел.

П.С. Может все таки у кого нибудь есть желание присоединиться?)

10
Так как никто не откликнулся на мой зов, начал писать сам.  И решил начать с установки правильного интерфейса(чтоб в дальнейшем уменьшить зоны поиска необходимых данных). Сначала пробовал использовать switch. Пока было одно действие в свитче, код работал именно так как нужно, но когда появилось второе действие, то начинало заедать и вставать намертво.  Я решил прибегнуть к своим любимым потокам. Но тут появилась проблема. Тело потока  выполняется не последовательно, либо вообще начинает беспрерывно прогоняться.  Это код уже измученный и перерезанный в попытках понять в чем дело, я так же пытался делать через управление потоками, пример: если картинка  не найдена -> запуск потока, который в конце сам себя выключает.       даже при таком раскладе ничего не работает.

И сразу тут спрошу,  можно ли сделать область поиска с пустым центром?

Code: [Select]
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
     

   

11
Написал бота для сбора коробочек(корабль и пет +ремонт,управление петом,возврат на нужную карту)
Есть бот на сбор палика( аналогичный первому только еще сейчас планирую заставить продавать палик)

Ну а суть в том, что я хочу написать полноценного бота который мог бы "крутить" мобов и собирать коробки и многое другое, сам я его могу написать, но если будет еще кто будет быстрее)

Пишу скрипты используя модули(потоки). Выкладываю часть кода, может кто нибудь откликнеться на мой зов и мы напишем умного бота)
Если что гетскрин один на весь скрипт, позволяет не нагружать комп)
Code: [Select]
//=============================================
// êîíòðîëü ïåòà
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

Pages: [1]