Здравствуйте, форумчане.
Прошу прощения, за вопрос по набившей оскомину теме, однако Поиск не дает понимания.
Предисловие: я решил вспомнить старые времена и поиграть в Diablo II. Однако классика или LoD, уже не интересны, решил попробовать мод. Нашел для себя подходящий, даже с сервером живым. Однако пока играю в Single.
Завязка: в моде очень много крафта. Членом сообщества много версий назад была написана утилита, с функцией кликера и OCR. Кликер, уже фактически не работает, однако OCR - изумительный, скорость работы особенно радует. Я решил написать свой кликер, который использует эту утилиту, для распознавания текста.
EDIT: В связи с вопросами в личку, а также убедившись, что это скорее согласуется с правилами раздела, чем противоречит им, дополняю пост.
Ссылка на игру: http://us.blizzard.com/en-us/games/d2/
Что важнее ссылка на мод: http://www.medianxl.com/
Ссылка на утилиту: http://grig.vlexofree.com/mxl/d2clicker.html
Суть: Утилита висит как неактивное окно, можно даже свернуть. У неё есть хоткеи. По хоткею "\" (BackSlash), утилита сканирует изображение, и выдирает текст (свойства предмета), а дальше сравнивает с тем, что написано в ее конфиге и выдает прямо в окне Диабло строчку, совпало или нет. Мне остается только проверить эту строчку по одному пикселю(черный или белый). К сожалению, эта программа не ловит нажатия клавиши большинством методов. На данный момент у меня работает только Send. А от него хотелось бы уйти, в надежде на то, что в дальнейшем, смогу сделать кликер с возможностью минимизации.
Для теста, я максимально упростил функцию, вот что получилось:
Учитывая, что AutoIt я использую впервые, думаю вы убедились, что поиск был изучен -)
Все что закоментировано - испробовано. И все не работает. То есть сама Диабла нажатие воспринимает отлично, и в чате видно, и если хоткеи назначать все работает, вплоть до ESC. А вот утилита игнорирует все кроме Send()
Вариант с IO-port я пока, если честно только попробовал, он не сработал вообще никак. Может быть чего-то не доделал, но по-крайней мере не ругается.
Я бы, может даже пропустил это пока мимо головы, но у меня такое ощущение, что в процессе написания самого бота, был момент, когда я как раз тестировал проверку функции считывания, и она работала на ControlSend(), а потом дописав все остальное и причесав, я это испортил. Писал на дропбоксе, так что отчасти даже были сохранены предыдущие версии, в том числе и те, где как раз тестировал, но они тоже не сработали. Может быть это и глюк.
В любом случае, у меня вопрос к знатокам тонкостей, может у вас есть какие-то идеи?
Заключение: зависит целиком от вас :IL_AutoIt_1:
Прошу прощения, за вопрос по набившей оскомину теме, однако Поиск не дает понимания.
Предисловие: я решил вспомнить старые времена и поиграть в Diablo II. Однако классика или LoD, уже не интересны, решил попробовать мод. Нашел для себя подходящий, даже с сервером живым. Однако пока играю в Single.
Завязка: в моде очень много крафта. Членом сообщества много версий назад была написана утилита, с функцией кликера и OCR. Кликер, уже фактически не работает, однако OCR - изумительный, скорость работы особенно радует. Я решил написать свой кликер, который использует эту утилиту, для распознавания текста.
EDIT: В связи с вопросами в личку, а также убедившись, что это скорее согласуется с правилами раздела, чем противоречит им, дополняю пост.
Ссылка на игру: http://us.blizzard.com/en-us/games/d2/
Что важнее ссылка на мод: http://www.medianxl.com/
Ссылка на утилиту: http://grig.vlexofree.com/mxl/d2clicker.html
Суть: Утилита висит как неактивное окно, можно даже свернуть. У неё есть хоткеи. По хоткею "\" (BackSlash), утилита сканирует изображение, и выдирает текст (свойства предмета), а дальше сравнивает с тем, что написано в ее конфиге и выдает прямо в окне Диабло строчку, совпало или нет. Мне остается только проверить эту строчку по одному пикселю(черный или белый). К сожалению, эта программа не ловит нажатия клавиши большинством методов. На данный момент у меня работает только Send. А от него хотелось бы уйти, в надежде на то, что в дальнейшем, смогу сделать кликер с возможностью минимизации.
Для теста, я максимально упростил функцию, вот что получилось:
Код:
Global $fActive = False
Global $hWndDi2
Opt("WinTitleMatchMode", 2)
Opt("SendKeyDownDelay",5) ;or 0 ;or 200 ;or even 2000
HotKeySet("{NUMPAD7}", "_Start") ;bind start/break/finish buttons for script
HotKeySet("{NUMPAD8}", "_Break")
HotKeySet("{NUMPAD5}", "_Terminate")
Func _Start()
$hWndDi2 = WinGetHandle("[CLASS:Diablo II]")
;$hWndDi2 = WinGetHandle("Diablo II")
;MsgBox(0,"",$hWndDi2)
;~ DllOpen("WinIo.dll")
;~ DllCall("WinIo.dll", "bool", "InitializeWinIo")
$fActive = True
EndFunc
Func _Break()
;~ DllCall("WinIo.dll", "none", "ShutdownWinIo")
;~ DllClose("WinIo.dll")
$fActive = False
EndFunc
Func _Terminate()
_Break()
Exit 0
EndFunc
While 1
If $fActive Then
;ControlSend("Diablo II","","","{|}")
;ControlSend($hWndDi2,"","","{|}")
;ControlSend("Diablo II","",$hWndDi2,"{|}")
;DllCall("user32.dll", "long", "PostMessage", "HWND", $hWndDi2, "int", 0x0100, "int", 0xDC,"int", 0)
If WinActive($hwndDi2) Then
Send("{\}")
EndIf
; wSend("\")
Sleep(500)
Else
Sleep(100)
EndIf
WEnd
;got this from http://autoit-script.ru/index.php/topic,14307.msg91374.html#msg91374
;should check more here http://www.autoitscript.com/forum/topic/121084-io-port-functions-x64-parallel-port-io-keyboard-etc-restore-pc-speaker-beep/
Func wSend($Param1, $Param2 = 300, $Param3="no param")
local $wkey[2]
$wkey[0] = "0x2B" ;got table of codes here: http://stanislavs.org/helppc/make_codes.html
$wkey[1] = "0xAB"
DllCall("WinIo.dll", "bool", "SetPortVal", "word", 0x64, "dword", 0xD2, "byte", 1) ; cmd byte
sleep(30)
DllCall("WinIo.dll", "bool", "SetPortVal", "word", 0x60, "dword", $wkey[0] , "byte", 1) ; +key
Sleep($Param2)
DllCall("WinIo.dll", "bool", "SetPortVal", "word", 0x64, "dword", 0xD2, "byte", 1) ; cmd byte
sleep(30)
DllCall("WinIo.dll", "bool", "SetPortVal", "word", 0x60, "dword", $wkey[1], "byte", 1) ; -key
Sleep(Random(30,40))
EndFunc
Учитывая, что AutoIt я использую впервые, думаю вы убедились, что поиск был изучен -)
Все что закоментировано - испробовано. И все не работает. То есть сама Диабла нажатие воспринимает отлично, и в чате видно, и если хоткеи назначать все работает, вплоть до ESC. А вот утилита игнорирует все кроме Send()
Вариант с IO-port я пока, если честно только попробовал, он не сработал вообще никак. Может быть чего-то не доделал, но по-крайней мере не ругается.
Я бы, может даже пропустил это пока мимо головы, но у меня такое ощущение, что в процессе написания самого бота, был момент, когда я как раз тестировал проверку функции считывания, и она работала на ControlSend(), а потом дописав все остальное и причесав, я это испортил. Писал на дропбоксе, так что отчасти даже были сохранены предыдущие версии, в том числе и те, где как раз тестировал, но они тоже не сработали. Может быть это и глюк.
В любом случае, у меня вопрос к знатокам тонкостей, может у вас есть какие-то идеи?
Заключение: зависит целиком от вас :IL_AutoIt_1: