Что нового

[World of Tanks] Бот для игры by LTR

Автор
L

LTR

Знающий
Сообщения
55
Репутация
13
Re: [Автоматизация] Бот для игры Мир танков(WoT)

S32P87 не желаете поделиться тем что получилось?
 

S32P87

Новичок
Сообщения
7
Репутация
2
Re: [Автоматизация] Бот для игры Мир танков(WoT)

Ну еще не дееспособен полностью.
Проблема с ручной наводкой осталась буду пытаться на клаве.
MouseMove отказывается работать только в клиенте, на тесте в скринах все работает. Как доделаю поделюсь.
И уже получится бот на танк и арту. Только пт пока не знаю как делать не играл за них.
 

S32P87

Новичок
Сообщения
7
Репутация
2
Re: [Автоматизация] Бот для игры Мир танков(WoT)

Есть функция в Autoit подобная модулю в математике?
Все нашел кому интересно функция "Abs"
 

S32P87

Новичок
Сообщения
7
Репутация
2
Re: [Автоматизация] Бот для игры Мир танков(WoT)

Для случайного выбора направления
Код:
Global $var=Random(Random(1,2),3,1); генерирует случайное число
;*************************Рандомый выбор направления*******************************
If $var=1 Then; елсли 1 то
	Send ("{left Down}")
Sleep (500)
Send ("{left Up}")
EndIf
If $var=2 Then; елсли 2 то
	Send ("{right Down}")
Sleep (500);
Send ("{right Up}"); 
EndIf
If $var=3 Then; елсли 3 то
	Send ("{up Down}")
Sleep (500)
Send ("{up Up}")
EndIf
;*************************Конец рандомый выбор направления*******************************
 

Pol

Новичок
Сообщения
7
Репутация
1
Re: [Автоматизация] Бот для игры Мир танков(WoT)

LTR, а Вы не желаете поделиться тем что получилось у Вас?
 

Pol

Новичок
Сообщения
7
Репутация
1
[World of Tanks] Обсуждение процесса написания бота.

darkmor сказал(а):
...
Может лучше попробовать начать с браузерных игр? Ну или на EVE-Online, на данном форуме можно будет найти кучу готовых примеров что бы разобраться в языке.
Да, но EVE-Online игрушка платная.
 
Автор
L

LTR

Знающий
Сообщения
55
Репутация
13
Re: [Автоматизация] Бот для игры Мир танков(WoT)

