Author Topic: подскажите как написать  (Read 4590 times)

0 Members and 1 Guest are viewing this topic.

Уральский

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
подскажите как написать
« on: June 13, 2015, 07:41:14 AM »
Читал но подобного не нашёл, а может  что то и есть но, видимо до меня не доходит ;)
Если  можно наглядно подскажите!
Немного могу сам что то написать, Но пока не все могу понять, переделываю написанные скрипты под свои нужды и понемногу учусь.
В игре есть иконка боеприпасов на ней цифрами количество боеприпасов, они убывают когда кого-то аточишь или прибывают при покупке.
go:
getscreen
IF_PICTURE_IN (31,247, 82,310, "моб.bmp") //
WAITMS (150)
lclick($_return1+40, $_return2-55)
WAITMS (20)
KEYPRESS (17)//
Else
end_if

( дальше каждые 10 секунд нужно отслеживать эту иконку и если она не изменилась)

go:
getscreen
IF_PICTURE_IN (31,247, 82,310, "моб.bmp") //
WAITMS (150)
lclick($_return1+40, $_return2-55)
WAITMS (20)
KEYPRESS (17)//
Else
end_if
« Last Edit: June 13, 2015, 08:09:02 AM by Уральский »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: подскажите как написать
« Reply #1 on: June 13, 2015, 08:28:53 AM »
Code: (clickermann) [Select]
// снимаем два хеша с промежутком в 10 сек
GETSCREEN
$hash1 = PXLCRC(100,100, 200,200) // область цифр иконки боеприпасов
WAIT(10)
GETSCREEN
$hash2 = PXLCRC(100,100, 200,200)
//если они одинаковые значит выполняем условие
IF($hash1 = $hash2)
   GETSCREEN
   IF_PICTURE_IN (31,247, 82,310, "моб.bmp")
      WAITMS (150)
      lclick($_return1+40, $_return2-55)
      WAITMS (20)
      KEYPRESS (#CTRL)
   end_if
   WAIT(1)
END_IF

Уральский

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: подскажите как написать
« Reply #2 on: June 13, 2015, 01:43:57 PM »
// снимаем два хеша с промежутком в 3 сек

2.GETSCREEN

3.$hash1 = PXLCRC(1067,975, 1081,979) // область цифр иконки боеприпасов

WAITMS(3000)


5.GETSCREEN

6.$hash2 = PXLCRC(1067,975, 1081,979)

7.//если они одинаковые значит выполняем условие

8.IF($hash1 = $hash2)

getscreen

IF_PIXEL_IN(350,150, 1910,937,204)

lclick($_return1+36, $_return2-50)
WAITMS (20)

KEYPRESS (#CTRL)

ELSE

END_IF
Работает но не совсем так как нужно.
Находит моба и атачит, через WAITMS(3000) нажимает CTRL и атака отменена через WAITMS(3000 снова ищет моба не добив предыдущего, и так собирает кучу мобов ))
(область цифр иконки боеприпасов) во время боя меняется , то есть цифры идут на убыль. он не должен делать ни каких действий пока картинка не станет не изменной
Делать длинную задержку  тоже не вариант. на одного моба нужно минуту на другого 10 предугадать  кого он встретит не реально
« Last Edit: June 13, 2015, 01:46:40 PM by Уральский »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: подскажите как написать
« Reply #3 on: June 13, 2015, 04:45:57 PM »
Вот, сделал более умную задержку. Теперь цикл анализирует область пока она перестанет изменяться в течении 3х секунд, то есть если за три секунды не произошло изменений то переходим к поиску пиксела, если же произошли изменения то снова ждем три секунды.
Code: (clickermann) [Select]
GETSCREEN
$hash1 = PXLCRC(1067,975, 1081,979)
$check = 0
UNDEFINE($time)
WHILE($check = 0)
   WAITMS(50)
   GETSCREEN
   $hash2 = PXLCRC(1067,975, 1081,979)
   IF($hash1 = $hash2)
      DEFINE($time, $_time_t + 3) // хеш одинаковый, ждем еще 3 секунды
      IF($time < $_time_t)
         $check = 1
      END_IF
   ELSE
      $hash1 = PXLCRC(1067,975, 1081,979)
      $check = 0
      UNDEFINE($time)
   END_IF
END_CYC

GETSCREEN
IF_PIXEL_IN(350,150, 1910,937,204)
   lclick($_return1+36, $_return2-50)
   WAITMS (20)
   KEYPRESS (#CTRL)
   WAITMS (50)
end_if


Уральский

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: подскажите как написать
« Reply #4 on: June 14, 2015, 07:25:28 AM »
Не работает, совсем ни чего не происходит((
пробивал изменить размер сравнения хеша до 1 пиксела, тоже тишина((

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: подскажите как написать
« Reply #5 on: June 14, 2015, 08:02:36 AM »
Добавил запись в лог, посмотри что там пишет.

Code: (clickermann) [Select]
GETSCREEN
$hash1 = PXLCRC(1067,975, 1081,979)
LOGWRITE ("hash1: ", $hash1)
$check = 0
UNDEFINE($time)
WHILE($check = 0)
   WAITMS(50)
   GETSCREEN
   $hash2 = PXLCRC(1067,975, 1081,979)
   IF($hash1 = $hash2)
      DEFINE($time, $_time_t + 3) // хеш одинаковый, ждем еще 3 секунды
      IF($time < $_time_t)
         $check = 1
      END_IF
   ELSE
      $hash1 = PXLCRC(1067,975, 1081,979)
      LOGWRITE ("hash1_2: ", $hash1)
      $check = 0
      UNDEFINE($time)
   END_IF
END_CYC
LOGWRITE ("Ищу пиксел")

GETSCREEN
IF_PIXEL_IN(350,150, 1910,937,204)
   LOGWRITE ("Нашел")
   lclick($_return1+36, $_return2-50)
   WAITMS (20)
   KEYPRESS (#CTRL)
   WAITMS (50)
ELSE
   LOGWRITE ("Не нашел")
end_if

Уральский

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: подскажите как написать
« Reply #6 on: June 14, 2015, 08:53:54 AM »
Всё работает именно так как нужно!!!, не знал что при копировании скрипта  нумерацию строк нужно удалить.
Сейчас буду кумекать как соединить то что вы дали с с моим скриптом..... Пока чтоб всё работало как нужно приходится запускать одновременно 3 кликера
Я ещё вернусь ;)
Спасибо!!!
« Last Edit: June 14, 2015, 09:29:46 AM by Уральский »

Уральский

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: подскажите как написать
« Reply #7 on: June 14, 2015, 10:39:59 AM »
Code: (clickermann) [Select]
//Это скрипт поиск пиксела от центра
$x=0

$y=0

$cent_x=int($_xmax/2)

$cent_y=int($_ymax/2)

GETSCREEN

SCANPXL($arr,100,100, 200,200, 1057851)

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)

 

IF(($x+$y)>0)

   LDOWN ($x, $y)

   WAITMS(RND(80,60))

   LUP($x, $y)

   WAITMS(RND(80,40))
END_IF


//Это тоже поиск пиксела  со случайным кликом, но с верх левого угла: оба взяты с форума и немного переделаны под себя.
//Пользуюсь вторым. вот если бы в нем сделать поиск от центра!!!!!!!!!!!!! пробую сам , но не получается не все понимаю что тут к чему: соедините пожалуйста!  ( если добавите комментарии будет замечательно! в справке не всегда все понятно.)
//Кстати первый скрипт у меня тоже не работал до сего дня из за нумерации строк ;)
SUB(mouse_move,$MOVE_END_X,$MOVE_END_Y,$MOVE_CLICK)
   $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)
 
   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
 
   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)
 
   IF($MOVE_CLICK = 1)
      LDOWN($MOVE_END_X, $MOVE_END_Y)
      WAITMS(RND(80,150)
      LUP($MOVE_END_X, $MOVE_END_Y)
      WAITMS(RND(80,150)
   END_IF
END_SUB
 
mouse_move (RND(85,195),RND(889,939),1)
 
$time = $_time_t + RND(2,3)
$check = 0
$check_out = 0
WHILE(($check_out = 0) & ($time > $_time_t))
   GETSCREEN   
   IF_PIXEL_IN(100,100, 200,200, 1057851)

    LCLICK ($_return1, $_return2)
    WAITMS(RND(50,60))
   ELSE
   ELSE
      IF($check = 1)
         $check_out = 1
      END_IF
      WAITMS(300)
   END_IF
END_CYC
WAITMS(RND(40,60))
// Есть небольшой недостаток во втором коде: Когда персонаж  в движении клик промахивается кликая рядом, кликает точно когда персонаж промахнулся остановившись
« Last Edit: June 14, 2015, 10:55:55 AM by Уральский »