Что нового

[World of Tanks] нужна помощь в создании бота для W.o.T

Сообщения
47
Репутация
-1
подскажите что я делаю не так?
Код:
#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 PixelGetColor(516,94) = 0x080000
                ; Начинаем выбор танка
                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
               
                ; Параметры боя
While 1
    Select
        Case WinActive("[TITLE:W.o.T. Client]","") = 0
            Exit
        Case Not WinActive("[TITLE:W.o.T. Client]","") = 0
            While 1
            $var = PixelSearch(825,568,1014,756,0xDA0000,3)
            If Not @error Then
                Send("{CTRLDOWN}")
                MouseMove($var[0],$var[1])
                Send("{CTRLUP}")
            Else
                ;Мы не нашли нужный цвет
            EndIf
            WEnd
    EndSelect
WEnd
                ; Проверка жив ли наш танк
                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
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 595
Репутация
938
Re: W.o.T

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Как правильно называть темы

"W.o.T" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, Модератор раздела.
 

yukuru

Влюбленный Бродячий Кот
Сообщения
48
Репутация
4
Re: нужна помощь в создании бота для W.o.T

а что ты хочешь делать? что не устраивает? что происходит?
 
Автор
V
Сообщения
47
Репутация
-1
Re: нужна помощь в создании бота для W.o.T

я хочу чтобы он заходил в гараж, выбирал один из 3 танков, немного в бою двигался и желательно стрелял
=======================

запуск бота
активируем окно игры
Если окно не активно оповещаем
Если окно активно,проверяем залогинен ли клиент
Если логин не совершен, совершаем его

=======================
эти функции выполняется нормально
------------------------------
а дальше проблема, может где в коде ошибка??? подскажите пожалуйста!!!
 

yukuru

Влюбленный Бродячий Кот
Сообщения
48
Репутация
4
Re: нужна помощь в создании бота для W.o.T

а в том коде что ты прислал нету функии по движению и стрельбе))

стрельба добавь

Код:
MouseDown("left")
Sleep(100)
MouseUp("left")



а движение
Код:
Send("{r}")
		Sleep(300)
		Send("{r}")
		Sleep(300)
		Send("{r}")
		Sleep(300)
 
Автор
V
Сообщения
47
Репутация
-1
Re: нужна помощь в создании бота для W.o.T

возможно ли в этод код вставить движение и стрельбу, если да то подскажите как.
Код:
Opt("MouseCoordMode", 2) ;устанавливаем координаты относительно клиента
Opt("PixelCoordMode", 2) ;то же самое
WinActivate("[TITLE:W.o.T. Client]") ;переключаемся на окно клиента
While WinActive("[TITLE:W.o.T. Client]") ;цикл пока активно окно танков делаем
If PixelGetColor(514, 48) == 0xf9f5f5 Then MouseClick("primary", 482, 33) ;если цвет кнопки в бой красный то жмем кнопку
If (PixelGetColor(207, 630) == 0x650804) and (PixelGetColor(37, 648) == 0x790805) Then send ('{Esc}') ;если сломаны: орудие и приборы наблюдения то нажимаем кнопку esc
If PixelGetColor(434, 459) == 0x888570 then MouseClick("primary", 567, 371) ;по цвету определяем активно ли меню игры и клинаем по кнопке выход из боя
If PixelGetColor(597, 437) == 0x716d5f then MouseClick("primary", 595, 437) ;по цвету определяем появилось ли окно "Вы уверены, что хотите выйти из боя" и кликаем да
If PixelGetColor(280, 216) == 0x0b0a08 then mouseclick("primary", 960, 162) ;по цвету определяе закончлся ли бой, кликаем по крестику
If (PixelGetColor(133, 662) == 0xcfc8a9) or (PixelGetColor(133, 662) == 0xD0C9AA) or (PixelGetColor(133, 662) == 0xD0C9A9) then MouseClick("primary", 266, 700) ;определяем в бою ли 1ый танк если да то переключаемся на 2ой
If (PixelGetColor(302, 662) == 0xcfc8a9) or (PixelGetColor(302, 662) == 0xD0C9AA) or (PixelGetColor(302, 662) == 0xD0C9A9) then MouseClick("primary", 435, 700) ;определяем в бою ли 2ой танк если да то переключаемся на 3ий
If (PixelGetColor(473, 662) == 0xcfc8a9) or (PixelGetColor(473, 662) == 0xD0C9AA) or (PixelGetColor(473, 662) == 0xD0C9A9) then MouseClick("primary", 102, 700) ;определяем в бою ли 3ий танк если да то переключаемся на 1ый
if PixelGetColor(462, 541) == 0xc81e22 then send('{ENTER}') ;определяем активно ли акно авторизации, если да жмем интер
WEnd ;конец цикла

