Author Topic: многофункциональный бот Dark orbit  (Read 10938 times)

0 Members and 2 Guests are viewing this topic.

Vladinbox

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
многофункциональный бот Dark orbit
« on: August 28, 2015, 05:13:52 PM »
Написал бота для сбора коробочек(корабль и пет +ремонт,управление петом,возврат на нужную карту)
Есть бот на сбор палика( аналогичный первому только еще сейчас планирую заставить продавать палик)

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

Пишу скрипты используя модули(потоки). Выкладываю часть кода, может кто нибудь откликнеться на мой зов и мы напишем умного бота)
Если что гетскрин один на весь скрипт, позволяет не нагружать комп)
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
« Last Edit: August 29, 2015, 12:12:26 AM by Vladinbox »

Vladinbox

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Re: многофункциональный бот Dark orbit
« Reply #1 on: September 04, 2015, 12:33:46 AM »
Так как никто не откликнулся на мой зов, начал писать сам.  И решил начать с установки правильного интерфейса(чтоб в дальнейшем уменьшить зоны поиска необходимых данных). Сначала пробовал использовать 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
     

   
« Last Edit: September 04, 2015, 06:46:45 AM by Oraven »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: многофункциональный бот Dark orbit
« Reply #2 on: September 04, 2015, 06:50:32 AM »
Когда копируешь текст раскладки в кликере и в браузере сделай Ru, тогда не будет проблем с кодировкой.

У тебя ошибка в условии, нет GETSCREEN, нет завершения END_IF
Code: (clickermann) [Select]
if_picture_in(1200, 133, 1247, 166, "корабль.bmp")
   else

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


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

Нужно написать еще одно условие которое проверит диапазон координат.
Code: (clickermann) [Select]
//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

Или еще проще, сделаем цветокоррекцию в этой области которая испортит цвета
Code: (clickermann) [Select]
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
« Last Edit: September 04, 2015, 07:09:36 AM by Oraven »

Vladinbox

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Re: многофункциональный бот Dark orbit
« Reply #3 on: September 04, 2015, 02:05:28 PM »
Ночью облазил форум и решил попробовать сабами реализовывать. Суть кода в том что есть постоянная проверка которая должна проверять  достаточно большое количество информации. Для ускорения кода я хочу сделать первоочередные проверки и второстепенные
примерно такого типа: Есть счетчик допустим 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 только переход к сканированию всего экрана, но уже без центральной части.   Форум перерыл, но ничего подходящего не нашел.

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

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: многофункциональный бот Dark orbit
« Reply #4 on: September 04, 2015, 02:27:46 PM »
Я писал уже скрипт для сбора коробок. И там встроен анализ из центральной части.




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

Вот вычлененный код
Code: (clickermann) [Select]
// область поиска
$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)
« Last Edit: September 04, 2015, 02:40:29 PM by Oraven »

Vladinbox

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Re: многофункциональный бот Dark orbit
« Reply #5 on: September 04, 2015, 08:17:47 PM »
Извиняюсь, значит недостаточно хорошо облазил, спасибо.  А насчет быстродействия какой нибудь совет? Или я иду в правильном направлении?)

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: многофункциональный бот Dark orbit
« Reply #6 on: September 04, 2015, 08:39:34 PM »
Извиняюсь, значит недостаточно хорошо облазил, спасибо.  А насчет быстродействия какой нибудь совет? Или я иду в правильном направлении?)

В основном процессор напрягает слишком частые вызовы GETSCREEN и отсутствие задержек. Всего 50 мс между снимками очень сильно разгрузят процессор. Также зону снимка можно ограничить.

Code: (clickermann) [Select]
GETSCREEN (1200, 133, 1247, 166)
if_picture_in(1200, 133, 1247, 166, "корабль.bmp")

Vladinbox

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Re: многофункциональный бот Dark orbit
« Reply #7 on: September 05, 2015, 02:43:08 AM »
За этот день довольно неплохо продвинулся. Настроил систему "тиков" которая позволяет определить первостепенные и второстепенные задачи, а так же избавляет от одновременного выполнения нескольких действий. Эти "тики" на данный момент вмещают в себя до 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


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

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: многофункциональный бот Dark orbit
« Reply #8 on: September 05, 2015, 07:12:30 AM »
Ошибка, лишние END_IF

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

$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

Vladinbox

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Re: многофункциональный бот Dark orbit
« Reply #9 on: September 26, 2015, 12:09:23 AM »
Долго мучался, пробовал разные подходы и в итоге понял что лучший вариант это сабы.
Скрипт выкладываю не для поиска ошибок, а просто чтоб люди посмотрели, может сами возьмут как пример и напишут чего дельного.


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

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: многофункциональный бот Dark orbit
« Reply #10 on: September 26, 2015, 07:27:32 AM »
Долго мучался, пробовал разные подходы и в итоге понял что лучший вариант это сабы.
Скрипт выкладываю не для поиска ошибок, а просто чтоб люди посмотрели, может сами возьмут как пример и напишут чего дельного.

Однако ошибки присутствуют. Лишние END_IF не хватает скобки.
Исправленный код. Но еще не ясно что там в "sub.cms"
Code: (clickermann) [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)
   
   
   
   //===================================
   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

Vladinbox

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Re: многофункциональный бот Dark orbit
« Reply #11 on: September 27, 2015, 03:20:44 AM »
Да яж говорю что исправлять не нужно ХД)  Ошибки может и присутсвуют, но явно не критичные, раз код работает именно так как планируется)  Ибо у меня вся проблема состоит в том что я не знаю как реализовать кучу остальных функций такого плана как более менее интеллектуальный бой,  свободное перемещение и т.д.

П.С. У меня два компа, на одном кликер расходует примерно 1-5% мощности, то на старом компе этот же код полностью перегружает  проц =D  Так что для слабых компьютеров Ваш вариант намного оптимальней)
« Last Edit: September 27, 2015, 03:27:57 AM by Vladinbox »