Что нового

[Dota 2] anti AFK bot

Xion

Новичок
Сообщения
11
Репутация
2
Зачем оно нужно: Бывают ситуации когда заведомо известен исход партии в пользу противника и есть 2 варианта - либо тратить свое время и играть дальше в надежде на счастливую случайность и победу, либо покинуть игру и получить риск запрета доступа к рейтинговым играм. Для того что бы не тратить свое время я предлагаю использовать бота, который в фоне будет поддерживать некоторую активность, чтобы вас не посчитали AFK.
Что нужно: Для работы скрипта необходим MouseClickPlus.au3, который обеспечивает возможность посылать клики мыши в неактивное окно. (ссылки не могу прикреплять поэтому гуглим "Insolence MouseClickPlus.au3")
Принцип работы: Во время игры запускаете скрипт. Он проверяет за какую сторону вы играете, в зависимости от стороны будет кликать в своей области (то есть не будет посылать вашего героя прямо на базу врага, а будет крутиться около своей базы). Для проверки стороны скрипт единоразово раскрывает окно с игрой, ищет пиксель, сворачивает окно. Дальше окно можно держать свернутым, либо разворачивать для проверки процесса игры.

PS надеюсь на поддержку и предложения по улучшению моих скриптов

Код:
; Press Esc to terminate script, Pause/Break to "pause"
#include <Array.au3>
#include <MouseClickPlus.au3>

Global $Paused

HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{ESC}", "Terminate")
TogglePause()

WinActivate("Dota 2")
$CheckSide = PixelSearch(int(20/1366*@DesktopWidth),int(708/768*@DesktopHeight),int(62/1366*@DesktopWidth),int(754/768*@DesktopHeight),0x00ff00)
Sleep(100)
WinSetState("Dota 2","",@SW_MINIMIZE)

If IsArray($CheckSide) Then ; if green
   While 1
	  ControlSend("Dota 2","","","a")
	  Sleep(100)
	  _MouseClickPlus("Dota 2","left",int(random(28,89,1)/1366*@DesktopWidth),int(random(687,750,1)/768*@DesktopHeight))
	  Sleep(random(3000,10000,1))
   WEnd
Else
   While 1
	  ControlSend("Dota 2","","","a")
	  Sleep(100)
	  _MouseClickPlus("Dota 2","left",int(random(125,187,1)/1366*@DesktopWidth),int(random(594,641,1)/768*@DesktopHeight))
	  Sleep(random(3000,10000,1))
   WEnd
EndIf

Func TogglePause()
	$Paused = NOT $Paused
	While $Paused
		sleep(100)
		ToolTip('Script is "Paused"',0,0)
	WEnd
	ToolTip("")
EndFunc

Func Terminate()
	Exit 0
EndFunc
 
Автор
X

Xion

Новичок
Сообщения
11
Репутация
2
Есть ли у кого идеи по программе?

Пока что хочу организовать не просто рандомное направление героя, а фарм леса
+ проверка здоровья и уход на базу в случае низкого уровня ХП
К тому же деятельность анти афк будет менее заметна
Единственная проблема это организация работы в фоне. Для проверки уровня здоровья нужен pixelsearch, поэтому скорее всего выйдет 2 версии, одна которая может работать в фоне, другая которая может фармить лес, но работающая только в активном окне.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1 530
Репутация
325
Игроки увидят что ты маешься фигней и повесят на тебя репорты, тогда тоже можно получить риск запрета рейтинговых игр.
Если уж и писать бота, то "умного" на PixelSearch и ImageSearch, который хотя бы будет фармить крипов.
 
Автор
X

Xion

Новичок
Сообщения
11
Репутация
2
Реализовал бота-лесника
Теперь бот ходит по респаунам мобов в лесу и при их наличии убивает их
При этом мониторится здоровье, при низком уровне бежит на базу лечиться

Пока все очень багово работает, поэтому код выкладывать не буду, выложу когда будет достаточно стабильно работать
А пока можете предлагать идеи, в принципе вполне реализуем ласт-хит бот: при определенной зажатой клавише бот будет искать врагов с низким уровнем здоровья и пытаться добивать
 
Автор
X

Xion

Новичок
Сообщения
11
Репутация
2
Код:
;~ Press Esc to terminate script, Pause/Break to "pause"
#include <Array.au3>
#include <ImageSearch.au3>