заранее большое спасибо!

а в том коде что ты прислал нету функии по движению и стрельбе))
у меня вот этот кусок должен отвечать за поиск цели по цвету и стрелять, а он только стреляет :scratch:
Код:
While 1
    Select
        Case WinActive("[TITLE:W.o.T. Client]","") = 0
            Exit
        Case Not WinActive("[TITLE:W.o.T. Client]","") = 0
            While 1
            $var = PixelSearch(825,568,1014,756,0xDA0000,3)
            If Not @error Then
                Send("{CTRLDOWN}")
                MouseMove($var[0],$var[1])
                Send("{CTRLUP}")
            Else
                ;Мы не нашли нужный цвет
            EndIf
            WEnd
    EndSelect
WEnd
 

yukuru

Влюбленный Бродячий Кот
Сообщения
48
Репутация
4
Re: нужна помощь в создании бота для W.o.T

я огорчу тебя но mousemove не работает. сам сейчас бьюсь над этой проблемой
 
Автор
V
Сообщения
47
Репутация
-1
Re: нужна помощь в создании бота для W.o.T

знающие люди подскажите простой пример готового бота чтобы он двигался.
 

yukuru

Влюбленный Бродячий Кот
Сообщения
48
Репутация
4
Re: нужна помощь в создании бота для W.o.T

Код:
Opt("MouseCoordMode", 2) ;устанавливаем координаты относительно клиента
Opt("PixelCoordMode", 2) ;то же самое
WinActivate("[TITLE:W.o.T. Client]") ;переключаемся на окно клиента
While WinActive("[TITLE:W.o.T. Client]") ;цикл пока активно окно танков делаем
If PixelGetColor(514, 48) == 0xf9f5f5 Then
 MouseClick("primary", 482, 33)
sleep(60000)
Send("{r}")
        Sleep(300)
        Send("{r}")
        Sleep(300)
        Send("{r}")
        Sleep(300)
endif
 ;если цвет кнопки в бой красный то жмем кнопку
If (PixelGetColor(207, 630) == 0x650804) and (PixelGetColor(37, 648) == 0x790805) Then send ('{Esc}') ;если сломаны: орудие и приборы наблюдения то нажимаем кнопку esc
If PixelGetColor(434, 459) == 0x888570 then MouseClick("primary", 567, 371) ;по цвету определяем активно ли меню игры и клинаем по кнопке выход из боя
If PixelGetColor(597, 437) == 0x716d5f then MouseClick("primary", 595, 437) ;по цвету определяем появилось ли окно "Вы уверены, что хотите выйти из боя" и кликаем да
If PixelGetColor(280, 216) == 0x0b0a08 then mouseclick("primary", 960, 162) ;по цвету определяе закончлся ли бой, кликаем по крестику
If (PixelGetColor(133, 662) == 0xcfc8a9) or (PixelGetColor(133, 662) == 0xD0C9AA) or (PixelGetColor(133, 662) == 0xD0C9A9) then MouseClick("primary", 266, 700) ;определяем в бою ли 1ый танк если да то переключаемся на 2ой
If (PixelGetColor(302, 662) == 0xcfc8a9) or (PixelGetColor(302, 662) == 0xD0C9AA) or (PixelGetColor(302, 662) == 0xD0C9A9) then MouseClick("primary", 435, 700) ;определяем в бою ли 2ой танк если да то переключаемся на 3ий
If (PixelGetColor(473, 662) == 0xcfc8a9) or (PixelGetColor(473, 662) == 0xD0C9AA) or (PixelGetColor(473, 662) == 0xD0C9A9) then MouseClick("primary", 102, 700) ;определяем в бою ли 3ий танк если да то переключаемся на 1ый
if PixelGetColor(462, 541) == 0xc81e22 then send('{ENTER}') ;определяем активно ли акно авторизации, если да жмем интер
WEnd ;конец цикла


