Что нового

[The Infinite Black] Бот для android игры "The Infinite Black" под Bluestacks

hxckid

Новичок
Сообщения
4
Репутация
0
Моя попытка написать бот для игры The Infinite Black. Знаний в программировании у меня практически нет, поэтому, скорее всего, ниже вы увидите "быдло" код. И отсюда соответственно приму помощь в любом виде, хоть советом по исправлению, хоть делом. Заранее благодарю.

Что делает:
+ Летает по серым клеткам, рандомно выбирая направление
+ Проверяет путь и цвет клетки, поэтому в черные зоны случайно не залетит
+ Атакует, прицепляясь пока не убьет
+ Во время боя хилится
+ Если попадает в клетку со СтарПортом, то продает ресурсы (Надо чтобы, была включена вкладка с ресурсами вручную 1 раз)

Минусы:
- Может летать перегруженым, оставляя дроп в космосе
- Принудительно не летит к СтарПорту для продажи
- Быдлокодинг, много рекурсивных функций

Огромные минусы:
-- Зависим от разрешения дисплея 1366х768 (писал для себя, очень много проверки пикселов на цвет, работать с памятью еще не умею)
-- Необходимо ОБЯЗАТЕЛЬНО иметь Дрона и Файтера за БД
-- Нестабильная работа в целом
-- Забирает управление мышью, сделать что-то во время работы бота невозможно, не остановив его (Запуск бота по PageUp, остановка по Escape)

Код:
;============================Settings================================
HotKeySet("{PgUp}", "Fighting")
HotKeySet("{PgDn}","Map")
HotKeySet("{ESC}", "Terminate")
HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{NUMPADMULT}", "Selling")
;====================================================================
;ВЫХОД ИЗ СКРИПТА ПРИ НАЖАТИИ 'Escape'
;===========================Variables================================
   Dim $Center[2]=[515, 523] ;Кнопка центрирования карты
   Dim $JumpButtonCoords[2]=[408, 511] ;Кнопка GO
   Global $Paused 
   Global $Map[4][4]
   Global $GrayTile[3]
   Global $Enemy[3]
   Global $Sell[3]
   ;Координаты окружающих клеток возможных к перемещению на 1 шаг (Tiles coords we can move directly in 1 jump)
   ;NW - Северо-запад  N - Север       NE - Северо-восток
   ;W - Запад          Клетка Корабля  E - Восток
   ;SW - Юго-запад,    S - Юг          SE - Юго-восток
;=====================================================================



;===========================Тело скрипта==============================
;=====================================================================

While 1
WEnd

;Функция при нажатии на PageDown выводит схематическую карту с доступными для прыжка направлениями
Func Map()
WinActivate("[TITLE:BlueStacks App Player for Windows (beta-1]", "")
WinMove ("BlueStacks App Player for Windows (beta-1)", "", 0, 0)
MouseClick("",$Center[0],$Center[1])
MouseClick("", 512, 313)
$NWP = PixelGetColor(496,293)
If $NWP = 0 Then
      $Map[1][1] = "  "
Else
   $Map[1][1] = "\  "
EndIf

$NP = PixelGetColor(512,286)
If $NP = 0 Then
      $Map[1][2] = "  "
Else
   $Map[1][2] = "|"
EndIf

$NEP = PixelGetColor(534,293)
If $NEP = 0 Then
      $Map[1][3] = "  "
Else
   $Map[1][3] = " /"
EndIf

$WP = PixelGetColor(488,310)
If $WP = 0 Then
      $Map[2][1] = "  "
   Else
      $Map[2][1] = "--"
EndIf

$EP = PixelGetColor(541,310)
If $EP = 0 Then
      $Map[2][3] = "  "
Else
   $Map[2][3] = "--"
EndIf

$SWP = PixelGetColor(495,332)
If $SWP = 0 Then
      $Map[3][1] = "  "
Else
   $Map[3][1] = "/  "
