Бота в целом написал, но! не получается без участия мышки выбрать куда бить и ставить блок.
Прикрепил msg.exe не получилось, превышает максимальный размер 200кв(, т.к. без него не получается нажать на сообщение о принятии боя.....скрипт который под spoiler`ом просто висит..........
Вот код msg.exe:
Если вы скрипт запустите, он откроет игру, откроет станицу с выбором боя и примет бой это все без мышки, а дальше выбор ударов и другого с мышкой что вы и увидите. Кликание мышкой сделано в этой функции _new_click($id_name) , $id_name - название блока или удара, оно выбирается рандомно в функции _fight().
Спасибо.
Код:
#include <IE.au3>
Global $health
Global $text_info_health = ""
Global $text_info_run_func = ""
Global $oIE = _IECreate("http://haddan.ru/main.php")
$sText = _IEBodyReadText ($oIE)
$text_break = StringReplace($sText, "К сожалению, нить Вашей связи с Хаддан оборвалась. Пожалуйста, войдите в Хаддан заново.", "-")
If @extended >= 1 then _auto_login()
$end = 0
AdlibRegister("info",1000)
While 1
$text_info_health = 'Проверка здоровья....'
_check_health()
If $health[1] < $health[2]*0.2 then
$text_info_health = 'Проверка здоровья....Fault'& @CRLF & _
'Доступно '& $health[1] & ' из '& $health[2] & 'Порог = '& $health[2]*0.2
_repair()
Else
$text_info_health = 'Проверка здоровья....ОК'& @CRLF & _
'Доступно '& $health[1] & ' из '& $health[2] & 'Порог = '& $health[2]*0.2
EndIf
;переход на страницу боя
$oFrames_end_f = _IEFrameGetCollection ($oIE)
$iNumFrames = @extended
For $i = 0 to ($iNumFrames - 1)
$oFrame_end_f = _IEFrameGetCollection ($oIE, $i)
$oLinks = _IELinkGetCollection ($oFrame_end_f)
For $oLink In $oLinks
;MsgBox(0, "Link Info", $oLink.innertext)
$sLinkText = _IEPropertyGet($oLink, "innerText")
If StringInStr($sLinkText, 'поединки') Then
;IF $oLink.innertext == 'Ударить!' then
_IEAction($oLink, "click")
_IELoadWaitFrame()
;_IELoadWait($oFrame_l)
;sleep(1000)
EndIf
Next
Next
ShellExecute("msg.exe")
_accept()
; sleep(100)
;MsgBox(0,"","отработка" )
;ToolTip('Ждем появления сообщения о принятии заявки......'&@CRLF&$load,100,100)
_IELoadWaitFrame()
Do
_fight()
$oFrames_end_f = _IEFrameGetCollection ($oIE)
$iNumFrames = @extended
For $i = 0 to ($iNumFrames - 1)
$oFrame_end_f = _IEFrameGetCollection ($oIE, $i)
$oImgs = _IEImgGetCollection ($oFrame_end_f)
For $oImg In $oImgs
;MsgBox(0, "Img Info", "src=" & $oImg.id)
if $oImg.alt == "Бой закончен! Вы выжили! Кликните, чтобы выйти из боя." then
$oImg.click
$end = 1
_IELoadWait($oFrame_end_f)
ExitLoop
EndIf
Next
Next
Until $end = 1 ;_IEImgClick ($oIE, "Бой закончен! Вы выжили! Кликните, чтобы выйти из боя.", "alt")
$end = 0
Wend
Func _auto_login()
Local $login = 'Bykva-Iob'
Local $pass = 'woozap'
_IELinkClickByText ($oIE, "Вход")
_IELoadWait($oIE)
$oForm = _IEFormGetObjByName ($oIE, "frmLogin")
$oQuery_u = _IEFormElementGetObjByName ($oForm, "username")
$oQuery_p = _IEFormElementGetObjByName ($oForm, "passwd")
_IEFormElementSetValue ($oQuery_u, $login)
_IEFormElementSetValue ($oQuery_p, $pass)
_IEFormSubmit ($oForm)
_IELoadWait($oIE)
EndFunc
Func _fight()
$block_1 = Random(1,5,1)
Do
sleep(10)
$block_2 = Random(1,5,1)
Until $block_1 <> $block_2
$push_1 = Random(1,5,1)
$push_2 = Random(1,5,1)
Switch $block_1
case 1
_new_click('blk1')
case 2
_new_click('blk2')
case 3
_new_click('blk3')
case 4
_new_click('blk4')
case 5
_new_click('blk5')
EndSwitch
Switch $block_2
case 1
_new_click('blk1')
case 2
_new_click('blk2')
case 3
_new_click('blk3')
case 4
_new_click('blk4')
case 5
_new_click('blk5')
EndSwitch
Switch $push_1
case 1
_new_click('kill1')
case 2
_new_click('kill2')
case 3
_new_click('kill3')
case 4
_new_click('kill4')
case 5
_new_click('kill5')
EndSwitch
Switch $push_2
case 1
_new_click('kill6')
case 2
_new_click('kill7')
case 3
_new_click('kill8')
case 4
_new_click('kill9')
case 5
_new_click('kill10')
EndSwitch
$oFrames_l = _IEFrameGetCollection ($oIE)
$iNumFrames = @extended
For $i = 0 to ($iNumFrames - 1)
$oFrame_l = _IEFrameGetCollection ($oIE, $i)
$oLinks = _IELinkGetCollection ($oFrame_l )
For $oLink In $oLinks
;MsgBox(0, "Link Info", $oLink.innertext)
$sLinkText = _IEPropertyGet($oLink, "innerText")
If StringInStr($sLinkText, 'Ударить!') or StringInStr($sLinkText, 'Ударить 2-й раз!') Then
;IF $oLink.innertext == 'Ударить!' then
_IEAction($oLink, "click")
_IELoadWaitFrame()
;_IELoadWait($oFrame_l)
;sleep(1000)
EndIf
Next
Next
EndFunc
Func _new_click($id_name) ; клик мышкой по рандомно выбранному блоку/удару
$oFrames = _IEFrameGetCollection ($oIE)
$iNumFrames = @extended
For $i = 0 to ($iNumFrames - 1)
$oFrame = _IEFrameGetCollection ($oIE, $i)
$oImgs = _IEImgGetCollection ($oFrame)
if @ERROR then ExitLoop
For $oImg In $oImgs
;MsgBox(0, "Img Info", "src=" & $oImg.id)
if $oImg.id == $id_name then
;MsgBox(0,"",$oImg.id & @CRLF & _
; $oImg.name& @CRLF & _
; $oImg.src,1)
;$oImg.focus
;$oImg.click
$iScreenX = _IEPropertyGet($oImg, "screenx")
$iScreenY = _IEPropertyGet($oImg, "screeny")
$iBrowserX = _IEPropertyGet($oImg, "browserx")
$iBrowserY = _IEPropertyGet($oImg, "browserY")
$iWidth = _IEPropertyGet($oImg, "width")
$iHeight = _IEPropertyGet($oImg, "height")
MouseClick('left',$iScreenX+$iWidth/2, $iScreenY+$iHeight/2)
EndIf
Next
Next
EndFunc
Func _accept() ; принятие заявки на бой
$oFrames_end_a = _IEFrameGetCollection ($oIE)
$iNumFrames = @extended
For $i = 0 to ($iNumFrames - 1)
$oFrame_end_a = _IEFrameGetCollection ($oIE, $i)
$oLinks = _IELinkGetCollection ($oFrame_end_a)
For $oLink In $oLinks
IF $oLink.href == "javascript:acceptRequest(0, 1, '-4')" then
_IEAction($oLink, "click")
ExitLoop
;_IELoadWaitFrame()
EndIf
Next
Next
EndFunc
Func _check_health() ;получаем значение хп
$oFrames_end_f = _IEFrameGetCollection ($oIE)
$iNumFrames = @extended
For $i = 0 to ($iNumFrames - 1)
$oFrame_end_f = _IEFrameGetCollection ($oIE, $i)
$oInputs = _IETagNameGetCollection ($oFrame_end_f, "DIV")
For $oInput In $oInputs
if $oInput.id == 'lHPText' then
;MsgBox(0,"",$oInput.innertext)
$health = StringSplit($oInput.innertext,'/')
;return $health[1]
ExitLoop
EndIf
Next
Next
EndFunc
Func _repair() ; ожидание восстановления всего хп
$ok = 0
$text_info_run_func = "запущена функция _repair()"
Do
Sleep(100)
$oFrames_end_f = _IEFrameGetCollection ($oIE)
$iNumFrames = @extended
For $i = 0 to ($iNumFrames - 1)
$oFrame_end_f = _IEFrameGetCollection ($oIE, $i)
$oInputs = _IETagNameGetCollection ($oFrame_end_f, "DIV")
For $oInput In $oInputs
if $oInput.id == 'lHPText' then
;MsgBox(0,"",$oInput.innertext)
$health = StringSplit($oInput.innertext,'/')
if $health[1] <> $health[2] then
$text_info_health = 'Проверка здоровья....Fault'& @CRLF & _
'Доступно '& $health[1] & ' из '& $health[2] & 'Порог = '& $health[2]*0.2
Else
$ok = 1
$text_info_health = 'Проверка здоровья....ОК'& @CRLF & _
'Доступно '& $health[1] & ' из '& $health[2] & 'Порог = '& $health[2]*0.2
EndIf
EndIf
Next
Next
Until $ok = 1
EndFunc
Func info()
ToolTip($text_info_run_func&@CRLF&$text_info_health,100,100)
EndFunc
Func _IELoadWaitFrame() ; ожидание загрузки всех фреймов
$oFrames_w = _IEFrameGetCollection ($oIE)
$iNumFrames = @extended
For $i = 0 to ($iNumFrames - 1)
$oFrame_w = _IEFrameGetCollection ($oIE, $i)
_IELoadWait($oFrame_w)
Next
EndFunc
Вот код msg.exe:
Код:
While 1
sleep(100)
If WinExists("Сообщение с веб-страницы","") Then ControlClick("Сообщение с веб-страницы", "", "[ID:1]")
wend
Если вы скрипт запустите, он откроет игру, откроет станицу с выбором боя и примет бой это все без мышки, а дальше выбор ударов и другого с мышкой что вы и увидите. Кликание мышкой сделано в этой функции _new_click($id_name) , $id_name - название блока или удара, оно выбирается рандомно в функции _fight().
Спасибо.