Pol сказал(а):
LTR, а Вы не желаете поделиться тем что получилось у Вас?
Все что у меня есть я уже выложил, просто нет времени сейчас заняться ботом... :( Диплом и работа съели.
 

Pol

Новичок
Сообщения
7
Репутация
1
Re: [Автоматизация] Бот для игры Мир танков(WoT)

А можно как для тупых выложить весь скрипт сразу? :whistle:
А то у меня проблемы на уровне входа в игру. См тему форума :
* Русское сообщество AutoIt > * Продвинутая автоматизация > * Разработка ботов (Модератор: Belfigor) > * Не выполняется функция MouseClick
 
Автор
L

LTR

Знающий
Сообщения
55
Репутация
13
Re: [Автоматизация] Бот для игры Мир танков(WoT)

Pol сказал(а):
А можно как для тупых выложить весь скрипт сразу? :whistle:
А то у меня проблемы на уровне входа в игру. См тему форума :
* Русское сообщество AutoIt > * Продвинутая автоматизация > * Разработка ботов (Модератор: Belfigor) > * Не выполняется функция MouseClick
Вот весь код касательно интерфейса управления и управления игрой исключая бой(коменты смотри по коду):
Код:
#comments-start
Бот для игры Мир танков
Код:
Графический интерфейс
Запуск бота
Релогин
Выбор танка(на дороботке)
Выход из боя(После смерти)
#comments-end
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

; Определяем параметры окна
Opt("PixelCoordMode", 2)
Opt("MouseCoordMode",2)

; Рисуем GUI интерфейс для управления ботом
$WoT = GUICreate("BoT", 200, 220, 192, 124)
$Client = GUICtrlCreateGroup("Управление клиентом", 8, 8, 185, 129)
$AutoRelog = GUICtrlCreateCheckbox("Авто вход в игру", 16, 24, 169, 17)
$ChangTank = GUICtrlCreateCheckbox("Поиск свободного танка", 16, 40, 169, 25)
$SortLabel = GUICtrlCreateLabel("В каком порядке выбирать танк", 16, 64, 169, 17)
$SortTank = GUICtrlCreateInput("123", 16, 104, 169, 21)
$StartBot = GUICtrlCreateButton("Запуск", 32, 154, 129, 25, $WS_GROUP)
$SaveSet = GUICtrlCreateButton("Сохранить настройки", 32, 180, 129, 25, $WS_GROUP)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
		; попытка сохранять параметры в Ini
		Case $SaveSet
			$ARState = GUICtrlRead($AutoRelog)
			$CTState = GUICtrlRead($ChangTank)
			$STState = GUICtrlRead($SortTank)
			If $ARState = 1  Then
				IniWrite("Bot.ini", "ClConfig", "AutoRelogin", 1)
			Else
				IniWrite("Bot.ini", "ClConfig", "AutoRelogin", 0)
			EndIf
			If $CTState = 1  Then
				IniWrite("Bot.ini", "ClConfig", "ChangeTank", 1)
			Else
				IniWrite("Bot.ini", "ClConfig", "ChangeTank", 0)
			EndIf
			IniWrite("Bot.ini", "ClConfig", "SortTank", $STState)
		; запуск бота
		Case $StartBot
			; активируем окно игры
			WinActivate("[TITLE:W.o.T. Client]","")
			While 1
            Select             
                ; Если окно не активно оповещаем
                Case WinActive("[TITLE:W.o.T. Client]","") = 0
                    MsgBox(0,"Сообщение","Окно игры не активно, бот остановлен")
                    ExitLoop
                ; Если окно активно,проверяем залогинен ли клиент
				Case Not WinActive("[TITLE:W.o.T. Client]","") = 0
                    ; Если логин не совершен, совершаем его
					PixelSearch(0,0,500,500,0x000000,100)
					If @error=0 Then
						Sleep(1000)
						MouseClick("",512,540,2)
					EndIf
					
				; Необходимо добавить проверку нахождения в ангаре	
				
                ; Начинаем выбор танка
                Case Not WinActive("[TITLE:W.o.T. Client]","") = 0
                ; Проверяем 1 слот
                If PixelGetColor(461,40) = 0xB02022 Then
                    Sleep(3000)
                    MouseClick("",180,657,5)
                    Sleep(3000)
                    MouseClick("",511,46,5)
                ; Проверяем 2 слот
                ElseIf PixelGetColor(461,40) = 0xB02022 Then
                    Sleep(3000)
                    MouseClick("",348,657,5)
                    Sleep(3000)
                    MouseClick("",511,46,5)
                ; Проверяем 3 слот
                ElseIf PixelGetColor(461,40) = 0xB02022 Then
                    Sleep(3000)
                    MouseClick("",511,657,5)
                    Sleep(3000)
                    MouseClick("",511,46,5)
                EndIf
				
                ; Параметры боя
				
				; Проверка жив ли наш танк
				Case Not WinActive("[TITLE:W.o.T. Client]","") = 0
					PixelSearch(0,0,500,500,0x000000,100)
					If @error=0 Then
						Sleep(3000)
						Send("{R 2}")
					EndIf
				; Если танк убит выходим из боя	
                Case Not WinActive("[TITLE:W.o.T. Client]","") = 0
                    Sleep(3000)
                    Send("{ESC}")
                    Sleep(3000)
                    MouseClick("",510,372,5)
            EndSelect          
            WEnd
    EndSwitch
WEnd
 

Pol

Новичок
Сообщения
7
Репутация
1
Re: [Автоматизация] Бот для игры Мир танков(WoT)

спс :laugh:
 
Автор
L

LTR

Знающий
Сообщения
55
Репутация
13
Re: [Автоматизация] Бот для игры Мир танков(WoT)

Для себя на заметку:
http://autoit-script.ru/index.php?topic=4375.0
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: [Автоматизация] Бот для игры Мир танков(WoT)

{CodeWarn}
 
Сообщения
47
Репутация
-1
Re: [Автоматизация] Бот для игры Мир танков(WoT)

подскажите как заставить бот двигаться??? и если можно пример рабочего скрипта. Спасибо!
 

gagarin74

Новичок
Сообщения
44
Репутация
0
Re: [Автоматизация] Бот для игры Мир танков(WoT)

Бот для арты.
Иногда попадает.
1 Для 60% наведения необходимо сменить прицел (по умолчанию в нем присутствует тот же цвет что и танки противника) -в итоге получаться что он ,часто наводиться сам на себя, пока не зарядится.
2 глобальное решение -пока руки не доходят Надо поменять цвет ромбика противника с красного на голубой :laugh:

и главное!!!!!!!!

Как засчитать количество(время) нажатие кнопки влево(или вправо это пока не важно) что бы допустим мышку сдвинуть с одних координат на точные другие координаты(предположем с координат 300,300 на 300,340) - как только кто подскажет будет 100% рабочий бот!!!


Код:
For $a=1 To 2000000
	
	$esc =PixelSearch( 1168, 240, 1176, 246, 0x393429, 10 )
	if  Not @error Then
	;	Send("{Esc}")
	Sleep (200)
	EndIf
	
$Gold =PixelSearch( 1340, 757, 1391, 783, 0xBD8E4A, 10 )
 If Not @error Then
MouseMove(731, 70)
MouseClick( "left" )
EndIf

$coord = PixelSearch( 1222, 681, 1439, 892, 0xFF0000, 10 )
If Not @error Then
  
   Send("{LCTRL}")
   MouseMove( $coord[0],$coord[1])
   MouseClick( "right" )

For $G=1 To 80
$co = PixelSearch( 22, 38, 1431, 663, 0x2920FF, 10 );0x2920FF

If Not @error Then 
MouseMove( $co[0],$co[1]); меняющиещя координаты цели
;модуль точного наведения
$CX=724 ; координаты центра экрана 
$CY=404 ;координаты центра экрана 
If $co[0]<$CX Then
	Send("{LEFT down}")
Else
	Send("{LEFT up}")
EndIf

If $co[0]>$CX Then
	Send("{RIGHT down}")
Else
	Send("{RIGHT up}")
EndIf

If $co[1]>$CY Then
	Send("{DOWN down}")
Else
	Send("{DOWN up}")
EndIf

If $co[1]<$CY Then
	Send("{UP down}")
Else
	Send("{UP up}")
EndIf
If $co[0]=$CX And $co[1]=$CY Then
	
	
Sleep (200)
MouseClick( "left" )
 ;If $G>48 Then MsgBox(0, "X and Y are:", $co[0] & "," & $co[1])
	 ;MouseClick( "left" )
	;EndIf

EndIf
;If $G>70 Then
	;MouseClick( "left" )
	;MsgBox(0, "X and Y are:", $co[0] & "," & $co[1])
	;EndIf
EndIf
  Next
  
;MouseClick( "left" )


  
 ;Send("{LCTRL down}")
	;MsgBox(0, "X and Y are:", $coord[0] & "," & $coord[1])
EndIf
Next
 
Автор
L

LTR

Знающий
Сообщения
55
Репутация
13
Re: [Автоматизация] Бот для игры Мир танков(WoT)

Всем добрый день! Появилось время снова позаниматься ботом :smile:
Сразу перейду к делу:
1 Для 60% наведения необходимо сменить прицел (по умолчанию в нем присутствует тот же цвет что и танки противника) -в итоге получаться что он ,часто наводиться сам на себя, пока не зарядится.
2 глобальное решение -пока руки не доходят Надо поменять цвет ромбика противника с красного на голубой

1) Не обязательно менять прицел я эту проблему предпочел решить так:
На всех танках верх башни(чаще всего точный выстрел приходится на нацеливание в башню) выкрасил в такой цвет #5BE8E3, ниже во вложениях(1,2) есть примеры, также не придется наводиться по ромбику, наводка по башне более точная.