Global $Paused
Global $SentForest[5][2]=[[int(95/1366*@DesktopWidth),int(722/768*@DesktopHeight)],[int(102/1366*@DesktopWidth),int(709/768*@DesktopHeight)],[int(127/1366*@DesktopWidth),int(714/768*@DesktopHeight)],[int(146/1366*@DesktopWidth),int(710/768*@DesktopHeight)],[int(145/1366*@DesktopWidth),int(726/768*@DesktopHeight)]]
Global $DireForest[5][2]=[[int(49/1366*@DesktopWidth),int(624/768*@DesktopHeight)],[int(68/1366*@DesktopWidth),int(612/768*@DesktopHeight)],[int(87/1366*@DesktopWidth),int(638/768*@DesktopHeight)],[int(103/1366*@DesktopWidth),int(622/768*@DesktopHeight)],[int(123/1366*@DesktopWidth),int(627/768*@DesktopHeight)]]
Global $SentHome[2]=[int(18/1366*@DesktopWidth),int(754/768*@DesktopHeight)]
Global $DireHome[2]=[int(193/1366*@DesktopWidth),int(587/768*@DesktopHeight)]
Local $x=0, $y=0
Local $activespell = InputBox("Введите горячую клавишу активного заклинания", "Введите горячую клавишу активного заклинания (которое можно применить на моба)")

HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{ESC}", "Terminate")
TogglePause()

WinActivate("Dota 2")
Sleep(1000)
$CheckSide = PixelSearch(int(20/1366*@DesktopWidth),int(708/768*@DesktopHeight),int(62/1366*@DesktopWidth),int(754/768*@DesktopHeight),0x00ff00)
Sleep(100)

If IsArray($CheckSide) Then ;if green
   FarmForest("Sent")
Else
   FarmForest("Dire")
EndIf

Func FarmForest($Side)
   While 1
	  $f = random(0,(UBound(Eval($Side&"Forest"))-1),1)
	  MouseMove(Eval($Side&"Forest")[$f][0],Eval($Side&"Forest")[$f][1],0)
	  Sleep(100)
	  MouseClick("left")
	  Sleep(100)
	  ControlSend("Dota 2","","","a")
	  Sleep(100)
	  MouseClick("left")
	  Do
		 $checkme = _ImageSearch("myhealthbar.bmp",1,$x,$y,0)
		 Sleep(300)
	  Until $checkme = 1
	  Sleep(100)
	  For $i = 1 To 5
		 If _ImageSearch("enhealthbar.bmp",1,$x,$y,0) = 1 Or _ImageSearch("enhealthbar2.bmp",1,$x,$y,0) = 1 Then
			MouseMove($x+25,$y+25,0)
			ControlSend("Dota 2","","","a")
			Sleep(100)
			MouseClick("left")
			If StringLen($activespell) <> 0 Then
			   Sleep(1500)
			   _ImageSearch("enhealthbar.bmp",1,$x,$y,0)
			   MouseMove($x+25,$y+25,0)
			   ControlSend("Dota 2","","",$activespell)
			   Sleep(100)
			   MouseClick("left")
			   Sleep(100)
			   ControlSend("Dota 2","","","{ESC}")
			   ControlSend("Dota 2","","","{F1 2}")
			EndIf
			MouseMove(int(650/1366*@DesktopWidth),int(657/768*@DesktopHeight),0)
			ExitLoop
		 EndIf
		 Sleep(1000)
		 If $i = 5 Then
			ExitLoop
		 EndIf
	  Next
	  Do
		 $searchen = _ImageSearch("enhealthbar.bmp",1,$x,$y,0)
		 $searchen2 = _ImageSearch("enhealthbar2.bmp",1,$x,$y,0)
		 Sleep(300)
		 If Hex(PixelGetColor(int(650/1366*@DesktopWidth),int(657/768*@DesktopHeight))) = 101110 Then
					 Sleep(100)
					 MouseMove(Eval($Side&"Home")[0],Eval($Side&"Home")[1],0)
					 Sleep(100)
					 MouseClick("right")
					 Sleep(100)
					 MouseClick("right")
					 Do
								 Sleep(500)
					 Until Hex(PixelGetColor(int(950/1366*@DesktopWidth),int(657/768*@DesktopHeight))) = 056205
					 ExitLoop
		 EndIf
	  Until $searchen = 0 and $searchen2 = 0
   Do
	  Sleep(100)
   Until Hex(PixelGetColor(int(550/1366*@DesktopWidth),int(663/768*@DesktopHeight))) <> "890f13"
   WEnd
EndFunc

Func TogglePause()
$Paused = NOT $Paused
While $Paused
sleep(100)
ToolTip('Script is "Paused"',0,0)
WEnd
ToolTip("")
EndFunc

Func Terminate()
Exit 0
EndFunc
 

Вложения

Верх