теперь твой код делает все тоже самое, толькокогда он наимает В БОЙ. он ждет 60 секунд и бежит вперед
 
Автор
V
Сообщения
47
Репутация
-1
Re: нужна помощь в создании бота для W.o.T

что то не хочет он бежать вперед :(

подскажите как заставить этога бота двигаться ==>>
Код:
; -30 ширина верхушки в окне эту велечину нужно отнимать по вертикали
Opt("PixelCoordMode", 2) ; Определяем пиксили от верхнего левого угла окна
Opt("MouseCoordMode",2) ; Определяем положение курсора от левого верхнего угла окна

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$WoT = GUICreate("BoT", 369, 238, 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("", 16, 104, 169, 21)
$Label2 = GUICtrlCreateLabel("(Указать через запятую)", 32, 80, 130, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("Управление чатом", 200, 8, 161, 129)
$Checkbox3 = GUICtrlCreateCheckbox("Вкл/Выкл", 208, 24, 145, 17)
$Label3 = GUICtrlCreateLabel("Сообщение", 208, 40, 62, 17)
GUICtrlCreateInput("", 208, 64, 145, 60)
GUICtrlCreateGroup("", -99, -99, 1, 1)
;$SaveSet = GUICtrlCreateButton("Сохранить настройки", 208, 144, 129, 25, $WS_GROUP)
$StartBot = GUICtrlCreateButton("Запуск", 32, 144, 129, 25, $WS_GROUP)
$Label4 = GUICtrlCreateLabel(" Для работы бота вам необходимо запустить игру в оконом режиме", 8, 176, 353, 17)
$Label5 = GUICtrlCreateLabel("и выставить разрешение 1024х768", 88, 192, 182, 17)
$Label6 = GUICtrlCreateLabel("В противном случае бот не запустится!", 72, 216, 212, 17)
GUICtrlSetColor(-1, 0xFF0000)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

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 PixelGetColor(1000,20) = 0x000000
                    ; Если логин не совершен, совершаем его
                    Sleep(3000)
                    MouseClick("",512,540,2)	
                ; Проверяем что мы в ангаре
                Case PixelGetColor(516,94) = 0x080000
                ; Начинаем выбор танка
                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

почему в этом скрипте не определяет "Проверка жив ли наш танк" и "Если танк убит выходим из боя" т.е последние 2 условия подскажите как исправить???
 

yukuru

Влюбленный Бродячий Кот
Сообщения
48
Репутация
4
Re: нужна помощь в создании бота для W.o.T

добавь строчку

Код:
msgbox(0,"","проверяем")


в часть кода где идет проверка....
может проверка идет, просто не "успевает".
у меня например не упевало))
 
Автор
V
Сообщения
47
Репутация
-1
Re: нужна помощь в создании бота для W.o.T

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



Код:
; -30 ширина верхушки в окне эту велечину нужно отнимать по вертикали
Opt("PixelCoordMode", 2) ; Определяем пиксили от верхнего левого угла окна
Opt("MouseCoordMode",2) ; Определяем положение курсора от левого верхнего угла окна

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$WoT = GUICreate("Бот для World of Tanks v.0.6.5", 395, 265, 192, 124)
$Client = GUICtrlCreateGroup("", 8, 20, 185, 129)
$AutoRelog = GUICtrlCreateCheckbox("Авто вход в игру", 16, 34, 169, 17)
$ChangTank = GUICtrlCreateCheckbox("Поиск свободного танка", 16, 50, 169, 25)
$SortLabel = GUICtrlCreateLabel("В каком порядке выбирать танк", 16, 74, 169, 17)
$SortTank = GUICtrlCreateInput("", 16, 115, 169, 21)
$Label2 = GUICtrlCreateLabel("( 1,2,3 )", 75, 90, 100, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Label8 = GUICtrlCreateLabel("= = Управление чатом = =", 220, 8, 153, 17)
GUICtrlSetColor(-1, 0xFF0000)
$Group2 = GUICtrlCreateGroup("", 200, 20, 185, 129)
$Checkbox3 = GUICtrlCreateCheckbox("Вкл/Выкл", 208, 34, 145, 17)
$Label3 = GUICtrlCreateLabel("Сообщение", 208, 54, 62, 17)
GUICtrlCreateInput("", 208, 74, 168, 63)
GUICtrlCreateGroup("", -99, -99, 1, 1)
;$SaveSet = GUICtrlCreateButton("Сохранить настройки", 208, 144, 129, 25, $WS_GROUP)
$StartBot = GUICtrlCreateButton("Запуск", 130, 164, 129, 25, $WS_GROUP)
$Label4 = GUICtrlCreateLabel(" Для работы бота вам необходимо запустить игру в оконом режиме", 15, 200, 353, 17)
$Label5 = GUICtrlCreateLabel("и выставить разрешение 1024х768", 105, 220, 182, 17)
$Label6 = GUICtrlCreateLabel("В противном случае бот не запустится!", 95, 240, 212, 17)
GUICtrlSetColor(-1, 0xFF0000)
$Label7 = GUICtrlCreateLabel("= = Управление клиентом = =", 25, 8, 153, 17)
GUICtrlSetColor(-1, 0xFF0000)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

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 PixelGetColor(1000,20) = 0x000000
                    ; Если логин не совершен, совершаем его
                    Sleep(3000)
                    MouseClick("",512,540,2)	
                ; Проверяем что мы в ангаре
                Case PixelGetColor(516,94) = 0x080000
                ; Начинаем выбор танка
                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)
				; Проверяем 4 слот
                ElseIf PixelGetColor(461,40) = 0xB02022 Then
                    Sleep(3000)
                    MouseClick("",679,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
 

desferk

Новичок
Сообщения
11
Репутация
0
Re: нужна помощь в создании бота для W.o.T

Код:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=D:\Games\Dekaron\dekaron.ico
#AutoIt3Wrapper_outfile=WoT-Stuart x64.exe
#AutoIt3Wrapper_Compression=4
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#Include <WinAPI.au3>
Local $TestX1 = 1149, $TestY1 = 62, $TestX11 = $TestX1 + 10, $TestY11 = $TestY1 + 10 ;меню?
Local $TestX2 = 1144, $TestY2 = 721, $TestX22 = $TestX2 + 5, $TestY22 = $TestY2 + 5 ;в бою?
Local $TestX3 = 469, $TestY3 = 156, $TestX33 = $TestX3 + 500, $TestY33 = $TestY3 + 150 ;убили?
Local $TestX4 = 310, $TestY4 = 150, $TestX44 = $TestX4 + 10, $TestY44 = $TestY4 + 10 ;конец боя?
Local $TestX5 = 150, $TestY5 = 28, $TestX55 = $TestX5 + 900, $TestY55 = $TestY5 + 650 ;враг?
Local $on = 0, $pos, $insider = 0, $aim, $runaim = 0, $zoom = 1, $run1 = 1
TraySetState()
TraySetToolTip("W.o.T. Stuart")
;------------------------------------
HotKeySet("{F1}", "_1") ; run bot
HotKeySet("{F2}", "_2") ; run bot
HotKeySet("{F3}", "_3") ; run bot
HotKeySet("{F4}", "_4") ; run bot
HotKeySet("{F5}", "_5") ; run bot
HotKeySet("{END}", "_OFF") ; stop bot
MsgBox(4096,"Loading.......", "For turn on/off PRESS F1-F5/end buttons on keyboard")
While 1
	Sleep(100)
	If	$on > 0 Then
		_insider()
		_battle()
	EndIf
WEnd

Func _1()
	$on = 1
	$insider = 1
EndFunc   ;==>_On
Func _2()
	$on = 2
	$insider = 1
EndFunc   ;==>_On
Func _3()
	$on = 3
	$insider = 1
EndFunc   ;==>_On
Func _4()
	$on = 4
	$insider = 1
EndFunc   ;==>_On
Func _5()
	$on = 5
	$insider = 1
EndFunc   ;==>_On

Func _OFF()
	$on = 0
	$insider = 1
EndFunc   ;==>_OFF

Func _insider()
	$PixelSearch = PixelSearch($TestX1, $TestY1, $TestX11, $TestY11, 0xDB850E, 1, 1) ;check mainwindow state if menu then enter to fight
	If Not @error Then
	$zoom = 1
	If $on = 1 then
		Sleep(100)
		MouseClick("LEFT", 175,638,5,25)
		Sleep(100)
		MouseClick("LEFT", 705,70,5,25)
	EndIf
	If $on = 2 then
		Sleep(100)
		MouseClick("LEFT", 175,638,5,25)
		Sleep(100)
		MouseClick("LEFT", 705,70,5,25)
		Sleep(100)
		MouseClick("LEFT", 347,638,5,25)
		Sleep(100)
		MouseClick("LEFT", 705,70,5,25)
	EndIf
	If $on = 3 then
		Sleep(100)
		MouseClick("LEFT", 175,638,5,25)
		Sleep(100)
		MouseClick("LEFT", 705,70,5,25)
		Sleep(100)
		MouseClick("LEFT", 347,638,5,25)
		Sleep(100)
		MouseClick("LEFT", 705,70,5,25)
		Sleep(100)
		MouseClick("LEFT", 511,638,5,25)
		Sleep(100)
		MouseClick("LEFT", 705,70,5,25)
	EndIf
	If $on = 4 then
		Sleep(100)
		MouseClick("LEFT", 175,638,5,25)
		Sleep(100)
		MouseClick("LEFT", 705,70,5,25)
		Sleep(100)
		MouseClick("LEFT", 347,638,5,25)
		Sleep(100)
		MouseClick("LEFT", 705,70,5,25)
		Sleep(100)
		MouseClick("LEFT", 511,638,5,25)
		Sleep(100)
		MouseClick("LEFT", 705,70,5,25)
		Sleep(100)
		MouseClick("LEFT", 688,638,5,25)
		Sleep(100)
		MouseClick("LEFT", 705,70,5,25)
	EndIf
	If $on = 5 then
		Sleep(100)
		MouseClick("LEFT", 175,638,5,25)
		Sleep(100)
		MouseClick("LEFT", 705,70,5,25)
		Sleep(100)
		MouseClick("LEFT", 347,638,5,25)
		Sleep(100)
		MouseClick("LEFT", 705,70,5,25)
		Sleep(100)
		MouseClick("LEFT", 511,638,5,25)
		Sleep(100)
		MouseClick("LEFT", 705,70,5,25)
		Sleep(100)
		MouseClick("LEFT", 688,638,5,25)
		Sleep(100)
		MouseClick("LEFT", 705,70,5,25)
		Sleep(100)
		MouseClick("LEFT", 856,638,5,25)
		Sleep(100)
		MouseClick("LEFT", 705,70,5,25)
	EndIf
EndIf
EndFunc
Func _battle()
	$PixelSearch = PixelSearch($TestX2, $TestY2, $TestX22, $TestY22, 0x4B4733, 1, 1) ;if in battle then
	If Not @error Then
	$runaim = 1
	_run()
	_zoom()
	EndIf
	$PixelSearch = PixelSearch($TestX3, $TestY3, $TestX33, $TestY33, 0x6CD139, 1, 1) ;if we die then
	If Not @error Then
	$runaim = 0
	$run1 = 0
	Sleep(1000)
	Send("{ESC}")
	Sleep(2000)
	Send("{TAB}")
	Sleep(1000)
	Send("{TAB}")
	Sleep(1000)
	Send("{SPACE}")
	Sleep(1000)
	Send("{LEFT}")
	Sleep(1000)
	Send("{SPACE}")
	Sleep(1000)
	Sleep(3000)
	$runaim = 0
EndIf
	$PixelSearch = PixelSearch($TestX4, $TestY4, $TestX44, $TestY44, 0xC0BA9E, 1, 1) ;if battle ends
	If Not @error Then
	$runaim = 0
	$run1 = 0
	Sleep(1000)
	Send("{ESC}")
	Sleep(3000)
	$runaim = 0
EndIf
EndFunc
Func _zoom()
	if $zoom = 1 then
	Sleep(3000)
	MouseWheel("Down",60)
	Send("{UP down}")
	Sleep(300)
	Send("{UP up}")
	$zoom = 0
	endif
EndFunc

Func _aim()
If $runaim = 1 then
	$aim = PixelSearch($TestX5, $TestY5, $TestX55, $TestY55, 0xFF1C0B, 2, 1)
	If Not @error Then
	$x1 = 683
	$x = $aim[0]
	if $x > $x1 Then
	Send("{RIGHT down}")
	Sleep(30)
	Send("{RIGHT up}")
EndIf
EndIf
EndIf
If $runaim = 1 then
	$aim = PixelSearch($TestX5, $TestY5, $TestX55, $TestY55, 0xFF1C0B, 2, 1)
	If Not @error Then
	$x1 = 683
	$x = $aim[0]
	if $x < $x1 Then
	Send("{LEFT down}")
	Sleep(20)
	Send("{LEFT up}")
EndIf
EndIf
EndIf
If $runaim = 1 then
	$aim = PixelSearch($TestX5, $TestY5, $TestX55, $TestY55, 0xFF1C0B, 2, 1)
	If Not @error Then
	$y1 = 335
	$y = $aim[1]
	if $y > $y1 Then
	Send("{DOWN down}")
	Sleep(20)
	Send("{DOWN up}")
EndIf
EndIf
EndIf
If $runaim = 1 then
	$aim = PixelSearch($TestX5, $TestY5, $TestX55, $TestY55, 0xFF1C0B, 2, 1)
	If Not @error Then
	$y1 = 335
	$y = $aim[1]
	if $y < $y1 Then
	Send("{UP down}")
	Sleep(20)
	Send("{UP up}")
EndIf
EndIf
EndIf
EndFunc
Func _run()
	$i = (Random(0,13,1))
	If $i = 0 then
	Send("{a down}")
	Sleep(Random(1000,5000))
	Send("{a up}")
	Else
	_aim()
	EndIf
	If $i = 2 then
	Send("{d down}")
	Sleep(Random(1000,5000))
	Send("{d up}")
		Else
	_aim()
	EndIf
    If $i = 7 then
	Send("{r down}")
	Sleep(Random(100,300))
	Send("{r up}")
	Send("{r down}")
	Sleep(Random(100,3000))
	Send("{r up}")
	Send("{r down}")
	Sleep(Random(100,300))
	Send("{r up}")
		Else
	_aim()
	EndIf
	If $i = 6 then
	Send("{S down}")
	Sleep(Random(500,5000))
	Send("{S up}")
		Else
	_aim()
	EndIf
	If $i = 1 then
	Send("{LEFT down}")
	Sleep(Random(100,300))
	Send("{LEFT up}")
	Else
	_aim()
	EndIf
	If $i = 3 then
	Send("{RIGHT down}")
	Sleep(Random(100,300))
	Send("{RIGHT up}")
	Else
	_aim()
	EndIf
EndFunc   ;==>_Fight


Бот написан для разрешения экрана 1366х768
думаю найти нужные пиксели не проблема ;)
Правда немного корявый вплане автоаима -))
отдаю на растерзание -))
т.к уже делаю бота на основе значений в памяти игры )
 