EndIf
   
$SP = PixelGetColor(514,341)
If $SP = 0 Then
      $Map[3][2] = "  "
Else
   $Map[3][2] = "|"
EndIf

$SEP = PixelGetColor(534,333)
If $SEP = 0 Then
      $Map[3][3] = "  "
Else
   $Map[3][3] = " \"
EndIf
MsgBox(0, '', $Map[1][1] & $Map[1][2] & $Map[1][3] & @CR & $Map[2][1] & "0" & $Map[2][3] & @CR & $Map[3][1] & $Map[3][2] & $Map[3][3])
EndFunc

Func Moving()
   WinActivate("[TITLE:BlueStacks App Player for Windows (beta-1]", "")
WinMove ("BlueStacks App Player for Windows (beta-1)", "", 0, 0)

$NWP = PixelGetColor(496,293)
If $NWP = 0 Then
      $Map[1][1] = 0
Else
   $Map[1][1] = 8
EndIf

$NP = PixelGetColor(515, 279)
If $NP = 0 Then
      $Map[1][2] = 0
Else
   $Map[1][2] = 1
EndIf

$NEP = PixelGetColor(534,293)
If $NEP = 0 Then
      $Map[1][3] = 0
Else
   $Map[1][3] = 2
EndIf

$WP = PixelGetColor(488,310)
If $WP = 0 Then
      $Map[2][1] = 0
Else
   $Map[2][1] = 7
EndIf

$EP = PixelGetColor(541,310)
If $EP = 0 Then
      $Map[2][3] = 0
Else
   $Map[2][3] = 3
EndIf

$SWP = PixelGetColor(495,332)
If $SWP = 0 Then
      $Map[3][1] = 0
Else
   $Map[3][1] = 6
EndIf
   
$SP = PixelGetColor(514, 341)
If $SP = 0 Then
      $Map[3][2] = 0
Else
   $Map[3][2] = 5
EndIf

$SEP = PixelGetColor(534,333)
If $SEP = 0 Then
      $Map[3][3] = 0
Else
   $Map[3][3] = 4