2) Определение карты:
Нашел самый простой способ пожалуй, в каталогах с игрой, а точнее res\gui\maps\icons\map\screen, лежат картинки экранов при загрузки боя, каждая картинка соответствует своей карте. Для того чтобы точно определить на какой карте предстоит играть, я каждую карту пометил своим цветом, пример во вложении(3).
Код:
#comments-start
Маркеры карт(номера карт указаны как в клиенте):
1) ff0000 - Карелия
2) ff0099 - Малиновка
4) cc3399 - Химельсдорф
5) cc99ff - Прохоровка
5) 6600ff - Энск
6) 3300ff - Ласвиль
8) ffffff - Руинберг
10) ff9999 - Рудники
11) 660000 - Мурованка
13) 666666 - Эрленберг
15) 99ff99 - Комарин
18) 33ff33 - Утес
19) 003300 - Монастырь
23) 000000 - Вестфилд
28) ffff66 - Песчаная река
29) 999933 - Эл-Халлуф
34) 006600 - Редшир
35) 996600 - Степи
37) 666633 - Перевал
38) 6699cc - Заполярье
#comments-end

3) Определение стороны на карте:
Для того чтобы определить сторону на карте есть предложение использовать стандартные изображения мини карт, Пример определения стороны показан на вложении(4), и определяется цветами желтым и синим, исходя из того к какому цвету мы ближе тот цвет и будет служить переменной для начала отправной точки, а также выбора цвета "лабиринта".

