Что нового

[Легенда: Наследие Драконов] Обсуждение процесса написания бота.

Автор
Z

zoxer1

Знающий
Сообщения
72
Репутация
6
Re: [Автоматизация] Бот для Легенды Наследия Драконов

Belfigor сказал(а):
Ну или в память клиента впиваться. Но у них клиент - это просто браузер ихней разработки.
в принципе понятно... но как это сделать... не представляю как это можно сделать :(
 

axlwor

Скриптер
Сообщения
657
Репутация
147
Re: [Автоматизация] Бот для Легенды Наследия Драконов

Попробуй здесь почитать
 

clown

Новичок
Сообщения
28
Репутация
3
Re: [Автоматизация] Бот для Легенды Наследия Драконов

Тут мы ищем кустик
Код:
#include <IsPressedEx.au3>
WinWaitActive("Легенда: Наследие Драконов")
$StartCoordX = 250
$StartCoordY = 182
$EndCoordX = 998
$EndCoordY = 930
$SearchColor = 0xFF6BFF;0x4C7F3D
$Find = 0 ; переменная Нашел-Нет
$Hunt = 0 ; переменная локации

HotKeySet("!x", "_Quit")
$hU32_DllOpen = DllOpen("User32.dll")

CheckArea ()

Search()
While 1
    $iRet = _IsPressedEx("[:ALLKEYS:]", $hU32_DllOpen)
    Sleep(10)   
WEnd

;Search()
Func Search()
    $YSector = 0
    $Find = 0
    ToolTip("Начинаю поиск", 100, 300)
    While $YSector <= 19 AND $Find <> 1
        $XSector = 0
        While $XSector <= 19 AND $Find <> 1     
            ToolTip("Сканирование", 100, 300)
            $AlfaX = ($EndCoordX - $StartCoordX) / 20 
            $AlfaY = ($EndCoordY - $StartCoordY) / 20 
            $coord = PixelSearch( $StartCoordX+$AlfaX * $XSector, $StartCoordY+$AlfaY * $YSector, $StartCoordX+$AlfaX * ($XSector+1), $StartCoordY+$AlfaY * ($YSector+1), $SearchColor, 10 );
            If Not @error Then
                BusyTest ($coord[0], $coord[1])         
            EndIf
            $XSector = $XSector + 1
        WEnd
        $YSector = $YSector + 1
    WEnd
    If $Find = 0 Then
        HuntArea ()
    EndIf
EndFunc


Func BusyTest ($Cord_X, $Cord_Y) ; проверка на занятость кустика 
    $busy = PixelSearch($Cord_X-30, $Cord_Y-30, $Cord_X+20, $Cord_Y+20, 0xFFEB00, 15)
    If NOT @error Then
        $Find = 0
    Else
        ToolTip("Найден!!!", 100, 300)
        MouseMove($Cord_X , $Cord_Y)
        Sleep(Random(100, 200))
        MouseClick("left")
        Sleep(Random(100, 200))
        MouseClick("left")
        $Find = 1
        Sleep(Random(18000, 19000))
        If PixelGetColor ( 656, 592 ) = 16777168 Then
            MouseMove(623, 596)
            Sleep(150)
            MouseClick("left")
            Sleep(800)
        EndIf
        
        Search()
    EndIf   
EndFunc

Func CheckArea ()
    ToolTip("ПРоверка локации", 100, 300)
    If PixelGetColor ( 596, 135 ) = 10354688 Then
        $Hunt = 0
    EndIf
    
    If PixelGetColor ( 597, 149 ) = 10682368 Then
        $Hunt = 1
    EndIf
    
    If PixelGetColor ( 622, 148 ) = 11927552 Then
        $Hunt = 2
    EndIf
    
    If PixelGetColor ( 623, 137 ) = 11927552 Then
        $Hunt = 3
    EndIf
EndFunc

Func HuntArea ()
    ToolTip("Переход...", 100, 300)
    Select
        Case $Hunt = 0
            MouseMove(569, 155)
            Sleep(Random(150, 200))
            MouseClick("left")
        Case $Hunt = 1
            MouseMove(644, 158)
            Sleep(Random(150, 200))
            MouseClick("left")
        Case $Hunt = 2
            MouseMove(644, 135)
            Sleep(Random(150, 200))
            MouseClick("left")
        Case $Hunt = 3
            MouseMove(571, 137)
            Sleep(Random(150, 200))
            MouseClick("left")          
    EndSelect
    $Hunt += 1
    If $Hunt > 3 Then
        $Hunt = 0
    EndIf
    Sleep( Random(500, 2000))
    Search()
EndFunc

Func _Quit()
    DllClose($hU32_DllOpen)
    Exit
EndFunc

а что-то подобное на предмет поиска моба можно осуществить?
если да, прошу покажите на примере... ммм... крэтса
 

Belfigor

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

Просто переделай поиск кустика в поиск моба, если ты будешь искать его графическим методом, алгоритм поиска будет точно такой же.
 

clown

Новичок
Сообщения
28
Репутация
3
Re: [Автоматизация] Бот для Легенды Наследия Драконов

Belfigor сказал(а):
Просто переделай поиск кустика в поиск моба, если ты будешь искать его графическим методом, алгоритм поиска будет точно такой же.
на примере того же крэтса:
никак не могу найти на нем уникальный пиксель, все время тыкает на первый попавшийся такой цвет и попадает на локацию(как как в ней присутствуют все цвета крэтса(ну или почти все)) и дальше пишет типа нашел и ничего больше не происходит, вот как описать, что если бот нашел пиксель и кликнул 2 раза по нему, но в бой не перешел, то бот продолжает поиск такого пикселя, убрав из поиска координату прошлого пикселя?


PS: компилятор ругается на #include <IsPressedEx.au3>
что это и где достать?
 

Bloodrinker

<Блуждающий...>
Сообщения
228
Репутация
19
Re: [Автоматизация] Бот для Легенды Наследия Драконов

чтот почитал я сейчас код, так и не понял, зачем там это user32.dll, а также не понял в функции search() почему там в Pixelsearch все перемножается и делится чтото, обьясните)
 