EndIf
;MsgBox(4, '', $Map[1][1] & $Map[1][2] & $Map[1][3] & @CR & $Map[2][1] & "0" & $Map[2][3] & @CR & $Map[3][1] & $Map[3][2] & $Map[3][3] )
   $DestinationPoint = Random(1,8,1)
   Switch  $DestinationPoint 
   Case 1 ;Двигаемся на север (Moving North)
	  ToolTip('N')
	  If $Map[1][2] = 0 Then
		 Moving()
		EndIf
	 $GrayTile = PixelSearch(498, 198, 532, 226, 0x8C8A8C)
	 If @error = 1  Then
		Moving()
		Else
		 ToolTip('Двигаемся на северо-восток')
		 MouseClick ('left', $GrayTile[0],$Graytile[1])
		 Sleep(200)
		 MouseClick ('left', $JumpButtonCoords[0],$JumpButtonCoords[1])
		 Sleep(2000)
		 ToolTip('')
		 Fighting()
	  EndIf
	  
	  
   Case 2 ;Двигаемся на северо-восток (Moving North-East)
	  ToolTip('NE')
	   If $Map[1][3] = 0 Then
		 Moving()
		EndIf
	 $GrayTile = PixelSearch(598, 198, 631, 231, 0x8C8A8C)
	 If @error = 1  Then
		Moving()
		Else
		 ToolTip('Двигаемся на северо-восток')
		 MouseClick ('left', $GrayTile[0], $GrayTile[1])
		 Sleep(200)
		 MouseClick ('left', $JumpButtonCoords[0],$JumpButtonCoords[1])
		 Sleep(2000)
		 ToolTip('')
		 Fighting()
	  EndIf
	  
   Case 3 ;Двигаемся на восток (Moving East)
	  ToolTip('E')
	   If $Map[2][3] = 0 Then
		 Moving()
		EndIf
	 $GrayTile = PixelSearch(597, 296, 632, 330, 0x8C8A8C)
	 If @error = 1  Then
		Moving()
		Else
		 ToolTip('Двигаемся на северо-восток')
		 MouseClick ('left', $GrayTile[0],$GrayTile[1])
		 Sleep(200)
		 MouseClick ('left', $JumpButtonCoords[0],$JumpButtonCoords[1])
		 Sleep(2000)
		 ToolTip('')
		 Fighting()
	  EndIf
   Case 4 ;Двигаемся на юго-восток (Moving South-East)
	  ToolTip('SE')
	   If $Map[3][3] = 0 Then
		 Moving()
		EndIf
	 $GrayTile = PixelSearch(595, 396, 631, 427, 0x8C8A8C)
	 If @error = 1  Then
		Moving()
		Else
		 ToolTip('Двигаемся на северо-восток')
		 MouseClick ('left', $GrayTile[0],$GrayTile[1])
		 Sleep(200)
		 MouseClick ('left', $JumpButtonCoords[0],$JumpButtonCoords[1])
		 Sleep(2000)
		 ToolTip('')
		 Fighting()
	  EndIf
   Case 5 ;Двигаемся на юг (Moving South)
	  ToolTip('S')
	   If $Map[3][2] = 0 Then
		 Moving()
		EndIf
	$GrayTile = PixelSearch(498, 397, 528, 427, 0x8C8A8C)
	 If @error = 1  Then
		Moving()
		Else
		 ToolTip('Двигаемся на северо-восток')
		 MouseClick ('left', $GrayTile[0],$GrayTile[1])
		 Sleep(200)
		 MouseClick ('left', $JumpButtonCoords[0],$JumpButtonCoords[1])
		 Sleep(2000)
		 ToolTip('')
		 Fighting()
	  EndIf
   Case 6 ;Двигаемся на юго-запад (Moving South-West)
	  ToolTip('SW')
	   If $Map[3][1] = 0 Then
		 Moving()
		EndIf
	 $GrayTile = PixelSearch(398, 398, 429, 429, 0x8C8A8C)
	 If @error = 1  Then
		Moving()
		Else
		 ToolTip('Двигаемся на северо-восток')
		 MouseClick ('left', $GrayTile[0],$GrayTile[1])
		 Sleep(200)
		 MouseClick ('left', $JumpButtonCoords[0],$JumpButtonCoords[1])
		 Sleep(2000)
		 ToolTip('')
		 Fighting()
	 	  EndIf
   Case 7 ;Двигаемся на запад (Moving West)
	  ToolTip('W')
	   If $Map[2][1] = 0 Then
		 Moving()
		EndIf
	 $GrayTile = PixelSearch(395, 296, 430, 330, 0x8C8A8C)
	 If @error = 1 Then
		Moving()
		Else
		 ToolTip('Двигаемся на северо-восток')
		 MouseClick ('left', $GrayTile[0],$GrayTile[1])
		 Sleep(200)
		 MouseClick ('left', $JumpButtonCoords[0],$JumpButtonCoords[1])
		 Sleep(2000)
		 ToolTip('')
		 Fighting()
   	  EndIf
   Case 8 ;Двигаемся на северо-запад (Moving North-West)
	  ToolTip('NW')
	   If $Map[1][1] = 0 Then
		 Moving()
		EndIf
	 $GrayTile = PixelSearch(397, 197, 431, 231, 0x8C8A8C)
	 If @error = 1  Then
		Moving()
		Else
		 ToolTip('Двигаемся на северо-восток')
		 MouseClick ('left', $GrayTile[0],$GrayTile[1])
		 Sleep(200)
		 MouseClick ('left', $JumpButtonCoords[0],$JumpButtonCoords[1])
		 Sleep(2000)
		 ToolTip('')
		 Fighting()
	  EndIf
EndSwitch
EndFunc

