Что нового

[Удивительный колхоз] Рабочий Бот

Shootclick

Новичок
Сообщения
6
Репутация
1
Доброго времени суток дорогие форумчане​

Это мой первый проект, поэтому если будут какие либо ошибки не стесняйтесь говорите.
Приму любую критику(адекватную) :smile:

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&amp;0=id&amp;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
Добавлено: Функция кормежки(заранее надо закупить животных)
Добавлено: Посадка Укропа или Петрушки в зависимости от запасов в амбаре(пример: Либо Петрушка, либо Укроп, и укроп и петрушка)
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
В фунциях Posad_ukr() и Posad_pet() вы вызываете StringRegExp но результаты не анализируете. И в редакторе SciTe нажмите Ctrl+T :smile:
 
Автор
S

Shootclick

Новичок
Сообщения
6
Репутация
1
Регэкспом я проверяю есть ли например готовая к посеву грядка и тогда выполняю действие, если я не правильно понял извини, напиши пример.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Может быть потерялись If StringRegExp(...) Then ?
 
Автор
S

Shootclick

Новичок
Сообщения
6
Репутация
1
Большое спасибо и в правду потерял, исправлю в обновленной версии, минут через 20
 

3D_ARTIST

Новичок
Сообщения
9
Репутация
0
Чувак, знаешь в чём суть, мы написали бота на авто ит ещё полтора года тому назад. Благодаря нам и появились выражения в игре БОТ, Капча ))) проблема с капчей уже давно решена :smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
3D_ARTIST сказал(а):
Чувак, знаешь в чём суть, мы написали бота на авто ит ещё полтора года тому назад. Благодаря нам и появились выражения в игре БОТ, Капча ))) проблема с капчей уже давно решена :smile:
Дак выложи, где пруф?
 
Автор темы Похожие темы Форум Ответы Дата
S Боты для игр 3
Верх