Belfigor

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

Ну попробуй описать поиск группы пикселей а не один, продолжающийся пиксельсерч есть тут: http://autoit-script.ru/index.php?topic=182.0
 

clown

Новичок
Сообщения
28
Репутация
3
Re: [Автоматизация] Бот для Легенды Наследия Драконов

зарандомим по секторам, так палева меньше
Код:
...While $YSector <= 19 AND $Find <> 1
        $XSector = Random(1, 19)
        While $XSector <...



есть вопрос:
Код:
$strikeout = Random(1, 3)
Select
Case $strikeout = 1 ; в голову
	UpStrike()
Case $strikeout = 2 ; в корпус
	RightStrike()
Case Else ; в ноги
	DownStrike()
EndSelect


почему то выполняется только последний case. подскажите, пожалуйста
 

Belfigor

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

Потому что у тебя указано чёткое совпадение:
При 1 - в голову
При 2 - в корпус
Что-то другое - в ноги.

Посмотрим как работает команда (Random 1,3)
Код:
MsgBox(0,0,Random(1,3))

Результат: 2.37235367204994
Твой скрипт всегда видит не 1 или 2, он всегда видит число с плавающей запятой отличное от 1 или 2 и успешной в его случае является команда "Case Else". Чтобы рандомиться по целым числам тебе надо задать опцию рандома "1"
Код:
MsgBox(0,0,Random(1,3, 1))

В этом случае ты будешь получать целое число.
 

clown

Новичок
Сообщения
28
Репутация
3
Re: [Автоматизация] Бот для Легенды Наследия Драконов

Belfigor сказал(а):
Код:
MsgBox(0,0,Random(1,3, 1))

В этом случае ты будешь получать целое число.

спасибо, теперь прыгаем по двум Case - 1 и 3... только почему-то Case 2 не используется вообще...



разобрался, только не понял почему так получается:
при Swich Case EndSwich выполняется либо Case 1 либо Case 3, поставил Select Case EndSelect, теперь стал выполнять все Case...
 

clown

Новичок
Сообщения
28
Репутация
3
Re: [Автоматизация] Бот для Легенды Наследия Драконов