Func Fighting()
WinActivate("[TITLE:BlueStacks App Player for Windows (beta-1]", "")
   $Fighter = PixelSearch(980, 66, 1013, 74, 0xFFFFFF) ;Проверка на белый цвет ХП у файтера и хил
   If @error = 1 Then 
	  MouseClick('Primary', 983, 52)
   EndIf
   $Drone = PixelSearch(980, 107, 1013, 117, 0xFFFFFF) ;Проверка на белый цвет ХП у Дрона и хил
   If @error = 1 Then
	  MouseClick('Primary', 960, 94)
   EndIf
   $SelfRep = PixelSearch(846, 80, 881, 90, 0xFFFFFF) ;Проверка на белый цвет ХП у основного корабля и хил
   If @error = 1 Then
	  MouseMove(840, 75)
	  MouseDown('left')
	  Sleep(1000)
	  MouseUp('left')
   EndIf
   $Att = PixelGetColor(406, 529) ;Проверка прицепился ли к врагу корабль.
If $Att = 6369659 Or $Att = 9765363 Then
   Sleep(500)
   Fighting()
EndIf

   $Enemy = PixelSearch(897, 124, 1026, 163, 0xFECC59)
Select
Case @error = 0 
MouseMove($Enemy[0], $Enemy[1])
MouseDown('left')
Sleep(1000)
MouseUp('left')
Fighting()
Case @error = 1
   $AttackedEnemy = PixelSearch(897, 124, 1026, 163, 0xDF1C08)
   If @error = 0 Then
   Sleep(1000)
  Fighting()
  Else
Center()
EndIf
EndSelect
EndFunc

Func Center()
   $StarPort = PixelGetColor(800, 124) ;Проверка на наличие старпорта
If $StarPort = 7598175 Then
   Selling()
EndIf
   $Drop = PixelGetColor(776, 132) ;Проверка на дроп в клетке (любой)
If $Drop > 0 Then
   MouseClick('',776, 132)
EndIf
	  MouseClick("",$Center[0],$Center[1])
      MouseClick("", 512, 313)
      Sleep(3000)
	  Moving()
EndFunc
   
Func Selling()
WinActivate("[TITLE:BlueStacks App Player for Windows (beta-1]", "")
	  $Res = PixelSearch(766, 99, 812, 136, 0x7EF16C)
		 If @error = 0 Then
			MouseClick('Primary', $Res[0],$Res[1])
			Sleep(1000)
		 EndIf
Trade()
EndFunc
		
Func Trade()
   $Sell = PixelSearch(522, 189, 798, 393, 0x00FF00)
   If @error = 1 Then 
MouseClick('', 1004, 577)
Moving()
Else
   MouseClick("", $Sell[0],$Sell[1])
   Trade()
   EndIf
EndFunc

Func TogglePause()
    $Paused = Not $Paused
    While $Paused
        Sleep(100)
        ToolTip('Скрипт приостановлен')
    WEnd
    ToolTip("")
	
 EndFunc
 
Func Terminate()
   ToolTip('Скрипт остановлен')
    Exit 0
 EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Если игра запускается под Android, на AutoIt для неё бота не напишешь. AutoIt работает с виндовым API.
 
Автор
H

hxckid

Новичок
Сообщения
4
Репутация
0
Приложение Bluestacks эмулирует android среду, но работает из под Windows. Разве невозможно получить доступ к функциям и памяти в таком случае?

з.ы. Исправил тег за который получил предупреждение.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
А я без понятия даже что это за игра\приложение и вообще никогда не работал с андроидом. Но если это приложение типа "виртуальная машина для андроида" то нет, ничего не выйдет.
 
Автор
H

hxckid

Новичок
Сообщения
4
Репутация
0
Ясно, спасибо. Тогда придется обойтись тупым кликером. Пусть тогда скрипт лежит, авось кому понадобится, да под себя заточит.
 
Верх