Что нового

Наведение на ближайшего моба к игроку

Andrey93

Новичок
Сообщения
5
Репутация
0
Всем привет, делаю бота к MMORPG, но не получается реализовать что бы бот атаковал ближайшего к игроку моба(которые появляется в неудобный момент). В данном коде атака распределена на 2 зоны красная рядом с игроком и синяя на пределе досягаемости. Есть идеи как можно сделать?


Код:
HotKeySet("{F10}", "myExit")

Global $attacking = False
; красная зона обстрела
Global $red = Sqrt(((640 - 530)^2) + ((512 - 402)^2))  
 ; синяя зона обстрела
Global $blue = Sqrt(((640 - 475)^2) + ((512 - 347)^2))
; центр экрана
Global $center_x = "640"
Global $center_y = "512"

While (1)
   ; Поиск моба
   $pix = PixelSearch(534, 421, 760, 639, 0x156D18, 10)
   if Not (@error) Then
		   $x = $Pix[0]
		   $y = $Pix[1]

   ; Клик лкм на моба
      MouseClick ("left", $x, $y, 1, 0)
      $Pause = Random(0, 1000)
      Sleep($pause)
   ; расстояние до моба на которого наведён прицел
$d = Sqrt((($center_x - $x)^2) + (($center_y - $y)^2))
   ; если моб находится в красной зоне то атака
 if $d <= $red then
   $attacking = True
   $BlueAttacking = False
   ; если моб дальше красной зоны и находится в синей зоне и в красной зоне никого не атакует
ElseIf $d >= $red And $d <= $blue And $BlueAttacking = False Then
   $attacking = True
   $BlueAttacking = True
EndIf
     ; по прежнему атакуем моба?
      While ($attacking)
		 $isAttacking = PixelSearch (534, 421, 760, 639, 0xFF0000)
		 if not (@error) Then
	  ; атакуем моба до тех пор пока на него наведён прицел
			Do
	              Send("{NUMPAD1}")
	              Sleep(10)
		          Send("{NUMPAD2}")
	              Sleep(10)
	        Until $attacking = True
	     Else
		    $attacking = False
		 EndIf
      WEnd
   EndIf
WEnd

Func myExit ()
 MsgBox (0, "Bot", "нажми ok чтобы выключить")
 Exit
EndFunc
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Целишься в моба исходя из миникарты?
 
Автор
A

Andrey93

Новичок
Сообщения
5
Репутация
0
Belfigor сказал(а):
Целишься в моба исходя из миникарты?
нет, ищет нужный пиксель на экране в области и когда найдёт нажимает лкм
вот как выглядит миникарта, только если нажать на неё откроется карта.
Есть идея как это можно сделать, сейчас пробую реализовать. Поиск начинается из центра и по кругу против часовой стрелки начинает увеличиваться когда моб обнаружен атакует, после атаки поиск начинается заново
 

Вложения

  • миникарта1.png
    миникарта1.png
    80.7 КБ · Просмотры: 34
Автор
A

Andrey93

Новичок
Сообщения
5
Репутация
0
Изменил я немного код, теперь поиск начинается из центра(точнее зона поиска увеличивается из центра), после атаки поиск начинается заново. Но вопрос по прежнему открыт. Нужны идеи, что бы бот атаковал ближайшего к игроку моба.
Вот код:
Код:
HotKeySet("{F10}", "myExit")

Global $attacking = False

Global $x1 = 640
Global $y1 = 512
Global $x2 = 640
Global $y2 = 512

While (1)
   ; Зона поиска
   For $attacking = False to $attacking = True ; граница расширяется пока моб не найден
	  $x1 = $x1 - 30
      $y1 = $y1 - 30
      $x2 = $x2 + 30
      $y2 = $y2 + 30
	  ; если игрок атакует моба или область х1 достигла границы макс дальности оружия
	  ; то остановить атаку и вернуться на точку отсчёта
      If $attacking = True or $x1 <= 300 or $y1 <= 350 then 
		 $attacking = False
		 $x1 = 640
         $y1 = 512
         $x2 = 640
         $y2 = 512
	  EndIf
   ToolTip($x1, 0 ,0)
   Next
     ; поиск моба в зоне
	 $Pix = PixelSearch ($x1, $y1, $x2, $y2, 0x156D18, 10)
   if Not (@error) Then
	  ; Клик лкм на моба
	  MouseClick ("left", $pix [0], $pix [1], 1, 0)
      Sleep(50)
	  $attacking = True
     ; мы по прежнему атакуем моба?
      While ($attacking)
		 $isAttacking = PixelSearch ($x1, $y1, $x2, $y2, 0xFF0000)
		 if not (@error) Then
	  ; атакуем моба до тех пор пока на него наведён прицел
			Do
	              Send("{NUMPAD1}")
	              Sleep(10)
		          Send("{NUMPAD2}")
	              Sleep(10)
	        Until $attacking = True
	     Else
		    $attacking = False
		 EndIf
      WEnd
   EndIf
WEnd

Func myExit ()
 MsgBox (0, "Bot active", "нажми ok чтобы выключить")
 Exit
EndFunc
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Andrey93,
какую помощь Вы хотите получить?
Фраза "не получается реализовать что бы бот атаковал ближайшего к игроку моба" никак не объясняет что Вам нужно.
Это всё равно что Вы пишете "не получается ездить на мерседесе" и ожидаете что все догадаются Вам подсказать как заработать денег на мерседес.
Формулируйте свои мысли более понятно.
 
Автор
A

Andrey93

Новичок
Сообщения
5
Репутация
0
C2H5OH, что вам непонятно во фразе: "Нужны идеи, что бы бот атаковал ближайшего к игроку моба" из предыдущего и первого сообщений.
Что мне надо: чтобы поиск пикселей не останавливался после того как найдёт нужный пиксель, а искал дальше пока не найдёт всех. Потом определить какой пиксель ближе к игроку и лкм на ближайшем.
А про мерседес, вы своё сообщение перечитайте. Где смысл
"не получается ездить на мерседесе" и подсказать как заработать денег на мерседес
Формулируйте свои мысли более понятно.
 

qqww22

Новичок
Сообщения
115
Репутация
4
Формируйте свои мысли картинками, все мыслят по разному и визуальное оформление играет ключевую роль.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Andrey93 [?]
Что мне надо: чтобы поиск пикселей не останавливался после того как найдёт нужный пиксель, а искал дальше пока не найдёт всех. Потом определить какой пиксель ближе к игроку и лкм на ближайшем.
Дак ты абсолютно правильно сказал, сканируй из центра попиксельно по часовой или против стрелке.
Но для этого тебе нужно будет делать свой вложенный цикл for и уходить от pixelsearch на fastfind, иначе все будет очень медленно.
 
Автор
A

Andrey93

Новичок
Сообщения
5
Репутация
0
Belfigor сказал(а):
Andrey93 [?]
Что мне надо: чтобы поиск пикселей не останавливался после того как найдёт нужный пиксель, а искал дальше пока не найдёт всех. Потом определить какой пиксель ближе к игроку и лкм на ближайшем.
Дак ты абсолютно правильно сказал, сканируй из центра попиксельно по часовой или против стрелке.
Но для этого тебе нужно будет делать свой вложенный цикл for и уходить от pixelsearch на fastfind, иначе все будет очень медленно.

не зря я писал что надо сделать, помогло мысли в кучу собрать, пока написал идея сама сформировалась
 
Верх