решил я автоматизировать процесс ведения боя, но почему-то функция выполняется лишь единожды.
скажите, пожалуйста, в чем моя ошибка?

Код:
Func Boi()
        $endround = PixelGetColor(357, 307) ; ищем пиксель таблички конца боя
        While $endround <> 7995392 ; пока не нашли
	        $strikepole1 = PixelGetColor(304, 317) ; ищем поле с мечами
	        While $strikepole1 <> 2252445 ; пока не нашли 
		        Sleep(1000) ; спим
		        $strikepole1 = PixelGetColor(308, 321) ; ищем
	        WEnd 
	        $strikeout = Random(1, 3, 1) ; выбираем удар
	        Select
	        Case $strikeout = 1 ; в голову
		        UpStrike()
	        Case $strikeout = 2 ; в корпус
		        RightStrike()
	        Case Else ; в ноги
	    	        DownStrike()
	        EndSelect
	        Sleep(Random(100, 500)) ; спим
	        $endround = PixelGetColor(357, 307) ; ищем
        WEnd
EndFunc
 

Belfigor

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

clown сказал(а):
решил я автоматизировать процесс ведения боя, но почему-то функция выполняется лишь единожды. скажите, пожалуйста, в чем моя ошибка?
Код:
While $endround <> 7995392 ; пока не нашли
Нашли => цикл завершили
ПОпробуй так:
While 1
Boi()
WEnd
 

clown

Новичок
Сообщения
28
Репутация
3
Re: [Автоматизация] Бот для Легенды Наследия Драконов

Belfigor сказал(а):
Нашли => цикл завершили
ПОпробуй так:
While 1
Boi()
WEnd
не понял куда вписывать этот кусок, вписал в самом конце кода программы, но опять же для каждого удара приходится нажимать задействованный ХотКей
Код:
HotKeySet("b", "Boi")

в самой функции Boi() поменять что-то надо?
 

Belfigor

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

Я к тому, что твоя функция Boi() в принципе не бесконечна и теоретически исходя из кода должна заканчиваться по окончанию боя. Чтобы в следующем бою она сработала тебе надо еще раз ее вызвать. Я просто предложил тебе ее саму заключить в бесконечный цикл.
 

clown

Новичок
Сообщения
28
Репутация
3
Re: [Автоматизация] Бот для Легенды Наследия Драконов

Belfigor сказал(а):
Я к тому, что твоя функция Boi() в принципе не бесконечна и теоретически исходя из кода должна заканчиваться по окончанию боя. Чтобы в следующем бою она сработала тебе надо еще раз ее вызвать. Я просто предложил тебе ее саму заключить в бесконечный цикл.
понял... но вопрос немного не в том заключался, видимо, я немного не точно выразился.
зашел в бой, нажал "b" и ничего не происходит, так как не появилось еще поле с мечами(выбор удара), после того как появилось поле выбора удара, необходимо опять нажать "b", чтобы был произведен удар... И вот именно на этом месте функция и заканчивает свое выполнение, и чтобы нанести следующий удар, приходится заново вызывать эту функцию.
вот тут и вопрос, что надо добавить/изменить в коде, чтобы эта функция самостоятельно производила все удары до конца боя(пока не будет найден $endround, равный 7995392)

разобрался... надо было всего лишь записать цвет в десятичном значении... теперь летает на ура :smile:
 

clown

Новичок
Сообщения
28
Репутация
3
Re: [Автоматизация] Бот для Легенды Наследия Драконов

может есть какие-то идеи по созданию бота?
 

Belfigor

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

Я даже не знаю что это за игра, так что максимум чем могу помочь это каким-то распространенным советом
39.gif
 

clown

Новичок
Сообщения
28
Репутация
3
Re: [Автоматизация] Бот для Легенды Наследия Драконов

это, наверное, значит, что стоит зайти посмотреть эту игру, может и идеи появятся...
подробно о ней можно прочитать на википедии(ru.wikipedia.org/wiki/Легенда:_Наследие_Драконов), там же есть ссылки на сервера
 

Belfigor

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

Браузерка! Чур меня!
48.gif
 
Верх