4) Движение:
Для движения по карте хочу попробовать использовать Волновой алгоритм перемещения, в данном случае в зависимости от стороны будет свой маршрут движения, вложение(4) дорожки указаны белым и черным цветом. В дальнейшем мини карты можно будет более развернуто доработать.
Единственная трудность, пока не могу разобраться непосредственно с самим алгоритмом волнового движения, пока курю исходник и вникаю.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: [Автоматизация] Бот для игры Мир танков(WoT)

Волновой алгоритм без "ректальной оптимизации" не вывезет расчет маршрута на таких площадях, если уменьшать шаг сетки координат то тогда упадет точность перемещения. Тебе надо использовать A* или алгоритм Дийкстры. Они базируются на нодах.


Добавлено:
Сообщение автоматически объединено:

И волновой алгоритм для работы требует геодату содержащую в себе информацию о каждой единице двумерного пространства карты.


Добавлено:
Сообщение автоматически объединено:

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

Revenant

Новичок
Сообщения
13
Репутация
0
Re: [Автоматизация] Бот для игры Мир танков(WoT)

тоже пишу своего бота для вота, пока добрался пожалуй только до вашего уровня...напрягает ватный интерфейс вота, не всегда проходят клики, дублирую их по 2-3 раза со слипиками.также никто не знает, как отключить возможность клиента скринить?скрины от него получаются уже сжатыми...было бы намного проще определять нужные цвета по скринам.именно на ловлю удачного момента уходит больше всего времени.эх сделать бы как-нить, чтоб покататься в режиме бога...
1) Не обязательно менять прицел я эту проблему предпочел решить так:
а френдлифаера в этом случае не получается?думаю надо сначала искать ярлычок, а потом сделать условие для поиска башни в уже менее больших координатах.
...
попробовал исходники арт бота, который тут выложен...либо я туплю, либо уже не актуально.размер окошка миникарты конечно подгонял.
...
3) Определение стороны на карте:
а где ты карту нашел?я только тут World_of_Tanks\res\gui\maps\icons\map\ и то это просто картинки, из них миникарта не грузится...они походу в флешку вшиты.
 
Сообщения
47
Репутация
-1
Re: [World of Tanks] Бот для игры.

как написать чтобы движение было "вперед и прямо" и чтобы эти кнопки были нажаты несколько секунд???
если несложно "тыкните" в справку где это написано
 

clown

Новичок
Сообщения
28
Репутация
3
Re: [World of Tanks] Бот для игры.

командой Send() пробовал?

в справочнике описано

SendKeyDownDelay Продолжительность удержания клавиши в нажатом состоянии до ее освобождения. Используется в приложениях, фиксирующих продолжительность нажатия клавиш, а также во многих играх.

Время в миллисекундах (стандартное значение - 5).

Код:
Opt("SendKeyDownDelay", 10000);удержание 10 сек

Send("{a down}") ;Нажать клавишу A
Send("{a up}") ;Освободить клавишу A


на практике не испытывал
 
Верх