Shootclick
Новичок
- Сообщения
- 6
- Репутация
- 1
Доброго времени суток дорогие форумчане
Это мой первый проект, поэтому если будут какие либо ошибки не стесняйтесь говорите.
Приму любую критику(адекватную)
http://kolhoz.mobi Собственно сайт игры.
Сам бот:
Код:
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.8.1
Author: Gorez
Script Function:
Template AutoIt script.
#ce ----------------------------------------------------------------------------
; Script Start - Add your code below here
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
; Press Esc to terminate script, Pause/Break to "pause"
Global $Paused
;=============Клавиши управления=============
HotKeySet("{1}", "TogglePause")
HotKeySet("{ESC}", "Terminate")
HotKeySet("+!d", "ShowMessage") ;Shift-Alt-d
;============================================
; Start GUICreate
$Form1 = GUICreate("Бот программа для Удивительного колхоза", 800, 600, 192, 114)
$Obj1 = ObjCreate("Shell.Explorer.2")
$Obj1_ctrl = GUICtrlCreateObj($Obj1, 0, 0, 770, 550)
GUISetState(@SW_SHOW)
_IENavigate($Obj1, "kolhoz.mobi")
_IELoadWait($Obj1)
sleep(300)
;Stop GUICreate
Global $sText = _IEBodyReadText($Obj1)
$sHTML = _IEBodyReadHTML($Obj1)
if (@HOUR = 22) and (@MIN= 00) Then
TrayTip("Внимание","Бот остановлен ровно на один час.",5,1)
sleep (3600000)
Endif
if (@HOUR = 00) and (@MIN= 00) Then
TrayTip("Внимание","Бот остановлен ровно на один час.",5,1)
sleep (3600000)
Endif
;Начало рулевого кода!!
While 1
Switch MainNumber()
case 1
Griadky()
case 1.2
Proverka_posad()
case 1.3
Posad_ukr()
case 1.4
Posad_pet()
case 1.5
Posad_raznoe()
case 2
proverka_ukr()
case 3
Proverka_zagon()
EndSwitch
WEnd
;Конец рулевого кода!
func MainNumber()
$sText = _IEBodyReadText($Obj1)
_IEAction($Obj1, "refresh")
sleep(2000)
TrayTip("Загружаю...","Первое условие",5,1)
if StringRegExp($sText, '(?s).*Полить.*', 0) Or StringRegExp($sText, '(?s).*Собрать урожай.*', 0) Or StringRegExp($sText, '(?s).*Удобрить.*', 0) Then ;Если да, выполняем фун-ию
return 1
EndIf
TrayTip("Загружаю...","Второе условие",5,1)
If StringRegExp($sText, '(?s).* готовая к посеву .*', 0) Then
return 1.2
EndIf
TrayTip("Загружаю...","Третье условие",5,1)
if StringRegExp($sText, '(?s).*Погреб.*\(.\).*', 0)Then; Если есть, выполняем проверку в амбаре
return 2
EndIf
TrayTip("Загружаю...","Четвертое условие",5,1)
if StringRegExp($sText, '(?s).*Загоны.*\(.\).*',0)Then
Return 3
EndIf
EndFunc
;Начало всех функций и до конца
;==========================================Действия на грядке==========================================
Func Griadky()
$sText = _IEBodyReadText($Obj1)
while StringRegExp($sText, '(?s).*Собрать урожай.*', 0)
_IELinkClickByText($Obj1, "Собрать урожай")
sleep(1000) ;чтобы сработало
$sText = _IEBodyReadText($Obj1)
wend
$sText = _IEBodyReadText($Obj1)
while StringRegExp($sText, '(?s).*Полить всё.*', 0)
_IELinkClickByText($Obj1, "Полить всё")
sleep(1000) ;чтобы сработало
$sText = _IEBodyReadText($Obj1)
wend
$sText = _IEBodyReadText($Obj1)
while StringRegExp($sText, '(?s).*Вскопать всё.*', 0)
_IELinkClickByText($Obj1, "Вскопать всё")
sleep(1000) ;чтобы сработало
$sText = _IEBodyReadText($Obj1)
wend
$sText = _IEBodyReadText($Obj1)
while StringRegExp($sText, '(?s).*Удобрить всё.*', 0)
_IELinkClickByText($Obj1, "Удобрить всё")
sleep(1000) ;чтобы сработало
$sText = _IEBodyReadText($Obj1)
wend
EndFunc
;==============================================================================================
;==================================Посадить разные семена======================================
Func Posad_raznoe()
If not StringRegExp($sText, '(?s).*Укроп.*', 0)Then
ConsoleWrite(2)
return 1.3
EndIf
if not StringRegExp($sText, '(?s).*Петрушка.*', 0)Then ; Если есть свободная грядка, сожаем Укроп
ConsoleWrite(3)
return 1.4
EndIf
EndFunc
;==============================================================================================
;===================================Дейсвтия в погребе=========================================
Func Pogreb()
$sText = _IEBodyReadText($Obj1)
if StringRegExp($sText, '(?s).*Заготовить всё.*', 0) then
_IELinkClickByText($Obj1, "Заготовить всё")
Sleep(1000)
_IELinkClickByText($Obj1, "Поставить")
endif
If StringRegExp($sText, '(?s).*Прогреб.*',0)Then ; проверяем в погребе мы или нет
sleep(2000)
Else
_IELinkClickByText($Obj1, "Погреб")
EndIf
While StringRegExp($sText, '(?s).*Продать.*', 0)
_IELinkClickByText($Obj1, "Продать")
Sleep(1000)
$sText = _IEBodyReadText($Obj1)
WEnd
_IELinkClickByText($Obj1, "Грядки")
EndFunc
;====================================================================================================
;==========================================Проверка запасов Укропа в амбаре=================================
Func Proverka_ukr()
_IELinkClickByText($Obj1, "Амбар")
$sText = _IEBodyReadText($Obj1)
$kolvo_ukr = StringRegExp($sText, '(?s)(?:Укроп) \((\d+)\)',3)
if not @error Then
For $x_001 = 0 To UBound($kolvo_ukr) - 1
If $kolvo_ukr[$x_001] > 20 then ; Если Укропа больше 20, идем проверять Петрушку
Proverka_pet()
Else
_IELinkClickByText($Obj1, "Грядки")
endif
Next
EndIf
EndFunc
;===========================================================================================================
;==========================================Проверка запасов Петрушки в амбаре=================================
Func Proverka_pet()
$kolvo_pet = StringRegExp($sText, '(?s)(?:Петрушка) \((\d+)\)',3)
ConsoleWrite($kolvo_pet)
if not @error then
For $x_002 = 0 to UBound ($kolvo_pet) -1
if $kolvo_pet[$x_002] > 20 then
_IELinkClickByText($Obj1, "Погреб")
Pogreb()
Else
_IELinkClickByText($Obj1, "Грядки")
endif
Next
EndIf
EndFunc
;===========================================================================================================
;================================Проверка запасов для определения что будем сажать==========================
Func Proverka_posad()
TrayTip("Выполняю...","Второе условие, подсчет",5,1)
_IELinkClickByText($Obj1, "Амбар")
$sText = _IEBodyReadText($Obj1)
$kolvo_ukro = StringRegExp($sText, '(?s)(?:Укроп) \((\d+)\)', 3); Проверяем сколько Укропа
$kolvo_petr = StringRegExp($sText, '(?s)(?:Петрушка) \((\d+)\)', 3) ;Проверяем сколько Петрушки
For $i = 0 To UBound($kolvo_ukro) - 1
For $j = 0 To UBound($kolvo_petr) - 1
If $kolvo_ukro[$i] = $kolvo_petr[$j] Then ; Если Укропа = Петрушки делаем
TrayTip("Посчитал...", "Выполняю переход на посадку укропа и петрушки", 5, 1)
Posad_raznoe()
ElseIf Number($kolvo_ukro[$i]) > Number($kolvo_petr[$j]) Then ; Если Укропа больше чем Петрушки делаем
TrayTip("Посчитал...","Выполняю переход на посадку петрушки",5,1)
Posad_pet()
Else
TrayTip("Посчитал...","Выполняю переход на посадку укропа",5,1)
Posad_ukr()
EndIf
Next
Next
EndFunc
;============================================================================================================
;================================Проверка запасов для определения чем будем кормить==========================
Func Proverka_zagon()
_IELinkClickByText($Obj1, "Амбар")
$sText = _IEBodyReadText($Obj1)
$kolvo_ukrop = StringRegExp($sText,'(?s)(?:Укроп) \((\d+)\)',3); Проверяем сколько Укропа
$kolvo_petru = StringRegExp($sText,'(?s)(?:Петрушка) \((\d+)\)',3) ;Проверяем сколько Петрушки
for $z_001 = 0 To UBound($kolvo_ukrop) - 1
for $z_002 = 0 To UBound($kolvo_petru) - 1
If Number($kolvo_ukrop[$z_001]) > 200 then ; Если Укропа больше 200 то
Korm_zagonukr()
ElseIf Number($kolvo_petru[$z_002]) > 200 then ; Если Укропа больше 200 то
Korm_zagonpet()
Else
$sText = _IEBodyReadText($Obj1)
_IELinkClickByText($Obj1, "Грядки")
EndIf
Next
Next
EndFunc
;============================================================================================================
;;;; Body of program would go here ;;;;
While 1
Sleep(100)
WEnd
;=============================================Посадить Петрушку==============================================
Func Posad_pet()
_IELinkClickByText($Obj1, "Грядки")
$sText = _IEBodyReadText($Obj1)
TrayTip("Начинаю...","Выполнять посадку Петрушки",5,1)
;If StringRegExp($sText, '(?s).*готовая к посеву.*', 1) Then ; Проверяем есть ли готовая к посеву грядка
_IELinkClickByText($Obj1, "выбрать семена")
Sleep(1000)
;Else
; TrayTip("Ошибка.","Условаия для посадки Петрушки не выполнены",5,1)
;EndIf
$sText = _IEBodyReadText($Obj1)
_IELinkClickByText($Obj1, "Петрушка")
sleep(1000) ;чтобы сработало
$sText = _IEBodyReadText($Obj1)
If StringRegExp($sText, '(?s).*Сменить удобрение.*', 0) Then
_IELinkClickByText($Obj1, "Сменить удобрение")
Sleep(1000)
EndIf
$sText = _IEBodyReadText($Obj1)
_IELinkClickByText($Obj1, "Торф")
Sleep(1000)
$sText = _IEBodyReadText($Obj1)
If StringRegExp($sText, '(?s).*Посадить Петрушку.*', 0)Then
_IELinkClickByText($Obj1, "Посадить Петрушку")
sleep(1000) ;чтобы сработало
$sText = _IEBodyReadText($Obj1)
EndIf
If StringRegExp($sText, '(?s).*Посадить Петрушку.*', 0)Then
_IELinkClickByText($Obj1, "Посадить Петрушку")
sleep(1000) ;чтобы сработало
$sText = _IEBodyReadText($Obj1)
Sleep(5000)
EndIf
TrayTip("Заканчиваю","Выполнять посадку Петрушки",5,1)
EndFunc
;===================================================================================================
;=============================================Посадить Укроп========================================
Func Posad_ukr()
_IELinkClickByText($Obj1, "Грядки")
$sText = _IEBodyReadText($Obj1)
TrayTip("Начинаю...","Выполнять посадку Укропа",5,1)
If StringRegExp($sText, '(?s).*готовая к посеву.*', 0) Then ; Проверяем есть ли готовая к посеву грядка
_IELinkClickByText($Obj1, "выбрать семена")
Sleep(1000)
Else
TrayTip("Ошибка.","Условаия для посадки Укропа не выполнены",5,1)
EndIf
$sText = _IEBodyReadText($Obj1)
_IELinkClickByText($Obj1, "Укроп")
sleep(1000) ;чтобы сработало
$sText = _IEBodyReadText($Obj1)
If StringRegExp($sText, '(?s).*Сменить удобрение.*', 0) Then
_IELinkClickByText($Obj1, "Сменить удобрение")
Sleep(1000)
$sText = _IEBodyReadText($Obj1)
_IELinkClickByText($Obj1, "Торф")
Sleep(1000)
EndIf
$sText = _IEBodyReadText($Obj1)
if StringRegExp($sText, '(?s).*Посадить Укроп.*', 0)Then
_IELinkClickByText($Obj1, "Посадить Укроп")
sleep(1000) ;чтобы сработало
EndIf
$sText = _IEBodyReadText($Obj1)
_IELinkClickByText($Obj1, "Посадить Укроп")
sleep(1000) ;чтобы сработало
$sText = _IEBodyReadText($Obj1)
TrayTip("Заканчиваю...","Выполнять посадку Укропа",5,1)
Sleep(5000)
EndFunc
;=======================================================================================
;==========================================Кормить животных Петрушкой=====================
Func Korm_zagonpet()
_IELinkClickByText($Obj1, "Загоны")
TrayTip("ВЫполняю","Функцию нажатия покормить",5,1)
if StringRegExp($sText, '(?s).*Покормить.*') Then
_IELinkClickByText($Obj1, "Покормить")
EndIf
TrayTip("Выполняю","функцию кормить петрушкой",5,1)
if StringRegExp($sText, '(?s).*Петрушка.*') Then
_IELinkClickByText($Obj1, "Кормить Петрушкой")
EndIf
if StringRegExp($sText, '(?s).*Загоны.*') and StringRegExp($sText, '(?s).*Продать.*') Then
_IELinkClickByText($Obj1, "Продать")
EndIf
EndFunc
;========================================================================================
;==========================================Кормить животных Укропом=====================
Func Korm_zagonukr()
_IELinkClickByText($Obj1, "Загоны")
TrayTip("ВЫполняю","Функцию нажатия покормить",5,1)
if StringRegExp($sText, '(?s).*Покормить.*') Then
_IELinkClickByText($Obj1, "Покормить")
EndIf
TrayTip("Выполняю","функцию кормить укропом",5,1)
if StringRegExp($sText, '(?s).*Укроп.*') Then
_IELinkClickByText($Obj1, "Кормить Укропом")
EndIf
if StringRegExp($sText, '(?s).*Загоны.*') and StringRegExp($sText, '(?s).*Продать.*') Then
_IELinkClickByText($Obj1, "Продать")
EndIf
EndFunc
;========================================================================================
;;;;;;;;
Func TogglePause()
$Paused = Not $Paused
While $Paused
Sleep(100)
ToolTip('Script is "Paused"', 0, 0)
WEnd
ToolTip("")
EndFunc ;==>TogglePause
Func Terminate()
Exit 0
EndFunc ;==>Terminate
Func ShowMessage()
MsgBox(4096, "", "This is a message.")
EndFunc ;==>ShowMessage
Func Timer()
$begin = TimerInit()
$off = 7200000
$dif = TimerDiff($begin)
if $off < $dif Then
EndIf
EndFunc
На данный момент Бот умеет:
1) Сажать Петрушку и Укроп
2) Ставить на засол в погребе
Что думаю сделать в будущем(после исправления ошибок в нынешнем)
1) Добавить функции с GUI выбором(что сажать)
2) Добавить функцию кормежки животных, а так же продажу
3) Ежедневный обмен денег на кристаллы(донат валюта, доп.инфа в игровой справке)
4) Выступления на арене (20+ уровень).
Единственная проблема на данный момент это капча, которая выскакивает после `3-4 часов использования ботом. Исходный код HTML странницы капчи:
Код:
<div class="block">
<div class="major ptm">Извините, но с вашего адреса идет слишком много запросов.
Пожалуйста, подтвердите, что Вы не робот.</div>
<div class="pt">
<img alt="secret" src=";jsessionid=6877EAF771B6A2613FAF7EF5A685569D?wicket:interface=:2:keyValue::IResourceListener::"/>
</div>
<div class="pt">
<form action=";jsessionid=6877EAF771B6A2613FAF7EF5A685569D?wicket:bookmarkablePage=:ferma.wicket.bot.BotCheckPage&0=id&wicket:interface=:2:checkBotForm::IFormSubmitListener::" id="id1" method="post"><div style="width:0px;height:0px;position:absolute;left:-100px;top:-100px;overflow:hidden"><input type="hidden" name="id1_hf_0" id="id1_hf_0" /></div>
<label>
<span class="title">Введите цифры с картинки:</span>
<input type="text" value="" name="keyText"/>
</label>
<li class="pt">
<input type="submit" value="Я не робот"/>
</li>
</form>
</div>
</div>
Знаю что начальные условия и вызовы функций лучше сделать через case, но я в нем пока разбираюсь и в скором времени будет реализовано)).
Рекомендации по использованию:
1) Желательно использовать после 10 уровня
2) Отключать картинки в IE
UPD: Как и говорил более ли менее разобрался с "case", выложил новую версию с исправлениями, работа стала более продуманной.
Исправленo: ошибка If Then в Posad_ukr() and Posad_pet()
Добавлено: Использование функции Case
Добавлено: Функция кормежки(заранее надо закупить животных)
Добавлено: Посадка Укропа или Петрушки в зависимости от запасов в амбаре(пример: Либо Петрушка, либо Укроп, и укроп и петрушка)