Некоторое время назад начал играть в ботву. Постоянно сидеть и тыкать кнопочки нет ни времени ни желания. По этой причине решил написать бота.
За бодалку большое спасибо автору http://autoit-script.ru/index.php/topic,6847.0.html
MISSION COMPLETED
Копатель Lite:
Умеет копать, умеет закупать инструмент.
Все остальное можно найти...
Full версия гоняет летунов в БП, бодается, бодается по списку, открывает поляны, следит за зверем(выпускает/прячет) и много чего еще.
За бодалку большое спасибо автору http://autoit-script.ru/index.php/topic,6847.0.html
MISSION COMPLETED
Копатель Lite:
Код:
; Лайт версия копателя, после обновлений игры
#include <IE.au3>
HotKeySet("{`}", "Terminate") ;хот кей для остановки бота - "Ё"
Global $oIE = _IEAttach("Битва за") ;подключаемся к окну ИЕ
Global $Dig='mine.php?a=open&m=dig&k=' ;Добыть кри
Global $Reset='mine.php?a=open&m=reset&k=' ;Продолжить поиск
Global $Open='mine.php?a=open' ;Смотреть в карьер
$sHTML=_IEBodyReadHTML($oIE)
Global $lvl=StringRegExp($sHTML,'safe:\|(.*?)\|;safe4',1) ;запоминаем лвл при старте бота
If $lvl=0 Then
$oIEt = _IEAttach("[CLASS:IEFrame]", 'Instance')
_IENavigate($oIEt,'http://g1.botva.ru/index.php')
Sleep(500)
Send('{SPACE}')
EndIf
While 1
Switch MainTimers() ; рулевой :)
Case 1
If Karer()=1 Then
_IELinkClickByText($oIE, 'Шахта')
LinkClick($Open)
Else
ButtonPres($oIE,'РАБОТАТЬ')
EndIf
Case 2
DigOrRes() ; to be, or not to be
Case 3
LinkClick($Open) ; если таймер в карьере 0 и я не в карьере
Case 4
Sleep(15000)
Case Else
Sleep(1000)
;~ MsgBox(0,0,'Swith error',3)
$oIEbc = _IEAttach("[CLASS:IEFrame]", 'Instance')
$sUrlNew = 'http://g1.botva.ru/post.php'
_IENavigate($oIEbc, $sUrlNew)
Sleep(1000)
EndSwitch
WEnd
Func MainTimers() ;определение действий по игровому таймеру
_MyLoadWait()
RandomSleep()
$oTimers=_IETagNameGetCollection($oIE,'DIV')
For $oTimer in $oTimers
If $oTimer.id=='rmenu1' and $oTimer.classname=='extend1' Then
If StringInStr($oTimer.innertext,'Я свободен!') Then
Return 1
EndIf
If StringInStr($oTimer.innertext,'Работа в карьере') Then
$wt=WorkTime()
$kt=Karer()
If $wt=0 And $kt=0 Then
Return 2
EndIf
If $wt=0 And $kt=1 Then
Return 3
EndIf
If $wt=1 Then
Return 4
EndIf
EndIf
ExitLoop
EndIf
Next
EndFunc
Func WorkTime() ;функция проверки таймера копки
_MyLoadWait()
$wDIVs=_IETagNameGetCollection($oIE,'DIV')
For $wDIV in $wDIVs
If $wDIV.id=='rmenu1' and $wDIV.classname=='extend1' Then
$wTimes=_IETagNameGetCollection($wDIV,'A')
If @extended < 10 Then
Return 1
EndIf
For $wTime in $wTimes
If $wTime.classname='timer link' Then
$wMin=StringRegExp($wTime.innertext,'\d{2}:(.*?):\d{2}',1)
$wSec=StringRegExp($wTime.innertext,'\d{2}:\d{2}:(\d{2})',1)
If $wMin<>0 And $wSec<>0 And $wMin[0]=0 And $wSec[0]=0 Then
Return 0
Else
Return 1
EndIf
ExitLoop
EndIf
Next
ExitLoop
EndIf
Next
EndFunc
Func Karer() ;функция проверки в карьери ли я?
_MyLoadWait()
$oPlaces=_IETagNameGetCollection($oIE,'DIV')
For $oPlace in $oPlaces
If $oPlace.id=='crumbs' Then
If StringInStr($oPlace.innertext,'Шахта') Then
If StringInStr($oPlace.innertext,'Карьер') Then
Return 0
Else
Return 1
EndIf
Else
Return 1
EndIf
ExitLoop
EndIf
Next
EndFunc
Func DigOrRes() ;смотрим шанс выкопать кри добываем/продолжаем
_MyLoadWait()
RandomSleep()
$oProcs=_IETagNameGetCollection($oIE,'P')
For $oProc in $oProcs
If $oProc.classname=='red_line_mine' Then
$proc=StringRegExp($oProc.innertext,'Вероятность успеха - (.*?) \%',1)
If $proc<>0 Then
If $proc[0]>42 Then
LinkClick($Dig)
ChargeCheck()
Else
LinkClick($Reset)
EndIf
EndIf
ExitLoop
EndIf
Next
EndFunc
Func RandomSleep() ;Случайное ожидание от 200 до 600 мс
$r=Random(2,6,1)
Sleep($r*100)
EndFunc
Func Terminate() ;функция остановки бота
MsgBox(64,'','Exit Script',3)
Exit 0
EndFunc
Func LinkClick($FocusLink) ;Клик по кнопкам с уникальными ссылками
_MyLoadWait()
RandomSleep()
$oLinks=_IELinkGetCollection($oIE)
For $oLink in $oLinks
if StringInStr($oLink.href,$FocusLink) Then
_IEAction($oLink,'click')
_IELoadWait($oIE)
ExitLoop
EndIf
Next
EndFunc
Func ButtonPres($TagCollect, $TagValue) ;Функция нажатия на кнопку c $TagVaule
_MyLoadWait()
$oInputs = _IETagNameGetCollection($TagCollect, 'input')
For $oInput In $oInputs
If $oInput.type == 'submit' And $oInput.value == $TagValue Then ;тогда нападаем :)
_IEAction($oInput, 'click')
_IELoadWait ($oIE)
ExitLoop
EndIf
Next
EndFunc
Func InvSet() ;функция заполнения ползунков в купильне
RandomSleep()
$oSlider1 = _IEGetObjById($oIE,'slider_v_4')
$oSlider2 = _IEGetObjById($oIE,'slider_v_5')
$oSlider3 = _IEGetObjById($oIE,'slider_v_6')
_IEFormElementSetValue($oSlider1, $lvl[0]) ; $lvl это лвл перса и кол во инструментов
_IEFormElementSetValue($oSlider2, $lvl[0])
_IEFormElementSetValue($oSlider3, $lvl[0])
_IEFormSubmit($oIE)
EndFunc
Func ChargeCheck() ;функция проверки зарядов КИРКИ(кол-во инстр. одинаково)
_MyLoadWait()
$oTables = _IETableGetCollection ($oIE)
For $oTable in $oTables
If $oTable.classname=='default padding5' Then
$aTableData = _IETableWriteToArray ($oTable)
$charge=StringRegExp($aTableData[0][1],'Зарядов (\d{2}) раз',1)
If $charge<>0 And $charge[0]<$lvl[0]*2 Then ; если зарядов меньше лвл*2
_IELinkClickByText($oIE, 'Шахта') ; жмем кнопку шахта
RandomSleep()
_IELinkClickByText($oIE, 'Смотреть') ; жмем кнопку Смотреть, попадаем в купильню
InvSet()
ButtonPres($oIE,'КУПИТЬ')
EndIf
ExitLoop
EndIf
Next
EndFunc
Func _MyLoadWait()
While Not (String($oIE.readyState) = "complete" Or $oIE.readyState = 4)
Sleep(100)
WEnd
EndFunc
Умеет копать, умеет закупать инструмент.
Все остальное можно найти...
Full версия гоняет летунов в БП, бодается, бодается по списку, открывает поляны, следит за зверем(выпускает/прячет) и много чего еще.