LTR

Знающий
Сообщения
55
Репутация
13
Re: нужна помощь в создании бота для W.o.T

vovka1021 вам не кажется что плодить темы близнецы нет смысла?

И потом мне очень понравилась Ваша фраза:
отдам бот в добрые руки. умеет заходить в игру, выбирать танки и отправлять в бой!
Вам не кажется что это наглость и не уважение? Вы представили мой исходный код, при чем даже не изменяя его!

Всем кому интересно продолжения и кто может помочь в создании бота для World Of Tanks, информацию сможете найти в этой теме [Автоматизация] Бот для игры Мир танков(WoT)
 
Автор
V
Сообщения
47
Репутация
-1
Re: нужна помощь в создании бота для W.o.T

а я не говорил что это мой! :shok:
к тому же он немного изменен. твой исходный тупо кликал после захода в ангар в одну точку, в районе логина
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 595
Репутация
938
Re: нужна помощь в создании бота для W.o.T

Прекратить срачеги :mad:
 
Автор
V
Сообщения
47
Репутация
-1
Re: нужна помощь в создании бота для W.o.T



подскажите как реализовать отправку сообщений
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$WoT = GUICreate("Бот для World of Tanks v.0.6.5", 395, 265, 192, 124)
$Client = GUICtrlCreateGroup("", 8, 20, 185, 129)
$AutoRelog = GUICtrlCreateCheckbox("Авто вход в игру", 16, 34, 169, 17)
$ChangTank = GUICtrlCreateCheckbox("Поиск свободного танка", 16, 50, 169, 25)
$SortLabel = GUICtrlCreateLabel("В каком порядке выбирать танк", 16, 74, 169, 17)
$SortTank = GUICtrlCreateInput("", 16, 115, 169, 21)
$Label2 = GUICtrlCreateLabel("( 1,2,3,4 )", 75, 90, 100, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Label8 = GUICtrlCreateLabel("= = Управление чатом = =", 220, 8, 153, 17)
GUICtrlSetColor(-1, 0xFF0000)
$Group2 = GUICtrlCreateGroup("", 200, 20, 185, 129)
$Checkbox3 = GUICtrlCreateCheckbox("Вкл/Выкл", 208, 34, 145, 17)
$Label3 = GUICtrlCreateLabel("= = Сообщение = =", 240, 54, 100, 17)
GUICtrlCreateInput("", 208, 74, 168, 63)
GUICtrlCreateGroup("", -99, -99, 1, 1)
;$SaveSet = GUICtrlCreateButton("Сохранить настройки", 208, 144, 129, 25, $WS_GROUP)
$StartBot = GUICtrlCreateButton("Запуск", 130, 164, 129, 25, $WS_GROUP)
$Label4 = GUICtrlCreateLabel(" Для работы бота вам необходимо запустить игру в оконом режиме", 15, 200, 353, 17)
$Label5 = GUICtrlCreateLabel("и выставить разрешение 1024х768", 105, 220, 182, 17)
$Label6 = GUICtrlCreateLabel("В противном случае бот не запустится!", 95, 240, 212, 17)
GUICtrlSetColor(-1, 0xFF0000)
$Label7 = GUICtrlCreateLabel("= = Управление клиентом = =", 25, 8, 153, 17)
GUICtrlSetColor(-1, 0xFF0000)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
 

ORLANGUR-M3

Новичок
Сообщения
14
Репутация
0
Доброе время суток, у меня вопрос по взаимодействию Autoit и World of Tanks в ОС Windows 7.
Я делаю автозапуск игры + автотушилку и быстрый набор сообщений.
При использовании любой функции возврата цвета из пиксела (использую _ColorGetRGB), возвращается всегда черный цвет.
Однако если клиент запустить в оконном режиме или выключить Windows Aero, то определение цвета заработает.
отсюда вопрос: как можно обойти проблему с определением цвета без переключения в оконный режим? Или посоветуйте, как переключать стиль Windows на упрощенный и обратно при помощи Autoit.
 

BearYX

Новичок
Сообщения
1
Репутация
1
Я удивлен что под танки кто то еще пишет боты. Я это дело наверное начал в числе первых и точно был первым кого за это дело забанили неадекватные админы игры :smile:
Если кому будет полезно, то выкладываю пару полезных функций для ботов WoT.

1. Функция - клик в интерфейсе игры. С какого то времени обычные клики перестали работать. Я написал эту функцию она работает нормально. Смысл в том, что человеку сложно 2 раза кликнуть мышкой в одно и тоже место. Разработчики добавили фильтр "от ботов", который легко обходится этой функцией:
Код:
Func _MouseClick($x, $y)
 MouseMove($x, $y)
 MouseDown("primary")
 Sleep(Random(100, 300, 1))
 MouseMove($x - 1, $y - 1)
 MouseUp("primary")
 MouseMove($x, $y)
 Sleep(Random(100, 300, 1))
 MouseDown("primary")
 Sleep(Random(100, 300, 1))
 MouseMove($x + 1, $y - 1)
 MouseUp("primary")
EndFunc ;==>_MouseClick


Еще одна ошибка которую я заметил в прилагаемых здесь кодах - пытаются отслеживать точки по цвету. Точек с фиксированным цветом очень мало. Большинство незначительно изменяют цвет из-за полупрозрачных масок текстур. Поэтому нужно проверять не на цвет точки а на её диапазон:
Код:
Func CheckRGB($color, $min, $max)
 Local $rgb[3][3]
 $res = True
 $rgb[2][0] = BitAND($min, Dec("FF0000")) / Dec("10000")
 $rgb[1][0] = BitAND($min, Dec("00FF00")) / Dec("100")
 $rgb[0][0] = BitAND($min, Dec("0000FF"))
 $rgb[2][1] = BitAND($color, Dec("FF0000")) / Dec("10000")
 $rgb[1][1] = BitAND($color, Dec("00FF00")) / Dec("100")
 $rgb[0][1] = BitAND($color, Dec("0000FF"))
 $rgb[2][2] = BitAND($max, Dec("FF0000")) / Dec("10000")
 $rgb[1][2] = BitAND($max, Dec("00FF00")) / Dec("100")
 $rgb[0][2] = BitAND($max, Dec("0000FF"))
 For $i = 0 To 2
  If $rgb[$i][0] > $rgb[$i][1] Or $rgb[$i][1] > $rgb[$i][2] Then
   $res = False
   ExitLoop
  EndIf
 Next
 Return $res
EndFunc ;==>CheckRGB
 

ORLANGUR-M3

Новичок
Сообщения
14
Репутация
0
[info][DAMAGE_PANEL_01]
Position_Square_1_H=76
Position_Square_1_V=38
Position_Square_2_H=105
Position_Square_2_V=36
Red=230
Green=30
Blue=30
Logic=>= <= <=
[/info]
Да, из-за альфа канала точно найти нужное событие по точному соответствию цвету не возможно.
Например для моей програмки "Автотушилка" цель программы: пока активно окно игры, искать сообщение красного цвета "Пожар!!!" в Damage Panel, и если найдет то нажать соотв. клавишу огнетушителя.

Все параметры для возможности их изменения я вынес в отдельные инишники. При этом, мне пришлось реализовать функцию нахождения этой панели (относительное начало координат) при разных разрешениях экрана (в некоторых случаях, на нестандартных монитору разрешениях игры вместо геометрических искажений появляются просто черные ограничители).
Далее я произвожу выборку всех цветов в некотором прямоугольнике и сравниваю с заданными.
Вот пример инишника:
1ые 4 строки - описывается область поиска
следующие 4- критерий поиска цвета в каждом пикселе, т.е. согласно логике должны быть выполнено условие по каждому каналу:
Red>=230 & Green<=30 & Blue <=30 (цвет каждого канала 0..255). Такого условия, согласно практике вполне достаточно чтобы отсечь случайные срабатывания и получить срабатывание на 99%.

Вариант BearYX возможно будет работать быстрее, надо проверить.

ЗЫ: Если кому надо, могу выложить свои исходники. Только врят ли что вы в них поймете :smile:
 
Верх